From eafed64bea85f1ed46dddf004a4d77a246edabd1 Mon Sep 17 00:00:00 2001 From: Syed Daanish Date: Thu, 29 Jan 2026 13:52:46 +0000 Subject: [PATCH] Use embedded mruby for portablity --- .clangd | 9 +- Makefile | 46 +- README.md | 4 +- include/pch.h | 9 +- include/scripting/decl.h | 10 +- include/syntax/decl.h | 8 +- include/syntax/parser.h | 4 +- installer.sh | 56 +- libs/libruby/libruby.so | Bin 3836456 -> 0 bytes libs/libruby/ruby.h | 40 - libs/libruby/ruby/assert.h | 234 --- libs/libruby/ruby/atomic.h | 890 --------- libs/libruby/ruby/backward.h | 25 - libs/libruby/ruby/backward/2/assume.h | 56 - libs/libruby/ruby/backward/2/attributes.h | 165 -- libs/libruby/ruby/backward/2/bool.h | 36 - .../ruby/backward/2/gcc_version_since.h | 37 - libs/libruby/ruby/backward/2/inttypes.h | 131 -- libs/libruby/ruby/backward/2/limits.h | 99 - libs/libruby/ruby/backward/2/long_long.h | 73 - libs/libruby/ruby/backward/2/r_cast.h | 32 - libs/libruby/ruby/backward/2/rmodule.h | 36 - libs/libruby/ruby/backward/2/stdalign.h | 30 - libs/libruby/ruby/backward/2/stdarg.h | 69 - libs/libruby/ruby/backward/cxxanyargs.hpp | 700 ------- libs/libruby/ruby/config.h | 505 ----- libs/libruby/ruby/debug.h | 667 ------- libs/libruby/ruby/defines.h | 116 -- libs/libruby/ruby/digest.h | 72 - libs/libruby/ruby/encoding.h | 31 - libs/libruby/ruby/fiber/scheduler.h | 374 ---- libs/libruby/ruby/intern.h | 64 - libs/libruby/ruby/internal/abi.h | 58 - libs/libruby/ruby/internal/anyargs.h | 376 ---- libs/libruby/ruby/internal/arithmetic.h | 39 - libs/libruby/ruby/internal/arithmetic/char.h | 81 - .../libruby/ruby/internal/arithmetic/double.h | 72 - .../libruby/ruby/internal/arithmetic/fixnum.h | 60 - libs/libruby/ruby/internal/arithmetic/gid_t.h | 41 - libs/libruby/ruby/internal/arithmetic/int.h | 264 --- .../ruby/internal/arithmetic/intptr_t.h | 74 - libs/libruby/ruby/internal/arithmetic/long.h | 356 ---- .../ruby/internal/arithmetic/long_long.h | 135 -- .../libruby/ruby/internal/arithmetic/mode_t.h | 41 - libs/libruby/ruby/internal/arithmetic/off_t.h | 62 - libs/libruby/ruby/internal/arithmetic/pid_t.h | 41 - libs/libruby/ruby/internal/arithmetic/short.h | 113 -- .../libruby/ruby/internal/arithmetic/size_t.h | 66 - .../ruby/internal/arithmetic/st_data_t.h | 75 - libs/libruby/ruby/internal/arithmetic/uid_t.h | 41 - libs/libruby/ruby/internal/assume.h | 87 - libs/libruby/ruby/internal/attr/alloc_size.h | 32 - libs/libruby/ruby/internal/attr/artificial.h | 46 - libs/libruby/ruby/internal/attr/cold.h | 37 - libs/libruby/ruby/internal/attr/const.h | 46 - libs/libruby/ruby/internal/attr/constexpr.h | 84 - libs/libruby/ruby/internal/attr/deprecated.h | 75 - libs/libruby/ruby/internal/attr/diagnose_if.h | 42 - .../ruby/internal/attr/enum_extensibility.h | 32 - libs/libruby/ruby/internal/attr/error.h | 32 - libs/libruby/ruby/internal/attr/flag_enum.h | 33 - libs/libruby/ruby/internal/attr/forceinline.h | 40 - libs/libruby/ruby/internal/attr/format.h | 38 - .../libruby/ruby/internal/attr/maybe_unused.h | 38 - libs/libruby/ruby/internal/attr/noalias.h | 69 - libs/libruby/ruby/internal/attr/nodiscard.h | 45 - libs/libruby/ruby/internal/attr/noexcept.h | 91 - libs/libruby/ruby/internal/attr/noinline.h | 35 - libs/libruby/ruby/internal/attr/nonnull.h | 34 - libs/libruby/ruby/internal/attr/noreturn.h | 48 - libs/libruby/ruby/internal/attr/pure.h | 43 - libs/libruby/ruby/internal/attr/restrict.h | 44 - .../ruby/internal/attr/returns_nonnull.h | 37 - libs/libruby/ruby/internal/attr/warning.h | 32 - libs/libruby/ruby/internal/attr/weakref.h | 32 - libs/libruby/ruby/internal/cast.h | 50 - libs/libruby/ruby/internal/compiler_is.h | 45 - .../libruby/ruby/internal/compiler_is/apple.h | 40 - .../libruby/ruby/internal/compiler_is/clang.h | 37 - libs/libruby/ruby/internal/compiler_is/gcc.h | 45 - .../libruby/ruby/internal/compiler_is/intel.h | 40 - libs/libruby/ruby/internal/compiler_is/msvc.h | 56 - .../ruby/internal/compiler_is/sunpro.h | 54 - libs/libruby/ruby/internal/compiler_since.h | 61 - libs/libruby/ruby/internal/config.h | 155 -- libs/libruby/ruby/internal/constant_p.h | 38 - libs/libruby/ruby/internal/core.h | 35 - libs/libruby/ruby/internal/core/rarray.h | 585 ------ libs/libruby/ruby/internal/core/rbasic.h | 158 -- libs/libruby/ruby/internal/core/rbignum.h | 80 - libs/libruby/ruby/internal/core/rclass.h | 93 - libs/libruby/ruby/internal/core/rdata.h | 386 ---- libs/libruby/ruby/internal/core/rfile.h | 51 - libs/libruby/ruby/internal/core/rhash.h | 144 -- libs/libruby/ruby/internal/core/rmatch.h | 146 -- libs/libruby/ruby/internal/core/robject.h | 176 -- libs/libruby/ruby/internal/core/rregexp.h | 168 -- libs/libruby/ruby/internal/core/rstring.h | 578 ------ libs/libruby/ruby/internal/core/rstruct.h | 121 -- libs/libruby/ruby/internal/core/rtypeddata.h | 604 ------ libs/libruby/ruby/internal/ctype.h | 545 ----- libs/libruby/ruby/internal/dllexport.h | 112 -- libs/libruby/ruby/internal/dosish.h | 89 - .../ruby/internal/encoding/coderange.h | 202 -- libs/libruby/ruby/internal/encoding/ctype.h | 258 --- .../libruby/ruby/internal/encoding/encoding.h | 1060 ---------- .../libruby/ruby/internal/encoding/pathname.h | 184 -- libs/libruby/ruby/internal/encoding/re.h | 46 - libs/libruby/ruby/internal/encoding/sprintf.h | 78 - libs/libruby/ruby/internal/encoding/string.h | 346 ---- libs/libruby/ruby/internal/encoding/symbol.h | 100 - .../ruby/internal/encoding/transcode.h | 562 ------ libs/libruby/ruby/internal/error.h | 582 ------ libs/libruby/ruby/internal/eval.h | 400 ---- libs/libruby/ruby/internal/event.h | 154 -- libs/libruby/ruby/internal/fl_type.h | 948 --------- libs/libruby/ruby/internal/gc.h | 57 - libs/libruby/ruby/internal/glob.h | 113 -- libs/libruby/ruby/internal/globals.h | 209 -- libs/libruby/ruby/internal/has/attribute.h | 163 -- libs/libruby/ruby/internal/has/builtin.h | 117 -- libs/libruby/ruby/internal/has/c_attribute.h | 38 - .../libruby/ruby/internal/has/cpp_attribute.h | 86 - .../ruby/internal/has/declspec_attribute.h | 47 - libs/libruby/ruby/internal/has/extension.h | 33 - libs/libruby/ruby/internal/has/feature.h | 31 - libs/libruby/ruby/internal/has/warning.h | 31 - libs/libruby/ruby/internal/intern/array.h | 657 ------ libs/libruby/ruby/internal/intern/bignum.h | 846 -------- libs/libruby/ruby/internal/intern/class.h | 394 ---- libs/libruby/ruby/internal/intern/compar.h | 62 - libs/libruby/ruby/internal/intern/complex.h | 253 --- libs/libruby/ruby/internal/intern/cont.h | 282 --- libs/libruby/ruby/internal/intern/dir.h | 42 - libs/libruby/ruby/internal/intern/enum.h | 73 - .../libruby/ruby/internal/intern/enumerator.h | 259 --- libs/libruby/ruby/internal/intern/error.h | 287 --- libs/libruby/ruby/internal/intern/eval.h | 222 --- libs/libruby/ruby/internal/intern/file.h | 213 -- libs/libruby/ruby/internal/intern/gc.h | 392 ---- libs/libruby/ruby/internal/intern/hash.h | 320 --- libs/libruby/ruby/internal/intern/io.h | 661 ------- libs/libruby/ruby/internal/intern/load.h | 218 -- libs/libruby/ruby/internal/intern/marshal.h | 112 -- libs/libruby/ruby/internal/intern/numeric.h | 208 -- libs/libruby/ruby/internal/intern/object.h | 501 ----- libs/libruby/ruby/internal/intern/parse.h | 194 -- libs/libruby/ruby/internal/intern/proc.h | 353 ---- libs/libruby/ruby/internal/intern/process.h | 273 --- libs/libruby/ruby/internal/intern/random.h | 116 -- libs/libruby/ruby/internal/intern/range.h | 89 - libs/libruby/ruby/internal/intern/rational.h | 172 -- libs/libruby/ruby/internal/intern/re.h | 249 --- libs/libruby/ruby/internal/intern/ruby.h | 77 - libs/libruby/ruby/internal/intern/select.h | 86 - .../ruby/internal/intern/select/largesize.h | 214 -- .../ruby/internal/intern/select/posix.h | 144 -- libs/libruby/ruby/internal/intern/signal.h | 152 -- libs/libruby/ruby/internal/intern/sprintf.h | 159 -- libs/libruby/ruby/internal/intern/string.h | 1757 ----------------- libs/libruby/ruby/internal/intern/struct.h | 203 -- libs/libruby/ruby/internal/intern/thread.h | 492 ----- libs/libruby/ruby/internal/intern/time.h | 161 -- libs/libruby/ruby/internal/intern/variable.h | 628 ------ libs/libruby/ruby/internal/intern/vm.h | 431 ---- libs/libruby/ruby/internal/interpreter.h | 304 --- libs/libruby/ruby/internal/iterator.h | 513 ----- libs/libruby/ruby/internal/memory.h | 666 ------- libs/libruby/ruby/internal/method.h | 205 -- libs/libruby/ruby/internal/module.h | 177 -- libs/libruby/ruby/internal/newobj.h | 195 -- libs/libruby/ruby/internal/rgengc.h | 443 ----- libs/libruby/ruby/internal/scan_args.h | 534 ----- libs/libruby/ruby/internal/special_consts.h | 362 ---- libs/libruby/ruby/internal/static_assert.h | 77 - libs/libruby/ruby/internal/stdalign.h | 135 -- libs/libruby/ruby/internal/stdbool.h | 51 - libs/libruby/ruby/internal/symbol.h | 332 ---- libs/libruby/ruby/internal/value.h | 133 -- libs/libruby/ruby/internal/value_type.h | 449 ----- libs/libruby/ruby/internal/variable.h | 337 ---- libs/libruby/ruby/internal/warning_push.h | 124 -- libs/libruby/ruby/internal/xmalloc.h | 392 ---- libs/libruby/ruby/io.h | 1022 ---------- libs/libruby/ruby/io/buffer.h | 96 - libs/libruby/ruby/memory_view.h | 325 --- libs/libruby/ruby/missing.h | 342 ---- libs/libruby/ruby/onigmo.h | 952 --------- libs/libruby/ruby/oniguruma.h | 8 - libs/libruby/ruby/ractor.h | 264 --- libs/libruby/ruby/random.h | 359 ---- libs/libruby/ruby/re.h | 147 -- libs/libruby/ruby/regex.h | 43 - libs/libruby/ruby/ruby.h | 321 --- libs/libruby/ruby/st.h | 199 -- libs/libruby/ruby/subst.h | 26 - libs/libruby/ruby/thread.h | 235 --- libs/libruby/ruby/thread_native.h | 205 -- libs/libruby/ruby/util.h | 228 --- libs/libruby/ruby/version.h | 159 -- libs/libruby/ruby/vm.h | 54 - src/main.cc | 8 +- src/scripting/process.cc | 339 ++-- src/syntax/parser.cc | 11 +- 204 files changed, 234 insertions(+), 40822 deletions(-) delete mode 100644 libs/libruby/libruby.so delete mode 100644 libs/libruby/ruby.h delete mode 100644 libs/libruby/ruby/assert.h delete mode 100644 libs/libruby/ruby/atomic.h delete mode 100644 libs/libruby/ruby/backward.h delete mode 100644 libs/libruby/ruby/backward/2/assume.h delete mode 100644 libs/libruby/ruby/backward/2/attributes.h delete mode 100644 libs/libruby/ruby/backward/2/bool.h delete mode 100644 libs/libruby/ruby/backward/2/gcc_version_since.h delete mode 100644 libs/libruby/ruby/backward/2/inttypes.h delete mode 100644 libs/libruby/ruby/backward/2/limits.h delete mode 100644 libs/libruby/ruby/backward/2/long_long.h delete mode 100644 libs/libruby/ruby/backward/2/r_cast.h delete mode 100644 libs/libruby/ruby/backward/2/rmodule.h delete mode 100644 libs/libruby/ruby/backward/2/stdalign.h delete mode 100644 libs/libruby/ruby/backward/2/stdarg.h delete mode 100644 libs/libruby/ruby/backward/cxxanyargs.hpp delete mode 100644 libs/libruby/ruby/config.h delete mode 100644 libs/libruby/ruby/debug.h delete mode 100644 libs/libruby/ruby/defines.h delete mode 100644 libs/libruby/ruby/digest.h delete mode 100644 libs/libruby/ruby/encoding.h delete mode 100644 libs/libruby/ruby/fiber/scheduler.h delete mode 100644 libs/libruby/ruby/intern.h delete mode 100644 libs/libruby/ruby/internal/abi.h delete mode 100644 libs/libruby/ruby/internal/anyargs.h delete mode 100644 libs/libruby/ruby/internal/arithmetic.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/char.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/double.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/fixnum.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/gid_t.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/int.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/intptr_t.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/long.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/long_long.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/mode_t.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/off_t.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/pid_t.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/short.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/size_t.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/st_data_t.h delete mode 100644 libs/libruby/ruby/internal/arithmetic/uid_t.h delete mode 100644 libs/libruby/ruby/internal/assume.h delete mode 100644 libs/libruby/ruby/internal/attr/alloc_size.h delete mode 100644 libs/libruby/ruby/internal/attr/artificial.h delete mode 100644 libs/libruby/ruby/internal/attr/cold.h delete mode 100644 libs/libruby/ruby/internal/attr/const.h delete mode 100644 libs/libruby/ruby/internal/attr/constexpr.h delete mode 100644 libs/libruby/ruby/internal/attr/deprecated.h delete mode 100644 libs/libruby/ruby/internal/attr/diagnose_if.h delete mode 100644 libs/libruby/ruby/internal/attr/enum_extensibility.h delete mode 100644 libs/libruby/ruby/internal/attr/error.h delete mode 100644 libs/libruby/ruby/internal/attr/flag_enum.h delete mode 100644 libs/libruby/ruby/internal/attr/forceinline.h delete mode 100644 libs/libruby/ruby/internal/attr/format.h delete mode 100644 libs/libruby/ruby/internal/attr/maybe_unused.h delete mode 100644 libs/libruby/ruby/internal/attr/noalias.h delete mode 100644 libs/libruby/ruby/internal/attr/nodiscard.h delete mode 100644 libs/libruby/ruby/internal/attr/noexcept.h delete mode 100644 libs/libruby/ruby/internal/attr/noinline.h delete mode 100644 libs/libruby/ruby/internal/attr/nonnull.h delete mode 100644 libs/libruby/ruby/internal/attr/noreturn.h delete mode 100644 libs/libruby/ruby/internal/attr/pure.h delete mode 100644 libs/libruby/ruby/internal/attr/restrict.h delete mode 100644 libs/libruby/ruby/internal/attr/returns_nonnull.h delete mode 100644 libs/libruby/ruby/internal/attr/warning.h delete mode 100644 libs/libruby/ruby/internal/attr/weakref.h delete mode 100644 libs/libruby/ruby/internal/cast.h delete mode 100644 libs/libruby/ruby/internal/compiler_is.h delete mode 100644 libs/libruby/ruby/internal/compiler_is/apple.h delete mode 100644 libs/libruby/ruby/internal/compiler_is/clang.h delete mode 100644 libs/libruby/ruby/internal/compiler_is/gcc.h delete mode 100644 libs/libruby/ruby/internal/compiler_is/intel.h delete mode 100644 libs/libruby/ruby/internal/compiler_is/msvc.h delete mode 100644 libs/libruby/ruby/internal/compiler_is/sunpro.h delete mode 100644 libs/libruby/ruby/internal/compiler_since.h delete mode 100644 libs/libruby/ruby/internal/config.h delete mode 100644 libs/libruby/ruby/internal/constant_p.h delete mode 100644 libs/libruby/ruby/internal/core.h delete mode 100644 libs/libruby/ruby/internal/core/rarray.h delete mode 100644 libs/libruby/ruby/internal/core/rbasic.h delete mode 100644 libs/libruby/ruby/internal/core/rbignum.h delete mode 100644 libs/libruby/ruby/internal/core/rclass.h delete mode 100644 libs/libruby/ruby/internal/core/rdata.h delete mode 100644 libs/libruby/ruby/internal/core/rfile.h delete mode 100644 libs/libruby/ruby/internal/core/rhash.h delete mode 100644 libs/libruby/ruby/internal/core/rmatch.h delete mode 100644 libs/libruby/ruby/internal/core/robject.h delete mode 100644 libs/libruby/ruby/internal/core/rregexp.h delete mode 100644 libs/libruby/ruby/internal/core/rstring.h delete mode 100644 libs/libruby/ruby/internal/core/rstruct.h delete mode 100644 libs/libruby/ruby/internal/core/rtypeddata.h delete mode 100644 libs/libruby/ruby/internal/ctype.h delete mode 100644 libs/libruby/ruby/internal/dllexport.h delete mode 100644 libs/libruby/ruby/internal/dosish.h delete mode 100644 libs/libruby/ruby/internal/encoding/coderange.h delete mode 100644 libs/libruby/ruby/internal/encoding/ctype.h delete mode 100644 libs/libruby/ruby/internal/encoding/encoding.h delete mode 100644 libs/libruby/ruby/internal/encoding/pathname.h delete mode 100644 libs/libruby/ruby/internal/encoding/re.h delete mode 100644 libs/libruby/ruby/internal/encoding/sprintf.h delete mode 100644 libs/libruby/ruby/internal/encoding/string.h delete mode 100644 libs/libruby/ruby/internal/encoding/symbol.h delete mode 100644 libs/libruby/ruby/internal/encoding/transcode.h delete mode 100644 libs/libruby/ruby/internal/error.h delete mode 100644 libs/libruby/ruby/internal/eval.h delete mode 100644 libs/libruby/ruby/internal/event.h delete mode 100644 libs/libruby/ruby/internal/fl_type.h delete mode 100644 libs/libruby/ruby/internal/gc.h delete mode 100644 libs/libruby/ruby/internal/glob.h delete mode 100644 libs/libruby/ruby/internal/globals.h delete mode 100644 libs/libruby/ruby/internal/has/attribute.h delete mode 100644 libs/libruby/ruby/internal/has/builtin.h delete mode 100644 libs/libruby/ruby/internal/has/c_attribute.h delete mode 100644 libs/libruby/ruby/internal/has/cpp_attribute.h delete mode 100644 libs/libruby/ruby/internal/has/declspec_attribute.h delete mode 100644 libs/libruby/ruby/internal/has/extension.h delete mode 100644 libs/libruby/ruby/internal/has/feature.h delete mode 100644 libs/libruby/ruby/internal/has/warning.h delete mode 100644 libs/libruby/ruby/internal/intern/array.h delete mode 100644 libs/libruby/ruby/internal/intern/bignum.h delete mode 100644 libs/libruby/ruby/internal/intern/class.h delete mode 100644 libs/libruby/ruby/internal/intern/compar.h delete mode 100644 libs/libruby/ruby/internal/intern/complex.h delete mode 100644 libs/libruby/ruby/internal/intern/cont.h delete mode 100644 libs/libruby/ruby/internal/intern/dir.h delete mode 100644 libs/libruby/ruby/internal/intern/enum.h delete mode 100644 libs/libruby/ruby/internal/intern/enumerator.h delete mode 100644 libs/libruby/ruby/internal/intern/error.h delete mode 100644 libs/libruby/ruby/internal/intern/eval.h delete mode 100644 libs/libruby/ruby/internal/intern/file.h delete mode 100644 libs/libruby/ruby/internal/intern/gc.h delete mode 100644 libs/libruby/ruby/internal/intern/hash.h delete mode 100644 libs/libruby/ruby/internal/intern/io.h delete mode 100644 libs/libruby/ruby/internal/intern/load.h delete mode 100644 libs/libruby/ruby/internal/intern/marshal.h delete mode 100644 libs/libruby/ruby/internal/intern/numeric.h delete mode 100644 libs/libruby/ruby/internal/intern/object.h delete mode 100644 libs/libruby/ruby/internal/intern/parse.h delete mode 100644 libs/libruby/ruby/internal/intern/proc.h delete mode 100644 libs/libruby/ruby/internal/intern/process.h delete mode 100644 libs/libruby/ruby/internal/intern/random.h delete mode 100644 libs/libruby/ruby/internal/intern/range.h delete mode 100644 libs/libruby/ruby/internal/intern/rational.h delete mode 100644 libs/libruby/ruby/internal/intern/re.h delete mode 100644 libs/libruby/ruby/internal/intern/ruby.h delete mode 100644 libs/libruby/ruby/internal/intern/select.h delete mode 100644 libs/libruby/ruby/internal/intern/select/largesize.h delete mode 100644 libs/libruby/ruby/internal/intern/select/posix.h delete mode 100644 libs/libruby/ruby/internal/intern/signal.h delete mode 100644 libs/libruby/ruby/internal/intern/sprintf.h delete mode 100644 libs/libruby/ruby/internal/intern/string.h delete mode 100644 libs/libruby/ruby/internal/intern/struct.h delete mode 100644 libs/libruby/ruby/internal/intern/thread.h delete mode 100644 libs/libruby/ruby/internal/intern/time.h delete mode 100644 libs/libruby/ruby/internal/intern/variable.h delete mode 100644 libs/libruby/ruby/internal/intern/vm.h delete mode 100644 libs/libruby/ruby/internal/interpreter.h delete mode 100644 libs/libruby/ruby/internal/iterator.h delete mode 100644 libs/libruby/ruby/internal/memory.h delete mode 100644 libs/libruby/ruby/internal/method.h delete mode 100644 libs/libruby/ruby/internal/module.h delete mode 100644 libs/libruby/ruby/internal/newobj.h delete mode 100644 libs/libruby/ruby/internal/rgengc.h delete mode 100644 libs/libruby/ruby/internal/scan_args.h delete mode 100644 libs/libruby/ruby/internal/special_consts.h delete mode 100644 libs/libruby/ruby/internal/static_assert.h delete mode 100644 libs/libruby/ruby/internal/stdalign.h delete mode 100644 libs/libruby/ruby/internal/stdbool.h delete mode 100644 libs/libruby/ruby/internal/symbol.h delete mode 100644 libs/libruby/ruby/internal/value.h delete mode 100644 libs/libruby/ruby/internal/value_type.h delete mode 100644 libs/libruby/ruby/internal/variable.h delete mode 100644 libs/libruby/ruby/internal/warning_push.h delete mode 100644 libs/libruby/ruby/internal/xmalloc.h delete mode 100644 libs/libruby/ruby/io.h delete mode 100644 libs/libruby/ruby/io/buffer.h delete mode 100644 libs/libruby/ruby/memory_view.h delete mode 100644 libs/libruby/ruby/missing.h delete mode 100644 libs/libruby/ruby/onigmo.h delete mode 100644 libs/libruby/ruby/oniguruma.h delete mode 100644 libs/libruby/ruby/ractor.h delete mode 100644 libs/libruby/ruby/random.h delete mode 100644 libs/libruby/ruby/re.h delete mode 100644 libs/libruby/ruby/regex.h delete mode 100644 libs/libruby/ruby/ruby.h delete mode 100644 libs/libruby/ruby/st.h delete mode 100644 libs/libruby/ruby/subst.h delete mode 100644 libs/libruby/ruby/thread.h delete mode 100644 libs/libruby/ruby/thread_native.h delete mode 100644 libs/libruby/ruby/util.h delete mode 100644 libs/libruby/ruby/version.h delete mode 100644 libs/libruby/ruby/vm.h diff --git a/.clangd b/.clangd index 2796071..e9f6995 100644 --- a/.clangd +++ b/.clangd @@ -1,7 +1,8 @@ CompileFlags: - Add: [-I/home/syed/main/crib/include, -I/home/syed/main/crib/libs, -I/home/syed/main/crib/libs/libruby, c++20] + Add: [ + -I/home/syed/main/crib/include, + -I/home/syed/main/crib/libs, + -std=c++23 + ] Remove: [] Compiler: clang++ - -HeaderInsertion: - Policy: Never diff --git a/Makefile b/Makefile index bb704ee..30c40c8 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,7 @@ OBJ_DIR := build INCLUDE_DIR := include TARGET_DEBUG := $(BIN_DIR)/crib-dbg -TARGET_RELEASE_32 := $(BIN_DIR)/crib-ruby3.2 -TARGET_RELEASE_34 := $(BIN_DIR)/crib-ruby3.4 +TARGET_RELEASE := $(BIN_DIR)/crib PCH_DEBUG := $(OBJ_DIR)/debug/pch.h.gch PCH_RELEASE := $(OBJ_DIR)/release/pch.h.gch @@ -13,22 +12,12 @@ PCH_RELEASE := $(OBJ_DIR)/release/pch.h.gch CCACHE := ccache CXX := $(CCACHE) clang++ -RUBY32_INC := -I./libs/libruby -RUBY32_LIB := libs/libruby/libruby.so -RUBY32_PATCH := patchelf --replace-needed libruby-3.2.so.3.2 libruby.so - -RUBY34_INC := \ - -I/usr/include/ruby-3.4.0 \ - -I/usr/include/ruby-3.4.0/x86_64-linux - -RUBY34_LIB := -lruby - CFLAGS_DEBUG :=\ -std=c++23 -Wall -Wextra -Wno-c23-extensions \ -O0 -fno-inline -gsplit-dwarf\ -g -fno-omit-frame-pointer\ -Wno-unused-command-line-argument \ - -I./include -I./libs -I./libs/libruby + -I./include -I./libs CFLAGS_RELEASE :=\ -std=c++23 -O3 -march=native \ @@ -40,20 +29,7 @@ CFLAGS_RELEASE :=\ -fno-unwind-tables -fno-asynchronous-unwind-tables\ -Wno-unused-command-line-argument \ -Wno-c23-extensions \ - -I./include -I./libs -I./libs/libruby - -CFLAGS_RELEASE_32 := $(CFLAGS_RELEASE) $(RUBY32_INC) -CFLAGS_RELEASE_34 := $(CFLAGS_RELEASE) $(RUBY34_INC) - -LIBS_32 := \ - libs/libgrapheme/libgrapheme.a \ - $(RUBY32_LIB) \ - -Wl,-Bstatic -lpcre2-8 -Wl,-Bdynamic -lmagic - -LIBS_34 := \ - libs/libgrapheme/libgrapheme.a \ - $(RUBY34_LIB) \ - -Wl,-Bstatic -lpcre2-8 -Wl,-Bdynamic -lmagic + -I./include -I./libs PCH_CFLAGS_DEBUG := $(CFLAGS_DEBUG) -x c++-header PCH_CFLAGS_RELEASE := $(CFLAGS_RELEASE) -x c++-header @@ -63,6 +39,10 @@ UNICODE_SRC := $(wildcard libs/unicode_width/*.c) UNICODE_OBJ_DEBUG := $(patsubst libs/unicode_width/%.c,$(OBJ_DIR)/debug/unicode_width/%.o,$(UNICODE_SRC)) UNICODE_OBJ_RELEASE := $(patsubst libs/unicode_width/%.c,$(OBJ_DIR)/release/unicode_width/%.o,$(UNICODE_SRC)) +LIBS := \ + libs/libgrapheme/libgrapheme.a \ + -Wl,-Bstatic -lpcre2-8 -lmruby -Wl,-Bdynamic -lmagic + SRC := $(wildcard $(SRC_DIR)/**/*.cc) $(wildcard $(SRC_DIR)/*.cc) OBJ_DEBUG := $(patsubst $(SRC_DIR)/%.cc,$(OBJ_DIR)/debug/%.o,$(SRC)) OBJ_RELEASE := $(patsubst $(SRC_DIR)/%.cc,$(OBJ_DIR)/release/%.o,$(SRC)) @@ -76,7 +56,7 @@ all: debug test: $(TARGET_DEBUG) -release: $(TARGET_RELEASE_32) $(TARGET_RELEASE_34) +release: $(TARGET_RELEASE) $(PCH_DEBUG): $(INCLUDE_DIR)/pch.h mkdir -p $(dir $@) @@ -89,16 +69,10 @@ $(PCH_RELEASE): $(INCLUDE_DIR)/pch.h $(TARGET_DEBUG): $(PCH_DEBUG) $(OBJ_DEBUG) $(UNICODE_OBJ_DEBUG) mkdir -p $(BIN_DIR) $(CXX) $(CFLAGS_DEBUG) -o $@ $(OBJ_DEBUG) $(UNICODE_OBJ_DEBUG) $(LIBS) - patchelf --replace-needed libruby-3.2.so.3.2 libruby.so $@ -$(TARGET_RELEASE_32): $(PCH_RELEASE) $(OBJ_RELEASE) $(UNICODE_OBJ_RELEASE) +$(TARGET_RELEASE): $(PCH_RELEASE) $(OBJ_RELEASE) $(UNICODE_OBJ_RELEASE) mkdir -p $(BIN_DIR) - $(CXX) $(CFLAGS_RELEASE_32) -o $@ $(OBJ_RELEASE) $(UNICODE_OBJ_RELEASE) $(LIBS_32) - $(RUBY32_PATCH) $@ - -$(TARGET_RELEASE_34): $(PCH_RELEASE) $(OBJ_RELEASE) $(UNICODE_OBJ_RELEASE) - mkdir -p $(BIN_DIR) - $(CXX) $(CFLAGS_RELEASE_34) -o $@ $(OBJ_RELEASE) $(UNICODE_OBJ_RELEASE) $(LIBS_34) + $(CXX) $(CFLAGS_RELEASE) -o $@ $(OBJ_RELEASE) $(UNICODE_OBJ_RELEASE) $(LIBS) $(OBJ_DIR)/debug/%.o: $(SRC_DIR)/%.cc $(PCH_DEBUG) mkdir -p $(dir $@) diff --git a/README.md b/README.md index 5107470..8141d24 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,7 @@ Binary can be installed with the following command: curl https://syedm.dev/crib | sh ``` -It requires `libruby-3.2.so` or `libruby.so.3.4` to be installed in the system.
-It also requires `libmagic` to be installed (most systems have it preinstalled).
+It requires `libmagic` to be installed (most systems have it preinstalled).
Currently only for Linux.
*Tested with arch linux and ubuntu*
@@ -67,7 +66,6 @@ And any modern terminal should work fine - preferably `kitty` or `wezterm`.
Some other dependancies are added as submodules or copied.
- `unicode_width` is compiled by the makefile so nothing to do there.
- `libgrapheme` needs to be compiled using `make` in it's folder.
- - `` #### LSPs diff --git a/include/pch.h b/include/pch.h index 4804b13..29ccb70 100644 --- a/include/pch.h +++ b/include/pch.h @@ -4,11 +4,12 @@ #define PCRE2_CODE_UNIT_WIDTH 8 #define PCRE_WORKSPACE_SIZE 512 -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" -#include "ruby/ruby.h" -#pragma clang diagnostic pop #include +#include +#include +#include +#include +#include #include #include extern "C" { diff --git a/include/scripting/decl.h b/include/scripting/decl.h index 7a8a092..77ad6c2 100644 --- a/include/scripting/decl.h +++ b/include/scripting/decl.h @@ -4,7 +4,7 @@ #include "syntax/decl.h" #include "utils/utils.h" -extern std::unordered_map> +extern std::unordered_map> custom_highlighters; void ruby_start(); @@ -14,9 +14,9 @@ void load_theme(); void load_languages_info(); uint8_t read_line_endings(); void load_custom_highlighters(); -VALUE parse_custom(std::vector *tokens, VALUE parser_block, - const char *line, uint32_t len, VALUE state, - uint32_t line_num); -bool custom_compare(VALUE match_block, VALUE state1, VALUE state2); +mrb_value parse_custom(std::vector *tokens, mrb_value parser_block, + const char *line, uint32_t len, mrb_value state, + uint32_t c_line); +bool custom_compare(mrb_value match_block, mrb_value state1, mrb_value state2); #endif diff --git a/include/syntax/decl.h b/include/syntax/decl.h index 0403ebb..e5660f2 100644 --- a/include/syntax/decl.h +++ b/include/syntax/decl.h @@ -38,10 +38,7 @@ constexpr const char tokens_def[] = "module Tokens\n" "end"; constexpr const char crib_module[] = { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wc23-extensions" #embed "libcrib.rb" -#pragma clang diagnostic pop , '\0'}; extern std::array highlights; @@ -59,9 +56,8 @@ struct LineData { }; struct CustomState { - VALUE state; - CustomState(VALUE s) : state(s) { rb_gc_register_address(&state); } - ~CustomState() { rb_gc_unregister_address(&state); } + mrb_value state; + CustomState(mrb_value s) : state(s) {} }; #endif diff --git a/include/syntax/parser.h b/include/syntax/parser.h index 9f965af..ff75cc9 100644 --- a/include/syntax/parser.h +++ b/include/syntax/parser.h @@ -14,8 +14,8 @@ struct Parser { uint32_t line_num); bool (*state_match_func)(std::shared_ptr state_1, std::shared_ptr state_2); - VALUE parser_block = Qnil; - VALUE match_block = Qnil; + mrb_value parser_block = mrb_nil_value(); + mrb_value match_block = mrb_nil_value(); bool is_custom{false}; std::atomic scroll_max{UINT32_MAX - 2048}; std::atomic scroll_dirty{false}; diff --git a/installer.sh b/installer.sh index b8b586a..82c1d0a 100644 --- a/installer.sh +++ b/installer.sh @@ -4,59 +4,20 @@ set -eu install() { BINARY_NAME="crib" - VERSION="v0.0.1-alpha" - RUBY_VERSION="3.4" - HAVE_34=0 - HAVE_32=0 + VERSION="latest" + BIN_URL="https://git.syedm.dev/SyedM-dev/crib/releases/download/$VERSION/crib-linux-x86_64" - if ldconfig -p | grep -q libruby.so.3.4; then - HAVE_34=1 - fi - if ldconfig -p | grep -q libruby-3.2.so; then - HAVE_32=1 - fi + ldconfig -p | grep libmagic >/dev/null 2>&1 - if [ "$HAVE_34" = "1" ] && [ "$HAVE_32" = "1" ]; then - echo "Multiple Ruby versions detected." - echo "Select Ruby ABI:" - echo " 1) Ruby 3.4" - echo " 2) Ruby 3.2" - read -r choice /dev/null 2>&1 || missing_ruby="ruby" - ldconfig -p | grep libmagic >/dev/null 2>&1 || missing_magic="libmagic" - - if [ -n "$missing_ruby" ] || [ -n "$missing_magic" ]; then - echo "Missing dependencies: ${missing_ruby} ${missing_magic}" + if ! ldconfig -p | grep libmagic >/dev/null 2>&1; then + echo "Missing dependency: libmagic (part of \`file\` package)" echo "Install them using your package manager:" echo "Ubuntu/Debian: sudo apt install ruby libmagic1" - echo "Arch: sudo pacman -S ruby file" - echo "Void: sudo xbps-install -Sy ruby file" + echo "Arch: sudo pacman -S file" + echo "Void: sudo xbps-install -Sy file" exit 1 fi - echo "Installing Crib (Ruby $RUBY_VERSION)" - echo "Install locally (~/.local/bin) or globally (/usr/bin)? [l/g]" read -r choice JfjWMqH=W(GS31doBi0V=Vg$qLE>iCHjkF*q>DG01||vcP3985{mGfdyeS zg8-Nd*2fBFGJ{D522|QGRRt^#qmlK2?JH0R%QK+S8zP0k;xHOn9~%P$!-X4`V0m=< z$V{*>!;V8x-$UIAay>|&Mm)s-=(Gb!0RsaAjOKtC!vJz42p2%*(P@b97#LtQNG(V! zI|Bn)FS`3+e2^LthB}V{W?#V5k`%BRdL|%g1_m@*<}XATMuXKdFfar@ElC0S4M5k?d})KP}c8!dv|K3q~YJL)4{B-9X~JsaTKJJ zorQtH0;GwNfq{>KfuUhC!vz(Fh=UBw+yX2O$_@+;N=z&Qj8O_IkD3`=EL<5BI7Ap4 zSOgX@usAkI@`!R7G4U`dbu~@!l2AX$B-diY!RX<@sNlfJ!^FVTV8G1K#30C_>cGXo zAi!`!l!Z;Og~LhVxQHMJ52Juntw0Y02WLYABZmSgd=(gkyj)IhisEQwR%BpM<`Cmy zsO%76*Ep;q!Ir?lz{tcU$iQ@|ttEl!$_0)D7WM`Ofd-z&U=?PG1||;!kZ%|mI3$=I zSy(-p8hLmaCJ0G5cpPF;VPs@sV5wkacVeN8Vd=nHXB;9yW#cz{8PBf-T%(ZI<-iO*w4ps_<@!U3ixc18h*kSRe1O$tox zhn_JoaIyqAFfb@MIT#3VI65p?z^Evo;Goj9f?-k<3xh|afB?5chirpNJI`vB#^be| zj-D(HqDnjpf*li%_%#VIC^2>&U|?Xnf&~kt& zg2RO&;lM?K#2zt0Ck9571p;mlIGq(3ST#B}I54YfF)#@*7&3A&Gca&AJz-!FXw+E2 z(8(lV!QsKc%)=qT3Q7>5a)OnCsgEIqkAYF>ihz*<1I?-i?zySsZSr#4#g$@P=P5}l1hJ+?f1(qpn4$W*2g&0^> z7&sIdc$fqn7#Nri2rw{m2rOb?X*i-Fw86PSf`O3{R6#g0Fm$jmC@3;0Fiio~Mgj~> z%!VAE3@!{TOa=-J4hk$x4h{`sN{lK>l3p7$7!(9d6dDv%92f*z7#N%mu&6b32(y?Z zvD-2nXHbyj04d-Qm0(&Rpuoh?!l2N=GKqnKQHs%tfsw~aFp1lMr^!jkz>Ps5p^1Z= zL8-@qRfAdOT1OBE6C;BH1ET>WLxWTcZ;ylk16RX@1`aL;o+cJhP&Z5vNMLDT>M&qo z;1OY5(7>R?5W&bG0+LclP+$alITRTdFflP`uyio6a4~urLTP2r@7UEMVYLUA-2?Lve1jCgk z1#X6v9fA?cE?PVcEG!KSOsousVvURpN(KT63``D9pkkGmTZob25CcOi%Q7h@aK)g; z;GxCBXu!em!6d+OcmV?gCxaJb!y(=Y4h((_3`-RZSU4F#Ee8bhwOJjlqgMfg9 z7z0y>0|Sd-sK5bBA(j>eCkAd!1w|&iL!3+u4Gawp9GrX%40B`{6*w4J932Ft6uDJg zG&n%%VZt1Sh9(AwWf@KUDjpL!6onca_|%yiK=Gcy2nq#u1`h^-WJUpo46YVU=j;g% z#w-g|T$mad8F(BTT!a=fFbT7=HZXRuFgS2AF)%4KFt9MOJmhV3RhZ$Pz~G?5+sVSf z!{@z1f?L6{fx$t6L5qcraYhTrCN2dA1`Pp)1%WIqpioP6a8P1mXk}n9VDMVQz@Wvj zNP%eq$QdB)!=%K>V8X!RCX7#Qps85kTG85o=x85mp`85lem85q1785n#R z85sN+85jZ?85lws85qJD89*75AsVVLmXU!WfsuhB8OqOOWMIf-HZ$jy^IVDeT)nY z{frC@6QO!QVKj-6fnf?G1H)8C28QWS@tKSa46_&+7-lmvFwA3QU|7h=z_5ssfng~l z1H&>#28LBob?X=z7&b66Fl=IEVA#UQz_5*xfnhr%1H%re{4PcYhCPf740{3u=nHU(Xp?q5?ZN~(vQ9-U@U~pt&U;s4Bwj!NkDe&BVaq!^FVg z$Hc%8$i%=9!o#5MgFu5M^dy5NBp!kYZ+FkY{FKP+(?YP-13aP-SLdP-kXf z&|qd@&}L>}&|_v`Fl1(6Fkxn3FlA<7Fk@z5uw-UnuwrIlu!Wilifu<`1_n1~1_n>4 zm@hK}gCCR~z|6o9$jrbH%*?V8~%+V8~-;U?^Z_U?^f{U?^s0U?^c`U?^v1V5nebV5nqf zV5ouW1Gx!=Ynd4s>X5`5m>C$FnHd;bm>C#anHd<`m>C#4nHd?Fq~s%U^vgrz;Kb7f#DJ}1H)ygevr9WnHd;v zFf%aRV`gA@z|6q#h?#-mF;xC3GXujjW(J1m%nS@Km>C#eGBYr|VrF1?&CI~?hM9rk z9Ww*NM`i|wPf+z=m>C$pF*7jyWM*La&CI~?mzja#KU9vHg@J*U1=O2iVBlh5VBle4 zVBiB)V=N2|LM#jnA}kCH;w%gd5-bc1k}M1i(ku)Na?sAO0t*9!G7AHP3JU{+Itv4X zCJO_D7F14~g@Hkbg@Hkrg@Hj2DrU&Sz+l3{z+evQt3t&rSr{0sSr`~>p?r|v?O7NY z99S3_99b9`oLCqboLLwcT#)2lSr{1HSQr@GSr`~RSQr>QSr{1npz{7K3=9D*3=Bam z3=F|63=E-Aage#;EDQ`0EDQ{hEDQ`WEDQ|sEDQ_@Nb-qD>?9TjhBOuihIFV{77GJI z4hsWA9+aQY!oX0#!oW}nFsy*`SFtcKtbwxEvM?}gU}0d` z&ceX3i-mz zDE|VKzQn@7aG8aH;Tj7A!wsm|O%?`*dn^nL525_0EDQ|KSr`~zvoJ8cfr@=%VPN>m z!ocvIg@NG*RO}}U1H*3?1_n@ngqf9rfrXWUft8hkft{6sfrFKSffLkEVPIh3Vr5|9 zW@TXDWo2LxWMyCwWo2NHU}a#CW@TWIV`X4afT~ksWnfTdWnj=|Wnj={Wnj=}WneIb z${9gvGgbx$YgPsZTUG`J2UZ3KCsqaqXI2IV7pOcaJUv($7(7`S7`#{+7<^e77y?)s z7y?-t7=l?D7$R927@}Ai7@}Dj7~)wO7?M~S7}8l87_wLy7;;z{81h&d7>ZaK7>ZdL z7)qgLma{T2RI)NKRI@TL)Uq-#)Uz@$G_W!-G_f);G_x`=w6QWUbh0uqbg?opbVK#@ zL+MGZ3=ET585pKQ`O~2E3|0n)S*#2UvsoD!=CLv`EMR3|SOk>=`C&0D1H%ed28NZa z3=FGT85q{GGB9jpWnkFE%D}LNm4RV9D+9w$RtAQ>tPBhXSs56Pure?lhw4Ac%D`}n zm4V?bln*lR94iCEB~}K8D^RhktPBj-SQ!|uvobK;go@o_Wnj3?%D`}km4V>_D+9wL zRtAR0tPBj#Ss55!u`)2cW@TV_2UYutm4V?4lnpZf8xs2mD+9xCDE~hz0|O%)0|N^i z0|Ofy0|N(iP>qX?fq|Qifq{pOfq|Eefq|cmfkA+cfkBv!fkBjwfkBdufkB#$fkB>) zfkBClfkBy#fkB0hfkBmxfkA_ffkBszfx&={fx!@Jo(UTRgBcqGg9VfiauWz!u`w{% zurV;$u`w{%Bgr{I+0JYX3~p=;3|?#u3_ffO4E|7Yklp|!b_g2-Lj)TGLnKrzij9FG zhK+$Cj*WpK9x9f=#=wxs#=wxw#=wxu#=wxp#=wxr#=ua-#=ua@#=uYkRR=P=nvH>> zmW_d-o{fQ_2`b*q#=y|R#=y|Z#=y|V#=y`874KnVV3@$hz%U8QpUlR#a!x}aQhP7-A3>%^1 zTc9*ZEeLO8V_?|9#=x+Pje%h=8w10BHU@@+Yzz!X*ccd&u`w{5WMg1B&BnlR7OL+Y z8w0~-C>x~zDjNgC4K@abn`{gWx7ipN?jXs5ep(*K7<7@7Nd^KC&?|d}d={_{zq>@C~XCWY!Nh28Q2k3=IF+7#Nt?85o#B z1I7#t4D9R-3>@qX44mu?4BSvL9(D!>L3RcP5h!1joq<7&oq<6D$_JST!jkL^3^MEt z3<~TF49e^b465u53>xeV4BG4r3_9!#4EpR042J9s494sX45sW14A$%n4EF2{436v! z3{FU9xv(=ZxUn-ZctFK`*cll7*cliC*cljt*clkY*clk2pmK5S3=9eE3=Bz7ei}Oi zLk2qoLnb=|LoPc5LmoQ=LjgMjLoqu8LnS){LoHNYJv#$K13Lpl3p)ctD?0;22Rj2p zCp!Z}7drz(4?6?HWT?8SP91IL091ILm91IMx91INc91IMJ91ILe91IM} z91IMp91INUP%|?*7#OlS7#MOn7#Q+67#IpT7#NB<7#K>S@*q3QI2ahD{;D}l%$(#F zCi`5`^UKdE{@&Af)QIhSciKBxBHxqmQQtf-AJeUy*DMR^IC1ra<^NBO`=(C$AiAy2 zN9_K8&KBN#e8+<9HofPn?on8s`sz-8-|AP2%v@LUu7vN{UUg7%!*8#+{Tp7_?ayMi zX1(vuS5c6+b-$S_llIl7sIAV&9VcJg{_8-B4AX|fn1!Ee%2*zBe)FBEc3P#^=Zf=- zx%wtPd^2M9i*0+lPSs)4E*sscw3v-#{rE(2bP21g&v+b5fP#LkTF&GiXq!X$w%q|n$quE4fdR?d#{jxBB|PA=Q3Hh z6TdIMY_-19X)TfPbZ6Y)g>SgTKpOOB?da zoYXM?FLl+)H*8t1S%|l+EzuJn z%;uDoj!QnKu`Z{GYwPj?&NVV zaJ!@v_tu+!|ILbzeGoYLA|@;S%)m?hFGr5KT9s88dcAM{u;t&2;c0nAgr5MkC z>9`?i@5APiWBoDZlBLr&rNs3Ng*|sz^#V^CvOKJ1;z&&BzS=wI-0TIHb5;E3aaiTw za(Wtk(vv;4`XnV-)Mq8z3Q24Larz2|?Z0+1V@6L@c z6Ay=~{@x<4ZfDS9xYk_3vguWbOu?fnryKFV3XO`6AGs#Ir8jhn_KvqF=AT+LB|6Wp zREhomkG)AB_>L$)7X2DD+x+A2k9I58+zr=!qq1{nqj#yQR?4NaFU`m8mrs8*(SP@h z9oB7m8`=0K341Wb_pOcK+UcI4oj?2JR@J^JAN!&Rg&V?`HoSM57~B(-d$Dcv`NIom zJ?dkc&at-T*P6C(lO8Cp6EOb~cyyEZ_G>fd9`W%Ln|hpW*G`*nMvTuFRX#YE>)*ND z;!ir;v$~i#cfIXxN?#`=1k{`ndv>~E-Fq)x_t@(?3tvq(-tkemdDSjAkL^XODfTum z9@Vt78dtZm95#M*?PJOz)h%Mq%O@>ZX7yO@O8m`*v$9IkuU<|QVJ^t%)tP*F=8*$w zoJ=dkCtb3=)3Zv!r20>sI&0EKcBYK#ZGn|b>j!M;@hrLDR&hqRyb3)#2pUf?`wgoFD z_C<2;++`#jCGDxQ!EO51p5RqIyML81INxLqT)a2dCHcq1J={}Fybs+-3_d7WedYU= zYn5}f-`zGe_+uqHk+-0){Ce2m?Eag}=NNkKJW$`+UlMUU<;znxldC?=Y+r=Dt8!vL zzbwkiSn+?}&z;o^dmLY-{aN!kQ}MQP%tz^stuJ+!x@2}d$B%dX&OqT#H7Blkqs9=&M3TqsJcwA%gs33wN&W0xGGWHQMR^+@3d^5 z-2W%@j$GvM{noeU{JgL1i(~DsZGN?1X4B2X6CA>PkDQ4-veuDrd0Lu8@6>r6T0fL* zSyI`~E?JwkdF8y^=TE+E7re-LhWn>u8q@0-p<2BS`+YMK`bw8zNSq5^Rq*q7Kdhi zd9?d+#UlsFgGwFunlA=@{(o-ThG#*tEW6CsB>YbQb3*x8a&|Kl%L7aPj;7d&3@euH zEUfuzzWd4R8D?(pBtCDyQ9Sd0W2!)}*IhK9 zDJ|-vak=yYLu~oxOvM(H|K}EZcyF8#KlR_S+jm~&L@dcz5b2}1;LAT{CuOk*JbMoB zY1yeByW#cnq)z^&FM@+MSIieU^dM^cL;VG>7YhB~Xn9)mO7C?8kJ(IFPtQwT4PUI& zg=erL+B)<|%93W_LZmIOpLO{`r(sx_5T7Hq;`Or_ zkLt_E3%L1?vOBKdK8<%-%;Uv!yR5!?YMZS-l6$WHsquctmfK&w%6H}8`0f>4wQO40 z;l9;DL#|86L(qdNz$}hw7i+$weleE*X6aL zA2+6N`PlF(A?g~h=b7N0OSE`) zzZZ1KP0!=Au6f^LWOn$R9CH_2vEh$LHA-dK0nd|6T5 zHZ${c7u{Fcv%Y_y_fF!0z}5F(*DX{#wu<%NMrjVcX+kc3d4>hIth|=;J@;m~y{T6@ ze>(ftc~|bf+bdx5Y+FfbL2falSEuyB(|lr*f7(<1{yqw76H;2+$FN6^Y1Or(M(d|9 zlCAy8{z2fqP~v{(shbm>U(DF3aI9t#tD)A`W9AAAB0B$FkT;3`zFxXlQujj5mdA%$ zA1-FB-}hpM!ENz{Yfb(BHE7EwFn1l&u6)3Ea1-Cd2HlrG_Z8%ahVoC7+BePf(%&tU zA8;1-TyVW&+?3C;HD=*aWs}5p)oZh~*Dp{ya6a$pVz1de=NDrc7(Geu;g zLa{}-@4Sxax8L5Jv(@q_x#qdpe)Xe^&K3q@38vD20}Yn7J+T!tSTR4$^i}oY{UPa+ zH~E{}+@dBrHh*LM`(@729~~I-KuFIuo-UFS}9&M&_O7h7H9&8_Kw&3odQxfZ{NUgqA} z#<$!Zt#=-{=YOZMc+sPhGbfIB>@#cVzxuc0Zwv1WliT7>O6HFepBsJ+II_#cmffcR z$@0UVce-M?S$>w;e@c4gfsj=KIk|6pKkM8%wn6CR*MwMO5q`JoWy`l4Ry|#O{E^ka z=PP~(u{AIqeE0mA!HbP$!N<=RUimTW)T?hTOcTRD<+6FLXk79+$6oX0xG> z$&Jw}L4D^9Si9^uK2ClwBVw{Jd-4Cd*Y+=x*44Z_yI!iQcNHBE)F<%^PGX|zT2x9Z|fhK=Kj8R*<3Bo zg(ayUxBogPa!NIA$)0U8I)=Ze{BGYnXNn)w%Y$zUjXnl$(BA!qE0g~sQ~K3;(FrUm zZK?9zs>kR2Or32Ju%A(geU@t3i<`UTBp&p7iUs5`b9rmrea`S>%CR5vq7!E4L~h>9 zroB&NpU3he+f5jGk3=8c^kU_nBgV6Z4TE^RwzkdK?)1@XNA9KAwJ(lz6*`I5?uc5j zV3Dl$s|&_anRB!1`zBt9yx3H$CF>sU!0CDQMxf#`ucx{NT<6#wOQx^cd0=Mx8O7?S z`*L>duDsu~Y8O`@+u7~rTe&+9^55jv^_}j#Nj3YGns$AV`Gz~6Ja-H4^*_2P$~00h zs_el8yQ8ct-p!dGS!iT_@sFpgfM~+D$=h_S+P?)qIHK%d9dz!r(5Rm&GXV}I~l zgLm~drfXZWKI&!7I>`3$dc&$+*%MbM?q#_BMdrr+qtlXS@cwj<{pB^obh6aq$o_n$ zeTUYEeiCL_u|i3;dv$tA{JcYxrj&4OTKYUyX4b4;rm}p4&{;<`o>#~lDZiO~Z-Z|4 zpAS~y@B8@I2tTY!UHrr0@|jh?Iu>$P{kfIkdr_0`-?e=*Q|C%)uui^^`)liwgp!+A z1K#{>)b%R={p}KyS?|FGDU*J^%zDhh$-HLE|D>X}{fqLxFz_-aH5b$yXTGTNoWgf@ z`DvaTE*GZ?wu&r!x8IXbG;#TntlT7q_RPq;KVF@f*U9%-dBQhO4)++vo1yb|H69W? zJ-2ex(U6y`jQ#AUJ(PWy6aI5zS4!v`11bHi{NrK2{R;AQ|0PYE94#}c%Fp!ao{MJ# zYvz_mpZ>o6$D!VLbv7(Q-1TRc+rD;4J#91FOQbf@*!O0GX($t0%!$Gu7t89>)*bBK zG-=7lt1&tuc3y`Mu`w^(>2!PdHbIH4_0!@wMCLA;ZF`(SRa$TXFT;Fc+opLN%399p z=JvRJX?|~eUH!Gpy|%dD%m!Z_RL;arT=lp4%)1J!a>1}|=}gyNOfQ}t>aSIBI+r2n z4gVLR=r~i|7(@Re8HU9#rsuPqyE9R^eY#p$KEq7ybp?5i6%8USXTK*)J$$!VaO%6| ztPf9A?6M{nR|+#3AEg`4>TFoAWwt>3^_~w0f@T!B8oOSY{#NVNxp$YE z`n_)1aeFIU8(h8caEeJsxN_T#++`J|v+EY?SqoKsdd^xu&vvr*|C7qy(p`++%ir+b zON@~Jf9m~-?!%r(qg%T4@AFLJt(xmNc}w90y{a?GXC3!0GyW4Weco3V9qE;pmv2sB z@hvq;j(b$6@Jl3=*I77X=iJO`XG$u>uV1{Iet1#Rn?HOPxiq#0rCKq}i#R$#*Wup7 zWo26@d8_+6bFI)zv(0D!dEiv|?;SV4>sKFQtChLyvuf9cbII&_c8+h}UvF#-vSt@; z$a)&u2)6wcfLYFZxg2(jPOq zbA=zB{1tFv^8OuW&tE@?(l9lYI(J|4>cSA-brvj46RiF_zetmaUCk4@YS-y6`*ik+ z?#+MV9JgR{`iz?^&&Id4dED_5xL2~cKfs8;?;~%}_VXKl{L#7Brya2A%$EIGcAn*m z`7F^XUw(UAY=7~tref=g2dys;Hm&A3uAmv=dV8y=%a#BBvitP5tevuD(j3QcoUecL zGgZ7PKEOWv%#R1XzwVbh?C(pS{75&n_P2#eP4k=l4Sx&YovnBO_{o{W@Z6DW2g3i% zxqFMB@%fq)Sy`7$%l=mDy0zKAPe13`*~qC_v`}x)^c=~*4b0Ec^6uuT1|8~W zGha0NdR~!UYj{NHdER!9i9s^IJ_Jd3vUP}@IU{mEU&eFWz0-#0v-ak9&G~#a^?i`_ zXRS8#m8_>xuW8PXkLHXj39;^Gm@r$QkboLxmWeMoRNLx`*&-dZk+bWX|9<4 z{-*QpBGw75YQdiBdIy-AG)>>8PWM0Kx>pc=kFXm(s6ZB}@rhHb3Es zHuF1mCeLfHhUm;$I}6rw$u9SpeZu4TxuXj#ugnm9nJBCEL$mbyk|u>~4f8|%R|GYC z${gMFLCN)m$M)m>2Q-BComtRQ!Wy-dr(&BQ_wCz~vK5#mZE%oqw8%&+Qmw+S1soT?vFJ-ru(1=enVGHM z@;63UC)j)bwf&#hWN-4SI&;GM>A@8)8<`)9Ecjubzfg|x+lzLaU1^?^t~N30hi5$ByUrDaOwD4BZISowJH3CQuPd`dj7n$bH&(iGUw|vX@n%?=Zc&FduIk@N*dlq-b z^sG|pQ0*2T}@w6l@dz3M&tq!V}M zxW37GXuxxp_ldC^cmLmaGJMyBy8<>oUFW}Q#>UrNvr+^kf2h1jmYcTQ>czKN$(wmE zpG}ix(YgET`Yqp>6EUepsWnq3mWh}IEn(lGX5p6dXwAQEMOi=J9}M64bY0TEb~lTy zJ&}(Bb^bh#x6e1>N}qOi@~MdUP}e^n{u};CZh8OxNyRGd*pT>_ElK@{QWM3W@7na2 zf7WuLyPwQzlgfKuOt$$hbU56zCaF)S+o>~PMN?1Co8sEqNvf+V%r*rWol<=#@kJ;x z;r59`+unTADr6P>Q@+AXRQ|+~Yhp7OoGbC!vW3OMh}-Ro#i4zjla{u(mdXfElWErd zo?CG9#m-q9me+d-d-_N!)h^|Tb=v)C`RSi(xXAnj(H6k1x-iPX6)0w$!ax8>XBCTpKHh8U*%1U(~1P~ zvjmsM=Q;{Xt`W14KiSc7Krm&|3%OTr;U>3EdMkK(Pu-f9e&(}Qy!f7JGcV@t@;UW9 zMD45kWd5ec$vH2LzCJwo*=-lc1fiYkEvtR}()cVwnWA_#k3>r4PSD!%@#2JC?M^k27t{ZuK%s#wef4EL(@t^+z+-c0O1uvdl z5xZ?d$kY7mQc~3}bGAReu2?HKxnIwn_TbxT48U>!_)7|9Wv9b=Ksaw zvP&|y74@DQkELv8t&X(nk*GY9w}Wr>#9bQ{uQqy$bZubWR#>;AV2a!Ni@IUON?KWW zI;@YqKFwser{lpL-IbbqBUbMdY%q+hkvF)vFrZlEs#7!5qECI!)gD3yZbp2qFIVyy z{E75$~TkIU4tlFHjs4B~_CA~?k@`Xc+ z=88OH=6f4|?OO`ccR?rZDr zUHifB*y+2g&RUesw)3(*oV_@TRc*6P=DW9buF<;XD(|mla+%$0kPP77_;KySWj)st z8iE*kV~yvO9zXZQVP=f#rws?!SkxRebkY?!NU>5pv9WgT>Vmx%6CA%BtS_x_uXDb3 zX0GY~(+exE`G<)|rC!|lW2%Yi;yONy)MH9ICW*S-4lm5!*K>(C1Wd?Dxw(5cTS(R; zj}9iQq|T?umZw}dNZ-@7CcaW`lh_P9=cMhKjH(NQ&N+)-`@r!ei~pjgf^)V8>mAQ%|+D(vU0YZ?N-EPkK=m~u$Mmff^r z{@WW1?p?oj!|vOf81E@NHuXM=^;x+qY{{=RY?rST@o|;EG`*jkrsIEXrh4Q%39pqB z+|%_xZn@qmuD|M~Mnf`xO4fx(S4*y+Xnhvq_4^0&#iui@Y;LZ*_WFsq*-OR`H@Ua_ zYAUC^-t;NhILOYyZ@J+5t>=D~P6=QA>`8otPPkTl-oHNY*9r|2(jPf-Xe(P)ZDoEP z{PxV7^2Oe#)@qczua#ZL)hw;)9k*&%TCY!={#B*vvF{J`^?LlZH#$(rz1{YUkX`3W z%Vwzq8-DrDW1cITuXNS)5QzAgZ}xRMBV zakp^n;@@%D`y7XOGy`^XW^!T|zl$S&-{3GmL<74y6-n5|e|TaSpVNz7T)hFixS=g} z@v}JWZNm}otvJ$KDaYaM=3~M>+3w^PDfvw7{!=0dg``F4=H5~0UMjYv9K8|vR2S>YTJ&tlf4@da(;7C_FIMM@aF7|Nvgd?2e zvT&%k!!8cm9*!;Ce&dL*P#o!S503IP2S<9_g(Dt+;PBVBbnNbr!%<%!z){Y-F)%PF zA*x+CYqAt}^IdVIho3m|^?n@Xp(T#?RWc8DdynEsw>R9e*Ry|dgxjG=?B-9$QP1wh z;m)l%#5d!}7h7il4JdS>c3y$;_fg>M1$6;?Vj&!bsqkMaUBi#n#C?`vC zs29MIFAm~p&!^%jPXuxFBR<+-kN0Od(n%hUbbb&=zPpPfJTKx1|H(MQ`EWIMcWUEE z51?aLu=OK6^s$>`<%(VWAddW%fFm5jaHO{*IMfT`C?9U%2>*5*;dTc{J*8}c-CsR8 z(px=__}YO({6RT(^H<<7-v+b?8eW0vgG za_Jh5^f?)a`g$DxorA+Y>^RD|J#5&+ZLI=!@q0MRlVlv>+=8PWzCZ@M`HAe<#kFyy z&zCsHotSX64}ah&AAaFTS7&gf&o&(SP7g=I*#;KjiX(9R2X}>?ZeSu zHpej@wF^gjdy6C7_S9gvmw5tq@ozZlky>Z$>L*lS7tg}cE;@l@9CaZM_b|`A2haE?{ZS}?8UaiJq&LSM{kHayp6@sHY`HQ0*`;DVrvV}j zW{CKMHqa@W44?x9!7{VK^A0==3AGS+%78@~7(^97=1Va&gjs_{U|VM=g8T103=I{K z6G)GMWf>Se!R>h-hJt1_u*fek$-uC<7-S9~!-Bus5E0Ns4Fdy%ZadUHo{(^ZnI9zq z5#O*4;v-nuk_?^);XA_-uU zfx!*j9^+wnuv;E10-MXb5Dc;RK#D9_95!}0Q5GV;;h7{@+!stTFoc2Ihdc}dZy_$P zf{L?%$1Qmn4m{%ri+F%Z28P*C@dPH&h$;j4tS6AvR2ES9NHMG^f}9fzF^z%YxhO=u z!v{6|KNLdTb6|=zNIL^)OE-vdxDO)E&M67!J$;okq*RFbyi+tP3&c!eU5D+YJ?G0?)tm zFlBq;UL64^PuWu!Tm=bh5$y0f7e09Gr{9d zJPZp=AnIY^DFU9i;$gTTECp8C1U3H@)V~XsLELi-Dy|4F&v_U&e1nved0<@(3>(1h z1RjQhE=YQSg|h~@eapjeAsG^1Gok8FLd)k177+EY^YtE?Lc-wzG#+iC>RZ!6=~k2> zAO?~`Ai0%+;U0KCnulS-Hb^|e@|V3L#GDPYA^8H9PFeyX;srSn6CkAx0|P5~UY>`c z;5tOa32JW=G(8;n1j&yJq2gDe?qrw_iCIXhV_>)sjhBKDNI3%uZ3c!ca6g@g!2xuj z0_dDWXgTQv&DS3^Am->o&Cd*ixRYTu#GTur;*0Vi;tnN{at0C_3=A^h`jm&EVJ;*b zOrh$z!1Dz>3=Q8QC73=m9v?%~!-HE87eZ?Rh9|J{*$GlUYeCJ~zzVTf0CZ>>0|V%o zOt6fkIw)SG7&4gA@-?jd>4BIJF^z%YTP8@o1jB|xh|3|aVqoy*gP8weGbAJ-sfB?d z51OwV&O*WyR{n6rK-4>=LedY!*9;81!Sg;m3<55Y^bd)B1_m}QkiC2i3m75wGU&if zkO$(OAm(h)gqV;45@cXtFw}yGA2$3xXG@B_I=is6SjYPkJ?rq2aaA@OblRX+im9u~}jq{Ast@l157e7spabz2Bvcs~TEigznotO-VL|IfKw4fw)764fNVYjDAmIrsHx`5EJ9rov z_$5HjV1URnFsy)<8wvX$;R!tjouOX_6mEPB0gjM(gp|4r3@^d!5O^3K%z?NcbjBpe zKvD2G7!Sh-KS(>F3?#_Fz;FiIE_%=ksh8(N-G335ZkIw_q6ih&ON98B;Wwn*1E1Rp znp>-dh)=i%Ne|HD!5QSOA>suEknn+p8|b`8AqF0X2j&p-?V;`|1&^okFg)Oam=7Tt z82q8-%!fcoI{yh(4?4pKWR3yoa6SeGhRINI_Be>W0?m;0-~|=G1}#4i#6a>Lto_ph zHGhLB#KvZ*e?jM8fy}=!3vv)2=*&uxQSRVzV;%;BdysSmE1xT&?Zykf5dT6 zgScnIB1nB|3^Ig)f#EkazXa4m(#b!lxDd2G$#4K-0_dDkkknOZ{nEe;DM?`AsRV7e z3w(p*3s^a?4{cXCyn*B+Bak5s3=HpK?IoytAg*O#IFSK$=Q~I|DnhDThHhy2{D2#h z(jdNOVE72`pYkvW{D+h?`=REahvt_H(EI``-#$b85e&+Za-JO;&QGBIkpuyVOJE1_ ziV8v86QBlhPY%@l+u;5t4}*dv#63w+@mbLF@WT>FiI)x)-vDh7EZ~Q@^BGipJ9r$M zhoRsUB;W0Ydh9E-efR>ceV7ytanA>|a08ub21+LjUPAI0tbf!E9v|RgSU4Zz9;opQ zLC|`tz!?&cptJNqPO{O1m|vg{Nhcj3K?VkfU(oj60e48h17?mDw49uf4T)b!Dq>(* z25s*NtcCd39coTAc-)MKVM8n=<*b2e?XgX*ddL(TPFhE3XV9 z{^2jgMp*nlFM^0C%z%_Xkx=tLf&0-s3=C5t@ zGvNs&-$8OQ1H%{axDXFR0$Tci3T=NL$bp3OC#b!kvwK12ICw$KX@iRUz{>vuhfuJ2^Ta!PM8cSH(>46#a58;S4e`?7ZB4J7>=uf;#Z16BNH{fb%WP|@Gv-dLQ*EI zAH822V$OsS!u`~kH83khuohGXDyJRXLEFo*~w zb{H6Bq4A<{93pN8GMs^dfeAccz{4Og1LA&IKVl=apLk(5Bpt%)mkS(_@NxJIiAPxZ z&;yDhnesaQjS4Nd&oK3pm;p+0n*a;hnn*Z zIv#R?1Ckybq2dR@>t=Zv7~VtN59{x5gVy^SA|UAye2)PG1H(%2cs>sUg9aqO!@>=8 z4mrr)2heuZ6=*-Gl^5dQ33DOpVd=I3)*gt4*(*6(?p5PKi&hPWRRdJGIZq5bX!vmhli%srs9eL?OoP>0mx zp!4fNQRx7U#|vT*6JX^@9eCc2he1FXQjhaOk_*Ek@H#ghh6!~LlkGr;FfcIeh1P2g z{*aUt0TsUw9Un9J2(dR9D*geQ-yak~$}0%Tz;Les>aWQV5r}CF45Hi+@eQB>cBFRW zY-qhE@DJi1h_4wKc)|1RJPZeTA?}BbmoA3&J7z*c*c<8|1!#ReK>}jq52*N4=y<6B z=nz;21_oHUItAK(3uuM3_aLc`fniE5)Sa&&_QJ}a|IqQJ2GF6s3=9mA)WX2<8k)`( zxFGf(gQnYJF^D+|6Cv$~9H__Qz~kpU3=KVybOI{}7K($)83~32v~fQ-X!>t>1WEsp z+LM7{9dx|W;RD2A*tlyvbo`{?A0)ydsf&R@37VcKT!#4fHZ*+p#6sLTp%D_EpmjeW zsW50eEny)f=fcYW)6jOKLKnpS+91UY3=9^~@f?K$NC^NNr|N^6!>|Zq4y@h20Gf|J zpyi`Q&~hdr3R2F%#%&JPLEI^j4GDQz`D`Ev5f5O4gmV+rJx<{HH68|oxsVe0B2?T9 z+P}My4k>>ip~1lL3)=6V&;aoltUme(9X~1PfrPUitYZmH=NI}R=^WNC+Xx+B%|IKc zb%KsN9jJ%I2rON3WI^J63Upio+I?pLjkALC`vT}V2`t=V!Sgjz3>F5c^(h0iJS>2g zx3F=@<dytv3T6Lh|WBs5yI~?LCJcNVdb<5voxi9ZGg1|Fz6TcPF@C_(CdNbEB(C_?jlLj@!rA*Ce) zgJcjS-oIo((mAXgA}EI0;>mmAtuy=9K*oCkOD1N3noIs2R3ft0?l_0 zg^>IOx;qA>fs)F9!|4HZv;_8$vcAmI!f4?F-Zw>O}* z^RGe2-x{PK`CUhP0DS65^};&(wbs`?M$d2=2HgK9`TeuKJm0kprL zPy{KLs-fW!0c~dM2WTyXydSJQFsaEDc`I%){_u8YG>=>g(yyao__}AmI$_ z=YsAJ0hQYVJ0R)Y6Y8F$(DHBtG@n*L#aW^4ABCw9a~?z8*#;edFxUxcM>#{)gU;9n znZE%#P68X}v4*Bw1!%g3wIB4L?XCpqyp<2s98K{0SRRIexsVb7Iz7YC0UeL};0{S4 zu=z63Ju4u4A3)nVuy8mFEe9@4hNN>?e{Cyxy##1}3et{+&A%@x2gM^FgMuVv!~hn~ z0nqaK!&-=XNGfGu@PdvHUx1GHLTW1p1~KUPWP%!M`QQRgw-cc0HU#QlP=5vF{tL?? zH5w!}GBEH#`_UKJA>~^ERQ+k_eDs0Yka_{uPw9pBUp_QITmrjSRu(!hd>{f+KEuk% z7tsE)fEpyHfbNL`SuqLPZ(`7eh=cA|0*P;h&f_#VL-G;$qD2M<1{tV39XKHFgvDGpyWBm{Oq-R}rBXF)Y2zf6USv%>lX%8+=0%+4?{#HT^(7lvR+yu;>47DMB4K_|q& zuzvJ5=seDW36OFC)?NZFZxCdVVlY4(_v?g?cRh%Lq+4ES_?!msYv5sc0J=zvfq`Kz z)SVZg;bve7ai=bH+=dz2A2fiD+r#Fwn4tBb0CfDM7ivxwbRMt)ZCytOblgngB&2?a z<@W+cNH_>AgoG!oUi$)TXF}H%z~)Kqq4Pu!vLWRUtbJ&x4JvP?7*3$or=Yv`K;>aV zDJ0xr?Q_ty4p@9Qq$G!}XLt(DF9Ohcy*Q}9q7xwICj_I`%T~~K`v&N|HpDar1_oF; z1}$%4?V>}_euP05q`qc?<`>Z2C1CedLh{QTsJ(xo63 z?8Kn24{>J(S~!5J2~av|Kx>CQfu>J~1(5JR2enrlTHXpk*Z;u6`4cqWA3TAS!?672 z3+>lD$b*P~hMIE})}E|^JbX;Aa2_jMqHHQm2e%=5bKZm%Afnh3izO|qplJ8*sdO28r zFMy<5NUmXEaD|TBe3%X~0k*ylwC)3xejNND;Reygz_1uP{!m~A$uF>VVu>(&q4T^D z*D^5FK-2#Q=)4{*UmS$m>(ByeCxGtM1bHnVIUr2|f5Lmo~ zLC60OK-b|kK;w4}w4d@o0pfC4dixLU2Tgbi34s8p`IXT1cnQ#cAFSMtfv#U-P((GS z7-misBphJ#_&w0}gTQ)7JqYWUxkKBN3rryCQy%Kh!_f3|11*2;fX)LNOoHU=M^N>3 z&~*ObJj5K(I(v{89z)0L9^8WX3lx7K@wL!&!Y~~YZjja^1H)A%NWLyWn@`k&*4GVD z5c6T}-b84*ePAb~B?GAq85mAL%Z&rjb_FaPZbHYAF6=>V|Cm6>V*@~!u`w_(z}62e zf%@yh1&F<{_DME)-y#n~Llq>Qz}oY9(0;^&K1jNSjeoL1^OwMKNVx&4PxbR5^}>eV zka7dI&ae_1ZU@vM;d2WVXrOixbYA$uN{D-4`lTrxWT<0cgDwkO4`b z>!IR-&~O%jjxWK?KL@SX1S%l)5p29G8`^*T@CcGlVB^DC(D^ur(~xk6ltK&)525KZ zp&C+7LQ(|-Lm)Jrf5?HvBP_m7Lg(urK6@9ul6g^wR}h&r{G1i5J-V zgevIz69(w|6IZBzFG9+VPMz` zn~(Si>0k6f{RLX)4J!W=CO}deWEO*gAr?CC_5j+>fvrzl1Rd{kxCbd8VBy0Fi$^Jl ze_{8)Iz!9J38s)3fsOZq?x_OVTQD7xPC$1agPha|ZO0zi3yGH|XnWEDnm!*u^Bt@` zECo#`2cYw75MMAbs6hJ>4$%HMOk46A(BC z@fWNf2bJp}_cLTeOcn<@o`HekJhWY!0G+Rdjq}WcrCaDY0Bk+UZK!wywA_ZZhnGP6 zDF&d8y$lQtkX*yS-~!Ee4A6WB>BTTGq(b|H0lAPA1?vwsLc>8o29o~2L)}>ei?4~0 zlnl#XI?#D}0d|OgVf`b}J;fmZUib+~pRo0B!O(u?477S}Gc+GL^gzZ5A*BZcgA8=s zhG7Y$;kg&;9(L$_lfzbsJ7M#K>QHwkfI2Kl<7`i$<5U41kn%wYVjRN;XuaUD5K=F| z@`V|6Jka1cB;M1Y_Hsb;H8*tK1#I3Y6dG<0pvyfO7#O}l)q{pBLE#Xf42cnVyA)jh zNHGYYwKJzf#{n*!ft0Hd+Zh<#(DkdZb!BDH z_L#y0NK4=kNHGHggC2C=Twy*$9A>X2bbP+S1X9j`?sf%f34-RMf`gEBH6J7hnkRym zV+(p9@y-lw|0IP#!sh_mewGI4cyfaRB;CTso!+KE)H8&jhNlp;9l`+Jr|=MJuRAn+ zCa^&2YuNm?IJ91NfVNK{rZF&RL;W>jE~LDIq&fx$M(BFB1?7_Dr3A3@t28!R9>8a58x37rQwsDhZ_3XRBqXge(-29nNWp#GAAwub}$ zLBbyrstgQKP=8G@fTTm%{FfngoFri)#NZ21b7n)^dkoO_9wfChFyun#gAPPON(@No zF)#!{$1NX-Lt37&`ilu#4qSKusULqr%X3EPcyB=fq`ZRdcWBKA#iInn4Cs6-#1{+< zxls29L_*vT2~`G$qtJHa18Ba0&8O5r!}Edw#O1K{RA$h2paHah3hSrOf%+>U3F0qU zd!_{14{ZP)j00Mq4-Fqsc>^j3ChUcn4=YddpykE`aY)F6?wAH?Spjt?Ln|bm%!H=% zU}(Qs06M<_i3J7*N9ed{0qDYP1_p*hAVU}!7+Rp~!#|*{5B~~$M+OK3;P)$cbKb86ZO#7#J9#^BoMkA>|KjJ$W5;J%0dn9}}$o^Bg*k;Q(z< z!j@y~fTsTkXCW<8Si7AGI$pG)0U{3TkGnwYy8!4q5Lh|^?Pmg|lL>1e@dz9LnJfwM z*8;SD5GWo%>J6a#G!H=iwGrCRQILStN3eSKHgug^LNvrZu<=r@E{ORrp!27&a%l~8 z-ta*-B*($}#T%jR{DggwbOFO3#J%b>` z99aJ`4Vr!y2tx8NY=6*RXn&zW6w=;)1T|j@Dz1RGuHYLqzfXX!zgiAc51sE&xBzKb z!NxcGpyP@O@sRL=^+%pU`vn`I?P^Htf`MTHw7pu;3u({5#Hlg*Y@EM4|Im4$yvaCsf=8I-l#X5fTot_CO5iZgvJK1`f3GIu>YuVL~n& z*rzAKBm=`*SbEEc)GQegZ!@Gr$L$~3Led*-Uj99_U$cM{QjWpq$9+X1;|~wyAmW#x z=GQ{U?LTBdd+g~66 zZHFsB=Zhh-3=F%V<~Tst`@#BCA<*&91YSrut3u7MhOTokfbP?Q)faKlc}xKYNJ|3} zstgPY&~m1r8B#L9{ACgj$)^WBAuTtk@eEs__8J61!XLI@ZxeJKW5QNQ{n7`iwi#5Q z_1c4#5OLT%^%dxP^#HW>_5t91?mP?*$&mIKY=3bBv>z7$T~`B}m-zu(XWj(KDX@BB z9<*KeAQoZ{EWhjk_b>Pu7C^^0VDl-KF!h=c^{{rAIy65vFhTMWY+cq@=>C_4`;hpB zsoxB3=WLh<5r^%I*M`pXPN;;WABZgs46136aGnqf31?V&coW+H{jdNsk^ox|oB$o~ zy)YLN{;=_}m(cd`3AFa`OW3?y2V_K71ln%YgO+0q{~_xKVEyP6=r~@&Y)C$Zt&f@x z9luSegtV*ILi6K6X#4!ZOGvo^o4+W4`q!Zi;$PT){LRpM`9U$HCWWm7F@ugLJ3z;i zVd1bEYVQHGapSkp{+a+UB&WdYuOx0rc+Nnpzb-)A&kE3b7E)U=FeF3A2^sVu304J~ z&|g6NBO8(+<%18j97~gem|wt%8edzW?U@PC_77~FTm_ns9zgREES-FWwJV_Q0nj`g zC`ji+_iIe}3Q5nP_7F(?Gqir309_{x2~`FL2k3a00JJ`WB3ko*oC_vTh+ zU=U#7Vc`7)F&|_$2>*eW+YWmmEj`${sx%G?Trftka`(bUbRB|WeX%A=ELG~ zBeY#@@D3XC(C|3{ZTC)q?u&uVcb|pMzkFbXxF6PDYK6wH!U{+^153}Bq2r$d(DiAs z_VXR+{F*`nq=tfxCtrn*OK(6c2QEPO#Uw!YWlV;;(+XN{AJ_%4*9j`_11o3xA>|Bg zpHVTiKfA#gGI9bb4Hy`{L&vKf8X@hj15k6cq2r$o(0&Rebuln}hOS=?KwA$l4vnt> z=zefmdF}{pCo4ery~6sHb zM*uqh09*h6x*L?Pq!@lc+pCb)AOnL9G<-hvLBa>N&fFbZk8gn1&Jj%NPahm=ErJiz5l@%QZGP!!N9N_+74t`2`Nut=Vsi8 zt@jIqq(E(GdIK$k2Zcky9Ef^Iu4iDVhOWU3etCzRkZ@Lms$T)k7aP_>%y)r`e}t~zNZ18YUkVMkJZQdH z0NoG%7Ajr?Z7+F3_k%-P`wR>ppySL8yCC%@Y@U%3+D_Y`2#FV1yuXFjQ>l>l1{>7; zVAV( zh{+CTor)r zn})7;f{o*4KewLeH>`xJUP&IV}U;;++g+E1L*jk1GK(|wcoU%?Z$v-5cj~= z=RbqCmjb3k%0pQD+yPoIe}JCv1Piw*(E9hlQ%Ly$>ql6^%3DTA`vJBdeg<@&S|J4@ zUJgo}3=9l6p!ujF4U(^GpyHrz1t=U6-a%p()@}hc%R%A|Xyfgj(EjWLXgvk-1p|X9 z_`EM3h6$e`Q7C_hg!R8;Cp!K@}v|NIeS_}+V zq5cwp`U^Uoz#t2)zYG!};Q$-=dkS5L`C$&k1X%y;DAYX%k{}@r8`rXcmP-zDko2<) zT91c9%l`mjNXZZd@)QFD0}HhNQb>ZtBWypc26SEJ1L(XSBy}+`7(vH9HbBSUVBxS4 zTF)BzK+5wJsQD+M?Xd&U{uFGT>UHRPdya6_{*e!K9DV_)0mHz+09z0F7dn3-06hl) zwy#7CT0URc2B~2owIKt;MrgP_fbM^R%_F-&`?C$dApvs+S`H||+z(v`3!5i>0v$&( z$bysuu=d+6=)B>EW=Q)GQhGBm>|%n{F9K-eU{|2yS0DC6(i?0(y&c+*FxUdgr?B;S zH=y~N0lNMK7M=^B@wng#Bz_g3?k|Sc`yZg|PhkCmJRYBKp3xFEB3=9mgaL9(X>n4C23=9km zFmuYF{V9j#kbD6NB?g8v=s4{H=(&QhaqOAU^8*XmAvprpo;(UoCk~mAbn+OQ{%=Fm z^8{!;YY2_6U(oWZ!5WfZVD-XA==jV5v~XSu9iO=XT^9|T|D6V1N4fy5UHuU{4;!!r z(te18#)}Me+;756Nc;8;)SZUVb%PE2AT<#aRDC8id=${a=O%PKt)LMS^00Ai4rn+O zK`eZ$Pfw17qIz@7-)NV!5K)n!OF>9 z(0w->Tp{@y;yVV0&(Lvz0%=Ie02@Ew4Q;o4u!H1B18BUgf{rI_KpSsYfUdXvPz-TT z6jZ$hwEX|j2uTmHcr1d}zY5F{f31Lq^Kxi7Owxn66E;p;0i6fg@EzhW*!uZe==l5v zBS=WX_7RIf%ZG-3hLo7Z^OpV`Jn4SCM<;53mXsr3@aZBAn9Zp)L*Ni z?br(?kdom#RQxftonrtk&mp15z~Bq*7dt@L4Z_;*#0JI==kt~d60TD8S2gkXuq}K6eQeW_9w3J;W9UhV9_>IeZKZ z<&c^Y)^3-Fu3Jl}gM=sSe9oWHaa04)Mrj5H21qJmU|0cdKP|rnkkJkoxWh+WMJ0&~fh%(Eba2oCG=##Q>d$g3Y6yfvzX~ zpa^M?!S;(;Lfb75{y}mItbE%CU0)#1!T>sd z0TWk)&ihP&?q7qA8?;01y#QL+$-uzy66#-mXt+&43%57W`Nsh0IRLQph%Q6xUxiYL z%VGNs{h;kk1?V}Skl18ku!6R41JK&r-O%hYsASn>mPdNwe*Ax^%%z@?iIOsYDft8T*4c6Xx z3oYjt%!il{tJm0|^^O5_UKL^s1A`#69=yN`sV`vR(*|7+_Fw}fzrft%2Q5!NK-ZH) zY-eDY16`ML0DA5d%>1v=b>IomeH^fU2Rkf%&V+=dGBkc&pzHcRpykJ8X!}qBt$i2( z3x^d@mq5))fcDoWK+i*i)kkH}{@?@XzzJ-8rUlynn(zzK|AO_qZ$sNZ2E35)hxH?7 zL)ZCNpp|=_&~;f3&~uX@wLb&HYiN1i06ovS3tAr?g0^!GY=y)uto|y5?)&~A4=I^p z`Iis6j?3W;WV~oI)EvbG#@!Y$5mkaJLW;lF@dF!5)yR2 z2FR$_(Ek1bMM%j2+ovE8E$2VzLTZqSAjP0_PN40{hFOq&4Qto=gU^SQVrW3~uK=`s zOMsS#uzt5cbiKy|kVhC87+~RG14}2+aRXSpnjbnYq=2@M@;Wr#UVyF}p9dX?oC&QL z7C`F-nECq9_R<09c`T4zz`(Etnr;QsAS!bp(ZFC19XFe>4w6q{`*S6r?Kgqv5QVVy zAu7;*UxFc|pVAA>7qg+|Z9@_y-eL18Oi*!#eUSVPi$_Q3xPgHbq=tpGE*Kahq4VYw zRzb!+RzmAjGiZ6m06kw9X3lFaNIIN>*1z}zZBI`44{1li#(7+z?dPFtBvh2WxM4LCk@Pe}s;2ELa3F2eeKIl!Qv^Anp-}LLCP<04+ZsK+8{9yBaiY z0ZQi|WFa{kwhnLytepTI2Y{qT28PYh`6C5ryAf9IJ%hFIv|l-4GekXX-GT_T zUS0q_rwg|3s2(c*VF{!p*#=ENccAT=1nBxVSolbl{=yFIDrF_e)^#1 z#6#!JH$cy?fX&xmhNk}y6_E4~U6#b~06Jc=fE&_cWP_%++tBt>!Zk>|&x4v@1g$R; z(CUkAu>8Ub$#Jl9*csN(0u5X>3qT}NPInkn!g7+pUZF?(r$#LUIqpeXuUH5?Hr6QXntpao~H+C^)WEiL)!@r z6_9)cTPOAe+O7z2gQP3ie#{xrdQbp5-U6$CyP)$>4AA(3t;@XuU5C~HJERJnT;LEy{4_K?)u8qJh98i01sgv<2%RSi*a=Y&DMc9= z9H9LUf%%Xe?Fr3ayP)Y!VHPC4!O}@5w0>uR_FG~3`XDs_20+gvg4FU13_GCXBpY5s z3>JrUj~ODM<~+!Un0y-=j|$L!hXZus60BYK3_30(APi|Iz{>vx(0YnN9a5gVLBr=9 zv>v~p0_pF-#)U$l<6R6nkP-vZs%K!h2hGlr?v2s$WhSshZBxN>O0VWX^<8t zXg)ds%}22PgG-_9HwWmt2uSELFr0$M`-5_bJ0Yb6149$Eonv4KY3D#{c?Jd_==|CO z=r}(_7Xw2lbpG1F0FrKD^FE)U?o@!D0}t^91H)fveZc@7?}DT*1_sbDJ7^xtfeE!9 zd<^X;I)E0sGl16QfPBlqAPJ2}f!z>$Vdd2$sQC)eb-$o-F^~=}==#G2(DV9ypz&e> zEjJ9H0ST+uW--iI;)x_$|k-ngOj%O74s%6Ulc zU|>jshO+`RoMGZE&~=6k&~`hl{Qz2K1FBCAp!>gI>z409*O@S+Lt?fZ>aS_g`CNq# zNC^O&SIU99=Rz_>eGycBB2--99mJimb@lh5{n-W3@nl%~zYlGvO|XQ-EbJUGEoi%C z!4pV+KMKw7tD*JUg)WG_uztiYX#HjI4AKsV^+SW9>t+q0>j&WLvY_pU3(#{6VD-Xo z=>AFr=>AGrdq5s~evt;+e1s^tea^?=Pz|XEq02U;QJIc)t#4m2Gm*g?`E z>|6z1=(rg}4_t0A>}G;-uWlA96P`Wi7(iAz9zICwP6{gT!Pnw(DK~i zJfvK`2u+Al(C}P=)~`u{uH#aG?kjAGE(YArX=e zVdLR9p!v?BA5tR0_5)6Wmgf_o`%fXRVqnODwoe{F=V4*(3Vmohd;#T1PfSwBk8`r%7 z9bXdI4vAk_xGjQ~KNE}~<-9D^f{)OA{Qz2Sz|O~$gvQH(zmOaUaTNo@Z)iH%0NuB4 z4UMnK&~eTQOCaeVR<4FZ+r156AT1nNdI*K?j|i9mY3IP&vGUOTB_IQdcUXKqf%Zc; z)I%C9AED_-6S{uD0lHonRxfOUtxtXjiC;)=VqnODj^``IaeIf`QH=9riN&k@9E(QkBvD={f<-sjT zI}p}xVS%Pk1<-~C1_lO5Zen0)hSswJ36T01wjSdnG`<#0gS04M<@Q`?`L+StFFp?q zH#zA3f&*yhX|Tc4n*+og*nIb8X!&-)1|psd4F_guIXPh;q`rf#6PAazLmvEuh{N`o zPJpiS`EV4Hl413=7Ib~lf*?qGfQ9E#X!}7y72;o5xM@P$KNoZ%;?QiwkPn;Rf!=!p z6MqJccLwObFxWaS8EC(fK@U>i!rH_0py_i1GbCTY)+o=JyZK z^HpH;eUqT&vjeo91G*m?6lG4(_Qr;{koE?=T>)J$Apo7HhOO)P2HkHJf!6;$1w9|* zzywG>h3!LcfzJCV+<}xEu=cV7?Fy4?URXJF&@H=yC8upE-#Vdv7E zh1TO6KnF}QFfhQ*$B=}!mkb&qVCkm-x~@YZ6Ox``?RL2$P=Aw; zVZndsh&t4r>!IV8AE4uwuz61n=z5F*=(;$lE{166c%uUJ92?lUaW8be#B+H_MudgW z8>l%BQ1`>;d3Qm}!wJy-IHa~>V6cIXu$w#nxA5Uoe)&P2s8$_0Y;TLpV=s+Q)UW1hbfzWt2fbN5Uh38agKY9W5 z9y(b2svlY}J3#lD!shXHq4C>r7m_bv^=vsb{2dlT+N-c|aE6tKK@b|3^_LH{UM}c{YlaGc$r`Xi7!a0%fOHUZ8sh$gOqQubxJ3p z>0|-49}Ni&28L2-e{g{Vq~3?MyVRlMIS$bC%wgr*UFdk)h9i)C2dRA+7|uc0!z_T_ z&jlNQu!r`i(DQFUG+rJ!L)_U5F^*vhbp5~rZ%F*Y*12tgt_$6;9nyY-jf<8+>kDyF zhyk#D7B$fE&xD&0^{{*2s-WqIVIIW%*U)%52Ay{ccnon5tUve&YR-WgNQ@kWmSd}+ z`|B^nLDI=CXuR}7+kp;zkemexRR)G?Xt`7XU2g_UKR(d>@<9!fUm&$M1H&9>`yt>J zB!pq@lS*j#2tdy_gOwYgZ5^QY&xECr^Z+YAeW2rY4AAwE=b`@fgRbLJ@P_o)VCir! zv_CZgdhR`}{Qn8;6f0Y9X_4-1D2e31Q36LKKo1IyP<&~%tE9g?nQL*v~VIzM~h93&iI<{yF1 zdor{@OosJmH$uz90_eRt9Z++Ec^DYP7=+;SXOL9Kz_189-m7p3l5=7E+>@a8PJo_! z2CE-em_XdGkP1mZu>H|nq2>05<&bh47C!aR@<9Pwk3d|@z%UQGzor3nkP8C?1FSuK z9$M}N)I#zRY#s7mXgL`G>Uc6RFu?i?uF!g?0j(Uif%exnK<{mYha9*B$&a$o@SF#mzk|jjtXu*$V?gn~;Rz&!A)^fp4C|onga)*B z0zb6fbwCPIF-Ahm0cL3bC1Ek7efu6Nz8u=#{vZpMxl2 zOwjp=18I=-3>(iehmLnOv_tBsG|1nPc)d5{)eCe;0c(0E~h zx)b7S28Jr={NRR-kn#a$?+IN{cuFyJ$e_*>?S+nqT!4;;z}7ECLEEo#9ml`O$d6P$pYwlB-r@CBxwKZgAyeD zLtMqcPz`NYD13#O3~R@_LdQ=8_CQ*6kk$nQgB^5SIsk1yvLe*K2hi37b3(_r1!5rK z2HQWV3>|lJfbK7b-CK7II_{S+2VyUTWMC+Q&MPfg3JC|;e(+Xk`&PgT5|4_|aPEh$ zL;C=oUv7cM3nO$qHUWB`Gc3QTLFb(lpy?Tw@1{cQg%8kkhhXiN|Il<*kOEN&TUXW# z?MF1A^&^6y?aT!;AR!NH7ezzc8yluV>X+S6cm9L+j}p+%F`ESqhYz5MR|WrDsfc&P@o;=ck-CkYE6 zCHxVnJ8hup*+2u*l7y9S^PuB74AA>wVfSA=fcBdlp!EwZ{Qp7QX$zJ>e6$Se&Jbuj zPyl+*8myd&fSx1a06j+nlA9P9Y@y>12cYNq!`k!nq4SjsUPCH6*nKXi!1s1ZF`PhK z|GXMnk1v4MRT^NK9>mmU~B_`72=(Bm^KN1H%>QIKzR(kdg;B9x@-=4q^BWDaTl#=>#-=25SFY zxCBYCC6H)fI0j9JAJF#0_CUus8eAYXJM8}M9%%dF0kr)98AWGcm;{^mTnwoP*Fx3a z;Q*vX3R|Cf460sX4-}nsb-w)9K9i%nFz_1=Vk6Ca8l3yUD83RKCw4Zn& z3}W(WNboUKK+Ej|AO#Ez46ylqcWAsfK;s=Yp2h@Sf0Y1T?*y|~8QM;6(1e7KBQza4 zK*xtCK*xt+G3hgIeD2Aj@NGvcg7(mAX9H8sBVe2unpy8kZt-oOLWd*G_AAEtB1Irh_&~~^1 z^nN$kIP-JpxQzgGe;Fhe7#Q|K%fkfdJ?Sv>k3!p50nl?-VCSEFg0>$%K--zHepU?B zodusEH5aVDwt%iz=|G$Jl!CVF0?^JgVTHD50-)oWuzq?g)L#nFekG)KU|>jxwg(Dw zAoU0&cQ7z~g0@Qoav&)Ic7JgcbiPagdJillmKhkPKng@hz*T=xsK zK3eb;Qldg!%fN6Entmo6hSY0P(D2*`UH`)X?cc%fLkC?$53=_GCnWs`LbNeRK>d3G zx-SyeZ@L3*w_iY;KY9vH4+_w8^AO|T)VCAF~wEPh`21%b1(D0Oiwi7Nu&;5YNGB7kk$MFREApr>&hmO}JfDY(j zU|@jl7f6TJrvlJ(JYe&ive0p@0OQ+#=sa=)^n7X9`a@;tJShXT{{l&k3=B-r zbEO2J_npDonY*Cvr~}aRfg!1yfngPN{QLuS9v^m2MG>?=`(Y6zd|>k(lc4RrgqaW% zAf*HYgCDd$`Tz}2*myFi9R!N60_X)wuyt0s(DI*QF(ky4py6x-Z9jhyfrvv|FANNK zp!OC(`^B*F;jhsAt^l21gT-S!be*jMbYCGXUHyReA1_>ll!UNzW@Mn_X#&uDe_;Dk zH$lVU!9+-ogN@6{LEB3cZbR}BtRCTk#xDc(JRjIPE}SY z;UaY0i2=Hg5>omxFr+}s)dSG_5tiS-L)&i`cp&Wu*tu<`(Du@VNsw{?cE67pbUwuZ zI!^)1M?0bI&k4|dI*`(UfuRUGe)wQ2Bz|G-mc`I+OofhvDSU^-;9h9C zJsm23paqg*VdiH;%i#%OkN|+~*VBQPs~e!_-@@{B71X~4(0iO=;jj-nFI)gRP?v#$ zp%I#2!l2_e4bXlTB(*RwbVA2N5++H5BM?^4WKgbj6uZC`jPa(5E3=A`%?a2>?5c8qeKr(!W&I3+(0tq)hsQY(A!>s`A zoY)L#`}05{#QeWtUobFqLeDGXaD>zgkXU12Fo4b*HlWQLZh+>C1nB-R*gD&v&~q~k zpzC;H{rcn3_Iv=^eT6~L@dpPRNQnm-rDR}ef%d;Hpq&@N1&iN6NY2%O`gbj~+<5Q^ z5}q)7E1~T=0}+UN*!j16q2$`y25OLUkPY&q) zl?;C%?hl5pQ{{)A=P&{7T;HqE{>299ej?cVQg&HL{qBG^PSpsluN!7U>^%exXBlX} zn*lW83%Wl8ntqa?;uE0f!$5q;!0;Jbo(Mqi6NI$`zd-AK2k87DY<-x>m4ukyhjlAfI)#R`KXw7s<94a8nnsQVeA`;iYo=P_aP zl}DlFFhe(_{0H5?3kvE8Xg)fCHV?%MO%Dk>AU$yxsQJoep!CDXa6k-FZotz2R%rXP z0XokP3+LI;a^?f{9BJ6N&~xaxUj^DdkH28$p(Z5UAf+Dz!+&Tyoi?m}o(tWdb)W+hKCp9~+Mweb0nqs%*!fps z(DgG9(ALjzLED)Rp!YYy`lpQ0d9eoQeZ(+(pFsQ33_l_1kOAtiwa{^)2a_T0ft^d{ z3mbQx3Q6H-L6OM7z#tB-mldGnLa=u7b!h*>0D501B-R)h{zBU=4$yoJ$sG&~GokB# zKTL$g6s*0s5UTzF^c+suyy0Hxy*V9d`<~80(`^Iv+)-Hj?Id&@BcU3S&SCS^C!ymH z3)mnn8DnUA16|7nYWFUPgtRlgAk7p81!%Y>yn%!pY`s$(G=2r3>k=WhFfgP++n))} zkP;r&um2A{xAp^co(r127&4&q9R`k&6bK<17(}4;?*r($#ISV!8akf*K@Cza!P1)$ zbllj%3zD8;_3TEd`T#D7`lZl#XMoOECR~NM1a@yrHgsHKLI$MVfVC5Jq3QNPIK-#0 zaGL|2S5^nnfQ|#h#T$3|-Ig-~l8&LH#;VP=`bNp$*V+X4t(~ zA<%a01nBrY#I+0zTcG114bb^+*f_vl==k;q^m}ii>4)JhB)@zBS<1k`a15Fr1bQLq z2i7kTgsN|Vj<>+Zg^m?N%Krubpd|n_pZ_cd_5!r^$?Ku@y8{m-pTfqydtl=L(DmoA z^cf57-#vit>xac74>a9=*aazXVeR3|(E3i{1El8#S?$2U&;%`?H}pf)H$lTq653BG zfbO4y&HF?`&zWz4t_y;-H>N<(*O~x59|Mv*7#Oxf=Oq`^K*muawlFZLKufEvW7u=+OxTK*V7$8{mOl7ZnC zw7utm*53O8?I&)4o+kiF?F}9}KSBUHzHNcFPB;tN9{X?sGVcJpZ!Qwr{xrA-2?toe z<}Y+yaX}oUeu1?=XF%OA0NpPDySFqS>R$%v`Esy&+y`0?1VG0pVdDUHFmsMVM%ZBE zx1eR=pmN{>bp0W0eQXo7esp*NaVKou7az185>N_Bhp=_yKcMri1=Aqu7S``Dhpu;O zfUb99hvpY?=)7tJbo>q0u9Jh#vn!y@vtNYfmjgwRnrjlId%&dpXJNIb&U1ufu& zq}vB*{p@;B_xM7`2QEP8ZDIAoLTLY@;36a*VdFw<(0a!KdfozT9R4P> zU-JRF9t@VQZbQfI7d(QLC$RSaC1^W;LMp^xu<~{%wBCQ<56Ka*b3d*_$E6oEK}?4A zYZig;wdZ44zyxh!Lj83e+Wxr!o!5YkrwKsg#Q+*F5Z^H{ctYcaK?%~bIu5Nz1fk<# z7al`qSYZ3a%b@M^hSQLA3u}kGg!acBk|5%+^Anh$^Ar!D<8QEbS_yRg!~nW31yV~g zFnovRmk&V@b6!CGbs9R}SO8rY2a9)8Xg_X(B&0rtt>18j)~5>4b;2<5>!Of!vI1@W zLkYCp4uIYd0$UgK2)e&GU>BrhfQ{bUgx8UIqiFa5#GYndO8lbIfQiGMZZy@OkHXqsn?Qa?^fP@2V9W^JkUJHPphYuSk z7lN7d3StgyJ!AxQ9bmvJNcx2N*A&`LP=KC?0C6n?LmVt!LC;5m<(JPopl}vtNQi}) z3>#-)hSqBrp!J#zG=5#6?b{8|aXDDKbS8AXr~o=I2CJ`2pyfjVv_6HU=a2@MBv*gOI&q~8Q{rzdoNq#*~A z-eBk3oPxHW9aJFYHWxJiszcpra2#R|Kh%6JXnYAk&pn2fV;<1?{RPl@aM(D*IcWc@ z0J_cxk_#9ZN_s%?E5#szc8)y@wA|Z}2uX*qdq|6*?FWW7NQ}Vx>Fm({BLnnaY}ou` zD75^U06qT=Hm;iq?XO+93u*tr>Oo`ZI9LL-9Sci8UeI>M0q8s|#C8UTUC?>k2he#0 zSbNn8I?g5l9cP1$bAE%yOMwm~JYnr&L1_EGU>>A`Vum!A8LmUe6%(N6Uc%ZTA7S}) zE2KV!?QhM1uKU^mnqXyMV1TW+REMsAn2-f2|6%9Sb3w;@9l9aoZ?N-(L!jdl4A65$ zAf-A3!&T_{7y(6)6b@TQ4XRc^?ST#Ikd_;1(x5T_X5Dm zF+=Ehn!+7O4FaoQK+6L_{tAGu2ZQu_7#LETK*J3`!BHhVhLz_^#b%hESP_jpy|1R8`9o`xibqoA2%Tyl5X!n)8`^+f9(LY zzXog1-+-3$3!weql^{(dW(dX8xQ6|JOrDM zu7bhObMg~Y zAWBnm^1wWXl$`v6)I5fw(xl4xirmDUocv^ll$^wrlp=I-D@%c$v@x?j$ zCGo`|kLRZ5=H{2BLfj2;HdrD)zbv&VEhoPmWMFwxd_hruNosOQY6{3=EWC)1k#EUb5r9>GBS(f(@OJ_ zK|+}+Mxf9yN{Ua-E6q(UN-W7Q%B)I_FV8H=06PYx2&6bMC#MX=PR=dJ%qs!05{oM1 zGxL&jN>fscLHyLh(!?AH144O%Ld+E$t3^riMTwb^c*rZwHOk3{1{X*+KCvjXq!OgF zJh3PbL}%ue#24fjXO?7^rN$RP0wN=^I0KY6ioli^m&AhwN}-McaX>m@;;DJyAOOW? za$*TMyi$Wo^GY&vQ{gTGc_1}0IRm6GwIVe+z9==hw5T`}6eUUV=n0~@B(WqD9A+Rx zlSsNw<0dD9U6z?wT#%X!W`bm(q97(nPhvp<)M=oUlAK=v_BY7&AmdPj9pt{E z#Ny(7u&t;rj4w#cEJ_9Yu_(2;AU`i9z66|()05-Ni!w`6lM;)HGE>1xI5V%rC@B-1 zJTvo342>+{+_aqh#1gQ@nR)RUsfplJlANDcmReL2Us72BO$V7^d%%t?F3HKv1|_=u z>{77m;*xk!0*@~NXL?8$EJ_9EK_do8&V?j!XvQ=G1sOR1#-|nKSEc5GG6gieQuB&S zi@-qJj1aRZ8{#NuL5N&uC^(1-zeKw5q^1 zLBc9E6~Y7ARGg7ml$rv`GT`6?34)96#DYYa0mb=6CGkm#dFc#=U?w<9L1uwd08AAu zsXuta5g^?V zFML1yV17BtSV1(tZQAbHHi3C@DTAu_O^%=*O2ALFydzu!CeRn6b%0iJ-Cr z=7^%y;?klbXq^GFCo4Y_+-!hV+2{>2aN5gEgd_uKngSQ#AQM65F+2u~;z5}YT4Lpw zmK2nh#HWEXa&lrxYI=TAWjrVuf%JhaF3FDvOM=)%sb#4}kQNS@n_mL8Fg>*dn(N~s zEd-D>Bsn1oBm4Um!w z)NBK}6fT&V2zD)$pPO2ekq=IRP=Vsiy!4#ZlKi}QgcLM~RTiYCfZ`2gTw-wvs7Vfs zob=@Q+{7Yq!32^i$tJHDUJt)8MyrpD%2{H5sgQ1P{bD`mVhf6XxxD+N2InHtc?XSIWIpYH9jvf z7ZN(4lm}|oq`=Z&6*#0ozA8v8DozDA{gHT}#E_hySCU!*&YVy+$@#ejnK_^;8C0jk z9aCD8W`WWd0C@uD(ln3;P%i~kdVy>Jg$}qvKu)Y^7JxOuOvucShj(Q_t#(lN1mwfw zyn>?4JV+B4QkQ~^Pj<`6horV-x5S*{RA*3w2Q1;4SCX0zEy?{da}W|CMWsl}f-7^A z^1+R+%;MBSxF^wEn4X%KT7*&}6%;|5tB@oV57G>>7DPj8#?-RJ97r-q&d&oEtdMpS z)U{wSP{={}-~tv=DyO6-m8QoRLGy54X--aj0Vp7n;**0)lPbe}L3TltGbC5Um*%BF zd;c#P6p6U5hzeoGSf3ljLkshU0x}uDFtiaCV^58v{@3LnU|B92Tob3 z;NW)2&rQtCgOt6Xo^nAIxJCf?nnCQ`g8ZTq7%wd)vn;+4#)CA`pqf%EFcpG&#_72Q zRqF$9Zr&R~Ki`T4oV$g0vIP3EM`^s3aNd}vb1El4c_dm5w-TH)lRq*j1yDUeu7 zW?4~cE|RnIN^|2u2Bc(y`>jZ7pca6t(2UF!aQvl%I)9Ks3~*@%ie+dS3<@`>g+)p6 zAY-7l1&Emp8t;HP-Uw7Mz&N1r0kJ_HR9No|%+Aa!%>_w-dSx(nVp1`v%L|G)kQ8_T z0UVf6iM-NWP_G6YF;F2$VV#s&0tp~c&QDJ*iZ4h^1{cL3$HCYzxzaqC2uK#e16d8u z*U%vZPzESYPRxr3=K`>$pwSReW`H?3Gp{T$Co=_>C~`}SOX9)fC!ipJTJ!`P8EPw32dgZxx!6!Id%8_9T#@V5OiSgd{N(WzY-{GY}}4#?Lac~H_#&QAr6?j%84HfcHe@u2b|Ee9NIp!kEfp^?;rL~`>} zz=It~!bPb$koGM|S85@stq4*HP0Xo0n9C)J`q@)PW z%T3J%RT7|Z14$HTrspvf7eYpfKq)&vB?X>E;!7cZgqE`f`Q^Eg@-QCMcFW8Mw<3!X z^(m~%098tmu6_lmF9fOK5>ry*(P}wxDIO25*Anwe;*%4TGg9Nz@{8gjBPgIul9Cdi zk_l_PrX`j@5;({Qu$D8V7YwUMGgBZ{PduVGQks`q0UBaTO@a4};HqFn2wWh!C>7cc z%`A&ANy>?bjX8k^ZV;my$xeyInMf_qWJJ3F>P$+=gnGli8vP5t*8)RN$Nl6i?u?J$K>x7rBx%r^c*US>Q(?KOScrXX% zmo#Vr0doVW0}X2MfSWC#@&wxNOZJ7gl#_$N<2AX^VGxMZKm%7Gr@-PJYz8FmAPO?` zz&?kJT!7;_9-EO0q2`kSl_w`?hKd+R3lUw#C8-hBp1RJ z!Hfr$-DSD)={fmHi8=Af;Gl+eL<)*hL4%J--33UA;q<}6cf>?==fHWKte9%BjRcbt1Dh3&W zMF^CF5yB8dz<~gD2{c|oJvh+VKFAcP3^ZnuWpce!i}F&z#dTs1Y99}jzd)K{G;DYj zG5`zBE~ypCptJ|dCm^+{6(vQ9$tCenwP0r@dn7`J^+3(W>~h%X7P#2TPOSv10XG?7 zGH?!bz!mH0b$otl38ZZf87%}i1HfkGI_KvWBo;x&l#@W+O|XkW&MU6WHG*UcaGwH{ zW#L^UP)`Lkqz0b7$S(j_D0!eBAgHu}6yUI~W?3$*=KwYa)LM?uNlbzTV@`fD(nuf3 zUQj0&Rt%!{fK&bQOFVN6Ankroht)6NH?br+BQq~OAh85Ay6K%-iI5F0Nz6-0EJ{I$ zV5o;nff^&AKn6LWEEklX^FZUN@vvDdkX$@yLCD{J+0REDsz8<;Vm9(6oI7m6^AIYBhu03y!C>%p%Y*U1nZtUOps36ALoowRdqz z5wvNOUs@8MpB4`taD&zlU{g|zK#m77LB0Fbq9RyW!mCU~cN3J>ppChr)b#lL0#IfI zCs5FkR64lp04dO5W`g1XltRF)f`np;p(8J`TE;{kgyGp{(W z7#zcppa9K)fu_RpA;T)55Clg%)TfZF1I@~yrhZW#xH|=JbwQ;-E%Thz3UIW75@}vC zD8nOjA(~TDK;oeA0lNmI4K#KEYWE~TI~QPy{G!Zs&=fAbiw|}bsD%M-=7HyeARYDs zNFN>Kbm;IPaw7mF3@JS!wt}jSB2eTYWphwk2Ip!Nccj3SLN!8aWQaDfbCODPvO&2f z71|yI6%a5VfeHqYK9Kd$A$kxO>^Vqb3l0fr(*Z0DE(1XE6A!8g6CnuzER$54nUew; z;7Ejw)`EpWlhrUo%fTHe=tyj`XE0<)7OV{HZcvLcDLnD#Uc;CLzEX(#zQ+T@t^=_h>uSO4S&UhX3-%D4%9#ZHCRA7C!>g=xTL5c z2{M=mDmg$dhR(M^>L^g*k(mr>^JIcD1EhJ790YCRgRITI0J#2 z=7|s{WTp(tK}?jvG(g+zMM?1xg$O=OMRI;#R%tr4nVSr%I&xAg7>YCVlJmiK!PG(f zBXBNsf)U0C4WSez#lyJJt`3X~={X?DLz6j79+W~0@^c`QhM+Wsm=}Y#D?ovhUr(Ad!#?b}ppHT~L%?h8WL) ztqTCz3LT@3&&@A`RjDu`m@;rcMX-Q^YYCL#46*@&&Tv?o2R0LVL0!pypkVwn{FJoW; zwH~q{0|uZ;gv`A3c=)VBY91(JpgmP+gA5cd;C54LS!!NMd`5nLHaM0b<8`2kVUTPo zxFKAUT2xe8P*Thg51P7zP1=G?0J$5q-~;3o5Fb-zzlHyUKIVH8Yq$nRe z(SsrmYDZ;4mhHg32TJ%z#UZHU3aeEh(FaYp;6_4Oes(HoK}#~E@-8lc3{5~3Vx$M; zpoJ&_&Hd!2LK~IHLLjd}_>c*D$V@(x2tonOR8&)7%Tsa_vr`c{lp#H}BsH&$AwE8{ zI6v9Q7*scwJO~({2N(JXtOo`%*{POrj&^jr|$PTC_l$(?com@*#1`mv+r7(bJHBvIcV?H1? z1x2aJnZ>E`2(=*5YFI#~9YF)%MY$k_x!E8xIRiw3+Dxz&UoeZnEs|8oN~&ZRh!;RT zGtgowXzEJ!^oJBH#i^-a(@Iiva=_-LmS^UrfLJM+MQPyigW}3!c+mm!52#-gU!0v; z5MKZqCIGKKgNsAget?_;o%{e8OFr=k`7$DoyKns}?OBj+f zit_WpJtUa5kkJyzfFpXKfZEgGa7l`XNkQi9VAg@c9kP}MEP^Npkxd0nXcbo$m!#%G znzo>}6==aNkPs*_K-#_Fer8cBctIkl1chk? z)yjz_nb3(+un`uZ!E$g=fvg2ZXI?U7(gUO^t2DPDz68{+0;S~i)RN?KaGa!Mf>S<( z19B34G8vq$D0--@BBo!qlr-H{}K;j^eL&yC$ESi8#H(UT@HPU!FY_2giFBz@`)WFP11qBHfA^5skP%=l93~-eo z^U>Gaf}95u2gL<8IhYuvJBwv~F1iA22EsJM0u<~}$6#kqPmpTZausNX1CNA5>JHfW zJGl1=o(=%1Plm4BD1qcOQ2c{uoWXM7 z@nCnr41{$5Ks-qE3Nlm&t>eH=KCpwq6(U?CLLBZ9NZ%ad1E|}fhJYLiat+%0V{Eb@ zXTUV0+6Y=noB>+S1Z#nU1<)2bK?gWNrleMsq=HsZ!B^a*27{|7=fs>GcyKKUg!IPWd3KTK~1ddVUVQG*BxvrpI38eTggD=%cD=3A`vV-CZG0y=Rl7_GM0*&LR zmc)a{QF2ntQgh<-QY%X0lheS}2Wa4+9OlhrzeMQ5X5Z9e@L&L_zYl6*f!cH+hk%OU zGWb$x#NZFo+8I!t2^#7FbxuH9z!sOK7A55ur@{tHk<~z}QSge4RM3ir)S~#r6mYTx ziGllLAafv|Oe`*j4U&NpGPDZsZ1R(v;?hshWR z0(glx#CI@PgK9nS0yX3)0@)0g0L3db&Wck@N(Sc2p)@&Kw7HEM>I>=xODBR)^-Di*>lnZMMC+2|r3g9RQxuguK z;)F0kqL95dpsEA3`v;WvL5_ep2h!&*hHyX*PAx7*OfG=b!Z$~OT~?f#4(bd*$6Y}3 zWx4Swpdp%4&_)xG0IW>|TK)hken4WN=0_fAH7TzGK)$|krER~D%A(n>F_FrO?H9%k_?~@CAe>znIB)02pZT0Cv1=g(4s|f`v%g< z2MK|;;Kb)8=0PTyis1dp%zQ|T12ilK>ImfLG30|licjIOwbOlRB$dR1+B=-W+(+&l2@Eq!jJ=I7Bl2PH02~`fHalnCKiLoHbJEx zY{O1^YDs!#3V6T=N~ag)mllAA)Id^THh9Pp;pXzh%o0!~3-T9ustPnR2{xe=ViJe~ z_lSz(Q*&}M3t-JdkiDScdQh_%q!~121S&P-^YS5G(&EH4aG4A8NIZxDZ7O0YuFTEJ z%mcd|)L@P;j!()gD#-xJgG>Ph7raFfTml&thA0H>Hv?_LN=;0GnE-MFWQ;mKwW0vJ zAO}>@KpX;H^9mQp0j=6CP6f@%LYuK513(=v&|Z-A)RKboyu@6F)V!2}a`2)GP^tsz z2KQ<~lY-zFf`$gD@PusOV1V^@Kw*%RnpP5@n34rrPX^kk2ilYb9o~W)m0D2(Gbyt; zJ~62{KL<1h3UW0h5Q^eKy|!fNo-(liAsz%*5g;{SG0-?X$lIu*80JCMVu*w6gTxic z#N?cOa8UsoWdZR^3sOK$!Q8}(c*xieI26EUK?4>p08*ap=?|iEK|=x|sgQCqEgrM} zgbv0+tI-0`*coVxUup?B38bf%6qOc(rlrt^E1?BmaY<1LWW_hA1b{Tfi%U}SOTl%1 zWTCGmNs@O4$iCGimdfTUmp0*GOP_`D>L1Y{&39vrLSQnUcH5(+dn3Qo!3 z0vo!03~4(Rbgmh?LOVYxtGEC(Z~~uQ0L}d)=Njk`Jjg=isVx*`8Hoj{pjAa6w-ltt zCsjh1c@%>sKz=XD&j(MOfaZxn=?__ZWB;dqi6yDUCGqK?r9YrrAqm6;6^kIprzgj!f~Q%a zoRrLBaCqhA$Ad-?L87^3s1v5endynipm|P);>>jLOg(6@8zh>N0%d{fZ$xzhu2Mk_ zNAQ>c185U#1t{qx=782Ef(t*05{Nt`F@Y!hLDqx92(%mlG(J-R8jS-9!e;6qU2YVS zTu7q^+P6oR%1x|H0%tpTlz=xdg8d6gAH|T_YSs0S^sRn1X`*;*x@V(5}&}e9%ZG zbOm}oWK#j8xB@k7!7Pxo!3 zNuUM~DBnQ38oBPyAQRG&*7Jk*5kW%$t$zek39e`$IU*jh8wfPI6rYoro0O6WG9S`X zhj|U84V)W5o&#|p>k`2E6T~eBubl(;jEZ4fzd+*P(Nj>!LVH%AjfBt*;2=>@pE5ZS zx{e;C9yZDdE-JvO9UR|KDQF#vXo7&91WH+uEwW%PDDh;bt0h3qutdmU60Ai9X`-cp`%obL;Fe}$aV2OJ4?Nry4~ry_Okz=b zd_iIns2>k6?m&%q&|W1_s|aKQ!er>S8n^;btp@5SfRis`-!Y_$LDia>2U^j9F2<0V z59(nWnl{HUl}BAq`AIOQYgc(DF!-36ORZC^5lC{-9&6X`qF`kl+BdaY50O zT2uz=;)3Q{P#2nH=EoPO=A)hXFkD0tr&kA`+wpJei=DQzB>^L@rbhsNe+8enaLXppgi1 z0X+SJoC509gI3)k&U}C<0xePpwJ=~~Bx%Wcpz)fd_}s)w(2!wT3TRU`Xe%Trt%E#^ zE&|Gt;GPa-2MercmQq?^#E?>20A3sk6D-IqNM!&K;KBwb3bqrp9Rt#Jg9$_DUQ_ea zAOm|K%Trzb-QYuN@X-#?P!D9840wbKG%k{vn~LaXfr@2NY6gj97AKZKPCtQ-;S_<> zT4p{dv&LtFci13IhH*h`7#grpxxQwC*(9+c`qT~W}f zCLkjq3JXe0K*Nrxx}kyyRbUq)q8r6I;O;U^KV;1usBp_D%Flxix4?rFJeGm%Sh!45 zWl1WEH{dd8%1iUoQ%gXqL5>3jJTwQvxR8~3C6M)HnfdXlkOom^emqzwxU>R|p@5bi z$3x3Oh@+v+5oij6)kGk3L4jV7nZi(J zf~EvOE1tm3gS2?0ITx4=$W-XQdPp({`2@671!4fGAqSaiL>vkP$p|o?XXb-OKEZP- z`QT?&&&$t)&pSeNz;aPiW?pVSWSb`>=8*(It_PK&;I$#B;vhXB$EAT7AZKUh z$LE6%cPWlX76QqFltH9G>L5u5GCP)!HavKCLtw3aNz?g-9S>{(lf;5-S^3X+FgfnITdmBR|Nq9kxe1=nWKRVI)!6q>j| z2?{zO1{Fz5LCHqYLINd6pxcN|4NMG_E@4>`mp)WAIjQj=&w~63YTFf+fzI%OFT_ku z1~sP=Q&OP2Nz(F*vg3(qdO??GfdU$20&L|*1;jvTmV?PcXQV;xj7;bF)%#7gZLtU>K4mAZGx924uiv?+8~x3SCrfB}J9- z*u+7x1uDhBtV7*sgQ$mpiTnq1c56Cci$jY z0a!C=juJW&1m;5)iGwRBke<}ylFVGt6hvlOJa`2!NDz`m!An`dOpq8@GiX*PH?<@c zQYV9jK*MjvkS%9$We_nq7cw~wZeW5M-Js1(;FapB;8E5T@ao6J9Po)~;6x8L7nW#uC_|sAoOG=BtOV>erEFd*2WWNQN4O#&KG6F<{*0+NWYy|N^ z3wEH%57tL7N(Hx{L4(B5jGGn@6$9x&VuDv9!o3BOM4qsR&EG)AlaZIAfmDLZVbJy+ zcszrA1Z|WQfkqsmO*Y7gA}Aw3SWr{JGbJgh1(0b1(B?N#Xu$N86qP2I#DlUJ=xh{l zco##&GV?M^AUz+DBfyr&!#7Ps28<#33*>!}5~x1NfpuV$l7mvyp@#^7mkPjBFMQ)m zDWs7LERHYA zFOSbn%*rnUbwo-s(@XOqM=c<0&n%8l&d({$%_FEXEi(tSkv|V=5GX7&p{H=77zo;* zkXRfKs&x=Yq#>(-9Q%<8T9A!c{DZ6jECn7x18-u)t_YNRzzV?&^dUQXkqv=0Z@_Ah zVj5Wutltk-lag8t?yn##fLVebxQS(nnK_`g4J37;X+c+w)I~*B2{~~GF=GXZNziF# zup^_;4Z@{^AvY_t1k{i#W&o}7ONQ`415oh=3}v9^BLk>uR|Z-o0P0$S#@Z5-OY(~# z%drdMLE}`=d3sd>=3Yfv)}UXg=1dHLY+Ef5o?D=#w#ZdplDX)2tP z209cCl?So~q&F|W1kpeMmB~4vlVKqd0Xa|ua;P1c4ei%~R=h#aYyjnMkWr9ffXo#5 zvQ=>6h3?vfY!wD8gPj=yo{j~HWEMlyAJj^)0`$Y4A!~aOd%PisEW!CHkTX}oPK5Nt zzyS?$LT+X;sBaFk3*=wW!G)0VbPx|dnF_AE;d|vlQs8kqSf+)v7NA3d5Ds`s2{N7= zpIHW8?+0&nfdUAY0>CDN2RBh$qL2^+jn;woFM_fr$cdm;w9rwM63_rR>{vVSvNB{5 z_!+>kvnoJthR-Iz`k&x*2apOgvd<%2sbpaDuy!JLY+NUESHwG32f z6+u@=CB^4L4!?sOAM6Y|{S-1W4LRQj-Y)^y_C?S|q@W$g;93IYA*c*o3|$L&FCWNh zp!Fk28bIY2s4N8aali=})D!{Dy2NLs7Nw>@4oZR=j-oa{4RoSvVkPJdBhZPFxXjE? zgP9bc3MtrdnFiXqLO>0C9u#ucBeH`a(E;8~mH|2D9cmAJWiqG@oK}>W4qD6%n&<(I z(t&n^XCxMZ;uJEP7oQF4_91x&qzhEEL5J6%hJtK{XaFZi__z~j?n`yETzSAxjsK1VD`tlo)|d)gvhZ&E6t$A=_1v!X_WI-V`*+30gM< zSq2T=9u0LJ)UTjq0Ik9+E5Xb4ia>`86eL5=JI@3yvjG>@$xfMhu(R`%L-UeA)fZ&( zJ;)g#7lWI2(Ap3@=L?w$2W^PVO9e#+I0%ywn!pR|poJdv_@$)E`26xbSi=-_>?vrM zTTvx+4H(E2c)<+L*C5N2ATEQ<|0jW$8-SY`FoEO%=uwy8S#*$7Aua$B$j~N?%*{5kVV$;G7@GE$f=-VJJ3PE zAkU)@VP%7lX^IDX3DW*A%FG8}eNdcQQUGIvTChc+(}yy1;bT&u-ZrRT3mO8>1n-!J ztokfUEe7=?z@zVJDT$RJP7(NQb+G3lEb!vxyu{r2B9I_-O>;41u`_6N8RSn;w;dq^ z>ivKhLW7s|Li81-fHm|K(-4_Y_?T7_0p3O=Iky(6|^}6ss%X2me83 zA!z`5<^*VG8mLHy?gPQ9qzrUh10h8zsW}AA0Qm@y4TuoHqX?RGv8pJ5%m?6-1GPJF zIsw#RhEJRnflo|_EZzhkVNp^9T51*#TI!#ZnVeY?p9Jm^CTDFW3V?d)?;JP2wd@6~DiWa9r#ygThlUE=YLh~48&0t);|Gbw1lDX3sc1aI5V2M;TzC#S@N zPMn1vD+=w^fE~w26-qHi9aY4skfUHB41POr}k-4A~wx;JOPG>@brcr(8qjASYhur-4-!gSSAt zKrTIkoYsac0@_{fmY%yCU$xf5oYZMadbUQ)_cm!3QUU%m>v_pev6+X&P(|vH)mEEj1mysSFfI zP_KbZ1BYQ!X)$=^Uo!ZRK8STt?T|qph!E6X=t?!jS$Cjxf*6DVIR+fIpm+dD6_+MK zPdEWd!A3P9%Vj_!(9JF2m3amE#bCQYo(BzY7GPdku1ltb|$5e>Vz+3u26}C7J_fk3GZd?6ZW z?PPpfKIj}gcwqnvNm#IBlTQMzdIqH~hzmgdPskx7VADY%1=^>O3QZ+&g&=3ZIp7H} zXk!Sh4K&ya>N|s4f)H~-V+UX<@B|v9@PRBggNcI6qs+YcF*=;2$X5z`|f5 zkiFnVm!QM5z*@iu>Vf4Dagmw_UTgyq1$T_&!Of}?&}cN+LQtLn4GDlbplE?tE8xrP zK*AuaK!pM<^x%mWdc+5`M0UC5ehL4fjAzt zqyc6hZgVizg2r`=OA9~;6@Zg1IOf21gW3-1kR%2QJnt zi-FE*!QwU0plS|iZ%hgJ@G8)XTzFannTsx80@{O?g0L4^9-OvH@1kYgqcnb?t%Xq_hj3b(`DM33a2;^XB{R4_CkQ1R( zzhD{oNhXk7RscEW80>!VBsi#P2EIQJtQy+50<}(&`H1oxssPmH11kXKYDj|wvKJ9N zjsclU0Lz0a75ws`CS!a$sHp+bkemo@SAvX&m!x1hkO*u<04@LycC@Mtq_7x#S~0|< zkcu00%5ZXG0jMcbj6*y=BNNnD%}j+V0MDbKIs#O>f*TtUBS2O`>J9J`3`ideA_ek0 zE~%0t(D*9Y6R^EQpaU;KcSC{)3BgGdJT(SW1L?4W(lES+1nUG{e1;+lZc>0+9+358 z5dEM#LQ3;MV*;RETHsy-xN89EC4lB65N?K5W5^*04hUockmn%$`1}HdUbqmny^EwQ zDK#UpEECr7L6X3TQn(=yb3s827lN9LB!+4(k_3vmAp3GtOA^7eF-Tqys4U6I&qEeS zEy_XTnp(vBxnqbS33w%zB_eU%^Gd<}I%J`u)B+@~Yi?pPq_+l%fPnns%nDcV2}h|Z zNb11i;QJns1RaAtgBfyReV24_3l!9%hK*o@uEzwe4*-uqgC(Hb{xb8DA$LB4Cc8j+ z8hj@&X!#LH6=-b^cpWh)HK7Q=W)(oE;(#PTM=^n~(*>n6P?HF<^a^AuD42`EOTNJc zCP+1SDh_nfCHw;2RM1_%(93i|8XyZ}!P-FwQNl0yfQx`qAGnbOG7qHM0OBODAHXBB z`N<`jC7_+jU_F(^AQ_Ni^nqPSYY)pXC-R6dHjRkDMB7+Xidf8!ZW(CFHh7a0HUmMM z2VnOdqicljg9Pn$&d-64bb^l50NtUL2%Zs!9KZpcx`52-f(AiATRW1-VjBg>;YO>0Gjm$i-4R4W`G-7nPrIM@gSn9De0-8#ZJ(hGa-UVJNrRP{^FB! zQ=m=(k56WTM-WpPKtuZl>7f1Ci8&?U`T-JckPT;`!YDC^0d!jwbZn+5F|P!A69D*h zW9TR`XzUX-&ki2`f(&sY%OHkILCFy`Ck<}SfsStmc@EOYEC!FS!YBAaO@=(kf;n&@ znhCx%3*7O8)RW+%7d)TdH+X0cWIJde8e}X;0+g@8wGe!k4I~O4ZU(hI z;rGgdCg|ZeeS%VKX%2Y05PV(%Xcsfm4Uk|HAYD>$*cQQW4hG5O7nDHw$wid~CGcT) z&^RdQYFN+!Amsd3kYdQ9E|_B>JWwJ@1Qh~Fh#S8_YC)|P(EJBz=_&XwKu~ajw1P*c z;Ue$=#9UkoQVcRFIk5yhwhCf{y2HqP$OQ`VIiQ`Gi8+ukEdebeM7|yaq!GF}2*gY& z0^RaZSpuIvf*z^>v#+=y2Qp9#Qe2!|R0=-61C)A;D|10zZX?K2y3CY#@CXffGj?Vk zI3a`0s06oQlfg5LAOXmVPNa(iKqrVo*OBKFAzT7FKnu$pphXn0r8Lleo}k;4 z!6zLhL6UwvBr$`mhH8eb7=m#@ZB0mG01e%yr$qXlk>E)jPzFi?&*Z>_ zi&Jyb7+{?A)DqB*F7bH6T-1tL;X zR0%37;r0}jgShcUDIf}66k2M+>?lqJPyK_O3Gxv5)+Z2y0lZc{ErkJgk~=tf!PnV? zdfW^kHAV4=sXs`v0jEtzk>C_ z91jsf^AV`>0XY_0RlvBA`Xe5q1wF*@iGo`cs5Zjl1SSej4=C!uB3PBdYCov+z_E{_ z6)aMm3aK|S(?fA;33RbGco!f%WMSGM)3l({KNT*Ah$iG}Iv#xIHfY-oxY7l!dQOQ? zD#}kxNe0~$iQ+jN!YIifdElw>-2FG4}d`@N(XmJYYP@B{|$SgK!cL#Jw zCM2ey;RDW7a5q8)LB=4DC}Nd|g+6F~0BD}RAT>EYFTb3jpdcT#@Bno6K|J`NR8V4p z*a-;&P|}8EY>-w+a)vY}N{SK-;*qw?LY-5dn4MZ$5D&gX0Av`7FjOGF9CRiMlmoiT z6Sju}syHzRd{jYFJnDHP@Xh2PM}dztfR?vVZQz9p@hPAq!@v_Jkc12tMY5}?6uegk zrU$y6BP|7d`6fsmc*i1mo(#kS&Deli$|<1z)lg~3rhRC(hpeLo$$;kULj431}zrJ1zo5C z*_8t}0X&pk20BXtwCfF0O_vsfq6yU|%%TN6$AM}`NfoGG0=EyqL0-g=o(pAwQbT5L zYJ6!)GW=d8P_F|rx0#cgSP)+f+Pw-o4FPhn5m+O%5dvm|2+%2UuyzQD4?6b(g%1)0 zD*~6P(D(+8zkm;m0dKMc4fueg3wroAXuV)wFB#s?bBAKufm}x?$68ux2{M z6woP=pcXu+PYS82A>y!mqLbnwe8@KBcnsl^B22N;Bv9iCWGeJL1@N9m@KIjiNq5Lv zGq51&zT*nl&`g5}VrVWx*9>w9LKUQ8gR;8_ zY%3^<7C{{a?d7Gzm+OI5Ky-o^6hl}0B2HpMUGo1{U?4us5#TWlkN_yn7{NO$&_gXCt^)OXL7QU0%D|^@gNk_Qjxxyl zY{;r@P|F`f5yVM|b>JzfP`^P8Nz4QHci`?RfOK+EMlqm!S>iz_4ML;~a==AhE`*0P zzyT^sK$~hngDv3WzCi*7pfP^%!O{@*pf!Ww@PIB5N9-E}tr7sQLyj*kP6c211OTZYGxTE+kz+S@<7J`f>$oWuWJHDB6w&5 zdfh1Oav{)>{NT)00zQonb`MfXMp1q_NDrpn(DYvft;ryZS>a11LGzZN0b7t>7&{(n z2x18=XcY=XBd8Dr*H&e@&{YC3)x|ma<)9=CG6`w`c!@16Iprc>(2@d)V$d2tggm6N z4Bb`=jW388xE=#lFd)Oh{nHZgPTyouvVt{8z#NbQ$a%O>H)N*7C+2|;GDs{29j^*H zp(j5Ne3U_IGDs(=$6o+i{Z;}#?gTtc2HMw?2<~`RfLkM=-KG_(;B8_^aRRamanVo` z#6FN9xafi1Itpr8U;Pq3W;WLmL zX!8K!98lH(4a<~gmSn`E#Ugn66r>9}_6lNx%Xkn2SKz%cY@p26mgk85ge#@Pr38hrlu_ zP6hA)fR{qx=qM=42Nl5aV2@ymz)ycgQHOb~EUGko`!}jE=#*Q;EuyG$;3g2Xzy$dZ zRTdn;u$+o21)1>!-KY#nK9C|1RSi@IGXzf(!i~lN3UXH*)Qp96YOpk%QH4P61Q$5qO`}LBb3#pq zW*JCX18RJOH9!owFf{TL6j?`4ph!7|+LAMBj90jh^Qej0VvJ5oe zq1X<}&?o{$sU@XFd5A;Y;I@I!rcXh-?+n>!#9l?PdgO?Lju9b=L%SlVT})Wd0zBsi z8Zd)hzJq;Q9VQE&Y=_M6BUb5vwU?wBn#CI%fr=vNU6!DZ3EBbR`?0hnz7;(*7p!CVk87sN6Hv67*z z6y2Q6ywVEY3JWt`GZT=Y5l9-e228tMrt>mzF)%am zg3}AcOlhczuyg}52Op)-TLp4V7;P^Mx4PpnP$#egTF+C|?B3=Vyq9@;8Ik^D?AD`6ZH|@Ze!6fbyq< z<+&MZp!|toJ|{yvl)nkg=U|uwvY=QD2 z;l~6IzY8}&qgo6M9H78sU|^Ww#0+NLKobvuia$UX-wsj#0Zlx%L>+9-4>WOxV2FB# zo2d3WXtRLT3!sS?Ld}st6L$!Ln4^Fut^hU108P9BYK{e(_=7-*ISy#z3`!991fYrc zK+TCj6IXzm(|{)aAP{2C1T^u|Qb_pBKofu91yR2MO}rrlBEA7lyb)^74m5EEs5uAF z#3$rK%(;LjJ_%~h4K(otPl);lXyO-qAmSg;#6Qf^0LSAGH1P!<5cLeVP~%;|A0jS* zCO#YL9tkvY2dFs;XyOS__ZXmwuY{UofhPXI9b&Honz#YfoB%ZO{ZMlv(8L>{<|Lqr zGeFHLKoh?THKzhiTmfoM1Df~+Z-_f5pozbNnll4U{D2!o{Q@-c4N&)NKokEDHD?E! zcmmX%18Cw5c@Xn2pot5YLDKULG;s!~ISWuRs%b$YKMB&jvK{f=r0` z4m9zG42bvvH1U9Ri1-OK@d;@V@eAnUQ1{$G6NkC~0h;)Ndl2`(Kof_l|9~dGAr)fp z4;SK-{B&CJwXL0Ef5*4siz@;vP7}18|5(;1Ey1 zA)bLlya0!I1rG5BH1P${e9?hJd;+@oTS$7Cfi4a;X91dcz$=LQ6=>oYv>@@a0ZqI? z1|q%#O}yX@#GC_Y;vZf^#804$t3%AWfF{1+8$|sLbaANrAE1d(_zqG30!FNQR_|+yzefk1Te8D+L&*uZ0_=htP@gHd70_P#(4EIsf+XSe%1DbeS3&dUz zH1Q96Am#+1i61x(5syFfRK0%WcQV*hu-)e=pX9t?NgCIox0W@(1 zX^8j*H1VfUb8euCHwZw~KR^?opbioLfF}MCYR(Td@dNx2^$ZVC!+C>0L|gz(oS_Zk zF9~#Us5uH~;uriN<`|%fb3@IsKofW1gQ!nH6E|Rlh-aXQA7FrpH=v30BtZH{9cbbk zcp>U1potei&6$BFp70NnP9C6%FN5|^9Uh{FTR}G@d_2&^KNxU<(@6xH_yaqLcmkSu zf<8oi0h;(hsQD|<#2E}B>UW@te}I~Q08M-X)O?0VsP50~fw-RoO$gFVDv z1vK#kQ1b)O#27ovUwn)n7wi1-FH@dr@x3uxj6;Slv7(8c2+ z;y=*D8$u!C0*_I{#{g=M0h;&$SBQEGG;srOh`0lq_y%ZrCZLH=2!^Q7Kod`ZhC>Cq zxDP~q1G+d={RA{|2P2634QS#D(0I9kCVl{_{sWqLf(OJLfhVZpGrsxLqjUjS7<0ZlvrDn0{E92PzY(8Qyl`Q-$fcmOo~Z=j1q!|ef@xB@i)Dm+E? z?`5d@8ffAUQ1dO&#i8aqpoxEg=9dOE@r!+s{Mdme-T*a!2Aa45)cgf#;sH?iKR^>- z1$F-mH1P(g`X6ZG3Q+SIo}q@r1wBaoI-rRgNOFVAy#O?E>lqM#MWBgqI0iAN0ZrT$ zs=fnF{KIjG`WfirMKhVSMj0@S|+XyO6T@T@=+UjS9#fG$24 z;+_sP@eNxb?wNol&Rz)#&lzaq51{H7poyzO)vrJkZ-A;lfF`cC8seTCXyO+ZK-{D7 z0yX_SaNz~#7Xvi$d#fPkSfGhJxbT40JD`bAxCRjqKokD}H75d1{DCt>eFB=efgQv> z1!&^GpypJdi8nyaX+RVIU=A^V0-880G<;^Di7PQQv?jegJCD1T=Afs5vvx#3y(`%vpdY&JYI?-+(3_ z0ySp`n)n1yi24U;;*n7GFVMt4utUP_1G;!NMEnPuxPcwSe1=!3=^@|>MBD&P{6i!} z+yYJ9APOSxfF_;~b>{>$afh=I_sl>O7kCK~Uw|h5VFf?9oY{aTF0>VrUv{90Z%E+- zt3QAyuCN?p&IL4aWvDqf(8NC^L(E}#jT$~z)h;(`uBg8!oXyP?TA^z$>6Mq0zKLJfV z;0wf@8EE1QK0w4DpozCa&3}O=-T*b{1Dd$PH;6eu(8MP|&3AZ<8lH;BAnsp)CeH94 z5^gKd#1#@D;kE%yd_n?5oZ%g+`39vBaRD@OSh**GCeBa|QLlg|K4B3=+yG4+R_Cf)%R-+(5511f$1 zOh;`o|&a4ba5xpyCc_;w?~f zJkZ4FLd65n#8*MZ6VSvDpMcn#fhN8cs=feC+$<3iJ{4%&@f%QcD$v9~Y=xN9fF^$70z`ZQn)p4aIWy42 zKWu@hUw|gga2X=L0Zse~)SMk?;s-WE)E__-7l8Wf0-E?Ms5v*#!~-@#%z1z&z5yEV zAJD`{=6paCSAd%H15NzH3WzxjpHb7#1gJRzXyR&6b0pBj8KCAUpouSlnqz<_ zt^+m40!>_CImA50-AUp)SMY;;s@qH%vpdYt^oDd1~l;!s5v{(#4pT-m~#M4+yLsH z3uxk1P;+jei9eVHG3NoAIKxGV_y;uc2BK+3$@jXy;EYQR!On{iP)>8ldI~pou?& znj?WG&Hyz>0Zn`Y)Eome@i$O&EYQRSIw9_HKoeg8H75W~{1eoi2sCkp4v0AkXyOZ? z;aq?w{sU@G1)8`)JH(s@H1Q2kb0(mP|AU${15Mna4Pwp$H1Pvab2gxfvoJu$opzv! z2ed-WIe;d90cy?#G;uDdIXBS66IvkVJU|oQ01f94XyO7;bAF(S7c@i6VfcZXejY&G zBY-9@1~o?lO}wEAVvYiu_y?#t2590kP;)HM#3wXD%yB>yKLGVt0GhZG)SL)3@dXVK za}vGz`GF?>p&DWi!%x)o z696?w08QKtYK{b&I0Mui1vK#ls5u5`;yzGwEYQRSsvz!hKoc*3niGH~9t1Tf0!>_@ z5@JpQns@`$oB}lQ2&g#~XyOJH5OW&P#3w+_nSdr92Q_B~nz%zb#GD0a;tQbWY(NuF zfts@eO+26sV$K0H@eNROE})5LLCv{=CZ13VG3NoA_yMRnAJD`LpyvEQ7cYUB!|)3= z{ak>WBY-Ae1~o?lO}wEPVvYiu_yedp2590nP;)HM#3vL%%yB>y{{S^708P9JYEA^2 z_<}-+ISFXu3@0Gs1!&?OP;)BK#5WW`)Hk4s3qZ}8fF|AtHD?Bz_nXnSmzmkO47g0h)LN z)SL}y;zyw7>_8I_NQann08RV@G<+_giJyX+a|2C0Aq`^A12pjoQ1^U56Tbj8=Led2 zK`O)?hCit3X93h40W|SzP;(^E#2Zo|<|v?vZ-AO(fF^ziYK{e(_=IGLISy#z2cYHz zpou?%niGL0z90!=P6C?v1*ka%XyPxR=2W1GZ%Blg(|{)a0BX(zH1T&(b7r84A4q_h zvj9!}1Js-iXyRX>=IlTdzYq^G=Kz{G!%2wv1vK&BP;+jei9d*gsDFSaE&w&>1DZG! zBcwh515NxxEW{j!zo_X)0cwr_nm8xa90@dW2B08LyRYEA^2xI#3J*OZlH-LghR}EfF?cxYR(5V zaVw}fKhVSr!XV}_{6kGY3!vr*pou#|&5=M8ZwQ5$qkty90cwr`nz#ql91Aq@2_X=3 z9MHrMK+Oq26ZeOj6M-haAQ)m!0-E>*s5u2_;$cv8D$v9?1VPMcKofreHD>~vcr4VM z8EE1M0wLxsKokD}HD?2wcnZ{<9cbbg0wCrbKoe&;1rfi1CY}v7=LVYi1AmD62Wa8~ zP;)+@i5Ef5`GF?>!4F~%!++HDqX0EW08P9SYK{b&I0Mui1vGI3s5u5`;tf!9EYQRS zd?D^}KofU>niGH~-VQY<0!>`O2VzbFns@-zoB}lQKBzerXyOLm5OW&P#1o+AOh6N# z3N>d2nz(}(#GD0a;ssE1HlT^mfts@eO+3I8V$K0H@dl_l7tq8PL(RE?CZ6B{G3NoA z_ynjqAJD{CLCyJrCSKqUF^7S{3cT(HvU`t#VFA<}0W|TAP;(^E#2efo<|v?vZ-AO( zfF`~JYK{e(_ykvoISy#z2cYHzpo#B?niGL0zQ6@yP6C?v1*ka%XyV79=2W1GZ*Yc~ z(|{)a0BX(zH1V@gb7r84A8>-0vj9!}1Js-iXyR9(=IlTdzu*Wl=Kz{G!)b{41vK&7 zP;+jei9c|FsDFSaE&w&>1Dg0Fs5w8-#6Q?W%wb?eO+O6#AoH*SXyPxS=18E4GeFHz zKoeJhy2k)b`~%b+3p8;7JBWK6(8LX(<^-ULe}|eAfhMkC3o$1FP22%$P63+uKd3ns zXyOJo5OW&P!~>w_Oh6N7WrDObXP}8YSVPQNfF_;*HD?2wI1kjE9cbbKRuFRzpot4W zb58))JQmJo9upotei-SYuWTncK=4>a)t3y3)kOsMIn0cwr_nz$m=90@e> z26Kox3TWaJpyn8$iEBX3u|N}_ULrJpow2Ff|zpv zO*{c=&IL4aZ>Tvp(8M1YLdXyP9XAm%VIqop6HIRa?nkx+9a z(8L*_<|v?vPk@?ZfF_;*HOB%?TtFY<9tSk>1yFMW(8SZB=0u>0E9gPYNk9|d05zuo zO*{{3P6e8{fiA?H1~l;lP;(}riI+mnnSmzmpaU^y0h;&%X#U!OCSC(IX9t>ifHuUO z18CwKpypga6K{r^a|2C0K?`Ee12pjiP;)+@iFZNG`GF>0pb0UDfdw`FT!5M*fF?c> zYK{b&c!LJS90fG-3(#;jKog$08RWl)SL)3aRqsZ zISFXu0Z?-a(8TXS&8a{WH;{vv(|{(P05xXQ50WuJC4xouQK+U;;CjJ>}&J8s21Zjvl575LXK+XApCjJX*&JQ&40x5_&3~Z?B zX93h40W@(&W=Q)`0!_R@5@L=5n)n8&IRHA8Jkn zn)m{7h&c&p;uoOi6rhQVLCvW^6W<^PF{c4d`~lRQ325T7P;+LWi60P!n6m&)`~%dS z4QS#jP;+*miC++bm~#M4oZ&1)`~sS|Hq@LOXyOlqA?hEXi8Jhn^qW4Qi5o%9`GF?> zK?q_F13PN^5rCQ_fF^DUHAezXoB?W%0-Cr2)EomeaR;b57HHxEf)MvOpotqm%?Usg zcZZr2fhMjX05K;4Od2nz#cW#GD0a z;s#K2HlT^eK+V~KCLX{GG3Nl9xC7Lj3uxlWP;+jei6`(t%z1z&9so7x1Dbdi)SMq^ z;sx9ga~L>K(@z4_904@(LZ~?sXyOfA5OWmJ#2ujVZh$6U0X4@0O?(0;#2g1S@c^hf z0chg&P;(;C#20Wt%t=5KPk@?JfF|AsHKzhid;>egoCY-U0;o9?(8PP8=FC77Kfnet zX91dc1Js-iXyQ|#=IlTdzrYGH=Kz}c1gJR|(8Om$&AEXl{(uEy&I2^@1yFN7pouSn zn)3rq`~x$@90pF*^s@nKjsTkYN~k#!XyOb|a}?0T4?xW^Koj2pHOB%?T!0DU9tSk> z3s7?c(8RYx&51x0S73yglYk~(0L>Q#XyW^z=2W1G8!$l3X+RTy0Cmp#3k%T1KS0gdfF^zhYR(Qc@qm92a}J=1GeGwxT|g7R3^nHlns~xrh&d0?#08+{ zd_WVw1vTdfns~tgsOd)mYK{P!_(P~U5@_NLzai!*potqm%`rd|e*rbe0!@6v zFNiq~XyOgfcn?4me-AY$0!@6uPl!1QXyOx~<`kfbe}kG+fhNA;2gIBPH1P#cb0(mP z|Am?}15NzEcZfL)(8M=D&Dnq^&cXs|XYN1~zwixW&H*&>15k4=pow!s&AEXl{@^Rb zoCj#)7og^RKob{&n)3rq{KFTBISkyW>E{8|904?ONvJszXyOb|a}?0T9~^a{|!BP-UK!02b%bYrx0@(cu~{O0jN0wXyTnvb0pBj8KCAU zpow3Anqz<_J^^Zu1)8|P6Nq~p(8M1=%?UsgpAI!A0!>`uF~pn%H1Q8ma|+PJ=RwV> zKod831Tm)pO`PF8q#T=oCcYGE&I~khhldbz7NCnm>-P<4;%lJh>_8I_cmOfy0GhY} z)IAr_#5Y6Dxq&90a35mM12l03s5u|d#CJi>`GF>0a1UY*10QPo`2fuq0%+m~q2@@S zi8tJZn4^Fu&H&xVYJetw0&0#0n)rk}5OW;R#0{YS3P2M-4>czOO?<&^h&c&p;sMb3 zDnJvz1~sPwO?<;Gh&c^t;to*vOh6OA3pHm3n)rd65OWrwi3dQ<*?=bg1ZvI>H1P{J zAm$uE6HkDea{*2KHPoCNXyOm9L(F-ACSCwF=L4GfC#X3;(8NDngP6m>kD7iqK;vBi zP5dX+90@dW2BwwKoc)G4>5;905$z2 zK+O?A6E}pKBY`H~a1LUQ0-E>%s5u5`;ucVIEYQR!oQ0URQH75W~+#YI91e*AQ zGZ1qU(8L{}<`kfbyFtyVKoj3^8e&cZns@@V9Gie9?h7?%2AcSRQxJ0&pow3Ar5`l$ z5U4pj(8MpCgqU*xO?&~=Ul-8CqoL;9Kofs(0%FbsH1P{ib3UMnCqd2mfhPXpIK&(V zLDck905wMdO*|87js%)G1JoP^H1P*ea}3bL3!vs$pot3{gSaOFO}s%u1iZej08Jcr z4pjx3ctM>oSbYPU_yakJITO&tVdqfIKof7Mg_yGdP5goy#GDOi;;?h5cA$w*sDYSs z08RXZF2tM*XyUMQsBWN%FQ|r?^8ih}Konxm2Q+cmIaEK;#5Yty%wZ5hjdug6IRa?n zuyd#+(8Lc^Ld;P>6E{$YxW@oZ9Ci+s1)BJU3WzxlXyObzAmRaN;;?h5BGAMilta`f zpoup;hKLuSiNnsJsz4L}PzF)ofF?cxYR&{Sao9OjGtk5tpyn(<6IZweF@FP^IP4s% z9cbbLr4aQ8(8L+KA>tR%#9`-9-9QspD1oSdfF>T`0Ew>;XyUMQsD7Y{8x%v#VGu@5 zKMGKD1kl7`=TJ$Yi8~ZQ%yB>yXJ~}DCjd$>J!k!6DB~!3(&;Bt3ld7 z6=>oOeh~EyXyO~XA>tFz#Np)znz%qPMEwFZ@e9rn@eOF=tm+W=>_8J&fV$@Znz(~M z#GDIg;;{1P2Aa4+5Jde0H1Q9i5b+Oa;;{1P2b#D+AVfWb2x`1fm=6&bKob{+`bz>$ zJi!;DUI9(q0cwr`nz%gF91Aq@1wIgS641mM9zw(m(8OqTqV%1)8`3RGdK+ zHC~pstAo{Zpou@=ftVwJCN97Z5tl#{hu#08fF=$zM*~e9W{v@x_!{W>!xm`b0=y7= zJf=QM|e1A`c9{0c+GInc!ApyC2(;%ZQF z2{ds7sJH@}xD`}f15Ml&DsF%#9sm`$KogIEiaVf*$3w+E(8RN#;sI#l#Zd7GH1S%f zcmkSu8&o_4O}rl}UVtV(11esDCcX$N-hd{)1}ffxCcXtKJ^@X9A5?q>n)q?3_yRQX z3sCVDXyUh^;v3M!A40`;y2L5wV~n<(8Nul z;xEv|?V;iy(8N8U;y=*D1EAsz;;89A5-QGtCY}rx7eEuwhKfs|i5Ee|70|@1pyC>6 z;$2X212pk@P;m=1@r_V%2Q={`P;n15@f%R_05tJOQ1J*f@%K>i1T^uVQ1J{jaYjo> z{1%{z^FhTc(8Q&o;tgoxI#BTrG;w#R_yjcZ0I2v3H1Q;;_yRQXGN||pH1S5L_y#ob zNl@_}XyUV=;s?;g*FeQjpo#B+ieEqzKMxhZfhPVKD*gaX{1a6C1)4a!6(syWpovRB z#eblQf6<4iXOKWm|5{M>9BATZP;mh?aVw~}1e&-TR9pc~JPazXfhL|06*oW=Z-$Cn zpo!0giaVf*Z-I(?po#B=iU**HAA^cVpoyP`iYK6nUxbQhpow3DiWi`X-+_u(pou?( ziZ`H%KZA;QpozbRicdfj{{R)AfhPVHD!u?s{1;Sw1)BJOsQ3mnaTaSxI@y6H&IJ`e zfF>>g6+eL{E)EsHfF>>j6~BQdt^^f-fF`aE6@P&yt^*bSfF^DT75{-IZUz-+kVH-Y z?oe?KH1SxdxB!}X5>#9QO*{=Mu7D<<2Nl;q6EA{_8=#4oLB%c5#H*m<4rt;{P;n15 z@iwS<0GfCoR6GJrd=gYV0Zn{5R6GMsd<9gz08M-+RJ;OB{0vmQ0ZsfaRJ;RC{3TR; z0-E?gsQ3&taUL5;x?O-Kt_&4lfhKMM72kj+-eL$bX9t@2M5y=yH1T;*@e^p`%b?;H z(8M=F#c!aA?}ds#KodU(6@P&yehDi60ZsfCRQv~;_%ouyaXyR5-aSb$aJE*t;n)oVMKOIfn398-!P23GC?tv!m1r-lK6ZeCP zN1%xZLB$i$#KWNC8EE2BQ1JpZ@i?e>1)6vgRJ;LATo4+b9cbcdQ1uhg#IvB{Gtk6k zq2??=6VHRHUx6lG1Qp+aCSC>=-+?Ax1rKY=FR1Qox4Cf)`Wzkw#+1r>jQ zCf)}Xe}N`G2`c^pO?(D`<6JHG#7eEtV4;7a{6W;?BS3na# z1{K#p6F(0XH$W4=4HdUQ6Mq5~cR&;03>Ei46F&eI4?q)t0Tqux6aNMkPe2nt1r^Ug z6aNJjFF+Ij2NkbC6X&*tlqU^n;?i~y@eVX`aj5zUXyQ^(@fm31vQY5_XyOV`@fB#| z%24qQXyQ6h@f~R5W>E11XyOh~@e^p`E>Q6cXyX1*@f&F3u~6{`XyQpw@fT>~=}_?x zXyPSM@gHd7O;B+L8PxPY2`bKkCSC;<7eEuA0Tq`(6Q2teS3nbA0TtIk6W;!C088EE3GpyCB+;_IQ}6=>pHpyCZ^ z;ya<@9cbeFpyCtI#Lqy*XP}8+fr>9c6Tb-+Ux6mRy%REiz5z}A5mfySH1StZ@dIe$ zAEDwW(8Rw(#V??V|A&g-KojS%hoq|qXySZO@fT>~!cg%KXyS5E@gHd7>QHe8In?xT z02Svz6E}y73!sVHLB%D|#ND9c3TWa!P;m`3@km{We+|&YS@a;{7HHz3P;(s6#ABi2 z9%$leQ1JjX@jR$_1e$m$R6GGqyb&s%fhOJw6)!*&p9&SPKoegC6>mTjUk(-TKoj2p z6`z16z6L5j15Nw@RD1!N_+_a03N-QaQ1K0D;`gEAJJ7`6L&XoEiT{R*pFk65ae&0* z1vK&X(E9EMnm8v^{R1>{Ua0sBG;u+w_y;s`QKH1QOu zcm$ew4pck=O}qdqo`EJ_0u?Vn6R&`ZSD=ZvK*bx-#OFfAJJ7_NpyCtI#QUJ)Gtk5* zLB$uKiBE%yuRs%@4He&jCcYRdz5`8s9aQ`Pn)q_4_z5)eeNgcWXyS*V;y2L5PeR2X zpow3CioZY;zY7)rfF}M5D*gja{2f%BK>;=We}am0po#y4iVL8LvpPcZwFH{DAXHod zOEr>L_-3g37ii+Uq2eFV z#MeOACH_DYKMYmRpoE(KPe8>v(8O;-#RbsBpFzbX(8NDL#TC%Rw?W&78ffBQpz00K z#Lb}nBMUTfCTKt10Zp7AD(-qEs8(8R5v;u&b-4p8v|G;t58 zcmNLXyQkq;y2L5FF?f~pou?#ioZY;zXKKjfF^#v0#cs;Kofrh zRnMS|n*KjR#W~Q#|3JkB(8P}xL(G>z6K96@YZTDLd7~P0yObVsCWgM_#EiCSp%B5 zD^z_4nt0+uNH{M*6EA9ml+P>B#5dd)2d}H#fhO(%6+eI`9sm_*P(e)(LH!W(Incxv z9ze_&Koe)U0}+=%6IXzmuYe{la37*R0Zlx0ImEviXyO7;dn?eyAKZeN(|{)K@B|`$ z08M-=blms^n)m@<32?aGKofUxhlnevqK3~ts5uR2;tq_GU~?v*iNn_0&p;EOpa@aF z08RXX5=49hn)u&fNWAPo6F1<5s6T)vo&a^v1vGKkdixt_;u91g<~%?X|G)|n|9~bA zTPObmO?-kpL_LEVYPelUhKLKGiNn^(OQ4BgkcFsMKoftU1rawu6Nl~7u|N~QAOlhF zfF`~{8zLTnCJx)D6M-gvK^mey0Zp7i6Cz%KCe9rKiLVMY@d6Hr`UW)d3t#2f`Q@dZ$G4A8`3`+Y3X z#5agQ%yB>y|G)(i4?q)#?e~d56HgF^s82u>XV8F%7ods5_WM+zi5Cb#)Hk4s3+O<^ zC!mSL?wy~3CSD*2QNI99JU|~Jz5z`fcJKTSH1Prfi24I);s;V7;up}wVfW78Kobw( zhp2ymCe9E75&wWD4!d{$2b#D7A4ENa25S0w5CjnyKof`EJ1>DI{(%RgUI9(K02=QG zXyUTa{BD6JzJVQLjsu$b2WYt+fF^DLH75d1`~w@roCGxS1JLwbfF{ldy~ncxP5c8l z#GD0a;uDx4;s?;gKL$a{u@h+G3!v&Rpou?#y5|O(xB~;kd;?9?cu6RPh+CkEFDQeE zJD`adK-GJoiC!Vzq||)uRs$Ifr>YviSt0kJJ7_B zT!NT00ZqIHDn0{EJP<0r08KpZBE*~(XyRf}@eOF==Pp3h??4k5go+!{_@e63;bD;jcfhN8Z>YfK^;(AbXUZ9EFLEZBKO`HR&{s)@)q%#orFleEspB$(- z2b#DWR9pZ}T=ojY90@dWMyPrPH1T7nAnG;H#801th#R1ZUxT{e0!{qiNr-v}H1U3@ zxCff}(i0H%0chgsw;|#YXyR9HLBtc##An=uh-aXQ$K8O47odrYLfun=ChiDzPXn6x zU-+vD4rc>2agKiwaR)SU2dH=ens@|Nsw^ZfF_;+Reu0Yd;?Vc0-E>-sQ3dkaRCM`a5ymN zp@wGwR9pZ}yaFn&fF^zeDsF%#p1=q(-vLeh22?x%OmTj z-vJe$fF}L}D!u?sTo)G3XyOLU5ceEF6EA>@UqBOI0Tq9MCjJ8|{sB!qf(2qegFb5b zcRo16~XSAfF`b73MmI>pouTo zqX1UF08Lx~YR(2UaRaD1JJ7@*?1q?g08RV=7sNdm(8TSb=G;INSAd$sV2B!S{!sNC zXyOHXA@(MqiN`|KSD=Yc*aT6308Km5po>Gz(J)5!mqHPQ?|>%W z5Tyi8Cjn^UM=BxdDgsTsU;!lF6VSvHd?4l&poyP{np1%$zF|JZoCb7p4~RJv(8O;+ z&6$BF{$U=(oCRp&3nC%rY(Nu#0ySp`nz#YfoC9d$8*CuvTtE~51U2Udns~unhw@eN)O^$ez{{@vgW z5qCfnFNE6bfhJx6H9r7N+yE*bfhN8HYHtFXcmvel1!&^+P?* z6k>h_ns@+Iya7%8SA;4!J$Imqdm2H+C!mS%aDs@>KofU>iZ4JDKkNumzXDA>04lx# zO?-v}MEwplaT}=k0W|UN_7L?a(8LX);up}wU)n*`-#`=Zhl)Qy6IXSHsDFVbt`AlJ z0Zsg+EkykfH1Rc1aRzhL^j``U=Rgy8f{F{EiSt9nCD6q0*g))6Kohrviff>WGeX4; z(8L#6L(H*26OV(6JD`bQv4W`gKog%26%RlYcZ7;Zpot&1gqV|nCSCy*&p;E`go+oS ziC?gQm{Wl!-UStJKoi%3ig%!iPces>GXYKfwI@V;2AcRWsQ3aj@m{F-3N&$RsQ3mn zaZafC4m9x@9uRvEpos@V#ZRD#3qr*&pozcrhM02$O}qjs{s2vUi5Eou3p8;PsQ3po zaTZ^Q`X6ZGvOW-T1`E{m9}ZQ|fhIl?n(qYA#6P$~%#lDBH-v~Qpoy=5s@FghkAR9B zpouF6Ld>y16X$@ccR&+g<^oagfhO((6%RlYzXtVJ1e!RTJH(s>H1R$+hE{021faHx0(n)p?y_yjcZ7iJK9XP}A4LB$uKiSG!3s9%95z9j%6 zz5z{K5GuX{P24&RqW%DyI1^O-1e*B5P>A{qXyQMh?zw>`J`-9GK0p(rGO^>+7#kW4K(p~ zsJH=|xONaky#<LQB%q0lK;4;vCVt!m zVs8POcpy}~0!^F;D&Bx5zTX&PP6wKJ0aSbfnz$rXd~E>Q6gXyQyz z@gHd7_n_@725Z#xp9vM`Kog$|ZC?qXiK{}zCD6pbLfcmgXySZOaSb$a4`{o~08P9J zn(r*o#2>=iKWO6Hq9Em`2b%aysQLgjaZjjt1e*9Fs5uE};y?a+4A3N&#KsQ3mn@ncZ& z9cbb=q3x>!XyX1*@e^p`ebDf{fF@oA6~BQdo(2_vfF>RU6@P&yZU+_rfF`a575{-I z&JPu5ut81#zat^(hXYOgIaFK#P5d%cTmnseKU7=+O?)*}TmwyfI#k>MO}rT@ZhocpyC_Q#1o<7JJ7_rpyCJ6 z#IHl!ODE98mq5iIpotfls({D4UZ9B^m_fuppoxEgivK_pKVS|~&tQw1o+ns9#5vH! z6D%R(0%+n6RuFLsH1Py?h`0ipxPc=?Tmwz~1614qP5gipM7;%?_ylK&xC5Gaf(u04 z15I4P6(SyhCjI~_9)Tvlzzw240Zp928X}&7CVl}bUVtXPzy_ke0!=)@79!q&Caz!y z5$`|~e*hJqfF{1c9-@8*ns|Z(M0^37I9mr~USI{9c)}&fxa$Tq@dXzl;ycj91)%B= zpoteqK*~b~JJfV_AG!}q0!{qD6^Qv2XyO5jAm;2q6E|255r2RtE;g(8L)YLc}kiiL>-U%(;OkeqlRA{R1@d4^Zl%JXyO4-a~#mb8JsOd-H9z0H`?%XyOx~<`|%fe}I}}fiAuYVy^?5IKzF2 zcmSF>7jz$J1e*8+s5uE};t!za6rhQ#K+UN@6E}dG(|{&E;Q_=w6VSw+pytd#6Th$# zqJ9CoIMkdCXyQ>&b9SJK7eLK9fF`c+7-IefH1T|>IXBS61)%0UKog$;HRl7Gc!e`$ zUC<9S@eLaw_A)r3r5|XyDu5>519guCns@-z90fG-3r`^C8=#3VfV#&5P5i@pi24LH z@fA>eGtk5jtc9qrKoj2p6+eI`-m%{hT(6x#6JM|bB7Ol)+yN?n15I22D*gaXoM9Qn zoEK=~3;H4AAJE0CAmTsJ#1m2=;tbBH@zM|n5$8Y?SAdEOpot&wgs7K56JG!oS3nbQ zFodYrKofV6goqoUi7P+vl;Tc3c0!fhMj1O(zU4sOf(JR6PfpI0IB%08P9h6k@&vnz#Z~ zTmen|KnO&=2AcQ-KZv*ins|Z_MBD;RoWT_$?tmul-~ti%Ko@t0hzFpFD>y>LBhbVh ztRdnFXyOm7AmSNl;uoOe1!&?2pyCy1;tf#o1~hR6Gl=;eXyUN)a{{_Jw0xU^CJrl? z7NChM7(&cnfhL}y3=!XeChi~r5#NC(zTl5OxI8(4CeH8@B7Oo*yx}TD`~sSI!bOPq z4K(osdm!Qu(8L!kfr!6A6F<-o5&wWD-cSw^|A8j{pbR3;;EJ058?qtd9BASS0T6Kk zG;s$%h`0or_yG@yxB{AZgF8fA15Mn)4I*xUCjP(`B5r{uz5pujfF|w$756|BPjH5q z6M!bJ02Plw6BmGrC!mQxaDteVfhL{+6)!*&Ki~*aUx6m>02OaQ6F=YpQQv_kt^gIE zfF{1c9-@8*nz#Z~d;yyH13QTN6=>oKQ1K0D;to*p9cbbYY$4_xKoeg86+eL{-T)Q9 zfF`a06~BQdzQ6`z{sT1e1Z#-+3p8;DsQ3poaRsRO4>WNOs5pZgYWn|R1u>rkP5b~< zTmVhH0V*zmChh12B^3Ln)n2$xCfee15`W! zO}qdq9)Tv_U=Fc20ZlvrDxQHR?f?}pKod8BidUeC3qZvi(8M2@LG0~76F&eIpMWOb z02QBsCLRD4Uw|fV0To|?CawS#-+(6mz!c)19cbbwpyCJ6#5X|2PoRlUfQny06HkDO z-#`;rfQmmr6K8;mzd#dzVFGdI2Q={uQ1KsV;tf!726xo-9{?5SKoeJhiVL8LGeE^9 z(8OODL)@c)CVl}bu7M`L0V-~QCO!cwZh;xo|1IiTVT z(8NC&LfpRsP5c5>d;^;J2B`QBH1P>g@dIe$1yJ!5XyO4-@e63;7EtjUXyOV`@ds$) z3{deGXyPvnApZJ*CVl}b{sT>X15}*B12z3mfQoaVi5Eb{1<=F;pyCo};s#K01vGI5 zsJI52I0IDN08RXbKEz)ZXyO;3;tpuy8=&GIXyOx~;sI#l1yJz_G;s&0cmkTZ0#rN$ zO?-hK#GM6b;t5dk3NsCWaKxByhV15NygF2wu^XyOl`;xo|14?x8ipouSlimyNu zZ-9z#Koie^itj)Z4}gjvKofU>il0CeH-L&?KoeJhir+vJXMl=7KoftU0||#0XyON; z;vdk&7eK{-poup?#Th(N(|-a~oC8ff04gqkCT;)~mp~I|fQl=iiC@r$xL*TJd;?V6 z08M-XRNMkhJOL{1fF^DL756|B7l4WfpoxFbg19FFP5b~CLRD4FF+Hw zfQnb3iEBW`8_>ihpyC~9;tw<-?wo)oegY~!15JDfRD1!N_yVZ-3N-NvQ1K0D;tf#o z9cbbOQ1Jt3;sH?c6KLWJQ1J_B;tWvn8))J$G$8(cfF`~GD*ggZya6iy0ZlvsD*gja z+yg4k;Dwt0Eui8YXyOV`aRD@O4yd>Un)m^Ai2D`L#1}xtHPFO6pyCE-;;?a73pDWr zsCox9aR;cl2by?;8pJ&TXyOV`@dz~W1*#DB325R9N)Yi3H1P+r5b**u@dZ%v3UqPk z_;3T7ID;6(oDMW`2T_Rl1T=94eu(%CG;sz#i1-3@abAe{3N-NpJP`2>XyOV`@f~R5 z4%`s+2hhY7pyDUc#08+@7tq8%a6!zufhL{+6@P#x&HxpEfhN9y6JpK>H1P%wi1-gQ zaR;b4gEwmWXMl=xpot$~hnORPCa%B=5tl#{f4~9}S3nbA02S9j7iWg3H$W3lfQnn7 zi90~W9ni!Z{^^0oSAdFVpouT|4pCo#Cf@K6 zB3^+eo^S&q-hd|Fa1J8gfhNA-2t<4WnmEHwi1-XN@q{%H@daq&59UL}SD=eef{1TG z6HjP`i0?oXZzzX|A3zg#$b^WWKodU@2@$`5F762tzkw#+U;z<-fF|ys4iSHWCe9!R z5&wWD{(uQ0{sT=s;k_<6oiO;IrT^OyaSk-`gkunK0d(<=5OE1KafLY$aRoH-2W=2> z4K(qDLWsBlnz%zWMBD;R{DBKZ+yPBI0V?i+Chh4N&n3XyOcN5c6lCi8n|>#22867eK{V zpozog88@JbCqUKjKobvuiXT7|cYunYKod8BieEqzSAdG&Kob{$ia$UTXMl>oKokEU z0rBq#H1P*e@gHd77og${zNqQ{092doKokEU1_}QUXyOl`;y=*D zFF?f^{Ls=rRGb4%d;?Tm08M-WR9pg0d;(Nl0ZqICDz1ShUH}z0Kod`Zid&$G2SCLg z(8L{};vQ(?22k+;G;sx}cm$fb08~5yO`HKLo`EL*K@<}H1!&?ApyCy1;uoOe4QS#A zpyC~9;v1mi6VSvLK*eXEiNnT+7odqxfT~}CCf)!Q-+(4w02SYXCY}HlKY%7402M!h zChh)sJI52cmq`208P9ADsF)$o&XhhKobvuihH1mJ3z$) z(8LX(;t^=#3Q+L`G;sl_cm|p{15~^KP5gr}B>XGT#2-M#8_>jI^GY3P;uoOmC!mQR zfQrvR6W;(8Uw|gQ04lx$O?(1Wd;^+z15|tmns@ibtS{8$iVq z(8Lv>;u&b-0#NY+G;s!~cmfQomZiC=(p z0aSbin)n2$_y#ob2B`QBH1Ptc_yIKW1gQ84H1Pna_ysg^2dMZBG;sr{_yaU?1*rH7 zG;sl__y;s`2B`QCH1Q7tknm>+L`(lraSk-`3s7+ZH1PvaaS1f>4N!3fH1P#caSb%_ z2~cqZH1P(gxCNSc0aV-pO*{cA?tvyA02L2F6L)}$N1%xtK*bZ##1)|88EE1HQ1JpZ zaR#V(1)BH=en|K?pou?#ig%!iUx12FKodUz6`z47z5yz}08M-WRD1=R_ynl<1~l;o zsQ3;v@dBv$0W|RhsQ3vq@c^j!1vGI7sQ3*uaRaFM12l03sQ3#saRI3K2Q+a8sQ3>w z@eh2E@Mj1@OaD-D4m9x#P;mh?@dHqC2{iEyP;mt`@dZ$E4K(oyP;mn^@dl{41)4Z) z-HrpAIBb232by>R)SLh`@dT)N1e$mNR6GGq+yN?{fhKMM6)!*&SAdFFpot4W#T(GX z8KB}FXyPAuA@MZg00;u>0H1Pze_zyJk0H`=aFlzdDfQoaV zi5o!01<=G5pyCo};sQ`{1vGI6sJI52_y-0jT&2G;s!~_y#ob58RM=*?}hh04ja}P5c5>`~;f#0jT%|H1Q2k z@f&F33!vf;(8MP|#b2O_H$cTdpotei#eblQCqTs+LQvCx092dW zGeE@+(8ND*K*HYwP5c2=+yPDe0#w`sP5b~i* zutUOs2b%Z;sQ3Xi@e5G#6KLWGpyC(M#5X|2Z=i`UfQmmr6Q2MTe}N|602Tj$CSCv) z|A8i+02OBlLrecqaSk+b2dKCJnz#W}Tmns80V=M5CN2OK*FY0zfQlQSiGN^&guexv z_yef81Df~+sJI83_yMSR0Gjv)sCWdL_yVYS0-E>)sCWjNcmq_t08P9ADqevmo&XhZ zKobvuig%!iJ3z%Jpotqm#b=<2D?r5;pot4W#aEz-GeE^RpoxEAg@peOH1P*e@dIe$ z7og%N(8Lcw#V??VZ-9#5Koeg86@P#x&cFh34?{R=x`o|e!+|F51wAia0!`duzY%!- zg9e&715`W!O?&|tiZxFO~&Kof_#e+8O&DAfHs(8OWxKY=C= zbH76b_VDpQ6Ze3cAAu$gGd}}O9A^FlG;x^wU!aL6K+XSwCJr;7BNEk}F!K%2#9`rY zfkQk3O&k{f325T5@NYm9KiUF`mku=X1UVCMI+=kc4!cit0h;&&Hi-HSXyU)*A?KXz zKoe*9VhlF_1e$m?^nRraXyOeYAnG5WiSr~t%zuFCj^&M#95t$J66VSvLY=Ed=fF`~VdcVU8H1Pu~AnJFZ ziSrdf%s+r8?ywM|{sNl#JE;3_pou@22T}h5P2BS+Bz!)gi8suKsAq^qjrZ(R5cM2r z;tW$E>Lt*`*ZqU2S3nbAZ~;=T8lZ`{O@#Q@0!@6uDTsOxH1Q^=`T#WXgd-634QS#E zp!ex?pouGN;|1rh1!&^04?^6(0!@6uF&?n`4QS#5%8+|@7-CSv?I+Y64m9x#Mw>Gtk5pp!cvIKoj2!y{GsDnmEk- z8))JVQ1b<1QNv*ZR9pg09Of?tG;vsbX`qR3fX1T%n)ro!NcdZzi8maCh&!N(C%lvg z$D;?DI81#4nz+Ff$o+#EXyO~=A>m(vCjMYDM12FAxC7Lj4m9xqsQ3gl@dT*&3^Z{D zsQ3aj@q!5udsm=|D@=rlZ$J}om<18vfhK+dYW@Lqaj3sepouSls=t6Hz5yzJ15Mmu z4#ZxDIMj4v@CkCB3wL!I4qna(8OWkoPaJ44d)CraacGPpozo6xdKfb7S0RM#1+_~r zfhNwt0a1SdOo*@s_oCi?x9cbbL^C0FVtFD z^)e#^1H(EH0anexumPIh*wDmpWI^IZ0ICi~y?}~?)bp~!L>U-9Ac@N&FELRFHvzK>$hI7#4U83=A`%;SaJBSzH21{b3|?6p+N3m=We{ zAc>bEsW(6pZ$MISfg}#OxeQ{K1CqE3QuufviC3~f)Pl$WBynCOe?=gPPh$tEgy0QG z{zVo~KvHjxWPS#cxHXb{3XsI3kix$LNxTs$92$_skAeal;v9w!BymW~A0jaUNn8cV zUo()z{~)<@0g`wiQaGJ5;@w$pLMLfUML65nxdU1_31TdZh4_KoT!U3Qq+j@fk?& z)Ibv7g5(|pB=K&jogm5rDh{gGjF8;p02LQxU|>KN_kfCnlx|0|HvmaI5|oHQhBGiQ zL?DTaBjt+(B=M(6{>?xVw*^@OHKzbcJOIi33MBDZB=Z}P#J!QitpiEi4oQ3hlK4!d zaGQZ7z6MEr0g`wel6zJliO)gGj~kH04n-(oC+lI+er2{Ac?<2a%TsU_&p@`6OhC^knEj-Bt8igY0!MM07;w~N&N~W z@ux`Q8<4~$knBBxB>oRc`~;HtOC)y3k_osrGO-Eg_KS-ki>(L z>@`3VZ$~oU0!jP~l6nUu@c<r>+4})W+yY5`Ln5Rf3JQ88 z;~6@T#F3OUOh6JxGM-@uk~osL7#1LjBLy473M6q*o&lwC5Z-_!4ssJn41{+ei6d3Z z3tIpe^A>9CeDE*E(8+<_0y5Wg^|Q1kiATp(D~@*$5fg}z&DFq__0ZANkQZYpQ2a-7Cq;!ZlLoy=$ zLuL{o;v7igkQsc4xB!y4DMScNN+5}wfkhyM0+P5nLwil6CwmAHz0|7fkhz14kU4Jh!B`OfF$k%7J(2aki>l zfFzy*5dxDPNaCqr5eP8>NjwcA1SV%7iKl}_AjASB@eGI%m|TG*o&^?x5F3!hvmruY zatD%lE?5LY96%D!g9w4i6G-CuU=av$0ZF_7A_OLHAc+@(MIgijB=I7M5SV;{Bwh>_ zfe;^%#7iJTVDbl&co|p(N~9vve>qeLL~$UASAYbdSO7`93MvMoB#^|bK>|>$fFxc6 z6$4QkNaD310Vp;=60d`bfhY?k@p_N|6gwb^H$cTeln0V{BS-*>1CYdHVdB;F4afZ`2E;uD}^AZiDa_(YHZ6dynmp9B>HQ74eZ zCxZl__yUsn6sQ=8x`8A<6(j(~50J#CLB&AS3ncOBAOR@;fFwQxDh8r{Ac@Ze3BYg~ zBK^;Ti7_xRa3G1#MiLi55}$)4E`cOI7fDyX4(Ac?O>65oI%z5z*m2a@%k;Dy<#19~eTOf%aL=tyE57a)nBLlR$sBz_)Ad;^mB1tjquNa7cf#19~eUqTW;fh2wzN&Etm z_!T7a8%W|;k;ES$iC;q!e}N=^9ZCEHlK2fI@gGRyH<82{G7#zi7LqszlK5>TaRDUp zJ4oUZNaA;q#1)Xl?;(k6Ac@~c5;s5+e}E)zfh7JAN!$TR{1KA42a@<>B=G) z5lG@sk;D^_#GfIFXCR3`M-neU5`TdtUV$Y35=p!PN&FR(cn6aBYb5arNaAmh#AhIh zzeN&XfF%A7Nqhy8_T&iGM^AKY%3u2}%3}lK5vN@e4@eUy#IaAc=oP z5`Tas{tZd|1(Nu8B=HYO;y;kYe;|qfL=tDnM5O;;Na7qw;=hr^1(3x5Ac;#LiT^_q zS3nZ~k0h>vB+h^|@NIx3&WI##fh5j^B<_GD&Wt4Pfh5j?Bp!ey&Wa=+fh5j`B%XjI z&WBwm0d&WR*mfh5j_B;J4|&W$AAfh5j@Bt8L2oEJ%a29h`*lK287aegH6 z6-eR&Na7oi#08PWcOZ!iA&DPA5*J1iKY=7Jf+T(cNn8|3{05S^7?St{Byn*h@fS$q z5=i17ki;dC#D5@(OCgCfK-ceq#($)d#5s_}Wst-Lki=z?#3hi#<&eY`ki_MY#5It_ z6_CUYki->{#4V7-m5{_8ki?ad#66J2RglC3ki=Dy#3PWz)sVy!ki^xI#50h@HIT#$ zki<2S#4C`*b&$jxki>P7#5<70^^n9TAc^ZEiO)b1H$W0!fFy2+B)$Sk+z3g01CqEg zlK2iJaT6r*14!bgNa81u#LbYzFCdAVBZ(swjib!b5TF=*=9l~B(fo$Pqnoud+nm9p z^*{;J{|g??M>rt8q5q~{iRKLdReci88TjQL82+n*_}~%Jmk<8`|NmdrDbbuE1C&Bv zUI6p0Kzz_t^veTaz7dEInu3100nFC|@j+A1FBgFMN+3RH%K7C4FkcG92Te7G62l~m0-@00h&sF=>X<`0`Wmp$S)1R{8u18 zXzKW-0+{~@#0O0ozZ3xTZ-Mxrsp6LmVE!c#A2db$^20xne@}tNSAqDTso$3i!2CrZK4{AKV4S& z=1&6gK~uah3&8v?5Fa$P`!WH{Zvyc_Q@Sq$!2Bu@A2gNw(gDmb0`WmpxGxRB{45Y3 zG)*_R8zd?gScG!^@D0+=ra;)AAOUp9dG zLLfe9>h)y-n9l{`gQi?xCV=@&AU3B(6234gf(%wGlKgQiMfE&%fvf%u>)(w7s!{8=DAXlnFj z1DHPv#0O1@zAOOqyFh%)$d?LW{v!|{H1+sW0L;Gy;)A9fUowFCmq2{bRO8DJzd-&!1>%FI7+*dB^ACae zpsB@|7r^{oAU1mc6H=w2Ft z`L95H&=UKX3Sj;t5Fa#E_fi1NzXjrhrs!TWfccj|e9+X~%MU+5{yzocgQnzOJ^=F% zf%u@QxR)2e{9PbEXbSG-0Wg0Ph!2{2d$|G3Uj^cWrrcgG0P`1t_@JfnFDHQcvp{^% z)Z5DjFnZY%MD<@7Kjg;I(xYQ%vS>OK~rWgCxH1}3O(F9hO)rpR6vfcab?K4@y}WdfMb1mc6H#9jt~`M+Y!88SdqVJ{uP{7)c0XzBY) z12F#;h!2_)d#M2CKLYVVQ(-R!!2DYvK4=Q;B?Fj$3B(6YeZBnf4dnk*AU*WJ5 z{}6}|n(BIa0nFb8;)ABRULFARH-Y$|sjZhA!2DGpK4?nor9gbp z6w=EEFkcA72TdKlECBPlKzz`Y(aQudp9#bVO%=Ti0P}xEn=@p9riflTfcc+5e9+X; zO9L?f6^IX-5_+is=05`QK~q651;G4UAU&Dd1>%FIcwQa=^EZL`psAgg8^HWkAUc9r2v>81>%FIAYL+n`9UB)XzJnRhmRotdx7|%DTkL2 zz%FI7+xL#^Nm1!(A2`q4Pd?&h!2`lc)0+~R|4@tQwc98fca7& zK4=QzWdoQm1mc6H4qg_3`CK4AXv*Ma0+`PP;)A9NUIu{qzaq^UGC)%VFCD=APar;M zYT%^-nEwjI2TcjQQ~>iIf%u@QfR_Sb{w)w6GzIXI0nEPy;)90%Uw-%i^8YCiA2j6u z@&TBC2*d{s^}oCT=I;XWK|}m64}kfbKzz{9{>u$u{wfe3G^GD>0hqrC#0L%KznlQ( z&jRs5L-;Qn!2C%dK4|FvWdWGq1>%E->|Z8;`Ar}`XsG^W0GM9|;)90hUpj#KMIb(C zX#S-En4bmWgNEc^DuDS(AU^#0L$Pzf=J8AA$IwA@Y|3VE!!-A2c-nk^#)W1mc5+#9w}R2lD?Z5Fa!Y z{_+8se+a|}4S~PB0Os!k@j*l1FAsqEn?QWfkoU_CVE!r)A2ihcasimX2*d{salf1Z z=FbB0K||Xw8^HWYAUhO%EKfcZ@zK4=L0WdN981>%E-u3tKU`9&Z; zXvq4d0hpf!;)8~&Un+q4NgzIGi29`fm>&h=gNCMGGJyF(AUvClDVr1pV>?m~RE*gNB}89su)=Kzz`U^UDojz7~iN8ft#I0L)hc@j*k(FDHQc zQXoEPX!&IWm@fq4gNBq}7J&I&AU725kHskdRL-Sm-50s1qc_8xIoV z6^~V6@aPrYWu(rqZzU^8$d)fwh2ez)H<+yiadtRJNBCU^29M4|KAq1zdTm!Wf&F94 z1yW|35vRhiA2b|ic)+7G^u>!d9tH-F?$8%6bz~SBJi1FIJUVZA^xCGhgEeu0Gqa*{vKG0C2N9X+)>D&wq`#|H2 zAWjq{jKsRYzB1wj1%>U6PB2e}lYs#eQZFDT3v)6sgo4fS={)Yy`SgVhME3)T?k^k+ z44`4rP>;^1jv=0%e>^(BH$P(!E*11>{a?c4(aqlcK;EPI2TLi}i@Ak@3?7|_Uvs<= zP64xgI-kGb05flT^qQ7+tAgUmqnlMG%ACQY+rsd`3#&Km3@nkSf<`VO${^+;v|_OgBncYoL)QT6euBKnq6%eo!$YYP zCWc}hhO%xJRj9$8CaR#(JdhQw8UO$P2L%jFfJGHF&$xRt5%7%X>cEt_Mm49h?6%^0(L?Wo9tE{j&B5Gs8>6qs$B- z4?+w-!a^N{s1d)Ux zCZzG_w}K`~()h0-r*w#<;kQl`sIQSdiyWDTCp|iOkct3=`3M%oFpy8sSucb{7#Lpg zf(Q-}!7Ku*BJRKVEetBP_JU?lUc3jfJMX`EE)0tB=P&Mq_*haSva3Kv@OF^8UfY+c z;PO?8nStTO5@800eV}6uGhI;hcu7}jZ%uEanFF*LQGQ23{096g3*%?s1z{1MF zun)qy|Kd9f66X~QsQfl9o2bgLA5;e!9(Wb75MyI_@tmE3;l(3%kTtgUQ^Bb? z2GpqeZ_38-;uJdrL+3q@UR&2`U>QdyP>{hhDOhS1SjyG#?F(>YYkfQ$gA2I5APAOt z!OH|SgAv02%LwIvgxL0$5p1_Z2-ta$4qrPPsDjpo2!Z>|YbUWW>;uiVy|~T{RxbdN z1P_oroCj9_HyCULc#NrfK3M1#Lbq=>;L%w-=n+qfKTW5 z7s_z<^B3YsZ0;Zb|HCT%V2{q<9*u86eN2zetsdYyVJc{H(WA3B;{X5uKAo+gsYjpA zUQm6}a-c++U$Yf7Imxf-+rY0GI)Ps^b^*U;>IQzz+ynfYr5E@$YagV55(211^XP1~ z`2YXE;ei(pEJ_R>%@!;rDIUG90v^3nK@*Z5o%am?dvvyHfUNBWXV2rUAPG?RIo_)B z|NnnbHQ>?N3YyM*p|hWz!K2%>SI~k1oOnFCZ6^v^FnIL#N`MULYz0v-zTH(~@aP8H zo8qAjDXL3YU&z1z|KFqW2*{(+v4>&a_h@_r8s6~e+zRrnN9Rz_%&S{_%(ee@N0%H;Ma`Zz^|ElfL}BB0>5VI1Afig56J!o1*PEuh-bHg zoPQkb36RgAq2kfo3JGYa$4#K#eKF-UJHw0hkN^LFvFb6Xj{XNS$96%93d0MR|Iny& z?EC<25I%Jb_3S+B(fJe9e!Jq)D|)*`g&{b=qnlMF0MrhX0F@W_U;Kak|G#hRlM+dv z&W9eoqUTFg7(6=f8y*0g^5P-LqFz?5U~>ka&X-^@kIwrZy`rm2R2Y1^K^=yDkN^KS z{QttdTp6VC#r@6f3@^AI|NjqaItB-He(1c`{7a@x#iLvFi!aDtsosDG&A;T!eLD|% z^xD3FWW1Scr5Ij&dnDiT=oR&KRA=zWzRl&qc)7uvq2$<$Ih)uSAT9Pu(?D&>V}=J_ zWUQ59@aPtG^adOGS^#X=XNX}wAi2)_9-YTtI9>p0J^tcnDF?hg>(TsQrIgR3*Y*iS zImf^M|6i=w$j;FDvGbVaiBg{CA3UXe9?kU_y7MF zSrFZ)I*+|z{r~?zw7fk2;y8!{n%4)F$Gc#01a4D1cK!+W===;%Xtc;&j~SquD+HY0 zKt&=re__vD0t^fcn3?PRZgvKj&gUMThhH3d3JOecxMpqvWjTz@bm=uXGl8;Bv|~){ zVR&=ng%&TUbY@-YYtFC>G%>!9kpWz+y_l-X;L*+TBIDiv|1S=gC^Nh`_u&73kJj5I zf*v6E+Nzg=3(n*}|NndR%I=LVVdZG01|9@~#=!FEF#Rp=6Dzz6ZaMrKC zP<5d4^ev3@;_=`A|H0K7ICs3b0+Imh1f`5lNFEI;S7CSon(77H1Jb`1qzu-L11$n@ z>3rwWYpYof_HF5JP-)GgTEN1<0B&$WDpPoH`gZ52R6xRKS1nkF%P&xw{M@JW-HY6K z4u+QwrktQ^s&XN?ZdCjA|NqOqR-6o>9-Y7Tffhn|^xF1<*dK|@ z!OGWym5Z{+fg%Frzn9Cv;#0xmwznaw+J8X{FL1^PPV?xsUFd1fke250V&W4}KuCCW zI~#bk9^h{Q%_(?vJ1F>cF93y&<2M%-0fiDn5G~G9!f$v9G-%HP3gGDmoD3e_tQzj- z42}&cDgyUCnk^Vg*$w}{sBKdQ$=G>;iVg;k?i~@JTE6vv30GG$sFA&br9{D_oAn<^ zzSp*YIVgb|yikAk|37$4;f3%0|Nom$uylYGzgYiQfx)A@S^|=wJDn?zw}aXVpv5~L z&Bp~^oWBe50W2zCh=6LOUR!AR^!@~e??rH^`*c162WHuFRfZQOKmY%K@d8vZJq8i? zK*UWDapfNAg9*_Z` zH8!EplzL+YsDyp`;xnjSfR-fQtWafmaSJ5T&7yjP36wNFdTo!b1Uu!>4^VyX)0uj~ zqtg{sza8-Cblu?5%c>{L$>7oHx&u`AgEaYc=AHoeW9~vUc7hCqraX^c+xHOBVzB5v zkLF);;IjI9BRHAIfP`BwfrTDGggik)&A(*9V$UIBrawTr;r)wA0-#*L`?4NXsoiqv zyw`fbqnGt0h}&!HyG)hAgWvUp;ei*dVD+UNU~cs2EZqTi<4lNao_+_1`t4O=nZzDwCS_m%>;;Q)&UMNK0#P9$AzhM0fHrN-Upzb>;3_W^nz1FBQ zyeRwzN;#})F6N*X5<@AENAF%xgW<)UMo3k=M1+gMr}KeF^Ml_nBNVw93=bGyg0_h~ zdRfKRg2KHO)Xwtg1-CIgI>C)7k6zYUf*`r6pneamnS~sspCS43{kQ-BUqA|8+aC}| z-vPO)*H#OXjn9F2h^RAJ0}hZKAkkjie-It3Ks@kpn=eFqCP<*yb~%LC4dEq1c(oAT z>7`(U^1uE6-+9iX*LF8VHXb5-6~YUI@Prz`3Bwt}y9eQ!LU`P3!RDxg{4pC;#`W4N zK!ilU{{R0nJ%NkiMKeS^0wVtR%m4o`za?@pyvY9j|No0L5RnK`(FRd*8>AvSg$q== zPOAsoef%pp5<4KgonQa|f1wM}a|)to8AQPp2yX^R0nhLM|C=9N_vp1fw^o&*`2>e! zhpT|$ffv;v$@jltk{e-?ZXn4xh&fjvAq$%7_2}jO15VAN&z;m6_UVBJI(u!M>r@zC zyoD%U4pFQO;mw5bK;D1R`Ro7x7cC&79z;}uh*A&%T4NKs57Hui`hppjD3@laGQ7C+ z8RXa63oqLLN;7zL*Iw}GH8o&VWq6Ukj*G#g^Z1MYO23?AKk zK^+=!C;0`(xBvgaEKslMHz)+V_k!B|V6hjkKmxtCF%T0DfBOIb<%T|PP=n-!JAC~4 z1=qL#|2@0SUuOQ`X7FhKsZy#AD&<9&#i}s)fQOm+wyH9`X#Mp6zen?L75>(VB0LN) zRfKs!!{BicMWBYd?+%Y%+s9i}8D2zzly>{>c)1d!sJmFfqu17GD>$s|L2fXX=3&?e zTI&g_1>GQSw1UXXgXHI$@-Tp$VEYwhF%Q@@+k-q73@^T@iZS?fXDc}JZ*vWJS!Be+ z@S>QR0UB)T+rU=b2C45g{kaX%>DK_|rNfIsE;fCLBo10i@bbY99#EqL(hNGi15&w6 z`veLTyBClD|Njqeczv`RHbUjuZT|uk$sXO- zFFPSa2uuPAbX&i;{|^)v_Ajo3YH_#|A(^4$^Z)<*Al--eFREdj7loia z*j>9|A85twi)6TX1K(Tbp@W6}r@BjaQsV>I{mi=}dEIS`AdlA%g?q3kV7U|XbD895F}Iv z5xRK{tTFZjI2IaI`6-5d=6??-G5;TqPt5UfU<%v5?c|8 zEec_;0Cmwgk=TEqfvVrq6(GGIk=Re4!CI@`tX_8Jp!^>BQ3W!w0cuRgU1n!^ar^)O z|1YkA+Impi*FOW7YamOOAeb|s{r~@BJxJ{;5U~_QfL4Tqh9Nv!|9kYZ7QR&h<)2?3 zy}WGZsvyh6I@B0E_&rW|bhA#jF=z1Tdcha`;7`!57PLOCE+EFcc3KLb+s9TdjBwx9dJ;eY|3aNGqtB2+B+-a|XS(DJwumyx0NK-)kEN;jM!3{@Q~>V(y#&|6f|Li9$wU zL1W-cK)I;%{tHfsA2zwDFuXV&EzJO$w}6b9di2^>NP?2MPp9vU7twG2|M%(ko$-=w zwkUY&1fuAL`F9y`{kuLx7Ay=p7!lNjt-bN$O%bwCs7J4@LIlV>kY~9;&I8S7!J6}| zV5t|M-+&|VdpJnpi>Gh?|9_DV8tF*-`~Uxb&=B5>vdyw!M}kH8S=E!`}t8E_WF{h%Pl%>o4mXn7ewH-d$vqt{ke3G7Z=kd3{zKNZ0| zeUPg+g8KaMa`nX`DAxmSKQSzDg%3*Q-`+w?WDw`&+yDPxeEbbJ@XufDKPm=_7mse&8}MPrQb~{IBMKg!_o5wR9Ah2hVqbR75MX$*4Ak1}zxDtB zi#Z_H^xu$z#sgZ@Fzc!^yo`AT73?)t-KPed<$k&3EkrmJRI{5}!(>1)-1!#Nsfaxs zx(~F$10-Vj_Wys+?otkqUR%q3;3UiT>i_?jI{D(@lmkiGFS0)T|NkNtM1a=V?1N1K ze0c-)FQ`rQ91`BGs^IWG@bdrvmrlpT84M4+gTXOoA80wYN3X4jHpsl#m(DLi;eE@c^O{Gm?XDwWZ|T1TC1TN>ml_O)2V%k1 zrAM#r9W7Ocmm)9!|99>D;MjT0QS-pdAD1K2^KyaurBz=ed_hK(yhvmwPTrGWc{p0@wbJAogy5@&A9MN3Uq} zOAUtTeV}#Kjxip+ws*Bu860B`4>-m-#>c*#^y2^j7sB9S8&Gps{3yuDKApZ3UR1mQ zXYmOyCqI@16=FQc;8L+LsS1eH%Htp@k51nS9-W~xUf8_=6i{)?j^^LlM-Av}=xJ$h|(FN5{1d;uB@?zK$-OM=qh zbckwyu)vE>2+tA1tA_CWAiP`%&jG@Vhw#K9yg)FISO293gGXoW1`p6OhSD7#oxTS= zj=P?Kq;=N|FZ?fp(m?5kU7%(Uc%I6m)Afc&FYB`xAdRjMJdV497Pv6HXua|O|BHY# z|Np~H=5|8i!4ObudVAV4TcvAAnA-CuyhGXfFC5F z2N75d68LxX|Noa?0>LUSfdt-y1a?6L7+-5Jyto4rXn+V9fCNs11l%A3@h>zOUhD!1 z6ha))2NGBb63~DM*n+go013Pb0NbJiPVX-aAkMt^0_We2@hqQo$BJe-R6&A3+9SB|rK9|7F1} zNKFpfwF{|H1;F(fSevOiSfM3E+xfd-L$sg%|KH7`>cI#dtvdu!Bmz-%4#Hytd9wr3 zRb&kSoAMbv@XDeJF(2Nc@aX0Bwgmep9ps;XY@jLW?=Ko5##uiA+qoUAcj^gHiw0VE zB|cDNcrhO=-T-xc=kXVyVF+*+#iM)c56DQ^4u}yYAf>&w75-qyq(OKg55dMqfOv?t zE4{XJAmR=n@m^atORyfJC!pZ(eEI^kBK(E-m;e7?EQ56UZJ&XS5rin;58*LGcpD+S zub^o!gs0)G7s(JKtX_bPI0u@G1DOx1Rb0T3(2aLLVbFLz2J= z8&rqPeh1cI0n*Twp}+uZIaq&GV|bwmG8h^izdoojybu5x0;=pmHMuM#26wrE&Hwrc zoC{7uc+Vlcc@W;sNB{r7hz4~*du{(igpNTJT!rvJHM&QyZP+KUV^%@rK0)N>KzL6e zygm>Qv_=V>I^m5pIK!jYb^*kc6sStjCRaQ=pZvPB+Ci5eZ0H`By4I=RAAvg$*xq<`a35W-G7i0}V zqB~gXBvcACea6r2+IhgUw*j!2fJ;x)=ifn%2j3ZxxeuGi|Nnb7|7QX9KuRJ#zq2za zFff#qdo~{z@a;DD?5^kVZ2remVh`%7ID9+KSd#Q&-a!EdkaEw?BR-wqK@u;#mw^&9 z??QLbEYc&e$sV1@3=h0`bdnvcb|JbHN#xPi;$&#amZ`_@6K=hJSg z3@=`Sbik7>JcU4dyjvlra)Q+K+VXmVQ}ge8pklMv_Maz+3u*_v1i8Q0b~{A%Z3yo^ zSo+1;d;kBx@CWr^du`7_6zl>C*}MnUwVyn|_2FBH#6pNp3yA9{-$P2w5ck;r0H?=F zkUF@VJ$h}S`V&Foy|(EPRl)cE|L?ru!HSyGUL1Z0YSv@Pg1xq{ATcckGN$wUi#Kf(opukx`wo_VaRI{H29Y~-7ZPwR9#XfTqFQ0G6^nX2Nh|6i|E|_|Nq50P;<7MMHO1{ z_S#1O278Ae;s`r$kc(e1f_UA?Yv3Ry8a&m&86Lg1oeb)r5xBE=kYW)o4`+b7=nz8? zEQDmQtuiCnl=eH|KsJS#Sqb5(LwMN`o+N}93*iYv^!Y=0qRe1Z9PfbA9B8)x4ii|w z;LiX5{PHf~#%iMhXrPX@3Pf4{C=vDOW{uM_2Osso`TqgGJZNn!!(k}x(Q6wBQrK(i z1)?6$aVD7^6h|BICW|NkFjl{GMDV2nM?FAujLr2l34e~|0J?gFi( zaSRCttrls1BY?D+$n}NcffsUTLF*+Blt_S9xTkn%i+~sPmU?^irhWh~!g$fM4>THj z+_Uq@3&$fM=5vo;4@QsX0}>vchdfk4TU_pv|R=?;UDf8<`@e0-fxfQHx|g=15M4&KL++5 zf6FJ(EPbzOIM`UQXH?FBrAqugtXUbf%o$4DJbFtPfF_}$PW=B5S}qX8$iU#!ox1=u zka_GJXra?v{uWn|L7-s3UXVxg;}0IarnwC2px(@j9S1V=Tf99-t1=^B40#Cp=v6=yp8;AD`lH1?~0q=uN%h)A;~8M&%d} zN~7TP2nx*#P^#-Sz4%`Zx-@IM7I@g}!FA9Yp$8t8N3eP9Na<^j<~IT!%|0p|4Bf07 z{;M%SJOlC>$VZ*b{M%UP{#Rq@aAtWK4(dFf-wjGo$6n8TQFx6ZV6SCjk|e za(n;(kM-z0{_^S+X$EjSfzuaU{@)&`ysIf2k~~Q3V;?pKu-0EHYz&A53exY<&Hn9( zLWzjS!593^59&Rde=vGT9%z0bayV^*N4L8Gk^ne8dvyLd3`;*C{X0M{nAVe}93Guw zpaE;~!wB<1`5C;v5`5+iJ80i7Q;Cp=>i_@$|9W)C{_yBzKM5)iz8z60753<^Rsac} zd^we!3*!D4(utf59^XN$hnPz4gC!3m=dVzY&I=x$pFA`VL7Fd59YcJQAA)T3v3yi( z?5lagr}Mn8<^!KjkOCG@%?lm}-`jfiihx$LGL)+MGCuI?!bQ@##FbAJltzA-j?jIeVvp!vo|;c%~Nc=~WffHfKQ2+b;|cq&YU* zs4$cocyznIfTz7uYmeq50v?_BcY$h-ee4Ph3?S=XrbmK&4^Dp`y|qtXxc4c7rbyR- zdZVoeJosG>O?bWSMc~o@|H1aZbgxokfR^W=_yD^n)U)$1$WhI2I9{+Taxj332vAD* z><(r4c1)qP%(EM`1~uZpZ*QuAN9%!7`PcsZ@(iHhgeC*a8y@`rhdp{D{)5UuqlRY+ zKAjIrSvn70oLN8A1 zaDc{)UmOmRWq@dSZ+J4=qw|)`s|WKJe?dc>!5B3tHLfdte{v zpaGxG+5;~RZ&G6L>HGz1#({e4QyCdr57e=EbjKd>Y(C29+06z@p&Naz^8{+SJ-gi$ zUT*>CKa{ehRLGH01F1@#%cv)ot^_qx0U2rQZcW4Ukd=XkdDD9%_69>Q9xP0|zND zI7lz1P1pq*dyn?$ya1gofVDFWFGV}XfP_I)2x#RCG&P{QMH8CdAc+|k{~n$9y}C_a zyqKyh$k2MAR0qR3=fTdA1UUz$HWRG2ZlICt4$vt99<3+&TR_KWcywO$IQWvk`C+|>0X=cpQAi-~6cFv-5&a=Rw0u9=)c|T~!%8zTfm{J>bdjalu3L0;taJW__Rp z8Y&0vU8~#5&HxF=7l&my7#zXVrjDIQ!A@&U1y8vCf0407fZ=5vxDChP*&U)H;9+^F zF2J`tMMc54+vEr&SA*JTp!pw2-OAw6da^_r$;pf-_&a?6gF4(t1YVy+jW6;HhOfIDL^bJo&Q>zU!H+~%7JLd82)VsVm*3m7#JZ{E~tIq zdH=_$Gi~mo)ob?a6{KMm(M6i3n8c%}SXo>%z^)skEK(;>`Gdx03 z!XpF{9u<)ut+(q$Jv#q^_91k~{y6#a?pXmyyU6eWXw3vjjDN}jk6srB#>0^KLkh3e z$lhSzJ;VBrmRzelgB zrW~k?;?emO?&>0t4WL$!=>kV^KQIw4a2_n+(JT7z1_Q$jPpEiz><_~OCp~&if6J;c zyfm(n0=2)u=3|D>E?K1T;i!Rz&vK9#JMX{vUX2t!T5zX7s748&NC#Dh7iX%`!l(NN zIDEE%#F4}2G(3D}R-=Z`e~(_%x%RL~sIJBgA58cEl0kC6M>W*_&mm5IVUFznEV$7M zsP3O>ugdU(2jot0C7T$FxQUX(iT`wV>v)1H8NgHI5POe^F5Tza-f3HmI@xS{_t?LE1$gmWOL~KkBf*SRZEO^_~I#!^T7nB8G--GrqK&3xYn|{IzZbeA@o!Jvt`(2YA)P67a z0XY!tK2V*3oL-^TgbK8*0QEK$LDM;xJbG=x2RA;~m4o$f!2QwI1Eu#N(;L0EtzZG=g45-`%wY7bEO*_m~7(gR0o}GWdm1MBtZE#keyHgsvkFM9$ zMH)1SbNoeSh75ye=h4@$pz;9bCd`_&j-d4vNbO(9TyU>#qm&B6%lWO+$h}jL`@vxV zX{&>JgRru^q#Ra`Tkqv!a5a4E+nXlfaohpa$pshSny~nWq!Up4*#z94H+caru#Yl& zbbfkq?lBhwv}<$?+;A2EHJo4HL~7r_J42x6f&+tRcb&lNE`&U|JOMRH!aY0xgBtSR z97BD2^93A3pi$(}E&kdVp&rqH^sqe4-wQg&&ZqN*Pq)eq$8Sg2OIdwepOi|20w2`J zz2s>fFHjrf+3l|I`VOQW3yKbp&V$Vl34SZ;O_WGy@tYl!YXDB)1(Ot>m z)A{Yi=U0#(i;8Er`0I7>^3}7sMn!kEJrorFj0rMh6x&i|gB-#k07dUl@i=yezHfJ`qz+WQ{e20oq74R60VXUxXn36kw} zJpgq-L|uuxN4M(%k8Y70-wv^tvU;>$Dpkeod-BUOfc<_QDg3&bAg5WdmY(-$ybp6$`?t^l5of~F5p z{CRZ#01d%de&=rioonXs?HJfe-%7bao9{qlMGg!e-DV)pM_9l=_vq&E>^$Mv_yE+j zD6s%_T|nnuY!{OA!s~7 zJAWRQhxl7TT{TEq)_Ss(6B^acyOp2aWEumcnhNaYKd|56XsPy&Y&I0(W$JHLY( zh|nIl>i5_G|HIlDuZ_U!pyej0+=v0CV83pY7obVj&ig){A3^!6c@Gyu>wyw^NDmw| z09kt4*E(OIRu`OP&qLkq2ue)1eOtekT=VJt25Rly>f~eqMJ^BKqHm zVRnue?0n$*FWVDz3?8VR=-_Jj_O%+Qd_;1mI;bFFd{ANH-CLu}_~KKV5(CI_9^K5K z^81=cx3hq!<GJfJuRkJEt)@rKompg!O0BmD9VFFs2`>c!WNvfu(7RPm#Z zYk|&?j(r*JiZWpU&QECLvC!5%*d7m9JJ-RZyI#P9@s~&EkIK6*SywYc`UPa_Ke`G@ zKRAv-b1=X6gA2FTZ=g+rpaC%c7SKU*pne;qQ_ShnZ3iirJi3Ly9aDhHLk1c=S}*ap zfDWGYX#UT_-vT-!3)FMtZvh?V2kGJP_kj*3_2_2y=}oa`{B}fvzZGy`s8*m6(NZq zn%=sD1zswF`=;Rdc#%CB)E7Ap<+ds$L%k#+P9TbzQG;SRjEKH%ByCID*u$%FI>flPo5!5xIOf4wc*r}F`*8{!xT zO6rjE5S%_B6Iq?VL1S6%pyS0nJHL2#UVAZ{3zXORTR& z07Y>N=rB-3`{xj>XllJwm*dg;pT7fi>XA=x{{NC#!`rVlpz#74zXy+Bd01YqjYMv; zdM1OKtf1ssdehT7PN3Er+z7ev*=?f&NqV4x5>V1B$%Q7n{@nln|3~itc@g0`aD4i7 zz6ZIn6*OPz*&QbE5;VvKsz*Ejz68}DFQmmF`C8acmcgg173-{|znoTLeithaTf5AO`tr*&z&{_nSU6R?ppts%tJM*AL6{%?I8O= zgO0y^6E zg)0X*Rkb>70u493_32F(cZ~j)$a4AyJzT3w-TcDQLquW{G^*(6&H$33c9ST~-4w+)+Zv~wQ3Yx8fRyMHt zj2ElfK`tu|_icSrcgmxi8?=(TSO8L^zvi0Y(R_f>$MQkRdQc0g^(3g>5v<_xo#hb7 zB_$8R)$8jii1wLJcap%%@Bcuvf8g}!Y6$VHKGa%_d9QRelGiSP zyvE-Ps=vYBy9^E$!*4G{UMeuW;9re>`~%b;4-1t+T3G*O-3uqw>k|(jnA2?vqq7b~hrum2fJPJYmEl_y7Bg*L)w^>0hEwu;5 z=PumwIUiemmOeB*@VX1!{=pY-pnZ7YzLd?27d>$>ZF;V7gL%HIMy zQwg-b0Xossda|SpIt9z$3ObYAvpZA(w2C6Zqxq)*e}5mSQ`7uQfWIGf0I93tH*mqJ z2P(&5{rY3I(0=^~P!o17XlXEL0t$3stVcJqXY(;eQ0w=Ck9Dy?Ef=H=0hPP1hW|nB zV4uz((A)%@*Xi~acnPXJ;pG*$(teo^&SDM>9+nsR`yi99??DX$(0Nr6??KBR4!_nw zcGuC`5^x?dc>&t!fB(hdL!kabDYU=9=Gl4N5!&fH10H$c0ayCx9U&dL@5~Gh3=I4& z;1i9ys|8+&?2%&dXjJ}R|NpK&QA)@fNDT*RFSq_Lsd$mh2+48NSO5QS zc-z(R8+fSB8(!WYd}GX5jL{E#@D)3pf&?Mthf2aYX*qDpcCssWuBjBw=aX?ZNmeey``{fOaf6q zflY%|YAUco(6c)fsZs-tD_n=hzu|3^8FKzsNRmXKC5Ml%fa^cd=^t?Yu%Ivo#}6Vr zYL|i2hs}o<9+7Zwb9uDhF6{<864}cqL0;zXEd)(4cDpLPJ^>Cm!*4HmA1N@r;8+66 zo{;trygY@C*?@8(xKRRHU**|(we^2Vwnw+zi_QPpL2D{nf2{G=jPt;ZFWu z(Bb`1w}R%vXWkG1uk!V5zW*QDk!L`Ttjz<*%Vk*m_=Wd>b_Q3&|E`8lJbPmWS`U<( zzU*LNV1UWP?Kx6w;?a2nJXK;50Xhol!EeySAH3;!@JkTo)INiyMWRiIKLx=Urw6C$dEPxYHo=<)FGfk0X!XrPzl#j;0xQ*WY9R7u1BZ0 z!fQ!bJayMAfH#Z3SmXve)WKN+WHM|lFZQqp=+J@A^DkVMfy$_ZuVLdU;7#kG#bMUY zT;PJ`|Np-pod;j{_;kL5EEW3H!pVRrFQA^$KyCwrRy5}P1tp^riEoF&V`jHY{XkJ)nu0Y$(z8c5vqvYq zC$ae35suP%9=)X(()iyW@aT-a;L$5;=?Pk}3ECfE-^9ScFX(#X#Wpq$22`6kJvwiI zCJj#>esOcb|Nrp(3d%2_@%9i#2FThRNV^d{b?9pNB-rrwOHj!IR}V`jput;E%ia?- z9(Em4lJmEKuAu;R2R%A(Hb1KOIQY^YJcuwGRE=3)=I;evv(a*rzZGWpiVJ=Pa3#;2r4+C{W$g%PP^x2T zIa$&UaRSs<4X~}HUD1XIV8$WBqxC?^CC^@0ftHi}ErI|4{|D;?4Ix3|58RGL8jthn zc9&QIPAUgVwH>}4XD^jS?Tzs@JlXHj$qrjL1EW2<1w1<8UB+XeF5^Lu<_rnO*Sk>a zH&FhArd1B`yi7ug%eNyArTU-*DgtVHbRKGcDBo~S!K3-7v}L1q_7?#4*jqqH)O&UwfmO4fmS=qU{U7?aKH={J-6mpq+ow18!0Q00 z`=IHNzXfzsJa{UBiIIW96ExP|&2q!1^Ch^3051>o0G;i-qz6={{$MOk2BjSz%f}_5 zp55%8-C`iOfIB3hbld!>p1%dO#?b?mT0xhlfKzF=%`H$Ps@oH^m=cuoK@DQi3Z52F z_Y^$d*$H*m4$w_$9^IiQ5UZQZKm+^WvJNuF38@D=FM>P|X$OM*-wL|D&bK>V;3eo- z0eJcXr&r6%wc?;wp%5smyabJXz~#Zo4ZL^<5>MbUk(Yl!$8UX{gS37DG~5em>a_kZ zO?t8Q2dLQMZvmC9(5mUR0l1upwJVSC_k#QntCN-l!s=-LR?uYzpecV)4g`hEX>grX z3d*dnFG0frROPmUZfyY7weAqxS{E(?)wPh8kru?g(0KH;gtcRBK7i_2(~FSV8w2DD z_Apvn;3|M%&9 z{(2u$mI0Nwpgao8FP@!OK#flhk8Y`N#})WnKo=c(9DL2+{J6gLKYuIeo}?EX-yx9& zxLmZ)2;WS_#47eT=(DK`H{@wy6P>Ja#;MFbi!?pDZe=Fz$>u-k``CCEPTX=R}a%_IY&fgjd+Jn$~ zsYJ>HHuuQI-vT?Zt&<1-Qm%B_+>C7=net!J{ZJ!F{t_gAIO5b z?0*aBjPT|o7O<%taP%Jb=&s!XIy9BP1=Q96-IFluGU!kX*Buc5dv>#VHXjG|iTPVW z_k;Rc*9q|Vrh)2?ZZ}Xf1RN4A-@yBUufJI9qXfDT02C-KuR&t);>F|QFHgp+K8!Ca z*Z6e42X%uTCxRmS9%zBnwzDAS;nx!Z> zXRjdJ>_S&~bcSwtv0@3R!%@3K#iKiPgHLxTWY1maVbCOU?GCUFpiOyD)vGRvF`y~* zX#UB>-(muel1rtWpf*`6C`o{)8+vm=ryuTsmZu(_p`bIE;T0(8B2G|%y-02ag~VZK zs%rs{#lh-|g)kZBce>|(Y+WJIGu<2TW)}MW}~K) z9*|++Q~^pWuwzU>r&=^z6k~wI|H8lj|AWRKzy%6CnX~Y>-U2xebUbh9h8Km}f()R% z1?p{q0{An3ooeqzHSk>+@cP&TG&#)d(fosnzhw^-1H&hN0Ve^^-Z%kh_@?peoveyV zr*$Q}N6C$OxZY|}Y4hH{NGe*If%{2DJm z@khMiZ;E3CnH+QW6Mw{sPy7+SJ3jFX`tC^M*EoxmzFWZcH&Ps(0B6M;&?w?>1vkr) z+zUEl@!KJG{#Hu^?$p-e7~Kj2^*f53%L`~tjcXVn;*A2BvRUrwt3JfnICn5De!EGVPTqJ0>6>>Fr1GGl=8-E9AD=54g=J)9Q>|uF~zn=-T>b_Ss z?YkL+XXii2_8k6J(7k{@y*hV61B9UQ(6c(63@ryrGr?oBKAqopfscbauFA#W*<1R- zqccLnqZ7P8ucSsEw84SD1$6VIXCn`&8PDX|>7t_GdE7+>WE`kN4VqAb6;j}t@8%-{ zu(1Zv3~Sm1)U%VKK{HN1ov(aAqr#BgL7+ACu`gX!K|6#%@z`5?<%N0_cz;k2t18G1 z;Qc`_K~o2ydCNu>&=K-~!Q&O6p@nWEE{2z&&h87riJ%@CYtd&j&_dqWFQAixL5u!7 zTS4btvqnM04@-c~1O|y0wz5O_GlJ%apkp+U?F}B?tim777(6TmO8pGKwf?UY2erjk zFqZH`*7$;JJr91551>-r6Lbn-=g}7*-?M|3$AWg|z3)8u!by|^yifwR(hW4Q16kh> zPFArm0|f*bCV=A`IyUFo`32Theep$$lfk3;g@DJw7tEfPNBH|dH;}?c%|W-RfjSCa zy(XZG=RlhXn;+DBb{>7Pw+b3|Nr9HZZ!SyU? z&6sovk4NL9|M3U@dvpqe)*m}7_;h9q_;e;qfEssTw?di{;PS(#TifybQE_;hNcxnTn6BBajyFP6Uf{~vrP0Tx$+`xzd+#RAR0 zIQW}E=@--zWCjh`ZwnUa5P10mTxdbYBRqPm1$;XHy)c;!Iw1+9MjosmbiCVx^PCJm z-P%5#FF+18g}Smt-Lvs5C;&VUKH&#Bw*J6hU(TnPZuRMWkv2gUq!Kg{ei6I_V1h@t zw}3})1&2rT^B*3a93I_1Vm~}OeFT1hsu0be9-8MEFCKi!{Mlpa%Rtb2d(asF|NoHW z4jP`DqtC_gQtKahyEJ56E~=0dY5yZQJ%xC7egSPC0}ps8lxBl^@QkHCps^Ov0(H=K zXz*6(9iV*dVR_7h-{%9OMDfvl;9>cpo)<-_592eR?$jSAUwVTpEAaX(6a}w0fzyXa zXYGp@<{F^$yK7%~^cH;ZIQWj`^)z^U0M_1zCG_U!;K85UrF@{wJa0L;s|hLxP{#Ql zgU0#p!8cibJK|6x1{we;gpcCE`gd>5I3%Z1_?5s!U{e7U* z?p`#4j+29p0>bq}CsQCnw!ovgT0)`z4BQ&<`g{-Yo_uCdjNu+Uf*Fj|*9G+lVg3g# zUhVu1_dRHx{EG$4Km`@@_~uKHzn_4+ETHvzpgi9U+0e@02RfiKXtR}v<+YM5!~iUR3+VESZ$~)zTS1dg;JsU*QBYU}FoPmh5_Fz2=oD#Fer3?W z`|}s!wOkC~4sZhl1Ai;1Jq78s#2%giDpNq?{QUi(vnFAq8KANgnqNWdmC6wL6lB4R z%jn)|F$9l(f|oZJ2)xunQV)&aZ$}*XTR;m3K?anAu08-IxPu_Cp^pZFN5Yw3f{X;! zXVn5PSAYu;a5>@GU85rKqHTc`gD0qFs{j8VUO&E6N4_)yTE>I>x5%|RtaF>l!oUET zj^Xv_HuGry$HLzV>Lfx3l^|uKZ+EJ|3(jYdI0vmC1IfA?KG_Ybo_%|31zx8^+tr9D z^R&Fe-wWCY@6-9quiNAi=&0fnOHljdbeboB-Z78f(hd7T4VyInoP+$Dt{YyQI0x#c z+ybvpJpSTV6lm)u$f9~?&(3?Gfi9oU&!9n(*`RSQ{$9}Cv7iaF*9$@OFVOaN=aCnQ zPr>eN1uFG$29@NX17?tNLR}nqW87;|Ncm%V*@NHbmPhk3Mi0wlB~BjQA|JmU zVk~`*Hf{G0bka)aEl^9(r}I6cmV2pv6x5<*0EH5N3%CQ1+&1KIJqpqY?u#MsiiMYN zp549*FG0&wVDW&eyB(?H)7Y=)L^B#R}#_-M2iiy7!v~n5LXK4XlrHMR_3<~Bx zP|^fNgCjWXK;sbLLgpa@e7vFCb%kHI%?F>(AI%S-{Ws9OpCf39p4GSYe`zgRh^_&- z1+;wZ+skE${IMIfChg@8c>e>mull9yzyJS19%}&|i4U3^dB_aul3Rf~E~p_E3NaS! z&X>MO=D=<-jdp{r5t*Qh))x`}00%pw!p$8GnlnsCfq2gvH+q+NTd1mwgE; zT|nhAC`Y{nUDn{y&71Mk40Ig?hlizQ2{$B|U(N${c)NLXpMk@brSt_jOhMOidv+f4 zJot{^vH4lOXY)Ts{=UngPIIrXfFmf|GJwJq)E_&dP-5%>4osCFh$a0RD1ld6>;Ve6 ze=l?Yg1Z9X@jO?B*QY`Akt`~Zh6gKXzaZ<87iJ8gwfY<$mK>$KJV3sF_F{Re48+%W zKtmJ0pyl0eAjfpOGQ0$>oc8T56#$>e0PA-=JFLL);$bWDcsO`{G1^?k4UcXnkLC&v z2L4vi1-qbfsaxK&^QuQ@=>>2m1xiN`+;hTdMW2v>P;S&$b&*1d! z$Uo1GR6XL6heDA>&)1MgV;A9B7@!i&e#-yQD%d zfX9iBzxW->2--Zy;n^JvGU0_ZvmmI`0U2ucXs+g9;BRpS9cB@9`u~4W`}hVlKa?(c zS&CGzbhBzc2PGc{4{K+R5&?+wUxKy(gUcn*ipbJepw*5~J-WppDX$@VJix~z!S#zNsP~Cfzl7tfUouW0*DqBeu==G!5mdQ=YLhTTRa>PieL6qCz6Hv+&V#BhpcV<1dd8n{J@XAz;A5+2nD-&oGobMvloElzbuUOGMm;kD zT)#m2!r=A?nl8-xJDE1(^yRIXRHfT96Z zJbrt*4ZU80j8uWf$HDbVC<*mSEW}tyy%I~PUb$KXsaO0F^@k>8XuVR4Ua!CpbOMcQK+De?X zot5f?wzP3DfYuQpAKNYL(R@V11%7(Vi{_*M|G&6b2QFIw-vbw|wvS*%YgjR?9}4QP zd33WIUV?A3lP=+Fe$KAS;K9J?!Fim2%Aw8+Nb4D(>OtG^;O7tZiW~)Zv^y^xp5W1W z5Ip7vX~IdDyz=P$2{x)Ao} zBk%bFj|YT%c3y|>MfB}F3R;W=y1(u;XepRS^DluqC!fyaFN(rA89*Zpv%sfd{PgM- z0oC~o9tU6AmX?DS8l`~7VthKEBQ=)$5c7?oAvoXG|8=+gdQCp~_1gS~*1z4xo}Fgk z+K(4h`*DCqA)kkUy5xsBJe!Yk_*nifz4dwttpDxR3z_g<()j=X>pq{(e~>|r(ge`* zf9QT#u%967a(t5CdvsoR4DsoF7yRPDE6|#z!>+Aw>sUb}Ho}lzC3u7pwr<3;^MFU^ zaqyn4SBBqS+yyu9KpUb;R6P$q<%e`!eK=o$)_-)uTKM3_@t~dwsQa2NfNU(1Tfl3C z!1LFgr(cBp`~TmoSL6d|*|@IZ0mpAg7)yk~Eh3LjDbNCX3269q${h0Oj5);N(R_f( z$MQkxJ5URT71V+eflSAPo&Qn=T=Y3GfaX&{=g$OlLTBqC(yU-(O>X+aIv_^y&Nr9uhqNq6oAUw(}s0p=lFP$Isrs zhyfYbc@Vrn7QVDiJPwq)!1jak5B&Zlm@h#Y#iu)6!lyf50hC3=L54IcgU|c|C8h@; zkCi%l!A3t@FO`aWbXJ3x-hn*`@*XVxyz}V1_~K|0D5)MtQ{>YL9n))zbe%l`Y6`}9*h@2jY5y+!=N0(0qW89f!2L^bX$9L8+cfLFM04nVjZ~T zFER4$7We3cExv07tv&;})wjDGyrK#`5aHQfDgbgJc!08S=q5xj63Klz@HUXS{VdsrO5|9RXnAm~8wS$2HoJtr=D?#I6 z(A`?T9-vdi4mLkxZ+yrAy7HOxRH-Gn+4SQ6Z_qR`c&A#rZ+D&mC=wa@TOsZ5IMBgi zKAJB)I$clrcD{LC1$IBEbuSIp4LZ4c9@u~~0Z;2P3H~0?_>gbs_t)&;eJu5$`3DWu z1^HLDn79el&@(Rl-W_L1fT-_EBX>%lcHc*@K0 z|BG8(T%fZKnjf%(7Q*?q{x9JKPtP`ibVH8w;RlbWf{P+h=TbugbXVVZ&rWv*&}E1( zUKntKP6+_{mWjU=JigNF2TEd~!{q!Fd^%tGcK$H@28znsAK(x|3QkTBRnTOMXD6FS zx9bky&O8CnPB#Tl$QIc`Nd4n+@G-v!=MB$Jc90pIpi2_FOHX+9+B|q61HN?P{|ga_ z!Jfz6LAe36CIix^gzT;ZnciG`fWf!3PJ+L63wXNVA1LT@eK{FkE&(SOX!`4nM>)R< zq=*B_f2Dq)7}EqzMuYtS60{5w-2Xc63flI{;M4i~r5v((y>0@puOikrfXrL*3mgb9 zuYuk1{lyFj|MgN(Ja>M7apThe|1X)rhA@B@0m9e!^0#Dz>Sxe>5R9Ik>@PvhbWl3; z=)3_d_vZ&Y-Cz z&~Xw6pE1Aq1Ume*o7so4SOHu(fabO!(Fg56SlO>*%x$VnNQ~{?_QoS zo}D)gLHo@?mcMugx-X!c8R{I)qduM5FF_Z8gYs84Y>z0oJOO$1^&Uh3gUgSQ;O75~ z<(2%cY*qjNJ9eJ&=;rh2y!`DTV@ZU^#h;L^)1{^!-N6DLmZxegJX%jyL>M0M&^+bZ z`UEr}!|!szqnmZ(Wi#+LVUKPD@Q5I|eDHwowYEG}d%~mh;_DM|f1ZDFAq=$r^x*4x zuwg9ujiCEmSsSi`o9`>H!J6;W)7fF?tAOhB*8im*9^Fi!gskAv?IZxcQ4O@Tna86$ zNWr7|1*1nd&moV_6QJ`!55C|B%Qru$FL?u&Yd$0ZIxYs1U%-R4FG0(pAnhoq`34@{ zT;O$i-;RRL{cNrhU?@=mo8HX?E`L3m4+(rf$k1TVQ2GYcPB%RHawBMd54o`g%2y!s zz+ns?kAuucgO^3KdbIv86$BMWl|A6j3B*09i=`ic=8JB7bbg2J$clNa47slA#pWLZ z44$1wKud$cgX|!a?q34cQ93H1Nm&KZ_98h@8F=t5zhm>$dXR!V9#BIaG7Ifv`JyHf zbY>rTg>VX}`+V>fKlrE-@F{$dC3q-qgOBfn zZf_QN`2eXte*R(wxPTT0HGx2@hvYq)e@K^vfpV_`DC0t=);&6*85&effWr0?=(J@N zOF;1t(k1ZnJluTHSg!*3(7=~7LFok~uK+g-R5+{$*#QbtMB%UikzYYd!4U>pPVLkA z0z>gj&@w(G^^j&Qxb6eBb#w%|7(BX#UoHk0&q({_!RZscn+1OAAgGHCS?LLiOi20! zHJLrS%LRNoAA^!{Nj&I)zsASlCHB1{plM46aI)Y$43aqb!q%fxzSI}g-Bk7AeEc1> zI+v+*Ii%+anWl+->9GOST!)wsx~CbmaJHoQ|Nqx#LFLzjhVu%L5e;ciewRD1`yf3? z;~Rifz7vQ{Tc(T9wk$l4$1<;;+AAVQJdR!my79)rkK$9h) zjS!&23BU_Feu1)E>m~kH(EKuz$ESmejmD>-NChp5fUJf9A8Co!|9bx74j-uXb?oIY zXnOMOW$)GliXLFqdBY*2kP#XZgv8Ck|C>Wt-O6MVui@$sassE$s~x@YK8tDo2$)I?pvfllN%;CtV`m z@N_?TS3@VaC#?Cm4P-}WumY&E>U5TP(e@79n}-AoyvN7i`i+5s!K>Fq|AlHcs6TiA zMeRFqQwP~gpmBB3Y-}Uwvb4Vq=M+3U#lSP>lAr;^<~#|;m;B(s0N1ym^(Zfv7ySSK zat^2rm;gH0;w9+facDgHYUe3{d?4=8c?#O%<8K8`n?dElJ0ctr{Ry=24TFU*XeP}Q zY`HVY9(ex-a+0-YC)>-azo66z?T~);0}T#AIWLeoxBXB~kOtLXpo|VW!|8viASipi zIME8Kj-mM#bU+Y%{}!aadYKMh#Rv93NCT)_0#f$dqw_eV1H|6~S`QBjMQHP2C-f*3 zexF_yF%Qj;pl!H4=fRyvhmvYg@w%B6ky$-0kJJf*&cI&54qEMd06Lx3dH)4yeg?eW z0csKGypC2-!xq%IXXI}It)BxeN$|0Jz~2Kp#{)9h!-;n8{j1!xo-y0iK_~`W>u!AKbGq^AQF(bK@1ti$bs&v{6w5-mf z*YwUASOafcEVu~-9UlRw8E_fy*$EyLffVD|&cpTXdA|P7Sl~6%d1XGG??C;Ir}mr-uje54i(LmDX%CtWH#`uF+$4nbXTlsq!ADbh zc7n!jKfiWIs;?m>A?RGH6yMgj&~tM0Fht8Veg1N?D<<}g34a# zdBh%__kEN9zPJWj64cG?-)o`{u58!AM;_`y=>a*#f2adZuRGN7KpYD>KLr$hpI#uB z$;aT8)CF*vZ1eBM#8gO`{PG3pes0iFq{tmDSp0x?n1QxOLiwPeK(W5Q5xfrO{)RKJ$<^1B|whs1>dDxEC4$3AJo=l0oBi-){JlG zL*LF1E}bvIRm>-7u!8FOU-OaA=k@6>7I?iCJ}{W;iBj4^_v3c{1g&5V19f=8>A#x^ zbbdUd@Vw5zzyLZ{n;%q9cOLXf{^)t|CBI|y!+QT-6+`e+DDeIjkfXcBKpR~kgIfG8 zxnLa^JP*F$cLXmnz3kZhSl+Yww={nXs6FG^`ML2CXjI6t`7ygE=VkuZ+n}lwQgMS~ z!q@T$e?Rz~UC^#6aDSk;TEL?>Ou)DG66o}pFa?j!W6-*oAH09iqw}6B$jIhr>>ixQ zN^2qK1;2PS546hbz)R2|G$Q@Co-DEP>Gl%vN&W~wAeY}q^ApHpo}jZCDN+y#y6*yB8G*`ch{ccCJva}Qc!JvFph)DXN0ir{=RhKCpwYL^13sNEeL6pZ zyVWlygYE-_loQIZa^eZU59b3=Ie|2j08MA0<*ksq1k}C*WhY4e=+o^c@Nz0rd!V~o z;U(yfWT-xHSqEC*30gq;q7U5j08d|}fm1E`a0*Y$E44nL!|6afS^xVoKJhsCh##~r zy%Vg`6Xb&_|2UA>7uU)_vR8>cNU|IzX$uPMa!b(hV$gXeAM0d++V>#W`!YU(Bz7H8 zmi4iGP9M#H1i_XKE6wnHDhbw%8x^S5W`H{Z^q9-SA!>udR2RYBw4-RT0Lc6f(2Xk(A% z^LkG2ULHFi%ZGJrzMao~HNS&f;UGy+@#xWAd&1-RAy7L4yvN7#c#(`p=TEO*lLsD} z2R%AZfNu=4{O-Z;d@y@rI*h8FT9_CE`NDjXXVjcd*FYGEZA+|nL*2j zLD|Du!K2&vfJZOO3D7{MPq*s^k8a-+;1)c{_!lx@GePmn-!cKzJO{_Q=fUUvKAb;5 zNw4{c2BL5|JOMhs;@Nox6jYs8!9#K%eHb6|cf17W^>Z&lyENeaT~Iyn@&Y0~diRE? zg3bx^(fsA3`4hC2#l!L-e}65=>dyNw{z3+pz=gUaBXl^KzZJAe5|m0jEM0f-_kwu7 zmhVf_Kxs|;F({}W`DlLf(fs8Bx|WUSDrk3&$H8~D{H@K53=H1AA*KwzjNd(aZ7z8A zn*8wSJoRF0Jfv*r1zn5?&UO4PFF_>_XyY6>2oPx=w3)2$3#c(eL&qVbbj*aX8m~( zJPfw&Fsyu=5CU3H%=!=_z5y;?0TDlW5L6^S1ZnOyz4BZIe04%MXlF!t2s;COa_pBA zC^W7?deLv4(CVL1kIs*XQ@J%fI!kZ(bh9BZaD4$fH|78+J(mQ5>Jg9Tg94zsq(suA z+xYu2kVI*qM|ZIRXpa5EC;CBBv1(oKPIFm zJ!Cz$XXjUsZqS@IV~K;u#edDe8A}vAn*aSTaq?*WRuSsb>-^ud*O$Zal27Mz-{b=? zG(cWLI#D+kX}y3)=l2&s96{rn$6jv(?Qems$yQ)sC^3QgVI5eUM+MXn*Y|*Ik@xt1 z(Zlj%y@^NjF~--ui1O64yF^9cWhJPO08VG1@gsrP7n@K02e*4)yqOIiGCjNBi~)4m zO|R+gr_fWkUnB-0ttSIjFQ6gw7uuk)Fz{iRCB>k^1JpqUon-+!Bln+2FVA%k%k#yi z9-YS^$fGV-@bFf%ZCUi|CRnR@_~ zEN6ZI-85MWo}BIQ0TsNU<+Y%SjNhX>b_ZyLw_hG)bn^j556v5%pel+VWJEWMiYMbe zP}$s)3R+zTwc7GnT{+0y#&3vX2BfKX0>~}hGAiJW_?y8xz#H+wi;AB6c7FBLy!s;h zF1V2N=(V}=qW(UJ{rpAwUC<~9_?&S57AtV=_zBV`0y_}W8u9F8QSog4ufpHT0J6vO z9)DjwsHdTDT?uYqy=L$6cX6A3H`}_a@F3`;(;QZcs|HZHA3P}5dK>mhp+67IB z@I(CH>3ZPhg1`U&!|pqJ{T5ojLW`T1HsJ1!1AN2p%W$yW3?QFa*n*}Oj=huuIlS}! z3y)yXZtvqSCxE({-61Lho|f16`vm^|{|{~*mRkE-m#9d9&Ud=}5;RQ?ZfAFg9`FJ6 zWA1@sc^POpqYyOS?b}%bI-@>z$IA<#nZ60o9_-N*pz#jy2-W)+J8VGqAANcI4=CBW zs0h4V`v)r0Tm%7ppnBDAKrkMxr2tnZkM`&3b%bluyKnQiw}T0AID$J zegV2J9qk;X3{bDIJNAc9FYE4Quyc?Y->@-E01sBdyDY0g^F7PZ&p!gSgF3wUoWBV-S%Pq(@!qy#9@g&mR6ozDT9fbA|9 z@U*<^$?td6)ACr2IO@T=kn<>BU!DMp%@?mhx$$m|Gbr(aW>A$p4?cr0wfX=m2oU)T z)D;5F1A*clRTP}geKcQ#jQn~7R7>3S=oPsODlWi_)TBUb$Gmz?UU)Lzdod*xQWU+p z@&Etpc8|_`koJqN6f?YM(LKKJbl$h9^&gu4(9HjR)Cr>E()-phdxu{wFj%zJmr7 zz{^Cgfx2PfovF=lBwonA0%b91$qrs1-gy)>LkF6k17&U|{#MXns#fn%hOXlRuRZ};*8Lb1@2p>Tf>o6~_vpOuYIxG8 zmzAj>6ycyo@Ua)utQ0{#5RcAdFJ6N#{05I7fN}=Ii)>Kx>OB4;`3cCJ`#!y_GZ+2; z4?EWdbY9QR=WHNL5%KwQ`f|`A5#am-azA)IE2!|70d1rdhujTT$`9gjftR0Jx=EC< zd4SfnPVfMqtL-iTUO(i)?{eYwbEFlikntyvZq}!pLG8(Z9^Do%tqx*sZ-d)okWj;R zRqT=HpumIlV?mdhgKw`W)kLd~JHX8v(76>ikUF)H^aQ@^)3fuaXXi1mUYoa|6&^3{ zz2#tNIl$j?4m3Q_`TYfGVBDkETL3f>4(Vg_w{St)C!pik!Goozu0WDFXrY8}=QBvV z#fS3+xR~m;c7*M*%mUZO@A(~@pV#|#{`EZW2EJ^>r!#efM`!E~NE&N30h|8(h07IC zf#tg5h4(s8@ldxmaaL68zm3#{}0 zi$%{s?gGu0fr`*_(1@Y~X#3E(+}h0soiqgX z8$G&N4L5<7r89VTx^cXm0`66U&PD7l7JzJLY6LBS>-_q1J*YdX2k(!9y8`^JEMODM z6g(`875H1Wf!xq}zu}n!e+wvFUZ`#YI~Ft>1)6mC=nPf>oyp_a{Dj@3GgyMZRR^pC zwBOQ0^?&(+zo7Nd;H3e78_sAzj$(5;1e%6|EI4BD>CP7L?R*a%8Uvkoa{q; zmv6ys8*qLBo#zK0PiTAuTD$=nMSBTqKS0V8@XUuOsO*5BM#ta63gW|79teAOv%UNb zH^1}#3yzJDw0@YqBmpwt=F!RQ*)8_c6s!ttFQ}*}xcdM9%l%-tFo2WcUr>NJf!q#{ zj~CgU;E;Yf5v-R1bXhm3Mszj&_7b#4AKNBn9x4n?M`2W9; zW$g*j`Wn{*e!V*2W$IqtCO_aSI#z)iwF;oQZwBbFriD*;?g?-h{s-l2ALs(_`!DV= zD=`=zfNU86-8_dnTn6fYx}E^#m)Dmd@eL|J!R;e(<@gU&IfA^(@uGMYs3zcVc@1vy z+d)c+(ge``KrgQU0-b^D+Y4IjcLY}dfy*mUXRQ~suM)I019S#huMN0C^TLH$i2-uF zd#R2`^I_P9ttY@20%UoDE^IvyDfhtF*S($%ZLdS-dmF)Pe@m>O86JGiC1`F(8gwy& zi-+amT6@r0N1$aEEFiPIx=k!VDQ?}9|Nmc40GSJ#cYb|5Z31Yn0$V)_HuCl92`_GM zg|ufb--TW5^d0TK+n=-l{|EP*UfMroL#|6f_Q1mvey7t5&6SXlY(xpkFmOor{sf(v z2f5v;^YCj8SbqgHd*uQ;fTG*x1?brE7c5Llup0E{V{i@uRd^S{M=MK%y!`qKIR8Vh zjRLJj1m`={F?k1u7r(ba{P+2e3~0sucj)VmM}q3R<~JPR z)63#PC1&SU$d23A|0M!G-DZ#h0u7MN#ebk3h@h@^E4W?N9Sgch`NbU2I?v7{pqse@ zeOtfrcYx+sd^$gP%=GyF+q3f;Xw$dncUK1RFdB<*cddet=4bC-p6}rL4AN77@%`-o z|Gu3Md^&%E2Kzd}U987vL80ObZb`wf>;bJOas^#w8Ual?sLO>sJ4IA569hCI!9xQt zA=6+E(ECs!op;c&F#@lTfz^TbX}w;F7_R~I?;-dgul0KW_xOGR>_ZRDi=Lh5UW&oT zvq1gL6M6y+puqC%JO&D{7SQnYOVB=7*t$UWPWX9)@bm?_=BQg9tOI;r5dn8nE~!>L(*gGw^D70&Q3=G zk52GaFUaGE-GvG$>klA7{`w-cJb=a{=rRkid5G`;^&mVu@4S%O20DpKRC$#dgNHR! zi4y!6iBe?`&`IM`-#~!_I>rsO*)rxjs8#X+>SPB7SpK;IwGV7QZ1v&2UCIm|olhM> zdlo!ES1f^B!LTw@;)VPL0S4c0eb3G#@D+%l8;xKc3g2!M70}KG@X|!ksk^XU2j0Cb zdZ61}J6%t_sQ&u@zh|$%fJf(HPsm+jpjFuZ(Di(fxw-GBKx%wc1d!tuw&w4XPbX;V z=EbE`kXreOLW!3TXmSW#?W4@3fL64lwL5*mj6 zpztyL|MKV;Px}(!Ib}bx8S+dGC|tG+6l_e;a%G4oeT`K)otZdH|ii3Mv~re|vyVf&vX#fO?nw z=RgBFM?AX0J5*XOfZB+V^bBs_fm-n|c7s}Rov;f8TEXj3yMqN>4Znf5vhnxng9_7b z5f$*F$9G^8UV%<7fhz#bK7kLz{QqKoKez!2o^tDSJprCthNfe9_#Wr)1(naBcm%aE zz=QgJy(ZvB$BTbS;6wcVAfqynT9>~i0&FX|eg{{Rpqf|N7jzTQJdoookMs9V1t|d? zW?=(jbi1DL>NYU|ueSsZoi-nbF3sR?EdlMuv#u84?**?P?{-!I?>dK%XTjZhjK3GO z8{fC}TSYd=!ZeVtAjtw8(~FzoYe4>iEIND#oZLZ)1XMF_2Q7R6r6wPc37Q}iRKUq) z4>Y~O_j`j|nsECa!3XYwu3CfiH^Dg!e5?!jyvgPx60q~HAgKycl!0z!FaiyqbaR7N z>qUW2Me1gqzZBGqyl;33w6&-Chy)_9y;QjX$}pgN_nZZg&zAtX@g>qZb)bO&0q}x4 zsJkK4C7`oO!1)n!Udy#8Z0EIrdWYZ$dszf(V}t7}P<{=CrC+{nkn#+CR@fg{(uK7D zf=`1caSnrue{hQ#R9-e zzyJ-&g520z1nQ@NCL*Cu=?5KX@FMaz$mVCBp!xOVFRE{YT?I-q1t2E4oPgO5>HovS z=iL@a_#pT75&0Wstn`H8ffov=K-vB1ix;5%Ae~1bWfgzRPf&5tc@R4C3_eo`)Ix^e z3j#VX2zoCFe+%eF2vEka=K|jl(g!+X8GQce{}&g#LAm=VC?A0O9H5K*K=l| zueAYf!13!g`2o5+zVv`k=X;;d(gQE5AbC0s)Y*VIsq~bOb+te(4=Am@J_kux;5JtS z14C&XsANd-(1sm@2fCgfwAC1+(G1BSpy{vXNA)l5!BsqHKPPz5!Sv?;|F3&N?CbR1@!A)pA5va|=Wmk0 z(d)VcQVP5W9dkApv`Mn{K#4T8{O^VEOSz%^wKq^og^i$kgTEKNJP&l6)Ycbk9I=fT zC!Ysb^N?a4JXqLy*`xVQL}%?Bez=nHd=P+oyo0lzJV-JvtwGK&Rk9 z-BneF5C8vrXdd!te)z$|@=A%QN8=j?0R{$-<{p(F{Gh~Pd8PDqj9tM92I_#PS*y{=BFQC^n;eibh>sxqLIHv3N+D#IJU*7^ILc5oYqVHec;U6 z?YhIGGj@e1=<3_opkW-}-Wpbh*B0P%09Ge~?wx^U;N~9!b&kiF8NvNC&~g0npuTvg zi^>mA%ljqfp!?duB?q|G~eM9-oEI%l!@pFsVxW6TUN13WG7m!9^$b&P-Du#;N5NW#kKQ$i4th=3ACK;AUI3x2c^4icY&9$z+({L zbnDSwy5fa?Ex67p+33+7I>E)Vc20>M$XCsWAmD*9^JJa;A4OpLBqV=p&MSW=9g#acAevK+;s(LCv)oo z{(jKHQ&+?Pue&_DYa3onp9?yV&K2ok1aFUS*A9=~RODeq&>Do7uR(KIpw$??uAq(L zprqu{8^-Q&@D=lm182cS@yjJ3HO)ReKNwzi{Qdv`#SA-8-2}_vuyn_gWHC&Uk=E_L`4#fClv# zFZ)_PFEQ}!w)g3Lg-BU1ZX5w6DRz%;&}OmHvmV_60-nvsIXuAXOD}jd{}$ly10QbN zU3=oit~OAC4(o4tcAG&~x^leu*!BOvujR8+(0+#(A+NxG1w}Ndlyd;>D@Cozq3-K; zJ>k(E0Xh@C-vm_NH2)T;O9m~jdJzb*==BCjJXQ<5h!2(m-z@?vbfD+3yf%`!9sL2h~;Vh8M zb790(wf8>o6~_wCG45qN$1#TRQxc*4_Xs3+v2r%v$B$QLauL6s$VoPiZ|CbhT+xS|Jj z^c-W6&Od;ipYYP7^OoVa7jyUi{||Gb3V7S9Dr9@t4X_hY%mA08o}Do&paoIz>!nea zJ44zN9^I@{XMI!jl0bk;6Fjz!SXde0d7 zTR{7oJud!!abX&$OU2&;UdInEB{@7gPk>htmWF$Dhc58x&H~LgRY>u-fZ7or;E8?E zy&Rw=WUZjP2SDf9g33!!Q39Ds(*StflH~^I%ofP;G|h(@LCYmy z7=xPkoyT8Pzf%M)R$JiF%>ioa?*~^;))4~yy`cS%U|zR_!s}g)&mi^r7trYyY#z-% zCO;T_dVN&*J)0kX@a;SU?g8Ed`4iHj_vmIVm_ePGDpK zt=VA!$S8nZXOGm;e8R>Q>NZFHmpE*Ya!WP0+S+IZ$|bHos@|?q>Pp(_6sk-)Zv4*Ya!q zY~R-ZrO!NiYj?bmoervbSdYyBxioYJcxu9lE?sP^^{cqs!a zOgnFQ^qPPNguy3FxPX^z)$Rb-Mn=a$CG-(U2*MNc%PXL8?`92|4xY!AsrgNWM`!H>k8XKToJ_%h6@S;n?Fb{}+(gfde|%e?@OQ9+PL6010X4lqM-R3rL0I+t?HY`r-BT=2!Kt_N zA#7O+sJjGh10M8fe)Pe^@(i{%;F;3bjgKH{=88w_r4mq@5kW~aXJ5WUKF@FhsGfRp zdJ@>dt)SzIUdYXdWID0q;7m6Gn(4$VkuqJ^DK>`J?y&hU&*pcG-rX)=89;Z&d3S;s zmWTQKL1$q4wtg#p0FHI_so+?@Fbx#zz6-#y?#ST*PFhGe;qbSv2IpUtq63;ALDj?q zNl?9h z$}Qlma`6BttGI$@i$Gar0W7P4MnIu?jM6EOC|;ezg`>gSv?+z zZ0FhQE>5+qcLr1}ft=t4+vI!P0o0OW0FCd1)2{>*1H%rGkY{g=3WulVaZsV-$?tsJ z@EhnZ&d!4#%`Z7#yfM?-hCDd7K4w^!tC`-fTwCUUx=NAGZ&5>Zs?z=gi*S zAvU0!{%iyw?MaX3LyR7vCRt~|4Er!#cM3kT5B^X||Ypwhh% zR7!!)w*i;uE`K;YdIK1}dtGc9ygNhwaQHBO@~}Kq+5sxr?||~$3+IX8JpN`9N*;XJouEo&_oDv=7NJ zfQmVAivqOFtn-*pFYD6c|NmbsILgNG(hi)nLHSbg9;g&N{$l4dMTVE4kO$RwKAkTh z(P{!oKcH&}V?8=Qd3JsW1q-Ms^5I|q>&271MSA1$lRE19+JA#pzw3Udm5!a~@U$_;h{;=Rwy6FW%^b zqRDp!C`ev1dUX2E@ag>N+xgtH^9;EC0@ml*Ys2QDdFaJ|6>xu_zvUPxWIB&~!4Aag z_MPF`Ya;HW`Q4+_?id3jsEPrNE%5h(F5&S!?jjB<2^c&(j~E_!y~ejYm%$Uf20944K#Rx{>8sOmaly}b64=sIp6_~j?OqlebE3~Lk7QQj=%L4$PuVreDHWj1GpV< zxC@*NT7QCi@M6;;nS*aXxE;{o)A`b+^ATi`+^oF+|6jBoVq1n2GE&KpyBpIkONNLz{ixkD!e`lO5h&^1sFUm4}%77_~#sW z2|5PK@c)Zhw;IC1;H=dnW!Sc=x zHfju|GSC5&1-_lB3_hK|UijXFRL*n3mGcosAIrz3SA4otCwO$1c6fBNIUZwS12=6v zI@w+-fK~vtJ}D9NY<|P&-7WIm@feF3gGa9u<4e$abD;eG!lnmY3_k5eDF$EWf@@LN z25^-M8YJ=P{NVx15uh@|99(961DOFWGd{gY*aK?99C@h-8ei#Vo!A2|8ayV#iiQJ< z?2yvnMVbI71GoS){N~d6{DpY70>cX--T(j7AnQ@UJ0bsqmZDq<_5kf9{|uku=5GPr zIt-0FaQk#Us87*($m9Dh56fHp{oqT2T5ngFftF_UgC;RNdrf3O6{F@Y56fdd{Qi%8 zTc4EbMjQTz9IG1p^2ZHO-x@OhntI>sUO&pkRXzl;GF;Sl%0`pdx{kdA)yFUC4PkK|t-o#$Rm0FASD9tU@_ ztzT>cpGT6-!3aA0I`#*6SH{W1FRHZ_k=Ja%%yUHQFG!#ixgOoD*SpOae7Y?_Cogmq zfpXyv(C!3~t3a**?MH9{Ey(ND-7x`lTg@NO&TDCo&9$J_Y@mKO@`W`r$G|K2!1ti~ zbUyd#{I?TyWz8;j1_p)~^?Nzd@2%M*3OyPIbaDueduv*6*ID?sek(BsuZj2wF2X<& za$yZ(Fe4r^-U1%d0G-6eq5^GKAfHZNS`8T%gN%|uCb*#ONw8aA?qXK}Z4LbQ;wm(0 zH-G{Gd|oYR9OU)J2_C(*M_!nJR$%bx6`eCr1+;P$a^KB&aKQ$-RRDGY2&mUK`!pxR zOKs2qn4%V_Xl8AKWRu)pST>m{2U=msngtQRyb;y|Y?Nb%_xJu8{s&c}piNL7&2Knf zv`z;VGKW1tH_I?Em00?8CrCgl-tG+Wk%ua$Il)7B|NsAmm+J6?FiJH+D~Uv4ry0W5 z(8PkyQ|i13I-cdKBFOyXukXNjGB4(VpT`1TPX$>|8w)N-!8Z^Itp-&lw@b_oFMT`A zSR&?eoB=et3(oeSk(m;3|J&m@%LS0I$8nbn&~q#gF?m>CE`0`y(RZs5F)9m=OXT4x z$Z#2Gs0?(jVT=m&>LQd8DNuR`oqw6Yz*NF~IBmkq--##_AYl1!al-@OjwO^zfloSQ zECH>e1+Da82Hj`jF5z+T0W&NggVclk>(Ts10Xf_JFg)PVS^EHT0B&a~s4@89#rrp) z7!LgbuhdGJP9A=tsR7>HfSSJ{v*|D1HiK%lQbTZ>HvIphb}lH~ZyA0w1YMW&;@o0z z;qnZ$i0ODNcpMd)UZV}aImQ_NkA3OQpoE^^!9&d+y`uaxp@&JmOj{=aT4D@czW|ee zKLaLzZ6mTg$iI$|HG)39fpl+n%{7MuCPU(m*ejRjn_f$?fmg#4md#^_GtdW zQlbp$%avGr^acy81TDt|owIHQN?)Qe;3FVQtwG~E&;iNP)xOp>Dgw1OpgCs+&@eQp zzuH_az)*M7qdQmuwCcy>Su-1~Jpb<}4(uL(^2Jrm_ub;r@yJ7JMs$4)bz`-v- zC)t3U$KL{)rS#}L3_9I41Ju;&Jmk@9`??)e%0GKyJO^|S=MR+JBWgG=yK`=>b_C@1c1C)bx|)pMN0QF@}HJfmn}TmR3+%dKlK8jt1{1a*P320U-Z@ zj@bfFae~gI+YZ_y_j(7vJOkn;6&&N^(DED>D<0kUkR^=#ErOsD9D13|U2QG~!`q;n zrkWc;w{9MLT>~u_p)E|%ZNQ-OQ$W{Mbb!w90*~8))?0zvd;&h*HaA>B_gaHy+&~9m z>;cvF%|BT9Teg7eVek}2Nf6Bc&A*uVTfyhHHy;r2=nmlU=mxEl0L_=ZSY*h>01LfF zP!xl1NUik;t#H%=g_cM4*5yTyZq{pUpkeJ>9=)bdKSBkj)ur7w@p?=P2tkHm3++(8c65AWIe z4YYL1xAO>S>6SP%t|{8cv>Fk?*ZRyh+L&Y&ZYHe zKH>ph-~b77P(QcZl>u_97i)>PNAnMM{?<%T z>D>#Ng{%xPvtNSt*FeilaCm_C_5NTfvGTAyT#^J+1{!5~3A*|a)L#af^WypfBtt-x zq=@+ekU1Rc;Bb8jIzHB;n{{IgxZPXP2CL9dh_N%gFjfN91*}sblF@L<)nZuor*zwS zbh~kQbo&YTbh}A-bUtmp1UftLnBk=ttN;H04{qDVf{uH4g&4;JH!cR%IPiY3ogaA^ zKDGs@`~%$^1)C}XwRAf` zg@y-wYb$8vuOGa!s`LJfXo0U8kDZv{2cL7OcY`CGyB;N8v=Aho@q62{l^4S)YU zP>yKX2THG<_h0N@1YTtR0CiRl)Upcv0owlxIwuDC*tOM*K#h9_@KJEBPxw2tKnt=u zANVl7;O~GOe0(3YE|LY|qLw^xopt|(!ETU&kkb=EPU?Y_Fwa1ig-ilXX1?L?17!!$ z*)^T_eKcSA^j0vwkX!_+G5&e=+Prw7y988!-+!UH2<&0c-Vhbg+aMk8p5@Fi$!qu2EDauvje|1=SBlW{v(!6T1e)52z0 z;`0{4lDT_^s>r1fVZSb{oouC8!T~EArOhc^CK3pqA6K+g;)HX3%-LmY>17*N5Nb z2gu3bPT&vF88YBKZs7b1%Wssp_sAufdrQ#Wt4S00Le|uQX6HFxs8@nou_eVmozD$# z`}XFj2)tOb@&EtVI`H%a3SS%W+@sBn7ZM=1f_l;5&EFoKhhDUS&y@ymQ!G8}X&s{? zP|F8t4xEGK3zVs8M0xyz8+2P}=kXWJYa#1hL2ft+-ClReG1jM-RWtkl|Jaws8$c`m z!RJYW!y9rR0jODcB^b1<_4L*fKMR=C3VgJ{Gb(!FLnR_|33kC(*nrR z7eFUCL5wa52W`WFxD2+p4!*@6`FsqJK8u?F|6d4~Lp%$*Z^Wb5HnUEd!SKKf-7jnm z;B)U_?K$vz2S~>blqo=+J5cilbZ^3ofX|>c4#yyk^&oH|eGFuN$BO^|UrK|nF9BVH z2j2R9G(v&FqnlN&7F-qk*TG6dTYhjs$p;btSql?aDKq?{0*(? zNbMdu&x23k`=uX%PW1tA2!(hM z63?Le>Ge9${?}xb`zb)~0UgzG-6Q$J%XrW-bwpYRwNF6uVE2ZAvYr6q=ti~|f+p;s z{pRdQ=bya(c7&t!8PZ@H_%A zz4TBmH+bpm`~xiqN@YO%COkUh1weO6cy^220o@Vo(Rl&fO#)vhdZPmr616YDLwT@^ zDWT`?0&e_)(*Pg?2GVzh9>NDQ5Y_8aNL|3Q0NLF*Vm%e6r3@>oFI7=5}+C-`)}GW_P-`2kelew+y!3;~_i&)>2b zG|AZc3X%b#Mjn=+vG;K z>zdXB6?)Ka9e>L-Bt4ynJPy9H_h7u>ksP`PbPcoR1^!;peHR{}ZQ-ReUKG9uC6m$_ zo}G|caLC1VvY^>k@MJ5|FE{ht-H{GQ>c8P%d z3g2IB(wAa@u8N($_Wyr`=RFt?^LK#eEkJXe9=#WQqe-wVlVI zLD&j99T(glSm*%@xNdiamxum=ny9ex1kk0Ytp`dcgDm3!#e1i=6sRn7Dg*ULK^H_# z@aQbyK)R9#beU4fTMp1P5@=l$Y$Y?)i=Zwra%T*ZzCpFAz{_;_I(d)o+6gc6*MMRm zcEL-~4e$_kAhRWY@-u)gYX@D!3Yvd?q0SFFAmrG~BVdO^@*!y7vE^6(RxMELuQPT6 z_=XnHth`TWhQP~Y&@2su1Q!EriVED5lh*?ItagKE=P}S$c?DL`IsNxQ*P4SO@x=#S zDF$eCf-gUKpex1jG8<&lGCqg{oIsa!w0P_W6Yd?n!WpQ#d7 z&f9W=W+%VDFonpom4oHo=fcKVWjWayUUY~c;sdFC1@8j94DNge@gcg3fM=GeaP4H;`&%)mVDm)#&9cL_wd%?*jz|eWD^*~7+s3Q># zYU+T`buaM)4c~%JjtTA$Z#cXqcoOWQdv`{9KZ5 zR*31Pix5Lbpz(yx<1Yfz1sI@pR_Mb2|6i}!2O5fcSq7>(p%;Jk1}Y$r9zxdhfyz)& z?E={cc?}!_ms|grBztt*fsFupu~Zb~kltVa|AU(FQJ_;WP99F10P=Hb)r+qzP*>gZ z0B;%LZ*2w{1G-GRn>C{tG^zqQ+TxN&x53Gm-{yjcNL?5hAm(@8e_;$UxpWz1AzFzU zd}WNN21tK*><`eEvTh^8ODA7$gX@1Wn?-=(bqiAc;UVz)G@^chngZUG10I?-{Pv;DoN_$gybATO`dK_34B`P-xO`pK8cKR}6y0dxZ={6375 z^Pm)Q3Va8FN9U~<`SU>e4YY-(#N4Cv6lm8BWZ)2TtXhc^w7T%n{N&O25WFxGTsfWs zos{1l`{N{Nd|Cjs`3AI0Q3W>Yrg_n$(^~-Kl9Pu$x(fte??>`)cYwg_y9hqae~|HK zkJfK>iikD@*ng+Ak^SeR32UE#k|JpQ1-X3z@tXg>(lqu|pPKX|~_oPZaa$beUwnLK~d$PejD-vpZ=4Bj9H z>XCbNUVv|N1&^G9E|`H%&-Di6WxRq)O; zAI(S58W!Gi1Nj}2KER94LHCP7`z0@=CxKdn;0x{yra&C50djEX{TB{1Kwf8l-3iK% z-CT$>%=ueDt>T8K9Q>`I;R%oCD$x1Opw=EJft>{JBm$dwZ!*NhYZJjHy#$@=1X*bz z@|lAHxjhKZui%S;6iS34W9=rO>*ihyLd*5$dI5$KMUQTGg?*sB@6j#s;sdzoh92Dp z^$$|xQO2Y57t;Bvr96Ts@X(e4d8P)e%z+^qbnRPA z>`NbTbqh*IOh{H;1?7_qh9^Op#A`OluLho-M<5BNLtKxe~0tAAk&UNQrkzXL@H zc>KHoyzg2CNdjra9M-@71zGIc`P8HNjetjI=?{kD&S&Tt0#h{(){UhNM53d5+-m zf6vappp4x7M#HCD9j#>xzh)^Dw2ATH8-CCoOD}3NA>A_20c*!yLA!SuT)`{2d|RK? z>%QCo>idGmfk8K@^0(B1+Hzr!0HC&n&LKqx&&~rY7)#fBH2)BR-cP^s_y7O@OV)XGvzp|C z#<-6Abb<~_HF&YMRDc0|Xewxpmlh)fWYxev(6P22y}k#0I*)_KfItcO#iZY$MOLL7 zz@<3Is)u(OKrKV?{p8I*82MYg|NsBr{NsN~FnGGa7Bu|ac?X<_5aoks=bhuOdq4(4 zHu{5n*P{eZq~LZ=x9c8|Q$SNi-n}mNjIWC!@#@)m2ciKyr+_fer#oHXg?I)ykXvVi zt^>|00nH{He~~l?bN~?O;4nm^tuz<1_3S-(Edk2SuZQP@$16N~U8EUN7Rr=bg7hGb zwu8r)Uf%}Y3Hh&FfWf2Jw0{b0QlmE$)QAL4Y8W%HGrX9`jWQXEwBG`jK3~lK`~Uw6 z#!_}jbus~-Qh$JxBIv#)r0fOBFQE2fCX(g18;Qp=yu(~-vS!s z@n}>4SJEJ<&RdX5LjW|J;n^#4&$E-wv)7FSH1*Bj#|k3~)tf!EMOqV?blJJ6zB z{?-nVe$ckA-r578JiYb{W{3)y`Dy3?KY zLxvdxWD#B49D_80JIJz09zqqp|J3vQ6d zKoeA*t}9-GZdifje^63w=mmGsUq*wE{DG9uuuW|q$*xO0IuCmGvb2CY`n`_-J!U{T z9pEFx{=X>P0vcO53R)4S1#houK_nHeZlL&x*0oN7c?JW>}2frUGiE7QZGRom>!lFN;{5&7U3{7zhva^ z03EW_&F0bkjs>LNjm0DRqQ?y1Zk}tNy*5)ky9Gg$(MLSH0|j0mh4>eg=;60qBnz@JgzHV?gI5yCwMgbi2Pu9nF;D{gLW3dJ6lu0qf{lm5Qp)%eg~x;P*DxK z2oiM42h#aSw?T5?`&|BcbP9lPX-89`2Wkg4f^MZ^1gVe*al2XPr-1!(Gz;dJcfZ&e zz&p-CO`C}?IT&8}u%VQwu=d6U&}toM6%8s5A+x`sD}1^QQarjvR6%Q^KwAtAFF8V5 zIs7eNpb`#xrKeA4=?stL``|^L_g{E`4(IAT;sM^`=sLlp^>)3{OHjuYl)f+i_W&IY z@g1~9?u8xr9P{U(1T%Tg|Nqd^fWKuK186g7&0hwe?$QT;1=hWwqpWKe zKn^;6@#mo^1E|jrUIqZ#LgUdLdcdRgQr%|X-Y@~^g*&AzzTII8ppXY0oa)hQ!u0K^ z0)H#0k^~tGK4SxP%y=It8+-QJ9P+UI$ln9na^lemPT8QblBQSS6wTiXx``N`{ylnK zSAg~-ftJgH=40SH=J>(;xj+-mh|yxu6bdxIzes)oYBU{t`4L22v;@j4}s>nlR>Kl89+OjTR?NPpd}+M9-xvLG)dC32xLHSI=JX$0gVlV?{xfk8O#9Hj)W|`t+b>|(3W8l+jkH1ha0F^<9Aj_BdTV8;U3U2*Y=i%RL^Ty-g zV`iV;EYOX+V0Uzzdv=yGp!ncAC}+RebQ9tO&`uXm#`~VlM>%{gzm%SX`v`QXD)?R+ zrq|Ml^xy3+0GdSVEBN>SKR7LdW(^_3>!A4qNRkJgr+2}l*XzH>_Zy%U$oxJxJUZ`r ze819ec56G{tkbTJv)!r+57kEfW7W&_yk<9cy^aEcz2pS$KvswH;_Gk7v$-S9-Rb3`66hxz!BDbu{>69 z2ik1Mc?z@;_+Xudhvo;+lCEyn-wB`=F!+2cYmkc0V=p_pL4Jkg7jS>g@>ty=a4Y)o z1dm=3J`c+aHTylfSr5RqmL3HiOmzGuUmi+nkEQ(#zQo(h+o$U>Uep!v~Ppz9KwAJxAA-^bMagQfH_Sn_4#cF_6Go!?({JceZXH6Gop zE=k}3DolX|Q1lm+0D|ZLPv<3)QksJ1Oh22IYU3V<4Zu&fW7mo@R}eBjY-bK^zB z7Wf>p0%&>>w)p+Br**7AEiZT`{~ENs1(jDGy(Q9&KAo^@{y-(~gcsH6knT=#KWsi0 z)VYC9$ewhJ1)X^Md=jW{1I~vq_rm%g;P8_IMbyP#pwk6Fg9xDDF#LA%B?G7$@BIFv z;t?o34!yn)>OUre!=pYK79QT8v4scd&I3r78Ps2Hd;?mt*jd}-({1I^89D*2ZvsCu zv>(*^J@_7cWT;Q)UeLbZ?$VytZ~T4WF|1_Q9-rRY4IZ7o4W6B6eL8Dr_;hatDe~!6 zIrv%$oKK+l%^ZK>48DTqxNm1I1EeT;Q&J2%6b+Ot(yxJ9g2zEK0QW)3qx2-Gc^SCs z|9_uu-x-D{4KMAx$PGHO_&#VD-Lvz!PcQ3b(6Nf3TS{gS?|BlL_tt zo^6Bm0K20>=^xYsH2efUkJ`5Zv<&SB6Se>p7{4JoKo<}!WzgM@( z0gul6e!V6~K^q`nY?=K3f46IoPxoGs<*f(m?O&IG%42AO0BNMP9w-s_ZGBSV1-k79 zd`_ML=w4T^ZWAN$AqvMiUgS&$t?T&%E|G01bI4PX7PD*>wh^M>lwfxKFa{4ByTpo|Xsrd)Pn$)C~?Xv_?%isJGRd zdIPnDN7x4r#%>3Nm%m}{8qj`cP}>G<$;%w@7@qHp7neT@Gk}^lpplQhi=gOo?Q!WX zVDwD>=h*zOzC6yOm*p>H=k7C5Cj}IWpz0U8bN3iz=k6D5J9od7zQ(n=DF?K<>FI~p z2B7^SoxU@W_l)qj&IdIPzQ~?7GoZ4^r?Yl~XXklPMbQE}MiD7~JuMIN_kw38x?LxDb+er4_U-ZQJY{&vuUFb8;e?5q*v z@Mu27;bD2J#L2UpN8F>E5q?Nu=?+jw`1Q`T2_D^^3drdLY%sFs(!=0#0K7&0n`844 z#ut+IO5lA(zR71mUTf9-|Np;J0qX#JafwB}N!GIQFLGll*yoS%@)~@yF-V0Ls;=@u;zX zKEb2g0zBlTT%uV?553;-d#j)EQpe8hQeLQ$P3%UMu z4*}Po#RTe42ar1;Lz{%_&)yJeMvsfXD%?ResZZy7!*Af$SnNxw@5twIztB#A)ThcF zxa-sD-E5#4V~r?qU056gs|)Slpwxw+`~$0RK?|S2mlL9IYw^oHI5jp+53UU+d~0vl-mOGz=P&MFb{==Oc!(H#ofE9KE$ zdf`POXdhiS@+AiG9?eG-!0SZd<)0COdY%{mfYwcw`1*9d^0@d5RIg~kbwO63#=eaG z3Tj${&gJfW{^G(-(88)CpgYl_yTwZtK%ad{_kh!Wm}loT&??cd;8fz#c|OtwNTL^(D}BmMbDr^S9my z4Uje;QGg6&K>PpQUIMRYr%eEzeh=Ex=+k-519Zf22*{w)8{ZBwmXvs0`~|)q3Y7mk zLm#{d01aDo9(lb0lx{k|zeuUAAk()F1_*MH@Ka81bQ$qgGcA}7aSmSyGw6)bRGg9+Y2g3KmqXK8pJ-(y$p~m zY(Q!Dg{7ea!wZwopd^L3{{qzP?)=^S96VBZyA%{UFA{h`i}RR~<^du1b$vVHP?`yz zR8}a}hYa&cfb)&zk@`%~RfeFl0D9gj=$5+I&yeb$&igMidQsMK*IPl3YA88^zAO)H z4ru>lAh_U+2!|D%Y|q&kUUL8Z_x~l^Pm~e`k^aErE1>-G1=e+Wu>o{|RySw`AmsjI z(B%fu>wkPZ-}zd;DM?4%dFg3+g}?tkXo-{M8~#4feTbkmy0!=5bkOa=ecn>k&(`KKAkTd8=o;a zFfc)m#|Ir!-*O0S5Hn~c9c)`Uczz$W*90_%)CxL-#S{G&a?qLCt)Qto(9RxyBTj~w zpi}3N;uky^1d2$=Rh=&d!HJy#l1wBa%UygszrI+U^#4D2r4_7RahCAy{Q7b^xL9{! zfb4Fv{J`IP<{xN~9lXf@zb`0Aoh4p^b}>No`E91&!|Zf=)>8JPJO-6|{fbX<1dUs6$C!@;K5bU zASP(w#{$}p2TfDgnZ8)&1!|y`I)Q?w%N!JmU^m#$=49|_yfrT`{U%xPS8XHynoPb4Q&9&f=|<)^M#WEG_(di4h7`1mv(Rq?#%*QP%z+EfQ5=+ow$)Ev8{uXiYQ8Q0m4ZnFFKMGpv1?pb3Sb+9+!NVUKZu~95 zpy67}5Bz#Zc51-C& zpb3f>ou?sP0MKeWP~6%;-B{ucQtt-Z>E_if@&mfav~;Z}Xxk;IZ($6Q*8_1CUay0; zUqJN)NSGg_fD3%=${|p^gS%0$cTWKK&yd!KfldhXu`E5o-vYk$7!(fR0SNw9$iYIc z2S76kK9(QqR6!%0QaRD1L_UNuf+g9^(5@KNja{M@7SI_O-27vUhSoyT2UpVUeF^{PAuwLiLzJ(>@5yqL2blsS%r z&Z&44?a}!Iywep?oS@a8urm!$do;d*>=oMzDtbM-`A}xbK*NEZ=Ng|ulD;NrqO9|b zCv-`RFKE(FiIIWf+hIojmM@@M=i+bh@P0oB1B0jK9Z!D0J09TUaM*(V4PHt79&}n9_$UXV;2Id>wH#iY^boXk2+}qs>YH)a1p5yNm07Yl#N6*d^o|Xsd`F%jcEX@a)d@T=p^814( zMfqEJK_2T37x3s7`Q*_#6*MB^0ph}LHt^^USMcZ-Ipxtg6_m?CCli2gM-T<+Lkj@V zC6J)=YhSDYoomr~<(9W`3@Xv z;P`@uN4+DcX;Kef7z#cu<4HPbpa689`12P((m{ubL()0eyk|)ILFbOV{0u5^q4}q? z6?A`!M<+O^fL0gPErIq)Aq9(1FL-Rwr*|tzoqxB=ai7iy-n~2u9^Y?x_KF-dJn&i^ zQ6Ph7CoRwLw}8$$2JOV?bztYDli+}%py20_`*SX{^C?WcEgLU|KsvPrdKEUW> zd6>U75tQ9J@4v_dxBS4NaxU%vf5S_!l@aa(jmLU)^L+H^DQxk>H?4xHLtxe zF9nxrU~V_K0`g$I06v0`<+=~Q&ktz8lpccS9FNXc&|R*u`D;^9DF+#s^|U-*6XVgn z7bI0UrpOOqOpZ)g!tocY z$H5;gpzu{^VDRAgI|Oc;fM%m1#(VJl-+1vi1=Jj9odNPl>+QP99=+h44qn&-P9PqT zOzzP=6%;byTKBtOx6Y3j$v-6-d^>-(9w=e=>Fxy;4{$Y*y+FO7;CNy4QImA)i3#*AJ&7;xp0K8jC+}r1F{RWKHFd5 z^;6{aoshMiu=U2EL5U5#_Y2%H0iDkv3KD9r-N6D`#K_+&&Imda z^ND9~tiWp(y&YK>chYSz+biM~Q zW2PMFbUpHdYY!+7xgr+z^0$H-dZ0zR=tD4|c1L%(07!4^YfyXao8kW#S?j>Ac)c53 zZh;P1doledXrGkp4p8R;9^hN1K}%JBdv=R~_jiEz2STj$u)M(E173j6zy6j-H>;67sCu^W=)C9IdG|$& z54eR0E8=WHMq=AK-7N<`0=X7cjURl?@7e1o(EPX_w1ln-G)RWE9W8MP+>QqIAzDFq z%y@LOZnZN51t@5i40=NgWJS?mZ%}pt#VdG!`gf1cW8nD%i0ppwp)inkKzE#gXSbgM zXtie>Xf&|%0eFo((aoA|1By-wkLKSj{HZCK z4{AM7dVe3dIoxZz)n1w5<+W8(=<|Ugkdq02gGMN{KqiBBq&%nxoh7oP;QxQm=0A+} zDv%71vLC)X9lSqf3RF$q9Z*B?S?vG+UcDg?et1}3D3%Asvqv|FN4F991l;CV93Gto zKRi0UI6N#b6g>rLxEc$pM?u9n$^aZBKfVkHcY?s_4CH_C{0Qt!MNrm!AyxoAL-OKHmq(yh-K&@7 z186&(<%wcx(4M$%D?~U{{P5^3f`o%tFUw(2;S03W6T{j!SE}5I{$;td_t+L zK~-4of*0>wA%!SpVKL~i-Av&?AQbG&q9zr zsE0|d0hQCuMJ+(D_iXVMR62IHCY(xi84Kn%6uSkG~)-Tbd@VdYQf z38;~vH4={CBT__ecv@aB5%;ltT*3!Edna`pXds^t)aLPMKFkQ(r*IT>(^HxDp2*JbP_8_>t0N;-bKQ9MVnM0->_*-Uz z;skOSv!~@f{$9|cVBgknm7Jc8_xL+NE9pQL*ye1|p#v_6I~z-CKxaMpbUyd%*7@Mq zYXd$;{>7V!|Nnh7KZ9CQy&}+?5?0C^eQ4KH={ zY|c>;U<5fHHems-VL|(0;{`yj>H%$}bleLX#(I4NeEyh=io(k(P~1V=RC z$mkYmon3F}1&`j+6QCeY*dz*WT$M)DjH^&8tIp z81T1($KqgjB!kZP1Wk}#{0DL<)4%`!UtefBP?7=>^Xv}g@aQZ(0h(&I^tkv7G(XZA zdf`RXivRy#uYk1=L7R_J#{W8>zj(0&lAl+C@^k0)7dJqBu$vCO-U&_TAom{tiFY1* zJr!wf1COu*!wdGSpw17-JMj50*rY1B>_FKs>Gc;SKX!h9kpVUrv0qXHJbVHvufg>p zY)a#wEBL-Uu-S-v?l@k!gN~H!L>O?r1k|cSaSy2X1DcV$()@@$xRe!iq%aT2PjlXZ zq8oJY5sM1aMD`QVhSvKYou8ZkGnPcx3!)y!16m)F{NAVYylc!sLr*)8LGrIh zw=t;K4H`;!1U2O>@0Pv+uS$RZ!m$KgS3Q8$RgiSuZ3c1%=$vU}JJMkB1@^y3uPrmg z>yF_*y|xx@|NlFN`ShBeG*e~(HQ#-DRVUdfGl1G?93I`Q5@w*LnZb*IOhyKeZrPp2 zpzZp{Jvx~^x>6?8I2ujv_(_(~-4T5hmgc7ntwLd2nt5Dk(8OC1bWW_VGC zDitmZmg)lOiiSvmZQ&OMi+^xeW_aNY5r+knPp_)u?f?IMdQC;FR2Y0ZAH7h5D1Zgx z=R07%)*v(4p;Dl2tRB6h9f!eE{GhOWQw#PiOxIn|p88%>PLQsPs8WyOz`DMeDKos- zhANc~k-86(nvE)T2Q;YBYib{;% zPLPy7R0`@Z2Tib4HAqSXBIVI5x+?wue`p+-W`m@D)*!s>)A`M#S9JNd|Nmb+f(V1o zt?M;)HB)Brflx1gHY3z~^osu43$~@+LWSYQI*1-v=? z5MhWd?@YnAypa3<|HWifTT}|cMqM#gW_aNN(F0Brd&I!v*FfS1Na9N%NoX}lTmnhF zhYPHJ9!Q)4CJwQ^B~6*(#hYrd=RjHFlSi+qv^UsA%Z&d2e{m5e<)5Lu`W(W}N_^CoDkFuce_m3s9NEEQ?2%<#ew zA_ew2Qwv!9vxzdp3o|5fDbO;)Uem`QaXE-M%oh75u$GG;DP~lu7SL^Ty{3CXQZK5Y zVc^j#>T@5gMa)Q<;l%|caTd_MUA?ALLF#uPiSGejE!1n;3=&@e6Zh%-< zq6Z-c3f~lvx(b9CNZlh}P?*~m)&KwhA{HS9Qf_Agk}_2<|NsAm6G954iveW19zqPH zTm)pg6haKHjtwCOQuhTEwx22yzAh^V`}zq;{1!wU7KYx(!BQ7NQu`rN9=)PR*CH~N zov{kTizN^#Xhsta1>MxyYq}Jqs}mvxj>KMVuxZml;)O`!M#NN0A`(eFwgjxc z5TxD_A`Wwy6KEx4uW2JliyA}5GezeG5|^WqDuXP)N;21lo?(ap-N4b2kZK;ugvg5998NC=&0ph)2AS*KP4!U z9(x3=>pV#6A*z%S=%$=r(;XnGV-P7&|I+Yev`4S#RY*H&zP>U8q`3|1K`$s_1ouxo zdQC;Am@;_u+D3#cGrXKBqYN4>MCxyN^qOjFgU-7IFN^~(T;q6A)CrzA^yoER;HLsQ z3o{Weus#qZ;L$63kAs2Xg(pQX#>Q3N4S7F%=~@o3=A(cq2h4!Z)++uyc9+?f2AgR z_3`xBx%Qd_GY4oP>(Q&94TTzquVHd^|DCp9Iy`YkI&396pV3f#(4r z0gqnMb1V!DFEXLxaPy@><_Dvi|55|p{YFr2y`~8e^A+I&`(ftK1DVeW6^EO@TSJ-Q z<>xjO_jh8Lf2j=?J`51^55fhe!_3bEnZFV$4mUpTYc z%dLp;0c~%5>KN+Sc@@;<|KibW8l?{E9z%2TidIPm!vh|@rtaRLU6%J>OmCHB@NE9` zza-J4*YuPpSkUmmi-uN7P|wYy^FCPhPfrzw7dcSNdrcqttAGw^-_6VbDhxtE;?1DB z+WUqFqCI*|v%OWoMNjNY%T`H5`Qq3c`ro71)D~`ubgLx8>$Rx;eN6YyQbTh8ix#N+ zmxG+pdH==r79{s`!Hqu9g5rKlko(uPKmxDV^b|;Qujp=7u=}Tg#F5>9+aKos$`(}j z|MBQGt@VHfQgjP3?!Tpqi+O%r10;88|~1H68<~g zRTy6AfZW-6-=o*`6G(HfXg3?!{URW7WcNq=!NUJ%6Q=wBy20Fky9v|%pc7hqO*i(N zGI(@8eerTH8$+x|w*!YqvV(y~uL}d?VZ{0zNPPslOwhCus(vSudL2CK1EK0Wk<@G8 zQLhM9ABm)11&{iVeGvC+BB@uvrrx95{-uf(Km0sBFn=d#Nj`i%_IHn7(}hs;Ztekx zhsDbeQvBfdKq&ZhgQu_~BVR6Ze<_UWATrKS&TfzXm$G zk@cP|cx{NgFKi`l?G}_7Rmgl_s7LZQ56Dq=$g?^>3=h1p-3Xc|bp7A~I!8d*qZ|1y zA~(?aoF2WkA6}T>1g$Tq{qQ2rgq5MWLWHqI!lRq@r6Sn!k7}^#T!t-d44{dw3|Ur& z)&r$?Ji1*!yk7kxa{s^o@bU&UckrTIlAj^Xqt`ZE-i#qF&Etjpu7CeQm*{p^RJ?fY zj^#cAaC!;sg~U(iZqRHp=)@KU*g-;^;2;5wS9^2|#6mV;u!EOyd+@s+LO!t%n*PA& z{ey-wLDQWcy{2D#KxTuEAmezU2{OMEeCxwKEdj8PzG=!cz$Sbp)s#WUpT9WN13KCF z9ryr}!!JapfEG=-sBn06Tex&r=(uzjXt;D|sCXQF&*9RYpwRrh{zZcV4+ChT#I^II zYv&8caF5;qR+r9)pn>yV)1#`O3hG5oy(9zZHc`mTFl;$C*8JlLcJtF0mAgRU;Q+E3 zWE;pPF$ErmSdZQc)|WpbWEhaP3{2>DmuUXMR4!q7sr5h!7w9-b*f?^y0Ep+&%?`Ri zr`toK`6pAkpy8#~lchI3x&y$Hpz-={aKJ<4%N{^tO#w094~kz$=w1ZR&M%-L;tY>Y z@cv;?DbX1UI{sjXPp9hvpHANs$jNbr;ei)@ng9PEcWnTjQ4L;O=n6WMr^BPybphy5 zEZ^2A{4JnsKMZfbE`rVzbRGg-0?Qmaq0_a&r`rf}-4Ezs1Urvz+vQ526e=pwZOQ;S z_xfKPC+NI8_HIyYANTA${=#M_8$+5Wf8M#z{B_`C1=9F)4)O~^PKJKpe3A(nt$k*^?G!JrY@a0JUU%FUUx&?0XoGEzVy0O$fNm42I|byi=aKA^)TS@ zf!rkkUd-;ZYy?f(k~`QK()jaT5AX|uwg4$0l4k7T z2_P5#a1~_mgt`cRISR8IND$((mNe+nO+7b3hL@3G&hZx?fB%Q<&jc5T=X^j*Mo+#3 zoxO#WU?JfJ$*Il%{+IZBbbf}cH3n_JH}>rO>(gs$4)Mnh1*kuKIzPP-2K(WgM<;lp zXy|s(_9+dI&IpcZpHBFcNZJICZq`HvP%4oPRZ<3R&n%S#&y(zv1kGZC?vwG9Vesf= zwE-z=Jy7yI+N1M0q>C5(a=#Z!<^rwD0J}FFI+qLH6nhpiw~leBVV*5$CD~z*URTiF z%`3o{33cVMgVN{+9#D;Y95iG7V!I|cXu%n1?Z_EnR)&3$p#fVqK9CaE4KK_)Kuf|v z>%UlAVg)$a`E))4r@R-+8A6cF)`wqY9N+?{z{4J( z%h~wFoCWwHcd2#TvdWt=`1GolwL^0#zou&gX!0U78aV|{-wH{A4WJZ=ya1ro-=q0R z1R_B?#)FrdfYw)a9)FSG3`&BKY|{c>nALgzMK)Lvl6_i0_p^d(-D%E(3@zjXD*DLV13yFX)UF!a(%FubkBblYigYkmh{|C_Wr1`fKe;+?114FO#-sT^w{OyN? z!ODHUt1=)IgVHa`O2UQwprwqUeSY1boxqJpAk*#d!IhUG=$1KXmGUz97s!L?XTm4) zgSU)8bs2s`(V_r4VjDU5`CARa_Mut@N}VYBUVy_AGTwo`I*A5W_}nfr@aVR6l>wz+(`_x#^b0C^W=4S0F0ACay$N3Oc=Uoz0N(-W z)43G1Z1}~SD$tS|&}1&w@VUr~6dxau7Gl8WYdyN_I9`~$f$sc<7!C@3=*c=S`XPqD zUWG`nptJTkzy~vfDoHDkZrdhlkQZz}H^aT~>&3NjkQe?zD*%a2kUH`xsG|Ir#-DSX zUyuQOL7qqFTu_*R&3m!YRfYkylU>526TBqaxAjShgGaZmBG>}cNeBx*y(k4+016|} ziqq{Ikt}$U#-DS9Ul7!V1;r;c%s{EZqZ54O(2E_F;4pg$+OL3?o)+?e;@d|>!m}F` z>A#WoUBq#K)~dC<5M%(Ar7w(K!ST%Bavdu0$wh|Yrn85ahI7sfgN|NC~=s6YbC zv-21zg@76rK~kXVLiBJGG`wD{3N8M+Ab6n)TZu@pr8i(zGgkB z@e9@hN}WeREuD*L{5gjZfw0pP5(wb?m0PR-|Njr(c@1$7TKY-kf|o}UFZY74N~%#2 zcsUE6jzC3$1hfoDb{6pIHU{_5pg9hfr}QMid1`(G)Zw73xtl^@c?wjIA6bW#KHjDA z=Ntt&xVzW^S};JYfSGqs9BiIHvUx@*=9M6u_YIofd^(pxHq#`75&(b8BR4v zouFy|B2?g;BdBozZvT2DJBvUp_vtR?fO^ig0p^krh)a&vBl&DaFtX2Htwr(~thDgy zOzrULPFC=2{=>-MDh{e;x>C`3Fd;*EMymC z=V6alc(Qf%=(aTgxw%(#VI4G#UbF{+lC9{3I#99&l@Op5aA*x?%6$n<2%y`yd^(qc z%2sGxbb^l!gT=x*QE+;&huHv1UrIs9v5>L`DHhPu1FRkbEq?RpoD14$_#&kQ5(G8i zx*D`T2~?>!|N770(gg}<)U0pC4l1pDR0Lkm{0_?Np!>o~phYFjjam>l&aQ=q0?3VZ zfiO3Miv0ttvA7XhrGTrK7jgE8iVeKp8d9^o*j5a2?YSSY^L@bT!3Eq4O?yN=1PVb= zJp`)gW{Q9U&6Eq_pieK}27nv{tB3TF9rOoU(ZNCsV*gxlt!)Oi-w$p-D7`?c3b_Bl z*4fUkLH0k`I#|7WU=@=8pFyiVut%VQ0P#~PtnMhyn&{#mrKF7kAU~R)TnU0_+|^rY~bVgUN(UmxO#~81xowUkrfj0;QE!r z7qqkfrN=jLBtXi0aQO(@@6uh&@xuNSsN}6t;eaG!q)L=m7+kW~RYL>kMT$Q-i{w@# zXOa0Ukpc)-iTZR~qht+Oy}U~ZY@{~aNI{5^QYc3HARGA~8pY5u*QYyK0375#o!~9T z;DA04TCmh@8zTe`=(AN&2ZI`V8~l(H&!-hgj)gU1UQYM}$sgcwfiyh-aWgPL8l9k8 z9+Wcw3xW){EkGFl>qRiwa8ObKZ5x~lH{63i?=>_Q5zP}=7;F;+hk-iGpclM;;9wQ2 zf(0um-+90d^W@Kig#oDLCV-soVA&=K;<(F|aG(ErvCS9cbCBae=KWZX#pkeW18TTI z!_%V^l6!vSLvpVGxFC&DkpLIjmq1nT@mA3BjG%%ERQrIk5~#^_UjQ6F0mx1;MsfmJ z(~Cl6XTU3-?qUgWoPx{(h4o~JSuDtAJ@-NOjwUv9K0ET)xu|gPi-GOp*M#JiIM7NB z)S^+I3EYB^0QG2IR(}GmJ4DGr|3N#CAPp@EpKdpfmz<#WO5JrF9bg% zNFVkd-M07nA^xvGiUMP}n?dQLbQv4Ci~SnX2!b>xz-i8>6WlKVoip-+-wINaKvFrP znae1WzzUWR=EZE|#z0QIgs zn}7W0Z;1w-J%AcAtPr1bcy!)+De?)FEx_fEiweg}`_KRXzc`oxP8N`M8OZHuZQ+}I z;Kc0(bKDC9Z&2bkwJZlEZg6WbZz(J#dhq9+Mjp!h{$i6os4#-Gh51{id;-DP;sUZ4PgC3fzmph50?;O(LsKAj01FCy*#|9|Q72^Ioj z;Cq=tXDGBh#0Z2I>5u>azi?jxU%w2x!`Y)Zc7sQ+=-DHn5#W7d;8w}~7oSqVGfywF z%t2-I@t0!gX{mI(M|YUS%cc*YH0CDY(ObLWnCk|WW3HPRI$SrtFoNp42ioS@U4~jY z_40yK)W1@AME`p6&=c98%1dBD>B*l5YoJ2Q2T&a)@p3I_6LfbSBr(0%Yz|3Vpxz&} z*5z+G0I8+q!M2%BK-l)_MKRbmShCu>7|AwxE!Fq~6sTxUzr+J}x--JCUoX_ahQXpJ z1KBWGL9l-+I9!qXtBg<=3m|2LR-cdm|G#X<7GzNndry}j1=%_e(0*w2xL|}BT!d_JD2l<;kqw4<2-L%sfJO+og!AZjk^uMG4m3Xyf%?g#yNct5 zgc&FWf%pG=cDtxZcyw0?ykIti#23i-pcWvkxG&}g1+VFoVz@Uyy*Ta;@+K^1=RH;_+Yme?a(0*f%PInbd7pY8-m^7aKyJsg1)l7V1z zO%D|zh0s#4xv&s=z5vPb@Itcn%m4qK_g_@8@qm^B9X13F-X1eN@IqxP()<{>+ymE# zphJ;-lC6C@|GRYV1>I=+q9EY^|L&! zanuz#+}Ia@$FxAD-^(@c|Nl4q|Kf^2Xd)5pDvxe31!@sPs$R6tu^`0!CS>zdQOsXH zA1VA`kq>L2fZ`gQ-a&EF`s2(0|1YnF}TsrU)T()|cyJ$eI5fyD-(qvBf5gR5uT zUJkGy{}mwl@u3UMkD%_EGO`&8S5WfcO4YWG4HST;@AHs6e8~yf!yQ++<|^!V30xsfI_dtSyH!1FXLV9{&JMNjU3+!{-b{9VC4G4P-#W z(Jz_5z|!`+ccAleTxWn<%rEmmH|1y>K)ngJ4xaU%@V6L)9cw#@73^1LWWPRhME0x3 z93;QOBKPGNa61D$idqr{a^Xji3tJDA_<}fFKpg0S?%k|v5LcIi;$MXwCH`f>6~z4) z$$DV_{b2!z1K58rc|Jh>^?C~|JfQRSp!F1ixuAC5(-)ny!RsjsKoj0CYo4LpurL8U z9}@I3Nd1JE^?C2=0$+grisVm1F4;cwZ)z`y|7 z<;vd*nwoWJ_|L=N0y^*2qnp+8Kd5a98`rjEuO z(EEyfk@gRFUiN5yqv6r%d*DSIlM-l<9W?L;I^W~PHwYgz;a<(8#L(%w$G7!Ae~Tjc z3=VezpU(e2-3v}IFfhFExdNK%JnZqE0kqwmzr_aBX=ttxVB&Ad1l_LC{D+0V#T;53 z#)FSEJ^Z3v4KZygtuDv_I)3N7>jB8Tr4z^!=j zft>FFIrka77xiV}-~az7yol}*2G2K{d2|OWbUR5j|6t;8XJcdlUro3Vlt7!0XduTT zc#ab>KGS*s#fde-U@x~GD7oa>?Jm&m5!30r=OyTrsR^J-eJ&6n z0#Yvx7KBc+t^*%%^Z$jLnjpi=g`o4ke7dUy9KRiB=WjIu9a|5Ib?yKE|9f_`tIB_1 zVDPY&DqvvXZxsiN!JYmZv}Y6Cp7H2r^5_nL1xy?03^6nz&}B?uAqR!-0Ey;bO#JQ9 zpy0d2-+B<_obCz%q3sIW+D;y{#ApS3DG#W|^oP#>cDrt9Jy4?P z(aZYlF(~hs9`Nb>2s%l;+v3HJyP&q#;g`$69k5c+Jr@wk7j>ZBN}Y#a_8^5H1LW{( zj?y)tODE3k0AGZ+g1vMu=$wlg9^FuR_R=0mLRkFg|9|k2&>p?E2N*#cU|l!7xGDi! z0p_~l2}%v$F=o9$p_HIeuA$n5%odyOU9C{ZkMh&cS0-*0wud02iZHuC5d+3wNH((VDhSdyhg@VkIV^8pqQ%L^qUka3sq z0^b8zz{hD=UMT%!2)7sPzr$%0LLECVd30Xb#lgV9;Mn|#-Q(a3W*5y%pz0tbxbt-L z!-D3=%+0?zO5%Ka!~T0}9`fjQ|L@uP+3>#y|N3LizZpSCc^~)ue%tT>=oT3USHmaG zKLtu096JR)x_JUW>?x?MGVIzcC?8gxp4kKhLF*YEsf zc*#@q5bPcRpWd|pyFoi#UT;NOJ(M;f)YI~$XXjq*FY1%}_C;p^DVve~s;WdrEkC&mk%EZaQ}{!s8}KE?>T`^55N>3tu|)5S$TmM4o% zJUUOLO>pcsY4Fhe)G5*q3T}^szZ85dPZYiM=q+UQ1YP2&dBX6dr{zZvey4*Ty*vgU zt(Qu2d@L^(OL}Ua^60hc-v_$0#;aEZG&;fXqOa@U|7dVfgU&$(#ix(u>7r?%ewpRX z;zOV#8@XRsgTz4wDLZzvbbEkY*$;8$L5M3)mp*(w4eB2s%loCmK9-kD`M_%_K!?YJ z^O=X`&0=AGc?OUXoh-GHd456N#pFBHHdvsm{?_Ftr!{KRpvPj6M^Mq&TNzcy1KAi_VJ1=;29_tPjFg(zD ziGS(=-`0~Qs)m;!>CLg5XF|8kG!Mp`9*ieCS*C-JraSmT!PD|$>0@8Zo5k9oQjzZ^ zXw@6U-v>(cow`N(JQy!Hb+Yt(f*gMEg@Ui;X^{Gh#RZ^ZjTa{6Yk9Gl%fs?tskpD@ z@=VnogI#2kE@vt9i<+*QOsSAl`KR`~P|e$i%b0 zmX}M`y*>u2Ql}o^-*({jV(9rT9>?7kL>L$t4uitSvGZi-3CHgj9Gf39H$NxFFtPhBEA43z6LJ79U|TV5kCwUpWlwMx*3!nKy^XFS5pS? z4%>Gym7w~d2&8xdNZtWt4p_l61*pG43If~N7$$^zf(~p2mtW9TtDxS3NAoX6{ua;? zaX!6S|9yH@rh9b$0~P0jp3O&CJerTO_*x$2Z&}a4z~J0%(+DoyTmP3l^632G)?IS= zhflAJy$ApL;~od!%X=~&bL%WQ{KNC$I|X0M3&r-Xowt2D4?**%V>i!4mu{PB9-SvV z`PU!zVf^94_@R?!n#aKx3LcCHJv)ziwEp+ucl`*;7@n4wO3#5u8cP5F|L@q%qT<8& z!LgGCG>Waj-va8@Ix@PbfE@^OD9DkmpoLF}^zPrwv(mAf5tK<}Jowii@ah$L-OUBc zdrTlJOW1uGUpX=6JOD2@yKOdl@UQ>n z!T6(u-x0)N{NdQivJqq^sPy!)JXU%Kl#`X9^_p|HNTUbiA#hpe+$jPHLjGNk6pC4W zEiV*3fYo=9{v7z2BFE0Fp4|eV)s&z^0zv%>{%!0YoxdGBKfAWREiL8W_rasro6)oL zj;rA%&>6%xKzYpYeL8J| z;WwN3($?tC570HCFn4=2zhrc6eak=ffNRUi5;ntcEeA?(f(mW7mIEbD{M!s2TE3M^ zzP11tysek&*g#g7XhI}PgdF(y9czBU+5Cg0?5;z@KZTO(AiZ3M-x@3#N;DoK$4-`s zkV@weqsPIQ3O<&XicULsi%j%jyx^gE;xH_|K-z1aNbBvJ-&lBb%Y*Jc_voxW;nVHT z;nB+jy7-mBr!#ejXRiy-ACFGo6~3LvAoseuOZfHHH2m@Cyy4UN+q3idYYCA5Je%J! zx^yagG{0u?wfxTCycg6{>UKQ=YM6pbJ4xe4PBrK%_oj~K#iK0QQ*~!pmSileNXsy z7IM5k52-)F`2)1`Y!~Q?U{L1h{JammumyC#!Z}57Yu}?AoDQtPmr<~&cr^cJE4K!p zPptaC{?C68&chAo9XvZ_RD3$0ztH+22U_OM;nVp5TnK=w7YBxhC-*@oAAz)%9R&{; zgGPPc>4D6TQ4s(gf-Ld+K-z>*P)LFH!i9Kte(~r$=W*~QYjE>3d5_M^p2-(H_}6~| zU2@C6{uF2}-kL&39$xc9?QcHJ=xKSUB%Xg8v*9IA{(UTrEe9%I`dA(+(g79L_dPl< z`e+^m)iliy89~CLpac9pKmtCNhl=f?`PQS?1l)$|=JVuVe-4z=*+6A5=*&4tyRZ2O z2kOQIi2a_;2be&n?tlFiwf(#cw4fBSBCr#*WeIeP6zI^O?w6o2uy|1o?!(>m=oSDK z1K*B0l<0VLMhJlVP40##TW|AEJ?L@pA-_lCBXCj!o!H2E%A-@@B;=kukL~~ok4`C& za?oaz+x$}xd2|K{K$>ab_35wQ?_^+LWO%(7JRSf}@8RI}^`NMMRMu}Kz(>?N@VA1( z8+0GLZ?`(=#6kzq*aGN0GT-iW0Z+>_o}K5w{sG^A(9L@Mg(-tCzwZ~1ZVR8zZ!b20 zmU?_=1|>U>Zr>9gy}_UXK~RJSOZfJ>3wVBK2g#MP_;$NXfbQb-?X4B~cH99ZP%8mS z8@`xCB8q5Wq_x;VM z^MAwh`!9q*GuEB446ipJMG$1XGZeh-6dD#B9^G~x-NvBSVdqDWgD-fSA23>8aO9tI zz~kUc-sXpljut0MG{DP1pIcriVFR6g1lk~&3cax9)a0Sbq2Db!YVG4P*4+cfR1!&6@WdoH#r>uQ~E>y8yob!MB@7 z#k2FMg(BED&W}-3E(V- z7hRwK|Bs0B=uLeQ?bG=JRP7?4pXt$EEC6+2OFXDpJ@}r#`8oT`2xxeE9DK*`*;^~n z{EQuR2M9R4K@r{jko|QRs9$;TCBJX4i;93_^F#KRsi5=VkO~`lhR`(r_b1c%HNY3P zgYOg*NaNQ(k;We)T6jd2fxjJeesCJUp6Kp_ARY(kG8KNk1N>c}hI|^o#)(h-0;0c=b!i^Py2K}1|8rB5-oo3)A=lo|NSM8 zZdSo(pf>p@enHiW?VO0kHHgJL6Yg+#i)Z%Alcma-m!vingRkMM{WC}kjF}!}} z(Q6tHV%)_@zu}&p|3PO_UIS%mpWf67!5+P_4WNB-jc-8rS9)}VHiB*S0L5o#uLJlB z4)79lpUz%TqZc|IiniV2g+lv3&<*V`B-;P|2ah*{*WQ3PlO6YfTr>OPPa8-V3tng+LcbDe`PoYc6QIvo{rV5G-oD z!lyTP1E`7fr}f`|khdWohI$^Gw}o5&{g1=%>klBOcHZ&<6@u?PppN2hLh*G@C&bq& zo&WyF|KAF7x2xevSHlBfkNb4~2ZuDs<4quqs2-1SjD&f-MHnhBUva@PI7n^yusbEp_pM%v1Vw z_JXoH%FRKBmtMRA`}O~eM_~H-i(8;{*!+eA5`vCl;J^U~3&`;9tsoO$dw`+$-H~6xcNYCDyRtDr$5M2g|3*k0UYWV+x8%#fc!Q2MQ6i9_Z zsVAr%0&etzQWB_H@4^7ykL=TV4dS@~utUHO0L_yqfII~%yPkvAZeJ?-_dhQFr4MMA zTw5b}$qGn+H~Y6E4y6X*bFsVYB_PeK)&r&7uf;(14XEv^?9u#!v0J3Q^-{?P!%LkP zK;vSdLu@^oj|((EV1Ip@U!DQ1uk*rTaD0O1Z#%z&Iy23096UN}S9o-rBS+H>!%L9H z0d#)w;5&Yw-f{uZ@tKd=eR@+5fch~?piG1#-ax0Czi_Po_umC{8R7F6VO5|6>;YOP z;1Py}kTzsM~H zrE1?3p5RRvB}Sf|_dPYwgU7MOS}&Cdf{(d>3C>>kUj)1b-DmNd(X;s&i)Zs;79Y#s zrPo1sogp&8%b0aC;C&~k!l2GKq<;@ik0G9&SA04TfhG=oI!}69-Yin^X#Oo+W&|GN zzTnXby8HpuXnL9Z8&qt8*0nbO6fS?@*?H3!+>MTXc^DGDzLpP4jeRUnm+FB=b%i{7 zMYe+G6%D_=m{bJH$j3oz!nHg=wdgajiP5h?CNf~yR17f>qy~9L2<%=^{sFg5LEFkt zcy!C7Wu9-x9r#j}@!qrSZf z0-liWIH;?WAOUJXdwzEXchE~&AZ_#C!u7$Rm3JU7fzN3+{PtphA>2#c5HG#x0WIOd zd9SZ6=w4q$S1I=J1V{)%LKxIX15G2o-iJt!kUK8fUz&l6rS~-`bq}cg!4@8!r3a9k ziZ=`ocvybt2d_o|9e>dI@!Jsx{+3IiWZHQcbQ(PPFl+X2#~k=u&wz4zccFmC!B@PX z&XsSkid^#}#^wi%KAq1j4taF57Tq#s;GY6+mT$ZCA_lZTr#loBj2_>az+In~6(EzF z4+;2myB>gsE9AaI&*lRHm|^SN`4Q~@XD{+WeQo5xgB-*Tx*!>J&^hQJXXr)PN$3Fy z>(7C_(;Y7W@=FV7M&7gYn&-iH{Ep4f*k6J!3iIuDka!8I(qQ8W-9ZvBgTb9A@c6-t z+2H$rkG}4I(OCWO{{+`wkN+N>7dlV5wjL}Ea^&B8!bO?Swe^4_cxu#<-{pkI!AA<9 zf=}C{m!+sRW|?lQ~JoI^8_dhg6fyn10}|; zod-O6dBB>xS@^)p7%v!J^8EgxlZD@-`6Y`-^Upt}PaHchf;58rPmY}@U+)CXzj${3 z@&pAScuWd()PjXeHxpX)yS5(SZ~X*{m0l+n(2zE$oIT_Mx~Td)cz(3`7$ayl_?1WV zaVFnhnN1#+Klxk0XJu=C^wj+5(;0ihqtkbTM`!2(kK?YO>s%OoI(>I|H2xG&XJ9Dj z^n@_V58@anDI@S^<{=$dYDI5>kQm3=x-dG^|L`E=g%&^*<7@P+%o|Nk93 znO|=PjsN~O{06>D?-$YzN#n^6C8UYIrgj+(h!| zEnNX>qum6x;<{Z|M1eXdZJwG(O8C8cMV3N~_1!t3GVuP3;u=s}uXX`LsSnDY)6xh~ zvkXz@fo5Dl^A(+;Gdy|&IY8}gkAtt6UnsM4GWc|d&hYF!4!-6Pnr=YyFQ#APV0gU} z9N!+zJ}f^Nz+0nVJShM7A6)(+X0}dyfLg=g?sV-2kIquixhg9>x?L4KIzuP;bh>tc zlWnJK1A3eucRc{|5NOQN-KSRt)Q)BF?EG%{&A0O$=)i_6+5i4~SjI{eYZ_ki>HGjL zuu6A$eE;m(%M$0IdC|l2q6fdzDG$aIo|eb?o0fu-Mz`wsN{|z3H4o9R% zuT5JVX#GBNx^vC~1<4x@pKh=b;Ms|npru!7kaW@=IsLC4NC9})NHeB{&lz_alQC=>f=J|ZC#&jV%cUKbU9kIq;Lu)a>$ z6)(Sn)+)irLqP!y3PTUZ!=PaG=(U;Qp?M45=grLo`KtB+L#ZcfE{X-^B5*+nZbu%5 zrle9Y&)yIfc8}iL1E4Gp%1F1EL09y}N_c=QuK?GmwFh2=T;^bSy#|_lK=E# zs(o=QoP*)T)RKSy;jQaZg&Ob3u+2vTp#Dc44`uUhJy1FwR0E#`8Sc^Rd){$}14u`&Z5`ZR z!%Lo>hdevadN#jc^!N_9y(5s()ACdCLl4m1iJ+maddGbry}p{qd>KFbSf1c-0=1Jp zdkYy2|G(I859%X1OZfCANPx;uXeTKFwEMior<)n%^wt9vp%@jWbEiH5?`}ZHJ zx%3Q3=JhF$=3gu&dLGTcL`o#T9bzmsYWT%dV&l=xI_DC2%=Tq2C~&)3r(S??L9-Gb z-K@u;vi=a+{__x7(8!cWH|vXw5H6@g3C}i*LqM4Xv_1°F;bf&x3jr#n@`r#n`_ zqZ3>Qt?=mdUEtSi1FkWhyJM{X`1Y3nLC!xX3=eqrIx>2|Dxpr-9iZFcCV-Zw?!Ddo zS-zyeqq%kigGaaT4$wS@rSA&>^$e&KJ41*t)6oxFYus-L@EH-K6uEw8~f zS?mtbd1aQdEBKpkfog@$6JEU{;7Sq_k6x?{4B%`0=70?BF5Te+8YI2t)A`={xC>Yv zgHLDZj2FINLA|cf8NRKTO7wg>A3$_VvNAA$2C$*`B8M*U?zOS<(R>6i7Q<4&#o`8r zk`N!T;op2TpMfrp>XiX^FCoT&PJ8w4EwN?r=>`S-EzlT`PadeycLm@2#CYG6@rbYH z7nJtP?_{vi2N+6CP)c0>)<_o6iA1Pl%M*5kZvT9l2bn^Gv_}uT_+rMkPp zj@}Qd5MkwqPv>=??%WODy&=5}zM$2LpjDHG-#TxCMrUvPf>t*E^60$o(|O9b^Pp$v z2j^~+Mvu$SJUEXzcb2p=cyxXM%@Bj8fPE|vl|J<7{N>Ym-M90WXXowC)16G9Jyb2= z`skA3fzF%Y^^B9j`ahs7#=BDb406roug=q;yOKevH+05}dEi~Ip))|W*(Ls#%D?~r zciwdF4l!l$;Jn~*`Gs>Qi;+j?1<&SpETDxKp3VRMls^$`H3+POi2_Bt4d^%$rJbFz)Q@;$L zgznSn+u_scIsufS_*;*G5?gN=xCsDmNZGtjL=>|Je%Jz^0$CCLb!LkECsI#e`9z6bX6cE zK0&K~J)4iR_*g#R2ie21Hz^6NQg%7BzV!ZBSdALXjyo&0uXXgR%TBLWN zN~`%dV;Q(H?a^uB(G5BP(!%h7Z>OSBv=GLMS+J`9YED?>8;o8 z{CiKeUIO>}`CU$V^@@Pa_37mi2esnWK}2%ltr2JO)jVF>{8IP-|Nouhpyf#*IsVqX|NsBLlmNA{I&Xn*qINy;qB;ju z`na9|Wf9PEg+86fAj#dyn}Y#%zAyN2UjvWM+8-XhwLd&MOFww@mVWT)41M9z8~Vbd z)AxZ#ukQn&PS+bgy{k?)L2G^GV{H?b^jh5y&9N<%I zyK7f~2L^l~TeiUq8Na z>mN`f5@bHu58%Zd-L5PAdPOvRTi^1xx-v5`{0A?>@acB#@C6OVeDr{Xm17Xp`~^Op zQ$a)5FFt_QZ*_-)3cLlrogd+YI3K}-Dc4^FoCh_oU1vay0WF&bWwURfu|d=Gp#7h< zpo$gb%}(%cHArwkjq&LG^@1O40NAq5R*V1Obx2@8x;B6Z>F-0s(WAQ;6dN9zA3VCJ zLgLGHf=A~uh)*1YUbul>S_^dv)CS1fQII{$&w-YXfsE|-ZSb@_Tg2tvD^lj6c@Z?& z0A4uo5j>spEx@O{6|{r`h(gu%i*9FjVCXa5&6uag#560s!&VeqDfh1CoZt${~Zjok>UK?=n*?Or&9-`Z~ z1GMCd5!C7Gc3l8kV%&NB#Uzm4=Gp@c{H^C9b|YVzei4+6Q5Uv=>uc~BStuy_!AZ4r z!vE40pfu>&dEv!{U!WL!nTp)LMlUBo#mdXe;8{HId`EXLs9XUxyg?`Fd0+$pe+y_G z5GVjZUO^2655^zhZrJe`$1Z^CE|6cqlP;igptttGi~9#S7+xxahBuJLziJnN=DAc( z{r?Zi!Jv}sr6ah>3F=REyG{W2J6%Do$j(Erg(3AZ=mJ|G%U}F0y8r(FcWP$Y%~d~tfp)ue{(ABKbsNj-W@aVOX z_S}2+3qslbZz}sn(x7QA6=$23bY$c$P+XM zavIW!hO`gB^U#pt{YRi7S0B(^)pbO3?B(tI;Q4BgUJ-dv&kx1ABG=Y$CAl8GHk_c5 z#(i+tb^h?Y_}26LGq-M=bs*PuvrGeR9S1ceTtPdAuY($omUsD^|AA&-JAEa5Iv;s< zo&@!cJ6#1p&hUgzIov~XN#gha|0jTa(CQ9qQdyqnZ?yyOLB3t8@Y)92Uh}a0#NP^< z`SJkC%R%HzM14B1d%>3{y!ajj?s9^UWmyI)i+WRUfD7PfKAp&ZUw<0pcSwHg72yZ_ z{~6drHq%=FmuQ1L(`pQAF(bwY8P9{m9->TS8fe5y5L}br^zD4$(fR4+G|*TIqI>|Q z+g?`IZ=j^}$fxsqfMX!2R_MIx7~t9Y!Kd@y3r^5k2F*tlK;eQ24p0-%g@FOK9?PTo z4e9O0^`AiXI9hwr_W`KA2x=_)bceoxwG=%Xe}c9&mic?^SiK4YJbMF~Jib5jXnyq1 z!}3(ID5#0qdFg+tzzcTF(C44$t6+r2tbL#`JgzFC6O;Y|ThafFd z#X|`HbWE)QMHJLm7hiew+6ejd7BPZ0IP}Idfr=II+NI99pvHhtFAFF@7(9C88GU`za@Vz!{KD{>V9-VtZ?J-XX^9Lx97>|2&?)?B|G5+xA+zaZh zc=g)61=Ug>y(ShOovom@m`ATWhezjDaNCFRm`CSUP>tikc+7+GgGVQ*TL7Mvg4Fb& zmbgbR3wR#T17yQi0dTz3&H(X1w$yF_O;vexf|kL78~+}fKYbVvK#vOc=mfX@eHafk z>;=ULXyy>qDB^E@4sN`HquEpQr%z`uXet4$vGoS1iwH8Jl>uZKDAje>?(pe+32K6O zgU=I&wym-lJRocDUI-io*I+w*IzRe$zJ#{ge7YgFcYgEe28Y*+&cmSA8>o3TA7nq& zXkU=gAF~*c)OY@RvG>UT|1g6&oAIn#zk6a+l8Q0d6{H=?ij`QjKkK{H` zD+fH#_U(n@5pcB!u?Q5u(BS27So3r3G-2Y2E!0n5@pyUB+n5BaUn~o^_F9o-wyTPFVQw7%I(Y+Uxfa820F%3Q8y*-Jmui z_<-FPcfe=d*KY6xO}@hCfxE%IF3>fuo%dd>JO~aKPz0|79f93ly1{V==(r-olOCP7 z9Kn0?JUYL>cnG?q5)%6pJUVZBcHRUhC6K2yZ++3wQ~$()_{JRps|7q*AMesMMY?+RK1^$yeOc;J*ahlOfl>pqUF-+{|96aX zj0Vj&ft&t}2R%A{J3#I7)@0C`kIl6!7)sP3J>}XC!*4IPdVv~tpzB$25OLqmcP2(*xAH zEnV@#5~?L43N$d`qxsH<@w-cRX@e`M+qVbQoCI|_yInz{-~rm?2nscp1ONX=dvv?* zaEyJ;3EDT){D!fF%dOjI!5`4J_76Ut54?J1z*BmlHZp(f5)RM|*lqsSEYL7ZH>5W1 zo(ise8Sf)cW_5Z(XPo$37BTa;W`fM=MVWO1t@HDMb%eoL9C`$uM`tUj#P@&{ z(H@=PQvW4Cq)`rO&q51rpU!W-oiAUk+XL#Sfd@xGr98Z}_UOF+LTEp{s0R0zz>B>- zAVoE_Ab}Ru9ee-(hb&$JB@#&a2`Z>TZCZawn;%p_fwp!+%5zZsLX?46FSWtPkVD-E z3VYD72grS3_ka>9xP<=yLVhnO>4J<+L>T*O_y7Md-N8nH`W+zsXmR&q4=DM9BQN@; zC%BIYUI&gVf$RXOj|Y{K5if6o=WZOp>Or#*9-!^>H?tVPllI>|KuNH356D#@ z4*lb<|Nmc_fIG?#44_dEkM3I76*u=hy1@%uUf3K2-!KJ=j+gVnH3TTOK@E)18Q?O~ zqw}68sIdO=;^1zOKR~u{ffR!0Oz*wu-u3^#OXrW~4~(6z4KKf-hO;kttO0BeqO5fU zFRz1@xY@hmmg9%7c?-|y%*H9dttl>DS3lxbC9S{H#p09bb}jx zknyk=D|dn73uJ%mI%x3OY z4G#6=kou4TR271nYM}V?=-vua0dDTV`$OF#eW2q?!L1&j?p9DRc)(jeAg!SGAhs%P;;Z;1KiaZUu#rM>kmGe^AQ{)zwF7Sd zfSiRM9gqeQq%m~ik;1}k%GK_vq$^MIOrpc)!7fcj#}PEewA zjDPv?8>o*BUT5dgy%p5R^yseL@ggJ`TxqOe;BRgH@&EtJe((YJp!xdJ9Ujoyrt{Vd z-Qa)!U)F)|IDnR~pmDhHwHypDr~Lf?A9SA*XlcZ~7fZJN|BpNl2r9cgI`26)e`kEr z0g{^ozW4yN%y)tpbP=ORr|%4(&d>$mNx9Yo{2hxyl_zwz)d#fZ4LtvO7c}D<3mQ@1 z;L{Ci4)}sD{{qk4z08H3iw(}V;C=?UQke_6>jpEe%54AtKgy>YEZ=${lD{PkJP!<3 z2pVs?v-SV~mlohcy8)Dl;aM3}pS;+&6&ChWLCMqyRJ%j-E~v_r-vQ6Lpacm^q~ON1 zNB2}v&j~5#PTU5n_Q1(A(lH8>Z$SALR8Tp9%W1f)+_r*7H$h54Zh|NUv0h4mi*Hc* z*If%P)nvdbL3JKj{_U6l{~bZ2-k{V5X`_P*GjNDmD9^n$x_j^B?murM(2w}KXogBEwRf+kKu zJ81Y@w}6Jcntw3zx7e{VFt~KSXns%tIuNMk8xsSAV=?v|7AsGM~2M+D< z=nidg?R@XmYh&!#_?!WxPVDuL=|*& z1%GQPsLO)dvg`Jh0CiPYfzICo= zyTPYBw8N$IAE*%bXg*@#1L}Zv-uLMQEdnWBVR*o^^S%$`B_HNc(0NiFKD{hbphK;q z3~zUSgr+k`{%r=3bu_(&9L@ja>%y8}N_3t(_>R@3H;&P-S7tt}U38qK)BO*q-tx5k zUHakRGgi%y9?7M1JU|CRFn$1S724c+t~+){>+Mo8AInQ6nLdo4UU$I8zdJv^zSw!w z5wt3Z!SV8Am(H8bFBu(`I9&L*9qjzbc+d0l10T)&)^viwvtV3!|WMqIYWqbr5r|)D3O^?3>omJ}D{Evyh#RqhpXY)T6{+64J(2T*{ z49WzcCFPFajxqDMHvR=Ii~Q)*`Ol^Eg-hp4&x0?SnjbK_8XjnV7~sjj{v&80sq+JD z?-i(j;>bVs0DtR$P|XG!fz1I;ebsh=Ze;k)$iUG2Q=qgQbfkxmUvEhFAJ67ze>_2Z zzApK6o&cQ_rid6%>o(}Nf@~Ri#nM^vr?UujxL(mq&>}2f#*e;?pL{KkmmUQfs0I(# z!^Kh_oj1C{NAdBW>J0b;o#FJbyioKKEer9t>;zBR^S7=BRW6WC!rcXbTEFpkF8}lY z|7&?jyn+{YO#_#@t_|HT%zs)B@OQR>j-LlDdAtAO$a+vE3EBtp?GR&0noH+P(D`IP znfP0s|NQ?CDk)m8{r>;|rRksl{~bXqMejQDZx>2Cc!-04`z4pomyHjR@-=@;HvLHyf=ULS%LW&->zKL7sz_vK&z9lVLM z24r6%ch1 z<2R_e{?d_un-GeVOYXp(%g%X@zXf!_PU9(1jfQY?47ha-+8J=mqt}J`kB8;qV)1UH zZVM04A&bo~SURizbQZ99SRN{R+5A(0zXg;z!0R-x{{8>|rPIIv|G~%mz1VK`?>}hy zdFTBXKI=e3==?1rfB*jnJNxA~aM$gcN9X;{-W2e#H+XE+rxQFJ@uJ%6-~Voi1Y{!B z2Qp6ZGUo69|AyaQL|gs)59;Q(9s;d315GJ8b_?;J0iE$@J<8K9>AJARe0vh8`0M{3_0u21Ee?hZ5&3i!`;28N^ z_k%0pKaBh>QLGFM-L4X_N?47Zf#I90gaChQ6)OWnb8QPFe`^uwPORoXO#Ch091IMQ zvs6Lz+>YOlGxN9Tb1^Vm07I!J*zJ&VavK|{0da)6RK%zAr*G$v=7-GuEudu>;QAX{D0TZvc=E45 z()bXRC_w8e8GnHG?X>I#mA;mDi#b8OCeX3;-L4&=2A&CMC4puj?GpJY{#N0I0s*;L!~ZXdmP{*{AavNNxqVLIbgO1ia{2{r|sDGDz^kfUw_}1@uy?+D@GsY+5^6fuc7I}yElZF z0d#ViI%Izz|28Jj-tO-g__rNkywSmQ@CSzvg{ep|) z1;!hl$1eYHQM}f9*rCJ7*YanHhcDy9*Q-IthqnIW0H=We{HJp69g7Eo=3dQ*-mD6zP9piSU`;|DZ@S`4ipx?Mq$ zbVU^$N3I>9_2n&RSU@c@(D0Iz*}wnCUBRi~WjJUK5v;%4wFR`8p%heb{`k+|ngd#` zuKC)d`8NxHOARY16}9~P4=pTS8o>2ItuzE}h4SQIf91tvQ;_i;;8wXUc#$s18Q^gt zP`iuRc!q2zfkyQFm7u{(*8`xvNuXv|vg;gB56QRlrQv@c#vh#*J-SOb_;knafZc9# z`~Yb1-{bNF=m8JDjK4j;U-0Q%3z~6r?7Rv+poiAN9-+^rNRQ&I8`Mpbrg%9I_mxbV%c41&}x&uvbPJ8I7C1lR#4*j4C>5-Ck$VzgWBStrP1J4A-@Z#UTAq) z3QD}+jx(0d1BG?x1s~1VY0w1BKmS1EFVI#d{^^Ha-UX#$%ZL0;nLnWmL*9YzGU)W} zcwyxLYQa4QwG&=$`wsO;%OTJ(QRh9dB5+E3v1u`=@CCC$75c)z|NpzTeB*DK0ow52 z{EE@j@)m!K88a-=Wr5S$N&c28Ad{eVzH8?>{uUKba|&9RLKgjbHb42}+xf${H>CX! zv>XE!Z=DA~=i$mg>Lu*`CeUQ3FXIDW#z#JuH;YbzXTYRD7D5;2c=o!8{{gi{npr^c z(JkK1;R!zN@db-xr~jYM02WWn<3-P3J_GfHKugoTKwUhzW)pG8ZU)ch11$U}96KHU zfKI7>=h}L*bOpQ-176_%64bMT^s6AL4Ak|6q_V}|z{!A_zf}&z>UL!Sr!xLiFDHW> z^bM5SkAqTss065Rfv521N6ekR9pIsvHQ)aK2bU<2q+Rvx|Noayzd{PFmmZ)#2sCv0 zTR|E4C8(3)2r{^}4P*t(N=VWGrEC`dem#(Xc|oZIoWon?K%E27>NjvQZczpWA*dZt z`~Cla!vl`rMA$(a89Xdc6n*yT{NdSa!ruUDtE>mxet^-#@>uCR(0pL4=6BHS5_s$r zQr~x;0;H2B+3exTi znhWZ@2kC#MNrMI=uR%DG(i{wskOM711DC;|G^&G0qkW**<@xph|BJWgpxqO$47~yW zTMzNKWPxtS%7)tI+IbF?Q<|=URNn)Sfjhw0gE_*_2mqbW+gZEAqqB4aN_Wcxe9{v? z_zD$|ZqR8C?4IuD{f!t+j2K}b{_MDo+rcKauVF@Itn@ibO-3DCD0+BE#UJfn-2^4_QnZ# zerE$6qyjpNCQbr0EFHG&8?KNBqsx;m+ zdNdyf9}nbf`KR=TN3ZJ+$hpI=J3wQGQ1%9ty^p1_9?eHAd^$fMEw6)?YaZRv5-&mf z$Dw@R?p%qNpiMGRzGvqZ_>rHNz=y{k_dNKX-?8~QyH98BikGYY{r~?$-3;CzhppFh zgl;fzeuM8!AMg%)$eBK`Cxg!P(Se=m^UkB&;>G#ppyMr$fc%1S#D!;Xjf#NhcNP_J z(6WLK_LT5#eOrQjp3i$t&{-DXBZ?sB`Fwk^XAx-QGH82>E9e-S6R5|N$U=^xfgB_Z zI+}U{bR#tQK;sworYNK9pm}^;{zX5t2bLOnKz&QFk9`loQsN8HDp9;=^qiZ7d`8cX zWuR2(dcd>uDEv4c&~=TV<9I-0)X;-_N{T(24`Df<2Q*a!THFL05q##+%R2Mg|NjA5 z3|R~>>Osp1h&rz)+@m-30pbu4&|xm%o*RQlcaX&EZp45K_tD-F6?xu${-6Zm~V8G4a|qB*BTj=>4 zS9)gw#|J2_gHG;(l)PNvk{54$-0eq>kK>C$25vz4? z@i*T@k1g<4((cd`zTFNI@Yn(i5{|8~D`=$#&V#IKF=Gpy?mfDF4|qVr-lJQv`7!u( zu9k1$5)~0cui*V`jCcVZh7XRHKv1sfW|f`{j&76vu;?~YWn*|T*MP$KdIJhnwDJjb zzkmpx(amXisr6*(1Bhtz55|(KpiPG_n%08aU$LzR_@^EM>xHHZe+k1&-JGo_ zOV_!nf=!;>B$m#cv`YMopIngS@5+6n4gem}+lIwge{HvR)1Ligx)eUaj!4L!@P9&{vg z=ZR?0l|U1GdQ%}GvCj_V7SN>RLyzOG4?shqFV@Q_GI&6)1l;b^`4Ajp`)nZU;EK9r z6d4RpLX`1OJ^1}5Xy-fVpa8>@9=+iLpo2M^AF%Vcf-WU^Sph62&6uO*B_ws z{ewNaK^Jg*JK|8H?$P{@jlUhVh}-kv6Mhfy#R5K@4?H@V!48M{52UO-2()1atil6y zUdh2n{2rVa8qPR)bTWIi{x8`FS<%YG-?|QTC7@*<2ZKj9vq$Hl#z&yW3FsE2**=}g zkYlQ$?JAGvdI5&gNbtrP(Ejg`bD(WF&JxHPUms0_?5qJPFa{~;Ef&}%!2nui&jVSi z*m?W~m+HU&9*xTX_k%83bC!5L6&(K{hk~yNe4%v_)8v<+Is>AvH&~$g2S-u3M>oG` z=TDDLZ-LH(9^EDUKRh~1xPEx_7E5?EKl|aK`HAs@r{=}x2S1vBaPT*Q?!Rk(@Wb#@ z=f&nj9KPKwoIaf_e3plb-h*oyME$>lrBoQyJ%0vTwzrMF!&%_v?SKFOck_21==2uo z_F@0i>BIEr<#CWS=sY1%RzVyLZw^VQrIz3ZJZN)r=lvI&plYm}85E0#px6f;hYmV_ zzxe_CahIk)ppE{B+RS>9G52K!>$^bUT9@>pu{x5$+B3=r;ER-w6S=S`2J; zcfG_5$I0M)APK6089?TG^wtYBKVyHP0hTCv?gKgq7<3Rm(t+V1|A6``o}J*s!h<_O zCz^SH_F15GRtyh-CU!uFeSk*AJGO#){h;HhXpd`)BO?QY;U&WZ;Pm6zZ8D+r zCS>IR$_X4-LFXGX`t;_m@afD2o%RSiwhgp=0#Zuww}OsI^JqTe0lT*Ya!Qd$cjyX_ zZYJN>ZxzmX+TPj#R@ z7`?eGJbFRr;k6FgJvdHe{d z@O=3bUcVb2czGAx{%Srb@cJB*d%9U4wt?dK9O$4W-w8gN-+VfKXLx|_3@lynV(%=F zm8A=Ox_xK(bPITP9&zdX;nD3o;rk8HmQ(@B1E6zD9KRm|yM`5VSHbste!V=MhL=2g zZNRH~JT-s7=La0SO9cOP-UKbqzx=|n(?#G9s4xR9*9R}r|5bX=we^3gfM??=P`U5h zDWdXH2h?b3eDwc5XyooWNa)2eP#0YUoG)3u+Q1DHhe@zQt!B!wF}z^W0F}w0b8^2` zD3@}2bpC+crvW_5B`L3Ov{dlU!|Cq|PVdZx6FHi_~+wAmU{L%c1vG^UxNKln%3)+Bx@RePO z8>rH30S)+qZoPu(>n;}X==PR)Jq6Og2NhU5U_}*Z{n##0?}&kc!2vWqzt`jY4Ub+I z2F91Bpxw5JnE#H%uR_Odj1_VVlixf>Lp-2$KZBM*Ttt?+1m z!Scz2U+dH-{)mGfmIq6pcy#`7>=tPN9Yk#5(fP6Yp*;WMPsO_XKw0bZGsn)4j^8gj zwqAr>hy@N@#ZQ+XFdi!9`otf>`Y2A7A#DQ4^v+8l^ATpZ{x9J;_?-2Hf%L!spj%iJ z7#K=9()hz!;}caGz^ws9`1y1`1UVI2#*|zDRX#6gfNL*sd(Nlxflse9tW^REyjIXj z${;6o-W{{-k8A7gk~f}~cleu5 zgQ`5s$E5;}-8J+7I9k@s`@`R~4P^Pjcf62F&P9dMr<-?EqbWo4GjM&^>AJ$f;+ki- zrAOy6{waq*BX&JgL1E3?+i1!Ft^YhbkMg&G7GHUQYPn9=1)z-uU_JN1mjb=wZGOb~ zB4jG4-aO>d8-S<@L3jUv53}hmT>(0vv-4)KM|bT4-_8$?;V%wv{Quvx+m`{fZ`-Fk zbjG)%4*acppw4QyuYhNFs08RJQcX~91mAn=(#_K3+Ij$MJ_MaN<_SLCkH7T}XmGLH zOTe=`2yB8b$OJ(|9CzC^wf;w#@&S>Xe}UT3SVjkZIJNVW$@6v0nH%I2N)q41a#mx_`d^gPeAK+VEN<p$CnSFC=Oi#UO>k$&j8CGcVOb+{1GSj@BfQzd!+mUYF~l+FQ7H!pu;dV z(7G+n{~Y-HMOFX(?~VWGll;!7*VgK^DT8O{HIL-mpjOzy2W%dUH+&dh_;#xt2QBh! z1zo4m`i;L8d|rJo>+3jG21v&rbfCCTH_Hu=Ue<5%stnyMGe8>?z}HQ%o~;HS+4*8` zKgb)Pt$jy8#W!sHpTFe`Xt=MF!6Vsshfn8ok51nmF9JLG89+|xh6sUN(koiiY{~$2 zP^Zdqk4~OLFFNnBGl057(jdjXqER3fAjM#3dvvoL^6X>-O+mm%IQUyZcdL6eAJIVV zyMXFjkKWJ&&F>grfG@D`JpMvvKB&QN;n{fva?4jqoX5fU{Ge*3`8hkN#MJQU{P9`< zULJOX`y%kx8LT}2S7Zh{>&&Bh)qsJJYB0 z`HLU#{{Me{;6aeb9X;83#RGIH@+as5c5~2- zdGiZKXk)VE6{x`p-tXG&x}dl4zejKAj?S&1?GoJ;EH8F~CU3hXK$keQYz65&_?q9R zH$b5IF*~U0b?NQ}sq}y>TLHCu`kYun2kx&034?A@)OsC+Ype5!9KHWA4!3$@nF@Tn5 zzU6Oa0eP&KRW=4SHS>T{vqmg5HTyPnx=!%uX8m6QNzLzjK&jcc!K3rIXXkNHg7$!2 z+2_&iF5%P3;gJm5H4EBW;(FjkLn|~v*G};04n5!jN~FEKr;bBY^aGDhn}eR6BFA2A zzs(L#`5*<1H$1!LeHb5jcC&ykDBS^$hHapdxX0XjPKlPBW|m(G_jo`4o0fHoVq-Yyk=`GX03 zWIL$c0&d5?0IjbNnE^Ti@g3-3FVN{kE}+?*TOfm8fRy2p>JUVM9ykG}i z+R|M+;q}=Gu7=;hn>=9SxsE#&K<(o0(iyIXw>^4m#6YK)x85!Rbs0Q5Pq=^&rRA4r zaPBsl1s>J9=G192-{asr1<&Tgj2@kzJS}gRKJw{2=Gb`xG}hGl!K3q#Pj~DLkIoZ@ z-&{Hmx`Iw7zW^_<9J@s}dw`BtyyVy^vf1O{D+SOpUeC@;o|a!qA9V`&bf?Y$A98!H z(-(B=f=}mjA5fzHGW-93kJj6u(YO-O_>On4iH+eU-_8fn_~^C+-4X&irsOj=#n5&;S1}-Qb-2vIeyN1aun!sO|+xLt?yk0cf1*7&I4v zR#_O{eklpM7%fQb-~TkU`l9g-Xmy)MXKja1w?3qVN9j5mUIOhA122GJ1}$wo_?F+N z*IfWK`{>*Hwp8ThSyoUF5q#g!TSoqteXO8L9{e}m;4PuO9{-wuD)F~}2Q5Sd zFE0E4|39;jgyLoy%55D5{Z2rXP*!+mm)ABEWQzWQx z2A^%@(iytIu{Vyf(|1E>=n~L*vmVD?cYt<#!OrURIPMC%pp(HP`8R0iANX`h&u(`C zAIA5f!+T&yt=|LrwO0jP0eW;k1fBmc4jSHroVQNi`Ix5^2RUe>?Cstg{Tz70OfCLJE#tk?1(8R1wn$nCzM6MR5h zYoU!Lv^=2z-Y=;-s~j|Z4qi|WGUI^%i;hd| zpkt0eCVO=IHoQCtb}FPk>xL&R+=&Xj&~Oo`mD^jp0CckUE1%9|FDA_a-IzyR9)4Z7#ur#D>!)Y=0L9kcj!r-SaC;BNsP`s<_l>;>x%DF!5sJ3z|; zQarR_TTh>X>abpvLq$Ll!T%T(OwcHL2wDqy@CCmQ`1A*O$p@G&L2LY&AmwH zke8-`PTKbD`~pg9ptAve_}4#r5j`KY{oA#{t5*b)b~}&1bO6USc)Sxb-qdURWR()b zi~4(#3@^d!6MAh;E0h>Or|G`%>IYr;SGxmr>fuY!kp^#S!MFTvjunO z!Im*(v#>EhQtyikHUIy=IL(hTA&=;fdUl?LT_b(jqwx*slCsXdHvj+s_wKb}@aY6? zm-U^2-lIA03Ob~Z!2_1jEm=XW$papp4?!scy4k{``2d-@oxe2@R7D}q(gjVYE%4~I zRow%sub}6qL-##c9`odPKIWqdIt&*yAM4f2VhFuNsM}Sb`2~|l@(0jlOlRo?Q1t~m zimaREIOr^5@UZeqa2jA;?GMdO&}z)5+vbBuFYA^7P`v^r4-waAX zKHZ|7`KAm$$*uyfh9?a#xpddg01p(t76O+?p8V@U*D!+bnh)mR=KLRY)jU(nfr?ii z{OgZRF$S1(I1XdVUB&hl(N$kZ9a$l?n+h_M$`cs0Lfbm@Et zHr?=&r{$f}^=T74nrjy@@wWwnR=9VUPVndzjVd-}0N;}gIsg+KOpc&Uc%T~%L9qeu zQ+@F0H4WMY@v;ZwF%QNI9?*l1A#v-`2|mvPx>E;qFGeqD0cvdrxOv`L+ThFh#J5+b z(YNy)C<1&S8_U3#N{N8(fMD?H>;+9hzOI0j930@$jkm$75Z}%lpaa4>5$-5M zcL#Xg+b@sKd$4g^m(G9ChcAlCvzPp!js2kUVDQNx=z9?!ftpjTm-t&iXJdMF z?*-)?=uRS7FnCxV_uzLv?$v9u0(79N=1&jHgC6`&C%|_v{P)oO06GMM@!*RK%%FB# z=mb!RynGKGKLhnAx>tJ>n1cdL6tCM#1h|lC+MnnP%Q$U z5C+{c+bhHHBD)lnD^cA8%CjIhbwds`?2I|a@nZ35P$dVNNd{d{3pvpXa*DP`Gq|#3 z^ymcN5$*x%;ah&;Zw3w2K{u}Xbe`~m9Fz<#pk8W#>JZT3$Gs-t1Phv90^a}>0?KKf zpFmlqw{{1p8iCxV3O;`71@BDIVw8g~pMrY4pr8hg13hF1-w+4$)(ek2;J^Z(|ND{~ zH0TMr*a5Uz7`m?ylyqP7g6C^rF!HxFF)%Q6`!s>N_wS&`xBI|usQ}OLu=b>zGWc}Y zF6f>Lsvh$ z;q_7v$hFKqou6J<^Zxt)x)**e5ziZTh8M>v-FOI^S@Y@6 z7ifOO`0X$|f9rB^nFDI-zkA_O_5VMt8Q|G@#HaHGWP8wakec3N0qElQ5^a>V*(Lg* z1yClS+o)i}rLmyHT_No&kM3d#6y>EC!ArS8H{_gop$8hMXgxMq$fh0>FgVzl)-v+mjLFTT6t>P?ro=Qf=w_6?Lv=Gppyr4V>j$M!|n;(FtvMnxn zbhF+_LS9vSs0>^xo`6ncg9e{^3k3LEl0mj~-T+-M`^BS^&9jpayh;mnOuJ{dphq|B z#3WP5kOOED(Lu=cc4--?UOMQ}i*#|QM|XjQ2izbr&rV+k@ERp>JIuE`QQ{?NjtCb1 ztta{W=Yx*JX#K|D0_p|8eBuE*ucgy>2gD;DoxTUap5aacH3>^kfMy;cn`u6lf>N#T z0nlEjyFlXQ z6i@(Kp5yOX`uqQX{uWNqvNtJ^SSP4ocH%|fWl)lKJ@GOXG`iJ!9kd(Er!(}#i&BWh z0iW*B6EA;&+D?$N^7Zr=e-u&fs|TIb73SIb4|>`N^yqw#Uf&BI&2LZ^gWoVb@M11# zuUvO1gJ(Azs1yMO9%N&S#i0^OpYGBNp51JqWt0w{-EIQlZsTlFN^8Ac0-Aff09wG@ z?TUOgCwP3f`3PvOvSTb{F+I2*0xh5P>D(RD#E+{ z1wd=tLCx$i&{&rce0&}{g^5@}gR~y*0|V&zu9GFwo}gir&V$Vl*+KU~gBP7YV0|qN zau3*8kn!MAXx46@u0Oj#GYqXKL5t%qHh+@$(7fQ$8`0p={9Bx_diU1XYGj> z$3fSBbl0Bn>1OwZkAQ>6OFx0Gs{)--3oGw@;OlMqTkeChdT+SE%bDQ56gb_0)&&Nb zt1`T_2d&Ki_ZKZf8Nl%w;@SBJd_i~f8v&1QG0)Bmj*Sl>qwae^$+f#qz@ys_T-t_% z#;Z}*Gx9V-%iCk1wR7M~0 z!r7o3Y}-M@pP+l$uY*ds=I8AEE!ChlQm>x?xFHG;?`s~N_dz#by?6-PWCXgBp!4wS z$*}MRhYxfwW#?xP=ypovNtYWQ-Qu9eQp-kgb#TR}H(vm@WfQdEq6Kssog=t?;nB_7 z5@pKZYx%{O-}eis_JlMCJe!X(`gDGK5uXQ5lJHgme~UM$J=OYzzi%NZBZ0Q0-)CT8 z03Gf98dN`lw)nQRgYQoZX=QK(-2?ku!H4mX2ji(ukv5Oci{O3Q2VW|9S{^CAe$KQX?d;A z∾nkHw=mfC+4_V|Pd^gJ&mruT}E_Mo^Bo@nAgV(Rr~mr0tIf#3A)JK@M38&c8@| z@LsIH{Qv*UNes~A{#*?YfbN$Jnaj{AG7o&bo#mbS_n`Zk{~Mn4(LCg1`M`tU|Dp%u zq1O`d^2Dc?Wg6%d5=YR{hztxqmY-_pyncmPuLo*myA-n z&>>EsF)RnraumiN6{;S+F4Bx1-JziD3mE_|H3MyV0%u-G5$(Y6BKgbz|F3U?3Rq51 zowqY$gYM55c+VXCr`^G9{fHRJs2;%7Kf)Nm`jg?#t;~MEI;sr&sKZ= z9BLjoJ%MIPp?s9|lm;r0zu(4^fSl115Q9f&?SU8n&w%QQ+5;Yq=Absv%U>YV-@dW7DPbs%YuZuk+WL^JD=Z~No9nxO}g&QPEGybUH zg{cD94=-1L{EuA6gZsOXUM{G#lR&Q7Ul<;E(bK}uu!6Cq!sFr((1hIgTORzLhdg>i zA9!@SKJe&uees$P++P8$9`~?3RLtJ(0U8zh;9+@zzoi~DOa$g<@b5j@{87I1+`)g$ z9?9Q8*@m_GA$un`sI~@OgBA+f&<4$IQJ@YpsJ9HNU%}&_po{GTB*5dJy)0dz75g(@ z&xP2F7}R?Gm|q@p2`G5U{OeiZ@}~863EOed?F$Ts2VPHq@#Y&!j+_84?_uqmKcMyv z2e_Af5Hby2nh)B92->U{4Q_cHe8A+<8}X+*gbB1ZC7*xqrRGoa2Y)epBwqsg1hiMH zy#`c;ww^30@a*+b5%B00kwm(GquU6yodGnr0Pe4_cvzk*eGM9`0hcbZhe7Q=&^Ei~ z2ka#;JPtl!0$ByJvh`BwM9{{e=Px`#>7w}uN4c11H;)R$ogS?xODA}C`>05~?(^to zH46dF$-VOEHI-?FP4qOqVr77?FM#aL16Tg+pw?;>*puDypv?y*)*xFwdPA81baSQ!vh|mo`Wvvh^Njk9=%(0K$U*yPeBQj*{4$*rTFJ>oeJvn_ogDwDS($3F5PQECi`?Q1uqZiO`YS> zyA?Eo4O&>zTe=0h%Z_c=73cFRQ7kD#Jcd zN`0}tk`m*zwqCG|989Y z0g2vX0xjmt-LVsN;^HolJ)lFv6uVuwfE0pevASKCSh{ZEZvvgkx08i|0kR&{r#JP0 zW9JDU&?QmNntyWeH-~^uA8LNUQo_>B(8&hrmoh#C-<);3o*O z;0X4rBe>*;^oF*r1s%=bc?dL{)BKC6L=bw)4Wb?30XZ7(r7&0sG|u#f!>98TG%`S! zX882FPT2{H4oI9_js~4n`4V(CX1D8>PS-WZUBR9LxvkrG1I&5du4`IPmU4iCItY{! zo8NH2%zWh2`8*4BkK7D!phKo*@5KE75B5)kM{nsGRKI{D58|PxYe0ih;3X)an#4yt zx8dd2fB*kyF@Y@h?fd{vP>!LXwYa^ZYaAgC2gU7+Sq=aH$9MZ~aEy2v{~w%oEM0dL z^LliRg%v&eI z{Ly)=`2dG!w~d)+r;Uk=<%yzqp1me4K8zn;g31S1!;_r{Tn#U|baJ|MhA{qlx#aKv z|2ug==@k?$FTFvlrer>%mglhg488OI!|=e11GS*KjK2l6A_cuZ`{2>(`k}k@i$|~P zkJfLcKCt=>c5W#62;EXssBqB-56eR(<{+NoNe~lsGx87kg5}celbt6Z^)mPPM-R(Gr6&zfzP|oTz^Sjo36v7RsnMgi^Z;n+=_UB`xtoq* zFT7WQ+Av6aT1vyv$9TcxW8ZJ=2kjesy#?le0guj$jSoTX9?3jt4^?rBN{NcD$kb!{#yyxFH z`M?W#@c8eO5>>BW5oM2F-unisu>D{B+n7OJCjM-K@F+;AJ9r!eN_AT^_N5 z=U+lSL2H4ZI)*rQeu2)6C?HqJFCd3E@V7RD{M_vh9s~n-SV8S4q=Bq*P*46|Hh3T_ z8&s$CmR@k&=>%HM*LfWrvET&vLi;aBNhOCljypcHGcY)YxOBb*rAkm<+~L#tA2|q57#{HH^xXhk zLigfkIOre?pKjj`9y|X02LpM}@85hZfABY@GBPlD^|F8#K{EJgp77*ff83`xLEiJ= z8&;RjhX)_BY90igNLQW#S|`fLz)%|R0Xj;h8+6^;2k?>8p!?yE2l{mWbPRoAKOc0x z*0G2v$L4?k_**nUQ~%wd<5rJ=hB8|Mz(@LhHG;^ z*m2IM^9Oj6{op%hPyY4Cnjf-z@~^+>!N2~a2jeFX%?qBLM?kxudqu$0^gf*@KylIh zfZg-p6J`(o^#?sH5AipHmiT*UUH~;uU$8bml=sv;f?5JKyMY?{-KYFX?;KIK{rr(2Dbu1 zCp@f*f&>g`quzIBP=W)6E9fMV&;uTw0v@2<$jIWy9YE`Q7(BX#8=l?w=oEfA4`cy9 z^!#n`lriKESBSsC{UvV!kIqBQkJw+jfLH#3`oWzSAcLtd_?sWFzf^;b--CR1PNCt+ zeb?4+psxALe}De}f5G+w+$4bB=jylvR9_mN+y&|pyo~z&|36}U4AEWymsHTk0;p*6 z@aQaEfmSZT$|Ug2ZzHHU=se=uc^zjPjKe!Q9#NTcOI%yZQ zA*S^be`^Dm3bd}&AF8)@~fu{}D2K=p+%nS_t+kzRJAKh>G<-*@;1zPLY z47!4%36%1i4>Ni62K@8r1hu$sg6eI}pP*S=8w38k^Nd1(w=f{xy0Y{9(4NZ&v^dUXCTHQM$qx0 zEleO^Sl;7rQ3UM}=)A$d&l?=#ohKT88k8RQXg{YLqqkxI)W{C%K) zEHtD+$LP5-cz~|d>;)asbsu!GwoB(Dmk!_g9-Y1mJUUA!yjb>BmcgUjcYzE4HjwCX zXxA39(Jb_UM=y&os6+>!w**@B-*Ok!i|=HEj*RiQhJw;&%gIt^&~gdTDA`K|a7T~9 zvH8#cnkvw#Cysl#7#J8{J_YA6h6Zbc(#IfSP)e)2$-m8+vH69QjTwLYE^v{@J6S~) zD?pQe{4JiK;gaST;CKVA zl?2@#9t|o+CK%p+sRJoAq2@J%Z;_V(T^|9;CZN!11zjfbk`<(Ef@AY@CjORS&{`6( zdkio6wtn;JbzR}o`3$sFp!2>8ck<8Ns>SDN9{`dI)5wxe$ zqxq)@f13w*(B=f_u&2(SuAL8EKohw4UaZUn6|l!&Ox*qd|I1A1d^vdZ;bk=FKoYRK z9h?6M@VAQn`Trl3=US}6JJ3MoBj|v>aBaC=!U7shUU9$F$B};<1E>^c_W@mPU%JAl^YF_wu+KsJ$DnEHFK8(s zG%Z1jPSBFrmpl-4aPyj9ayI{DDO&@rFFiYNfF{@&z^UWrb%1(m{C-RwDZIw}NhEd-)P{m*E6xA_`^jVEp`AHEn{2-=5H|vmA{>}2VUxd7?2eKFG1&1!vj5nzqK1Q<>~`EEcd{JzyDo2pTF4Q3mRI7 ztkiq6mlFQk4*GJqCQBw0%_fchidp$j}ak9c-F3OF{{ zsOWlhy6z~cgx<;73mVvS-O+guG@9G#yWmByFK8UjcR}lck|I!_#iQGIgDd~uw=SLk zU3*;_L7g7PM=!(!K}R)}9sq4H>ULf6;yC!=D&#Q|1JD7%;P8SR!v${-f!eR&hI6Ou zj+dYf*`4=aSa|>c|HAm*-~T?H=U;exW1YWo40q|R`v*NG6lWMYHvd=RZ@&Q#kyLPq zaC`@a$nzHt7N8KxU2)uX38?Du>^uevn{HQ7A08AebzF`OcDnp6paRPSDQLdGDD#0- z7og^qZ}NYSUe+b@stksgx@(tsCG+e69e&~nT0H;Fqt}HITnTiC?(kv!1gZ;OtPB8! zRw_KSW`Zsq>_!ePL$uI>u0uZV3R(cp0Gdq)IS+iuUg!50oL>L`zhJow3atgsHG@9`JBPg{whJe=3G2Q}=5B0Jzyof&o3OPhNi{ApOt&u}cA8jmd0w{e!!wocE z1ajp|&>zfhzkIe8|{sj_V_f5$SFHtY_@N$+# z4zKRoC9a(h!NCP;VswKxUVrpJgj8rEYDk%GMh_`dj5G#H<_vhkYoYu9|1aj;f`r!= zcSLwWTcN1)vzPrq3c%w-9-vV}(7c9&2gdv?Xss{z%VmE5K|{JO3=FXKzEk}E|M!5@ zSSag#!SxYn4I5$()9^MZ^?0;?tK|3meh1va^lZM$;Q9ToM>p#ib5qE44|w_k)StcO z4GIba(Clt+g@9-0Cr8LJnxI~7g@kYCgEU9}yt5zzx&mFnmw(L*g*5)W3n0N8;Feh$ zf6}Qm{-ncc{5c2t1=&H1Wt(3x7CE|fv$TWO3cvGhy;Nca%D0WrASuJXsq~~rr_yJj8591&B z3E{u|{t^_{;P?ZD&&%b9Q2E=#QTU+r9SklrB|vAq^0$IdI!4)z+ycIDv-1FGWtt=C z_*1ZeN3XwtPv;@D^WG*x&wIND>eE8kNBLMD<8J~TRSjO%1zF@DE&-l)Z9Pyb@H!LL zo&%+~l4$7Oich`4|C)a(@wbC?dh7z-zw-b8e`e4SQWMBQy}|!G@3r3IZvh>P;nDm< zgdZ~b3|dG2a??T3eYHNIA=qwz3186EU;wDu(;fQ*w0xMsqt|wRkrKnnmzK*U84&dk zSg+Y*K9CToJq;d@2nWsILUtN<*1mWl4j%Kb1&#G0wjIAzgskU}{c-YTSQsq*f?G8& z(_Z}l-+BK)kg=sdX5J*Qcbw`@Sm|6WrIH1ogQhnZi(W=;4@%_e0kX;u|z~0b;+ofQv z{cULGtH8}C+WmqMyAHwaN;m~`f9KN|#=igm$9i-gf628D+jtRZe(lA5kQBehi8THY z-pPWh3~Bs&ypQ=*8Ok|9t2e;$X?Vb+*Y>f!62m8cLDwHIYS*!Xjv{pZ0Xh*djbHyn zIUi`n;ygZ829Op9kR@V*(8qmW)09&q?}jFG<;bnc$&Egx_H{l7~eWPa!U7qOrm1sbYjhV&g(AxAAb2%sF% z%-9vA<=kUa#cmZB`)LnW5Ub7gadGOaA0?ka;L1u7mnjf$?zhDN9*c!D|2gFo-UOVGM=us=(0yhyL(1GQ~#cyu0rJrxqK9^eUUka?g9bPvlD z{4F3I;ELk`Xx*T_hvq2{&O;stPk{|Q1itygN~_4sQRGr!*%{Ce+zj0yYrC8!B=+tEuX*>XU|{MECJm& zbcB(=6|}p|w_8UAG;N{)x^VI@qle@HkLDB1AXh`&dw2q<+vm~kFYz)HJfh41KDhh@ zXkEK!=hx;3j8NVDQx92ODBTU(NZB$Il=i{Pu7W|w4nTG?^S6T5ae8)_s0e`flf5`> z@&AA4A&(i~Z~3;q1uc&P^>{%?tiEpGmv>-*ocjx%Tl2Ae%-^2|a=@GeAjk1)S!?15g(pZ)QGW^B$6 z9`GE^2&&&f#rO@d8(v%lpEz{iqx0Ac(8a-@_yv4#Ky1)E!9V+uBfsmFmP`Dtzd<9J zpmL}6BWPrZU;iL~8)!M>OHYt_;MU{I>!8CT1JD13oR=2dc^TA#1(olm4&bs~6S-^$ z-4No@%le2P)BzB=0V$_g3Zdmx>$j3ei1NHN{>3ZMAX@VemJ$`vDIaGJ@G&(1W-2jn z{>@wxwM&G7fuZ>~V~IrTfqFJjI2v98ndi}Y0aP8ifR;2>ym|cwF<%1K(R!fr`s?eE z`U8BedM;?O??%w&cT=I`O|1v&w}92YUXPUGAomRzUV14C3vW>R1CI(p&XfbUPrymy zRLHMA!efbE^2c_3w4{(DOT(Cuh3N|&5PI$p);?emJR5gGroL@}*NcV|?%Cm{%<`{dIF?x2Pm9DAqpv9PJ#E%bbbJxnSSsEZ}S62i$kUJ zJvu+Af~V88L4^|N(3Dvomc;_4ZJN5|^Yo(E(eBjYr`{0Glc}NBZ38eAsov7MYx&@qlz8z*P3Hrn@ z!2607WQYEV@;RWq`-D}Mp?DG~?_Th@_!}H<9+tOC8(ud+>rLGG6Eu1};e|Em7@N*x zC>44sFFZBu0WF$(ei}5|1`aP!`U7RLQV!50UhB6~KF|)L3-I&&eY*J!FZpzy1RV+9 z{F4hbM`G^NdD7$HOJ2{;56ur5JrBO%bp%xu7AH!Ng@U50^C@IaYKb!Rv~SocWC|XZ z1p+0ZU<+XVJ5W?Z&)N(vCTgiJtQwR zKN9f(U+v+*;Mw^Jrrh)3E4xx&(88hDCntc@!)Zu*Fj$934=<8I^V^LE;6*#2djymh zgWFZ0@BpP3aQoK&5NNaybbEu88a_b_HZQynSsI6E4>YtTvKMAcf4kOANuU?n7 zKOUV2VfCA5=c(_49?dUVd@Qe(erjf!##kx?Dz`v;AUrKElHa}qotw`Z- zIRwf;o%eQWGcbS;{eJ0~$;U7OR6f1*=w^mCwo2;3h12yHEuX<>Z+i>CJ7fl+bIL)@ z+yfq#7fReg;}-{C*)%_5Z+^uLnnG;@?K41XwzeK9Rf_iLya2i;1rferce0;>yA#ac zUJR;C!0z_wyaz6xUu?Gf{~y#S0i~7i3*hQsy#560>b^he0X}sAQUDz0ZwUo8P&#jT zG(Z01aqxw`r{)n)&O4q5&oHNX^5>m-X$C9*Jq{jV_Go_a$D{cKlSk(v@V#e9!4EF~ zLFti{@CUX0!2Zxb4R~se_*QZc z(H?>JFVA>%mcDqg;R7h!mA?4IFW?6{hW{WUZNtMh9y4q))3p`E380ZPc)1GcU+x9p zQgaN{vlQ|K&A}WIi1z3_?idsM(r6wiJV83aadEf+?lQZHVJLmdWc%p!;NF<83( z;L!|fBSO>l7b4R&sGI_oC*a=mOQjDW`@#H+ybKI4h2VTpdWR1Dpw`!rK7Xk(xWZxu zT_Ta;fpQg6I<%hKrOLp-aPsB*6p){w`54^aUb_#{-@fG0>-zu{Dt``x;s9x&pj6qT z8`jt6p9{}Fh$t-Wd41r;(j%Z66gpo8axdt-X2h;a6ldQsJOJu`rhYrjUdjn7EL-P; zvR*fAuD=EO7aBj<#$=%J!wK4$(F)!SgAzyeusC|i3yLG}WKbM2 zfbLkh`2Phj$c><@LVO>1^oHI5#ZVNeqVBGJ@S+iPL}z#H4Uf*lFG@k|&f}=DuL^I% zPMZZjQXAAxg%9oUx0d|>|Nr%p7cUQinq<)RSD^F<@(=Q80csb}@W6}jvq5FN#))r- z8TngofgcGw^&T~`U(6OH2I%U--egS8JG=5Nj8g$+-()1uGWrNZ~=lvHec45i5}u`kXW@GdgMGoURtFwfNffq3TZPmpIm{QdtQy!HUm{y?q&4Um%M&EE-HXyAd^J#2ZOzas^-PYkpHv_zT_wD}2qW?JX56^#6? z0Za@GE5H@N0sdBFkjb6jU+9JKGaw3xG=7Z}pwaLZ-&Ghs@y8v6H3IlsuY&y5d_)3V zPJ>qrycEs^IT}=MzQ_QbIt#X?CGzOs|KOl$eGNKF1T=5}@-#xPP#39F~J^`&yItR>4mHrXgyF;;nVr-MY{v2(gpRazJYFS0nd+vPiAufojOz! z?$LSbH9sU?UAkE&U_FoJT(JRYiOY-bevnzUCtfRp+m)bmfJHnn{&j4A$5t-mq7u52$q*BQ$YoU1N1yq2hhOgOVBnx&u$SFaQh6gTc!16 zsU+wCfL2f=*RwlBMF6}O5p)x7+614@=b+O2#EZ+%Kn-RA-xDt)5B&X)6v^O90kk_- z8t66`s3Q{lL2-=ak=0D1pgZaK zL1*X+G(TeJZvi!rUAj3yr#47|RyXpufcy`N=Xfjdta_{af6(kW)ZtPvho|v}v!4B~ z!ti3o{=ff0qkAXN!py;wnZW~I)qp|@5lEK*N zfyyi7J2WCZK!^8rmM%a(#^HqFB~Z)0G|Hp%1GtC)w5La&v_bZl z&T#2=o#N9i;L+{d;n{f*bZ!sq@;dPGJ>b&;6u^tLA^zzWX>?Q;Y3~$i2knscv3yYa z*2nT$oiuEG!MU4dx#A6{PL}1MRZBjW&r08d&a41kkO*3l-BJTu;|aUG?mXzoLElcn z7i@i?ffe5wpsNafI!nRV75a3Z2c0tbV%Eg}|6lfkt2@y6Naq9anW)|1mBAZ)I#YLm zPR#8*208=NcZEymVaLt`KAp7-U?J2Bx|GYK+fxD-LSO;k?s|!rpbMCNx=UAp4pr#R z-LL~R{_T13k56am4*nKt@ZPGo{4KXY2XJ&g@I3g!-lg+^OXtDwH#%KsfOd+3Cv!me zad|c$6KK8d$UpTU_@?Uq^Nb9T6Tck6xdFT+6146Dw69srlmRq==GxHV+u_k|;nLwd z(D0<7pIryt3Fg}= z_2NJ`C>4dy@POXB< zJ@{P@y;K7gAK-e!v+*=&WX!iy>h%UtxcGFw^X+{9(h8OieY?vfUUGnW;PSxL@X5>1 zfBydmT?g6+x?vS`l50O`9s@ib1*-Ge5%B>5imrfB#ddyaIQ! zI*+}$e;ikN6-``ul?u9Ra|5UV{^A7M3I^(6EdaG%K>N&mdUK)W)%zD$oj}D&EUdip zu>8#551x{H;eo8wg;RZVLKzrXB#5O`rpLVdWB2@BjZVL2YKRJszDmKt%~? zlY&QQ=?0I^*d3sDVdpUy&}Fv1D_lE|gA1loM8O2wuMH`fAVJXz5&);G4~TRH-h$A1 z*rz*p1Gp<63OfGnKYvR+6XY7>Ypi;tj#!Gd`{jVn&J&qp&t;hx?Jy0P4x=sb&esyhqQtArI%YCAt z@a%-$W9-_^GtH%wXF6n@{c8PtALJs>7gFST^|Ek*Jl_JE#`Ul~Ru|~e`3a=Zqt~Y0 z2Xq&a<{=Nz?Xm|SG5J`YgDk=0_qnzYbP@53jmtoL@j&;?x=wh>0v@n*VDRZKlJMv* z5&+)<3)*Mb_yAN2g8beIsy`WD>}mtWrSFWFPeA@NybTTt56ffxeFs2IM$Kbz%b{~< zpd&bZXS{Giwr(m&DfCDL&~f~rqZwL2>GP%4f6!SJ|M^=$UBj24E8IaoYz3VJ;9+^J ze*Vj3P+>N8BdGh2JRSz^uYq=wk=*`@gSNl;592D&z#T2Z?Jq=mreX(51-T0xJC8Yj zJIcu4nhb7%<-$ueW;;+YqLygjgLc6s8lrvC!U;+j;1Z1;Qlfzbpe?XzeBfNx>Dz(a z_Nq_<84WJV@U^|bMH#5QWOx9P{z2uLF}(c+EzdsJ!rNbt-7NE63_rljv(Ke(T`iCC zx84C~8R#X#Sj#h`4%G7O19CeHQl8!O=sfJw`N5+TRGu9JmuHB8X#EaKGsq1skN~)$ z1)92s<@0XW6+WG>L2X;lgMaP8Wt!^_*s11mphy6nHQVhW04=Z%dhq+4@aSgs<^=~O z=pN>Cpgi-!ND&l@paZoHKm%F50njt_K}A*o_&l#Z(6S8B$xki}46fZQ?T&^wKqZPx zCrcBk@d`Q-?S-f18UEhspuJk14}CgMOmOY|fTqmD@?iZ--(E*Xk6y?BKAI<74Nv-5 z9`xk*Iq1W9z!S8a?G5-06UcZ0$R1b27sz(J@v(eZXYSR@vdE)Xq{|f)eivO0UwA;; zJbW&l46sIzP}&3tkHe+Y0o>yG;A;7uJ#V zGQ9nA&fow4T@6oy&!T;?XYJqro}EXaS5qO@gM-I^JHLb0X@DjLMP9o>>W3H6R-jAM zj;~-WHF5ZMoW1lNXe{8RM>jjP=URH#qw^PdqyaRzyB0J*0h&bztu$QF`v1Sj#s6T* z3N_F!tzRCU_dzqy2Vb$iPy#zO_Qy$(($ZE?aSs~L`+nc>+w05l@*6gui_?9(Es1a+ zsEEA(LIBxu%wQWq=NDc4U!jTaxYkBcI6@tFqXpzRNc!;jejn_g*JmN&19Kl}y!lJ> zGj@y?MK1tLFYX7g6?O2#ozph-NW)4e-mgGGQ?S>3!}m7mO#cs)8Dsa z3MJi$lO6e6K=bDwov=e4OOhdnYIXjAo;&8!jq5y0{w7do33N1MF>H{gL=}8}qsPHV zOx-R5pc}^v`1c-Y{vdzw2eZcv56wd!&A&Lxb3A%YB}J7OK=E)Fv`?V(;L8ed3k_7R zfKIS`4r;_Z{s)Z@gBH69fDhjC0NqFc+UNOtKWJUoL9mBQHiJ3<0JTXt8DMfeK!aU7*I%|NsB( zJroat7VmiUx(G2M*8RNW_2{h^XnrR1dL48UZpz|bN+VZ!6+Sxw6 zsaHIDWAAi^UhwDzow)t{ML`nc;4zQR`;g6_KE13vUZ^mDk2iQ>rvXZrZ#aBxq{y5cvtTuj07t5zvStX#J7viI?Xzp+-~2!Xl>Q74fEFWtKg7_$%uxCe zH24RJPs0Pqr}3khrvfq06k=ZU14i&7rUM`Y5jh&N;;Z?%0MzJfAfsIv7{KC(A?AVd z7V`L}hEKP;XogC-}sT~GM+nt<-!U~uYo zG5FJZfWO56bYQ{W11`N4Z(TcoI9~kk*!-A`QJOh zJxSLMKD`+NkXi|}2N`^o(FULH3<=P&Azs}s2H<-|`#|>tx^x}{Z(zCn==&wbLmro3 zfRb?sXrDf4X&h+Q^Z;n67_>%?zg>rgf#DN>;DJy40IrE7>;#3-c*lEz>zE-db z{ZstS)l3WwAk7DTTi-hJPdx^9P7C-R()TAp2AoLa*E?9nSIPrA=Sc_@cFhMELBZ7t zx~#7A8F&GE^D{;d&5s8kvbZq*GVDDV$Y1f|6M?5srT}L>V5{#UKidUE}a}MofRyuE#LTCR)e}5 zy~T`%(9Of3o0iqZK&=hm9UkEOqz*s|eE!xbke%JG2O#&xR|tU2`UBeG=hOMZxAU)W z=XcM}W1h`_MEKh;FfcF#`*gdW0Nru<&@l{jT;Ds;okclDpkwa9*9Uz9pBeuD#ZN9! z_T%qV1PzR~zAY7cErm$0pc|n|xZJya)`Rbq`~a$hd_i}eeewYvqUQ^`wDl$^;e6)( z|34nIi4k;cq+qU<(f$%NP}l;xZO`z(XY(IMelYvR;=_ClpsV*F=kkDuiWQG~_PR29bh>VMt>w7? z+yDRn9e2F>|Ns9>&?yPf_6z9#2L{kBA+;O8x4^iAZui=NwhNPAp5YUJ%qej4^Wfk0 z!yYLOcGiFAO~1`0(#QfPEeiwat3%1 z1RS0ood=sAFoLp{$HkW(oCiVL4}Rj0IPh{BXv`BnKfDX%Gyax*(Clt^E$BYh?>C*g zOU%D`Tz=r#>!EP@od@TKmjNJY@YqrTXl%)|^ZU#BAZLQk^Y0B&`3Jfh2vYuev|cL7 z1Z{kC=@tQPge!UX@(9R6n0uj1LOnabf)Dft%|9Q2$80I5Pj`mEOJh(!1+uOeq)r9I z?RGuk(QN@f=O0wIbX&ZP`UmQ!d;^~l(HVN+1=G^M|GPsEygY&Pd>hajonVi~H=uSQ zat(XJ@IbHof6x;3c5`+H2A^&<&(3Sj{~7sP{(&yW2F*a!aWp?*>}ZYn|NnofrQ^3F z?4_)}txrHJky)$$nJ{?tnyxm0ZP}8X$_m;%2MG_)ZWa}2W4ZJas8J_v&&L3o-n+xb zz~K1pIAf`zZv;kK*#Wd{Mq2s`Ol~GyNBgr{{9F?28I{i`FsqHdqJ`8aq&mP zUXYI%JUfq-Rzd1bkP~Oj<74nx`TPI>|0VoBoi9MgTzSm&`2O3o^D6js(C6UV9!dDx zi`Gw|3kQy@U@Y0^dGSw)5xhSJ>KR~|;>*AOn@{HlsG-+9Fa9aL4mt=z5Ol?n=8bP) zzcKpoyT0)5b`fFIL#{F?1eoJy4uP~8L?_XkbefUa|WQ4GFGh`-f+8DxVmb2+GK^n;ndRg)2V zU^(Tb{Vk{%>^u&-nX2)NB7;ZgVV}+yK4>!OUlc*T6G$|49(}?75f=I@JUVZB zbc5{y#X}U-PM^-#o}Fhw{sYH{6vRxA@2?TI34c)pA9D!WrvDQ~=I3Wc2G5IsJUS1T z9)z0h)A1uf3|5lLsJ3%K}fxB&>dm7bK{n;?cbq0UtNTGF{(q4?AEX81!0`DX zvF|VZ!SwSN?(_ft2i+k9?Z&p=fQ)Z=^nz0s^vXQwC50ZnkeKU)S_|RzLSh>t=+pTg z8vQTcPX7P@We@mR9!U8Os%%m`v|)QO!3A`0D(D_akIw6e+5eYQz{?mx>qo!`v_X^V z%K&hV3~qNgNO*KYPQEz@7KE7(76*m>%juvh^&m_?D0p7FgO!5x!^J_-_)-ui?%C}M zG8YuGFW3DAjTg9s_@Gn)K13IM&h7CRTPK4C2a)riOXmZ4mG-g@QbmL8>4u(O{r*Mc zMR3jl&w0VibI<|97yrLVoeb*lg2NItItZF<1#f@>k9EChzb*&5Yj(qTaLssA6IL_+ z?`36pku~!##`$x-qF+S+|A!Quy{4a;p?jyB-*9+z%Q}LL>9&4R=nA^cm-W$akg2v; zL5jK!3=h1JjFeyijgf)2X7`#NVOC-|30g@nq%Q|M?;LbC!afPmr3RpzPrzr|275Li zQ2;eoU+l8tVDRbG@aQ}YDoZRtXT4i_bO&&Nwy~Z75r-g$8aQ)++BPg6olycFoe>~vAFc)bBpKf(L^p`Z~!*#1-rpKdLW?jjE4Rte~6 z^KNH>Zw&mUK^~y1s(O7d_;kK{k#$>+!Ka(qquW^kbbx0!Nc6qu!50D`M>{q@V15xX zOM$@yWuY(Vgi{Ga(56cGeoD}m)_)$Iw?K*i;7ft#hs-ZN%urx>eeA`_>1gX?J-Yn_ z__r}OKj63FE@3k~0P6pGG*@yklza~L=q{504bOExec|{~j=}H%%IOsF{^~!d8d;bc zSbGo_9xsw#Vdw_cS5SGF{@6|hh#koKoBuJDu!EiD0KVTQ*aNbG@P)lPXdN|phvF4o z&^4m5KfpWK5YYi1e**WX!$3zLUWG;q=<=q{&-~jMAb$4p?5+i`;&}E#W~~H6>w!{j zQ1BaG0wop^s515vF3@SQ2VV&^KVk-H0IhWE-6+8jZFm53RA%hqvB@iK&SBYmp&7IMs*PqeGs+9YflOQ8#ZxjDEMjN$Kj$=+jU`;It zN>#w?MLjw{+Gv$teZ3LZAL{jEw9zU(@_K8h_7E&|%S_8+AZS>pYW>_;kMV?TtCg@LCgeZ^`lI z0~{XA)dHQ&pkc|@10`%8-Buo*79P!qID9N`@wYqz?agLx{-IxX*`vFf!=u-o!=uxg z1GMANg@M7PxBS0n@-g4;n4=7i%|94Rf*hNFF!Q&FFf%ZK7C?dPnaw)gjJudv)LU;3T^WEap9lN5tb_0KlA*hwm zc^^|N^BfL_?$A9T#b8|^Gdw#FbeEn0dAb*LjVmZT9lu|51#KBTV&MWkSp~A%6PABm z4WEF=&sx9L6}WbOHvI3ZdHS^lB29H30*6m9IDD8~Eg#pJfl@5DXYv)#?vSet9-RV? z%|{rUk26~SE79u)htp|~?qCj&UMFxkd31wx)t>_Cy4if3(c?G+C<|ErE4>6dv$7R5 zzVF)k$hp^s%cb*@YwO8+!`Hq@_JfXy_h2pt+s_6vgxe$elV^9yR|bzx&?ung^%7}_ zwO2g4i#a@c-N4qqz6j~hIClPWZTVlK2v)-1{uFfg42qXPMl$aT)IQI@Ne_o?b7YL$D@`Vs+Wb_Lpd0>pz>OP7`v_Y8 zL5l-W@eIC%j>DrnOn`qI6Qq2W0*%HV;XpLUK!c_b{XX4A9KPK(DiWTZe?2-sgU+us z@i^`TI(`wncDm-d90R0D>(lwlqx0a4*-tsz4v0H716BBlFZAB5MZPeG^kegl<{fA@o~zk}HPqE4TK z0W>4U;nVpJ+@JxObIYUCSps|?VW+czXE!8&ya?8nX7K1P25oO+FJ%Qy2Z|t9RIu^^ zFg-A7$SQj)t{c7*C6hJG_*h))L*>Q<6!vApU(`+nczeA?Dz#4KvgHGU4&${ zC8|rLJiF^Sz_+8kd$C$a8rkj_tJBySUf+keM_KG`Xnyv$L>*MA z!y5u-^6-YhX;n~yhBO2~_t9V(uW$axjJ-YaUJh2BlNT2&=2)C=q@LY7yU0-8Nm6ied^!;;1Sn45TlzJe7ZDf zl`=DbYc@zo_5Xj+fiCwwI+PYSbsLgGE!q>H%XcQ<}k}H*^E2Pum&0!K2soKWG>dG#An7y5fZpI03t^03{^_kM3%T z7X=^<$DKjx59IAq9{9c^nUZSI9rT^|U#w9FcTIE~;al%aw|!S+*e3|ydiVXs8)=Z` zth^BUlII?s;LVe*pFjr^v%YJ9XjAg(HJ$ifks)ouK3=HC%@B=eAS&P*eLl%DcsAE^ zFqCK*{(s@80r8SYujyg1Ut%|aoX_FeUCRL)sDELr1Im@IC*WPqQhu~^>0W5{Aorg_ zo1e>jbbicer5=5r3<3%#1(aJ+ac&%xl)TcP1`+yPWffE%308zz9J!9Z)Q znxFsB{L$M1(rkF(;7jJu9;-b%qYFSg6l z6SU>7^ZpCbWOjzvm-ywu?Qc+e03`;{+Aow1f+q|QH2-JhZ$ATCoYZ;MvGa^?=keD6 zkn?Xmy5&GOxi>%l4VsR5;k-bC!KJfw2WYq*v>L4ybixfN4YytcpOFIHzvtQOs^HNb z5#VWg*O7nfQCGt!uKe5Hf_9O6IyQf0^yxK~`ht9Z6)2&A3Sb^c%KG-=G$^&fY9N_X zR@audrL3T9COAF1qXj^LaK@wCbpxme_JZFWRCa(GbN@i|=$(gO*lq;%J!?0-XjuSa zAVnNM#KFx+G+@0%Si=h(iZ7DqOE4UF1An^0$K4 zD}lXU2D-ok6p=3>cY-=FfR>22fbRA2=#@424C?>8g68;}AIUp@JIY?_;L-d`y2Rnz z5rGm@&+c0Am7ZX)gQjFIXi78qcIOKCw!SSr4hrLzb)a?+FKCScto-+A{v}g#6f8Lr zJe>L(?_2wwy_Ox_S5#a9!T|fz1vE|rMqap$BLvxh4fw!bh0QuxBX#T(3IReyl zd+E^~!2ybH=y}}Wfq-ZZP~WQ&yd33r=^L<4XuHG%s&6Aq-wH^*fus*~E)6K&-@NVt zwF0W_*+Cauae<5@g90|Z{MpJZq7IPUBKHWr+h z;q@st^E?QdxBUdzJP#b^f&JHdpu`#EP*58I+|B+1Djqms(I5$rA8U_pQ2f1f{C@=$ z3-3V9BXG+Oylwz_b{*8e0l61uelpnnkYJzg1P;(G7p|ana^0Z2-&0gLJi4nBJem(H z5c13G<6ysl!^XGuN$Eat>Vbz3CH7|!V}CZpesEY4X+PN8Nb7AmJi6lrK$)ww7QXI| zskG3e`L{|*wnuY)0E16&zCvjND0l^4M}pHKw6H7j29^DvJdm0QOrSGgL{*-cF!=Nq zEBJP&X?R#l@wb5P_W=d69%KgzL5&=6s#v&0JqVUR~}ftp0!tj^Csfn(v(`rm`!<@XB_ zNziE4{TFY#Q-A;e@7tLg@bV70>+iq-O~1KdcOcR)XioeYNW+x~b_Niw z1JwwP%DoZn44~5iTR`h0K@)%Q_JcHk3n>3JoDuNsWKnrp0<{O0pTWf+xDHl*Veys^ zG(#^bqzq~rd33WLzXwjch6i5cmO}e6pus=TIi8?S5mV`zZ$|`5`8>K=pWZiN@UXTh zk%~R+(aqWq(${M$0Wt`D>6cz9D`=vl93tNPT9Ls6EG||Go3Dqt2htvfj0}J-CvRo! zfOg4#w1XzPpr>sx@wdJJ@jLIoFakASx>=L&n=pX0EGV<`eE}`}fs`nooks}OW%36R zaRe&;O9kPHEZl9mQH#Uwns zS=}Cif<>Z4%%hu?3*>ogi4v~vW>CMvvD38xR1(5Amt&g`fcOX0u?5fYu-1c&=r(wv z|M~xaL>Y7(bkK(k#Bxz^@5)&M)DHnSSYYWJ6uusf>Y(l`c>Ed6?`B`gz`(>%0&0GB zv);S|?!5B6g2oPL8k_a zffrW>&@5K-19^T;*9nj_azXcTfvVe+-~}WPJuTfi_@}z|gKjkIbWz~|UB29I9X4W7;Q8VsQOMoQET|G%)81od`9S9tWAZg~qTpjiU+Ze;~Jk#>C(u$__0+d^?}N1f8Pm)A_)+Gew1?`2lF<#+QG=1r4}72lp~|gHC;%1#cgEb`vf-JN6>7rDyX$l@cScCEs88 zKL+{3)xo#31XM~NW9M%LT>|dY3BE~pV=z0z%b8&79l*mUkkY;#w2oD@25JA*K2Wpa zWfEwa7-D=5oIX7}zk&}E108IY;n6LQK04D0UD(ge-{K6~F?#&a@Bjbbd+;wl#NT`f zw6N6jE`LiuGXn#7eDVH^doTDHK(&cS=S}{p;7x;54sl)p-C5e{+ri(G&&t5ia)7@@ zo}B>{k1YHxzM!=`&A&zXTdG+Z7(nOgv}&<3Ff{z;;cxK-sp@7m0%g~3*u9qUBQuym zE3-P^zmNtMi=ED(!y{I(mx_QoHT<9xg*uPDm=MIy0G^`hy!S%o&;S2Ey~zroeZ0M; z3ZC6=2_BvIL4z#`FFZhLt+`f$0h9=RI&)WebjB`tu}KU(HnYH^*EIYQs5Ar(n$}9Z zSS1Cjz1;$QyK6zK1}A_v2eyc^FhEM>7pnvQ{r3QE5bt(T3Gjd{C;+XtY7t@u?b!U! z-?EU6fx*YJb^?D3CusFY=bhJ)hyhg4ad5{#+4O`*ckK+&X#t>o3Z6^n*L21sk0LTAbPW#k1Sqqw@!3!I=zy>-I*_ zLWy#Y7gs@E?gTG#ZJh{m1uV;Y9Crm}RZ!LM+nc8FVhwlA)n5of>L{r&gxTifMYP2btg>E!fxnd##I!ul-vXMS1D%M$-^vRbqXb>A z&H`d|vw6T;NYeZ*AAkS<|LuqXf6EKd`MTY##aF?#?AJ%oTK0ud4(Pu5?}tD&F@Gzl zAo1vC^@XTvfUA0w4XTJ8z~yNIs51xdDX4>v1%(V=d;?u?e1=iz~3tH7j)bSxJ-@pV`q5DfHdFa z0ZM<}jsl>=7Wn&`!2S+Y042qjC7|;I;0-8H#sQ6tzB~k4I|E-&3##FTK`miW=ip@w ze4Gr_6Cl{8&fgBI7+h4qe)4SouTq*0G74Or3xX3RsI_T$1ss1bAN~TJXVA^+c^$&P z2;mERbY2AQnQQ(jT~Y|S&$Hz~Nw!C~GsnwypgXsq`H}S^)SQ{13&B9$s{b#}-2o*q z7ZnGe&T0WrlZC%^COEJ_#|ghM@MULs*$G}`1jyt#^3!vl&VMf$z`k*F@a;^8c9v_v@d?g@pb^4&A9jY987T2bR6HHu3bGs;PtZIJ ziY~~}r_kKobQ>C$zMXZ@u)GS+DqBGX2Q1C#?Bk-bfSnGwq<<$>JE^HO}`TzgRJ79&-aAYln#_vwh@CBqm0+mDH)Km=W z@z$|NjrEpfW($%av4vIwY)%E`l>O*L_%qcFbU9c(JA!EZGW?ynGKPsgeQ7 z$Ea=L&fk!xe)Ag+pKj9`mrNKuyUkvBJO^b?qI)rsTR@==>1l#aaROCcAWyttcnj{B z{N#gnOdP)*VdrlJolAh;Q(O$X+V+e9xQcoX>My=v`2s3|t2ulufAhD@0VSQzWKeq! z)CcwO0!=B_bAbB=oZx+ZOTjAszmWY8iBygi?4_W4Lik%j2VC&WGl0g=KvQik-Qf9= zYGloz`$|FPf=)dL-NxH`yR;Nsjxd1dj-J0Te*06Czw9yDA6FONK0Z?rIKC%lrJTDd1TLc-*Y`P!QZM0a&dPws(x^P5Zo^V&%r@D{4dO|$$}1lV+Eb|$qPD4JoX3ZG;~mV zqFcc50IVVP9MpORYkt83w&gH*rhtFy0sd{ERd>++laM`!j^RGNwhM17GB}3$bp8j8 zFZlGTPP?th02;oOc)|Pzlu~qa&Y6JPb{?I_Kt=G2x3582Pqyun321~BG~4^z0Nl&p z#|9b}i<1Xk4rmRY-1_&z;6G^6)7Yce*6p?;!;6itK_;3qf%Nv;ZodUuoqo)-lkLR} zu!QQ)bKval(Q7Mr8?=_3Mdd{u*g9VQ3m}`A;dg4X>KPkw{&CnB| zTLdn!$T4_!o2YnnmT^EDAp5|IzrWb#2Fj5pDxTeT9-ZY-NzgIVpfg6n+Z|s_hAII~ zl_+WOG za)G2-U+6;&NH`Cwa3w&I1u7y+K*wlGcy!)J^xa>61=naU3=E#2R#O27ct9OQu_{9~ zcNTL%>Pe6&w7A#~8qnEg&%xzxBPXZ<>MZf?Fgt%M_z0rb+x)Gdqf9_026%4&buO{>dC59<2G7p> zp2s0ox?}TmcF*R&Dy8|b2GHwPNV}yOd7aP8-k+eV5fsjyF)Fa~TjL$5efR!_z)d~| zkM05vcr5dRqLBmSg;W=IP>^w;w~!&_?E4o-FN4Y}(D-sTbhwlmyb$jlNV5h=Gidz( z88{p&IUwNx?mK|am<2~Rtd1^WYXDU|%%DCJ2eiO@?##{rzH%cCyj}y8ccJH6ax_0@ zFVzOkG{kvyv+_gJO7m|P{+6Ghnz#7~+{vIR1_uV8&IcaN58i`LRON5!X8_&v@<)Zg z1#|*{M>p%eli)gh=5<&#U7G-^ra|G=Eu!Mv`P2j4<8OY!()>fPT-u|Tcgs2z2BbTV zCxF`T3<{;2J-cH$KvP5DWdT`Ge}MOZf!0mCGN>|eFfe#&vyo`?*f^tcNUa|6g;|F_ryU~ifDNB%DP=sWPtf+ zALxu{kiE@6r9fvqPl2c_c@CaK_vi(k)(omaeL8b5y!amhTF4!Wbk8a`{0PR_!!H!F zknVpC2dxPE2bx_45AlE&e+2vlUAJgE6BNFn^8biuxBZLR0&<`Q%>JNhkCs*72FN?m zxZPz?Z3fz=diaG#kvxNEw>`M(zV*TiR11JA=Jzk&gVZ1;L0IbqoSs1HU*z(FrhyKx z052&!P^t;?>CUU5y+5BkdQIK0g6fQe9^I_2$3YQbVR+!h>sU~VWbo*Q9&O1~dfKDA zTHr-6NSEb{QdN)<(+cGoUblL5vrat?s?I=WiGa)k54Nw21rNf1ItG*a@ki`AI75RXQYi-1--p*XA)cLAz$?KzzrQ&C4P?e6P!;LXc?@*;d?~oa z25ZlFbp8V$V+w9Efl{v8ZBWSy3T+u?NZ|@9dn8Z`R!$FI(Aa`UCo_Cj0J=UB#W0U< zR)0`2*lqCQ{4JQVN0}hT!ga#p1MGfu{rTY3YVe{TuD=zZ{+H$8(hb}m1)B$|f5Sjo z^RHt_@Qa;aLD|xj3FIhfwzPY}!V5}xB@Uk5cA%cADi=z6hymevS9@@GYgsjf#*Bs(%B$O zbn;N=Z{hAoDgQWLl<d@+?1=3Y(@(4u7U0cf4~U+ldIa`SsoOg{PwO~a2o zdQEwMfVTL6(y%q$2M;4z879222DkS?MH09bdicezU!WZJ{>36tuyuka3qkpA$`_Dt z?!T~6L#@aW^Qh2#zzmrpe|-t!UzmTONz((A+BCj^iekvkfF7O4plhoj{cV_f$8gWi z|KPb}&@?)t#PH~5JqY%J!HdEh;O3GiXoq=kwgPz7ZD(u%DCKf{blwAn?mKHxI~Ka4 zSEiK3x4WLhv)f(6x3?U$`iH*-bf1K0cbI}_rz?kNXDDdeqSOV{1cJ4_cv`GrYbB9$z3lFY#dsqU#4t(E8f{FCzbgBHoSTrSkv(|3e)+PlK{UxM$~e z^cpL|r`x{(ZA!wm@HQ1@#4d z1w5J=7#+VIW9Oghx*SyYZ*yJl$Uo(XBj*uN$2kf-!Qk8RqV7Ma!{XZknsspPc3l8E z4k8J(VHI>LPz^H!!?%O%{4F-1k<`vp9=)djPJxodeb5P)FOry~8IHTQfOlSZ`*y(k z(Vgc&Mf6l~ZE+Z!cV>d8)Lg*>%O1yFL8oJbN?`CTJ?|Y*cfT~lwdDzaO9Dt?w|jwa zZ@L1gN819vld8FP0t0_b3D|$N6F@Tx;MoKZ&=T5C*BvjS+(9!6sA&)!tN&k|KLL(a z4{)ai+JI#)U2cDdo{!I{{^GARIb306G=P zr#Istc+$eJ+vb&LXM91aAt>r}pk6Dn0QLQ#ZAtK;&vsACN4je# z_;kK|k)HSO|4YzmcA)eF-U?u9!Ork<0(iinHo>#k7dA?bYl$5=#uqFE+3DNiaoiC+ zq6-oP4XNaPVF+n@Z82wOc=-)H zPz|nE!0Y)z$eo3G_N@K!_z{wc>?K?mbGFo0&S zT)u->b(({&EOp^`IquQz0Gj3HZ+Q(K9)+8AxuF(h)>Y7Q7t5pk5N)L=JuD+6N>4jB ze_(WM{Q%me|B@M8n}gj2?mWJjW(uAZn*drf82}zQhm{|o8%a#rPk;)s=P&&KOEJ6z zHIxwZVV=ib!Gn^ZgbyBGX9D|~0i58^ft#zK*56W4sC7az7AG`QLNnLPm7oD#n0??h z)9o$*8P8_{2Ua+EJRdTx^a(U@eE@6+*!|y*H1M~Gf?IpvU%c;P1uYz@09$qll)OE< zDYDy(I>;aHaKsNw`nvkJn=G_8mNIT|r~N)&UZwZ;!jS zfKThV2MX72HppZhGk>en|NsAAnuC)+BV2F`Xhaqy11h|r;S8#-M2Akhl zyf||X6dt|-9^K%0EU^bU%gUqk2K0P6X#AC^dw}BZqenNZ5X7o`Cty}-27(v+fU6`1 zSHmZsmgo6fVi*}1Tn!Hxo&>kP{(;JP#-HHuZ3W#Af~da5(AM`u>jh8PITp;N_dL5@ z!NGjhr@Mf|v)f<7v)eVmqth3(HvRzUv?b84rX7&*_UyKMaY6_j!YaPqcCIZ?O4xiY z^Ce2$Ai;<1Akh8kzTIUUzOCO%k7GCk;vbO1Ib!4)UV;i>@VOPgJbF#lj({@o`xkw` zLG_{Q4$tm#0gvw51D>7k5-(1IZy-DbnluKTvIDwbIMMUCJGedr8RvNwRN{fob1BI1 z=rmCURdA5uzADi1C!pcFLPiD#!~ZY#8-WT?*ApJc9l(q2z>E4I{sbAMa07Hk^^upL zwP7CJ72xSLb&qa;=(6XNpqWEQ*vz2^Xy$Ok3!XV3BSSZUR^WK_7Ab%aZ$9n-DW98v zsg(MGoC<35_;mjF=nP%)V%8Oyb3<2nbQgeboZ0|#u19A<2IxMgZ~UzG|8lxN`i>3?8@3J-z|@;w1ww9@J5;Mo~2@a+(L=`@edYcR{s8iGb+|G!YhXQ?P? z7)t=WqdIiMi&=(9K7yHa!lN@F;6*(|>V&7|^%5hGZYI#7Ko8|Tntw|3x4iuenqY!d zd`vIzg9}EakOrMm0A71^5IUF0-vVCgavo-_GT3ZTEQW3XS@sfiY$&w<1!~}hf-@Ot zp$W$ecENxDeY%qiJUfpfkLcbI z=~2)%3cMdc(@&6n8GAtuU!Tqw;9*x-yB}2kd3Jtie#Xw2k1Ui@Om?B z>%qb0Z>VF4;~r2A1}c8RMK7bkzyIJ6fVM(Bntw5u#QRu2E>(W*0k5wh)xGL_kPD*) zd@LWA=zxkObq{MuP{F2MO0R-~3KS+k-@(7cS#u7#Dsv-8O7 zE_nR}3NNsG!yH3FtHKTcJBIl5rfvWY5*wuP=d<3PtipiYCcj~L09+m&cijN$lN@tB z!N@P@x&zcA)`l(SS3*kv-O%;?&t7~y`yaFk4HVzCJ6;@S1~(Bv8F7claaYh;MWBUY z2VUHg2aN@J~dUXCWJn7TRy8ih8|KJ9oN9R+}g{H{y_`~pkM{nr|kK?W%K=Js(8Prwj4*h|+ zXO8LQ;TL;DQHE0?{`+=_y+qxk`4>w`qDS*Dk&^6hhZsxU8h-JV6nb>C7HtC!NeH|a zfy7tqrBZ2+ZdR8aU{Rl5)>+4(Cw;uUa1vA?264Q8iJV?o12=<}zP=0^fA#2Q&4d~V z&Tk&wtdgMk=@xjs87kko6{3DIh!2WS{O-F1RgUVuCELM<`1G=_+6!}^0e1Io+yqt% zci%~nO~96F}EAbz_8|Ae#F$p$5X-cM~cP zbDt-=`yefamkT2l7!c#{`Tm0lK_>6!r;S?O)d9;1_6%0O#CFpFacYA z;nDn`r9{o6`M*es0B8nK8+>*JtX^W(+z3i_H@9Yc$ z3=E|vkQG!1O0-w7m#QOIY|EhH2)SUf!2S~DDpnt$sC|{8l{gw zn{)1>F4QPF3o1`ffXh?R0K@-n;Q7wdZII;x>VE4c1 zeF7TcI0EW*fV(#WFq7f+FKjC)Q|S}XS|G?e4)8_-5s;H)?t)sri1{JZ`rt0e{Wrkw zf8n%Emci5VNXcA~wx@Ug|9^cPnm)kp0k@Bu-&i1*$)KA;LHlFPm>8gE^tJvk;d3>7 z>+zipbQ~XOhbyRXvjP>q{4JpV5U2p=Z#l-uzyQ8iDi*ZR5M>jBWd)0RaHpvAiE{H-&= zEnTD~X8bJ~AS<5<@VDfGhofp#z?)13JbFV9c=Vdi+42AXi}d$W44`gY6s+|Z2#Nq7 zpI+VC9nkq()S-Pt@XEpipzglq;}TKiO}hs`12kgqLH!PJGq8jebY&&z2B`z!J-XSy zL9L-$kli0Z=eKtr0u4S-Ed_1Qtv&GKP6~+O3Yt=bo#}NL@xlT|Nn)c-(ScXv4-DXu=dD7?(+ntfAF4b&~?wHoX~_+k^xFa#-LgCFP(x+zC{N*Lrlbt^?aC;M2>xW*@A!Q3Bm7IRVt06ZYt4EdeJif!BAS?P3p5 zJ#-#)UIpvK)gT88ygmr3kHO84mu#T5=#ch6H|tD@;jb5hzyH6{$57d=2@DF47q z@{Ye;1X_26R9_<2+ILBez-;xYIy|%|rDl)tlgvf(8 zioAbu;I|~`{9_dX&+jZMAg7hGf`*tBJi2XefNpDg@%{*OHtE=lBMMRsK9-+L_rJ^s zg*$w`8z{Ypf)2p~^+Ca9zDM&L1)pwpO^Z)-BTi3*2@r9ml|Pj~8t*K@$>9lBPj^bM%L`~1ZjMRtbQ4_>%>fkyO@ z(<^BH2{d5>K4t^dJBvW}5$I@*=Km}{{4PIQPgb&jzX+-u7+Np!_kl~d^1r3(^=Z#xEItp_2?`GUHP@cqqB5IXXu1Z-xi-v*9EW5;Qd2z{(W&w9^7>W zuWWt)qT>Omh;?1z(R`Q#bf^t@yTfI01!Dc;^i9xg&oR(x9%|sdH=x}-B^n;xr8B@M zy8M43naKfKfw0%}IExBspvANKFH7l?*Hgje1L$z}W1zvE#i<}wC6A!uu7)RlTmL)o zPdx^jYIz5`a};zsHt0MjpWfUZpc?=UZ##Bg_vy@?;oEt%)3w8;(|1az?~2!=U~^%X zH6LcQj9pRZ?%2yB?=i!(+vb>0uL}4i`WJ#Xr9eH<9pIG_Pe511Funmf+oQX70chWF zVg}enTbo^{FhY!}-`Nea=a);j?-bw87e3v!3%Y$*v>qr`^#omM(7@k%7gV=EQWtn6 z;vR?(nlgC^VxUfsD1bt+`ACFI=Ltl9g6;EfJy6Q((DJQxnQ!ZX5>V)t9%Q`Oda`b} zNAgL}UX~Nh4;f2@J&!X$0`vffr{#f?`Jj0}xR8M7afcsZY0CqpFJ3o6#?e5Y1Bdww zqZE+$_*-uM`~M&0#g`KQ|Nox=zAmz~qdRm$w{MG2x9b9MY}Gn;UVNDYs{cGeW9!`x z0wCXkN3dNw&w+LpG|T`0{~zo^U616G9=)*#e0x>Sd3M`*HXq}7vFy4O1IX5U;Bhb4 z120(9IT(B`pOu0HUUYn7XYlB?UA!4I%YE#HC1~Wl^Z1L8=UEwE=(vMUNVT2Z3%Z}< z-3wW$+|~1-QU^J|gn~LNUpzXm1$X}TXngYn6yBZS6G(j^XD9n~_JWQuZ8=b)#;*xJ zIFw(r7j%9szh-Cyzh>+Ne$CVc{F=EN_%%xp@N3pyK+136b36?X`1Gy?UEOB*A9OBb z(}w?`vs(pxIv;^1ds{)l2iiH^+X_0|)1$W+RAnD;1(Bc=YL2&pw!0XBoz)6DuJZ-s z#{d7jr-IhOcK81H_y2$Q)<6Hi_e8cb{0EI3S15RNPX!(4is+)Ncr+dX`3#(1Vh?}6 zz<90s)c?-ot}O>jnR`VHU;J&BV|eky6;zl&+ArYp5mYvU!{;FW9hXxV-Aut!|{tsCAV;PPC z_xf5dmCAZ_{scFBJUYMc106}{(dqlaqu2Mti}yz0^7i^qI%kIquC zd0oRutsP|eF^sH^?d-jw?qIbi@3fpJmAq;`T%0SsgVMM z52%F#YLvZb7y18x7ib8z^#EktkKg~0M|UWw!WB`~U|?V<<@9JiA^={5_reO~2-NzW zbo;j&BHPa{^8dfb4A5;J9^WrCKM=ub_dX}I0D!coNVne<#r}3-nEm)HcXWcLPe>z} zr0_m!fb3s!Vf66!!yVqI9FfoO0mnDUYVi1Q=>^Zut6<+dhWK=T^z8fs9w%vjgA((g zlWRLmFF<168pS2OLZCcTsR&vFk33B40*!CTQ3&99rjKBIz=n8q-UqLTe6J7k)hiEB z`Fi|?qtO5Vork~~to2g;+ShAe@PnL=7)ykwSE&0zGZM{jP%hWGVR+!U>mJYmDCi8w z4$v+S(CPnIK^K66x=k(M73AG<93GvqCz}5=@wb9DT7nm~I{WmNUH}bu@VBmGU|>MF z)~EBm52zQBdf|l~*ujs$Q~k$ZOb`TlzC?t-12q5d(H(mNq8*e6KqudKBZUZmE9g32 zl)-CoJI15ecaKMJ=m}7Z^SJ8?a2u|-^uUWRk|LmM1t7N*!c1-f9URr|x(C$Y*bVAT zcc&fzyWJDycCd><=5)qF;>xG<(8zJJe;NmlkSs7k1+k?&wfBr&R0X&DV z1Cj-=SUfcc)I9~QSS&DRh2&>&Kkg~C!SD~9qf4|`|!=u-Qfe~CzLHogw{L*XtZWXBU@)Xoi=Xmk`I%uF<_QC=a2Jlq7 zN3UqhPw=3iN3ZFF{UDXhFD8K(B3r{0Oa|@B>oqOir^N80998NEL~7b9MTQqKs8X?@ z_E4|sw55s+FC0;&HbJD4LAunSQlNoQk6ux6(3*l?Q*V$IH$)1w@dSLS$Vrc0(d`g< zlU0fgFJHezK28m?ejU=!YW-i51{%gW_=2PPL4ETN@p|*-AENcK%`cdme=wGNftK}x zxW z*7s=q_wWDzdj589*T4TAyF)oVJO4R$*YbFFe(~t#G4klV0Iv8B33ynZFVb^ieBcOL zx7X_;$^dSWfu@|G>7o&|F4LaB{gBJw|GhTS9-Y5^ET0#>1YIHpN#uv`vNP-gISI5+ z$FuXOXD6G-aZtg;aNGgBm!dO*$MC@G*(lRVi1iKNL<>Gmqn_i1dM)@c6;K?Wd?{7S z&VUF5kbhsY*RsR**Mr9vU~9)A1*C*ex4z@|qo58rKe+t!JouL1vH58|=tgAU&NrUD zH7bnzKyGq1{QrXcE<1x~Z=)ezXP=dBFr%mwb zP8R?b&M!en;X%h!J({2W3+?ve>2{N0_Tup9{HJ*WG~qSFqt}Ol5j^dE3RDagx^pn# zIG?<$z0>D2J)Oc3bxVsv5r<=Je<;L=$k)9E4M*cm3$8KK|-O;;r-&ZWUOz!gf3Wle+QR~Jp9gXi5HuK}qG$c9bvb~l^= zg(YZY`8zuU0}BIx%Rxubc!IlxD`@+{Z_myvo}K4hJI{6(=^n^XT?n0a`QMTf4!x^P^*cYv&8c@G#J7 zYV}K83@De#l=7q9$n@fh1*nhYz!18V8|*xApnHNk0N`s%d>|J_fab`-T|Q7ovsZp^m=(2e7nO0JdU@X`1c>QRf@qk z*-65&+eyTw^Ppqram|B{%w3@6B(9prJ(3T4^qL$6Wi*e*fB!+3w6*^Qj}aUb_W-q} zKX^1gWBBm@zlY{0kLCv-JS?x2h0nO%kH20|d;0HO(@=EDz)&Kkq3?78r84L_uPl6<2103+z|bkA;{lOCO3KP-=zz5-=( za8yqMSp=FM>z)9z36wcu)ddrO>p}a!|2?duIQUz)gIK+D!9C}0F9F}q7vMVjzTvkQ zuex~|z@gf0Yd!-sQ$P0tX!!kj>kVj#dccxcD`>;5XE%HIj0r3Z3~)Dq?`!UMlkn;M z?%S=S;?eC<;d$^czei{92GCI|uZp-Bd^*2_hH3BTf|(wjtvf(63jJIRpoHezT_ym& zQU$ERqkAey)}!;7Yv&7(-n}5#1p0J7%wo)9c(L|8NXrogkKVnY2>0x4lK_VRdnedU zFaAyeE#5&|C0m*aN}1qXh+OW$`#(^FI(tEOzIb<(9h{!J!Ca5dW1!RoiPL`2_EuNJ z1226*(+ddw%|0wY7+(GcEgO7b`uG3KXuH4vUnbaryO7ZF6OU$lhB`NJ&IWgd4R5~| zg3li{A7=Ellu@aZ1r5z|fQM#V|ChXY;j9N*h!2she+;g*LG>-_bRyRJ%Hah&NN;yF z$BTcupx~%hfYe+cblG9;v!^Ka+jWRCffwiAvOzYG#{M|@^59!G#QXq~dhnbo?~6xX z5)7dA?4UXov`Mt}e+kcvvtU8Uh%aP@_vFi$rQkz0QTx-N4F4zCquYKrXp{ofjNyE7 z0i?M%LIE^S2)2ad#a@sQ<6+2D5@@~>RNsbz4v=C1WjoN3SG{vV$r4nCHNF8Q2IMjW zbl0bp94HJ}i>HCoHs~-p&l9i)?|u!m?M$HiF1lG6z)C?2R_tI(LDknp4OWH;p&s3= z52k{Q!jLZn$%A}i3~CU;vY|~0PxFr$NX2y+G@la=sS`l+Lp-46YOJ6sAo%&z9^FjM z59FJFa6xr=c7E{aHh1X`=Wy%>owmlmjfHImV~K=IuNR}o#TTxYr;4IoJ3-gPLc+J@ zK&g&PuNNms!pZP}OXvCKLyVw%87_Jpe82%>Z{y+f;5=dZtMm<6-?kH<`S+Y`KFHW> z!{u@Lg=6PWN6TMD?9D$JOOL)@3i58`Byd%Jem+uF-l~o^J_s5g@#wDi@aQf5(;52b zh0Fi{|C@iXmKS^UigJ{xFmxX9NM>pBV7y@W{{bi+gYNa40O~j}fHrP}&b?>k|?;6;zZh9|oPntw5ub2tBDEaPkb#Z)4BxcL`L zDKoc+1XNM!U1+&+~6{7g$kOBC*1uM5WtZr}+S5r@IK!_*J*N1Xuu89;{F( z6}KEU|;J|w(Ad>#z_D>zDdRFAmq% z10`BM-J<&aCJcs`!0zn4=-F#>(j%GAqub_$BmXuYF2++Hopvskhl-wnCdnm0T_eO< zD&ReDpwm&AK}96EnmCDE#6tRGkhwnaPFiS_9(?t2cLV6!Pf%(p@JY^7@a(+e(fQf6 z^)3IrL!f)lK&|isk8TGAXxb>rX}MII0hKAq^JqRG(Cw|^({13BT&>dSd#2l4$D{c) zBj}2-&U>A{CtehIfi5%n!BUb1)8q)!BkDt{alUhhTpUs^8lw`78D-h?P$z8`#Ufg0<-|KN=t-$4yP&=ngk)}ULR zp1<(f2b$D5{=#HGXvIM60np*4o%dfHJ^J^*cW;R z-TiLXS)k&l*L3SFXtDNUqY^8mzVqn(+3WP*qdU;!;0xyF1B~5X9PsOvEzcLndvptZ z;ul~!1i$OsAkBln?tq8og%S-=cpZFY)BK3N`4uy$oRISXkGwE2Ff@SXL)kq#FM#sh z%f&Z%LH!Yrg9n&Bnjie}XgVsPx9UH{ub{EF5Rh+!LH-B% z-12&HnFq6lN9Sk99ZH~)Gw>(`=$yl29^dbI@OymlXg#n)iHU*1h2QUhNAqzG!;>D2 z-(DphA6x1L$l%*o-WAtLlaZP(;9lAoUAq@y(9ud<^{Cm|vfHaqb8D zdQ8OHPu7Fqcu51xD( zxr`6giG$eZ(Hk$(@Jyjp95lcIIuzo?s-F^|vo=7d?9pr6Iz^G;#k|!L z46kn?b*UzJbhCr5q68%t0T0Uy^^hYh+q%J(gV0Q9+=Ht3O$wm;0pw7~US^cN-#*>x z5+JXy{r~^J;ib-l9-SvVzkl^;y;PFtsd*LDcKq+d_|n7jL{Y9!=WCx{Tb3#n2G8cd z9OYcEwL#^#Z+DsmXw$_mQ1`>9^PflaYmOK4cO*gQ_;Hj!1WPv` ztS`UZmSg~#1Cm4tgAP&M)dlv8+YG2*Uc8h?+CKsE52*Y!{10krgKjuyU|}d>0j~gR zKJKs&G-384{N4Zm$3YD$23RK+s*t~Bfib8r=`8_@n(n}q-Xg}%!j#Sc36E~knJFp^ z4GB6QJURmujyr(5&I~6HgX{xMtAj2W1NC9SL)w_**)P5vl>%KxaREGDdd#!)=nEl7 z2?meu*bAUCz1dlV5%tD3BhY|0q!|bs(*~D!pmU!<vSj8C^|DJT*S{@`~!?g~C!9&`fX0grB0 z(=HPR-%eMJH2$Q6j>la=ZCwTz{_QpqX^#BYTn(K0x3So@94PTIylr@Cry?UKL-Pw~ z8{u+I5B|jmiXOX$II3!Y0tbN4GopmLJfC0H9TfAs*e#-;OAh z=5#v?cyvcAv>qsN^yyVO{8|OnjsRWW*)5RP{EN4QyYbQA{|pSxzc@<+z-t;T@05sx z>fP@Qph2+G%b-f}^+j-fjS|cJtjpqxrBv^Mm@=eV}=a?g9bO zs+zK89^D=ap3TqxfiAvne)tcuzX;q|YX>#e7)v;tf3fhlg7%MlSRO2W1YXE;+!ZwX z#9(;I@Fc&W>j_uG1K{!Yt)Lr6`2}59r19tbE2OWvJA&oyj_P}x13!p7#9^I}N z_%(Y$3OzbqC-7^6??>g=jBR)^yihvF$VemNk!j8XH1+)pX*Gb$1w6Xi3hbm+^DL<{vivE#N&#-MlreCJg-BOc-0gm7MeF z=H+cSVc_4+<7jxmgPB*O-Gt#aA7s1)bZv#@vAR_aHjMtIpFFy~G(5Ul4uaZT)4w_B zaFiN*Bs)krHnTJ^zHS4RkKdehIQU!HK<)q!1hF(&I%)9tWr4N3bFW9YXlNVA-6l>TcbgWpnJ~PzhPb=omw&0UM|ZG>M>o%*=1dL7Qc<7oKmm{L zKn~B&Ajl;WKAk}VApbd99^mf-9l654O@yuCmviYM$L5uP7#J8BUq1jhNm1uheLZ?p zKR^cr7(BY2K0SZ`q-|)cegC5O3JUBJ%mBalsZNoV!N*de&J5I~_3D&)0BTZ$ z7ycslHG;Ya4xq7S$mu-q!C5)>rSl&)aHC@P2b3lQ*gi=4>=^3UiC8`8(flR?bh#Ti zd-|S0E~sW09%wyTYUS`Pl!#h^HBJ`w?T0Hl$eHo>FU zRlq0t<9<*zeB8AGR3LkFx^{pr2?n2g>N>%rn>D=|)DsnW5&xf!!SFw*iTj-yG_;DS zH(#hc2OZw!JE6O@!L#!KsNU(W?eOYl`S4m1T&{I~Y(B=}!+6r8n-es62O7BZusp=y z;tuK;|I;tK@6q`a)D(Mt@5M@G@L&<7y#s3Bg4f#_p4tJfPc)KxNwok51PGpcQ*4t8-oyfp=qv zs7QG9^12nNFo5#{cof@3MFMok*zpF?Kq_ecs7Gf9WVF#0w8Q|i?iaMg09u>R>c!(rprh509bgS=qnw2HzY(o&aG7s;tz^(FucyNC3ICz2?Tv5Mnf1v_)vI9e?XXj6k&hMatweu;c0Rt+UL6*;a%flufA4j0q&FWkR^Hqq8XCyrnIxCr(tVvTjF ztw-|_4RE@Kt&?%=jbPddG8Ynrnm0AC`Shmno_{?TaszvB>UFS;;icEzFU%D&;s>;J z7n0{e9_H}qmiu~%fh(OkO&wC-?&XRjM*-~WpGpqFis zE3Ux(1=kfm-8wfwqpcDi-Ju(Nx+_4p`+=57PA~)AMO$J6o-<3n(0ZW45WJQ2Ie4+` zBk)3W*Bu^~hf6F$gWsV3{RYo&H-*>h5dCS-~%_`bt!r)!~d!#>c8iPz`g?SXxuvEP^5{`?2Eyg~QQf(HgWOMkpb z5(16G*8X_GnZ^lPj<~!VG%xpJnm&sE!1V!mlpLhd;oC9B5}(fRkXrEII|Wz60|(y= zH2(Tu&%jU~+;X7Azw>wJC69y86g&<-7Vu!ajrmS8VZDa?XF}WMm*4PF)uivB7 z^~H;-ub?q<*B5ZZ!R0+@z2=kyFOxuvrxCV6+jpR~#vZ-4$Gbp>OTr4343EyOpp$FS z()f#A!k}HY|M|hUfVmpJg_J8kmf%x%J$hLmH7G%jO84kB^yjGYaufO1Gsti0nA|HZ~Xu|NTr)~L!AkOV|TcON3X3{mm&lIc9Q^b`z52! zgyDtsU2z8Rtpc8%$M{=bfp&^@`-ASN$O0vyZrScy6HpI^#lwkz8xM2KN&c2&p!DuAj`P4>~znzJh0o0WT<-140x8scbt#6na7(lmx^0yoTsq1D92Rn)3Wg5u8 z^5Aj^X5Ne9_n?hM-$CbKp7<;Y?k9D-cK9T}_Uh%)@L=XWTw}t}V9DUwd4|7LA2c@7 zo!jEr9dF>#TRX$2vvkIbNfnX|E}gHy2XJ`wn)Y{smX#cI?7U%k;6C2xa8D6r1 zk|RIpUbJ02pfa=9bP+`VizTNe8NmGzXt@Nk$D`NuZ70}xuWptX-2oDY2VTU0?AVVu zk7O4pzkBqW20+b;0hu!&ArCR9bb(*D$_r3m^^WA<|DY}7Q$Q{9?$Qn514i3HU5w7} zFV;ViWOxbMhl9v5ApN_zAa1?g4t9)Rx6X?fUrtGaZbo3_ZvoA%f;wym-z)I9&IOzF z%H!gz#z&ws!K2r714NhMffoyIi!(saQegm@3rc4%qRze|Nr+o?za);Z-bnW!rEJI z!oa`pBIu~McGx(LBOfcngytVC{H;-p3=EJAY3kpu2+7@s2VN)${QduOImABDDOkI} z?Yq_kCCuFc5+1##hDd6^@c;e)vKp)woDUqk{Z&9lf|IY|0iRyhzFsBJ;VZY=6d7I| z1F7}}oxcuRf7NT+-UjxC;ei)9x5OD>BIKkb!^`PN`nugYUSCX`@WOf}XrRaRusUdgIcPZ9@W2apkR_m_fIYfd zr7OV(zh3GIx(}lDf2px!cc{WkV^9|AW}R9Fk!=U<6N9LH2`V%_x>=LT!BQ_lqt`F4 zt^nH-i)_ono8k@kAP1T9$G&%?^_LQ4Xr|I-Ot>jLWh z{OP<7YK90jJ_H?hTbkzEdZ0AXvH2lmX|!i|h>Ae-2?3AJ&&^HXj#}r>&O@M@#If^d zX(G5XDUWLW4@!~cL6F+%k$^AbNe|9zpqpkmPh(V2u>Km@=#L{_%m{&}h@Q;|~0-p!T0fcbtGvcOGa3l*jiQpbNVBT@QP7x?TXci$P@- z!z<8zASEiGl?*QqzXY|x?L2x*FM!kfi=tza44~6@z~jJ6!Ll|g9=#%dY2{ z{e2pAqgXe{-v_|U=U!AD1$iqPJodis1!&==HF)FEyB7&y8Kk|Rr4pchUC??g_Aq4E z-wV$N|Np-@A_D4ifacdb!EJqLe*=`mJUlu}7a;rP1Ze)eyF%c_{8ylJMruI=#Tz_& zO%IeZF!*%lZt(0p25KU|5U`eD0H65`?sVMr=w$)Ng~!2{cAy(%AZI5#@=rbP(R@JM zqZ54hFnC1Fm4DlR56$DC1v?&=f3S^;{V9Fj_zW^C_61aBwJrgz*zHYG;fM7qJe!|< z04<(Wcx?h2ck<|VUE$Sj^W#M~4Kwr3A7L zk-r60-#T`KZhU$O8uRF7X%z?6)dyd&cpQAd0vaiSEus48VR;5y$eux4K4lH6!9mNX zJe!|=0BxoQuhZ^zJpkIK-RZjFwHUaZaqJdRaqi?<=h=Le(b4j1akxw83y*^jSUtN- zSa?7&)FK2j2y~hW==>Z|r||!a{TiU&SLu${10`IbPF?50)&rGWJ-b0&wEvxMloei280c|@z^7Q}z?$8~bt{Yk}l@z!d{)fh!ce2So&>ZKL_n^J4 zKR|aNH6LdLxx|O@L3aTQIALyo56UL4J3Kn?cNd8G^kxXWSn~e=f5+}p@L}0AAZ#9x zIXw`z0Epf2{{MehYa5lKS*Y>s3c4@3H}wWmRKxpQ9+34%pgAsZIDy>%g8k|L|Dd4T zkv3r`sLk*av>g0}qu}5Fi1Hs}45{@Jf9qsWWOn`r9e4mu4d5Ojq;CiI_Y31p&_c%JFRYpP7+yw!3erFUn190^!+d&87d|v*02Mpn^PIsc zU838G$D^~{U>|6mut#UOK&QLJXZ|`bna})nP9h$i;vSv8CqPp-Y5WBT{L=WZxoa5y zcj-wCbX(~-lcQ_-grdblVzbXTs` zb2bK-?rII6&QD-_4gbHmz7cAaPj`WWPv?KoTDjtlpksU7ID9+pd^(dAz-K%_E>C;^ z;`=i;2A^(ak6vd1kK@kZ2`7(EXAj427Zn~4OV<lH> zTJF)!YF7a20fwlsIClG}aJY0cxO984xL6)4b#k#hS!xR!?epk0^{!O}U3RYWLY*I^ z6LMOCV|R#(%(p|#rRCkhIv_e6euOrp@8Z$Ts-6d)k}OyZTYD463|jfi$`290TLWtX z+d;&?=YrL*hKs8~#S6gV6>xL-AmaBS;tp`}Z%knG*F(%%0ypO#6WRhV$bIT4XYWdQ zbVq^CGP~iCeA&bDGJoqOvA_SDe=FDdd-T@ccu}1p398*aI&XrfDi6I_1s(?~z2Vte zqT&FanPUYVgU$yJ2GE!o=z!4|0Z-XL7eED7=mgM#0LMK$kG-g61nu&8|KjUEUeJ!~8K8;Tm;ZPfz{@jB z7x=b5apa$R(6{r4OXo|_Nf7s6oc{9vzi($62dLol>|_J&8(;$^){;<EtN z@%1qq!|QpVc}LKpm98sZJb4Um^sacl@kJyL(s(+!tq5L^|IIPf6%?efbF`b^NPy-S zKw137wFjW%p&;!Q&(7n!K-+o^54?y6*T-QJ;DfzE(+rT!B%J{Qpyl1W>_OK9bh?4M z$)-@15F;FSfJVVk6@#|tf$o1ZJmA>uuEF?%8K$G#^#nv0s(N9B;WwUvngwAJ5M_=# zK;zA*ib0d_5W`=rhAK8Z2~iF!NWp%Bs%eL+0WAptoo)a&45A#&gzK5e%>cf%E{ows zGWedVFbSV-*8|v;BDq%sYCL%A=9weZ$ot^oX}Hm#RsSI8cpPT|g*L+r(7~jh-7sH5 zH9FKk%p>)dEB$pUBIWa0vTxl1o`2Ayu zn?dQ)r}G^o<@j_ycQrh)6Es#03&UNY!~@ck#qi=Zc;YWu0^)j9PlBQoq|C9`jmfe3 z7&zH{gC(0LsAUk1AS)nKThJ&(@LVLy@1xcV5Aq07wH z34HAv%r&S+BNCcBlVkI7a6B!7E?^0zORDnX;$SEAch!>7~tM5ph8PS+!# z>w;%6Gcb50yDETPy$h5LK#|?+!@y{Gz_;^+Pp9vW7bV~eK4H}bSS7f<3(2Uv96`>6 zR2N=Ql|J3BJA69dVJHQe4~j=vLkCnpd4Li%q_V(J4_a>rQUBuoT}X1knWjPg;${a8 zM#BRy4nx&~yaFvc;IRR7Lbt0z^9x3g8L*t#57h&SP7IgWAv~E1RS7fFvDr<75ma?U zicClm3Ys{64$2YL5-&{9G=O{rnveZv0vaLp+646kfdp2^mll1XWd__9b!+33KPJ*-$@ZF}&FL8KS45_6P$^ z9^|aZIR4hHphMy|&TQlo(#D+W;zyUxAl?KlkW7*zKy|((AzZqU<|( z-+GG~c#Ng?#4b>zfx{2veNge^+xg>#0nCxmbPuu&w9n(K2?My@;L~gSE?p549(ESz>#or3LxYY0@IHDloXn5eo z)Z37-fCxD50Bz+1yB`)XyY!#|XL#U62263cD`+kstPVLdfIJWKo8f^Mwos)W-M#`a zqnaH-Nd;0~f(tUA&SLcH8a{rr3zX=5JAXhed1rXw#mid|x5CT=huzD1@Z1hVx2wV~ zP;CQK@6-9b`2bQ9UxTI@YqZ- zV*_z3NGLdzO)4`I^u7Q08ImeM`Is?HiLG8CWK(C6c2hd zKl*@s)UfdpWIXl?Xk}q53nK$V=MNvyh^(vOe~*I?n85?Gpp_G#H6Wd?D_Z~8hrccb zjjM4?lmaEXk_Zr|x(~E*A#{aDr|SmLEso&LlM&!?xd|em^&k8#paaxBxF9_-W!KE27a z`JV`X%Q8@=Y<|Px3fjr`2(&Y%7kuE8Z|6(!z-GXUIUiXV;vFMAJCAra|6?h&fV)8s z>IR=q$k>?xXk-F3fCfqg+b%;EBi41ZGJqEBIWYLPek+xLYktcD^}ulkP`}-y8+}hgSA*gQGzr21-BAQ? zaCSQgbWZ?fsn$y+dLG^2#dd}VUh{zC`v42pjYWs=e)NJ0w$NIX85HZF(eD3_ zonJjWuYj&ra^2AFkkfjgq`>k+J!mD>=6B!@kXG5eG_>7(NMdep+v}|x%L19KltKS=sX4J9J%Jhj6RU|u%qSO zl2p*Vhe!7=0Zb zxNreqyKrj?tN?8SDS~JNtAD)~w7(2#ZA+;imi2A!0^sH~Xv_p^jl?u5hL_&|K_}OO z&WYUM(JT5Dd>$P%G%P@Ow!8(cnXmhSE&qVGc6fAN19f=+f=anF!7iPLK^yT~-ZFqL zxH{m``3o8@9^F9#9^I3`sqh73=?BMN7ZoOtZZ837E72qQun(wZ>|r?(lodAtIAQAB81<~M2y1NNvlt=d@P$qNHd;nTT z>Cr862y~vRIJj*9PKO?yzg~jQw1c&;!0A8Cv-2Bm!w1x(g@ljxB~Ud-a`=E6wB&}5 z;Yoaf^XoVA0Xx{k2b6NaLu+3=I?n}zi{j4T9^DO~Bmg>;)TMg^DD+?W{Q{RqE}b7W z4}$t|9@aBJN=g*r`4M`yi6b~Jodi6rCx8@`z5uU*1q~s?(#cEkx+n1YwjRxO91JC_ zh6fHq$N!;sJ$`<{*CEBwT`U7?eD;cRr+`+l95g)eLjA}8|Ijmg!0`*&p9)^p0a~gI zS&;3~=?Xe81Xk2|{rmIZqZ_n~@%HfhWkk z5@7R5Z=bW^xE}yK2XYNk4T2{>HGI0Y&}zcw=j_K_kAPb2{H>t#&A|JN!1M9l-1|VY ziJ+z659L8uCHW-(d~x9zC|%S_yqJCr)MF9$Xs+g9aO^z7KjnZ&H|RE{Yt7H(J(~YX z^S88uDxHI`xDP&HZ+^tcdE($BHqJvGp@%(sOAq^WzTX8ZKVE>2<@D%f{dve3a_Q@P zr~e{9JiF^Syn9Pj7+)lIf~sefbg&v^Z1WKf!vjc(09;>zPl9Xt22LlxMfh7nz$$;M z@V6u}f;Pf#`~B@OBY!LCN?On6|2+IHppG-7lm>a!5xi)Ef1B$On7=zhcQikEz z^~j6sN1+~{cl7^%{%xT<96OJI@0tVeW#DfCt;uXY_29Ka+60*P7mHzfvX1`$zw0w- z%XQ}w^bq(5np*@H`Y(#l|NsB;KdAEs_7BV)$NiuN>5EX9X)++wKthh4M_#T*^z*>8 z^E*L1NF4Wr$d{m_U-;!24nAP#JkfdRWdm5L0|T-bn;$%AJ|PP7;I|`C5AHnzz7h%) zM5S)KL>U+u9QT9Bmkv<W==msq}`3^eM_$-G6!|VAkuDyr#zu@DQ;57)K z8@;}HbpC_->as`k8x4=n+8rqQ5VWNWv77)EzGr4}nT4$U?TK2SIGmcA^cC zRc=$}p+~zv+T=5&KLKe(gU;Um@00urw1DUqn*_tlRB-DRe2zJ2aS_NpKFNSc=$NC)INJ8U-W?N zrR8sp1{G|eLnfLlI2c^J(-iny+t{of8XRhjm}mZ zQ0dd{rqkJK0ooVY>mtMmTDsKn&>4;VEud3%;P(9n6{+103O?Nl z8lD&b82*QLW=dE*yX!$as2%o!hF?7oKIMP$A9Pl6cd!I#xsc(>;|!pZ)uVT70O+_% zkVgUpVEfIFJ4k@;p7!ZXPykJ>gU+&cmT>HLGXQO61D$Qw?RtP;&~*lMe{Sdk(5|)( zKApJ}Kue1zcyzipfOoWkjON#z3fiH|uQ?ZV`t*xgpxY+95i@C^5i!s>GQ2m>-wL{E z!=v#CC@wJTkpluR7k~>pQ1W8{9l-GtR8c|u6X5eQd^&qUZSEKE4}xl_t)QaTqkAt% z2((D9vlSHbFPwgW)&=ba#qc-AlnDy(OHC zpuC;Y1UfLOMvxc5z5s6(dU3k(?|<+` zs*wBv3ZK{W5k0TKe%3ll=a~G42;PAW;Axtlko(_#dRdoqDM3bzVQo~<(h|_Q z0=;T>%;% z0Ur$D(b<{-DqlN~d4O9akosKfpE!7xwh+jC&`RIrSD=ArW-zxEw7J2rQ|AY0`LL^{ z9eYY#L`kU{};Rt0rJVF4&6kGFzC8PqTE zKn@Vlcp)NCKrVkR#v2?yRe%6h4n5_PJ=Y= z{_p(%-!oavvl}$(z7^yLP(%ITBjy)Nr-3$iK?dr^UN9o*Jh~IqJ^ zj-5wd;`QMC|$4%w70zT@C&PH=q-y{j8T3>c?oTIZ3QJ9 zpH6VotMZ>X!^?-Dp22Zfa2fit2r=Gcc>DDtNH%#H3feLQ&M_}tz^W0k2Ge*AG>B&T z6x>*Yj6Wf_PmxM9P&Ly02K7o5&^<^ybd+fbKN#IPSUvG{VEL>AK;?%zeTPkW^6G0U8zoZ@~QqYQgdU1|cM3&G9e|4{kE zAo*fYL+jfS_EHm2)&*_K?E#0N#S4`HSL?UULxkpg zbhAb}LfDf*=g>Go*r0t>nGkK@eN^D_CrF(Jsso^NdXU3$P}-x02S7W)99<2cKzc$i zE*}6@bD;5{7bgyYLKUfFURnWK42#ySfTTCi&Oa|IN+IRtCQy0#x(GBR6M6u&sRL9> zc7B62>HoiA{0WX&QCQcF$2a-O>qcn1%QqQxZZSAMIv>3V`z_A!G8r_667vXUgc!qr ze?2kf#Ob-mzvrt|oViT2D49^DljFIKFR0Bwmm02;soPhq-3yFve7 zoc#_CGf59nV=4Jr>$eI%&)yOho|mBW7(wMVDBK|Z)&HRWs_ZXuhSzsrs67N13DEOO zLFoas>KJqmLh~Dr7ahf**6Mxm9Fs@qv6m~r&0$DK9n#q-eo0k!}-e(urDwt|tr zWix1+_Yin%njm;)p`w@#6DgUhpwti=gdN zhy08^0Eq^pFO(8z|PWk;_#RO+13q?2aoPJ4$#OEcxJ)l;%}%w_**VBFff31 zcxc{uX@q1B*dLvsLgnHQkMB2Lih<t^tbdDxCJW9&IZh5&9EbPL-@Z#|yUIxPhFK2)% ziO%CMt{mcJc$o`sog9C0{17k0>&4)Du=K@?orgecze`_ubRK@)@?teeA!tAgCOr!w z{StJVJ1EvXI**@x*?5ST;YAI|sOIhfiEamli?5m=F~0Qu_y0dKzZW#-1NT2DtvMp~ zhi`xaqO%m`U@FiE0c;q1(R0W!HmD=q&EV1e;I{{)+ghRvz5@d^nGQLsgTJ+1n1R8g z@d(IBM7D#cFHrv)bPol%H3uH))BvrM>bwCC*JcaGQkDh}9Y%0psr5kVyW`--9HOkCI$xnc2KJeyx|@co6SF%_*+5qo1hI7629FfDjJ>FeLBB^ zCh?Dh&i_vio#DuMl)uAGh=HLSY_>-?Z>o(6gKM{sih+ye3(!GBf{y$?M;)7AFhZM> z-K>voO&IvMvjl+7N49iPk>PLE69P4PZ9mzXFnG)`JZX4|e;W&X%Yjm{*Uo7Znh!C0 zB%ku=WijO6#$wTOphVxszx0)7H_N$i4myndEq@pp7@8|o{+C{J>C8}heF3zGM5X!1 zfBu$3puvOAqo6I19KNkj_*?n@gC;-Tx*A^c>8zb#c**0qE2y`?;M)1lwe$MRji56& zCV>4vofmZS026=f6wvfrceaE_cd;5GO&pyDhjThA6z&yc64nfx)#iM@0n@hhBgG|9@!?E)*c;H^fZPcF7lkd%^YB49D&g z6$8*kV!fj0JrxF%R7I0#%aEHQ+lF_JQVB zz{VRv1;B$qkPh1mIgnU4c$@~j7s{g(JQCKu`wIgD1M_as3=Z>d(0$s>yFu4-y@;z} zXXxGy+6fI+-VC}l{e?Ton9gR<_ziS4ioa#r<3ImFo8~=wYY)Jip`Cj{V&qFw`+q(w+9F4V6+xjJ_ZJG;$I6oa1gYb zw|gz9CwQz?`~Uy{4A4a8(m54$lozyv`dSuRA2t7AEM;-&c2x1`_JkNWiH(7wn-Nq@ zw5$gmO7?@f^p;1rqlByB6VPsG7MJb>mF_}?=70bBTX@(&)7XbyG#|I#=I{H#%D~XQ z7i0@)VTKYLXmw{Ri0je47c}za(JSKM*?G{TS7ds3ZHHs?LB>ua(8YVloj|8vfqGJ) zp&XaaUXY$nn%H!b9=#&hntwC$w}6(~Hy>y6nBkFp+v7Ns76SuAXKjaT=L3&U znPV?OV~70m4Bd_rKHY^HE|9@3kIr7u$Xn-ePyu(i6WsB5@$mcq{~pPq9Uk4jGeDU+ z`LItnZ;QDJgG)DfM9ia;<)UZjWsh!AeoIi9#^dD3zm0{lvo!`(Ep@XhTADC;box%< z-zLN1(G9ksNE;Q%_P0}{q`v3oB2KX3P7X}9JZjo!CfbdK{ z;?XH`5LDoSN<+uyBaFVu*L@f-IPq^2(P+8E-|7YSJ=lLxUwd}mb?F9sup1oBpZV(? z4Y~s@S`U;MfY!Hm&jq~=mH%U2ajHsW=n%oku?5-3s2Md>#kWAu<*ACurn~E zP4Gwt8{q@d9hC%XoJ=Fc)-8|Pkx+jB5P>*g4 zkIuayTfZNNct!Fa$SVaB-EIZF6`;M&EFO%9I_nBNI=MVL!QuR3tC9k!Tmk6=67bD?LE|-?{4Kk{tuiML50K+P zBk%t`I+;AWEngfw%gX?XMo2V+Vig>{od;iPf}_ZVfuY;A1C%s8dP6}c2*}L@ZH(U0 z4Jl$eYd3Vd?tyyth0rl@h6j1!#W5symz^wwM>jY?Kwk4qJ_1gc9>?7wrD>9HH-(R$U*RlMy)}hk(kbZ9?;ZnyPA#RC1_O}EdM}_gt$@UAS^t;#)C%@ zL5}h0WO{iPw1x$opZHsAnL)MsgO{6s{{Npg!KJ$yoV+>@z0?Gq=i+gk3AEzCwevxz zYsbrekQ%T)r~^EDMOS4iF@RR*`c8Op|LXt$9^JkZx(gLv?gW=q3?AL!Qvo4^DN8}w zzk4reEDE%nx!bj)b0_GSU}!n%()qa4k;Ma41U3J#=WpKw8Nvhy0O+!UMh?)jw{FO} zg^)2>=u(SkKHY0U<&0;iTY*RCao^6oiWg4h>hPw7dgcfx|il({DrTdQer}>AS+C`6o+>sz*2Dw<8MtEuNqRbnpd#^MiW+ z)+|tM+3N~f{@d-k;+vBIQ;9{llT5D%W9!K}J&*1n1CQhr9=%Q+9=#?fUUNh1Zx7IQ zE!|um$(}OcWPixR@(4bY+Lde?q+Rvb&fOG-SmTDH??lmePXM!%*z0StKV0inr zJTx9e8x24Wb7@@q+IcY#Xh1fDM6oJMI927j7Eg1M)wtV{kAKtm@1r7UmyDPk$ z2UXX3!SK@Sd7$;3jshOto(iCa$NVju{`~*ndEEB@|NqSV{jw|!3W3~(P2 zbStFp|Ns9%PINx*q9MZoI$kjxJVU_%IxzbsXc+)B-}-ddc7RGYpH6Ub2Jg0Py9O=F zpr?$#^#2WtIR?y){M~`k$cX=PUyWGvr-@?ksz@Q2`@CbB7R|{x) z&dYlr{{Qa`o#E4+JHa>k*=sq__#bq3*T?cfy)t-B(F?8=&>G}Y0gvu|ppg;}&`sM4 zrPo0V>0aOH4xQoASv#W>Jbm-xydP-tx3G$_PsKeb2R`jyv z11OV%8q2U;%mJS7p9{(H6&#Ru(u+syKqOUM0Nr`2}(^Xe#(c=UUKkLy3xkOXo{Sx8#*2c)a1m z+5i7vUV8&m=+fyr<3$Wuv5$(3OSkI`!vo;Hzelg=-vn^+^I|VZ%i=enn$1z*CFuND zP?fj*FDJuGL5PhnCxUL?gp`slovsr=+5g2iZgvJ2@R*M8jF)P^LFYf6`t!f@m`AVe z=0s5Q<3-6G7RY@D-E5$SQmH$5ATR_x?A-dlRA2{aR5KcJ@3Tj@IOtxaNAi{zN*{al zir(Q@VF2A4ne5W^!2^7&5TqXf)`xVz4(OaukM4Q_56gcgGN7!?-wGa!1$8?>71WDr z@covh<(}Oopkt1!B|s{RK`Kj=L76`8MI=}S|5VV`gW%KV!1<{2A87XC?zeycJud!u z83fMdE({FO9$*Q_nAn#eck?n#K;knllVq6iLb^hP!K3*HqvU~?vj6}8-vLTZFNOdA z|8IEUCC`79v#~+;fad2sEWekCgIxqZX+#992Re>vc;GO&UVph6+~S3tZvq}q_3739 z&8NZuT6+aKFre`bXen~%RM1p_OLv`wOXp9t`47kD|HAyOphF)#x}7yVx*1lm^S9gr zHJ`x4S_k<-qi{b&_*-TQf>|mM)_!dU28I=krNTBm`$0z#@6ZGd;_|!v0PR-+9kJee zpj70gz@pblYF^ zKL`HSn;<83duVuATk^N;;Q)2$yfi>Fmpk{!Uyji76cY8QZxHtGZ& zZVUi#0rUl> z+1K2l(ama5IVWitl@L-S7?{+643plQQu0mo*0rcwdNZg+|17xtjWSlbaE&`ytQpb~?79;k`} z2QjF@(D~>8e@9UCwK{_4MJ9lz9YK51L|#^a`JlTI!4aSN4^*nd9P`4l+fAbRhbVuG zHaBRjU6{Ys1AKnFn}$cX0jR9tZv_qWf+Ix_JiNlz{6HRb=?;IZ9O!cBUtA2J`-k?c zgCY`ivR4pjQli_!gYkd!b32db>eQC()klM zKH%8=UzxvUBghTS{}uS#lR&Wq8VLa%g9~aGpWts+2bYiFOb*K1ttx;1|L+DBfC~IA z;-KsX%IDIcRQgYjzf}fgLU(|MM{^YiBY!I|m|Lvj(Om(#0Iyrfqnpp8(;a+`3X4Z) zg@A|UMgEppP~o5KY|ve80xC8=JI{iaW_n)y3oa#VL6gyt0#eX*2552S1ZXjux*&}| zKNnm`g06SI_~W><1Srk%Yt9Ar<2*HwdUT5MYc2(Kk@z*i1L_`@r}&$uf~R-DrL1r3 z+e&BXeF&iS-p@Tc!Nui^{d52S2bG_Pq2(vPn6m)1{1gCR=m#x7IY6fdmhSBal`=B? zt&s6NaCq^z@USy5fF;EETN!_YT9nxwj?J|UO#H2%eu1)_tAwlJ|K=Zd{4EjStR}|a zQp63`^YX?o&<$FLpk>n3gD>;o<22m@;DN6R9^DS0iWJe`fm|lY-@{w2lV zdL87hZYPk%pr!_Y%O_CY1kZHofYRu3CkfD~J|xvX`2{JEUZ#M?k35r|3>>?Iz;Wzq z2wHQy1G-`twAAo9D6&CyB{XtFL6I8^id;|)={o^@ikIsF@a6-4O~}Z4r)vY+irkE8 zNOj+1*i|`5l^%bKKd6}ux+=#F>VH?mOD~ncNi~=Qawz|cgEOEG_X7`ILF$KY4+~Jq zKlL|6&ZYC`%bk$J>LK#YRTA?2t>1q9|9{+B0(8y{yromh1L`@ovao~8MR1Z(;cwjo z&Rfvh&6J6Oq1ld!zf}jssFPsgZHX))*tfR9}SH6og_ zK~0k%Qv9vI*gzv;plh$dtz`a|f1s8CIO(3}U|?`O?g~!2ppxCA+nK|&(-jif|Jgt_ zYzC<4e0d3+W}xx?ld&`#q!Kh}R^icktJ#97v;b72@VBIcEUl1WDop^*PlH3aThhZ) zt~9`-JCei0GLECv&7<1`QY>~lf-C}+&maLW0grAc4$z<|$Xo@FP7i_CQlNUP`DZMD z>wD0kZ#Sq-#lqiG#snP}11&&Cx}K($3%oi3)Fww-o#5H+q+xgxJR&po;7hsh|DpT% z_k+$ea%}!D%HOi`%m4rTL4&-G&Hn}YTV{Rv|NrHOub>0$KpEPz^AP`(gD;8B_P$DP>??>^PipW~0Kf~MyO9HLj-~Ru9sq+mc-uzR%Gy@d=pt`gbbZlu(!z_pMSGk@zo2oD<4P}i;m34&Y;I&U0SA9{3GXuL@8`v3p+M5Lgaa`5HnuOKgp z^0zV}=Rs4DM?rZ|2gCr|3@t@8Ji3KEnyUmD_*(@)7J>Q(-IgA`;r~231wER7G4r?d zf@|?$0dQjL1VuNvYJU0nH^?d({+8{ak;6lvF?RU;OE>7Us9=re2j4xqjhcTLm2!jX zSqA>r+n~Co^ZASFC7{L%XhpDwM<=wU)(={s4Qk!DK^2KjW@C6+`TPI>U7&adm%N4t zUR*#fH!r90=Ny7$KzL_?zvUrlU=UPp-T*ORbxrNx|Np_^UjkxONZ9bVX8i@1fN`K9 zsyLA7PZ|E!??3+kZ?2M%<8OWS^gYKotd~l9+*|lGp() zk75x`0a*P2@)fiJ0BS2h3nge90K6RFh4Tbx-Hx+T2c>rY7S%7HlEzyD6iF`^BBeWF z{uYH_|Np;K0^Lywj~~x&a0}VD+f4v;pu6ZxLGZ{ZgKxJ3NPxeE@iVBXVt_XKUpRI< zK-$?Btk8D$gHNEwuY-n9H;3c5gY5jR=Rf`b?+dDQj)7$u;qB~g;6rMhHGDe3~`Y-ZIuC)Kj6!XK@}OSPJ<+@Qch6wztxF|2dH!d zx48IQj6q7RnD|?@K#VF0CjM3husrDIxiSrpZc7hKJN{N4uvjIBhh-fHf9pR`QQ7SP zIsyn3DFWb8iB71A;B^q-JPB5X(j(w+`3(v?P$~BbJaRA3-=YUgIR<|L@lYu`1vF|KD5z%GHV= z{{Mf;@C9UQsDNj;E6A;&s4w9FZIbcn&IaFz2d`7Vfv-@>5P13aJxB|<*HS78ZdjwI zNRRGd4v*u`5;mX?RkwqIN2jxaW4D7vr?bUNU+~pk&_y(#K%r{M#NYZ76o8;3WKX=T z_yID$R^vr~3%H!}=sd*VI_C@MT-o>C4icW7S6{Y%0YwpLOv>U#@MgkM_2Gwj((%Mmu=0$*1!OnmLRyNRtqbheL;#FvBlNaQ=uMX|{6K}WCx6~iM}9F^a97K-(-pO=1xk^iObsfJK`GMpBgmWJ z;_~HtaD{>|9f7hgXh_GWGk^o!6+Z;>9w_td1g9dD%md2$AOT1Z8e}1;Ky>N+32Ml< z*n-+co08Fqy)TnM#x?(B zElGg(jvc|{GA~QsfRcTHhDW!bhDW!RhovQd>m*Qt(Ot#iVOhz+-`WD^g$aP&4?1fB zG-w98+7eP<@VD*)wa4NR?X=_05^CUW+#vF$@SFetUubLw%{hg0fJdyX7)y+sf7q9V zI39PG0G<5l(|PX2u?CPkAmI$Q2{d4&{uLTha-gQy5BqK}4WG_){8J9_Z#&R@z}~Ub zUE)P=!~g%yFB$p!e|`D?|Meb_nV{3tKxP&-{Qv)Y)yto|Q5NjOk1l$(8+;hTPtXO3 z;h?<h^Jn){`vH2OJ zWAkH1$L8mZtp`f@TzVb;ID$G7?Vu(%XyWA(c-1ecpWxE@qcik`Yv*@Y!?!LSvFE|& z9r6J6qdH4BycR-?XM(PLw)W_}3|ctK#NW~j8a?X{<^V14d&0lXS?9uw<_F9+pq1+k z3=B3*rRN=+-!i)JyOf^rXuVW=Y=TF3=?2%V(egs}6*g6q(OBMgN<)Ddq$L24LuKe4cfPBzu_a79JkogbSmjC>%&p|hGwOlH7 z0u{>*wdWc5Tfr0K%&x6Z_*+0#tgGRZ=4uH$NB*ftUV@gr!pA2Zn~yTO8h(2z@*gyu z;K0!BEYbW!ioeAKv`+YkQR!MxGsCA_!lS!@!x6j?9(2c-OXtmlF9jUGA7)?>U?|b{ z>Ac}_@daeP{twWKLU4`7#NSfI!~ov=#>E64(gm--bLMD%2)g>5AF?P1bmB)acnKV9 z1iuMr)Yh1Rfq{RUgE43ow6n}hGteXnygld9U3j77w?^|1rV^LtAHw`Cp#96BG1*qgqBBPh$OsAKV7ed7{H>rpQXV@JK-aH= zBDd37;^kqmSzD}E0rp=osA}PFssH!?KX|;e48*9C zFye2`0qKJb(}4CmoMd8PSP2S1{+6JB|NpQ2_n(1*zttV2=->+l58H*H5!;r7prm5E z5yWoQ{s(TvTY}sPI>HFt*F)*226Mb*`-gJ=O*bRR!zFbPr@sXCRF6ALq<|UIuHmEt#_J1c+^Sqo@2A87czK3%uk8trTedy^x!MfxiXh zC(p*;2SJ?Hx8Uw5YZMRILy-^~!Kl5i9y^Zr47v=CgQIt#qK2)>F~LV&-e3$)PR zLjiQHbUmn#+wCCm(iqb71l?KzUi|LS&6>{*kAxsZBm_aMdFcw)$?Anr6pc_64OOH7 z>XUn0B!Ex$fvn};;l%)2!4I0#0d>k*CvuxGxO9Y`^XL}v>5N_RqOl#cfTQ++Pj~DJ zkIqA&V&fd>=Alm49fk)yzPs)Kt$qaEnE*O8>6%Axg#$=8NUI0vh8U%MP@NdM1AKSF z3zr3;HIlUlz^zBnfymAp;5{M-_Vs|SJy<#!)Ju(B0ZQhe5$gk>Vias+nkRqWX~$Ooaw2dd~bc&M5611H=% ze}p1`sG?&KMW+#p0uhP=p^6ql6fHw2@V|Z)zU6=ifg3`R8&uI@h@uk+MF9v! z0Z>KrAc__v6nP*Nffh-2I?KGQ1Pw+YS`*OozQQ0oZz0q4y{12^j2S?;pCZrB-|*;m z_W;e&y!f@0g~7vGg1>hcxY&2#09|JbTJNXg(T#K$7k}$ikbLtI0iVtn&~`=a;R&FP zNFJWuVvgNzGLE3WN-xi>ZWcz%55;A@9*m$xiJgZ!TrV^~lDGU=T)je})Xt;xLgy)u zUf!e%W6%ZOph1D&(hL7Z4nmCTJnGq9C*acwIyCsjzUKe`UzUO@X!v+tZ|N1E&hMSR zS6&#Ff@VvOzCQnA`-(sRLFdt|F9BsC)*tNPQ>^;MVW(KB&t+lo=w_|pGGPE&Z93l` zv@8g;HhJpwuyXmJUsXnzJe zQ?&E2W9RV~lS)A2nyE*8nbklWE1Q4w)H}I!{(m9G2HJKBJ_yI7^Uw=zGbzx%LX;Ck zO4C8d=s*M6F+TRCn1vMd-qYUVFQCgRlfS(H9m4C;8zBMR)Kn@8+JK}03Wgn`%nXj5 z$6rqbua}6Bc>NTSLOgnHSMw_}yf~sJ!SMRhi`wNVt>rYt{#NiAuYY^1{yT;oe9s*0 z+3gCN!}aKu0UdG0&>g@5y4$81d}lSYglFd$NAT(|k8WeoA{TDZj-5hK#RWdAfCC~2 zYBhuJQNo{=ycuS*?IiMfz_amNUjG!0~mdv z))v1!131%xPUh?U{^CI)C<(vw>HH2-eW~#Of5#o5^o`Vwe3($NR z=u9@x&I8~z)*h`VOT;`n&w-B^aNY5u6g2P*+H>4_2-KqX={(kanDIqF_$sT=4Iasd zJuENOG=rpGteOs5((1Z`e;Y%~feQT<4yDo_-L41FPWpuB|L)oYFVcVTGQ7S8UZ(^$ zqMV-(bkHZrh}Zj(4p+fE|LX{H$p}6yt8|A)cfE&C=ReGB{o;JV|NjlvpaWMtI*(V> zyjUOb_rGW7G2hm=b@qn0!S;i;%7b*jSX=-K>tm1rYyDONp4-R+)taCwkMAJwf3O0b zyK~sb@;!60=%kX;t zi=B(Xo2^0pP6h^W`tG~{>g9%ldbrSoWV-7;Iz#VRyL0e2gO{syi}!jkg4VnBmfq>~ zz2m~aO^4~lgZ%&h!ROS0#(??2`*V-ISPiQ6I*&W@@B0ec3;M#lS_CQof#XXUv^yV` zszEmnfchz&_g@_N#tXi$3L%v?0hEwW@WRqH=%4~GCU9x}P!LvHS59XE6?RDe0r>`W z=e1*)Pj4wS3cvVteghqJtl`t0kF`jC|3V-il%Bu&biM~~%Q*bve;%mDIM(fY#FN<- z6s^s_dHDM;f`%{nx3Q>n*Y0V4aKOfazXf!^=ZiuHW(M#P4DUhZv~j)!lE3*oK>M@7 zrBgT3K?VG+zd+?i^AQc0pB>}CafsBvL{WYkt{nL+xN>hv255i%#q0l|@(#446|@zZ zMHO@y7W87h<|7&q_aW63Z}x(;Ixv9iiT@tS-(I`|jqV}U6Skmw!UGf!6Zn}KI$igG zPX&bMug?1~GJ_a5rZcWRc|r=-NYg_`ud5f^WP!+E%@aWwN8pr_Uf@Ft;O z{y-!v(Be=?est;1X7TL&1MU%lD)}`IpgN@)q}8)KMn%B0^LTeK3utA|!AH!cj;#ku zHu-ex-ur9J04gvY7&>qG_L>~`?6!MRq{+qLF~hTy&5?hb3o8TTVb5+C6#?rAmZIA) zL5pZ1<(x-%F^5+#59r)w2GCMro#}u6cRRDZUIxt{;PMX1Kj0gDA;;i(bWR1$kNI?4 zp%v{O-R=TD-5CxZovt0AExkUS?>xFAI6S}y{T~9=Z=l?9X^S{`Y>5ZFs><~M=;Rm% z5POCPWJ9V)w`&LJjya$13=fboATvNlb>4q5ZHqW=z2M}5&>MiJH)@MGSnnp#e112? z-en**$X*XnFCP?6KAq29AlHK~aOo_a@InRLS&o+g)%76PhZKT#rnR`Xe&g>G0BxJ< zTnaid$?yO)+&sE{H}pm@dUTr{^yp><#g7aBc9jB0{_RIRI$c+IG=fHp82H##Q3kqV#?s=di0(`sIffh=7bk=To@iq7V|JK_c-L)Ga zCl5fzfje*cbS?#**67>$2DJ6mv)4tG0hA*V`NOkYMg{C6E6~EE&byAyPZ{}Je8HT1 zo(JD4@VDGx1!cMKFBa;6k2T_NISv&N&;spr3k9u%SOA{NcZVNKs|xju4QN3%sPzmw z`i#Fr7sTzn28zw%a?q-RxBRWmpxyqUySe|rh%X1FFa?lwNI7Ugsh9(_Hn^1^ya)}H zpco86M8we_k zUYJUO%5IO&V=vx<>!)8Hy{4BzryF(NfAQJ^be?v-#EV5aAQ$9z_;mgUcK|~L9J@;y zIxloyyzt_{OQz-rjLi=j4?bjKJivLP^J4QuMi6!2B{Nu*8Ny)!b66l8RxpPZ%z4Fr z;3XUXwo4$PN9+e5vT>f^yx_>cEmRO})WL@woF^`Tj+Z(3h?DbzW9P9K&SjvyQOW`e z9P_gO|GQmVI`8>({?|PALIcDtZ2-y0mVr)$1Ba0iM1u%Om<=pk3ciH<7igFwxl{%u z{tm(hhxj81TLmP34Z_v{u}?wRIw1DGQjo2_jakqj>7m(z_QcxKPK86m&odn^6 zY8Mc<8Nvls7$9y5#MB57I|IUw0kLBs>;w=y0K!fIv0WhS3=rD_!p;G)bwEx47icg? zNr6Q`JC0x?9HpS3+X_lQAT2*j{{Qa=?@)p%cn%(?0k^L}3T}WEfc6H%6dVI90H2Ec zVi$xx0i<#rn7tKLlYzMN!5TqJ4`CX6OaA`{vt2Zwy=W)_CCROzyXiry3roPx0v)^$ z;wC}3pouIHHyFYNZGHxET_9Z0W={~;6v71!zk|4H5H6@x0CB}3T+k*f5SIhQ<=?gy zG_eNa|0w?d-;saYR?wC@5dTFnDB{4`$fLJJni0Gg^|B6VM;J=yKmoLE6mpELA?ktT z4h%Nl{QaP_6b&!gIF|5vbh|EKo&fR+sMrDVd^%rxFi!xr6+JXBdK~=8;@Nrj<^CU_ zNjOlvF!;8<OeaqXMhe!vvHMVc*%q?&$m05$0||` zp3O%=hjxPso)T?{640r0k3o$NP+bJN6tBC21GFRY#p6}t44^HDtp`eYp#JIvow)0h zoDVsl`qc}Ewc-pftG|Q7kipgP?aKntii_kh(4Ai3VZYEBFJ#w>Gx&7p&UhIDRt8#U z?Yf|Q0w`6z4F3mOf&udUb5P?9RG4^Ne0}hpz>DjJps@pxK;yIj^$ZLzjurm@|FZEH z_Rze&<3KDyH6TDWoSOB!` zgCA0Umx0uib0xT!|5A zRZudj5ffhIz~#?@*2Yfo=w{vd(HL};VkskRK;lIk3xj8}95|KU^X$Cq*(-DJg>nJ( zN*&NnZ=cSkps@1jj9u_r6w*ZXY(B>E;vZ-P!m@Nhi9IOEd3MKffRkN!0tdJm^!!Ec z3Q%qWA6I$+d@6b6LCA@nph66MTIcCi;ta3X_;iCUcv%jb6gciW0UXgX-~a!Av3nxu zYHEKH2+ZIZ=V1ftmqY8c@x}&Z-VsTVf_j4l{O3v3=N>+)0R%qYN*az9=){>JPy9H z_t3oH(Rs_G`OzN_&I=v~PcVb$tX|BY4Cw!{E&^YOC&}Gja-L9ZcGHh@}2y8k04l8hZXL$Sd zO^|wz?syL5s}(?-(!L#LFP#n=6`AhQ%?z54X#T-c65-Js@X4e37h~BRkLDjD{H^7n zRS{FstXd8VlJ0sAkM7tXCtvQj1P#7`?b{8yLjin*B&40c8#Ivm60{KE6Tg7704QKy zESQAmeWOx?Py7O|4?gh=@MfP>W=P}LKT)oMVr8iX#Huel|NV#f2jt?H{@?)`eOBF* z$_z#4K6&u#9PsFkVPJgu5HwrQ|Ng-1*DogaW1JV?{6@p2)Afi?r|%B%jy2FVj^KOr zK6`dv@$5YR5>(-V#~D1jYeDVK6ED2ifre{KPe6`xPX$ezce^rpKvT*OTYm6KhM*oECITv5u^xwEh^$>%I~o8 zl3m~xGM&z#i%}ICA$q{qslNl82rjpvhg^de8-WgIH$3p-Ste9vcZv%9rX`RZcq3#) z6zDv<7Et5fw>w9L12nDy+F%Vj!ydH5pcQm&hG(}c1N1TzB+s^jcG`M&*K)i#Y%a+F zzP1LO{l9y5f_5;S06WU?z>8F<1AMw&Pr$qaw*T7!cK+69peb+A5~#c2jpD~Z0g{}` z#_;kiIQHaSKplc#;3#N5#rVQw7CXbsHt>oNkdr{!x!d&!=n!C}5gTZ}gv@n7k3v5S znJe%BA66>h(ai++i5GuM5F-Oay+iX4ZT^<^;Kezf{H=VToYWn};nV4QRmb@>kqv6m=3Yj zxAO&(EKJibq~viNsuCs#au|4E5`5k{icb;V0$q@P;6)EqE5c_!pw&ap5-&k#e}MKU z2XVY8{|8>D*>ddP|Nr27L_yi(8^i!_r~xp$J-b1R??6X!T;d1cg9kGC9%!}aLC{vK z9iVMKprld-+H}bV&i0`6;oEu8)$qUz(8(tt_kO<+?HF_Lg*@y=I|h)kKHaW2KGH zsnV~Y)O95oG8TIRbjn*V=*T7HO63G-JQRGGI=?2kN5HQM+Rf!U0d)L3_%P=^z3dDg zy}k>4I!kBldLs@xlF^j?mjZZ-6mpm!^dvm!5pkfqgIpnLsK+(%pMvZ_dR+=x32?n}j2GKdKv^dg)Zzx+b^cs@wA8rK?cWwTb=Zp*tz3$sV3!~Z>gZd)f;MLsl zbAKL!{Ql_|IK8+01+5o?w=8|T>m{1OK?qsb%?V!D%?>XZ+4);QtMx$Bb+BLqwS2q5 z7j*b^LjxEb+#a2d0v??n9N@#Sb{L*~QIHG{#U0=v1n)eB1|cLoeR^4gRzN}$96U}O zKApcnqt7qYXMslXe}P5scY_1)#bM}DN6=wkKHcCuLBJsgJ_^96^Pg|$2gr?JzmlM~ zcK1S}9THI>gB`owG$3Qw%?B7e9W@~5Cbk|Zk@NV@3|gJU-|}DrWHtn}6!sef2Y>5C zNDVLH(H*)1v{)5sPlD?XPy+Pm4($L*@OXeWD0DgrfX@2z=$;F)9C8T;xG?qXjFouV z_y^Q|a$xZ2oC+!&Ug*5!1ReASVuQjJoL#z&JbFcCz9}$(Gfr3M|Nk#Nz}i6dU^jTH z3-riGAJAP8_o4CpLg71Tz!Egu(t3cuQwdZ+g0^CT^Km!WI!K7Va4!XwZlH7ICU|y( za_c==aBej`0Jc#AWaBmPDlyj`9+0R8M?N?r!Ep_Zd03SDbUuT}dQ~Dc{5$XaKq49v z>rhwv^s>e*gTy*${>P{D5h!L}n9TV9AL2&PzVbz&EA22N`I&F$hnHfYZY1Qg56I+? z;ei)yiJ)8;DghDjft>!}193U{7DQNf^6mVv%Neu?veOlG3hTK9h(4G!C_cg0%8U56 zekv&ClxL3%OhRK#P5T zdvw=Jcy=E31T9v$AVCfv|mVef(vzUL*n&zXuA`Ox{F_t)b*pNLl~Bmi%|439lU59 z+@Hc?-oyV$N^QVO9T>2v+c^VC9c&%COLr?c(RE&g+wIc{iP4w#pkpP#Y|xt9){T%x zI3#?*CE3e!5FyY$YjC)tgh%B&B>O;Xxxw+#c^_u}&M?qGH`sj8HPhYDjriA1K#gWd zn8K8v1FaYC1}g=%`Q$-IpM%{E;>|H-VDRmH0I3B)yC58!|B02bf*ZCzo!7v%0nDJM zF`$edF5%L>7VK?^nTTxfE&)0rO{4h$Bj^}24bWY|Ez?avTbzO*RXMjA12k+QE_`A9 z2U4AOgI0NUgDyFSHX(dF(O`4q9`65%q?6{2Y5jAL2eWE=)4aJ z7tlUM*bPmf({sutUfhg^goQ8Y1Y%I-0kRIP8WtYlIu(>f4G+9n4OQ(5D&VoJ2HD}* z?4qK<2->~m)0x2mvMFEUMLtw7%v^Xg3mitEgH|EQ)w4T@1GM3DuK}o|2lg(wsq@tw zktALm0uA3m;tdr0!l0zlc@5M>1~vJhJF)JAwhe&|c=0I;;!RNh0pxB_5e0JyxHf}& z@Dx;?55#Pk5|FGX=yGFFeRM$=E%rfchGC`0%LAZQ+2DKt&r2_!Yz4;-xKMaGAEW>r z)u1D4K<6jG+Z!z%koJaecM@pZe?@}@1ApfhV+MwA4vdVY3ed9fh3Of2cp>7mjx?n#OsNnAeT_<(aqZhno&vnHM7w5nKeLA0m?#`OoEWzN@ z`5u%Gq)15kA_th`wUo^_U|GfZgkuMI!6oC!0O%#N(ZQ^-4@&+a0fLAK!@al z>MbmZ0a9RslHQMBNE^u^<;)AvwY4CP$f5D_JQjagr!X+QJP6*kP$U5AOdf9qEinRh zU_6e4k7))mJ-dS>(EEm-jsHMfElTx0yS+F(x*6eZ^l1JTQF8_cP$N_rc~C=}zh#ms zs2(d_;M1Gh0L{U@y&(Ib1*1=A>I{$0(j6~YCNh8)gh58Nwu5&0L9zoVYa*K&&EK-q z7?LYN@d`EOh3a=mX;=$72&5IX5d!23Xeb&U;0F5L-7P~EeCQjxU>Pa6QOA(A`D_KN?HLQKM1Z}A!Q;W zYjg%PFuVjEX#h`wtz|zz{cuo+=^8k5!isxv=?Aj%#g|aH^`P+a>@EWDNd`5!K@NwU zXr&JtO$VKmpax=e-hc5fkd5J`Bxp}JytLv5TjeFNiw$%EEvRfUJOCNOgp>q+y*$03 ztEgTyg<|p5SpvX^26zh^6f!Ryu$j;eG67r`fOfsq zeg}CxivwPM);B}SPiUO^bT0rEFW~V^K@(8g2Omxg9+Q0jqFxM~(m(+ODu{1@6m$m* zfEVq)gPPFY1ZtA^dN6i&ffydWA)rmqU{hY~2kT!78B_rK%CozQ1FG>wA*U3>E-ug- zGFYz+WD)32Zb+!TNC?3aLaRaZ60qK9Srf!JklrUFe@m`9=m@M970@^|Bh)fb)_K9g z3A*N~bisa5<>%4qy5L2UEocH2T)cr#g$566906GmQet@E#lv8T^`Jr;nlq78V5tn~ zek^fF7wW|me>PC21la}YKY|-2ptSPqD`x4}1~nSlyq6ch{{P>-7Ze7d(@#KWC4h=- zs3$bLn@InfkU8!F| zeyfszl}At6!RCORzl$GSx!p$!iR(e2tqI^H4$2(Rz;JCnfb4$$76B|iof8DIC>%bB z4$4d~pML?F2Tr7}pj3Jtd?Y{-het2?JZ4b6(>oPf>ViD};#oC3cY>DHZ3Y!?V5RU} z@6rt}95oNV=&Jw!AG}}RrF$+&vuo>Z{?<~k4PG2@^)H$m{{Md&_vQb8^x`9GDpJKM z`WaKfOBW;sUp|4n0uCBbi3RK9EKOlx_X5(Oz(JQm;%bF|ziOm8>sL-O|DkDzh|R7QfD z>mbj)5b}aI*V(;5?Q@^bPY?%#8c`-6Al~Z%?KFq9yrDzm;CAwhk^rb9o8NGNDqe^Z zNAR=`%qOtawhOdH6O@p$7+(0KL-aw4SWwD==!EKl3@m`le2@mi124Ft7J)431hsQP zj)&Rd=}1AX$%Y*8k}y43Tl5V~{m`dQCHLC@@Ue2Rc^@G=JsH z1lrfcdMDikbhBg0bC?OuZ#aB9uR$Wn)$l+T!%j#n9RdxmK}J4axToTA9U`n>@Izha z+xY@l5F^FlLti|mBK!;Rr7QP3q580vuTB8K&se!tJpuq9yHC4-n z?&N@uRXO&$F*6W+FeetDhX6S`}g{oF@jod*T7XAEO3l`Akl@Rx{in{6$e$=LeL7^*aKc+!`q21 ze(x~r>Ra9ra}hD+F7ZM=F7PR}0WeD-VeJi3Vz;8XkBt3!BELZ$KIm_4Cy?|Nrk2Le-dvP2-w3AZN6w zfL8iK8tI@42-I%z=ynir>0SU@uJ=N%7~Ea}2|I!|h(ZUY_A5YoVxS5amTYFfgewI_ z(3@AVnh!L$-qn6Wpiu==E&?3Hf$j zZ2b@2TH@2`y2GOvaw64~1E6!xJ6pk%CcR)S$G{5&8IHG_fNlc=WtijO!|g#mLXS@H zvQLlW;7L@72>7&okK?YORXU($KcKaL4E&nlnJ#`!=%g!nwsk?cN9X+jSb)u14;t>= z3To6lMnFp;$IhdUk)Wl(Emcws43L7sxAQBsGy#ogI(EA%ICj^{xEg+A2D{Kv+f~A2 zhEHz_17qv|I)B)HBG2wp0q`OZNG%J_6NU#~gnEFYJ(K~o4(JfSm=pNyAJECv;M1U> z$02cmmc_eTm&(-a^zBXsFU#mH`UASgmcQkSB&gZ-^d)F9EP9LY#Z#n~jq*!a0)WTk zi|1}g3Yf4c5PJx2-9ScT9=-t0#$AK7NT43r1dQ9Km+^ zbY9D1*tHPUR|TyUKyu=zSWu#c_S(WFTw5=JEQQ}b!(6w}snhe^g1m%B_nOO`kj>Uk&3OrPf(m{HQ?0d&(#~A*W z*UvG-svKr5bi@Q?>dQmVF%zPm0wZW?6eOKhJ_9*6NB}ex3eBA0WFRYpNCq$VJVA~B zXQ0_9P>}-~rq!1N_4vUZDGykO3pz>#Qt~1{53Cu)26ekY#V6#(9C+41bh|!-mSOT? zar3Maq|9^lDW<0^Gm#W5!J^>BG$aMhAO+wKFKDO@I+g(HXG=(chxGVcRw0%0FZMh} z_CgEqQ*hpd)uJe);2>|lc;gHT)Nl!`&2~sT4m|LA1gZ|!Oohc7E#IRMA z%76n7($Rcz4pI)cs67T*1)5}X6#&hz_;%(?yexczX#XP0Ih3aEJ#A2c9e<%FAj#m` z`O>5FCP*P+(mS@dfb8IOqmSQ>cBA zGjBk5SuyNm1YO$Oc^~Ek!%Lu)^h zCXm68&ih#myFe#^LHfForU9f2{31FG6gJ@TBv4i3+WG`$8ps&OC}?CkM)S8cJj9F` z9;ic*HN6af2ntW1&TE(szhegp6sWNvZJ-fJSUPy|hX-Dtf~#O~Z4BzAfy3DFz>C>X z1Bl83^Q_=m0NP3c2Lrf~0`Wg2L=cnXKF~36B=^DG2IgU!hA_dyB2NC282LBkzOK7o4B$6xH>2A4FD zaUXcE9=u`UzGrul#EWbVaDfeKhak`XbBmzVEgH38J>iM6*L}@LdsDcWIK4uR_voB!!84`UtfYs zI7kjc@+&LUa>s8++2JNZ+I6681S*){mIy%$7Y=NGRR#y^bC_S3e8A_|Y1WXSMe*yy zyC6Z(Vrg*63~n;)6+%So3x?b9_yk2{;GO^f!3_jZ8FK*AM+XNcsE&fJMbU*?gvC$r zXllv0iMbM6lpoL`VssaFx=T35 zMIgda0TdyiHX*3SfR1*ou>?5_EgZk!22~KCi8cn%dH7Htflt$#^G=e%qt|x#SnQ$y zbpy2h6jW$|LcvQEyja3<2PlnzbDQA-aK9Xq=|IX}>@bJ;45_J#Qb%^YL6i-Akfa7G zia^77h6i3$L3N|J|0p={QB!vpA0p0PJh_JAXj2qNyYPedQ6kOyMx;W3daHXImvhy0K^#q=p2bau{lmV(-U(7Rw_ytQz;?d3O z;SZkcC{_3A)xCOBfx)-)+Jt?e1OnPnWc(78|5;TaYD%8_g0_hqhdIIY6(l1<0x^pj zkr53KfO8x;8@`Z(+K;132epkrx$X%l*MU0zFJukjxz42<+{gqU*=u$kGv6IDf%pw2 zo_Mc=1VIZeAaz=Ig}{rQAfNQwK0N^|;w&T~MVtdC$cx8c>|g@N4N4IQi71cGL*ODV zO&%WNup$mrmT|n01$VK*VUMWi9XpR19&l_v$MixD>P9T#4=UQgCGe{kk_?{7*Ffz} z-_D1ifCLp=;P3+tdqO8Bz=3Lb;KdnZkOx7f*b!`{82T*3S$%kTBI=D7S207g1Zply zXzmBykBz989AqKA(+)<=@B;TvK@B-@c$vw;d#A8~1kK-o%P(;0Wq9BP6U@fuHyohB zR!BJxRsv~ig8~#ftg-7OH)y$&J7^c(El<255EY4bbR15%vjC`6h8BTX)>1rthA5_? z%ilaZQP)zOGXyyUt#+5Z0un@Zn=-Q7EKuFnc?sEV=Q%;6DpjDB7~skz8p##l`-woi zZQzY&Uu+JTaT(N11CP}Df@c65o5*+Ev@ zs6bbaH~-h>Z{cP_Y>im}y6GLdkN`fJ|3VAAC&;Js5u`8sBI*LT7;f2g5p@0^s0aq9 zA@Hs`NL_At;Kft}P#A?v_=5M=ffXPpFQjpwY^X})WB?xQ@#$U)@(j#K@S0n&LB5?2 zUYMfkf=sK!=3Jp32aN(j=L`5-ey}2?o@wVHet37`|9|*|rgK8=mcnmiz00Qnkm%vz2`yw zyIcuS^ReZ@1yB$oZ3brKZv|}x_v{Yk@NBM?U~uVt=*aJS4s>$;_RdpK2kdhE|Nr%7 z*nE*o_gYZULibXD7Q?i3f+7*RqYJVT4wPYG>m9-84}d(1x>pWG3Fy2Kh!Q+YCSlXR zrRE;V;2Evf19dv!L9|_<`)478q~HV!O8>ebuYxQ=bTXl9F8Nz-oQFxm90}Sf<)W8yW1ljS#;z7e~>3yR&pTa_$8;o^#!QN1=SZ{&wzpeT!w>$!0NwpBdISzRe$u% z|Npz>LF0xeArWnO;KfF5kQr#f_~$INrh_Z%!lvx%S&&{xOy}fnGKeVZNOXqdVkr@(#%g&oMRoM%AA$}Z3f7WDS&J5WW@9WH?s z3$Sp6)EyxGnOvZ1!wFVnfg4dv?}MWU6n48nEm-g{AiUO^4mB1Q@t`<=`REM1)&jfy z4jaPdFIXW?2AK!4GVC-cctFtuDr%rr_zMSV@Vroq#c6PB2c#GpCy+H|3fQd823rd< z=0$<+|Nk#pe}P*VkPHD^vG&3>9J<~DQkHvkvmRb=%m7gYUJ!Le6XYV$1TLs3M)BBR z(7_?#J&FIHf-@v&tqM5vfHUu_0B~%8T>J7fsO#AYcFbeQ#0)5sUe-X3+o^W7k`8ciy{d-yoC$@vj+Pe?8)4RaN*}j!nY7sUO*DoJ^lYbVo5b5Gx_xL zw1PU(kS4C-ffxE3kVrv^j;d3L90;C814jqQ2`~PuL)2qQ?k|l%7J`;Xf%3>naGeiJ zcP9|qK(UBoTk8ktmVHcZ6Y*&K1zI|bVH?kVP=zk6i(=A^lKv&U$?A#>^A0zSX zJOa*hh6i2*Lv29z2&h}j-#YUIbohT+i-UX$YiS@rg^=p4An1+9z%rHccQAp($RUsS7N4RFvdX;3i< zn&L#>LOla4*zLLk=WY$iP7TM-BaY2a7*{ayx6Wh*-9r9^zaA`rwr`Ln=#SG{m zwQsL03#4fP3JFxpKusu+R}Bxmh=f`O&b(0b;1+_0U!m#@q3U3AAYsQy@QfJ9{FkO@ zLCNF!3(cG0Xa$LR^osKDfYi32MiXpIM~OaV|!o@03A>UKHvML4x-ZeZ3a#&AlqLm{sg%QT2j^aRv8e{#GB5Ff3F{|Nn#6I)Vxn=q53+Nl5;Sf$Dc{eS*b^(ride$hX&( z4XhLH2C%bV$U$`zDmuT({r~?m6x^48{zCJu1Ssi(l8I^z{@fxUl z0Ndlyc^_OK7#?`BOAg{g$W8=kjR5K8?n18)f}zEC76Ys<=z)$VEAXEbut6s*z&IGQez!Mh6MPBE=2Bb!76Z_+RgFJEfl?xF z2)eOC0`vSJP&Rl0K1J_GG=Ixeke2RXP%pgXEb_im?b3aq+oKsvw?k}19L;50y2SH4 zXv+!<1AogBZ_w3>E-Dh>^02fEG?oP|3qfb5gUZ5U@Tn4294`!CgPLH$9H8Ru9q8)L zPS+DJ-awC{^8F9W+R!2l)ac#^@&@RbDKAY>sT_L(a%Pri=fPc}pw*8FX4ZxNH0T#T*GXhL?9i_k78N=Sw{re;(vw zU?`FIX#CmAz`#%<<^c&o{?=Wf16%Hc4-Rl(@Mx|Em0Qa|$C|@^zsw8S_x!CL;M>F; zDnJL-v{ZvRRU9uYUr8`P)(wF!tng^8764h~(dl}EzhyQ91H(R$13*4a058RGJpnG1 zcbS4$1s#NV+wj1PP12a&1YOp#g1r>9fwP1ge3i}f7rVsS7+hQbm&)z{1>?(a;JfS? zJitrBTc7>?|NkX7=(HnH!v+)+&||+su$caO?>>-AK~6ggTKmuqbDBBCX)i%1-KHVV z3IVOdhNNG_eU=p-oqIvbI;VnGMx&j*=+9Kh-UBpS>km2#sJUK%fxiWG?q3@J`;$JM@A)--7w~KPZg}xf z7*xE2_tjqmF?&N7cy`AN82lrfQY{vS5*E+yS_$xRDxhU)KAqr|>o1g; zz{N9YtPXS@N#`w(?q~sz*4w3DKv$X_^EmDR8a`+6>@Mfv7jxp^7i941Oad(<7Vv}` z%-_=Q0ZJgQ5}w`S9-RdSpi`UR8*zL(Qz3^Oo&+UlP+a+dPR4%!B6BCm;?y0!-Sr&4 zooNEToh2$9pus$!&e9#AX1RbzcjyezxCyA1@#!p`;S1W(`3amfAztEd0o@k_KB21{ z9Aw}V(>uKkK-#4}x_d!U;?W(5bbuG=+$~25P=ZSF(1x5`S?c1^e53-Y2;rA!=xznY zW9xyEDPZTd{x9kF1V=$@?Z5y3U%&F~{QlA%oa0$k4M5q9`^8GzKmT9$yMvAebznfG z56{l4kn0{KJi5idAA%%=ugnY#j-BT`y8R_QI)8h1e(`9oRAAt5nZd}w&`=q{z~8!? z8GOpZ3uYnEoWpU@B@Gguo$dlYofRCQGZB3|Yg8mW4*uW=Wia?y`&^K&?rMpBpz_+I zJ6r)2-5#Bx2VPh+fQpyU1Kp)3jx&JPJiw30=?swQEKmRy*c{DH8jKBIIvk$eA)xab zLC4>L!X6X{pk;q9DiSZ4K{rUjT8VqyAnh0MBm(k?Xt#rc;ei*=#X(saY!s}>0u`Y! z-5Et))jjyGt3sqxoM~LfXBcQTm%Upw=$vP9&rlh0SlErwJcX zs8=DW#Bm2V10!Ty5|*BJL5}BeQ30LLAq!IulZB-={+2C&!DAAjdgf&(=xj5HKOy15 z-+JKh|Nk$I|A3o5pmTY;SyVwMQt@-c_CK+xg34DIAMUf@i{LR&@KEP}Ymm=gDuRw* zkwQ@KVhoD3&dZ?F#Y&1ioBxUMw}5W# z^=$s90%7e34HG$jJH}Wl?bz^-XFq6%4Y;?>@A?A~pD%VxvM_*dnd=qpTLD@Y@*aE? z7T9?S)}XHC5e-As!_vX+4)A8Ccu)n_ZP)x<9&{a1>1NQvP3}h$kaJtXS>?TF=K;^o zW8gNY;ei+HgrTv665Jp^lnQ`ONaF^#7T&+u#?Qv!*<2^Uz~8D3w!=k5VmByHgU)vI zZT(+b0*il8l>|yfT#!%!wTwWwopnlpF8{pU(F_ozGsZ*aVqM1a(fq=NTRbon=@u#S?U!d^a2XoD|#AlOEl593GveCtip= z1T_vzPk>wf;L~uB{k;uT*h9)*r0k37?|po143LZeUbjKg(SFc&6Up!*FG_gNxRS0|`l zj&f4m4N%*=N`j#z%cIx#%8N|!!KS6EXxCTn24!R9Lu(=VBiZ%JE|7hY=m$qUY#wcc zAhy_ly&Tl;^60MOcya!|1Os$*^BzVR7Gc#53Pb+Z#Q&fn&TssnQ*-{KxU*CobbKo$ zSwT}m?8|UoHij3MO#l3cga`PD)z0r8o!~_-$i0ZL5`S>_q4iRU7$}9@d(pE2RNcn@ z0Pl1-d3XYNwFt`Uw-+Y`KuUt)M>>E`zXcsKZFu11VbFQ#Kc^c*atI`Fz|$pDvFLd{ zonIcQy#Z@%G*@vjxODoS;cwXtZpL2o===;`>hIZk7Bt&^64a~sr}LRl=l>Tz>p%`DF@f~T z!9D^{JA+;P-|)bTZa!?81RP!--6&@Y7J+I2)Jy5pCN%%BDeZ?0>N9eJ4sa0$U1)Uh z6-V=<`sQD;{4LUq3=I7Je?eE@{<1Ae*asSrZT=O*-};q-fdOju*$jf$Xg20Nt$h zLdqOe^46~K>^$~jUMnvH`0z3Cx#fpm@Ew$4098ugK&5l%v6pfXr@1gN7=CO1702HK zax3Ucw3jU4I@p0>AE=sq`3$=PejBt%^4LpIXZpn~!$1EK^(Q2KKoSS2rk3dR zJ>${(pTA`hsCWclj0V~XdeyV@pJ(S6mu?Hk-ta%5Q}88TK44;Cm;h>gb_?`+{b~Nm z$lngSC()yO259FbsHgVG7t~Tc&jgwHJp@id-(PU90Vg3($L9Zx{4LRp3=H5V4J1YR zbiRYHNc#T5jt5&}>UKQ?TDS^ohe6U+^AY5M7H~PBXt1%O(syx8odco?? ze~^_WI-ZvIO4JQ6L7d~$>3ZOWn>?sgh&}KUbTb!75r6A%P&$(bg+5q?2rFn|OD%)p ze;?3wN}b@_=_EW4{^$3EbfP^vAxGPKcE+ekfV#AGkS;B#!vi)U=<~n-;QkB90GG}R z1xIi)hjb%goeGcR4xm0T(z&26DiSZZg4?vfeK1cDcK!*25cedY%S1n=FrA9_;^l_ZU=COKpLD?;N>;EKlKjY zpL&@KYB}G2Y5x~=qsRXeF30Bo?EI}y|AK}yKEGTKI$yH$#>?HHHuVHp{(+vT|JN}j zxbw6}^P32dZYz(@(iNb!cPJ&T;Q{dJ;5z&*7nv9sKx^_^IhYt2K<7B9Gcqt7cbx-j z^m%q(aWw=d7Y?+dIhzSo{;`7e{;=V10qF&|nS44^7rYjp(EOT_zhyeOEJ|GfN^X#Y z&!2*GbLk3D48C`4KF;`}c?Bpzr>H=d3O)u^oQ>d<=IZwNCLafv={}v`zy-WNXoIIu z=X=okFC3tZQn~_kk0v72=Xi9wNq{yS{{vg&y5P7g=psM{S5R(AkN~*}d<7ine&N<9 z{H-dW!A4LaGYeGlCLage0=5!t)ytnCKSIX`yGvJe-UKa}zO)?V;4%qNJ3AHJ6llFv z`oIGue+wkvB>n&Y>w6%+Pbb8S1=1iLP%pNEhMGY)A%SLdki%4uzm@6#|Nq~d1Q_|j zbGxpf(VP?}1_p30g0`>G>aOpgtC*UPL_nKlj`6XeD=|Uk@=5R#6>zqCZ+O7f@c)ZS zc2Jo4u7Hg9K#iI*PW>G^4XEYqZ_v8w;6OF2k3B1{(exo+YCxU zJ3&?HZ+rfJGtdmzZT{9xfB*k~83J~b0|R0#?X)SV0C9!(W4awcwIzRN>)-$XU$-IZ zlh%_ZJcb9r7gd1EVQ{R1;};Snkj-5$QrSRZ61&0!H1-W$gbZm0y_^K9yAbCe!^iTx zq4tA@xWT7_LWa3KC7KU2f`%ho1)-^`Rqy}*|IM{?82DR23C$z<_ls=|fB%CHg=@WC zYVqqrlLH1n5GQ+66B{4*vP?3tBq~O1v!%;7*(mXc$n?1F12x z4%ANC1FnlpPIz<|a=bnSO)s!`Sp+Ipx)F}d0S#({njuhizOd9U&A`9_PW_N@GCc6Y zkrjIwb-T_1Rey1y6SrYY)V@KoCm#+iFAc$?&@K$n_JJfk{UGA^p)n+WLE#H-;7ECN z`c8Opx=fzI19WXBtf8X-I#9p!Jy^8qyvS>i+{|JAOsbAAOYm$2F|CDH22~fSRGQA zr#p59ND5S5ppNgqe{t(SE2xwP9kSwT`2VFg=v?^Z-!FpyfsP?}UGVY>Xdtq?lHv&K^?wkF*jIq*t9`zA$>2y8g(fR#_{pWxGK`lba{=EM$^r8HI22cf9 zTH?{o2Dxt>c6*RbDGO+X!n2zl+|GxOT-cPdcy^a_bcddK5zQbB>5YPWAfS78kQNpF zV+1ujP^YFqi;7A)K`WqJw}YxHEW@p!`G(eSCB+_{pTOt+fUltqS_p2o7Jvr(Tc$EF zfL1U2bpC?0#9o*{WP@B=pOmigNOnE5O9^B+==PNF;P8hHB4lH6(o4`?QjqZy7tp$U zuzj0EK=zeR0ChLfx_O{`4?x|q?=O7+vNF811h@Sm@qy4^B=Z0N%S=#4N0iQK6A<^c zcy?X~&2j#73AC@U9<^&U-Jm{{f}^<1hA~lK{=nNVs;s^y&Nv-ogUvn}d2ZC9nVe2e%=? zry9N3`V+o2f8?cEN#f$nfc03%aGw1NnHRUeGNP z9-ZLBnV@Y}{+641pc2zf!le^>IZJ?nN9R<~44FsoRHz2Z?F z*f{b}Iq(uRoDLcX+z*<>Gu=BTugT`(^(dh?bbb@d9YW>N| z@Y3%8|No$E5YIqKdb0pL>R&Q|8)M-9A9yPqs5<-S(+TeX{RL$Yq^S{sqXBUVM z+D8joX#idt?9u6Z!0^Be%|DP*S4FN9hVOE0MBOp6LGrOSlYB224}8>j9rmOdmj2oI8W&cWj|bVa9cb?g1GF z>T3ysvTS##0PHpcpUz^?v=x7gCg?u4li=#``HMNTKz`zH0bSGrxfjo;^EudsP>;O0 z^$QY65HG-X1HmkWyC1aU(p`h`#cG&xh~r_V!PO%@9k5(c2bozF@`10u=(6?<1ZS<b&< zKQgAZD}%s8Dm40Ck`Fw|PVybBJK<@a+I+1taJ%9e9{Gbp|Ba7%(v~z;)X~ zb@OlY?eJ`_lVIrZhyYs#+lL3Pib_1-r4HyGY{LUDDt@4sI^AIs;F1SyaU`B>m z-VRR0pg}sQA;xe+x_xKB;t{nL^=$xk2f9G@Qs)hy?$Q~cYu9^A7l5i7&*n3X9-XBP zkV>i3wZpUd9JoUA=ysg|s-!^Wwohm322e%h(^-1ph0?=6|3UQ)=me5(*BPL}Ch+h- zC=zkIv8uFE+J-Ix(RWJdQg->muk#G6PIc=QZ$6&o4KDI!B<6 z5!87;ovAB8P6A~mpU%<^uo*v4`S+sx0caT06?C`A5zy)Wjt#y#NOdFBjyN?Gcd>z+ z6whDCwSnqJ7Zp?oSwj_r7Qurm$B0dT{)2NLT4M@ypS1_-pvMFsP($Va3sx?0w1KNd z!vn96!N=Fo(?ZTS^t1qKs6c1!T^Ja^^(Q#|m_CB)P^f>_sDk|CFR_B%qdRnhN2enP zf9qsW_660WT_6Ui9{vBq_7f}UYUl|s%fMxV0|V53sht1+zg+V7|9`OgFP42kGFuI7 zHfUd$69=e%z6>%BWbP>t17hyekE{$YK?~AeL`$L6f#Cj6D0DUw)baTYpN3jfD{{piNR0_Ta8wbl;VCR9& z@#tn{tAQO9y#}TQ=5iz#g0=W`!pym6c;H1XOu0vQHE5dy^q@x2pf;#!3c3%onB&EE z=psbWt+lR(2VQSO^jJWZ^Q{-xCWDjLRM47Aj%faE2OMJ@V?jPb%r9bDteN4_U4=3+ ze8TX+i|nCel2EO=r9@O!@<=J^0dBiZ3zr__i z{u;*L!UJZQmga*efa_LBGJvmzKK7!S^Y4G(*8e48pb}C5d;@`R=MRt0d*D#^>3rVY z0KUY)@W6`*@XP>uFZDP(Lx&s*;kD$Y2J$geMKzCz8s(RSE zJ&)tA;Gd=Utl2gkhc@*k+w>P2_V=*$LWZdVs&>Ft|sI zya(15v@i-X5ezLTAbv4C@WL59>3|w2FS|f~BPcj1~4p7StwEi1Sxkq;}2WTNG zxQ00n-N*@UvUN=ar==F~SV{964v+3&(D}dMh0UN7gCIu(fQ)@{o&$6EAR@{Y)L#Ux zmj!3Am+Mi+D?v%_Mfoy#GN@ty`+xro&}n-~2*GsrzyDv}2hSgX)O$czJUSp$xUz%h zKEVqiK_UIJ7B+qdY0|uy%JTpJOEb{W5NOX4QaJE@1Z8PNuz{{=golF@xWf?uT6_WO zB!aJNe5nh%kgrt~v^>y-0g<0VA@lVSoxU?r+B=|(0Gku-RQU5BG}PzW`QM`xbVW3% zP2zGZlZ=*yBs9MK*ys%OD0eQ5Yk)Qb&(r%I+BA1=tdyd2`~1uLc-0X^B^c1!9fPO zkEM13B#(vN;?r3q;9+@!zvUHZd^dCkXeJLd$PSO;ud-10cE@&rZubHmnhj~w z9d}&-$+{65KAkT>Z9dR=gHPuNC==AOJMhBiI<)x&ZZ~;!9tQOVnc&9vz>EitDU=j~ z&Rlp^Bg5cv+!?jW6a`b)c@Nx%Q(XydGQG4xUfc}|N>E?Xb;gV0w~#J~Pd8|#FQnE4 zb#uV0=Rkco@VWy?^Mw5csMJvNF5`6-qC5 z31ZIg!`FYfb{+`^UH9GirUP6UPX&!n`E(a?Kvs66o{BupTO#&I+!jmcM@; zs5bs(!{4$IJcH=Mz~HzSV)LPwpxZq`?TxLV73H8Yk?$|+yFukUsJIG%Op~U8h6}rq zRK#}w|L@rAqQYbgx`d0rZ!hQu5$-$!=9!8$s?h=r|1I;z~bXQ2Y z8a{Dse#^+;;tlGSfkqKQ`9l*t@AZVgB>?0&aA<=HwkojWpc_dcgZ+rA7i1OKY5u(~ zDvaQvB&g%Sg}{rWuLwHLr#peevs*+39uYSDEp|){4A2#2kp9$nP=N;aG{oFotmc9h zfDbG%JPFD!-(R?5Q3r~%N8rNm`-`KUprxIlt3$qnx1R1=1`1~IKqDlKAqChAUPjPl z2hzk&r?UhoT;t+jE(F!v6I?*2l!42rqE66kF?fENzhwp+=nRA~P^u`s;{v*q7pz9^ z@4x@AZ-LV5i{=8@Jng|{pn2N=h;^qg1fcV@X#J-@+!$r~gyvTp5N)f)v8)Gmv8bZM~oruLR!7 zfEn#2;U3Kupv^f9%nS@IC;3}`Ks)rX$dc%QWV4rg;8qNH9Mc1m%RnQYCx8F@|8hEb zgO&pWBEcJ;1RLwwU82IlKjo0(DNxB*I>n>)TS>o1w^{Qud5`9Q9Hq@Imr5tObc0<8 zx}&1y72@lNDrji*H=(ha*9njLI zwH>UuP{OhKC?hBWTiyPFmX18(Z_WJ&+ARtSJqG@k1ketVlo!2 z{ZjJx|Nm(dU}NDehebg%1a1t%1GF^@X+^~oP_pk!`wv=<243M<^dDS!a6qOq5%Href*L;^)qno~ zfB6>{9`JblEex`|Ov0l(3=)s8z?Uw9j^sjbN3`zv{{R2W9iToYeEkVDT-&#Rq(HYV zLf378k4*&4V;dfLDGIg}(!TfY{O;QNq$Cf!%r^`-4&NQ!|) zI4G&?0JUgdF8KK$F~uZ?=E;tYKmY%K$?zSmBt$p;{v%A&4G+9@{Rv7`5dRn+0LOwR zsOai;=Xj|A9an>g?@}R9_<|-29V)=fMuc9>2tisG>%$D{LVSPWYzJN!I{~&Xc7kU& zJE-sI0bdt8ZAhYT@JUYSG)4cf44O%6#7qnT}+2ZA;i);%M$lM|IbWNK|)4K;7j4a@Qts#m2A$ zye{_JEFkf@&lBc4!+=Teo*hxdEBED zvTyLN#GNtd(GRnf41*7S?mTNCWYv{sNs8h}1mzZ+O55VjDC#zrFZ-58@e6 zaDpaM;DH3$ZV#Sgya`nUlOtTqg8B@upoaSYEC!Dm(B=WS-u3A9VPJ%W@r#LHA$G&f z?R1uih6a;qm3s0zfKyJp@s!@chgPTvVRReeTcYN-?`32S8;MRdDXuiMo z34iPAkD$|zKrK4ZB<$Re&^1z!e&!3`8`x{wmjXZk|9>IRgfe#k>PLX*55f`a?=^fn zT~B~VtU&84JUjn*c7FBjyzbd~&hYkYxwHwOvl0!#3GjLIVa6ArdzL|4ynI{#ml%6C z*MmlW!Z}KBf=20Ji>UNUv_L@#8vF!l>8b(sbLu5P+tAK}rn)E1@|Nl21W_(!+T52@Gr}LQMfAIPmKaS?(j2^8g zOB9gr=C&yn^yqfvu;D3jUBO<;3c4#&$EVx(gm3G~l4XwFjGYG?PBu7payI{GS74_^G~k^HmM_sEO43)mRCeUJEbyY6r`yyVea!Qt7-=FwTZp_Aja9>_dc zNWDk~UrFn_!=*d)h-bHhgk$p|MxSm63GkMNPH?t#knrfP-2k%2r8D%1M|S{+CunC| zw+Dx3@*$5-p5vg%S_ciL$M63A2bl%3`t>^a{FveGm*Abe-F^}tkfT{ZOYvUL09Ugp z@m8r>eC>0}OY{os25H0JffeFA9w`8jCC>x<|spb^;Tp!zf5 z3V3Xo!|q4tky-WsKWOjn(eeC+#l?UBp_dhdcU`;g@aY8Y6+CbqVk#)hVq2%<2uhxv;5u|FR4L2> zAlpG(dqIl@US0z?0U_;a$T=V_6G4L%pbf5&kTX2+A{b`Ean}uyacoGE0Gaf%7T#`z zrp&3Y{{4TM^$)zm8&s9Ujp2bB0}()KZNXf&3$!5#WT@eR7x%A0JP4Bm3BQyB%}c@i zKOUf%05`s%Ch|``1{$P$u^3G+>bKFTPxbcopgk#Hb3)@5teD z9I6b9XcXDeul?+d%L|Nif1=VxF5^@a|1NHT!K0^)Pf z&0(O^&J7Q|*nS!0wO|QQI{t@TnnTW61eXAlp=!XZ68}NXL99x2K$I1kP?bKNYaxSu zu<&x008K_Q`gZ;Uudd>60nL0t%Vl`^1hU`ozzdbjpn1HbplLYRY$|9b6*iG30CoVh zu$WN<87%kh&gB3H9a2z&kMM$c_{9V84DCVBZddRW-2r|v2LVTZK}QasP7eXkZbyNr zNKj0%_;h-3fY%4N9w^BNt>px*1>g6h{7 ztVN&-g}((fJA+UH8gA!rbpS6`0yP+3tb6+J|4UoYz#7avpKfrV`C5MGZ{W2Z3h{^GffsC-AQ1);@aXOZ#WpNufQuOLQZCr?G0<_s-V%lZy`QyR`NT|UA3Y3Ljf?}0lp5cY^lYjqTPnhsR z`pLilFCF3KyWxSCHlT(-EPgzCA(Md6_yDy*cfj^w`*i*TbsBrYsUEsY1vCZtA{=aS z=njwWy`YHl>4qqQ_KTrWI%24^R=}q-pTo1;5wyMow%&b(XD1|?zMTK>|Nj@; zzWn|VS*HT;UqRLf{RNe_SHM%C;KSUUI6S&7;8UBS{4F7%Va@+x{H@BMeaWDq1aK6C zmyx~q=w|&B23rZW=sadE(~G}Xvs9FO$KWJp2O}$38bcV z8)yLpXjK9v@$3OR6P%*ozlhHRr7-?h&|*xF-qah0$cv&O;rpUG6f_S8KA-+YH)tXZ zX~W|EumAqPJ_c?FfO<#ZZml=i0?>v{MyTn>K?heYfR=M0i515|x$q!polVOdQ0D^{ znm(Pr2YfqEfZO`uaDq4ZpF#J(K|So#4eANO%GE=lU~=qsgf#jcHNXa+1{EHy|4Vp0 zJHrKhI;+5KYH&D!Yyms<0l2J!hDC5LXzhdV0Z@_MK1m%T(!8Krkp1A<=_mjyb$vR$C7@XrqR;Ta3n{32+LK8tkCfCAb;@Iq(g1fEiS^fdUa`3b^$I3OB<8FLs=PdIFju zLBfz_P%W{b27Pz!i5D%6xcpOvMK>rhfy+Md(nQBN#Qs^(8dq>8fjP+VzzYkg3CJM= za>L8V;8qoCyAk9GP$}bk-~|I#ec;sak`dg&hMt%4{)OxPfB!+ozm$cFgThAPD5ziH z)AwhJpiBB}@+FXK)WOGVbL@=sX+9ogMf7{Rb@~29LXd`ta{xl!AmD|A0o? zK$GI&%mPW7s^Ili?_WGV1@Q$eoMDzANBn-M8jK=mT0Oj}1PX6ZQwek{fZ>4`Jy0#6 zz{F}aEGdKH$Xnt?%qehQht#-`ME+6?9IcT45>gKa;(k!~1>|XEs6|*U0fiK({5uKp zBg}6g;g`NB{Ts(!pt2I2-7hjAmcRLS9s_M>0aq8W6H_ESx~e&tiRKfG zj-70vgF-yI1>mbiwE0^mfWq#V9)C+YsL2C5CIxyhswaQz6VTZ}2j6pm>~d^=UhfDx zDWL^)z5r^ zUEp#H>_0^90XFWX+JDdl98~`Oixs#2{eO82oGBPk8VUCd4}e1fl!}C5)*)wBu-9I6 z+~r|tKEMb~k}ofTG61Z-_RRrw>_Pp%|Nk3KHad3ly(|GW?GWp)Lw!3Bg1W1ro}FJo zZ70wYchG@b9>`r%(1Ba6mrD4N#}s`^Ogy?>Z@>?;~ows~C-$fgq z1h343h*RJsB_TAyw%%j2tIu4)()UNU9Jn@}>(!^c~iD4v zQ3LR{U1+2GxGQL6mBHhj@yOr7s-2og`ch|984Jv>vFl^yrN3a0S(5m%F<` zrHe;*ZHH^;2Osd}Xcx_&j-V4v8bAK~?_yakQGeSLbT}+X$7e_WZB7E6hgL9^FdT0MZ370a+xvD% zfWOrZ)T?-;z~8FM#=y|L7Zf>KF5PQEYWQ0~3xORQ&$58lQW}19>CBx1Ufd2k4ErRw z&U;~g7*vn#1ua|z#S6ST15bFlV_U}KF5%O?7Zgj~p$)EvCw)6VxPY#^zwg`n-;san zLBnq^iqHT1zsm|dDskVp^Czg+09sWIvGCX->=t&qOLT*$=35Vxx`LB5TIclvC^?{Z zULoNO@*o>%JrUT0FQvdGoC^a3xHXI9RUfd;b0J%BM55qq8*yyoTh(?}MP0U1*0#cjyim$RxYtHzxrFcp!GV?%;2c1+7wm zbctO%Z$Q$SV|N$GXpheOj@o`aFNEIz`|sM#=hGe90dCKM7Mu0`0Zm18vp&0J%m6hU zRD@{x^xDd|DKNNp-rEPNn?Vb7ol8NNVY2SIWy}C7i=KnbaqR?clLggr9pKZ|4?#WP z(Rm-{MNoqsRNK992A3J3J3#sx!7K3?1Q_6!LR;pbp~l&u<4xe@3Dgq^PicE8fRCRK zZE)#~?Ra7H?jPs^MsPI(-Gc<47r+1F&;d{y09)8_+;s}b5s*|3V!42pUqdYgt><;@ zc2a0QzzE9_D>yn2@wYI7)*^KmX}ES*sjOh(Z}DPeU}*iu-?xF8fuVCND1O{}P3%A! z)2H*YPv=rlc5v7H+?Z5x7md{IXcqD@j z1ZPpGL7zbx)u-3Rj1e4|yQIJ^Ur?ekJmAtf7i2#urM$SgAL3DPz3$O@AC@wp2ZXrp zFg);LD^v|A^pQgWYzj<+BmcG_0Z?eXWQUK}gL;$_9=*O(e0p7HfU1$zKS1mIjvF5E zX#UT_-?9gEqQ>*9JPa<~xl=%U7C}J>DGWd*!OM@(c0R;XP=VqI4N<3F5xdrJb&;U( zgOrt^g3Yz_k7MU`MEwm5zt9F)_|Oe7eDITtd#3m)(D>^ur7M?AY-1w6XHPLW^7+62-Qd{w>HMyF zth2P^#kV3v|HK1)!6tYl#qhw3H+vy&1Z`{Tyzc@Vo!kl@lY%B_AJBSV*Bvhuz-Lta z@N7QL=xSNZP~Y6^!ocj)4R#@D*^&U5&=5U5%l&#`@fDoqJeq&7@V6L(TA|&pD}1_ZXLS2c z0hPt*Qx7{p{lre+o)`X?co@2Ud%zXwkIqAepi@0xSe^Lyf0s45ECG#CgDOr?&=?+g zF=00-q){s^Pz$8>I;b-PIq(47-0`%$Qc~yvIYJt=50Syc@it?-=L%g3JXyGe-~yLyaXLY{6gveZ_s(Q$mt{0vGXjX33~!G!|p5K(_JOt(K!`7 z2;A8UYQMO2_JYQj(NoNES5STdwO~Q5Nd}~&T8@MB4XB{x*96awfe)yGwQfaU{r(Ty zpyt{6#itjvk@&Yy?_5w};?o(r!lS!D!=rfzXlD$APiJh0$8m652V|B<=T^|cG#&@MHj}T>xn{ z`td^>-FFA;tQU62SWd+I*@``_IP zia^kbWf`Dl#-O}{)@Ymoy1p5s(Fhs;0gXrabpH401f4Ma-=}jf=xFH9UeJO29-UJ` zr&_$|%$Ha!TLa(j9L^yQ3Z{Q_9hkvhFzc|k3bhd_S){% zQU+Zq4>H`Rb1umA&R($LYcBu(-wkH^bc4lP5BPLX1*zk2F<}Lzfl?cfZg7VP+-e8S zrGUZ_>bBbLpzILZ;RA6SEciS+T{|H4nPc-`b$;-*Ag+dx(-vRyf(lhw|GfDGNAn4m zPH+Ui^aGDOzxU~!3(6rcHk{>Q@aYD#TMt0aAmVR%#sTV(1q)b$+r|7%i`c=5&Zl!J zC^9`e@3?e+el6S$K2xaqFeBp)%VYdaIqabOyh>*{cHVacA8!-Q4oW3;5{&$<0pMGt z-84M9Ene82ijLWpuHYHOiOdYgF=wN_ULB)dJa-3dqR>VG<`x-D`?zpA854Qqt`anOM&5qeI~e! zJ^;~F@)%oE^{@m-4S&lrR&d0%oaApk4sL@%{RN)6_UJC)@PHrX?%DW1k(YsizoiZ| zq6WHG$Q3$u@d=z3@A-621*K`9&bi=3-5vrOGy$`Hy1_D_Sq;$2AlDYqA>_Y7(%|CP z12T2$(|HdRC6IHhe4uGN@I9yj0?u=uoyT6Pg7;4}|1jiltpu-oE#vU$1$R^+T0=n7 z!>I0ffA`;ikK|sEj7R6K?!BN6fMe$YpKcVVo$NeOA_2<}pz$G(?n$6hzxf4Y=?9PQ zt)RRB9!uyh5R0N)f~cKhFdNPaXt z@G=hM5x9Nex$Tw>-~mvuRcP59Ib8cULvlN$Isy%-qIv~6`@fv{@Be>Lm5h_DaXK7g(zqP5hyOsfEMyY&Si2E@PMbg)-&LA$KQJP@BjbU(;lS!gr&dJ?g|Vq z_NRfW#RfB*mg<{;p}-*VyK|Nq?+K$+J?^SE|^j^%a!R?v`WuRD`ZuMa2V zE>JrIoFP4CfYTH>*+37qgQctfO%VU%@%3!bIi=0VxcFQ4fjUBvs>7psFQ{;0I0jDo z3_jf%68x>c;KFV#NW!NRe0iHsC#2v7-`4@Vti|^cs77~|@abLws<<7SYkB_jgU{#l z?R@WQ_~f+|xLpP6E&3+^@jUpP)tB+TV{<*v|B_(^{tsPgGV<*cgF-428PC; z|NsB5=Woe=`1^lvAfr!j>8^dC>6p$5AX(5Ud%dFWZlDI;i`+?K3?9e9^*X3o^AdEj zv`^_e*aOiAeev`qsEu+Qv}{J}IJg!9#gn6@GY5Z5 z6!_LlP%Q;&z`fu)&I7vn6_iVTIzRe!&jpD(b{_QT6`h}_2x?_^-uLJ>bM1EK0O!S3 z*Fo*gmp8tH7UzBQ=(V+SRX~f97vHXcB8T{#Qglj@8i=99PW^px9u1`3rmj@?%&92&w%D zG~iHbM#BTUV&IzyWY(i4wwEtJ_k}{zqetg`(4CZ!d%D317L?jwu7hcTmYs+p51-CY z;5zZe(pmrhzYP5bUeF?Ntbvu0fr0U*!?*wceOur1x7-EyXI#OPB?qBL^J|xudp6gC zwt<2|2(;7)tP~V}plhMv^F=nL{+`{n91actc_0UWID9+KUdjnNbG{WcD*Zxg3p0a9 zuju1!NEzJ;T93p4+9?FSIJNf$sOlB{-~?6(Hrfy(8xNB0W&zEUGVpW1$i4(BU)Z6G&iPwGJ2jiZ zsfB^RRqyNn|1Va?f$m113QE?HZofz8!51ud{{4T+4@w4zu^3Q$0Ja{*vlDvoCTuZ^ zN2l)^^j=Q4lfZG;BjCK(>AC~761Wz$9HKi!g~RY9aswrrzoi&75((<;eRnl{`(mjN zc;!Y56Iea?T$=!tlf-rSTLi(~k^jvm))9;;pPg7FzBkGpR0 z=sX7Li);lA-1oXOx^&kb0Zk^cxPi+*=#>|s-8zN`Tsi-~=vV`)27)CZgCoyeI&+VB zbo*`quR!C6 z8{#zqaMo-9FD-$1=EY)fa0s-5hC@L^3@BGm__Jf|#DoJK%n zfuQ3XW1(h%js|M1-2qxM1P)VpDA|KXIXayskXO2ZG^#)~g1X+IkcVpkHF!ZTaqM=7 ztaowOFg)<$>ncpQq6Qx5o&?aG+C7lV)4afe*K!!tDsWu^+UC$5x~BO66KL3r#T_(; z2U^VM4_;XMl###nEU0;0yMmFw7`)15oRrxRtXmv83_@Nthwrw9r_Rl9V@u7QOIc=4Dg z^nNhtknb?F4G+9Hy%ORykM3HeW9A@>&pbM-C0_nU*&hmB z&)tMr&kc$V!vimxq2@U51+@cV&H?%BWj1)a6Vg5dF!y`?yiNZ z#_#Tj;LrrS8?=-LbT>NKen{*X9(Z8}GX^OlUV_rx1km0DuqVM9z+nsuT~=%wxIptU zJ3yxjf)#^HF=*la{l(>FkkCNSlE~|U*5gtGD|A5j|KL&sT89COC&L3T(xGY~{&Pe) z2^ODVA3+scK^0>-49QY4xEi<#Fxi(oK+7Ev^I-_f(EPuY2>;_!1G5a|e_U#i{SQ?` zod2PU@%kUG2GjoqDE~5|Nk$XPJ+jG zL5oGedmEr*yWnNE{NE2kZc#D?w^BZPbeBtbcK!pcGia_;U?_=fr~}QR9YKn0DYs({W=fgRAj@G_{6;wAxIWDP1KAvwC+ z0d#0E$6}D9P}@&%zi6ZS#T|T05onvzi;Z0nZKxOTAYX9W?5@FxoKPGa(sjOrjxlKk z9Yh1WZATS(y}n0xm;u;}DxeXR&I^e1106v3|M9o*fW(`@_n3mBs#F+u?phFNp*w#| z09f9Np#*a7nos8kNLs?Ur!y2ZK?J#{(+hl0XCf15Bos1_(t4nT+oPKUqP6s>XSa!p z;Q^0cQ8RM|&=pVMj;G;CaMuESuMfPufW#B1v9k#}qy}yvxjI7Ps0VZj2k1ghP$9+$ zI&Bm>H3}+(8x}$W6gkLTTi=$bKo8-BWPig0FT$}Xgw(To;1NwwJ&SffCp=+rw}JMA zv#5Z2NT4fsp%Gnj&a)elU=`puww~z#xrvMf3o00(X7jgbUBsCHLHD(`F92DBH362y zA-T&PoRPqZ&!hwW#wX;22fA4olzYIdU(te-zx5*MPL(=vNHKVHquyHzz4G?^i{#D! z{=f8u46TF16PhkR{Qm#{C1_L%GX4iGQ%pgsmxEV)v8aM>|1wAw+ zS;r~DQ_}Ne;FMJO8+QMmV;FQnDR?dvw1)1tNAsHsl>Q#_E^Ar-md~J5hJGYNPQq*c zA;I7Jf*Evg&HDqeV?SNHD+L_+w>e6{PWtQs&v$jZ3OF8flwfRr!RT?^6|}~Z!Lid( z0MwBI^(0}(fo3r}2KsdNf)?8Nb{_QYeDGo+D+5E6Pd9k&P3wV3{+7j{gI>0Q4R!6T z7I5rv2Hj5$*{ub>+Zr(qH3NLcB&gBVdH}RK4s-w|e2xly&LlWJd!XI`C=Kc>picZi z%CXKvKApXwX*rKh@UpfSS8XBrO#oDXbc4lwy1^579-y7m-GKt0o!4J;r%mwft``7p zhUa$dW``b1`UbS&9Mo3;&5(ib8};lC7x3(M=Rgw#HS$3R{D8HGkAd)qfaNYI{ubf%+QN2pqmQ5fyNt?!TaZ+ z!>=#I=Yk!8WR_>=0nkybo}CT?KAjF6zMZZT-Qc(ePto1)E*0>BocQO{369?vF71%3 zS=NK9;BK&(59I1{-%fV{-_8mS-_BYI$8QH2`C9@&-9AuJ%E-Xq0vhe{={)6e@m1p^ za1gy>g!uQx#6_T5JY2)0lgSY@#={M|e4+FHiHwcuXL5JRhE-3_^!}4MyR1>WH0V!}bd<(iZrw_Dg7Cg=j){1Z(=tQs= z6=01apqtB~l|SgrYZuG4pv+f)_9dkG59tqjHdk;klq7;@$$Lv7cN&2&|GW>&z#g5Y zpfi0Jyf|nD$`hr$h6i3Qfv-0L-BS+^Ezn5>p!^A%*+~ZPlMN7f83k7d%V*FG2F-3S za;^UVhaJrZ$zQDpO6K`=gR+H#0BCV^>w!{{mma5K`>Vipdo1Yq7%R}!Ot1gH=AVq^ zFHz^ySWo}{-)+_F|IefII!F~r$uo~`f6!Tp9H1j21U)(f1wf}acz~Sy;MDK`9-YTu z^MLlffdqbl##}ji1OI^!9(51^9mDzzd@@@n_~6D8P)-)`?5+Tr!Qs*A4r*F}5(`)W zvKJDP@I5*~K5>=kE)_t|8!ud2Ajuyz&x4*=cFqJP7WC+Q3A*?xZ329sF*IfM%migc zaDMjb24`fntoX736bJD3MYo&6%VnSwQNB4!F!HwqgSu$lfeJ6Tg4Tt--~0Rj%S$JJ z|9^S?(S}jz(37(Isddn9-s~RM?uGJZM)>rdBYWSYzJtZ8+6nK=-`e6rJr3v zD_(Lp_;x<^==7c8+WEz^^Iqp=kIvEwphZZp1wi-tb(cwi=T=(3m3TXX7H2iT;qdKt z|d=T*B*^mGK9iyXK50vf)Z3QyK+*bxVx*v4V ze|PBw(CRUt?%WL^_w%=dW;PKMd(A&Q_*+5A!>2n=z@xj4!?QbD0Cb**NAh9NEHh{= zzDM)_|Bx%i9e08|zmRpV?+p*^k^>L_gii43jGgh~;&f1}rS=47Zr2Uq z6}KSgLkkCw&R-s#?h=lm^*lbE?|WS&7z192{`mht%BMSa255Oe=!8hf)pIVLwHpj? z`*uF}?Y!gD89L*&&;(!bopPWHxu5X2_=ARTK-WQl!^}m6!?*J%$XZaq`Ek{dcZM)zXfz)p<_dhiUdPRTz9DiXzsijG|{omb-8EqbIE4Gf@74ke|a1=XPI89}Av z`xne+ph@P?6EAB}*1toCNUwo*zktsI4L$L~0%|3A(?&Pwpnga(3W|o8pm`;JdC-9E z%iDkd|M%_u;L~zk*xS#N6C)^dgzd2=OM@DNA-@)zobgC>k}QDe@T{VH~)7iQS<2bio z;I$B-51G;vAS(_-t&j#; z!4K_UK+R_doBw)&M|YWoM<C*89ka0ae&VdH3zSQJ@DETT<&|cUMi7; zR@$KJ;aoaf_x%0;|HU4o|NmXO!EBH2XbDG9j&HqPVh`H7;%a%k?l@E-NWT~;=Ycf8 zXhZ0FeZr>`EatQfbU+cz~if+YZF1&8ouD){u}#!QsBGk9HB?hOL%mP ze?J5nKLXvm09wE2(fQl6^NVBWS&!xl1qS|>8KChU@Xf~Dpk9CH{TIpIppAvcz>^%X z6Lmbh*?l`pRNwJc$1CoJvqp5PG277ux`j2kHP1Xs|#6(L4mr zO~Gu?Is}?V1RV|#&e81=11>REfYL8`7sHFM2B5Yae~S@lkl_-zlllCGLD~QRa3|hB z2r&RU=JOA}M*uSBBQg;b3FwU!xb9F?4x{f zai11m(BYq;C4H}Jq3OFDI<5mg)e17M(|H3DeV|ks0N$-)=FwcGz`)-M+Rq1St#> z|6t;8i3e?y`N39F(4TfDqH0j|P9=QZzRXaF5Q6%HEhDoF$7P|yyA z7fslQE?G%-NZ=O)uZBAgj@|#D%Ie?)ettplTG}-J zeDIN)Y5e(1!RP8g78H9xI=5;3`QRCQe$BZ8Abp+SH8F+<_%)}3%;(nxul;$kw-=oK zXTVavN2luy__6#Y`yj6LfL@K;D#FRY0M5JrUrhP`4|E^ci#MS0Hqe~d{}+Xzb6;kF z+IA@(+K^p>{H@Cc85leokAMOdYx)JPoluqkz`)>PE9C%M;#VyQN-m`g9-SXRHKSwa z5y$2y^(E?{wM^ao%|AK#+i!u_(~27YQDX2&X6f=^ykPhL0d#)bx4V=Bv})JgwOb8z zP_4a7=X3CBc^f%r zw1Uo4=sW}(%MxsU#MJ!YFXsiv4o5+k?mz+8&Oiy*)=PD)jt!myj2_)!gFL!D6g;{s zG<>=X96UOEUx0>)JNJTi)p|7l1l@nm$G`wul+*H#lYs%eUfrj&_rkyb|6Mw#-T--S zS=*ogF5O`E@zyi{!1tarcyxjt;?s?+)Yb3_RIg9x+7+OaDmWnd2-Kqg|Ke{8D1Gb& zdBCId80ZYv=5vfM#NEL+dd=|c4ii8e{E|BZR0%_RqtI0HPYZMwW0{0&Z;T3~Z|k?x z6;M|}9Ra%Vq;u{L&`P*&u;-9Uc&gyi4R&rRw?{YV zq{{!`15QCp!ME~)FOH})^6nKm;@JFv(Wmo4iLhs{iwcKlvx>?;56eR(Vxab;N3+5| zkLCo9e;&;T1UxJcmA>=n1_w7Z2wXbng8TxDSYO3I|9!e)jseR+q8XHYm|Qy}Wn39= z`F186yu1rKC10KabWC6OT2Kn|?ELT1Js0F~pH3$Uk7jUsVknX52B!*;eh0@+M;*{E zH?RmO!@a1j0WEL`g}-B`qX;~Cg4Uxzn`@Am_UQ!s{{^omsMiB#!xck@Fd&UPxN1=5 zcyV6?tQy32Y_??b>~*4`3Ez9ix_BI=?_N!7E$ma{-FYf zCqXTY)@smjDWvpCp7Zbj%QEl~vb+mYQTt#gC`YGDfc7ZrH-XwrE-C_`Q;uL;Cf4o* zm2%-A1+cP#y$O`+!DWNte{c$Ml5phT<_5Whkjb&b4Rj}=iwcC#;@IJ$q5~~8OISR+ z>%ntQ`#?J>Uf2|Xj0&9rD(MYR9%leAmOzy8pbqA72heGr496WLz!%URcL3Gf44{!f z(BMAgLPc2Zkn9japiThq^h)E;-;1?QSPNRk#jm*)txi}AsT1~s7W=+f*$#0stWE$O zNe63T`gE3payfsC4`|czNl0|Q5Lbs(=3hW<({9%ppg?m`5%B3u;PB~8g;gl%L8F)t zu?HF`NWlOy1`;yxpa54)-R=U=VCHXmz5Vz9Zifue9ml?%Pr+B@cs8G9>~u;1om~aG zeD}EP0&ei?B5-mB9UKZedKA23QlKmpUj7<1s(YZx)#yV5p+7ayTD8L@1WxuKs{8@Dl*o}pGpkJ+d(xTs3Gjp z*$%21K@GWA(CC*?g+%{X@UlsF0eGXQo%{R$|Dco)JJZ6W^By!MgZ8}iE(Iq$NE^qe z^AVz9gPMqsgV(i#%I7rxd~gazY7jx1JN%m9Bn-W%8JfWPH6aPwV$;9>;PxeWLh?W4 zls{-&^Tlp(4TpNH-^-uhK<);WBOblHVJ6_sXwdLD_>bSCS9GhhB7;xof5QVWZm$Nl z&tI~F!_0xfqnCHKy#mAQ>(KUyM=$SLNd<=2$KiZd%^ymTbNDa<^(CkRhP1~$dU@x7 z^!3B_@lKRfU;vLMf$NQ4-Zl^)bWk&h585{hk6BQs3{(t(iy&x(fo4cwtjk8pa*#X* zP8G);BtWzWQt1QA_n>SCDrs9v5HtAyU#KfXBAf+$cY!M+Q`Ui7M)lBsCM2bREjG;t z^}@h~A0nR%fKqpN=nRCVkPbG;Qc$}P?w=m;_M32UzqZpU0aQ=CT=WH$NErRFpc~D>?Wq^WobYqR z92~)k2XUd!^p*d>tsHj)O0=h!?=p)b#0`3u+y_Fsb?TA5`og zd!e;LoM9iR+=i&`2FrVNf{R$k25$j@7dPD5KvRPteTLsq8-yO+(AMrD&rW9x@c4U* zibV4BuukM6yowu4W1I>epxSU_8f4uHnU_CgvuYZv_c z|KG9mzh~!F4_Hg;aOYM~W3TU~fzt=HD4jd`-~X2ze}IxUq`Uz&0l-%?HG^c@L31m}>T^M&G2o>E z5cM9NEUKXL88)A9_^tUz9DhqHs1Mk^71Ut#=mv)kxcu|!eDoqp9y}!mN=x7y+M(|0 zF64Nr4?e{Lyl!tF_FqDXQgWLMe2bdszmChm_P?Ayb>~02msd!QI!_4N@@Jps+y9?caN4E!z6K`Vsz;Y;DI#uLB)=OXQ!jZ%k`f@2^O4Az}-@IM(o{E{t9sK1>|!`IR?p{#87IY!@ z`Op9VH=k;7>xQ2W2TPT=JSaK-?;3+nH04jzmppuV;sBh;HOKYjZD9}&Kw z8CcNjjOQ+$t)TeA-VK{J^EYTz8ms_YZ|o(*Cs2sEfDXz5ITPg1mr1|=|2O>qk`;bS zGebGjEzQ5zfLd;#$sfoq&90!$DWEwD8xRB3VEzBXzJitErOr3#Ezhtv=gu-DW43^e zfm|dF?!Z9ql8yvz`T&_00AfH)`&bT2dtgN`EkPSS5*C1lU|A0`88dkFnraIwFnDxZ z7#?_WV+u2aN9VQupa#N=>Sk7kmw9Vo^W%^iAy6I(!`Sj6;nS_P+b4r6{a(=-uap=(J5PBevoxWO-*i3&mv5fkp&X!v(47~-(=wn%X`orQ7d`($ zUB=K8zL3is_*;InF))Bn#fKJXka2sk+6PsjCP1(RXkN{?I~P834PNTi?F7D6+_&{@ z>12L+hW(%oW&H9Ckn_htD{MGkOyK2Y0IgR>JtY;iJE09~GOUXPG7&sK1Ul~vHaP@N zcl$w2_}44p^@(Gz>mAq5)8HXN2UgG~VN{rr8D*j*wfkI!IaPw;4pzMJOQ_Rzk`D8 z#ToE;KO{_Cx?_(Z`@j<#Cg9=K!{DBFhzc|oJUZ_|CZK#ezr*eN58CY5?V`c~3SqEm zNH=My^Y@E`yY0#l2FQ9$N5Rc9#^Er~oCA0vDads$ov|lC%jv*P(qKdv^!tk`5}J?e8fDE;ei*^DkzJx9V0hB8`LBiJ4$#VL{wW7RQ=T5ZB4z;|oTq$x zeS{dH2USDTArAus1LW*`O#f{!hxpHNFDT5AeF^s92k>p2H7XJ>>U3b?2io=x4!@T| zpf&+~J_04&;_;i?05zB6g&N#k&^BC%xuDzVLHD7sX8to`0B`Pt<#32IeY!!Xjs7Wv zI32^$+)%>>UYyj1IT|!q05LokHb1c+G(_-{4c@LoasPa%;SdWktN@+Q?b%(U!to*v zZUrd2L#+4(irWb&=K13{?*e!;8^}B{xOpJwLCjkPHqWEE5>za_2P+Lx;Xo?}z(qjD zFGv}QncF~l@WsheNRWXtEzD0SxeT7eKvNvh`S~#`C~t*`}U#_D*g{{AEXj2W9MXe30jUg0irGq%>VQM|AhUZ zjPW82#DDP{#0Mql7j95<?+2aP@v;oGmm1;@aMK~} zCupmp?}-<=xu5~@&=a1WP8=_P{{^)_zrTop3myQAzeValKzH-Q3L#Jd`r~g|zt%2c)=##6LKq92lB^B=fhv{0T}@PLL@BXljMH6kaXJK-~&Tte}k_&R;74Ych0;S(9MvsFpIhr5VzsTD0|9=Fia*BF+AAIp2xI6^wfg~Q#G7Q*V zQqlaa&7ghz%~cW%{4Etf{{MfO^5g&i{h)PKFB(`OscOSdm`EN}DR4@r=^tegzK-8m|trH3yM{(+e*hAh15-~a#U#wDx)uU>GYl9)A{hlm9PK*gPJ#>!s`ZTvcB{Fiv^$|8qn!w$6id$ z0w2@26Vy=w-CJd9QuOaXIB$V=mp<2EW7r4E`5wKtd)Yv<Dp!_zS6A2?mc&*9q{o0c?vv&01#(&>H1#hYBC)s^&=-IT*leVqF_vw4LE# z@PV8{H1Zn&+SkeA(e2v+Hn+RBJFz(0JpPVux0&0to(=q+XmWA0qOaG$0|Ve3TP`jXmfVw{THs;tPC$f z$BMq#JsD+94W$3!+IieD%(L?vXh{vy6=I#fYg{^ASD+=y7aAF$X`rKy&Ht53#lbg< zbTfhGn!$rSCXk~jK=(y3fYfz|fp=+vcF2H=H)wVE{Dm^#|NkIIg3iV64qXG1PXI0N zs9mAx3%j!ebk=zZEBH8npH9%>YK8}1c;}%P2;c+T9lKp2+nHT8x?R_R41NR}FoK@l z51MENZSDoPdo@9;k$u;I%fRO^X7hsFQ6dhC9N1j!4p5~5x-R846UO>3VNm94K4O71 z8xI~A=ml?JhZqW)f`HwI_JZpVs5Mc$15_Qf9A$v^wh%|VL;Y2pi|Q|MxPmSt18=GV z-Q#``JdF*$&1hT0zyB}y{rmra0%AQmJRtou9Z>z)dCsT1PU6LdRM7H|5YRH$4<4QOJbHaMfNMin#7qTf3j z+!ZG+^cdT2S5@jB&}rR!ogM;Oaq(gh5jUpyl?U ztEo`3cnau>MR0;cN>NDTDc!*mulFMO;6dRRX8$-KO?q%`{~qa#K^=65bUI7C?tO8z z9~3*F`=!8(!x7^R;H5jBouDm8pkuowJP^mMzYuHw;a4u^(JLB#8@y5kKGFa_=g$Lt zMmK2nUIZ5?3-PyrE@A?=LSTs-oEt#>{b^aCm_=Oz2rgd1tJQovAAq|iaOLS(m4oII zLF>5C0}I^FgBk!jHXP)nqnscol`a4sqk2RFDP*A*{(!0nRn>+EUVO{M;Xcrr!r*-1 z+xZjWOqeb5xgc9WYg?O-NT9E61(o;=3=n;WCtsh0w3k7Sdyxdra~z zkhv3}=K6F#^yz%(*?9nTv=7K!(D_iHBJmw~Y{T`0W4D7w>wyv{P;Ck_6nU$|OK`sn z-X8^(*D&uY`~iEnRRT1ZbKvD7P`e6}@!&DH7F^_`M)b=U;9*2ac%YRJ!5*ELJsRJD zCTBf5!Lyb=-9-YO;7iS1APcfk$_)?DYWPm@`Yq7?me6~;96>7`xO_Un=Wls-9s^C8 z!WW!D<~l(GqOct@NEe`i4h;4D?#cjJJ!&xX_kX0*k08P0zyUhlq(sW2Tj1L<1;~CY zkAtuHn;+GCbWR0r!u9F(ZSd&@FBkxoSG}$ae88=?UJKA*TPJk)P%CJ00O(|l7cUY( zYro!mb{=_gHvy6qz!y=qX+=0ztcSAP3O;wtn;J1{>$nz2gsPB)x^3g@K_P z98Tb!E9XFsk@IZe2xjeI@bug;v!7~WO@~f>3dg!CKKQLboPQz9qwg44ieyZ zIRJ_pewWXn%IA|0#5m9)N>k>5?I{i32 zItv9nIs+uY_m_hD|Bxd-J-R`6(t?kx^nkb(cEuTJpNNJ>r=LXYffDm(c%VL9sQ{U4 z2VL~h%esA~0)r2~%K_LCrL6}%_+4*+b`C6=4NAzND?l}+H1x7^P?HK$VLE~DA_di? zppjuY4}@z#aSV!Us1RsVFSvYv%>gMdG1^~RpkQb`0xB_(igoz-FlduEbQQzPls}*q zeekr+-(m$ifTVjXD9^rVo(f()0*Xyo!iMFoR)xQyJDfq6ut8HbD04ZL|NH+^30#zc z=SM*0F+4B1bRw*21znop139e_l(bt_L3cxUyQpY@&tw5jX(Q@$q@Y4dfyuCqwEQig zGTWm&bOuP4!>2Pr02)%D*nJ7w*$fG%?x`T>`gDTJf$3%c{=fVT8e5nEEige|erXLZ zP$1rKnF97c=sY{9Q@aB+z^(;dw()WTc$morG#z{rlo>KW=M5VEf4K$bf7fmwkbh3{ zw^o5o1*bev-?rO9;^j=RDsa67-7E*XK@XHQq50=UYZ9nyjV;ZC(l#i;gSPz{!Tj1? zAOX$1-4z-yMZm^G>XX+0{HKTy|KUsDvLSf;@UfKP^*0-+BV7E=p7=sc@# z-yWY{){12c3?8kQK;39i|HPBu<(f}t1_$WYjTd?|Ao{@lno3Zq?ArlS2wI4KhyhX= z2to>4&|Xr|nRlJ{4G(}DLEuu!xAVt~pWr$O)GvlKdcmcRZ+9IB$VZ?g(NY5{%e(DC zOLf6(bhY_gK<69xx^D+9%WnsbN1(53Uy=ZFS%``Rs9*%GSceVZ_;mgPC1r^hN>KL| zf(FcXfW~RTE&^WyxJw6AW_8|w5eqZMxATQhC*;~paJWO93ho+$jWay(!VsnwW))b% zvDsCF(YL!yqS>_vw1k$w6}0mJ6tvyo7y$*jPvD&q$C-v?8=hK-xU-h8A2sZ0g8t6%JX%E18H{4n*4JY>M< zAZ-6b+rR&>w?fMw&tOA`B=Gy}a?N5+^_3348 zTns+D5tKDvBu@SJzuUJ1+?)Zq`US(kfB#=LgRfFI^XL`bD2u%LVsY!g|1V8JJ3q0ZDKN4WGszD=WFMfxCI?3(| zpexlu>&jR_%Le*Dc0uHCLrN0QPIn0p=wAC15FrmpJNLy-2p2Svw+_q%pE?e=>`5P} zY2_>dI$e>`199*!zayBdGR<=lplzdK{E1d^>AYBz!u-=a;{j1vdcH*SQZr z{TrHtL32v53}AQwocaw;Nsbn-{q>|$rp1Wd)>h6yH&u>g{XaD@*7l!lnNLgcWlTVOP z1D^x89bA2ZHkWmS?{BYt zF=!t*#!k+){dRDIApf!HFE)qX#v1p`&`BA=;N8 zeu37Pf@bwrfR9Im^smURtH}6z)gYb1s6>(-@@A4p!+qzCr`P&h19kO|M9=r zUia_6;Q{bU0r2?0M<@8w^%wsGk){FucYxB6x5Nr|56GSDkd;eppgs?1@aHe6o!)s2 z)H*N^2CrNKC9apxz&100&3&;B*}z3$13`nKka-2rrgrf88&aTQDu_vMgIF0}a)F1T zApQlL19M+IvT^QU<1pL@YRrR8G)??27Lz|iad4|K9p`+XJ$hUWiL{O#93OI3PB+m9GWMn~ylvO}fg07VSs|;-a{U35PI^z$>&P3>#4s>*zzePuqfuZ$3|NH|U&A%1aF#r5eDais(}~oa4zUxkQWwypkWG7yT_xm6_hz! zPnJX??E-)_*+DCJKt`_$0X02?!43a^pz$zhLI;nvgN6VM54>oDs%fs3U~G<+_>ZV6 zoF(|Txpug8`%3tL&e6E%0XbyIr}MpI=YdXel)X3sInb}=CldpMEC049kSphWI)8x% zDWK}R!47o{=`NLkjw*$Dblwa24;iE~11*?nKB5517n{M$)xq;3;88fxJixPHh#x>p zf?N#`Kvr%+t8)}TP2>jc=yaCIVt8=~G#lFuIx-cc0<0M3E%53akk>tuAtPy^V@EtY z4|sI8f;JKv9(Yj-wGiS0sD0o{8X9_F-H@^id=cew7SL2LgU9z99+HblO$x+qXIOU9Hzy}k+ZVatM`;fLgU zNO}eDw_$8Oz~9%W#K6$)D&e>X)awE7ngb0|@NaW%fFv@HWbocy=-JQUp~Ke(6To9i zkYPg4<|9m?o)E0n1MT{Ibb3p8S{~tV(NzNN3r3AtUZ}%-J0HNhlgLRFl!if}Wq9Dl z<3Okvz$<59NdOcj5HG_57k*B47Q>7E84x{4M#84?K&|f=@4Z0sp&gLm^yoYYxj_dS zmoDACpcaA;v)gr; ze;xyaO+Qnw`&AF{wOAY3L8X-*f6EUc28I`xuS5EIozUK$N3ST`b9n|(j<%=(RX?w% zfaf{Eg;@cIM`tUjGy<1qk0g*vGf)8nE~EA|{r(Tq{mTygF3VPEgwOHQ=oDHED7zWfQkc1 z!2m5n97DQmCBl6=--8N*|69Sf>lOa{?*R$amers@J&BrJ?)ifvELeh+a$r{)L=PmH zfU^WVt-#WkM>2Fa07r3<2DKNwg7+U%aR3epXwM0>q8^l3J)r65g#*-PEP3Aomc^&= zDKflpR~Bc06t7_O4tBdr_&~C|ORopx3y*Y2HU|yk`E)M@MH|F3hR~Y=96%!toey5@ z_k(#Aew{MNL6AKDg3$vU@t|g8CwN=-i}&te5$LSViwAHnXdl~)i|(MYGgt(8bhdJU zr%yoTF{pk5o$p9WJQ$@y90wYJ0+q<{NB|X_AZHpLc=68{q6XqUXc%CRGQ$HeE121x+R$z5BsHq5^q5vJ^oGkIe0je0{ddD50 zrE;i_2W_E+dQ}*z7_Z|YcOpAWz?0P5WMs$tbT0+P35p%Qoe#ieKh&BvJ`fEs&w+$N zr95bxC8J|>^8pse7+1q5kd_Fduo2)-N-~7#NVp$DKhHIH+LsY(4@W$b*;n zo!$~Ymf*{w_*;y{7#KijtU}L1gfvM&-Uk&y;!sDy0t!@$qj&;*bRx*9h6i4}^2YRm zZ|jqi6#rfq6-KZ&h&kX|-SEJRoiGiAY6@^I+X-$gOodF^!LP<`Nh3n>Q>HOy3S5!&VQ?>{u{d34@$flVwOgxqcfy^IZ{zZk4i z8vNTpBkADoxliZE08m_eK&^aXhOnf?7_>IC8*=guXcWz-vw*{=vlw&^41WtNKd26e znEc|yOGvrI`1AjNP#MSHx1)K_fAOjGf)kwabAHWNenBXgjK&61;fft_uqtzyA%j z4GfN*$M{=c2!IYN_{QI{UXX#I+jovjx9bcS&5!UB_Qmy5&}_$6P=5@LJ1-X4N!0x!ff>I z`~Z%2kd=l9UUWh=V3hHowGgdJaJj;E;uOQ(rhc zfXB8$%{kD1VenB)p3U{3WxWdA3=9~(G*FiUWEiNI2I?ceP%?wG&Vs)pEx(0k!8SKY zn888_sn0I&SLEA{6^RG}8`#=_vpr{7r9#Df5*wsrg zIL1YkWP5b8?u`X|r&QCYS9L1~()k0>`_`YoxcnXBZ-~N@=b+pLTA2*C8?<;CIc2?g z8U^t;imlO(G0?2R-?Bg)G*06II<1z!MGib%Un!8r4?2yzbOCJP5$I@MkL2T^S!8e* zslW91|IQx=U&u55xcCEdcVF{=M*hBopqX4(3FxJ=o}FiWdQG#~6&Q|#d&HonOw9+F zL09d#Ffc;TPU?1*Xgp%AXh_7t(~^; z_*?(5fo?PfkF`PEi`=()@yrpT9cMC!4!3~@@eL2W*bY`6x&vYo9-o8nitmJ~2A8G? z@4N2U0cz#(w`#I6Fo04c+;={m|Dd_h1GKgF{flt$>@LVYq<)v{ju-t_@TQ+n=X)2( ziZReI1Gs+&Dxp2P!Ka#eKo-F?A7BjN-v;hj!^atBzk=5nEi>MOsz28q&=Is|aPnh> zwZB10M#7`hcZW}Rf&^rA2YNSY|2oiEF6^{-aK{b2_7yaE?+U&>+q2tU0zAIi%K&cR zHUEHY(SU>?XmJk%e~X4F1H+4GP(1`LP2T%EVvfs;M@azP&JP}?; z4E95O>e>+SVmIh!LP-0zWyd>^|3DXfxCy|TohVg3=zJ1;NK$~fjEL%e6;uO8+5we= zpi~YzG~7*t@kJw4A?%oQ*b+L_ECbn5=qBLNS-=5WMN=#Rst8=6dLgbt)d8vkLH2lb zv#vX6!~ognCj!;5548Enqu18uKWMcaqz3^~{K8mR9J$0ps!MO$K|%nOCJ}?7pw1@5 zc32YL1v=INWL6f#i>;v$Js5!ineKH4T|?3cGZ)rHfw=~UV@Gvm;mZjMVNz*4+-Z0oodyM*vX(>%I?`* zCBRgo?AdJ&o|Cb?0v-_a0L{rLr-BB>Ue>$;ZB%z)Kq(VJEkkhM2-Hn_G1C?j7NBu0 zQ1=1S34*!EvpWd9Jr~qJ>MZT>>6{AchC%yQovsZpc9}sEIjHI9+xY=Jj0N6hf6t{m zwE^0tf;M6uLp(Zt8(v%o-OL9~<5ylo(l~f44tV$12cK@R9UucCJu5_xc9H-Ey9ab# zN_PN97HEt%z%k@SGm@DNumAstZ$JdKybKS#*lYvwCEQ<~h&%%kWLQF7H|&-q#d;W2dWt6CrEMvcbA+cx?LrDJ(ym^MuMAY ztt_8G2gSVH_X>7S5hxu5n8I4X;EuE-oC|6Mzc7MxK?7nhluiHrM;xpKofvs({~VMY zK>H)Q3qa>6^0$P5dpw~0d)(vTdwUPY;~p3PznIGN=f7v?k+cb(-EJJ9)?9Z1#|wt< zpoO|_5|_0B7|E5Q;?aHGH3@_fl1J{`gAPPzzzg!C67YXujf(dE|3Ou3<=|erWg2W~y;C;Hm zQsD51hdk`&K~Vi?1?u1Sf(C@ag?+E>vkUT|OI<-B1=9eDCC6q*4aOH{@?s322D}|V zt_FMxx&uH5ouE1ZbPXEB&=+PXsvW_5y-^jz3Pn)=A4RcGcPpr^gsK|J=-Z$=23-Gu z(j?Ll6U<-8V@K;y6#I08hcIy(-GHtd6kMpPk(?cbt{T*ILsgCBY!wvMjypJEH^Rc5 z4Z7M88hqa^pt0Qzi9=}D!m|^yM#iVpTjJ&UZ=gg6-uGkiK?2m5;BR4n|NlS#Hini1 z{4Iapf%eiqw~6O(`S|Yt{})HzNj)* z#5|B8*WdsD4>I@sdyu)`U$2AqTM$j)mlq%X|33lR5IYV|prDp9cylc zJzmIIBcy=>nJj(z^ARH7KYt;CaO)XJ0S}u5d0`t5F6E~^`~Uwqc!&~Y#Y@%aSjsjkZ4}xS# z!vilIp}JvJ`pNI8RXTV{ck=;8$4(a&jTgb(xa#+xpb7?_!m+0)aJPX8bg8Qg_>}*n zP(7e=9O$x4r11#kcK&RrN{F-Zn9hPQJsqkCU+ck{2sQFhHL!4n51{*WCQH0L46Yf$ z3CE+^;y-_j9C#%vJ1nQ5jv-$*g~Tt!9|VT+m!T;JHI`7l4jP&U#jxRl7nM-O1lw1j z?g25B_=q-A4*)b$4)%^ux5A5NJ$PRLQXxVb$I$U$pUy|n(#fauWAgzP@bGNF zi+T4DjsMw?Aq@xEa2IGy)~9e{KwMJ0x{O`eERUAdu5IEH>bCB?qD7%08X%eY?{@ z+b;w>z}+5ai5FjWKuwEBkeGmu&Z9;Mq^>}T4S~Ce*x-GHH8wz17sN}j{wt{Q3mUvt zhWY^_>(Si{x(EZ()qsZ&sCEIjhG7jrPzS?X0-RD`JTig=0x6-q4?4sQvD620JQ>(H zn4M_t^IE7Spesc{>i|5uw}M6~An^m!1HOe9>P}EY3b`X>12q7B&@SFFg1_|$7pRjD z-r@ss5qco~GlcjNA`7t<#kt_-C@9atI&EiAba-_4f?@!o5yiRKLUaODFTP?e2dW0* zBA@Q1ph*K1CxIs1K#>e_)eCE=1`I=yyPKe`lP?6JDj|sgl$5){v*0MEgAXNvjU|JU z1Ejxs)c`r5P<4P(5y&wf-K=(-Vg1b|P!0QJL1TTrw%x}-%h@1Ja**N|hgopdN10Hq zs0j~LghB!Z9?nSpO;_kpIYuZT^*04!=E9pdh#tzzNuW`Gr1dqRl|gU8TfKk$=Wp=> zAC&}~nub)~hxCaE637}B*gb6hC|V%#fEt!a)j|?fF={Y?G6`BRAgw{NgARK`R1hjh z8K5?x6myVb6ke9=^O44$;6>vqMGy`qx z`E)06yjY@+t9k=NlgD;OZ{QBZH& z(efBScrBYD^0=zuffot7kidh)CTc=~WjfE~W3bd^h@u=)CZTFVN?j~a#i*$Z68WHb zg=aFPI`n}v#62jH3DE+NC-`zGc(u3+stZ)$z;a%9hzfYn1H3BgrYgu-lvPonju5n# z#8?#t8paF&4|9CD3Xjg#DUhk^x3@sO6wv;>&Lb}vHiMQlnW%Vl9(<{O8+_XZXqo~N zoQ4NpFzA3RhOh1c&0c}S3rv77(14UzyJmvQFv!IH9q6z%minf|a34QNVXrOgA$f)u zkN%6HFR}s860LFr4?(n8-vXTr0a>yH+T8=XZw%DF2ip#+!4tKi&Vz;;C<}mVLGZAJ z;r|x_e}01o5ndKN`TzfgF-$dN#tUqUPbYNk5K`D9dxjr}XCmWD4EKpc{9<@ep5cWU z4!_)Uh4>}^CIP=p)xzbMo>%|>qmK`zLsh$U&xNcyg~S6W09;#d^S4d|-O&u0riVo) zc!Cw|X;9FqK@EVVVvtU7(7`vWfYP|(ffs)@A?|`0HM>nh18d#k;0jdF3CzkI=s}tA%6~i$G8w%Bmnq46UDab2ui;?O? zL+HpkzB=)*2E_j$HK6flP>~5Y3sQHYx42G0wRD3w3BweFLO3!GwB7jr{r~@8a=rQg ze;;^+q1QI>g#yEiD}O*EJ_lbey$U*Ka4D!4;oACyzmE}=Z_&!V45$sLp2c7Dxj@Ia zArVQa=3|4}fVU*WsQDg12a_RoKn5aFqaCT{Tda-R*Et++jdR9jqAgLnot zMzAD5(25RFQpjR>u?aft4Y2_1c$hzT!NLiBSRoH;4b8dE+AF3TXUGCc5NE>tN*fQZ?n z9H<5iHzGIZL9<8BP=&~jcq#k)|Nj>^J;9qLAmhWx`<*>IuX*%}N@poBIEMQ4t_3xe z97DkSo*UoX0G0Ng;MMUyo!=k_aG>pt@aP4tuvrW0kU%GWK?lu)w?Cttu>sk5c-(aZ zXsir6Fb>*EjCSnC3q?uLvv8SMPeIGG~ zxYQdoE{C@G`4bPu;^zsz-8GWHC2r z^^6>}c7a^w2)q0mVn(MU=t3Eg0~vfe!98I9DTf+Tv(X;X@EtTmvnh>fQ@lTMycI1=^m8Tvz^h@km|sxUQd3PD=+dQAbZLLK&hzJ0<=dO ze2xRuAkbc|(fkE5>4iyi` z(FBGEUN9*_jtqp1CBq zg~SACRbrUwnht^l1w13LGD zA9TVKq@#GjqccpxqdT+%{qTSp9^Jhl*FltdfDZKmwOu_rJtQEDM(;!RBX*mpc=U=k zZv{0q??X54r@Q_8|8g%_-UAX3K9F%YP%!qgzDWjc$_Eb^LPN8&LI9qfKf$8t#fH#- z|G}+eP@edP)JOrP+r@H_@bPE{7raPIa9nplb`XK9cW@$u#DYgR>$ku7i9|s*)%;3?@+H3}%buLx+>D4ve3|gxR zUZ1=VG<^bUnigLG&ppRLltI>O)?buhfUYG1ZBF&*W;KOKmn!=7>MGomXP5w8pZETS zF+{%zL;*y<{Y41|@N_FAUZ6%nCO1L(032tA2VSVlK++yWnNRmxkmtaXuuSON`2sr0 z22McVq>(j%Rr+*-b-^@%(<%5Y5uaXN-%X(01X>rx>aq})VmG0f0f|AdNpK@Tt#(jy zF+A|16{;9KU60hn1xdeH@gCl22PGqL5g=0~y)|$4Ua!O;8s=$|AT!K%D_d9_obj%|Yv(<{L49R-}PVg)DrMMlpmyw7ipq zgaX!R5qyU$TDC*AK^#gTTDs5_=Y433gv;YfUe-`u zFc-p#^?1h!NI<-l1>GZZ65JZ{>3sL{GBOurvEhLi&%}|#1X`@41d4Cx4{-4g3IM|c zFSbH8z-)yiOnBAjx`V$}`4^}o4?33tY!J9`2N(9B+Okyq-~X4vzyALRi#URhLjtP+ zs|BeDMzaBA@k`!c|Np;uX^qt11KrQ-(aq{R*NDL*`9J@5mI@DMR{pt042L1{0g?~h ze+t~&dkQ)N%P}PQ1^Wxo#&cPTxuCL4_u(8P2GA0P-py0MeG728&cEH-qxmqC599k6 zFJFTOHlKTR9(&<;>Gyvh%g?0`qkTG`L+Cw#^J==)Eu{%J*r`xt-wh@C1|8|`KXZ~$0`Yi`aJY5Z+7+wOen`(aHY$IH*uuqYZ zlfi?3@v&l2&u#||pH9~k9^EzkmruS_y95p!+;v5^;L&S46J)@2r~&J- z8ej=E;3Xf-1rA6CB!dhHgBp;B)qo#C5HEDV4VVHl0915%^xEoz3=oAHpo`Uj?N9^M z;RgJYMTEhRmGTTPt{j7e!5ff4-H;2kKo=Arc~J$`e2Ew4{2)2dJxo2&Ymi|fu?u8O zFVvW&7{(Ywjd6y%0d$nb@zxHQG0-Gc2QtPDYD^r4F>eAPVIcxH=8-JOH7!tMJi1vc zwZT)G_=xdngcg031rp; z(1C-UhngSBdo=%I=WjW|$H3s({Ewyd6nF!WN3X5n3VDVX$Buvk>G+F#pumFU2v8}J z54z{M`G-g;2WX#5gNHx^xMAecYkMbKf#JmjsIC<#x;#1$zc34c#9A3>M6MZ>2|q}K zHvZKMyvSw-t(ygf6li!5w0;kCahyjo__{ccZU*q-vvHsUkf4XpS{~x>Z37>p0xl@Q z_dJ7&ZX@15|2;avi#K6M^ZGL}Ff=}5Xs~DSX#B;%z|6qk`biR$iVp~QbW3=2v$|=5 zlL~)}JIDgd8~iPNprI{mSyfGA2L6`&5RL$t^9aKEtpSpG3gJ8hb6!9=7eSm>0VxKC z-QdHZy1_TYdvr6Yf-aTw=xhZQ;ruPHKvo?Gb3i`!=&q9RX#UT_-})FN(R>JWpb@Bd z4Z1)Objh+6C+NVqBOZ`-sUF`MK&J7xG=o)xJQ4ufxe8Ow16F+$U9~GhwSq@C_;Os3 z+4nd=W*g{igOH3g^^gPuEU)+mfvRHGQ)E7p{q*Pm|J|S__Del*5I8V+fWl)Nm;){E928zwpz%T1 za6#KU9^F9-9^F+O;3VFn`1k++T_9(I_N){h1YH<%{DtHM4$$Fipa}8!&IC%`C4$i0 z^70LQd=Qd-K*qhi4Hks7C&A}SyhZvHz98ruL3h=800-VFKwg)0Xu z!%NWNwYx!q{xSf5AJJ}h(7j#`2tKG032-lH4b+VW_&U9Vyc8rE}A@aSw^06H71MF!NIX+6o`7YRQ4ZY!v%cN}~_ zBB)3>-g*LBn|bzvW?Oqfr6bZsjvkO(Red_a7mq^R;rX2n9CG<^2Z8V9^yua};Q?tp zHvHt_Z<)))!0_!LJAZ2qD2cb8EK&FAR`lt70I66+_`yfJHa}$KZ;b#cX#T-oq6==n zg6h9saQ&Bb239)>s4z2tPQ`pZ39-J#@%s^wJNR3ILARM=$u2O{lsTo~~k`Q6`WcP%2;- z0!0QyMK^0puMq?PHWmR;YPSQ)BtxzXJ@}9xbZuY%93}=xYqk?SiQ#H^z@_sg^v-SQ z&95Gi>*t~O$fxn=gH<9f-<}Fuy^_YCKNmE?=F$m11<(VsXPaLWyj~DG`^2v~6|{z* zUvn;KtT6-&cX#%3}5{~6A|tL-Mye@UZ;mhcQ2@+ z*4Y8t!r$EsYHf9PFo4#>Azxm>-+Dlpfx)Bk2&f~2(gR}n2CfGf`CCAvk{*yI#S3|P z9tOy@pf9z+SK~S`z?RHhoG;Jt!hR2=^a|e#8Yi3!sy{s}5A(M?2c^wk+r9Il`@vs` zK^5wO6oOQ+f{ruowOs>J0lJCu#h2X>qj+E{K7(>9Im1ds$v;T#b1bubdU$p-2>K`K>dQS(gx>e1Od0jx^kg%LX| zxH|~CeHz@P>gM=<5Ol8rG+%ghgO!5L1Fewo=)4BHSKP7r4HL|WPH=Pd#p!o{|9e21 zriR})P)`qXr!8ux@a((+%@-b!oa55@5;g6+8vaLQnWdn0J%}u` z7Mf+Yg0c)ecR;SU*IWz9B;Z++7i$<`0X6pkXlAo>E7<>AH2y_x}H*0k#q#*FLJYJjS(QV7!ZN%WwZK~64#K6CuCESPc2mdw}gXR~G zHlpQH9=*K(%as`Tw;k|EW@+?bJYo0$0i+z}-!2mFnS9)X@dE!o5d)8IR^<+Gsd;rS ztk-Z$jv47Z8^cSlZ-Mq(!;3cug_rtB=SA*j1P#qV+9HPkJ;0?OC?7zg5*m5U#~r{2 z61Nhfu>fpOtv|bRGa-#-YH#P|D)j?W*9_ZKGg#z{B!)$#sWs#~Djc`*ebf`4{nrA%#}? z775UGYM|N@$)wV4KHU(jyTMk!dG6kxd|M6DbIMa`N3b#6CG{>E139O zrhSA4hezlA&bc7Rbl!I91UINX4nAgn@$dvIL-$mWxJx%!6g+DV?&r2%^5`uP;P1Q3 z4m!jF>S*Y7=U}gTbb`mZUh8;3w0d=mAoo+u{`~##-RYvr018AO%g6jJt?Ud8&^Ax$ zX>cRtjAysMfJbL9s3Zk-8e2iFc+YN70}AX0XqOvO-+(sE&HxQ7wi=oI{=ZLwfq?;X zlTyzKR(L~QekN#i>j*UY2|$9)v6DsR#j>rCh}pLdR55{voWK{W9e&~C2%q9WkYZROLQ#PK3#BPa&Itst*X7ES+76@AaX-Ni=Z}C=Xb~EXN>%n( zfhBx8zx#9=ym%@DGQSs6PX`KEHho}VU?@N2(Y+UBrNg)5jQlNpUFDhz7)KvJp)=zanQhL@H9!NnRV{(L$O9KRi7=Whkw3FzDUjlTu5 zC<)w=@ag>aLiaZd!%NW4pclrsL3KRXdRI`zfB414-=I!A_~gFV*0B2spu@KwmKXVZ zJ;2cfYK+^Q0IhF-F@GN@n}7$HO?H8d18er^7Vu0y_wATM=^+nm4*~vO0g%3K2Zh(5 zfe45*!GUr?8tzw*Zcw270Nr%dz7pKP0lN$mFd`hF^D0H)is1nRQV+gq0JN)A2;>-e z+`UW&-y^^VN^q@_po9W0DUO5uirAKYPJ@kMSDz+m?8EfnL{PW*_94jX9D zUFVA-12mREi!@%W`2{-Vaxdt96dy=)&Zl#20_Z@>&aa^J2|#X#G&_7cmll9pEZs{% zCD!XeXug2nBxQMxzn2dbm(2$R9D73?xEy+sqsN9wr~;nJUqRu#%EP)qfWLPiES%Rlemlm<-!c#6?Ti1Q1*1==!An2T z1?0{DSom9mm>C!#Q*5q=2V4zryBc2dINl0!FsO&>)4dgvRJVdeTsm*MbY235u^%UB z`M_b+qldn~xc-9$d;!XFkTeQS{?8=gkq3$CFW{Ko4_1g2(+X@13@=^^ z!4<<}8l)b4NsUK0JFG9;$^%;cXuTG>fOzTI>&ocZ?8d?f>W#LDf^Qo<3MyrxMQZD2 zP|?ustnhLpcs&g0P!j=<<{ykDq8{K9$Qyk5d5DU_%SzCF#Gu7o3Lf27j(b2`30~%a zn{F=9LhALi3D8kr4|q)tDmPiKO~%i>r6|3fF_z+HG(!?!Qg zOvM;{x>eg7LDSiXLG49n{_Qq79?Z5bjiAZ7e=k_1KAq+4QAUu=ehV=M&&I!?*}l?!9-Xq{BF3PeF=*`YW$yd`|969i(_Z#{{r}&$^9v}| zd3N4=dFJQ;|GPn_ZoMr13NA=MqY+?NzjXZ%TD%Rec%V%YP+jTL=^*3NnPKoU_2vKn zyFs1Am)2kZ{|DEv;F|V@`axD`L(JXcWgX~Dwa()&gakpYO&1l8mzO~|2KPeB3dpdX zM>m8ANi-gv65kH9mx_3_-Y(&Xb;3LEy(stwPG*pl=^)VD@P>hbf$?P}XrdKV>a|P; z-CNWAPlUh4mW6=6Lf&g!IvzK%^w*Zn;$a1Tm;Iq?EE|oFMEH0_R4>Mv5NuJ zpgs076m;M*BvpWJr~((A;F8q?l16;G!R0AxQh`@^B|rZE2UmF6U}L|%3;`PeuJ|B% z)1z1PN?sZK&?g4nwA&xph1()`!CXs#28+l z1)X>RiF~+$^ZMl(K&!w0zhII7_y6_k-JsP{FLgnu0Ca;psxP(QLEO~}y7mZk-c=nq z^}VbGmBiiP>Zzq2G|mD^MWC(=w9VeC393<9y{nBF5KFW?I`6x5LZYyn0~Y)%K>4Ec z_zQ>KtgvWs=>{w6l<@34;M#f95h)5 zmj-|YI(tD;>)Cn7v-7A==V71Dy`Y5S(%IYa4|L1gTputs)#Km)|F1!VcOcb%-8KrK z(WT|fB^dlVYm_-a&3RwTHzoYAru;Q)}HnYP2mPcQH>gI3N-R)8k!9(nYd_HTnpZ3RhzZYX5^ zT@I7w?14FbI$ZWHT=sQ0Otum(yB{ul7A_kNmt6>#T@RPFJ5_WHN6CP6cb1s>|_tP!C`P+Pk5O@r^ti$KY=uYL&5?sdkiki z1J^4Bmt6sueOCqxj6Yp4?{>juFTiE*!DVxJnHka$!_yN$>n{usc(i^iarWr;6X<3H zT@}jF{DP(V2Xnbz_e9Y6X6vOA4Ug_dNEc1y!fPIWc?OT>0~{Wf7fSd&EGxAw$+4 zy{;2Lt>Vr@9+2xGKm|;gt{4MotUnBVaN>m41Nw-wfASdul zz3Y+}pTQ%p&Jv*A#Gc(XDgrMyz5x}m;G?lXCo*-$PVne8wE=DZ=yaU{S_Z3ND+aBt zJMX^;e)adiPj|KiXsxUGtH1w2n|lR1T@QffIP*MuU0XnlU;h99@7e1Px(@1Kqj4i`S-tPcP#_BB=Uf4aePs6Oq{{j@=J*@ zXyOwzinPnK+g;)HZcusw=>;8l*O|KG#e|oC|985s@%RqD)Z;g3guNAXS?qDhRvh2% zR0hxQEGpokgx1xdB~_p~+yfH)Eo&G+v-6;CcJnV~{E?%L)UXL+aWA zACl~K?eOSyo#4^!+JSQ0J%8(Aa7sK<;nVp5Wi|oSzV3EW0iPJy8UpIx_S%Zp$}_ys znC=z@!59^D`}fNoZ~ z?qT_hzcpLw_y5k&4WPlUOE11EfD&7_#LMHL`8#*lgCl z#o$`zcRQ?fdc(oY@FH9Ul#*B%KqNgk!bg@2V{L1WHFvkZ|WN8mMqYu ziU;I+7?fP@(d{nb(_H}?hPCkQ7KaRjfwwSuB)cng2g!K!vNXDMn+SMz)?2thZdHEa z;>y9`)A`J$vviF|r?Y@(cf1F5oE;QLVh{d;yPBQ%LHkr*up@E7M_6^X+JNr6dw>7$ zf0s_^?R}buI;UEIL~q`QX?}4I&V;7^7kiLITqnF(i_GnKF%O9gJ}LY~50Z#$!;4xZ zF8B(N7um=npgH6hk;o#T;gc8c$ReQD%L`Lvkq_YhJhBLAefSGOWD)R;-2ZzppFyv? zc<~ll1k{guaT{3#G*bWKB(eyobMj(4vIwX<^Ac7yph?>ozwaW20chU(#Yvz#yItOIdLAW|c&0{W|Tfu7)*T4lmI$J?~;}^4#ML?PKMF+A7Xt@7H8L|kd z!TBNuSp+nT`637|0y-Sr1&Md`g&CX&8_rQd76G+YUkKd=jpR)QB?Zt-!PM4tP_wu7 zQi-xh=QU8iznJ##{|a``&LjL&4}nxnIlytK1FXITw6P4MiN7^jkbz+*XwLCvsvu}fAY{D+Xs|T`VixG| z*zTpE!9MU1((@MrP8EjX^Tfp$%?}tE4{%=SJazCDQ}ZLn zgO8XX9A+?w8Ny)&b66o9HZX?`!eIw<*dZJaFoy%e;RJIyIWO>U4;D!444skI_=w>T z=Y_ORXMt|l37yU&-L4&-&JvIr_fBV-Zr6rRX9dVszD{Qq$hxXdXAQ_0L#MM28xYQeAX5gDMlqSWx$l2cT-{cmt@N1R72DINksf0dx9*2GE35L^pW0n}2Ep3+TS! zh?wrVppv7r12m-B8IjOE7gTI?P5=!PcSfXigQsI$IyZnuJUSyXAQK24#~V(7Z?XrO zn8UwqE+_?e%wPp|Cp!;!o?!d{Ui8O!!Kv5Az_at-i~jYjkOS5|I-5beb-Ps#OMd=JmgHqfcO{4Lg?`Rjv^S->mAOLutmvPgJzx;DH#0~*1T zXV?Xvzid5Fq6l4iGaGb+Nayhvi)TtOfD8ilXb-+n;Gc5Hr}LXn=lhP(ju+E!g31^W z4_y6pAaf_YsJ!|2KmWGSj@ASG{q-Qfbi2-QH9TPZ|33pmxk$^U5&@6y&cF%qx0T=(CVERFXpo{cy_X=tY9w{1ntD-@$9a*0F967KVe~bQ57Wz znr0FJISw?;^~1+9wV^}@;<^`qZh%Hy4|_EK_|M-e{~vU0;QIrf%|`?r`2}56K7iDg zUV*Iq0iEsI`OVevZKvyw7e_$)KuuB~kc&an=&lnCZ@-XT0h-xM1zi?BrPv#`KR6l{PkC@&@Zh`w8f*py;LG!%A~E>~^7w;m$BP}S zLFwPO!=rO9=vF1rZNt489Gx7!j{ki+U;BW%481M~1Ux&Bg3dbyJLkoc>!5Hwwga4@ zTECTWfJ)f>M9^?Dvq$q`4j;?crI&rcO+>JvFEzl!0l70gAa`c@bgmEpg)AhOgYFYM zz|FwWc^Eu@+kBYOBl$L{VPm_7mBFJ|1U!}jUd(XASFA2bB?;=^jtFlM+1WbsAkkU;$i5uV*KDgrOIg0yxX^lg31-&(~DnjmCRanyEE zVF8=v)9E|GBl!bJsf0%_3q)V%S8!&i1_f?&?F@K;>0P5}vg920zbhUTq@fT{-K;wAFJUc;>&4(EsEoD^dulRPp z^ysebaOuvS;L#mB!-Mg+YwO!OXOL?=JOBE0rq1x}`~&T;dUl(rphngq&}G-1EGnQe z9Z$k+0fUdoMQML-S0r3zhPNKO$H|~W_04*o& zPWSNcb;)J$>D6h1x)Youo_jPO=6T_G6Q;iLXF;vEZtzwqkItK(ouCP756x@fKI$!>&c`0i1}|J0e*bsreBs-xa|AlC z)NKq;1rl+fY<2vF!W3{S@aQy#<*=I`kfiU^xd1%+0l6axRBW+uFfeo;v;F`7KQn*- zbxu%U8hjQ{=lz4vS(}fucqIRS@n9Lqb)cm?ppfzCJlHAG-Rb};B07C1XdW^=&>6bJ zvGX`|J)!FipU!VCoxdHMk2884e9Y?8o!|j#oy@unizbgw*Nzw6mqE?2&CEz?46dfrS>#0q5>Mhq6cSJ7g%3!3a%qQ0ckPT$XN4CvV5ftUi!+alwH1F;G3ZjU z?%Ek1ofn~L(<6B+sHN-E`QM|ndj{w#6nBuOWbi6YuxK-A5aop-L=@EGg@}SiQC>)M z!Y0)_no=JG##QJ(_>m^S94q18sW%9lil7RY2pir89gW2l#>VefLyQ53TctW!t2RM=DjGs`1ikK!yj+{ zeoJNs2E$8^4SyW@Tg^ekRo$T-od-M)K49@+ZUQx9I&XP)vRpH~Hn zxEaCU3c7e6v;qW_RWw2I)D6DI^~K%WEDW7D!HuBK8y=S*L2o-h_=3%YQ{><=@M&?3 zFG2S=Ldz?VouGJnG5G>08~g_~OHQzXinwE)H#|E{jzOlJj)HO($T6U@@%2PRe1PjURh)8+4OK=kXWG+@Sey)73@t47+~lfE;+-v-8Lc9$t{JsOVKg(9zJKV12>) z4OCPCrXkU;k7eD1AQ@Wlm-21aI@6n+zW8 z_vmf_FIE9Xdl6{*F!`iM@+Hu4krTZ8EkAnK);3GplJ6$=TmUcocg~Ycz&gG!zA`bu^1J7878Ovcddd9f|9|i>`s!7`wt{Xr*Vm!L{g6Gz{T{pa7v6TUJtHIvtX7)Jl zECDLkL1#KNKKlP3)DIVKe#~Af10Ot)26b~F!Jzv8|Ihy(oy;(Izvu;Rr~r=udUm>7 zpbe^qGchn=F46XYRQw*t9Rk4710ME(i-A`5FuVk{h7C`?y!r#wT?Hv%03}HN7DsSs zgO|5^bj|=p(90-L`P5r&4{m;Y9DL9A!gwL5$p*e#=B3L|&`g>;{8XEZ-E%>sa+>!* zO_#3kzy5o49)DT(<^O-f|1a~ufYzLX=E)M{!0Adh50z2$&hwr3 zd^%r(R!cA&yx{o$>p$q;_H@v#gwQbPuAKpC4|WC=y!bvJ5i9YK!?p9ZvcfH zIMyM9(=QzCSs7jmfD1L&lvuFm-xR_;KN)N&I9wq4%?WN_#V00^xMzY9gHQKbQ2FK4 z`Ou@+)MK^+1MI#Z3*XKch6i5wf|PdN1Gh3?e0Ts#o3;z5C@>fvc#*`<%m6xusAc=x z|NlLje~FY>dNlu1Dbf6Ph_O_v;TO+N(D@bMJ^;V#iI<=by* zy6ZV!%>T*6;A5@9-wQr)v)h5gtDEHos9Y5EXg(qUof3!zuZM9pJYaaz@RH%T{h$pz zFIXqAg63>ju$Rh#)JuAF3wU&1ghZ5d371FXDFy~629Hkg@R!e z;n^7`0b0ygfBo-&(6XlV7ytizbi3X_u@%y;Hau_`G`~=K;_rWOyY@4`+^a5(q6#{(p_CJJS#h*uOzhzopMU@Q51oGm+23-?kinz# zDQJ4ov-1nsC7@{pup=~(9dX0(z>DW|A&%&L=+m76b;k*ixBOm1-0}W}3&b5KJUT-! zfR0%Mxdq`4Zja_88sPYdJ^Ui`_pkr(_8lxdzMMo356{j&hW|m+mKfm?GnbVCbbV7d zXm0VCN2luzP`CZs8&GSNxw}B1yMo7qxmw`Gm;Iov??i;l?O(tCBbrCx`BTuODDr-M z&;$xHA2jC*tFJ)r_vrj_7?~dmZqIpiKJ{pRBY+&1KR~wv`F`-|Ed8+WBQFEP3%QrF z3?AK~KM*0sbn@^Ek6)mug4DlY^SjGI>0RRGe-BOuq}g6jJ02|G%c}<}^m;{g^5hxz zf%db!d{W250Fws~NxW>j`1?O(e%PbCT*9NfUf^XuNC@G1n0j#53jrkun93Kf7eQ6b zJ2&OD3$VPKEh#m0GwbP;~e8-L7intc!2%#S_htf8h*!@I=6l+ z4fpAM1eWvZO=9%zROjCo#OTopHnHIuN6C$b-|;0kJi9{~48L_qd31AlHoGz~dUlJy zJ`c&Kt=~#zLAHXM97q$Bw%vl9*x`#9H3@1 z=x%mU83yq`xDdGiV(EDn1~e5Ae?aA1&$BSRUI5SU&@$$8^D}n-*6pmn|AWq=Xjunh zbTh-74D9@^vspn$1poPVM4=?q1G=QB`3F;JoJTKcz(v5L+w|8Ph>H)kNi%prRz-qJ z{=)(u-N76l-KLkI@{8J#5()hNP>=3l0gvWiOr`uD-OdWH*LZYCE4)4mYR7c5?uZ1} zVLzw9D#r7#nb6ZaIBY{5JHLV|g)5+t1)V_T(aqjqp~v5P3|zOfsQ7d~a_Iz3;vZws z^Jr#f^lWBPVSG{W7jnZWWaxsKe;Wg6rsaOaFIWE7ji8Yx(7bK8h)M?&SWh>Librn% zqi3gxibuCF|2Cmsud9s@|1vNzl=5^0FoM;9%!OO_f*))_iLpmF$Z#9|(j?Dr6vybp zHNANJ2jrMi2Ux$ZSx1G@@W5+RDF4M_uzblIs9AdaEz1A@|A#xcCHVjU|2Fz1^S}uf zlybp|7HfVC1)qThE*CsHpT4-+$;yz%pU*02q{QIS$N@@a{DKYwpfu*d5V}tvQYpcL z_C?f}U;jbp5Y&3~nqJA22QO?}_696g5(rxPegDPxRvreAU7)530|SFWng@T~0nl2Q zYEZNud}Y)8h`sq0bMr68vOterOb}%aAS0tZx?_KMbY3`#$lsuWwC>m+hL^y{Mx1=v zBLb>8LHm&IgA^NnJNZ&FUI=vP0W?1xJirV(@6x0B1d~VSq1S7n;RjND^5whv+^7i% zy#5B1hM?X9m4gzXZ4f1P9-Tk-ffgY&KVSx} zd@C=+0It`;T0zr0C*doM`AdR8J&MxpFW7^G7(k|ZbRGj4Sh^l;07$jGN4GfSum%1S z6VNPODX&Lo>5CUv13@}UUw~}$=sbS%WeeCM2L@1y{4xnV3ef-xNl@JcQUrEQyu1*q zcOBsV1yw~JouxlOE8aJ99Mk&l7lMe8G3hLeXu>zZ2smpq1h ziK~PMPIV9Pg?zjo%^w(>A29N7JJ5QdL=s`zIFFEef`OBmE`5%viuk1ZEFL-eN z@HlvaIn9GV@4)LrNHs#*1W;N76;)rL2@a(_@WSvw^K-`1WYB75PEe8Dx)q%HZa`BT ze@iSQ1H-q&?EEc9KoY&a55RE*I(D%$^}#;SS^F<;Jpi{M5UoD`)>WVm7o-IYt~$Zv zRjfb#jTpdMJi0Ajm{iL!fJP;1K;}08X5??N0*HDqRF>AAo$>V*LOA z|JPFBeB%K+v;>mjN zn*T8Jx8#7eqqu(#*o#L%%W*uQ?w_UuE; zA;Ghf8{E$F>3s0A4C2BIZx z_2|)EFM-G|C6VBaYYfUzrK#ZNjz?$cj~C*qpdAmPKR{g>Gmq{n0Z>!IR01}{lL}lu3lL68}NjQ!K3*}(Z}Zqv0-j2J+Ud!ceqmce5s zXw6xv3aI=tJOCL5p! zfc(Z%st?Z4pZEoMy)={<()dGIUul78y%R+pAbWR!I;qI@Pq!&2%#96qVQ%Da0S#xo zJ_p*b^@E?kB@dJ?KA*}6CEBKof|NsC05;SlK3qMeM9UNYrzdf4Y zNPwjxg4zAs*=D}&n#$L*kv&2ORH*x?%Ai@d#-=0u=uXUf+PZ z9~88Z1~DWJw7%ZE3pC?t`0d3+Z5amK=^+m(-jcvx1Eq(lkD%#6;W8pn>;#yH9ukoH9Sj} zfh;d|2N~=H4;ZeJG?33q5z5xrpge(jI?aPFwhhNa%B3gbA1i7^&8|(*D zSQ_~8LR}FQ|B(Ey2a0=;GSER(|4Z{vg0j~>L0$%imj`aiLh|n&WcRX4dV%BnS0^mK zGaewtckBO>Y4BiSDLD_ednYKplz>(>@bkBpfD=Ec0BCu=0j`v_wDlyk)%Mby2h?Z- zw@;w{1Gk?*McNOhk{W2}>K)+k0__n6JKh|*j%VR-X@j&D82MW#fpSOlFE0L8(5#xr z!56T~{bfB=O=-~!(JoLi?7{$QLWFsAv;GD7vD;Mbfe}NjN4Lext9{atb{bLx)be_X zHmIb9*5RNU{m~!L0tQ%Bp2n|tph_)`Kj6R$#?n>L76Pn20NMlyZb!WC0jIalACUG+ z^Dln>R!}VjZU(PlEa3&UOFZ{A30egS%TLhoAu;~t3B|u6IR0;7kADwv{PV=Y zh6*$8Q78TlzrFZdiM1!7iO~~KM~aBn1Em}%JvuLd+M6d|T20|bI{&}}t$lwTsdWVk zcTidC80y&h7rBuofjsDP19TPJQ%3$)(6v$Ev^KTaZ zmVVGsc=K-&{uW*)1_sxbw~%vj8h-Qew@e4gb+fj3f+l(_;NubCOH5u|E0kgIZ2rSs z%F=qEG{U3T_rfkvAqi=>U4W=jx-QG`+TNp^HPOw80W1V+m(3{zwHKf(tif%NB#3hu zLH&c@%=|4NKGuw_Ri;4K`-*w~j6n?RWh+P-hST?#tvt^}OHEMD?}8#JK) z8LZJ-q62Qn?E*K3pzXL42~g?E-*OL>m%FPuUS0(+lZLdv96gZzUjXsH3Zym4%-z5D!W-!pbguS+b=<9MnK0|x>+Z>f}{Q=Cqxr8e7adHk^OTfAL1W2(9-_qKg|3s zZs34H3iZ-B(1D;RA%2Y&seS6`0&)-5MX%n{Wwe@i>0AZ0HV1=WfI@GxY7^v_;S2Op>f zF3%f&GM2n=xm5Dnqw@p2m$DtK{}_AeRgczhB^Nxpp}VG7N{@Wv7jP2*7o9NDi$oS^S7)8C78}%uznV18U30Y5+6u)iZ3X^ z><8^>#9`Num&bmC7UqHKUu65Pm1uf&euCTe$)g#yK6q&YPVC@t@Yn}){7cZZ1w8+I zfX*ys09pJJGzSmq|Ajk-c|rz1!NnA4*y^-L^BWJJPS+JaoxTf@i>njJ5n~5Eq=CQX z3nK&QxCTc4R?s~1uxCffIdH?7C|8Czc-Jp}NL38||O*^2&<2*YLc!FByEz3a1 zuXP^x==D7SF2H>{YY*%L-ShM!<)SQuXXgQrZr2svzFT}cpZRot?+)GI)5-8+CfL+H z;FJIF`E^$NC)(Ij`P>CW~ShfG1>KPo#Kg!wO&UagxnPJiw(lWZWCn z{^f7s1s566jq5D@E$^9NiQy`^Bm~9UX$Xs-zxDoK&|UT5<~calb|9sR);Hi~4h{^6 zbbs7+1E_BDw7kaOA_rPD+4%`{XcIIW_;jLYg9~Z=dKX^mF)@Jqy^u}PX0U~ipiu1u zorQr&lN*qdOe^TDJxISFKAv*ibqmD)EBr10zz1tQLb3l5S~k3q#;qQ4}-SAo*i0RQYmp!H`A{M#<^yBz9t-SZNZ{^8{zSe+xko*Rb34KFuR(F-- z75aRouR-&hNa+RKX8a+--?D&-0elp;0}~{@9Dt;kg?1qK3m~NzcZfs*I3Wpmbh`5m;EqX0IK!Nc+bf2%X767P1GSi#QU z0$zOt8f|H@11W3e_lyw# zo`9P17bMfox)E#!YFq{MrIvs}izdL~AC8(_oPiGDsFMoks$Kdh-G)*Gx(ap*NPE-Of zb-+m*G!GEK0Ukzx>tk&Mr$dI9pe29s{O8flnh6#c0H0_8YClSX{U`A9A*fdAEdB6e zMIop=S^MD=zo6@n7qbd^7(Vd}`2GN;|0*{A7EpT%GCT)LN391+LGCGm#3DE|fXk6? z2M+LZe}sEFEy3yL!R86P6oi^52<9`qbcFIXq2?Ka{M*fX3o5My;hqL_1zuhT z75&|;Hr5c!SRk^xV6MQ+tsq&;fBY?=<;sQ!UcLjzkPD<5E{y_pD^ccCDm=PPAD)Md z3%#^B2^xxn`X4%^pf=fC`*IF``~+fhZe|6IFDVh zsSyu;*F(_s104_PJl_1A@%7aSFT3A?bTWYRIAe(vXz&4{ujK%w33Rr9DMI0{=H0)sGK`jUPTR~-n zM|U;Sz(0S>I%aTMW9M)A1u>D4zqJ8wju_k=kp4PwIaV#<(G8lj2hFhl15Xb+sB?nG z*ZEuO!G$ZLJ=qWMT!1#dfC7-er5dEB`3FCLYap0a4{k-jjDeLu@Ost5@;ZO(Q*iNH z4IZNBZv|~P0!1r-%Up2(4Lte>IvuIS7u59cHa&L+ns{W7fwBfDorBf|fL35Jdo=%K z;%@-(Q0{B~#lqiu2wav0 zOMq9nLBn_5zyJRc;X4mh6S9{kfhH4TJ-P)TT3Jg2JvxsYetV&whHX@jzhyeuONTs= z=lJ>Crh-I4O-4{UhjsE98eUpM%H!A{;1O!j2qidGN*$49cro=IHv@QS2vQQ@Msea} zP)h1X^@QhtuqXIiAApKy(5-6MK@23XAOHLR|4SusRKd$%{+3p7fI!nfS4kr%zDry| zMFxM%S&%)=Klu1t<3a5;nLq#kzeJvI2Ms}Bo%ns}2lC$w>s8zg;AuWY4-1q-T3&)& zhFdeJassDEgyUPdK#m9P4gt^8z~i$8bn5y`UvLe?@Z$7JZibip{`~*{qVcLA!^rMtxr<%RQ2e~f} z%8wr1ro1O1sTI`ONjwDV0w3|{HvNABbPUXWP`tkIJ|qh|G#1i4jeW_p`uBgZzglmD zPE-;0=)3?OPAe^Gc&6Y8>3hNF{C)Uc9)QeleZ$QFF#_DeJ+=yTzyx@_rrWgh1jG%7 z|6klY2zJ6t&^8xH{pHbm8`DgW2d`Jb+9l0DSW2uQQ4MOCd4Qt21+;F+quW#;Wb!4$ zlOPu~LyU%uHgq0(EeSQh^ZpBs=l??Y zD6yp>V-4&jqL2cO8MHipSpheLW9PBgw&42ygHN|Pc#HvblL-rdivpy~W8`nW2FXlZ z{H-FOfuV!%cs-lHF@ny`bmian4YaIQ!14c8*Vb(8FP;Ue+$ObLM zbBuM2gUs_Bd~fdw>bHT*76*nGmtTTo@O2+7o!szfJ|Iy#-=o)dmW4dSi_M_hmkzw{ zhsHm&dz=oo(6G-mp))e zfZHSB`tb`&`NrQ84@v;w4pc43cg;WeOT-~5^c1L!vjCld)p`6SXv_Eu>x+;ibr@2< zfWjW?n0?X^$D~3W11(RH+W{pP!QE)=#UnpxGxUTP(o4bN1U_FARIY(4*jCVK(>~qh z0-({P5+2Wk@9bgqoNu?;OVC~(Sb7Duw>)}Hr>5~Ryma{c|38Qy3T`)oRx^iqcK-3` zwViFNz!3Z*aV}^Hu<0%j9>`Xs!{GIK(A1E!3>2mCXx`7J!0^JM9wY{eW>6GE{1@uk z`2l1ycnJ3zWVtkCEqe1Cly%Z4K+{YQ*uiH#eB+;Tz_<0ABmb16pyN~>`KKNS9dFM0 zljD$M=f#rfmXrJ~%?u2XyD7oz@?N+kftFZDfO_~oodpu`{+nkbj|ymo9@-`iYfw9? z`G^K&6)q@Mf>z0b!V}!j2U&0slp#Q+Tk8~1L#Df00(5|D&TY`>V>D=U^-Ivg82Df? zUx^7~nc$19iKxzjuiu1hvwWetl!f6XXw!{Px9vi0==vGo?mPjP4&UuQovu4PyX{|G z2m=ov?Qr4W=DQuV*a$SvyB`gfDyFlR#8xjVur~;o|>C>5e;Dyg_ zSq89weZW`59)(VjG5EF~C@BUVh{)gK362=htfD`7%8`-3HHDFZ0X(Y+sb*RAbV0pP zi`OBZ-C~fo7+*;RILEetu69NW6&|n??|F2BlMZNnxoa^CgKuYvio{FMo*7qAQV;;; z|8CX;dSFu_zBUep___)lTF3#tGal~im!R_jYn zf#b8)0MuRstyKdZ+ye4yNs>qNZ;_ImZ-*KATVx?_DA5GF;bl2!TP;fbI)SZ4_Q`=o zP@jNjUO}xM*OveMEtQ~V(Gzg<1=P-A_0)kFsq!B({`M1Ug$TsPENzH1D`*C;+y3QW zP?7ia6lh8ex;_zH2ZlmgK#L{L)A_UMl00BuVw!MMbiP8F^_u`X+cF!h z?fm!)$oZwF8&s4Q0Rf{jFq5#3M!^s)wEnCE?Tg4z!g^;Kk}|pvKM7m%AbLlSenJqB_JUv%u|d@2TK$f7uL?e{uV+ zASfPQ7DM@`!Th5yXG8cN-K?C@kO1vToA81gtpDiCYPkGLsQFeP^F6v*CBf-S;-wad z53YYe6$Es@1SI9~w}NU9P|WeSfbOM4jy+KL8(uOz35h+K?XnC$-N^zTorgd%muXy;AF+>+xn!m6rPr1U%LH-&2PStz6`2w4}t6erN#N6 zwD|fYQhE5FzXi0v0TFK{r$PN8{ua=B32F54~OwZO1_3>mfY8 zK>6CEyHWxiSstC&Ui`iSo%y;S4ca9e6Z>-I53u7vAp|-mfHhGS5`UnzkrQ5M-vPBh z4#E4^-K?1!5P3mR{(g}?8SI~z+Ter-+Q-JJ29XDCDFcrmLgNe6`Ua1$qvdauY8$k@ z>BU7*omeg5*?9yKWz#{aweyEh=QH>e_bTu*L6NRxVV02My^#!>jWcxQPc| zgasS2;OB2q0T~C%uB}m^GuEam3o)!xgZ_{Ha;vk44OJqUrLM)eYy#RLbi*K93WgN6n zWQUATg2Q1FniV{72Z9gzk_9=g^EhHY02DJPZo^}yB@LX-9T*__?jI=P!TF8_mhUFR z%1tJa$=$4zVW}0YkpU@Zw}S59d9hki2-GEeJq^|mfOn-@4}gaNN>99K2dU{U1qT_Z z=?gx$0K8EIo{t`a)OI74dz&wU9DVfV3E21!tELhp-7iNSU#}N<84gwh=?{SRd4X1e zK=UhTzrf2!$nx$IFU!GxfvRWysRA+AA3DCi5^9e_UJ%|MJ+r!LwBIAasb_q(p@J39tVdk%q)SQ2FedQ&;Zm!11jar!o>d^!#>5M&?7 zdj1v@P=g)Gz$G99;cZCJCFVYzsRv&0ZiFp^g)HfK30emUGS{P<-SA}d1Nr73ES-n= zryT6`-2%3vrH2_b5zp`<_%^uS133yT(OUHX|9^<@7= zc(w<&Zmb1#ucqMvAIs9(CL5A6+r51z4qaoP*g&JYRXQH(gh}(0~Ym zZs>in=Nz>903B`svJZ5gDCl^qBQF@i7G_I;Payxn$lvmV8FUQ$dn_G_ZR^$1-x&`Db&{{KaF%7Dk(TZsuP&}dDVO9aYcHxKxYB3F7ukrHiN6?P( zQVCErK&(LoP~dfN02Rp@LAGH)189{eB!JF?if7QqB1ix+g9c2xYb9PtT?Ypc=oD2* zARYDSbY1a+8Dv@~cty#Kv!F0~=K($d0un|bl|J3spzh?0o8T7HG0*0|jQlM!;4u1* z6h^twPS>P$pfEZH3m~7)@Bc5r!>AQB>Fv|`{DqFP5Ce2gi=wg+gJYk&fzfSC&JdOUlA@df{x@6F#6@QB~#1=mO){~$?R-R}7!KV*^#)ZN866C%|;Daqd3K3rn6@LNt1A|95s2~FsU63k+g}=q(_y7MdAN>Ng6&x5myX9Y+f)@X+2Dg`v zzsv?Nq=0FH6cNXN!-@zyaBIqif#F5q;oU7s}rW z)^G88E|k9#!hZ>xC7XaH9uEBY|Nmt>_&PCAy0d?o2u@6p_Nr&MJ$N<*7Cs)`tTVyx zu>h~q0kzjVp?oe-``)9Qb*D7gec)9PAo-P0K1lwB&Th>0GvM|;xc>#7zW|M=g8EXR z_0jP5`zuh(uG=(p1EkIa4J|KR2`cc8fS6_vzzb@ggBH{ri+veB2{dT|PTwA_w@Z#g zM*2NKt0P;X!ngw@MvbVPv>*TnAn$RCW4&ez<^K!nww7J*LM~u zzy12k1dnbZkAtsxJ(@o;Ha}u~y$R%iQZ105HuZxFlKY_5hvnx`yjKA>6B0ilrRv+S1A20_v(E-2W1^CkoO3L|TGy89M1937Yia-v-)B$^ZTU#IO5bJ_S`V z-6*pdw;}s0p^Z!q&|XSwP|Q0aX0A%KJi1xsK`E&7zDKvgi#dvrbvWFhoZWf<1<(Ee z|6305xBLc2)(!C9DbPLyP`n@Y=w{vpUdQl2-h+Sfp`v@>(7FK%El?{0b%wqVIyF&Z z0xDcfq+Sb=)WC8?gxe^~fiKPhjGZG zoAs~=SgqlK7n!S>Ad8nl2lj&IJ2;TWSJ!yK21Ad!wtVAn0gstC`Z9pV4NG1xK~p(t6Ffi%86AJo+RMW5G6a-tx>-+3fPMN>4O+fRLPF^! z$W;?Oy4gHB|9N!YhcqMj_**SOs~bQgci?eMk8ak3!Vvw>K;vDY@*5IzFRwxQoMI4p zP#X}uJ_k18^dGcN^`#NmPoTyTsB9`x2Pf=Dkc17oWCxU|_*->BZUyZs1udrd|M&lY zT*(^Tc|}Rt{4LKZ|>8E-cR0JOdiE4pGkAW=ZKMgu*2{h~T%BS;x zv`6PL#~A3`&&%MapoS0w_yoc*P+)>5fGV^BG+WK#lX`P7Gb!ux=Kt1gjyBVM+gHEV> z(aXRI>TT@+O*|EXlyx5Q=w|&d04foXr#z;zfV}Vww40#w{EOv}K%J;#FEzkn25x7) zDBc5Vt{i{ehsfKWmRI;&=0LUtcs4)z18Vs|gVKld0qn#D@H*`(cK((k(0EiDzaH<7 zSBeavg{z=_4IusoC_jS{bQ`K3?+PeC05k>x&hE!p!Ao91qeQp)TT@s->NF01;urMY z@nY82U!cOscSo8hf8CKZevN}K#8>|M59(inSF3}MJn`hOI|{xr@DI3u{lMek3!CN# z?9DHjK^K&^tpN=gKz9r=G=L|8E`$2Qo%df@9|v{bUxC_@aN|5JkMg(70-N*#&7?9k zliu>Tg8JFuorRBIygT;){|a`G&V!EpQ;&j{P)<4E$a&Pa^$DovMkF!tQJua!UYvIZ zAH==m+hNc(1sK!VVj z>6a#;Zb#?+7aMnhVi2^|*#&uO8&oW$IkPfAEOF$Ydd#EsHd2w$>7pXQ4|3sVPVEPu*n=hOo-UNklr-uN{ zcc3&I+s49x>K2KYpmTN*?NiVI5vVWj(aivbrkM{+z7sYb?Xsuee-fHxL4`|O8@YE8KA5r_Ur%uPmcToJ}Lq)QTBI$qGHDm zZU)%=8aV#m{r&$RJS+s-j|!R?l2UN@)2CusY&8LI5cS(br3ZOlspklsc zF(izIAtB2T*$@T^t&gDL@y`1%Y#;sq|MCa87=g66JiA>Pd^%r3qKc2d6*Ot&(On6; zz}~kzSKvj?E|8xOz5EF-SV8?&)N%K4P#+sS?*0urh2^{Bg*ix5x9<+m&ST(SHNQMV znkRqW(HDK;pd^3nWi4V~j3`<1d$hcA#`a zy~@Jh+VdOS+D^xg4dau_#*N4M_|kJbYoorgi?%gfndKY*NE7RC))p&GgaGkd=7f-J!R zMIg-oT>LG&LE#RXSZcWm@&mYTzYk&Y@wXlVsqVc0!tVhn_7145vkx9( z25qGdF^E|D7MhVI>BNGn4#g>{NNAd461`Kmx7YU ziJ%y4{?EkU`V+K2u{(_eoa-(^*KNk2^?nt3;2pAgLZA*Ae+%du5KzwLy8!9^-eF*1 zaBTj^#NW~bV(kH?5KsjNI`#BDykm0!blz#}ZO}Ral)g;S5l}<2WFIJNmiB>W5s_xa zT0k2UA@dNRbrhi1KYwdJtS$T^<{qToHT3|fXY2=VxJCWRAV=Wo)$Ic9+yJ-zT{^$N5Pk|e;RCUr zIoz}JJLHPAV4u$4&5zkVn%_kDbgK$;f^q}sj+FnPJ1S5nB@GX}sNo0YkP-_Yq`A5V zQ0{BJ&EKjI-sb$DzZEpz0Ja&_xS0u>@dK@QUjQyBZK1 z1L}j8QjiatYiF?Vx2yxrHaFMK5aDl8;bvg?<~oCszqN~vfuW&x1`mIW0r_vXn-3IW=O}u19t9nx2p;iJNx!~~? zaQW6!3U(`aU+>E%P+5Sq-tzy8j8ou}tOc~00krCo6P&(|g53qWY4WIJ=P^gnh+OkC zM*h~z9H97p%ijXJ{TbfJ`@_w^;L}|?!=u|Ya3*BH4b%jjJ4u$or}H~#kj&^Ls3YV29X>RENIRX-PtGQtzwgDvA&6>#q zI$v7jMdT|`r41g4_5(8yp~duiklVmxX`uKOi2Lp=JRovOhzH)j)}d9hwhboWBms1T6(8+8B3i}lArEqu`SxMQG@R@e!>6&;j~LGAfo*B#*LWY-BV zT;78^3H9JP@*g`ujrRkP3Eq70UF66|7QiNWH%>&34qpKK+=KSEKq^Q; zTR}n9AAhSQs3-*&Bw#h*f&{#|2wad%Iq>o^xUT_PF9a?-enGu2!r$Tp8bbh=9oJZ3 zo(2sgdUUhKGlJsX;^kS8ds`2bntOD!8Z$%0R)c$7ph1)w;0aRC?{{BJKO)Eg?xVZT zcoDrCG#`8Xr8G!ycLm4GD)2Sa@IGXT4!8(u-3w~Af?fU!5S&(BCwTON?=tA{=yg5d(doLtv-vF}f6JDi|Nr}Tz5^}v_ho$NdGQ})f);e% zl25m7z+Xd#m!R$(s9)Iay27K|cY#mmdq^<^I(@^V)AhiMN4=oreAKhs9(;JxizE&3 zRA~$3aG>9yy|2xn^OB-KuIaqDpA~cmgKs9d9)m2Ee6fEkI4%2hegMrl`7nO)xcCFK z1%ba6bnd2S=P~egWY0kLJ6f{vR~#!r$^A(qUoY zZ)pWt3Z6Lb25qfl&9|*S^w3n!xH3XvnWzJ7<-T~Fo3)g}C=DNeP^N8cOqfGp*o}l`%8FciO z3;0s|2cDgGJUS1*Gy~7of&v({k_sAp%IY$pMR1TKt29AD4he591_lOj*m-ou9(a-4 z11kIvLs#FrFfi-}1?$T-pgId&pMm<7p#9+?43OjvUmpxgy8PgYVQ_g43fXSo37{L> zK$j1IPAx3m;n7{Y;l(LX(bN2n(YNy}e=BG|pAYz+mDmk0>%N0lo!1MvfR<+d23-dB zn4Q1%2-2d(W|Cj%v>j6OX&Y+u@K>Np`0XY#mUvcv{BqST5e9ylSejzA{ch}B% z!LbdL<&M0}_yta-FF{8w!{@JC50qwmbhDQHH)QbXHh5|C8xr-W;8A}9)LH~by#)(o z&A?G+$axArpu(b?H4tJSIOaho0KHhDDg!!ZV+E)U83$U_U;|#n0STw>0*;s0L0J=Y zg(j#M4$3>Az1y9xDLGrpd4xL4yyp$;hLdb@NY1XfcBCwqQL2O_rZPCscqsr&A8R z+z(2z&|`OAz6O;`;HElgAtiW7cg0swntcQt%I!oy;pM=~7?7rJR{dWPyQYE+2gOX@ z7I4gfE6b(>AXC8YmG2utOdRc%U7esLdmPkKZZQXW3DW922M!)^tM4QDaJO&#Ew-SI zP~EH-et_au}Fl{8)TZnOCfM9uoi<2H+abm=GM-5!BqhE)5~9A+gPoCLX=E-43u#m5isb$fs=>FYL4?1!}XKqd9s4p3l#>vX66pg;qM-}Vh4 zCXVo{0&4*+znkIHox$-^2NLm!D|9u8bSQ=8JbQ`gXH1y4?bnb z2Nb)Vx1jOwfpNmlftM+u@t$th_0X`m{vGVT7ye5iL8T5dpxd;g58^Sy|1Yk#%Q6^( zHf6rZ-Um_(_SS>-ASMoPEp7*e#Bq;q)|KE0(s&vC6?93=e@6b+m0$n=e|hOMxZHgW z^@lGcHn)6(c-s!d1!YG@P&6Qo4TC!Rka0`Ua6Y861T9Mf4UX`)f@Uf~)k*7FNKT9e z)zGk(2p4~=_Lu+vUn(#A_1~kL)$lvSs>@*C*3Nh_VLwKU^T3E z-~iKj*#Qc4P^9F}1V_s2(;!VR=I27f4>Tz4(an0{8z`x1yo>^?W_1LoOpTY`U%&4Qk_`-pf2l8svo7 z@e;JmX98#_&8HKwA4C;YGr`8+Q&a?Ayj}zj2iU$i(D|32LFruLCCE{r^-;T&AR*j?UaR2yjY2(PXPzSR8~V-`MD_z6SLV^pDh3K#NcNlj z2ede=1f2cy!PyVoS8Bao>f_OED%*+3ew9r~+0VrT`6y2CO)VPG+z4tZLep-UF*n1D z#>v0_Pe5Bj#oz4A2x@fJN_ceMdttu{)ZYc&fOiix0%5QUlr*4O6LdU=FR@v3+5&La zL~$E`YZZ8p;UkFiUS~tvr?6!aeEhAT1n1EmCg9QSC*cFy6VvN@0(8Fu=nV50&g($M zKj<=}*c0GP8|vGg3N9!hC-sBZ^CE`@e=BH#BG|I$prsAapxAvFG={-|7?bA*Uz+{$ z2Y5`10hGY`TR{8dL5ZBd1+;$!l+gKGH-Sdt8~*Z?g3M3ytJ_gUns$i!;`U4)_td`)cp#a{N2Z}$B z&YRHk5b8xpb_SP;vhzVvb_l#d9U8u@6W@bUw*q)OIVeA`gqn8%JjnHz1y6o911r^d z$&Q?#H9tVi18oSwvAuqZvm}O^XO&``~Pa|MlVpB{K17gsPzl&1@ZB>f==5- z&kdkm9^j$B)@h)=8Ynk_R_H=4NU>`vyO+rCAyjxWDEkw^e2zS~$2p2rs4QoEa(lcl_j*GuV9;6hU zo+ZKNK@V^O9c+ek7Unr9wW22A4km4H-%lz?)G3slvg_plrS+DL+)Lm=m2qa5LF4~{I*Z6%=l ztB^BJ;a>3mc0_ygGAM>os~|?GZjWBkqKW_i!-FOD1SlK1fJSBC^0$Ijp{{M_ZvqcH zfznG0bn=srzZEZ;0gqi zf9}lq{~x><15f@@fMys_4)N#~HGBz4{GjtSJ-S7`pt7J@cS!yLtqFux5BlIR5`7BQ z1FAzjx<$iYLyUk7`JmMY(EQU4O8B7gXay};ht~(7BVuvppMxMhsQG6TNQjL513JnC zoN+quqvxF$pz%YnuMJ+D`2@-y{4HldJ%R2T6_i8c^1-WEkF%E)f&-@YI_#L-7f<)W z;)!1#oKHaWeV{TNyle+Ld|oPq+-d=ppP>Fo>;rJ-@PJ)Lv=4N8_=}JVS%#OO@)T+w zXg&KBMAMnS7hTb_WqZcwpm*05r>ktOQ>~ zRI3T<_JP|&kn$2V+YiwXi&g#>4@f(Rk-rtPzxM}Mi73QsaZqsswz}mL0|NtSfhp)d zM$qj?kQ+4lTfwK9!S7N++z*Ae+8#V23hKQ2d32lJuSJwA*5#0L1$qh_%FRTU;I?p$ ziU71U+XeU6QVp2Dx}j@?_)1j3s|G;l5`fn#fOaJCH-V-$L4GOic$o+p&qQ544!U0p zlv_*GKuMrP6PhnT(GAIp&H^5tt`A;nfZKqOa~xXt|AQ{7eX$p`DigfS`Slra`wmyq zf4vqm--$MdzZP%me+g>8V$}yal>*PQ0?^@vFBIEfK)Dh??FT6hd{LgBk1@zP>BYb!BAs{%%Qe|&O-#> zF~0;fs@rYKT7!t$#8PO?o&c}mhPIzUW`R%mD=Bepc~TMwJ{SukkPJEu2(%3E8-ME) z@TlQ8(C|j&Zcr93O^-G_0B!XgMzlX#4wS5cOi6&xeL$El=G*$VbP-~%rgR!Oen1A^ zkOpmc_zqgrb@;_;X&wg9*_D?;$97lEE}aQJd=^$Q97fLJpz#aO?mEcHg)NgnJ_ap1 z06U()#Rz%=WvK{qww3{JKSsX)fxm@=8C1_a;cs~Z%C(*MUXFAIs1D zt)O#s!6%X+!VkH9$pEek>IHnd)1ZC?)xV&|8hM>9|_2eh%hI~sh541Wvg@(pm-1z)ZKx1&S_Y(DsI4x|um zA#cWAX;&~3T@92v@sC{=4_T7Nk2ksq$#-ZTp1#~Zo zhvjenRujEg};Rxx@{e_7W+Sc zD|inYJk|5Jyn!4t1d_eY-zo;m(Vh2Rh=Eq1f|hiG`m2!6Di?o?0jTf+kC3ZDSp57g zpe?76p;)~?pbkE2Y55pZQ?T>53W7`q^$|cvPD9!@8@EI1%$9c0W=qhXWPW)D!vi2c zPdNZSF9wkt`CC~a{(RvrffRps5|H?Nlg6+2g1?Ikv^cnx1!UY)5K|tq9u?vN7XFre z(6)p5pyM6j=>aJ|mq5}_6UZN+1znXOa}uEDAUUOF2PoV@H?DxAeKANqqR-$0$#S3- zY>@2a_`Uy!vmnr zI8zRR#^?B_9spHB*Z5nsK?$pywdWDM6VLe)RC1J7W^N&}2EZs0XbhyDtxFRe;-jh;qMlo^N-l zgl~5$Xw@WW$q%?Q1Dfpx&rrUo$^%blf%^6QEw+#?6D<5KZ&?^XgI6N_EkD3le1L|Y zkAPU<4c396brjvKX%7q;d^#UDKW6vo)_{~pt+zon;1m8k zxv9CJ*&y)HW2p~l*b%9OzX__vP=i??575JtkpHA2sSx_LKT8})w0Uh519p(TY zr@sTfGX)e_n?NjZV1Z}tx>+sngGZ5Gw}8?axE&5Y7ax48f-A@k;8PVoF@e^&F!Hx9 zVuGF-XAe#!tiSGo`ZN~MaD&91A3J1S0qAJ7mrS7jOCW#ow;TiY7Qp)|?|_=1;C+={ zAoqZGs)6oZ0S#X8w_F8T+s!&3X0!tX#N2Oe5Oe2(3Mf#E6uzDZmXjOq;n}@$O7?f>6^#N$d2c$k&xDi?(RDcTJ?cjnJJW9p^-WmzZpVb^MLFG6!UOYMv zH$P?vwcVmTx>@xgQU3B7cx650d|TF?cfjf3CFqh#Qsc>eW3IIq5O@1VKoY9`3R&&(FGOoIiT{mo7M0ZL|-S^Nvujxt`bUp zi0*#y>V2gB8!xImKvM(9UQPrro2pUa0N;<`(ajok8)Cc`#CT^Y7j*BoM>p%48%QPB zOE-v%?%zfhG=vCtfr0~8#=QjBK8V^?4^-jtw}S3_gj9Myprst(+I2g~UU1*D)f}|w zqYSh>3wG)^q|%cItpjP51j$B#^mVh&1%)l#vh}~fGqvzS8=Nvcj=O>`?qGOvFaul! zf)|T|&dPuk#4kbD19^0_zP=9e{yLB|x>;GE-UqcdJi1x8-hjwX0Lg+YM$qaFaBX=G zv~Z#G7g!KiZ3*76-p%?R8q;2&gGh=hfBjEG>~8?qpP(}ro8NGNwm2k#id4`RhijmT zx)v5j1_tmJ2QN^a0NLVD>I5zoZ-TNSyh&K1>(R|>2XZ~6OSk(Ws5a$q0cBlKXGnWK zWbrI$kq5s#gKy_k@KV`tM;J@(L8H_yQs4&s1L%4V@Oc66!J+&dw4)#gY8!BPc(%QH}O zSpnLA0fjmE>~>H=10Ht)6_xyp5Aiqs1?3H}gTS-K;0^ryK?}XR(T3sV;4T8)Qw0fh z(20N$7e%4CsO~Rlja!O}05qY#oDS(nAlhsEEkz*zce8qe@+c(HAG-%i^q}MZ?!T~_ z15Tl>J`h#6FB>v=^qShdk^`+bG(7O4DvJsEeoe@E0inJu44$x<15c@edK93ObP-)s z$UU_D;88>m@Dw<>>j4UZR`Bui;KFRmftQOwHiPs_qx3LKJRn|Q3~Gge^-lyC6xS?O*(Ml)aP{)GV{}=}d-f zQ~{r=D(}(A4La)sv@pk`6LdDXV{9za_#9-}&I?g57KYbX_~jYE^PR_Eu!8to`Q^d; zkvzIt-(CcD_dbD++UN!y5BYM*V$g&P^7<*q5TD-M3&B2}@4*9i;C-OYZ!C}_9*@IzH5mqoDgCky19O1|j z@aVh%?y7>$UUy*l#2?A~VU;2SY%44%I9~7<{`wCZ%RCGsPQz1&0m#KCKJiET9smX1 z0nk2HRm^>?pz}LCc7ryJf%9kUff6Ce4*wI<;N7aeJ3KlMdw^E$fzEF*02y`4!}3sx zsz>Jqv|ae%^HHHUeKIt7v|cLV0Xwix8Z@2^S}TcsscsL*(_kOogZS_zsEUE4f3zhl zpgjs6%||Ri9y|}mXZhxliKE;e$sI8q`6 zGUIg`f4DBk8b#0$aNTQ!=RlEVd6*w^&RypXH1C1dqromX1$pl_e=F$R8#K3W1!Z3fRYQV$fJz%?PJFj~*pJ##|c;Uc+d{>D_ z=b@LNy-%QiF{=3Cm!Mh>Bo4CY@QZ(vpzuHTG6+5{j4=P2NAo$Rm!K0)UOdl(&kuvf zbHL@{%OG%n3C;)Q6^56#AVI`vGPHaF7cIzB+n`c~>zpA&^K(X@ZjDk0NH3d%5p?JU zO3QNU1yBzH+_Dt94yv>HTc(2BpU+=3O##>2Ev=9aeku4Qs{lm34{n);UI3LN;I$u@ zu0iyNg7Q!2{TEJ9{g9!8BOKr@&!EN^G**~)g4Ywa-Y(gW*0w6T0ICj4PJzZnOJ{+~ zcEl(nf6Ej|D~g@J1(Y=)RXAwe1srNG<}8A>ry%JWG(Hbr0^1!e@Uj%VS_wSf1a3$D z29J%isGzo^K)V7!4&ZMA9nlVQ1b^#Auu8Oc6ll5()Oanag17>73Jk;*VsKZ0><8WL z1n#`P1Wge`+y!nGfbI)Iv}gERKy#2Fqe>GYEd$VsL9k1p9X8O22yE%SxaHgS(`15jb#dEuK&7^6ao zqGxY7BY1q0e;b!)=XHbCWUGdgy# zd31)Z@azp^1RZbe$iFR|vH8*chF_i~oDILc_*+2@UBhpl&BvK+bR9tFp7fe*1+`wl zMazpv-$4TtEGmxt+xR`YjbYZ62s`p`^JnyIK8|p~+m-|TQxCf+zHa`^$iMBjM|bUl z7l%)GYlPLM!>#f1hsO8IJthLKy#hbTfZ*31H;l2Ol-((|P`d7Rarg-$Ay+?*kpg`Z5eOhc>~ZH-H1YckSRSX3znV?Uxt9y+_dch;CO<3>w}BnIK;DA9Cy!XtQq=RQ1cHpz%4lA$Z>eR}H|LAFW36dHp@d3w@O&*ub}4`Gg>;GzNA$q+y;7C;B^w>OBv zuV(V|=}wjaZ4vkL=`I#9{N~g7+^6%?izP9?{)29(^LK51%isEw0kK#E)Y5`2)&QMj z0a{A|uJS-PHBIpByyMw?M51()N3X5Wc{zp`+RsE8Uhjg(w{wGy2}7x;M{no_sMnvr z(D)5X`K2nZt#3o>ft=&Q06TxZ^SmP{&_RcyUiLuiMSv!zn*XtY zR!o5A7N#8FI8)H9m zvGW@E(qT@}j904$xCH~gyYV)ED`?$-Pq*pp{BwcC^%CFewi*AFakihPG=Fw~WG3)<-!%GMUzC3V(iNU8c zb;E9um%xRtM{nr{pUzhvov}M!6ukzOzsJC%Qiv8_%gIs|_}nQUf6Fb<%uP3Jw=Exk zE9jOA@HpZ#uvc0@Efu6jnl5;V625I#7q*fClr9Qp!rDrp&KT&H9G`B}=3|Bo;CXbg zkN=(l`#2KhY}eNRr4FEhKTu1Mzf}k{Ljs8%&{;{5p!yzd_)o|K-1x8qk6l6f3*h$o zOBQ&07!(Da_g_o}+fyj5HfTQR+Qp`Ln0AB$DE|;L|8CgqG zKtVV4AZP?|$^njpkb9rOE$P-hpi!~bC;Tm&!Q*R4(Xj|DfYwkn{|BB~U@tKQwa!YS z!E*~!4!q6;jYmH3Joh3EG#Su&1hh}9wDTo$f5oHqe~C7teaGMO8dUs!JI+|T3)02| z-M5Yfc-G_5U2?}|G}+sF9W;#u8gK{oXW+7|{H>sIVvo-IE}j2gtOZR2fX);G-Si&t z2fX(b6l4eZrySrs2(kz|y9!#0*K(4-wFx|J1Kt+}8n^@xQi4t=cLX~ey{!*geFtt~ zgO{$9IDrDLB;;i*Qu&4+K8}#}8jPivA>jkcACT|?t>uM;&x^8YNGZPsvhXZg;3cTN z51khSIh}v%K}Z;J9OQ2W-LDE7bA`FOMeN`I{~#ZMZjFB#3HBB!{lF&z_*+2>3SM%9 zYdi+u&S&7GxTiQ5k$GQSkz)Xl6oFQuKe!^t09lU(n$?~1 z6f|`XS|4{CatH)Gf>`)lO#gt+J7X+$f&_sYXfO_(6B)s*Y60;6dv-7f+NXddBPa)S zZxS>d!1Jb44!pbtx(mua0bJTk>;sqf8~?$MF4`UfD(%7jDo}s5^?#kM59l1%3!o!L zWIejWIGX=6m1^z;Eur%1Jm%4P{N)qqzUW;l3=9m&5~qLu{~wAN7WC+R`r^b~&`~;& z@&jZ(ybccu?)=^Qzg`-lyz~BxS#zb4#*eFp#|3o0mBOvSDKC^cr+NbjyB#L8S9tLlUXYlL}<9K}%Q6GR>I5W~fa~;P) zEf4T*P9TpsHveTT)q?m0x!u_!LgEqZTR;Yl+c6rJXZ53y5anSl7bWy9bK!XiCLur6VZ|DQV zZ!bhYf!ds|4?Mb&#&r2xL6;ap#&zNSW6*Nt;}WHNJ$h{y9hGBvvHOlFgGaCJfs67C zuQ!3#58r<=qZnbQILuBpa65;Eo#Ay4*xwLyO8CLT;Pw${S@#5wUR!UFu_+*9yPXA& zF)+Md@IovWG#(0?KL`2uWjNy87!V(nem$DsC?GdGe;9(!ybc2eZD;KRa4qT4S^C1G zxAcKWx4?^~puE~0`Xj|d8`8EcWjcBI#rhbO#x2O5VDrI4g`go=y)pkA;9jsZl_ zIjqQIk(WxuKm&-NQN0&0EZD*0k)ba@T~yGZ3#e-h9*?{PGEUK>^P|kojA12g#$?mgj;T186J^JeTX!tGo8R90O!ZSK`IuSK^TS zUOakj1?Pe;D`mYAV8rmE8zjyR%F(^H7ngv=cYwr;LE@Yc@pVh&8D1oT1VE=tc=XzS zeI>{6A`nSn+If)8tYsjbmLPF9h|U&>co;}r5hTtI5if;^n}NhRLE=!Gq9Nj9An}hc z#ToWNUFHiB|K@MR@Zu&&95ig~(QE4n5x)i!KloCd!KYjG&>ql`-g}Qu)*b#v44^Z` zUZj8c^WURe_Qy_exm}q8Y8V~&=wyDeZl^SZM>q2d_7Zzg+k?MlD(F-k@L>_BIUt8c zL~}q6ixB1n9oS^5vKy4USyOj|TF-VKovtTdYl6}psF~4vA9UhQH|qk)7I{BO&!wYrxzo3rs3ic8Mh_!xjYkQ#9USWq=3*vir+ktK?0M{>I zd(t8HG=OqTw}nTqY11=MAH`Px!TYI%kiYH+DFhY?aa|K%87a6{acavW6PTf+?OT?Cri zdiCNhGuUZ9ov&arJs{6qg9t;#M8BT|JFpZawHqSk(JPv`0bx}VGD%|G~z9&fK|+#P{emT>!GJS9f~M z|Nk!zp-KsZOkRg7_F#fM!;4ukF^^u+ye6Jix3@@ya#NYRU#r@~YGrUkn5`Ufm7Iy-Pb0dl8KLU$` zeD&fpBiQG#$eL0PmSW#6$ME6?L<$t%qA_h?@teEk7+xGe5)XlhSMQT!c(DQ^?$K-7 z3i4}OHZK)y+V+!j3@?fxy1?So(!t_$LE=$J;&u>^JAur31QutV zy&Y64T6^@G`V@lN&jK$Z-~NGR6w$k&IPNu-I|Zsvj)OMttp;ne2F>I4^6G)5Ma853 zgYxRh6QJs)iR_(6ujtCC|Nmca1*rwh>6M^^QhH5SXUa3Y$b~z{qgPa+6dViA{|D?` zpUzjHkTU%~MV{fs41}Oh=Rd=fFWM0TU{#(F6AU8%|9_Ez9K(w+G{N>>P<;Ru z1Q{WEWjfd`GmnGZqMDZe|Njd`u)Lj5=Od5`(;Sdfc;R9Ym;C()a<3gI6d!r?njQdI z_VOR7cDDvEG644$U$j4i42<0GQ)KYy2Bo!)?DDWPAw4<|fyYOhUPyt?vy|}YwLN`Y z4t8A#sBdYZ&%pq1KZDN6ng#BQKSoZIN>j1Tpy@x?6EBs(D!~1R3XYec z1wpX>V>hed25|Je1Ra10>Mt-t`Jh9UyE!DgM>1XkwJ&B_5Y^$hr;QK-GFA2)&3 zEdr?nH72?(UatO*7`FkPm0ZXr}( z2=aV0sJ-sdT(7{eV*wKbLy3S#x4VG{v%7{zFUwJoh(~k11w#pkM|Ze~M=#5T!yxsb z{zIBaukDEqh74(G9xrxy|N3uu3ET>CFz`rj&|qX>XgyHE>d_m*!06F=0eO80Oh2^$ z#Q|Dh4jTSpwW7f0+{{10Gj?F&QM)=`8U28p?bdF7wJE z=6ONPdoeXyhQXt|85G1G-4y~amU@6@i>ehoTK|^_dUQJ*crZI_c=Vbaf8osmmazcI zXmvBU9w_1E-_{IT#`OKd3g!}Vk8WoVu+u=QU&?Z@Fo65BV4=fl6JA(@R=PC7$J0ai zNq}11oln8jNy{b=KK*#VN28}0ayrA&$ z=oLMxV8~$j?d7}2EXdQ9(DgW=_yirT?b-Pyxbrt?QP2z1bxaJ7oku~j{Ae8{mM?jN z245IFx*ZHWx_5xit_Jn-OT6-^=IIMHry@6~y=G{Qh#w43H3HJF+@gHZaMp&s3~0idw!H9hzSy#1*2 z>5Jt~Ofd7nehc&IE|+i&_36zE07b(WP~!9H%r^jej~VK{&mO=2`*yAa?LF}6)bQwb zR`9Tl&?w=Aj?%^+eo=T-grW67-MbHt%|0px9Iu~(+z&P%G_CL(WZ1T~kg!_j0S+sl z?gRr+65?+a1}%B%F0KI02efv1dr~?pboZ2 zXF!HW_hhi?odFdd-PI1D{2=GiUF_k}`2pdW7q*bAy**kll?rcc|Nr$9&+aWMplhK(0nqv%v`qqhl``lM)8{Y3K}u$MbQddthSeoOvY^d)p4~p6 z0IAmS=nhu!>1Fxl(H+R)(aq_h`3W?N*K2dpqw~;bA+`?G>rkLCm79-R*nlk}h&dd-8NNqQmlN&43>k!R>j z*gU{T?EHct0e=C0K@S0sZV!Ra{P`fMj~?9y{DJ`r9-ST%9*pNay1h6&Itw^FIz0?L znzIZTJvyC0g}Xv`kVfmJQpUp`-31b$>lAl^0@FkD`^#uAwEWij)Db+s0oqg?0vglF z0PR2W=$3ux04l<2cla70} zrlnuJ_WSkUqxr}GlA}JIzdSpSgF5Iffs70c`wc*8x;u))qce1etKqj7g)c!V1H?Yy z)0x_k#-E>izyq`n!UE*nFCN{t@(!Sr^D`toIs+8=1v5B&Iv;>M@!Yrbh==BnH2$1t zKApJ}JUg#?bh>tUbl&jk{N>a6*`u=*ut1qS?r0-#2ehvnzesUF>>J3PB<89X~(IXoF-B|JLo zG(0;?L5-^nXzAq`AA8uRJ9mOlcj^X^a$o-SPd&QrK$n?Hdx7#PI8M4PUf8;Vc((uS zz&WIAAE+B}$ne06P+KMjk8YSMafqrLcA(&T=+pViv-5yQuW80}Pyzfx)0PRbJ`YrE zh=NinXnfHt!o$*EqJ;5qw^PDlk8T##2vA|fjZ~pe0M{v6pi3-5#F=fgJO{0v*q;nB_R0lFOA7!5I7)@UWBVSxrWI@q46!difevKv zW>sDRHt6AAm_b!G$m_pD!Nps6z)pQo>gjw6swzA{V}fruJi5ya()jaPC0i63K6@@ zbjW?|kCVtNc0)aS9p6C55IsA;L5~r11l`Bh{6@lK<@^8t|MRzk3VBd{KQz`0}S|EAx9@U8F(~TNH9S5bnjze zW?%p}P&_(APdGL|VSKUv1q*}Y!6(cf;JeumgVqKgX8=tt@Na7XwTQsi)ysy?7KN!{E`&nr&mm;Mp0g;L+Lq0lc#Bg~##c6`kLDv1NNE=_;OfzN+N1OQi>u&;j9tc+zTEnfB*mg-;san5s&5{DxjK|!G+)D!HaFq{0yLz%~21t0iQVEd_=*g^QBAY zBahDe&=87!c?{B|2c2irTcYycGx?flcgxB@!OptQCvFu^adpG@fB$ zc;Lly3nm7i?#c|$?#2n={lowHTgVMP3L8w&e{&o&NHCE@$EeB)9Jh5wIHZI0XY`5aL3p3YjK!oH#=xt-J^TQ2hehY z*8e3BJUVZ^m=Gxn>UUl7Xs$iLPB6`IAr1nHYRK z-*|M#PVni@o#EU01H8ZrbkKNrZHJHL>tYAUq5H>tJKy+ro`v^sJe%JzdUn@KIQ|b8 z@a?wuv3y+g26RBRPv-~U&X=HdOPN01tn(HdGWcdck?`n^_~6@l&bRZZUvG`V2cO>5 z1EA^>v~H&Py@ZeD?-C2pg;k#2=16{f;?w!)#g+)L-)?wxyB+}Lm6CIw-Sr%v&F>}t zU+}T~U3$W|^JBN`7ROFUmevC$uFVG+n;-lwQS?Zz-2%D&+;_)|4Q#(bE8})}b~;Lc zR>BE@PwoYsr_S*DHRw1i&6}Q<_ev~1JI}oY-NXq#{^s>XSHrh2L3=|DZ-Zj7)e6*D zo#JZv1biNP>JCVNy!`y{|9@A*Cq9<1`I|s%V8BedP}lE2 ze@hyO0o#!y!rvO^|Lecu0eJr!)E@)aJRW=^oke)5?3tfn)0$8+{bwRBWLxTlFX(XuA1}i{fU$QrWdaN#89H+*&U+70qTQ>`u`Gij675sYl<19H+;+ExC5wZ%JBLEI3I)hi=grw7FHhJ`$1JMs32o~k$*=V zyf6nm-v?SR42h3Wk6zO)f}oM3r=Vc=1eN$`Yr;UqeV`2!r~}Rq-l^@;c^Fpd_45AO zD#rlcAGv!2D17)^KCN5X z(JOjks~p2VP?Y#|zBfGZ!txKOx4auv1HP!$=LgwY;^5KU3=;6^dB?a=k-7Pr#%3 zc)*M8o-zpeS8tK!!RccMsA&UgRDnC{NJ&J;qkA$a*?U;d0(DMHWM1sKCC=c{4Q`cq zb{=`5`<0o&v$ur>Y(R6h0>dtlYeB1NfMiXLqQ<3g!|8Q0KP03A9wiqq7UtX!Gdw zw(!tA;c@T>vqvXrObjgP*}FvrRA?Zzhdp|CgGD-c{Y8xhI8&EMLv!;k5e5c^SkTZOxb@}1?|SI)i|g+} zlmDQE0c{`lnzlgo+d%b;K=sEqKj8Rw!$a~w^8=B?FXp}f{~xJ0gFL<#;@SBHwC|MH zkO4Hv)_MKKM^If1+I8jA`3!UjM?e5LMt?1pWq1(^b^&tx3abAP4_yC7?D}tk^oyeE z?=?Nb1NJ{?XyZi%RHKSV_XLn98y0{X^WQx>LqWCvkLDGi0bE9K?RWC!ryA_0op$gO1=)WAj#Lj z6x4z=@a@ji@NBLXU?@@Y?A{Abs?GmdN)jOlmBUie%OW>c(0zB^c?KTcwxR~04zK7u zZqP94i{s~57(nUXqdQ2$vvVq_XaE@s8Ww<=2&%Y_H-XYMxN2?w&r&-7MZOIygJ)+e z*vii1ultbWKNQq9?gU+_%>nkF8pL~5?x6O-H~yAF5Ch43iSD2lHUr3i2{R%73orrs zPs6u6RRetEG((A^XZIczuyr6GCP8X-*eLABU{;0+zTK%H|C#E8{kM+`?7!z{LH-K? z4X%MaI0Za12Qn7oL#UBhyg2Vgk2T1PEf7mPkAvpSN;^RIf|Cn4a8Y)kBFY=kP?3R0 zXYCGp$owr)~z1?g#^)?qmay&p=&L7w~nz&tI(mBFzA56MA&pR_GZq z_;eQ-cy_zNI<9h{_HVDK8{2CW#GYFq49$MCaBPMRRF2*=q}Izk0rpyZ9zk&(%>$?>j_Bf zy+Q%JLFXrEq^lb=T~uIzq2nb~(zCk+R2O(a&34cLYrO}Stvvzi-hpevvo10WKHaG& zz*8EaKH>y$>Htk}bWZ>m-rWsg5z7nwO`zf!>Mu|nbY1|}KNg;yE-DVbojEEV;5}lX z`+2~Ffj*t@Uc}u7Rm8`AI$wBp)~Hx`^@_X&C;x*W&sl>U1KM#^0AhfxbjSb?$K^3H zFc@9}w@W;_89FaEA7b=qJy80&`5===@=s6@f@euyoWBkVzgAG|7IZf;*ocS>&?%A{ zufrhiOVB7b2dE?D$S>%k^1`DVG*KiCa`O++xeEp!&D9(Xr8f=#zfj`&{okY0nFDlC zqXUD7<{^)RznDEcuf7xmE#X4UFV>#$JkA2@2{U*!9tU;NUU2CA0+&mz2SDvGP{f3u zXs%-U@6qib0Xeu66!RX(og_fLe2?zX9mknKqaq&7M-0F@0JPHrI-ddRMjZ!*5oo3D z1vC{d3=A($TmJh05_EKePv<+x2=+_~(Cn!^WWA|Jug$?1%Ry>HKnocs_;kJpr@a@8 zuYsfDWdV3`I|C?vIJ~F>DFof)10KhL96Zp?$}t(-3shVU8x?8S1a-fUzgWK)>wF9- z&th92*jxMNg$`&TV5jScZr3-h2TCM8x?MkbpsWiNJPEF!J-TZ@yy$-^!|?jSiw+Y| zQ3ml3yu62w7kGC50k72qAMFaNNOp5FF@UxMxk7-U#NEg81%GQdsCC?V|HZP`psWuzr5bF? z5m2uq8??f|dpl?Z30j~vgH8&AG^8ElK!c_eJiGlt<>yyTP(S9A;Wv*?-xDvEp8z#h zeNT9F2O5Ct2#?N*pgICndV+d1U{@e2hnJv*nlGB4gBB>TKA8%Ri_pukp7(EclsEu| zJ!pI#d~T;>=UK-P-_9e!ou54#-+;4k=hTG%pc~(ML7OPihE+fXtI1?YfT-v}n{pKf zp3VC~u4CYDna&CtLUA|n=nl~Ew7kaOV#fv&Xah9@Kn0zl{0+&8pLBZsa{QJf3Z=f2+O~Mm2 zvE3b^0oqQ{G7YqME5>#_^K=B~q(d`WL?jg`_Ac${D3q8BT4Z59F zzF$ywQs8g>58A)e?PLHhG+XUKItwJexk(D}x8{H)&RMDh( zXtStlfJYwlK>Ly!k3bU24`@*YO2&xxzhiSdIQU+-LdsLHrp;W6p1pnnp53k-V4o_0y&Yfxnwj_MX7FrwHDL7Y4CVODpYNgI*=u6q(ODq@nmjoG znY#Mn$S>FjHl;h%!b9_#hvo&(&I_Qal4~I1h9`Kg=8z}j2SGO;3%Y;s>~6aOs`@+6`*v<*#@e8 zJ-gdpfOyBWq|4r&*N>NfejE7 z{+6F$lfga#uivrlgqSG=G1D4sX1IYzca(-_=X{VmJvt*4z>6V{H-jPs93-&J+-eLm zZW??%+_QNfC;>2d_QnO2hXcq9eD<~=$JdV49vK@#9wXZ<*3UKS- zxa$s3A$y!>6;=104V0$oA=+3o4RdygCR< z24FTc8TfRA)p>RYgKIO-&dJEOflF#cyuA$kg*?6j+Ik0CVgM_Bq32?pKq{3$(jMKA z0vTF3CI3bgPA?@tf;THb+6NxpRR)INUYL4GK*HxO)PJ7cr4lNZvpMi;@>tIR8MwZY<|e>*!<^zNqWOiX8sn?>C7IMhxuDTvvVHJ zyFqm*13zSSNHcVh61+*c`4LMg2WSr%D6xVj**rUMxPay~Ub%EW^XR9FgS+zbiRWQZE(EsR09tg@wb2vI_NwCilwuikXYKQ0*WP2j}%h9m)QGQKHzWd z0i}e_`=BlpH%NEqVNiRs#G`u$sBi$!afg9A%}8O*ycV>fj={IP4wR2uT`Q^ z9)GE=44PYD0QF8^@|(z@EzPaGnYC={Aj* zGhzUZ*aw5A>rxD_^v0Yx@R}`cf=Baf2ajfJh7vW{xTq{> zsldS(Jk1aIn}4vE^7(W=bNqkRvs(;Y?t55936!4l?Jg7WZT(id5*k6EGngRd6DWK< zdRfC$z!NDY4j{LIMm9J+x@8Z@g61f0mx%C#2HNj~PSJbeqYE0}xn24m6i6Puwtr-d z7*4))YI@P>pjWb6z)3wC`aXe$>a zje}DoqJ0YrFOYiB`1Y0H7rMUupr)*u45-)=-Txg@EFFIFbQfrt=%GjFJ@83U(H@=0 z9b;l&*4@K4ehVHWez^!VYyk5=bi6Xyqwx)Rw4-xx#lQdmk^5sept;JUvlVp7$~SP7 zae&S@0P~?Ep&s2}p2zXl5C8uE2Q?Htx(f`ByMoqdFnDykNqB(DgU+p>UOs5E(~C8C zKmGW`Glzti=~i&$ycPz8VMNpQz!E?8+V*gViIfk*dLkkfp6*LHw+$VW+dbT@&9 z%3QjWSUfuCf<%3~3ltoi|1j3cd3*=0RsiiH1x6c`xzTSCF6LtG0n5v53y z<^byT2r_||$jk+Kz@_t%D`?sIOQ{MOJ7$~es6QKQac3y)6Fa>mvfpbm;hukDX!NM3j$2XX^)pUo5O zd1noe?j4}26+AG;3?9_-=$rr+>6{Mg_I_ygFJSWc-U_l5w6cT0Wk0AU=$#4@a5X&X zYIwl#Wb?WIFGN55|8MyJ#k*yog$mgUkdd0s`!9M|{QCd01>$6ocU(d1szF0s)dnuz z3qTv+T{nJCKpjJm&U>JBBB_d?88yhg)*ii6K_LWlK4d>{$ov2Q zUxMzP1J#E6n;-$VUKSK^&?UkRkcQQ9kM0Ig(0~T~KE4FqVF~RzERq1{N$oG7JozGI zJE)oqQ86$)2^vxH?1T(T!#fY1U7)7^%W|-%rh;;m;eS`d10KBv0>@iH7h8jxtr(&^FJy92~K4!+(AoP3YB zzJO*&m(JD)pb<8~))oK$|9^4zxh%uWtiPZdbuY*fpiALq8b~m_oCNN`!0I#5{3dvE zGmgWfdpD?Z1t~1J4BGg3|HTf_+5OP*J>>H0&wkJ}WAFdlJu|tKGq5)x}dG!8lZ{- z)Sm@S_OiY>wnv-+G-Lhm-v9p|$DKhdH$fXhVh>O7=nj^E`TckkXigB+VSBwB*8Tw7 z-(7Fu(e17Q87pFbnV~1cfGiKG4}w7{RTSzNR%uX5g=BHi3;<}m0@%CI#K|fKPMm!o z!HIMG7HHzcnlw@Swb7t~H1OOnxIF=KAIN@i8{tJB=oqnHQ}d6Y#?En%&ciR>NP`=f zC8p5+a0wrD%IxIJz$-Eg6FfR^dO)@(d-RIxKl%Uvq(`r9`IG;L~> zT)gxja-UE`Ke*IHX&-`4FglB5Xvzlz2Jp@SX{fN}1X8*7^Qa?evlxTN z@di+(07|K#GU|9cr~m}Ig zaHj?m3}?ha!Jy&U?F#Mi_#p*@6*#aVVF30xJQxg5dLTjp8UnE|`Co$k3@VryUKpPP zu^D{3OTqmgA&CFqLHxfFFkz1E@ekIsM{>;ei)%;$YA5w@d`p zE}e&cI^Tg>1L0*Ln;_!|9-XciN)w>f3TU{Tz2O&Ai2>-qFvFAkK#TK1qiLY^2Oix> z7de)?gGL*`F%Rm9FsxuHwF2pZw<=&de?R;G|Md}%ZrdsWa3I~@4GyF$d`t{4?9cuG z|H4WNRCL=$L!_rbq_^^cf(yD{qVorM_35Y1V=w=Lns$in04X1l(u1-`cesH^uSbA~ zykM0=-q$`us+qK_8Hy4pbhzw#=i~_5+_0gHNxj zOT9dUN3ZOeemMq@<^zl#{Ob>Tbh19?Gh%q5ckcgx@N^=m@?~5h&Hy=2tJiiGNO31? z9Z1p3<=|Cx`@ly>bg~wK#IAzGdTrBofm#Es=^&v=;-H@HffCVOTnr2hpqaAcFZd*X z{qJO*z-I*74yITQ8iBC&0U6zG@FHm4AJ7>G(I-LejpH7jtP??|%qa(*2*EnF60BAY zs#Xo8w%azJ&xirG%T^h5+eELaZwF|L0;?}b?}t-={(E%Wdh&s82lD6@{qO_SS2BIm zC&%#O3Pes9Ea%ht47C6L2WS_w>Q#{RR){no$O7q1V(2 zr03-cuysx#>!9Jb3?eNLl0F5IR)%SUv_?C2My*Rk5}~CKI;LcOYoUDp#93K6`(!41}|b)|M~CH2}IPmENPvrP?_JVezwHzo>;Ma6*;Meq>z^@s)fL}9q1HWeK0e;Qg3;dd;5BN1} zKOhb4fTv189Zy#Q(3J$ez2N%;J6k~qX+xdd3i6ppXR8CKwcpL!SZc^{ycMJjv}ovf zE9gpAP!9*RVY>793obs82f)U{Cr!YoD+LPwg0#QE^$oZ^77W_{()dPzkpX2(#SL%> zs-P?lE{*eOJOWY(JEb4AC?#!zPw!Sx*VnW2%05uF;n8^tbfVX`KgDJA0ot0#-vTOsc7gU`di0vcbbtlZn51#UbwpS79q4V<#&_Rf;2TIr>@dzp}9bqPdPGPj!D9_*+1I`Aq9w1X+ za#=c1eMPqdGz#XcmQ;G031c2v>wx^ z^E>ERD8pU`29Ft@jG!a8*+8d`w;U)v;nVpE)X{)lo&oM>ALf?_4T+XK_UydoxCc~E zfYt;;{M&lFRK~HPj*+3{glF?Hrq`Qc^GTi8Tn(SRUgFt#?e%=54rOTbBSymmpxF<| zfB|?1w8U{&(0$_!9+uyW>pekdYoB)Pyy|NBgnt{mPj5M6%YhO*o0yW~`pDjZYYo2) z%OySb{ri9a|NsAg|9kK+zE)Iu-1Q8|U7+&-Z-LHH3he>=t+$5lzmMhrqV3(TXIc;J z0FBK%^1B=X`7jzZo&xip1A|Ri>vue4Bf7vY>akf z;U8|433+gO2BlHZ!g!=w-W4>i+F1wMr}xF9*H#R4ly@W8%rB_R9hpuZezAfZw73A- z{oVc?peBOpGIh{wt2lTPwe#tVd?hBxo$8>f0ir&%^Fs3jCRlpvyaw&(gL>x`ovv#- zFL-pzH$PzX=&YU4>AIrxf=B25<_8?0ne|TB4KM6ifBpCEu4VA)Rblq&{Qp9a^%v;w z0MO(-llbHU*4mi*h8OSv2y?DhCtj)1O_>&)%&?fhY5&)-rCI{!YJ zzhy6o*5YqrWn^Gzu3fts{$=_1T!oXmo z&))*NXO({&Gl)5ffdRCDv!x4CN1Xt*+B@(2bh;jRalaFEhM((!)&q6B<1k03OXpDo`>OgGc8r{%y{T9?gdtZL~^0x^&mB0G+H_Wg?=v$nbRKN@sn6eX8MLU8f15zdrIKk4zw}Ec`gFR^@aT+PU}MkUItetR02!YJ zg)1mbLE}~~-Jxq-TQ8MxfPxWp#xQu9ad+tsAJ9%v*8@Ji*^Do&J0Knem3#+4PV?z} z{n8RN%mJ>~VCKpF|Nq}czm(Ud+josC=rD88aT_25d@Y~yH-oM$cH!UV&FI+hQ<1-A zI%qj$!_PQ=@KvOS2OJxI#zLw&{%xTvd^_KRV$T)SrJoCGF}rr2ZT`gA*_!kJ|NoBA z?Jq&e4c2~eZT(hS2Z~sa?$QGunjbtY57tY9*`Su@f5931n0J@%0L^#R9`Nb>_+k^tqn+P6kH5$OC7aHVpx6ejQ2|BxREVUjAxPe%lYzm} z@~8{{Hf=}#DaRZe{>JjRfG#NY?7Z*T@HeKEqoH;?qi6H||Bemz4E!yiSp-nf`gA@6 zWtx|53=AI0Cp>#)_QQFSH&|SL$bgx4eShn;;=kXWv9iY4eQUvjOr)$Ft?{<(F zSel^&l$L!P94!y>H!CwSFhD~gmcMlqIK{d!Fm!`s-Lvz)4`?H9H#j{wS{~zXnGL#U zwev4%pE7?-A84eZJM;wTtO;1+?R@>Bz7;9$f-ik|Sr48Ib6~KE;cs07S_`+$i>c)# zf6H2s_1&dwz#+Hl&;S394HgWbJjCDP3^KekcEQW&-~T~t7WiAIf|htmf!6L#0INR^ z_OdG^q`_&Bzpvu&|Nk!Ct{YrIq51gl|Nk#R_oz+)mkS;ce}KHi-+B{d*nP0GT%bV! z?$*3q0y>Wi3(7^4TW>CY! zgYmFOXY35m&Kn-xu?zUOF~7VHJue&NK3BtUFQ&TRlyiTyfC_6+ z&Rhre+e^@eui)~@2Xx@dCy-4=te`{=stovBnLrn}GJf`D`~b2m8*CS(e)R0T|I!U? z7lhBh%^4gVFWW$=04a$vetx0QjFh}U1}Xgn4Y#|3wzPLZi+TQS%q<5>G`mCB*y!_5 z1$CyT9OAsdzwN+F29O)NK{X=izA{L)P|IL=;N|n5|Nr}TzJDnPPC>CNd?1QkTW^`ELhR&CRtd82DRi7(fg6 z|Cf|^hb{o!htqngl*LA`B*R9(M7iZaNdow^gGZp*>qCv8l;O#E9Hgw}K#8l3e(A%O z10}ZLD_^>ESAgnbkc)geb9Z=j`X1nK1vMod8)_M~Ag7W$Hqb_$>oiHUO zEH?V3cR?F;8mt&fML^q1Ku7Gqo`C2t`SfNndiMG;f(r1Lpo6DCSM~DCGk^lGxAcHV zZ|x4B&WA5TzkvhqW$=H{ER_rB-kn-Ttx_SdmrA)kn~ySsW259b$oD?opeihP#mh=i zXRnhHvwi!)qw`v~hk!@70H|es{qO((v8|vx3;4GkK<=GE<|{%yy7@uPNzt>xpyp&b zM|V9~n}H;}ISD_H0os0soLd84f>6%k(QW_Y%Q;a7&`#pcV=s1!Af3+xQxBTY@PurH z$Cwq8`2F+02V@Cj1}NvQ0P$N7lms_a2+(cH29IV7 zhR)b4CHfw{rB^(9ZIeI$|NlZxOM;>GK&e{uZ;=u~$Ie&=$N}`Pr@Rnh_yszS;dNK% z{TCf;SV8Av+yeFQeSX3G!VeyjbL@^~czpojUQl?vRR8t!KeQYL@j?BA7mL6D{2%Kv z137kJ{prwda2SJPaxTj+h$>ip0N1bl8K-_wpZTTm4`xum7p5N64}i`^dqB_R3;YRk z`hCzDx1GmcY(6FiogIH3?a_G*)EkU_`EM#p?*_jAwAVD{5@^Z6(-$?r89~Pcae&vL za>c&0~mj~^xL;6FI4sNI;XvWYJJY%>kQH~)P<`9kpA`GDPXnMR0G&Fnv#rORp z44$CX$cY}krdlmvLBj(t9_$xk0B^dz4^|!7BG2&R%zhE@R{dVnNee*JQlioh3=D<` zUTgu0gU9gh8y<)ToqgQ}8t8D0jeR+DzX)P{-LW_Hk4LZR+-8_1)%!&lUav(>|CsLo zm4M`akNr^h|8D}D^1>Y1{aJ9M6;Rzjvss?u1rNxbpxxT0Oc3{5L)`ymp9nZQJUXH7 zf7}dn|IK}$w zr$d7J#rC~O?tj$?_LSj)7Yp{HxL*?F{+_+C^pgc~zcv@x{UsoAWcPQ&!#{E_YWV;6 z=rxUnTVhR=`*+15xt{~(e*Jl1r@r{U2g&_faHAjWL2-X%BPjjvfw}({NOP~~ZAkcU z0f{5KKYAW4{Acb#bw4Ql=QeRnW8+2XIdGZr`uK|#;NlX}J_Feg+RG0=OY6m}NYGKD$2_`OFMKcr&sV8<^vd3w zCkHNfAQR4=_g^%3f@Yan*Fe;iJoo4pO^7jMa0SguyabqD>)!0SIC zN1`qY1)cs?V&>ENuJis25zyRDuPEfcK-+6VprNW`9-RkYM8|`|=m-ZmaNw02!;8a- z;LUR{c7yy0zTEz0C#Xh(6yBg^BC)YA^?Dgm7s$icbH7*&TB6u13f^DSYg>xs{+DqW z?(Y>XIb*;8-c${$mCR>@_Fx1kcpL}KsWEsQcj5rgEF5i%Ac>Dl|5z6s*kopHap4j{br6B^E8u`!2-`>Q)06M=2biI%31JHzNiIPWe z>;q7{1059|WSZgZH@M6Vx zP;&v2{vq{uuj!Xlpacp&UkF}rGJIiV@Mx~!VBv4s%fJAe;I#b_2b$VC@?zmpQPBS8 zZ-?3WTUx;_;NL9J?dHwDMfh7DGB7ZFJIn~#*3R~^~Ho_DF)EY zRp+r6ThE9wfZYh<_nI!!lV^BQxLgdpO&omC(v&lxLx0|b)p+!p%9YDAya-qhYf`*` zCfu|Mpw0Kj9^I@{BEfdNo&{|eLFVu78=f@06upm;mjQe=RP4*xr=X>mpmL+Tn&V{_ zxU~!!f9q!57!Ee#CFnX_czx~B%~}`&5eMDJ4w~=q42AG@{zJ~Y-Wdkr%YgWh@P)4z zM9QB`LCE>D1iZjNG#9i~x7YR<=sr}?#ZL!c?2g8sKb7Mk`BS=099)t6bYjV$eVyp} z6O>61d4}`F8|b<%(BL*`brk44O6igpp#1U}RPUcKV0iK4BPbnMFqAOG9`@*Ftpxe6 z*OV(4Hj((^C1!pC^&9^LJA6CFSfb+5`Pt**Z%}Kt4wSz@%R?<*7{B@XAJUu#HKrLn zI={czaD$7%qx10Vt4Li^Sopng25IfKc(MBfs9oB5{N<%TzyHJf8=&>e&{ij8Lzcyh z$)A7z2VHNDw%-Eee^CDxd{!lB{pJ}^&X@4$tUUlaM)C#tUfpgBQ05Q({PX{7Sy=k% z4i*3%`1NKtIM1E{HDUi>^XRsI;r0IKf5n=S6IV%q3AW3-n0twF-wW~qf_e_sW$E>1I`g6M&7&t*wQ=oGO4eAM(=(OIhu<5-2q7`CM>2%lbQijg^ zFIb=b{Qp{*U!K9G^ZSd6xuE`V>6O;ol}}tdOF?5?prL&5_zLJ85e~<08x^o04G+9n z{T$-{%9S9aUY~!l>%&j9`DSn#5DE^#N z$O#IiWgg8(6kIxCx4On2p1{A2*`xE`>s_$;f1&;U=l^bj=3h+wQw}u$65*e6h~q-( zPS@5am0LV|SyLSp89aJR4}i9s#GdfzwSDs#w7k*vfKO-cg%|e0OboAk!Qsrm&5hBc z`4}VkF3A^Z?|(wqRe}8*?%Dah^O|EA=%Qs;!*8Im8BnR}f!v@6jr4cA?(nhv&)=K{ zIzyoIq~XcV(iNVae>#2VxPXq|Jp0;qg5d$j=HHB-ofa=^i4I6>11 zy=jc#v1E^K-yNR41p=UhtbIBeeJ%g+H;XVaFu3w>Gf{DE`NrSE#>Bv|A2jR#g6A2i zbUpw+x4{c!ZLf<8laJ+(VlKyqe_H%4Zx|RDx?@-PfL6@>1K(Bbx}o#di?8=V1Llw# z)uZ#6XXmjOn;w8}b9UX({DaZ4^KiLfx9gnN1EA?iI|lw%RnSaJ=O-V{N8q8-!;JhL zlm39}0MJC@0+-I%H6ERz8(!2s{rTUcJ9L9fckCLE)&oA>t_wUmkMp;H7sIq(Dm6UD zBF^C0{F|A-4Rk)I<8DyX)3eh89uTeH|A7W~zZf2P`3*FOHo*gQ5#lqSPFI8_n$Ldz z2bm1Eq&sv2X!?9PEIl|j)Tn^QH#tD(_%_t2fCf1KfG0~J`PY$un~MswXK#oKvuEcO z8~sudNV^g&&InpQVxwR3$wsSG0Af-p2Z(0UFFEFT+yUH52S<@7q;5FwItSG7d02jFq9bj_SUE{dUS(s`vphBf8Wk$FB0y- zBjrChQjWZkz5oAz^AED#AcEig&u%{RtJC8vU0`n6{QRV?kJ&w)C zSfRUgT)?NxGkP3%0QW7xb#QkmQfVIO(R{=MTF`;cCh_S!{zB~&C>~vRK+W*zjy(W6 z%}L3#^A2biEvRyYtSb2X5!A|g{^ILLknOii?-?F=z2JrV8&Crr+|GpLA4tLM*PFt| z2+BAT&A&i1=qEgz@B9aiOoL9e=y3l9Hp-*(vt#Eq-_D~i3?GA%Hs}EP5(!YVHw848 zsqWcpBk$Y#w$#As7>horWhmj(iF~vQv_0c^j744_G)oLsUvk0I@(y_Dz4QQR#E#$T zw1?)+7k3|n67g}wdMn6!mWQBu_Rixk_C5aj|8)ma@ds(0oex*xfid&hm{}p=q*6l2)-ns^;?M+Xj{i2$U<4$ORxU_f6?m< zs)j1mK^-cv15QHM33>F|E)D`Mi7kEcVn-%u`)}!s*9Rc(U;w!z_&=!83-9kj$~;IL z)TcY0!?!m_MZ)ttiwfA!tiIhjDiXe}Z%h0^&BNn&e}azC4{T;Fd0@!E=+SKZ$H$O? z<+w9w{Ubw(v`2R}2dK^gr@GjeKjwitDUkg6;`U$gxWgGALx$Ja(?IuW{tlF5cp;K0 z%J6zIXc0oMt%8*z!;8)TklhCh9}SPr(i_MX(F@Q}r|S*SI+Pb5=E9msH(s>t0QtH0 z2B>xCu?Qia0}=-vRM(3oe2tL9Hwd(WMAu1z0et+iF3QcLrMjR1KY1AJe(OMRIA3@X zkO8u@^up^MkZ|5$smSo+^)Hl$zrJ&hjP^kFymJ54!{_*Ji3|bp{>k%kh z90lh`k4|Qv&SDO5;U&}oIzkpwiG#;opy{ka=*9ED1Vz6c2?0}Dll7l;2K$M;i6OBm%y_!ou;TL1I+fo9)4y5*YxGxE38F)%PR z|7YTFoeXNwb=Pscuz3LLgWd0Rz42n<7f@3GIq#Nw`nEnPi2+@=ReHgvGxdVUaae9z z^8Ek*7xoU|+!O&Co5 zxTJ|Pyq<=*sQATa6=?>DcMHuG8D3oZ&B*ZL{xe+dW$=D?&(6P~ZVTr}(5$Kj=y+UE z{rg%H6i?s-6+y{GdYu?}lx6a483s_f{i5n2C|<#d!N{k#SQwxo~mJAu3Y$)K_z z`vcr{51#z||5^)DPkKQ6O*{_}{U*?GPR?40bDzwDI`{MgP|b3n^c<+b@PST1g1Xe8 zoWa2G;;wSDLnx08qJ>xwj12VG2Q~o+@Q|S z;TPZG1cHUziozB5KqU^yq|$9Kc0d04 zznh`+c&F=@7yBoGJ1)td-C)U?pqbw8(k-CMv)4At1a#S)>y8&Me=s8Ei@-;>J%7=< zo0;Jy=r-yXvopcr`Vusr3Oc8w*OuD{l>d`O8D2`Dj8_@DLcCiF9)b{tIO=s9Bt4;p zz|qJ5|G$`EBf;?c_KTU1!G$X%y};u?%oDN#;HpQj==E)&GiJa=?04`WZSadJt)K%b zK7z}_=ipI}-#}}`?z-jWu<05f}XrIpajxnIoh*;2ob{uGQ zF!p6+8B%C<`3;TP}bWLspmW0j=$8 z-3;n6b^e2_S9pCAR)2v`qS@ov{FbqFn@@M_0$)%ax)9uXx$n~%yWz#0+o1050Y>nq zAJ>i-XKsMf_Cav}Ne$%U?$`~!ogaKPZ}7K*j#=z>UEu?{A<3uHcSZ9DMwiaqhECTF z9^I}To|XqZ`JE5=Xddu@>|pWkWnuK_Yz3W_=xh0pzZqn)XKxv!NB3UvIz7X;o}J%( zKr)a6iAoo|c89iCZL0ZOKC^4I!m;xx=w^p& zPk;V@tpIYrWAjnQmlEK<3#5DjN7A9 z6b8_W8jo(!%CB2Ko%jD=aO^z#dON>711Jf+JddykY%l0O9B6pIP=5OJ|4TE_acteb zD_pvB8^CKxJi2{5d^!*Lbl&p-B}LZ_FLqxCdDeAs6?P#NKkn+#5xkg2Vu@rn^;R>)prQ1PP)Fq(}mn#@}B&zXgu9DF^ts9e|F9cy@9H4#)G9tI^((6TA+D9F?xXuXU_Z!oNl%HOI4 zs_0uU@wbG47~QTbJbEKwbuWJ__(V6*;dqZV;!e;_Ual() z51pz*BlFB$?t^TWOyzwE|D#jl@WU-W?vkJ$lQ>;pbV29f?EBwjKj*TcaQFRvo< z)r;R}!R~$O4H}>Cwe@oWMK-9`aGmiYJ{lC;z7u@9U1z**^XRoT0Lz9>@aQa^@xl=- z8#)1W8QaTl&yCpOxd$ z4fdJ`;|Uke%b*JDA7}~Peg0NPRtC^^9RAh@HU1c2>TbJzpsV6sI(tC}Fu8QLg3c1^>;;`S^g{o} z&;Q+Erb{j9T;uyT)H(Pm9WhSI*5Q@}~wfuR{3ivL_YkMU1A;Mn|(k-w!8 zy49c(bRvH5UeHETpYC2znsDiMRdDH?3bM+FC3|3l9A zbm<1GgdBb6+WNK=d`uO8>qSlmr1ml-@(llj+VLVD-QYMj{NG^1r0>8#?0Pa?fk8G|Nj3EYEiXZ0nJD??*%!V zfxq<~2Wb9iD=0S@{`Y{`(LEJ(J`?C9kzU?@AJF6l*aser$6tuN0WIf-a9a;}b{^$# z@dPEx&f^~4;7o?*w(e4c|DXv+$Ijy~cHI5>-?jBW%tbBUfB*k~Sq)il4Qiu+Z*uw% zD%QalgYmaEGcYi`d<8lLdqVRMHvX1&P+PED4b*v00+pECFM^uVhd|>|m0rC*R!pE- z_s*%Hl;F{M&I6hn3U7f_fjh!F9^GJBr(-M@`o6vSj2@6=0zTB=l97SIuh&M)v-7Ug zF&1kE=wXB8+=>;L#^X){ma0>;CReMmH}o<=`8SFXCU$JR#5TPU8>;I`5tuiS~s{H^62da z9aZPiD;g-wz|aXfXATlw9-XZ}K&2cc33+t3f=;RP=xznYsYhokXo$QUT+Vg23j7D9 zN>G8(*$P@p)9tFz*$V1@L1WLOvsD39z=IFRXw?AK+=o7cMyub0BJlg|pZ{N;`u+cZ z+62%Yd#c4=^3Y?ZC-_*t^y;JzaZ(oRREOCKr>;WdIRduW^jI;3*je()%5@=s^jT{3c)58)xzsn(y-nk%;bnXR_@K|9@ zFoSex`CGDB85rO_SjZ@lGN=c8PFI2fnk_s#kNJYGT}cIP_HtDKok`+q_{8uwza}`! zJ;CAg|NsB`<_8Y^n&7DJYz+VfY^xzVsL28j>eu4X@)k5S?$eob|A$8>*lnOupoH_F z3;`N&=Wp4^4LURAMeghW;QK&8ZTcuSP>HY?l!!pr%I)=RJOY}*16>7sz_;^(FaMH< z%$^4yF#B2__mMoo-&FkwG@yU%1?P2yv0@-IAPMnhC8#`iHGBf9AaB3)1#dE7@aUck zI>*iMl27+m&@qD^;6oBX{sP_as`&wYy%GPCL(CorA254Z9t0iEz~CWyk-v%O5yYC# z)&$Th@6V?|ISh2K0DsGVP|4PL5VYIU@*aP4Be-C?2ToTW-2%;39E@d5pqqXVaCkHy zF? z-)>8v&Z(d<@PV9z2WrJXJM;6uPj3bz_=>ytKAmep$@_)CDUgpr1sH$JR31>P;}v9{ z50rhFPyhViJv9g1-~pef=hF=~71Y9=4sPM@1%;DOC*(NF&R&p}FZP}U^>)B)ALyx) zt)Sj5sOaQxk>LTQ0I+GE-Hrl2y@ebep!vy1#nDhV`*vRS?R?HJ&*0mg$^a^l^+98f z-M$K-F`@3Qplazw<+=a=TMv|qdUm_02zVZM1ue3Gv}-!uet0$?b&`KKjwKw}zGB#e~zKB4{tDIP~d!=hM9xe~Npu6B&i9>%U%a>mO8Ea@Jh=Arf9q|ZZm^a7 zEsWr}04Eej&<4!sFZN&i`TymlZ^-9&d-bvydq5g3;H@$IEq$CI*MrUQfy9z0sK0m@ z8gm|!QxAPCI{caOen(Wj0$Vc;)ujSto86VKu((ima|9e0J z;>DTEpfG@#Zu!}#^BZVlhY@u7BER!zk6s%ikIo-HnjbtYKX~vv9rMuq>B)EZ(;1uTD z`5czWy1}0C?R@9idDN#H>A#-tM)fgT?DGh=kT|D1r>+zs^vL|hw2DW7=xBhlyblpD6|}a zBtMT{R_`*<(GR~o_+362o`hC6FIHdr32RA#9J7;+fq}nO?F*=S_xS(+Kcuw@X==W_ z`s4q9{%rw_pkt_B+WrI`zXWd1zKjM{@E6bi{NK&d{F8~l<=N-||C@h`@VDIk48CQ9 zzlE0_oGL*X8r1UifaF5Q|5qG4kH6dxZW?^>?F6MXXk??tv}fm0-_GyQn0_e^Dqg$6 zH4A83+1;mmDX69dl^+U*x1r^<&3#av^`aY`V8LpAEFYIXe^GTAG`#!%fX8ugr3Wfa zpmm~8=l2(DKy@0V1?ti50J+~{4mg~l3AWT=Cl6=<9O8lh7eMa+{|VHz*$Q$4s72ph z3ToBsfF0Qjs+3egO%=z6a}AxX8lb3mRcL;|()@$5vsLEb|NoK)3@^m7(yRYt2{beLG>SK!>ItMV8{UPE$sybuxsnd z5}9UjLHw^&xO*xn2ra?27=OASgfe)NFWYKxD9YBm0rsSFGZ&`ONIc@c=y9m~+|4C>;S?)nZ6 zOwdWhrDBk>!*VYupldliJ7rWnLHiB5qXodKnMx;mbc4gmqubgQl)u0Ez+3zmKxw2` z)cz#s>Y=Tm193e%Tfu_x);;JL;TLj{PG?^>xb5yN0CE_}7SB!>l^?#AfBBn0=fe1Q zKK1Da7iiFG&!f8+RHr~j9Xue_uSfS>P z1ALz#=!Pwi&ikNV!o~BTYVrAtljp(RJ^mJjzyJStZv|CYpoT5z4s~cUfAQ_~&;Ktg z--8NTaL3xCdn(9s*Uk?f&;y>3yVoz$Z~p%eNvEJr0;r=4x{n;v%Z3zq@b(v^YJIsC zR2|5>Ffc$8I;hZq7ywG>FNMIepiIutJr|TLTW^;LxOC42hyFC#%Fb?yZP0<@e1 z7j2+o&xJ3@HbT&VdSkut_iN-u?gY)A=3L7+QVm=YJo| z$IxB`f3q>D?bmtF@W00{P+)=b4z%j-$1oD zc)S)I)GtNBGX~)Hw`b=)@W}oBm*L;x4%+hubUYpFUvWhSkW21)p!UdnZL@JYW}_Ap z!^;}*I7+SpsDIm;4>9b7IM{cf{0%Y_meE1YUXNZ|DTslf{O$oQARuRCzeoTXs0}g$ z8ljz#zTF$pL5qkgR>ko4Yj#+iciY?mSF7}R=(3cOqksm~zev!0#*A!USPCwP5&hDW!nKxgR`pH9~fpHANf(57j$ z0apHP>^9Z>Eui&wpp~R5pp*yd%UlOBIE2k9wIV+4(Ie)Da8>(Si{lJ)2YYlW0{{HAS(B*LQ(Wr|$t*!;>#s9)d=nkAi35K(i2A zPX7GwxEE9+y#%fFfAQq-&;Q^{6JKb-9b9tH)$kj5F8RRAC~$IuuOGkQ)9t6=)9ohF z?I+;T9mdgZ=F#~Sv=$}cMc3c||3Q0+kmmn=y8Q$^J3n;$N$i^gsu>|lgA6adhy^P~ zTJQ&7F912O7jytKWZNyuW+>3Ya;LpN|2uYvsA%|rXNNp`O_*Qoy9_FMTrYqdL!f)9 zJUS0McDtx(xOV%fsQC1T-f-=9QBm;h_EC`luMB`M_jU|*{9mGC0U`_nJbGO(I0gm0 zkO$pa*nGsmvGXXbe}}OmGy4RjmQ6kZS~qjM^d9Odgkm1OsV`u&sIiA3LH_#oi;_d2 zC7TY=^AS8j9mMaTQ^Kyn4;BZnlgU8Kl`nYALDOmAqtgWy7#Ny=F!8r=fb#(B!9$=* zsCI*6<5>m<22h@!;L#bo19kwCXY)T6{ua=Lrf=tW$8X2jOF2OUT&=%ACm?j!DR_2+ zPOjo_0bN%5!gc@8|DDI0fBfffDFYAo)^i}wW>$g*YFiXQ_I8FY@agrP;M-e*Sf2=5 z*Y%CR1$+Qy^BWGIUe=>i3_!DZKAqo#Uu1%|CLu40Jjv&!WPqkmc>HH&3wB{ zR3u(+fVU^W^Q4W4Eslnlz)9*QD7S#d6<_Rjg9p$DIYjhhJX$hur`7 zgk3qz%HIlF0S)fyK7Vo5mVp6mFeoLpf@VTqf(m@_`oh~9peeVhAR9YN8+bl$Hi zn+0qS)RQfY4B-CMiU0pSdTo0J6d6FvwREqdtX75Hrv*9;BMh`u3bZH&e2n}R&?+kn zkIvc^=qaeH{MUcbt|(_n`{&>*{^m#Zo|e~ZLp+)f2zYhd`~WR00$o)6LcfHG!KL#d zq<8}F7Ioe6!VA3QpfngXQs4oaw(S=9c1)pkn~!ycK&^mBw}Zm#U5NPc=yhG;(di0W zW3U2cjthKLxCLT)4=B#T>Fv_lpZ`0LzxXW0#PGszKiY&ND8Kvwtp$c}&IkEZ!=tnI z1oGy98-|yfpM#fQ9ViX;=nXyL(HVLH)C`O*22D=8o_Ntx20DXgGT z^8bMP6s0k!S=a-#008Dt#C)EEUU$E!-v?ft%-{0)4A_tSphNn*SuZGnBmZY2=yVIvL5a^dp|763>(9YcbBI>G0OzG$BY+P?MQvH3ZpXXlZU>=)nGgC>cOgXc0mdQCe( zSI&3dH@y8q*M}RFtUzaN9DZ@((EtAjAG5h|{`TlR*8KQ;=Pl3XKP)9Spy4FYVLza? zx@#msi>pd)K&t^^VF0P>AobCUY=~8_Cqww4MOdJ|3`lPQSZ~P@kIwtML9O!__AI~t zzut;e+C%r-`E(xl=rw($0LoWS9Yb9W-+~qjo&l}ufOw(#4abWjZ;;cUw;pihpK|nt z$f5uL9S=Tb1EtDt=5I$7N>o)D8tfT7Y#ACD7)mTa?se&W1=<}3T0R;3@-p}k9R`o) zY5~U5haTP03ZQOf^AQf0&R5WN(F;Js*3E|nUOz>oUr2p){2-{NG`s}b4GT$q;ByZ- zUhMS&-PnBO#nb(g44$1XDhkk)bhJ|xw1&X*xQhztm~zlc#up3!GK1F7b09COM6CCQ ztU-S92by|Jq(JilhL=2`R{!rj{2~Bs+0hpjV9Q)Vc7axeM0ScYcpi5J+vC&u9JIH@ z>@PEe;eqDgOg^38`CV>+@1O#&hIqM0pMe1>0>JA(UV`S+pye&Zzo7k(&2KD_iw@ZS z;}pV(5Ke17*wkX!8j(^j4^T(-Cg?czlZd6kD|i3@ z|3XCsv^1E%;~4`3^ys>7q#e!tt>7bcAbT|-$(n zo_NXk|Nnn*!Z-Z(!uy95!wWZX5a09YwOzuc$nZk_JZM2HYl9@%z>l%8a%25El-dDQ zAHw1jRAhkfEBO=L`ML2is2l2mwzKgD=-80Z10Kg+Pk{R8FAS|2z*m|WUh2FV06GG= z*YyCnP6U?^pFzuvLqU7Tpt}^gK`k9fPCEQz>P}Ge272Bls1E|&1P zE6`cG0aP}>IAR5{3^c#gV0bCOr`LCbPcLh4j{ztjfvpAIXa7Ry^Z)-*k)Y`e)J5T9 z9^l9Z*C1<;gG<+qB1{Y~cy^-HAmH>K+V~9Qe^=0URZyc9bi5|qQQ(6wLqXB*2%2Q* z^nKvb>wCfDxGU%yPlnFY7cVTYfxV7)u;$_&ARi;;XV77*p`M^^d!TcLkOCdWI#5gY zge9nlbh7iFM=z++E_&h%XsqIZPv`T_*b_dW5IXL<0~96TO{crAf~`jid0x<<4>;sO ztHfVO?f~^1QSMjjW?do$N-MUX^g(IusbiQ=uj#`b|NlFN`t<6))R$v$4Dsnzy{!N` z<)ho+#Wr8i;pnpWK?w|WT065xH*1j?XdAl0i&c>zIctwz(+T_j|9|mX40MFMHF(<4 zqgOQMAgH}!${8ic@FF1#tP&<=xDPBRPBKveq(*c1nlDf!7@3qaSRee&ovU28AL@FE&jOdh1p9VX_{D;m8Yte;6ij^Twq zl6dlAuy{nQ9K#E7B=K%gcJDP^DkI16;(rp{zIPtIq6L>h{zr&`E>)NVYJ~TyPCfYl z|BDMSDUV*!C6I7Y1cl2En7B{pBadEFW02Sqh!}X~jYqF2D?~XPNU9Se1@a|Gd8nQo z=vE8oU;qEV$b(41bmbof`@vjKj^RZxL<$^c>3hNAQ@G_BURXoKVd2XI8XW31JpUf+p$D zf~B^Cq`Ve_6;PUi8|MxM2D=*vMI-vV9wlXp7V}%HO2MM%-1RzI?+kOTK zlz;?4w~Bl8+P((~B!dJLAzEI81cE>Upcw&=UfX9N0mrROpi9BPhcPY!j{9==5cp1qdhgjbPDvLqq6+rfvHNJVlz`)?r*{bp% z_4Y>4b_~!`?ikQqMdx170u<0G)t#R~htr=}3+l6g1$``Ecy=D+Z)Rm?U;vF6>G8K% zf#yFt|APjNct8uQw}Q+Do&O0szr(ZnUy9@Y6tFj0_kd0Zh8PaYO|Rt`Jow!Yc{aZV z9oFp2@Al6FvQWme*NxGqb1!}hM2J}Zz3o%dgy-3Xd(fV4dtK^@i3-=LbR^P#8a zZT=R}W#SFib^I-$F!Qy%$=|#bv~*PSp-VSpu}$;O6#l+MP&c+4yd-BI#AUosUV-k4 zdBfq;-3#(MIG@@cWL9JdFg)<$WH%#2L=@yGRU43Jd*d0QM}0UjfEUAgKs@zAevoBqBr#h>V`^4JK9(CrcdWB@Q~U)pUz&;SgKFwT+l?*i<#R% z<3nJ!Pd8Y`qw}B-<4w@Ct$qpnF-Col=7WsBmLK_>1i_YW1^L0Fdn#xFl1JzH7ZKY) zV|H7?3+Xzazu37Iv_Fi$RSUc(2{dV`%J6}K0o;)0hpbNO1;^pZ5>ZeC<8R#sniAON&h&C4h#}A5+5DT4zvUiiV56E*pTAWP)TZjSWzqyq z$Fy=sd{Z4B9UaO1u1RpfNndZyvp@2VTfAI6}PD%llD9p5f&waR1>)3M>`PdjYC! zfAPD0@aSbduL3&m&9)>&p236P4YY!_v6B(B{PX2A$Yt%2{Oi$ctEU0-6T}y`>wkih z59m%XuvdILU%nJU4lj>h)>0LD&@oY<QaGj#{eBP zB>+0YKoW9w?tRD@F=(6LOK0#(G*F@Tgc+24d>?pphQ4?qvkqiS=nIc--v^-8eg5DM z7*ujSswAjytnbkYH5D|R@(z41!*ftu^u?krAd_5QfUE}D2)U2Nqu2CjkUYan(2O3e zJ?+s7ihtWMP^8@^TXb}Hp`$kCywEh+P0S-S5548Jt+on*7s*jzGmn7yy{4kz@)LZ}OBcvQ@IkjfPQvdu2A!V?xrNX=4%C^u z4+^aXE+8Xfe;6J>9pAMyD&a6Z00}Qp{Q~N@gT{hi{Er27XsS6tnv;<8=c_u&u&?P#?`2H!sp(vPSgo8L%u)}8_PLO(MyFm(R* z08R3J2UUWHmw`4m{jle6zX{szl>FMK*ED`H=(?8w-n}ll44%C*$2_`?!Fu0=cJWNQ zF2VqsDqY3MzyMLv9dnGs12nz)9W(^n`h>rQkCB1lvm<{#iweIWGl=1%BET=`EdXMM zs3`CY1}lJ=F)9Z9g3$&bW{QdfzhJThh?%1jz%Q5`0AiM?B=8FsCxDnWDh2$4)dim2 zEh?ab*rT%Z^B0zLLHE3XR?vg)Md@}u13JkR+Wi2H;(`0YFD9>(Wbo)@_Ut?kF%jn3R$-L; z74~<4!seP6DCHjpolDRPIz0k0{^HRKN;Fq_6!+}_HDO;$fyBW60;SjH|BU6l9^FomL@O07$`A_et%DAmoAmula;R2Q#P`_OQHHV#L2sxYuic=Y{57JzbvxJ%89bY785sCmKm+=q8oONzRM8%HJpeKU z6um8PK_ySOt<4V5S&0AnTkeARy`cv{TkOv72WOEM$l#6Z0noWY{2jYNDrR`}ia2=m zvi_M5%E>MlIJzAKK#OGOfmVD#>|6*^huXpd^_o4Jk63_@q5=(o!PBR2=XcNEI2q68 z;}Rv>p51N&pkQqUO`3Z2+Fl2bm%6Ta!KVQ#z+6{AwaK|Ns9Xa-i)R zzM$Ccb`t;_^)er{9xQOh&;O9~s6s(Ivmj?dfQGfL!G#7SkeEGSr>ybtx2y*pD%}p2 zX#T~<-+mqxBF(>8%0*w!21&^~Fo4d@YwZJxcQbpa{{L_Pz$5uu^S`=!F^_|f#5_0; zd2|Yc#!kWc8Fc?JF9X8?d7s`KAx4i*&@h1UJW#|PC{_3ARW;=Y9byS8PZ;)r?)Cx= z4DB`(XYlA`<$)+Gc@8oRK7jx+_2qOkDOi2z(OfOTSYqnY&3cLxRNI+8_J)mSJ)F(R zFu|kwmq_VDaA1Mcw@33YZvGah|NsBLKJC#f`nJk|!NW3Gpmg6$Jy0G6hZl6L31!9* zG}Z(iu>;NXx_NZl?%WFU$^Q~@kKWJ+psi{FdqK&sguUDKLF<7^XV5h1-35?RzFZV_ zxJeN*+~m>CDhzUVC+M!fweqlmJ@wg)3@;{uDu`~@&m5pq2qfiAVZ2lq1-@X{Mvx0x0E2C#`Ea++@@WOKE|Ns9p zgZmII2TDy|g3fP*wu^cL_BZ^pEZ6YhUwpAxsrf}>^AAZEez#}*`yiK(fOa^8<`Zo! z>#x}8*T3-Wyzi^|zQLLSa>cw)=P%FZ|MvWCzD%GiPeA8&x+2fk8$!EU-~@;~f6;QO zB*v%nHE0{wK4w?LCt%0DHinmn5bwC~yZu9U2`B@(bpCSbeAxVnvH2q-=c$sq-hlbd zza-1gL2p>P0BH|;bhEBx1+@x3`9RPAvXWwW30egPk%#yL?Dl?8*9&wWB8vKGD=F}9 zu@+GG4Cc*t+5e!GXsKIVJDpM|pd%zTuYk6(vUxQ7i2Pvi=#5d~2aSn$g8kO~_yZ`%{GR>uf4A$F)&r%X;M!+C zxb`U*@aSf>U=;po1V#wez zgMS+fV+RxeJ|{+x=0l*XvF>_wv&yl6qXM+!qub&IgQXP1%gdlHPB$wHip(<$DTdcm zUz}eAS~>Tml-m)!G~(sWzo08RT|1w5`fhnS9n=k*;L-ZOqzasAz!%zeetxlP4z$RK z@#wY<-3apXWshFo&!0iF^Uq$~-UljVO0`>WR~UERQ2qb^KZ7N!+D1c$Iu&RYCpi;T z#g$y(02QY>fBydm*Iu9_I9xz;La$$d{0nZEynYU*kc$XV`^4}7$W`2sf&pv;=nx`E z{}Lq6zpcF)bWqC!Mo4?V^?!v%<8!b}Z0Bq+WT=z!=oP8==wCGUi<6+>v>@JgWVPiKG_Gn)~NXnN9(1EOwa;1P^tFf&ByJhGx); zsi2k$%LSj#1Obok01n4*Eh?Z4#aP1C*afPL85kHCJMX_(@CTIT--CL;OF`$BH6P&s zXJyb0ov`w)+g59>Aw#b_qb;ZhQm^X)E=)UFMb;WJyvPSz{<_hln{^EX$WGH5aabGU z@FegYU=4#I!!D3kk6u$Zxa6`)jG!T37Y5LJ3Gi7#UqLhKf4~if7dO8B|KDx9X$_LS zb>M?no^`U$S!2lX;`;}%rw>&4c);4-EmJ`DgZ!KU^)q-^D7u%|f-eSo4)XFQ(7|cQ zUIz8U{~LgBMCdhb5QBN-*F>;KHvcz(d!!aFd3Pd8cRdZ>Uv~s|s9=XbfCi3GPigh& zX8rjKbY;B-1AhznOaN#n1l)FptbMlKz8c&Dr2(0LHU~q&b9sYh$0S`0we<$muRfY^Nbl?B~@7Q?+l-NPipu3oCcdjx-XsZtd zXTDc1o&P&o=YzETdiVc-=W)l*BQG9+Rtkg4k7F;Me*ORdWf*8Q8PtDax0Gc7AIAY& z4^_M8g}Ava!%NUc>lbrpgIXM{&;BAJbAt#hrUfQ|WBTD=(3~!)MXc`tYwLgQ2epWi z=8Hk?PH>M$!KYhQ|EB>1+FAt9W*Zd-{ua=^svhum{q2$nk8azCE5Wf^;sa~fS8N2u zM2U?@cj$x8>#dh6j9#!JyvFtQ|9`M)CBdj|e1Fh6W6+U6hHl%Yl}P!;0<vfhd~M+e_d&05<*%N^kqWp$7E}Xi%3Jf?Bws_4E)AIe8#2 zIw^I5Cm2Ni?$KNO1awB?i_gZgpu=-+fJ{jL1x<3L`#|!b!|}G5$})7j-gv$CMbr$e z=L>_&J5VA11=_tuS)FsjqnnlU8?3wo&u&1=JMf@OAZQe(+xGY}XoAoK4O#YrPUd{( z)A{K|_&P|M0L8aYcP?lN2zbE8wevkVJ+VWycfhoR#w$VR9d+J&Ap_M4Y6H1+mmY9! zeOpoO()s_z;;*0{3h1UYP-QR`RR4AJrhNrD(UO6`WeO;1p)LXi9qR%btN|wpNC}rV z!2{|I(D94a9^JMq5I2El4W>#8q}tl0OEJLu6dzi0*a3{FJa?0j{86f@AU!*4c?Xja?%Tr zZrj48;7~2O-C`U_W{}xP0^Jtvv#2vmVixWq_LG(aXz*!wV&L9?7CF7lEDM?+Du8 z4=I>pAe(wn7u*Jc#_3THlmV+Q@xc+NblmV@&MJhoJi?LHP$% zenSgIju+McL4CXmZIAA11;Yc)^&*TV+>pUKaQMFX4I1tMtrctj!RR4*p!tEwVNeVn zc?#Ni1mE8Pn*RbdDmh+&rUP0JRLFXCJ1c<9>23hU?nzZp8~^(aBomsRg3jXrxdn6$ z#Gl|73qdxu9w;evf#~t*JnYhWz{T*vN>Eq3)C8P{tJ%3|3Oz2 zls@(7F6IEO`Qw%YT@eHnR&{^{mh@BCzeAbP8Ngg=K zBG&M(e+G&qu)7@_|A5x;m8|yYW}WaE)}Wlu1uICFw1S#b;Cb*DJAQ+bL}kOv&GUc$ zfAMPq*7_A(-oolu4WDk^UGGqf7g%{);sQ!9Q(l7lcF$kz`3EZdS`So&fkfZE1?6v0 zajK76oZ2I`b-?M+qqp|Ti~HKL46irB`JJw3UaZjtm6K;)AAp7jc!1~i>K85(K+6k} z(`WOW2(&h_NAo}XdOy&y#h?vQt=~$Od^(RGbCF%Z@Iv$-sFQ)TLKb#nvPb8qoerS7 zxbq+AAadId(0ZB!uaCj%M~MALUL5I1wg1Io&{)_d(5;Q07do%M-0~I_H4yiKGd~}A z6slAlG;{sd^@Slf&$^j_fqgx!Zex9d9rrgS-`4?Nc3uqkt7YqON14!f1kTPPI zM=vW=GNg=v4vRy>2dqZ~VJ?`@jo^dI2aj&n+E!4SJy2=@O6$QMy|Pu`WWkGD!SfcN zsAHA`&s&5*6qY;(<@J+?Cm^>KLG>HRJdhcX{t0L{Mig{bx&nA}XLRQU$bsYFd6v@G zAal7DLFOLz=th~TF$JxnZeI=xc+gBu+fq;qtN9mq>2{B9))Os;pcQ^E*yTW53QA=` z_U;3%6$2HF(Xt@(SeLYbJyh}>bm87fP;cbeiw89_preODmqPKkfOc4eB7(m)5!7u1 zE#?BXWjx^JFMlg|yctvm^S9c9)bz5>ON54TE9mkeP~YdJHuRoc&|MF$VjyJ)Ux+n7 zsP8=F(fp&HAAG8jM>nes#66`NKE0}PUuEII0frKHPtc<2 z^Z$K1jX_2G(U<@KcNd5_T7EC#_2_1XROzfGMiX2*!G|2Wg0B4lZLbGc{D_%X2FK?A zjHR1jl)eNN$t7D}uW;%71#+>^%1JC#azg zE1zKb@kR2V|NmnO z@DH~2J_-N-|2O>aF#~*9{$VrF!WLT<(BMC4KC;(z;T`ZsgBLGeYyhwMd4aj+N3RQ| z`31di8Pq`Lc(G|Q#HpQ!Ut9+rjs)_LBFH~KpM(7)3i6LG$Um(IO2ADU@cH@Otd4I$ zYe!9s^g+G?t(l3a1Eo_|O^A3CT->1!(w+d7htTjv8H9Ubc;LmGuOQ1R6d=tf;ur5cCI&C|5qrX4$z2$O?YYf9K84n zlHUyvyq@twyc1Mef!hhN_y>(W2ZJsSLz~RJVR)eV8F;7I?b2$W-rN%&;5GN}Uu*_t z@y_EfZi9}W>CC<0*m(rhoCZxlb%3V-U=5Hu5Cb&1-k&!e)UmP6nr_J8nf&F2P!(*> zH54p?yjLO{sW|`{$AD)d9{yI)(O}w)Y$_24?KVS zdZ9-*Yu77SE9f#KtQ9n`hLPa~X9wDTfR~_&18BIz!v{Y8f!3&aq4fnEgKC&D7>Z@Q z!>2d(1}H8;MScNjT)y-8iy2=*ZKYI1JSw8bBWVAE0=SUNd;0(Xi^z6RII`|~3G)v# z+&|~4QHF!z_lfn2{$T*EwFF;N(D~b=*H)Afv`{_u1}NWw#$P;oP2V%fp^qZIIGe-> zUa|^W#tNSCIQ(K4=wfxyQ3JNIz~Z?M zEP@M>nVtn+(2_08xK}_uGM|e7e~|JIo=qxnt)sP_w2a05mV>0TJsw2omCN z*$7%HZ~3uA#RW7+1FD!`{Co5tv^GbkwEPbP#l6LznX=??V~FYMWA*FsD0#W`0WMfD@o9uCoKFe>5zhP1tWhe zXhz`0`%=(0&tsn5A}WRlJPy7RYkpMUdC{Z!SAD53!rn%Rkzjk9G3@1r*c$^;1hyBH zcc;9BSXwG)c);+aYwNcP4$u+|(BeGs*^>8P6oIPY2_B&KTB+cRlu|B+&VvVE$iKb} zj@K8(rCbcJ-%fau4RIs1&xr_s)H$~oOTK`z+VjrCFJ^uD|G)EK=MByi6-t(;OY}es zh`-h%Amjiy13@=u%RfYE3xL|ui1H2`_np6A zfQ#7H10}4W66i40b5p^~sG;)_9-ZGob%YCOR^0%p0o?)`FXe9sorCQGIv2Gaw4Mdj ziYVjyc8I-1zTp>7i95J}26cKM^%JNURQmecA@<{u*bt)PSi9@?DX(Od;;PlE=qJbGE@f%P~E@VA0a7k}NAHo*g| z9(1}mj^9SsQ& zgnCfpY~CkuU1Nl{n#ptmxKt4UO*ABbezBtnR^rNlB|xj0Ji1vK?}OVdTE9UB2Pn%g zD2237Ub-^~F+lSJ%s$Y5$iJZB^edoNfsf{EP)qZ_Q0sv@Sx_Nrd8=L&l(ZlT4yixt znH-`b;$eBqqw@m4|6wF0NalN3elJ!BHHtvy{{fl*U&u%Eu}AWW-r)b5hdeA#M?1#w z`y2v|hk=go`;TNk$bBA`-yug?fz1FfuK0%HUhuB(=1LL95(m(NpU!Wf0;CDFyaIIW za9uK7@PDvE^N;%SAkfKfEUuk4DsTsbhx0(=ah>O1ytoSr_0lci)m$wHDwILWuR0!Q z0Ui1R&QaiCfM|jG6WrE)y`lNUf8-uAqP+__ZYCHM6y~0wqvE42i+aP?AXcX2|m&D6(s9Ht&08sz@wXW+e2`aX8eRj>Dgj%Q*_=#0|w9TP!5k? z(@417#$rYW#QboGV<#l&!!+QT+oPK`1!N**^vt8z)B>)#q!=<@1P=e?$yF; zMOz;jFz|0+u>A;V$R@&=qEn%{utm*VfBR`>AvrN9?^z(qWG zxxFLka5qqe4xVLWF2$I~0*~H;&KpN=a_GaG9N=;oG{5wsTvC?d^%6M0)Ah~^7irKq z)1B9cUc9QsH68|av4u~!>e}0=E(Q;VfoEVr`(cnKANX59XRvv6+eY_*YP91)@9xt#Lx`UwU-2#ug*R zC-`_$P>~L+AG%phk>$bJ7TmrF1`l6(bpGaV1vk8US#1I!rE+OKXrvpI(dt0et?Mn& z6!MF_TmS$2SUxDt>JAX_=~bQm0o16y@6%nt;nSm`p~(beB%8GQL&-#{l? zefV7;y-0Zh8gw}P0(6n7Z|6(j&Ih0~ML~OaK@;thzR5B~8y*0igaFzwC~hqRZuOo& z2O1S*J#iD9%VI%8V&Jw?dI2aifa_OKe%JvzWDUu`VE=`JcMN-clVt#PH_^w8U$}tR znc9YS8G^192Tw7BR&#@cj^E=3s46u9jUR)SeczY}N);t4-L4lPBkjmTz>%O?3+O09 z?BNMM-MWf54Is0aZ9jLyR@hBE18PD%dr>(Z+RQ8kt;W9aB2q$@0W>)e_K!zz z?S&WVVzLac55M?O_47Z-e<1(70G)ya8b5e_1EtLXllN$TBjC|(+uCV}(uV-;7C-L# z0lf6G^?!+>M{no{k6zQ+Ut}3xFhaZ~>(TA{!SGV+0e+7|s6BZ0lZPi59(eugMS2w| z0fOBJv+qUof5>=7G^Tqzx>@%YfO6M?5{|>r^xSQ`sKAh+^?!vJ*f**-{{N5l=wzK* z08O_qLEA3i{iV*QFE)eB_vk$Sa@A$z^Kd}+zr2n*Kj6{)pQS_$w2`4#bov)r&>k$) z0z-zE2A}``5B2C~6}SUVKL_POEpH3ZDFRPlsN{i?5M(?!6m%z`?IDmf=wJ!R4Y@Cx zf*@V5S>O^6wtoj?zehK#FUZJN6#p6BF#!4R9oT=a*CGB>y<@pSyW!kzAnW8>U^wVFEIu+0Qp;fg4QmB znqe*fm>3v9jsNRR3=B3r{4IY$GTp2KAXB<6UJHQQcc4uX%faFmpz84j3wU?)RM3WP z169cOWy6!8)1iA!UGB;b8-b?FdQF2q$}+r|29*Qt zLl^yd61-3Q=0Q1z7ra_X_6tBHUV(Ic(L|D%4n8!=^fpN1HdF#;&1;CGpRbZ*c(ETQ z2P)t^dPVs`Hx%}o_JZ^+hRK2Y!5+P$%xA!^IQ&YM;l+0)h-EM{*&+75e=W=KA{(j? z?DTb@v4mdJD3F0cPzji(M-VxGkenG*4y-8>G;Gpq>H(6Fg-XCQI$K#R9euj%R>L(pzi&u%l&4tK}q@VAu~%4j`59j)N=6 z{%k|gBt@_3v-h$L`@tLiJ6VIWLCq7^ZV=VUY6GIWS*L=iPFA&SLxvX{kN^K~cxgW< z6g+xOx4f5Scrgzm1UVVNbQMUb8zRI8ZY7y600~tW|e@1bRa_95TOi^kmT|I|6`A{u4^)60G-4P*|!NvFMge% zh5_sRCPRjoprfWC?Rk&RPoToT+qNAf9yLn@DgMCa^>KC;&@nt90=Y1Tw|_zR;DL8= zf>-o$cy!lucyybdY%*kcp_2rfV_^o5==Km$ztC+5NENtMEY0=n zKS(vWUw!g0$o^0a^jd*J2#FJiSoCu=>2 zc;K*S=fQm!xfvLIdRaq485mytj{w~vdILOg0Ii4N`auV)L6oUnHDkWN1C$ z(aSnLl!3vA-}S`{yHZfLI{rfKE*FDu=L>XeI-kFo1GeJ+iz{*qoGA;=oqJ+*1It-4ZMac268cL?7ZF z!%HuGQ5}URlT2)%gs0ql+A^~k}x@;_+c)N~bC z5VRof#dL_s1h5F$W3B%|=ZC=qb(=mSP-lg~5*cV3E%q>Yt0{P!Qs?~_y6Zp@#M%e4 zzt?oV7_ ze)T`F@8^I8!G4|j55=#)ko>wX6g>f<_||@{6a(lGw$A%6OxA+75JKCRh_Xe(19U>u z_fuf6Y5R2hzVPV0@6*frG@gM0l)J#$_k}yinr_z@prQe^mEDDb;f3;bP;>713+ex2 z3?98OeX^i(v-23(6)z?*fd(HyqfMygg(J8u0vo@On}OlwitUK|wc+^@GG^WU2IYQ2 z=&nR?Dr)^!;^fiI20F@4%cJ?2z)H|@b|v~g-D*CasSm&>^C>xgJHiNA@9TN-&ucMI zc?R11!QbBsnwbEduMN7R=A_{zh?Dk#oCC_oV%ufFL&znD;LC=!J(_DDu#^=0wmzw| z^X?5%Vf5(reXvgp?AhZUouLmP9`28kVL)Btnt*gV0=T~d?$Euy1>Y~{(Oss1=a(Z8G>m=ZC1`ixi|AaGDNT6zf!F6i zHZVARJH}WN2Aa&f_}ioPc16UCZ7QHM0B*V(9ssX|*bk~;L5FecF|dG6D*;7~XXinm zUe>db3=EJo;2aD|YRISYf#%CQzrUym0QaR|FZSqWH8~IN+az9ujX-%PqD(A=o}2(G5g_C5pl|}O8F>mS|Nel3EBFN?!XX}=$aUS0cm{?S z!XUSFJA)Pj#-fc^f_h}2`Bm`V9RXgYqVS3uuk_ zi@HQUNVWteRM4`%&Z94GwMsLrU@Q^yxcI}v@OlUSA^z*XWAk4|kItK5 zr}IxaS>1mty4od!P7d|YYg+I{n0iEOf!ul8_d^Ur2#ho;~1kS^tTym&In!&U4?h3{d0dUY9 z_TYCr3~teb7ce%9fs)tZ7upGYpnJ`II$wgr26W@ZltTw!fI^4!5GZ7%{=(B6YBYb0 zW?*=s6978Sty;jNoBi7ng;E8NZg&BX)&q5{FAm9p%8(-xh`0dNryd7i@HaoGe|;Mk zp0_VT!t?S^go$KFti>hUHszN1&F8b{SX5;fP6Zi zV_b?J^oN0A7w9}MaNYf)cp0bygXG6f@bRu8o}FJjI?n~ah*%41?SjvEUh4pv>L?Kh z&rTnE(KGqi|7dW116pa8HUZoPd;Ws;|4(FL)cOgtef(_=$Og!aj7R6Om&+!xK=+Hm z%d;@g&TpXooX|;<7s2w7^d)_q5xj8Dv-74;=f?n-&R38eGr0m*vRe8|GkEl-K7h3X zp_9sx@zqfNZSDphy`oW|S(;wnowwycC$;=}B+IaZ$%EhZ)CxwAUQw2FvJ9Z}#CuuS zF9IF1<9flPn|0DLaO1@Az>5>nprQ<79^Ac<^{b#WYczbi)qT44z`Z!+#SEaOti7cN z(meU|&Vq;|Y5X|{`88b+ym-DE6dcDrx}7CFnkzUMN>xDf{V5*WkW(Q`WkJg|AUotB z$>HTy^WXnLMF8kp*cU6(K*M(s_ki;{Y{~{)xqA4HcYf8Lce{+vT#eNR_`^gZ(F{07qZ-3+9U zzYlb=wohj<2l%4V7Y9?J`)j~{g!GSk4}x-9NuozLtJiUG{JePe6x<3tT>@$a!cJCR z`bCoA#e-yUb8;tWTp!d8JM^OO3rbVaULDcwUF;2O_JZeiUo@YEWU=b6Vho@a;6A;q z4c|cH3Lc%uK=pg<%a1=8kmr9uvllPk9ss+~^TiaIU;n`c0CEH2$P3;d%%GkP$N)$K z;ZFc887p~9GeF8ZMX-=kYcIoJE(kq3BKXyKEzS&;V?(_dO=zQu)GBd8*n@9MKaV~(I9s< zAK~!ngc{+|c?{HF{rVr)YB>2F>Aq8V{sFg7U+mov4llzODbk?qejgGrN8r_GFYE3+ z28I`GUPxgBt`A>4J`D+%+n>SV;?v9e@XP=I(H@=09AiMH#J&vtju}6`5c?uue31g} z{XO#HjTETE{RkW;9-YS^L6ZIr982KB+3=)iC&)cMy{rm3pycwR(o>oNbdJA-XLpT? z0H`zma+%dH=y_Z(yrJ%LhP%rX&0RacVGR#(YX-Bu{$kcXa1e#PaFqJ>A2huN+S}e5 z$;S{3x{H(58ocB3V7KcN!;@eK`*c1Jc){u}%@7fVy6nl%qc`;fBqBl42q`~a%svGP z$H|{S;dl&Hi!?|Jq`YnZ3_6P-+VB!+E5x_23=A(6lYai6;PIWEfq{{sgdKFK7HEFA zyI#Sg6LgEBT`9LmuZuk+WW494a`bP|J!z17zC>ds1A{$7sii6d{0wbSsdrq!quc)F z2{A-}#-q7jfU#b%L>zP!_RDq4WT5rNOX0a7MGPJw`?~F4P66vd^v@i_eR^%}ix?Oj z(JB`3fPmXxP?&o3vVv}<^x=2?@j@j9)N=m_sa||Lf51{8D6l)+Q8NLgc!aEzfTw57 z{Pu7U$dVFWc+LP_>e|b?D;So!4A9I4&CkE!J_(5r=8v$d9VK7=`3TQfg&+o#K6Gd;KBHzBEzG%#Ej9Sv-H8Y!;Gb7-ws2UAS!@5VvtsXHmEVvdH)5MzYN1` z8QAy(e4QXy=@n1~G)Dwf+9FQ?OTl`z;Bo=9YV1TLsIoftdcuo;@hF`uQ2(*BT)+Wz z83e0G>$g(I!!M)FnUPB{cz8m}hq=4KVQBcmMI1-@aN37~;l(pojPl_ysNK+c{Kf9~ zpmdF1Zkm1u9oqt4-*wzw02ET7#V-8u(#UQBwKu`;0k@Yx>ndR5gKA4;7(Bq^eI?+{ zK081?>XYDh@oLbrGD7X4XNzI_OVRa%4*o+ruP)T%xVr#o91P^X{5T@r*M{4CZ0-Y( z*MJ%i@b+y5xP7}1lq9<4UWo4k#R7k;LoT>|Ymp5KJV^NgE;vDT+&xIqsq>K;+{5zi ze1Y8B?|lBk$wivM<2y6Bw6Fv(?rc870d8)f)OV|QGBWt|>Q3QcfHZr-1DMM=AOo1M zCxEtD!O9o#!BOBc25Jl_eZdWVxiRcFT*Xt|*x=G2Af18^@^8+RuMi0r`9?gfDY#6~Oj7i@1=!{+9aquy-XY=D9 z9=#R+J(^!IfiCF-ou<@$SiqyR6}75DAD>IgdW zuCsQ9;eXH0U!eTp(H*+Nqq}y2kLD$h&I=v~U)XyvUNF4maq))_;{^}?^~XKBYiD@$ zvK;Tc*nEh?quYeTqtk@j#qw9tJCHW8cK-F(A*w{Kd-PUtcyx1lG(Z30*?GaElf$dq zN9%`Ir;o;u?p}}^JT!lJY93%b(fr^?^AC<9vE~Oq3{Q5RYd*-~+s$L()5&9Qd9dg` zXtzsm6^Cc%4UkD5olIWcF4{l5I$gAWcywMM%_MM;fa-k9L;U?aSwP1X?=1lZ7^n$( z*r#(X=pq*1&ab|m*L*rd8$6D?P5||?d^)Fsny((6p&hT45c%JuJ9dRfx9bGY=3|T= znuk3t@A3El0QJGUT^E1?0d#;ucWH+w|N3J-y(-5+V-o*EH9C)dzvuYP)qs)T^%!V^ z6?6`5<(BTPAa@uZ=seVXfWxz!N5r#}N8IuQ$osJiJi1*Qd_ngUgOYIbqaPmp>koT$ z$IkH4yzbF!a@eDr&9n2fr{-_aq_0Q!T#zR`x?SXccy_wT{OE24g*D^x=I1|}|ARvL z`45CO!k(QxLY6;@-g|bld-T?E_;&t;gfbh{9M5hS`5zvgE^<(FJT(7#YJOxq*8J>8 z^FNSj&yY+L^nf|K*|mWYe8vnYT|xYY;WM9ZUy#pcAp6XRfBk76&FfyhCMSsU)eq#f z^S|>~^Knq%L40+b2ELlW2#a)Rg!l3PgRdX;?7RcMHubkhcW8%CH#p6>bb}L^Pd7Me zfg;k!@_{G6&k+wx*A@JIeT)nYKHaVjp#0<4%cJenxzz!5OI_zw(1t3X?x~=-^XWW* z$bBZqA@_K79&dim0=dAe^LXnqtX9z8G|%P(j2_*!4L+R@Js6L9XdVJxFXRgfdfyX1ng=`> ze|T6P~tAKo!QzQ=ql$o%dh#-TwLC zqnr8V%Af!LzX%Nb2|51})RP5W)ΞBM%{fW)C10cxi@5^KnLx&T54cIg}m)e`^i6 z%>bIT0Qb|<`14saCMht0)x?XtkEEm*5bXHiwUMc`OMVT9Ptxo6t7k;|T z;JJPVMuykR!TMjEzQW1i(Ft<*u@&s4lR&C_QLHTG1)Vts+F|{YUzeHTMOP@s`a+EM zTiPtp0L*x5Iwr>T2Gb~ zI($3M$ln5Lqf~@RfXrC+r5TMnIA+eFQo``z~lf@I-B9 zq(y(w^?M$@@l3DJBkDtlo47!30&NjxO#b;Fd^#blzX1+EP!6Ip%|=is zEx@<)qfamE&tzx^58Pj}0NE=R5ed4ptP0dD^Xbj_@7tROO82G8pi>y2{U%Uj3N*Cs zX?fI>-|r|$87Ni^8=finbUr9$@$7a}@andC@nR*r41;I47|6hrAOle~l%7W)3kByR zNMj9T{!7prRQUYai`ly%{msdbK;!4B58%C3P-^I9?RgCCZ-Ulw{(p)x+61b%QR9oh zy&H5sZs(QO|DZEg#lW$&57d2u#1Y?9P#hh8acnI(Fk5*NK^+R#sGw);d?0_?BsN)lU?BMMGD_4s2(GTlV`)6 z%=8g^_*R)=313mLlaa$0vL3nfH>e}o4(dpHc7F5hyyCbQlw(`}m!`cqxEkchl1x~X zgO>9^lF9Q&kWQpeFRM)qXf6dbSptq-(8SbFQ_yfswE{zFlxOo_mXe5QpU(H7K|jY> z!%L2F`x1E>7-C;K+kwZ2e7f~sM1UmHsBi1Q;M1Kg5be|X0t@8uKz)+8ndh8MML;DW>RxEp9`6~lf7P-*f)<=6jRpkUc252`#t3p0S#+5!R4C8MAr6mID7xr7=>JX^x?+fnvX0pHfQCETFHUpw!=_@~Ou;Bnj; zWD95w4Jf5Tg0Yu%aV!I98u-O(6Hs&(D}X!`UlhX?5T z&wkLcHJ;7291Q%e_Zb-&c7u99zP+geuR}onZ^-=0<(D!9vd1Jq&cG&uym7gPYWF$3foP%YxE3i8Z*P&f9)`tzWrhOVFNhU^xARQ#OQVh(1aMc-a;>*reZ1o5gD8B zKBRm)www{PFQe5p8eBfP2SSQer1A-&=hi)lo=MBWMe6K8Xp!2)1RfJQ0IKe9f-b9i z4o=!HZW)3Sw6lQWB~T6E(fmWjgWu&4ye7!*M9IK#_ru0;Agh(YrB($a0|R&q(bX5C z5C^wNGBPlLZcqR%E%5EOQSog4&%)mVx|`V%+!8YdX}S0xbhvvT=pMlrJxss;`}DGw znt{fWKu!hCC4e33)A=5@RQ83MA*hwWq5>Y;0iCAj*?H9S;9Gvj=BM@Glk!044th5K z|6juA336IXEhw0q-!p=)!3E{`IumGqFueU5e13;d=LZkiUEduqK)XC%ml%WAd4p!z zA9;dqC4PO+xAlL;Z;*i{2A&|pTK`vmeErJv_;FBLcnRucP5>$40xRJKDFK=AdNwGZ zHy_~uw^xxytzP(pnnRt(U%20bja@$km9g(3WvovxYuxSs|3T#}s2j8CE(3#acaDkx z__hPkkx&J?pmjONU+(*dxQ=j7J4$pR%3E;#U7iQ2yA?s#EGEW)mMnsrv#cJi2TE;0 zdGBm8D5ZkdTRHoHWg)EvpI%nwKuC;$@aP6j?Eg?H5drOOECHY74h}icN-$9A3?AMEi-0-- zkWu8+m!J^?KowkaGze* zjWu;>^t%wRDff#Z}t8E|6inG+UE?l&l+x@Bbt31Z)4iGb}`g{A-L?b z4rX9@@l6-Qf0x%o{CD~~%zqbep!&}di+#2*`=0#6;Xm#x|Np;e!?Z6MYF{+mzC<+p zF5W_&pWy(nZRs}m=&fO3e32Xinn~mvX$wY7ziR zg0|m-3Png7fw$kmbG@LI9MDcX`f@+eIW589!{XqxlCHe=B$&UFZE5T?N1Ye{$p(@KKR?3EH3unfC(KgLaIR zWP3FKRw+sSc9@aB^$qC8tlvB(;U3^!Tp->jegQuT56i>+Ez3azpPjeBG9CwC*?VYS z0PPHEe)PwK^Mc306U?C11_xe(T8psy(WCi?D1QsceGq#=E^$$j@Yn^KvteLhFi7*@ zuRGvjd4a!WCfM{t9tU69G(Tc*e#PAUi;=&L8{{GI3Ivc_z}IURfC_2Q=G0za$il;Y zpt&!{<1Q*XAX7a$V;{U=F_B^L>|_Bg%y@ycOyVubj^-l*psEGD-_oP=MjHS710ZMl zs7QER{PD?yU+X{`zuw8JBcJ)}ME^7>Fnr<{koBokU`XTFc#y^)@+gg8?@p0h8h^;e zG=9Cy<#W>b^{=GyYuo@ClB1&Vi9g~de=}%3)+hd$!=Lyg4u0Z~c#+00a@UbxFh)h< zC1{`x7CveGdXLMrU}lvmr11w_NaGJU*!+mG`2nNlA^z4?3=Bx?=RsZfPmcV8E-Df) z6+ojNo%dg8+~Q&Y*$s+e&`lShejUgM{9XURO%;uUY5XCqMhzez=&?4{DlqW3KLN|U zzYWrtqoM!~1OAAc6F%|Boc_cgapDty#LJhU@kwaC^y2Y5&^XTVm(Ab?5-3cZ1;8l- zd~7&8J)=hK2@lH)CAy$%1CS%N%n!7x^HYrigU4>rkP<9nTR;or()cwFz9@Ug39^Cp z97s*);g_KC9Z34|ICy~Bqxr!fkLD9hpxtO+Kuw&32be)7E&!>9%N>3R8sB+g?Tj*o z3C?e@wV{x;huvW)r_kImJkWZHzf~G^7ooFG>w!`opKfhX)4U|ur}KpeEYo;$l}wTt>DpZTIUa1MD_f|w58xh^yv^T=n|$Dh=?yt#FgR2!=;i8 zzMZuao}D*Ai)36mK=&uBf|khmbbj|d?kWK8(t`G{yl_(kHLvc!&_i-TX$WZPxxEKy z9BMc7jpM=88%nuS?X-mN2B@W?&!t2NqNd|DA z-m}vcyc8aCo{MK^C)#KA3y2CYUtKc7tK%?g zcvV37;PCS3Hudy{c(QRZ=!UgJFF{kr@bHI+CwRQ{FC+y*+9POdnQj;!c+m%$ZU^uG zalPqq~~p z#W|3B!Ku>s0wPsz~TS03{<*w-hc7qAcPNEm;7S44NCn34{vb#1?@Wk<#*`W?V!C*+QPs7gGa?Z zAlDUodxFyQ{TG|RAw10A3c4@Nr#Bgv`IAAJKhPT#*6&};TnJ9gMi4G2tiLY=<@6dA z36E}5WtcFFisx|`6%J6F6vP1M_7`Utf)`kVJ5``~0I!kp>1CZN&%nSx6+BeRzwLly zr;Cch3qvJHB9}yRS*brLDy+a!fwNG^(88X`LG2cB_#QzG-xUYI;R!mC0<`$@#S94l zfAep9g~$ymdbIXnrH%(HVN+#moOcL1QJ5M0?^z)>kG5&u%v8f{YwU zq6JOf`Sdynl(P7AJAgKI^?}aA^zYSq;M;lJxAVwr31~YA)TZ=oKEmN^`G&s*bbb$L z|LO}fVNfK2PXsKz>(i~e&J%PZr)k+XS#ZUuhVaim&@N5TrFn->g8DhEEuMzpt#+*k zN}l-in%?bJU;x*zp56A~NOwgx!$>E1OXk6r=M|UkaLLv4fD}Y92k4Qik z7(zSwhbO$aJr&fWD~*R-Q}v?eBPcFHAx3*Z7hHlC*?m6447zv9ry@{avG<~}B z1VH<#z%9ELUQl1-;$M$$*-P%ABNT3zYWno5rmU5P&L{2z?WYBeYJWZsj?Xn9Rh@@H zGe1v2BR_rKj0_Br-BsYxTgb+h?=QAAg5vE6sQFS--28wUJT%(^8ae{C*q}qs;E~$i z(*GdyFJJ%v-@CU&ml0GhAeu0YFZeq^gIOM(r5C^*xOxT#2Ke&8OnA$3-$h=~K>Ym| zuhk$Hqn_!u7ursS3A{f`4;&b+pyNtG1D5U5pn;yFFG1IXLGuOD zI>T;I`K)39QgY<=bf`RN;0e-BW#MlH-7gIa4M?l_MT8n`w1vNg_y7O@;N{~`eIV;B z3_N$KIcQNmWIY$;ygcZJ*3Qo_j=%c}TFebT z;pCo2=OJ)z0Bw!6I|Z65J@(?;B=Fc|zbgZ1e}*7D{0x11S+iUi7(f$)o$oe=pb$NP%`2&36Htzwz}7czyuY2Zonkx`JyM z=y(x$-|R~xP+J=*{lXG&0`inT=s3#%jQs6g;Ct6EgLl`p{^xI11@#g-T^GEN0blzQ zy1?VO>jqHgxYP9nXg=V$>k3f84^McaObiU)4zcsM{9#~VIPQ7|q!iRA^yu~N@#qbm z;n8{j6ThJA4v*ea_!SE;4)6;wc+7xI!k3tNG}oSBDAo7r&Yb{GEiH_o0p9M^8IYdF zW!P*AFX)DeRvqZQdp^CX3qZlm2^!;Q1&ti|c0Tm!W&I)nYFf{T1D{E5Hr^T(k~THD~~#`A7nyU_)N7=+Vvg@-ny#g7zm` zFY&j4Di+8=YoIZeDF^ts9q4pD!`}+(czog)a1wY4>OO%WDYrsQvrHFZIE3;{ZP5 z1X6x*@wXoT`~QEpZx1N`TThmV_;fzs2U^zff>YT zAptrK>}H1UP>3@wmGpXE{Nvx7qVoTB^Da<88Gd`Qzd(xN#V#X^^(>(NOQ>h(RmeFn z5T^SU~^>}FAc#3l=WE9f9k(0-taV6QRpw}ygq2>8IvxyoD&FF|V^;pq`Hdt(B+ z&b14YPr6w@P6k!}3?A0b9H7y9Q2qlq#li9*%S&JRwmvC&3L0vFoFUIzA^~?Y3x7-A z|NsAAJ^&{)22X1j6^_z}9^I_FCV<_;QhLRw6YQ2o0WpS`Z$O#qxdCLxF#aUU*-xNw z|I9D<3*4U%!DwiJmR~hjfu>z&gI5HCA|13<8?>T70u*1Zpdtud4ub9%+XYHQ`#`Y- zTH_BY0uAKBo322&QFb1G(ZmRj9nk2eh^hu?KX+?1sMLpzZbHV(K&huh%cGn1bwAiU zjHR;JQ_U8L`frEXOR_!SX$Eq*FlKDV!(tP35F|?74ywsO`-vgeG4Z#8A`2RV=M}ja zz=Mid>PuGe{0d9S8#aMR^Q+d*aq-_8f1 z1_{b4{r4~Ch=BUY(E^|$ef}2E(o;~^25AHwv;YirYZ9V51nm`sw?|rU^YmeFOxtc>3XpA z=+SG-H$fJ3{mLa)MuwLULCLB4w+er2DJ1=YJ2fveKzhLClSgmuh8OOK!C_ab@6qkM z!K2f62Q2bmZU^fEx5F7B1*Qmp>rPNDZ4Dl5IR0Yx9|#)a?)h_dc6{X!Ey#P84Dru38NLgN{>z2zTCp5&TD*q4faBfBY>{pehK|)&wF zKF$d8<_U;5L2Z1`ZeNAh=fP8etRAiZOAS3hEy)ca-!fhT71_O2j4$*oK<$XbFQr(Jq*&&8M@-d-UM(VzXFuYyImPxx4p>L0!?&Y zf1#`b>J)*;m1iXU{tw#10}lO{pw;AHyO}`;h9T_UWDc?W&2RMc?O^p4xX?oB8-uE> zkU6HAp9D2-FVR3~yAhmZXE*L2Hp}P6=>TH5=3vnFcED zAlaFvw9})T)vp8WQznSf(AsjL6cvbL6nFe~fW6eqxAj1Y zt7kWKK8&T*(xaR8OB>iDOr<(LoyS0F!CR7x0d(xRJ0#vf8J53g8K^;qXtFNx=)AcL zl<2{U0X&@Odg8@KQP7BS=m~I$9Dl*|TzZG=&x2NR~{ytE14Z5k{r?Xf9>`w3&3UD)r(oi(r(97T-$t)K~8U&}W&8(v?BrC(oAuMxDf?Iq~8pES_@ z>HICRpbGHmU(o$&9^I@T+rjDI)7q7z!~j&lH$RYnxd2>og2okDFT&(qR5(iPq2c** zJEZ>x3hmNUppZU_+&?IQnghzk{4EtA`(A_U>Za4Bx_6kK=q{}Xn5bFyI8`byBg`Vl$UD1!9@nBozr|+;PqWZ|G=|5L`B25 z^MMCwH|50_p!=dWA?t{mH^bJjy*E4wS-@s^ z$uZWam$h=s|NpTsKW_uA$OO+PctFenw<^Kq6?iTTyiwy%uur#uEugju zsEp!oc?!C*{o64{{#MZX6i_1KZ@mqwq~IM}R{j=ioeC+KXip3qJVt)Vj|eYPtfA=@h7l}9iWX`FgLb&B4kPv|%TXiyE*(r5t+0H<~#vqY|DTAeV_rwm!Qj7CU|tSIyQsLEAV)Q0i+&& z$px4Cdu*(@hDXnxjXo2=N&u%g7rTu#$y5s-p34UM&Gy@p2B#2CauZ!06HGEC5c!J|4((Nu}wa zMgZ8^kkEjf9|Agmt=_4`0CWtzQ|Np;U1u4%# zqpua0q#0hHNAPb%$S}O#{~}QqcD@ieJdn?KSO)5LHUD5Kfo)6_1v?zRK@d^Dfa^~T z{b?Zm;QfQ3Lo9!IvM_*_ZGt_8ZGRtFKXe}7qw^f-B!)A=otIz8{{sy=KkK{?8e86! z2r6(tftHPT9(%FGlZ63xE*EqT3EZB??jFzpIkcpgYIrm2bEi$M?AaTI6&*~`CCBcKj<{5 zGvEcD9=*N?z@sdnlcd1gbwH;6w|m`C#eoKFG2c zDht4Q7BsNZ>hk~p|CgZg7tp%5&NL2>-qHgw2OM}&1$Ka&!0VZy@j+02e=#4d_vJ)L zssfvL1tJDE4`kF!P`&n|PYP{-5otf8XXiQ46rf`#EOHe*I%`jObbd#V(F`lRHPM|XvUN3RER`cU8ir?wX}E+af#ng?oUMuOX!$DP58 zT3+{o+KauV7r=1@Dgs|zy9-GqFGb+>E@-@P9weSXmyE#e2d%G#ikpI(Dxmi1QbhRy zieCgY7wH#~!?+T%1c<){)Jg}hTtk6;_IY#{3%pqS78KN=Wt+YmAl~QzCA3c04KEI{ zfX?d5XN?L{VBi;Y=6Kx$F3+IuEDZx4wg4~rz+=D-w?Kx~ZU7Y`A-E0BWRYQbX#-0K zo%dgym<7_u{IVQWK7w2&j?laV#Z^0A=s;a{BoN}Nm!QipLHQfj85iMi1r53)^6&8% zJ3#T+>AJ(GH$lSVI|Fz#9g9zQf&{4BpX%6PqY_^NIEfe-Qdyb460IApoT`#O-QbK83^)LukDo@S%w#HCyOw=?tQUL1Y{`d z`(p4cQ^0Q6{hM-}D65xH&bNnD?_ZJI7yG~d2d!*t{>@mY4sBQHtOiX@et)sWUj}RY z!Xx=Ns3yF61ElOdD5id``uQI;%OeYJn(;(p*9Tg&_2Gmxx|xvnJ*52;ifDOso&z7# zCja&Se^9%V!L##di7Kei4{BX>uKM{O)NDqiRiyJ59Gm|z)_avGfE`mG0b3YUDi7KQ z3#yD>?|{S)=)Ttz(hRTfL+j~g(1zkU=;ng%8+@_CPln<3c8EG?dkJz|K=T_8k8U>w z&|)odkLDMkb6kpvwm1iA8g25}*J&>CbCp@~{1VAT^cyzl- zcywEMbh<8p>_X*lu>ut}(4DBw#~FQkZ8hfo|Np{xA1Fn=1D&3pyTP;bh~e!Q3ZNqg zLET4CBii`G&;PGuCU`*hzj|6;{ z%Lm=a`OBl%_Q_n(JOOB4Evf``s(R@LkLG_WB^ExN&zlc3zAyz3;kYjFN&f87EdV-N zVVaM1fk3T?N4J9l%>2>?;GP<&&SC%^#^cdhJK@FaNucPgo#1tx~w;JE7s z5C@_jvR|@x21`jG(7AW2RvpD@8mVV(eUX`Q}F37Lz$pCVR!%( zMV{a@*}?I&!=p1y0Tx&PK!rIXu3q%*0Y%b3m(KUDhW|Y}5Bv4%fJS^6UX*_P|KAX_ z+Zhy99q)erf9(XxFVOh%u)J7X0*Wh-Zk7{}5H4{A$$`Y0AJuzWUa58Q>Ne2;)!!?Y z{rnHQ5XPh1b%$s2d5H4Ttsd4M0=4>}2tgQ9y4%M(L7H+kzdQpt#6gB6FZ=ob z_09>Npu23nzzYSxzwloM4)qz86 zmL!3k8@UveLcznFitt(4qa|`!``Mt~s-BidOCNbQ*QiJ^l$wK7dBATt)jbR<1;FVr zSisZrYUw;s+r6{&#tUcA2FmWz8=z_)B;R@e1%n)TRrBjTNM#(7f50auKts)^J6Qm< z2jzv%dr)!q98|F^TmtGxfHy^#Xn-6JxgMkWLA|Ht(Gs<2pUw}M>nB0;`2rAyAaC3P z4S7}^0xeChmSFJgJXWFx8V*0U6H>RXU@zSPD!n&D&mTJXgoy!kv;b&d{qq+W>VN)6 zwgp~3dvuhirZux*(3;g{v z7#SG&TRt%|Fo0VPo&n$$&Y$}WgZ`Lte!zn2x%eeQhW)0um~xAUoI=MkUI55ArMJVA$i-0xjk8N94e=rJf4qqNEof-G%5B7t5N@XIqmCf>m7&EXSoCE<|9E_BV;0Z>Y}`3c%7 z{Rleg)^{5;s9sX+)17*Nzq9H;e62LtywWX*Su0llmV+Q~HUD5KU5PY`4w;3X4r=*M zLK;0UZT0A8J&_3x04Dxc&`2e8dQtihCumJ{FC+xs_;&t#$pkJ=L5tNG7(gBEm!MfJ zSpNdF|D_LHV7+t(HGDgdztC`%0iDO901iE9gtUTo()n~IEBJI4Yk(_6NPPpI?*rYg z{t`6D0G=Nd%mI&=gXi}Ypgw#Fx_%Loj*q{H*az8)2paMRO~sVn0(tK$@_e2cR3E6B z!QTSvSiYP99`FW@W2Z;0T&TYFP$~s%}S-bk;>U}1(ra3e| zz*<4u3J^0wC1JZj4QcSyjYsEw&t4xDffrZ4fzsJ056DIKYBxdYtiA}A!yzM-pzsE* zbJzl(Y+&VYnGJF}D3z^3n&1)#Pdm&24eU)uOl+05dvvoVr-K8UiN6)JT?%{x&ixnL zeu5HN-GsCWaR0V~u7?IM`r-T!x(@oDPv`R&@9r@%y!;92q(R~XR3M#j0tfHQIiU0g znx_FRu?Alt4o*K8Gr{QxJXWm$ar#Rya1w@=-x7O38<`HjjQRKfKiJ{7Kn}l(G+!bL z(FRF9px*RL&>AdH&~(XDk8alfG_apoN^d~@6ZT9LG`-sgo`46%AauCU0WzKku6#iK zInYQk_zs88%P&4XN2H%HaQXqAOA0R0%DurJL`px4L8EGj^aDEo#-p2+9pVl~{??_S zxk$@E}8qj^S%UOOmjppDACE)6cVOp!8F@ z7G`^Chezw}l4fu-?)eLiyG#r(i@`Af-m0<$9=fb0^`I~=orjc`q`^_r1B#M%L|Wo+ z1+63Y=w=m81&2KoWF0Xy{L{XJ(i4A2&Hw-ZU#fs6?BMlb=kXUa9KgZ(at$oK=zx@g z%mb&Fh3S~-1+)SU-tT;|6OvwXh)XY^ElV#?f=e4Wj#5y1iBAE$8IfMpo`BO!XC+7# zIK5m1cM+iJ1=Jr1gN$y07L9`zn0kQjm+h>*0ctDE*azCt#-ak<(gq*TN&xL$YCa<1 z()r$}^V^GwPyhc1H8?>XyBnYdWzBz8_*;@eijKRe2!LuvaIF}#f|0*v4JgXHS+^#G zUCPMc3d-l6mUrvL_h73 z{{R0UV?8vhVk$WOf$KW~sE?pqP#wVeZ z{m(Bzg)buCNj?JQI~^5xmIJLjT)|k91Ilgut)PAUphTGpPmiqpEudy6IPHSYu!Aid zfz>TK@S5UORy5ZP0p0@aknmF}~EN z^WiQ;#_PQQ;`}>MA^r;52vEETiU7z8FBZ_bBdDzbXgUU`e^6Zw;e#rZA1%=I4_fOB z3-4~$%y_U98Tng5oBTX2@AA(%09wlf?k9uSHG&pqzXUb@kmgsqSp}28`2k#i3qS%1 zx?95qbU@!xcF_Kgx1jwUp$xDbfl^_EmX*Ea2Tg`syFv=!dvRc=fD7Pvpg#7}d*A|i z{sFK$q#hh{{9{bvAP<>=@(2G;!eNcsk?R(+xU@5g@}{zFgS4m(iNw;-s^3Oc*~2WtAZypNK;OG-fX2dK1%r0-9l zU^vWPS__Ff$SNOD`xl&ci;=1UNcv6$rSBNz^zHA_&8ia%jxnZECusU^eh*6DmE6$u zg)4nxN%y@diQcF4;fw39k<-2AIZ*gjtVK=kPHPp` zITC1b38)GIH#pu!gPnp%?^|z!(|gBJkW$ESBq+uhAnj9FeSkh?iJso&w-HM3vUfo< z0Mt(J>7WK2JiS+*0mWD468L!`6%9z~-TF7S^bQ&S2TxN-cy!jj=)C@-=nklA0Z;V2 zfTR%6B&tWJ>x&oLUrIx-3&FVVqh>bB7BHmw5O5_5wt?e?7|3k!3^|4Y)~E(R%Ns22 zyL20;`^4ey18slvcAB}1N?(h!+nE^RV z1U-FBe-3jW#&t3=Gl_BEH_)OUu=_9!kVZ8C>^_Y6*#^=NUa#~bddC0%FW7!aLC+_^ zuD%Vd9&~-MN3Uq)Vo?A3*b7D`)MZZK@&=(FY5W>IY>F~+2de!HZz4Ldpd~f@E&ZT7 zDZd&1f3eL5+~WcrxYT*?MTZdR?8Dh6Q)BK|Og z9EE&Li!W$I8=RuSlPjRE1*jk24PExnUb+D^$*9uz^Z)B(p!VJI7b}dww!f?e4bO~w9Ng5^moki0UW*{|H2mAK(n#`4X_VEqmK1vB`)B;`E6@Z-CHdIS!ChC z?^+ESqkOTX7ju#m)D8oUS4bGiFuXnuX)l5JGgeD8yxtArgTosoe}EP-oanrcT=s(I zBo1E(Wf#z@de;*k&A(JYM~_u2I5hm{DX9i6+69H}|I!3dyZbnZH~|i2(4HeuqZ@pR zzruY`I5-QyA_CMJ0c|H`0dFTQjYTRt;QIri1MR72nHXMQ0JSf=p_`UON~eJQ_d>e~ zv}mGQ0KR$%G!;;$1BwB#O|wDc_0wK&f3fK6kN?o|VQ_dO${Un^2gtA2uR;9^@}~mG zH-|t37BBf)!7T!(Ed`YALZx!3UIL|?&SRkV-_$cq46iT0-~+h{(b$5`mxA2~N)PbS zKJa9&!!>YnX#UMu?@7tliZ;PipRJsYlKxW^Xmo>IK-`PzlYJsD{3d9ebUdl2!*@j~q?D8h;*K(61V z0or$VA9SRvz>CFpt1+Nv3}9y|Nme3envSi7CC)jhW~*paQ|wQn1RFJ z*8&#)rTSRIALODLdNK^JZ$iQo#Fqg1=Oi>{q$mIX4_auf0O}dN*!u~mdyxHWb_L|E zVgZn8r_>?SBcjM@O%E~tbpJ)f9FS^wARx8Iq5eh5|FHJSrOO~))sO{npc}`*M~i^l zC*lu5S93Wl{05DwO+5rDiuk7Mnipg1HmaNP;^8=02qK1v&)` za=$Fd=FY=5JSB#(q9Ov6X$%5I!AGN&N*NyTv~*EXC{c$sZb79oxE%~WjT*E$@!ku; zGXe}?Wu-SkqM$PoU(|LW-$M&7PoSG>L`vtpUW5n_w6!Gy&_=`FOE?3C=>g6_5kfxc z3*=PLdaBwN;BsBB#0H#_n9V>X$uUrPy|~^E&K>X}E$|=%q`myY8(g#%kQ~ntup@`n%YsyddEPng?!vQ2){!lvL$G>uZj` z;Lrwp@udW)e(o-o0IfB;0=g^{dh-42b%-Jvl*2NXfaZISzI*{1zwKsS=?7j#^*sx= z3-Jc{4giRKi10@QI>(E)3y@+5bn6W0KI3bWDEAqI%U5LeVNms*$6lOn1$h~sZ@}h* z#%Dq2xp{Pc2aoE*R(iUC_c&%CSKTKJ4}kAEKLXktbn(AOXKjN=>wo@^G-l8oCg_G8 zSI{9DcR@pHup{01JuHv&_p5`B_~~T^s-Lc4f3Pw3YX3YE}gGHw?{o~$A# zHT>q$8{6Q~3EtlN+8L6bq4DKud5pgov^~tD8!YVwTCxLL1`aAEJv#3>?f}{B)A=8K zPa0@Lc<_19HVN>h;JbaT%R!sLA!$|N^&wC`hj~sO>^Uzc(7F82nGl|;?RYT(bdDjC zr(XDbGBR`?^5|tXYy1BnbVw_BqDKJI8HdC-$O}HbtXI#0ZaW2?*M1YcgCCT}8!v;7 z1GxW!a{_35vUCPGph4?1J->tY%`x$}ZU;~Het&U24;06~D?lTd-E5#S&Q{PlaiGgu zJUWkoFAnhR1l{}&xk})e$Hjjy7QgucxvlWE61bd&Y`pidJXEXf+0AnWbm&s^AtsND zKRi2mj(CDiExiRc(ehBuT~Ly5%mWQ0fUN@`I|dDU@C^yyk!<4p_4B`L>)Vo8kft~M zzy7}tM&u8;UqJh)Knl3QrkZ(l`>yclJpTO{X!Rq1E2wMh*V8+y-)PcQ4PYS0<{u`iA47#PwffEqcF+v9hF zvSKuN34*!Wh{{R1l05<=< z4utscaU~A_-Kv84FQ^vPe}*TKJ=gLJ;kgKPkmn%zAMQWco$BBtSsXk6><0x8=u94t z7bo_EdYFenRY~k(fWI9yZVuXm!0Fj-29E3~&*SW%^6tex z7w|qbpI+80FaQ5)w6mLkm z0MWk!U&a02)$jl$K0)_2gJ$1BH!e&7E&A`g|6)cisCZ(230edXj&DQIqVyMmYEnq| znd9^SzMr7Qe_;PFqRju!F#jKU4fp@bm+1aKM~?puPl7M2hIxMS56}n|c)#w99PIvA zh5NtPRwY@M0aPuA`1Gnq)c^k<{9;oBXt9&*ZCB8e(nmW%S7d;W1no5~@&PGjei1ks zq`=yz6Drwj`Xf%3!KYXC#Wc|RR){P_U$1CLD`-)cskM(R!wU(Bl;KH_UeTCNu(+F- zEW-;1B=ITJ!Q!hx;x8tFEdocdN3SU72Cx)Mx-7$sv#3({)`O*frO7h9*aVdVJG@tv zxdSY9vRanm#dL@ilFKcm!|AGZ3<V2oZ;QY7wY( z>NUL;FU#wa)hfK9XC4>oNbNc=KH927;MlG>x!bRkH14~FnB zPg#Z+OCiEAyN}g@4Jrre=t7lx-4B-H1?kF1m11ZDO9g^-g+Qesc8iu)fTbKkQkJMv zR^?zRLy(jls?_{qu#^HwiWw>e&8{KK!BWo2vJ5X?^nrr_mj6LpSUh@7EkIIdAyVMb z*$8o-AxL~HL>#6?tQ2gTE=Xz?L<+1$uNEw>1`=1(K44NP$hWg^2rs#2Jyqr{;szJA%Yt_CmZ5 z4H>D`V5tKhvJ5ZIL8QP&J<0=%7beLvyx4{$-USg~P$$dqVqWj>|NB6VcaL7%kFl~0 zFLDdS81`|2I#0c}&tpO5I&0Sl1BMr&AaT$=EgrqLw;m*n__+5`32Akjc z1F!l}k6uxg9r_IWK<)xv+!Q(g+s9A=5zAMN)kou6#`V9L(?gXh1C#=2& zq#ooCka~4g^&ZEaKqoT&kA?alWd0Up_1_zq89*23+Dj`icytFS@C!15gA{tcFG&58 zZAk7p-ayd(A|UlJ_e>|Gz7sTm_!~4x?a^)jqGKVbkykC?(aHRx2EvvAt$%ru58)_y zbUI7CNP=)QK$rEt2!(JAJUX21~05390!k1XNwnl5RQjOr?bNgMG&Xc z*#k7<2%2mJkN-i!AJsiS7BGQtL;{Vz97Y=b1oiu{sXsxY`WYbgpnZy+%rAOCZ1Da( z(3QrJ^a?uT1$x~Q2Pk|pz-pKw?k2)L79jOd^L0RM0_Jmo)Iin$nGf?fVyZt}`&idNfyXF!E0YozsjhJ$ZDS^1e1;c-i0}30~je(QW$ml>x)c0tEjq zh@XJq9|iFP5Pa6x1`MFnHeaqeiL$`~GT#pyukSV01vv|CR|9AU%k(;EseG^m=qT5H zpurc9?g|c%&QQqxRWHI$!X}VGhxIUc@VgxL=*G6QDEAi1Y$Zy1{_N3fx^|O3188>< z@{l9Q{;k*W+JEf?n*FXg?0B=_%Bs*ED4vIDSEsKA=uJ#$@x8s|=vs(Ix&q-3c7v8;x8&x+OrT zo|YPc&)D?o%>~U*`hZTfcnR($gHNjP=#0Ja;`wpV82xe3wFNSL(hRR}fo3y=K&+D< z-K>Sy;Gv_^Fxb#g$63(O5Mq1*v^=KU^wkRkhL>~gB$0g#i4Tu%)3YGS20KW41Ep`! zN^j6b)SuB$v<7P66BtLfkGrZ){Ya778!0?jWR~$J+ zLFRctZK=+Sa3@Iy(0~p2;2hiOA+ik61H}$F#>T$9IZYU}*aDJ1UTA~V_S&X~ zfEu62K)MVMfCqYFUv8Kt% zBD?o_FsgesQQTV%Qrm00H5k*q3?TPLL*(lq@;KcK57=l^(D>dxP+j3_2+B^Aj6p@G zN3ZBX(0Qc2wo-pU!|x1+2Ts21w?NzO4qNZuZEEt=09?MuJmduzy!$TlFo4FHV_#|= zkw&@?50pN@@f+gV2|jaYwFx5wcxQEV=ONIA^U}>I1vXf1xM$~e$1tB>)4H|#44@(g zbni3tKuV9!(gPlyz9&G-W=Q~g@;kaWg=*I0h(5NKn#B4-)01jWsT`S;`S5MH6*K43F zd0rSEg$z4_&SjE-Y}5eX@e3N^i+wqnfd#Zb{YCUO&~?GbUpU)wK@a8!U3SoU_{FD< zKmWfz0gG?Q?A$ev&Qp+9ZneaV#{ZxpNTdoB)WU+Phi*Ldgr1($YudaTTvKwqn020k z!J{`=0(|N=yf+c8H8+x%N!wchS|Neu@vbiApUhe~SM-K3T&&-ej zv6n#D8ZT}~F*3XmyY%BfWWFZUqnowB1Y7~`^M_V|pi;Z#7^n_(U;xPnK;*X|%cnr) z;o%KlJCosLe405jEz0~0(1bhM>i`Q#3i@=pdtN2_9z2#?FVU3fYKN^y*Ix>UmDf?i?Pne zqw}0c@~;<+Q$f4q(RZm^i-OjtA-5$}KxOkuX#d-zvlh0kz4QjC&G3RtREFX8*%!%8pQ>%r)meAL78 zAb+dg{U84woB!6A=Xo4_$n4Si%;UH#===u;k6uS{P!3mR0By3@Jm%5-=!1vlml9Er z#y1QC3=AI4Jt{xIBPf<%N?$iV`p?h6;GucNqxDh=n@6*c$PWge-WnBtk6zampowqK z=I0+?2O!ELkIoZ5ovs}oy(VYDljR3r*z&i6FH7nC6mMbe-YBzy6d* zr|*OpqH*AIZ-P&^YlkQ31~B#3+jT17fex=;k)t4^JbUXoK&6=FK@WbX6CTYkIbP@= z|M4HZ+3MemBf_9yublyEV@BvQGk{vAC0?ip7MOYTrrrQIg}@C2)cMfP(hVNHr5ijt zYj=Qm$h;^5nb>*w_0|^|=YITup?ppXHlT6-#k7q~pe6`(d;w#;1vKsfjc-u;MjxL+ z=R@M#6S9~AyapUpzJV8gYG65l0yOpd)Q6M7v(p{ElrRExCQUN$9sI6N;LusA&U)Vke6*Ddj3@*Lp|2;du`X>ML>Sp-|u1XDc zK=Y=hqCTDPJd^*tD4O{5zh~#s*So;&Vvp|H6EFI&fUcW5;@bL+zvUWeuCenS$TJ=g zm7dLiSW0?8o3g(hX(%=GIQT-K`2jz8g8*o=Bxq;Nx^iX)k6zo87U0I(i+IqKR_E~- z;-R2h(!uQmQ2Rju)E0St3~Dd4N9Q5PHUVk=7SP>~-;Qwbw}SRMdGwmvE&z42?!TCN z0$z@3fLaMl7d)c)TyLj6C(1K?$>Vu)p|g2zD%R~dGIM&}{tNqWH7otC^qmIT}9(fI?Ex53MJ zYEE(Hd8?TY)~@=KK~1KKWO|8)Sth*2x{J!W7y1-LpKjJ zZh&GQa$1MB(IuLnvxAm~`EF&$o9YrI(WD-;QvUKJx4YpA6G$ zx_*&9gJb6z-_ElyK=r+6=W$TQm*>-I08ZWtPeeh500-!lKX;FAR{>B%!<$Wk!SlGg z1*pjM?aUAG>~weNc9n4C7jy?VM5Ngi7#us@BRo29fW$OFEls4H@6la)0F;|R>$yP% z%TlySFkkfHp9Jc368{`~h9>-1=DA|AgnDME`e?BFl5m7tO_18o<1Yd~3p03tPPYUF)d3IALmsUMDtJA1f#ym6 z|Nn3Ap?E0Tqt``<(J=(Qo zD6N=1f`#{sY;{J47iPzJL4D}gHz$DhroqdblFOjVg~x?>uAi?5^W*_;#GJBpP(NN9PaF31Fq_9?jkg zj9@207X(*EoBuGCviNq_ad>pw@?Qnzdr^+L`V9L(b0IJK(n0qiy#x(od3GKF9U=uf z-~H|X|N9(y!13;JoB`C0deORCiXjU$F5uC5-!a^yTlCHq0|r;ali*cbFRp`TySq&V zu7XN~SD*y08Y0O6YMnvSD5!@DI>HNl=q;ol_Jj#s0lKP#Tx9w!TaLk_80K(W4Ir@ z9txc2zz6$(@#r;en61wM8eB%{RDsSQYTpk^Jl}je-+Oi*e^CiKI~uf-_XkTUi)VK{ z$7e_WIu{iQP$TxVXSY499qZBhzofvUH*^DJBmvZ7c~QHamjRL=n;-lIXE@NEew7{< ze|vx%GYkw24j#SLj2?`KD@r_iL+lxSIzjfnU|9$n*+pJESq*9vBkpGfrAN>@+TPL) z;3oA8CeWz^ok#_N3Dn{fOfZW}+d*mj8mRmNm#$Wz(zW?F zOGydH>)fD}c=3mavmA^=(YgqEIsx@4&+pjUJH<3VUNyR z9v6RkSYD{(@aVkp`UuGXunN-w)P-X_RJjV=yM4*B``3R^`wYYbcdS+ZVR7o)x8%C7+x48gH|_!u0nJ*JODDj+d;vnmsj&EXvhp& zvScx2vAmf64YX7t6|}4st$~QrfA;KzT!7=zYsxxPp8;&&Y0zO{plhl@*M7a=+Y1`x zyyw&T-KV>P{f>wFg%7e!_FT&fipgJ*P zF(koxf^J*uOobdlg|eSOY&sKzXS1&YlSgyy28N0x$l0|uGM&c&nK^y)cK74yQQ+vWzS((-72&GUQ5UfhAU+Jn}(w`>QcELglBskQg%{NdGY^8ns^ zdy#(ww1WPSNAsim9?id4N+iHtOJ9#3 zohne<2fAwRC5W2_pPvS0+fLUVFIa-P7}EGdSap8NgYFLAk;bpbTJcSuphhN%(4g>kO2W7ewwja==*OX-V0TkJ~@(4C^q5cT-t50sic(8d5y7=rJ# zBQE~dUmKwK(?*WJ%vGRf0Qj;xkh6)4KbJsA{N;Q{#NUoDgyPR`H?H_w(hrG`IomPg z0~~+CFHz#J1gbs13EAS(uj2o$zpk-0~#gmHuXJazyR7+cN{dn zSm6n7tiFKdEX?&!oljqEo+Ql>>(O}}dl2A`|dLyhU=L_VsWbGzi$_~Qb>)4~Xj|v8 z7gs=sN<$iH{4L)>$*tQORt25_agnRQw?4h5#W(-|e^HkTstLY=K&Fk8aimm?6#zuXjT0Ti?!fNWIAF+xnzb)3ezhR2d$T z@ag=4Qs03N(SB(L-aH4c@4y@K{=c}|&&2Th6zD#R?lKO~ZaawAOA9@_>jYlRNcs66 zd`rV&Pw>Q{>xtLaX!Vn)<&oMDk8V@l6QI7PE2z2$-!2O-aCa;NWmxbg-Lrn600Zq& zDn06JohDE#@6m1g<2a~-a#MJHGHn8Mb;9c|sJ}p!H~9FbcP|X5{rvwj6?Do8BKg7l zN6_}9gh#h&<8cE9GK-W-$nu$3c7k@*B*ED~7@O#|w z=yj21MD6`lgPMh)79j(u&j@R8Zhf(C7O16i+ym6)^ab5Ny2S%*61bVp_@h$r#hMMj z{=eo&cmUFd?e%>C9x?zQrtA7(pDt+lq;aVZzwbN--EswyWB2F{7I-~(f=B25 z&eAt8Os#+Zhb|WBE`3w_2-MaFr#D!60gW$?7of{aAOmY9!l1T2WKkcY{sj%EfSO=8 zAVCh(51LN`_4|8GfAxaq;KBJDGCK=ixA=m26Q~acI$0Ie2m1;-`5AP|B#URaI|s}@ zpUw}U1r|sdWCCbLrt|)brJ!A4ortb->GfTp)w9qco#m5%{s)cF!21K>^@*URIUFyt z!8(tDI@!m-oopeG&SDAB{!XeCnVe$VbO0Z+^8wcMWFZVIpW?*xfBG%iu16%z~2ix-_jRUcD0@?W%2EHQ}FH9Ie_pR|C9rqAdmTUW=puX{4dc$1SQg} z5va-De zZE*st_2`V<0KRxgX{HoIckP?R*Eh{FR-*6?Ego z%Y~o@;G|9P^DsPmO_#KR+b5u^4?2eZX&t17&GhLu039M*lHh9i*0VQG;I$U0Ux28m zY&^P6a}R-rzi)VT+q?kvGr-l-#xtO8Sm3hzqOWzHK&`Mxx2ek^XxV)Q;@)VV&Ih3F zgPKMg6bJi)VOpy8}Pt&k!MIU#}yY!`@Y`CBG}D&KCb zBRN>XBe`0@@>gvTbi|<45mF4>T=3{NU3Aa@bhjHgocov=7z{7HI6fUT*oM3+%^5U& z1sMzhjfFcffQB1h?**OTSuFA5dnst}q#ATP4y0U$F8yLje{8O?P9Qx4ybhm&<^DhUdZN?y0)H#$5_peZCvlI?hoFfj==}FV$o%&i zZ1dk|Q0Ko(y*+weKr`Q<1xxpjyMmU-F?cjT_~6m$dgDbfsN6wWLkgO126Y@k0mcCB zm%j7^Hzh#f2bxNMz4pa#(1~50$M%Efj9=JIW@32pb3Iahg;^eb2?mE4N9+IkDE?N^ zHp>^`=|BI!Si}t;&TU-;4kKIR{h$_~=$U5dy7w2C0zsoI&p`JO90EuGaqv(rYJvXJ z=Mkt`?ZDvDTmRoT`MqDa$-5UP_#h^O&+UfXXTn9M?=m-eFqx) zmM?jP372815!pB@eS4nn)i(v3smxjeZ|G$Xg0{OKx0(1`oe~Z%p z|NkBLg7&3=caS%f8X(USJAm)I{QjaNk{L8hyjTh{OKh10x+(nli;rfE3=_aR&bu81 zUY~{J_ZQV`!2SlAU%Kig=%hNx3@`H=Nro4FsXza}1l@KGcP}jdVfC9wGHAJKm_)A! zW2c{jN2kppk8Zmc*M9&1-<+)g8{9)Qm*DL^P{D>&=YxupkFEL)FL+jgs{QBCR{cNF z&03x4^EJ|-CSU9SdS_U_0#sPR;_>waPS6xq-D9K~n%;{49*h?%#b3Nz1{v@Xg8Rp# z`8^|a+!fT;c+u1S^MADA0ay`;a4%AS4%9z_t_P}Z(PwxeAqDRr`K|;v+(07&sOy1D zR)Wiq5*+J+RB!+P|03ZwFXwah8M?{gF_p7jB&FC=)6t-7SQ(Y-fBjlUQ@MZeFl%@|1avoe}b+(>9ySo zIXdZu?j_J7G~0Q*3?PeZd_b#&Tu;1E^#v7H-#|0o;I8?94@hbCA_ihpi8pA%&8HL8 zO7Q69c(K&+=l|B*b^M^|Ymem1pazA~grEOk@NzLSK%4OrKArEtOW&Xac`p;^@G`uR zxe02(vA*R2m0zZ+ny?vemidtWF*t322PMH{$$vqqYSol$J$({1h3`9qa~ zfq}^p(j_f%^E~*T-?905J!oM|t1hS^+I(2RxAlL$6R3TGHfT5W3E=;COgh464#W`~P*}oiqN{egFRde+jx@7!ocX-R$5&S$U7< zUmX0cpi@9WtBE|2>j@@MhU^VJ;?Zl`d*}cEXE8H$yB=vhz~A!V-~a!9 z-6pR+o8L2mZe(b^0kQ>jY%h3@8dQI5eerPlkN?o}vDb7;gFa}zHl&;4+4&cGUQ_cM zju)0oKt=j{&`8xgVbHRoW1uBfEwjK8XAK$zFwUto=S9XR6UU;R0mTClZcyxP%7G#5FQ9F;l zIP&K|#4AG0+ALRVR2v9NKYdc9991br(gNATm{TYzwW`Gxq9eL>t8ZwW*g3@Pzv=@3! zOX`r)2YBWS)Xhhqig>}h2;4Dk+X}9cKub2Pxg{AqAOm})%%0tH9^I@G>|j}+UR{s7 zpz_h+1sfk|sR-|ENzhV}bI{=dE}zbq9=)dLgh7J0JbG=}RKP2_G*g8cKx;ohRZp*} z7$_-#vbj+qC^Sr&Ay&UQ%!RO*#j`t30Gw#=fMU0s+oSUYxKR6cRDr(*bndsu!I%8a z59>WU&x4CKHgGBi7i;`|pk=PGobJ(UY9}nm@Io{cS}=L`x+51%p!+^Oj=O?Ki#$7z z`}CULQ<4R(i}&b;luJ5t@N$W<3SKUOE?IkVFa%aEd34wA0A2Q3!Vf8%p5OTY|Ao>t zw1TP8Llm;&09vj!hM@8bLqGw7QgDIW^36vyP;(5Z+=iCNrTm}`K`&WA%RnIQk1(+-Llhl2dr#LoeC|RK-Yfpx7-Ak zgxw;CLFJQ2XDH|nDE`*-pfZXPlm^`wgK9C%@v2_ax7Fb8D#wc@^TGMGL6I!-{seDjc+mzm-^BxTr`%z%!Jwr`Vw*sFc?>VTNZkWE zU^bsM_nth1$8l%y>OP;&2mFH0;6;6I_vAr$hH8N9I{YHz0;mrM>iZ*|FWqaJ2(=RF zSar0Wlb};&f6s+@H5TU85YOa4pr!XhX`sP+a5XwyZo`G{WAEtSaOlLm1Ve+y(%6TGK^zXhB- zV6iN=0(!iyDmV~ezmMii$}MBN9V=nhw>iHKiNyqfG&blfsU<} zID0hzVl34K73t9)-3*}Re~A7|cYpwBEj*~cXDsCeb);Y4;+F?)P&*D9A-357N(c_{ z%YkAKzqol0oVZZp zwUFBmd^#1t=O4DeWME)$+ym<4f(|)z05u4Gx)s2Sqm9AiIG`%$Y5{0;u2c!>W~*B8 zF@@mi6EBbwAstX#<46_*ILN=d8lH3v@#q$PybiSR>ww|O7Y{*)cJ`*iR`x;G6M)3jqh^f>s+-b3>Os3>lJ^v8qqg2%xV%%H_X2VQRlSIMB`o8G^ebVrimMeJFW z+7r5d4zzd*IfGLGk_wwC5kx zF<{q~Wbo)MeE=HlVR-Sg0hH~KcbM>jM(4oE{zcB2|NmcXp9?RK!Tpy|pI+VMGSCVb z*gztvop_N8RJDP3&#*y!QW6Kt^r0Tj6%q`k+0d%$*-WrcOPoLR=W~Nr8DG5#DsVVF zx`PGy1syazIs-thA_tG-4j`{FcytChcytE`cytB?fZB1;0^r5D)8O*G{=YthN3Ut0 zG^~7|HWB1)*89J};+!%t@w$m9tNY;V0T2a0Xl#J>g&3%X4O(&snkPV7EeVUyUelCP zaCrhUOxeFriJ*|r}KMf=oJsp4VaD!KmUV{PgDTKy|qVo>5cBtE2ZaOuYIxn zB*??y_5|3!A)ta$z@xMD1$doW1gK|OV(ZcQ1A0>ne~T-q0odycJt+PnF9XAiqE65( z>S53fr3EN|KnAbi>xoPz|^BX-t2ld{X1e%is=_@_)?J#>uF5)&L z{+79*)Y8p*ZlwX}pfV1ASx`s6R2ebgwvQFm3+a6RB3M%lbc)TAl?EUsCC@!N?}I`f z)Ht}&0lHuFhybXW4PNLBb`&IhK;8Ix@S8ih_*)!7NgK3b|<8N0U8hT>9yrAg4AE%d^-O*hWaGG_vpM1YB5~_#h1j34O5}X5pr8P zwAP->$iU#*`j)>Bv=-?>`E5LIBFV?O2`5(Ni^c&dp<1cvYKmyeQ z9><*>K*h1gac9sjc!n1#Ul>5wE`qlLqqepo`P-*E+r#twQP5CXNwsIUD+6c_qGcN> zIlxoAXRoh-M{m@B&~|2@Uek#M`V1bem+I|bdm+LQQoY(h_B8*0(K`i{_#MDIh(Lpw zoIaiZ|6gc5P?GP_{F<>y5NcED3D8n2@cH`9pfw7Qd^(>SeuL&z(D=pE-=G`=ihszu ziOdXcdK>>5xry7VmQ(m@B%W->_lcZY$}d?|+qsF(%cukgJy z^a!|($S4h(bt^s59eMOc(^;Ee#s3Y5|=d3>)Pw2XVStAAbkc z-J)}H^%?eo+5jHi7BAw>LCsay6+Ybs3NM&Gf^ryts})$i>kQw{Iswm4H;xyce?be2 zj=ykJ1>Iy|`e+GgNlfhu(CHd{Dv}JK86W|+M923*wXfOhqE7I1iUm#zR6 zkEgUi(QGTc1hIg6dX7HB3nnvW2A}Q<1yD+a9FOW@dANk%19GD%%Qw&^QFRL4p;LT2 z^>=`ppoaf_JJUgZ7fFw9*9D;FL2m@di`#2O89X{;7l48TyqnCUyL7<|)d)}^x(k4c zEBKAykZV#wcdetQX;6B9;k+265$wET&WEQ9#Jiy<#^&e=+_TP&c{a{a* zxPn@nCHA0`5?;;(YXhANZ~Ac&Bmo#+dcmh8$?#GFR13lSb1$qXg67ZIUhe!0T2FTH z|Nj?}AmYd*P?Hzde+0D;(fYP83=g#augLJ|yjyI31FBPJ>R-K$+JCk63`0(1Xg`ZZ^emZF;Q{SvywJHI$?!rQ z>^N}#1C^&fy}YUE`V8P@MTVCQzd3>%dM^|I{D+P2g4_?8<$ZDbEhu-~2ek)%dU<`* z^%+jK9`NX8O-|QmfN1pLcRc|&>!tJ`lpYPpK2V;AH+-w#g0f+W0%++}ckBjkLqUTLp%=hseLRQ6 z$i_5%hJB!3-wSiF`;dD;QlL|Fz&#*X|GxA7i+~bNhS$9>R!#uTxv+9Ud}ICQEQrpupac=z zd}uk_`5j9~5)?lE9vA;tl=}3h*fYXYrB7$-gBP6wb>b)xNpa!iEXd%OW!%NXV zy}Vab^%)#v48O&`l>YVqKfgS~i{N7L{9%P6e2XJ&$HuG|;hn$!dv+dqJ@rLzKR9gO zeFS^M@(V0%SX)3{a`<>yCwP4=qVtGxJe2Bd1_qyA-gT)Ub4o9OBNCiU_kct?V=s8} zyBzfFJo@5HFw8qhcS?dbM@jg0zJ$a!_!wftZ=j=o{C@ub|KepIw)GI9$SDrPJyTzS z-4h40y%*U%IUo@v_t=o+o_#++F0k>%R7*Jygj>X?lQc{O!@gAv@8*{-13H}<()cB-`f z0jT-u*?f${)ACL!=;~IGt>pnf|NHdvG9-acssf*Z<=gqer}Lvv=YM!+g3O`){R%1_ zK=oELXddpJOXqV$L;U6cWN8Ly`RUWkdood<;q@lZZo3!DzjK1dYbr$K7(h#>x>?O$ zf`_XN54^Zjk3GI&6O&&-6O(^Hfh7Un1K(|XX_f&)>;F1#pKd$H<~NL<%|}67P1no< zwXgoYxU-ZQy4nJCfIq*>eV<<270LPxFPvY2TI04nvq9>9fsZ0}>^%13j}9|~M|bH7 zkIq{zpz`oIs4eDdc+$7?1++!x7?#EIBJ}`h{P*yS+Gh+5QIV|&O2sjEn?mCWJXHF% z4Zf~K2;55Hd2y%%)bMaoad>^?1=~*WkS=ohh`QO^usZv2D2o?$)^O@aa}? z{C0$qzr~W7fx+|QA5fa>h++p_Yhn*-Om>?VKn!^CK$>$~pw#4jLv{eV2kL7^+kc|qJ6FzzRQ0pAsd|3C2ygzoTd{q~7p zz;%NI=-7vKv78KP{2C`frhM|`*E*8MuYa(N^^*_3&O?x@9iS~@oQLHZKtueI2SD`u z17+1|{Q4*O+d!AIgVW0kcVkfNJahwSzznuOz`(=u5Pyp=s59Al!Qjuzj)0Q_NVerV0P4gr6=2y(kzZm)3QbAb} z$>Ib2t%t$+<@qOmLEjy&hEHBp8~p@X;=2PBCLW!KA%0B-y9hjg_|2p9K3KIUX!G3} znVoBOm>09&X z|9{VYps-5hz{pi9hy38o$P|G!Oo|gFcoYOR_yWPoTw_ zFgTq4d9_y`6cR_%`1S98;*UK1 zi9f=1L-Ev4`~tNrKJmx@NaNQy4zsFs>Wi8BpwY}@uUCTlWuO5ySZK8T2Ze^;@BjZ1 z<8z=?x#2|`M9a%lAU}ia1+X|cT3&eSb25OV!?W|)OGR*4Ixv7%A6@+I+xhOrECWyz z;J)X@e;%EOLA5_Poq530t%DEa5B`pPMg|7&-V%F8kIwtPjNe~8l>!wdZx~Cjzl=h0 zkH^7-%pT1T|9CW?Wb)`d2Oi%6`NQMlZ_kVWJum*{?*QFYw@UeXE$?yN?1(N|d6YT)itCrX6`Coqg_5c3_AIo3-z0X0Nncfm1kZVBG z`<~5j7+(ZQLDc&&zVdB-Qh)8`L6CZngNK+sK+|f?r#0@pVFLS}Y6;Qgj{KelFkIfyY zBq4g>?yv-@I(UHDqxr!fk7m$r`(rO>feyLseE*_X0;&9Lkbst-FU@{~MjrmZh^qm0 ze2#(dF9PMW7rBz4@!;>E`RzkHz;YnJmp*)XPKEqA5p$_v>~nDCe{CYDIdC5|#p?|b*#i?f`oa<- zvIr(}?1ef=r1`;b(2AAL2mDhHH$PzJ-*(%h`3Dn!OE$Q^J_4?f_;J?*ps|`4NwcM(yBel|I`q)>tDrNeTMzKJg70_h1nuO1 zA?XdW4ZIyt&XkkExAlLC2zcAc@fY*9LLCQ6r)X8YD#(M)M>IS-@9$$~U;rJ@4{Z;; zyl%n?YZrq?3}NL*>k`mCRLJm_>;#GGpC~i?`0W^DX%sjG6!^A&E6Mik zW`p>bt2ExDn>FRGJ_96bx-DMJ=a6D(Jy7EA+0Ev0@CC0&^9RP}2aKM_CMK5Zr}?w9oafSxM_Ie+{UzW}em z4tWO9uyp%BaQ)3|utT2VWfiz!MjY^D0ICrVcvxO2(FFBj4!%OJw?XSuJ$8e}mOvF3 zC_%PN2Tzir1T-_KmTf))T4e)E8Md0BlmTkLBHz2l-+F@q9DS^%+vOQvp9alubhB#S zK?=GQc2LmqxA1^AEOg%RIQYW;rODs_|3S@ZhL=*1Ay4o;4K(;!_*;uX)m0Cq-Un^P z1L^q#_9m$Q`Tk-87ia~>v6ltlG8tOGBNddOZT1I1_QCFM=HhSd0XGm>dv7DT?F1Xd zZ6I?%=Sv}?_T|Js|Np;;s0EF+Ld-`k@4yRDL7hE}g@!CQLEZjR4Yc&Q8`7@UKs{yx z9A2g;dq6#+_b)6Tfy>BE5H6^Lqz)080TBVMS`>wd)WJlKykLGL!Qk8Z+@txyZ%{*J z${|PaF>J0o_@^G=IMflkogdtWGd$_hT)Tt8aR;c3@#%cTKlLDVOQTXSCn#05di@9O zI{C*^q5|%YfEqyI8^Og$i56(}ikBg1p85U@Cqrq5*WlF@77!7i&Sx*?8i0$t*DpLe zV-JAx7C(5!EhvBSw;X0hEqmXC`QH)Q0KBbrRTjwn;~>-CgEpskx*qW8Jm%8*p!oq~ zhwC=})}@RLphAwn#R9DV0lX~V1S*%oM>)U>RgmMOz~&tTE#C+C2E!n|KmL|@P}$Il zXhb%H3PhOBecGUIXXpJF(pjL(K#zk%jlVU6iGiV^b{hkKt3D%$wVi>#B^pH^s4oU; z9Ko{k?5VJ<{Im<6mBFV#`t+6_n6RrGY|lMVm*;^DCv+@;zvT!h-FDu8aYtX8!KX9z zz_-JUr4gX%`84F7Y$qs(BAsIaa`cPLOi%zGe!T=ycJuMKGJ{qxs(^by-#t3-y)d=` z#nkbaQ$YD1WW=)<5A;AnhhJuZrr=v|mn?<%-ndHcfCl^dTO>dhg68Er!N+Gjd+}x~ zWJ=uxq^I-#i#d9rzQysEXTUZ+e^KKCGV|EWT97r}tfDuN@?8KkB;V}^t9<|}6F|ip zXaOfEY{2bMaQHyia~+UIgwGOCKJL8#Vvimoe6&H~V}=Nyk|?kvKZ55bz!CbwHvIq&f68K89t7m@sXALQQ>Nzej<(w$Jn3{bysM|_1A?{iWZf8D!@pL*UnvcEQ_UHe9U(nRG3s@(# ztmfixSqAa|Xw8KzM578=BRHkq+y>Hn{G}E`Xc{=!kG~WL3q60KW(*3(V=u#@u^MIo zNkwg7TM+JRodQzO&3f)CQZnLXge0R1sA8n5`Q;jLIQ|F4i<2e9Ok1!Q{`0qh_8h>6 z2e?XZfMXoGWMmIGNrLrBZG%J!E2t{)EeBm=3KqYl12GTOSw!@wkn0D?LPzjo9*xf0 zJ)nI=pi_6dO|Q3Mwv3(cfCjBVsiGfLM|7L+Y6DdV-@)ZSNUqy-21EojKqh)ef&n!2 z;|V%MmXW{pDrouRVRrr&8&C#CD%5;HqcZS94OGB_%5b+-P_6-Q)at(dA2c@tI{9fM zs3_`YExdvhxNH7Pf@=lPNEISQp%-%7Ccp|go;G+P2TqvXzIzS;f;qU=|NsC0pj}3wgD1g_m?%&-M5^sUb(u#u z>-@_|KDzY}?4uSvP(9bpqJorMURO*24GFfK2IT^z91GfE4N4vSEq_6EM)MDT{?_Fn zHK0P^--{ocAqhMVY&(kgKrL&~p+qR-Xc>y2HM5ZRgij}|+-toEPIIZCedmn)t*gQL z`zSkqOCmTwBSs*9GBGefPAr1OE2t%2oD3@2z||b2fM^3704g9RfDJ&5aIOINRFDb? zaJ6BS3@#wx?PycQ7H|T5vGS$_tXgVqWn^IJ4&BpwiNEC$*wp7BA2PgHssYLjN1AK* zF!HxP0|gRj;HX;yT;o1~)VR>`)=%IRdjG{G22fAo8F&lx;TKE9VP$&>vrp$^kiM4p zpwZFJd!85nfr^}tgPP6t_$T7jq7v z`#eF3hE)Tk3e-me<)?Hm(CEWE#?pr`bD`=$yO3Izf%-Syt_;xP5VX%9lp#AnE(S+> zD>#b4eZ0$)K#_jzWjDA%3Of1`6brq!ASWPVp#{_|2bJP2>YxBR{u0!M0*z;Y#+F;k z!S=Dkth)|LW8n2&VC%xc*8P9cz7A3ZrGxE)jIV(De*a(WT@I}rKvF)Pxd$L|4_@Q^ z4HWmEz{~RxaW4gqHKe!)6$vlQ5}|R=(CxYh)V(wY+vLK);M@72{!7x8pJ5jqOuoJh2VjZ=JVizkUO9)K;59}^h>D> z4BfSRAdL%9Yx;%3deF{O)`^$FDtBFh4VkP+1x+qP@;khK2!)T8a5O&$FXg{oDg+7= zt8UcuqLI%_z7IO@_LgVoSI|H~uc^JOKEn&ET=>+DGAL-gj&L$~9(PdzUm@q&2|i;R zbeti$3k3!yL#Cb|5%if$olb;iAs~UV;x=7arzn_{|aK*lyb^^#%++ zy~zSEiiJRHo$i6MFJg7R$8iU+wJ*S7-+A=4Hhh2Cv0BjibhZtkGUWm2w7(Y{Z@|(@ zsU_&#Kj`r?XML=T!RHv63N(Ng#yBgyzJRC?qJ27FK(;YL_E$vvbiRl3Uq09Z+i%kO z)T8;00`h#+55ofw0{G!g32TY4k7^EY^y9!E3@wWITF9Uw~J5fV+Ax^pklRKOH87&=3b z_;g#m*mMmR{UuR8-L}egpoAs5#tk&ycFCvnKX}UX1&;vu1YY0H2attcpy^JeiOz1{ zBOcwMCtj2;2A`0LJRk&F$Li5-s#psiY<%H(jg!HrSJVp>%;3?ql4%~@yvksQvFg-< z66PhJ&d?2Di#@t6JwWIB_3(p}Ipio`Xks@!33UPJa88fz&>b(nEdt#+1fH;oh;Duu+ zJvxuQY}y5yzj<-{GH5;7@fVkWgVz0lr43Jl6!`SA?q3JmvhvacY&KeaLGEw@MVe

BT{}(TEp|+)hY->KE0X`!8VdpK- z$^?(jV~~;xw1D{vIN(9`V(ku(Uei*0eTEkW>7bJQD7YmHnhpjX{|P$svF?RgCNG1l z;Wy9;s-C^>p!4Gnyfy*%kCDq)-%ilFS=R%g($%Ni^@LC7!_Hga)fAxO^+n=RY0x$C z-;OAho&=wzDh$#9KKT=LSO>)ap#6`a1}h>W4!_8l0h;rG$ivGoP?Z2#vIm~$2Tjs? zc7FBjyz+wc7&t~;!DUM8?Gi4}?pg-WcG1!#!%N_spTNfuzEJ!NI+F^tEaSOHuj%92 z|NlpOfbP@+Eren{2eQ(If#HSpB}n`U|AK9%ehCWB=a3uHe0o{AuKfQG($WM@FE6UU zfm;Tzr$7_(i&@JhvE1hcO+VoB@kRJiu#1&Jhqys%)~7T6|9{Z{+C|9{+xg-LxRVOrngdS1q44V>x=oK%fC?kf zS-`Ca>bN|*4Vzyug6^_&H9XLH=*2#e&d$RxjvWCx2-F?`m1xN4Eqe5tb~=LVi5HHk zpyUF+8%P4YW<%%&UpjQn24sFe_V5dz=_t!1A?|_PCjly+IbKAAttv4$yabLfr1)w4 z4Z2DcoMSwCO`T``|9{e>^U%wzGsyFYFRCv<;-~lrX8y{*1kPVCz>D?K(ht`1q4|x3 zPp2=aratk)33S6nx2<(KVjXb5gFZv&;TJzRA!}fKJAe9iet;IrE}btyJK&Ck5BUks zVtJ7?7qsFj^ngdVX?{5<(7|U}uK5NUTnz=Cdm9KAz5ik+LB=%t zCGh-(~05>;KXkk6tH6&{SSo5omjsXXj1d z&JRAFFS8h3IxoHWPYF?ui_tBCXf&2b-h1y4=88eaO$U+202 zwD$L$N9Xr6{+tt_Ntt8(n!XEOf;N(a+|_yg#SHNFqeCw*ftrh*-#t1*XS`?uiFJq0 z@aR1DdOBEL=!_Tralih1Km}*LIG6(Nn7ld!YB4?X=rv_}0;{3TB4O))!123}9ULaM zUmnXq4$<)GwM{uC!vH$M+4R+~|NlYNoKLT+|L_0*L9-bs%S%B!A<90BGWc}szCR4M z%BPq2&wUvNpU!iTo7_7OgG%@pg#y3-`}DF-e=NfQ;`?+y^65MVR`DWC0CXig>-uA$ zmV|8`$Qj)RFCP5-_1~vkcO}RJ-Kw*Wf{L}{p53JkpkB+1ORT^Ddv@EXc=Vd4xBUPA zLg=t0_-Grji5|V8iw=XDe5Mob$S}P4#t%^oyTAU}F|gd@6EX}hZo%aKgO9iP=g}*w ze(L}K7l)wY;LG5jg67zJO{d+LVR*3;D&f=l32L6{I*|B8evtn}fBpCmb{E(kKAo39 zM=m^(VR%u5sjUVSO1-Aj?#VE`2!=|7ty2Rn&+9d9cqGH{!U|a;7a~y%l2AmJP=WX; z<(4eN3l3z7-3P&5^#$p8&xaZe@%zDYW+1uCP&u&uX%K6a*<=}B>_V2{?FQ>8IW5ER zVj)}tG(*%Y`VbUqJy1bt$cXlQ0&8$uC(H1n04!I_01g?CUeN;(xm^!r7+!>c<-oDI z=AjIOPjBi0kIr8&a)15$@6#(g?;#}3fEudzJbFdNmV>HOR{kPTpFnr&Lm7q_!hE14 zWc#NObX0<9-9s5rmnj=0qbUlOc?6Lu0h!+U?u9T!^bAC_2%H(4| zhsYQ}WFjDXTtPCi5E(IuOdv$Y4kY6Yk@-^q_CLrNk6u$#kc=io<`G235u!&AB*PDp zIRTL|hsdaaWWEZ6!(bgm2Bg@d*HjuLa~mQv1tOyj(IWwpIS7%dg2*UAWcWcc%ONre z5E*%h3=c@AR~VdUj(z?AACfA%ZLJDG)z~GUUeVtVK!wP)7dLo*|KA6`g0I(hCMc(| zzX!D?j=zxq06GckA-Giq>i%`x{>=x~=OnLZoPkT{T)R8`}gST&%)G) zfYgHy`ts0oP_BK0O=8f zxa|N)&wQw!?HGEd!t}_1^g!)d4APSg)zgfjClRLSg^x6J{HWKq38cpys>dHgk1kBl z7LXpOJ@Ftt%uqej7_B?Xzk!6o^S9_>a1^G;2c!pdw~t4!trSSl zY^a{i74ExZ7D&%&sGi4fz+vFgc@L6(x@`|a^?3Bkx?TML|AnKs zG=oRC?W!CDc!|Ak8n`sKxhli(Vi5-@>+%ZS0JRxzd34)0=72ITq|SfQ0+wZ6bsHv| z43>q|_a42nA)xb4;yJ*jj7JXWR2Pq4(fhN&#!G?R=?sz6fyi~<^5`{Pd0U3zg*HT7 z1W9}$$dX>!h3EeNf58Kh{+bOo60B_+NZS{7uvK@F#3w_vae=g5g-Gv1lI{m-+Y1q2 zh9uqv5?=}t??V!AhZx7b@c;i8Z4l{vh;*;08>pw)Yg!J{ngx*yhRK~e1NL+gNX`!; zXP#}q0INWyA<}6eX?=*a1d?fAnEB4=?0kA=_kNi|9=q!(dwE7O0TydbwICa{xunf7mg4qEmWx} zkdzukiXTH{k{0B)j6>4K!LLZtR(LOtJl9PERVTQUqUc0%M9 z!Q?z4a`V5*Fua%xk!#CD1bG*vCFTXvTF3hP|9()Z^&%ynnE_UZT?Jb6 zK(cViOHl^!RGCMw?Ln~o;TH-}Ig6K|gRpF8W`Ml}Ix!(Fl^IdH{d^8FLJ(vGv?bpM zHR3K*?kmWsZrd<~5y~JVpp{C-4HeY0>2MEC1sMYhD34xSE|4)QP^F;o*~bPk z=I?b-VRHBd2UHFmKHavB2xI&}#y~xF?Ya!Zi@VPtVe|Dl!c!-q#vFvo-2@reZEJ-v zh8<)K)HO>$#!Q1MT?aA->YC|LW2&HXlOV=?PJ?^uKr%DKK4^Je05ZlOsx%#B3>U;x z$xvgAp>p03W7Z&ysRS7Vb&Uha7!IgX1&}dN*BC>MdGi$FVHSunsR(0?K*m680v?bt z2cb%DJ`-iw#{zN9|7(ySUJ8}l3$m))Rt{mz>m+7)1Lhhi>r_FNP68PNbz42 zGKewPQ{iE=1Y``fZe9d3#u%#98)OVE5TJ4Evxlr2#dj6Dqe5Vhj_) znDdFu@P-X5$e1{&(lU@SP}lsp3JGE-s9Y4pnB6Jxu;~C919i=LP*p1qRjLm%2I`ta zP-A{ShIm*QVoV9b7)OvX(6E^gGUftQ>5C_b2%iKsW(!pA49Kc(TU~@PzY>^1(;|6S zWgv;!r}O%YHmK@(Ad{dDiiDb!1(j=pnDjUq?yn6Apm90di^&EIFOGmFrn_yAg4hhdPX~RRHgCUQ5 zbh9qo2pS`>c)`X1D(Pj@x9T(abgM>e18FzCdj-^q6jAZ$wtgY{26PbfagR<`Ymoc8 zSzR{iGk_Lx*L(#Hq1dW|M0-vDmHhwzV&^8%G>5HFGNOz(gLH#U&d4ylnDrm5<8u~Xn{$u=#K`l^rJ&E3@`rt1G~-_ zBn_?fe?oNogIsqPBCQ8A`ELza>ygVc3@;A;Lw4RykkGwXVCS_L!<_dv(SYH_jE&#` zdYA}u9%wCIuV`uwXnY)OxHYs=7ZrR8HoFpJ&{q~v1cAI=bQzQ#e!Xah82zURW^@B4XbwbZ8A!+i zBGd^HY6l6af`vfg<#7oTUcoQHQ8A|w7G6OK1`IEFH-MwUEdh~MyPCnS>^LdI@Z#Mc zaDb?Tq@m%}T@RMNu~mlQ#d(M{2iSvqgGo1tFFD6*Jp%g>`ZUgfVFf#AL>IKchaI$F2{gpq!VB7?!N}kGl#zkKhKC=__vmJ| z+W;y(EMALD08P%dZU>EQce4tB%M=TbUQ?kvpfXK%{-Xc?UqpdjXWJYH3QUh)(OaO* z)N6YCoGil&zu(~aNr%augUGRfoNfe>^M=V?g2)Afl7|>XP9G+>3?et-unfbCU%$X+ z3dbRmMEDVKh)8acVR&&HBK;*6Asqoa{Iu7U0VKT#B7HR$>e@9cz*>tz*=qqrZf7jG zgok!mOfP_#|M^Xj7^_aK0mBPpHG%{K;# zn}NikjXv?yU~_Iq8!)_(1BpZ3dH4WWd^bp(4J6JD@mD>>J+ndL?{0}Q?7zqjnsH=p z0tx&DDTG?sxe07Q5=i{$El8{BE|UDF-7*X>)<7kW+!h60SI4RoZNTvI`ZLgMGdMjo z{s&#WSuX6+D|&E_JVWPyk7Slz9*h_4{y#80aM+`lRr#C@1Bl*p0Yd*d520b64VE1>i$sJeA$Am)}q`6*DE z14_q1)h9q{E+{PtHMbh7t`KV9U8s4xp|mMf+#E{FKxuxc{GZbh`-PxY~+?j_W`*-&@pK>1Zr zx(g~U097vw)!zY?UkjE03FWIo`87~=6QSahq5KvoJr_#ffXXXC`Q1?30BVi`loo)} zkD%_j3|05(6eN7lLuods{7ERi6l%UHl>ZlM&O0c57fRoQ>Q9C8uR_(cKxrwMeNg^X zC@l`9FF^HAf~va>;58|i6&l?BLx9$L)2M0apAH?_Q{BRg~eSk;j4-|f=2WWxFbq~;8Ajdp9pT1zf zCc$8M0JLBbd>@HNw`pyJ0mI7)Yb0QNTM)ki!OsQp3!wacf_w}NFO$|tFhI_O_2^}N z3mVbsHhAd^5=6KbD&K9oHOzqFr2$lbC}^!D=maF_x-E}hQ?HdW4A3Pr94}_D3o{rV z@aQ%52N&`8U$nCeGk7-t`CpRg(QCR3B4~KvMFG1o187Y~=Y6p1m#1YJUc|5qgVtnw z^qO9JC(Gc`E6N?jz+iabg$qc$`3MK-xX%Ni`znmj$TEPIOU1s_WETb<4g*;~;@BJd z*Q3`|7j6kRyD-D+wea&;LE#NPhK`Y!f#GGGi8KS!@wm|Skzn~oko>=RDJ=4#`y6>e zRm@Y+TsX%I$<-1JphYH~hhOlm1|3RM$^~B}3A)eF1GHT7rSfXf$sUmS=`ELdIr%Rm z=v;l2v&iC4fsDQX;`mw6f?#lc19C4&4QK`)d_7_F8;;ihbt;|zJvu-8^y>VBug5nA z-5Ubh(3UAB%HU)9y7Ud`q+y><$N{$CBUO>lX9)%GO$4o711$*w-=r?fzYNrJF@9mb z7Q7avq{zooyCl@3+f*(LG-&($h2AQVR}X{Mp_k-(ber;l#oxa$dm+I9I#^cH!}4&6 z3dmmQO%F%0AH*FUPuN~28ln9ZqtpS5X%Zh!GYQE zdOc`;L$~S7P*5Ax@Dj+6ON~Ig84g44hC)xT;P3*UKLcKq3k^08__Pl#wB4EDi(H$Jc)$YHF%Gh{#|3mtoJViz0-s*j z4Lg|_K+7EKSQ)|o_|GrK`ai^gfnU>g!Hai4KyC3*&`KDU5+2aWf*{XWTmr4d3Ekn* z{7a>z#{+uKq0%J@hL_dgrH3vI3@*Lp|2u2vID(z&nS9KnTjtmc`$eE7=5tyPluCdW z*|pgJM{LqR+#m@`U!WD^GrU0edmVQL?aPw-|Np;B=l9p=Uo3J$UcZcf4BHP-0F_9- z_#*|H1PTSMe-=^IU|?V`xx$Pb3bN8ER8@v-6pw)mKIfna>BUw}J4jO*d?!QqK5K7<^R z;{&u_+A$P-3O*>0LN6X}{aI&$-9%~ zi%V}6qf4jjnHS6FgWcxR33A*jaj@fF2ZBQX6(~J=oR?s5>2^Ki3R)Z%0ZOyrA^UFA z_CQci^8O3;^Ps(MMjgqi-n^APw9AJF5A; z?%Mg+vH3mYOH*(TVsPxd{xaeJ|NkX&AZM5OyBZ#VTx9ps33OKoync2BZ)^Zxw**>N zECSZ;0u2%*$(O(W{r?ZSsV=fslEJm}?@Q1wGf4jqv@aqQv^?$#!Er2O^-x6U2WY`IpDfF~QEG0J#@@^tNM&M{no_ z&@JMf??Cmmgh#h6zd!1}O3?it+#$lC^_Arw-K+xhLCe>kfv&>nX8k-LR2N#jczqQ# zKID4Aqw~09^Iz_gI>+X}#U&Zuy&<}c9=)d7ps|Vc%isdzf=9RQ8b46Pyn7K60lFK> z^#bbcA0eP22xyH53n$i2uuY*CKv&jwTfC6EEWrS}?ik`fk4{!aKLdu>{jho-!uRN8 z74kD+cv%X%Zsvv!sHlag5A{g?4oZF@!5+P#H$dx4o8KsSblZyfp?V#3r>HOzrKLK6?6|5xK=Z~8Bv0Awhsn{~P`s624p z@nYM@U!a;9l>S9PrAg=ka9zpo(QTUT3kvY(FFv0F#R2koj~{5AIxI^-s_L`}pnB9Z z`It|)&9N5@vl$q`HiOEcI`Hbh|1O=MUt~Cg_H-P7nf)J@#mg!s8D11x|M))vbku&S z&<@bbB9GSpr4EN-@d7%f%?X^heL&|amxS#Q1>M^H?KorUZHI>cJmCAE!MTdxcBa9$LphFzBUmW`gI)DDKN4M!3usOFt%^t^-AVZ)F*kS!2(3v12N~DRVR+!h4TMr%kkW2fq_bfKJQ|OHtOR=j zbS=e;n-)L*!|Mx3sDSnkHogHJ#(>=Dz2VW#x?~n;N=yNC3t`I!a8u!@Pw!fguRyKC zI#4s9^MgmP=(2sFwRi6g4}hKb!WHDC`D!}WVefV7;fQp(F4{a7mQ_{hs@d(I~uuK|zcmik@P?0PH*jAs; z_l5^vocbcf;E{aeWdo?5o&Y+t9_-wg1)!qut~tu^Dx|*(4ug>3=KqZ4#vYxQTmP4+ zcy@mAuoNqi@#wt%V&yJQ2GF$IzCv&<2wwKT^%x>8f@>thZ!a24B^ki=AEfUEy5$nI zCBnj^+jd=~0fSGs?(|61LKPJC-p{~A6(}7W%!J%~nGNC;yYVtK|6nYM1D$;G;;SWS zD%8{rWKQQJaPQIe#EX7V!P9N(5NQC~IH+txMG0D2Y+xJmM&RsmG}A*Tle&@qzW z!~n{Hpp!EhLE5`*xjcX$j zVE7HZQKk6}$BUz`Q*_Ji6vpgr8i*O?eVH}gmrfo=$M5CFA{`2`s~I-M2Zy>otf z25?#dWp;2r2j!d2-)SDbwsWTHGo+sLDH**t@NHF-eJ}D6eU5udM(aoUB$nd}3!-M3?1khtCI;}mvXF@I>9p|aOyKb8%m7_K zpzvbVVUUf;@iGG>0zM!26{wBUc^{nIz%}Yi&_Ni;1S(rW_c@?- z)j=C33D*CU;q`y1J!b1e(iId7t~*{>y!`dQ`8OkfUnQtP@S4#h`LJ(y$x()v`QY9G zxV`Mt32r**T7#PouQx)v26ly#3@j1Lwm(iDMwGX(`?y;#f!qU0J)m*HELnyZD;|j;whcqw^WyPp z&_2BTpw(5;GxouYNJyFb0#PqrmF1S5#r1qXm=P!?5)9wtgS%wE*=zJ1l zcs&QvUId31sL28@7GOiN@NnY2D#EY}vMSHC2@*&zIKd8j3py0=l}E2>*G-t&7d{Gs zT`B?^r0q4Gy$zHM?i(I>u^r^dUembsV3pts=EdO$BA`V)B|!!ZFWL`4_F{teN_HLt zmlm-vH~j$Zw*|WoaewqzNQvvwTYChwT^>1dLHmmC{QzBpddu*e;eVIz+9RN?@2mfT z2aSC@KZ1_5?mX<#Yg)Dwj;zTxF5Xg@7z zHyX%sC6SWCFMUt@y zgGY0P0H|qQY6WTq`*gmC#tqwS3D6KasQnH)(|S3mVc5+YFcG3t14(DeG4K%yFTUuD zKrW^B=rw&l6&(IA4%`E!`%kmApM3#i@s-0;AQp!c92Cgjd)wdmul6wgkgQwSBttIbMQ} z^?{Zvpo?xn1F#;wri)T#8D8jsbU>Qj7k`Q{yj}}c2a2z5u=ifdfEt$Y{zo_K&OV4Z z=n`4b{C;K+g#QIPzkjnA!Uvs01{qHQbr_)WgR(X5hT#DZ%kTUx;-Hx5{OsBJ=S9v; zaIpv4sh>ELlfl#SXh{la>q>9v6^~xqy66A@zc>lH1E=$Fx9gSG1Eu;N&A(MjG(joI z5TR8KqLshpF6d1C121<&j=*+-)@Luo_JAf$UV<*Yg!#7Jm!LjRAffTloR$U!uNVq6%ic{Mog zAhl5WTR|5PgK`|C`vXmK%8B6qCAjT~I!ICjQVUUac!Ec_=}lY6xId^4%yk1@4RsWB zH57jf_`cq5)0MWMdip+S*5-w;n-nO0gXLQ-{{R2~@*a3C2WU>|#e#{DNdpCNwGA0B z0eP`wBItCRBQIV5|NsA@TN|ao2j@R2UZ_okHjxEDja84%<0oGpJ_Pm; z=!iLOkLKSjpxf?$ie0|KcC~lMkTxhe7h-k}wR^K)wpPy#P|( zHNJTOis{Z?(CG+1ovo0|!Fxf&xh)4u)c7@9LBp;5n!TWY8oy>}1HWeM1b)rb1^k-1 z8~8O#5AbW&UO+1ETQ&aw2VE+@+75J7m<0=e%M_6Ly{-bFD|ih5dvvx+fR{J68vOtN z|9C5Cb1`Th^>{02jMf08wzCx!voAV-2s5~JJ_J_}w>&$K`SkXJ6npfV`fi34ROUYr zwZzO7vY-QeUohVS)nBGZykSj)Zrc-}@r2%9(1|r3ovk41g)Vrc9qd*_a{<&P2L%Q= z&4Rn+ZkovT2`u~^VXa|M%a2y!mu)M>;PIUSG+1A%<Kg00(rm7b2kJy+BPflz=`W zCe85D7L*}>ssBJaj~AXE;rr)d0XY?v0zEpxDbS}Aoceq^dqHP0wj3x?=GSb6Bt+i^ ze$CJc{F<=~_%%~E@N4EC;MXj@z^_^R068&&iVnjAFXU_>iLoRV6h0okQ$Yy~QjB?Y zf`ithx77ih9zimo#n#7LRsR3~4^5Atr22vre07UymM6l)d7fYogA+6)UB9?23hL5; z%Pd67;z2}J?BN$5)PDSj`5)Y}YkczpobI=R@}Ng2EkZ!X8j+l&J-X4{R|GD}K=S~o z;RDXDpbU)?JfMMN%;0(T6?6`Rska9rc>Fyuf@h0}G{egpPF_%%}x@N4E? z;MXjDz^_^R0XZpv!WOhX!BxPccPc1CJwUfdg9F0wzeg{);5!a3lpy{CopcI~eo)GI z!3Fl;RFE-<7AVun!!Hz7e<1ER12xwn_l3bcLW|h+vxKJSNbpqci+?}C;o*%Gdp@1d zu*V+u#I5rMwEp-OXej3Ri~7%?s00TMY8nPb4WvJ%qk>YsBDJ63V+D}X5qxL_)oT}D z3upjDK?30K4{!kZKm!0&Pxy4c0|x*&bM}HG7GG_n{TWomJp#4iI*-4o1#M|ZD|Acw zJQ|OHyaTQuVh_L2P)5wxfbz3PGV5Ox0|vuOw*MIz80wXK0~kFHK49q-eQpBE2ckbf z6ypU*DcWh_(OJOJc>&Z#hxS*%^$V=e2f14aDFM6QFg$SF^$O@p3edpT;U>ty)@Ios z{|&!+bX$NXCHXyiYp=X0crD4$U3vvHTDkQlC|W_c&X&k}bRGxa8T;(T{TKiL8~%TB zVl}88b^k@d3s7_;HT6olk(zEV9F>sMcep3~{19k8_$Sx{Qh@n%g3C}JNNl$pDADBC z1ZOLL&0bJ8=GUAGDZ67E_%%}}@N4ES;MXkOz^_?*0Lh===7HgXffUm+`{na z1h+npw}KQXFfcG2Zw2)gK$-rcTMhkjv zt(JqT*+Yg0UK}v|@&AQ^?2rGQHz88maH*xB5e)eJHYmM??&1Mg8&AQlIgegbspXK> zTad1uq{@%~pk?eGTfnOBzvz$x&EDJt%Yw!ve<(v0OlDw!j-&LN2F{md0IPU$6Czzv z;oAD7qyjW5a~yQjed__xoK7$6++{Kh9{eshK+SnQG?V8+wc5f4O@7UTnc57MQu63! z6>kN#a3w${ypcq8Ta5CL|1a1@fBfGCntt=>HT7O519g`p#DvPlukRtoOTgg)?!S3< zo&^=cSAsoy<0U|Y5lF*g@e-i(pS?jA&VB~Z8QPF+0m?5&pMrD7x)tD?tU)e=WcHUn zPyhc1x37?o`2+Q{du^TDWf(e3@4SedC(O`YdIxe(CdfU_|7FVMJ(59lM0-J_*S#Y9 zJ$hLJ3@L4z@2+Y zf5)Sj^@y%4sQC})JGvtCTmP3xLnb9bhw7B>_UL8Zzh4HV0X)v>(aTzbqP~~43Yiaf zPwW2@Q4h=SrR=XIJS_i}2zzwb8-NB;K7m~gHV1rs5p?_zLyDNjJ%^Kt?HDPT(> z;Q?|#C_jSRSD>?Yu7Q#QQZeHSnmG@91RBD)1v(@WT#taRJbfX!2(+35`4&z#Nb~50 zxhyEdgZ&LNAC%PocyxXTjhntu7Y8R|pH9%JWrrMNV!`wJ@c0F}$1x<>r#JP5N9S+Q znvdo;;M?C{)R}=sR&V)qJ_9@BMc+bB(CDE6xUL235B2C~HK+zn%|YjGLH7_Z2X&;n zO&#<=a}|$3*|PKai%sBVjQ3x7Ek!=~LL$a^&ZU@d*;(fI>3C=K>Ec%D5Lw6YatfEPNy-1!tVnE@(}Ky9GQ zprv`BaRmNW(7hyJt%lz~mqq2>1!cbb9xFlJ8%O@BM_$B$yaKw%jlIML)a~YPIRz@U zntzM%w}4t5po4;2L5Jlv{N~|rIR}#KX6>)hXNY#`d<0rQ>d|fC7#I8UNhWB?r2~UU z>+Mo$k8akGI#3Z~0aFE1axjyDVS-0@HHS;*BXI5p39f)sGAV|;N?spz9%SpyDeUV`aiJt)CUjn5vQP3^24Lsv`@zXv$_T8NY<(CrFJ?lfDY1*4_&0h#d#l)1VeBdN&Qdb5?T`G%bH0TBW}@ zyHXTVTX^(t1vLg?qYmAyzso_fAn-za9%umX_zUGlpacU?zk}6(b8ZNsd1x-UVGC)( zcyzNWL;V#z7veAPg(ye3Lh?W4d|T90Iz75spO=Bc#Nx&B8Q@}v!>1E`#vb^_ZEy~W zed+TU`}u;<`$IiDzk$Y;{(_3bGoU$R36E}8iwb=P&^kg;QROoObTIc%@I)VI5E3-C z`{NO)-Dx^g6Iy)TfAMXZ1b9WEN4Kf7CU`W^5wuhcd>-GeWuURTBN&SbA^8#Fzi!qq zrI0c*%(L?!$VD)}c3ZqSIUVGLPtZZY!=PNy1~Rh~GRp-XNqtcQ66rP-1-l76{hI_4 zxvT+qWdKN|6ET+y%Ks4idu=V}ftqsAX;aWj6V>F!phj8q8xEgt+i8{h44&QQFV3y` z_1~jgRvi@Xy`~H|L8akw&$^CobW5~wf(QWP1`3$xV zH)}R0!;8|BAcL&IyQpX00PnJkoh!reA{HW!qq3&{eenPP ziy4PNhjfWvpDqKk3cPsBr}G+UCC7{Z|6f!=G=Z&J_X=!Pb+rt`izFoRv` z`X@-@FRp>DnARi1@Ztc7rVbIvbRFm|m;{N%Y!&19OjgbhGM$Qc9=6i>V-q zZc#S4j=NwbOfPCyfn9qQB++Yo6)buT?8+pFmgpi-(ko>Eol63iWqRQOkvUlgm)Q!H z(F4i!+OC}gat_FTRjB=1qb?!sWJ>NY>>nQ zAmT4J$S}N60gHp3lL?94kMyJJ#gZqE|2cJX>t|>v~QlUP>K0`jx;l>s(jJ2g1JiE<2 zdTpQ0l3{pZvJyox*q|M7^_>g- zo=2~!!j1p`U)ocG;5{|!;7EbxU%H}hnQ*i9Z*4X+_RJY#fC!A35)iy zys=Oi98L4eWf)#e1zR9`WirSDhzdv%a7T!N;YB&v4tsFqYV(72y#(154-tnMxIhRj zCC~=i4~{Bz6?#xnJLqUY+k+s@n~s1S4vK&!AnxYn;9&cM5p1h2K!WYlUQigY-nNj1 z1|u$uPVK-wR5-pj68Tvg*Y$5LeU^6anDu%?7rV z>BV`7#EN`)qWLugV!Kt5nCQ8Zw9@qQ`DIN1&i z`@+OP*Vn7&fYma;P={FoT0+q)`s2j^|1X3gV$if?>Nyd#<6e{(d_0z{?F<=)7mc85 zs`LE|O-Mip6@g0xDX_1ZUI?%J^&hHPRGky->|I45r-4r4*k@?K@WK&X#n^5#G++Sl z@$u*tUB>}dc&tQ*;e`@JdNN2Fbl3!FM6g#hh8>jtcZ2+8TVV)ln*4iFF$GkFu~NVM1VLZ~c*N4LO>>gB(nM?AGXT(4ycU$F;|oU zc7*E+@LW7AtGofjiw7Waa3i?awjCngt6;$J;si(>x+{DlL_8NHz5yf-UO(4s+q@cN zC#x?=e8ybRQE}fPR&=r&g2Y-tV!f=rrm~Qw#Xg;&aN+|=WrBiTe$5eOfC%*3Mu8IuYd%Q)(Hzi%i~Eq1jXGI_L1O1XYN1XufvCN#Z@}D8v}}ZRGe~?MNE|#^)@#cPQ9l_Z-UbqfhSdCGu=-+ zFuVu@yM=W+h;6k1A4ouBe07Xqn#CGk`AB=(gPm65pdP%)2O>TdBo1Cz(QR9(2kJ~7;Q+Vr!3$_!rm4f$nM2yM zolimI8Xle3JR0ACM!u;#EeGl7f#>2N9X-%IFrki~@F{3V@7RkK@4!{si-aklje2sw zK;tX0{#z$#yocjO>S?&@DyV9sDGUsV^=|O_CK^sOL1vY}8MqTXsREyELZ4$YgDhb| z%m;h~4QYluLM~_V1&wSvc3$!6JOuV;^BW7F?plfL&YzYlaZxks;ugh%U1{+4^7>q~0{|8tdyKpJtqrYk!@ zu08%j806Y+*8?v*L2GB=84p0sY-QdyfyW{0a@G29~KG1K5|6j1*0Plx903MVBZMF00X8oN8YMBbWc-;#g zCEVfBZF)coRePqvp!%^JbWf2M=w1Z4 z|6%zTbU%(qXYGp=k8a4mPmj*fABLB}!^_$poj*Whw*0OA(x91u|NJd&AV#-1WT;4l zzqL#nG~x*!=dOM6;`uyKnRN`bv{b{R+g3vhG_4i-;YGh3cmtA1x9bOwZsa|tawiXa zbhBn;fr2a)bU)4B3820u$hp;jK;0PDEx1<=~>*8law;4}c< zz3^g*D`-p(v@bIMe`oC(&(1Hf(Yse^;L*Ff?%FfH-6|^0{~1ec@ZI z)+hWeOQnANM_iuC%HKLg3N$P8{6(DtXauzO0(eAT0DQks=kXUa?tmv5IY4WTV*FVc zP&YxufR-tPhs{94k)Y)xpm71vxZndm*tlSc0mvzi&3_q7jX?Vs`CGC;b5p&p7r;#x z(As5FCQSo|7rlFa{eS5PT1oT&B_C+Ed=DFV+6j7`yaQ~!3baQo7_zC9;|0gR|Npy1 zCuQn0bROKn$iTpG`9bGJ&V%1CC|>aRei$^=%I|WpleI7t)Zm3K)8&^(9zOvMls|m| zx=Xk7_=}ad|NoEucEdvwvQrN+RtWM}C}{E=Qakj9J^+oadvx2%YoP9<01dGh%Yf5{ zhDUep190eo<|$cU=u88hg^4`Kt^gTi2ldY~^clcwsF(G@Qj71e|Nmd?Ua>HH0?tf)F2`Qo-DXn@s%g}^%M=9dx@$uj#pFS;%x8=t4Q;ts)Ga;C14i;JeJgYccge=g@Y8 zXG#$h^g_tf)8P92@QYR!P>><&6Yx|aXl(v7qT&OMH&eG_f3Z#ivD!oxW3@@9N8=ID zm_BrN13a$)ZVPnYgD%YhPuydyI|0?8nCni8E`xT$KL-scrh_gg1+_enz2G_X|NraO z7p=?~{)cSC{tds3O&2s9SPMGowp-LJ5!9*TQ2}iTT?1;zTX}SXre)84{}0-l1u6$& z*G2M_9`|UjmS8MB;L%+z@Z!vq|NmPLlyG`fV%Mvv|!p7G#%0{0jW_zmoXl1_4)rFw5)&uv`F(`>%afL-8Cv4 zo}I@)Cmis%=rA#W&N>j`Z)t*En|u(QPN#zOfzR2peQ^oYUYZJ86ZJwTje(&XEa%yI zwDpolH&~dz)dYM*+5_;lxcn_@;HwzlzvxR8Vesq(E!Sk>Zz%*>)$Js^n;6Ok6zO`ma+^les2(F@a#P12)?bb6mn-JBY*1`5DUD_ z`4`BLZr0sNpvuDHwI6g}ZEx)YkIsX;AiE(=4`|3Tyx6b-R4s$8@acry`s>kaYGx@5 za^s6h5Q{vzStC-wMuF$gUcAng0NuFj*uy{@3W9sDiApo^(3l%Zkm z)A^CVIoj*+k>n;4psS*3ZE3 za`oT;|3ULzA7dfLBtq9?dnQ2mfgrwTx2wcU&?Fjk9WAIRjEDza*Ld`0{onup!Byqw zVp)b4i`Id{?YL*>v6u2-kJ)ZY2Q{R?E$tUa>OieKF#F{>&_Qm+|G)o-o)7af9ek@L zxcmXNmpnjgyg{Wqs3QT%pPrrY$=#}KP=il&Hz;zfnM(Mg4G$nHdeB8~l{fSld^(@| zbbfo$_ZyVc?)!9pGrSF2oL%=DG=y}-v)e?*v%5x?;l*3fMaZoON_K$`d+})gEm8V7 z8oY!WW+a${W&RD~EO7JR@_UJ;Pp>J{4Lt_W&Mz-+WrKqM8>lqn{|#Ea^3A97ImmLx z-~a!A=FewvD4zTuvM>p%wXmE>kQlLD82e?H#;}dAj1T=kg);@qwv%i>k2sBX+TL0kD z?TXm2!`}*CE8Gchn}GH~K`-`XE!p#;9AfEdk8W;{&J&RNY4*|p`)Xw(k{N>Rta_HM3cK+62P{|6q*A{YTun?rF%gWyhx=+-j z`2eFw>&eoS9@fqR{JrrYwcWuAuMfVk`TPAp(u_B>JcsR%11DGP7huR7{ zVR)eVIXiy~sDlD2(C32+4)E0WQSgt@{&3mP_l2dY5?+ay6J z8{~k?F~gIfgLB@2q9F6N6sR)rZ2rT--wHm`rW~=Q*l}9a! z0-&x)fy6gA2?hRENs!As??dL%&Lo1iCmaV=RtFP7Nrk`lBm-#R6slDXq1A!E)edye z6UZMepvnoYm@NaD+k7Mgw5$S>JwO-hdH)3^E(Xv%KFHy3T0joxZ@B|10=ikxM!_9F zD;nbXu5Vz+gJYo8^8f$;;JfRQ(r;oUr2K*H52=iSM?oLN^wwFRt8Obn^&383ob51tjm$%~}b{58W2vtAHn@dGhBS_h>#Q04=W#FC7OjW(6%fbL1Cu z7vL9c1+8lJ=#1^~>CBzr)0sQNr?Yf{$8pycDxhdO?h4*gblerR+neFVo&(YhFZ;j+ zFu44}WxfMwCpaGSeL7QDc%Ye`05UrlR9L$G`VMXPfXYWuu?Q|BI=_QpClmhLB^Z`5R7HAj$&UWzF189F7WM4ji>m^9m zvGD19fl>fCFnEG?aEI;y-37|u0vdww?JnbRZ2rT<-y#e;$p2)P~9$xMNO^KTaZmWd$o&U>JX)Vgg$IKg8E2VO+;f%}E- z9^Iv&o6y<$TS5B4*K;ob7ZkATxf%Ie`#}Por5q05jl-HCX*} zA9Qe;#EasW9H3L&UcCPN{l91Dk(U|ZJi_q88Y2Gs8KhnLqPphae~(_u{%JEG{G(hwU~T5|L+DRf)}?0z)|-y=^tqSqenL@XDGP7b7+8dQdhhN6-f~H zcy`BugR@i(ntDK6iLAh@n83}i&igMqZ-HET?Bz31dEwh#Cg9lohq>h1E>M#UJh%Z` zb9BT6GQQ!{t9r6thT-MRzyJTgSpN;BG6L0eko?wd8pC10unSyZbUu9{9t>JC@k6DA z349;)g9xyL*Ve-v{QVWk!Qk=(re6eE|Megg{R<%a8{zu5W9nbSj%5FIRQ(AM{gH6} z<>>km^(o{A-OK0$K`7_FZ2|3X1C4V)8kdsWL5-|qFA{$+F}NCnBHyFibc#4=*#>xb z`A&`|@uwtF&V8D6YD3@TslgBnN%KS0eT&^_hgP3n!e{{IJ+Z=f50eLFuohI@1# z^X+`#)ArPGqP5Pizw4kEHqc`;iYA%DMGvxJT5h36aDG|_+Jt%Hp7=hvzl3qaL zL_7X4fhu&+`mxqCFu#G8sn~D(|KH=d>j6+Y1o!y*8|{EspS`_I_#}I@It3sl)=NA^)9OcLrJoSHR~N#0|x$<+aT#~*5hHI zay1lm)T7BfP`4K}KzHi}^8KH%nVJ2up!1!ZMZtM2y#++G7J!`4dF*8s(tbS0{h+hJ zURHr>5r!|{|GRd+c?nuv4XbY<=?xa&&<)sUphH<29-XxtJUUBvpcL93-Avz(DDby@ z1eHLY$2||e=XY#=UJoiZnD|?n!L6Oc0xyg>U;{M^z(x9h{=Vsq3=BTq#^9DxixCq8 zgX6a&jQlM>Kn7j>0~!kK=m%-uwGVy%s``^tmi{O>BInw^0_A&L1$;Mln8?gX8&H08;^tXRtabW zLbvM<4@*`@5m1sl4LWD8^Bu^Jj9s916G~QM206X?hz5F_b%IBCm4HX`b;r*C9+toO zTR*V=_z#ZwQa+FFXoZ(-;8GqmKGS*s#euRP|2@7lgZcvetuH`hLLeoNQO3tXLCJBI z1C-xh{{H*_|32tc-KQ!Uh8O+&L0!sYFYkg)1(%PG&HouotPKCZaQ+ODI|!BoZ#fL$ z0tN8*7ao=@3@^38nE;$UR$PIYU-s|+e@9T&b-=gvTgh(EZZ=5Qg|&1&_)Zc~Sj3pH zFn|v5+YUN~YsQPSAHM(h=w{Um1~oxJcYfMd!3u4sr=a==oPS^iJ-AT@KKj#Cg~@>7 zg}g7c+~x$e%^>SPVf%)S!z4f}q0XEHjYEOwEF3R^hpzZQLsua69^DQcCqd)(8-l>~ z#mY*U)yJP;)E93Uk;?n!K2Uoh^-Tdpzb#yUJGy@G{32|;)}xbl``B3@ABlH<`C>7-T`)feMSKu=`wp;{7A$5Ii-ptEX^zc^h7y64(7Wd>+k4Ycy4 zDgcz(K{dgJM+pCdlNxL?n0E2?BIl1NC_l9DFo6yN0gYGO_vl4h6HH7rW~>Ey8?+E+ zpD)-iFUlZ`!(P0rKv^6M9S;KaZ#*DN@_)Rj-T+#*SNa3o;s))O`BlgXUP=wAufh2b zw3WQ`w@2r9$l?T04s88j!tug>7pQGh+P-gEp`Twf--WMQ8wRPXrmG$@l}( zR(<^#+{CN8|3Vqmne9COg1ZzYh+zJG zaT(NP=sf=7bqRKPQ11bh=1${~hnc?`yF4gA{ec`*seoMjgT|p+FO`7mr(n>|iO$dq zFK+A*W&n-$yWV(lb{#mjE`WC~fnv+20Mxxho?o(upM?l&FSmZA?CL>htbyGGFC)MsI-OHNiPQtKGmwg>47mQ2gzu79 zLEj}`nu9ze1{vpk@%Y8}{~o zJ)kEO{NDkZasn-5f1$Gd|9{s`9hKKjFC<@LNgt5$TF*|jIXBvbhWTGaXsBU?MiFA# z4Kz^!4Ufyuk;B8M^EqUbEU2P!={5jO`t%YGkaycb0rCx$E`+y%0;H4yvdNqE1!%M# zdHxZ$zZHC>E-aBy`|t_9KZt+;%|C*s5)l)nap=hc)Nbr`74YeN=F|Be;(zE;B=8;! zXllWg8a{6O{~wY|#kc{9aRD{12oPK+CHay8>@QI`DCyu3>xl7 z2eqzHYG+XDA=FGcwG>u6bAbHRZSmp;coNn$@jIl^+X)Vz$0eXaw)-!t^RSn%VXzXX z`8j)u5v1OG0~&E^25lYt$iM(P(4M~)w3`gPb?hBTuA4OkY^T9%VGqziIOyAR?|};V zUfcDX{{Mf`6(t5bt!5vnoAP3>7swajp~4bF$kMB6tw6XrM>uLBj(tgqMK^{@%Z+&IOG-6mz_c164TPtec&{Zhh$w;hu4YaKQyjH*2jk zglh2Qd&7DyV@e|+Hv z5s(K7_=41%!qn@7)T=|J*+J4?AZam(z`qn3hW(}>0aloLPLTTVOTYo}6eMi{l70pe zxC0Wf1PNS)2wVmUSc3$PKm<;L1VFj)#b$`WK9E2yNX4QhQ2(yW0o`{8kzNUs1}&U@ z(F_ro4-(J;sV{;EOa%$JfdmpE0$m`1bdW#*M4$~MkPi~DhX^!*1TsJZdJusckbp8s zKo%lkk|V>gA1uHF5y$|khy}4Efi(~TO^^WSXyzBQAp(XLvJCq{2kE`&f(Y<|R7iugRKl!SkuAgUA{!$8 zHCcvXe*s833L@|hBv1$v@Pr7w0ttXFmwI6V5qJy|&<3echX~vN350+I#2^CaKmx@e z0al2>Nss_&wC}~2MPQHb0||hRjDGPLA|R0_!>}K;DB{JXMbLoa06FsrM0zSneHO^X z%@BbekN{{a{fk8qfhLeZ1xUq2h(HBMpdKX901+q#2{eKP@*x8GAOTQo^+g;+APXd5 z3{v3>5l8?D=z;`nAOaB}0X>j_HblS=B%luxkb=28JWGb*1rJ2p3?%IjlK#CA>~UR? zKmbVK6+}P2!se+0SS131RNj&XF&p> zq4*d25P_2*fpU-vxrNX;OU#sEcp(6h-UO0P0ZIQ~0QUPTkU$zp;2lI@F-Ra4ByblZ zFb^ak4iY#65tsrJFb4_jUI4X%17yWoh;$7|Iuj&42O>}m5-$b^~W!~VRo)cmtlBe3z1#|lFkOH*MSJk0SSOc#$QN71SW$7)Iln^AObxg zfijT5&w1cf&W zNQE6lKo2AUn&Ez-I}aKoi_>HnUdY3E^FTa77;i3!$Be@J3b~2&b%G4Tes_?`Papyh zK?1QLfy)qq2OxoHkien2P^&UQ#%+P|l0m#>5XJjIij_c$r$Pj_fCT(N0xb}M)gS>U zkU%j+U=c{55+slW5tt1U2n7iQLIfs*1VDoWFB~8OT_6EDkP3Z>!1GiY2E+d^6d}B4 z5S}oEmkd&z15(Tc5r_c^#DN4p&H<-`Xpn#`NZ=Hv1#WMHdWOQTl8_@KK<7ckzBIWGGR^^VH4xJMG9dLYx9h^)7wXY` zT%dD1Xh<8{NqPFh<1DB%4+(FO&y_v8!xca~M7$zAEd3=)xRKVYbvq>-2D!tdn?)5= zR`GKqt)AkS2d_7Stkw7j3Ifm0FTtIseL4?%G{3R%=w|ci3_Ss!?3)6bqw756dGHm# zWAmeW-_ENm85ryt_*-6sBzm3xr}4i(;M3`P;FAZx)`1sWPl2M)_rNE9odeAW7&~3p zcyzOBSm`tPSQ?aac{cwQ;_qL`2)gFW^Z0S_?!MNO{GFi1@}A9q8TtD_H!^s1h8}PP zd-}Bu{5}TH=3|U5oxgoMkNaA_|)g>2aJ>2%%k zf^VrX=+J2&(8O8iasJkM;Ayei6D%NE$N{^*5@i^`*D>(7cz~9kyq*qPI8u88l{Ib_*#D8Z;b|D83ytKXw8L3ukGwaa3?o$8bl{Z*VVP4jSsE|JQOZ1x_kql7`*i0CfP$>-YdtLu~HvVNeHOrd6PZs3ZgD*HiG2^i-IBNC+ z{T(h09^W5%9DKzMil##^_)a266Bi_!8ZGo0e5?)lTjRmYTth!Q?gw?MUW0Q)+7DrorO_>0N1EDSF>;r-$li>C=OK*I3&i*i{O24Bl}pb+Hm{rd0!e{eVo z{{sznfx_|i8hHBX4qXFYAmF;gqt`S%L59Ic^CRe*9oG#n0;dTv_;kB&@aV4H@zM;m zdW8QyG`X^!_znvpIwk zQKK1XkO4GdH2(z3XcQ>^pj(X~D@d6@=K(`E88MfB^5_=zH3I3aFYxF#dMTLy3sT;L z&OBNJ9%X@@dDMEKRNbRjmNQ-kR^ILdb>=|pGIl3{=A2n;Kb z3As-bWS$O49y%-*>;X0JbR5DwP-6~cUN*$MKVS7h^YA6lA;!JI-EqPyr8K7l~3|WFJAUFS=QcAsz#V zXJ|0O|Dawc*#C*(@Z^CgD|rs7V!+E6qCGl~ImS4~#=d-ZKnhd^yD&h?bHrVg9-z6f z?lJ+7)^Gf+6F|$ix>-~pv);@l{2t9eWcXV_ZCc;%6cx}d7i+(OgSk}EqgU28R)%2$ zco#9q9gh>h?&yIi0G+pf3^YKRV-B8bW+_pFI1F^+eFhhJDigfYE%s&AVJ77Jz?+Xi zHoAg_yUU>ii|NmtgX!lj;^A~Z>;7RfMHL$d-s}GBv%SS;Irr`P;9RASp#^yID z(^EGLLHAJhf%iTpgRb=S?7RxPv#i(TA0!`ncH5|c(gc6&>8IcSgRkv51Y$sspZ~$k z-?|CJZ>|?$C{6QhKEmN^`K9#ai!BF0_mt$G@aa|k30^+wdH_6r=h4j!Zh&;UUI10a zJRZHF2Yfo8y=W;AWdN-y_p$t3dK-0vnki@k46#Nj_VA12)*x@&-lzt78?-FM>B0B^ zubY}rK?WvYxbsOeyl}ek{eRj7$TD#LmL3LZTtn~Wgq^PgUj57g@?j|_$ak%vbsiqw ztZ(!{qonsex(!~ew16Bt9^%n$>iP*R{KC`}oSi_cR=7a5*w%xfHF1Y_fclr<={MND zhmM^h;QL6ykqg<}1P%w-`C2~RrksXgGd;V_Uf4mb;%@c+i}%!Haq3;Gigt+yQF8?*etAK)!7i`~Uy{ zOHt7L?~CpO;E;Iv5mJwVjwtE8|Kh6+SR;Q6Xm236tqEE&*$P_A4(7eQ0agxLH*fm# z1H{vgCK3!Q7)z#jbRK^ZdVqrg5yKW6?`p-12UH#}|NZv`)HZ9c%^VR@+ZXt(Q*<`;|}$rm~gcpQAh z>~Zh`vv047xNmQb_zzFb;~u@P2SDo!A@+dIY3YVv>U7ViGxvaJ^E-|gQ+7)+cy`xu zfOaGMbUxb!N*W-^7uCC^7@tIz$pu#XNw<-!af+5IFuWP$~Yd?8Fg&yLW=(?;m>n<%4z&qsAY&Tyy+( zl%2nI$-n>qza44dZ2|YD(*Vco{4!X)n(qJqAFLi!zCa`$!epTPZzT4kMtTK@ zB*Tm1Q=mwP=Xda2J!HK>^D}n-R`2`JU~>X7ptTdEQNrJ@2NLVN_d-4gbeAS{mkuO7 z!_p7Bd8{BUpv5VF?tz;8$c-HS_7@JyXccwH$C)A1j@(kU939p}n@1Mrr zABDLeG+%oKbm#>%{etd+2!_lm&IBhG(5&Ko$gE;%6?jH*AxONNl?jyRx(%TEz?7qubzRB8U(7 zFZe!)uTXDy%Zj`PHNihJX3WR`~g^>RKKF}NqC_e^=i!yk0vc7qR$j2c2KdjH0uE&hczAhs*CN8pqx0U2U|k8&E<8|YHY4uGf8Xw0ftR3tT=4K^ ztyBeti^c06kh?v)StmkV@)C3_7`#6Rx_<*4z7~-10^KtM4o{1hfhgezZU=#a53<6e z`Hco>{NTl(&;S2_JIv1C%6A8pp>FfHu!0z{PCqk$>(|?$4B>jfqq_opB`<%=2~dI7 z4H9AS=yW}?l7WGRfxoo~w0ODm*^6CInLw*bK|K%t7SO&iP+cbB(RpYEd#T_Ak8UPN z^IC?#1+*9JMfWGr8m9Z8a5#|o>p$q^14sU;$9!9#fGQ!M&V&m7DF+-mj=6M{p5Sl! z3XT+K37_uT9iE-;5)(YSqXj_Y6ycthcS?dhyUPVUI`8{-{`2kp`=TK6*MHE)bT-N;MIH`nik@Py*O(O%Vo5quT+r^S313qg(j@hpVu8j-3=B*RrAt63#+1wh6*gwkpu)x(WKC%= zWIz#AT!Gfdw4MazKVBAaCNM-g*S3)3^)}G`HoToGpnPTcdIcn3@d_$I_%oneY;VJD;=1T}A_2B>r5dIFNewZU8IK?{;z9C!%I`H;mU{vO?>CqVt; z*+rmj4o5T)8+k!(KY01|;`cj{rh7h}{}Czh5NJjIq(BJnCn(kv-u(ydXL!*O z4XV};gHOu2z{tShaoho%uR+$y*!%*OXQ0mAZT?mt@NNm#<4-_AcA!)~Z31K*rq?#l zSBBw*ejqr^RzRdn9)niJfRg?F7ovfnJ!-6N5SdanxO>6%3+TR1kpA}pVEqXYRUrMp zz}e>hi>m>kFajNv4T>A}bD%s{djiz)o&5mhU+};Tf6Ee(>st?$NJ5H7AyE26l#d#q zo@Vx2c=@;>22wuqPX#Uc^yqZm04*Ll4t0d?=WlTZmB8KE0=|}S_*+2tvVrRee{TgU1owjrLH?G93=9mQY6z?g)Pw<>a~nJ;QV!b4=F?ewz_;_? z3yBz5xmvOTlvGw&z{@jT3q*NVI@FHC1-c*zbf%oseZqd53m+CjQu zWiV*x1Go&{0UD@W3{eLy>8FCUg1VHDGm9Wm({P4~;iU`Mh}sRHxXK5qS_QW7`O6}3 z)0P?DrI6-tS@`$=|AsRS9-YiDr-8Mxs)EXjUehObu(qwu7L*}I=z8f!@LkCsoqJz^ z4DH^D&lYaEoPwf(d{mA+!frI^f(T_0s=Hw@6qXc1KO~J-uH&mxa4mE zk8AYq1+5?L41MwVRCmq~Q0xtpux0Aj=+DZJapnTo%6VX30mI0k0pzvA?QocrmrjN@qO&JBzlwkrL)$amwKrazmIs~sP!a*kd?kgDj^R>Jod@n1g6@NG z1a}NUo4p|&L(q0!k8ajopk&!?0re-SODEtAI@_Vt-2-IqVtLSoJgzr9dVOzz8&2cs8w=s~NkX`wQCWyNpz#Y(c!Dm* zg^Z0i|7V1ZN7p6yy8mnb!N}i!5fmQXwG4)rntwBT_WE+{Yvg5M;GcTvh3{oa@Ni}G z4;B6v&@?aTd=+uf66EKgq4YRK=rHhB1_p-a-^?WikR0{^>ie__t^Z5QKw^%2KodIA zKAjIhi3`-2hxAW8y6wQzLoLmZ82MX36~c>^;v(Rc0{ktYGmkvFMQ4Eg+wQtHl|KGVa2gK=|+5x6|EB>O^ z^EV6+yvS+*&5yMffK{}v08yaBh*Cjie|IZbV>4)9ZwOdmD#-NXtqcA_4%s^13aYIk zqfAZ`9^F+2pfmolil|U{QLjEvlVoU>d_6+0&X)voZSibL^n)z>k$@^$#5@# z?yHAzx_d!pdvrQhym-Sb4ciz48GP~R1_$5^=HuXvb*=R*3=GYCLBYsTV(ih&x>H)8 zA+6bhfxopA6x`jdV530&ERX}^PlF0~@JTNX{H=4qDv&M=<8RdlxvB98D5^jSB`)@` zNAq4#w5ag6&I7d*LGx`s-Ah5HdUnUCR6xemKof8t-K@t%K)Dn=OVlg}N!qO-4W8XD zDiWY0y9_{U=I4SUt+Vuk$MIIs848f7a6R#&;4Wx^)LzhedY!IUUL0JFh=g{qOCiD1 z3)bb)=_mnphe!8bkcpnhT~sPSx#R^qXy0D*UQm)@09P;IVD;>DQK{f>Im^Vr;L^Pm zl>DF?LFZw#b~7$Ec1PL;a&ch{apl)D^p$8OSckt;|U3>&o3v31H@$5EH@#*~ZqQF^#0mAR zCq24@B|JLkCV(_{LiUSyPCWrRW2|%P1<*M|VyzI_sW-rirapkk9&i2e7g8j2_I?1V z6Kvf9a;$u%G{ei=VAsp~tIINgPx6F?lG4ln|2q$ZGF2(aux{5A9^G3(*}|jKO``cX zN2!uWH|tYjP=x~Z1%pR-Ljb6Ruym~8ZvoAw`#^MndU45zML`2m5}o&6c-;E`|HWlc z{(&S#&(0g*<90L>N4KT_xbhHnxJ!#{i$>B?9tzcj$=*3uWkm1ph&84hA27mlrQKEd_Om4)C{t zE40o-9=#EaKAOKEc1#7i7Bm|1{6$xS2&k>g-*S+NfdO{!-wZkM0Y)!!6GRw5;nMOL zR4ewHMnN3q(`)L^D$nrZUL|M~+&fT%BDfvI1f5;?;zT7lur(oSU+jc%=R5~T1*Fv{ zngCZl3nUHd;!X!uwcV~Kd>DUtSRUqYZU+rCbmyM%=)B>h`NLE5C|IjUuW6bd#Bmqm zMHpUIfR23vh1B~O2c$u3OKMMmj+5kX(f#-TKiKK}LDd-O2u4tRL%e^V2^6=_J$g+$ zS>zdBh$Fnw(*|~XCJV^O=P&+Nh%mhT2Pz_<=k0oS-uG-iF2Ua_3vz9*?LRRY(4jRi zMD&CiUUGuRR6xZP1Na=oa3nrBP5Ch~FzkaQP1~PVG7K+xzcDksoQGt-N9Q%rIQZAE z%#cXYVPs&~2U=C((QC^rE6ecW_E%;|j0A#{iR}qydC(z-JDBAeUig1w1}E8aF#Y|7 z{WoUNs@nx1Ib#T0?3oN?z2b{WUqOn$zmNh+fWluKTxKA`pZ)Lu|31j!4_;ddx^P8D zmf=M()P;Qy{vhXXpUzj{qzD>&G*}Ee$_aGrG=GZ-sQ$A&%-_Tf%C?=yJvHz9YX0@< z{OsM!qW78)KAzZM%~i_j(R`TE!}4&^C(q9NzM9`5ai#>0vtK@);52q6R)oP<^RI8~ z+xniDv54~^!97V|P!Znkd&0Aqg&&-hZ2myg0=Ur#PEQ`12R%E_LW~COZ3o9f+60Jz zGsv}|(cu58`Xy@a#Ma2|VzrJ)O^C`gdr_ zGQ3cY0fodXaL4cY3vrMmSN!__9}?arQ69afzZoDouDcWz-rx9JKxd%&g0`@OHr9G- z-uLPJ_2OPMICq|gs*NudVR*R}G$sL`Uxf~_ZvDi}@bV5QLHF7&WRPcgVe%Q2p}v&_ zfQ`HlHt*kyzE9vlsRpSK`pnGmG6SNe7$m^>nHip0eavMTUL-(N`+_8&fGl_lY7&7~ z5Wjoj0+BNW$(;bnorK7}c>M`v@mv0u9Y6p7hvj5TNzi>kpP)GzbikrVukFA8a-fv+ z?!O$vi`Gw&SX&D+w)6grQV`v1dkrL)`H2~lg*|$0-5<#?yg2cZ8MI^dMF7a&K#;w? zwrN73-I}fkUQ}y>4o7o6@bWUqeo&X&qt{kNQu%Kb?(p#}&>G48pq*v#2`-Ko{vIH`he4xhZ#W>MX?GTb+DD>iPlMV= zpe0xapbK0UN7q+5Y-th;M1w?)0xcS(J2Ay_k%iNv1sf2L49h_ zj2eeWw`>VWSL^K(NoY8M_7}WhUx=8eedp0F>kd^U0-8Um=6LaZ0g60mbQb>Z1o&GgFfuTl zJnYfCm*@Zg|1ZAG5QQXKSHlCKqqO#GGBAKnG_jfY{r?O0?UD>H7WFYQy!dOt%JAaE zE=dMZn9g8_glWg3@BfdxegOCCA-nv+UC3?&k8U>!kIt<>Kvi+4>kE%=H_%Wzf6I4p zdl9m@q%y+8vOwye`p;>GRH zObjoUT@qvfwc|LzvD(l9x(|b~yA`AmH2x1Wpfgb7zQZ+Ze+ z1p{V-4et&#@MygR8uzbKFg)qg?H}P|=_OI(XL+tvsuOH<>w(gR;BhR-I+&NX;6bas zAh&j&>TCs_clx5oO`4$_%zS+c)V_g??<2++yZsYhuLaFRcRPW`{dJe2oInUUe-ku6 zZVtMvxKz;afJf`M5~fZz@J+#>^}##9MF!$FQ}8v%lAyDx!0jBc^y^db`uoM|=^P9m z-K9UE=9~oGD2#9pe7+cRUQg{0kKWoJFRo7$1xNUDR!D?TUjWKPr9VKUf486h|9|o@ z+&u|mp!yTU5AAjT4?WVT`3*<&4|e|chMnL4gR)R43nWBc=YI#CbQ0 z7x92vntGsX;y~v=9D8vX)GB~29xq z1_kg621o$UnEm~KEU1L&t`K->y+s1s{>K;2f52IfDfY18rF|@*WZ!FBD=)+FV%H=| zr1>pa{svuG0qQDybne{%t}eHNP7U$soH_%{>zx2@-nA~koOlPhj1TIvf3v>-2MwtI zhm4+q+}PQA0%SrrlyVU8=xn_J5;+bY7Kc=IFv$wo#C<1toZh2*E=034Xdn-?ECDi& z?+mHN4M3wM&}sa_2oK8w3H}z)yq^bR8ozfcyc&=7=-vu80y2#c8kO_t-V63+cPq%x z|1WrSg53n#Ug6Q*3s&6eDB;l!6-7FAjKB3E*m6iy2~_@f?**&xcE>r74?ZEiqz*QZ z4{3Om)LC9D^#XO9@<9bV)T-74C1v1~ibcV;fR+`2odY_K2<#w8uvAFA&^ZRms}7)b zu;6o8Js|FQF~v@r0c5J=|NsAAuRv6=81;W(0?PTW9^G5PvD3X5WW|fSb&?FtzuEX( z!PQPTIQ~5#F$YRhpz8SyRY1e#7~o(dA^geo)w z?X745E&20+C5wuR7fEd334&6WZm_cEANpm7Ji4cXW&}KXoj5!?!NdHo4?yxSOee%G z;8b+n0X*9OQVryU=DnbV%TS^OQ`o&1l!QIH3o1OiTS0P2(G5+0Q$ce>9-RRdpak&p z7ic(Bb}p9o5U75GUbExV2|n%Jr?VGy$a~9y5(R!u*9Lw~-wFJhp$qsmV>j??rXJwe z%)P*`S^9uqv-ShhvXxd3&_z%OJU~ZO!49D^`2YVuXlK0#fg9yqz(W{QK_;YlXhW_5 zD`h%)_(k>{6c>Z?w?{YY)W3QRuAo*VXrTw_}S+1NILj zy@8`1l4wC$3!<&N7vxoNvCw+5grgg*zmw4ek{m(Jcz8hbw}Nl6125x&w)Z@`_kt}a znE&%&`5)q=l03_6rB+>0Ao(hDYaIaFio0$pTFbK#Nu=<&fb4EBT=! zkhtj#$bk0cK&28q5rHBP+NJA3N-L2O9+nXj{4L=60Z|t;_QTQ&f9p|DGJ@7Fkn{pw z%mpdLTS1<7HGBe2C?KzbN(7JYUXbmeiAH#p5CNX=ERhB6|K6>JV@ks!D~30g;%23}t_?Zq`v(E#zLOXo9iAEOw&!v((n2vm@q z_zp=&J0^h|bddhVnVS*}hL=D~;z130P=ivzqw@k{y#uIx1C?JO{T)#K6-fGf;QCoS zx&tJ@dXYwOAnRj7z~?yj);Yli(OHm1t_2u1)v!^kIuv0u1`R-e4v$lFKR*A zwe>)0KzHa9575cNwr`ce-NPqgpb5ES;3e46ka17&rZUuPapr=ey7>rb#RVurU+U$F zK=<8(HuVXpi!#8?ZBzyg*nv)t>x3BndNCw_Bi*x88sO1N{ z!P{fu zCH3fL`*uX3q;e%ggFQn@EqJQ7+YB5U1>iZm7Gv-b`u!Kyxgzjcr3q(2e!Txe+zoVE z0qch^dJG=j44}{}4fC`-201SQe2hLPBLjR6?}8#k*F#qkhSza0e>K+$Fz~m6&n)P? z|3Va0nRT z%@Gcd&imjVb~I>IT3D6=v;fC34s>@-ysHRo|2oK&07lTf;W6LV|D~J2t_B$o_I;}= z*x2tc-rfOE9&*5@PF4%cGJuEpAO`Z?VTPs$u=hdwK?Z^M-+&Ej0nPt-bl&&qHNF2* zj^Raa9B5+TK5Tk(tAY%}i<2(kLGf)b<-nuBUU4D}FF_a7Li&T7Ce*OMu_6pFpM!_AApJ#$8Bc# zoLB5=8HN|nZ-LfeupamXPcQtfN}$6gKxqba6Q^tI+me2We|v4Wy^v#g;Q}%PGB;w| z59$^z2AR=oI{_rA4st*$sEnK7(QDfV5)!!$8Vvvb!sa$JgGaAzCP<6{q|6Sa4By_ zJ-f|8Q)8(=#K9|7nt!mAfR?*m{RleN9lVgn>Nf{?v|GlvTMe|ixP=iMS)f^v7kZVD zk#I@SwH1hTgmiujcn};qZhl}M69Z^3Qwwbpg5p)u-Ea0qBDIS0L%VJOBTG32G<6>z~%!p#3SVDUh5C zK7AHa?m2V31a+C9>Gs9ry`Zu7<1e)TfDY$p^XxnVPM03ttcmZz$>OCWbbX}d2M8Z@ zh9>B~x|N`??PhohIum6A=zs&4PS+_O;AtC=PS+KVVLsip3qY5KKo0xxo#EU0^Mwc~ zc{TrGiSX#IJ>k*qy27P9bV^i-vTx@P@GTSIWu?zRdk$PWLwCG*3OaeZ+jWCWcjykV z4)C=ipb&|6?Y!U^Oe`CC3SGBAL~ zZuwg)L9B-VJp3*1L7KZ+8NdM~@LB*=uY;B^xP!&RIXrq(euWN@-H|XTvmjNE#Q$d$bLN+4!c7A*@^UwePksjT(4RN3%uteCm^8+-2sC09)UidIKrDfc%Negx^0v3BR@h zY`1`K=Lb;Q1zXGrvKUkg_PTcXc7AjynG5SWEu8LM>8-SbDfjD3v^~)8h<{k)M+^e zj~yXJiOH!+iOFf5wR1gsYbWq)x-J08@|>1qIPN+@I@&PTqtkWDG1vLI{DQ8lUN(Y_ za{$d+XugHmrw6rv<~s;q4s^$hOdq!T-?Q_(BX|*KC+Ly~PO76LQu!>g-{{b-=Jn zdQd;*g=sfvwg#y`{6hILX#BL4DfaM-iW`VqkGa72M!ZOEgv_6azJ_#JSlhlst{m{_ zw(#gKuXu6g&;S3gFGJ?fLct3wJvyI)CWAaWOFwvYgK+JS*q3WTi(?S2hcrn0It;uw z!Vz?m2DoR^{6+vRD;;;e0-ASw!8;qY>bEqr^RP?ji{=OX%|AH!+s}gLXL>~w@5?cG zB(pSmFkZ0x{{ZU$-5_mX_dplQX#WAt>OX(+c@}6<9?IHZK2XAHJ|fTwD;r}EPXOzG zeGNX}2DzeZ+o%8kVLJtF#bp>?gkEH30Jpaw>gS=UZv&|Z9Si8uYkN#ghT(YytRVT#{PK{?T3)z;C-0oOI5)FFN5Q>7v4l2C25!G2Mn2l>V1-p_x<~g^ zkm;bM>!7}CC#awTJGC3^?iat$2r_s;25>>;3~YZIq&Nb#%+N-{9)n_`@d(K0(T;JT zjyZVV5T=jNzBc}rE|39e?r#H^KczvS5i!tK44-aD`Ox|O#cdyH2G8!Yiq2c0uEyCv z|Nna)cLNXndd%?XbzxwHI{u{{XwC~X{_ye>xUPfrPdvII`{7E|A?3q=(8SgPL=MC< zUIsp);e~KJsDuEYhXsmh4p69ff@2RYjzL2)un{Vx!7k+ehwLEDXkI=H3I;@!U8#Xb znGbBO0BoSjQ38^RA6x*fIsgrVLB7C;3w}_JiK=+*1TNn^y4?jn^XIdBbh3V2uFt@)2_8Cx&T+l? zcNDa+1|kHh#QtCK=xzm9YMl`k9^JNkmV>rh|1aI{(QUf}!Y=Uvw?Dz=@_Tf$E(Dv~ z3m#U5OoF^v1~C^b1WC{cbGvN|K<0pqZv~qRN+6JW6q1QSEh^B8ZnP_!--6Og;}K9W zgNA=VODe$iJH+$dP7*lB7oiOa&|zD!F-BNJ0@O6JyaqbR5aQ`>$QWk}6R7Ng)$XpK z4PP#ukH90Vou@&^D0~ICvZEoRtLz?~bHR?rh=`ZF{{8 z`zC?1c^@QmgVcj|LcMTk{*Ji6sqqc&Ed7EFJljIBCFK^7}0*(3#t@es3<}5 zH|Vx)@U{qOc>oD=M1JoMOnANY#W7Ix37mgm{af&Q5m5Db_#vcv+*|`11eO2|hD3mB z-ePblfZFQLkkTGB2K!|iNRfjA$g>{ZI|^7B7*4*td7BY5Xa*^NVC4r=M+H2=1)1JJ zDM$|{erTi0)J~cGXq06*pZ;KbHNPww5UUc2V`CrzO!g2$mm{3w8j>K91jk$7Z?Bh z|Bu}iNLLON07$cL-4&pjR&ZOR`9DjE9B6xzq(|>m&;)`ODG3BksR)9Os^NhztB@+O?uK-vAo^jZb>3gW1m4)-!SDLvg(lcgP$LX7 zhqr=}zg3qBTL^$UTMZrs%rCC(=EV#ka0q}#QA)i$Angy2&JP~V5AK8ZSe42^x+tv& zN(>=x>YfU+lJmj}rc(LtsgUvt5^x${K)wWd_%-W`-^Z94Abp5HQ8tDbbH0NzH)H}D zK3(Jh>Y0IZKPY8`Q}qj$o1mHm(zo#_1x3nKQ18+MHnj>WnD@*iRkN&QI3+6Mj>(0*)CKe7+n zkBk8=pN2Xal7*lN>IV~lOAM%))(;wQ1Z8a>(1xTRjQlN~fB*k~c?u*4ns0(kv%U!Z zD9G^A>_4RNzX@L656SNy-QcBi%|E30Tg@T1f!z-c+n37Vy%eBv4@lhP$U@4kL!gam zpcAy9<(A<$!~ZYhy@lZuY@PQ&mxy&9dhzQWsKc}rRO-E430hkYF2|td9Jsv+I+Peu zK2{nSetWTXmMFu^%0K`AH~(PfZlKgg&>QfX@lrjH<|DAZ z+WhjMbCBM@kjMoM&VUD~b@zY*?|J937s#hz*$?hOeB`F-nch~Jl%egE&% ztpM6#D)3s8U!DPU@-~NOH;al#^I_=PvcttnpxR>AUdYO_yP)+39^DQKpvl7v;3f^f zJmer`EbFJiN+Eg6@|G-|Yt)r~tV_AL`(wU<#BU8YK>q62isQxoN30^1$ zPDda4RY_&NtN|KQPlz`?`vLvgG}cYwk-riRjYkYn>b1-dz# zf3lPaH~(ZUz2(vE_2Sz>_EJsIF$N+Y&95XtOO-V}x|t3`^N&wAqhs>}dC%q_QYEYT zdzSv;=p*nt!VBw}ASdpi{R>LOi-zV{gFcT@F12&%5xqfEvo4miJ0b ze0ptdJHdMhUJJtVyQk$p{uWKp*mk%1i~09JvpC?hi%OqC!q=y>^n^!u=m{6_Rtb;J zn=f7+`2QcY6WmSSW-J{#!MfoeR)A?KfL1*~NKqYhM;g|0~-sonPzXdj38g9B7 z$n@@d=nhej`Jgp!ko*G58<08Y&d;FPdXLW97oa-2M8u=F^o8LiNYxs)59B)67of~r zbRANJBo%?$ilHxjIv;l40|msxztH<9Lc#YfgNrtg&ZjSCf(8y?@d?gf&5xKtLp-4% zi{S-B^K)?8yj|+l{EMk1v-uZuN!32kR$6tVMSBJE4K;{%Q|6(rn@M!+QT&lAVbOn<~uWba#G-Zfsuea?3-FW2D zYs&=^<%Nna*ay1o$D`La1tj`i6>RhCE|59=t)R{L`#}3CJbGv{E zK5bBUx7XGOBzhbwiX2|h`6?e!fGmf|BZn7g_5~JR9Z+dRctH-L2PYMHGEw*FwSA`~ z%K%OzFG5s6R|y{npP+W{g;@;5Z+W160bh|^de)=Ywi~1c6nQTcAzEIaMla7H-mGfI2{q`$42@>$g%< zP)^dg0?A1d`QQJ$8h!)ip|zm-w9eKDP$>bLtLF9TT?*nr?%D9^eCE>m{YA!kP>FK{ zWW>|U5F@VUfik0nPj@!xptKjywu1IS-1h_>O5&j4(FtA|3ECp-+np!j(b?+o|Ns9N zg&RP}js$~t#qhVVbb<^hlKAE(;lSSt>bm=M{`Bd51kJ_wUoijr|KFvz{D0?f&*Wns zy)4I|ruuYiyjTvt8NE~t)t`=?_g;by+y?EsW~~OzKS9p`1g&=R=w<*N!2~%O`rr$J z<_G-XsiKSE)X4gDDrgwzK&hrrukDMU(un@&KG5mopqanVjG#sk>mG>0lII@1r3ZX^ zU3cvK2U-Mr$*1$ZN2lw77daZg{)5iB0$J7q8d34=b`=1%WI!i)f^D1%O1RzN5c28N zcnLbn3#JCV&fl}!4SWK^Y0#n@!%Ls}>%hUsFXk=a(YrU{Kj^ds5DB_si(jx8RBP~y zIVcz&@Hp-|1JrZn7i5 zKdc+igXV1wUP#^q*WIP3Ji1wJ&w+h+>@UoBcT!M-5ZoRN_2?Dd0*cIDQ_yl9P*oT1 z80OP!`sA-PgJY;qukI@lBgCgyb@pFr2Jk)Iy|TR^GeK?5o%_W>OZ0k89YAJ)_D}2= z2OYHF)2q7ruQbC8$$g+!(0z|yS$@z!4i}hvZx{HMo?hFGi!ux^*p$JIT$q>zNZTi+ zU;n{74=tyIj)Ae&014iO395ka*0WUs37&un{s(QV=(Uvs32uf7o|*>ME&vjorv%!F zB|HD39)nNkx1A6th)Qe(r3C921=1i{Ynbps$kl~6uShez2$lZz-=~-N|1VHDTJHo+ zqWN^5^XL`rS@Qq?i|Zhby{tJ%vY=zZdPU>D{Qv)ACs;3QDw3>E=P{37(FGvAvq5^h zt$jM5flc-36+OA?|Nj>)FyVJF;ifbH|G&tE2pgXC=oMw04f2?2+8=3#7h9#kP6vyx zgoxXK#B~)B;)&qUF*O8+s+I!&0Go`IuCzB6#8_Ydm#ccu9vj{E_Cb#BgpN&tZq;t z&;<1h3;7I;F{ID*x{!*|k2NFB@t4ocR; zXAl7)4!Oe5{WmD~Enav?{`wD1s-}M?gB)jT3UYyi0z&)>L|hsquA%Vj|32tiGck~W zx;1EAL6+gH9)sb3kIq9L-Nr9Amq;?enkxLDgB+N^ij4PzZju1qd_M`K092cJ^x8i8 zCC%_+;cpQJNOjk18_f$^1Ic=>PoLpM=Woy&K-OJ-`e;4R!_fUiJ3yoI(D8jx`Q*_n zdeu#j!SLHlIYuVr%|uZ3p&s4l-Sr%xwnc9esOXvj(u`cbb(?!Y73|4}C_rgHce`_R z`^$8POL%mb3;1-icOD0sl?YXe)SQ8~A3>WHJsRJD&KpM_r+8s_;KiHYprc_UK;7&Y z4S$&!x~l~|dbfgRZeM&%{QkfB$A8e4kJ1C6OPOBi?-FA`8RRMz1NWm3dvq5oc=Xyn zKP1QSLaX8b{}-m&pxHg7`G3%i6E^#EknCqbwZ9O_e$b^*D_*SMiQoQkko~Lb|Nnon zHH%35-~2-I{~uKUCm{U4z@xi%#tVG{_8&h8@;}IaQ*`?sL%=l<_yz%#8*yG39%z2X zSd#8>@xMoB?G4a~OT;hGk=hBMRm|Y{as1|@BEnRX0y^94{tKyIW(LRZ5ETKB-qH&m zy|!7PIr7j8FN79=mM&E2qD(`TN`fx4*#RnF!6P;kURe8r?n^oTdeV!Dncx3=c9*Dt zVy+eB@`5^0xy{;n3S7rs`wq^Xh6i5!h(+`l!Rfm@T)?BdoWrBr{^guB)bS>8e=-#6 z+vYbM9+uyW13f#xcy?ZWEe)E71FZuDFHIDB@%O*S3=hV`K9-M*^%|`8OCNjmIy3rM zJ}44?EeA{Q9?b_BJuQ!v@HSZJmwfW*1gS2%1lqX|JJ2~6xypyuzexE9+%}j2U%w4< ze<;N5pgi+83zEH1+xOk&EZz1X>2)bkX|(l&-Q^q*1-)4HgKB)x{YQI26(XpU3mPQ3 z3|_6x?a}%D#qk8tojOMyLECx%gN6)BxIyv00W1u@wkh-nB3Zut2~L(Sou6Df-@VAr zfuu^lXmG4T7E8y%a^TYaattq4)S$)}I8H!o@;y4g2fy%2-~hEIKqrp9|Bgs#%|DqK z9J^~&1Um1%2v3FB!3DD;_Ao4=n1C#B2U`Fdp@Xy+5#bq|2@Nn<{DH$8npi*~s*?aw zfJ^=jmiT%(Jr0zc5%z(@*RvDc`+^Sa8Fc$e_;jlw7jK}urcUy=fYxJm+wM52$I$wp zzjX-%1Ly)A{uXBNm=cQ$$YUHHJI{X)e!O({5e3i+Q_!@;!GHE1-(P~x)e`{qBRmfN zV)xMe1X3*F)0?`%Bl!|YRcGi94~WWcX9=hpuvF*?(9{5EeK~lY<@XmRG2j0?b{+*S z0YO@72HwKZe8j+|^96LdB)F;T!oaYT0lcF9kx%Eh{c}LQHRcqs0j&orcfW84#gBzr z>Bi%%cTRwAjb>oz4wh)W#NP^9b9b$GTVAH`{-d|Ltf`S`SA9aVZbep}r6#xA{q(133dwCVPe1ph8N=1@SjQ|+|EB_Jc zLl%~yVD^L3N4Go6anQ~746O(1yh9BSfU7IWc>QZ(==f(hGia)f+1i<5P2M|ZJ= z$H50I9^Ew(3jc!zS`Sp-dtsRJ{eL$@r!xnrPBJ`j^0487!;tk~khSB`rC%H`W<31+ z-vd-<9)6K~=z`S6u!3zwCLQ|wKWzf2bK3!y zfBl$W-hlyhcb>!{Z~?mJ6SM#YrTZ-rpgf7_UqMSq(AAir$sEtlFE1P~f=+U%244)t z`$BjrBZJ3rXVBh72GCrA0z*m0eo#Z>g(ou;c(`8SGk-o4zaYbB{(LV1enAh=x``kK ze!&2cM3e!)V1&VE{`@2de!&EX&;0pW0sMj)0iXHvixT(+3lcu_=T{Z*3sw|-=Fe{e zWi5|RX9a%21_%?hLJhR`2$H|S5z_pIqxFA@dh>tAQd^I1yBAC`91NYuU(8Pb{=f6E zN3V-CBPiTYf|@ce450ga8^JQ2_g_?`gH~q26@WK;7=C*pxKM%t5wo_@ zSBNlzPIc4(h5LdG5eAR$U=EL7(^_F!29M5z9^I_nhe5qEP{%Sc9CROG=kXUO4*dP! zdZ6?SxQ0V&{ea>Fl)gaaAE^BS+K-7`K!DpnpAZFY!xzvwHm#uP)9zpak6!4OO~}-A zFYDTC;Qi}Wpk69;&-D%l0S3?o6AYb@*+a;F=NIiWL>WLWCj*b}y`ZI@-CIFhM8CB@ z{P+JqM~VK6=Ns_1W47;kd%m+kz{P2;9p*vWhGxWkYXAvg;)&rpE z=qywg1(3%XS=|%olP~ijJ0m}2B5`dxkUubD+H|VsaZ=fP>>r{{h74sq9 z-<<|8A75|>axlEKfei73^ZmXBZHx>ru1pdI?~c-e_~G?-X!sd|jSFjH2Knrz9%!7i zI~ddgmEJDL@ZwzY|Nk$3#(@{BA?lw{?ERfWSld|W&VhNgifeh1vj*N0PW`f=D6Px6d{}m!tfn*e~yAq(LVm-DxV1G zq(4xjDe3}b_@(pM3x5s7!Cb2kf_jYiU##W>Z|KqmW!296FLaQURFy!KbU+My;lR$o z;LE@GJAX6iq*l5QNLJW@kK>g*{lVSC>N9S>nb3iV6A#fekl>lFz^wda%0qipH zpGU80>RlOz7t?t`+fYC|{Xq2!D4ju$^aPEwbsm4Q0^B7z^pXRV8aj`^m;vQygRdic z|Ki0tad6Muqt~|jwKN0dT2;dXP;*|Mlo3LV4};2jP>UNpR{&~jzdrl-f9EmK!h-)L zNuZ#Ky72eEM|Ux}$GeXi6s^x+96JH>i8JWpAy&|3w~`=*ACG||8suVdqYRQBLE})J z_g`E!W&|hivq);d^RF+mAA;T{s#c|Dpd3>afQBo8z{5IOu}Dp(7wedW<>ngUgC169w}?H~a& zKLe~7)qE4EdLD#&1(hFYu^G}Ivw}S*|HZJ{DyA6p-xuVhr)m8K`;;`xcHL{vVvOEDu8x6lhQ$lB(u^L2K^7+S9$JDG>8s*g%aE>aI|D z@&4QY|FMYhO89~ZUlXW$9;kXgkM4p3kM4?$*q5Hm#TZ_gfE|o5p9QM^P6#A?Kc{Wehjq8{B0vHaUEcpQAeV{m};0<@@! z{frWVi270ms{c?`{RsE7V7mYMCy?h++`j~> zzXqyb)}y;Z1JvR>_`Y7}kjj@7sD2xSehZj(Zn$;_ zhS-;<{D1y`5sI!~1*-o~5XAq=VE=~JPy9%0JnA_jahhT@_#}JO+(&|1LhzU|5$Nk7~}DEfc-{rvx;6Q@D? z;RY{CWnf@%@L>E=!2^$07Y2sdmrWpZYCoXF2qJyEK+ThZnr90(ul0Y4oCk`b@^C{T z^(FfJW9&;QkUgU4?tP*M@$a4hNO)C(E+Oo-wc(UuKva+=u^zp)Cr?W=*fKaUFqHUv z^xB?!1mY<$FqAlY^xB>U^AZ>sKvzxJu6_cN6JTH{QT6Dx?F91{Fff#e+cF#gl?S$l z2SEKn)+LXm89ex1e#E}CQxs-+QTZNxcrnEN;Pw#g?o#Lwv`=rb#EZqg-~WSFw{;%# z>^$;f>n~vj56IE#B`iMO#S*@)-%5;qTc4E5y_k6eG+c7O^Vkdd;~*BOMFeVlf%BtJ z=OgeD$=_cr3jhB9^(Bv9+vwfW3@=J92{F9h4-5a!r=b22s9gpc3H|&cY(J>I1#UU+ z-VI_N0*A9l>!ngY@bC(x*XP2(;M1$ysSBD^d+yWu?nRtGBy`<;Iw9*R3nF~F6B1sy zfy6rxfmSAJ`&bu5lt}Q;1znKIzYW|<^yp=21r5c<9-aX1!1!1vC6wNMJ@tj(JCx)C zpPzxa*QZyPS67e0F~q0y9cb|A#eF}p^^m&-Kz)I8-rxVX9w;^X<}Be^A{7m;uV5px zY2fzYH)jcl(r577IzeFuF89EJ_WVUJ#KaOOm+k_Y7xmuX|2tY9D>(&~&4;BbM|XYlav)kb!IJj4YE_tyoYxZfTk z4|RWHAgcQnp|W82UwMb*eir=hmt@4@eg&xe*>Sr6tQNBS=lg)e7vcUsPZampL*$|E zFZ4upeR`S+|BI7FcN_q`v)$FTgn9x4mYze#VvKE|DY z55D~WA2J>aJ@4c!bkL&tpCErrGid#3=XKA{f1o+PJu(cAonOGG+`QnF5oXv28h8WU zVcL24#moe7-ygIdz)u-*7!d0j$S?udKe+Pu;QJ;ZwZID{kXq10p+~Q2LMvpX;@)4- zs=8Y)ozFmTq{63|gNhhFd}p%tgF_AO}r9;gHYtuRF! zfrYQ<%k}7H)hmE3`%?1hRb@RY&5$->A829#G#Jc$2jnYO9*ByP=boK6K<8S+`r}ij z7(9AwA9!@SK6nw4CJeel=mF|fwH$Pq3seMy_A3Z`blzxwB=6Dui?y`n_2m~$KCt-< zaGi-fhuO{Uaqxv$^MiWF&LbYpKk6a(lR16|UF!9}R0lLzVDb{Q+Ts3-niayJRmCMG zpqT;>_(guI(!!Aa+b_H?{sm10xmZ3ZIsRhZrN93{mDXO65f}M|8CnmNZglB<{(^PY z-~TS1??Gksua%%m_de(X=*~kg=71{d&cm;}q2miLxc7q0JMuCQGzr|BnSNfCufaK#ZV)I~Z#V^)$KbGlolgZxj}{)?;>eMB z!tlViV+#B&GeP^DIxlz}e8J!Rpx*Gd<6cl|^6gC%01c@aznsX#z%aoBuE4|caBZSb z=L3&!n;RaTwFex&9S1J}{$Hx>*?g4Cqxmr7w_^&W=RoW4Kx$1ryWJFCUxfPGqnjOa zNHA;Z#TVP3gC?$B4|sNq`7mb)ygrQZk7sWU>wj0nCohbBgc**z?g2RoanbK#&t5ms z{N9F_{h$GFc?ZzQGRXCwmPhz|!RNPjyKeC6ws`<|A*Tmu8j+Qef#C({Y=z^ldqDfN zKy!pX-PHmVe?|@zQ6xH!DoK)w}K8E_O(tE;O~77Dg(OR6kdYPV1l$SKnZ8YzQ6yydrNE~ zBb0|;R6GC~8+yRwI}-z_Wohlv9R%J`V9{Wu&);$rbQF;V1AlAb|NsBNlQAB>rZH0> zIsVO0VTPBW6{oOpZaySYdcvdEwsj+@_;6kEV%7;EQ0`jsdN-*3fry6^6A#c)*sY+0 zReV76TE{^ni=ChgL_jNSKqIU3_kjk5T@Snjt@4DpzuR?B>w%I&kKWn?FB+B#GrZge z-kAhCN2PN$Xr_n313aVWdID+Mv=wA>^AQW!5&-bwUXc9{KAJC}<(bf1VTPA|VADY3 zjNR@6;M*pk{(8~;^#A|Y9TPl|53ecJ_h>$10h$PbHbOy%kgXB}l_spGSAjED%yn4C zdSvte{|jFal;sbQ_HOGX(4ka6JUYL7SbivBeYxY$|No&L-K-rDBP3x)faV3~*q~%j zaDUpP^ZUyd@E$A&hS28YjG*RRD0CA|^BeT7MwZ`8b3A&ZI3U^WwJIcBJvw7Ayx<3K zX=Qfob!GHuKFr~`7c}1OXnCYg(WBcMoZoJEwEi!-439+a(&L~U1`aQzqbo|qk#-?< z{_6Y(Dx!i~B^X}#x?}M_$o*4(gQ{dm`R~#B1HS$ubmv3RW}eQcpbb=>onQ8GGcYiK zMu99mI%{{NcyvRKUiIh^D4bZ}c zP|$Li10KD$vu}ZRM5P|+3_bDUe+?+T#qRLvjosnV8G8V9=oH#q6Zo`*<|7v12#-BH z0im>Z$BXmeGu4lKbh_?%VGJr?J6(79^kztSd}jbgBGXG@HqIx-sAg)<_98}1{=D5{|`>jQ1d`ju;A73o#5$E z=rS{8?|>#`Z~p}~lPZ+JWoCEnju*QoqfeIFLnfMEIJkWO-!0+M+X|Xpg)T?;=-vzB zy%72NA9MhJuWj^faN7iW{_l&N$p8OeOm_jTP5{?$Nd6_xebxx~K^CP+;dI{uXWZ^9 z`2ls`>RBl6I}`E$|BLU=%0t`G;e%^ZL(>ZA4mRCU|_(Lf4rQ&W8Sy- z9kl-rZ+`v!3#WYvc=VXqp8#I_emRikzr{bnX^W@3w&BJ1 zdmwhHFgUUNKqMBBccAiq@DAq`V@*EWF0KUKg(m8hMZ0Eq2~`sGEo z<KXs(^W2$^NW ztfso`$VzX<2=meF+XlSpTZ%mU4u1ou1M_b1W+L#3V=I_I<)kYp@E~W`l`5R{=)3?v zuMRO~^!g5{oetLU`r?Z@wkXkwTtDLvPiHLlvyg7T47v6n{t7QIg&|>pGJA>{ubXU; z`tyX#<76!6Bh7wdnjb`(`OH|%N1DyWH2;$|lKY=Jh6MZcE(JAhJUV}a+JlX6K+AzV zAZ;nMMwCzIQqbPX7yKVUgA&JKZJ&ZKpr-M27*}wHFaxZ}>pcD<$R51tm%jzn$n@xj ztwZdtL99cBtUo+?3v?b#er!V;e}3wOH2(Zt(8-vk8$b&P)A;kj^>`Y8e(eF!3dA)2 z{9aJ|G>tzWeC#M_F(SVpLmGd+>jlu7MbL6Z(7Hs>l0?vIMA!;M#O{q)>e4!ocw2unY(2mZ#U9FC;BNYZ^;;c=X!ZO^{=F z@zWP+z6!a1X@2A20ovZ*8F~OYCc&K^*Aw8OK3%YrT~9zG?14vj?SU5(AVJVE!k`VH z)gM8FA+@0Byzn9q!~rc8>~y{HLU1Z5{e%4P`rri%%#RNc(U))$?8g@`!Y6|LDCW_P zT-Yj|1V`WD7dy;B9`XfsFF_+Ep8awR-3Bj=Uj6_7Le~N%f}rP7!p75llHWOoc=nbu zd3Ij$=sXqdaqt<7Pv>io<~JJ19tIsk-1zT5GXn#EzYTaL0BFz(v?ddjDHuRQppDNU zi!ndqUWlm*S%-N9wE7KlUV3j0Xcgx3501y(K{rP;7#?u!jA!xe443fjEEjNuuF1Y# z7YJG}Im5Ht=E#e^uR%d_{Dta=|NniH%{_WOVA%k4ypD&2OXnw#){`ZLo(G??cz62P zDR?BG@;LaA#jDfBQlr<2(Xo@=@pP@3=E>!QmDI^hA)j4MMsjT=z%e2F@^Z3i(;87xQe-JznB|epr;dL8${?4P>hvf&u z%L|~LmI-Fx|9d90gVJrU90O?mxmS0Hg~kgBZ_ro=WWE)Yemy!r8J+}>)7zc@{~vry zF}!~Q9!~|Y2n|4vV$d$2|BU>7pbY_^`SaO4n(bJ6gw>O`HT%`IUzF30cMU*LedkH*- z_!4vqEM)x4@X||B@CY(|Jp*L82UI4bk6tzZXROO`=}rIV(QW6^`FRI;`~-Bq73+(I zy5RNj9G$Kge0sA5kfqvmL2G7TdGz{TaOr&3>3YSZ*ER@rJ=t8)h!@HMI-r&Pumg19 z9+_4o!SG_D2~vIG2wg9YvQGDf;epowb#@-zcA)k7g1Q_Gp1mO|93H*CPkM|0gU%l~ z_y2#V>ysC15NnaT0b=mk29TwoQRf$mAWLOTPznTC`wKiAMq>Ch>fj8YG#xDA1B(7y z@Nw}-D}YO}hEG|c1jCC$W75Lsqc&#voP~rB8^l`t;ll{B^p6qN@By{oz)hgk8y?MX z6g)ahZ+LWuUO>x2KAou#UPyr^1A1dGfRCx{j0IH*7hbS}1iQgy{e>49phB#>7Odh$ zG>Fp)s^~7f_}?cC+Zy$y4>a?24|HwFNmbA!VTCMe4X25^vF^oYLvST<0W`ko(QC`n z39bZmpZx#-Lc<8ucR`d7(D4W&{p0lvv?CVHKc*l-n15!x0_AC_f4V^&sDJbk{!u~r zXQvJ^{&{SG;vba`uzzA7|Ns9Y!Vs%}f<1cYf*YtP-CDFL^5~okK767CH1z@6g99GC zdvO&qeFkfqmi0nf99uzZVf6&$6bp}DTZt2(5COL{J)mbX)>4s-~E zN3ZR^r_#u)Z<0NFZM|23*3^Jj--LSf+WPDV@j!DV?jF6i{$L(x^^K)RudVJukQ`|B zjkZUxEjO44T74r6TYa;6jx^}nW3~N|)i;oF_ZPeWf~H513s^Q#Tj=EB7mDBzg^qpN zPHvN9c=68#W%M7>egmaK zJ3u4nknXc|_f$}L!iSR=pmuMOGBwPn=K7!n0|>Iv`xLk1q5wI`5=`Coue zhfcllBKa}M#h}LLi5JJ8Lpv(2CthTCLy|)2h0fR;P(OI|+M0me-06DZ#qM^{(R|3^ z&FRs6!~k5Oy;!G*Qko!zFSt<+nt+M^51I!>8puA3w1WszpMml#X+F{6nF4>yd{Cpk^#Fe#Xx`SRJ6{5PU92J-1A{C7 zwp<37t6D+Q9^I@7eR>R_hIFr~!EV@WV~N85|KRr7Y+0~RUV?60;g@HCctUl#G{cKT zEwCp_LOr^jIb1rQfqmf7dCQ{{e9h#Gji4OXy>|g<;-(i|1iZ+5^8bJHkN^BFUTh2u zjtzgE`CE!v!7N|?mOu#0k-r6WBZ6b|KVANoR#pb6l~uc>8D6~81Y619a+Luj{tUdK z#-sDr3sE= z6TV(?7ic>RI5Qjmf6<=-I`s}*PJwzweW(9|4vEW`cnLZ>6H=Z#_PRZ2{t?IDp7Ia0 z(7N+Kv~mE5sOHf~PvV!NCI#if4~tgIoL^psS=jn)ibCp+UziUxIe^f-as17g{e) zf~QRQJ2*l2?|=j2CHTDK?rILO$6l;}Dgd1o`}!V8qX#s;>yYd@13Ky%e9{!kK-x?2 z$u&rB^Lhk|I{pqm(1rEgV0VGXVL$YR0r2!8A^<=$i``Q}vp?`E2YJTer7+Z3n5R}gggEf$-~a!+=f;3G zOPeWy2Iu)(pZ)#+|K&}vdZg)W{?;&%8@r1+pb5nAKY04rF)sFH4fvpJgu{H095xGN z0W`#rhVEWAf%{YlJrYQI(vb8Z4JW?zL(}u*0U`j5KzdLE0C`CHr4X9l6`=JVNHxsM zkKpbIijN`Z8)NhFtcRf1Bf|AjNG@3cI-(fWCCHOuFFU{%A@s^2>CM5^i#)OQ(g&&+ zlBhxRjjadxJ4`_5#;QX-2uaR6zeD0z5+ua~m4Ze7n)`@w`}O<(f3$>yJhk=m7PuEu z%>miBnFKZV(C`2MUv7mu24-yNeTbb)K}JH-l#n_kO-%x+Z$(qD3RPbUQV%{9>_yQL zun{duAoZc(b( zg-_>F&@dSEQtuZ|HKGhJA-9u)*6DXANW7j89>0$62Ce^JB*gG~ibpqVbSr4xl;{r7 z^08jirZdR3Mur;xNbs0d%=&*!j&_M~=0gyu#ia}>2R2P6|DL(V(H-oYrWVRy005Xe_5r8&p;o0e; zqTti{0NnY2v>)K@SMZ%18_>>(1TA>U+JxBg{ckgf?W_Pwy(JN#!G}Gdg+xek7!QiW zEa(J};Ypv~rQo&%q<%+qkG}2z^$?bV8y7RHz{(t`)2S7H=qj(YsA5`P$kMB$I63iZls)1D&x_31T;Sdb}aPNDMOG$wwV6^ z|6;!aT6YFz{Rc_?=_^-2SqPM)KtmcYOmBj?_dR;&f`c1!nfQzIHITj+xG{|g{0h*; zbrFVYMC6viw7qE|G#)GkK!k2dV-7(;2mgz zFN*>v0v1&Nq=E|!@YoB|R2FCqKSBbOQzAS%=YpmXL8Ao_FQcch;LV^AfehxDSAge7 z3_+gD2G@+pp3{YR4w4@{dTp)Sr5Rp?%oAdGJqzLClu|i{7w?V#|9|mI4t;zX-2a1| zpM^Co!IzLb8D26xxo;si19)$CA+Hp;e!2K-1!GA)%IF>R+yh8j^5}$}W)7~OK_}sQ zH2>f(-30Q^nRSS2BVhv*18Coh2vey7_^2f4?CFc+B9KJu=+Pb80NVQP04{{?zsPfB zW_W!C)IUMZbHdPM?9q7~l#*XAW8`3X!6=7x9v3+NjbQunI-kA(UFHf}{fOMyt`Gz- zpom3U?;QKGO8h70dL-yU2%rVr;9(fhYReVK!!Rd6t1UxUcyxwtcyZ(6|NoAAQ^2Q9 zfF>9~gEA{#7+nKJ_^o{)anLDyt}Awfm@l~A2r+ne9`Wfdka#US!IkkX^fuHW6JZ9= zvA z3D7Y0(1Y|nJ0S-fKu%UGQhcofUC#`@Uln|=+OAnh=c=(n&Q)thoV|c@TpFajMqZx_ zw+}krV)?x|(WCP>{+FxJyE<9m);Kd#hP=#gf+groR@FKq-6xOYvyD2@oS$En(Hk+t=^vXV1DGk}5 z0l5{k^Ztv;E5Z9sra%;d&KKSaI?4xn51mKvRs~QOwsR|}N#tw!m%sTXxUC6pTY=_F zyTNzS`*i*T9iL(bs>nJIdUhTGolB$n(#P^g5#LK$CI$x3VH&=c-%HpW8|?H;K6*6& zWaMvI4l=6wCsQf6V?!;29)C+3$p77~P+voO`xY-A$bnLMFPPhT7a+yL>GzvU=sYY61Z z6pwCjkioMw=zQ@FpvKBt4RCj_gmpu17wzWofChaxgGYCO0Ce>?e+vW1SC$v~dmn*SJ4kr+%5Z?ov%jGD z>NOGYfTRLY1S|&Ci=D?jH1Bz|9sn2O9{esJV3Edb0Jp>9g~op9&INF4X#Mo}|9@yO z{{W3=G=OabN14a*R*C=r|AYErFPK(K%?9R)l)uX

DiV6F z3oU;2f0+grl)qmJ6ei7YI1CRsHrS{zcy!+6 zpK`#Z8=Px>y21B!`ENzBBcj#80aW7F}!s8`~N@GCfC-J{H>)-3=A)r#J>M`1fS4&oB@2zKsQo-!QW~P zwl4Js;%Gilo#D}ITT>^^@M7vzA%>S)pmrQM{y}lud;lE({H@HO`02F`0jbNK3UUxM z9f1}#gR?Ls9T^^Yc>{6Z4Jhn;!M(SWU7$b*vwgb3fd}f*w1RdU`E(xg=sfQOxy9F` zvlkTkFEU#|QkMt^^qqoM-GL6^2Nwog9|&Ig{BcZx(_D}c*aP(ANqd6>T?n2CV_RM)@rv3$VaY6Hqe-L*47 z$F76sM?fakOF#_<8CWmz;$}O@z~8=||2!@47xBNg2ep$x^`ejE=MsKMy$Grz)qOfY zPXNtlbl1)>{N~wt&qwo@;q4b$jlvAC(_!VetKqj7FGBzRhZfS{)?(*zpWX@ykM0No zkc|}*FVfrp{`c%(G^su~90%|yc&YQjEqxlQ8IL`3f z3&uuJK672+(_JBevGB>Kvvz?e<9Tp)dIfH#`gXi{4?1bP+qc8V@&|uY6}Ucr|KeBv z-~Y`I{_?j3g7y&J5n*ER>8)Mh(ObF#6y&Y9OAJBx6uET!PVwwKuoD!USqvVa+gbm6 zbe49!xc%+_f5!-q?$VCd1CEjWt(UxsJ2HhK<69A#kU?Pt?}rNZSd%JT>Vp!Ee%s&w z9+rnoi8zc9QH z%7fr43Y`8Ro5uKCEg3;a(EjIdX#h=GHrVTzaCtWWW#Mma0HqL6N`e^6k!1flNahfwE|CE2wb`>g_|?weWSGIg2q$UC#_qZ=b&dbOs&hm=N$; zogyuN|9e^05F=P!;lgPi&N#hyb#47Lmm1`PZyA3+5%whH}q zAfo@}(_JC)5_C5lw4DLw?*qpvIKRHI<^!Gj+WbR=zvVXrXk{-Gf6H~q^?0qhj0_Bp zdq7zTWt%5|t3N1`8jpZ>U!e90CxAPU?_aP!1D%d?{Kelxpkfju4qMVdlUSg2&1eRH z1NjMJF!-JU=)96+eC$gj(6IW17rQ5e0|K-=e?t?P`C`RESeUfF0oAS%{a|sBlHR7j z|6g7Qdl#~P$fJ8NsM7c71@}f?tUU&vWa!}g4~nK|oi}|tKY=GS6`m6>sHe3R;yT+Ysd5Z2cGMmMxJBFWw=k#!@FLV?z~DS!rB4kIn9?(>phc+ts&e%>T#!!0H5n|=VreLouh{s*T9 zg!@4AN~l9ZSl#!|Q-a~eOKv3h!OA1({cE5lgC5YGv+yl6StH&pkEod-jGgdh|N~_e}okVR_4k-|2&A^KnL>&L18JU)cLF z{s5g~X?cvlpNElw!L{`*e+y`Xy<_uVM#%nikAu&c9h?8w^S5(?vSRZwagWYN9#BVv zPS%DkX#V8U{NRI!v31F(HGzr83t56S|iJ3wuw&ciP*fg3_7eS#>E zTYFP)VA*%>YWV*psEO>+9l8K~RKxuj8{dKRAn5Resqpo*o}G7IxAV(0fM-2DdTpm~ z1ho%ufNF}vuP1<-yibQ@;5DW9OkApyi~Xu&mQ= zy;LIV*%{BV1Jr_aZ2rqsCjqHHJv(KNdv?Yg=kRDgz~pFowEmrsHG$g+O$oW0o+@Hv<5&;*9=gNU7`aj;Fs`x z{|_1)b@1pePyp4r!dw3Tf6>SK{eQGi=L6Wl8hAeLbiOphizjVD46l!Y`MW{u=_6zHiIg;=Z4>2u&omYod_!c$%x3~-{2GaU!QrA!VWrf+;r}C8HUb79^I@w zAn$cs7#?_`1@aWUy$GuR@<3g`(ibldw1NwO7q2HF+8^-v427Jp0E*8)pnDWNz~kr~ z&A%8OoA3UAAyWPKKj_F8m(G`vQa;+F^AIQ+Vqfn33SI;RsZT-X8J>K(6!rW~=zVgb zAk$%2%4&eN?s#>&qeQ-o(H=&IKv8jui#4T+~s@L;?F zYNA8hkRG57G_Sx*a}R@Coa?|xhv=6I!OJsH{Q#;KzJqju_w0Ax_w2m;;>&DM;djhK z6I5$&@Ui?{#P>QBbkA(_QAS_OcO{;naU#8v55AUPi)~#E|HI3V?$8q;V|+T_gH`zQ zyZn9eycsm4?a6r5*Ya!8T~H;Xc>~lg248mo^36+7s{`B*eR2BVxBoA%LW(5NymaU9 zmym0S5#f(ihk|SQ477GUsCYTS{l$@y21l= zY3M%|{+7j{mS5-b7rPrkIU2mn23+TPbUO<`PlN&0yZo)7W;6Jh7*OA7F1YvhmcIpb zFb&AV4E!yfpoy2x_uyVrZ|Me~&WA6qfflB9=Ylq?fJRC>>OiTXxpoB$f9qf8-J z*4Y9jf#8GV{=ZlTI->6)(gV{Qv**=)eE}C;0T1t^l1SH6gh_vmzO@B#JeV<)_@Xys?{>5c_C zuEVF>cZR3sVgA-?kjpzS`E;K1>Ae3!_2;+$pr8T`go4fk^6AcPc&BC)4rO2U*7rm|G#hN-It(i*OBT+AA1P~ zpYGfluW!F_WQ6V)0oTPZgFwX|xV{9fp9WQl;LIlA(OLT9Md?=1lJn9R;G1GW-9!dZ zM(T8Z@gf@3atDqVz_>0mT-$BKz0H{VmUZ4##A3VPay%EN<^9rb0Ea3s# zJJ|Y-zvTxgYj(@|Fn;y{omTlBG#@GQ6jVMP1(#}|ZXm4uapd3T$_N_Fw$U&7?A!U? zMz2&5lnxyEx4DDMSsT5Q&#s2wS`L&dzb;CfV51MJkN<=AT6NxgVOI|+sE#}GZ)0yc zP$FofS9;gC^B-srHYi1d?yjyq!BCNmUiT7E6D_w03J^y&QN(d~P}NAr`X<#9-v z&F^~1qmvPI?2b?82c%r)(G1f698vyuyPog>owUTj06Mvc!I6I(n{VgWmyX~(?ZEJ2 z_s?(tJvtA+1YH%3wEi91egai8H;{`z(9(<>pt;pv@Mf7CFJ4E3^Y9H&{D3aF1|6`b zUh?<9M{nr^a4mo6MFnIS<$*`*r8;#`i4WeGa_q&0T##1ePM8R|WpPJuuxbvS!x2?L8KEumjQ^e8kSAaFWK<0qdL&|f{&hL;zMuUAo zW%3))h*PKU4A6dq7j7*e2iJo3j4pV=83}S$?FrCu8#CyFan}tmLW{xOo*mGVn!n`? zs95bz2A$sp;dpd=3xEpfI?v8?rQF@F2SCO5GZyefnMbGZiWf8ozv6`(A-4Rlaf z^M4lp78^DOhHl>(-Ju6OJ8ys&9)d0}1zj@g(Or51R2oOk1a%g{XQ9q70u5X;g9css zTNbf0F!;b+0O1r1c=wu^_;fz^wER-U_gWA%&j>mn%JN?cD`*_)6X<{=-_G|h%BFzK zJP1D34AM^U?7ZXId_;o36}-H-*LGW~Gy~{Zv@V+20bk9hpd((R7YZ|Y_J%Tgbo(Cg zvHZl}e2bBR;TWU7N9Q$&LeLt8120U#wuBz===NO!R#pvC=Ew-j0OBo|AlE+mcK&^B z0`Y&tFMa+Nc~Gs@9lFD#8&s|S_vrLJ@S+>kaO?Ix;4#CK5tMDkTP~HzHT=>mJqu}C z^|~{HrgvLbgZ$okyya5qBM`qCRE1jEn);EyBE_IfWiRmx*cA< zE>?^_mLH02LFI@q<2N7655+$qjeL+|pWbAN7p9Bh=kI!ShaLbm_MvHSBO3#QXD^S4 zNAp2OP*i{pzCHiKlmRq8b>E}&pbz6u573m4?*SjpXD?*I7W*D(uw?WA)f^8zn(zGw zr553r&sZ54K<)nkMi0wtB|ILT7eL*!_a2~&Q7jL7bl&Hmasafif$<-lo@fTN0?z zA9~=$=}J(eKlH#$Wr%r}e~YAjd-EB=vG3dY{^c8xIHJGM37Sp^Wq9QHUN#RDRG|la zJAZ%@q_5@+uU;1>P^=g0K_c!DxMc=9Rp9)KihrQW9K=58!+7u*qyFnYczF&E4|w|U z>2zHI3QJJ9ybwh7lTWwn3WUE}Zi6yYFOSIUesKP6_@xKgchUe#_@MS8C{sNB3##>w zzkK%x+$906cWQpg=-GMJSMw<-)4iMqTc->vdB8UkL(2t7z1UmJ2s#MSMxVcBHWLFw z%K`qD$tZd1{R{8AAS;f7#;Chp4|r;V+U)$zpi7oPE!Wl!ptdw5AwiE7&YBAfJJ7Jp z{TK6cLB;SrP%*Ok186TsGV*DP&>Ydn3@UV=gXgnBh3yKk3s|+H!N&!HY-s__75ji{ z)NW8H9|LvDx@&iM^onj>DZ^lR;Dy^8*m#03<2O(j1ezZ~Vf|tyDBVNS4kCP8?LftQ zuWem|G{cMOVd_ z!`E>;@^1@e0!7U{(D)iCuBL)6rt3WZvKF)ke8LOu-(sNtGH87N1E`b*Z|$4`?wKj< z0gdpduJGvgJpjJy+jW75rR$E8Y!C3^2j@V?y@MOcwFf{W1dT^PDIK)^{g`Lx@fVLK zfmV%|F7N=gn>$^1fK*!^E71ehPiD(NSr>fBolm!efM@4%{uVB9Fgr+qTJ}Dj2chZ0 zm+_mY<+&ng_<>4P@af{IpbP;CLy+r0;RrrcoWJE4sOtingiip?c7W;--vckyEEpL) zoBy+b)$)N>RsDaV1Tq3tFn5E~2FU0ab=lxb~E;A{b|AWL_7 z^xDph0~HRX2S63%>QYdsl^%G#5PDz$sC0xn`}{3X5c(bfb(-pZd-EYN?9q7;6vgZA_k6v4?I7pgtC>3IO%?V9WCC@zp)jMeU`CmN0;Jd01}x!w z;6)%Zd`-&HHZ&xe};e#vjh#yg3dWM{QqL|AyDRg z=FxfI@Fc`pfvC=MLUI};?WHcf@`x7L4Y!# z2fp7AZ+L(X&Oi%~2t$J50a>36x^Sy|IjE-xKP?Beao7(O#GpB;7ZIPqlX5Kvpc1ZoDX4Yr+3lkOy3g0u@QF{a4fl(u zX`oS}qpx+q0|T!>6<*UdP*fiWm1L}r$5>SKeOv#R6nI+RFUfX1#?Ii|`3KTwe6jND zxBrfv2U-u59_nrdEpY2R)cA<$0|P_jFD3^DhSD`4Bg(%WVJejYZ=mw%yzkQ4Dg&C+ z=KJ#PKd9fL267o_X(HHW4v5XKJ3;-4?zx~4@af(QTA~9Q-Sf1(&)*cp$iM&#!WTc@ ze*=v@d-A)0*2jaCzq|_`8F67?K(}$u=WqXAy1}-CEEYnsxc@5H%P)lx`RRrA7ifKV z^o7DcP!<9og3W5g$N)~+9=)a;tz|%`G`w&GwTC)EdH=<+U7&*-AR!G~KdkE69it-Q z(R!P|wGL9;9g2` zpw$PxrZX0TEPnqY48HQJ6}*J88=N3eCWcGhJsOXIlBr84=voTcaH}J@ zumAc=H_Q^B&i94~JbF#_7RoTd;_TP)f3OgIJ@v(%_ur6*~GM`T_r}nlR*avfzMcJe8lkJ|Nj#C7Z2Wj```E*bbRbiQE=`# zw1W+FOt#CxPA2evTP$1uZLqn|@X|ieO;;YBPaQ*C4W9(RD63`yUyv!)dARfV3y&%$ zhR*vhKs%Z{?>lxLdGY=6xBo7%Z8V6y59(*Y%Uf{%_w0l%$Y_3(fjo=>TKa3~EzIEA zY@@>9+g;00;_Je{&A_Acuw%o&I{ucg;G*I9i?xtzEG!)x{^^wp@NaWww9zYN;os)W zWTRiA?9m&$0d#Kgi?EX{kmXdM_9p23Y{LUDwU|KtDOg3c1l$(;4?2?Gv-1GBqyHk| zJve!LcAKbpcKZu}<}r?Y_PR@WbowrEHT(u?NafCW9RV5-fd$e17m-y=pjB<43q%z= zkH65WWMXjXeE&k|-+$1N@STTW+<5fuKPXvG05zq$OBaAvc{Cqme4#K&n8CZ-g}NBb?gdH$YQP%7SHZ@P_8KL_2{+T5Gu{^;$)5x!%NVhAt-!3yK6z~ zk#@Xj{v^b(pGkm$0dZQo>k5x<2LX>x*9k9D-wVOA`fB2symAv2&t5kPkK?YO z`zApFwgBvuFmR^NZSd(#?eOTFTLEfGch{~ky#0c2yD-B`(3Q;a{*TAOSNzS7>OCwk z^Y?xLCA#JV0-zJ(eL6u6*V-K~tQY?O@6lW#05X0@Njhlhj&J7&P`HEEOT2yi|G!Un z>H^R2Y@kt;5*FX?G{_jvYX$}eXgUNnhQCz616jHA_=}_EkU(Dh2OP+tL|F9j+ke;A zC;Y8~pkQu3%m|uj@aPr*ops+D3i5+>gg~voN4JB*OHg1##u-3kp`iHaE@gO8&<~1# zR|dykH`EiX_*-9ry@qxC9K26_#f#txpeZib8K8lX4)929x5+_Ja6;Boc7uZv)KdQb z;>RRV)dM=-+I55Bf!9+&@#xWOdpTH|;l-OQAqMCw5O8}1mR`T?1eL9*>2<>!kb94N z^g2i&r51MyQ1e#Lx3iYvr6H&<46YAB1JFL5-#tP8?C1mOb7kmuozZ-N@ueUrYlxLeKG4kC|=)|qs09Uo z3uq$Mqt_LD7}pEUqwvC_G{f-r>m}g$=#E_h3;T*4LJXh;3oa!CN5o;>2s@%z5NRM(p4JudN{I z6FGl@IzJxp{FQqEw2tJ(?YT(#t6l-r0zf4E(gPmW5d!?ZZJ?;=c2IbI1d{(AfV|_; zdCV6ybNeFW)&KvD;I1D+e+e(|MWnBk>4xKc++ z=RBa68mJ9!cnMxEp8(Hjg3oq3+YK@7FSrW=8V~8UogE;}@M2545W`DD9eoF3kW*-4ZWWH2(bW)2({ZU5~-1+f>P2 z543tJsYe=oTdQX$+l%M5KmU7n+xc|91NUNldTm)3f!f8g&)h&)U;XmvWPb5^*3bVQ z-PVvHK$tSWMW8_vU4GD@#H3kJLw>=`d9fdxo~m77J#ppI3@_p^^>ky?qqY;QM--$- z3sX-xHa&}0g7thTlV*7FZ6=1>l(Feq2eIcNNY5cmJ@02?34LZJypxWdRRbu z_F?LIJp(fgbe}B)>9L*qQ<~vL7fcUm88SGbyx0!Y0~hk?wXN`$W_S^csTiamoY0UJ zvw|(qEd?$4(}d|kB(yM?1#lssUfuNx(hNSmwp>g9|9|myI)>+!u;{Us1zB(cruZM& z`5wKZVN3r1fAMiT)aP(v`z2s+KP{1Fcrh76)4|36|G(ISp=lLpMQg9^E|8`;3{5g1 zP3;((SRtCaL7Fr%G`WM;-UMN2GS~ukUOY(Cmub)dfIHr4(f|K1WHB^pgR``)5lGX1 z3{7(v{{R2t#WeJQXj=%ji5;Y=3q#Y71^@rQ*o>j+;R3Lx+r`ohFG4XiB`*W*&&SZ@ z15OCG>p+?mFf{dnGXj%l(G<*L4|1Y+|H2ngv^YrO8 zwJin>hJAZ+XDT!-K=;f*C2jZk$uRiznij12|Nlkx)Sv%-dSzENNP`xCffJNZ=RJ>J z(M^Z`|9=q+mKFU~ge-f_qgV9E!T$D>zN3*y3c zAgOy$DNt+1qgV9)5wNb=AgRL;DWA?yP+yxWMM^WgSc4%v-whnuGeKRMK8P&Ls`cQp zC({s+dBspEXb`H@f~|4@Nku@Ud^*3uG;RYWNk@n<)OyiHOTjusKswY=rJjQtZ@s1r zASrHCsXK4Lx;}zp@xvrYKtO$a5hC>jBy|-k1$Esu(CNy(rZ+%RyHKT~FM|y{29lbO zDy486EVUgZ)q*N@6tsD}*K{dJDibONb;hgvU|o|yQhumX`k?9CUemAX(hM(*C;j{n zZoqo<+Uje`FuZuw2O0yj_UJW@F95ZD4uKBLe&JIp4odRi)nL7*86ZO~AwsZR^a^xZ zO|Pj5Nb251NQnFcH?&0mPXjx}&RLq_#bJmP_}qGrUQ=$6^7kd;@P)JaVloUb;^1!h znGbfui!&wS3_iWGyK6wLD;pKVlaS1wy7&M87Z18XMS&0+lx~F^^u+ z`f9L$_T)%2yhw(LgQmTDMO6;`|Np`tA_fbYfHJW1hCI;u-%u%Nep*@zmdXK1NkXJR z$rT!f(?O15f(XM5D~2TS4%!QPaGh}(h08A08!Uei2~dRBjG(?-uc;MCd@n@&9#|Y=uO>)*DMb7jlDGs&ycZ(A4lJ&qz~Iqq z$_ElJg@{jsh=c9@nhR<_LB#7I;$ZcULE^3u@ieeF0}IHUiy(1bh`1j_oC73&2qZ2F z5jO*iH-OFG1QP#S2==cWSe&5=q<$et{3%474I~bYmx&uj|MVDkLF1(nB)%0Q zehnlp2nmNmkoa7P_&$(0Cqz6EB;E=V@3mDkkz;sqvm2DrZD;)h^;=9=flos?^dh-X zoM9KFxH1g~7wNY8Af4TPpp?XV#TGOh3o0FUW`gpRz>7)6APL!OYp^j_^8Wt^FL7sn z;b{dr+1?tKaJlA#lllqJ@PS@CNDo|UKO}?5I7lOk%3Hh8hI21RjGJJ=i- zM`?x^&)UFJp#4pvr<%dyJ)lf^4oUn_3s}4oB)$zvd{z@!JO?B`4@q1IqTU`P-i9Qe zRR>n@Q{rr@4>_&g;0OX|Nk#e!NfdzMe87Dbb-`vLK1%l5%2ew zVR$hMN&H>|*ssSkr5Ro{A&Gy3h>N+(FucfuiGy}U_KH?F{Qv(V3?>F@4@?&aCF|*+ zO2!UJ+^7m{_D@j!sUeAXLBi1&WG5ez_#{X;re%Qon=J_cXLW$h$peYsLlU0^Ngs|N z@ncBhT8&`!79jC;NaBwm=D32yry+@VwSm=3fW+&N#FZdnzz-5nLlU3W3Rce!68A$A zcj^R-{|1GF8IpKa4OsjONL&s{{1T*cS@>F-;RPF#I2R(c4e?i0>K;nH!;z1C17J|gfki>UE#1lc{aY*7x5b}7 zVZA+rg@K`{$is4b0f>?5vE%F+2=Ms+%;VrIR*znmNuWiC2OltdXdWu{@ab+30Ilrn zp60C$?#<7iNl_qCticrDH@*iX#HRE?wdOYN9hY6%X3AKJ^1&F^Y3?O;$MHrv-5(- z3?If59+t<7Pa|B%zx|rwNssT3U`{l=4xdw;1St0*_u7CJB#DHp2slVe_i3mrATb6Go0W9b{{@>9^oxeUmQZ$aw8_H~2o&9y|Dq-J`n;q@I6Upnykb zBS=s4qk7Iy9f1Nc|A6!xUh?>U46L#91OL=Rouc2r>oGvrql4tTS)YB^V}Q>vBTaxq z&%f#B^XLu}051Xn9WZqM{{#4Z1W3O}H=9Q<%TdrB86J#Gh6m97*Lt#q9i*nyiNm9t z2^QRl@j;JnR$EhK|93acKspN)**Nfgo<}z;FN*r(VD;d}-th+Tz61sa2Jq^I!w~ne z-ZeosAEKTCRG(v4?=AqEw(#ioc;V5_x)7@O`$13`@=rbF(Y*l_>IWY&^KWw#Y<}>a z^FoK4phxG4!?5sT&4ucL#3%nY2f^kC9N%t0?$|>15XgPt<0g^fBh;fiT)?BdoWrBr z9=yKd_&=2Ozo5HP-+(OW{OQ^G!J}7{DODOe+th7gcmSkj>xpmw4G+W~hTNA8xvTlJ zN8=mtQt!^Gpd-&bI>EE5KAqr$;(a=MK_|+#94Jxa*K7st+~wEo1??T+*9>jo*NmOO zubH}lUo&?Dzh>zHe$86ss|CQ*x}bSkR{@{irJ(ulX-YW9{ z|9=CBIB4GAqjN9h_?5Y!op(N+OF^^hFSb7rVQ4*2!sF2kmVNOYwCh(X479DfMA)Mj za$-xbE$C>W7q@?lF!*%q-Z9o=*ab>~us+zgWKa*sm*K^%E8qTuXYD#4f{vE}br@cR zo%#0v#m8gc;P-EW&f{yS=U@OORQ84hf%hK0@d`e@=^mgBajpMLSYJ3_|MnkrNvx0M z%9qI8jjP^5V<2Z~wuD zfJzM)SZambe*;<}(y>3<&6FpGS2zqq>10N>+V)il6%ymh);eY69YsXpt80&%3 zHp7ek5IJe|$!J5^GIIxpOz?TVFPIq^KJ(XsQ-a5gG!Oo~6KVW82l)k=!BgR{54>o( z09u0%IWN$o+cx&Q9s}q^G}D~F|Np;a|1QV?Ek8k?a}0M3^XLs-0V+Mef(H3PH*($c zXnx~?GJ)mM&FW?d&Xzuq4CT?t51O0s?A|wlg@NHk<1<0<`3WaMi>bR)S9o@_sC+x3 zP#WUfU7{l3+xo38%Cpx;MZgtw+M4eS&`~>}d&^yCcy-JC05#w`@4q<9!U4KmioX?f z3pHrXHt3)XWtd5qKu4%4ygm=wchz~!^WZyv$L44Cpb06^0t(QI)ZWw$FEZ0W#|FFx z2RC@TMeGjH9x_mI^FnqCXq_>5Rm&qwP*((LKWu4;NAnT1rN9$>dQ&%m_j5ot&OCc@ zdot)$JFt&EI`1JSlMlU6d?g6JWd{@{3?O|kD?w{iex3V;yhYY;%?S*Qo7mbeaCkJ9<{#fe*t44}dY zR3C!s;)5^jKnH`n*fSoU@N)L&AIJ+f!1}>u7-$FgRnUgNFCM+7zYL@qz}W({WXhvo zkO5TOnEnrv0UuUn-Y>}D+5G2!Nuo!uX;v^;(D1+ug?>Q>@Wzw-VAV5&Wf)%Y^b3Nt zc=Vbo)q~Ek74>EVIqt=mK0(lqNe<9l>49jEUem|HGT^3C?8}>dp!?Y5A@!AGZ|Gl- zUemh}n+*@V*xe_{@OmvueHe=Aek)}6cl1HsuO0$+>WlI|B=@g^8=cUH;{KaKG7K+# zK<@0k@6l_zst)XaYh4Bg!vil&K;qzI?Cu+a-R~U&bH5~-`~Q3Nn##g0`Q1y5`>XVk z!v91s)cx=CAnxDZi{$=SfnY(y11}czqPSlY4CX_QY|?A zZ>NCWzXc?Y?Ece1F!#^wL3KYU{O1P10;#$OGyFYzO*!>IYhuB>kUD>RfKq)B$OdrC zHw1zgX*wo{I)}a;>GoDr10T_JN-a6O88g?$S}NE(+vxsOEuu|vHtr1zu|!wQ$XU#;j=mr z7Cx2TnBi0F4-22@Zmi++QU^VJj6gPk!zUpC6dW%U;R5wFAOTSLeEI+X1t(M-9zMHu zq#0g*?m~o*N3UrohWVGeU_N7jn12v1;14rD?-v8ZimU{b6+IF1?1u8Phwzr;RzLooBvx|n&G7}lKGhB&n|7G_~qz=#_w@x`SZOKDSov; zlQNz64G+9{(1{Yik$#}`-w6waUDe?D)n)*fpIboU$npCdUjEGNM2+7+9=)b>ePQui z-H9cBJDl>1>w4pb^E+@=2io0@W!YZqaZvLIex7!(sRquE~o~kP~`M z|5<`o?o@F2bUu2K1hSwLvdkO3zV2q-qYfT+jKyIdE5y8a<_PnI@S2wcF^?CAd0P+t z0~Leo>=5Q1dIL&X*xlD_dSnsUqc3Ve8oM1hJV1wxflpJhE9His@(XHT#J=R({{yXk zD&g*B$V%yih9o(xiYL z)DSKG<^ev61awZoVbG3}gRg9wAF(&TVs8G$Sbopr-~ncj<_CW~nolqt2CpLnwTD2r z^^~%DwEiy@boh3R9mM=rDhD33VDRW>Z+;-}(fmWM^f9d`wD)Vl+vw#GLPz~ay~-k>vQL0vbrcIRi0 z)gGPKUzG3q_8;UC&(0?vkP{nyAjeql0vYbptDANJG^D>3WVlb~OP|gKpfk)px@Uma zNrHC6r-6=&vAk0(;iLH&tl$}V%f>B_gTI(xc!KVq?MA-dLBON&2*`QhHmYM>?BN$j z4@2`WsDJX}yFPek!Jr&e2!T$&-~%TQ3&R61batQ|=>acqD%GI%jbn&o=NV8_^u@sz zXfgW16J*Z)7aLjx8C+YQlp2FJV)mL^f{gDK)e-?W5GJ>Pk~gT~=A$Of5N&wCF(&q9 zT?@Eq1nsBqRb4L%HpZh@)HxJn8R)q8*cMO`4BjPiz@t~x5HyMFi7I9Q5;H{=Yb%ps zc%g_YCJIu=iz+4t68qVVumdz!$Po$}B#eFeuvw4+;eS<-lRyg-5&mz6`QHQV@E04J zQT)HM3|v9HdIxR*Om2qzUlrm1W@P`1fQ}M02|3jeuZ$kFJ3dl(y|A)d;0JvGUy9pW!uiU}Tf3d0w z5(=h}RFDk`g(Yvnq0rle*3Gb20a@l48~d`TNsu9Jf={pNa$&GR9=)R0!5~XPCouKu z7J=q_{E(dL(JR^x@}?E4SOrL(8dwZ;+%>pA^Fj>FhbNUW^Q4AfY zihYZ60vcre12lf%+4&7LeDD`k)}U4Kptb8y_k9B$^JjPfv?fj@$(obR_hEidr*d;;ykw>-e#4?36|bR+=(`kS7eH(v8X^tGNW zJ?ztY801vn)&q6wFO)7zfOgdFfI9c)+)t?*-$QZ~r3<4@5za2Z8jrVg3WJXGac6{?<*P zGX_E1c0l#MM>p$Dc|8W-Za$yRmma;M&jOH#L|-i3{Ovz@x$2APONfwc*#_Fw(#<*_ zq_gt}MCY#}8Kl9~7ulOZBdIUvgSPQ?vz8*OOh>iD5u&mbv<4i$AG+l>f6LZ?|Nk4F ze8~hF#kARrx<3U}AA!=lBY2Fq`Hh4}H>-i19s}rD29ItAXnW4FyF~@mWby4@qXKHL zv>qs71s%pB2p@?7&*&UZo8Zy;*|U3#3Ii)BiGW7NdToFBOEbJUQX|OV13ppVm`~^T z|CjewfU56a+m<33h8NGfK#SeKgZEq<`wyMxXi)*RfoeFN>sD&c6b03D-Js*SSuh`)6=C=WLu(Et}= z(17HJj`w)?`V9ikC@6qjgpuvKn)Gdww{Yh|3FO6UCAph(G{H}*u4wU3O zHa}x5$^67G=(^*@`|}bEpZEn_5qU|ldJn7E_*=j> z@awzo;BU+M|NlS8O&eZBL*29imXBNBfdaUjb(V}C$g!b2d^#V3bLb~WegR(wk6zJ; zLU2Ca0a{4$A{u1>ZqV9tu>BxIcf4SO8VdJl%S?!&t}=QIASYhOFm!VPlA&xMLqTVT zPVnev6$Cj1Y&RqTJbe)X07+Zd*MIvD4%e5UL%(0V*a>RfLCOn{Zufu{?4_I@pq)tb zL210(J!1v9&3vG=$fMgm0>*Lm=ytaN9X`klnrHI>^(k5plxTu>upDA9eGlpqyz=Pg zYJMp1(fm`c^qxm|kbp-gXkrL-hJERENc-HQTcG)oyhrmdxzhEJ-9PRTua_eFR|t9j z);e(Pf_4bGXS^%~?@eGpmIqy%0W~Awr3+NP^8^3(YaX3HK{Kh{7Kq7D(7b2o1@P48 z!57?)ofkZMw;X=}+WXM_z#cT)#=rPNk+2W{>H`h_94sE4Y#z;x0jvxRjL5T3(E1j9 z@K6GB+x-RTZcfm?7JZ*?1&_|(pe>V}9^D=a-xwQ8tUbED4Lm@nP<=lOs>3`bI=?Gd zN|YM=bSj`-BU1~Cf#xF#;B$#UyV^l> z4<5aR0*047I%`*W^wv%Q4Y-54RGA}C>i3ucjBaJ`jbQ=Gai)sA74}RhoIK(dqR`1dI;jrPi*FWIn#|{nuc}ko- zI)5}jVD@PK!BoNq>aCSXKrb9)U~uqY{81qZ?(u@tZR`J%Pye66^}n3G;m3b|c?M9u z@5dhfQ^X&KI?N{S4f?GW_;J|BE!kIt=-EB#zgcyzlNfJ&j3pCCVUdng!Q^5`y%@USe9;BPq!66*!;A?^&l@*-?C zq=O79w7~a3bVH2k1-sXy(+zYr0_b)(kM6l32l(_R2)qsig_p;{7yQi+>On`#_kwOI z^XQ&>;vZ-Z=K*L}phqwGngrOb70rhk!9l+-kry=Tv=`)o7h0eSs1s}~-0xFwfQs+V z00D#u=mr!>;S|7u5Cz}l*BMaZ(G9)Bkm1`A1^(7FP+&uaK)V1Xq0R!$s=owPa`5yD zs){|Jz6E;|sUOeZ3OZ%VqwxqR6@V+}*ux&(z2E@uc9iIz0qWy-Z+HUA{|z8EI9@;* z7_^ldw7(5hVu6CaGQz{MLZYO?@>*$F>uvs)bs+CSt}odQj=|;wj2@lfxbp7tG?hwJx4N}$c|Ns9NwwqB(BglFIP!0zT>ijPi1TB~O&Oi0QVR-ukHon7E z`WTcqUPwRx@jn)nuE3`ef#;tQ`Z-_bYyu5qgXTe@<3e1eufh5jbNu`t>v8c1a`DeE z&(Q5I(fos{T*B~D>wyw3kIoD5@uP475YGd&cEv%V+e4!HCsVng;icA-r8mL1ymVdw zmp`BhZ#%PIy22FGtl*h^V`Tc4Dcdv@1y_;fz===D7S z+JfxSD>@OhaQe9G2~dQ-aJd3%ewLo_u>4#i=h6I6rGy_`tZ{<3h=R@^b8Y#?-vX|m zI&XlM2cgVy^0)4W)Lft=u|eI(SZKI_rj8*4YtsBJpq;v&-K7Gc4YSM-|NnoP4sVxv zbVKh+ljd&$on{7720F#y&V&E|Uz&pJcJRC|vbti>*(9L-#hnj5dPNU~GJ+25eo=K< zkl`h0Z3ei#nu(7o=DTl+rG50H@DTkIoOErb8#_My=l-o!|Ml zUk8m_fNDOZWnPa!_tt<`dL4Yh-FeZc+vS);^Fw=2P#Z$jqg&jw^MdF13y#eX5=!O1 zISVqCIC?ZUJFqY?FhZK;i1rR>saEr&`JM+~usSwBU z#!Ns%dCo%M%E$1)i^L`W{!aj<-_ApjCYp4~g>OeVN||C0zhFHDT2cca&j)S14{rTm zSK!mF*8HEb)Dje<6G6fFW-T|U&j5-#!K>U1K9&#oTMUkZsvFS33ZQ1qOV0b?!=fPV zPtb8GS{~hT93T@w`y;{rgci8>U&J;@GPE8j-2gJL@b&-yh=WvKD7_VDfRqOw-K@F- zAYXunqCvy?9^E?xSV1K===5;dcsHc|`7-(n%KSMfuX{AU0aXRa?YSR@2fA5b2!hv+ zh(Z^NfEP5ph+YC-Ka%g!yA`zR$MFAg);)sI^&|C5Ks!0#A80*LBJR=c`Xj|d8?pho zG~gsOKV-Io4om>8AMxm(3NpZB258_M)D8LM!LN1T6MrPD#tT^n5a-k<{)mIGw?WhK zRPara-Qe{nuTQ^FUI$69p!C@Z-6sm^*QJ5BFgL%E04=>k_7mtB6VxPp8PXhn&E0v? zvGbb8!N<&w&Cl#TdiTg}01fJNvwL zJWP*n)&_n(22h{B+v0_&q&Re0M0BSvgJj=4xoKxpL{ysd3GK#Jn*6> z2ex{o^Dt;NlP1UkNBIG=d*nuh3ra`OEb%`u>J8BkgSlNdnfgC0>poUR9I4^(q_cHVmlDhom3 z>e0>mkQ3(Lmnul*G3!SjJqAa}p7L&sm!R9>!Q+9pr-ec1e`^UbyaW}%(0KLeW^LpG zsTToR+HC>8B^{)`oAo6q)pUZw^W_oHkWS`maO6Sqzel%|0H}6uX$I+Qt_WZ#sR89l za8mYYexu>h?cf0Gf);@<>jRw=8v5de(<5dE(3J-s-K7tpxAT+~g2q!oM!Ix+MEJHI zC`t3^b_nq3^^kz7C{+jd!$4a`KsQlzr~dHh6_v~Y4I7_)xgcE-w1yN~&v;0@z6@%Q zFhHs=Ieu_|)TcZ3$4R97F@1U+BwmA#zSt@R+AtJ)!K1VEhEJ#K1D8(U7ccf{g0?z@ zUhwEHz2VdC`oN{z_XWs#;KPtTdTkrPno2MDbh_T~==6nX>I7>lz2MXBdc&jJ7p&=} zAGitxwNv;#T2GcJcyyjFFh@Pf(}!F#0O}C3sHSQ%U8?q{4JXq7{Hw* z&^ll6)ivNzB=F46YaN6Rk8ajNcF@SB1w)B9sMM~GlVtF0W>H}T9hYnQx+D%HX!aj; zqEYD^(CO+N9z$ce72!R)$m0b1cX4QcjQVQ+&eml%wx&d@?&}vYgU}Rt@T?8^H z_X7_@%Yl-`phGIa@dlnKf;2$DrGauAe7za3%ZZ`}^+ zId?vQc1`&q_b|eXV9(Bbp3UDFJrQfhJv*=XfNpC5FB|u0{w2WQ0y?MCvwLp^CuqVC zl)CP{n7I$K&JR2e-JN>Dv-yt-f6Hx<{oOn&9>)*;`~QDFBz<`BFFwTI4C?uN_PSPh z_D)Rz4Y4;{FqGzdu!4>$22HlU_vmKb%L<7z{uXUU&(2Wx)Ml`Q4b>J~x9Eqpp3fSOg^2H)H`7)yE) z<1&u?+pnOG&3JUT91{T9$G`Xje-r2?NYHx2?otI%gs<^tXV}LDDl0nggT`CbUqo$T z2aSNPw*uuqP>aSAQ8o{*ObD(l1FQ^^{z1)<69(Yrv}GPB zlcY(YdkB0wpMyJAj&ZRsADW3UOz`P^(D)E^aZ>XGb`Q=I{H=$rk@|SnzyB}%mVw5HSj$;J$25Shtk`b}+Ux|9 zKRgTM7f2QickH|l%7_0zJ%2~g@zjvZ16nVYvb%KepToky(D0k5#QWP}cF^5gtk;=A z6^`j{xM5|p{(-VQs61%BU2+%Rs1_*^_w2m88+4F6C_+mQgJw6t;pey)EZA*&ngf(l z{;}}4rZX`x>;o+!_UN@;Y$?s~VuK0jiqqpSPMC@??1StUvrPcm*~vPULyzIb1gQK9 zkUT#q4ts6gAo8`R^cY?gK;=6?@_Z0^Gl+aBNIn26p8=AGnqR{X3QAU8kh}p@-UB4h z3(?OC(a#E!7l6uZfaF0ZPkHp(7RrE<4eQ;LdJHc<7(?98fh2#~0xZ83B!2-a|H4Fs zVINfgE{J?DNPYuU{sc%K>b`{#`Baen1gQK9B>56mu=%zi`2whX2S^^Wd(Ji;qF)pw z9{`ol0Leq`4}{3SJ)y_&!T>7ofh4a5kv|HO7l6uZAj#{=g2QhvNdAKn)c+uPaCGs(48mb5mGI~mWrT28_*>R9 zfyyp$diAjU%-;e!bq9PETFX}Okx}nor$KcZWLlrdH z2{to>iGkt!4WG{U9+H=uABnv9unw%Q6Q)jq0b;iXnz|F~AdYMWmBo(y+uQ^^x=o#r z>oIg5Y<|cLHu?zI`J(5J=`pmNED`eP7TtYJkD=iwqX)mM=!#>Y;^X~`hINb#FQ0=> zSd(XP>~3=ab&0w~A05+USix9o=Fu&B9>ioS)%NHX-2-B>lqz_1i>?GQIZ8!WC_pw# z^Sg@n9Rn@b2er37x=lA8gN7Ms02ds*t;aylv6kI_Opk%T3 z$52w{VJ&M9HVu5!leMfBm;)Nr0=4ia2ErqgC3Fvsh>bbDKIdUNI32VwX|QFL)(QQanNCnFF-dbg9bF9?Q)-P-IGW3 z7+&&2)p>M_E<6HpItK#-Klu1+P=Xg=V1UQ=36KV5@CinstsG-1#N2#tIB>% z21NnHKOUX6KVGOW0tI;O50B1cCk-#Xl=um<3o74wsbn{37u4}X|Np)J4{D3^FFsVX z;`KF1y8`AOTnO%6K~}PXE=~bmg5v{j4ebEU5Hs+%%mp1K zecTl^6u{uqtE+7+&EUBoG->hw|9^XrzjjM*^=j= zhE%_v2y_8H=*(=I>;3y+|7FL0ND4XNlIVL}RJCPp@i&A;_=bdSM@^ zT>vtl8Df42L>a_ba{ZY+tfS7LpHvcn7 zUvG&$qenNZJ46#W9ZUtA%>WOV*IHnAt3Z@M%>AwnN|&FY$v|@jD7Uiy+6VSoshUr( zYMg;I10+B0;{n;z`TWIVh&fjvsvzd9*A`*e1uC|nCf#2SG6{6K&%GDMMxb@RzB@dc zT~9E2G`nuF0F5VkST}-lCx255=oDzs-LcI_ERag<2`{+a*g;1(9(cJHw2oxLi{GwL zJ`aSSec%V^Mzoi#-~y20Mf8Cm|3OIveECk=gcsg0z6NNHe!>fD7=H&?Kk^Dwu(qw> z6YUu=#PvW6UZA%;y#)1xAmITX%K+~+`V#Dsd>=BD%v$$bm%*di_TPRz(0X15Xg`y` zRRMG?F0|z*t`9m7LK74l$6u6ci7@OF168cOwjBDPT8;J4em#a4wov&{kUS{qdGy-; z*8|J10?Erl~-$Udlf#m;cK+FfNy4(lVe;*=W1(LrDmH(vJ7bt#x54?5xB zT6F=K;{@T%26LW*F2c1|od)JqKx8I@IkO?09x!Jggwqb@a6;^90&{d&7(iR8Som9y zF@u&6z03r+K^c5opOlCrCOnhMH*lSJQ5RMxKIs9~i4F{4pD=^! zrEb#)d!b#e7BhFU@QJ{^EVDg&SsFa~_tzZNfbJ0EZ)F6RfFbsbpyH=x2`Fos zE`=K*4VHy!?5;U#0M{o8mVxT?f#@rR>k|gc!u0Jq3R+?e*D3~qCl2EPJ7K2^O57+t@EQ`iYn0 z=9qfI^}PqnBJ_E{^+Eg()wg32Xv@fJAyE6v0}=NwM>Rk<1cFOLP}>z;zrCp5{o}t! zx9O7Ipw82wmmk2*I0pu}zV4Qz;CN_0!U5L_8V7)x+wF4H0Lj=F+7R<%pyu7cVjeh2 zpqcmL^DeMEbfEffL-oD54H1`tivNR(BfAe2*)J8L<@IWa`Y*d6{^5kSLy^^kV)*4p zumr=4YKZzXQ1v2UVPyZi9JK(CLqp2v7v2!{OQ7mypu;yV>LQ>vJc*$+&^%oag*%>;IgE~q4 zEn7j&L(rTDXg&cnwki!8TNOhZ2ucGD0P(kguO;eco%#`6URA2Y$}5u&NO|Sa{F8;h z1$2Jvw}b4Zf}pW!9*=HDP&>W(2S-T-sQnMoD+l+(k9Lq=X!v#BdvODFA4TVJkApAl z_*-X#vTJXQJ@~FN#LNYxd*;B<>3ZhHkEx6d-L+>xTb4TSy_ogm|NqyQVDslMZchbG z10QxZ{Qp{lU!K9I^O;NMchG9g7loiEdGmkPlBNE=IiPmpeOJ(t_3vKnSjz|+tpr~k zdj7?%sf-Me-OwJLhd|e)Sk7l;c)cCkpF*A0dda&36w9n-AHczr4?fciG+HML_M!^| zgJ;? z^sxL@bkXqtOYn&W;C_AQ@z=XS=Z60WUzZ4)KX?4*$iczi>I*vf+wvNJ6KI8pvOvJqqs z+*XK<+#cO~t_grj*30jkpEJJf1!;t@F9x^Az;|JI^qS7k1vSG^hyOt*SlkDtSomV% z7Z$ys{b~0+dP5&TR=;#taJ&#+4jP3ok@Dz{ec%JSzvbQwfq$S`jUAx%6dwF8H&B-L zmGXdwk0I$f_VA0;382|qr1{GipjAHLwsEXS^A8o!&@atM503rG$$clIUNqw{j}BX-a_ncJn3ph1z1oE!|%KAq1UV>~*K#lCDx z6$ahk)p_ql#9xrROJqQba^ABeD~e4OhMZU90lHiAIe2!(qt`T1Rhl98<%a-4$o^Q+ zdKK{b+sNnVb9i(|arkr_`SeyJU%FH+0lH}w+J3WF22bdhRC@H98XpH0wf8~FUu?4% zW&q9eC@?UThJw|DN(;wh?8-i!ufX@=et!YF5AZiPftIGFg4+n76b3rg zL+)3oN9RxQOfzT=&}UGW4OF+WdbFM_)d1b~sqyRofAETLSS(I=lmuN6)gAkz^8+Xr z;rEtUcY)*asfT43I3DjH$0JhlcnTJeyV2rt0`~a3mS*_P!}232{*FP)^^ZvL2X-5H zHE$X`{=j13_yb)v0F6H{aM6B|zX^1^C-(R|$lnZF6o7EI3;*_$_~P#yDCEHn09gDz z0f~U)Z#!oE9V>nR60}egR8e(vLLv`zEiS@Bu*)Gfa(i?`Vh|E}-Jr{z}H)XZTGP5 z2glk;t>b`SRaco|!M1Rv;j0kmuxGe2JTM4aj7*$HoIfsb`-h2%%j;!4c? zh@(7R28u7#@^mst2p)wH`{20|>=z&Y#V7ciJ3vtg+L!`sk3;h#IQ~FwlHZ_$6>S~s z3&R8ODD?;B&*NX0PY>|7fOh0LescgdwLv$X_*kCiZvtHe=E=Wb zz>$By1Ei^a3Dnd+0giugj)cdB3;*`Rp5GrJ+632N_30;YQ+qEc=1}U>)gTdY{>2ji zCraPHtOO}Qjek&-BEk$}A8P!2@Gt(r-we8h^`#|fl~;2ssD;bm(fnVIzx^2-Xz@_5 z=&pORuu~{FJd#;;rG zq^R{k$#bv)oySkU^b!?8y5HHOn{_2fNw4f2s5#fb{d4d<49J|{!eDb+K#D--yoRl} zWUT}V^~zdGL+qc2s_!sFUkFGMNFVs3KhSzHR!@*nuk0@=us;4)aKR1B50G^Oo%dff zL-fml6od7H+E8Hqk|3d8*;O$8pxHb`eFXPEME{%R;8FOJ=P!SQ3Qo{|u!|s}UfCj; z{zo7QxcxBw%n@ z`ZGa7y|OnXVg3h6!0m_WZ-(f%0VxLSw+1N#={E!k^~z3w=~n_t!1cr2?+nq;0#Xdt z{~I!1-_81S893c|!t_4^Nx=1k*G+WZf58mVe+Hx&tbaF18OZ*FAfaAaW|;m(APKmB z@VX9={{_MRp8`@0)?W=$2GZXN66%%RAp!G0NCK`Ox_0SBGemz3NHJKyHAopqe;`Px zS2ho(UkM}u*AJc@=)C{J8KPeWq!_IKH|P#tkbX&!P_L{SO#dU01YAEX{Fov7-z1d@R3hlSr^0kHqKfE0u6uLdat>0b#F>Xn@@4%MFolEBd4 z4AEZ$QViB_4N?ZuUkDQFl?{XGR{}}E^~2JSGeo}&NHJLdZ}9!L9^I^#AfaAaUYPzz zAPEfp%nn45a@gNT^q~ z4yHc|BmvhC3;$+_{y8AUVEe5>%0T)jf`ocyO=0?#KoW5MaQ{Q}r+^fL_5c3$|3A3= zhy)4s%DxeWy8jVK0z*GDM86J5F`o;QC?q zJ45uhfE0uE|NaT}eN(>xPF-Z%n-5{;lCOxF!B_!~h3lgD4MLj+E|_}2iIIq>2ugt6nb3v|4~yL->m3N{7?(5W|h zAWi{0n8V*XnSp@;B#;3*KEL%pe=BHg$+P(gqi6FUdH$BWQ0WHH>Y&#DCEGkKfAcr7 zg673Qv&EpfB#R%Q4RZfMOH(_Kz0m4n1e*u7tz;5d0}HYScF=%sckKzNjvt*69WW=g zfSST!U7*89ePGsH{0_RK3Us&hC(!bTLr`5Xcei+e`Yj;GRe;tDL3M#V@?ttf=MJcS z9i5=tpa017wl{1pzt{{hM+Tw@V$OaZ5zrF#6CT~Q8$brV z?*JS0VFAQBDjvPE?}b1HIY1XucHV!H4Ke2oL=D88a)>zxVCF1`n6m()rW9n(2ADap z`b8OHP7Op2#2kIFIk6i&xFKf8}A_ins^AQcm$RudtG-#w9(cXQby$~{g{uw-h z!SF&F$_I7U_~jX1a6|c4;6W6I7rz%k)PI4fM^FF39*u7#7#SFlS6rX)=w{8i1I_{- z-4j3^v*!Pd{OzE*S^ky?@D$@*(8fuh?oFUJ`A!AU)r+7-DUN$Us}w(bto8-nP&o;t zvU?Y3{L9twtzRz-_<)9PaUcHuTps-Uy_h_@ofI7T_h0nrJjcKOlt=PO55|KYmM4nj zUmL>PSIv*)K?i3yw_F9;$mn5tqFBVETfn3BQt1;P#uJ{+M?qpmZ#!?{Gph-jqXi$i+Q8pp2fB2<+eHPm{T;l&q16VIXgfbZCOP~V85sO~Ys^54F@DX3 zqy{ygUem7v;GzbWu0TgQMRSTUcyzK}fvAGSV>%aTJ;pEau=BAOGuuED7B3(sOM*=< z(FK`21EQx?#iv(yp#U_UfkF(l{)ic3ZV5yU*j&&(<~(4dKlyY%_uL0Br8Gw6Gksp5CMJ2q;M))|P{kpvS=%0?iNjLCcp~K-)$@2b1=io?Qhh zik`nH%>wxu5}GZbgH1p|)i4i~^p3w=4o-@Y^7=*gJkWZNLof3|V_lu^Uqpiy9ea5P zG||_shS(tqI!R>RHSj!6F&}K2%QyGmf23Lb(%T-r*puRCNFrS z$CN>Hd)=(IH$gKOwzBhJ3rN7n*zvb6V1^Y*y|#J0(hM(T*hLsXOUq0+5NmcbK{aD1 z>%+Nv3@`q$LF7e1^3VksRUq$ovYrIV-+{`1VHaW82U>gN(QBIzk>3cC-vgDu0+NR= zP)X+j4XCru1j)~V%5MS5L(O-B=x+qc*Ffc`faIYIP|P9nnIQQXsC)^MygEca5F~E{ zl@9^QgSYJW+KNNuEkW`!PGB>#sM>VJ?t)c$?kVE1!^|OK>ZJr z2d%yH=(Tl%$a{k1??C0hu!=B%*XDWj+VVi$ZwQj#1C_r5k_WA=^XRn|gy@$9$0t z4VVR5xzq(}r&-H-gE?m*95*oM1BBxU=FEn0Y``2l(Doo}S#vO_62dV8bJjpOx?s+8 z2uB0VapGcN@UWIu26Og8WaPk{28fI#n6n$g5dm|)K{)(ijygBk04^}c1;Swkb3!2; z1~4ZR!udTDt-IbLK%fZ@`>Q5YBTj=NN?Z2+X+!;oJpt-a$Awz?|O@ z&ShlIIWR|*2kg+3$ebex4rs|$s{{`NgW-XfqU@j@1fcaWt+z`M%ON;Q)FI2a!aze~ z-K=dF!1aU>2dth@O$RM$0O{*C?VJHyinJfpAO{)WqW$mxf6wkc;B%%tV2hCsfTTec zC1@P#avi8`Xc_|7d$b_Z>rMBhoxv+6FL-`mq5|I8eDIZ!M{kG_ zr`Z@7KsJF|N^qO5fy{#0lnK%DYdXxC0Z=XA*%_GQE+cC(gJ?Mq*K!uDrAEcTlX;H{ z=#m5weE`(xVcw(C0cr^`?@A6 zQD4jNrO!Zt4l>Y(@x7;Zjfw=^)Pu;TzNrEGd@0=2-C&390lNvVWgD`Voe(Wma4iB* zEuaGh;952#YiWaM@rP?!3)KQzss)Ow1ZY%&ww{3aAD~eNI28YGYsjv{94mA?A{l=5IM#Tc8 z{{+Gs4w_Tn9@Q@KAL{)^fKB90b>Opt!K|@#(S$Q2qc{^OWI9T}}l@p*9rm(EZkF3QTq9q2dg%zsh0h1krMPGAyXhL$xG;>ModHjw5TS z2We@xT|ZfmfrY>208~BbR4;hw?f|K0{O{2l&gju?+6FSb^ZpArh{igI#)VLg5g@fN zirC2I^Z@|p=eZrYP?dx2wD*?1JRfa)tJG`!0_VdT+q0P zDHBAcN9Umz%OQ%tPXhbP8LGGdr1%U(@!d(F<&yV7imM=sFF_P5Llswm6wik!-hoi; zTLE5bDhTfngNjSg;fSc~-av<0K>JtR6G1EBOs7l)S$OEBA$aeO0|Q7OxISqKF&=)lC42gKMznBN86)+AZ2K#^d`V=;#CZXq6X2kn=h~>cLeRsyT4?z383*wqFHm zzckeT7sU{98K`(0OgtJQ{$~Qjy>d`-(9I?Wp3E)K%B)2NQkk_tE3+1GW%d#@nF^U# zd?5@m=LpoCc9=Q6Q^1v&;Q`OaBcNIgIzH#o?d9RocnDN)crbTafGe;Qo|acipS@g& zJih^QhlFSM6mWgu$vg#GM_qUcnqC2ox6JMb`!@t?ZxGDh?iLkLeeg0E-1%kjM5|0e zm#O-6m!2>@0CB%(cNn4`n+9>u1xP&xtr$JET~s7qg4Use>faa25PP5WL&D7f$zD)( z`Vz9hm*K_lKCt_aK-F18)xCHO5#Iw92aThfp92-QgQ^F`JEXE|QGrxeEh>=8 zszn7-S+%HuDyx^tka4CL%@A`^pytd$G6zyawWvU9s1_AS4b`Fosi9g_KsD4$X{b5Y z5OY+Z<}5)n2U0D$fU2by6-c$zq5`RwT2w&Q(#vaq{{MgRvlko!ulgV%wdp6Q>E{Bf zd|Ff>HBpNSq!MaTfmA{*DxgZ}<%~ZNl@c%eK;~?On6nCM&MdGwkVebPT#$kZ5Cs#V z3f6!XxTtWv^asfnL1e3;vircYEGjRJK$4*l$uy|s1+ZibxLSBA2vT4IQQ!+z@Cd2^ zR0+KN@caM&7s3z)CQt=mpb9`m{>$?q1)qAr!5|G)!1fE|xfT^r0snFxNWn#j0w$;e z38(^4asILwq+kO?!OLDqKx#o1fXeTeIUoi7AO)R=UOGW#Kn3*6px+RSK!xs0SCFy{ zsIrh>|Np;;hH@I9dO$_&OF5_>P!al45Xu1+kuO<(gYFf*|H9;_FlaqE%Wo+LkIq9L z-K^XvK?9bcwZ59sNbA92;T2ZCbY6dP z0W1z)M-93!D8`=gHAKA;{s;E$R;P zTc?0WZ$L)pzcdg2yhE3trSaz+XgKI53zo1h? z^H0{&V+|ex9PsE)=hQr|V)H{EIPcymvz+(nz+Y4x|9Q?dDkbgWH|2Kek-Ap?GQQ!QZm%sfr zxGyexWS=ZU=YPan1CL%-i(As5V_qQjmq#z_`9D%9{6A>?9ccW?S5ehlK11baUO_d# z7)^gC8ovpR|Nc6vdCq9^j3-ge*8<6V^s*LTkYYFt4v*$~3C0pu(9tIoJi6T#JX#Nw ze1hDO7bF2nXiq&lkNz^B z@M!-1pk$Uux3dJu*L=$5YIZ$fh(QWW-@Itym5ag$q#bAR$nQ{UHgGb|k&<1t>mRQh8 zRP*l#{4Jn%gim+2g>UOy{uVb-jCH<$(f1Ej3W6_!dE5>1>wBV@RT@5e#MC-Apk0d1#* zgvUt`6A~URFZY1eg3dvLn!oz*|Nk$R^)P|Wp9fhg;ljY+3UYQoNN4B$7tcWzE8~%u z^>9E}%2TV6Zwzqq-R4Q$Lo5FaMF1;pvR|AJ=%Ggxv7 zsM6+7K$$xL)f=Gl0DK0N1Y;>X_>kgmlsi|!2SI6pQgJCDg|2B#Zuzz(aZW6!VxJk^XO&$58;A0_dCseNb-i z2Az{|$fK9_*c{LThfDmepo9lIU(lnMbq2D2k6u;>H2dt)_!ek;XH39#mPt@)xrQ=x9RF5#!P&3mcyN z_2^`NJrh*i2!gY%?JZHz?7=a^120bJe*6F8b_`0M0fo0?xM$~o(EUB28nO9}1+oWD z7#;wpTf^I)?ejtXJJ11vEoz`*v)A>2N2luwk6zau9-XcWUiL9CFo4#RB<=#u)mbn= z&gcS9I4XE{yMjs^*g2a5-;OYqaDy%`>HPmz75-oF?A{N$OVpz~bcIi6>JE?Y z(giOnt3lDh-(m>rw04&s04)h=T?!hLU~St8^;)YcSh9A-i{IZQ8D5Gbog-Mg;>GbF zk_<1)Kw=Y6rhiNMJy5svzwnJli49155F96Aj-fui>jhXC7#u@_K{pUEIJU1Ox%eqludf6Fyc zBbYMZwR`{_a|CjAQME_s5B}}f!TW3sK%+F@AA(5eF}RMP)Ad0o*gmlL=I>bh9u z>e1c820F18v}vQr{6*JKxJT=MqIh%%=%$-akVoxy!#pbEkKs{p{)5#U;1~;c4D;;# z2fF_T(uf6}lq>Bq_f($;%4}2}(6bpe5 z16{)iK0A%S1#%uo>J8LY2@`y}Z4d6$W$@`{_UvYdo!aZs-2qy);$b}#yuF~>!*V8w zUsQxxGVSpl+cNV&kM5nI(Ji0unV@AWpz|^dymfhE}gC?Ua0)||KFwC^@K;~P4HQy2R(X4-9AV$_;h|ZJn&+h2+Z63&7iyr z3ZX@7LAwC?TiL-mxf;~s6CDOd|6zk|12Tn7~ikln4I_BD75+hNcQ9n$VrP}ZH{!wA`O0p1a@3sy?- zZ$At=3Iud&At>$lvP|;qyaHKu@A3Vk2WW$9DadKisF?W;78S=mL8pU*d%hmMP8A-F zhaf|w77YBY#-NyF1&BH~x3rVN} zbjAh0%Pk}!aCrsIz2QFmE|(lbK$kpseg~-u2bE$(8Cd~jA?iJng7L){D*b9NL!7_m4IR2*AzyJTgoDN#v3*R3Fy1z)o$MOY# zb3I6$KcDs2L|F!3#%CToN>YpR5_2>e9Qg&=JUiWZU&eykz_`LGdk3y?f@~c=2a2KY zDQsXrUVhd5h|!~0)V31r*G1)JBm|6nutTULY8O?S1z3!^Wfa`iiC$GZBL z|NlL^?R`5RfR%&p$Cj3cdUkIGm1(}+b0K9KsCmi&+BX9#*FgJb zJiBcU`*gc2_;emjGd$^Od5*tnE~uh{lxtxAV-O!)u6-&3musHA;OiQEd#8f#b@J$D z^yziD;9+^9#1vBRd3FaVcv@a7l7wuT*}t&@v}bqyF^?G@j2ApDj}?V^b~_kAHI-iU zXgmnYYMz#-N;kjoaQyS%r`z`A7FcLM=K+T{c%R# z52z^iwLHe(#0M&a`S*+S?{|l6{{io`Ki~=4Y5xhN51#5B`L`bfl>?pEJUYQUzutki z)oufgk$HZHY_; zH9uqSEZqU|O&}xao*B?Z@}MJ>`CAx4DYf~BEPu-r(1mQ@K!Yc>Z~y=A4&Bjusl=?I zc0NOi0Z1_8<9|?mSZ>y3Z~FasT$e*>w-2BmXv6f#wIy zHjE`g9^I}BJeof+dbGN(;BN)3u>{Equ3##OXs+GC?8ra$;5XL^jHO&IExs%GTjw$| zFnn{}z*u7H+Hw+N^ScjVoA+;m+dK!u<}Npc&4MdfO1MB~@V71ooxcmp*8DAIj0_Cj zu6sb2YRvuvHZX6KF2l>PKmY$v0Qs*2VoT&ET?Vj^JbFd%a)CVv@tcO*xBs5qY#{G7 zKahV3x}OBz{|4#zfasS*(w~d0|Ap(f|HobTfNtXR>}CUBH3!!Z3K2+n@wb3ZcJOGf zUBJNK>I7aL`TfP)_h9$#+Xxz^7JbeQc9mzh{mZ7`;L_#A8Hj?p8xd|liEMX{D=BVHB7^6aQCeC$cve8BpF`rfoON>@LlmD0%C;bMtH0&gO~sg zJxG{+ae>(D!oSUT#Y_V{TVxcW0NoW2#SuK??6HG2<#Y8 zQQOU0zX8^Kjdl6z`pdJsAmjsZ*-yJUe z+hPxVa}Z=HWp!;mS!&?e{FtSbv-vqAf9p!nxn2DGL)ly`FY&j01#K5?PDVNp-qrBZ z>-)Z)KYe;tmpzqY@a_EW+xgA|9x0xkXI~3|+PS`rXMHXI@;7TIfBWyqzx^u6FDO3p z>~1**b?b%Vi$0z2eL8&)fSbmgZ_(rH{5n{Ct#txja_M^j)O3D5`{kb`l2< z!UJmS?@0wscY(%lg*`eiLN1GwE_vGUjHC2{NB0iU-~%XhOCP*o$_6#LkVkV^Rq8!D znNjuwmvVZ*t~z`n=>6?KxIO04`Tb=GsQQ;joRR$yJZe-=L8%P*8x5oO!V_0W|(nA_5oe4t)SRhC(n|kO4F!vjmie z=6iG_2h{|g2GF=y=Zim{C@B~mKHxE5@cr1x_mzoz90#=&<{KUWxrTr7#bS4lZq_TS zz#f9`%RuY3lnO$ZZ4uTpOofkpviU%kc?t$Iw(aq`$a|R?M^mDM z11mo~I^o3zXymG31!UwZ!5MV=yMPC1u&D{O5)u@#%-|&71X>H>p$!r3j{V_r@CP$! zr!=@c^5}fz(cKPK(K#KgPxFFD_w*H@+U?*EW{-ofm^~U_F@P2fTOQ({bbx;w=rRaM ze;AgYLGF059O8}}PEdC|^yusYo7WAozk3qM%vcZ26JRqzW}}-6GS9>Edl5Tmi4ds0 z+s!(0g)W1K=0A^K-u2F)BJ-0+=RZ){aPSwiM>ixsJCDEITnH*-ApU9nU!v~O%^CsH z*lWsZ4?ZLlngm~-$`wS~-;FhXp!y{s`d2!j=I~ z|3y{z|Nk#Rmpno2;k@9{$@Ka$V!jI0e|#tjIaCUC{#5OePTxH*QXWWxd=3iFZr?pG zxxm#IDE}y4^XN49=w^Nix{~&Vt_w+}W2VZh~b-SDZ$3k%md|20~8+3;qNGWJ6_Z2Isp9s?N02FP$y*^A1p52BX{EM#@ z8HD0v*&cl=AKE zVFCp@#K?2SoF0lGeLmgtp3RTv`*g~CDo$Yng}i5X3llixLBYPpvv~zL*k3OKn+r;x zh!lr2eY>1+fF*7lMi0pY%@0H%>kC2pv6bH*-QtD^kXk4&JUTBlKS=QSegm!>sXf$e zE1jVSD%+ldMxwt#CcwbQ)$q3lfx5ljte?{%+x*mhdUbE#l45|4D}eVCgSOHYUj()5 zSkFL|f%fCEo&d4CSvP{H)&r%gKE1jtz&b(u10m-uzkgv3(boe}1lCspVt2Dm|3LacmlA{QV}|H+fhYp&GXSx>SrtJPR3Gy-kV`@OK>Myi`c7W}yYo*P*gIf- zFF@>W)|(&-s*e}$PSBnpkiN+feOn-k!1@+|*xjrXK@?QqO@L`l2EFav+Mp z`XWH=&KvyOFN2#J=$HJ$r)EG&_ZcYZdUU&(gVQ>H6X@au-_|GmEzFQ;@ks-1$YJy7 z76vz1JitW@e+%ePVUO-9=AiWF!N2%au>|NQyJm1Q>=u2V3eqHU%mZ`{X7?0xP%=hR z1?rP|bc^yn{ z89~PhT>_VTD0dU_w|)mjJnG^psQI1eUe5-FPwW4Z)1Yy=(xX0>r;84FAVwEK4S^Y; zP0yBxi&r4L!N2`7sG$J$3G(ztX_HU4Zue}^FgEBez#QN14WJum4Zj(J&IowXc?z^x z>j>yL)e>RYy=zJyjTHj_nHd=BB=&>WaJ?uN{{A044R;JQVr_Z_c17e1tt+5W(^}B# zCUMX(Xm9P67j3sB8NfHtP4ED5r{4fomMkhSn?P4iO4?%fcV*{6yDg9iLo}dZ?b1+> zUQy6GV2@tYljWek-qRO}$)J7~=(wpb;?B)?c7m1Pj9hFPsfQ9al*E6m+KR zaqtR;|D|k@dc>n!9Mo-U{v}uX4z$b$R^P$W7j*9~2S^T-W?5FSmq>#a1HD)U@?@v8 z1gNq!JOE$Efw(9ACgd7ncY)XEA?X*CUJ>Tib0F$3N007m0R&eFZYI1v2U+Cf(fmWM z^wA4_h}8nGuOsCz=smb{rJG-XE)DVMbmn-y0xpl~AA92M+YcJL?qq&_1Cirl=7A<} z|3W&|93I_JKXHOqNKd zcsQ(n!46Z^e3;Rz(?y8`WJUd4&?G+eY*A353~mn~!k53*9h5px{{>wH;>z*T61@Ha z?%xp4&OhLTn!Aw#(9xsY4(wEL@0=TS*&rxMfbuWwUSqk^mmZy^FJ2UbhD*CkUwCw~ zy}phJPlWxYo5AWp>(@NGOJ8_)vZ%aX0O^k)TfzqJFf$~n{-XINXaz~_3sCMazX=+V zd+5=5%cIxU=sRfM_n6^<7usIm{v(&wpm9Hl{l~zW?^`M3Vfg*Na;2X^E&}I^&hOxm z1qG82XpXS+_zMxRb)hdjI`4V(+J5^6vIDdL;5e4?5x6+iw3X;=O4b7Pm7oen@== zU4`|+4K#Xh`JmLyr`y9@PH^`##WE1UNrK%|AOG z>K|}@!oMw0pz}iWqwfb^Fn0tBcpQ9S?{V;lJ*ZOwQvdQexc3Iv&%Z4kp*$Q#IW#}A z=3+Dd6bE+mLC%N7FF3U~zfth%*8M#ht;yoi%_=?}T1SJsf{-I3T5f?Rs=D{6KvvvA zu9S510abk^MxLO{efe7;_uaZ)KwF``57Nj$T=5OQm$61gVV@>QrnC0Ki@z_~7(6>& zR1{u-j@|){Sc0wT23zCVdF(}uALu^ZJu0AeeIDJV7d$#|z3}i8WB|{pfG#p`1x?(7 zSFGiOQULO(CVxxJ|Ns9R&MQ%IKje;P~x0dnqUAZ0yzv;I7PWa7g!t9`FI3 zYG1qKMWGicQu$j!N5X)nMm;T$fljpNce@5&qVkD>fx)Nqli@eeMa!ld;AxaApd)4A zqeULyA3?WbfG&rA#R}?Az2ipqk88`@lGJYBH6EN(3_zWr){`aKAU3G=-%z`Xp`_4* zGsM85p>{PxNjXRY)bvl|&u29)kY(`gOc!wE7eu``n!gov6pRPzA_P$V*Ll(7`$Z4M z9ifYX0s2%YUF* zLeQ~w4aoxcJ$g%bfQk=DFm}4mc+nUHD$_#`cyxosd^(@KnCC6Xz`re6z@yuDM)N6! zj$i@MdZ*TT|Nj4Pe)PQ~Sl}h-pj1#jsgOsL6HAf38KSko`4H1GuN;P3=r1`4?WqOTVE@uw4ZnGIi+S+x z=kn=%^r8W@EWex0qdPz&t=WNv(G$||^Xv@g@ae430N%vie8wcAHU z0z8M>`N*U5m`kVckr#S@{{MIB_C4a-da`7xYp0J2%j!>7AU!K1qml%PDiw}Cw7$iMv>DD8cJif>i9+%&NI--0YogaNVKYsD26E59%L-PPhgYTpqoq+r#x39K(Ei zw@v_EAQ5-m*!v}X3ve#ikS zrpLqd7+wT{#lFArG6Knc-v_euMXo-C15)@R0nGX4(RmBJdF+LN4rtzhb>ReE2G8zt z0dS=QzS06Y9X$hupa-aLeDDFYXXo)WSHu4vw*UV#Fz~l6bp;z>&Nx;+_^Lxc+(c+TM8sYH=PiJn$ma{@ec-sd}K(aiRA= zcy|8qu-*GqH$<0)d35gwjVZt{0&!pf-2Z zH_vIvJs=lA`PuSVktS?B;aCwLWIW+l(IxP`5x%V_OW483h?nqy+F>4@=U;CI-JfE4 zt>``SQR1NT6|ye!Sn)N41HpOZ5iD*|Mhi9|wb7TPf$E#%9^Gayi$Lr9Anl*dAE4S6 zmbc|fxImLfknszU!@CV$x`J%eV&>8L0X+15zynW-<#F&mH)sU- zfd^;HKTuWW*)5_1Ez-c#(3c-LcAj4O@4t))f6Ho6b0&GR1`7j&^<>ZuU!d`(W(gJs zhF&km&Tf#nPp8TS@B}V&9M_|JvH=U|#KlV`F&^E`3Ltj#D@Kp*js^UnfnkVjXE#{F zda?xz14A*pM<flN=AmH2mGyx&foqw|CBCq^yp@l?FFr6dj^_jgUqG8a1Q8g$zTsByE+=G*_5D$d{`70~=c^L`6f1_lQBI0r`g>Dl?s zF%(=zcY-_cou8p2N6l{}JiE=X%>a3IyQo3OV?p=0L8h)DL$4*0UfomFz@;x}c87oQ zsUjJV<`WK}Sx}540Ko1$kpMYet<(36M<=uA<>!8!d(=SXtw(b^c%}ff>>yM^jKT4n zs~}6a?-|c-wh|Ao?iK}5GVtJEe4=P6s44_c-@Hd;_?Hv^{{KG#DuX0EtMETk|HG?y z3dEdlBgoWI7-*jb=l2E=4kn*YtCyfL0Hhjdf(LwhCKNhFjkvqXv-1l7_Uq7XGaNpk zZ3f_Z8%XQR4Z zSHrg+-yiyRhcb9VOz{Mpa^3SF$du>y-rX%mFjI<*J-b~D96(0!H*W#0)A{D2BH+N^ z3fi=eRu#d=gFqW~L3<5KFQLTZ5%2C0Bal(Q_?tlY)O$3aNO0-=2|mS$8ItWTKk(*k zF#<)DXLE}RIHq2#6BA@VN zE+78YKOn|>bTYm82p$)_2h!CBvIMmJeS&9qCmjR zW++Km!BT1i3L&r$`CD4Sw>yLK0qRO#@WeH?{NmI3$fxrgXkw)ZG_ccb%}{#81GFYp z`KTnr>zxyPdTWn>>e(xYB^eyQxu^)Tl%DYbsp?d@aSgE?Ep>xf|mtA$}4cu9^`>2+Bpz) z4QN;zF+mB=6QF%35AA)rTNpv9*%Oo}zu-O9SE237&fgx5Z$OuOA~(Elfc9nD zI{E4`Fz~lr0aZEhvK3TOiZ%ss9%Mq}5s)p=(kk{a z=)QsbKD}GPJ0*^{f>x4(27g|#9sB=(-+yoi@Vjg0OVFytUeT_7phfz=oey42e}hVvxfTUF}#SVm4aPJ4cd?L;)e=o@c%IQsL#VTpr#nu$k(f1 z*r}p)cM$7met@!6m}loXP=>nd@%@=&NHG6|Lxv}P7+>&jyTm`~pa=U`V4d;=l5p?(B*d?owX0Z1D&7VKrH=j4f0Xx3y<#F2cFF*{)0w2L2JcLA3m05 zc+ms05n%xhWPZRD}cHt8lZ8rW>6U+4{BQXR%duL9tJo6I{$)>ck%2F z1@Fr0wYdt~4Crz2g)M)pDkB5K3wLR7bAi7FG)?2#9m?Qi`O2f$>%uOOx)Mo{zdX7N z4Lmw|E_gH_V)W?syWnH_uJpBM<5BP``A!xU(C%c<&JYy^Ps_WdQ$2g#JV0AuJbT>= zK$mGFJOJ94;?u3+(;aZbvzy(=@<&OjM{mRhkLDi+CE1`c&NNrUC$Gif^#^Eh6SVuv zAGFrV%iB`sQRy2`{{7(x`1cnx`E-V!@aV2q@a*=J;9vjABl(*L<3Gp$VFIlOO65Gd zqYZp4f0u}YjPU6WJ>k*(+Q8THP0?1cf0|tnaCmgr?(l3p4)O!YT^^P{_*qlgPWunxK}zOoTiR^IbC_|Dd&+sdO?1ayQqLuoi@ zT1f*mn{u>5yIfi7X?-~2VyT|HZk_F zM`!Je7pkuy0b^ka3Ygj#po9zw5zv^usn|nlh8G9@{v)rq29HO8!a>8MyA4zq`*fET zcy!ht@abN502D0UWd@$ipc}PZcX)Pw_hnA4;P05r#K4fo|NizTPkyaCpZEo1PkiDR za6R#fKazD)i!MVNzdq}sC|L&nX3##pPaga_H#~b?9elcZLqM_~{CN*vr$GDJwH_Y) z`vX|g`16l|ThlzlhV<@;ra@Z*VF4{>9~t|KKKh zo2TV{kIoyO{LaUHEKl$^WrNP1v%JsW{1ohGSJ1j>CjM3ykTB?6iEh^&pZEn>_cVii z_x_|OG2o%y<^ei2t@#HN zf7>Z=H{bO@bB6;f0|TRHv#SE*>u$Jv`1gl0_-g({Z7uA8`yDi$oqWlYfBi*|#zU!~ zgYPcBf`*2tWhe)Ka{y=@2I}z_a)18+e`yC=qX0ACr}KeN=Ogg4gp1%!Fq{`YdGKo; z_{1M^;1j=~>k06I5s328xAjSB9>Ou6Am@SXLwAt}|9a60po|T14ydvIj`Jn>P83Lb zwszIvZ@LZkJJxV%Zw0NTU-|d{e_zc%{2kp4;EZ$?HDkjR>FS<_4<6m2 zKTh_NglD&}K!-DjN3S!u z+&Y=YpL393(AmJFlhL!&RRElkL3$2=dJ1X$Ifv5tuN(%IUltyn&Jv!Tu?%SY?vc_f z|9*M!MiR#z;95_Kfq?-w0>{MQ(iywMr!)4%i&O>BK8e^99?d`g^S789gU$fz0FBXs zF2d?O?a}Fb!b9^ge+&2?>&|-~oyUDTV-LKTCj*KU{?>0s-~K~}^txjYcxc|^Z#@Z` z!)UHO!NA}093%;9*MLVA!TQ`}z}6k`Xg%Q3d6>V29keaE+x3J`Zvs-k!1MbP*Z>sh zw0OvVME=&9j0_Are*9-(Fue4=bVujG&J&*9+d$^~cK3m5L`VMhhy8j*6g*nL@wb3C zB6fZ-{QsH{obNn(s~9~jj~A1Tzuu*&2rJV+d;wC@&E7_!*6Rfi z%i~42LA#2Y6G2|lJmv%1JJNubLBdRdNwM7?`W z7`=OI7&&}8T@SptBLUj`1$LfKckGUC-z`4fp(}j4eGm9DgI(*{Jq_F}Xg@EOW9K_#r-Vmg}4K$eO(foqZ$MQiDyKm<*5Z~8w8faLtnBBJ%%y8u2Zr*vq zr!!f>gMa_UgAW9JI;#aZKY({wobc$B@U^@GT88bc0dA*s9`roU0=n9k!Kd?qXQz(} zhcDwDU&}|OPdz%FHPSkRSzdz9#R11E=#U3cym|EQ0Hui+%cUUEE@TLa#+O2nBGrX~ zVFxHnYF_YUJmSc|{fKvOi1H1O<`)_s%|A3i@yqY@$VKx3sGMh*>G=J3=Rt63%rDR2 z+skwCCFHKq+7n<)UpPW+X<2UY?f=WG2H*bg2Q}GVSb@eF;p<-@`MKBj%U2x+P-6{g zYZ&M-ji;5M_BDe?_Y6=_c^r3E2n0>-5)^hjoxO^K^PwUVSCj)_Q5MS z{{4cm?GT+8U`x@UH6F-m7a(^^b9!`6bO3GovpiUO+N1NnBls$f7rI|Tt1?)(1%fJz z_Xj+VH-knhLCKU~uo*P&>Cp+M_yxhElaSHK7ktp}MV>yWbvPM3#t9k6^yq{Pg?2ZC zM@K>H5Iez4$L2STr3XAZ!REgx%lQBQ6Te{d0Tu>^7oIxczy|MsX@=fX4_mnnE}vhP z^P!a2FVV{H=KtLM?a%cq1B3KCwxiCi;sIi74a*d&S&6Zwu3Lg*C8|?;qd6Z z0q*F4#{(=s7Dq!WDbUmxsAB2_9hc$p?GSjr?oz3!M{g=bJtWW}?KjWP|DK&+e0oiP z7sxVrcAf>Tgz5a%{7Am}mt6T-&t#ElK8&C2{y&1Pdjk!+UZ{W_6>$!9wp%Z@qayCG zgXSEcdH34r`)I!N=oP)0F3kXP0d!#%*bOh)E(tI|+yOd9_xp8K(CKH;qtjaIK)obT z6B2a(sb{Y%hmYk0{$|h>sQ$es`k=7bp%9&#o0OUo>)FZXc+8E1;f3i8vO9l1RV|XV){h^@HrJneJ!8zH@^Wjy1p}mtmJR`06Hb1+gZXF)UN_@ zJi46)3{QHr9;o00O=JD9-}(Rl|9XDE6Cf{n^oqV%3mR~L2KHR)4HRD)ToeGE{{}uC z?h5EM>Rwkau-mIZHts0SNGwWCQPA~eeDACI#9kycpw_=4^gwVQVfvgKaTOSFEcI( zFu>Z!&~wsWl&k|KMzAiAUQw&HpmP)s`e?p0Jn+Kuf&hb0@(ur96K!A1XZ+2e`81Di zZja6r9tU6WG(X^P{=v=PV#~(Bz~6q6iGiW{2OEFO0cH?`oxe2>+?oU#Y!14UT=N^q zec?AcIl$j? z7gT3=gH`djfNs+B>3r7h!2ylKvNci+V2`6kVE%cK$3g8juze4%BKw(V4b0Ckb-)L} zLDY47OZaped&l4?w$8veAobO zcuRp6wn37#M<*y%zHEk@*LfdQYP=A+3N9dC-U1y4+j+yY`G5p}s{lB(ZBJE5F}!%( zFUa6(c;Mw9kpCgY2q?9HPN4x6V<%TiF}&~xId=y5f`F&|O*=r72=jma|KI$Bhre~& zFHlVjIcBGo16-E}8J>bFbau75Y_~OVSVFsUW-yI&^p$9;NW1zyW`4(Lks6ctK9>(PL&{a14YLhrJi28N7RK%pF60G{5j4i?uIqF?0Zs|62TBzAw^?{}`tES-{M-DT z|Ao$v|Nk8iyk!GzD+jN9>OAJr%UaYd&G7vo0|O{1MCDdUF@VP`dTk|ENP)!#KmtEN zDmWN?dRe(vNHKVJ{_^Ox{k2%%T(OJ6VMaDv5hX17pK;iSh^aLmcbv^(E)CZ65 z(j8$Q-Jvr)I*%D12=eI;T>z@l&Py{m2KjXRuJGx0-SEQdG&l_#_$0sZW&8@RVYEEZ zP#f9x#Otjdy|%MUK{4%n;>Cs@(1I%86EC?zp6Ru1f=Nt=NqB>fYo1vk#^BSPEda^| zKE0xCjo_6NKE14A%cK}UXLh!J0S(LOg6FTQIY7C=W*KN2n>8{HGL8Mx6d@<-xeY8A z)g;Z}13DI#-{p``x3>alrMyq4>j}`Y0H8zHCeH^QJ_YiTxks;P>N#l!#{dsd;qcAy zfMY1A1Lo81dg4XRNdX4ONXMv`*S>+~({1;afV}Lx!KX8H2dD!F>iNDn-VO4;?*^al z&>cSApfv7#;^jh6KLk9!|FV4zsPqEY2hjH1uYC-l8VIzuA=syP=>t&p-T51|8n5vU zXhsWpkmCjDJgm*2>6BYwT_9DR2VW?G9MsLqoCoTLJoM-lJ-t*4dcH`vh2eo0ml#2f zbL0a9csv@9fD8w(V|a0i``drW`dwJ_(5H9r0nj=k(AhG-Kn>2XVEaIGT4zA>A3mM` zvEAlpc;H3aCS>RR_vk$Mq8Ze)Xnw=t+WFD96SP%6Di^fFLezRGC;%TqPS5DJa11v* z@IsyO+y96tP%jdGI8iCMz(LgWhhHdx-3xYWNU%re=Wp%;3j8f=K+4FAbn0y;pfraa0668cismX2wKq6?ZEN>0b+axv`^b13$jn!fE5&@ z3?AJM2H@d)MI{j5LE`mJgnCH&>SpE126b1T!rJ`Z3_jhErCF{2>l{2g|9EzOHN5?r zYl27fVMb5OJ0&`v-6eM!zy}z-0j+a;?#RE*P2l^56$vFWplv(NhZ$dhu7LEkyia@`irvO92QQXWghT(U)VBBqPP^dNB|3{J9$~{nZPAhIT^kqiIQ{GYf2eNIcoTf@H>j+^k`6C`MpTjW>oIUT zoCI^PPbV?!g;7@Dfed(=_a9VrLe6Kw5#Nz%ka7_c-!Fwg*Fb~oPmk_;ftQED27t$d zAawv_>GNl#@PZfLQg9D5fJ5o}i=#jP|9^cSv>vzX((hF$yPz1=bYmo5^5Z?n~8Q4Dr-LC~TmS3I$9^ZN% zpk@BgU;O@o65r5@>gf-Jf57RG%y^y!O20#Fed=`&EbCKU__v?)1f5q4J|yoY=#acl z@YdY#-$8f#t^uvGIez@#|Nr+vXJzp(K3+T%9IcZbL7SJrIgG=n^Z3i2@1Pa{>@Yoe zhVlIV5M055mc$=?#qGh_avhY+U!MVmpGP-qZ!)Ml1FdiJfgE|_X}tq9CePng4{ESj z?f?xp7a^Uk2phQtEtKwrZz2x$?A`&HxtIZ(xd5eK%U{JbUhhlO@U#K7T04mkPjFrd z12smWi%mfdBK<^2gGm0**Z)4<2EN^C2EMINN?3inQ&bc@kGFyr|AEG^!P|SbLA(di31bpYHv-3J@C z2d|rBQSs%ldJq6lfem0px85P=~d9FL*wr^?wOB_{bZ` z{F_HFYXbNzRc1t65n3)Ce+in0fYm49aaB;g>-fz9bR=d9c#h&6e-mikjwkkonI&l%ud>&N(;?Ldoq;F-~dfBP}d?+>5{Vxs4D{#F5y>TWgE-${PW-c|DZh2 z-})ZZ>j51s3Cj17qar{nCMSFbMQe%*B%DCY7hYb5o$CqFc=j)71n~Wfw9o(lzdQh5 zKa7&T@|cm*7bs3VyCLZdk*d1C{r~^snTj9-beZOAOOU1Dv;>Zxec&-Ih8K%N|NVba z=L1?VTdVNm=(qp>J>fym-vYW_0uuZ!-T(gokA|e!{O|w&Lxyc*UpA`qm4C223z}?beq(^# zm%ZW9%~}`-uIHg0631_D0t)=C@uHx<46ACiE`w+1U(e1j9^K%viFD8f2O6MIPQBpK zTY3Q07wL4};nC~5!KZsMr0>)WrjEOURv9t)bmpG$=q%mv;t+Vy52BfjXuh zpqc+}K4fp70G%y!!lUyPc+D(maTI94>KJG`Re_9c>sBaEh0Pq>aKwV6&06ICX`G^JT66U7&|No~=fQ4_#p_ib08^C;U?Xd~0 z33QVV=zc%&SRx{mZ~OfJ{|m#}!VDhZD~FO5JP>kKAUV<5!VI3E>uNy~3Ld?o8$5bV z4-_#lcp#GX29M6z9WS_N2{X7FetWF}i679m7MIQs9^EE~z|n;8?u^FAF=QN4`hJ$jf0fO2eQG=Jwi)wpu2TJYf@0v_vdmT)E6uGbSFdF+6Yhm1zmXt zOOgoTXK(-i2bGpBpyRq7`M0sCG(X_C;pT4#-OJ7Wp zD03UMi!*q19$UfA-xBus|NobusV;baLwF8!ekm;3A*E-~dSj1nNVY~2zWoNA`V~Nq z;BS!xnG2f6K;##smHPaxrl2NEcd-O0E>M&E=g*)H8v_=LDuHq&1rqp@tYe^Y@9xbV;58YbT>Oo{RS|r{YK;o$ zNDNq0@!0$S|6e#xN91Y#mTr(%NWOlNhb3PdPZMT%nFi|fLfT0OUn+E-f1&Fw0Get9 z?W8{x47v@BzZJY12!1123wZHGud{#$=qj3n?-e|n|8w($=g41t@DgC?b`WSiPy#x8 zctz&{Ptb&o%5l&*fM>TkC>W4}Y0)cCGCj`WYx%tNq2o7K0fiD?kMGP3py}$?U={|@ z@<9HUBcSP^Zf6e1?l1w%37{2i{LLGF{{P!toU7pz-_~z+3Rv=sB-kNG7=10jls*7EgulfXY%TM*BMSVj zjz9nZ2OTTS#NT2D7Dh>P$)M&wxbOz8szEBdEb^1N#a*hPno%yw@}p zRAqJEf5H0d;X9~t zTcQH4s*zGC!wZNwxKiM6u?49$fvE)r0UyYaQgEZ^%5x;ONM`JL{{O$@Hx?BE{+6Gh zu4r>L2Lpf0yKn#hgAb#4`VDl{!!}p&7#e>|E@+YlxrXrQyvN`20MvS({ORj|&u*wA z`CB%8|NsBxa&W60Du!gKJJ>OhB7(oA5o9m2p{1KZ#V=A)4c{mUt8YMcpig(T#LHcf zet<`>=}%BW+j;**;$sGem;T@y9D2u`7r4m_>Z`iG{{R2Qfl0y)FU>&ZDQHT+({;tm z+aLwq#R5Lv)e0{w|G@e`F5f{7?DsF`Kl}gxrTKSI5`x~g#{rrF2c2Zf-|`ov7uiQXuFM z71(_p;DH+c7SPH~NAQeO>m*Ll5$`%G@Xymt z@a^6T>bm%V)>^fKSfJ@<&{5CJK7)z`8x;oMPOys7#U8!2YhL8{N;15j0jVE4OJ{)k zEGhwzK8wifum3%|OJ^YWTdr|{mS1K_yzWPY3CJ9e&e9n#oVz6%KpI|xZt{9@^!?ZW zU~@s?Mnp52t#I|Kqs4ebhjJ>O@D%>{E9cco&)wT z=wvkh)~Nsg|G%DVc;N7a&@}${2cQc@q5H8wds-^cdvnd;jra^6owXDA1zl(G3%ai0 z7j)gh-_pm#z~E~5*0=M$XXoFv37*}ppivv&-ZoIZ?bXfl!-s#r0RMguCXen21xNn< zhxpf@@JK%C!Fbcd@-%-7X#0pyXK05ke-6}|2i;G5te=a7O!)W`Be>1)KE1kmyMzMXGCyA53ppLld$@a(+o zaqtDJ=fT(9orgUSK4xxyZ12(QI>DpYly@dLTYEISE@1TNJmk|k7u0F<>CD~W(b)>_ z4ufvI@C0o!>jq0TKT7au{*}Prq78CPw~2~Zca0oq@Av&;ZLjVva-jXc9{h{%6|;IY zyB+{t=TR=u{EXS5;U8lO7euEZ_--6`L6#CHQ18a8dy5n_+U^w_cy&*a0`1K7;9q>J zNXesnD##HYy{0OYzzzku>;tzUY~Aop!#$}g0uNJqpvl1 ze2u>ul*xU%ODBM@YJrXmcr^czE#2kO?7D&xd_DsHU_;$W)J;~oX2^0&xaT&h7%Rpm@p!Ux_(AgPR=YUo-6nlV%QyLG0 z>faZK=KTNfWBIuBu4k`Xg=a5x)j8;@D$srEu)KMp^tEGm8)!8$Xa(jC&@f{+YrZFF zyRrpCiL!5Z8|X4Z&+b0Z?l{kGHwn*P5e^T{3m%rP3;0_>8xX-0%a9vfj6J)zfi{AB zbcgQnu)GFp+k#fJZv)-<4O++q7BgV^_TRC48raH9rIw!EZJ=uy!Amep_$GkQN^CyJ z2s$0%vuF1;IQ+%&_woK;k_@kBfy*24Ih^m?BpF^Gc`@T9sIq{}zhZNL zf;*=BYrHVspZr3Pko$9g{r?a0Ae#FvQQdC}azA2&XDrfwAF#W_TO=7?PeS-Z9psNa zFD|_J`X3zj&`km0)AO3&Xt?li3m0_!c8G<)71XTo?e0+lrAS}U4oz0jzB>U{T_srt z$L2>&rCFc&1w{XQ>oR~Yn(Gi^M(n~m`H4UB)F*xcRz@Yz;(GlP{LPEm7{I&r4tjRB zsDLi72aSGrY-B@d0_}V}mBtTJ9EPko1JudvEm6^MHN5THyG8|+8xXgoc<}ER^T@2@ zNCS;tG#&$GXV85Mp!-pNfaY^Ol1~|4^7#JIlkqTUpYH|F?iLl$6o@Bti%JHlgkWw_ zF#s({W^PgW0i{6;aD5nWcyu1~)ZU^3T51jIFLeY$_9dQ#?&lH^eeDI>N)~xBjbHx) ze{%&R#D~8;x>-9tz%slyy>uCNfwpFNbTf22NLXIr_df*kqDS%x{$>-XhJzm6q77cU z3?87JdX^VF_?<5p9snJdE9=qu0aSjVZ)XJ6>n}Jx_}B9Wf|6Eeiwbx+!1AXDztee8 zrf+Trtq^UwR3ZiPE@)e!r*?}9d|zREG$blToxGrt2ii~%+OP)N{RWOakR$n=Q(dO=PB3Hw-{D&}--?ok2lX=L%S zJb>Uaz4&oWl;MT2I}i9k2C)YI)^niI2-IDcpZH@=fcE1Z^x)t1!ybIDGI*z-2fxlQ z5B^>M?O%cxmHU7e*Pa4-3T2-jcq1Mtd4he|B=;Y*8v|nAMGyX6zwD8{+6n4;`g9)f z={yKC=pmyAC&+d!G=rFs41zlB3#jRa#}zNHfqEF7hngQiHw(V<;5-CMT&F&PHVe)I zEu#76xR-%}q2a}c$N&F(cFzGPMo@r)4$*Nn{07O_t(W*)Hi8Z@>26U0ZCq*o!N}iI z2U<@4g3+-PBIYr}r`zU`XY+rRk_yPdaGuS_7++Yt0JR-{ID$`;$9t*}=v;>P+%UU6 z;OC)%S|py`Jz$rC*0pQi@L~J_y4A1=G@s?sdZ|Rxqx1Aje^3Lidx{Fk;h<%etq_40 z74T-6&O;s-UwK+jQ2}ki;csGNW?%r76CfVwmc$Iu(T9S+LEG;=ds|dM)wu^~g(`T_ zFQZ3qzy;8jb`Q%F{4L;J=-sXde7Y+Xe7aYFT2DU884f6Im+PQ)aiBZgE_!xe^St~P z)G^WZ>HH1b2iJU9!}H?X5-G=TM;S{#LY5hLG#}P@!3FBfUVK~n%rpDm4bV1w&)zxm zpbnc)Z-s|PZ!^O$1_scQp#TSw%?up6}F0XZ>%2F*R1|EZLm2F(Q zJV5u>S-NiEZ_WAl|Gz8$wh$G;mxq6X(rb?jXo$|I+X}Qp^VVnnx+c(pPoSGt_!$@+ zyQipt4x9oVi375WF^xaxuw&;Ga1wUp7iLIoRWV|>Z*`~QDX*EQ1-(shlz^Yy>srF{$x4GbRL7HFH# zYcxP%xCiWW&<013?&+Z51GyX&UZ8>s6ud8vJp1||7GW=sf)5%btf?PalO|~J0PX%b z@L9(k9^KQyIrexvXuK1=u;6%m1ZeO9)cif(uD}Em1Eu?2Xz<9^oH-L_^V_;wa z9d5(l@)k5|+`SxBl|l+MP(DB@zw|*D34-_AflIFhMh1rF7mSb{c!;u#zXf#qyH6)* zd=p%LRXirG{DPi8=7Catd31M!T;|bv!bkG~tn>o4ggrndD|qg@^UO=o6@uV=iR3Pi zZj*!HYy_Uvc>M@8eAEpNu-20$@!c^0l%9c}lLkt_7d^TSKl9f$g5uJn6HIkCgOV?3 z_p(Pbc*`KvLya>@<+0S}%g9?!an6x5Qk0JD0pArXk)5}~?nt__L8cz@&zY^FoKafMerR(574dmd8vC3@+WQR*ZTKyFiK46|`mT z91{cN1Sf%mkJy?Y?B~4T*}Ml_c`!J3xPXR1<(L^5z8z;NO5n3~pzVc|UzQEwqTYREa+~c_O1(2r304M%7g9X` z|AV$@9bjW%c)?o(J%CDJg#v$T?6l+3>u<5nN6?^1GaEe)Rj` zLnh8sjvXN?f-aq(9J{xufG(Z|?aSYy0t$kLa|$b1T=-o-r8)8om8eL7N^DT0lF^Z0 zaEruzm-&g8Uq_x7#KiB(gM)VtlmmS-_AWMATdxox`mYsBsoU~ z)NApuyvg4j%f`Uq)hqHBRFr_mpnNocdGv-{H~}i*Rl+b{7>6@Hm9!A^v7i>mFoZ$0Am6C*uI9X>|Z}o=CDi zsC6#Dn=A_MogCzE?&n|t_f8IYbc@>B>oRy)9`fLKzu?&^q5=xO7LZw<$6HhiK<5L3 zT3X*)!2VU>Z(R=RM0B^PRDfp6S`YAdRB)hJCm?%7M3w>6Rbl~K8*}*+f1GH5C`c>< z#0GT;4)QnaAvxic9n=X<7eHYEGWw-GBLhR{t%I)wn;$WPuVw}ve*?P05Ihv@@a;Gw zf9rD=aEcF65jgmO$+7cZ^P}IK7r;rzrSl^wYC&hLFf^a!aBcaqP7GXz(^I2OYPeQ`Ebq44}5@=w0T0_FS*aKF7f;KktcdTGXSObpE zHMXGhWb_a6H-j<+sAm9*#y*(wplF-|jvklJ_b-m05C!KuF$exubx{84?g6Lv){`aj zpawQ5y@56c33(iM26fyRUL4f|H46kmI|Est+vzf-HG>9*3fRCwU7{k;{OnKXhvpNE z;BW?~7B*<=2URMd26F}{1NiW6!M`58HVhsIUom;?IR8EP@zU8x6hKYUPEb#k#iQ4Y z5!_Yn7A^V%S_;&nQozZ;(0ZwaqxqbpV@HXK04U>KU;&*3)7_#1%7MPUE-D$my*=Pk z4U|AZopn$?0kJ{DOE5ObDPVRdq#p>nNtVN-H}HZdsL}ic)T5i=(Yp(D7)|FzkKRo$ zKn=a)O`zs8NSjCV^B*3~&wh9uZ@K|0=|I(a@1z|}3=En-8xMj8HV?jJ{_L?Dbi49* zkK;`s5wO1FO)H>n0?m&ey_-Ojp^f0<6?=eo4>B+?Xnt%w2@Ls%O_u3;b_e_b zrP-ETQ1K!U8P5S7_u3sK0a_yqx>rZS^SA@(#0Cb>#si@CuCL_@{?=pv{{IIZ>-zjf z+%?c_8tBwO{uWSk%%hj}xD70I90z5@?iNVOI#A++oU-gc@e6nheBu}E1)npQrU6P` z0$@%Wzy3k~Hfa{nKuZkhv>I=LPmcUCJu0BX0@C(;&qjmM3adK-V00 zPkjN(ecDr0KpH(V4=|jXWevJfoUuhk093ejvo@K)s;`aA43M)SUxIFda6H}uu695% z;>daLWgn=S%m4lWr0vbh!0=KJG+W(yq4^Q0t9t-+EEA;B3_eWg<$3V**C9wp_yFiw z2}noy5a_6(m!6>6vfjOSK!<{N6iPC@JOWyc`tCRz!wN?J78Mo-hKn!2)tNx^2gc?H zjGzkb0TZ;~d-)4AS=@N|1!x++o7KSrl(Qgpk59M74hv8-7BpCNjK5(msMp!OM+H=A zy_kRF>wi$~(eeN!+SvjY_3egKV=w(c2P}H@+AcJOwBsjUfVSfqm^`{IUL2D7|NmtY zc!_8Wc>K(c8v-FJ}YolWqkIb~_k=&!2;;>7EPLXnBLbB^i{PyTPjXw>fZh z9y;)X>B1|{3o95)4uMt{dO+kndZ&Vp83FffI=6ySr%$(of(I)oXM*@keci1fD?uZ5ofkbjuX#AF3y$!A1w+@rH~ z1$cy|bpt46A6_XAWWpa>;@|Nno&%Pvs5<9~nP<%8cCDvp3A zuVJG}7@4RTBn!<%$_0`PFYQ2kG(CE4?-@ao@VT?FB+LRz!v7`z|9?66H^@?BP;U0< zwcP?$xdf&Xl=LiKTm`Azis|ACP{zaQ9_Jtb|L=bw3hFt6i#||=1!@qcfX<+4Itl79 zK*XV0&!hQga=9-kN48%4`v3pS=+|HWzo?o8IjS$__1FKAf>#xY?`T6v&2TfUm&!en> zPV-uTM#j;mLVY?PfF>MEO(9c6K9(;^-+w#AQVKe+6tr3ka$7Zj>rGJpLs_i_+CS;j zZEC0wni{ZU;BRRFb$B0fl!$or?gkahFZdWh#WjD+HPErQ+nfbD4>dnxZurGm%K74R zK4j_x)GtVT1@0GgI17Ap2K5O<7#SG8ISaDzw}P6};QpB>XpWx06?EK_XX6o2>h!gI zQ~L6ovp5TXs}v&x1L%H+Z_a`oC7~Y8V9OcmxjdS8gQ@|BI!BM*+6^xn{{Q>ma-hTn za_xDy1gJiMR~(@`JhUf+R3j=455{ItodLDqj)A}RB`AY{X7ZQjN;13zo$dx|>VtZd zp!z`ywD!F>S;MDyH)wnxs;@>RfWfynN5ukka3=%kh=1^bFE1|1GB9{HgJerz!M*gn z^xR7gl=ZQl_g`qd|NsBxZ%|j&qu2JcJ|w9>J_Sqa;L=(|{Qv)#pll3UAn-yh8x**~ zf-m!+y7oeKt%d6XXOMeh|Nnz$9AC7Y2h9mV_IH8iRGU(ccE~Lp^#; zWsGz|$JF*`f;Kxm1x@jDcyzN~(?_=LML!>CmellxAy{p7rWC`A8a_yFn*y4*;1^(h z!!FBUcnMrv^qQWBD9i#WEEWRmJpvIb0tq?rfyyfZ-W@PK2RwRBS3?wtOqOPNVJ`$x zFdeJ_GUcpN zds{g}T?U3yZja-vf`+;bpaUL2Zhgpx6cj8FU3Vu*GrY)v*z^+=mA$r`K?a#ZY~u6i zW_<(_?raA2?>u@irN!D<(-ZoP5az@+UmL zK|?+kpq5m(sUcXEw}uBKJ9)xSV)uj})Ri{Dr#rC1@RFzHr(z8c&{0~Q7r?v5KKN*Y zcS3q3U-IBze*x4Q1Iaw_IQWXwqce~LcI1}j`O>{0E1$0X|NkYZ4+%+MoxgU1?m_hc zomhCJ0lC2Z;nB@npbJV*wH=^SeIdKU3=e$vSPfd12z&)ao_OYe~)fg(AkENQni%n$1OyJeX7T9V3R;5V z(JT7w=fD3R$6GW1gYNNQU}*l#=yBW?RH!mEKV}4b<)cTht-^B9xa3lho{qVol`KA; zTR{f;bgr!c?W7QZc;`lnhc?tZydKSO8lYY3*uyXMPk;T7R5pOdOJV*4s=6k_10eLbUpKeC0&xC+x5)reJ@s>MBeWL3x9B` zdL!V`EnB3HI@=FA>!D8z)JL*r0H<*9J!BAp$$|Nn#9P7JZg z$9YbG$%C>2cn2YPiG}K3HB?7~a>PwdP&)*&@DF+*V2KAPJYReRxq1mRXeIUwZ}945 z8x@8U8<3n&E~v$gyuHW(v={-lmOl37YtR4xA^y1X;(W3s1MI#@P`J+rh5ODI9w%_b z|8545rOj_pt_}b>RZkN+^Ll2;dO|*(t)RXNa(V}?%(Tz|`x+WI9^I_pRY1wif`PxK95h4TdH;p&S8!A@f}?5y zc!e?RMYyUYsH*ANAiuB*fKq8^E2skV{C*T1B(0hcK&@`pxo|x!P(6>ofC{q*9?cJa z^S4d|wPnA99SPC46tv>In>7utO%kN7o3&LP>|{hK`(pMNunU>NS>WGuutW6W+Ae|) zhU$F&;%nCb|KFSi6!=>uAr9hE(Pi-IRse5u@c?z>ds!d$fGUamzTIn7z-vd3w}Nhd z0u4WSbhcW6`lG$9u^&O3IJbf%JUUxJEklpqR&ZbScq?cdCP+1CE)8rz=T?x+i_Rne z|NC}A4eh+|!oMvUw5W*X#e>iAs-eMKK)|DSFQ{nuIPMBs7S7<<{Dsk@cWVI1;^VE6 z(5k_)`3a*(ujtm#|NevOgO^k!@L^d=|xcGng_D}JBOwcs6~oqIv^ z!ycen5s-s@I{$$dY4Y#q_vi+v0np;&`ySsvdRTt&;CKE2y1T5ioWry8>kIZppzTF( zOC-}KfbY|Q&%FIx4mx}3Yw1gmZs;ykupK_VkjY`o|NJdiK?}55L8twAc9$3UbnXSY z#k2DW_%376elk>zD?qiVr{!P%mN}rKox5ubV9tk_(RswTvlcwjR z*7t(l2dV`;K`R^L!0!83`ttR3*m}m!xu8(+=`GIi>0J#PD)j7*Gw|qU6;=kNR11&J z8$P`%;1lK{7Yg)&j;`%|{^Iklum3%}`O-Z3^Nx8QcLOakU;tg`#h-HkG`#3z`LRSC zRL*sK8F+LGcr+gXkF5Gwek^?hstS8~h2DWG$a_AW|G|ra_%*>Ee<6Js)OyJWa~$~v z*+ApY_CB3IeHs7wbbguuI-;lZT3T}j3xh{*fPqJ6fq_qFfrUqB7>8%4SP743ci9h* z&H@R~PPZQ(%?CL=Ezgvm1}&(DEQ5Nn=ET?kzLxL!TSY;>hb7u<1@;KJqdhyVXyf-a-+=!Hmpij`z| zSpjN#LIn=SOESFdMH1Km5&#`B?$f&#WEN<{#+-Q2GHljZaOg8Y%L$KeRv86o(bjq# zw79eL{fkK;^LK%agQTGsja{I^1Du{(50olF`~I*~`avgSo8~o2GrW*||L^~cCkMa& ze|h^hMtcg>*K&lmHBj19H^5UW-`oW_N|aIB5d5u^K_xY;Cl4z2LG6gn-;SMMUdUb$ zW@tT7s`+Ays|Z8ufsz97$Xc(h>UU6Hk3HbhnR?=d$7^AR*Q+7xLwve*4dr1qkP)ax zt$P3ezYC;`d;bxrAp^b|yb=_By|o8AUH81mhy%4v_Pk7mioGb0kz{y%_yxm3Q2eoe zRMKVG1vz4WO^?`F`H z7{osw-Q6ILhvg}c&hrqZ7d;euj!*9+49HrVXuABn}WQnLpuQPZ(cc~g|c;!Lq`+W?c>ZbGl3(!&Z(cp-3i~&W2 z12}0~yaOc+uq8#yL8qR8;z#q^2M@+_jt?G;+d&R|SqSbEL(fy`X1xPSZ=hpnf9jHA9+T)t;(ao9xva=g}WM=|69fp8f^#Y&^D4^EA@ZAZD(%KguozQjuFK!?C z`roJXIrxePkIq|$-(FaPrXxTDGmqg7M?`rDJD>LD;v=9&7TCXr-(Hr2eGk2lFVq9H zXufwkC^A540h}G6OFzK#Tq{81;NYe79+nqMUwd@#1`Uscydm(y`^eY-9><$O0t}!T zq3*??V<14sQHX)U&8PFZZ+D6c$BX9wpyK)o=(hOXpxGMGRp%}1L20eK8B`2|Mtq~d zdq~0Ml3%yZbI@V}@KM(uonR%N-L3+j-L(oH%?=WbX@>t_*zf-ez8q2P1}IG4gEpDI z*nJojVqo+Nq(%l>AA!RMs*VAs4z$Muwlg^P<;z3h%nIorfzt`N z?Fd;R;nDfoqxlU=$#uf;z&Cd>1^!mh;G0Lcut(bHa}(OZ(#$q=iui_fUi>n-^K)L19bC&*3yFRkpP`ycFm*L=b!`P?6_if5B|-d zv*REq+BQFs?>yH0Lyo_F%eAlnJ$gk;B*DA%VcU);fQ}*jcC>-N^&qH$*!rKprHY9G ze1;_hBY$ficy+D33j@Q8V9+p^Jm~zxQfau^9?d_b`CCD2aAD*3;LMLUJ^dSGG^~6E zw~#=Y2NHfB%|Ar>TR5+M{qG6&d@D1k7;XL`U82A*&+zRS3xDf>(2|g2OeOq{k3fmh zv-2u{%Nl0zzLu9)!5bDp8`&j%daD&)ybcHLa;=vDFHz5ThEj-M57GMK*Y?Ry_wuzqH{ck6zPG@PK&jiWdwp9qkZ1 zz&gaiYE+FG7+ySx23xK0A{}I6=lvJ+jeh(GRUzue5c)ib58cArvI#W%(Oqxw;wNaZ zdkNSZ4h(4fem8+rc(nn@Yakb~zTk$M?QHbpzi)TFgm3Hr5_Ql?h>*R!e}q7LNs+wi z9Su5H^8bs=VZz|Tcs9rlo%dgW^uN>t4X1+3dyq3fh(mVt9srf*-$DI{GVji8`i2dB17d$$H1wMH4Z=9n7RtTD%KICC}u=I&%H(Oe>0~;e~ z5e#TEgh%rMMo?!1#5O$e(hYQ8$~VwH;c`$4>;}7$zm@6l|Nr2s9pWF*)JFgvj3lIS0a7!UMeYt`1Zn zfUE^gxI!+y$od0!0O(SU?kN!Og2JVFa-w&RhGy=jwJ_yb$>R@Bd5C zd2t}~JMX^`5C$DSf+#*>8_dVenqk7qw>v7{G@!gUYoR`5+!>6DlZm z7YVR2yo?34S3#+{1+-b$AH?gt|HAz~6T?dyPk#OX|INvPk-w$j-~a#rFTA`BnivP^ObQlec1|I*bx@`6l?X7Fe6t!=qcu@RASzes0i}7Cya;L90DHK<7H}@6TrP={(Vp z%<<0?e4hiW3;+68o}HILSKopLgCBWzUh+Kniq*N-N0g!Yp?!&}$H7*UzVe_|g zGBGgtW?#DD*E>ZFG*t^qkbS|Rsj(MKKE10!%Ts(hQ)l>gUh(POau{^~pHFA)1dql{6?_PuYVV>ZtrH_F0`+~M}f{uOh?3VLr{`|k>v2VA8PiN{5-_ECqd1#-`+6|ta zpxeB;eL725_;%j${Ql6l6MO+S|Nc|2BcbhEP^NGP_X*$mbpG%3JpwvZ_eJWD|NlYf z<#ziX0Vyy8uLpBc(eOMDI>8#WklmHTw=+jY!?D?chY^&%F2D9={0i#q`GT%2{{Y(0 z2&tuIOCEzZWtL6_?YDK{Z|yn{>Ug@SXn0(H?bz%fz=&Zc#Gumc;PzH`=?b6j)E%I+ zsk>`8panxK=*%aN?$`xB-KjHtx@#wRHrFdK@V9IRxi{H?hktu83*(_QN9F(lP;&5K zYzOUT^Jv}=D%luHoVwdV6LTJ&wI^B+l$wC@(h?C!UYfEV)a+vLXs$3|D3JnH$cFzt zdQEjB|NnpCF-4LA6e^p}ef^KNBX|PXM=#&O>jlSV2M)%U_uzbw&e9#A8+ZBlpN3p8 zt<53kQ6+T+kj-Fg-jT+SLWf2hc(g!Ddi?a^x5EQ30*Wm<+1P9Qg%9R1`k*=g$@Z zuZ0ziQ8D<;pT8KiYTJ=tFh#}TGk^YS(Do-se!(1-fY1E-n;jr3OH>j*^XKmlfbeQm z3P2VnKzJ=Gpz;)Ca{)x4M+LMx{4;<4o=&lY=&@c&TRh|fF zO;mS3X!$B=3uqQ-NU=9}gJ-WB$1&H%j6R*YD?B@o9(P>=it6L8b3p6NUWY)_5op0{ ziHZhjjW+lis+SG5iy1(d=B4ppIp)YO=%S**-_j1+Bi0>eaLjcv1E}ux;NKt2;@KHz z;K?{0w9XIImnrn;~9CA@oF}7m1LP+raRWM{?;Nk7VBiF8uqW znS3nYd-S?r@Zfhj#J@k7&83%z&xP@nXQ!Kli{&l;7Gux~-`11-{Xw8c1GJR_+WpxN zxh~^HRzK(%b@vKSXon8mgZmAt&sjlZYaW(|KwDVb!NGH&#LKh09kSf8@P@N{F7Fa*h8P zI2aiC`zroIFMoInV)U|Vg9>VJT6hOqyW9FtM!|)IO>B z|L^}NM}EQf7ofE_37|Dd@cC;)^tHyIg$8Jq#wSO9fqszQPyB+uD_&@VjN=#ZT>)A- zStbu&M#UfD%<+j|(3#_<&41AHCD68?2``_47BTU^Kk)iK=yGSnZqVXQcX3AkR&LOi z`-XIZKQAwVdr8v+z^ixLJy;kRc7sOI9QS}o(A-j)5!j!8-8!JNc{n&qcs%*{`!c0D zTKck-n1hZIXYuLOxdA>`y!i;Dhvns>%O2e!7k=>XcVgn-&&9v~pvMdkW+w&D&UVn~ z!^`L34q&Z;XLl($ZTtkM#%@;uk516xyLKMOkNt;~^%Fp`|Cv9(0Yrn+$T{%n2q*=m z@n5-^#{V0%T=WpXAXoutq{Oom>=XEa3Ew)%fQid-@PNsSzD=OE1=yRO-C(6J!56rD z^xB^0fmH0fm&4Y{FoKqZz4`p_|4Y!ulNXcLeEpvW-!J3|x|-Ox^C)Ou6g+g4;Q^WK z_T=CH(W5gIWf1_V4DT$RfoObz?&#_T-8SJm0kjG*tuu7lYZ-7j^KbKA=F#ms!}Ic6 zPsU@ut#A2T1VNPtXjk52&u+F|;CSgg*!)o5qq*gD1L*2BkIRob&woGk?>~bKe=8{Z zz8_*_U`i<6-2797zcuXG*Z+>+jq*hFQ5eZ?HD_ME2!XuHfxT%f{GgkkK?VNO z&9OO?h0&wAwu6Dc1+?_hr+Y8R-Jk&kVbB>23v)p;ivK{12DY(+2GeRgUc~<8XK?Iv zlX%Gj?kYMkfMSZj6?E69NApi<{uW6l28I<4{H;NtwUnUMSo4c`H=_b6!015FS9}S&w5}cqL(MYr?`H9aex7I*qUnx z$Pp#rV>0~Mz-jrCN3XMnr{)pQgMXMEGmmJ-^dIW2V0|&+FF%7vcWDPG21{53Km*wx zo#3?T!|zht@Uj4E?hVav|B;h@J14kG3Q$LQ0<;PkG{o5aijlwN6==GNfA6JUC&uO< zEd1?T4uOUeSsFZgL73+#CWddog(bhNopWs8-=`ngZ(hbe;em0R#%zUY1Fq#@oRM%pRJDN~=7(n?ZG(Z+ADS zrUNY#g61R8#(Wc>?$Q&Uy)1&@vz2v@`F58o_;!9sb2U8RV|lR1$FuPOXvZCh?cvcI z!02Ons^|>J13s45_*b<7#KWkr4BGKl(zU-S90*TRzY2X6x{r+pc77B zc7VE_h_(%=KMk6%0rg2<9DW9x{6|?_gDekQ&jDRygFYbtV##GttGpG`eRf>|JH4x& zvGqWS5@?e*d=VIbYb>ZHLL0yK=(V+Eh1AHJ3qXnYy-#oL4xirC13tZ`%RvLA-4e~- zDoii5J^uf1PFDE~nq1WfSqeFE*|EV_KmdF~a!C%z-9DYaK*jiR$l8S$sh~@mx?^{E zwB9bU1IdF$9K3R=4i+N9`e z_{6grd?*nEe+%fsaYURz&y(`%W_jSlzu&@ze}4h&B&p*r{OdpXCV%r}yys*2xybS* zxUFk{qq$mvp+wrFxmtpuLm(oi79*51tEF1G-G; zkcZ_l(7mxYd>DU&Pw8TSj0-onf`)<_L9XqF=0DIJmap|vP_E=};{Ok7p}K;WXmf%p z<8D?~Mo?I$3fzZ;r8v0V@&1LG+kaRLy?C`lfWh#9=kZohO9tFX==NRF&IrD@8sxtF zFFa-lgZ537q}hIXpU@I9|?v1X_#3;L+Iy(*LsO z(SPJ6oZ$6%h6g~~wcEu(o6Oi@`rDlZJdQg-=NFE@3;`PhT~7|4^4TN>npAoUTUhSV zZU18ZaZo%@eai3yboTe`BL!Ff9QUOFlf#6*`wRcqw_=a1Nr73a^*H2 zy`q)>WEea<{~!(q_UQcS(JShf23oFg-=o)b&h3ByU!+e0ox9{Lv4XwC9-2-)x}7;z zfNxMeP|6Lhm_YZlcytRiKa%%o{v`)m6aTMyp@I=Yf{UuV4qw^S~|VhpC6T7kqxL8z{j;CR$3wd^$n5 zhDoP@*0z|kfc&ZNC=8ldvhe9G2G6zegRa%?HT6jO|Nlj?18B0X4q03v`TzeH(GDOz z*58kV4~lKc=K$?WsMGk*-;x4icKaC^9(XMWZ;yL+muZ0JfjoM{7(Fa6@Hbn7_R@BX z90c7*`v_Fb-1X=-YJMi~(fm)Y^rA<1kbp<0$idggq5k-O3}Vk2P#w_?iW2@-&`bb0 zC#HjPB0K{4Tf@Qp00Gd@0QCMt{uaS7+JF%CoS+U#s}MLK0u(?dKt#ajkaq_}AVfg>qdmGOfR2_#2wH+Q zf;-0uK^L%KKm|f12rM!IG~)Q}5IcXX703ag;UGg0qniudgZwGS->L}agTfuG_@yAI z#DVpvKm`eS=>q7|R8W1w$lv04<xR`712ZfnQpql_R6JevP=mmUXCq={`5V0e85 z)DHQ6479hOztsg?|3UJ)^a}P;aYWdZawGCOg9kXD$AQ+2^=2!88bMr-K&_Wr@N6+O z&#NbZ^Sr?IfB#=t+k*0SEolCpzeNqCuk(>duW3la|Nk%QZG;(K3V{ZV5bfFT*PvOW zH$7JHXN?*NH1eppy)Iav+ zn-8oE(7F$jh=V}xfmB)$fjEeO1U#9yLj)8+x%v`lKO|@_>?DYRR8;Q-^TF9$;pLhi zpfmxRUjf+#nF5{xRuIgADA3x#<^~{%Ok`zX=nhr@mDQkv4Kyj~(aUq;wK!7!3tE_J zd62)w18g3l@*1`Z$uTbW<-)^E3?2~U!P+2&^f6F~btAj$B1i<}$EV*x<3a+>kN6vY zar3ud1FeDV<=yp7hJkKn$e70$)l6 zZ9l%O|NbB8J`#vw{H>WFEg-$1!?Y18j=wbkBmvPY@X{H~fdnBds5w^R(H#Kt9Dl0@ zND35+@*oCM^}rA2gQ|xBftO5R4%h(x*00|{L++ROTi$>eNLucI`Cu&^FVBNH0UV%8 zav~@;dpzJuOB*0HWdO%ZP%{TKPu$G`ub9B)2-xXNFOPtW4bbLWYgfa!ulW)66TCcq z@!>T;gNt>BK(P^MmZ0;6N3X~sNcnpc)V#Xl0XMt!1URR3GJ$rPfYTjlfbPN_P{~;b zTAIY)!VQ`+1s9E(QUCwHNHG^?c=`P+BAs^Le_>zp$RLu9lfei{qftQy+X-gjDe}w!6 zxO{-Z%fny=42ZDhZ#{&Nk9fHiQ+_*K9^Arsxg5+#n7;R^SJvS1EEQXb3)OLBml2gr#m3v3cpG8W81=!^&RL6QL+FN1!8 z`e#19{u!V}x8Xj$;3Ks`=U;)ZQu6IQ6YSG@8oDzGWiOE70nhZoSgsEfa zvE~PVnolq}9(czDIvT6_86&)X$?XW5Qv#i_4O&a%(frcDpk?Ot{0o`L(X%4 ziZ;5o6Li%R`WBkQP+dNjk4w&j+MOQF)d8TBy(~(eg3BSF&QB2IUqpd!S_a9MzD8&& zJ^y+JEK9(H6&j=-y~PJW4bhAF|Np-PtsHMY!R*n!6%=q`O>5FJIH*fO3&l13E+Wm$oV~>`6h@;518>FA&{w_ z$6F&fK@5cPplK+G>Yc)%0O-6A-es2?896$%U`ydK>Z93GYy{H=+gCJc1Z!=ciLKAm8tF8te|#ys}v2Aky5 zoh;$o`lM9!wF7ed?1h16=aCX!-|iX}1;hkXnycY|(4=)w6J(O<4=C!oT~rJ_EN_&a zf+j={%ekObRk{>BU^H;1%kUzl`|E$uP}`GtIt*!P9xtwR ze*N#$4M`l`5+2>v2B6ss7LV?F1&>}+w?xoX-79G7d9i(xIDqV52}bG(l}BLbidyqdUR?G}z4I(H*Ve(y-0kIBdcB&a;~l zyp6@Dx8i~iXq*8wiRsV*-l^x)`P;Yi3}jr+k$=C73TOe1Gm}quu|h*K$4?jj^#^?T z_rLH>KH%SLW8iD~uT=RZXw(v%zq?z^K}LD-FFsLJlHvpW|@GF&rxTprzfLEiQ0{N~H}?uE}A(2lx){H>rJ8lILh zDgyjd4=8}QEb_O4j(_v$b_SpD<74@Nzm*NNsiO0tXX8Q8LKz>+UQqNy&iVI%?Dg{L z1_vf6^+AI8{)?IY;tVgIREaXYh`%k$;L$6a@lgjf>?QDmKLAuHS4((wIt#pD3ILBO zgKxL&bO!a0;Wu2WgI7oF1?__Xr4rc1mmk1mMb)78B3vnG{0KH9fOJP@2IxSg=GGhF z1CV-M6FhstmwTp7@Hp-O83To6pyLgod<@F*9>*I%dn3V2%L}E~9lKk>h1`J>Y0vIf z$O@JNCH$VUXyGZyG|+lDkZGW0aQuRk4Z!R0W;-x~ z%>b{31DQPmyn|$M07Q5(XaO9*;A+S&lg$NSJ-b22zwiq-PXP0}7l5hB8^F};17K<~ z=!nUeKf&{=OF{b>eLEj}bWR2B;PvSQpKs*bT`b{iSuDU09-i>+PE+vgbw1$R-3B@= z&9}Gu2W%TGe7A=q|Mn}M-!J$ow}JBmWT|iGMUT$Qo|j*M&bw^|dC4RD_6?uTxu7)U z+q*^vysj2u9aP?-f5X+6N-3JM}mSfd175c0Ra1r^-g;Gpv8hJ;f$IGkQOgBq#w3?Rdy_CW1O zGraB72{sgDhYYG6G2ppEyw{@s|Mxif12hfg(aq}c3Y0$?JRlc?zo^{& z4^~vaobn5lNny#KzeNCi-WVhcbOso_WB{#8?tJOdD_ZOa9?&^+7&M;09=x)pr3y44 z)XggKLWjYl*R<0Ov`x^$@W2cA+P|=MwLW0YW)RK&AkA7(&1!%C|9^cDA}+S_iRwH)wxH9XPmL7#Iu>ywn0+E48K_JV8ITpSS+8;In&olGu{}(bHpk?h23@@4?3UgXOlcE1SdTp~n&IixrKb`?n16fb{8G4@1 z3+9t}=Wh|yD)r!zLPL*aZ#bEpiu8%w*ja$%M4YMFq4qjsYxP z0J%7f3nb6_;#4*0%$mcDj+QYhEcNT74G%!C#61kor`=XBR#gB0|GEWIkAm*T1P6eD zXL5)NOY5aNCCD1jA0E9tR-pab;Kn_Y{||!ve;m|4c>ZGE@&Es$K_@~o!0dqdznjgY z^Sei{$x%?4d2~K~@%0!aHo)^?p!s#k{JBqW?g7UT(1cXy_h66aHy)5PVN9PT>7XA0 z{9;nm-~X`FpbmR3jj66a;O`1=qVT znmNGxd$)LWHyf}rFzjR4#K5qEu|%l(0S9Qyk>s~D!*7kp7&d_>((k`WJp@TmwQyTY zyTJKxAHyPu3g<(hvzqu@&d&oC0MB0p!&UOP?4I}a|I2XDJRvxJd9?noko4$g{qaPH z!J`v&DLu3(1@AKeh0u%A!~YQXe}P0msZYYAn^oi)C{;;-N`UXr3gkdZqnmX-$e`}n zAK=a|_=dETFDHY>(K|~YfOhY`c;*duT&veSP^zna;nD5;z_a-TXh+0tCs29z3lv}t z8~#D>U-1N8F$S8X_3XrqCc%gBXxcXs5>4Odf}@GQ1+A&+C$VqPxg5&TdBo04- z;}Eig5}NJ|zk%-Bf$Sn*06LYw6J%~l1IYdbU^9<`uJf3tVwHfUfH0fUL+vxb-Dy{T$T2@bn^l z030PP=jVXZ%Ri8N543>70OWrDR?xAhFE`IYS=|LHA0g!zs5$f$mLwR#u`dC-m*xAz z0u_&L(fOc^1WFH}#3kg>-32azIuD)n=sf>Y3Y;)}A9!?@zIbug6YPpszd4|UQHn?y zo%cak-uIgBagb(sk-iR;8o~JnWWV7_)cx8Xt=}r-J-S&nK-PlBB_K%}Qtovgf4SoC ze{i~bG5^3nIiVXf1&}Iuzu~Ab65<3E~-;m0W!u{a12P!`# zFv<^)ZdT5F(0tJIVp|_19|+F=`u`3eBkNj z@m_FDwXB>4N-t0!t!n_e9_*u5z5oCJzwDj`YNwQ5@aU|)@#2F!SW9aeNU*#1hDUel z1#qtK{0Lex(rbF(4wU!rzi3|rk6%z(1F8Fv%V^Z)V;5#~m zYyW|V)@L#@Fub@UE6D)5FbcG|iftBnaTWYnNYKC=_{1#!mZzYFL*1J}XG{BZuLd0q z?P~ZRqWy=8Dh@#wq`TH_5`r23xQBSYP+$8W|3u#w@HdVmRxdbiCfVJ-+XK7BB0L|rD zUf}Nu19@2U0{BW7?QZZ4IqVST6VUTCJ-S){-GX|g)f}9W!RJn`dEqZ5$?y_%pC!_G z66pNPIiSOo#98=TPJ$LVdi2`9y8{{ZxmOMv7~03czyMx6#ed}A|CdWaY7q0?-QX)5 zKns=-_e;bf-7m3wGPvpc!uaL?|1aY~dcoyC_!!Om;*yXXS`qF6jR+M$ZBKyP4qo0h z@$kR@FJr)qF9_TvalH{#dV(DWKF8w)TMbHk2YNmNs66vP8#o6|B9~~PG_&|yRY1ef z%||>CRmfp@{B-{I?EK={dHtKaAWNwt_&Ac@$)FKXP|K-Q0dgt{=va*RuUCT7OXsy0 z8lW8=&Grl>7hg~F=w=PP35~3lb>Q?Xh?IAASAi2~3oEF5zs(tP%fmF(Y#Rbfn7z%Q z5pU4xP9B}EpxX_h^_ypJm<4DdXXpJF2Ty>8j=q#~fTle`{cTUk89+Xkr87#ee*>TN z3OeK+e$s0&mV9Fm&NtImf}B-igqk{Qlt34ef$m$vkupL4?`BQB0rhX|R8ZB|Tf64P zHc&!n2dzK%Y_8*AD6xVrKkdB#VmD}w0BA28W~j zRk#{(Qe*?E0j&lGCu0dwNrsm$pml@uD$yDU4Demmpbj2*-o~@@O0eg_CoCSFpFJ7B zU^$!vbR0kjs1$b>WC3+9rh&?3kH%l085tPLT|fYtrC(@ENmrZ-{Av z<2P5(0l|A1K-X@tFoM?B`}X=AW$^5FOaQkO!JC{J4}yxl6P^bjuz2)}bb54qNO*So zTut!k4$v?>36eVmx*f)eU$BK4@p8qkZ1YZ z?||f*4={RkLgYIyfcn=k@4B}9=WhXxa(VRD9szf%@Fp!C-&>10_<3D$pJh zNOJ;F{`Hm~@c?akaoynvY1KrDNHX|zyY6_o5R{$`4}cc0wFH711Gb>D8jz62G}{=Frp8W3kL0PjOaa;-OL$q~3S7rF!LvIVd>Xs!A8|G#7RRtHwlttzG5 zp3Rj84E(J;jG+D#s0K&#`T7~)21tu0XxgJ2VjkGO_dcDjJ3Kl=H@pDfQ{C;l0~7!r z-Ju&m=>in@p1m$dK}Uh^@aT2`$A2pWC|p1)L0h^Zb8n8#dqGZN;BUD#@$3J6phMl@ zz5=aj58d!W2kL}n6G26E=mv=OFH*r1pCD^PH~4ge`oF#l;5JPIm-!$ELc;}YV@t+F zP|NEZsMR38VMR+^99)j_9`euU+RI! zOXzg~irwI#)% zV6tBfI$IHvFkUR01`0FY%U~6j3?(t3G15>_I@O+l7#{=8DOK?Q|L@sbFJSo1qc`Bg z3&~8#)X>Q*kg{=SJ}8KP?PCCK59+pf@pAXS|1VuYX}!1h$cx|nk_@k#KsmJ2b<2yh zf}o?xw!EJFqPPTP2?J92dUjrO3`H8@K?~n^=;8ZO035z<0xK5qgYVHs3FGfC8bN6a z5yqhF3!&lc)A=LK@PKEhJm}(d_&~SE_eaPLP>+M}xjQd{8lapm{~SD<-9Yi;hKQH< zFBk+#iOe*tiq0=BmxvSvY@zG z(+3JR2L@2QJm5u%m&SBRyck}F#EW7cYPUO0 zju}Ai@#toiy`aMo>e0;sIzhViWQnCmH>(xIcEfKdR)bE71huVU^G5uF4g#@A_uqo- zXMo!OAqU0&)nNOVV%iT2kFUWVouHr)@aSgkIS&tt9FK0+wU=}le0rVL!GW*=6bOip zj_3CWo}CvwK{tvwzhEp8^5x%qz_IxNqa%1T+Y8W4bLS_Y&UY^!fL82+u3LxBd4b#x zIl?U#K5hmYP6GMC<{~5vb-;cAjVQswk-sGeloz`_CBWzUpm@gt9G+nRgoEy|hn+N1S+-Yku*mo5W<7C1hry@wJ1EJ6j{^sdd_WRBWSww^fJbM9gimLJ0ywcd#>F0<;L*)0 z338aVMajAs@6U-bcv!PCT-0GGT>vTs&Ycru0JYY8ZJ$_3GZ-FtVOjt6|LazMd2qNy zoQH&qM;3Cp@V9`DDg=iO=nQeBumQDyLE!_AU+@_3pI}g|c7yL}^yn1%nY~f}JzBr7)|JOu_| zr$K_JOakVl7SNyptpDcOdBdagqfh6neIN(lIfC{Oi9f=UOUZnVEMP3P10C*o5_CU3C{U+<{{P>H^R-7O zG(g=X7?Hyg6pr9v1EoPo|GV>}XXgzca6tp|waEAX|6iYh?pHndoCmz*%(wG6s8sj{ z_sW^z&fm?ar97J7fX2ROoPs2q)^8;d9^I@v!MOuA4Vm`c9pub(&;TCjK%f_&K7s1A z+7nK!ljqN{$^unOGM}lhq&dcC50_p>KbhCZ~ zWrXI#Bu7kMJ0fCoQ6lEgM^YjNTK=7e_%|U9*}wcP(cp5tOyVV|I}A;49%%9C^Y#D# z*K-l=S9p2^k9k1P6aNzoITjMM5~H-%qnq{I2^|L4?otPjZUe{WXA0mT0bdl*&HDH> zD3Td`Ad|~!j^JqJZw2+tz!yla2IudOpuNAHzxIL3K~Qp11+NCq5b!weAOY$%q15`2 z(jFRb-K?CTbYpG7-vV0F{NnaWaGCh#vv-$ab&``N&C#0zL=w>ZC4hldEk8V~-eqn%R z`A*PAJJ8%#NmS?O=EtC&WBlOx7ibpeZ=KJ`z|eY|zZG;inMdbOa2S7rPTCy)0-8kz zomUE35Ch8MSn5;9?iLl$DKVhY2FRLWkWJ9DCOn|WOdJQ@1aJ7(19aRbXz?f90ibg$ zJU}jZ%D}+j+xfzy^C!5-_y>w(N6?Ay-5NffuUtFdB9}I3CASafE988e6`;js{4Jon(LK8BC6Lbr^yvHtiNfzM7QO?uBrJS7LDALbw9TY-`#NWCH0Az<@CvD6av541QOHI}SF1yHxf%TTb{;P#G3ujyAu(2@?@ z$@e4~URv&!WPs0)K+20=TMrf~22dRUKI^yn4aW;-h9CcZx>Z|F>M(eAvZ%ah&SU^x z5Oiu6NZsKVU%m=4fX;ci^G%2Wa!`Edu^0TsU^R|RQVcIHLlx})Cd9BS5L{@0ZvS}k zx(KXB2c%{_RLyjd8c4ALR&yMpMgpX!8>*%lqz1{H#Sk?NAT{YwHU1zqXL&&DLE2@WKzIrPuZ^i2dpB_x~`xZZpA)k3KTM zJ(U7d*?AwPVCojI;rBoqJ)u(I1kx)iB?;Dh5G181{sS_d42pzaQTg3qT{}Ti!s0*v z?~??jyI$K3Ab}twK?d-M9cb>Nn|1LaP%&-r;&wJ@?JBFwAsq(8lRmw=(rdwHOb0ow z+rp>w)r+6}KmL1kvj!aotLS{?(QEqquOx#{ude-N(7g;6FRt_dfO-uaDI71rMnr>b z?GXcO7Ci=Pj)1}?7;Lb>i_5>igW~lJICUHb#p}dFVxR;Eo`Lu175%gUY|5$=k_<1( zKu+kq4<1hP=oS5b2`m+LOp@V6H2)9KvKJ4ytm({?k_<0gFocEfOESFB#SnI4k^*_9 zWX`|;FZlTpDQodoupOsBDdIaHNE}>Lg1pcPa?)c|v6lbf5UB+ja{?>{iIOw3!N%nO zmt=Uc0ZBXsBAx&epMfNPW)@hz2PjoFAc>nm#PdMn8DMd^bEe;wWOxyRDt63_o3*UUHw3V6t3 z1n^+M%evd3zIx}=7orP5Gu|lc4Lm#l?gt&Q44d}`jkIvQSOY3-x`ll@H9%FeM<;0W zIy0!<13mr*?En^VeHRM4F9K}$Q_%5a-3%U`zxRW7C&5n92QLNk;Lkhk$S>BS0y>w0 zUyuQG5;KSiKEofSe#E>lubY(zRD5(o`xjRoLxO#}4M2;6I)8h7f5t!IkPqVvkIv)# zlMe82yTrfkfCuNH5);qPFE8$>gNNi>tw76@Ajb>(cD?`|Jpir?mdZ(kh8PSFyeRGg zg%ATcq(Qqa7bEI(aQ_}Wesd1mQ-dw#^5|wQKB&Xs(`^BA%lBs@~ zRUyGImVkOT-3baHCq#6C4gh9RdEws$Y7g847YMsR)thIhiwcKFukE*M|Np<3=*PtX z5)gnn6*0ck&DsMBLNd}{j4C8#Pga0#M?DCt%OP3rd82p!s}6XOmwZn%_XjNP|WWu%ySw`^ZXqEOo$|9>vu_t^}n=U$85o z=@INyq(lii8s_EGa*Xk9!%HuZ-U6iX$fcn0T-*T(PgqcbI=|5HGd%fn=}i>(Kq4085b*GO z>&cRIpKd+R?otMi)^8=+p1rOd;PmpE7d$fz-WYeSNZ7+tqVyf?{u6MF9ro!hV+7wX zkmD9eK{agF0Hpq zgwyxzYbWaW!bHvf^%w*+db@Yy8A#iYv(PO&TEDT4FA98Pn!Tf`=$AifQRLW zlH!IMMuq>SZ#GryqI2bYc#Mg@=!p2wM07#J9ixmYUvcj^2Ox+;7! zWIV>R@!|jf{Qo@f0Fp*QqjD2Go2^w!7kD-wW%O)5EZ}N+z2vM* z=l_>A;GQTn|9EtJad>nyd32uo{{U3}ww^3i0I!4S2JLKp>i9o^1H5r9w)FtN%b~;I z@knr(ABLnKk4`Hv*Q2wD1NpK-Sa}DI2I%-N$b7I}Y=#Fw_a#I4?B9+wl!|y9d?C>M zfZwCng@F-v&y7d7y8w7sFIW&_-^=4**Ms}f*z`C5VDykY(ELE;Flc={R6mj+q5y=L z2ih{ofb71`AMo`;Q1d;y!=Yze1aRyCMFq@#AbG{Ds|HZiZbuPw_WSf9fZoQKpy*vWoUEt3= z3@?D)*Lt$l1Dw}Gg27R78MMjWr#nI5e=vtfx3G_8l0d0$^AFHs?jKCijxqdG55)3s zJJ5W9>F@+t=>!|k2S+?;x&GpiJl_}46t4y7 zM6RbV0^stUPhV{2l3*}AfUCXm9pt77m`cFw%|T9rP916>PinsaSyOvqKd6-P=q$bA z(OY`qh4(B8$N`id-w%QAQY_)|IL-`;c5q0c-oVNRYDAqp{6ahwG)W9k&mj9en%^iO z+w}u%*8`YcFFblnAH29fQ-T5Y{#=%mh6fJ6I39vw9=N>o02MQDIDESG9lsw1CD2j> z&x3CT9Gjo=gNn=#4B!5Hb{+v8iVwQL!4!#%h>*aaT{G1=W-xDvot)h9mP!2%wg$6hNU%m-B` zonju%2N^w@k8xQ3DAx0|{8*ydd8+dSXx~ah4Y$I7&u$T+(rX^gzf?*ufYdi1WVHNI zbRAqS`G9Jj&mISVGrtDkR|Pt^2Hev;_Tpd_=s48FprO!dS3y(l&tKT-fEum$Ktjn0 z-$0icAbA>Wp5g7+=a9Nc@bmzgm;jv)>C=YvP*agT#9 zMVcQ%!VEOt3#z2|gN8#vyZ$?mz1D=}kIqBj5IDvGI-nX9LZ00r0vsNlVLvQS6l;OP zPSvrYMpof}=Z(_KowvX$nr#GBN{@l{9cHvVQFIejk8A$(IQWm*qx17?O;EY*(Rtjn zJ67O@4AgZlS3nD+?}N9^AA1po2ug3T1ULv4;=lcm_UVLHKe5pLNbUkY-30UwmuvTXo$JRqA~QbD_Sk?%8(hRn5tFOFmI z=}mnCidLPspe(|Ac0EF)h)1(EL+L?~?7Mdo46nC?{Rg6za(rJeqAT zGL(My=yefd1gX_TEf+!|rX()ypjWfFMu;R$p;Yo9G>YyCGr(9psUM$hIu|3O=!Jem)K=c*oh z_qwPsf(&v;xpT2J9JCk;TDXAo8Tg*v`qyChE3DID06D+|v~k@UG@0KI@xr#W2_SW# z<85CUgCo}U#Oq~X{SXDSUYzkq=`O&}Gj}!o<{0YO3Cggb*-+%7^@QO8kiS6r^Mx!s zxCr#A>94@y!hzz76<~jRbh92@19hn}$};Fueb9ZzureGni<36t#qP_$|9f^G zdnpKRLxJu$KJw!EYYB$ehh9wZgQO3`|1Xb%M=PN1Lr8iDFP-6d@muv9_+Id2X8iSB z?2nVM_8pRbl&e2p7#?`B24q}!HKaS_(d+wQUoW_g?fT%wK^y!wAm@EpO?uWBCHf)l zJCOY^oIw_K9)Gc#3DORLre8?=q7!rsCuG1%8mtaH{gChkGvq;O8&Ag9z#+dvsg9;Deh2X*`q)fciJc`2>0x zP^k(i7MwXi(%_^IRfDLXLOnabg3SLD4BpNG_8iEH)r~NRLapEhnE}-fI{)Gws1Ot- zWd4ifMmC06kCmV%4*!$`{M$gSd8G6Lw%P-<>$BU)qx13$6S%dlmr6K&I+GzCNyuOw zqWXuq{|9JSN#|2&D@a5Ybe4@rXXp>mR8{GVUEmg1FKDpI^}!2I!*BnwwSo?MfBg?O z&!ZEvkQ3bH_UN^}kiO&c|7efSV~#O~CmmxAFM$Sfw%+@L*x%^U4emdwctHD4tp`d}L6f4FJbG>acrh@% zG(RBB08Q_p_8YiA)q0@x_C82B+P-=r$?)=%gdmcCLG>F)>&X&1aKrqwN4LF4w;56|ykZkcn1~jdW8Glbf`q3N9ttU%tKl9hILyQF7&%nSh#s+FNdvv-!;Ma7$ z@PfA=l;@c}x?NwScxbbLE;IYtyxq&yF(Q`AU$V(K?abRkBR`lpoaj68KR=V zFBqTzV#cT#@C!y5fS4&N4*Y@%4j^WZN&vrLMgWLeqLRQbSdai>)~FQl3sw|B&XW#h zXne%L@PWaD^OQ%YFsNDQ(fH{9{}2B`%jg;(GBEH%r9hbvb|_!$%XNyNMFODvGCe>m z^~5|>L7jV;Q5QTq**&_!f*<~a1VM&?1VM+OFqYVWRR8}6QUpEB>-EA3`#`;l7iq?# z44|6F5Oniq<4Feay${?k--AnekO~Ia`SwR%tm^##|MgyY{nM!Y|NsAg`$39c+<*T6 z|I6*5F+})!dQkWyMz7gG{dk#`An%p1zDNMglXu<##U7{t1sTEM(Om~Uw*2Xf3uyuj z9*x|f<}fH&JYY(Z+lQfG4|sq}+uxvK^2ID8h+kAeSD`kZ0{aCNwhZ8~_2?8vwGY|- z^5E;~ggSHlB_;7gXllkMO>m4rvP>B4+n zluhk7Ji1x$E(0~i1YVdbfztJH5AaTPP`Y&ZcASyFwGPxL*aN!w@Bjb*^&Y*k7d$~L z#X$pR4X*{j<-zI8pz`|o3dYh9hi}K(OW%P`XnE<;%?>)vruhd~>0MXD1K>-tA;nwg zJ;$96pf=g2uSZ(HqNX;4F_nA z;L&Tt;KTXeqxm@FOVC9d9^Je<^K=$lSIeFq`y0A6H?OE9z^C{c3- ztpkw-FNOziZBE+A#sFGo{R?zY0z5r}I|Vn8Hq}UimI^c<(SZ4_>x+hrI+XF5{PH0QXN`f;QDa+M^!b zt{~q-OHO%EGaFq0--r1B<(f)125`K02MfGj`C_gMN^C*uJ8(jJ2|8CA!Z*D15_I1S zxV;I^FP-0;pRx0|h9rR6v;X;9yg`g^cK9Lt9Q>^o319!Kf{#4>egirf2i6Zt4~X)D zz4Oq)SCY-Y>Pz%JKuZT0LGu})y;6!NJd#g&9DFG0!Fj@?lO3eO6*XUXn=0n$GQ7}P zDGFZ4vc;4Q+_#$H(Hp|R=+SM;oC7-g3wm^V+Z9pJk{K5UhF$*|7#LpPhxeyI{sFn^ z1?Ub{+~Y%__95tEX4ERpqnoMqWT_0eK18mtG(k=URal_#t78Y(bl@sZ3|!lRYdYl) z35M54U&uJ4L;$$GvJZ4BzelgF|3gWJm(hZP$aAzX_rg~Mb~Ax$<<^rWJm3o29$Y^k z^5_%>gIpiZAUXm;NN)E!#~8tdqM_L>utu6?`B!TqQg-439Eh{L{?&q_p~?Lbqj z1Ck7&0WAAZf()QT$iiUu>OFu+sDbPS-Ko=g3$(0R^V16vkkVe$ulFSxz+>AW?F?YC zYQ`7a`9Kr#$6wg*W&@cEnvkEuE5ragONGO;`3R_M%io#>nn>(sb)FCLNJ%Wr(%1JP zmTvqg2pXM3Yy&EF1r@BYt?-Z@8MuGfen*1Ar`uLzK1vX@{{8p=|LZvr|AW=p-;-c? zJ>$g-2hdmqr2PYmkJgij_A4kYgWBGpjfxT;-R2(MR^Y>Bz=f(3sH@`HX`+Gb(Fix=z?pryZ|FFd-fUPI4gd+}Kuv;zyG7AZ-A><8J2$kXDT7Y@FVZ2nPS zqTT$05tI`US=(cVhvF%ZgAXJ_eP!@r=OHBhabQxa6EQRFfCx)P*ZByF}a4rTJ z1j*Sic3%($&pku*g6A*6^$6(R5AZlSdr7cI^M4h{MI#=~|5PA5-5nbK^YFKVI+x)7 zl0(Bk9{v_kA_Ip7Cuj+6Yd-@6c!Sdmw$*G5pxF*s$HsvHoF+l?9^K;2;0qC0L6@P3 zepv{r;DtOa!#PSjz(zHJ26QSsy7?gah?Tz;w0_;gI*fzA6;#N)%#;=a6-JQw1MTnZ zf!F3Dr427*LF?Gz^_fSv7{ode$m&|yyaRal1XOQ;JlG1l>=)ZgVoU(*_itqXgEVRW)5f_;StZ~S_TIG7SOs(k8alTIUvtN zM}|sLK=wm2=`$Np&2XT^7Cd>?d90)WG(PNL0U8ZG{=(w$@BcoX-+em&d2}9nF^d({ z(K+tfdF;jdiJ<)U4b%aB0vcBAhK!aUbZ2 zf!7LtVY$WIMw}SR~zFq-U4_0^omITA=xi30wQS;YJQ20UB!O}ZYf6#I! zq(ArqboHdG;aktnW8mJP0w_Fi^#@fxi4)f!v|bA74;r5Z1rw-0X!!=SKe+S)QhyK> z=ZHQLxaa?(WE&fUM{~6Rqi5%lIxml2Q?}ipBKiIcYjz<9NDJY`1`Z+6xnYlPL1Yxc zGVfnlg0w;wK=y%DG#}xBPB?@1$AHdOy8mM9uHXM(?|{}X5c?fNJbG(SfT{)ykIvE) zXl=h2heHJ!e7bd6X6Z11qn5t~ypgz@RcRJz!GQv_A}G~-sRX)w4&EODP0LOPHJiI@ zRN#ei%T)#j21wG&wt^(R`yRa!jG!ZMPMLy6aY|2smkqiJczkCAHA_mjf!cGsJerS5 zfbwe~NaY11&{>?NOMSalR9;Lz@cTbV3ux2Db05tI9=!$sU%X=iMZ$5=A`s?&Hi*MZ zGeBdKFBadBV0axn0kp>f)P7y>(QBKu7!;79J3Kl|54Fu z$j8@&q+wwGmTU0nIb#8do(Dd?6^x)kQEij2pl}8^r9Hp1sDLA9Cn$3Ef_7H5ek%zB zDKjwy$IVJ`csT9>jmq=4fJ$>{zVzruDi`=$J3;PkKB9p-{K*eGAFxCP6yv3c@-{S|NoO_+}C>sHWma(Md@e6>|A0|WFLGSCj% znb#y3UV`@Uxf(us3A!)(g}EiDKmpgU#KuR+3{ZR=gTx1D{>P)6^~N+vQ-i;S1JtSM zX8k@5lyWqDyHgp!10FWu_^6Y3tqgY`I6l^c+EU%A9G=ZbIlu}*SH^;~3#h2IG>1gV zU09BpVe}OeC2j(q(A=^E6d`*+C3fq#k{nQGS*#C^kQF|fk9|6yd-N9nf8p>~fB_U| zoyT8X<^Kj674zt3Rfannw5?$RT0BjK$I}OJ2L)D!GkA8Ffum`PN3X5a0;Fit-j0YS z@S*zPm~y=gj;Uu;Q39kDG{6CEKXtRtoT|eBsTM#-eL(tWV9hVCNHBo+T0&%Bf(~DP z(QFQiGjRI?RGvXcA|d@Mk51Pgh6kGeGnS`&bUR6WJH%ch?$I6k1K#Z{jXnuoPvFtb z<=J_{vH5|#XY&u~lA8@r9ZIgW{x4AnpS7?Pl(9W}Lmz`0d5p5;2AsFU&wrgR~!@=?Q;R-2EM>;yvck%{p}oED1rz!&tXW z0fiW>w1w2{pn40OI$p?u%FfQiprNBe&(7nZBZ2r^K%-5dELms(GWF<-%-x{s{2k~T z_0B^tPX7hBojp5`zIf2d#^Bp+qw>NXq(bwzN9Q51qI)lvffa#QP4Dgm)%ov0NooP_ zH&D9()ZBi01~eIpRKmA{w)cV70ZfK?pd=0@C6z`&S^}u4$c2HyaW5zU5$A1zBV7C< zIJNAUjNd31Bp6;#e^FtI2yakYK-8^}5h;yTzyCK^h=8ir5_OMm z)(z7^hoJkYaDXPBdrbuyU`rzQYl0R%fXe|;dq`pO@Bgg_O3!*gE|w`Z1}(X6J}yyW z47#Gu@Y{=gEpW~(HHMB7A{NNSzPvnH5Hx=6(G9-prSz;vukEKfk_<1nw+Jv8{(rp} zbe`CB(0*6YdiQhxr5HTAK}UhwXrk<>1@||>ehLZp=&ij0O6H)Y49K-LXqraU57d{b zz2VVox-U?Q;l)?b4)JbPw@IKH!bXLm#2n-yd*iSFJ)3P*7(6-;m)LrIzYXd6qfTyu zmKK0E*h1%rA@i9RUNoNv#fj^M*W1A31fY4&7ycI|7+&vq@xvGq{@BvHhev1a3}hFB zDzwG@pjH`w%WKdnT5hjFNfmVD*_4Tp^uym`1UhY{n|1RT! ze6V-tE01oGTOPeEcR{0!pff~#I$yynURKZU5ETWFZWksFkKWP^kmV-Lhnc{qwG@R+!x)HiVZYE67PUwCwv+~Dx&wgKIr&GceFCur8{_zU&t zpvEu6pmPv|*g*{dh1cg%ay5VJCQ$v*?K;B)^)x5M_$|2E1D>vgHv@c%!2wcN}2qo7taB!7aAIXZt%g5l*fl<{ux0YcZ$ zfYK^!ML$Z?X$9Sm@G=Z^u8^A{c#6UW(w&6#tsvvXKHaK<{TS2j;7r5cQV;TN=lvJo z^+6RdIL-Nk(iOWlDCr!1@qa5c>AV9ayu=^yq*K-cYK(&Np+0IO(GFBBA{vQl6Tmis z1FiHbsGJ8kM4z9PV0e8DmhY~-_ zUVQfimkvKXdQBJjN-?~+4m!!B^Z1MZpb3EHA1t7;DUi}*FZQy3`+pL7jo@eKdA{H< zf&>wAPQGDypx6C>^AAS;c2Hx_qnpjM^Q%Xv>xCDGyZ`=o>^#zXpwz{qxAww|Vu%|q zc=VdefZPxabwf4G4Z5g<+yS7F0k=6o1rbB@Z>G}iFDH1z;?1@7NvUx2Z^jZ`&u&+a z*YNd#9^JJUUZg(}XL!8;<20)p_CIA@bR0B^f~Lw(h+! zeb3JT8wNi9qFo%4M(=M&DU3n!0Sgb5@SW}f4_^l#DTWu|tFbzdznK5`KWbYbpH2jKE~+L>3ZOW48-aK z9=)bVy`>ml`~mH@?>zoO1$4#_q*G{l^y`0L%Xg(mQ1hA)D1c!}57MrCp{IwEocQIz z!z~cEI)YaKd3bb&&hY4#2c7?Zzm0)`0kq&T6129`-m_aAbl{gSbGm@%aTXQOa!-%W3y#NJd{+zz@xWz$4>Aj1JGe)&4)qpvjdbkLGk4H|H5bfI@cYZ z-R=VXVy*|A_yt)MJiv|sUE%h+0p33Yj}L*4OG7yG6ln7YbUp#>8;1WNNsw2-CaeO< zTmS$6|3#h-w)lgM{dKcL2mYj550r9(S~U#}45hlDAwZ=0Khw+*U4|DW6CvY#e`MJh zUSB|z=N{eF0$>dP`4;3fbb z;}!6LFq-%cw*^kaOhaxExnUA0aV|DX5@rHl`mt7 z19T2n_5Xi{{|#pvd^<~21VGE!qkTF*Kq?wgaRWNv(RLz-4#Nu`2LT4p&SM~BUZ3Ze zXLzBV13LbjMdkHwaCrkAn|bJegfo1VBOH(QWWzp{oFBtv^TUZAeIUv#22X zObx?lIS`+L+NOwd^hI_y)cse%?uV6UkUS1PlL%B8X?S$Y`*a(_7fyoufglb8KSN28 z=fQU(pcRxQ87`e4Tn)d061Y$22RHt0HO2}cXL~S%F6ZR%==43|*zo^9e+zgXwL4V6 zqq~5^qr3KmHO6EgQ=v@rSk(^W3z<{f9n>|5K{9oMjy-41Eq^V(`4Z3 z53oldxe=B=ss(m}N&rY(e($CK|6fD|fX@*>_3{k3tq5r^H2+lLZv`E80~%6vU~p=v zF$Sd>X94~e(1C}bg_j=3Sp+~vd2|aq9diLmcV0j)Pe50hdZ3jj9-YE3LFZ4w^KZAX z$H7-3&5!s?d^#_=8a@FH`?`Scs6E2yX?dl@+|8;+S)ufUOXmYnKzMY9?tpu|+u+69 zm*A289jymS&N?>#;oxum4qgMm0A8ctdB~%i^;SE0rS<90ur33q>|ezB=pLQdJPtl% z@o2U&P~mS?`~Uy{%dMaW65M^Tsd(X+b3y0n!Q&siujC4-T5CO7D(Kny*Q47WF%cyJ z$^agnY@j8akOS>O*#tDcjWn$&U2^l=5suO;-;S`9g3fTN=mL$)FnCzHbCigKk7GXf z4Kz4V`U13r1k`S11(OPen*_)+hOqS$G1y)L0!?S zj-Z|z*nVN8DX}LF&p1l&gYxqV_EOM2jwRfn6U003zqs=6-+%B?{3t8TA@wol`u1lR zVCxBB;R7o}U%YMt^;=5B;qI{oxyKdeo)_BvkhX*Jc2N5kJilpp@}vi7%$fE6Inb2+ z%Ne^s%~;6zfCtju=h7uxK;gF@v`9l7yhx+e0#wR%gQf{#-2eYC{`&|pygm!g*AU5d5XtT5K+CA_ztI2j|NrZ?DDw+2|2c+xcK&w^ zbL<3fF@vnu0gX&ccyzP-bSDXb)^vJ+t`%@S@IQ#7^+1UmDBlW#+7QTja)N8?w~|+m z-;S`C+WEFVDY5kI7E$p)%vowSJmV-i^;!wu9|5W7^yn@<;c01JA_dmS3c9389yIdx z-X0Xoko?uyjzjArgdP{g0{>=p-Iz3kZ?$^csCgXTDJxWN2N^nL;9 zEYQl3Lxu-n`vqiCyUUK?+7RCUgeMC=P_odo2WL%iIt5)W0+}k3E_n=!=X>Bh{d&WT z9V(dpXQJI#or&tcQc~R4XGe_tB(S&-Tr>oMX5Ct6f>yJn?1JrV*$La(;?Zj&06DbX z!|;$t=S2_Dx*AZY_5f&hvGrsfuLpPz?EnA&_8y8CKm`h@Jow?!{NO!kT(x8sXr8bn z7PJ(nbRKwquw^dDE{iZWhBW^7C)4=#4pwo47Tq)Ow}4M2_u#KP4qgTWPhXI!yXF@x z%|8Uog*Ct44b z9BKZ|!Qb*2RDpNM8=wjf9QEfwEO0*e>}G3zAP0i2|y)3S_q);*n;*4pl4(K_2~Q#=`}`xW^g<@Lsxio`Yu50HiDA= zaaT~=ih;j17nCSl|MR!*0SycCZ^M%Ik#@_0=KpqsN)!eLh65g)hdnxDH-OT=pvP`l z`u9-00lH=ew8GP~^NeHT6OjM-Th}r%Fnm7<3S$12lOQ`m2k#zyDdNJvt#$+G#P8;Z z{QNDuKw086XrUj2XEUh%c89+ObcB<;RgI29=^IEJZiY)|>J(4VG^=ZeXSb^W;?|%S z@()0ptV<4qTXHQq;57UQrLPETc6u^{8pcu{-AcCZ)fa|{}({xhBv^y zUnc(651a{~oA~RT0qeDOzLIvon<8C8#5YD3Czq z2(-NAZ|Md#7eF1*mRd#z22i=n-&+3f|9?o?yAc#6djhazz+h0e17|=_aBCG@-+>lD zLh>JfJ1F~l^op9-BIiMHJ_ViD>j~-^SRO86@#UN#t(d~Nx+$iq!VS+6DMmvam z1}Mgwk3=A~JYelx&*oZC;kFh$kO02!2Naah?l~wpOLz?ryj~B_|DYcHXZ||h1K{pC zG$(`Bk$83<@jUoOWF-Sb0|S36XoA$U+gHG``3b*E=c6?KoP(fD$^ReP-sTr%G34J? zy1}udL{!1CH$;We25VGP<4-g)Sy^xyygLGw(Y1pN|pg4c_e7a+wGN6>;D{#MYXx#0Cb^`Lm~JP+zu zzWBTmS~mE0t9f+$oK{>I*O+q>$IsfX*|4HrfS{Yq%HSavd~<{2f%3FqHa&uEgp* z{^HReaOEK04H_#cec;piy!Akd#|!Ni(6Z@L50B%ZRi+H!RDs&#Fa&kN!5eeH>q0@- zZT|z!LOj$HV0gV2+E09u># z(mv2w9JJl@|3$?aafa8kkcRuyL&X?gB#DDG*-B4jV*p*5_V0yY_22*Ceuc?CM^HuD zdHjW(7HCD4?aHm71q{aw54_O5&d&h8D+6@2&x`v1f53ZvuFnTuefR&x`Z6|#*M~6r z&o8HEffj9p-2)3>*m!|QXSoEZ6oagq7ewmLL(<<1>v#YD!$qO(Cumyw?a}%DMfDR- z@YWDfPzx`Pn~MR|@8;+YU~c}!R4xYEp5Xwx{ui|59+W1)7h-lE^5`|a^iYc7`z6Z@ z{62@k<3>g$pwSr69PP`4UlKg_+5F-&k`;Anmh9cmE*^Iv1oVnd>ycuB9$otWh1LQ#2G36L%B7M3P&$3d$_4h3Gjv%SC#X;Oj*|y)F)LClIJcFSjvPWBgaAP0cj@{kc3 z^JSa(mpd`43~c0XUpoTc4D$fX}e$y#JyELyzGl!*4E~&tG^2i9yzVL%7yKV%XNN zgKBGVY7p@0Rn4zNoe_Oucp%LYw2q+E0TfA~<6Cxtb^yM(xBUNquvp%VEP>~29I9RKkZVWgyF&Oa%jTqWiJ*AL-z-Q`ud@uTFj&K zX_X$h5-U}I@o6Qr@`^>S`jL7E;Qj5Oqc@Jfz65XY!O}Z8>Z1_j7fWEKc_7t;i1CXH zpspKg69P1Tf!u@uZx#pn30w{!wW~`OfyXgILG9_%X^^&bD`*^}z!g$SgS-YG$0z~~ z7=YW-;QpCMH=-R49=~WVLaA?GaGwT^UmScH2W>ZcXFwZ-2VZ)Fri6AM1676xUxKPk zaD4%4ARc_F4_5BL0IndHuK=|V555GQ;)+zdf$Do$ctNKr!JCXx4!!`bK3NWKM?MG7 z`_2ZjyOlw6zJ`~;r~QDp!!NNCVDL0N;?t>&x_6M zsFFn5FS8%y_ZQ37{r~R)*@^hN1>7G)_D?8yHz8>06>`H4eBw*#3y)sYjBTJS82SOS zP_XvFi|eM~W{@E2u4k!}pmTVn^T5+LJ!fFkH(tzt|G(JE2O0uKs!y=l25qA1cyyLN z0Byzh=rz5&6>Rkj!%HuM9)LO<$cr3hPJ-@7aQ%VUsmtZjT`zF*<#Q7Oh8IqJU;jhn z6KXK`OTGu-rZK4B*j+F1a=nQFa@_z+FVHB2oK}Nc7(ll=SAvSmgD(Y|AM%5`k-i?C zpe2-te0ozafU4Hc*bAUVY#zK?IlOre5?T~K){g-jyLduPTigYuiGK*c2KKH;_?6guTQ=R zvN#wcu*ZV%5k34!!bKm^`|6&HHl>wUPY5iZK>e0;%p1S65VFdN>K(`J41C1gu{P%$F zA_i@51KpVQ>_tDg3tyuGzED~NIy4E&c%XeWAWi@Oc^-FB0i8Vu9#dra4<1m2HY-5K z(@j8jvQKxhzzc4evq2}$bRKyj{q_HU&+ak-&+a;o7ysl07(5$!R6yAsFEl+2mIH_CZ*v!2NUXQ$sQq324y`2GJ6@|7f@@(C2*u=e;1?R0P}3vK?c zRTUJ|E({DWvOy`V^Z1M8*_iWp@|(f)cQ@t{F@Fc0IQD2gP%44czW3+`b@v>=bCWMX zXF`HbG&W^>_W%Ejg`mb#=lvI+_dp2(x-A>s{qVLqcz)@e3cmRpXu9@kJy5R!YPWY+ z3xK8;V?d)1oS@_Y+LFx-cN`@Dblx|-eL;XG80o7uE8h`s)6R=DSF~K*S%+Kgj)!7wMb+gAZN-ElJ{lG!8+nTu^y~ zI-hn=8J~YaSvKeH|NqEo_=WdeXtsl<-)Qi)8OD$kp-Kxp4!#p;e#Y<7Yda}ihv9{; z46X!y`2{3F{|2pF>#i1f@kx$gibh#_0qJi+;=e%PbuT15;o$*ZU4>eh8XoXC?h0DO z#L)bok-z;AsMFfbrVMNt0t z=nVy}xD(q2ij4ckCjv`9&ny8Llrd!^58qEx3`w1HAqNbQ&sX%{9yE~#+9==4>kH=HPAxj<}ofp8B3ur$aY=1sz z8$YN$-FXbuL^yf}wAS*_>q9TJSy93W7XFa*^5Sg*D1Vhm!iyz)P@&^452`)D?SvQF zxzP0=Q^ECzPcQ4sHHiIyhL>Vr&YbZFv0eu?y=?*|Gf;Y431WcKn>})RvxlU&8~4G! ze^KxaE1-RYu;&Ud%p4SsG?ODDO9Igpd|3J?ZMLKRK8qNIE ztN;Ih5r%30WT^SwSj=~an9qP@KK}A{+ZNDmN6_;2CAdX_t-QU@fKrx#+B2Z=X}wfx z5DK0|haFqN;c=V|v}Mwx*L3ys|Nmc10~^Wg0bTj!!T>o(1bUt?s67iBj{#qaB;e64 zkK8SNVR+!%@rKfTkAtrTnjiCnil-CPxIz1dL5Gop#$Ru0fm&#;pgnCKt+z``x+?@wP9sI0 z9|DgLH@`ty<$uEvv`LY_y#Um+>%83hzcj<6+X~`>5?@H`u0p_r@&Ajjt3Z<(rge~3 z7HG{+=aCl$pgXsa&y(SAH3FH`d_)4auNG7Zfa@iwcV2IThKEPD9e6x4|HZHOtPCFA z){dP=Jvx6iJ_7k3wCG?lD7;!PmBvAJf?Sagam9~~pwPb$b;Yaq|NlGoy8drHQ11l0 z8`D%*4Rl5uXx`=di$wzbRfV7TR|>ojfw}gXe?g*ngH)mfHz2T zJp+XXv@CK*Yy_xuFx!03Z$H8?g5wc zKE13b7o)ZpD*KV!3!NatpIrtU{(dpYyyq{{&;I}adLFpm05#rLd<19Amm>fF!|MlV z_}GSn!l$J2g$ig)1rjzt7em7awBZ>VHdjFzt6SK!^T@Yj4X|(s5b$Wdgb@yq!=_p< zl|1+9d<4?oYr6dE|Nk!@y@5Ec>l}!NmJJhLNGC)5E8Gq9@6AQ1{_X5T@$d5&H$Fi8 zlYr@;+%TwrLjHmx@IEL4HL>`Il_LL?gZv`|_0O)eDE{$Ig80X|3+5kAH2>`EMe`2_ zR{wym^n1|@9$`2P>P+!@Hvi!$7YEf)%fST<=L(? zO&@ZBu0a9US8lIB&W5H*aK3>#23vjgG8|l3g6j>qeUR}|$e6EyPq+RHrxZ2@pYCEv z5P@$gKHm6@0pw&*Kwaqu+4v1Q*7*!HHVwK+^!bbI_5c5aPB&*^U?>HR_kafEVaIEN zGeJT$C2pO+>-il!@4zNJBTdB^Tzb?0 zdnO<8>DD>+VkIOGnSv_;gm*D2di(|Q<6vFx+)QRmieQ^jjRzL6c zpZ}mS8BmAw^&C*U2kIWsfomR}Px)Jegh5-v|MRzaf*9b*JCEic9Q>`8!e9Tt0I$by zV1SmZVEy1!1|BB{-DU&siG$mA93I`Qk0U^vSo0-3x-DMRcYy-+9XNmvznBQ> z27+h9p_BiPv9T|C*8N8w{sh-YFT+oPR)e9&XDDcW6MUfo=tjaq(1mEtM>t$MUx9L4 zC+tW%(7|u;`WozBkSoJHAzKBmf?A@GaRcZyg362USO5QS{_(#=2%IHAoY9;M4gr+6QbIbm!GeISI502k`zwaLcUujRjgW*P|13bYJKRk6ux;^Ptku7c?t! z06eqMS$p9H==>m$?$R5Ga`y5=oJm!2#PsSJbCo8R;>E}--F-(!VAzO z9w>D~=RZN|3A7)^qucbU3}}q?`ir-bkTKTMXP`!!?~B(PvCq$51ltb{C;^{tCD2_T zj@>LOP*)g$T@ep1S3x`2J$hL;t%SN_Ca7v`J|X~h1=PRYrin7T;N~{y#IaPUJKjEp zx???Rc|^$nrfZP=Z?OhyvplNJ$o`jx`ac5df0(^E{QuN347{S=v-7HBNU#fNjp1*{ zgKs1qoB!1Fw`^wsPwMcuo&z;%k$2qiw}93Ue>=hf-OAovEx=F`4H{e(1h>q3S*t-e zds;eil!${z4VJ&K~)E z5zu{39^I@Z{t!o#c)mz2c)0_pegT~uvb_g@K#$%XX zXm9KFC8YfIQXNZu91{FO0AxStD!RjvCPt|dRQHQ%ppikaO?Q~!HaUWAf;R#nK@jKJ3vuvt#_<>S`#=rlqu@n-8fl*VdB;Jg_MCv9i~(Av&9CXY;YFB< z1OwzO^inyGZr26i?epCN-;ODiw)t2W2-He=bUP@#?n|2hu8;nKGU%e;|NpAyg;E+Aw)A{VhUhu&B@fT0`fLfzJSW5Uk zx@&iU4+i@8VghL9sQEC5kLBmm{iuOq1zN`s+NBGv@j-W6LE;r9%!E;uyzKk%|No1f zZ_(;g&}~hn(DR-_cPoMSrhEc#E5H4)mVdp!H3`Vg=_1#I$ghBlh2U+<W6b!QTUNIy60n4G?%e>4hVa?tKaBYC}eF3PGU>-pB(*K%KBoS40pW0&fN=MGIo6dq04K80_8vwD1iU z@aXmeh3~{y#D%XVntPic@q2W0d^_4u8sq_4lVb>SY!S$@wm2Lsiq)~u^Z;=zEIoJ# zc!1X1tcHaz$h|=VuX|oRe2L^<(Ej4@j*v_P9-9HLlzlPR_3!_0u$|r9pkntoGias- z)W!iVS?Gi>#f5B{1?47R|6ZN%KE0-(`Hq|OAQt`yX}gfBUOl;TJ&Y{>d3P8FC9DodURfg zc;LkY(D*B8Na4tfr4zwpN~H?X;6b5pjxjEs@4-FRm%l)Z?%?y`pz*37_dwOwk=K`D zBH^&)tDJ@V)^jRVyvo%dfXyZQhB%a;HD|HDRQm#T^}yjbx33)*-d>U{kL zM$lp~pO_1d5n5|*F&!S_o*`ak?FR~Q&Tr_uNS1l5zB&tHguZ0;5Yj|d%Uc(&iO z8+7g@=yC!ERq$vJ=m2Eq7rGZf;lT_#^#nAnUkF+{qXb=#1#16-R?+;&T#p6mKfkD- z_y0e9uv8Vieb%G7LV%%E(xbbA!|>aSeLwjbKuh==Kr!Gf0G^M&|H5NGXo)Cf`0GXY zACMAd&`K%Tg0I&L5bJ3?x=nZT>4H{@zc}a(=^}XEU}bm-YRiK9Q!lF3!9D;Vn&{EZ zI>!~fUMh4GY)IquEsXV2@cQqMB((lZD?qOQJUYL>yaH}eBds5R)~}#JZv~I;dJg0^ z3MdtKvr2k^I!zX(HXhxqwXQl0-yCcNO6@(moh3j=(Ks+Llm?;BFx7&R9(aZc;op4^ z`4|{pT+0(^ReO-L96OJD zbjDr)ALIy5@PBS{GQ93Um=9i_@v;Q8a$4~za`^@EA9x80$d9Odd_boIK=u#mzu-Cv z-ogU9>jrQm~@6Pw2 zX4KWHum3$Q@031(45Yq5Y6c<|r_l1Q`4?j;A82D+w;`y50csC~c3uZN4;qzEUo24+ z1K)!HYHxwo4};c1aKBu49A$m#`=9){)~ABEVu4}{ZHN$*6rtl(IxpgngQJSYqdWEi zYRg9&X;mD!oCC*G{ZD>|*XLevJjT`^1Vv2eKajn^PNP6+?{0=!J9W)UG>Q{ia z<$8clP`M1-3fm8wO$JXCv-7ts0&zMKr*qhXcD3-g?1t_XFV%(YY>8lEV0bZ22vlD{ zPUzt8vSwmn0Pou2Z#7^7o!;rf!0^Jj47Py->0Aq>-8-P85j;SLa9o4j^MZEB#mPF< zLoUGkgYSdSoUjKSY0-HBbX9ccu~O-mGf~bbZ$8ZE18N*JGcquso@?RJSqnbYqBC}n z2mD-%m<6Efvlg_47jmwJHz*joOAkP5^VV-A9A4ca791X(VlLgadwe>7fwuI+PLcw7 z!ugns4PIO9VZVPk>K;`0(H3;6niq&WoO%JSw1WGI-}F zA}c`mXMks1Js{g&HGDe%Ar!nc{KwBQ!2^`>!TaREa}SUW_~nuwy}Y;VWEeb>SsFbU zPuTr`0876wPEP}^vldZ74(pfwppD#&Cf`9; z0FB!11ue=1Z?x`q7XTkfa)7@t6D$MUaP6sh6gtPm;L%)rfT4sNwBOSMbc{A=p6!SR zcqkf_3qj)u;4NG)PlGZnXfyk-Vr~XdxS}}t9(b2LZ2lh9mWGyxpu!M+a0=3j1`mu~ zE!6|HpxMAJdDjgucr8IK=p~Ndj(>{rE&l#L?h3k&ox$U{ z>jsc#TMv|;dtvMfY5r>GVvhUpx0ZoUV`x5N0UC4ZWxd`4Y8#`B{j?N-tZ-leZMcWu z(<5Ed2p*aS9a{!!ema5D59kK&)&r%^Acx6q0Hscplht|PHlb9)u=oa@PyrtEYdui1 z7cuW-`2U4c0c?3d=W)82`H(K6xRq3B20kWk0AS ze-Aza;-Muc3trjbfPV^UkEvO*3jD1Oqo9ha^Z1Lo6T}%jx=RmubRLEtbR?|~NIfLiaMUemmOP<3%_99+FjNwJpE%fzP zpz_}Xt)mIr&D0zE0X+TGTl(U~m7o7X%e_G@nbu1sEFRsiA28Pw|G$YcRtf5F!0TV| z{498E7;QhX)R#Xf^W(_WGFe++6~NPt4aU@d4+@(2f{Hwv1lPn+-} z+Vt;#$PVGw10@fUTM)4?U*_}^7`+Pu) zFQ5m?ltdhSAqkoo28CDik9z)=6h?4=6MUW%sP_n(TlVM;z42o84^Rr?Z~eo-zyR)S zp!9k8Tc?9ENAnTL3EXKD(9H#%D-F6;4b-27Yz^XPfSla~T08_fd62(F4P;2Sw?OA5 zr-mA3h5!65U%>s|N3NYu!1WX3DNym*UBm&cjlh$ppjJ}t1&`xQAYVX?6L31_qO9=0 z`4NBfE5;IGP%abg3BDF%f=91uXFX^(3_Jk#;w)$* zS2w5`2)gG7biNZPBFjN#c{gY%toFhSFOX))DTknN?ltv9(%*}uA9R2%Xqgg!%Ms9l zr(K|Nl?kB!?|&Ug|JMfE|2@gd@Uj6sWddp^K7*czXsE*93L1+6o#f+V`G~*uA?W-j z&8Kl6))pyr+B>(V!nL=Bp_0jGIH z;~(0e0_A5=Qx0qcxC7An`GxUKP^tVJbR;?lC_q~elvaZ;r~UroMK9cL8Hn8u;Poz0 zdo}<6|L%$lhbn!~P-db#Qy;g&B(g1B#jO@iI{Of%<=-gyi*~{}JS+uDxL?*S z5ddA)KV+8Ua=#&PdlYgN5GePkS>Q{mq z>FC2MowXMrhroB1-T;*`FR~>iK)C@_-6(*%pD4TUIY0yYpqsf~xLg7CVUfpgz%vYJ zwZaR-1K^F<;4>0m$+2PzOj>4n|1^9oW+~bHC>jVfftWn z(=gCdmCo1;KAou#UhF&yZnS^~Mj+R9lq!P;dSEl4(Dc-K%cIwH-u?goUvwV*|Nr&5 z7n3f3K?x7g*o5CTP*G!hT@h3Q9DWi10yI{J_rg+8`T&I|XvXGG@C)8+pj`6Iqt|va z)C}!s=w?8>>yY#c((lo0o2sb8@bbfRe#CmrFwkUB=>eZ!UCv4W|AUN&EQ&!3QP8!T zouHH8LQjB_HE3AF#{+zxXQ@xG?zxE|=X`{W1Nn5mda-sBWF?IP=Hcj|8UoZr22F*5 z*YUq7SPn{y_jer=0?j~}vKC4*y!dk)Y9eG!&+!+#zwk4FCqp3qd12l4|NrZj7bcew z>A|D*e_cE{kiwxOLf~_OJum(RcNM`4TqHc2s{|NI9H6sK0?@qX!}tQU+^Ng~bjS<1 zTMfD`45^cH=Py5aTnDzl+OzpD2Y){wsJ`mF{$d^IZre4WeB`(nbocS=IPY$kcRzeU zBN+F6I&;C7M1hVy-@5Mqf5&gf*+Kn=QVGyC?!pj7pwrV{JYVq-v`hE^`XR9AA>t=I zn~ySiS{|uO^6##B_ra(0|BF&v(7F!ZW5%E%O2*PoklCfdAanh|hl;{3UF2_R2CXGI z#!*`5)A_&Q8A~abr?oo=e+y{-^~L-7prf3RzjOz;>cHh5C>#*pKRf}4f1ZMxHr=iV zUVpwL8WM>P`JlD$_g|RY`v3nW=$r*;dlZK`b7AJZgVuj9URQ#zzj(PBEPzO_ z;QkT#4svMG!qNPnu_VB;^AC7kcow*C06X2|1#1eta{ykgA-ePbf6wGU;23`Q;y9>2 zM>?PcGLHftKLPcwR=fn2`$s_2^riZq-L(ua)K-AUG{7RE9^I^Rpi-~b)O`-Dd^9}* zDrP|Ufr8Ezfjgrv8PyqmJ3y%$w5;ldaQpxNFUvuLV-R~g?}L2+p1%ckR-9p4eS1p< zpeyM7cl`hVIsu{{sefV!s(3p;_;uSn0Huw}<&fHdzXg1CENI?Op~M|g&@+}qfs6Zm zkL~~oP?7J^Z2)S*HXmVp5qlfd!Ej{&UCA-W*E&^zzxOhzE8Oj>@OnNdo}m>BV~HBr z3~gBT@_HAf90d1PUay3=|3UH)v6&v-tj`R<^-B6|Sh)Q?1gcm5zi3?#q91znno5J@ zKy$0CJ3)%OK~>B3L!i(Fr%zCM2F~h`^`y;j6nwf>`E@YPdjW4IZT(ha54vlp2;9K{ zRR?#^e1Y63Q&I+Mm97DG+mLG<{#H=N02S}xQZ#J>NP99!=i&1(ohhvcN=|w7+Q#I7 zlKMTv122~M@`KK?crpJW+?}9vVnB`57r!$=Yj;X-yaaWM(*W()wjs z*no%eYF~Kt*1mYL;u+`^YY@jY@RcOPi;n64|2J5Kcyt~vWoxKlj4IIrd2rEec&abq z0v(cm{{?7R1vCc$>A-*rZia>mCWg`rFTP5MFuXpA+@6EAM<4@9w3Q0&4g?-y@Qqco9WxVe#qC zmH?ai3EU%k|3d2&c=;N5Gb?y~VCV4{W=BC{$6n|KfR?nq2e0Nk^kM?oSn!gzr66NF z-+|(}YZ3HPCC|>I{4HBRIiUGBO9^;K@jg(&h`K`uJZso|L;!KkEI1u_^u}HRnI@A4 zO5Ut{HIV#YA_n)n?n#K>TUkJjbnp>O;C|}SbO{D(%;PWYXMhF-ez1V99Sz;!@tp~@ zu)3tgqxq1)XD9wT79-elumj*WGITlEffw$4D9gb%czkC7>vRIy?$vE$;MjbW@dYDj z^+31l2GEg@kX*sv>I=#x))4}=>Y$wQG6+%MbO$NC?gE_$;-K()50d|ST|wu`?(pb# z-Qe2#7SiMAcV(6N2#VlP&|Tor*}-6s<|78srUEEQK-*`x4Itx+mm^@~iXc6Z&@Tnu z9}cQ(e0o_Am!pg+#=bO)`Sbrp>CdDQbFQdkRi3uggJk>q>EY zVSb26FV8`%GdhpI;GafbdJ*S=rI!-W@4hok&;J*?#|WjD*NUL1LrE_IV7Ecji#F7LWw8CI=|vu7=cSi3A~Dhn`2JIH zmG`0xbbLW4Xpoep1aw{^q~QQ7&t7Ch?0**R)A<}Uxm{g_GR6n0uR&w}5+0qkFTe*S zflekY1lQXi?g@a-n|tu$If&5>uD~Zel4N*sydTsft$pCpYkDXG)EqecVhczJbf)XE z7dOBC|KDI8QUcnt_W*rfxS^Ucs`ObyH4{VWgBSXOA`Gu@g3Do#&d)CnfQNgbI|HHR zEG&P#2nMbHJAiT<1*km;lLvJm|3F8JP>Ng71U6`*s<-yU3wek?PI&a1o_Hw9@Zx_T zDDND9p*|U!&SgPE0?_O2V;}f*rd|LQ*e~2UL1P4m!Gqw>Uz`NzdgL`fphMXVz;iIM zhhIn?!8U#jTF-SIR;hP>2CXy)&!2&u)o~Y`^+3)t1UV}M1gr#S@#rp)@U*;AYVOfpd%&mj(TnIKUqF{Qs)IfI|HYoypqu;jp~jZ3 z^t6r_sFm{Uc2{`49u)qd!v1v^Qu*C{L;@TVpsqG(HVPV#p1ly)z68|>NJ|_*@#g_L z==R#n!oU9^>md!ly`1_5I*$#K4~4YpIzfxb4R525#Dm&)&x$}1>3ZX}4WfRmbph2* zAW!@BCLlcQ)14pz8fpnM1ogB*&VQi+TKe1V3Tw*k@c>m=Y@iD3^#Ko*b{y-}SKwmh z1>$B@8BlW$oaeyd@6l^(ttH9uBE(UE;q{ysyoa!q571c*cz?p9o7MJ}4g+}H4dmaK z>E}Vdhs%dTkBEHg81B<+`$a{P!7Yy|$qmpj^s&{-qAXi&+7nf{t}Jh+P)~KF{^rb+Gh;mmtrv{!|801}_Z5zyJ5> zmYoFRf|da>dvvqDm50cwCWGXxJ$g-lgU%;NQxF5~iT3II2ipAf-=kOb2xz79{bH~x z@GV~+y`mpLi{*Mv4b>zWUL1i+fu=Y;dPSeE1`SM^Znl(Ucp;e!*5%Xr3aZhR8>E8? zB5ZilqgOO-Ggx_gyd=YmS2bYoxF2k5MhRGTyrU$;ix`M%sLMrrtHDw| zASp+P6ey6u`?GsR&)@q0|AiJr*zhE16suR%d;kCcFT@~XFjLGSrf7jI{+$i>E-aj5 zKx0_FrV=2j2if2M`}C?xo&lB4);mE1LLR-QKUE|_>$hJVf@t*Vd<2s*kCSA0u^J)_ zGw)72*uhF5sR>XisB1rhHbC{7@`I#GAyQ!PSAsfLy`~Hx@mPpB%;D!&fKB@pE6MP} z303OwUa-{bXi0__>JWz?NCP_@WT5Gu(4YAf&g|Nq6uEO1DG zl#3n(Y3(&_QITYLaT7`W?;fx%ogiBdB8j&`#4|wRD`DcGRqnl}ULdilsAB4%Fzi+3 z-}V3hizk%Na6=T&8=Qj zCXl!Yk~jw>RUe4~jZbDGJnfJL_S`Fw_!EdY%vGVFlZARsZ!1eOyf}#}wF|UVxz}_Z zNY^@u6xdZlPr#;$fV515h{K{W9CTSpuc@fA6vK;Zh!j}MdC>m2UeivHmSiOH>!9P6 zdQC$?;@&WEpUzJny{4SDk_<1*5n`Z7l?AC&Mu@@G`Sh9^fLzIekOC?HrUXs{mq1sS zy#<}#+HDPX4I}7~i(b>8Hj)f4t|EzNZU=kpt&$|ei@h13EF!wk0(AVHH8`|!doAO)SNb2-TWFkyHJmjw2cE;#K;!ek$T-RIG3DjN;j~qn&0W*1OSy1?YRWD zjR|Di1E>@LmDL250L_UHFzJ` zqRI$Kh8N{X;R_(Iz${6#vPDk9uM+I4XRWx zB=`G+q!OW0Aj>^^MVml-Y#kS=XhsW;%mJ59Ynx&%@B^h4aLY0z+RAnk4fBB1*gR5X8@HiO|e&`xSoKTrefxJM`J~I3hfH zMcF_buX}C(p8y>b%g?~b!0_TSxFEL;d8oqx3)c%BU{}Y;Niw|H0+BWancjH|Rzul> zq-H{-q)?@*!ojZI(*im_1ES)`1JJbAEl@O@mV$J~L&P6E&|v@_Neh}G%LxT*3w`(h z{|g6*^g)PpujqpuuzP|-B^h3*K;)Lfw5h_4s)S(Ce|G&rut6-IulLYy=+xF>wP`n)T=oM}L`v3n6 zKZy0`?}G!RSJV#DE;%YoMH^_n_>^!x*t%(nGl zamZn70U-6yAmZs@afo^gkot2FaeuHlM7@SAI6|&~{I?z=Z2*z(6@3pn zIO#xBrs-VJRG=b6Y7wf`L`VWUlJfumi~rz~+O`2^@A_h}y=wB33@;u-LsRzi|V-RWgyO2Ys{Pv<9CW#Q3n`{Irc!;5H; zaIfs^U{Dw5mPfbkr8}T30j)D^L9!rC&mcLu+jcWZlN!jTZrkN|z#-Wyx(rgM{{w|G z7euZbCMN}vYm}5^c<~NgV%z55K_s@>&0ue@l#*n4aULQafF!*KQm%A@q&GmM4MEbN zobS;qY74227Y0i*yqE})7J^y4F&1p{G>}{=MDE*d9flV(lfHx2NTln4d<-7c-=6UO zKWKYhuc-8^a66<6;aiY^;9&f8k#8{r`)m)4%_}*n3`(;l+yC zfBwH{cKZAO#XPRR|6i=U%F6H}MDqLp7wgac`TyeAy|4dYTm^MEH^>PwyjZ=GhvCJs z#cT{OHck;?c(LXq6KK4Oo8g60AS1&I*{zHWFEW1p`v0PtLxkZ)ogX*Di%xBRh8J5V zGcmlFf1i`#h15$)~BC* z3@>~aaWTBenDOiXi^DQJ3@`G+e*J%OQj(eB#gar(h8Ox1Bp6=YViaR|@m1p6{}&8t z|Ng&tEyT|d`!bYW5;Fe)>hFWb;9flT0+r9g+zc;fK4oQip_0kS@M8VnU;kgs0%<+k zFTwEQ!Xh??7r(Fn`Trv9<=6i&7-QKOUc3nwVt64gD#Gw$({dq(7rjTt7+!FIBqo1g zVtBDGftlfjWEBgj+nOXK!{E_t`_NR1A@=1_RwVm9I)5C7jTd(Q0md-E>HBfeDdb>Y^C<_1Z^s+J?1obfjn5fa7#R3n z4?)l0+Y!OQzyMv34f3x?x4VKzw}XU7uL}bs>H;J1d^_mgRPd@H2LTKvApJW)4T|r_ z85sWm2aT)#0`0MDeDvR*0krm(fx+GbWHof$38dbm`M*H99e575^XCrGtcu6wN8b;L zwlXr527|r({SX%y14F4><0H@!xgO2G7(FBps6yBW6b^Ebn~jsF>07#K?A$`m|0 ze}bK{3v68T!`~i_Kbcq<7@!N;7(5#Pg8~684OR%2fXpX={LjD5A?Vu;56J_~4@8iI z0PJ2!_<-$&@WF#opaH4FptJ%G>(*`t28PZb%@3Hr9|ze~q6)eoIstUsO*Uw188p4% z(JLCsB*hTx(Rtx8G(0?dMJF&zfi8zHarmo>;=lA-ZA187ln zuc(v1BtxtRzsm)X0g(B1k6uxA7Pyh1d1FyYe@TYdn?1T&I|M;RhN)!@Y<7MA;y?dA zx>*YZbr?E-dGwn8@B=k%Kr`yCi$O!$(D|}%(3PP7JbG>Q85kH|YCRQVK#V7X{14h= z0g}GJ&cN`J8zhY?4+<05{ESC(xQ$10xrGOFxj}cmzzdm8U;cX}2itg99;$QpXgyG& zm&TuW<1>Gqw?!I%!QlsK{P`Es`2Sr@36MU}k}^nmg8UZ>S$P4ruJh>&NgL2%nGOOVYcR&UL4I`%aW#Ab z8nhSab_!@cQ0L*%dD$cR0%(1i<)?aIkOw`Ii+wzpi(R08yyp7ih0q$%?$A1KAJ7GK zFVgt)!G2ET|91iAZy(gTc5u4zNq*M(!Kd>Pcu55`zFxM!=R!XZ^2OqHU;f8>%s@`d zpz&d_|GMo#H3H)z3>DD(o5Ec?kAqfDf$vg=9gx)gM#7`@e@UK4=kFJ4dcXgBSRO9% zG`!^7`lO`F)AA1glmj59zGw3vmJ&_J#^($S0t}@rEeA?fd^=MaJUivkmJ&h2yY*5j z56E4fop%gxzrH%5KW@jX*QwhhJ>gg;@CrTyDJXfaagh&@(S? z82$d=9eT#I^T_C=1GJC) z2a8AN@zUKsp!*12AG}Nk?IFFp3d?x8N4K~~Z#f5ePWolFJ{$5Hbx?SPg70DlhstM< z&T}5!&I&%=2^=pbya#QDa8_uj2>4$j;A5G?GN?n72VRV&9Dzt zZ-R2pcW=-(&U{vRklEb<3LeLuAR3Q5DS(bv;}>LtovR9R4=9bm%foK_7Z!^^%loQ1 zUg$#@3NO?k42>7E5QYb+P&)aNf6+hWvs6I&1Z3XJ>2FZeBl~L=|W zE*?n+m=j(^Wbrc?9`NWjt@j2k+r9t7J&PZ-(fEH!qDQZ3l^$5o@W2a$EYM|gk32f> zgH^B8lVW%wlf@5Sp4)56RVD?x^lG;gBZJ|A7c3xg@DjTFh6kcOdQDe*OEG|shKYUo zGLs*)$Qe`tGB7yyhW_*DHGQiKv*dIpKf~*_@bn1s9~Sp}aU;2ZMkdt#{t#1Mv}Yo@ ze-}j1@W6|LOceLO)Rkg*5t9jXe^V*g{imJ5?sox+BfH;N59WSNH244Y=rz@aTf&XS z{T|)n0-y@1oC8wQ9-jj#X<_T5y8T%|NwL)B9 zfbVW;J_0&G5wTtb9RDECFFq~AV2EdaITUurd8Q{zbNsk`Awm+l9A-$>2n;xC_JbFc6NHQ>hJ5#YQ=W?T5 zzz2;V(Ehwo@Y++yPS7Mbz=s|NlYiZ=~_(97^NQInA#LJ|m1@vlq0q{zbz(J_b-F z#NR3g-eQ`+6tr(EjX!@aNSa@BX#i-|mF8N|Ij*g@`TKZ5H_LXrGI;cE1>Nliu82K4 zTS1QV=xqflek}vKE{WSC`Il#R&0hwOPRr&)j2_JgI6N$mmB@l_OR&6Le+Q)I6<pFP|Q zp*p8}fKF0t0hPBtov*+rdcIiv5gb@5rR!c^0_~+ay!Z=bD;{{?f9L%dn;wcXAkqi8 zuzf@r|AI2w7f|D} z0y(llN0dF>F2>;To#8hql3GO=85mqaOAS{tF)%oS7o~3p?GWv@Q30)ohMW`Vaq+)v zZ|y&i&b^>0b!`62$ln6GR~MRYJUUxJ@%q}3U!K9I8yv?zo!?(n?g1@_*b7QoFaGWT zos9hbh3kLN8SE~18yuV8GZqpcE~p^cT{^-M@R@x|v>RtAXU zTj7px1>H0Uk@x5Z`^oUYi&=9)XZ;<29RzL%dGwkJ7DzFGS1cGFc+ore59};$NdEs{ zy5WE63Q%Dk+5t7gr`vadPq*s~k8a-y9^Iu4FFYV7Mnriu|Nqb5VhwUM=ni5~TfxDD z@dtkg8%U_v#hwxEqHl4qcq(Xn4cht(s9hjCV3wCQytp?9;`V9q`VguPdGsQC{-xinZ~qPdzewNm=l_eQ z1z$j&(Z@{SPHKk(tSkC!3aENuJq;1xk_YR&KAHmBPXw-eAbBIixAO=%n>D}5@aWtM zE`~Zo8$3FDK}i)YxA=m#rG5uxl5P!`&KIhn-btrx&psNRJvHxlyY_%O?@FMOulYXh&GJN9L{QqBR zfp6_PQIM9>Ht(J$g+qGs%G3fiHYcLAHaw04>65KFk7>U&kcF;Mx411>|iF zs2b3D<&KSKK|%j=2Y5RNXn*7P7acsm|F<6C?*Q#v1}$s?bsRZeEPwE~fNpN@JpLm6 z&#(WWOS~CDMV&mjALi2e|3$!`U!XIYULFUV10a^fk{G|<8%7ua9 zxN8q6ySf^_eaQhzsIc)hL;!g7nx^MSF&G|jY<&9v|NH+hK9>IZ{}OaYC8!>Nsp~Z@ z%8_F5>HK7P;KhZ~KmQHCz03wx2V3TX792Z3Mu0%WawWE%znUMhH2+|R+#Bi9%lc74 zilOxqf9oU$2GE#}0J!YC$qX9#XHEJf$$&gg*8GEszhycD14Hu<<`SdkAB_C1o}f7G zW%Xi}VsQ9&oTb#S@i_y;jADMU8Gqly&0qjq?f@DDYy~Y?_UL8xv6W_(2FY9?5utWOcN_T_Q^s;t*fIGwiG;#P0eOEnsJwYm zep-mZqnq`?A8pXU?Zf}l3?3lWFZ@AD5o2GVbOKTjI$PAI*YqvF6oX@^Z|8T%5XVl~ zW;zL%?)(CeZubn2ZvP5UN&~IaY&}pS=+j-m;nD4$0NP-Z|xAj06$ z*$fIlkZkY{1_mYuaI?eXcrz$dfl{`kBH`+YjUgOAPr_u_UC$g<-v7Au3#u><=DdNA~7k8aa1 zM|2ooEC;P*X#T-cA^|#9P=LR6B4|_DA(qk@=pm(+9^Iygj)3NMp1-JqDK_aA{&t9^ zG~nAYfl_0L!V=czQ!Jgr;N^Od@~PpRK&SBQ1Mu>uoB8{Nl`H}b45ha`x>>hDVt_vr zRw6`SQy= z0q{OQaJvj?e8KRW;s2NH86Zhee89((knaQZu>4*U3%U{eJ{ue8U;_o8?qr3}{P_%y z{DLehpZW7W1RVJVeN+TK^XCUBIPwdIsDPv+3_zQSLHrmMgU|f=2@a0@f+;Ev9^DQB zplc}uUc8q9T}AGqq5z)!fnIxwI(`L?FG$}ATsMM`+~jx>$_nmyfDY=f(iCC~586WlPIj>`S?+RyR=t5&vA%x+I`Ie+-(dHKK)O+%U)-Di<$pH= zC}oKoUTXdkS|SkLdBG8K*&H-~cUK3zn7&L1WQCwdw{rmK)^H)vr3*!Sg&_BWzdj94 z-^V<9ZP$JL|NjN&At8p>PoeD_h<%`-c~Ln13*@{$$hj@u#Q~n3N4l#8zTfjm{`Nw7 zD!4&V!RK+@*$0%tz=?DMXis_Tfs$9vKV(baHhYUGync={-Uv1y);9zlse0O@8TI7% z8-@p7xIF}SCRj=f9J@mWK$ANEOI$ibH-PWsPIKu@-Qv-DyF|sKyO<-B`vo%tgU62Z z--917oqa^Xb-1Gp@B;W!!8ph8|^?*=-q7ZL%m`3CS& zjlHECJbG;}z5uNuaoxbL>3YDYGj|8b-UBag9{}~cJ-)l10Cy~=9(cX_#r0{R$_<>} z!Ttm9jewPDt(QtHe7cQ1lJ|p(BG1mN9?91{n0JGU9na=}Ec`8<44^>KY@7@g3(>)oq$P6Ph9+Ad90ov z>>cQl{Gj@(8*GzD@;A__4vha^?4I)FKcZBGtA^M2o!4IchyrbMb!G7EJoYjV)UrjS z@Cl)vkfV5?dNjWgSP3dOGG`oJtRDO0~tZ%0H85|1N?#x0^reDrdueZvDVl| zW6w=N8I6VJfB1YLq{!p}7nx!&56%=|n1Hpsyq*LvFTv>tQlB)x5$KlhywUuC#iR9P zDeJexjHQmP2TEldpE1-kFqFtPoELEHlmVS31sfuAVPJqrmS!|Oe~%^!DIZ!7l->c| zMP%MwCBoQQ`lgg0bkv~Or(gfOOW(8}C|LxW{{oe7y{3}Muv(uPT!rSZ(gjB z{0&m=(Rt|gPLFO@M~HGMxbg_Fa)^E4@OSL|u@f{`1}Yarf<1cY7JypAo%cN&-!w2X zFd%nDUKk$u?6KMr)S&B&W@KRa%%9KZ2yX0c0;Q?$Isr#;laYlH)Q$ha!ry8N+9lYX zCc&@S3N{wh4QT;ML;CfnLE0|<_vqXUIx+-2lThpU?Fb`(3#d}|y!gkX*EW1LC0Amv5MaF*%TrOU`=0efxT{$MNGJtHC<~k(}}pw2>Oz6#<`=>C$=ph42MYh8KL3 zP^L4W=^30Rp?ylwNQ*@4fBwGJpm0q-?%4U)v-6uLXh($W37=k-V;;S-5nDiqz(L~Q zv)dkgZf^-UsDeHIB4!$BVB|jN_=*x>>jE0u=&JL8C{1f5*DhI)5-zlW==YR`CNSMRyeX+WcmErYuczOl zr#mkJyb%}FFMA;(`1`-7J^?xF(xt-HVl=ncp3?gb40KQi#Qt^^67_hLZlq#0}p1AlAWf6!3{ z^%>w31VLxAy?F2(JZu0Oh2#ehPkVIUc$xMew3mkg6y~k#!J`A<{NU58Ys)0X&>ech zr}LxZ@ph1hK&?K{13p6^@vL6%!o%dhNV*CwS&So3~syzch zS3D`ahxHfi8vpzU_anc(nCt@SM@EbO{SOY+_dcEPUerQGT}45?OX&IqP#y!7yBr?f zQs5$9>4j?@JhOtPk3rL+u>1;I_Tj+rg1L^B;q{#faJ^uSiZ6IT8aofan9}{_|M%OS z;ME<->qTCit_9UEhhN`?l%J6DqMNm6E0*#y>NBFeWCzs;o%dh7mI9ZTF(CDz@)BBD zg6cJcWn!TD6qOPVNbj~(!=syZ^&4#lSI~AD==_8!I z`G*RBYZqu*oprttgJXAyihxgN>I%>9Jt`-_-f>+3Jp!^bbc;)8=?nUaBSg@R043%Zie1R(Pa~b@=h5x20h)u#=nfZXy;PbAnui6QPYlYwFRVZP z|L@p&r1e0(=L`SNFaI5z|1f%V9s(^4%j;x%od@klb~_8S9w@bYq0{;0f3pR*XXnvU zLyvB64N#X2Tmgd4Pk#Rqbc$o0wnulcf=73;M0d5w3+Z0a$m9{w(x=@%o#6AP!GQ;w z0(Aim_c4O3N^U;D?bzwc08P5DZ(!7K#QFzxzbwo@^&JHKWBVee1MVLK4FAYO{nH&R z;n7{J0P>Db7u-90P`v}mU(G+T`sX?x|5*5Rr=wgEbHfm{w1~e2)c)))7ij$kx$MfP zJ0Enc^oyStAz6XH^*yK_>vk1r{_&r`MG{mlcl)Stbh>T;b&?^|mGFLaT4(4M$4nCy zaPRv2OOJy;p?&I8jGrL=>5t7{pee!qg=_nl|E{f1Ak$@#@q*XYp!P2;9jLU!!wr!R zK(!z!9Xx*zP6yV=>0ommJmA3Tpc^S)mF6OK-0_Cv2~d9?vQ!$>sRw)2_Q#F?|KXkb zPTvDB*f$C>zMf1DwYfq~)m<`>`F;Qf2U10I&P-#6$ml(>3W+CJN$ z13B`$#N5Nu_5w)Q&%@GoJ&0lIVQo7PBoE3qCE}oh7+eO6zUZi6Wq`G(VB-!ig293l zb})n2p2Fv=b}*sxA>}c6YcXh{+1>MyxGhlzWh{?wZv{v(=K)TFW-s<$=L0Qq0v%ac zs^Zb@%mJQ*v0Vnbx6CmnwmU%JW!4_#^@|>z$5$|xa)SCVFBzIy8D88jhZHW5BG}{N zkJ!Vot@#UnBHhP|l;3>1^98^yKYm6A25<+%qu18ytpvl1cfp{M1<>tgrDY!7)f_K) zKZ!u@pgZ=$C|VFSdaS-z5;9B$sxjV~3Nm-(qR3j1X&xRn5IM}S;2AxewD1B#BZRp(ZNd-!8c7})Q?NfLKBV>s77=( zJOIAb?h~jw>AZ?mJA!6~UOb;puy*vpRy!I&Ye)0n|Np;W+J#X&f=~KIt{u}Ry!d?$ zSN*sNRGtt~KYBKx)sGUTkR%MPA3=Rz)G8LEemn-+TgKS@>-%#06Ts59^Qj+D5$u9ftuPvGnM4{qZ7$0o2iR{c#d> zzle3YKq-p)&Zmy>m4TpfaPSHh)#;#K0Qev}FI7PX*VebCqKK@FH2(pb&y{c$VDQm= z;9(1zek=puKm=NQ18u^^zPzChI?5F0zE0R(;v62``$1(5s6#05;nsYqxDJs634r9fokbd+yl+0i(&;SnVl}Ay(Y+gN&~fJski18ybHZ`w0xfCm zLrx+ush$uD8Y%%DgaKU!hulsF9d*+DpQR+kquJJYr49pwXXl?%3CPGxudSPcB*Tlj zeBj=M*h(D+!%IHBt`Bzp10UY^+@sf&aitE!3mH?;#!}Y@hL=EfTnQ(nXTd-95dSu3 ziRK6YI4^X7marqAe!>Y_HV&%b4!@AAM<4G3Rnx8iEBq0+$ntt5|BnR^_ks3Rcy#l5 zbe@0=IkA>L@#qc{@aT1uXn3jsIz-zIv`0kXe}jc!sjNrx|6>dcP@Nv#po`9IuRWAz zcrkM_Xi$-r>mhiyG}#Z-PXz5TP%QofIZp)S22g)b!lPRXJ-j+=A9#E}4w`xZ*XN)$ zxu6pi8Bo_l+dv`$G|$sp`{2d)Tc8AA`@o|+S^<0*X{mt6ac2!sLU?@)(tdg&>GGIeYp!*fOeLzhF7ZnX;3B>p(C~RQ8K6@6A&d(*LFMfc>6pw?C zy|=tk>*L$4qT-=>7*u8VItnm&YP+Zicv#*jQifi>0;)$0|GyA)0@=i(0^U&rP7k2) z0v#s*{DtZi0fyHXK+0UK1UU&V!)g+UnoG zKnKZ#(o*xUni6|dce;XN5!~JZO-b>~gR;11^AU;CRUW;zhaO8XfKD~M@rxh6j?E+4 z^@>mDI}gocp1n3KFLE6O7+$Y=QC1CJVv95$0&3ns*8c4)LPc=W1_h|mbTKWuhEGH<>I(Rhy;w`=I(H#Mf4M&e1$vOGOsVNG@9+u3d z`#pA~C={0zr6%TjSUR(ot_KzQu!H?T)sF)MSpRg7-Ux};`#|Z+qu2KJBMF8VEFeE^ zgpOB)g3s3l4Yh&>Mm?JATo`=1(*^ij`amUnvUh+-a&U-OuZf~Z=LrwXPy9XK!Q#a} z9-ZHPET7eQxoAFjVSM1(TPo36?bGQT06Sf&R0DJ`N=rXj`F{`QY8TL$p-<-{aFEBo zJXZk=H_z@;iPx7v=hs!ccxayTVEpI7c-^D()Qi;>U;cMH2Xt45XdZt(eS$}GT?PYq z0Yym+Y-ZQ9@z4MN|Lf~hJd%I-SU#_11D_20qtiJA(h>BK22GSYySxM)tO{%Y_S!yv z2VZ@l>NgP)-ix| zsUbq}@oSIH&HPlxl27Mz&;n|%egOvG?i>{Xk6vd+@Db_?3=F06K9(=)wLE)WRKP8g8mD6}8vg}f zg4&+oaa@ozH|UNTiP!f*>Bbjy*yJ&vPVgN~+vNord^A6Mbl&ppjZu++8Ct^X*&PEi z?{t;dTE6i1%SvEXBUO6U_=L8^Rxe;==XDi=6ME^1=1S z%WTjnQLn8XSR(Ysi(s%s=#AG)G3V>UJv;wHI~AZ^E6r~#JUV?>xOAr%AeVI~3=eoT z|6<{9l>iOMgQvDZ=>v3RINNnlAC@YuI3TYEMDjL7kA!* z#-tB>fR-c5OaZO-yzkNLyThY5bc3tm0mE-EszFz1cgODV=`P*iaoqI)sNnJJtrzj= zyy?^V$))qzi=B@^$MU!y@Pss{d^^h%JUinvTszYXJUiVhAWfJl{2~mV$J=2|AJ6Xn zpb2@1oW_oS|2>blg9Jd08rT3exLFhf(Fbe#I6|f@K*~@q%;j%A3J!!L7T}x+8^Cv9 z@aX*R*?INF*Ea}ndQblHAH3iscE^jmR|P;rq%8a`!XW*i)6XDhSC+bgc6su*=zzoN z{fjMcKx_Msfy3#Y;ahDBKO2)@Q8S;&cFZveR_*wXS4FR)-y0LfUN}$i~4kaM=~5V`0W5XoCL|~ zAM`=^$;P6l7lK`xiT2BmDkoBE;{YJDCp7kow*NiI;-lLI>FWoIwH+|NsAg@v{V6h(hXrNP7rr1BnM@ zhsu>d|Nn#M_EDA_LDo-!%dC*#ZrSP^+6=A#D|8(@|5*MmRx>=X4>a2If}`@w|K=b6 zOO*NL89Hx#aN*ym8hAsSq4Thd<%6Pk;Fbxzyn1oF7&MT^$={+i@yq|$7r^c@JOIjQ z4B%s!#3LmwEXFy;ei)dTE6^$5du+RTkz#S zSXu-u4ce!%wFTRGg0NjEKL7v!?*yM3dGaObenGJN8_zK?aDbf;DQUpN`;MJo9YY-V z2&ywMfEvRbucblh@x|>TkpH<$EghTRFqRk_{(tc^59G>EE}iduI{zCUc=5CR%m2>9 zpa8wpdZ0qE`3F;-VmIsWYucbSQQ~!=eU=>1iBUwp?7aVCBj{SjN6@hBy#J!G91@BW z%?}tIJCBsIciw*ix)0B#Q+3@nZHCv|U-%b+gUKQv8VK#qpfCaj!iHv06B@a_5)$mu z&F<0p+Xvg>ev;k6Jl(|{p!Uk^f8dh}JZ3=K7rnN#Z%Ht`*z%E|;q^^udjisT_Go+q zszE)Pc~lrc4Rgaw`#>AbJ$h}Gge6fHRe)Ndlm9{HoB2CHjSipQtry<^|Gx`lK<9B# zJI*;1Hr~qL0m`1fy*g~5J7SuDaMnw`Y-IpV>ANs6fYyD3?oikKzFgEQmsl)A7fzf?5$(p1yXDH?Zu5E5eCS$y7SUN zQTG^iG)BXt@rZx`0|PvcVv+jSo%dZjAHPUT`||(w$rtg3Xx%pl#CpRJP*cnDdx>82 zKc+gaZr1NtK=EIy{^C^%c-Y#t^$BPV>GK!6{`~*%()qxrJN3uO!xJ1k|Ga+5FVCKc`>6DtfTqI|I%wOq6@zK@2-8*UHYQgLap@Jan@N^v_Zu`!;6U!gHb9_ z@Op!N3>+K`FO5>*_gi#+0%g@uND2q-kZOLz(ajnNc40~EJ~kEx(8Slr5?DHx0;S;) zP~)=`vQ+|eEwp42_)s7JAe497wC53<|D8yfu;Ncmr^gCK*N|||AcmzgZAe^Ht)55E8#Xg@WQ18 zvO}-)+6&45|G_(}!Q~4$e|vPZ+FSy+=@tn<+jO9n#0DvU!1w=pbpC+e%5u3Ay%*F=@aV1rO_`VSdvsSN zd~*_ED&YZ{D<1oD;fY`WLHF^Met9wN3#d9j{`wVG^FZnu4}(@z?>i3;g$-ZwMSupjKMLL1Bj1=a8CzNb7%~y+w`}pmj&!Nu3Hd z$RNXupBKT4@leAL>HJvGGC%M+0}{=Tz_;%GFExC@auzhJ`w(kY!b%+aIdIN4Q6T!L(N_M|21Z52P_a4h#Vu`3Gi%f>wywh=m8P2KRh}wfEF2m+fy+8j?g-(`Hcf|pWue!0nlQx-=K>- zJFj?ji#7je z@h2Tjd+A%@Q5pr!#&>+O>0#^0c#wj>y}{z>rYF5ThLe8d6Pj|NS;KY9KC zKdAf!xABmi+Y$(BB5sQTJNG51bpshs>#SY#g5lf$|J}7~UN1l-))#A5h%&rbo&{-2q7S^P0+QU6{y;+w)J^c{wM_z@uGblRqB9gS`V_PPZGNE?)Pn~FjD=6< zqt4^t3=#YC^ea%nK#qz4MIgu_t)Ol$DF4JoLBb^qboDzt$G%v;T$JI(qD**w2&xSs z=?CQ9Z>Zkg1={2TN+_VsULM_b94{&!ftDZ~1KHF9UT}5sHz@yX{E0{suD?N^b5Rjl z!B`^e*j=I$0Gbuw1M2N`_o#rDQ@5Uk?5AD9ROM+FckHfF5dhtm zY?}t^f*$v1Jy6Nv*zF3s#XA#qC8%9Acx)Ip)&N@0Vbgl4WX;Rjtswuo8h!)0vlY~n z0ELK;4(LjlV=(S_2lY1~`FS4bto3e4em44rCA9&H~^H19C(XzdWSA0J#-fcKCFwgO=xl?>mQ# z(tyWf!8f*D{SJ!T3;|G0mI;dI&gU--@BI4j+nt->*?G*j^=(P1ujRXvBcO!vLP~(a z7PO15#L}ai_0$P%1|MsM(s-ZFSD@V~FJ790HkX?!Jd*@Zjdvb@vE5LR!KYIhoT6dl zl+86N0u20ppxu9t&9x$orCUIDzdZu(+O|Z3Hb5@|jStTTcf^mrZuIQ-11U*hJBz@e_k$o1D+Cu_HSVF3UGO`56JT1NrLVQ4iCu0MTs^j5MCSt zHEKGKzxeePG+YB~xaq?hZhWyX9rpkF|FZh^um7NMHhv9lw`uMFg>=6txI9K{zj<_i zf0+WVZXxbRw_h4;Kd3zmZU}OILu$XgQ%Tk=4oLfvTs&HtH86nB9J6~IlS7j}z8K}#P%>m2uh z2Ff7G#G_lT;Wtl-$+yGcwbi#vr98S>KOY1;&50FOuuO^o?I-r=W`?x8L`rXg>OT)_ z*@L}03?=3s*0LKw3_TBP+4&%bs)w~~ABZ92VJ%w=VhDR!%jWdzFz~l70iT}$+OOf! zdEM3U|BI!d#zp7x7k@v4@^yg#Xv53IumAshHveTQ5de+k^0yc=GBEgdzW2QN-_`If zsAK?19AV^d0qu$Ly!gkr^QnimtTD)fmZ_jR!&+7h%mI%-TFVN8IijF(G;7%}Jvt2h zEkY2^eK6-CM9--n9ftj&R9zB*HiX9sQr&z+1DwVX`3~IvgESytg2oKM?PpNAQ{cwR z;9)Jhut$dhG^W`K8e#=+tOs2(-|4#HMSln@gClsx5WK-iVE6z3ovvGaI%~lT3tv2# zAp{z#0}Xu^{RiC(sK(!t30}2Z2C4=?J7GOLZ$Ou7{Cbh7#LwUY8iPLeLaYo{zJLm; z7p|cF1IJ$;{rCU>e$YCVm(~BlN!*2j0eo2mc<^^WE9msH#Q*>Q?+2~jd>IbPkKL@+ zN35@NK@BWWojU_`pe?i()cO4X zKWN^K)1^CGz_s;lB_HaN0_gCMOXvF+g{hEUv})&}=0}V!mXAuVG(Y$U9xHR{eDA{f zp!1O7ffwGX;4!nEpap*(y|y)nr5RpqF9r2oLDnp}Su79Wn_``upnf||aThf9<|p|b$g@au-O_Dnv3 zLgz^dC%9?T`oGc*6f$+7d(ojGBLvzd-+H@5rn_38^?!vZ)a5U-QXs)#xPq}nEqVti z&Okd3q4PX2RW49f(kmECmqO=Rp+Vw#NSfirl9E6FVeJ_Ukig^;P#B^2hkAd3rjm}o zc={exE0n|o?*4x1zjc-7c10J2V6Fj>8Iefa^B|r;VkUKu0 z$q>+ZU+4npc?;0PLqIc0{H<{;pdI(%1Oh(H&7&J~9>{T5khzc)*fq~n#!EryRpyzKn&jiivFJ^Lq zE@M3I(R!P| zXkX4TP=nz(ND5>e=x`LzUUvb|?d+f#C>GE~D?Z&C9^I}Jd^$@TTn(T2bb?P%fS#A) z(R?7lqtkW9>jG%{@qpa<;%RxLHV=AzF{eMsqT`^swL0((JI7yKdkabq6#^j3v)=#z z?+QBMsk?Lm=#&GgJs|&=3V3vv&H(Yb!2A+!=vG?kFQ9t}k1%?6gRX%u?f2|<6Y#V= zQZvb?yR^Xvdb|T91VBAc4BvQkM{t0=<7)WUr?Yg1PiJihXs)jLfPqJ6>;jMOxuC-| zJUfrSjs~X}xPOk-MuRty+<#%|2lfwWZ}GZskmS7#>aTxqK>mW1Uz6T}l6kFwPv^fE zZo5H#;%_wrtMu=DSG zbh@s1;S6>{H>|rk`EM9NBMg|hwk`v*G@pIo?nCVN8=Gtj=>zC@#wBy0J=&} z=F^w|FF}ijVCk*9b_PhC<fO(R|Rrr#DN$qjPQocmOGPg=gn^&_>@* z-;UQYknsR`x;Vn$dxMDqv|eWg=x)Xrvq3{loyT8H1~r2_kH2^gIzt>{$X`0;P=6_d7$AQg zf-Hbw=Wi7N3(W-uEok#aX$Lr~y3TMl{O{O#&Zjq9z^5~J#p?>VyN~ntf=?srb_Kcn z$BW0HinR0i3+q>iBz*ogC>_*7(m~U9&>~0QfYy_x+>YH-K`E~F5@^G%>jcN{S^-B; zvhFPico79w=PCd_puwY?*|YgLBgkjXKGxL&{JoW+W>~kg!s~W^c?QRC$JqH>lgqw< z&tGYYD*N)^vzrY$#@x$5{Zrow;HWB{;n6u4)c1Djd<=;y2cJ&x0ZE`4Y|mal0gujJ zP#^Cls09gXm%z&-{@wzx#o+V1z)|(#6L?q;l$M`@+O3`MJv)!TuzCp!07w(|9B9*D zcO57IR=jB31_}T-0n5YuJ~wazs+>0+-IxhHlpepYGBQQ2W&TC#XUB{(w&} zcz^tcmsUSPS{xW$JHJ4*K=ML2_}HPBreNiu_P=B29iMJ+1bB8H^XLZ0%}WiiW^i?g zkOviUFa_*C|Nnnc82$z11FvkX{Uuoc>@%n(-Ui;ff6Jr!(eF}Oa7PWai!uT{lo{<9 z(PNWJEgu4Bq~Ze)0eRH)j#1 z67%lhfYwW;eBePAxOpJ|S-b$XZ~|Hnlsx|CETT|)7j(8dXddAuALx>lZdUc};J#nU z6KJ>e#WXKie*)6}=>*^J3SPzJ*$LX=`PrlS4a&83Hw+InKVvWD1hq0+uY-D4o%dhl zM}e1pID)rZzXH`!pu=0=gBH2HSPW`E6`za#(^gjoURDOQ}S}_mmGkJ902X&iX zgn}089r5YSK)x0&19HtPXdf~th6Rv1R^sbG=H%`GT{rilt6K=v9RsbD=m0I0f-J>- zaX3_f0Wp&2!}y}Y#=F-=7j!}y=mJjYrJaQysF!v!!283j{H>sgu9x!Qfd-4uhBRv=IHW&C< zfFatu*TswxHtY#spMV@bpeeMMkPa-k4->Ifn&HLl43s_$D1CKL2UQN>RamW;N}0Re z0}$)CLGr!sFPncbmhl)KX#USr!V2zxgYwCX{hj~*gS8>%LqX!;v6Iekpu6UBH-HWo z0;O2co@Dfalo#)~|3a4DxNdkcX}ti0OK0jHP<8mur&rbK0q9t3&?wb^$kxB-FYd1f zHEk-jUxWpH`R~$g0cvi7PF-p}Q0nf{dCR2}bn3SeC?=<-gL*eE3=Eye9XpS`_;wf6 z^g%xP&Dx{+h=xn&2b5t27Y5KRD96Eef*WGbU*xO?jR_oUJy0>P^Z1K(cmMx?z3oMM z5a#?r7-B^vbWjoHv}Mo|fDN;udlalZI*+5wdGNP_awq5zW$-d8&<#dVhsD0+n$L%H zo-imycsxR+tUI8qwmNTkG(Wfx?%IG4XLB|D=F$9{r8Eh2hiCH>#!}B0CC;Fs4^Zp& zQ|GZ4X`sCz$v0YWS5$!voc{R#f5QWp&IN*xB!83xKey}A;ML3?r`$6tZMHu^s3xJlL; zh?0`$pw>(J13?B4%ftLF^S~`p)^LbqDM)|&H_%PfkfZcK`lTWIO(04j`qg3j;~@I^ zA(CMIyP*0(_Y8pa-@XU7|4jwhi4gtIL1u#NmxJg(4v_@wUxeoV*%19pAW9(mm&5e4 zLG;%{B*FS$eSo+hG`a<{KN_Mx2BHL_KOLt37`TPUY7UVsl~0?n59Dr-UfWF{Bp6=E zL-a~Oq)Q%y!cH5ew+o{8b2->!rOJ?UA3Qwd(Q6wG(trOh*zXr0N+9}QgUkf^9Te@L z{m&3dxPH(Y8IN9DIgtMO5d9qxB@q3qA^J;PJi1xaArhtPh$OjB5L6@d+P-`*!SEs; zqTd0c45B|9qMyH2oQZ*92Pl*{T~C107dUD4Fa7)ff4A!i$339Enc()4<6aQ6^?(b% z>jRh02h9%{J)8fj`0%@Y0@Wg*#YCRTMst?g*VqG~$$!WsH)!eybP+2gJi*2LOVD%+gb%M@MEF~; z{rUg@C1?g6bl(MN)C0T#8RV1~OTh&$WPr!=KB&`u|HZ_gpk1c?Eub4+cZ0^rU0dIl zwC@HDXuYic|NlSuh>(|{brK%kb`A~yc}kKTz8wb-k^e9C_Uv}&u;D53hb=A#$uX9O zzL;$X+6=|t2igMT*m=aayPTu>0VC)f#k-($4{Pioo^2KW|Np7>`!K3 zJE+ld7&HRwQR(K>`3yABDzO>lgVJL!{(FJepdAODaK>Fy*8D?_zXdd9>)ZOxqgV9C z0_c$_9=*JeK1win@OxYYwdz43u*B{Kr!9C2 zw)HlDC+JLOs3RtC0y(0j9<;UV5O|~#x4;Opd}{VMR$B;BPaUU-A<{^~sZ@+Ei; zErUldtJ7-<29M<1pd;-Z9J|>;!bhb_aF+pdHDlsuI9B-Yo z|NnoGx4*d?F!Hy`f=b!uy&#8!0_M|DpHneEg0 z&+xx*=Z6e0&^_)3DovD4kev(w+9 z^>)PxkM3S@h;&bdc;OED0}dG9Q5dfgjnkV{{DUc{{L^-3yLp>l75eFhy)}k z`?i7>_ke?LCxZh61E^32O$>WL0?re17YsQ3Uf6@?PN0F;dVs&r5mXp;9)5WQoc2H! z5`$-VeZY(GFi<;}AAF>VXLoskN3U%Q=!(nxg+dH3SN;3{ACf{qOC?@D{`>#`3pY@< z?gqz!;U<3Xjgipuu2JX#a5ef~3RaI5@R|j->+i$vPK-Y8>WHun$0yKM54Wy{vgJ zB^W$A-5nsQ0u*pBCxHsoYE$N}lilFEvAL>36#qs4{$DV6bIqU|=ZG0riQu zfPw<`Oki)&cw+Mr4V3G^L0d|FAe#exy3-XvTiZdsN|4JtK;vPceeNCROrV9ar3XCs zGcmY;B7wo9+gSrV)8cA)(zo*ks88{&J3!zCuLG!r1D$SBC+n$s)PvF40%Ss8A!y*R zJ6YlNF=)Dl%niMG>-yz?w?OkR7XFrBpj7xPl)vR8n4wl4;>o}GdQo2UFU}Il=3m^U zE+Bu^Yz3#v&9HtcXh{ypG2mjbyF$S5z>Aq)-~qB7pk+|3-;S`9Y9D6=%@RVlw6p$t z4%#c??9dr(0y@&6^(v^*3tO+z?Ti$Z{H>t*PtcNj&>k@#$o5gtCO@Cf(gPrWb@+mE za&PSckP|@5a0GlhUv^grfUAdv;FZI_UYv9Rhly|NlR8IV&8I$$$&fIK1ufqPg~=gM zISM-0a(^%+U4jmn_vkJLrOP+-{{MgBo-f4kaxci46Zl)yK&fP_3q1GU0tFW+_g-XR zVCW5a)%@r^f6LFmp!rp9{ua=FY>!@1F|eP59Xg#Met!7(|Noa){{H`Ocl6gp;_m`IA=B_1B+-MT9JFqT)d}n;a5Cux?RwCB?rQiA6g0k_f58Sr z716$$-$9xdgRA!HfEUYy zAmMTjEC3FdD|7$BjKDJq2GEgNpk)#-`N7#AGCuL5+8LLh z3>{&9s^It4d=B%BEO^->=+*<#T~8%IYwRC^r^R0!bpC?a&k7p9@C2{u2OT?h9n?jA z!EgoSKgh`Gl&he6MNOEbFb1YZ2T^8bJHZ|)L<=HH|N&LaS?6$F=a5+2RIpT93o=ab>3rqV`OKr&cJ@+fh8Od~VB?0MA;wPE z8!z@;29JE)fF2Ut=^OxR=|hXy*uxV*>3zoK|NmbGg9phNN{_*I9fH*D0M!!U;D*Jc zM{{)sgU4}q@R74SKwAd)gNPC__-@2qkN*Al=yY~@`36)mI>WaadPx5FXnYRZY3R{- z9Ha+*>)~E-`wFxdg^2-Wwzv6>hfDW*&=^(sbkH0bO3TXdKxgR+N6V}HEry_GQg=US zKFXu>H~6xNI8gDIJRP)P#kto-l)>^4R2is9Om+_NO#bT8S-SwVYuKZ+cE;%VG$%&ZFCR0cifzvsZ-K7qsjw zc85=A?SU6|FN7IB^Vd21K-D>R9`WdQ-QlD80d!8_36E~q18MvPCqcK;UG&lX!PpFP zBIt^?H2z-)Kl2M5O5?xg?DL}irZ7Y2AyDNm3uZ7~HsN?X$hV-Dh^yhHmrFo(0Jt0l<%Ex*;t+J@ zP3VLdCKn;Sr9I#U*P#PgUY{XCCk@DaP9fN?cEY52`2 zc`?W$k8bdZ2tJ*mD?AymcqD^E*^}{zPcMsr;U%BW)B`WLo(qF!_YOc!^U-_&36>WJ z#YJGT=+hm#qJ#^S-W+#<`kyFm$Wl*_<|7_Hofp6fAJTsGO#bAVeAT1#ya(gC7e8#i z{CDXFCkIG0yBc0X9O(;<^OrL~4KrIil-3e-{}6l~1Go(F@aPOh*|ZK?yU<*p!NA|b z2f2H}r#E+pM|15C7SJLbpU(G&-(Hk}x*g5nVo$i55QLpJbCeH z+5i8B-$40$1*omndB~&r(R;`SQCDzF>jz7TW;ZzWTfdcD1)WoU2()wE@Y{>$4+R(? zGN8NJ!0l3KXoBKK;Kg;&nIpw~)@V7n%WoK|iJV1&F$nlHd+Z?*x6FfV=dVtQ90wryACeY@_ zw>!WC>Akf(j=LTKB}*TEmlv*v-@wzW?_SvM2QB$p;?e7R1T>4DHUT_o!{2fiG)B@5 zS_k$DJOca7NAuAOQ2)oL^PvalLH-sK&`JPC&^XHu(De1u2LcR@wMQ5j3>ZqxKv~iQ zvQ3n~WiqH$)mY?|%W((fQxA z@hHgYFQOO(7(BcE1w48ug7_Ym7xeERruSiK#jxB=b$>P^N|39Pj~8$ zm!Os(GzBfaFTn7U6O{kEYj+radolGsNKNgIZr3Hgoqt*nl!kb~l0Yrk`_Er&TL0_6 zXE%#Vcjyrh)&Kv`|M%d$0J?(f<&(dlxlZVMWk`xPoB#j+ONYPz|4(=^`v7R`&#{-= z{{H{(+np}}>Kck8yR~d8cqsq>i-!+EZb;qny5&V0Sd;69m#0CQGy=>!_7ZgPm`AVe z>O~R^FOKX4g@h|8vY}C1$_Wa?mj^)}@2-$|xf@iy!LpBpYwMFzX&=ymIiTek8(x$w z2G_eAKo#|mL!hA^P&j}R>x<5Nu-xU*?YiOhsTUGfpy>oi`wzJ<1)gnceuLVV0&VgJ zmkpOd@z@=sk^q|WYe@kuKWN^g0?Dk3rVly5mLTLeS9d4xjGa1EAxxTV66UFzjYvPyp{EfE0J2 zFa-^YA6o-T>#hv2gnq-b)0F`{dI~AuR6seW^Ye?oub|!}e@D}QP~y%}aq&$qQSoW6 z7Gd=7tubZbZ@mU8w>s~?xH=WQF23~`Xom&=KKAAx_5AHSL09sC0vVJi7XRS~hqH@{ z4=9k=6ru#Oi;B-~(2D(+pb@A|-Jn={VX_T;c*y}!SRH#2wg9w#yF?`c6j-2&p!FH3 zKX-l)$n0Y;Z~gDA6 zvX6?7N3RVRBw20wjpE(C1z5am!0<8=WK%aJ+dv}y_c@$Ng1@C5R9tkHqb7@&g`m!C zwFo1BD=#?S?t^3fh2s>kYg_+us84T! z#A^-T?pg_Ol>^Fnp53JaK8*h$A^1XcD>PR>ftI!=pFth)|NJdqz&4hs_<*}+p3EgG zE}#_pG;R}sx^X;vbcnPXXL4|ViUQnUTx@IbPTz=U#3Fws~(wcw%d-U2an_Ku%I5Hk7&M?gI3UYmnMLQTfp5D$8I+f&*r_L0*Ilr zb;@{I}%@3WgX+FRRlIHLHq0S$Xj5)`~?+Q`XHC}&OPw^|9?nvS^*wl0f)M0a%q4^>$g%x zP$Hjy1T^UJ{)PGna53Ae3(jO<1ts@)fo@6nOm_A0WOjA&u)OBM@BXR5f{VYE9dv}k zr`LQCe?h}nz4;Ym=_g17;6-~2xT9Y>33>+9`Ki(jFO=ND`#F*?fx70J*L*r(y@-dX z<8K8W`u+M6tlWM7B5d0K|1Y0|3Y$IK!Dnr}JOtvrHv|ovAAhlY7ie_@*gx>`6L_DZ z`Hcp6-zn%4)y~=jKHc`+&H)~sz9&FkGVu91-QXjw`1?MADi7#sBc70+rEjkeJE-Z{ zdKeTkpmhi!p88s_fB0KKLx%jFpcTj_uGw;<=V9;h>!;N5GZ4=%%=y)bMB zyP}TUQ}c)?<5AFfr3gs-P4LFa`!5o~_E(+-wFrDPAAmPqOz_k^;=$;;!?*Pbe?RE- z@z)Q1x>HZQz6~2sg@)fn$lz<|(-+xqK^;|G<3YYku<;;eFbgss6b4%AqPwsWbmM?e zuWCf&|No%%VK3|t{r}$`Y}0zF-s5#X%zwKNfPx*g@%q_|b4{Ru!;;_^t@`Mp30l0< zdZ5G|S^`h^VAZX!1$;$3v0oZ!$G?0;{Yr%T}AR};~ zbQKLA%7L_qkk4~~`X6#a;O`f`2f?e^7)uJfoo!kVlnQusS4ViX{x7u$Z?Q@Pj~8+L z2Ss${lNaapKqJ|~p#2dplcgD4x)oeHpS{R*{`0@PS_CvK)p_WJ_e{_X6vKSYh0!jBR}gsErH?U+~G0*8l(i?*@;1 zv>qshZi)BkX1&r6HtO$x*mf#sWl)|0?{|0!+RqOiCxrVSbfz45M%AP9I(Re3esDB}b$3Ir`tPCp{$@b4}IW+%pVf7DaidzG8Mi}zo z-wVS7FRVd>s?cZp9H0M@O-mJ^BWIj|AQ8N{%7Rx3k6lm-E2PHX&fG% zmqEKsGr$L9c80EK{?81#qGttTNjzvC=i(2KPS7sZ1E5u*C5hk*cxqRGmxL;;`w!ZT zasadm4zzQiGz#S~LH<_o*;dU*JisM6XqeoA!Q;5=3ear83dYhUpk|ei255R7Zb9jM zP~y7I$I9T*U3$Q?^T_Loka7^)V$za&571~~?v58}yFob*vUc*<9#B>E{sj|wzq~7G z3o>X?>f=424tDK|7qiZRBEffsM=xkopQ!X)e$atyU#kEAe^Ec-&wmf_EOmt^>`boC zV=p>Zf+~{RrR*NfwFekV?LdA7pHT(6k!_L$!;9l9`59h_5RP%s_JNo{E z8s!S00~UI1e@~ELcp{M(Z9VDTsho61*>P&WdHns zF;N3~z6^W^*o)YfKj6znK)Vw_Df#RUP^yEhYf9Yp|NjK=q))wMNjfNO?>_|2x#=4*C9z7L_7O^XF@TH` z0j;>tR|g$}4;p%SJsnzKf#hE7{Qv)TKP3KMNQ2Y(@fX571VQs)&s_}AC_m$J^4u0p8Nn;nQ6q-~rlc<|T@F+7h>*9MQ~+6D&x zmMNT|>hR%chQx3GWf?Qm}+5D4>zhw#sNJGj0 z|DfR?2Jo&Guxnh{7#K_SMHO^9FMq2yCj;n+oeIzy2;c$~ zJhSlf_7{EzaHqYM4eG*f2MLf1!He#|0RZ!46bA!CH`p;A$6dj#e^ju!I-Er3$0t^h0YqxwlYZt)UyPlx)MfqE{f`(0+_kj&5EqrOm%mCe|4xTps z2TEn1u0lot+CUx8&-`_+olO0r2P?Sk_nb4S!1#6MSUw`wP=2 zpau|9zp)S${-Azi%PP}H5uaVlt3s14)^P-KA4!v-a1e-_YPVP%lvKTsm^=)B(< zy5q%>8NdE_hwcEa0nld!M?7*`kq5b?`A7x&vN{I_N094FL|@v2yR?w|sWTpe@?k}f zZ*pCLPv;L%YU%^cLi=?7^h~bv@no)Z@wI&J$?t#0xAh6=*iO(v$^8BYJvtA8Hc)X& zf?Dylpb-@h%^x1k2N-=@-}>;o{s65ZFUj)&_bu*w_L_);CaPY{It8k4Lw9)eI>Szu z1Z`Gu2A#9Y-*N^N6TLQ|U6ekZpL{j{yr?P#72a?8TQ7kpXr7eVICi^%s}%=uTz!8b zvGxD|m!Rd7{PLg)ju$gjK!?5m11*y8Jp3Z+xB!FUrPmW6<(J$U{p8FZX7f6H;ulv6iof88@so4}Xxjc0F& z%735EhcEUopV#A75TjzkZLF1?ubcZ9X z-s<(1@aQ}Tc84p-+uhj$o}His$=_NE8a3^;6`TbfGxS&hs>@4vfQQ~-`a5rVG#`@S zZ`lp%JtIeTE9h8K#P|`|+hQPBfNk{M0k#sfcnid61zkMm(QCVOCdjT<(DqA@PTvVH zuFeNp3E_A9P5_TUgX=TU%8Cw<+RzE0rCcx8fE9*<_QLLXDGVC;t=;gSzqR(?|Nk#J zK!M$P4Kzmw%HoDkL1u>T_{?ADJHey#@JmgIKfOC77+$2z=Vvgy1dlPT|NsBLv;wVn z`UdVxf)dlkhoI(o1$bjo2^VA~0yAh%0o0y*c?#@B+kfp63@^k%j)DeyOA$D9lO;e) z!VJH?oCUG;8c5yydHf7eD?vM%`CH>bDFQkIes?;@ z|NlESyU8%VJpSwde;593OF`B5E|45(_laxE6aJP4&^cS3-$Ak9{pvrcpnaJOI(nen zwZo&E1KjuM^ql}YfSkpr8@iEg7AV{-a~t?uB*FO!q||qThqZ?Qe+xTUgmr%{xZSw> z0Ic2kPUsKlXhU%R2Zx_3Xqb*;31}L_b;ZjpP^$(OyxrasFDpUPFBgNP552qtk_EY_ z`2g6{{H=Wd|AWS!wb~>YUO0pLF(6rJRS#{|ynF>ZM>KTDi^Yq<6^KXYv6m}wlr zDt~YwfR8+R`5R<<=kXWS%RuAVtQ+S@G8}i^zy+#&_k&IX12r)`pywUDJoo+o{}+KE z6MI2z9aqEuuoebrmb|kUWHuxUKy@3miScp&ik-Pfp%6votM|(LvUok<2w8ub3rRFy3;_{ck}o8fm%zT znl$+es4@kgxe7Xb;>9^ZaMd{hbPN%wmDYKXzr~!9fuVaYC>T97e{>#l=}lk+9o3+~ z$iU#(c^7nDTb+R6w}#69ybkHOar zI^l)JVF3n@ ztw-`gTvbP3O16BbYdxFrCTeY$fufL82ybcfFH?zPc*aql!}sl!p9&fE>) zlM+fjJ7agaLW8xn2b4ZKzrT=J`~UyTdeC87osU2pH{L;tEahfUxm()d(djzjg~=>X z(Nfw0I!WOrFSz0G8xmFr!Dm5%TUaH!poVK^KWHrpGx9nDk4|Ptkue3V*e&7Zq0j&S zzldJ|%8AEbpG1tWxpY1R1>_$W&6kj{O#TQ8#~m+{@AHEzXK=;r=HuCU929<-f%o$4 zzyJSzd(#myt%qduMgeL8=?a6Kr%@X`!4%L~#8 z3DZ(l&_1LlP$0PO0Gaqgeb6B&d@V2Zm$H@1dtwY{%TNJdIr2g z26SJ#OLw-+3og(UQS%R$5;>3LU>QfttDrLmc<(stFnDx(D)?9?a+FAUbOs85))ON7 zJ+OP%Tr^*KBwzAi4wL|`XoKDW?uf1!5kIi;70?1!kItK*>38%C>_MY~qMQEz=ie53 z19Yh|NLhF3h2}?$FTe#Xnfk6}W;je+e7)_T~BW|HTe*&{!g5eF@zC;Qgwg6TU&`A9r5HvY-4#LNRFYqof9O zA4qTL29M60pmn>uHh{d83tnH|GLM0Q!G(WY>It9j(jB1c_cb@9o&Li44Cr#^?_f=! zd88NMeFdGz!Jc`Dvir3(47AG|(bqwqpLk(i4;sTe{=#@UXfNL}RE@GAjXs?(L5J;k z-gkvAYXu$WIAzuE|1b87fr@8Vg-UR!IKF^|ia9rEE&$w(gNH{*ut#^ffJf`Ml2Fgi zKd)ur?auozG;WH5$7Bjli-Fg22srX@3sI5q?B-Dc?NQRdV2<~4fbZ+^=~gfC@$CHjqV_Ck2JrA}0a$!eHl>4TO2;H&&A)84q8qj4~|#xy+`qS z0t}D^%iXRoN}azsiwcz5f^J~!JpSVG%>Vyif>y{t(yLE*ass#>;|AR%dySWs!Kd?C z=kXVJWI)5Et}npGl=WRwfx#^0=H!ygr2}FFhceLOe7tg4cJQe_<{31v{sk8g zEUY$2L&EAM=%z%ddtUsW0oVWfa@qusUR&>Ka3%HNMZzS0hHkLOJ-SODyp#g9e!E$v zO2E0Kek&}Obh3jR*%0?3<<}Pu;5BxTs_DuSNIKDZ3@V+HGkja0lt@DcFLfZNCV)ce zMi830ivY{QP1rXp|dz1e_t**yk@gLHDC{-Up5GOTPHS%nCkXS_YCgL1V_?@O^O@ zT>_F$Vg3i@7LFHoi$J*o5(1Y%q0xE&g%-&8WM>)hfGy;(SETwLrXN&)d3OE-)%GBx z(AOBgNXZ42{roL&K+U?&?=P+_1cfW)xT%cApz!(s;=n`D906#vK7R}7<^xaAqUGJ7 zJ_vuy7f_SA8GN4}1Ahw}{QODJ*zi%ZTpsT{cgQY(}V`<6Yh2*e%VBpIUVl24&7f6=$OlOHbp8kX{)PJ@&`Fx0Rhq3o zKm!BM!M8Vn;}x{7?*EIjlK=l-f|kcm@J!wh%K2b@9-Y5DnZftq@NZ*hyyd7lALPl- z1CE{G9Sk15H4Ka|ULOI~tN&koe(?W4xN{Fl7odCA`CCqaLOr=3WTI#Hc2G$HS`gH0 z!v{K;ag}E>IMfU;c`%;v>3r$Ic550L>JldVDsh z5CePsyQ|>=!;{g5mmq5jKic{zvcnDm8bI+q_BChr1#hV)&q4`;2F)ApsfkdUQ7Ua3FCgWcXL(UttBCm?=;hM?FA$jG!&M=b&~5Z1HXE;R&#EcIS&v zlR*AF0@_gk+7Fgo3Q1?ta|J=uA{;)Q??LT1kIrL`F@`4{V+}9GzC6DGW%dd*Zx3rL zbpC$Pcn1{l73QEK`|3Q<3K`I`A#9){mP#aE81um9&JZOlXdiUv{TDMz{{Me{?}Z=_ zsC5Wlz49#&zItV~0`lsW-m?GL=g&X|Cv<%_hr_pHj3s5D3pODKp|6+&3O>l}wGC*0 z z9Nd9IZXbj0ji`7JT3~Sabu(ywzxfCUMA6Ge)^Goz3()lPq#0f;R6uIqA-n&@_t}Uv z&<)zS_>BwXr28-jAAQmK@Be?pONQS-?p?_No^`3n@#tp#Y6|M+IVkv8CUBH;fI5I4 zngJ5f%_7I0WkAD4ph8#Y#p1=FZ8_l93-Yz9;7h&CeNgs{fRfM-P&ESa2>84q$l>oL zJ?CgUR;oeo`(QBtF{w**)ljXDiM((JsT7mkWG&3=luWwLW&C%8Q)=kJMv=X zU(f|KuRJ=zv2mIm;ybZuuoEDq8>m`_lpl`Wpa?2? z7jGf)(SUqDO-OL-|2ik1ZZ+@<4aO3+=KoBkM&R@GHJU;7DY(7SdB`y)_N6+w?FFtc zAjOH{C2&iGAN3gj2kxTa^-Rz_@xovh$g7Zf{39T5cRqh{=Fk8C;IUCi+`VN3MJ#CF zekJz{0Zz~+-PQx8W}eBQ#nzgKk(1qx3Sp047imV2&4}}$Jixc;#=cZx1|_Z%70}wR zj%;a$7tV5^K!Bg$*7@6`cPnTyxkuw0&}D5t$>{;z^(dEJg8J!m|9=Ku3?kGG9(qUG zB(Cn+cmy=j18O3tz$Q^kJv|zafKBTJ?Fj;%_Xf)R6*s^Ifnj&G0Mx55SV8{m4s8IP zFtEqN@(};rgFcLpJTworob=&$ee`<8i^UvY{=eV@CFO2#5wJK5UIeU=K`sKiivA;= zcMfkqf&2c=ZzPasvLUx^bmW3+;m#}k(0exIz_&(#PF#Sl^SA(B=iv^nN1W@q?LQ;TJD%fY-C|x10x! z?sh{KZM19x8P;8U0la$hq2ad|2fIMIy!HZkQN>}<>9h51&`Z-mYm7rZx?L~4_J_9H zJ&wCx0FB;*YPcKIK^h^g%$%8!D&oj>kULT@fWn^xTyx#`=sf1r`RIkzN#yWCS)o#z z1Rn%~?Cy}@o=bu97PveBxfhn-A1nabeH?VKttpa| zPJ*JV^ZtuOh?5NAPI3S_>9;k=Nu~SxjD8Xx9 z@I3Bj0jYKll!m_0VfpeOe7gK`2GAMvpo3e%6Ko#c1}{MS-$C|*7KwOv*D}25p9b1y z19wm>`20ukN?p*LSYadB){@nAR-iL=c{~}9cxWExZ?y!iF97Z6=ynC2TnHWQhy)Ey zL7E<*0XkTEe=(aGbY~rSI|L{lgEr!VM&|u2z`JlETN?gdOymD`;xoU%DbRikKZ}>9 zpsw-p!=Qy7uV=h?!HgKs1E+;>&(7v z`IOzkBHs>i@VA@>8PwejUK9;lAJPh%_Iok)halt#HIGh+ROj&*2Y(1MO!($3BEjDh z4+;;crq0*}paEE)&e9d2c?QsF{-80&l2ngg(>Tz)UFY!^X`vtwhk}+^Kn|AVZ@mMu zw;AJp&==BJY{hEL9Mx9P$LerhJEo8)LI1{ z%Xj2OA1i332>2S{&$B?YP5kR)k_Zi&u&FT6$m{0ALVBGP%!qw~-Uoh+0N2KfG-Zb)_H z(QW_oEhw@Pqj`w^2AfVLrdurM%mZUybILC^oq^#%;3VJ{CdFfdH; zOpdeg?DjJNZ>sm~-Un(;c`#n~>1AOAjSHLx^{hMRf=qpJa5<>OJ{83F(7ffy7-rM_ zgRR64bQGv%^A9He)(%iRCppZKA^2r-$8eCb{>8aQw^>Z>d(J8^cNJ{a^Ttpbe;!zi__e* zpx`K}aqO-WX#HQgwHq8kpu4abK}A@vtx1wJ!wdJ*pp|N%lO$#1K`R|CUa&s={r}}- z&<9)mWPw(a=$|9|sdkmH&7Te!h}1<3th;B#M~k^17$HDQLA3qVHn zf)WMjzAe!0sh-K~;B@>F)TM)Lwrah^-&zEkQvd(w^M8+I28etrNTl}fXUzU@cR2?r zZGyHvLiWEv_8x(X7I2ri6EvG-;eyuO2h~K~?i?P?`$1`r0kp6Hw7SG~0e?$Bs43jN zA5sVWXDQ(Vb>jG2Kq&!ytL*a^te`!VoyR~6jBQ#Eln8=P_Ww* z>PL_g5zpf;DxiZT89EOgd?nEQh|v+$IZ#^S+WMcr1GL_#_}~Er0$`0C}txynd^@bcNwbgsF%9{{Me*F9c+2&5fI3zD9kNinOE^KMw$y`C9O`hM0x00oD?xC%3_ZQD8$99< z8aDw=0QQ=K_OkkPrfz_)pLoIR2RdUtM8(Fl^B8C$UMYA=|M`ojr$8g1|5*52lmCHo z0DosRC^^mhg>djo&wu~_PXPIZzZEpG@Ddb2pmkNCS{l-bg4|dQUZ;lQ$d_qE}(W3?~7<_(Ab8v3#fJlH>g_wm+-!Dg@_tJM8U^+fRqcosF@_pfIL0|oxTAN zlL&w{fe%1|>I3B@h&~sHK9B%N?szk3`80?Hb{nGq4syR^NU%?D>IIL^-)Wxwc}LRt za}Ibkzd<>!_=VvCeofa4FKVa!{|{>H3V47PR=55yVefVqXgyGw0KQ$Q^>&FY>OjtDfE*I$iZlUe4msc$bcHTxKn0x6d^#UNlyCn1|NrZw6AW*^J_QO# zaQo>6=)B+8Q(k=k@fmg=KCJ%(YQv!Py+NZ1ptHb15yIusdAQp_qV+(j0_ymIE+{m> zb7m(&K>`|woZZ67&|NLz(Ode&@Y0LDotzBEoh3j4_xi|-`X4BzAIM!W`$5fZ_zqxD zs3TXppu?V>Cxbg@prvp#IuK2aoKDc3NsS8Vik~!(-mRcDu)f_TDhe+qy@TXhP=mM| zd|x4SIOG5WLrDg>SZjWu2&w?U;|iXZcS~eJ1GrX5rt@|F{|_qrB0wGhb=(YS5iYe;qqRKsP#;u0=Ic9BL$FYzW-j zc^LxAIriT_gBLXP+R8>rGrUmX0gqf;Mu11IFP(r*Jg<2D`#<=^Pmf+(9+1NCSm)a1WY4e;nL zcJOHZR+{C}9qi%JdZ{!MJo*S4`Tz$GIA}okZg=bZcBg{xiCx(avOGjZp!HG(XxREi z257nXHfMtsOeGt9y0bZ83LC%*A+DSbiYoiR|Np=4?XEU?ag-Ar6n>DP*gXR_LNWIh z$_NF@_yg!#0_0Q%O7Xg&vZnO_Xobz;7Y8_n7(jclA~-;2mLKVM2IT-b)Er<4YKOz( zKKAg07qc5V84NFVSA$M4;h%a4ln-8PZ$spQ11~DSB9(ve@C1#yg7?Tk2l$X(21@^n z!NWC>L6Y(|@I5M^>J+>I8ItUMy0aBt%y|t;Wc(c;7(ja)KsSXTrTQRH?f$DD)FV0S zX?cXdwGE`oS)}=a5~u;%athoyL+W)yw!=e{qfh5^a1?@;gB<<+|3A2X?5-9t{PrU3 zCB#kJkFMIdU@4u_fr3o&rwJ`5U{>OB79Kno~eLxz^8w1OreB*0~v zW2c)0v=H&_EKw2gIPMJ2ke;2f0xx#|{Qv*;tQRU@Kw0CRN3ShYxHQ8HR!Dk~3k7G5 z`$u6}qxZ${|Ii`tLt)YkFYa=ntQbK`ACNW}cohZcGAs$7ZhMdJcn+8Dbnt19EjvJy ztet;dK^KsNJK>-!|wHM5+AiSonIB!msVb9+V+E?Il@HvY|=Od5fuAo_029I8M0guju9*qwf zKo@Lip7OA~QX=Zn2t6RUN96}UDA8J8DSfT_pPzxjLlbluDSzt{&}M^P7ZrZb4Pv^!6WR=2gE_W5mktd2R)h}eeke6gU!}6 zrLP+wL9D&v(R!(b&7;{zCF)E=ymP!=mg)w z^V(y=i`$?LtKGezHP;@!0TLdaEH|NxRY1Ey0wlmQ`gWj}XJ;q_=n5>4=EIDh%|``1 zJ6(S`THfRD3j|4a+uV6^;VWo4<5bW_OP|hv$6Y~Zfr1M#^~C@GyF+_CI*+$rD(QvZ z-1ed{8nj@1FKEsFOURNHP`ebged345!DlQU2VdCmw;l$CW9KK2-r5Ns2VXJ2I8*=c zKPX6%g0l^DXsSo&Pte_5us}Wd($=FB9GZ^&Q;&jXty`19CLQwVt(^gy2L~BeUk^Ik z5WF59bd*{D6;LJjOJ0bf8=Nda<6xj>mq&B$1P1=rhfE9%AUm3CXE5-$eg;K5YU^7O zWJ7Q24aBerXc-?QoqF`zDo23U$+UWan(duaLEe6$mk$ath)_3J=;c&!3!ULbvAht- zw&uN{1j<;a?a|!}%0Z63VW8_fJq|u%@#uAw@aPQ@)Bv?(e3&&nnhywgSY9ao0xkvk zTQ-8?r5W4{W8rVP4dQi&8+azWgL+)V z`0kh$kYEKJ@YejFrKH58*Od47|Nk#$I6`ie0R?lZA1EgJrh}#+Aa}v}bc5%eJQ?qS z{OQqc3_6P3qxmq0XY&z`7e4R#8GI~1mp*@)0&4a%=G%Z{tK<-TysdV^3w7Ur|6eZ$ zmv5j`-)H;+*FdlPK;?e356cgRmw|skU2u@o8TtF1LA|K%t&re$`|ok^0gFekpM+1Z z51YnoA!vLy9~AIpyx?hhvZTwSTM(4_-gtBu{_yEM?#Wzl;L{0?EuT*CJQ(y&tQYa% zLJfRBmJcL4eIOHM9^Hbk*Mi;W_|08}gTEDAm_v&;aO({`^yqlp-2puIsMi1Qzh|er z!Alu%Y5}!-jUPitSUo%2!5#0;<1gYL3o>|ihZ}(Ma4Rz?NU_G&OJA@l;PyKxqrLd< z{qO%vLD06R3D9^2Z=0Wu7OgIwr5iwr&ZiR+y)U)@{r?ZX@Zm-1g}?t@7+*Mcy4$=2 z9e%YBw0ZG`{e{2(U;KLW8EO6vQeHcTIfC;2bzj%6(9oK}y{7ZhJn$A@%M{kKUqL`TRU3bt26QF z_C4W|eAuJcR}qPlHLjiC9X0PeHva$5%)n4T7kq^4{})A|hQUUN{g4U|G{*^Q zaDYk$c>M}8t=qIzOozdx^AqSOndT!B&}I&34NlK3F@_iBuR%jmp`dX`5r62ou3!u(p^AQf8&X=I2i=FpC3p@<}JH|N1#=dlZ4srox{s=sf>e2ZW z)WY@XEdAlpZ8}9%hry%Q_s5IfH^mshoi#}R1ZF?15B_2|xOlt)>e!t;jA##m*RO)E zP+$F$543m}G~GD?q!e`TEvR*W@-R4lVdjC>!+}y0*iUGK&fqJb`CCBqOOBm?Jv+aF zCUpD2ao%ma*%P!z#~gGlFMn$d`7xh4Hr~n)}V~@RPxF`l%Dh0{zAQyq!Ki#FEvqN5ht`Gnv z4RBEa?zE!j7g+j+=9>(ZrmY9)rd-z<9^LL7pq)@J%6|(o_;lyafK6t3fR2ssX5|pl zVeqs(%HMJhJd}A9Jb?L@zqJ9>j_GFg6wqPt=~a!5mjInfR4NC~U;99JTZ4i(xD4z+ z6}bOEs|DV_=-D9#ITG914hWiM3%Et`}D&lxLlFn}+E z;a_}+zX>!Z3{O|Ap8Q~cr^aFRcXTPl-~8Zs2i<>k4CK!#+d=*=E$}$*3_2bFv`k%s zfxiPZIS!t`D$(<3u2x{+hwO81uGWAu5ktbDwIQ~(pyg#J>_D@dNVl8uw@w0uT=S6( z^pau%$b%sJkJQ5|$VZ^oOXu+ylNvy^r|SaH2*R^cP!NN|TjNC~IPj}AUNH27M4dG} zdN+g4tOW)6-P@3kH0WvwkM3#>571c)2B7K3#VH^QswEisJ8yuSzRn7usuDck+wB0_ z|J?#=cK9T}0BuDDUFq9;pn}uK@&$j726!Le_ZJhM@iX{zegmBa)_MGeQjY+GZ*Pr? zghzLFGWK+}M(pi^)=oduxn zI+&;3Kz)ICkedTKEg@x`zbm+m`_l$1suEt1AG;Y054^bS_UHdgHqi7SIG1$dLbGsnx5pfNCc2L{loElBpP1x0kQCr&x;8ld%$~7drLQX z9CzITIvxph?hWWzT#s&64v;Uitu;mQP0j} zFVBLl2bYJCdxw{N|NsA`HFA3fdgl{2e=9RMeb&O0yGN%p$4d^d2@LSx!D=94-K7m4 z-M$?!XaD{G|ApS8&;MV{eE1o(%XgA9cx4UfW)6?;0Px9a`rm&4ha8&*678-KdBN)g zO318nF5rapelu)bsPx)z$aog4{&fuZ?EJqUboU8pWE%TIkQerk`5Amc147;T5}wWV z3ZU)SKHa7QJUR?Moe%h1L0d^*E(ERBhp#UH?}-78bAT_m@w7bS$?tattQT@O)IN}v zpk`>N?}``o9iXKG-~$>wxcjX7d?bJMqxVSw#H;T8zLC z-v0a=G;a9f^kL9E)$x~pka=5=UR!GqaMD@;x)J$>PdqqzEdYhzOHgwQTF-z77GKD< z3ow9Ncb?t$pd%OkHiBvq{#H@Y%DHaSa4sDNkdMJPp1xo#`2YXKp8F_M7~u5#gIIYM98k2ebXcuTjuHm;AS+eNo&9(k7 zaR8a=80yjdM#86C4_tY&`nJ9;HSlOY#?kzq@rBAgKF}Slpk_Gd7f@Fr_Xjx4z)gD> z2FUz1`2Jp3a6Q}ngSGUqM`!7S&e}IG+!eVPx@+Hnb_scQ9(}zDX@wrdUQf_^5zyRo z=V#ENfF9kZA)Go4&A*vS1z((c$HCyyZR!jX_`z5r2O8h^>3j)V)&&_Kj(r(^R*V4} z&M%@BxfnbxkCf!RQ2Z>);PIW|H|W&2IMB_*B~_l_dmljiDme12=?@F!Hy8 zI>U|)e|R9P*gU#fwe3M|d4X?-z?bq~;s+nxx>Ffk9-8`XkYoU70>c9@X59qMew2a_ z)P4uL;kvsNbY>=~vjAz#y}a=Wbb`v0QXY?P);$hjV_z=^)o2{A7kG5Dazbo+J;kG& z^{O>Qy2GQJb)yZK4Nfl}-K5H9EjPLFOT_?6w#{4Jo{-c=a{K<5+vV3a)B{P1h@ zK|PPw1D^b@S6+gy>qGQsz~v2StL|}+PVga8C_9H#`U$1#_;tr^7j%fda>myc=*8in~9^Ix|>^cmf!?9i_o)%-6 zfGF=vAA{3UNbrjeP=luvysq+Y4ygQv%wiPgfrj`+Rxp(ctzZNlAPefBgPYo*dZ+XL ziw~dJex(6~HbbRCe7mwF~#<1Rj)ZJL~|Nl!JaKM1v`QinrWdhQ7A8OhekIws!d%!1o z@?;^xctQ66|1UuYf`i62JMX{P0A6Hs1XS6TECG3^#1Xm#u58W!|F0*4>%Y$XFFK&+ z^S6MG*7C3gH4pe(G{F6cV;~2)gB%1pZ5MK0Yy{X`@IK^{buh08fmgkN?l`#D-+BMVozpC)1$j0!K3wmiNOnRBaoWIpakat zX5RAYd=EXy=Gcqeg#Z7eeL5e2#;`!E7$>}tjsvMb{`wfi{oqSXUmpYqI2-7;)!7*c zcj#yR{|{dI3-VMGl7tvY0(_u$=lvI&pgCPglHqRw9fc2SUV)QE3D=7^tN#B7-xv78 zDdYct$339qW_`LLdFDdq|Nr0%PLb+IaCr^7O$j_+_Xk|w(jt$xPOX5b@8IuwKy$u()%AN3ZEmuwVd(M>lI0NLjaq z;ei(&r$LQfM0pO%<1d&&?Q&2e2kpNVO9wB>McRK0_9&v@xA5pTm1Kkz{4X+&g0`+5 zU%^-^_#);63j?UufweZ`ls~m2uBGkcw9ae|9f<^mYRchH~cib)oxa6 zu+E!?mq5-(=sx+E7zMSdKn>~R?h2qh)_Q=y6MU)gaq!w~ zkdOy_y;HUrw)IY-5K+waPCdD}*E=bIHDO=x6avu)T6qI1u94O|b>0X0?BvTwqW}J< zO#s)GFWheZ{||1+OgM~`H(>Dv%J|~oMD_3Af5e6Mpe7xI;Q?eFNcC+2}5=Afq{6xaSHpfEJW??*_RSB4!K`^8wd0pgIOM zeM81SU&Mk&QJ|+Ae@q2MCVZ_J>kES}&;nh!nXE75yM!4U7lW#x{|%rdD$?-eee(&H zPG=FAHAwA$@K_~iA?J$@&=K0f0v_GP93I`)kkDIl0yI32G`<-EN(e8`CWA^dNPU`^ z3MzV^zt|ZBDsdsJx-iU#j?dqJVVnn9NyY&hUs?tliSL9B+9PrhQuu~?c7k`4^u{xS zk{|yz@rGYTklSw?ewFjLfbTu{mB`;J4q8pQ=MbnR&cDr-vE@KXDQIBbCW*gg8))Bk zKj{8P8*Rw=y^R%r>od@`C|2N_^!^K*i=Y34I*2WYK?0gLK$Tw|g6o z_K%OD^N>sD16~FO0fyE~F8nT_ySTq!Sji#)Y5{;QeFBwaBUO(rTXK-vj z!~FUlB7{I%1Q-}zpN6)NA@fBqL2V;QdDVIU#f{USA?GQ2bhE0MXfuFrCFnKXQvxe* zEsmjg~1_CHXh)0unW#m|;M|3T*j8Qum>i-2b? zH9dMw7Z*z~yy%T#WdJ1!$ogOKDc<}opsfDF`4Ffdf7o%~HqbN@X%2g+OzytrNS|G&o!@Dgj(oe347)sf)VET~}t^RGvD7zgNP zZ}562(14UrcbY)+4`%)r8_;G@P@4{1#C0BjagkS)VZw{q* zA>hMM@4wK|0Zn)ue*s#b*LnD*Eodlg#(C8K5~wId%okw0fa*U>sT$}=V3dXXH$e@+ z<|7(VKY%8t(k6Ize(~rw&HJg%;MsZAqw_a-eU4}6xfh#X|NHOJZJP2^n_-s$|>gJ*nqcr;tE@VA1FZu96o|Kf<-um6VMz%B9LDkXy8Iu~^OQ>hxH-R5d|05VMp z+Qcwj5n2sEZxM&~?+)mK!p`*oC_$7+di2&FcyU)tfT6)cx0Jh~f)O&8Q^E}j?oc;S ztMHhQa>3;q`?9)XUg0=d4M z0knkV8_1#jt)N*wu)AFizrFMUjbDM!iYxgCDu(~RP(pT{0jQLn-~_sJsrCS94XTNj z0E2Jm2Z$fRY4P5R09|N%5qj?G0@q*v;o$(f6ZPARUIpku6)%dpIxfi@%4O+&7 zHw;vGbe492hPj|?i+p$ZKvo@rozx3j|AIbgW%wU-cqeFV*`wEWgGc8f(1`JioARJ~ zvUUY1C-b+y23@G`x&$AC_`BjigkyeN-=l?r=7X&xj4y4#+=bsp&OAkKZ@$$wCTZ{9D+ zb%V{IZN3Yc7#JLz-!Ya>^yoG%fm-+H8E9A74;KDbB~XW`w{{8m#E5?{lnwv?cj+!& z;`r?tO9^*(XbWh0{WXwv-KO?X&HF)`yF)ubt4YMcsZ!9R*@}g~^#FMKAhg4yld0Qv ziDTz6$L42@C6XYGwLmZHb>VmY;L!~_(X@1iPv=ii>izy3)b%gn?sjbf zt!V;{{DJx)y`=|SIzPR**(%J?dDsJ#1-nBxbb?pz9W?`mx$6p#Zt!w0k8W^$ede!o z-2l4U%%dB;Xo_FVb%#r*LbvOZPA1UZrJa!i9-WR7{DPpvAd#2-{|5Q9`A7v)Q39>+ zKZIdUUxu)kYc+^38{5a@bi3C?Pu zfdH11pZ~jbyMi{Ddv+c#$pCFqcp+~OPWPbmduMp|)-!^3MEANbdGTEH|NrBzEub{` z@&ja^;l<v4*`5qe!aKR~h{pX~qtFS#L;9pDtp;P~wTOR1MfH~5g? z8K4=e|1Vz1{QnQWZj@ghk+MPaEHAzPf}(|0UI*M0dz%Am0hsNB%|pHT?ez=fktLp; z$6v2Vo6sG*r1M7e0~XMI0Tv$6djwk#lqh!lwzQrsm3nd73*k=3PSD)5;kOrQGXMXB zRtwfH0pHfxdZ6^k!QU(}?LNJ=OBx@8lHAKsO>-M57k48RU0bHIqh6IC~wW!nEh6h^z*NcHi`N0{!^Ztva zY@!U{_L56)`G3#O@1C7kAh-K@CLi6}G0=~G@r@KM| zbhLPjAPWP7Pv6-WOp^ki=Vqb|L=4b=sf-+8v1$f*?H^*qbA5TARiui;p+PTzb`14 z9eSzGf^uJX=lvHN(?G=^f9C~|0k4mOk|KDNmO}$JO8XKtAOv<#=Rc3`YK2{(M&JvE z;{X4E5gAQu=90D?=!r!Iy{R{KmpZ~uU2j%q%9^HFEOJ`rOoCB@MI|^F7*aA8u z-lg+1c#3czsN)Ep8hG(A9i+rXMF4bm^kHzZ;lS`B`snBXE}idPx(!}D*!B58*nmBt zfx_-!1((im9=*1S>e37^rrZLx@f{etOIsk0OD_8V-vhchyVF_VCFE>w(A3V08S$WE z?Kvon-iCt02r@F%7!DHt{^DjRsLux(V#)=HS-$3P0d3xL>8=)W1RbQp$WUV9(Jh*w z3W{fE4i9T4$jMwD-J);QwHd(t382*9Evf?JH-Kxy=S&`*_xW37K=&HUF25FW><*Q2?DiGt43_cuehf63!{5>as$M#a6+AktHC!xzmej2TY36SQ z-J=8EDcI)?QURK70Ig>Lt!9Rtf&AhvC^bMsv3qaHe^BE3cib7g^Y8^jFvJ6(1H(Z3 z@EZI<($xYWwu-zEgGVzs?inh$K_lCY{H>s2V$fs(3xBH$sP^yt{=&zAmBF*qMTKJp zJAdmF$e0^{%WV(?v|#4>i|pBd|Gzx_2R7d20hwH10J;t4h5g~r|GN!Zzwx&egET-6 zHVIOdW_Zzh1C$)V=Tz?mt(yQBhA-lGfd-rSTWUZ{1#};N{+~9XyISBy$4-cFD%g-} z4#RH{J)rvQg*H@=2T0G)2cKc<8G3DtwIvu{^f>V|yu1e*n}dWce~TO>kUG!5cn}B) zAJB4kP?#k6{r~?GluNIy86bu|Nmct z&KLwOWT~D6F%&er3`#05AN>U-+xIUnZACfx=JWo~|3UK5k{x`<186;@!?)v1{H>tH zUoRf0fa2@FXXnuuS5-jy08&;+I)ciI7og^4H|rG@P=ETNN3SW@RM@!Yi*2C5h1SpA zwIUARjx+MN{s)~3u=>U7gP;F{X`TK>+XpqnhZ#X*h2U7+FeZt$fH)zxY+)9f*{Nlg?P@6~tRN@`Y1;t7!7vzev>sNmN2OXz*|3xiCU+Ib0Pa*v- zSbqRCx&#{MdEp)O|9`W$2nTo=>M(db>E(6s=m}_$0kU2c)PDf)J$fM<@c)13;no8c z`mMK1xH}<(P@sO6W4DdUi~ruB8J`*zmKR^W|Nn=|LhOAZeBkr{Zi^Q(V273*1*NMC z{vg9%Z$%m+1ly0?9|o-t?fmW0_y#oTgVG-{JaD`<2YN3|>wo_KTcEk2Rs&Em2ky0b z90%_&04MO{;Qf7IW^e6`7ohW=S`YAd90rw<$)I|-b^~aatxxY-P`3ws@5w)pUR!xl zP#Nxe0F)77?c5zNW-9;r-woaj;L&*)w3j;(WK8Gr7YYHOf*UeewZP$2#a?4UM57OrG=mxvfrxSegcEbxRkn!MU>7c&AD^S6h>^cYTrfw04n?NHG z2sg2UG=bgZ*?AP?rimbZoyR+;f_ALDX!8fT404*JR3OL&|6hCpCFACQEZtxwrD2Yo zAu1xEqlY{1J937Lyl9&C&XKdAiwfA>@n@7p1kk_jHodqLaJSW4SKN77FPv0waq1#;W_7vDga2!MrNg67Kk zpF|GR7FyqLY| z^M6psxCFe9a_*7;|GU9kY+fjVj{B*d^P&o*p!5EVB157y-v0OBVEmm%QME$-8ukFq@ZhT(y4#}rCfpx2%8x2y&w(}SOx0dSG*7#DlknSY;)9zyBs z%dmb%=lvHCbbkHsJpK}N4ko;R?9pqxT3LeO#StseIwawjpkugRl(R|>A*0Ozj&#VK8Yf=&BD)8=PLQ>9-s@dy z6F}>0KyUwG^S1s5cJA<_>h?OOC!w)<*esKJe;hdEo(F0t2cQJe!Y# zmQ7v&kMDYRvwb_FPGtS! zz3@T`GzTUEO10ggp!2LCBkQHSpvCYAKc?&i`4Opo0KW6>8~6rQ(CS0*kRHd2-rt-I zpyef&H%d}pOppMrfCp?i?9}yvN4M*Z*Rv;hbVo?MzKC$YN3X56 zJZL?n?}Zl*W}q_2_rmLKFTQRAB{!t{W`?eM;%~hG z;x|_dFqBAw#$Dz2f`YwT;6)i|8TxT&&;l)n{h$$n7b&6t{-^Q3Kaj?s&wJvN6a&9t z1E@Ua7jys({IHsSl49^U?%)8LzVkTl-~pyPB|JKv!OIjpjyHgJCo?cG9B%+kUxDS1 zH-M(2p-j*sT5yB(cmrq;D@4=*vX}d~19;xw5MkK+yjQ1#$_ z?#CSppxg?mi6sj9n>P`BW6XP>P6dz7!!Df}0xq2uA|A&ZV3xf&unN?VEn#W) z7BK)_z##&vEN(Y~>xUQ49H9K~tN`k*T(<|+G@y-Yum%EXzzICQ1J6&Pjv%Uz zHkNsGvkHiS62As$^qs%KO1H$=qnp)57%cW;3Fs8|<|7>7yHZ|7gO+z311%bgeaQvN zu<-V1Llq-K$;H=4VeK7c`@m~hJi1v|2!j%^1gPAEm=5aqPF@Zw2X5_SWME|Q=;hT9 zmtg2T{$ed?BnWZ=gOUrVjSXr2Zvzi^<*0y58pw_&$Rss*i3eh?58Shm7e$*_Xmv-3FUiYL%~`IG~oi$*z)@V9hTC73a=eu?HKSJ*fVAZ21ovFzJU!t|MRz4urM$*{AA>B z)n;a3uwg8j57mfjng`TjR$xa$9oECj!0=+nqA&k_diR2k=kw?UpVH^idEBRS?+nm* z;OR8b*ywSXM7OhoN2kRL)ojqH?|-Q1i(`DCJtJTfJVC1k>jfA~IU6i=`CD9A7#KhY zDZjWJ2l8pL0>tB<&2^w1K9Z~q3=Mlher4cqNn~MQ=-vyuB*~+9E9fAv7x^ndW0B4Z zKHW<}j`Qg*(10`+`j|mOvd>@K+XkA&_zvnOO;-E$-}5^gXt2k#+fTr=H%!8_^8o1H zs4&QKd?!$ZG{4~h?WhoNH9YCl`8XuUX1r4ekS$$b!^#Z3S6SBKTtA#?Sw`TR{pSVdK&b zP7W@e-+ek?g4=UGoqItE#HZVKFTXZ}OJ^%6@pyKNznBIdkOHsh?f$~a;L;72aRqf~ zXM;!f#eKSq6+p&-nn932e~}0}POj691GMP7M8KolSpl>fvb%!g1$!i@oCe$O(b)=0 z79QP@bOK5a-4z@S6+sOAtq(xs>a!g{@eIj^`c5Erwt{DKtpNjnivuGA!)HhSd{+Yy z>FeOxy+;L9s5|ltx~L>L@(cQ?6nM1$FA;o^<^j5~pam=oDq2A*LA_jv?2iwB|9c*9 zQ2~j-WI-i6L{q$D@a%Nu zc#&Sq4`MKYtoLlL)nMRneGD2W0hJ&x%TUTknE8+cTpSocuKoXdF}%Ox*qEYH09x(z z612l3ZGtE4o_B8k*0kTC-uwR-684~AhYVn^arpn=wcA(3@!(4)$L5EOuAL`d+JQG0 zLD~Zz-TdE`^3vUHwUyokfx<*L`4{*nmVc+Nf z&~(SS`1Ajl#h}q6dC-0;)`z^H;@{%M!<+yAzYK)7V?DY>BLzU>Ae*f`nkzIIJUS~l z_*)wP{{R27^)$GN18)EL3%s;KjGy^*egpNbT$=?LUV`rjf@B47PY68T3U8Ygmk@FGm0y^`c$})PRG? zbVFpi!7?wK!9fmkU$3n-SpQbgVDAfGunsW$&R$4pgA6|U;=yXLX(z#@FgOZ9#`M}gs0YO&$TTa2Y0e8l^EBUI zSc6RMeE;I{;?MtIFL?RyBx?H}+Wrai=`CFV8XiHpk;?<68usXRQt*IW4n5;_5w!ku zZGBQI<+B$W$F@H3EYx_|hiO{jVE*I)8$utU*^- z{hSDD{rq4lEeDlx4Hbd^`CHC{l7Hv@7r7yzU~pDA<`BpTYN4L}4jR|xZvpS?1C@x~ z6`-}c=XkXle5@__TXR9#1l&jWZT(+b^kOa-s9pr!&$VwOH|PSy10Xv7d=r zKUhjqJi2{nfHrk{G#_LHZ7n&N#-DS5U(iVar3fl@_Gmuh0q!Qjjsykgv;Qw%TmfC4 z3Qpq;$oanxG}v_;Jkkc)U-Ww2i#4lI!yne(0=KnZcF6;+BU>G+(UY1bO&j=Pj^*J-Tf#U(sfWcI-R=I@f>yWKb^^ zRKzp903WZ>3AXA)4%jMi?+R-EQ$$+u=)4YVbH4EV1`7U?5KticbiM;Ecjyk_c)@N1 zi6wBjYFU9wJ4l7I&l(~Ds$X1G5HW9^_#i-dDgezZVCdfs(hsioV}E#bJ8+!DzFrt^UpI<+(9sr%&M!*;vH1;$ zN4FfvcM*8Bz}y4sCw03kcy#_g<`BgALKUtBoImwI#e%g(sjCAxZ-TZ$>AhfNhs4WG zew^`QHw6|iNbBH_y?743@CDQqKsjpHPg-?q^8)@c8b)0Un91Y^Vre;BNt) z1`hICEleI#jX_S7%k``KInKOH)wxb>5CV$K^H7E!(~~MLDuw|7J9<+WYw(SNax`o$A9PV z7rJ0~^0$B%4kEc#4`hh7MX4h=Tm?Z5LmotomT0~B$^vosSzerJ!Dx~g186+dUBIO~ zLFUC~kUOnqzns@*D3SK)_EzvrzT(kcDB+=b4OE67gOuTpFkiCHW(Suohe4ZN!Mi#( z%|tox1AKn~r1pcBcrOw@f&)Dp;t}wskW`Q<)&iw2pna9Bpz|8_URZ+Ne(Z%H*zKSt zj^GpJj)Am+s|!%5gAM^Km?*~J(ai*H;glYWh7_ToZaGLg5OjigH|r-hutW9W4&?+n z6r+C*E&o1%ofrqQ3uKK)H|rsget1}e$EvknOl5|IZ!Qnc@Vztv629>Ca0*mBzLbWz zDh6a~ujwjxSTZP{0h(b!jK_yMhWPZVzVMV_fE6|1@e5EUlK?xCzXf#90nDM`gaCG2 z?u#ExAjg4DClNaf8JCp=55s~QigS#>!?1tPfF(+vgX(F+ldhdFz$v7z$qAtJ z{DY;`3MAQ375Klz0A#Hpc<(x-?eG$`R05PA5vi`U{e}JnNXw(-7^o@&$5rg%7oNud zQOD=NZ6t{Q{&_(C*Lfd2ENlB76#o1zpwTUef5Am@1qaxFkh2az>;GSf!2PHN@k*&A z{AiLLhG0JmLL?x5bnSd$coN}9(|)KQ^+5p$t|Jsce)RQ*mT#T+K~=_!weP_0X$756 z2c8u`@)*>8u=wR~P5=M@{|oD5|Np;U0`JeD<>y$ic_oD)TRpl((^x>wI|mLAYo=0H z*sfZg7v_wh2t4wFp9^Q|D(M3?JwW{l23Yz(0geyQeORDYPxB9!5)n{}gPe35- zOL?{74aD<^!dG-F6C%QVU=e2gq78HySLd-8aU7rs!&7AK?Sc8L8y;^5A@O$0rSrK@ z=erlXKvgKDAz7aUS~&ijrGy98tOHE}zWAa4|36y!1!})qg2J=&Dd@Zi@U;+*pqqd# z50%8cc>eGAf5%SHdGxU-Ad#Wy(JSlVEWt1Vd|VqSrYarbqLejLzB?k52Fk8O#n)XXp%QC#d5^ei-Op z4AA+Et`lAuy@rJTQY$8kFE~WdW^7P3a!ZM>4?0 zDy+xE06zzdo4*w_67A6q4rkDk(B9Am9-TK|+%g08A4!^I3B__{wGg7o1gaw} zOh7lPeFI2{p}YR1151p9!s<-Zn# zN3UsX9%yt3wApj^M9})*xt~E*0AjuelwLbQA&)h^n*V{N*R4k(Q3pz|GaW$b6&!_~ z_g`Gr21nl%hyrkWwK$F=y^6PCrq^Kbzzd?jg{D_ZXKP?6iYXSb&2vAyupCe%f8dY@t z4f65v7qTp%0^|qm3T$wj2h(m|qZ-Qvi2U!o^RRcOq1vH1{QV6;lxpoH& ze+y_?ut#_30oT?iB`zM_P6D2m$Lg#>moI4^N4^m52Y-hg$edmmdq(i0{?7X^_C5zY zz10=m`v#T2-JzgVi@ca0G|cJId_=>e^8!j*1eXUM-E5$%oj@n*wSaOi^oq0tp!*tH z!S|sxgB=MvKJ}aH4o3c#RiI&w?$RBg4FsMS|3QYTw}O%uXhTlU7SNDW?E%AYFFra7 zFnAt!(M?T5JsD%b)HFTLQY7lq6ZsFcj{>~>Y~>3k0^(6&4U*;P8l zqc`;h>^$4p!!K$X!LubVN;L%;AX1pOe7@8HZ$^NOzryPSxc^?;!2EaN3#$Jdz;=TD zXL<X7yqWg~-;y)9R1k8W>-!bEl8`Xb4wb=dl; zE66q+{?pXP7JuQMo!>!=zW#wmvaW(VC#Kf0m}G0P(33 zWSs%H3I@feuo^f%Z9vj6|Jr{;_}8cNCnUjkF@h=|NP-1zSBk2E`*;d+ie&=ZS=!@) zaRT#;=X=K((6W1M12g;KM?z6AAzE^1UhaZs)lewsUys4ofqG~K&(Fh7pK)GV5>ppC*0l>9?*^H z5$gZ{dn7x9yZYcIpocxWSyz7tSM1)Funy~?PEdaz+?NaU?7RkFDU^Kg#q@i;;9a(* zl0KcEI`6r3zK2#6u`l=h6=VRlcR}~ObRK!(`+%3h@T5!U`+cAl`=ITd-K?EoKmjZ8 zV&i?#Tw{ndqfh5Y@D7|~FU~#WWdNN?16~CPnzrJfdLWj6+X2w!ABghiC8#3?9Zv^^ zpW!9&vXz$){{R0E<%8>x3s64T51{*8`8%dEFferfesS$CFQ~cqV&7!YA(PENxJ&e# ze}t9@8D0W)tGJ^(FMviMLH>Ag`mi7act|MPF{bkZXq5`M9t2M^T6uJ{?*6RBV0g0g zKG=hxX^mU=K(koSL6vs=LtX~(Rj`m{jj{Yw4|QIE^w*$n?!5nE7U)*Fxi21n{|7pk z1LS^8_o_kN%SYI~(gfVgjqYA8gnRFUVheP2Emrq}!nE`Li&vmaG3LH7MsqLhJR^^8 z))k*X5e!=YFz>4tgHN{xsK}Vy23h~W#J~(%|M1ofvi{*NDDxi&?RZsE2DM`$!0l6p+Q$W1Z_x&^&lX|dCMAS@ZaD1&#|2`o+*Q!*!5@#_ z+B2XD2no+_0mtqFfll8up4}cCE}gz7d^%kZyh#81545N3#r)eKD_jq_bl08%wa+>a zgGTfjKMsEen;;})PIc)_;+|6kunUGIeAA5ZYQ9gvrUSF7W8}UE$Gr%(J&fh0&)MwATFB zizOfa{Xgysp11Cfodat>ciwm03EFz)+xesO=8J;+pkVsu)A_#h(2L37RvXd=^-@1< z^GDwfvy^JXEOqR>Vff9b6MU`vfpvQxLksp2k!5HBltULY`po6#ES&Y|NlV;wzk{{^1M zEa1cJ7RrNCYlQ%)M`)@Diuw01?%n{=;0qg#Hvj(*O0n(~;sOVUzIeZU?RE^5|>^QJ$cQ4p6}gPS&2??i#M$`7GdFU z1)akSO7gXu;Hjrl2}rhh0j-xn%fle;6Hw#mhah+!BCLy`b_9x^L(OYa{6X zb)Qb~1?(E#pTS2q@wY_&|NsBB4!B-%?gdpnpsmVhUbtI!lHB-Ngh@2zJPVwDWiF1JxwEQS&=$dVr(^^xd}5n>XlYIY z_^?}JaNiKLL(rq!nZu*gbpq(-^ktxn2MoV?^!oOIwxU2b%67b%yC3AW@1X7O{H-@Y zJ>}{;@Oc=W_g@$`3NnC8M z|GR5@UOdHcK3OZe9fI5FAV&MBRwl4*DT4%iA ziv|_jt}{SMZ_`!Kuxp-gM;d?LVb9K^KAj3_{7DBryZ3@JW*YxB2Z1#H{MZekeZLF% z1tSXh1p^X514f?5TS2)5?7B`@1<+)VzzY=>&sMb z>puUtyiro=({1|dEkx)ML@3Rt+f*JZbRHrU{LQsXpfn0x&!C;J3ch|5V=FMfJj08_ zHQ;!CsSGZwK<5*KR-iF}_n-62GkA8hftDJ9OfFds3eLyt|Nnoza6+eR$4dvW7D)RK zR5(>k0&S2v>e~9Pgu|ut`%BRIc8337I)F~>t?2?S9bx_YS_^Vur$=w;4AA{Mx}YMj zTi}HZKPc}Xe<30a-uI$A4}8Sgx;Nm)uYMeCRO@IRXtoA1p7j*5=Cb)s1j;C<;Q^24 zDgg%m)=owS@HV5)-=3XcKrQCxzl>$_t^ezFcY!urfpb;o{TH{6iy*C^_vp5J5pj0wByCMZy?1eo4!FO4|y~ni9o&QX@Y0BiwY#u|7I!`f;sFZA-q4A8LMsHd=xfjl2lyz#N}Jn#}|a&opwd zGC*b=L0d^X55L&(3sk;<)(C^9(m@MyA?wdUX#;$}FL<|9aOY=_#y6lP(-_I*KMQ}W zH)vhn@m3A!&O=wjCyt%>K`X_5I=6x@xN>ZM&djgr+Thc<6m*kN=UmVRJdfk8A)pgL zLB;TK@ZCiq9=|5|mM4Bq*9rWZt_%1zT{nPtL${QJ7UwnpXXbBd1tlI(f!x{vTJPDr z7i7$f^kd)(qa%lffdO>1r=&+Rc-tGelm*3kZwLe9i-$6t43Ooj+d&0r?^MtUMxbLb zdu`cn|NH;q;;Y~PyIVnmpi(=yZ-SXHM`<;~iV!E*EBIVEA^Jk-w!1w0j)9InHrE$k#7sR)7BA z4Gxb^a4>pwvzk5ALT)y7TfEpJg0}wr*bBi6puWbzZiuGij^MTOosI&XH=0jqbUKQF zZjov!VS=pj^kv`|^aQtXLIwB*0}EU_6D2%4dqL3#x@NW$bQ>~CI^}QG0xe8#JOYY& z)Jy@Y?>&0K7d^dra|9CfA3@0g8XY&FVz$iS=-_W@1GR;d!SM_(HQ-U=C(X(5(jPKd z2`LX>XiGzO?0^Ommw;E@F?c}2<>g{ffw()2lfkj`2q=m`Jx$1F(auBPFEu}6=5P7I z$iT3Ik-t?O9>_1Osz593Ki1v>BQcMgID9CPsL)9w=4y=#`zI zApto*1m3PI78Ydi=w$t}7To$nwCldVh!hrKcnLbo6%=pX;2Z-@dGeK@ln2@~3Jqb< z;!Q}q@%9LW38Z!cWSi)VsUQo$f!PgCR}lBS zsH*_&=-vyu+3F=|6>HiAi1dq8kb1EAi>Qjv|6hV!(hcEzfu&;p|Nr0mzeLFJ+l!xN zAjg9QUg&}4KxyHHGMEYS5~w(70i9V3j>i|Lz{)`qFaDQ*{{QmaU(hk}FE)dP!CGH{ zgtvp@zk4spGcT@B`~CmLr6!m)t^X@nUmPw6aX~HzbGLxGAnjo8QZN@}379*r9CRDw z_ZM>ZoDAK2K}FCD<$J&Xzj)UOG6dxGZiyF#U_BrcU!;|TS_QC>l$Zvp+#&fV)U)#! zXnT6NYv*~#FyGE&pmDCVpuHnkf+6?Wqa2uh!lRq@Sh25Ol!AJK3H4Tyel=>#pl^ys{YRMSDz+TLB<DuAasqNF5%mF%tjlXpYsO8jo4D9_K zpo=ejdQ%s8bkmQV?(c0`@HMU3x)&aqtu>S_Fcac~xB<^p_DS*e6icWDQBEyK%TP(Kd7 zUiHQAaL~5WBOcuhpuM0Gp4~Mn0v^fN9XtPeSYGFEoi_LLf6!zlXo3<{!}s$rGBB)U zU|?Y4Zv|~U^X*PiQE&uDlxyqTQU|adU@pkUm(RdWX;3??^Qh;+xBQOHPwQ7QFxWBh zw}KATgc=0uS9>-e5qQ0Af@^Q-f6wG&p4~P_96)Ok%|YD^BlxNdj#9N3FWaEauWuz2 zL3j6ot#oYu$5_$>YVC2nZUwjRZB!ha|1y?}L8QS>dI>r$0aAW~RXR5RWh&K$xE?(5 zmNo&@6}Z9t|JO@`b%FP!fHIi*9ue660-l{$d&5Edp&dKVc_bg|1Rs|M?)w(q{rw+udK##1 z1sxXV*!+jFWUEKFGY7;A(2Fn~oBuHJw}m!ztUAwo@Vj2{=r;YcT$|yAco#x-=PjRJ*9k72&p;yu zec%&dVi$l;8EQQVT3F%1pLdvF4162}_|$+3pWf6BAj3=CK`f8n&>m*S2RR z=;$-(&7QFvd^&4)9Crm>{KN3#;e+4*yIp(I`18R{Igqcx6TZEo;@~U8ZbD3WRRb~s ztOe8}eX;5hXmaK-TB&ywQtDM87QTSTXeRh{R|_~c|6%5D%>*4La|)JTK~uO2D?tso z`!8mQgO8?#9907v&|zQs|Nl$S0tHZd`45Ss7eOumpz-6;dA#`-W1TH1W}tD>{EMkn z1rke;^atty@wb34y_akON7BnM(0%tH_cZ@vF1hd6dFACbZ~<`tg?ck&z+wIM-~V55 z)qF-<-?1Amm!;s^9M+!%HTS`l4rncpBlrxo#y6mCo@go4qZiyP z2aRVkfWixOvt}>&>;-jHEKl=;4^{E$1z)e}(|OXT^HJwL z@JW{MU%Us`KH$^?O6B}5pgP#28+=fQNAoY1lDISv{=8El;($l*RM6J3EdJ5rzWELMh#dI*JLExwrQ1Q# z>H-;H0LSZf&*Y;%-6qFgyt?uGzX#;_El_NLvgLfxa8L7Jrt;mOZ7QHGfgCQK?|nKy zy_kFU-~Y~gKE0s+)nc<#CZ|w??&e#Pn zY6L-(cA~1_%g1g)g7HVv|Nk!z-^0x2rJyYf8K_wt+P(m7?cD$_4Z$Z(g8J?}E}gGI z^*s0t3&YzlK{qYFSW|)0q?iE8PmneRBJU6peyQ8w;RiZD@QY_BJYTH3{u{Ikqm>EN zRqnh8DHI%g>;5nfRIsrUgXzl?yd{g2FNaZt7nEG_4E_k6K01nfO;9E`~f+iDsZAB9Q z|9_Ex_cv(n0;T9I1)V#bfj;BI06LEjv_9;`?)#v4IR0WYJE(sHTEl`^+f!=e0Un!s z2)az?eKcrRJO(t&3Yr-g<_0y289<3a0(1v+=W%c)@)?r0*MqjwDwKZ)&##8U$}jMl zB9L13NCR@&b;IxgwAO%~;S8z@K<7OFWME+Ebq7_bo}E`gH*mCr?k|USEjwc;fQ|%_ z&;~8iV16O+w(fZk8alnk6uxeT2LH;`)#1>!h3Ct^Z);Uaqc#_>_9qp!^xxhO#`&xh&`M( z!Kb@S0Mt$ckJ&?78K43Q)XKQHSp;z*~oxc zzXo2v3Z8xhPdx^Bbb{7VmQG0V=!Q%(LC(^CaohLHfA9&r;N@eypkf}hND|bV?7bs`LJfjc-6@5YibYkPFT{nvVp)19XCC=P}QN@Aw^?pMlz~ z3{0hb9=*i^FWuqm**fpPSn>1oe~<6rYt8suG(l4?w-M!cFX+_V?=Qaef`;&2XF!k3 zEVcJ&t`J}>34nH+d^*2@yAm&CbReMsIuW>)4QvZ&IG+K0Z^%nfTNKuQs1RT*JqS7; z1JqyQ1NE0SzrHyEbjrr-w;sK=tarp2UdVmsV|e}K#r0xPca+uQ8hC(GRsuFa>7RkJ zItA2!f|qxoyaqa9AAE!l_}VOi=KqZK>fjokzeR+RfdMoU{gZ`%>Ve(>rrrWZ$KD!N zh8NizK_wrgJpei@)#lg>jb2cheh`#%_`!FxKw1!>+5^;V=WhkI|3MkC9^BqJ3{qHP z=hK8o|G#*C4pM}I>K)LrGl&u&zFy+RVX&H#2jGVPi>vBl z3@;S6g2MLriyPDa|9>$V$~islKj=WJCt098;K1P8`4x1>L8tGH7ll2bRFTaC^+7O*Nr2SrwVV<3c({mta+Ow#FPQU=o5*r=> zm31#bZMJUNjk7>QOt(ule0o(~#9-r4pfdwOotxJTpmLhE2c!tPPRg?ze6^dRGw8Co zlF%0%7eULWKw_S~ejK2^iM^r!UnoU`Zbdo#BI_(9@Iieyk8W2`Sp;zif9olb1DcO0 zV2KZq9lfq6Kqm-!bk?4Du|ySA=DMB$1#U?%s8P-I_1}LmPsOv7&7+(3(giIBpHA>e zJ>3E?QXom=buY9&_vmK*c^))RE%74q0_gNWu)@w;od;i7eg)6`yf}CU?9i5Q(AY4t zLrYaXdTkG@f@4Ji9xI!k{6oY_D(H;E1qIOh2h@HF3HIo%J>k*(#=xVq^aOI{13EKD zw2PnNMZq7?O>$sQK7i(P=)C}-yw2b9fB|%>1t^SqOCLZp{tImlaH52+&v_y90$f3W z&P@gd27k+J1_p)~WelKd9kN!1iwQJ^`TWJEwEzFXsSUc8>5w6)IIFz@THEri48(T5 z0g{3)6nNnT+9-r{xQ++PUB;;%%|{F%@dnC64B+C4zZG=38>mPDl`$p_*1G(y*8l(i z2j{7mo}lz?_|5SDi|w|cY01N{*MQcuN1&hAQ+-{W;l-49d%?wa@f{T>WV9-8js3drcP8E15^hxk#wzghi8F%nj<`=BHLBr;y z8^Ogc(gsfkkIr8pFTWHy^8Y`myac6O4MWh40<4^113>l`NO<)6A#YW75I`~mT%Lo2 z@Wnd=QN$)0KPx3H}(Oj%s{(v`~~Q41=dPXm>hR~04g~^3&9i_K#|UR z2^2=1_aJ6;3%uZh2nV0jV(>r`{`?hOz|xt~Fc>k;h%!vml}7~fFv zNDA0l;N$H$8tfTLUL=pBPJN+~0d{fZOwu2Er!|U_V z`m0;?=5&xYh!*&MT#)}gx>@&v@VaX)%DV9=CXr(gbQ*iIz^+hR@?Z zcoF{*RFWKj5e`~<+5Cr*zqP09^M8;b+8{$@A%-ZPff*tXF+^gzHpAu|jfcytavY>HE(5~weq zZ~*AIS?~#<-Jn@t_~GD?{SDy5!TFgO7(77TfoGtWf8Ad2VhH|zR#3aK*L8vixE^ z1fO>jRAzS@gG*b`!Nk|qL8SwK>vpg>=v-~k>8m@>N-?~!sRvc( z4xsf09W0=3F(|lOr-2W>c>dy@FKD6vk(ZsIdLEqLeYz_oUOobkI)TfD?x~=ikRacI za?HOMpnwnUKUT=lf zpPlz#9Qgh3|I2w`yBR!sZ7*LGXL#}E1s|xB&;dR_nO~j(;U2?pFY=+zc?s$}K=X0u z{TCG=b2uU9Ak>34M?zxrg*jLsxZ}MG6eys@R4t&HnU|mx@6l@;0kXRA1s}u92e9)^ z!2?V$WS5IDypYHQU5G5&z$?K3p5QS2|Kcm?ppkCYw9}wA!XuAf(>iWgqqZs*dH*vw zuYuR5LB_qB-*~umy3W9of4V^34A5=jS3En_T;Bpt4=u4EBf4Ew6hK2)9^I_hPeFI+ECVeZJH%cp2^z~1LF_T+ zZvl;bg31MtZq}Wrw7{2nUjkjT4Q^(8^xEb;`}e;yc7qS-PH&&i(j7jXsRv$sKlK~j zR4UB?-SVmc+EQCu2g)-MFLZu@mi2<_K{pOiw+x)`*Mrh2xPN8}Y76z&u6U6GI_9j~ zb%kfA8wWTRpy|S;+jWLZ=TDzb(DAbMpil-aq?>`Vf2_0^W2Gc$K_6(9#fumL(3J)u zpdbKkZ1Yk$<`l^2(Jcr%^ieBiC#epRv-~}|EkXQ$eZ`mAs!F3GOY%DbcwerhPJ9gfMLcIcytE{c=Q&)j)p8@@#rp)@M!&3QVTk2er*OQ>xZ83=nTC8N`oGtl_DOk z2P)K2x*ny4pi8!4#bGRR`@=g0bmo2YKkm|MP<7SX1j-BDqFeg38D8%OwO670ty%e7 zUxQ`<-b2bUP!HjZID@#Q0^4151V=F7kTu=_zbdDKyCkfcZZy31n zo(sN?;1#HC+IjrN_O0M*yv_+!Z@F}S0##kkk3hb5?EuAEiib92%!t1gbbCB#ffcm> z3z~!h=Npf1CyCcf(k3`|*TT|JXKlla-gHPB;{0}mgCD$(7<|3dy%$rSf{d^2@afE* z;n;cHvD;PPxa$H?uIzMO;?e6a0c`^Cx6T4ZIH(%r1O-xW=md{m)37_BR2;hjR6@dL zJ6>F516}O{+Umv+-nRkrNH-`PkGXLEdQtokaCFx;fJXzs*`z1! z^Z%C|2>BP)iO}@S-`dLnUh7g?>e0>mrdylgCFs;JXgTiDYs-8Jlzv?sUPwFyrCryC zmtNqs4RL3$?c(XX;u@EE-{6JKp?6>-l2%JFyjTVj2Q8-a=r#2^3l5UZqY?}+`h>py2ep&- zX))}CNQ+j3&g1DdeZmY*a4%xG!78>M1Pxu<#xa6K4PHF^0!jw5>-T}u=W<W{+;x zMSCHM=N7}a|DN33=>_v|(UU$n={(5cPvLYd(kNLLD6mnz7O-GVQ= zz)DS2AZpKaXfwR{{vYHYYmaWxqaEPGXm~&lVuZS{TXZ=@ln*5O`m-=-|I?p5m}>-} z<{E*`g*qV>Wb6WvvAw((;Y$C4vR1d?3wE$l6BW>I;%%Uk^SDPRs})E~E=Wr^$dk?M z|NVclZVzaR!5S8q{o6rNZEEsLoZ*GC04NoSZUe_4M1@c1HIH7=SKI#mf59pMie`wg zN3W<^4=C-JPGyo{c=3uKMQZmIuv8OB>O88H!%MJK9!P2ns+8#yu$0q(afTN&AyPh_ z?_ln{{^pyXZ7lx=(K@h2X zj1mkl#2`{Wo&Uhr`SkK0*#^p8r(XQwL-Fn0*f1K0SV zIKzu$P$_60Qa=HfssUNG8dWL=w1TnMbk-Gdh8GMRAiGQjcY``n4?)|IY(qiObDRy- z<9U&|N*I1R=j2-w3@;S8`5An=Z6!hJ7<9xk`-^!pfB$=Sv-@;DG`!@~ZMuD@7D&O4 zJ>bmB!zck7!1e58^E}QDHj#goFoWSGpU#JndE9pl5)3}QrjI~w`La@&0b)$&Kc8OJ zTc857*Y*N~1jCD)D?uq()M-5^gr0l!no59@+Tm3o4bOdgRXv^m|M%&&jmK9}s7FA;b>yEj)=m2AyiyYgz)b;X4~BZL+5R7iR#M8lr3kpd$1b zIC5Ux1k1{L{{_o}jrIYL;};bE|Nmk)8`xNnUQx#R|Nnz^c=Vd?{wvP#VgX#LEgvDp zyhnoJMJq(gr}Gg^hX}}xc^JZq|HK)5dR0vW{{Mdw0FgC3>Cr1%0vhe@HT?my#{x-Q z2Xv@Xujw_AxB`;6iU&9()`P@3AmU)3c=U=|vVx@wL3!gXE7&(sM~V9BgQem@QkPJr znsvcakJd>ryx0zv0^KR-(JPw443@eHl9~gN0=u~Z+-fil1$FjYAmSdqqHY((K_`54 zoD*kwF^>mqJy`W7&_0-6)7PM^6b4ZZ7Ow)`h}vuVeu)Ib3pU7W|gkICBdnFiN+=hrl%@%$01Dv%= zKw1t!q`+3RxPkr52FfQZAmT7BoDeB@kd|JE6jIr9+8&g8bx(r=B_ARS3;hot!Db%% zBhK(51XXIPKUk^?WTqvmlvfT|s_7?a{ts2k-U%$#3^I@zRqBWxSgPi?IKzt<%!r^^ z;{q1n07^F(ki?f%gT?zm;yaMU|3K6yfy5UeiKl>@Gp4~H@eYW%N3W=z)_-`cIfA5e z;Zn>_2q^=QR1jQBA_pP0a*sH}3v-ARI3j*mfgRQk@`yZ496TRvI_sA>!wYVR7%Yry zAo(R1B=vy_>~C0a=^!YW*1Ul<4nT`zJbF#Hfy8D&#h{IY)gZAJs2FIP&7;?J0Z6O> zDh6#>OaqCRnJwl|bwU9kUG@&T;_dh6IQhEFCQb9aGh7stJ;EWdfC0 zs(yN)A%AO-X{L^UK%KisFSH=KU?%B-gnLzwfJRUGVNxEwqRF66eXpqq$Wh-J!5)WM zB=H5D#yLPzcOX(A8$>6>f!!+$YSA4*67Tp7R{sW6u&qH7{}2yWe;yPSQ;@`O#DK*Q zfy8TI;*coX1rp0Z6?=XgTm)`f_3!@+Uzn6fujoe5(yCt5K9CkuMo@V0cKrsI(ICH{ z^XL`rfAjDE3n_>eScGeXu7~b5%>?QC&j9f^wAxho0QN^1Na_iy)Yq3_DJPKBNmQv> zpux>vQ(chMI*1fFw45N~-jgI4UQC0DgBR?uUbzE`s$(zek%T>ZO`XqxJzBZ%-~SgW z3?L7QYVU=62-H^6JNNJZ3r~cuZ=m+mlYjqTm?Fg9dGw05fy5LcVla<0Jp+58W4AcN z3pR)p*qy&1Ik^~=1KvTJb71ix&_&0+ruiW8YY=f*0=W(`Djp=Y8!812!yYDZ-1_a1 zV0Zy)Px|!AI{yOu0qhP)#aXTjYHy)xECvlI^_r@H%uGj>ssLTK*J~;cGN)Je)Y5|1U0r>E|y_E)Zq_b>j~%5N3Fh zGY>Q~Yx{PK7K3Le`-@o6{?cw$zfB-6i^_|=png=h?6pmxCf0wCPUaWgpZNkJ- z3z`>uQT++jgkn+g>^Ar4wT=D>N&>dO!CiOO<29g0JF`b8>(&}=h8GPlgc&@$O;kL3 zZ7o5rFL(hen~XhrZ4E)(#23P#Zblc#DWKc!5-)=K7$D`M5@2IhmA8We0DPvf$Rn^P zJbF!UE&uob#n%m>hC6HA22h9UKIkf=$)CUe_v!rS(RqI-Xzh+iuV^Aj;hDc*LC%Jy zguRd!{;qA}3@YW1#wnIKzufs5v0z9=)b&C&d|FgrbT?9|HxG>iV7k|G%&T zOF`_M2ilR_Yr6fLIKvAiByqMkVB-}*#&dz3)Cn>ioFYAXO=p5!|M?HdzsSPNzJM*M z+W7zfi>rS?euG#NxdWWUYrlvyyx5B*p12(>9t{#-iX@)74J>W~67T&32|j3UIS1Mi z&}+IG_igJT>};`2Z=945-(j17WW2; zcOr@Ft_6$RfW!;I;-Gq<^S(!~>6=gD3@>6)o%3!bSowaCloMDvBuc~};*&w*T3~Uw zG2b9brDgg5|1bEVra^m91}ng(-8d%B@Z!raSoDJmKhrOuuz2tb~^ZxyRG3gg1WTBQnP61nf`@J~B zi*k@uujqti@R&L*SzZJACI%$cc^{VF{z7!^{~*rr!Vx6ZE7}D*nym9aOqb(FafTOa z5Gj6C13TACFudRfyBzK*DUhqb|3rAyr`eyx6jQ z0hOrtJUUsq%e5I^@XZ00$fp0xz>*?w#Tj0l1{bvVJbHOA?gzP7G;219vONp(&c9ip z`iD2Y7gQME^XL_o1qYk$W{~7VkYqROrZU7O86pcnBS{GgFI=TSQ#T+}v%$k@qAJ@# zYs6VVLo^MaLDBd8#ll&jdh7WMNsu|cyi9OQen4Ch1G1!MmN3JM^yELFVYn5mpu=#W za=%x!@F1vhY4PIb_pkrK1JWM7wo5==q7}D51LenG9Jq}bSrz&W3JBJ-rP>THI-v3k zK=P1AvhDXzVELsW`3$Ih14v#Fv_!P?yGJK$BS_8%Dwl$gd+*W78Viy$fXaE?2HDT* z2oig<`zQDSG82$`NJHCpBE&99ko=#UAhpL|h=AllJ8(UEZL1;jA4{|uUfhAof4L>V z06y^7qu18vBiOAcLGpW`@>f9eQ1e|N`WJ%a=RoDRfaIZr!Fmw+N|1aFRDKFbo(nRF zEDDjA1j)xhFQ2j?If=7!#7Hc!Suz|{lfaIa>e*kqKNL~giZ-OL$5+c74B>(3I z)c+uPNaw_M6GXleB!34g|K+9tFA``8`niD@gLp9boy1Ao)2^`7KED zCm{MWLGm?F`6(cI&>)aUuWiCvaQHfcm^<+PF$=Rnk3z?8$nPXsFO1CsA{5Kslpf+1WC-wz31JAkw=7qa~MH)ujy#-r01v;owm zGh4u?vseO}fI!P79T-3hJKlXe$W$u#?I263rAN1IR3WGmFfDi|&R}@p#S<&gbQtLV zBTyO8dHqGOJ7`_pF^|@7rORJmfUg%fJn8uDD2GqyGshjEHX{F&gWyRDSHqKr|CO)#i7Rpk8W0m6`;&u$|xnt z;L&YicmR}yMWFr(_2{;Zfatme)&-LMZV7h}NdJN5Ah-PV==|i-Yx-Ie$&_=JXbaF8 zKMKyIEj&6)cc4tvdvreVusl*C>e2XyL4bk5qq#@r2R|q&SRN^T z4Z0%NquEDAg28b==mtZNUKbU9kLCv-K=ad{okx#32!PJb;BR3AU5N*EpX&0hQ4ZrIl=MEQBP?r~U_v|r7k6u&DH{uL0 zF0$}3_*#B1QS!BXRE2+ z$YTcNkV}X=J8!`4k!A$TL+(ZEybtEQT%Gm$1G7 zUES@`UCr@=V-sloN9+&q!f71$6FG+Z^y;3M)nafA@#%c$3AzdZbY{_C>)-#sIS455 zw+ew)*K{5R?bs=?0&PF!ZvmYT;Mx2~gumq)d?oA}5Ub%24}Z%gP)XIzs=NR+DR1#w zG!2|zKvzOldvvpYSqK*P>3julHN9|o2pTqf=h=A#bk;p+2=6#((JtsxTX0G4aoho1 zgulqP{{8=f`BCZPMicg~0KLA!oI{LHx!K4?EOh<|e)gzo@aYuRlZl?jd@V_`{9JK&BHN(3R+ zv%}B)3;{JcAd%J0s+*||+CJUV%D}+T{F{lteG4emdQDwrKm&@;U({NGc5EJRy}ne>0U@dv@1xyy!4vVdy*vItH)vzau!34Zpn*{th`@3X$D7Q(19@w`$28j7k7ky z|8F_K-xB}-|Nocu(eQi%IvpUv3bfk!=*y!2|6%7Qbl!jARgHWe8K`V^4D;zVEtb|| z09B%nomYH1KY+W~Z>xCf5N&$9#t$FXmR*-KeHT5p#| zIyRhXbo_Rtp~T*!J6OP@w^#zYQ4h4vuvh}rtPAz*yx{_xlK%eUKj^ly<|6{I1Iiua zKotWx--8Bx4+QZuyxtB;rykwR9-W6EM=VR1%=mVMqja)k^BKn16QT0Gw#`dG^;YNw zkIvE?FQ)7UiLz-?18eyY$JIVIM?6T_|{c+zDCV*!d3>t+R|YmaV=*W#dl1899?EBIW}Zq^P+2KMRv1xa$9 zz9(K>xdTda|G+0mgOc2LTuJV?8ECUysDv+bDuYKi=s;ct(9r@O{I0h=Iz2c%IwPQG zgMI*)Gmwim5ba6O%6`ycQ%`O%gED%nJlL(SCw#gU96?(LS{8$I^B>Sg$r2}s>I#k* zTcOH1pvpbEJvhD{WGqSW>~`hwxcKw6B5WOCcQwaLCB*tcuzcr1AI*n8mJj%wK*tVv z^@=EZSYF_723-#Qg8K`29jZq+>&oena_kA}`o;6$^2DR_AjqiKJE8V~wiXtcf%5y2 zm!N_WcAtz#H*4oCh&gjW=UaGmvs%u8@If~hgUXwgGa>w%fAC`Bg=#r?KB8?lxaU#N z2kkSwn5zp)$EJ%ksn5b-dG_!+o(t}aS(i>MF5`zf2Bv4ay}DW`AiH~v;o zu?9LPfa9nDgNHS%V+!a>Q)AGE6>C-o-5eIWX_jh<$voe7>DiE2s$sj$T)6G1r zS#N+jTo9SVU`{QBvkuHDfN*AlImr-C3z!oI;pBrkH$ic1%^C&foPls$!5q-aVGnCo z12AV3L`E9S5rr7Q2Ig=;I3JThZtI39y94Ibfewl3`~*5kR36g)^#t9w0WH_q`CH%q z`~Tn7@U7u(-`+HVm!K82(D?Q^_=3OrLA|HtQT|@gJ|myb2VUJaFJ7EE3=TV1u*KkO zMXXsrfbCL(SbQ7IQH5}hfjJTo&PFhY8^W0b=77$p^sr`a2XjFCz&)&4i@=;OpnA}n zH5SZy4&iu!IiUUh9@ebJN!ko0-X7MhN+5=lhc&Aph+*kr&B_2`7&2zVo_ zHR~-fXAZ=uqlwxKCA=QitXn{$tvCMt|Gxv&&Y0lAco=kaX!B7<(A_+(U;q98?`xeW zP+RWV?WXYZCnT%5Ffi-@^)sP49(g=x2WUL>^)q<;Vh3pa^Yt|ZA2dDidM1Jos%2ky zBKV+k9&!gVxV;2x?~8l%x=1r3EQII3PEh9_RK3T(bcp`?e+Os`^JOyV3@EVvP!CJd zh(v7$&(0qnohLj%1F=u}TR@v{JS;`cL7r~`r$0+kB`^nkwymWoFPQTm6jzp_KN3K} zs02!7mZFcroUfo@v=luD=4e1pMyB9D?l>cf*!p^93Gb6 z`I{z#t}*ZC5%B0V@aR0{!GFr5`KJNo9+}P)2VSr=KVWZu!3;V(q78In6X?2U@X~9K z9iX@Y^`gOzM@ath02|B%HW+ksyd(d15dn`*!`QTghd4a=_h0hpbrE7j+%Eu84{-<= z$YG#ON1$rkz_S~y(ZljkiIPX>1&@O-Y>-@H0tyn)cDpig*$&=3dnoqh-FwWCa|a>j zGJ@T)3AF8xe;e4iSgiI#)OCR_B;wzPtZo9t9Eg9iz~(^x12G3h-V0eC?0 z*O1MV0^7GAi+wC$cY~S&j*w7*IU8ypB)mX74-pp-d3M`?0@{QBya(eC{tnO%7kJ+u zv>yr-;Sh5dflgk5n#+Hx6Xr&6et@_SqOJ!P%<)Ku8iZsH#GOVU zbD*w+3_I|*B>w;ZKlbIi@UNh)w%~IpLFPi#gHDD)@(oN2=!)^zr(xwUIGsV%gL_i2 zbmIWi$@qi66Lh3a?8}Vsukicbz$xhfbF4@6gFhb4CzxR4*2w+_ZIJ=(tz-d*C+Of^ zaDx2IA9WzjgTL+osIky80lXpqkjKGSHqDRNn_n?E|6(j#0^S_*_|O0UFAKmYP%$9P zEz$$UC1}jbqtlT8R2qNYDGy|`55mkYUGdTwbdu=7*P!_))~3neHbBo!SY1C;6?}*# zB)@^muNg6*v&}w$wm^k=cK-3{JRa=Pd78fkw2#xnQnWAzR0KqWN(xKS7%-;|!f^+4 zRzf&NU=Fx`wG@>FbIyZ`4NFlDFy|6P+2?4GX|bT}XDNCQ%xM5|tVK_PIkO?0Envmd?6e&Fed}TQ3P>XSA#g+oF2V} zpwqG-rPzyoM_Cv=x`iPj$$!GLlSKs7Q30K()yWJUk&HQIUn=;$!5}Mu->N()%o&z0TV5x{( zCxZvr3lR5QU}9i+aa$d%I?WO8cBYs1;4%)>K|xW!0Hl7kItxSE!2=v1ZzJh}IS$!; zP6) zNlozj`Gqz}J{v9%N&k>2`T!~~z~Oxj6yX>Dd+?w4?6g6TBBbzyxC^w|@Wo*@76$$k z9^Jx7E`xaz%^w|bdqC&!yx1wv!tnYSyxaiA6U5vExH{1I%!`R2b#vhApykmA{w7d9 z0)-oY3m?SYFWs>EPXK0Ks{-h_#6&G{OnP)4e+k;H3GEld%B>IlO`!8IK<1XNd9f6d zxBZ?oAX}I}@kbr_?8q<3!U9R~EHAl0n=2>0 zm<`f@7-S||xE7_n=s(25kjDT1bqbn(L3~+IhZwYf@)@`w+t~*$$PQnD6=W9_Ktok>zrbT4pp8-a zTw0)wQJvR(I)8z##rg{Fk3z;2L3gfsbhE~EfjdhtOwNJ(ryiY$LE~YdemjmKk!X$I z|6M>A9=(E`paU5IdLaVZ!_bU4TO8Uih4=5l<9+uzq2qm^E;`2x0S!>+tAGP+DQi&= zXmhiHKOHtc0v;ps2e~H{v|p_AGw86mdUf#0FCLxu zJv)!QC)3Jkv%L8;wq2>9~N00+kz^&`U zFFro`k96M)XiRH92V_hOG@1o+?|C(3_a0OO?czpquL5@W-uw#+)^FhbKZjp*tC8Sd zE`08F#BlF>c2xJuqqtWP-Ms}}Si@Hn#l5#xNpPt|l~};smetdc7A? zULI#v3q~Gq&H4KaJl?7T8gEqxO<45We!n2j@Zz#HXwDTf{|i3w4t#O1Bj^Y(P|yf8 z|6t~C2i3-N+LbG!vww^Vl1ih zxcJNPq+|16<`QAg?m7w3(Qhw|6hH-E=#9>UkR!N2>uRAsiG3Lgt}leW50S?2)hk8w)uz=-Z!<;Wflz;#44iNZuNTHO!`IJIu0OCX+k8aztK=2s<&U4^N zm>*K0sDQK=VD?QxGw+BJ%)Ao*=12F@%u|Dy7jzzM-U=+{xj@W&QKR(xzu`%U%SyPL zAKeG1p3VS)&J&=qYe;$kwTweOJHLALn)0xKigeHv1E@lIVXFk1r~(&+L7){a2TIgH z^=IpW5;^b{uHDWYp#6&7&H|uP8XUbKV;vYgkGq081q_AM5|y2A=~n%Hzu>TEuu0KOI$+{Fg>lOi~L zx)nT*Lk71!j=O?d5eyEXv!cP*)thzO)I3mtJ>(>KTu2agWXm%@5=~nt!mC?)K<*7if5|WC?OyKkas{Fn}gO8Tng5<8LdN_**|PFfgoO;RoLiw1R`b71X|3p-@`0qM_h05` zfV$tayO!gn7ouGc+kLwRvqYuR9*%q4;l~i=rt9B%F96Izkmxc2L_nCUYv#m;Gatn`_I7S zL8F2my{4>C{dX?$Gk|yeL;dN|&6?N%j-Hn>(DCoeW(eO0#NP!P5A^6YZGxIV2c$m* zY&f*P!^+tRQ7;2h@6pX#*#zP9fcUWT#e@Np{vg+SrpbY_HMmt24X%yBH>wr<0Yy>? zAL!5+4v)rPpz-c9K1dq|mcPLJ3qZ?aUnqgEE(F~?gFJo-v+u}%O$N|XpFgr7n~uK_ z`SbsOESB|DF!fU)>K#KI_kcz)gI^qmXat>BcjGtMT~;2=)(j;k9^hNN4teytI52t~ ze8u9?D-z_V=0l0SyE5D)hOQE2975;##Kj{1t zGk-g%lj6~N-J{o(@xLa+3mb$p0>RGUZvh<@<L4(zX-(IYb6=8V6bqm~E;RdC$UQ?E@pdI(1i`SJze*b?_3zoFa^8(j* zlAx^_Tq4NlEy3b@$zO2#fb?BnT$2Vb6KE*SgSKLy{sc$4545te_vrTK@aPrc@Mt|* zqUF(f(L?iK^FziG!EXW{%?B7gEH9LZK+4~50^b5aM}#wZSY9ao1nD-!9)9ukCdkpY z*F3@Q+IB*m;YE=!sQ+Pm8Y0wv0$i2G3ges)^652w|3{MnRDyr?>HG#N#5;e#kdX#8 z{y=v|g1Q)d(!c+M79%q7w}5T{1mC*$(6bw~dnXihchhSg&|$ru7eM34oj<{&>E}Ew z4;8)iV0Ps2u)I*5;P}l&MWCTH7u4=~@B1cS;x7(M& zxAj1Y3@9CRg8L!gLH!Ux1r|O~7sSW%VCi#6_JwpoKPB&Zoa3%-#VJ_dNhr_&7_J}pPV;iD}84xbi?pbJD$3?i5g5p+K) z&hUa+;P?L*ao7I;fAJE0F(Gt55i+&`nr#K$=nNX3g%`)IC+h-zyEQsbLkd#R0wPcF zvK9WmXP}d9x+?@6!9}MAsDX6xzpv##{-$*xc6S80%fjDs5p=E^=+Z9meB#C5uQ@$B zFS{CorYs>DjlVSmw4R{z`HSMOpupk>m*}8dLp)ml^S20sO>G$@jy7cc_u`lwX!RI) z_71_p*wJJ0S24p+nfpgtIXt3G%L<+G3G@0Xy1Rzdem zya!+LDaSHu4=`M}K?aDVGRSp5?*nEK-{4c?e*b?l19ZejH!EiixFf~%9##V=fFxgE29>m|Z>qtP zzHmuqK5#mTffy!p7@T#)jrVANBjMQm zkGZ_mv-1n2rVjtE$?#&5C}<$TM#Z!9=nFSleg^0XyQR9Ig9e+ANtEbBH`QX zqQc?Q`Oz^3bR&DLV_YoaJ`CvTVx^ZodTk#yfZF7)H(q?74qBY!dc*MB>)l8l$^~H} z82zU+-!vIOl^Xa0V~!VpMW7X%9<*ZP`3y>CC6>^NO$WIbh15gx=(aU-1_%46gW!-l z!t?w83wdzZ+6q8qK7da4Si^%-VIjunU}qY7G{3PxS!rx|z~S35_EHYd&TpW_<#Ha~ ztoBvl$a?S=7XD!%Q=#dW&9n0lD41cZnb=FudUT%tb`ZRT>SQTM|Nly`{u6NhVo3T0 zJvuKoKa}@q{>ff?88j*00zQWtvOeJ3F$MmXr=X?}^yoj!L;T>w=OB%ucOaRI|2;Zu zH+b}h9`NV|9dP*kMLTHVwAXb5sMXWyy5e;x(s%>u;lRwE;ez??B5nDmlLVhnxcM z*?g4Iv-9|ibg&5MDuWj`iv>W-a#nbBmmcu#d;nVR~<6I zv^-j~!K1r&1E{+ST0iR!o;yT2ysR|CqxpyhqRj)%lD-OATN zX%BY9AIeQ(H^4{1mE?O|{O{2ldIG#Uth4q4XdRvfc&hIH3xh?Vu&6!Y(Or516c(L_ zJbHaEyx0jk8>hSW0?g|wFt3A-_J*9>R;mQQwF}h!cVS?7@!9I@|JS!Byr>oe`{#An zi$YQ4`>vtm4Rb!DIH$-%bBY%3oWkG$&MB++i8H*I!}Ybk%7JE)q=iue z6dvE;@(($KTy`eim%?p$SaKiAwi?qN0|GTz6;qR{n6*#b~Lb_$+?6ett zx>I+6LRo14=l`yT|9yH(L6xj;>yr{KaC^FR2dG@|>HO%?dCRl;IOB_x;11_|&@fBf z%Fq9OE&r6>1oh@pJhUO+=Wm?|nkQ>MqJdaQ3TY@fFnD&?GQ3zm540ogFr?4u1#W}X zazIK%(DiDdEZkXp0CbO6iM(fbEwl#-YOHvGdXRr!`XkMUvCg!Gc*0ZjkB8-9{uWRh z!oym&$`&+H4O;r=VJ({q=IjUg-dZ*Q%-ICtSc5rBAsjU@2ec^A!&+9*R-2(D-@{s# z0mMl2u$Fyqqs>qf>tQW>55x%Zu$DawV%U3F%kBX&%si}RSA!V39@et6KnxWRYuQc^ zL*2t#wgSYE^RSjp2QfH3tYyP&v>8g1JP*EMepv}_q%e3Me8coI7t99d?-$a1pu}+e zC1_d@bg$dRH!uCb(vbA?;x{iS@f-oow^@R!4S3|THri-282*3x5Hu^d^z{G#FD?im zo#zirKaSw*u$tdwcyxkKhepnnprlis1Id)epeTi0%;(V?x&U;s-wS@wh{0|Ce(*@; zan}`~2Axm0Du)dyLUI>?t}-#a?a}Gl;nC{~I%~4QxAkqQ=}XX34Oss4?sYL^^yn^a z057Ko=f+M~@HJ>J6hp-rd@Nt{w}5Zr?)L5Q=q?4{Y|>pj1GJ&$g~P4?|2;d8dw_R} z{r~^p-pBGo@j6hI7-stQ|Lc{Y@c?joGoK>>8gy*_&B)(!1tq!71^EhG0j~fpFK<~3 zZg}THi<5pxaq`j_+`0tE2Ud%g9jAlM_+;#lzMct&a{FAx2NV` zPs=0xEv^6l|M#(0t+E28{|X2v70dype;;er05AuX{(Y=ft-%~n`uDL`RReQC>EFj% zRnQ8Q{(Y=f89qH>u~tn7FBsZnTjrOOK@~hS{dsh=c36TF{tHmTzr%}Cd?MP9(ECKd$g%Vk8al6`QV03&0|DL`J12DznHlbRPes_=}kT0(Rui_8>C%| zXy>^>+IgVH-HYCTppMn?7pXHrO_|aQ9^JJkd^#V3nsi3j!KWvHisj>rKmYga2Dk3E z!&-N{P^&c)Pz{ATb^;D>&+a;bmzjw4{$e&KB>X|AxW4G)K?zOd`&mF;TaV7`ps8Na zc0S}{ z1~+JO1X4c3>+29uZ?4z0=cOhCsES5u{D2&^nH_X0GGyuow7my(|2b$oMmH;G4rshP z^npj`eaPYk4{HI*lZM|Qn^InQ9RUZ^1CQ>~8?J^2KvVYjU$njl3xcMTpec%K8* z@OEGT?FR#oe*1JjGCc5NFEhl@<{$t0TfoY@!KQ+$fk%elJT!lKFdlzl{_oTO*K;8G zs+)CZ7AU9IZh!EIuCjByIldD-QEf= zM?u>MK=a9<)YEnZG$fYqx*?4}-}eB&ATz(9x4=u#f<;fuKOUgt5;`~`B; zPmr66IY0kLS=Ym=m<8HxqyXD(gc25|HK1^SoLT~LceLR*$fT0jq5nwxHBoiBfpmFv zLdITVU*10qFK1sU^MXqfkPlyi7Op_s#ULvfkAqx!=mo>yPyb)af*PUII6&ti+x8oS zJ0h){z+HC1zrX%_blYY@1cmQQFc=QUO32rlC*6fh;1SRniF<_ zk0-z;mL0wwV=R&KxClCE=|w)M9PfneA_XlG2F-VNet#js3d-WgUf)43Z$dpg!PiEA z0d-%%=YxZK449pt7gq28|M%);(e|)(y-=jA4=pAUXe?I+34Kih<&W%Sm zD+@TWn1)bT}XlX9jRPX8(U?2GFjn-;5>U zzTKr9j-bGk^}P6xf7_+z-^`^!p549z-wraCD0*D{*?IZ(3efo3caKij6EChXgXTd( zPk447dwmhquJ1hG8G7QyUS<}C?${F^od;i5fZEg(__y77nGP=gA>~)+W$?5Kcz3hm zw->!GA`D2g+eq_GkowdUwB7>Tzw11WUJZcCkhA`v`PUyTB~qT9H^2v>zJe@8dQlt# zmQg7!1>HEHOru*OnDjXm+}u@aasw z@Pflekii3`hsz5sEWsVN!!M?@e*XWW=>Vu)uq`$K=Yin$;tVhNe}QvA21H0>JvdwZ z`uXesi=*Ik&sdM8gNho{{kLGL=kCv6$h)1P;n(Z_541!f+!3;*2hxk@0Ij%h?*ugz zy6ZT6K)cdEdv;!Zv1>78rxa+e&8IsVbVnRxiHGOKKaS1+nL+mvRSUeB23AvA=F#m9 zP7ju#Em3Ts_ORhe&?p?J&;wtXiDTTtcD=?cC$2Xt5Si!+ws zv;%6>Ln~T-P??Je*TXL&nLq!3;j#~$dQA1esYi4z==^~1prEqVf(X4@15Q1AzW@6F zqJ1w&F>6OEIB*+pz*5ir?Q!UciesU z?7RlrRaa8!dGU`2=zfXZg^%-eJ`Fe zgSulct3X4Bo#$UzfQz+*uekUp_Sjwy9K(LHTX%-~i zZN9I`@Z#OyU*I+lth@r{UTC^2ss@!+wOXLb`uCt4C?4GgCpJ8VR0Al@zzV5kb8tcf z4KhI!8d@RsiQ)7A7k77qQjYC8ZE!NHTqVx%BJ1m~|1V6z;;d%L;9%3g21`-CUr~aG zobpI(J|qd@E05T~YDg=Og5c$m#9wfFftN=de?iqCYI*d<7Mw0ZlfWK4y#kgla=w7m zg)KyUCR{w^3;E>{hbK7dv6n}`AvK&zX%Qq{%)YD1@Z#EU)N}#5%ov(3_?tlc)j??^ zQ3IYfj@<;O4Lk+Wl|7)|9#TQ%Yzj^v_zI#6|33YHv3n;tg{;v8r;zX!;tVf5KL7gv zLKrO0Dv}5eK;A2`6r%kZC52E}-u#^dNh}1)n`?6@C~q`D2?y3c1eG@x55egNUf!Je z1xY{1<;@n57?$#8jx{)4{f!3)OYt&Tx)S*WPFGJM;*N0fKOa$o3tHZEvwndnG+har za)T^Q4GH$>7Vzk1eHjDl-&wp^I2ClEf@&3*D_a~5wlQ}(NW*dPg$|v}FKVZP&NPKx z?hpf(Wc{J8&F~@_MJ5O$a}6Zpi6Y|yk=X*0(Vq&rN1@l$9wItT9dzI-D?iAw-2yN8 z;qsBZ#hr~f|Py1ua>U)a7{ zCJrj`K~o$rtbTt2t%fZTH~h8>d>~xs@fX|vd;;AG-oK8Wfnf&&10#c{RU#Nlr(MpaY3 zOq}7x{fVIC3E@ZJUjR)v_L>$|i!;1vSqBaZ=qZw-sh}FT*R;4qoZ-dI$~s104#sM4aKps|jFF z!xq|UfyAys#h{D-6hLB!pkkm6xgNcyA|SDKP%%ePE40^?10*&JDh4XHJbF#7K<;US zih;K%_nN*~3|fB#6@%I#1yUCW6@%FU67zzJLDg}C#LS>#P<6~8F(rr?IIP(q=f?g5 zxyNc5IC{Y1`!<2&=4?FZ{97dPGKlyEka{j8aXpCmA&~f|r3iDLZ3LUM1tfk8Nqine zdKUifwDHki)+!b@Wr zP@A#Wv;d;wo1!+uirebD90y{4`psmD+$ zXev4a+Aq~>ninI^@ZtojROVx_ft#m_GrU-fD)sLnSSo0iIKzucP$@`S5mkm<2lHg1 zIKzu_R4IvjU|p9%QZY~|s55vW2JRDAbBf;=u5k!0^ z)U?Tv;$9J?r5#mj2598I*OUh&m4hlZ_XgO&4-3Q@UIap4oSml-jDBK^FZe}dIW+RJ*I)DplxW-I`JpZA^i=o*I{FY9-Y5I z%a=SlLsxiomTq`4Kls~!kM3vz&?#S?u?JrC%l`u(?t48JGwyv%pYGBFKHa%H3~xinZ$ZcHJz(|eu3_TwZT(*&dhiB)P*OE|oc_bfhKFsLD z_`r#O8;e29fs!zr;L=x)y(|*G-8DxUKyJMQTAbw5`Ol@(^~?(v-hcmHx?RtJ?+rZ! zlG!B!8p`PW_oDM3==9jq6&~H7iQ@nNFM!m&o(D-E{M$fIc;ni69ONxW#_KND6)gNs z;Co+DS1&RN%oR#Juj3u5v z-OE8!)Xo1)>jONJk9B_X$UI=#_t@g#FL{rHKNK}DcqCuwWjUaE%(I*2N-q!SY!C*` zj~4G9TCc&aCrO<1^4nBc0z5{^C6NpRLpyv@R_9l25P6 zB#-3(->-S~x|DNte)K%}jK#Ct=7`7T=P!=Bi8FK_a_)99F>qmg!Fb{Iba*^m>h<~m z-J_RflE=XZES}viEEXP@UpRIib!>bJvgP#(@H`1<-X65~0i4~D?h^&&7Z1ztrTnk$ z!RkC1uX|YjD=~5aZ9w`2%7t$|y4h9bKQJ(O*h&>JFqGZ}?Ii*!JKg{~5D&Eb!Nc-j z={ds#@cZp8|CNC6u?MX^zY1F6^#wLP@R}d$ZXd?io|bn?%t1$+eFl{W?>xGhVb&aA zU?{x@8mxNp*G7b)4eID)6c?dF3bLlszJo4yf^5{GWTQ9ia+YyBl9_U#@jE7&(n&8px zB*1tWbjT;9JOza}xXb{}AA+VizyS^3>80WUzMkU6%~sG2>Y!UEUYu+F{6E_8fMX2E zlc3bf;L%*q!BBeDqno|?0cdX*dx@+^^AC;^b?`o~y)SgW@G*FF9)G&@1T1+j=!D+;luW`A&RiekRq&hgG+Zhi%0i_4WPb4cRdH_L^F@h+8v-7 zvlh@@p&s478@d}o2N!jB{s1XD_<+TySBI(fWQm*MNvQpv&>?$8@IqD4A)&4(I(?7) zzu?(j%Fyk5#KYQ6qJ+hx(@g@D{hJRmdNv;wugb{{Wx-x)GVgPA#Y(55dl8f~Qkp80cAVH7r2GH7SaIx`|fq}ub^QmWV=zovq zU-tZM^FebO%}4D$558sNZvmAmUcEM;ePp0J)WJ(?JUVL^z|xyXx92dQJDRpmD=5)Q}*tE z_T}I6*EjjUU$4p!h$SW}KAqn{mK+0F!lDARwizhqos#DP>W!Gc?M8@>EH*d zFGVk&f^L}sXZ~&rkIs89cpLwMma&3zJva2S-LAub{)3L8cKmjPy_D6r^+~BPXbQGC zOqc;OYX(aDAn$@iV-JI>?)xu7kz_IEuRK6!n71A%;RY?DTD?G&0qm~Mr!PQv$o zr!7D`zYo+tcp>oqJ1DDwXQx^Zl(57ePMZ+>QVTSX20y<6o_}HcwLz0RouGC_gip7- zfJ?WZ0P<3a6NU#|y2U)Y-8dY(3s`(X3;jD?J6gZ-w>UF0Fu1m!^yqax;L_>4!>98& z{}k8Nu7+=24WD>)x^8gk3|-^X>AJwDGj@hYXY7R6oZ#}=v%6lvweuNh_r2lI|Npy7 zcXY?D>Gt5TG$`S0s9nua%G~_;U*`#r?$8Y$-L`FN+6;;}ntw2Qbi2-QY`**7kvm>N z@w8vB$%oF^J)Yfipg8%-zy~_2ujLweQrPtXc-gt-Feuy}O4 zF7WIWbFoff;cqJW|Np;Bx9<**?$`;gt#9ijJiE&!KpDx+qdT<2rSl}{sv`eGVhk>f z*&?9i1Yb>98VI^C8MLvW^FL@i&=^p?1lmfl<{PN(>A(XqT55F`6pAkpy8#~lc3d(pzY5WK=qeLHv>Yx>;aft zp#Z8xA>}u?><$A}Y=0d?Kui0f_cE8bc|Zdo*QdK&z_as<597DjY!e#n6iRtLn%^;c z^oB8dT3#u7=cD-yG?ENDPddMsA5^tS_;kJi)hVFkIX!yIB|s}nTECU3_;!~HfR?;( z_2{*Ik_hUWmfmUT@9aj_LfS#-T(?Ou=_(m6%Qz~WDO5M%W02pf5_If?w#P}x|YXE-+(Im@0Xcp zyZ{yM-3=2!RPtqyZkr1)j#hwI;CZwjC^ZG|R`=+&ooXq;@SR{xETj-(tmyX_rDAOHr-xt(8%Ipk8ajv32g??gHP=}5B{}xYh)=H3&- z2!~dvxscZV^B3L_bGL{gg+n-sxt$PmFL{E(K>=)T9j3WXP;)`$0%#K8a|t*cLXge< zUyAHrLx{OmU~?V7=E`B3%M3LabkPRL+}RLwzlb8acR7l=H$VRU@58@OSJ4wR&d+*C z6qL{qiA>F>SM|_Dap?K5`(Ww88Dj1fWOMyd%x(M#NyDc+z~&}_%|%VXT0Xt12_UoK z_0c|QX#71c28V|Zvia{zki$dqBRKxDJwV|MNypzrFyc>kA|zda&g}<oXWGa^Xg zF&)L+lOO*6_ef?H^Uz}O>CIta^yp@t22ouKa_`*<;tYuP);>_y1(|CMF*gUIvILy( z>`}}u1euF;qz||q04~2EYumuh3h*iRtYVN<0J2YaZ9j^AkbM6B#o;1w_`E?5pYz3_ z@Oci(D5gEnGG&?q4E0uMK;9T9*8Q4 zKgtp2^1#h~1Uldh)X|&?Vsx_xL3Du4Rl+n^7-B9;e99xt-SYP@=l~WG{+3@L<3Q#b zf*9SbpCBO$HupgvJRL&v`TG~U3&G)l5}(J5;NcJhH+K@qIFPv~nHU&6x>+Y7nY#dC zE+n77e~}C^7bQOP5$3YM&CP{{96w#9SVTDoFT>Bg|d%2Nn)Y zFmr!`7bCJ>5(cMOa5%^z%!TCh_b)aVfWu)8L>0u`{e|#w2!Wd$1#%`R9411{ErRF( zn|rGl9=?!#{{BTY#9SYUDu}u12y_4ZhPn3>$T*O>njl6us}Mv7*xVX~xsd$*{sl9{ z+&4mCUqQ^}N0_?=Ztf|NaUgRKf-1>w)=dx{U~?T1=0fuK`xmS8!Qs#YQ3Ww~djUKg zeBkCLLCh^l_2^~|gQy1Qx4%6o`3;i4-@gckn5zR(2{AVwVeXe-;Ba8!Z(Rj)CUQp{ z+|O-DX8iklYTAT`WX69l&Aok6 z|NW&t3jg=Z<9|SHPMG??FXK`8|6YFojga@~JidaFzhx_EPSoHcGef5{3utfvIuemK zp@Ey}r985JZpN3}k@PokH@xIWb}zTX%jL-K@n&RtISZ@+;$Lq@#+PPDd~S}H`6%YI zyktk=E4=)V!WVcs9f|)U`T{cp@_Bd7|5!?_Ky5)?kLG_OCGp_RmX;pfY|Y^D1&&f( zk8V~oCs4DB{bk*+|Il`}$8pd>CJdmKmLx>-Ft}U<_5UPnK>a_{%B@J_rCTmR#!EfA zSv4i37(6=JA?jiMDaiWn+6SN}HF5_Ew3Hfr&O^8B1CLJDwT_^=(G|1~8nQR3loLLZ z`{KaePya(bnr+SbwHZK%d4N}M^0z|E11WxR&H?2E)!WVzu=*J^eF3VE7UzKT!52QT zDo}c5{QzQjv)%+ztp`d~eR@^bheqHO*)py(x zrVn&J3P_(ZL|+a>5m;XYh~3TV38J9--g$y*V;2U7eK38$v%&6EfhYp&69BQhSs6hT zRNtyUFnut09){?TAT%*A3A(1)>OSUjvBU%~}Yep!&`#!Tbjr z4+Qxy7^2Syq6ntiS)dW#cebe5<+zHbs4bjH}Q3Tfafd{;b;US2E>YLI5(+3Ne z$64TT*#l7o*0+L3o1ytP2Y)-uuTTFydPN`DOEGvPv&`~fykPhL0i+)i?a|FTfk&GG zGQ{S<0OA**@n4|v51{cEpz#~f_z7ry2Qrp*ApL#UE0iFG%0P53$me7hrj8i`O zvMW>+seR_rS^MLKJJ`V5A0WlAuf6#33{n0e+y|cPknrfPhnuMkF;n00l1Hy;@w@;3 zU)%$o6bV}Z4$e0oowYAsJUJ?qFU6aAXGFYH={p(F0-BqCNk?f_5L1XXp zP{-a&QeXGL`|C`g8}}ft;co+-dIK7Y?hb%DkiRV&v>LOU2|St+AkqAbsobvh5`U`) zShzyq^-O4d+GcmTXFC5efF0W`V- zKFY|0iGjhldl_hW8oVzBbRNHBcN=Jw7S#Fyop<5U>$(HBjjYpk0ciZA+joUycN=JU z*^#*oG&;<9!jZWRG>8qJK4ClpnxNzW-KNn3Iy%^=+t}6cKX^~r%ZUsO3=o<*gTu3X8^}U!4$!eu9?2&?dU?)ySe`H8eDPfjzv;sI{nfe)raoG)G>0rKf3RMkePs$bSl5recBJiGTnrVRe`w{U~D z;24Yj{r?hlq~8n9tKh*)Nc$68e&F!w&KK})eaqi+5472}^N(luUeMIr3;7v;{(E-s z1zn5d+1Uyf;(-W(stC`{R*=k#pVL9AY6Cnw!6)Ip0JR4_yK6l>J6!`_+<{0scy_va zyf_c$>;+9ycy_uvfc(evVi!oTvlT4Zy%#(<*!sVO=fxt3I7q;=doSqBJ&5`)h&V{V zvwJQiMcgilaO|E6+I!i0sl?aS@Y`!XXgLN|;?wy7l>a;!4|{Z5gQvuJL8fuMu$c}T z@Mi|y>jl1oPY29*=5V#%3No%}Kj^Gm0gqnO&-Xzk)O2u4Qhy5C&FLy2P!jC<9dw!_ z3quKqXLF5;1VgE#XLqQDOLrBEi?vm)34EU2quWcuBl)mTugO8s7SHDYDkVHG_D=(a zT&RU-CtLGjM#o+jc}u4HtG?Y^LCM;;^;?OVV>estff9XJ!?#fXxOBeuIQW>=hw-yV zcQp^l51cP5rh)w6%;VU6l+o2%ujn?Y#{fD<05a$c8um5~W`v{@kQ7pCgVjfn`-MWm z%iBSl0XRIm>p48WAO8)?)~)W~qA*neTn?^hWMBZ5FQ$z5LFy3kfL8;{_j-wO%Tz^=Li}Iw0t^8K^u4ZD;l9W>^UtxGoI=Et{To z<`2^TH&A)&(R^6I)p`%ufMPq3?&=>t-NvAx<%gUx5CJ;vJ^9QZP&r+4&htAP0|x^` z=~2(-Iu3@?c`qvE#TYy~nL)?MIWT~aQ4%Qe2alD5N(Xk&=2{7cQaj)75)}*A?m8A% zYr9$lc)IZH4g;kNk8Ybo;AF`KvX}M6*VBLgLz9G~C0qSX-|j6cutcE=Nfb&TGZ-N2 zH$1y**uaT_^~G+ePHVZM$DnqycQ&Xjj+FpUly=@<$-uzGP@1?BRC1Lnf!Ynus7d1G zuYNJ)_F8wf$BXi*p!SqCJPJUoH$XWCDo`qfY6N(m1J>gPmufFfPl8s=fX+eDKKbYW z%k`kM#v%2~cXrVFUH;Yu|Nj4fISsND8>H^@DNsT}M02YoNWoliPZcD8`P85PFYm+6 zd2#u~pa0;UXqe;q9^LGood+BnA22YmG4QuaGJ?jN>Om(~^S6Ks&2E2|?&;u3h+ao~ z55`j-2VbyxFka}M4(cI$9DKy$)7x_hbf~*WcRMH&Koy8&w?X5-|Ns9p^Y?>R$Q*pe z+Uv&RF~gJbV7I%BN4LL4ZvZ3chKqxbm_cXs@pm(7JFBvoFdp#fZU@zbp!4lKTfddKx-i~! zVZ6wA4q7gBo&q`4vpYlpyc$8?quGj~MASp`5LDg+bf-bH4HHA@R}i!LAfx5S(o-(o z?Vw!a30m2~c)+Lgz+qKT!tm@oQ1Z#6+g$>*OQ-cf$uo~`2Mfm?Fuz~tmuKh>;PL2Y z@a=UG5CFABMk51PMFAh)o44!Q5 zJp5t>_(BEbPQ9B)^AQEe>KV|eFDN|~ujOZGJpkGdhpbQ*q!3b+#=Z?dUB!{(15i@|<_&ojIRoiiQsi=u|GUI zkDYvZV+km;;I6MNJi6lrJi47LJi2#-+E6at&7iP#=}u;WEcg0f!s`Os#Hr5*n$>hY z0pd6||1st7KMuNbp!o=g;ia7c3=9nWK&P?#CjW8ieBf&M%{TKucp1_UdC!CY6&*E? zdnW&Xp zh|{yv*rPl4geRyBxBOMQ#;5ayYwI`uKG2m_PQ51JwNM_Nu^S9e`gFeP1hsK}S2%W_ zcj#I^IKtKm17&L1wFNd~T+&pkV@I(FXagwEH3YFA#* zoBwf?c6IwM z@#%c!((QW0weych^Pzy|gB+H=2l!hp!RaG*gGaaP3XjfaP^@}%S695q<@x*H3AIcrKox6wQ}zakULmGt^jN1_q_4qefHn~;1iJ#{^s=TJm}l`$fZ~3 zl27M3SHs)jLs@*gSyWs)ZyBD1@BiyO?$dbyvh>aJM+sY}m`C$5mga-(&4(C4Y36}r z^I=ZU<|7=gmaj_>w%)GGJouQ|)$pz3ZU!a>2A9qkKAjg2K43%44|#M~I=J*Ym>FJz z<~#ny*Nb`FdR3S}2D@~o{Q;T$%c1mH^8p8s=7SuLmWNAEIW`~VaBMsbGSjp9P=KT5 z-O|ONI?t!`1h_F3dl=R~hlghfs2K&?u9Ni}G`3m$0#rOtT0{k#L*3vs5agct{92)NNpjjyEUBKf(=3s}w z$Aey60XY&3=GW= z{(2mDT>whwppCGtlbIP9d^@*;yCt3d;1(!o$*oTz=uqX-4IbUK2YkEJ1VE=Ndi(@6 zfWu&gJE%egtqnQ`YHjk&|MTCsGe;!=bb>j5%Tq>>sX3sd+xIwjx~N2eM*_Zs&K7r_ z^O--N8zdOx$S>%llHl3h4z}I$Sc#@bw}XI3cR_$>XSoM>1YI07q%H)qVbwh3_AI2m zy93ls@jzNYdAtE60xm_sol{YczyCdtw}Wnc01GzPo?zi`X$QBAYEQg)#?8s#+1U!La0ULNC*$vb@B)qf0-)Q;8u>u&2M&%nO}TJ|NGykTXiCX6a)0`2%pXb(DkPdpf)uF3j=@4sVATQdv?c3AdK|rbhdc0 zEge)0f?Ub~)e->LvJk8#Oaiph&7%`^<>wBMPOpkiryP%NR#kN^29M+5GonGd!NWui z9iWNV&L&VH`^}M&iNAF@Xh~hSn*cP#z$%+jdgbu)2$V)Z@}ME0yMICFNrBS_G^M<} z0iJ4cVPF7tr(3^+%suX+;sMgp?TU!;Rz7fx$c2F+jX$5YgHejXkzde7CE+CpOx*K0 zIP^h5_p%o(2+0pGUV95NfbQT}3GSM;xPlKr{rZE&w5|eEB(`h6||D03GfON}RlNAj#hY zyt?)Ki@&q~{C~*+4kUo*}M0?7}P$)z^ax zW_Wpc1AKfVB)nkdA-EXyXnX_eGI(_E1>K#EGNK9gLnrv4u@^I{KuzIR2GFoj4}|^W z-~azF4jcs~lvWLpcnL%td=XU!ge?FPp94{20b(Dx&dXp3n&>bW1XXFrJUUx5K;kpP zL36FP3*Kviro~(*lsfoy>vF4r1}bH*D1%mQn6|#xV({%l%bK+uXWw;#TiZ%QBeKn{)rEmiE5)iV)iaO}2!(fH*5f5+~Aa7V4P z6?9rx>q-6=&;=|$-D^Rok@$3P1^Mf>3HV%q|1TPX1VH2J{4M4zpo>-hzpxJi%{zYw zWs)lqpZ|L{A7OO0UJ5d>IKs2L6*L;?*KPB_xAlMNevfX}1Mjpz`b$CQiSL8e)3*b_ z_4E>m9B3ZsILMqAj|1UmS44dN4>h-Fg-16y5UIS_R2sMfbD&e9|+pZwHFkD;N@h;Ud%lU8lwc; z2)2!bzXeo?BW%)u*>w6X#B=ICy{f;BK(k%od<(blvp>Y25M>bi{)61mjclJT*uGv+ z=<{!L6j;Gg662BVr~1Kb{Mh&^W@N+9-_W7w05W{(51JvuOZ>LG@dg6w%_ z2nsU>_sG#LhOr2w(k)rnfIdF*K&Zr!$$}-`~fa8Uc||N1D}Wp zNu%8kES|kA$2~2N^EZPoX!7aY3p(k^r}H;x9;utRLl)E?jpp#_)^OtAW}^vilkElF zUhUJX^5X?#_UHc|y}YwPF6wM8_z$Wak9+KRx^BL1SX;h}=l7>Roi98zFL+#h;lT*H z2$K!GtE88u!J}8C2`blZbMVCsKTuZs4|2b5=;!~A{M*j;I)e6l_k9G_Ro$&1S9xk4 z>2>@EI=!qFGJnt7DW}EYdGHUjPv=t5B$Q|89goh_PW;7`Kf$BB6;$?mcJrusbQcIT{PO1SU&PPAV0fV6mtzSRV(Q0( zxeYXaeIaeq}lV}Q&wNbua4cNEWK`j zn}2ZexBJ}&hg*uG6lmTX8fcJu7<9=4)UOcVB?p5Jkz)Y$)nJ}%kq1Qz=s;b|xu8_U z-x>uP<9mDyX};ox^nOr>6SNgd#iQH812pOja;*dS(%L*B1_qzr8qmgm)>$tgc?PtO zjx!U!ZVEKQ0ou`~>RQXKJL-Y+6B=8T6dybbOY{hm^-y0=B7YYLCiHr zF*o!0-~T?H-yrb@jk6b90zdzM=?`vrg6jpJ?yaCq<;!fM;?Zk6KOMB}8nj7ZO%*R_ zZui9&S8!DXY7c-9S~>*k7}a0qWq=y!)A{a20?5qY;Km;V=nfB1W3;pn)RE}~H$F?7 z;LC#8`CGOLGB9{F|KQ+nnJNHgvGTXZff7vT_ZQ3dgLWYud+7&iJAucMK|N#e9IiAE z1H+4J-~RuHS_~>ho(FvX|FQ`*Ry+Zu?u9uhOduH%Bz*!ToeXi;i|j)134x&W>(gDp z;n{5m8j)9l_3vN&_7q?MwOK%G>^qOW=m`L|lR;`qpZIjXd$|W3WDX37gbK0|oLIN; zgHE9+v1fca9jpi(t`K_+UYP6wx5XsD&G`?_4;Vc85lZSK{qZr?gvFP$lt9;c|gTF>z1dG1g7BAt6Q!k&ajUeyngrn3uO;*dYuB1 zhol32PjI9`Ed2!vidax{uX!)XW(NKidx+H@-L|11Z3kZnICdW8-+lm+np^+#w|)hw z=+za}!AN(T-NE+BfHZ=}GeGO!_k-Nfy%)*8w?{xtN0@#5{0t192j2D8UD4XT5|;RtS@f%2s_#NH_oWe|V5dk8T2!0i3x z(RmECd87zrH6#)EbpCsB*zfcImvO&g>(6|I<^B7BuI?-|~W!f#F5+ z=l}mfgV>$NUQ~c24?bb_=(R0N1{D?QC0mwzuPxFE* z^j3NB_zk#0;?a2zw5;Jp&S7v#2x?S-Mh%idO$AU3=8E^{|DKljOKM!YtzEi{Ib2)+ z*QvNzf?IPX(w@o3VZ|pn1eSS&Tn&~4ogvBJx)yYG{kLOG{H?(d77Jt@q~o_^9Q>{G zL9-0sjtTI$x`J5WkAZGZ;|DjS92=j3Mp5}&yTMI4aAOEmH@JY@(_PB|Iqu*l zovbhJgB6rK29;%>oxzzC9PypUUbKMB(g79N^5F8wqnq_0M0qL1Jjl^Bw$&i>rbEnI z08s!jZ!xNQCLr@53z1>wRYH`bnkNY|&mCf31VjPEykJ!Go_K!#|FQ@iDlqd5A|>LBLd2ib|@ZeE1>9?1?dFw^TGx=KO) z+fGT8{w-+PH^}^Ai1{H9l@RmmG0a~JYBoXoIBERvFQxJ4%X+<$Wbo)MT>x$xedf=1 zNJ!&PyO748ew;=(b?$IlIF9s9<;C!=>7nDyr@4vWg2loFOh%$)#?t|Qn>VL5NSnD9F!2Z3i zh~i&ZI%tNN7XncUF|XeqR6}kBr2~)dsgN=pJP5yS_uv2fG(axtwO!OE!SEurmJigz z0S)m%n>U|bL6w%Qh=3M@Pv`$`W=JpWuIuOj-OemNo&Q0-dT`l($`y1Rz<+Q<@x@*+ z=Nl+PYyvSM<8Yu0!@J7^Ud#szZ3T6BL4&&&Kxh1Pg4+YFAeqkZFZO~C3xWt0xqkld znd}|`uSOHWF4_wkxO=e`>|3x_FR(CpDc(9x1^)?RRE>he7Thi0h~e7*>rtw8;f#a7_(Oo4?bs130m6gH4> zfR^)jx5LYM(D?1kt1time{mz}^Z)K(7SGOOt(W-w)-f?KxEelzwadGm1-!a#9=u4l z28}&{$F_esf^zgjP)o_hGMT0RHfXgEH-8_f1o!B5UEq`a($(;ZW9ND3xR~d`r_4T` z;6bJdpmqLU-8LF8gu!kDH&nqheIA{z3tr@bIz-*Y5}uvMJd=-jbekOWX#S^C!T~A` znjAp|4zxk{4ZPZ;`6$PWY{$?4oqJhqESc*U`#?vslASqxdR0Hjh{HE@%3cR2&r(VF zzL#Q4aCosmBp~Ug9u$VK@OlMGHEXwl!i)9VHHdc5e$emIDCH}tJ^_t4D?`j%15pVv zPaoMlP`~g+EZ977+a4VL$*=zZf6=iRbi~QAmk&T&4yqS_0S%eH>;fIG*ZKX$>rJ4( z;IWs7-+^W)+!Q>!>jWU3^OtcSK=Z<&c~D!?YoOd_!{D(4v}g=;-jS!`anI)CjG(@I z%dQXq|G!uSav-de3hs&Wajqgr&IMG6c7A{HKT4J!olC_3+h3BKLTof^0%%AalRd4EJ^T4c3lJZ5$LoMk8ai`NX{))0+08B>r;`U3d zS0r@Wfew3P?Jh{^Gy*N`X6+8h=oAF4%4X|!$Z_msK-LUj58Ul806L%Q>5ILGLA6ll z@t0c+1;F>u!_DsopLTZ`#5err(QA8n!~g#;{jUDOvcA{@dj1s1y)R#HLD^sk(hrI+ zNc_7ifIJ9tF~3K1RRBYY+)3#ASMc?_u0LMv=>bK(>kp8+*SBBfu0=5ovVJ?%qq|-J zw4_^p{r~@lmq5$knYsl!FM!Ukg4hR@|Gy3<&)glr0#X28PXpI~A6cFQNxl=h{{+73 z+rp!>bb&{Ay@W@%8OpjA=uSP*G@vJBkk)kv_&}{r*9|ZDYsDBq`*kE-y7M_)K^vNm zGB7YWemlxh!tU637F5GHemg1v;edwwHRDDUn_!7kMrxb`Qh1Z{z7yccm%d3cOUqEpaZS9 zK>_N)?-Ib_!dw74+G>Yqr?`uC0ZY+Rlp?d#(xW?cfd{zAeD2X}`sUyN|A>W|!SlF_3h3MlhL=vDlx;Bo(|<_#gU+1v?ED9+;5|FP1b2eY*b@Nl>Ou~? z8=%>R_b;N>f|qfX2y_Q0Yq^FF>M%`St1--Se=v_Z-7KJO3H}2OV_v z)iEUag^QH{gJ*Xr=qS_fCeZq{)&nKphPPh}L+fEs-DEurBvEVvT8(h<0gDH76J$oc zfCDs#co*E21RVWKZA?88!6rBNe0WMfUyGVy$ggyWjG0&N2fY$uHaJLd*=tMfb z5;0s1PQT6nGx*yV?*Ywqi!Nc3V(9$uk<79Svdi0}m$kuPoZ+xXFDs~20?`prz6+Gr zgVHiknjK1i@`LER3#Cs%=^apdIh39XrJJC1K9r7y(%w+o97-!gX?`gE+ZSTb3n+aR zN*{#M>!9=;DBT66i=cEol=g(uCQw=)N^?W$Z$1!v9zf}HP|`@ zctPxW0;MlP>3vXoHI$wKrCXqM5tNRB(k@V18%m2p>HnS(^It>h8&LWvl->lT=R@fp zC|wDqGof?@ly-sA`cPULN^?NzuO1Nl9z*GiP=` zP+AO1vq0$&?hyMPKpiA3@3_#U9I%ug+557i;4=!^%~u!YkGMETEFqPUSMQkusp%vdjr&H zXFTN5D+8)789aJfK-Xn6fc6r-R)&_p;M0%4gSJ+_n5hpM=yBZvT5r?>y3iKX=6a%m z?9^{AASH08rh^=SaHYhHXCTkE9w=Ff@z)(N1zz1YKVH;> zv~|~>0FC?zgIv*h$fNTbXz+&|F-sLsO^v~lG93ttpx#Uq>rzU1z_ z9%vRD5_(_@{J<83o&ZJn($~$P^MeBMf3aH~5l}l`oOK2%Dcu2Sj-7a6i|Qha z7kkvfYgkK`BL#%Ti!zWXG$6S2KL3B+0n0y@C-{3fm_gIXkn{{ne}ar9@gCi*H;;qT z{DD$ck6zg?9-v$Tnx6yryE^Z`U{-^qcZecL`s0VW6||T~$@%ktpU!vC4#*T;(D=?h zP}q0sf;!VKDgpxhEq6hE0QmXfeR80g>u%X_u%Wk0O?`TG8^AU*fcr(Dgww4Gw$}ut z1e(u4Cvk(DW&C}2!GoP|U#r9X2T6x7L_yYf`yTM@b!D`4Wa01YVP;_P>^$nxdH+SE z8X|;GyvTL}hcGPH+|dDXL5Gk!fW}Q_M2q9UNcR8s2E&6@@C~`ohi7lwL z+zF2ES=yifL)xpTU3^G-1C3C>|MeeqGyH2ENWcHYi*%5d?$Q$=Uqox811PExc|#H8L})1j&aDen1fc!-)&nKeU=9aMg@S#5>~(_&;~}43 z9n5k~175EE_XG`7AJGD(Zg6qA6U4O4-NE0oAKbCO|AHOKT_;{hLfi#QQC(Ung^0!r zPGo1zM{<_Ni+#$VL~-nOCwzVYd_JD7%iKpDRV)nlN1lB@*M%E|&# ziIh)VtS$I^)Bpbe@0-pT9Wo9KEr&pR6~X>{q6rF2*8?t=7W{qY(6UHh89BTi z?LkTq;k^;61)3=|UKoH}-+G{AF;Z61c<~D4Flbp+r}_E+>lV;oRj0X(qa^XQfV-@Cj9qzkn9<~B5LvXwwN z^*yLcV9@;h|K)k`<`D+ZWb~TR39JxYyIj`*4WA!>c?W#Q1lYd)ZJ-m^4%H~-+}Z(p(j)Flu(;L*!^^ap6t*(Ts6j}ssAg{R>DLuls(#C40H zYb-oEzXyAOx3F3GbcYJ~bmvN>cyvRq>4R)r6W#MslYxIbPmxFR1rKK4Yare}6T#lF z{SCiF`P=O_eERRxE4%x_X5B}DWLJ(Zs`{Z9-v@4`t2|ye+xV4daTa- zp!J9Rt@do7jUM+rdTlwJK})MZORX=y^E~)Qpz#@KapH?<0ifkn;Bd@V|NQ^^VFm^V z2L9IX%%HQ(pF1`_|NozXfxp$9m4N|vN6;}oafTQ3;`l%#KcL8bybe^s97E|W^S35( zgVs>mu5l7)cxm?^wEnucbOETiHR%W62-YG3u5oHNfag`%LBrQpv7nW*M_z)af-%BJ zh#R^I+N0Mt-ANpDTCxSS(+dg@zBoS6&=M#-I`6+=Pyl5?&_xl*6VB(kK&w-aAZrWf zWPz>Y0<~EMJUT&Pb<`0Q{u@ByZ+HL{{4erBcmH)qb9iCNVNAp=f<;3Go= zBSBjYt2sP+WhaBQw*D_sp77$gB53{TQ4UZ?7gT#3GCc62Jb)Lp(22pL^?&I-@J3OO zUQ=&=3DD`sFRJW8#-OAM8K{#X=buB5#y$)lS8qPR=rN-r`L`f{i!PYK&)>oVI?|{gTs0g49Xrwr*&&VM zjZl!?;Gh+?7H4>=_ZO5Nx>1xEaWXJ?CV%kgwGCGnXYgS>=fQaIB`dg?fz(%M>5GYz zfuTE?!=t+xw6hkJIXrr86CFUqjnH6vxyzRqseKRLzbOx@9lMP>9y^)7iV~3 z9u3J7Pr(5JjvtV10pU!bGqS%OX6J7)0rd%*f3xtn90M(=X#Oq2-*TFjfdNz)v@T&~ zU}*Tw!{5RVb_;9&TTKR!ZUIoa@6pY=@Ez#5F#-OTkD%53jbJ+%x>-~~tz~|0XuXRT z?p>hbrME_!@#RKH`Hd!@#SSXRj68aS|Gu08TF4D+4|+8J*W+(}{P+KVP?Ea+_y7OS z`!Co(3xgJ=gSR`J0M&J4qAx* z62fBTZw&=U@ckFE6G02n55IH;uY?1Y6Ro#PgFU)gQ$T^xE$|XFo(BmRlyo_ZjRCSW z+oRW3aFaO0%VzKyo(`bPNI1b^{1@bIP=6s594Q{%!5lB=gKYuF*NekWpu+hW=z3oM z)=%ITBWPOfIE2N*-#Q1v;^1#Bgs=qoTiqZm1^!lP5DPk!(fSrN>Gu5yc>1UnG+_ps z<6r@m&;=lwZ$}#VTU|k{??)H}K*CiZPUCaXIXL{Sr$GlvfTpxPdTl*EiZQ&n5dkX2 z!4qw=D?!aFa7B=$`1$`!zF(jc0W_ZZSV{o220GJLoB_1I{lJSPFL<3{4pKV%CwRRH zsQu&7Yum{r!SLd|B_!Rx1_u^693bnldTj%2#2H?!hsvKuk_Yv#J$h}I{TE|+(GQhh z4W4MY{~|sF9JZhY-^%|Ndj8Bl&?*v-UR!&RiM$A}EK>OV|E0)(&~n;p@Yyk~63h$? z-NgzXy|#=tpla~Nd{4L+N)$kiDQAh!Ln|Cg{5-myIXsdrJbDW_UTFD!hU}R3=(QEs z2hFG+d9f@U6k^~~|MhavnseLj*06B#LKrHq09ptl0lInVC}@T8eg|+G@BrPe3_dru zRh9)b-hG^jzx5p`g1;SS;cwj!VR7)cf))}xemgF}->-%wVl4yDR_y7NWJfQAhudRc%IKzue zVIV(&Q$e~sXlGHi#7j_SgoUpLNYPq^A}9IJ|G_OlaM#eI*S6AJoZ&?eLV+SkK|Yc- zH?71OUSuN_Fn|=Kf)s!|wY|0$AQQY03hv8&{{K<|qyQSnn?WXMA{6WcDfsl~|9@C< zIUA&a1EF9pNWl@10?;|c9=*0LAO+7u;a;r)DVPaT0CmG8GjWC&#}EplK??Ga6r_O^ zEJY}=0x56?DF81u?6uVeSdgdW!*sB&igOymVz2xhhLWc1kJ?Vf5A5aw7BK)%QO%lwGagl z8ui+~wh(7{*$$Rw6?hIY{KwD#|6eeRgY$Q%B`h5`xxq6>ILLvAKt6!RgN&s(!;6I> z@K7|9g(jG}pvZ!TBm+oM4MLG1Oi><45p@3C#Z;W(ML0sy8yToc_8>)2lN3OTj1Y>B z!xZs?6hYlI-9nt<1usI;BA6mj&jXe|szHig1j8L(3sbZb=&YS#_|2o6 zHRrJ=Xm5C@?+MVQGN4P_EPOg^H*~u0@#toK|3s4kv=Otyv-22ehV8|+AU=kjYM{cR z^Oi@i=>&6dG3e3FdiAL$sL|@izn!JR@PH39>y)RO46cU%UrccYt;AzJ`$Ut$m4Ev= zSHo{k4K^GMCGpVqglDgd9Ft2o$hy)EE}g$T4nAP^=&n8C*?AM(2k!P^{o%v-;(zG^ z-{kKBFH%2&w)B7t+^lGD`*?+CFAtjsGjH}2O@@dDONJv2n3{QDW}d9ik$z!wtO9{kd!B3y)sjhu_5+JbFzJn~5`kcDy$K za^J96tOmr+j)@nL!*DAAXlZ9=*IjO~n~jfXqI%g3+Uw z^{uHmg9pFs1<+Aeh6g|c^TCe6jzQr*ozKHOdQG2!veRd0&?V7@-u*9tv3}m|K=DUdl)eRw+nI$sp)bC zaZtkW==44CVucYX#(WPnSTgXpGJ_hKVes}f_&i1h28L2KpU#IK%?Bk))WOl?(Q8`7 zAi)4?+%Om(c+pz%>Hq6?@VZbR6$y{llchI7)%Ythh8I$dd<=#sUxSVy0=4HrBOATN z|6hE5@c%#fcn;L{Rj|C_+4;@z8)*JD*rV}H2dF>Lxwqr*|No$=3&a1&)37HD54_ms z&&L3&mO(2cUQ~vE{_hDnjl<)3>xRGo|AX5sovkzef@YpwR9HG&D?mq$bh`<7bhfVe z`~N?G%NB5h*iFKtvvmQerP#a|L@_`lJi4cXRC#o71qp(h_N9jW47(u3k!iLGs7Sv5 zBGC{OjI9t?RtR`D*9S20x4s57>3eO1Ou#LgvksuuvByA0B!%%ac=WQ~0p0xFE4m*< zb>4Su*rUP%Y5SR)fz0K11*Pz3j-cG?Ea1`I3wB87ArH+{9?iep`TJh8GcbTtfk&@t z?th3&t{d<(csB0=pK!>)-;w}opJRAolL0@&F3@fbk6zOo#t@D3P&KN9%!VeIqsE{F z^ZiA&0Y8IpZ=3`)giBa_yW=E$TW|BX>}O|S@a=}!>T$ev!e7v!1OtO(H$UiH2?Nj? zwq7?0pU$PAKy)>H>)ZLqqqDUEG}Z>%e*_8Q&ikM>0%8XIpu?s-4nAP@WIO_zqGAEf zwaB=3`=}_mcDtxZ^t%6b?DkO+0q>jcod+5?G7Whq$>5R9(&oYV0e)V%M=$G#Z{WdP zX#W&+On2vfk6u%ua0!MWk4{j3zuf`U->*^OiHHJiPR;b_2D={I-;rhqAI}LoF6sD- zx~ZUP`BD$iq6i+)1~^|(T7e9@6@~FLcy^bl@OX6Z1^M0Z(u?!cK?eoz1$hxExauT) zTmSR7`~xM7Zg6UIY(C29)4gB@=xRD^9TonjcmF_RxJNv?w}PS@G|YQMm7l@07oI+0 z#&LUg!^J${X*Pt70TKTtTA0aqn;t*IE-z4h(QE1zCcywokBjsmi3T+F#lYXP4SYsv zjfw?KHzEEYwFK83ci$Xnq21ovFJ}LscK(_;bJE%~?;@BO|^X;Gjf9n)b!+AGI z+z~7bK920$L5C7n&|W~D=7%hxSk-U@-*H>Q3XWJ%aR`cB8BokhICgJQ0qx8Q0u_y& zpFDa^KZHs!1Q;F&2f6l&9WR4xcMDjBNAnQ_SI`(Hs2cI;Z9M?mzt*`m;_v_euDu!m zLC30qqN%s_0H^@zwVm=2l-gSh{{H{}+6r3V`Dhmlc=m>Id$eAv6Y=T%39=4+hx2{I z1259;co{sK-!k$y)q*N2n6=&D5(%`9-te1G=POsu4=$apHK3KbZd3mMKL&OO1K2On zbneK%%|%7Pr5mhh1yhNXqveSjQEEO%k;$=eED6^J6fLb=;fWO4_eLNngJ>t`F+oW z;=}Mj*gjBSCdi{#^ohPWLpW%&AIOWBEkH#QB-4Tqf4mPZ9$!T2fHLnVkIwss2RwRB zL6*NzwFRl(3d#wft3kVq1zsct@-sB-1w{!1e@iW>|KB|o6eS+Lrv3V$2m*!tTN_@6 zmkHo*Iwb%4bc5p+lmrwf{r?Xu`HFvmbR2(iR~u9YL*m8o$%}Khzy5dW-U}}6JCC}y z{x9+K=>)sNr+X`?pq>Cr-H4)nmNuv|edN>m5p>2kseV|IWH}wYO zSWoC^-C>VzaD@pvd~dEtudVzeF@_fwKY1Bm_e17MT)X{q9J~D!9J}39JRljwrLz~5 zDO|hrGdg=gDWDTvy1sb00dyrHSkAM%JODJN7%0Ke4ORj!mmLFLx_d!Isbi>P=ZO~+ zEqNK@9V0wCkGz2wCc?|VRv%E{^x8H(6k~WX`v)(>OKZ4#kM34*&gqU| zap@L#nF=1+0JTecS#Nw0XLxz%Cul&$0aPheto@Ou4F&^p7X!5*Ez4gZ76tQX5&L8FM^-EeEZg4)dm0?=vpS~<{>vo|0o#e&8W zVe4Z&n%@Y#SU>ka=#nm$5=D>h3i#a>GT_4=OEgZt>_^PModmCPJv;%tU*UKXXwfJ1 ze6fo!Dw;uo42dsf^F5I6-ay>v0a_1Oo1~f#GlI@j z6nNn@5fs|C%$q&P~SepEPvyp9aH13MGgj zE4OX=H-OHTbKvmkmH7Z#eL5X#O$F2%k8TGJk4|P(U%|reSMevL^WTxuy8^ORKMW7J zwj3yt=={)dhS33Zs)6eV5Sz&XbgqHxhtARm9=)XxJUT;Pbozcc?h0C&%J9Oj$UIH2R0@E-HuwkhA6_&q1 zr_Ne{uF*#J%n8E-mgNfkE$2ZA{5w1381zFR4(L|aZg&aC&aWPwz8gHcJvl%ZTY#27 zvAA$&aDYyD?krGn>3q>}h7q)m+J)cs1(?SKT1XAzd33vO058@lDM75EUVvEN(D}uq zyLJa?r{%|sprS2wfk(Hk-#RS@7sVHypf%Jh{CaI3_;#yF5Q}-+n6oCmpFQMe)H_S;?emVG<&BF8stzz zx?jG4fuTgt!&VA(&paRap82W!gc({6lxj}!VSEhQL3#pw>pG~B0y;X_1$0y~_`nlg z&^eX2LF;BZ@4qnEFU;`z9G3A0=sqscq5;TiZI4dZ8y?;4;8XqiTN)>P`tQ;C8@zm8 z_5c6h;GH5q-Rht$aoicafc(Xhn*aYjzaIe|B3hc@(ajoiL6hOQGirb+dvv=ZR)j;2 zN%d$xA^{FysJqdWfD$E0iAU#sh^m*-pvHN(EA%j7PEa4U6?9`m!!w1FI?(Bvpfg!J zT`zbx{}Czi_2^~|S_E1Pa{zpzf&F(e2FMIg=lvIn|3P&js}V%Ltyw~>vq|w=V z?8U=4QP2?4i<>`w{eK}+07^luSI=rP?1GGonlgP8WANy%V8`k=K(!$9cYP zK%Cgg-@ooXAU6{|>wptR@r}gY~696AWFwOn*e~^yj z9-W6@oJ;@>${&BxSj@)&J{K3%y5ExU`9Ekj_zDYb2?c2V6jX3MNDw@6)_MO$7gVqd zBnTNR^e67tTf*X=vOqg!_Id{DCkd@_$mx1)eZX9wt*S)b0*6&|hN^}?$E zE+dW4K-UXDe{uK^ICZ9gv_sCjI_%S}>N{VH!MF8Esftgp?&W8o^}e7m1$BrfL)7cQ z)Pu%NyLCmu>feIY+kUC zsW*nG-vd@~0JQ$^kWaVi(s>~Fd@I%W>9u{<0~&R|2I&WZC*45$e*XshqXwqWr}Gmi z61q*3z#`vDEj&7>f=;CH>9yV516uP4nTLh=>;H@05d9`#)gXJj!Ky*0QgpM5fvrDK z>gLfo71ToZ>9zg52{cXzKI6i(^Bd%R29P_7A?7@p3-vGPRJm@5rf#U}13ulnd**^X zbh0$sr?VAm;-Y#`?{g~X1PPx`sM2q+^#b61qagEzA?DX0nePKRS<(k){y~p!h$-Eo zzF=!Em1ZNXDU?96rWbTHBf>UB{Q-}U#lOJe%7VwfLvZ^b#`V^&@adciI%N!eUI$nZ z7WkduV|zV1w}L$V;u@m>19&+$XyG=f*W3~UI*r@%C_i*T6eJET5AnCCfhCUdx3Ga% zN`duzSRUhV;Q_5Q?FJj`X?cLZMH9>iTk2zZg195IZ%)s^5|wQJpq~uv@ksILOTA}e|~v}7tS%v3@^F`3O!ZUIk;u3#^P)MdZH%_!)ZDF0vZbpQX~kh*T<|mB&Ewe#=*|cb829NI8 z2_D_P9gg8Xy}lbNB30FaY0!uj-ejir41gP_p=!OZv~yS81RB|A!z!b7kums z=+vs_BL+U*;Bw2OyBAcnflgNGo>~AZJFn_}2c5q5;_i1)8_OAVy$jeqxg9yG~)NwCpwEtxRc!&$s zFYjjX=seW?NZzCQ7dwCJr+@$dgNATgrhtOw;0yld2lb#@fxq&cyZCM*Bz0icpg9i3HUAMg036n3$d%+8p1GyBm$9pbZ z&ilp3NM?pk*F7)eKpueQf6$P_%Pi2AzP%vxUV`q%b==Fsz`*cw4rsb%FKG7n?=6sECvlcU<{u@)~`ZWuljbLa|{Jt zt^r!Z3hHP?cyyMo@ae7v-Lqc?O1Xhml$DD^>>RJI-{VOhagA_^YY z0Nv&SnpzO>fZSdR9#V<~oiNbtYv9}KtKib@I>n>AbVZOy=ly_gR|(Lj%YbfIfdI#_ zK#y+U884=QhfT6I6_c~ziu!9f$AhrfW! zjUI@~lIK3%x-*W0;^CNQcP+zFL%@j<;ZT+cm zkIvAJ7v&A0UEiQp%iW2`FA2T;3^J-afaB#WFhevHDt;Tny>}3z40Jf4 zN4MyAsO(;d?21DW*>xap=lvHI{-EJBXMvYnK&R?!75xAIVrnu`*NG562^|0fS4b@34W4d2e=piQ#pKt;n>(8lO1pbtmo56rj$etKorwEQTzG7Z#wU@@NG=qC5;1Fgyu9@#y#q z`QrcoU#~-Q4Wz#eFR$S4xe9X67r1-E5$=h1ZT;`j%bE&uMX&9;QA;KwSONr}L#_IA~N4)LcK7#SRIS4$#siV%(cw^#A|sJ{<1#?K}^4uWRQ~ zkbD0GLl&-pO4JiCnBNF6tPp^QpKIp}pU#gSy{xN`f->zbpU&q2S!|#Z0<@Fj#aGY* zDGVop)-guEfGi3JM@Pv#EYJrhB9)O6>7 zN?p)pRIUeJsEhuF+@r{DP6h(To!`Q{d=(_ z^7nsmp9ZwbQUo+jn7hKW^T>-Hen{d2tq$p}7H|yr=sf0Xc+znPs2I&+@acS&#qfe1 zw4SZ`h=Nad0*7zwlaeHm<3840aQzY2ER~8pej9jQ*ZcmJ^+t? zfHze@*42Z$dDE<6{q#qU+%NP7TpFwIt zNvh=ts0MES%gW!fm63sAH>i>3*!-7?zvUXNV)yONQ4#QH{?EeSvKZ7c0c)EG>RB}Z zX4wJK;KA>51AKQ<>%Q7g|G^de)>_adL9Pst>VuWPbxG}~|B#AhdF`kFpoT)rJP@NB zTEnpNxAxV3`tQ?OyI>z^&7@Cn?E#O@+7%wXwoF3e3@^%gK@0dmhoFO!h-W>hNpipW zF(ZFVE9mOa75<S2%G+7&NscJYDsCM|%s|7U}1$l3)joXYt?vv9k4*g!jHXS@)4 z&H}0>T@4TH1f^%6&PP6-&kX;APBnS{6Le075BT~V(CJ1mrafmtNmC%H?$8CDH^Dih z+jYkO3*h|V*?Ek=#S>&>^BWGw&Kn-R6#}5t8}8Hj(x>wosI&*2Qt`qKG{Xf-z#uCQ zzcAkpN+;l60e=f*+!tjNhcw7U)Y1)BKY*?+RRG;tE%DMDblwjr2h2zTrQ>6u12$Se z`~|0D(1o7h@oi9qa`<$<2bU?W&Y&8y*LJP|^kC8#ygZ;4+($h+kH1t0HOnV>^xD?L zWWfpK#Vc;O5*Bdo0JkSzF#CZc;bj?E3={{TZ77i8&(c^>u7iy^f^*%=%lV*5Ee4Nn zXfol3F52&9-N^-sp_h>$*L5C$A+e2#0aSSX*bOPXUW9=PF9wh9ii#IKPk#M>aXk9d zf6vapFG2h4JbG=<@x#1h#|;|hI{wn-@Bjb1K-~pc4xKs^nx8=RIruym=j{LgU)J?w zJI@7Fzk=rTJbFw2bk_dy=(TMF9s3v9{|B{gfIk0+eSU7%D`DjQDV?=HUR-wrHBg}Q zeb-)eq=SM6(jEi3FVv%(wPmj+Xu;w?K2Wj#)G^Gb*OZN4oWU{Fr&o8y@Bjb7Gk5nN z|NkHC(G9xQZp{u*8_42?%;zuvJ-TJr?g7=B$3eGzaqSXj@aVQSJn7LZx^Mgc{~o=j zQxA(Vyg0=6^*>k~oD;si*u?hrKd9;lDFs~*!v`7%diG*AOqoZo=>3gg?F;vdF}!F- z5^o3P&|cFW3qb3?A>!c1s7J4;OaoX;ENC}b08|Q8w0rc57UqGad_Yo1dBBd@36)Aq z14}u9q*g(s!0y+Z2o?_ktr}p0mJaS%4Hxv9wt+Nmf=Ge=@vQ)CPc=w<7DOBt zRI97NQu!dMdL${I&R3wh^&E7eXD=d=ggkmhe?k1voF~rk!VV$@wlk>~Y;ZRyET*x5 zJi)wzy~G?mde8#84h7Vh=WpR=1YMrQ-+GvVfx(7{zXe=&b+hv91gFQ>V$k(bpuSYK zM>p%8U0`vKUQ>1+afTPV;6MWzYz8qHbbS=W;6)4|gG=K;hHe9OpSoGMLlXIGNyK;_ z$Xsnueu0=9?a^!6!2;VJ7W?un%U8%epGS8E$Lmhee!~im*Ef;$ce6Hb1v}~WVNibd z=w>a1@Lz%kdM0>uvvxvkeF+)`0`V&${MVDA>NU54^}lQY?|$g(Q9iTxJ(7ahF__EulFZN9T^B*h-ogV_}2N}uGda}eBRM5dX4IZG2H7=E^ztB1j zYUdpSt*pLO%Inc>{h|V92524{Gz$%CXD6Q)V0is-0&-so6doY+LB@hcPC)k*efMa7 z0~(IFf!tySO|1tP@Pij!_qu}a2Y%quU3=q&KiBX7;I7Yo570>xt~Xwsy($E%T0m3o z(5i(GbOSJWkO6$h=8N5-C__3(_Jdnm0%-Pv_X;zXhj?~gY5vbx!fSZjVv${VFs0^$ZG&3JerSy4rYoyjA#?S zP@OEy@IoOJ={%?q@Ig?&Uv#^PKsv*sKAq1%-K;|(f4p=7FAZ^Ehz45-x;+#!{s;F@ zsAngvm)HD81KC$M3=h081)17;{Keh_%%Ee3OG11=hh^oS0L@pu%!7sW3D8Z^DqnlNC6S!I`)0F^C-5DNuamM4<{}<*V zpx!mOT>y@I_}pCc8x5CE*DXGszB`azd;+wv&ymr?@&kYWYVcx{|DYSBJFoB41M{wU zcAk6D6a;EI9w_nk?7ZvK`N^mAnXl$o?_L}I7aZQ8y~U*_pvGq(XvosJp+^6|era;I z>z3vp#r!QR89^6{7V)7WB0WDUn=riHf@4Ouls-S zc_83&tMfSjHuheROAS96%b(ill?r-x{`J-T>udS7)(jFKhPP4r7yPY_ptf4`5e?L3 zZt(o+qxl`;_!mK5U{~++)%*%RE(~HG%*j_6pibronb+;Q!`1McPj7+%XvW{8o8j9L zg_2nKTEJucy(Qp_X&!iWvwZLXx1L=OyiiyRY7566@UhMoD3u3=PK!TS8R)23&>YKo zPmmM%TcCS)cYy9kh8SK7IzwQGk9C0nf3GBHfnT>P=omMJ*Ylv|H~%*G|301nUq1i$ z|G#%{h$*OXV!unA!L!#!{6%;W#N3IX5uaP2b|id!8m6}U8dR+|R4u4%pj!$~c=m#} z4!ACO`45&Zp>YeEH0nJ7NdgOex^-@N^zwktaA5##v;cLxK-<9I^0)GW))9l&jlO@; z#rzv|0J2A~gM{aIcF;1u5*E*HcL~rqUCU9Bx|S#WEn7h8t9B0~e~T3;bJXr(;%@<6 zLEBurhnc_SKDd4b&4MtxwjLvu$o%`i;U#c)-=p&wsOR?I^EY@soDaY21JIc1{GXr%3OO(6@v~3= zL5IkBcC&#dC|ZAmmaJRH3GnwG1eF2ZZVE5|fcgX7p&PobKOA|yr605z36LnkymQ-I6^L6$p! zE-S7*;n8g(@WSuer~fb0KnDuL`dh9oPxxEK{{R2~5|k}K_bVTNkr4n6nYEyh=@tO( z%K!TB|9^;Uzyp||^&;J|Cw#g=v3>u=jz!E2o}F`4K&i#Edy5Jv@pyLcQCR?r=jJ03 z;Nlh1OPYHJnvOlXU1xySL%fUuR}7%7xu3UzmNvRhc)@WFwEE3;!b{NAsnGlhI_CQ2 zG|*0LMB4^bAA{3x2(*$H@PMV<{UE!Mi)2uh-0%xh;#zxjH?IJ@?S}}of7*JWG}oiM z8RP?$6>$8mpc~-fHDKBV@G`Mp-zT8e68De0f|3}hnm_LP1hls2#o9mr|96Kz0EHRo zc+zgyC#?r|h=4|qz)55=$lBM__~jXnyFLK*1&+Hu0Z}hlC;s^F(Y+fa4NY6kTKu4z zt~Ac0*Y^p?R&ZAjw6wJoY|0C#KmY%O+ic)|FkBUQ45Jg|G?2kC^F=|5r9m@yvnTuj z4W7NshlM-TbWp--Y5lm3OHFY@>fIE=w3v-|WWOT3t}PZ+kUwuHr}J6QrW zZY2~Anud&teHqpaTfgVgYb(7~jNygJ8D0jMtVJ^@5kUHb;P`{rr=7n+gB~8uZ!$bU z3m`f}7a+&s3Bv;~WR`<^>qkJ@19VOdbVY~{BdAf+;MsZ1)AC4>^h*II*uAfwy>9=( z6V&HHRb}TfNB(VWy#bdReleCmvC-piIl;)laLl!j!3Q)OdfXMVxnrB_0^i;mmH*8T z7&~11p@VNTJe%J!`dU6KmV60X*9J?MV8MU}MZbb}`gej(A6ekh8N1<_>jBW9 z&W;zlc_5Xp6TpRCHK?-F`~WiseH zlSeni7odHXu^W6kb9aE8{-P`w?(7n4&^f$t!!)1ybRK%K4P*$!fX>(rAWuNd0l5%l z2*{O25HpZQU0gkyk7OVUlf#bu+uZ*9c0RMw<8QS9m8HF=J>bPP z;@bC83shQeV|d90s!KDyz=;zx{Xy$L3y<#Ypo-F?dq1eALQjEK-yo%ku4i|P3M2|q z2Dd;7%>(7M2T*?nR33s98(#A0HC6u%Ivv2a(Z$}hL`#>|?o|eaICW4B7kc&WG1qIxT z4c9>9rh8PtoX-&;(+oiA(DC~*P&LlqIvrdsyYBGmE)W1sQ1-3-2M!p+Z?Dav`OBlb zb_4XF)qh~ywL`)48=(0PpUz(|WJ3S`_e}okWBHB0Hye}&x@&j5V2Aj40VrX09)1y# z3>rT?4(foHt~b2o(RmMCiNA1gf=n|s|6uXpclrI|!ADTpa{P5SXgvJjJATLJXZ0^r zK!v862RO;NFff42E9iPi4xjGzAPD61K{MVz`lxMv-!wU`f zPoOh}TMxwYPXTx3LGumW@e;4Efa*_M?)72}FI0~4GQ2*CJm2RCIq@6RQEGl8;nB_H z)1AfP!oRIbp!H-)g-^E{_~?#Z2L-QgmIu2)cfo*{ z0fM*Rf{$KwdHLsm8h<`(OtU0|;U&b8vAzU z920oW4r*Wcbn1CDACW*l;s!j9;oJEPq!WD3CV1^YGS~qfATwP-mzIN;^0^-HwYE_y zPVw$8`6J-*oe}KR7EZ8A(2;;PA0V>`m8qa2P#i;w`~clw@qkqS=Qz9&G3 z&IE!S+kBky^&)!6k z3|cbL@gBT)@E^E=|NWXLvl(a{rdI^iN@DOh_}-Sk6?96aS1->Guila$93GwLUvxTy z(ys=1wt51nN%}GzR2<8L(~(EFqrywjDjr0BKk=d*bga%H{%r@EKQZ!eyYw;3xO)X?w#K8gwF6W) zoedWOFHJjo4Ai8K&G6{F=h^9+0P3$Wo&5D5v=l|+xa$Rw|2&Sje)#wQzX~Wnbh@4Z zNg05f37H`0bbBZmUh?RUjPS6Gkl=5T1&Q_U1>M)x8G7Z#G)u_H4QRy%Xz0MBdoIYy z9=%{AJvyBwK>M*k4w_T>|37GN5NP|T0?3eV@KmBlw*$no6G@;JLxIFMH%SHl)^i{g zo%dg`?Gs@zJOEk`=Fz(K^sdSP={OHPD)bwFc3^SZzVSv`XM^ktpyViX=zkw?&P5 z*usgpZ=mDHrh*m*I@|=^yL8wCG!ps@H1Wv)2YgaS>pD=0+g(=yo;Yru22NNg$7^+f zgqn|3K+`JdNC{|p=F>bTs^zpAbDqEJaXQ-1P-wKFHY?eVE|3ZL&_`o z!C=h%tKQ{d{LYPPf^dHDeCBp zcNT~gW&Z`#{XYES);mOsdIai>_SOo#xOy9upx%RqTcc)z64d_}OdxA}TS3-BFPrt~ z2J>Em`kAowlK5DBws2FQ;0Ije-4&F)t4y|6-2_DD63wXiYPVjyZpUzhv7k@#c z%A=dZqq7%uA8^A{1^$-hAOo5Y2zYd}T=3}L3z`rDZyQ-Y9n@n8?eGL|pqk**9U$Oo zdC8}9Drj9ke-G$f1|QH+|2?11xgf({xS4?R7?|C9pd`M#wxRWZX^BTO_(oj@AIK7Y z{+50gkcWCf6Gz}ocg?5sz6<0AKG4c#m}wm^AU8-DgL?cv-C$#nyMj(HWbo~cVP*u~ ziR#&F!_2>pz2yLZYb7%S12}qCfV~3_55|VQpfF#w033SZGB=WDn?t&aEd)m_0ff!H$0o zssVdVcP|D_Q-6PP#TqgsEDBoU0#0FQq-PUuOV^R0*47gB?TZI#4)*GJ;2M1@ntwTRsMtZr28A3){2vpiggs1b?eG zXth@BH~tnTkcG{)9Sr=fpnIe}x??*anoZdki-XQk^6B*L@L~M?S_agP_5|HM*US1= zQj@`}+vJA_$bsN z2NxfpD0vwLJ_QogPeEiD&;&zk2_pkTw<|mi9N=%=1Tn1xmYO{}(b58cE9fl6moLHf zl}~qp1oX~lXnQxb0~`_GeL8&`K>OT5MS+>!r~jbc?4SXjZr_HN>mgM#$UV(_BmV#Y z&%obW1}gpS;O>N!wcsICU$7vgzJP>huc^#t@D8sRGWN*9Di;VEyz%V-MLwvR2vhxO z6GZhpJ7m=#K&R?<`*whm0Z4~ABLf3CGF&=cJ6;4m04I=+m&G8D!peKlSWE|K5Ogc3 zECi+GDTi9Wm3XvVDs}PbHGKnGLcw7PNy`bKK}mhk@j~(pjyp<0(WegPf&7gq$6g}) z&!g8=VXrtt2e|0*=mcL8{$jfY*ua(_pb3v|uo(X~u!;tIy;6aOddB=xu7-Lh2L6_- zfB*mQ1{e9DaemOk{FY1nE!Tek|Nk-;G`|fhqdVt<$~B+Pso=6~*319@eYzn+-C!Y) zPH-lF=?GpoYHPhfi~$;vpg4Wuxt*5*IWn*R`TrjrY%k>RBd1~h77ws{U1xZ7GQP9{ zt=~UqjxyQHFAo`S2>0o&lK@p-=RlR0XD4W7E~uGf0a{dsR$qA>2aV)1ct8$#Dq->I zhMuRB#LU0|o__?DRY#3LwHWw%3bB3q;Fibn7avSP-OvO4E#Umz>w3Va^Pfj|?Fv`W zn1Jg7&(4E}Ck-z-{=eqfdA#{Y5r4~jCQzLiyThZmc1QD%;*unfUQ=!{O@4#0 z9tO3TTbMxeevBnCpu zy{0ooH5pzUaR<#&lx%4J!C1O_H)yCEG?VDlTOr{A84>{byaIBP5NN+W+~=naKm9j6 z+5DQ(r`vY{|CECu4|;SSf-K1N>HO#T|61#T5_XT~+5-$F;0?*1oh&M#^P7Z0>kRjU zOBqnj2$|pX=rxs?2P&f9zc4fdr^42ipy0$7df+83KAo>1AqdJ*poS%Ah;Ew~Xe7#Y z2e|(RD$P84BM=_(=#Bu5vhcTnPDcfM1f++_5LCzdE`WI89^4OLTOhvR2K$1)1++5( z6g(iGy!1i2FT|tQ^ukVv`wLA$?k`bwY^Y_><8KAExEvd58T0vDL9JuQhFT^D{?;z= zgdXVp57z_WEfx^#!KnkhBnJ|J{H@)f#!7Fs1oY?)P;^v7qQea&)AqX^a zK89W3X^UP{mz|*XV8=nDgf9%Af^tjkju#g5K~wj&J6`mI=G!_U!PL4K9L%*lJbF#1 z3xigJ#qM~q&J~jGN+dyh!$CJpzJ#1P%-{;TM5P{*-*$NP79fXifdsfZ`Ux@+oZO+y za}lZiWjMTC>V~D?Pk%w9g)AzL`$6r!m!@D9pm{9qIbsYiTsHGEyzB*ylwys^?VvMk zL5l%EF=?R>N|K=T2nozXki_WGc@H%jVa^9fV-d(Ny|(*ii!r>ozKNINC1~svJifLX zBy^hRL+<|-TqPstO8Wt_SzQD26X^R7rf}$1Zta|r20Z>8tLc$o-8H3b6(DfYO!RJFXzd^bB6Ep|s^ZXZRY4?jQ zuYdjb=nXyL(aXzu2h=wLZLfGf8N8C{1^e&+|G@=J9|N?704iNTB?V%k41enqaD2u7 z@PHg00kPksn>8~JbXS<{ocChj2{bwI{MbHFsR#<}?t`FpFRU&gMUZ{7$6ri81X^QW zdI3CK2hTiVF4Yva**(_bd2C{$p(wHf(+^mz2X5G!}2)p02wyx1}_NqIPQ=E^1_RK zYKU>IN1#4=_gs)h!_wYy18vhD~7gaz0 z|M%%tojz5Qq4RK>W3!D41ApsPh)%HDPOxWNZ}Yc`gBnQS1vDPrQ^6K@I!X9+CmDdc zTc8oYP8XE~P~QN`&fwn$4%C(dCH(x`TK9u?^L4bSSb$v)2_lH$9^K$*0-clLCr3t;0DM`J3yV87gqv# z89gyDN)=~UsPQLeiK=x1&V&4Dfj12Jm=b1BeZ>0GhZ;!aUFt z)*;YX;I&dYP$)e6`~Uw-7tne|&^TZ(xKMc%@%b#DEM@*03`=dm+O!-sLRFQ(#6EU(6AR&>M(e8?**ylZ%qTINHFKctOc;m zVEirrz*YHDP!R&21W|z`4iLY=f`PyF9Xzf!4c;T7EMzFidzk6TD5^0X%MN1`axCeD&@HIpReM zvbl#B;4-(g9&F|gu$dph?fJbLAa|+2^dI%;Wo?G&e*twDIHV!1%u;i(zdOPDK}#n* zdTq6*fa?F%pd-ML{M#KN@zMrVK11d`e7X}PUW4y{jgWW=ns0}urx&;934m{_=mpIt zbUyRwwe@6`039KFi4|1f+IlmBn$1T+>$^5g0Ubc{&ZF0MsulQrwD~N*{=W=CNgtq- zI2Ak~h1(1J$DjgWFQ|M6Z(4~1wFO>X0X4Jsf=YVuL@RXC^sqT-o)uCkcJBopL+H_Y z>&060zyDuCI%&}GMpPg#)j-W1h*jVb#$BLDf6=A#`@csw*nF_j;OgbY5!b)}AzRe= zTR`JSh!WxDu3z9y`w;U%%c^$h3W3(xyhxY}x_ajsXha3Hd=@;Y{G!_#G*kvof-fO= zKfuzL4k#XDKvy%g9)P5;-Jq5_zYCW11u8V5jch?iQ2I&(N1X#h^Y0?a+K%Sm#r&-X zpehqmVL+-wM*eLxK*ja31`x^6F&9*ZzhJi$Vesgl3M%kGOU+HUgIhSqJv%SF=+OpG z@OXeOlm!(}4jzm@_&e5tnlim5_KY6gw!2cb7+x$r@ag}{L!j{NwY@!2jN!$X6}${D zEg=G@Kmw0J0$(5kJ3#`MKmy>KmU?YhfCLVL1k%7R2A91rF2sWxTHw0{eLZ01EOZ`+ z&l5Bj?I7{Z0W^>E2;?5n`Rq$X7+zXKEC~UbnF})W9w=ZRD}e^fkG=E)&4z$deJ5mi zU0MayEdi$+&{z&+(nBo`JVYG;(wMagWr&)4GiZn!yinnSH++a1G3nv0gczcpa~IS? zJ^aG_24aZ%6L^RkH0fb@6f{Qt95hC~tqC+n{r*K7um;unJ)_t@DBI#ku8 zvlleA;nCR(n%3}u&v(3l&TPQuGrqqSWq3IU6c~5aLBS5L@*q=}-3}6+;Cc+S)#}AL znNR;;RBk|8KLBn&g4be!<}|joLjrx75-89WUg+6~Fc_W$=R1$idmi5zKnuTpI-m1T zJ@}&OE2vS;STERmphE3C==5t3$pf*?4@3@wwunlAt?vX+qj~gJ3A_lF0iPLcbq5sW z_g|0eW2~69^Gus{~7sPHi6P+cN|Ca zf6#Sxpo*#U_>0t=;BEzIEIsP}um3*1rcb*yL4`(|W3wFte=F$Ta8Oa=YYlSWanP;` z1K-{f6$#k+-6gD`oo5oD0jn0!uqbHyN5C93#=zeKnnefAoOj-P(fbs%X+*ZI8&ZRp z7NDI+^$Fy-<|7K=HGfELAcozban6^4pv(g9k9hRfUU{+q9VmH~7x)qx)TE{A-3 zOC>zNyMh-rl=^^<8OWLN(ivQBK*~d~zIKp4SfTc8CZuxn?2Sce<@RX3U7|bzJf`K@ z9V_wry>EA^#Ork)y|z8QVhk^qF5zW(DFKO;YLLK`CAi+xt>63z96cX zR%lLO>k(skA-|ZH;iU;EO~Bi8J3w{jOVGJs(DrSw>5gvD_{{Sc7nQ-|Gp-)Jrm`y_ zLi->>%8m^-Dti2_ETD5n8fsKPV>Y1OH;xT8Dxg6d(4|1Woi9Pba`LqRIQ>Dm-~a+` ziUUmze1CEN2{??V9^l`0;N@db`DCk%G9U?wKf`Y?O~FkrXncdpq!-PXc^P6s6?`|V zLJK7FFWdt4T;+a&FOouLn27+weGVbIxfFP57B z{txQysD8ig(RtiM@>}yWkrx7wK+PBAlOx3-J9a>uYdm^Q`>u;Iyr{PR_5Vei5^{P3 z+wal%MgkPKoqIv6COWr*!o;IV8jo2Hxmb_QhV3{3HyuEpt_L(wA7>n z+{l7>6Y2N`etB?t1BqXR0Sll8OaK|sc@LxwRw;H{oP1gN4yk0pBqnd-z4UJZJz4T#kX==K($#M8Tu8_671ikUzkg@r6fc=!X|eF2ge8 zix(ZBU7OwLM~o`TfBFw84?H@*zgz;Yqu}Syg4zeaJ+O@b{gD7QD{2pb0thr_{o?jn zP+RW!3uTBUATK~l2l(N$JLSNM1ycWk-47kidkWqytTjWD!7;?A^F3(q3J2&uxO!0W zBk^M4TF|H-@2Yqq&}qxX$3d;b_uvIpM_#Dr3c>F~YrZVT@SXrA}ih%^0bA=dS z0vsTLqFf;cpI%ip5Zer9HK@9HvEno6{LN*NS6(CwKV9-YU*b#?5^jdy=T&ZF32!N9-(o%aT%mmLuZK4|axg*xyG-S-#4=W~K4 zx1PRuA^>WVIxv9bHLAe!&yeMhK;=Q^LCYIZg~s90ZTI4Y2x$FeHOGtnU`Ff@!viM| zL;Le!^IC}J&-l`L001p5+zu|bHahC_QTCUgh{sPeK$Nd-LcX=2*oB#YT zN%ZJ7^;!rPG(7Nv;VusYxUz;^98kGXoZ-crJ3OGn%shHclfHtk022Le3c4Ns#TAfv z^AQg4Ed!uk!-p3_b`8hA+g4XTsh1hI(;Kl4aJPfbb!pGyl?gtO% zL&{f=?s^T-{GIxXMOQ%W`)Y$1Ga(F%7ZV^14^V-7^5v(?zyE{g`(l5bMB3jA3OmTz z!Qi`{Aaj|Zk^<#$*%O8bUN}{OcB0yD4g-zmhaLb8c*q-qhNw!7LF4$JXMxXWK$$%( z%?GX3Mct_gjRzmlyiMo*7kg$gGkA8_bAXP;*Z?sC)R5%x>~`k>&8v8J*Lr~bC+^ev z$)oe$3ms!#hS#$Y_1Oz)chF*TR}YWQ=Vxd=P|Ax~ zihVe30ysYJfyUoHtq=kyXwX;`10+cwhLo=`^S*j?{sSK@p4Jv=Y5eD_2<9Gac9uNR|b#n zYK=7h_Xj+n$My0HI)knwEOC7ypwG+Taokx0RJ3_?R~x+euLl+|fC^Z=cn1>buJ-Ua z?hMM4pbKM5cwgKAi5_?MfG9&vAL!}r1!&P5XjN2q?2nT#&qd-o&jQI0VArX?FuDj% zpAs)LAq<5V31EgbBzX!8g4gqcIVkC~n{`GxXifukebvviNJYd!o?npi1r$c&pt{oZ z9cbOaPCM`=#*pwnjM6-DU;r)fF3|!FWtaGPH2)VV33K>%oUzovq2WJINt8!7>){Ge zZ3WsK53ZjE<#@*hFo z=w?86QQ8Ew_y&hn&aqw@MLqP+9y7WU}8*!)ob+aZ|}DUar#9HomvM`_RV0Nvc& z>H6UH6tKS5lcmdFcfR07^&up^fyQ<`JO6^b@g>*;ydSnC9JHwX;A{To$Dk4TIt$QX zjKFKj2|k@4Ji1M8fC@yxS-<{+hB0J3yIE8`nqM=5wj13Ct#em+eH+&Q00+8b9AciS zJ5J#BT7>&S<%x&2ZEb)S1L!;mYuoGq(0R*GK@IcH-zAEkomXCXwEp<-VR^Vj1Qb-e zmw@+Omauy^v#2nZh=UJK2N@4aS)i&Fa=sSm91Tdcv7drQ+lvJpzy5>LFRUzj(Z5BA zVFf!VN)D9Dd33XegK{YN2EunIVVbfzKoJeP&KPp2DO2e+Xqf~KS0wX5=g7Ty@w(;5 z|K=Y|rFtIS!2%w=-mnE0rJ?*Gm!M*;vVvl9`uYy56I= z_Qi{N`JnAe$6u&5{`miTA;=z(dmTZ$hm<@zFMELM(0`!enbgCeNrq~0^}_AhSfe8F zU!H-Xo)fyI$N{vL`NanHfB!)pE5mP~e$}U)d<@X^6YA5OCjm-6pdv94XjZ47Bg4&OrPeJ7uJPkzG zf+sIP=k|lMrkzKxt!OQ1?CjYKdC+>l&gU=EHwl3naiG!5JGIOVo|Z>TO+l{lfu8Gz zRG)ivGkf&fF0T_~fSg9gS=` z)myE%ORYV+MVEl}aIIi3*$UdHS5gi+B&QZ~NRB1wkQ~tAydK@6lL|o=3%y(#oLSA|Fn))Au zMMxRTum2w1tomT7mma;Qe_z7VXEe(%=nFc3 zG%qcz=nP!G|$f0n`#fJ?Azb zq_Fvjhfn7VaFGK(9RbqL0|mu14^U8SfNJ;AOcwC$Jo4XMIjGp=*jlkCNYK=qF??)&dmbnFYta|a4!x0;31FB+6$o5k;Hv^L5B@}_vkIX z;M4i)#Zzr?dr{M~^A2dNG{r+3a(oki>n%tjr-3ND!R3@scj^hpZ%5cm^gNsYu<(P= zD+gaek_Xz>T3X@Q@P~)L1+?DHqnmYo4yeSjc+HbG0TiUxpoS>N3&U)1hj@`Y=nP`e zkvA{+l|ZiGZ>a=L(R~X2`=v}Uhe~!)7`9*SrF6LLHUW9 z5dJ(UzY=PDAC$i`8!Qi=2YR8yjnae#_a_h|8=w+O!=t+lrIZ4-*{6ciL+4@FmbWFU zXaNSE&qF$32vjkE&N~5Jt=SuTz@xVmbga{f7e!jU44?^(0EQAFP*oKQYOTqZ3PH}H z1qG3VM`!E>P+w%ON4M!_H*ju%T-Wl#^rr}eXLF5;2IvM{{#I~+_1a#E5@&e9_38hA zr23-ucF8j6rmNn7f1qYk*DpZg*@mB3WJG>prM-B13sOpC%|`fpasMoP!>gSk30rxyX}d{j4UWd^vrQuJ6H z+N4_X_ve3Ddwc~usGkcm7j*s!q!I^h#|4=SnyLU*lH?$P?WHFRy?Sd^c+@lq(C`IskL7mOaA!3v;b`T4i8qx4MqTi=3IHy_aeS2Lh9 z&iFk#PeALn(s>@;;Q}7r&I%1r6-snKTc7(t%i?^x(;@4|KufhfdIP}5JMwR1VF5Mr zA>nFyh`$fC6Vj(QUE=j6_;?}6g{`1HiaWp!i*8eCXGlKuusr0!?|;Fg*F}gCRzqEQ zG50IHh62}}ovtS!jRx>B@x8StUPLQ^>iE(V&HiCnm!O3Twm(;kF}%nAam!SQ#;Cm7!UW9^{K<>NHda1;|E~NPtt4H#! z=3iB1Mn3%eUbq^5GlciQL7h8|zyJR`_40tv001AkHpAoc0}sx_zLsB0?}J80&_`rl z7#Mn+K*^~2M|D~3_gkRLR*oMApIVT72(%&?kzd_M{rh^KhpBl(8M<;OmpzkMuoPt>1y-3}?Qnh$~8{t~o#3LK7L|Ax34 zJ^^=qI`4zd!9~u1pf&0de?Ti`tV`UQe|VPYHUF?Gtwfu21-TtGZsO7j8d?Q)VqZ>{ zW?%rd&pPir?g7o1ybywzQo75v^+_rCPG-=aZ}4y#=+eZ_V=n@vK-G6iut&G+15hU% zafKhKFA6zxu@iK=jXbCX>NQQc2P<*Se*FCZVj(jq&9E{-B(vd?l0SZeIv1}}!Nv6V zov=;^~)=PDp10 zlKx+C!-M@r0;nA5Ha%#o#Q-TDL9uc4Mdc+C@b+RYanNqA`!8OCmce%31GU8KK#Slz zT_=DRB8hl(-ZK0K64elAU~oJRT7}Kv(QR5}3ohU%fQl7YAn~&|#7@z@h&Be}IH%=Mm5eEv=wyIy}0o9eg@dcX;&rg70-{SqrY7 zP5W%1LGeNa+0m_iAn9J)Edk;TFJ3)IX&-ji8|(tD0rBb17x3wP_ktVb(9ZiW7K20W z_>14KL1(RlR^N3Vf5G<@9Dne`+uL|Rfx+sZ1kRdwK?mM-gD$N~`|=ZXL=foQ*=*3! zJ&@36_yC@51`P|jE&z`r!3_%K1{=hd1RCrCjV)Nf&5{C{1z(Twq8l`?4!ZLWl(Jv& z{sKD)T*vkoa4~?Uj`;iR1sNC|4?baWHT>^t_!eAFg3@@vchJW8pP)16l0SG}e)hut z`~Uxrz5X1I&Bp~iK!v;y=Lb*Dqpp_EOV9gszVJBs!j8XHjhlhNzc)pfu^F71bopBf zz>cjp0L42v8Gu4A6}noT*YuH|b4jYBm!!MG-?m7;dmyDPPitOW_;L8cVb22bEeml+%IvDdmf9o7j zoOQGECV(RTlSi+q{T5i!tN7{X{|PUo5#|(t+W?_EK!MSD{6*s5cKM2@&;U=dSw zOK5fjwHlbtL5iJEg5YAum4Dm+7x%t^GLKK^OP9`n(1O+*E1H+5iVD}z>@%hRB z|0~!*2dzy#1S)E#9N;+A0ls{YzeOHYA#~n<@&3dA|DgEjW|fWBWbm;zDCKqRb!csV z@Rz@Zj}_b!`tH;D5>(#bf8q2MY!kc+Oac|T-K@;f;JWn8Wtc~$-u^@y&v_yJ8MJ*b zw*%DN1YHW+`Rc_DK2URkzeSV}bo@vvNXi1TPU6L0h*WDYIC+3$bpv>ay#^%E>$~CQ zF|bD&UL5`eTH92u0SZA-u4#toY+1nzO1-rQUI;bwg9~}5Z#dcy=>njh-)RBRg01^6 zlEJ6J9DlL2Q`U1TR~F{FCssIvgUW#u`$2OK?`5NXSu+`;vFlXzw@*Z=<~K+-E{G5ZTfsCeR6^us-UmbLIDEK6f7yJ2nArAWn>c#h#?(hH|#q|8eb{+GIYIPEg73(QDcO-ez+M)Lu%>1LsN)pU&I^pc8Le|Cb1WVhU7J-{e6Q9H8ULKtnUG z{2(#p0@RqF7ZwPhMy<$eNFbDe2aZAWMD7MY-5CNec7w`9Nd63X2KJ-}sBQvnIO;qE z8jJ+n3rZo0NcO%w`4f^~K&=D~eMyFwk0I#_wjY7NMUshu!M8g`MZy=fDpvx`b5RlS zZ9Tx>2U?lq%Xq`5^M+67J;VQ=JAeO^X80p3$lwTWg}>H-_g@-*ikCWjbbj<`KF;XT ze2ft^ZQmj21G;b(bk7z4Hi2HR-3>oY%H@1JuX$d6=G%I%FMmrYJE#l=ZT~Vn z30^Gtf}i6H_+*Xmpn~|&Y(9pUQ@?_O)dh4;$qPnMW4rS>xXglwhmYnxP@*|HgOB0m z?!W)Rt+WNYk_<1Czkzfj?(bpdZv_=);1c#NsNLJm20G8;5vUo_&B_`CD`6jBfE7Fo zU;G5+kNYnq-uwsOrhOk);TT?e(eeSBiI2VbdFRjnm*U_|{r&~d+t1+Rn9qL!$%7O0 z$$S6*zdR3W#{PeC_9Xb6j+ei_f=V&dIEBCeU#|G@|G#hNW6$Qp68x<%Kt*(~?e=If zh8Gu#co|#`Z@;|q7i8A+7YqJDnwbrtBDwhh)5|FzL4E}1fA~E`jQp)xprWU{+5^f|j;G{Q4gS9Yt_WB9%_kpgfaOvC&x;Dh4vlnzi*h^5>PiG^z9 z2iM-7po9MXz;Oo7cQ1ZF$1EJuK{j@S4|)P6iWP02{=Z%hNe3YPuUio5$)y_{CO+NJ z7~2Xu9m=Qk`-|Wpc%=>Erabxo-=o=Cf(g`A-~Se#??LDBz5EXv-G%H!exdydw0Ie2 zH#AaSsJ4Cj|1upk3IgdI_6Gb1O@;Bdb%EMJ%|Dn+L_NDpR5(CZ-Lzze-43b`;z#C# zme}&BG(VIF^)*4mx4VQv6?*G|5;l)+f#yf@mZ$hz9lrhl-vACv2H(yS6%PJZiMOCw z`vxkXU61|#|B?gL;O@1(9R`~J&E;iynFFe8drNnKDrDi$f}lg&cldO^NaNQy;iLJ% zli5W@;1j=~E2#NeBH`1U0lL1gjtg|S8Gj4txVTUJ0=@^}Ya0yGJoxKQcvxQGZ%G3g z+mcTmyDvv--J5alXbs|Wv z+v24sXhf=;b(J5a1hIl}qkSM;?cbnu`0_odkJ4*f9tu9g3Oq*CnZwHf9Upz!1Cs7$ zUFHkX^zGOG|GR`h2X$G2b_R%nSfI`Ry97ZjHE?=iE%XPw%>?eYj)y=0zxezHG$aB! zvC*Tqb^~alz}4`78h;4u4Gl?#7mpu&{J&q7fq~)0%ts&pd-T>Gc#-h_UKk*AdhIpGF{Q1N$5PHBv^Ux=LLGX!io}E`f2m5=1FMD(Vt%hm-%ghhHw$rou zFJoyvXaO_G0MPN1pFH@r4mcis%IwnlA7+4y=KD|lg5d7S3&}?ymkNM6a6SAH7rI?H zr15Kj?F5BWZ^i8w?;e7cg58zI|Nc@Mzy8HCjx_#oRuK(J25?$@+5Y$cf6rb&MvsFJ zIQX{-f?VR$TgdFed4YdhAXwCc^AP_wM<$Phk2pLyFMyrr33k6E=&--$_X;qlc{aag zaq0a3q8wr^)P)fjKJg2N9`Ln%%HR6!AGk>a4wRSP;N@i>4G+9*0T=7wV)(_aa3KcY z&KEwNKRtR)-yQ>PE&%lsj6K0oY7UJWFx}lpT6aFD`&(q}vejH4yP5aPh++@m|~Nc+h!E z7r`E202>QhYIp4@tPwcp-cRJ^ThRFy&(8lIo!24jV6TFfo`Nr3FFo+0_6exbbIhmn zNAm;F`rRGAt>5Y$UxNBSkn$gNSerx?Xq_T|3utd@cj+0BP-^Ut|KP*DNtt@d4r-9v~r#W z9?)HPk^AEy(=#eSd#xV%fCA;%i(lnJ3}BbHx`9$DY^oYEi7^3uJv+3y#Zfw^;f#W3 zC;LkwkjidWcDQv<=ELGo8e|=!z68(rfzRu9>;$hUf58RrV1qlT^KXDc|ENc|Gw5h$ z&@BWnWY&Pj21+$R^K{@bfp0G~8F?8%b9gGzKAkTdV?b-gKxldg_npUHG!$F;#0-T8DXzhM6ZTIu4f@#3BEU(n#A!HcIL25iemr?Z72 zXgi4mXkym`y2HSwqdEXGYzD45JDovWmtLH`2ObS^>^%D7&^>UNID$sSTW>OejuqtK z?*|=){=)pXFava-WNDmd^FNjn7N5>y2T+*z+`|m$AE152ka3B>XFx-it~)?ocF+lV zD9Z#(3qd!;q0Xu~Hvi!$ne*}qD`@o(c%7iBqY`LA*7FyQ+d<=(C50Z{rfN{3Jcv-7 zN4F`n5@gi@sCARhAj0r+1E{W_uphKc;)Pr5pZ_m8K&|65Pe1+#xjW^||NpL?4_!N7 z>;&z?@#toq0K{R-fI`Oz24TR`z_tDy+; zsDel5VV}+l4xi2f(1hCw(BLwtdmsy$>A&UE`3}6+1e}3izWK|;z%TE>@Z$4N9tO~1 zD5AU0{0DEFJm%5KdQCx#;l<06Kj0(bJ}w1q*s(pNpvCZdGiV>D6Sy6rI0u%s9d7>o z5Aoj*kApwtK|>iHpp%x``@yZt|0P+V+wMG?e^izQc=Wngdo=&3Doba1fHpUu#;?cAC@aZO7N5rd{$v`z{t5o}ogm-$ z)-LeqyagV_J?6TA<3-5@P!)x8Nck1eAyA#S_CbzXv~`{(2HJ0ibfL~m`wQ@Nl*X@j zfWJ!&e2)^yBE5tBU7)@R+v$FMpQYBeZ0JbG=Xb%-&5 zmRp1J530jCU+l)zEe+KT8g=yOwe6fK#_-Y!+@%7YLy6*Xwinfy`fr1mBSQkmqt{lm zR*c~#6I{PxQ@9l(1kSaeY$fyT)KT5 zd^P{NTE493a%}$jm%ld})JEgq#_ySY#j*J;oC%*z5V<@PKFXACF#9ftg|q9-9Ar7{9+roX5l9$auu3^S^KMlNXDX{`~jp zb)62rDD&8hBaox)JFb9+0Fpm|2Ud^2@H+=8UT=Zt%)h^I0P#@QDT8+^H>2FT1ZkIe zpvD`=3ua8s;44uO3GVE4F@~32;I1cVeMsp7{uT{TJ)Zmn95kTbx8_eD#_umd2cW{% z6S}sZthe?|KC;U|kAVRklxdwItP4QF$KQGnR6ZqN1uc(j1s#0t-m9VkKG_G6zdVx< zdM5t?TL8Mk2psA^Jvt9TL)(WDG_DTn6};GVFE*?-9g zU@n3l91KkgFLc4mTS22e;A=}flP|b*p7UY+^!;85zu|$-gUtsRkFjtWSbiw_?5cU< zbOI4tQQ~nN+yw=#WoW&`-*Or}>oymp z(6jR^WE;qQP{sjo0}%yfLC`p~3?l;rXg^3xFxcQ5CHq&dzu)oU_jn9Cg015+NNe|AkepBFE3iI@4(%5! zPJYQyq(G=au_lRto4 zZ|4nfzsNlO|G#VN|GH=w$N^415L+PW*p+|#7nprMo&Q}rz%KVZ_($M{;c3wF2aq{n z*Z6e)?^p`*!V8JhpfjXFCx>+2Xg> z0k1F!0ZplOgX7uofNSf2pU$Th91qonD|>- zK-!w?IT-j`ib3w_Hk~aAosxZ#xDM2w;ctbU9&9>EQVVn-ASi)=YqS@R5c!skpp?*U zS|q8(;F}CO>J6mCqqi5-p7HK=v1jz@<^2;N2I_QzHF_Lx75ERkxTY1P>P6aVP&ou< z!{@YWKu+ssooxkf1%yq3wF0azqV^}Sgtx(q(v$!Hzw8Ee3?Y#LONx;A$b1oc5)>cc z;PUD14F-3V&v{(@|6`t-MTMsg5)3v?}FC3hZ=Z-qO^M}B-lWgFS#1Lxbh9Opd0K! z&{|cGZc`=+Ee4-n-e-`Id|`YFlqp^rp4=Y_s)V81JHcW2q71y~YA+~kT{?e(CcU13 zb}Cna3t#X!q-QtO-rl+3LKvzaeD{;9!HZCY^&s78N8rKb(K{71as@i+rxSd8%ZtdP zpkCAwkM35m54tNjUbI<(*Jyng1MRiE1sc;#`3Op+=%Eb+u>-qFz?Pqu}_*i}~;qzz)A2*}I-*TP{ba%lM{#G^cJTN$;%aF;284he6>FX6ylwSK^v(UUT}$m77l^}8PsmC`2}i1f!ZZd|A74o4IA)T zkzc{%a8to2#C2~4hh=XssK5aA3~a?17+zlf4USrH0pihl{}|YaoEHnhr)l&;0$I?b z^MWdTN}%}{qi6HIf1nw#j>X&z3^4cjbiV2U zJLv`gF;GX>x6`NdJE#Co_yWm0jG$=}c;0z+6f_dO7vv5G{ua;(r%&fnQ0K?+0KYtg zM>oW2ovomf-w`~}>e6k}=+WH^a*c=O3H~YI!-rh?xBr6`)E=GpT{`xH63~mDqo6|i z2a-(3Qm{nv(f|J)555y93*#bD)?{`V8?s zGkB@Tc@J;^ym*7iIWGkCAhR*8xB2@(2ikh{ItUov_UT*-3L6hd2zYkhfz2PZ6oRK_ zrh)>-tJ~(0Pv<+YUK#L|$BR(#Dg%fczcVo;Ffj19Sb~%{9}@8BwvqDbeCN{n3p6e9 z;uUzt66|PC%Oj-=eY(N+y^I3Q9CouVwge5?yz=NacyR#S1OO-e7hmfCfW|NQTQxym zhi2{O3JDhe7Jm)~(5_|)@Z1x0Xa+nJ=D^?jj02Q!Aw?cM>DIn@b{Ld@ASPEa{{8RM z>$}ziw6gcy3++#kU^@evn*oK{dC>laLIg zovgs$()S0H3P5@A#qV$b|G%vJ1G10xycyhYPx!GoEc%5n*d9nYb~Ax4YHpDQrC#VH zS?6J&Uf(641(2QRUNnA$xKs(|(pNs6=UolIz2HDGKXW@anet z1c{Uvk)SD*ZWKEsK}L2S^f>sEzxiRkhvjMh)-&v&Wkkooo8H&?SQiQK_pSh$)g7ep zdXq;ttFi^$ZyebCrvIYw5GW8Jfqr#ACj%_ug2N7UF9|fE`F7U{@V8j7ftDMTK~6w? z14_fazO#Kg!7Z!y4-lVgfLej@I1)SrE~Y@u>dx;km?1n^A;G^5oZ_Gb#j}I||G#_* zTG`so+GGxQxIZ6w=^rffLJB&i7dsAu91d=ZLT?Z7=`I%FZ%G8t%SJ=)LWqJmaT2ub zdGa3O#8yx<668cs%#ij`Ju3sl zCw>730no5pz=!|;Un+xq0WB{;bwNI;$Y2A-0JLW7HSO3BYR%m8I1Vl)L4#bNX|YS* zp!1tt_j`1MOD>=8UQh$gr}Nkg4XE2sf*MjFx1aLqJpN+S0Z=Gx1r=t{EC4d42h4lmJ_M%5OnD>(X=l}oB&)G{k8=eaAw|)ZI(~0KF zJ7wouBz05-pH?HFu5HgaR$r}Gu04d?Je z6l76vZz?EUyTR8gf-1mxh@(0WfBpaeh0>n?;Pa2b6`KdN>IEH|VR?eTmGvj+QWGeER=?0=S76{~xqM=bumKUqfuZcIc8ynF(h7zU}> z_WS>T&*oziFAsx~bmuFN&ihD_<^1CH?*GuEQG0Fco{BNNxR(i<{doskSqQrS?d5#% z%44)9L-mWzyZ`@xc>-h|rYG}3&cp4=0FZPy>q}5}?lt|?3hOyC9RB(LMfN$+?6Pf} znHa;1`M$giFaLp5_u7_%1o}V%%%H^IYnuWRs09g3g$M+L1ad$Eh2V;ql|cvGHLYAD z4&4Yl{}6ai@r5>6ToEqb4iR_I1&c3(J18G4Zr}V|{>71Xp!reL2#_3jvU4%W5bz|X zCs-9Yx4n1^T5Hj3ss}O}tgHsEObM)vH5(+*YkFig%u!s2ko(Kv`7qG<5O{Bw+*%C= z&^f$+4gZ6VSNXCJbV?U^6F1sm(TkLPPzr=k^?>Fi7+%Of0?+dZykPtF2XtN-_=qUb zk%-O`u<0P!`Cu=a!Dn4ELw3JI?$I;-&Y=Zby7|I=9;6=zy2se3GnvDq+w=+tV!FiQ zIp~P#YS0lP%fR`!_5fn6`v41QKD2cws78bg@%nWBKjwOX<3-_4P#%8o0y>1|-iycJ zH8$WAXiB|6?e$Mv@J;<#V@~}*)@5`a0dItdjZb=X8^8GR0JOc!+VI;8yJ9|u*Na}T zpZN&dffoRd3enyoF;G1d*aS<56$gI)e=&JIsG|r!ztk}#7z zX&lY}nM!<`|1jWT2A~yeLDGdRIWvS!~&-F;_Z^6=zdq6|wpu;3P?}Ild zvVrEB!0rd1HlPL4S#k`b0IUP73Unb1c>k)*3)Q_$3?7|_Ue5uo{s)`(LTE1&L+7E_ zD_^|a1CeV0U)luD>@P$)g(3U!LGv@;q1zakO=Qzz zczp~y9|U%LxMP?{Z)gWNXMkqw!Dkm|cy!kZ_;kKQ&lz10z#|)J9=){_z=7e>dFz<# z1nU7iYdb*AJV(e0)E%vmwiR>;{`59bWri|QGZUl$W6&Kk-wbMpYQ%v0 zkw-vl3R`SJY9Y&y4{idD!yE%m*p>)`!dRgeJWVXXz~2g5gax|a(h+(}HF%D}qkAuC zC>xQNCRn|&*#>F?xTpxg79vAegz>k`0$mo_odQ~q{Di*+w1?lPw-(fz1ucg0>HPNs zG=JTCfWKoYsKQN#Ofmd_@p>!Be_KI{z&?Kd;wD(68WfhG?dLCEJ_en3`HzLa_5yw9-Xl>j=O@UAQ+Ch?q_?k0IU%_{0?dgU;O+3Kls{L(EOrj^AU-cN#M#BJiZ0; zEX(MsEH8|0QVr^hNz9klR=-)HE5u$N4!mz_RGoJ<$1b(D_dW zp!1*Hc^O`EgS2a%_=vQ>0GwXH=RbS}m7sq>g(u1xZ8r=Lv|cLV0`2POZvox&06NXg zr}Htmmm%-b{7a^^+^5&{s)-nQp474V3A;ykHAku7w<7{2JRY#+w9F;eFBD8bD{NkQ z^wwTK=6XHVv-1czy}jtz0xIahHx{1-GoQbh8U)G);7V2tRONR^g9eg8ro>l@qq|<>#p7h~ zxoM@rpp>`F33Qg_55{s=Ps=+cG9KO45-$!x6&QgE-&U9c72oa@6#?i@IM94xHw$PH z7=z($h;`u0s6po;s(|axJ$0}cGT#03|BHFYJ|eHSf!&uF>e=}foNq6CG`~SVKM)iX zB^Hoz1JKF-pi+dtMTC(7bXFrHe=F$j3()C|{4D~Yyw%OBs17=WUg5PkD4l^uCtKHp zQg}D(2Mw?UV(-ws7jL0UuSJcRL7P8(EMJtQ!jd60-ke|D*aV8N=Pxd72Gu~ew~WL< zYC)r%u`m68gNuG}xFN-5X$EL69-;!2$Vll6~YIdHvdBAC`t@K z);oncc7krI>_k5jr3(FS2T<7!T2_4Fh0ASFDO&0PJ|o8kR6p^zd;k^T&3{DrTR`if zKs6VC>k$S92FO`C;Hwt8S(_oQd94hY&++L_y#O+!bPuQ{-r5R@DK|(I`gA^rwgy~5 z14N*c_-fC)bmX3g;!cll)|ZNqa7+Uou!Lw&u>ORGH>l+gI*(+f5=5OHH2fu@ z@_L}sXwKn}$TcKE1B{Jv*;~s<5vS;o1CGrGyhSbJq$vmkp%`gBB%_ zLr1_1L15=0gSH`_1g&_7WN+|sg`2+}Q7BpG+Fha|;L&Y+>YpZqZ+DFfhhrn?_{s*y z=4%X~(;r`a1ea<5Kpls$AD~*QM1{kp^AlwA9LwYX|DmTIfx{bhA&(-YH3z){8Jsb| zu6k*^I+ge-V7>3pmn7?K6!;g?g6GYw1 zg%438A5=a;+h3nR9YW9<>rWj+f_-|If)>zwbpG~ed@})@Bg{byY?0Hz3&R8ag5cF; z&|B5{1zkJ%1zl(G3%ag&VO9X%$_l;s_Qi2f-@QAu!Glp4_1p>`kH#Y)3qZ}u!!H;P zeuS*o=`|HypaHrXQ@m1);iaXh7~=eChhb8c zHLn1hvj8Msj3gdb4i;|!iARIPL1!I!^x9@X)F*(%ok8NDW;W%F3rK_fxEruGo8rGiux6oIy@+~36s zcC_ilaxsP%F`+`Btr4J;Lcxo=PkQv4wv~%9ymSr)owNn+uYh|DFE@Pzjcx*M|MdeXBv9o+c?qTQ^TP1Jan~oHB=kZwkeLCr@(i@hEb^xWC=Pg6 zev@D*vxkHi^EU~G7t=m~x_qGa2=e*`Bi4U1;MU^&*|0$n z){Q^^zbM!PDUaasAHdA;nZJ%V;s+=IG%lp^hg?kK*ArdvRf3^R4&-{!sb!$96UY}; zUnLk~U-rBQ1+)VLDD{GpY84xQ3#i2V#4n(_;VaA>jT=z29+lgr@$22F(kNAfgbZlG z9_R|9G=6>38h_Z$*S-Am3{cm%fY!-@T>s_^$o1#m!Scl? zew_mzy`p=~BpG5s=ZDSs#4o^d=;hjXObi~~tox+F;nxqkmD7aKtG**ii02}P5?-u#FWwCWK&N>HNpV(S`E0y_-qJ5>2GGj!g6F?qvB z(8-*!FQq_kMx2+B4N>{}3Zxx{g<~IT_?)ZYTub}IX7eRZ$dp~50KEq-?M3nCvh^=?4 zNDH*p=m#j?z)N1hMcgb%5mzb$N;mv49^c8A7H>g;2TAXr_~TAMaKwR6{1FE~@yD^g z_$bbUej9JGKFl<#j6H;mX8W%qC2VVNbA8{JgzWKx-c_xit?;w9W z=ycOh{DCJyJGxH$wmvBV?ZFY9@C9trp%>R*Gckb1zYl|EBu>4?jC$y0(#=N{d^(?j z8ZR%8xPAxUcZU`{p!0}9&3lmbV0AUGK|uuRCmX|i>n!}OUqLJL*1ZDdH@yQ@4r%-W zKRi4CcpiLW?|JZ#Jt$1TonDV#-v{6%vd;!onjUurUB}AsqIH=Fs89Iv2yERpXl`IT z$jH^;T7y+a0-Qr-r^8A({XVfAC~x zcySwS{#0!87d#>1QSlxe0w>D3U)X|eOMeOWN`)BMD>tXYyi&gkWpfZxdmY@~Xn>l> z0143(<)WZkLh8K)Lpk@0$6$BzLQIx}n7kftvg#@<<+B0QybUn-fz3Ph4s71xtssBz zeF1jqIZ?1n`{CwYT?sW0JiZkQ>OO*Z&v-Py;Q-C>f{!v+b~SwK+o_`hI;z|QJksnK z8~bvX2QvdA0fEjdhYdM#m7W9j^iCRH0{6E;<!0R*M@pe>`L6tpg;#*L0?);pI z;l;hppe7)zzX&+^9j3q%O4tfeW|l`y&$#>-3CgnY-2f>5TelUj|D;YLc`)MO%k|IT z{yOQ=c?cxg{D2Y7W8e^I1*?RNJ0XP}*nf?0K>ka9#>DXAAGq<&nlB9Y--O99|CKFA z^B?5QeDKx>^dp!-(;^-jIF*MOqP z^#Uk8M1iaT#qfzw{E@twZzLE#@kg9!{>@an47`LMw1?F9#ETQ46Uq4BUjnrOPNebc zU*K;C9nS|Y7R^CLW<1D6x}W&tPQA#@ zyDvOk;O&YRFRWd_g|hF97YA2@0t?jhyZ#vD0J!_X_6vi|w*wb~JHXOt?)&V_%KRBX7FCK5 z;=)fLDJQ5DXa|=^ujpgY2y(CKHjtD$R0`C!_UIJ_ofqoSYdRk!#e*v43kj%BkkrQn zl+aKD?dl& z=$L|DQ#p`S7E}uAcx#9*PLPy8suTl6>Qky1!wVBssilyBx(kw$gh+vU<>0h<(xX>2 z6=LC@R56B^KjXiE4!cC;x0lPohcm+S=MIolT2Gd+dvvpbH~Dq486JSnV}Qz!&J(RC zOSnPv!Fr7RQw}g5K)SyRBoE5p;Le~&w`>ZRCdwYV7a(oc3?=R!-L?;2XfnKbeUJw< z348^_wm-zf;L&W&;BlPwzza>#!aar(J(M0msTRmvCqa&ZxF0+|(e5tF@OmAjz6Xt0 zgnNoIygvSdVGX4G^ys!NeF2?f1dUX_Y`+BB6bbh)$h|L`m;C;3cpw(}wk}Y48VWuj z0@PIwg^WXkT3{aCrZOP+>T`gn*;q;ge7bd+xHK7FYkG9EYVv6^cvwn+TyFaHIc(Et z=lvH99NY&!wesC}Nu&1RfL+LS4D-M1)oM-0|NPEkp*EF(Q1H4K@u=nTx z)&nKi!8b60R70vvWEVr{@54Pi&x1zJ!IwS-dw{3UHIA_{90x@#gC}ISI{!X){(b(8 z9-W~(I$h5=b{_NSb!YVHblu?7>3g8%WJw)lF}P!IiOTtP zJ{CcbUY<_SSy;V19v;cZd>CJVHB?<_{?A!<&!f9^gGVQy2l&E3cE^T)S^WLy!Lv^P zLizjOFo3q9x$Sjq_#wdG&ID>e^or`MNiw+dZ#&?X%+dteW&od0>n=Ux(QE6cF3Hg0 zd-_G+ijV*KxA~q1Pu+uVK5^`3Z#}@@3fk~vcmU*^sRx=5FgkX!dnO-o1RW~F_=0~Q zN6Sh6R?yryc!C2GFAYEAOO+vpGpb86yf9hu5xiczrI?X{;TSXH>wOS)U~eRU^Xzpo zW$@^Pc&E?s|NsB4y>3$+8-DPVJ9_krZc;_}0Bk=sg16t~)%MYXulQj)SJv|CeY%9CkGkeB1la4A3f}W1#!5xWNl7Up(&y zt&@rs09BF44}c2P*E0N&^Jp5Z8A_GGJF$;5urM$%fbUTQ&E9|$8+g(Ny#E%e1hftb zB)bE|KvDt^f2cZek=T4h1H1_rN!}hL?`u32xQ}T$&8K zbU~@C*R-Y++(ddYr3>x_$h{>X|MR!#{{R0UVgPfeID_E<@CH4k1ul^JIY?FpjowIr z&a-#n-=>V*ak*i5fPb4CqbL9Rs~*f@92Z`A^qPn_KVWoh_>;`v0=iehvEh$1e+%e7 zo|Xe8I^cuvlR;Ir--dPSh({1D6-)7{|{0e+>oI^*!{|+xkkIsu8ng=~vPu4$p-3?7= z{QKBEAa?_y+@}sY(hX@cdIDMtoEfsg_`qlWDAx-JbuU$Kfm&=X3=I6+T|svSFfhJe z1}3RNE(5+fXzGa{P8Fn5&R6j(gKBmq~pk&y5L;{?KV_))~2I&O#!_eIY zasht}sNVr9Y&t>vZqUL4bUPA~BOaal3|g~{%w$GeW?QO12A~>)?NUo z8_+I|`nezfgU`3|K)0R0vlz4x6=hyr3dypi^FD)%t4`3e+t=4$TwMa1eMR(lA^kzn zjAip14)E9_=oHca{Gd}r`CHE&0k!PeAxEAu@we_f0-A~a;?Zr&`cRX>vGXdp(tIJn z2&o=Rlsr1`fd&I?-?fS}yr``G`5#n$xj^q;0qQQL z8$p%_ON2ZuMUIucfi#97=@DuUJb#1QKP@Lq6%0X#(bgGG@a!}>;K9G%Bp4-97jP-6KHfD1gih^#q;L{1kExFsM}n zxrV@_v$VmZ6MU!=phNR!{-Qzm3VKGjxRqc;k)7an}W)I>M%=RLrwCh|!UM zn-ilWxNGat8M?x=^OCFK6Ia9kEeH5pK!;s=^p>vh>AdV}_}10%iAQH?hpXX#pU$a} zHE`g==h7zd@4L|ainI9_3xAs?BLjnt0)LAls4!@L!{O2Ey5N}W90s3m-wqGx8Kxe+ zz8gGxOXqlW-aqaNy5EMuqc?PiPp|8NfEORX{r?{q@6mY>lmR=mL8f$cj8z z&ZGGsV;!e!%Qya3(3*6^Zyx;XeGeEO@L~MfU|r$S9lL^m>H(i#8$M6QBmCQ#TMqEI zCW02NcY~b^Dx{TMTfUXZf{wQ;5%=l*;olo$%iuB7^ZQ><&C4FGmwfsCe|t37HZbr{ zJ>&s7X_J9}>H&pA9aF*AbaYRiGcxx4G;LV-sEpN3R=S4`IGSg zm+Nd#(5b8kAF?(-VD@2r$-k|Vu|v|QGm)eD`5%wYLIKVn9-V;_9gd71-L)G$_}72p z-zM+L_yy#vE>P@&5+y7lc9(V>cbx-j?s{}j1uggR>Fx!cN9fZH_GuPqrzI$*zlZ|$ zGdqt(M1j(eyhpe14v*%ajCGHveSgZvovu z3A%~R&!f9O0<;RRI#%D-lXZHC^yS$t0xIuBj(IR%^yn5j?$LUwg3W_j5Y%L8 zKEUW{d9d`3N9T#di2B-H17yT&kM4R8kIr9Sy(Z@!za3;O5%b_*&+gG1&f#Hstwb8p zzTjWa|Ns9%yJErTsKWdK+A;((>R{<>h-z@Z(WBd4 zq;c@*J4 z!`q(C^%4vvTKtgqJb2A7=n7bm=EICH{((=qeGgjdc-Z*Ue^2XpiK4rprCOlV06m+J zD|lKSE7}8UC!k)82px@m29hzngeaR{uKn^KdHEY8JV5kSx6WKlcx zevl45JUw*&_UH|_@aQc!@aV2r08P)m@Bj_kv>vED=F#n~;L*)m@f)<5$@F3^s4Ecq zzymZx?xA_=#exYx|G(g#gObF-^_@rOQ}B3Y^Baj5(xBzI&D9DFB`O}>#Rj0b)Ar~N zwg5T9qx1O5mrCki3_ic#qto@p3(#Uru>Nk>7q9mt!XM2(&}2=C zGvqXnMsShwTZF#_)bjgwn6Wge;WrO|OD9OYo7L)%251}0i!RVmP3wVDHIR!84}fj~ z2DL9+Z-e?}tbhJORHZ;vmE3|{=6N5a_~icw6F_U1Uq3{+$D^B-@h4cz>(k(T(#_E*$(0uRh(rS-x);AE(ya<6CQ?kdS^Zx$;ftCX$n?M`YJ3;$?9si4{bRKRw zP%_`QGd07fTlLI$4bUCq44%z4Dhwr+9^JM<*EAsqWc_^e|NjeYxUD>wyw}572qf&;MU&IZzVj)2-~&t$XL227_mFEdxVIsYkbM+Eq>P%5n)q(BPm3 z__W?CgeVCPGli}M9575C4BFIf{$oK$gZ3k$rCg{K|k50%*znxP-mjQTm z_JX3(r?VAY#dm_M_?81D%KVz(Egk%tz771Ep%eHuV;Asirf%TZ%ss%bS$ctAv-SZ} zY1j(ddhF57`tQ32Lqi1{K<7GCYd{i|@*Gefvf2W~<9zXSHt2ev zQbEv(nBX;NDc664*MGd|?)vz@yI8=Z*VeKEJOyKT;00(t46f4Z`tSdU@(z@CAk`}P zOucSdZct+Dy#IoE!pHwUy*kVuz0NE?mM@AWeS1s)c=VdC6_#WG?PmEr732b6ewTMX zoey_`{0!;H^xEF`6JvPMGUMZaAIsN860dE+=^4~t1=XlI{b2DDb^d+U4h{d6O4uA4 z{>PL)*dGIKWi@||` zp;UbZQwi(0BTOZ7kYvz#|3%<*kb3?p2l%%gc+ClIFM#tkXpy0ass;lCLn#}$VmbU` z%M?(7gnYkx^BWGAZq=SknxMluOYEC%XI#=`U@Xz_?EJesUz~vfWTXQ_^J~TuYs3Hh zUNAE-yx>2<&){OI8gWUJp#;>H;D8qxpvB3JW#XU%@i<_E;4cgQ{QvLR?J5GgYSgpa zRRTR(_1fl@i8H)DjXb^w%HN?Ly{13EiGp^lbv|_raqI-Iyno>s$^#PWH7$?=C8YZ= z3_^JrTw9)$8iUeOuc;@<{$5cnEl{)eg>Wcn)bzebuj!d@q70C&axedd@IcqK`t+*m zKLZsr_dR+=537O(T0!&RcSCp>KuM$XK4`o{bhVEd!;6zx#I~Y}Z33xVh$^;9RgB?9 zFOpcaN3ZA{RWSy~nAn%4A)pxy_;^jPDJQ0X14E$xZIFcc*C7POzl;$7dTD_Ds~iIJ z@13u3|MDUG*ZwKYzn4{D{(T#a;$OE?afTN+QN`YRi!r=7iYgWdQnwLR>;_2PTvV}T zDq;*TI+4UcVK74l5(b6AJh1h|y{4RBG2%Ng80LQosQ-ge{GVAW&fw82`U-T@!+{sd z!Epb7LHIuyDZcHW!2Pcb_kR$I|FuDWxQQxut3;gP#Zgo-F_5~AsA9X6#TZ`9MG^z~ zb&WE_udPAQ_y&~+kbxUl!?&QOSo52T&b=w1j>~_K&d?2@yLw7jcy#*i@B!cE=z9XW z)R+NEm97HET^m4UKByNB8dUMgD+gF>)%X+2a8^k_UV`v_~iSi1`;OlR?Ej zm<>C~zx9AeH(0f2=kbyZk6s(lr83~$(<^cpY?$Rw4}Pcfj?G6IJv4uMFdl!=*YWYc zi{)C7cT23hT^qpXqkIB6ybUxm;nD5e;nS_?(d)IqI#-hUTV!J$OD}XEL&dxVyKy9A`r3xOsvg)2<4ErQO^?T?2 z7sYZQHLPbK@+Hqbx@|vz*s%49pg!CCS`mf@+Y_fX85lqYGnOiX#`8g?HDpP6sRVTY zAgB!n8J`5HV|ab@#g{&$@*CFi^y!_W!qD*lzenR62GH3<%{(d$K9+Y%-(xwC7~JIt z?bq|{`~ymQ;Myx~0(AK2`3vJ-(80N&^CU`yJuQzE)qzt;=bh5Kule}pAtA%xx)!vF zHTj$8!Dq~%O81=ZpZ}f*pMn;nmq>c_Zaq*B+VAucG`79C4P@SNuU-}n577A(ptgf6 z^2M7|KmpfyM56(8h7HDenP=y5U(M&9y`Txs^B$eOJL>=ce-RIAHg<#AKA>aSz?*@r z+CKjG>TG!nvfDTLon!McMyF#e77Q<~LHoTxE21NMF;u)X2X_M;81{n_>I*iI!JWs! z8~k2$_JS6DLDySC(hhhpcH!lJl zk7gf{9}FJ7H7fib&Cfr0wB9Ze1l>&px*F=)i$5(Odya$8>GkOR1#VnGT9pC}3=CnhgI}HY;252|<+PX)e1c25YF6H#-P5l6F2ftA2`S?F= zLMW)fgU(if4|T6S;n8cm?+IvmPw5SCB7G4d@%MkH>lM)6Xy}#dZErLfnkyt2`TId5 zb}z&yLKX^i9&SBQ8oJ*ebfl2*1W+--8uLbj0o*n(3GJ@E@?vcRNHq3@M|bHB&fHW6?G&dj7fOcg;nUtYB_6j)6 zI`6*_tpE5Q?BLG(FIek8{(s%aFVEo9t!nrd)PM9n0agbpz(qM+K@EKyl^6d&CU(2t z@aX37XgyhCVR+l8S9jW7r2So>ZUE@q8Bmkc@BpaAdJ3#3^oB?BVUKQ}LmsUsOK*8} zvz~sV!2oXRgH9rw*7EWH%cr3Erx)5?AOG(Ljs138yx<2Vs$SEAJaGo7rwp%`*Py{9(IdH_!6b_;2Ezkcf-jcUfBYX21v&ul z|LYn2+m5}S{9i2LxILf5M}ewHKs~Kj$Fm+;hVN{F<&CKJ(YH#vj*Y;1^>x08xUjCtmD_ zoO5#Hr3Qmfuj>ZTevxcYTHv)i4w}d}wLh-OupiV%Z>V5q@aSdT50d3~y>Tiy=8$OX*`f^KFy@?ufn$N%8zc+lDU8l9}Sj)BZX-Vx;B(R{=K zoY@flD^U8g{hlMv0KQKXG9mz)R|1PK2Z`_c06pg6_39UO9Voqf*#2->{ez{NX|R2L z1XOd%dUUfsc%i}I(fPZfLXm+VJbu({YjRAJfvH3bG-L^{zxi8bL1$H=UR(elPwZxW z_*8=dd|HJC1AogBCQwD+PeO42YP$78PGdx1+;e0o)z z9U;r8Q1QqPwV&HZ{%@J@r0^Ck`aRfAS1u6)Sy*N`U0@}FX(Rl+rh244wWOuKN zG$Sabf!0Gp^pz_3^qTGw7GnVK9RpRxpGCpu%0T2xp8NEcLT;1;U)uQGr}N{Bf>IF% zs4;I3gRL*s^yyVKutq9xz&j^F?pzEp?+8R8*qt6nG#Pw4KZ3VgfSNN3VDpZH4l-8- zIrHLw&~+CLw$Be~GBCJy)G~NcyvZc zcyu;_BCXRy(UE_fj|xkNhpI<6uf!`*(ICqSqBh9y!$|*1aZUb zHc0t3c_%vqXx0&QyXZ@vzp!%#UYsrkZ=ZR25xO1#bU%9C=l?HdKsmeDR`0DSgGXoS zju*}>;CsP#yaX-He(|*hRC>Ygp9pgVuYf^n^}*W#JSq$x&2Iug-CKJx2A6K$*@rY4 z_JLZ5pqrz6S$XZn7?2CN8-@pbdbeHxjYjvfZnp#Vkbb9m^5>lcm2?L@dRe`gBpK59 za}N6SuDx*o|9^hX)(Q9j{}1p;b_bp5=h4mEbx4yT!0^BeB}Y(K>XA?9cd&IHy{z0! zk{}mI9@1p+>1Ca4C&mCd2tL3g*;&A&n>PTe^MwNsgHN~V#wQw}@dJr8{(P_<9=)vV z(lj6~G>=}B*zl^b14;q!c6);L*!^Fja#AL|208Zr+s#H5m*Kyods=(riAW02-H7@#wZ) zbP%+D;TUMF5_H**@6NdR2kd6{{R2=(ig0-b_clr4F_E` zfqdBrhfjB%gm3GA{+1R{#_MJ+eGD3iWM(Mk_GqpEokpDlTHN3H|HYl1pdv5=Rs{05 zI)gNTP9iS?sp!?Uv=w7`&5M|y>y2OqxvBI1i;s2SC2^&1e0p^yL8{n6=gsy;utVi9 z!sI=>-32_l9RiRp0_Sf9-PPsW`j)>%33M2DLoGuze+#IM0GizFHJ$QYl;MR#6DT}9 zdRa@BiZS@`yS#Ah_7m{zyy4sV5}JfWSK5Fs1b=RL!0`5qgLXU&uZ^MOT#o$PL}WmX ziu=tk9Bm}a#Cx4C*l?B!H2jJ$;dVU6A`=f8uLJdBd^(@MI8yx)bizQ0U7L( zeA%&cQsp50SaKns;TdQDDvG#}ysm*d@B9?b_hz*D-N9zQ%RKa{>f zvZeX-|JPl}?MaY-8f=g60ksjlJ-S&<9%(QfW8Jz(lY#LVsAgwf{Q#7bnHWmhASP!mc)7b2R5CKa#?>L_r-RHdWj+jAPupwSX$2bY z0X6W#eR^$Q?bT#(4D;zVjkXeFa18b7`~=#a^#|Mz1C0@Iyx;)eE&Bh3KsY~x;Q^n{ zPhdHZUQ=%?F@_hfKzE~eyMWHx01u0U!dSzjyF%i{0;k`gJG%6(z?s<-Sxskv#0y5y zJXE)=)MHR%;Zcum!dVn)3+|?W&#~r|xutzs*%Og-- zDOwAnEH9J_z`_%BNU`OG5-|_U3W?HB2n`G#mKRE29fr^MKx!nkYmjb$Mp$m|(qv%Z zZ|Meg_q%0XK+$W>P*U&Ht$Ja%CWCM5lagYOmS^P)NjH0BZl za>Oxa#!_`?x<^^dS1JZt0}Cz{VCD5OW`@_dU)0s2w|_z52`-btH8A>o9>~A1cY^&3 z+8^xEEgN!QgQ3Bifxkri|T z;~=vYe0o)TIN|NZ=PwR(gTu`PX0A_f>IGQK&ZqOePv^rI4%y)LBFGq4h%!)nQMcY4 zxxEOwxeyc&#SruE>_oWp!%k3p@gdCA7ay`fQE_sICU}K)3Cl5N2GIBy;tZ`)Iiy)g zXt~?@{6)sX&;P+??~8ZU*y5wXwj5+8q<%q;91fpu)ysEb!+P;P-MX4Z7y( z<(X(vaC(5{N05H77m@m47RU{{6QDGh4lfzujg;61SjGjto-fI85tN#bV2)Z_**uEM7vpKu7jEiw>)}H zSH*%_37|XPJaRyru_5u@Xq}RpRLb8nhnaz)p_;{(zvUJ)14E;AL1Jlf>HdalmekUn z4b`j+{H@!jfBf%w%tb|k5j=zfjpv4H4qN^fHAawbR$KlSkf{)JUV$9Y{DX_XEdwme zWy|044$NY==z0_oticagQCzi8(pCB^gB?mdvGv9y>CMQj0V4 zb5cAko!Lqg8>;yj_*-f~BP6}m{JTIC+lJp>q?UjD@7U?0BJvV+Rx-al1JqyOMGOtq zEa{LYtw(P)+l$CDP-DJ|NZ~}axG}V0DL@VS9xMlUS?i;v4^EFf9qY)s-S8P2L4u%Do}7S!Ga4EG7JnJ zsOpb{3~ZVPYO+D(8?DO|GfVhe9U*oy@VAyvgM_;Pa%o zW|DVc@BoE)s}(3rcNHg=rRtWX=7L<-G8^nNP|$<+Ff~+j+VZywBDLRlCMPCm zfK@*O8PNQLkH7sf$j%nf)y*#-f!zeMcOICF>#)>zF^P|V-@`S1V#FN>#w{O-U26O07=h>L;06?6>{C;%B5Uv?wznQ62xOD#&` zZ$0q$|Nq8n=A``MRQ}e@pb^{NY7SUx2rq@C28ow}V4a}#X2_|Ezf~MGx`2|h_*

jo_8lpW6uAiYB_!{5*0JY}2RnJ}4VED|R&yH4MJMs&%sC?$n_ZM*F7xV%3 zEZh}5J6%*jizTf$fD2-9y;!G*s24%Q#-MufHzT;b7J(=O)mx$mE`Z9wV;tnfrb@zB!xitW3|+< zf_rCkLDIdl$3df1tp`e_U?=w8e^Ct4UjtImdI01OTM3YxI*+}O5EEkX>9&moNp-UR zS`Vt3{)3v5roaA)Lf2z}>v@oc+7NSe)`MJp9Mrjb;?d123epQ+VAU&Is|&8QAn^}( z|7QkpIJ{X0_8-{(86Zua$6m}36=DE2-+Vg3haYAph%k6`vSxu~yID6wG=RhRnl>VQ zLF2WcaG4D;w+EsOY_7$6MEhF?Vi?$c-K=pCRi#QEy|U*vi7}*2fb>~A@4pC!m}3J` z0XFBuI)ph_;zd9sRv-TT{}0Lt9-XYaKq@;AdvvohfLN^uK;y}#C;md(gYfYB{htry zn>%Y^{_gDs83Jn*ftJQ}_JXe3c~J{dJlQJ353J7+SxT zsCRz2_`>1aF~$4h0#;tY!fyQk@7V34B69HsxE2GkWm*sL_r)@S z?xp3d=X5;oq9OyT>^yo!XKRBG0NA!Qg86?Ktc8wU7P zMj21u1Ro{Znh2_sdTpP9q@U)(rB^|vogmVuLDJU>1wkiZfG4#;L2bHAON_yzQ}o>$ zO@uSc)xel0Nu!~ZYB3PHw$Cja?cW`SBN7W(`xfuK2( z&O;u(rt+cC2}8pJFJ3D7heFP1y=&jLY=w$t}T9e^Lb0|N9V?&LK0t0_bJ}4+qx8gu1cv4}D zjzL3x;Bk3yx&qxl_Hr?3Onw3=i_a(khu+J*plM$h(B$zq9&oBL{r5_O0kpLujX&R( z>9quC$jPIVHDI+S1HYg_8h^g&-&Yb0{DKt%AO(!CLF@tre!&WZZdT^k5)7U04lic^ z{PVx_cp@D&+#2B>ZwbxW%1L2d>d;kBxZ2b#LdZrvm;;|s{ z+`s?-yL7MR0j&)5qvg?3@oxu(N`*jie5K;o|JDPg>JYi^sUXFkoj1TU zPv9Jr93;;0f)8ZeL(nPey}IYrK{50GMOGFl>6xBV7h~8D=?Q|y>7U#Mt#o<+A_kP9 zI&Xnxz~<~x7h`yF>@Mg!h5Ik;@<1tzReq%=!^`7;{{MfWn~l<3fbO?wu-&#?6SNHG zX-T5tr3Tw)=QJ1?O0_zFcy!x-UZKg*a-dZG7^}ugO$J7f*8e4}FU+oi0)PKG4F<+t zpouY$&I_Q`2%vUf>;DoFetCu$!q>oYzhwoeUie@7{ut|v6`Bl;uR$Yf-%o;@IKk?$ z!@$+zk+keZzgI%Co zgh1mCx*&&_ly|fGuFzy?Jy06u(ambK9OMGfeu!S#qjK>227E$m=lvJfKf(1E4@4EX zzIgy*cOH9DU@gMXdZ5I_qnmZ=DGi3>te=-_f)^wob5LYF#wxKwlYwCe$ot1wx17}g zwNGMyfRB~{rBC4p|Np-REsWrTcs5N9=2^=)uxBCd2atbWs)Jjd;PyL+-(af_@>U7o zG1e`hcsa%z3NjwN?-U}>4w8qDFUzZe%0ck>GI;57=U;F^3|ZaB@nYv~a7<_|*JL=x zn!FqyiG^1{$=NmvEdKe71_R@Zd!Td6yJeT3)L>|+W@O-R@dcH^-M06ZX)?SJTm`Co zY`H+8bDZ@!$O)jb>eot;uxF? z_k+}S-uLNMeS1cO;l&QH65E3y(c`T1peDRn2odgr2+xNJcY%djt51Puy=~W=0nN0r zCPHPwWBBqumd{H$U+aU$yFd$=y4^WE!1vKhxVF44<$!H(ebI0c6fn%7>)|XPmtOVg zwzWG08XH$NKLd*G*fXFN%%Erm8_4lm4>bP-Y7yZu&j7=`bEm=P9X|~+@9k+4&3gd8 z102bHvT9vjX6lVbK)3E$ps`@$w?C;~wkUhMh3%nk`2wm~}Kj`8D zU&}8gE}or7Ji47ZKrMU@pH2nWmbWDrJh~xE>CeBIl>;gkOOCw=jQ$8(Iq%c?-=h;$ zw|c>;bwOp&cwG z?PK}4^gVd61~J|S%CE5TrPc!_1)#DEoJm81eY!J1r!|xWcLx}>UMlhN?EGhV`!zq* z+~&iK))5B9X1?7icfqq1Z^1Wua4;~GKKAK+4w_ed!5;^T)fyFn7p!1b8)z8II>Mmn z6tv2W#kwCH>;~|h?ls3y#}J?7hoI8b!lScxg-^Gx(s2#QIuf)_qDSWk@Dd8hAT8*= z1rO*X326BA$U;ad3mV^C@)6WWfRu0Gegdchy!;tl&d!0T1DCT2i$E=gSok=tN9WBK zKEWakKAqn^I$bxs*kH&DS}(E#c`P*qq93&WMD@Fb804gFpU&qmiXrBkK;*&ZbAZh6 zya~SM1~kX`Aqdp*It&`GE7b?D4{83*!ao(X6A3hS3f-{~;n92qW$YB(Zt&?%fX!i- zu=sQ*NPs4e3js9>xQg}=-mri z-r&>AnkEZgym4;m=EDvzW}E?Co@ec8d7r=KCg@}y@Ocd{K_^yE z@abK9;612m^A9u_Tz4PT{i&A#wFq3g3nDKuC!1q-3vaWwG$^h03S{DF5m#J5jQ63bi z&kYYahJm}zFK&l}x|jX}p55gVKAo>XNo@ycUrFcDh$!D~dr!;zCCZ=@^fP$hEPpF# z?8mp;9@M#d3pt1al72d$zc5G!FV+C1HOP8v$aNSVy{R`~CsKfmOVD~ak6zxhS3zBp z6E8ux;=tEOyttk4@qf2O=Y3bhw=ed`f);Rm0yiQ(dQBTV#2Gv~4;mhLaqRN{|Db~h zLH8KjMxPXA@agQ`016Ih2&Fv$t$2Y5b%O)#|u#HIg_}``TeYeDmd!ZlyzXb0}zmfnMR}2L^2E29&+92`iHDy1l!2n6{XcM$2 z3=bS*<(aR^!0@7&>Cb=9ZadG;zd_U1b{9(M&b;M1+{WBHxG1$4p_DE}GWer*V%J-UM-`+d4W_g6K57Fl^%g4bGk z@H^cHRfRsC&q1}J3b-}|Z#?5~(F3KT*4w2AK^IhYv#3DSl-}`ZyaP{zzAB%bSaHL=McXj zvqz_tXSbbWCrFdCglA{G2WZn}w}Sw55g};k1>~Jp)Bn&Fz#hG&8(ye~f>wlsPC$Ks zz^C&+=mbmO4WJ_|&1Qmfu&w`GP0&H(TCO`l$4xJs2|h&!nhK zZqZe9G#M-dWa>m4Y!}S|O;z!{3xM2Q5frT_G;U z05Z`WB-zcI0ivKL{*eS7m&YqRTazK)F{0a11bhPcJXQt<{`Le`25?&Fs0D3x+`3^s zEDd({E&v(a`R&ErAaF_qooIj3qZ@1=C^fc%)Pl~~T{=yI0bFi^M0P0rpPo3^28}V*UUBFG0KOLFe^!`wDopH-eUp zdUm@CbUQ@&biVIw1^NGlz+})`Hf*)e0X7B(ka9@<6o6bm1xSF`@D{Q$Ft~Js&GG0p zJuCrlGry2J_y50dx4p0B_Y!aL2=Vh^bN(#MsM4(--4I`PgT3w34ff?Het}j{1at=mc=Vcna1v+m>3sQ# zKZaFwrY2<620RVo)7=V6NiXWp{{P=#YcLbk&_B-lbOt23^0&H!W&^uf8+L0jbO*?Q z_ii-)dd|$iz~5iV#=v07`fQ&DLpLu-BY*Ex76t~7Sop34a&-(3-7kEF)(zS-rJ|a(E5$Pbp;y(L$mGreHsjm z{C%_87#P4647h{<#WSeVH~#bczfb2ku$X7((QejNGc*|-kGqP17TP;@x(f6LFm{Sg zouSF_;)Xvs5rYp;_UU}&(aZYrx&)+I1?mfS>i(Y&DNlQ$$(r}vWC_p!+40z8vlK?_XZgV=@#UbKsW+gt6|L8bL0mu}uRkOWu} zyv6lJ7&Jb>yJtFdxhyFA`-Aks+FPKDS;6hClTZKrckDa@YI6Mo&5HDz=B))axn3*? z0kyY|fsQL`;RanM-+BCn4)|_!+0?zD5f|RLy`YZhgz1oo1l?2K@{<*GvHDg}d_z{p zdV+e4YeA{RrSpMDXD=uf`gWH)fCjdGEI&i94(!|u$`ZbvU%|~bpWeNo%;wYi4pdy9 zxC&~u)uOc8u(hB0TmG;xFud5=|L;Gjf#v~et0A@1_JOaBW@UdS3hDvzw@d=1lIAxY zKAjIedPT!TLBk%7VLshp*Mo~4(5SAaAE?FVE8y8(DgoZ6_5B6g=l}nkS!YkvWMGVn z^zF`N0IhYCXgN^w*|WJ;f&tcQ1B;iw@#%(muG`+D8|-~g%k%uLKS0$P#45+mBR<{W zAOhJJ8Ts+QYs(Y+-KKofC`5y<_W?_V6h1g^gp`~+pEhf~2rR_7QQK<8Pa zRkUd!BYIPjhmE2A!Cs8=_=SKkI343Gj3p*wD~y{af)neBG*AAzGcRmHkV|5Z&cpmI z7eHe^kdl~hH>@P)0kgm*u}3#++jdX^{C^js0DiLzQ~+NG^$WUfzwZL4why~NqaRyA zDFYOO;CohlI>F)Q0jpA$f|FP0AK3gp=;km7-`*S*2VcwgCC(GTt?CkE=q2@emqA?v z@MZAIpeh73lK`3k_UsM^6|*JW9-!u4dlRVm2A8StOZWM9tEhNDN?uRPBc=0vy1{lr zBM{U|I|3>Jg{OdSX#s|fTB=t3Zz85JQpuK)qz&8(@aYE2fa22{ zbhrE0V6egW0zfKY2EXBh89Z$ds0Rtw;?WH@;3dnC|NlLb4|QJj$UGq5`a1C7Pf#_Z zs(IpN?$7`KU$l52n^b253M-HkefEGN2Atnt7)<^B|D_zrUtuV!XIR5j%OR;|0;#_D z1JvMBRXQQY;M@7&W&H2||1D4Pw|@Nl|NqMfP^k6V-q{WAeu0`CFWy}O_q#ysm&%~c zS-rM3siUi$7>U>=wBC^XN4#wE{UA)D_%)^#A|Y$6hP}DeZjj(yj4A z)8pg+*QZ}71%o<|-(SoM`S|~(>u*rTdjCT99Jr)P^8}SFkn=a)1w5L;+h~}|nGPeL zZ_@lmz@FKS?9HN*XwY^XTuq{qP}j}}9=)dL_z_JZ{-dDCa25bf8h3914Q6>X zA5(n6aq2(lz()bl(ArDxFQ6G9&^q?!U7)1x`{Koni=YJU`{H$f+60eY+ib9S=mU>V z-xn`xz;d8No_t@t?uE{GAkK5*@aV1=c=7!vD0kck9aVA6fr;_tOE&oVqoDCSP=5e% zMoGQEi{nV@85mE#ybjLu;QjgZH<4^qOup1eN%AWI~k(t@%Zk2ThA1^FiHcWIkwZ0Wu#n_k+xLWI#0^ zwDtl?-UGZ{6l^GXea#NgiH}I~J3xI0WWFPse;U#GX#QbjMzy~Yjc=zQwYUGV~RLs^NK$Ho6I=3W2yKh|Rgm^>F<(FsZ zu8?^B40@jt9`ijezHfZ~zn%fI(*(RfsPpLybAo?`nLvAqza3^Qy$EthfHgR3UY|mmpaaDR*goi&H4Z|6J5=4XujEueL_E}bt9z7SZ^P~r|f1q!m& z%z*(kn{dGj@Bj%{OcP>gIZ(0|)ST%K zknnB&RuT!?M{x0lDkv%~FO*IK?J7L@UclkoamUhD{_X#ppR<5h2Jp9*{Ref1LqLlv zg**WAHbVZecM9u}h!_<x|KRh$ggId6VVzkCKM(64JJNYr`ZK}CfX+X=0kRBy{uw)H z6ZbO@==o;>ETHqxP{oQ2#Ti~~MHRCLsauFDw(5o`!;4-dv1riwXE#J4=by1d&%=Vm zcdscYrhfz3q5f?+19s>O2X++y78-*6tMw1;UuAZffA6e-`o3^9#%wVEzF7|UuN)gv{Q6G^8{^R{`uG~i zGEn^fWkvDtUM4Yy7cWu8qCoz=iYm4Sr0yW9*r{ux3@_FqiGlpP=NiPnQ(4jctGOKH z1Qh=kvO@j4;1t-QFA`W${A&sEZ`B{Lf1O!j{{6EI?q5AtB>%=w0~_PfEBg5=$TEr7URvwOj^r z0*ZedS)l&ia1!j$7X>UR{ynJ=j^ACs!2S(pf%%sQ;a@uzB>(151smhhE6NP_uPl=L zJbFc4LH^)G6;sj|XL#|I86^x%KfZw=zz%)Uz>MPGM2LT*zJiBbl9^%tm01dpUq5Cf|JF|d8{^R{DtrZG87O{rk=*Ce zE85N=#_&QCRcw={02<;x(;K>oEw za-T=9=*j=03@0aC|^D#iu!?^{Mh7=Zly=Mu!fR~ga#o4FX|1Qh>n zWQ6+n!7;EyUo2om@oyu01JwCmv`zOHs z8+-v|8OXo6|GB{@Mnc;g{eMLnUPPjbF@gN+iYitIQfG)NW_3Z7;e{-c7|6dm7a;y+ zMfdN_1t2G&`1j#IsDA~HfF1hc!ao%MT0;DL>nqs5oBzT5o3jA!-+BL#{CmD1Y>Y>* zX!3cGWg!37{zLKa#Xq79FEUZZCh3SXya+`VI{;GWh$`lFUXoeHDm;b>0+cOXD-+h0O{QJHaY>Y>*X!BW+Wg!2~ z{e$A)(BGmAFFH}hW@(EvyeLH#a{;MKL>0?AE6VV~7fB4{-l6( z8^yoVe~B`@n29Q;1@dnzs#qIHT_LJi)frKS7qLiUApho^f%w<;H=2KM&H*_A#lMQb zq5cgx0CwmLf!`?cTL|&*s*hm*e*OjX@0vMq|K9tB!7RU)G{&oBb^>4vGutQ%M{6z8Z zLM?E5)`GO3g@3~0_slG~fB*eJ@~?gu*ced%_aw+Nkbm#~K=E(v4^f5}CsD;dX@dH{ zsA4`Kbqi6&R-FX(f04vM{+)9Y;@{FAX#VBI^l#t~sDB&wf*tz8;RlL;Eg}BRdJm3Y z?mJTa`geeh0rh{6gDeBZ@854I{(bmOl;OooR52xxf3Kp7T>z;&h$?pKIH>=N zBnI;Dp5qYzPW^`FU(FdHC!qMZ@Eg>>3wDDY`Xb>Qihm=a{)MzBoxj2S`)4}bzk1)0 z{2Sj6HU`xHJqEH2JS_klVRAb$^1;xLWQ2#>OlgVFT{*{>qk6*tpNdB#F1senE{~iTd28v%@ zB=>priZ1^m%J4!GRqT>FsQ-&9HVvfi<7bpG_;m!-|3wl5`S;Bch<}fMM)PmvRFD%; z;&gwH7c{izO)->9eH{(kXin16Mq!u=cf8Ogu>Ens6n$@U1yGLV05 zk=*CeEBf*?sQ-&9mIU&zD5}^EkUBGIupR8s7Yjb2_;(@1zh02`Wb-GOe{H6~{hRj*$-ncP!N!34zlTAVf&A->PLdP6jyv#lHtXLjC(;8`z;Q zHhe_!uP4O6S}(x$(d3UX|N2aZ`?u~Rl7H7XfsFz6e-D8y1Nk==$$cKZqPd?y{a;kE zE|7msQN?0F>J(AMv<`v#zer-B_?0;XiQlgu(EQsu3FHJ6|6cq6^)Ca|zXv{``1hk4 zI6Z4U2m5#N2bh0jCc*vN_W{Yj`x{~Y4L%664CLS34~Y2i=oMZ65!C-h6*B_)*A-Q4 z9!Q-bs+iS5Q2!T64CG&(gAo6+qWgE|M356u{QK}d)V~5-!47?K;XR6fXF~j&1!+%i zeh>3+&P2F>=eF`)kM0gz=N|JJ@o@$bhEp#Cqa*ez91{})y40Z5%As+iXS zQ2!T64CG&%0}%g;zDJASl@mZtK=JR#cToQ-Yyms;#e;V!{&j@<7t+2u{0`>dnh9|K zu6u{%-~07oV?26Ai}!;p1Npc29g2UALH?*j6>9?dHx*S(38XF%RV->hsQ-&32J)}Z zeu#fn-=X<;XFtdZDE?)H`PX1G*r6{zyhZWvNmX!qUUeT_K3{$d^KVZ-+`s$YBKh}y z9oQI9|92nAGLV1gzD4nG>3dNB7gbCPEBMV#S9E2`Kskh(%tv8uhG{x6ak$iF#zA^vrJgXZ6xy&xx` z_*d}_)V~26!47>P@CGG*8KM4t1NQId*D(LC>4p3E-fJZP^27bRcn`=jkbn2SM)B{@ zx1jzns+bqZzf)1gUVzj!qKb9x5oLIhizEi}Z_OTve?woR`S)cH$O$O^HGB>AZ^8zM ze-&P%__tF9oSv&*gZ;}4_wSw_xPRZhLh`SC4cHh^|93aYGLV1IzC!V@HOL=3QN>;< zi!;1fiYlfBQa2G*Y!+ytX)Tf%$iF?iA^uH$h34O%-5@8R_}B3j)V~Gm!47?4@CwDh zhEV^$0{d6^6)b+wbi@7o?`oE}RMIirfMHR~d zsauFDwrUrs|BECB^6#8o5dW6GMDs5vrhfxpLjBvY4(!ku4lhysds7(_zc0c5RelNc z@0~8VfBBI8YhML62GsxE3G?sU7byPS{~FZ)MHQ0*`S&QQ*gBB9ji_R~c7po9NMa!W zuGtCkZ|e&*|4Md&oPZL)i7%l3ov;?{&=&zOQ2bj7^)IA-W&8r>-#49b|H{2UieLXq zurZ+i?+%b6+5IP&hX+Ys@R8Dq6{w%qKci`0qXxEiGlpPX9vW; zQ=g;xSF;o31Qh=kK8N~u!5XkbUnD$7@vk7%zmWEo^K+Pg|8&6ptM?qqzws4dV?h1i z?I6oQ{^dn-AE==T^2g6-C}EHU^6yhrF(Z(=i>P9^wuAb=NMa!Wp4krZ@6u;z{IQ2aYn37np1-2tcP;Ab%Z@*w0^K>c61e`S%} z=g}+L3OZ7p6IJY&B53~iDM}cWfYd!i6??S})c-{i1NryPHi&<>K1K7dXFG;}Cq9Mx z_rNN!LtivJMe(mD#J^on!TwEt3iGc_J3M~zj05H{M%m&HU`xH-3qb{AP_j&Y+a)SJ! zi7F-p@~JI}wt}31;@^#rq5gfa0_@Ni z3m&8Rw-D;z$6)_9KZg0&rWNkryvIoXonHbr2GsxE0^)2{~mk<_3ww}V28fg@Ce1fj8OkR z0{eIJBba}ETHyYzdxYfQ^~GRgK*iE#kYynM#v-}TqgS-|8L0n@Di#IuuPLfn4M?3L zs+bmNc_}ZF7$|;aHbdg~>q9jEb~b~Yfa2ea525~Lfcp2qLlplmRDh)ChhYCMehBk# zOf%fSeGifRyT1tL-{4Ik%Rv6keTaw;k6zL9PeJ`(RIyj`;tVfbQN{Lw)ET0RS#1LK zf04vM{?*w8@h>a7e`hvXpX`8THt?%#P2 zko z`T#9{S2lv2fa2ee_o4n(SPFLNiwE~n{CiOz62JGs{ylsj=HHq|xPRB(NAmCe0~w z06780zl<>d8Y}@j^u>pJDE>`^`u85#znAa9{M*w2_wT-YNdA4F4>ktW|6LEV4CLRr z_fY&h^)aabiz>ED4mAIZD%Jv0mxwBswI0;}MG^z~H)cJ=zoz%l{Clz<^T5V{`oHTymVx}c_AZKluRj9y ze^JG}K>lq-6*~q}SBNTBwGPz(MG^z~H)kEhzpi)D{Cl$w(cm{kwQA$TEKakSy4HgFzer*r|JJO9_&4+pntxx`f}DWjU&A|4|0XPi_*dZ$ihmWM{=E&3UuL*} z_te7u`|dW9f8}$*#(?_2Ye1HP{CoB`ihrXYiZZ;|i7HkE^6yeqF)xt1iKt?;)_~@J zk;Fj$?O6lyZ|ZF{|Ng82IRVALj<=!yEm#0{=nI3}DE?h23rWux!TuG#4U6A1HE{p_ zyM^Rm{T#3{p#JY_kYynM-o1t5-?qKfr^)Gb66TeTY0|3wl5`FGB0 zh<{6Oq4}2+)4zeYp#E)`4|eDahg&HA^@R9$)=jW~m2biPd#4)iUp{32+Gm4}0rh`Z z!TkI7CW?RW-v{-7QN_AsK%=|f{g+7f5D5(LH^}Mav!K6a!-`u#n0;~ zVQ@(rH2;e#76ejv5moHg3Q+$SNetxQGbBl$N!18fYa{|oo8ERy>?dPSGs1ONjY34>qD zK>c4NF_3@XEQ9#>=v6fTMwVmvci~m2e=p1eJM_hbt0?|0g!=ai*uTYBVgA)Ahx<3~ zDw2Qu)4;}n`oG}C^dSG*BDv3_S5y<^4^33DT~gu?1I@bAVeQ2#!FY@~Uy;0lU=e@a2(_cGYO%~xRlwJC%9H}49Pf9I#d z{A&zeOb_y}FOvH_dPTEui!!{hL=}qy`BxQ945UsFRZMCrsQ-Hz)xSJY|31Bp=HJRv z4F4Xy4E65^$VQqM8!n^xcP7NYQAfe^N0TqZ{OeN+_ix>0B>%2Yf%(@NyqF&3-&iE~ zdGv~|y#?z3qKZ9|6lZv0iYhh-q)ri4Olt{f{ufCM6u&Y{Ao2V45}JQIOECO<@epQP4Dl~3x_@UDWBB*sMW}xTARC8XT)2qh-7B`6ClmObO)QP*gDmkUB?H zF|S3S{x6ak$iFs=ApRA-h!(#qi!l8A@dDJp3XqLMFCJV#@oyv4zlXs7J$wP?-slMah<4QSs?$GqKYj6sY^r^%US^H|00Qj{2Q|X;$PGAX#PD}fZ<=k z^U(NpfNUIk!GP-DlM;~hd;sj<$LC=Fol^k!@40hG{{0^h^Y3KvVtSB&*PcW1?|0Ci zxS6P8LLmRPqKZ8OsVhVktC|n$|00Qj{F^f$;$PQuX#TyKkKtd%b5Q>VKsFA&5IBbt zzljk4{yGD$k3OG;`FBk|+`sqEBKeme?%&1W#q=Qm?mdg*UrUfbR-%e+5(o8vQN=Vs z>KakSy5@oUzer*r|JKZd_&4+{ntxyBVffeZEY!aVkc~qx6wadfmlNXOtbO44Wrq8A zPafRA@6I6kS3V9Fznj5}=|TQIdj`e7)u26qJ5j~FK>l5dDwYLOHxX5A)?85k7fB4{ z-=4V;|E8Wn^Y71G4F5Wwf%>-qvT^8z!5I|)ZWITn=d8V8{|cXh#qXJ1xPSkhM)I$I zEX==$!HelZ{=It|#lL$&djLNcW^?V1hh|00Qj{JUm0#J{bl(EKZzgAu=pr=b3w0NFV7 zBH$E?e?N*r;&(ULzs9Fv{(X}T_pjV3r1P9^ zW`g>^NMa!Wo|y^p@6r=!{c4NF_3@n%z*fJ z>v1&ydS+tycj9rVe-A)5(!6Lmj^f{oqLB2w1MJ`A<1qiqWWwXu?>Lfw>my+P6$US+ z2gR>0lKVV*McG0AkVF-e0{NE}RqPvRui(dHC}HqxI;j7PBnI;Do9Ph$9zBNU-^dIM z|1LZR_3s79Mw%BBj-mLs5bEFUVE+~$gZWn{1Mc6rV@Uq(4~O|z8N8StAP_j&Y+ zdV>6+i7K{B1l0dU6|(@TV?-6>0{QptQA8Mk{QGAb#J^XMqWL#79mBsHk3#+X0J4$h z#e$i-@=^)C<9zfX^#`L{9+!@mcQK>hmxvXSP+h9fBc-6;Y|&s)L% zoqPo5U!OF%f9sAQ`FDLN%)idy#q=Qm#v-{7bY1~y&!Z=*7!%09rl?|jK>kzm-x%e>5zcHzB|Mne5 z^6&l-n16%8i|IlB%{`2W5073^evm&RQNa7e`ls(`1j!I`#uon-)8V)dXRtT9zgN$RnQ*KPE@g3Ape%4iX8!| zOGFjRnh5IuB8h?g8#58&U(*9<{ymw9;a|Z6(D-$LY#e&Qfa+gHsDJl?{rh-7%)fII z;r>0hAIZP}17QB03|>qR^6%RHDE<`(`C}%km=nmqt*BybAa#YPVpS7B{a++8kbiR~ zK>X{vAI-lv6EOU%xF71@0LaFn7XtfH;&-MHBt7p1`}gxcn19zK!2Nq~ACiCh;r?9= zUQ7@2@7{eV{*46fXn@ihxj*iADVw(#$))` za39pa36PCLFBJBn_}3ER-&5$-nacu=w2!UQ7@2@7cX5{+$il z)4CH?tO?}brKnq%5GC6Ir& zqKcgXsauFDwyGD@|3wl5`FBn)#J{C`(EQ7Z>EFOTQ2#bSHV(aT*n{HVN~nL=fc>ky z2j<^9v2g$LA^X?f7v|r~;KlSH|GwRg;$L}?KW?Im9TEV||DuZVfz)k872DMV>i;5% zf&9Cs2jbt>-Dv)mjKzrG#NAN;PJnD2dJ(W2#lMnJ|E>o6*LXL~zi(pT{*~K}6uCoStv(0GC(JyI}tP6AkyT-Yz8n#(Ts3`x(5r9OPeK zB=>priY^B2;r+Q2B@CEA{(XunHVLHeBC6P}E>Qm$NetxQGhGn>F5QXdU(09=|2FP~ z`ga3l`&SmpeIC7{PeFTlIZ?$H z@q^Ys??4HID<$g8IKmVj%zC>4f-q>kc&kdPZURcj6AHe-A)5(!6Ncf#Tnv z{E+zF2KI0A4w!#sqTuoCw*$$)^`0>Q3WFEZgW^{g$$cKZqUs=jNTP~4f&9ygDkcU} z_i;N)82su0^?#AXK>mHx0rBtA?P&gujKuKo!tGH1UVv<*c`;!-ihpN9{ks+H-{S2s z|LR1-{TsI($-n&`F#jrp7t@3MYm4MQk6zJC&>mh*RIx{Vp#CqaSOiENBdQn|$iHv5 zA;JLU-#_gT|6bjO=HJW+4F7K22KDa)$VQqM3$~&7*AVL8EnxpPZ-e>QCIar?ylqJS zo$n6wuQ7NrJ;=YlNbd9K6faBLjWjPdY(??!MLtM+-VFBd&%TelU-zw6y#{&fZ~rU&^q z7Rh}cy`pbHdw4xj#iT&~HANM>15&4mDyG#2>i;5%f#O%D4HCa!x1jmAGYrGO7q>wD z%K-K7fh{QhErj}a6WG6tx4`@x69)Hh-xehQ?stXxHyFH_9^~KLEr|H==oQrm`6Cil zY!@%6|BEUn2U2Hi;5%f&8n}3h^&1x_@VeV)*yrW~hG!ARC8XT-c1_UrDHc zH-i1Uc{9wvIiYa>&fARS-}5do|0aVM(}Vn5yBWp5g`hplnW$n>ApeG%Tc-c2a}-3;2ZT!|{i1oCexs@NisxqR z^6%V@DE|El+Oyn=Dz=CRwEh`Y>azk(Z~ z@#_HDIP`)6)xVrj|E>f3_wfdpf9C|j{d;Z$l7Ig@!u&fKyqF&3-?bZ1{A&*K$4pc) zFOYv*QN`3i>IzZCsv1H4UnDV*e{&ik{&n4e=HHuv82(k<0QGMGWaH2afek3}yOIZz zp4Wo?`*}UgziR^F{=K&z$-n$?|1JhErU&_V?|KyfR)Y3uuS6C5#0~2IqKajJ)HR}t zbv1zczer*r|JF1>{2RI+&A%@LF#Kz{9_rr&$i|@;3hPn)>k0Mm8nAzv;r`td0Qc{^ zbx8h|cYww3X7FNqkblpvL-FtKy`c5asA7{q{#}YHwhE+fBC6P|dQkrtNetxQo_dIX zQ`e#S_oqLGe;wCB{aXOpIP}6`9g2Tnazo;GHQ2wx>tOMF#vktAe`}Hat8WkU?_uy_ zdXRtbu0`?hU(g=ylc-`wApdSf6?+3xw-8lqRUN4RizEi}@0>b_e@oY*`Ii&ZzkzF^ z{%wG49D3of7RA4vQ2(w1`&W4_%)fX1;Qr-9_OHDi%)ghxi|IlBeY*z5zxE)1+(Z?- z#3jz~;wY+^9!T9rRIy#Pp#CqC7|6eCY9an@U4!OdNk5GEOi;5%f&9Ct2IAkTtI_5Jjt!qrg!E`V$tdXcai#lHu+!0GwaY;b?yc{R+x ze|+Hn)mx3^-*_9Ce?Nm4mxKJvi{w7gLVwVn^q;Fx!axY*->0Zzn?UL=qKe(B2K9fD z#6bQ%Qw{O&(p6~wwe-R8Z{sSce>Xrj4!tN?h2q~th<{%#2gh&lDwuzH5dO7Wh2-CS zYnXqT;r^9Ha-T=9C@aVxoTy@}I6?j2l_+8G1+;hlA*$G`Dp3CyNetxQJ5><>Ze5Ay zUr%og|4v*9_3r`5Mw%B5D^dK*2=(tWuz!Hl}P@rw}Sas7`&Js6u-Ji z?(^ssbqD!F5>?C##C)~ez%aQy$-vZ`eWAI{nkbixV+~?6NdK$C`-x5`<3FKc@ zRIyzkb%Lm3QWc>7?=n>X@<9FjbQzj|D?Kp$dvF=lzaJnQX?dPR9b{_sQ<;{y5D6jkicHc^Hbil|~* z<)HpAk{Bp{Wy&G(`*kUre>>eV{CjaJ)V~Z+{~lP1;@?7uf4LTe)AQn`F#pE5!~NU0 z6v@B)&0ziw1}~-u`8RhdB0fBNMg2kkh(r}z#SZHKqKesp)ET0RS(SnMzer*r|LT-M z{L6~&-R$oK#-SG%mZ11o66)VYVE=Aj0`qT<8{EJ1mLU1}yeZ7T$>7EG zAph1bLGkZI&>s9uRIwX{96oOOb_yJ?_w1HUIy*K zuS6AN0{J%;RqPN*T_CDhR0*j6izEi}uTKfYzp9JT{JYZy!@rC${~ACx4!!uW2*tmd zQ2#Cf`}gu9n16d*;QrmW2+6m#>hWOWX5t@HbI%D`(a1k_q9UvQrUNE5gR}$i1t4ZMU>hVIDf9E*E z{d;a9l7Igj!TdWJyqF&3-?a--{2LBBb6_T_SP;m+t*BydAa#YPVpT<;{x6ak$iF#7 z5dXR^MDy=WCk+28E`<6w0J3rDg}_3T_&vx5PR~{o!T$Zc0OsE{PH_L;TY%(Wez<=Z zgBR0-{JVDnihpN<&Ky{YD#irz?^IN=4v@M=RI#o?Q2!T64CLRMLWqAu7ohp~r6Y!a z4HrQDn*iB3^g>|)ihm2C{+$5!FEiY~dmQ2ZeK#M;zw(B#_}vU%Ob_z!+4(5`y$w2Z zU?-~BDpt_>SEypAKqD1fcQ6cKAL}jI$-$MaX!?)1(1zHFAV0R z_*W3>-+r)vh3CWK_lyJFzyIbT`B&cn=HJ8M#q=Qm-kpcyUs;epPNIrMf&9A_Rg4Fu zZXv4Js(euY7fB4{-#PgZ|CY`}^Dif+e*@=1{o4T9IP}6{9*Tc=vO>~xAK1Uj^I-nH zV-NQ)AF_Y#^qR^6%TZDE^HHow0BeRqPiFsQ-&9<_A)@5mjtg9;p9|BnI;D znmmYqTj!$rSJECMeiP?H{W}4&ap*Y7b$-I^B{L72vKF~&J z&>0IqXQPCH7s$U)QN=ES)LldsyOjg#|00Qj{Cg$`;@_pS(fn&^i{anK*--y(fNUIk zQ7{|DzZ+Q~>A4&1-{9FW|MDRGYd0Iozxg^a|1!hpril&3kl#oOfn+5VOE2>x+NZrSoC}Hp` z3)KHb5(D}7O%}wzM`xn>H_{rzzYAwV{d)njk>ig)6`KK4$A~J%1@iCP8Hg|d`S(vI z#J^W(p!qk`3d6q}XF&b?0J4$h#ex|q{yoVINzWZ%|2EHn`Paq@?%%u_NdBF#3G=Tp zcriW5zrINB^XL_Q4LVc85>@OM6X^UaRIytib%Lm3QkkIs?{rlE@<9FjbUK=UD=jhn zdvH3`zaJnQXmIsDCGe{kwP?%)c=faR2sAL-Ox_b(nvH!HelZ{>`0+h!2lm(R|Pu8j+}CQ6T@i zqKd_V)ET0RS*3&ezer*r|LUYe{L6~&-R$oK#-SG%rlR=wAQLz}@0tYm z@8+p6|K^y({X1_el7G*u!Tg&HUQ7@2Z|zhR|84}Gp^=Fy#suz`4@9)Z*aqKZYOg8IKmVj%zeq(c0w zIt9(YJ54eC%LwzY0c7LQiw~1g{3{6Y@2Lsk_`N(C=HDJuxPSLeM)L1_6_|gU!HelZ z{+&A+#lNN?e{`aX1%doqiYlf8QkRG-mX!kP|00Qj{2P-3@vrG*H2(?<{JX{&?%#V8k^IXK_wQoxVtSB&_fACd?@rJe8Y@x7W`X=W6;*5nNL?eU zSXUCL|BECB@^4KN#J`~v(fs?;2*baI6QTZ1fNUIkp)e7}zdsou@!JdbFEiY~dyL@z zeK!Hgzw%13_}vU%Ob_z!*$F8A{S7)pV<)PZ70AC!QN>g{_98buf8J8zlRe* zmVx|xw;#p7wjh6;L=}7VUyR|!R#Y(^kh+DaVyhBB{a++8kbmbSK>S21-`S&QQSRP2-MpUs~@u2=Mk{HOpYvLjPZS6zzucQGe$WhO~>Vx`s0%YURi-0~9 z{~r7=#^BK_daDZ@zs7wq|Gv?O`&X_HDSrLsVg7v#UR)0H@84b&{~iRL8S)ZUObF!P ztEgfdKpnm2l4OJUNrw|>SOq~uovpz1(1zHFA{oD{2K`MZztHl z&b=`I{?UW`SFabzzwvS~|9%E9E(iIS7s-8~gQ7tG_}POJ2CM#wF}!$+D)tFA`jKR8jvtU&(#+KmzhCLnbWQN>=xfcn2kVj%zCiGlcc zYd4yIJ#{hsJFy$;-vf}1G%p&uQT*Ep^=~`azscP&|H|mXmFb4e{^ME;Ro}>R|YH zVHecD7a$vHUQFmh@vkD(zinXu7I(q?tD^(=Z(J9WfBU6j{#6DqrU&`g7Rh~}`+paJ z?mt2mD+2jf6jf{oNF5`p7#GODZ#xlT0P^pjD2RWrcB1(=Qyas-8#|%?eE``=^I}0K zihmdWg{0?Juz#C7Vg9wzhWj_K6Uo2xrC|Ow1}~-u`PUc8eW3e)LH@8r72^W=R~1$4 z7w9Y%K~yoRC{X{m1J%DgQ2##dK=W^<7KVQhc0m360kV(2nBYhkqdP+YI*a;&zySV>IFZ?Q2K!?|uoG ze}ln`=|TR@ZAZk1N3Uo<=uDVMR52}(e_c_<>OkrYQN^qxK>c4NF_3?CA|U={MfdMa z4GjN2Y=in&0J3rD#f3H$|29JX+XVLS<~Eprb2Q-oo!5rs-}B-y|0aVM(}Vn5+lJ!b zi=Z=MGEv1&{T5?*5sE5y0Hn?lRm>|K)c-{i1Nqk`9O7TmHnjL%sgB{_kF8MuDnK?4 zy?D@y;$KOqe;dL6J=_ZOZ;d+Kzw26&{Ci&v=HFuQVtSB&ds|WbD-7~SC8}5!$iJzm zVoV@)fv93pVW9pmk{HOpK4B35sqR^6%Uh6#s^T&cNwJ6=MSVw-i;(1*9$!RV*tM)c-{i z1Nk>56yjgg7Bv5!RK@VGU<)*U9UvQrUNE5gHxlaKda!>VH^clpM-}ehbInNp{VxLZ z?_}^|dXRtDHlz4=I_M0XnW$omeu*)>Xhjuk1F0)S6{`vX^?#AXK>p1Mf%w<88O^^p zRWSUk*bMb=0A%CP3xQ^o`2F|`62Em||9)%QrCzo))fru|00Qj{96+Y@o#7ontxv^WBAvw3F_Yj$i|@; z3QZ{f?S%Tb7VKYUxPSL3!~OfN5y`*u!m#+=3|>qR^6%M36#q(t{IL^N?AA{)h8Igw z#kfG~CZdYX3Ig?ik;Fj$?FoYTH?A4#0U*!gvfA1*5{mX~!Uwc8A ze=ma<(}Vo`wjRa5^Jjq0e?}Gi^+Sx|#ZgqTK9IVNsA9VUK>c4NF_3@P1VH@TT94*m zNkxqKO{|CdcLHSN(2Ib26#p7R{aXe0uW>!hzi$-a{*|joieG;Ln13IG7ng(l`?n6o zzYjrY;Jic?>jL@rDyrB8kh+7YVyFB;{a++8kbn31L;O3n4$Z%s3K;$^tb_V@0c7LQ zi-bB9{~r7SiQh`Ff1T@K{{15l_pe?Zl7Hj*VgCILUR)0HFE5h&KnLl9{PD9EB@CoM z{(XunCInJ<5moG#AE^I}BnI;D89#`Bm)4^B*HRwCzm2s}|89V69C}eui{jrvsDCTK z{td2$`IiUbU%Of)|K{_-{L2jYuPl=LK==QG&ivs-6Sd9_}zkERbUnDV*f8Y2( z{Cl(-&A*Yd82(*Y4fXE@$VQqM6RJ`C8wvGq8Q8zY)iD3+$in>_SB>P~ejb>AmBEYY zLH@Nxav$jaU(lI9ny6x@zKJos5JeTc0aC|^D#iu!@7pRw7=Zly#~b3`t5sfaBLjWjPdRHFE| z5$fL(uzx34!u;za4fk(dC6a&FbHV)U3|>qR@^37X`#|^qg3dVdL>0UA71aMl6^j9> zQ$!Wh@&fgLk;FjpE8_);->(&D{_T{)@bAS6sDBxt{yk8E;$K0ie~ZEXU0eb4Z;TY& zzkL-*{@u?B^KUSCF+Iq?xfO``0Nwu!I^!r3RV)kSUsqJIc_4L$sA5*0p#CqC7|6dm zo)G`CqWgEIB!+(a!I{F@^Q_wT%NB>$f0fcZBW zyqF&3-`a8%|9%9Wag>QF_Uj9%|BEX20Hn?lRm{r+)c-{i1Nqm+1L9xNaJzNI!Z;b@pzw647{Cl4r=HFuQVtSB&d&^M#YYg&7 zC8}5#$iJzmVoD%&fv93p?x6lJk{HOpKJF0zs+OVocc(ape;Hx^HGpg!dhwwY#lHu? zK;pLm?BC0!F#q<5!~MIj6v@Bu*i;5%f&3fe2Jx?HDVl#ziedOyuoN1<4v>vQFBnk$8wmApKG?sHOJM$;BL?^H zxe_G*{%3{xcQSY}J;=XnOHll~9dxGCOjNN|pF#a!RIz0sb%m&6Rj#1^FOnF@zd5cD z|GJi-`S+$MhJO`Hp#BYjY#e$aP=XS_4?jcVHxKOJ&&4qRt`UX%_g*oQfBE75T?}4K z5AyHcVif=W1fA)$5>?C!b z*}wKoF#lc#FQy0i_iX`+fA@pVu)2vV_UR+2|BEWN4y0})s@N_^Q2!T64CLQ6ju8L0 z7NGf8QV1h{6APgJodDT5^dg`D#lL}2|7L;xYg_>H?;An5f8`30;@6)M=HJKQ#pNLX z{>?}6FC)kwFHyy2f&6Ry3AI-m-f*AfS%!m4S z0c7LQi-dd>|1v`Tn+f)>b3V+!e+1zE)yqfnZ#)Cczn{U2%R&C-MRFhLqD_!Le&(Ts zffdNVPf^8;Kj^r5ApBPJT(7W3SjuRF%RnB4UmmPFADNd{JZia zBt2(<{TrMI^Dhs=zjk>@{>}d{%HYv?A2h8E_pdCH`#|^qg3j#XL=}7W0o4D^MG1ov zkh+JcVz2B#{a++8kbm#kLHxTl7tOz({22b7m<#pq0mw$07Y(^6{z9k<-}-+r{|bW_(}Uty7s-8~`+q@ac1fa&O#=Cs6;*5-NZrRAlrZ>Z3+n$O ziGlq4#unn=qd92)jpW1d@4_6Ye=k5b(!7|EgW}(lA0Y9Y2KH}p4$Qwgd~pB9AUuW=QdXRr(k=zHm{}*&-mnW*2 z6Ue`&sA4rBb&9BBTGpWcFOnE2er2p7@%uFs&A*-882-JO3H2`n)V~KZQT$s8^=~rR zzl$?r{*B>=`?oI>$-n!5!TcKxUQ7@2Z*C?cK0x>Xg3j!UL=`*qPK@D&E2`K&kUB$D zF)J%j{})LN8e^f&IHV1LofxF1UZ^ zWgz+Y{7;yFlfjGWLH@1HK=H32$RC-gVo4zXhN6lwfYdpnig{Ur`oBnGAphD}Li{V5 zffm0jIWheEF&*k(1<1ys7Z1`={JZiUI6ZrXgV)y`PKWuoh7<1Jb?Hd{z5fH|-(v7$ zdXRs6(^32jI{55GC92r3w_*%0Qc=a6Kxdf+qKZXXfcn2kVj%zeSU~)%nvUk*og5hc zWrX?H0J3rD#fLN$|2jha`ziq(zn9Zs{_Wv_`*&X&l7HWShxxY|yqF&3-??ch{+$Xs zqpTBEY!b-7rKn;pAa#kTVp-;({x6ak$iFe>5dWH{q51bDJBEJ+)1dL|0NFV7f&taP z58s00_fB>(>Z2J`P^@M3z9f7hm>`1d;KjIx=iVp<^owxWt1 z1F0)S6{|7>^?#AXK>p1!gZS4q70tgl*)aU8m}w_g)H;fBE75T?}4K5AyHc6cqnTg8Z=(RqWIoF@_gYQN=hw>KakSx=ca+UnDV* ze``!3{tZn*^Y2Sm4F4LYK>eEl**NqfZv$#-SGm$teD9g!uPY3^;y;lVS0Dh6V25e@RIG)&BzX?_uy_dXRtbCZYIu zF6d0Qlc-|1UW3*@ql)!_)Gb66TV)LD|00Qj{5!`O;@{FFH2-p9`Zq8M>fZ*)#-SGu zNhto6g!s2B5FEeCNihH3VTSvc581!=pJD#J3|>qR^6%S36#w1_oym3+RV)kS-=nBv z=RoQ3_;<59w3)+^BZXH>Bukh+VgVz&%H{a++8kbln@K>WKj z9?id&j2QlHjEDMn17zdSi-LF*|K5BBiQh=De}m&;{^ddV*DfB(zxf|v{$+;yR~E^A zp!q?I{`F+Q@bAPpsDBSY zHqyLkh(qyjA=JMSVE-n^!Tc-30FPh4I3)kpzlZr(7`&Js6u-Ji?gQQb3p#^N5>@Qb zOVIjfRIzIybsu9iidBh&DXn7!&(4E*8nZ{qJD@RR%An2l>|) z$$g;ve?k7xL=}qy`BxNGOai2i5mk%}{G0g?!@nD2p#FUT z*+}zZK@5t2XTF4_=P%R`UnKW|?*9dyxo3$g z_UZ+w|BEUX1yU!7Dkh~1>i1=N{;m9r;opPNQ2%~_Y@~UyAsWTMhEV^8 zg8e%=8s=Z0zi|K7MI-rl{TrBnoxzLgLH>G3Q$!Wh z(gF2*?<{_XsO;oplqR@^5YwB0fBNMc;$Y+>1mNlLGnI6;FkUug}#a2BB&Hti`DS*^DqKbKGf%?BlVj%z8XhHld8i^LaD}Q15_hSUq zzY36zLoXggp!oOUb4dIKf&F_p0_NYEUvU4fi$L=4{g*KR7K0blgZ$eYf#Tm{(3yLc zsA5_m|E8jfC4tlhqKZXng8IKmVj%zeXhQs}8iD5Doj)=B%LwzY0c7LQix1%_{_TYN zHxTUK%i%Ep_WXqVcV9S?f8W1=`L`Lom>%Tcx#1}O-3mH$uM<`5)H5-L7p16TOF-%p zQN^+}K>c4NF_3>_G$8&p4M+3u$sZX06%2>QuLES`&C z_gol~fB!#+`FApSF+Iq?Yr|0d`@LM0;l)f;u_BOvTT#WHfz%bEidCtD`oBnGAphp5 zL;UL+hUVX!-!c5F7zXuk0A%CP3xP0{_+9x7lAis+{{0-v4VgVKUGp98-+Q4*{^f`J zcQJS|J;=X%Ls9%|3G&BER531)f2X2~X@Jx%Tcvmq${tp=Sj zxD!=u(o@j(C^h57d|criW5zjuRC{JR%)#^6a*F)NUNx1x%z z0jXPvDz-`m)c-{i1NnE33dFyq!D#;F#Pn}qFx0;dkc~qx9D-5&TM6~A57@uT!7%^c z`2zPZAF_Y#pTPWk8N8St1dOzmi`t;x{n}>fZ^FjYBU2f>8Xc2=%Ww*uTa>F#o>!4EL{G5K{d5KZg1D zF?ew~$iIIBQT*!&^2bY5u_TaxucC?>fYcpC6+5K_>i;5%f&9Bi3F6 z!a%5h7eF=+y+{Z|@$bneko4>Y_OEjw%)fs=!TqZjh~(e+M=<|>1}`oL`Ii^TeW3e) zL1!xd3_uA3E|7npqKXxP)LldsyQK)~|00Qj{Ch?b;@_nKX#TbQgyG-D0H}XAKsFA& zCyHu! zTR`d_qKdsz0QG;7#6bSNqX6;mR(~}AdVa+4??iv7e-A)5(!6N!NAa&D)W05J|0esx z{44Vj9>0G6NdB#V0Q0XfcriUFesz)D2fF_kqR z@~Y6{`ZN6GRo0k^}XBeNg?&1NHAyA2k0~zQgeEK_94p zKR`Cpyx8D_;@^*t!0{{P3Xb2&J~03Kyo39<&IifA>+iz+>kM8@5Ats;lKVjS|ANkt z^h6c20{PbzRcsGPog%83mMp0MizEh$Um00Q{C@RD^Ka){4F6vAhWeKQ>fZz2DE^%Y z^{)%qzl*(L{*8GH_ivv!l7IK#f%!KWyqF&3-&}7*e1Pu%1^FWqRqWP7(EKl|*gw!& zlZL2bRx+UeFOnF@zdAAy|FWX{cjg-m|337B`d0w5ap=VbFBJbuLj3#75}ckld%^sh z^9JtUd0t5VJ%1bK-(>J&dXRr>y-@rc2=YfJs#q1szoDpN4j^@osA68yp#CqC7|6di z(h&cOdZESd%GVhF{pbnxuL5M_(2ED2DE{5~5S*U1oWSvW*c0a8n%8juuJc6l@BLda z{}zK6(}Vom>xtsu$)GbcD^bOmK>kfd6>9>i3q%!*k^=RAk;Fj$^^t=3SJe~EzdK)H z_?HppUjxX-p%))KQ2ZMS^{*q?zn48={_S}M_wPOrB>%p@3G;6=criW5zjHlM{CgF2 zW@aa<*rErZ{x7Q75sRIw~cQ2!T64CLP!Nr-<j2p}^nwA^ zzaJk!;@1J}-^cDS|IT>{_wPA(B>(=u0rT%<@M3z9f7iOB_*Wd{kC~`qP9XobqKdJB z)D@zNRY`#Qzer*r|K>J=njW-C+J* z^8)VQdu~Yn<%j!sF?caO$iI8tQ2ZMSIwN!?s@Sdjp!r`^F%OWsMpUsbaZvvkNetxQ z8gYn!L*3B)`|>%4e+}KB{!M^v9D1SPhT>mIh<~k2!Q~Y*+`oIC!~Oft70JKy*J1Iy z8N8Stt3*NlUnDV*f9Hro{9EdR=3h=s{|351{o4T9IP}87 z1;xLSQ2!c({j2N(^Y5LfaR2fl``7*|%)ghxi|IlBed~ z)NMo++a&_(|00Qj{JTa3;@?(hH2+FI#faZTXQ+QCKsFA&2yjO6@5g(P_%#Ci*Vq~6 z-#1U-{*`k^ieLXLF#kRVFD?i9_pcL*e-lAxguX--a{~GIDymojNZmnHu~WjJ{x6ak z$iI7pA^x4}gyvt(Cm8-Mbb|VK0c7LQiv%YW|8_$Bn`H$qubiD={{8b9?q5A8B>%== zhWYn1cyT$%zr0B91Ks}%IwSO_BT5+Dx(k~BMHQO_Qg;zm?3NIy|BECB^6wcTh<}$l zqWRbIF@}E|9ijf+0NFV7qQDWwznT#LdKrM@H`o#8Umk>i?HrN(n|}%BUuL*}Ws%$m zy8jn+Mkpt$SP{s-UmZ}w;0j3HLsYR>f}s8{k{HOpcLX8+-RgkmU(ZJv{+;Lm_3r`5 zMw%B54k-RTc^90Xz4XEUO?H6!SLP8se*GMf{9At!=3im(VtP>g>LR%hbpJ2NACjnI zLLmRLqKb)u)P1x^34>n(p#CqC7|6eG1R(xBYLDjM$cGsIU1$&W?*+(4nimu7QT&?; z@o$$oI6W8J!~CoB5bobNdnEt%Ux4{n8N8StAP_kr&J1)Yhii7K|~4ru=`s#pX_ z9V4n37s$VF?GRxA^6wvhh<~rzq4_uS0fv7!+ClyM0J4$h#R5AN|8he78>I`5-)1|Q ze{CMX{hMcp)c>_b z^)C<9zfWz^{9Ab+!@mb@q5k~<*+}zZgDr}G7v2G<=UJxU_?>JE^RLf+xPR+xk^H;< z9L&GY;KlSH|HdM@4|M-8=uA{kRIyLDLHmDE#qNOADWZyL@qzlkNMfM)mEnWL?^hc% z|90NP@b5(%sDBxt{ykuW;@_R1WzoH&S=!+EU2FsMZ_GWofBS5Z{JZ}w%)i0l#q=Qm z=Gq|Q19bl{$RClYVqGBrx}u87fz%nIidpf3`oBnGAph#{Lj22$?%$brG5q_`8tPvG z$i|@;7pzhITX`ECzpISF@w?d?=HHyVaR1J;M)L3ZGcf-qgBR0-{99{{;@?8h8L*kC zVyA9_=6_Me5c4NF_3?4cp&~2wML8Im3J`w`_T&OUj@j&z&4fAg?criW5zr9u{{skQ@`=Sz6ED7Y_R8+A=ptE8F zQN^OTLH%DOF_3?KxFP;kwLoxk&9VXe_pt@czjJQE{d>*=$-nsA6g$b%m&6Rh*#yFOnF@zd4)`|GHYB`S<2c4F4)x zK>Zs4**Nq(cm{ks^vm>%Tcz2+$XtpuHU zyAoCG(+yDn7ga0+q^=QFtcwHG|3wl5`L~7x;@?nnH2=Q5f#F|6bEtn4ARC8XD43)8 z_va0;f3+a(XJ)v6_uPQ{_njG%f8|fW;&(H6F+Iq?XU$OjyBl=o?M_s&ERcVfqKd5o zshfx@Hj5q9|3wl5`L~B1;@?y=H2?m*j^STNGpK(HARC8X7?`2>w-DlAE=zFy3Y)>= z_sn&;fB%^x`B(oq%)f`hi|IlBy=#i%-@l+UZ%?9%J-QBB|BNd32BdBws@N(vQ2!T6 z4CLQAY!LsJnxgra6VtzercnPjKsFA&a4<#j@5}4p_p|2_sUE(iJduQ7^$ z8$oCMzC;zfbWM!m#Z^?X0+70csA8vBK>c4NF_3@vut5Af)fmmcnpZLWTWAdR?*hoi zp%)3pDE_^94IIB*+F<`W8^iqj=L+1vdd5ipjXwhO?`QDha*%&{k=zHm{}*)T?N1|= zFz^ET_bIB_CXl*|sA9L6LH%DOF_3@HFhl&i)CkSLmRB(R+h_#!?*_=mp%(>4DE^Iv z`d1O$o(wjE`IiUbUppft|K=Zt`Ii~)Us)vgf$skW`GXTx?9f%v{I4NO7<>Vpjr$N) z>=hHJ|BECB^6woch<~>lqWRbJGKPOA8bbYh0J4$hMS~%Ve=lAI$FGzoIDV52Vg8l5 z43A$wLnQy!AAd3GvXSP+1OpWRdP4oH0rqdP0nEQTm*D=5GeGih|3R34 zmBEYYLH@Nxav$jaU(gx9ny6yCu7LW#sA3f$b&RNDTp<6x)klN@$iIIWApX6okLKUZ zix~dhs1Nn;1IR|27Yp=J{Cn~WIDWO{!0EYJALd`1i*Wzu=_C1f{sEYOjlqlQLH_kc zav$jaU(gx9mZ)MzApfeOitPfa6GRo0VgU7j^-%rG1NHAyJv9GTUcm70K|QE{KR`Cp zyx5?J;$Kgwf7QV8J6R9rU!Mzb|JLat`FH((n17wYi|IlBjYV=F=>A`jKRi*zHeCkw ze^JH$fX)I|L>1HeFT(JG7fB2hzcT+t7(ff{zv`m-xAQ!Pe=q7n{mTIL?*UyD{~o*y ziC(Q;2lH<*criW5zqz`I_yFDi3-U)Ks+bYTzpkiab|7_z zsA5+CL>OMkB8h?gtMd=yUsiPg&OC?V--kL-{|Z1h4!yXbgW_LDh=0AL!RdLk4$Qwf z=ivUGr-S6*^Lt_bO$INf2l=;F2gSb=L1!9gqKd7$1nU2yiZy`LIiiYr{S{$&p^GF2 z@~_Qbh<`w5=tLD;brID6MHOQKsY^r^%la+C@WK~K4CLRK-w^+rYN7e}) z*8#F|=mi6+e-B=S#IFR{zmGLx{+)9g?%#8oNdEo53+CU+;KlSH|E|?U@ozZj4Ck4s zVp<^owxWu;fz%bEidFp*VR#XXBnI+t&M%06T{Y4Cd-D{Ae-$;M{tbX^9C{(3i5kC9 z|B8eC`&k3#-!-S;{=KJxMHTA+scS?P z>-s6e@FEvU4CLRMpAi3sYM}Y||bWMfA^e( z`}dtXl7HoQ!s2%`criW5zh~7^{CgX8hVxETF)fgPm!gWD0;!vbDmLqf2*Zn7Br%YG zdwxLto2riH-=8Ni{OhO=^=|=WN5;KlSH|Grg4@o#(} z==^6?F(r_HkD`kCfz)k872EYqgyF?pBr%YG*L;Kcw^bF*zmmr>;x|zh>fZ^FjYBU2 zR8jnE2=%Wp*uTcAF#owF?ew~$iIJ8Q2e_PbY}HSRIx?pK>c4- zu?Zk`2T{dNeHCGNu@*@TB>%>5h57e0cyT$%zr0B91Ks}%I+=@+gLX8|fTFAu`M zcFIWp&EEp^FEiY~vPkX&-Tw>n2Pdl7th1p0uM$cah=9~RL=}7WS%l%mStK!#fA4&T z_;;%kntwfyVEA{U64bv3ARB33G$^6?*AU`gDM)`ISqbJ}nIrJ{^;1IfZ~bPNe}%z| z=|S^uue z|B(FdtOyIAKZoGqqX)8%U*3g*!KYU>eiJNwK7$vdgTjXw$(vECi%(FRIwFk0J~&Rw9Xk!eYlqNLWl%;ATMh{}87C6=42{Y{Yqy zpn&3kNl5y*r3mg{IV-^Ze-Pn+1*G&5zY*?#@Zxl^|B>A0(JQ(P?0<-wkSq!?Iw`FQ{% zyd34B;Z*?H$n(NL9woe>>BUL`9A3imu<$x_03Kfd+auQYSH0WII zt*B!A!2U-S+XYhBiz+tl9mxMkVqpKjgZf_<+5h`s{ttzpFyPVrhU0~`EHo6dAlrRj zXvsoC!4!NJqNz3{6ha`Oz$?qm;L&`9!=v-Q;elw6Ueo>iK$bbi#=iU{!_AO3!KYVM zeH|DB%8R)pcjIT@7T2nTs{7pmAh(6QUgz+$g_I-h|pdNB>mhj2W4 zMdLyGnoz~gg7oE~id_bYMWKo%gWTaJ1M!AWC)|!`#~6?=bU?m96u9v6X6IfU;rCk_ z8h%=k?L#kKNuz|{YDlS5!VgYGXQd$)gS`a`zxutf@Y^H}4Zr7WVBuE{UQ`bWzfEsM z7+&;AqlDl2(_#!Ss!+waL1B}ID&`In3qlpE28r3BitPg(0j>oWgNMrtDKH-%_T3FupY=` zlBi-yATd@{F}dSn3@<)Pq6ENV(D~wbQN_|gdQYN?O#-RgiYm76l?cO&g-Bwce7)fn zD5=E0?34t10=0aX+>H@liIULpngH1d^ddkKCA?lja`r4~aCjL@!pgTdyWrs^2eArL zzWc9&h1X;7;&@Pa{gpuRGdR3nqKcgbojZONRm=?(4hK=ic7xQdMHSojQiS2fOe8T- zIIMUH35P}rr1DL27tH@?H#pFT3u?bbo8zeRl zRjeE&)`cpz7$jDPD%K4;`aB6NhRDZ3U_Lw_uLkL}LlwIZ64OEz;|6tS#8Ab|L1Ii` zF@*V_#8CVm4N`LtRV*JQc1jEsA&{coqgV7bNNgLbx_(d>c@e7EWsq1Os@P7@k>^#Y zV$IJ*7+$1_L81|}jPVgeX;8z<_nX^sq#tRpb3J-Zy&&6JIE|6RIzCwv(!+<^g(VDf_e=zOn-=gI&Y}uQRg;Tc*4u? ziz1+i_vkfcfNX4faXf}{!NNyo3p{-MK-R&+r+zUke1yS^>p|h8i{ws^UQsqsy)KC=CIs>~E2`K%(An)D z1yRC63#9HYs@NHjx|674mmY~Qyx58)1`3}ek09YQR}e?|Xl}*`pF%-s_$+{I#Cee* zh!Q@DkoJ)jBz&9&Vd3*<6FhwMK-R&+Cw>tud_IF0r-Qkzn@dRpkty~WaFSPdNYhGxmNkO&`y|~2-2{mYYGa6D#U10{7 z;(K|~+6(#XL6(Brn~Qj%?S<>}VBwYxUQ`chFD$wz!tkPw7bW=ALEgie!;70pVxV&6#Vt@0ihX&I6WV{>k;uTna5xQIuYkrs zb}+J_@((hi@&nP-E28lY(fEzbsQMYv_>D}c@{MTrIim3!(ah&W<2$198PWKHXnaOA z`x#N~Gduta97Oqx&fmd`W*)lz%xLmx?(x|1|NsC0U_o&Edl!ynx~4E-dUj~?IX?nO^ugzQIGkIpBgA3c4et4EI?bn`LNKU#PY z3SUCuK`8z);sY%`pqr2Gesuq$n@1>o(AA^+7u|mJ_@=h`=<$WlNB1wS-GgpEMtGs6 z7Yum<@rhwRdijQ4{-W`z9scOe2Hfx_{8?CsOqvL`x6o`3b#z zM$cau{zXd<==CqU`RMHdMt0QtnvoNg--yPib$UY2&lv3)wD3cZA9Vkc8h+^UNyvQk z@)n&>$UIWjqx*+o{X`&rkZM1=f6(I#J^!GqM~@#u>0J=j{h{Dv?SnnK-32_l9Ta@J z6JES1StZ2a)A`)7`3a*(=iw5K7tZ>O3?4H)x@``7bpG%-_`A}DF5UN>+`Q;g2FzYfhyiEQ7|39Q1X?WoE9DaF7|Hz};_URmT23WZ8fP)3p zBz9q7co}W_=|9p6AyEIpqnq{VJaq<-ZVQ+ePKXwMd4`wTSk<2enU7WdZxd|h@12Ru z{L@&~Z^dc;Y^>^!&cy;F|IIYdd(0LG)_6wSS@bUMZW?*1weksuWQ;NU+5lC^b=!)&) z3?9iWT^@`V?EXK1q)(6I2SA-BP}VyPN~illWrl~gwMXYKj~$?ZV_;x#@L;@95eLe} zLf~8sQuo3dW?$We<{t+9ecg-<49zbLn|~Pdw?6@~Um7+4G%BC((JML!o4uX)U)<0H z1;gQ&=Kufy2RY#7b0bg~f#WNB2go7dG6US7Zaq-)rq|(r^ABGB_AW*S2C%fpU_~jWqx|uz?8CEdzw>U8}FmxXBxcK7WD?!!&^$ZNnj~E#* zL_5ZOzY*&(!=u-Qf$?zK1gO8OIXpUly=40T|35U{cywEPe7_G8eEaV|Qu^`ecINQt z7H)pP=+Rpv@E@e$3`hYizCF5yJvy(y-0|=Kf0$EBqA{KE{RYGd%rC3JDuu!R(sts2 z2s6G+{s(f31H;NGS_};Qt-k;M|8M@u$KMJr*Nz|f`~Uy{m-heu|L+cv=yp)J_^SC4 z!?uvkyY=*y}*+V<&zMzW3> z9(W<){sFo4Pn!Tz<{0W2;@SBJ5^SyCN~J+7wsx_BGqdUS#i9(*wN44oco;l7zk76k zei3?%m%+31s7LF85?!Cp=N`SL`MIKy#PGrrq^$V}hfn7_pU&q{y(YZ8450iBGTNi_ zmQUw%$a*k#@C7%Z@#{z5xELVwoetlQvzM}ZwEi#Ud}*_u5u&e~eT7V^;|jTwHy|f_ zG`|t>=&b$mV$T8r29NIAA0FM}9-SAPAIf_)|CBD#Y0YM_@! zUqR+KKalrm{vlJc>*b?$j0|ZLP98>z9)5WSkl~Kuj$x26`2xCF$D{d;M~X)`i>d}F zL^@qh7#{FwJ;~n!YUO)&o_FlL`XY>nm%+E2-J_Q^K*a?sy%??s5&s zZwDHDI*+?{`z!c#x^D2`cRk_Q?QQ@{1}>ekbDE#mca|=2?JigG==7c7(&@XR({;y- zEz|z~_vrSW;M4880kmAH^N`_zK$q^=Ii3f9@H+-~mo5nN=r!H8ON_xW%%$6RMYr#c z7Yn{}fnCvjM8Wgm3l7KT2cSku27kMBCuc*gnaR!&p10KmNO^~7))Q*_V&CB4? z?Rp}`LmT2l{?@P-kn+?U9-a4h@qh|Ek6zOT@Wm~Tv5s+$@v$$%p71cZw!Y3zckKAqoQ zT>8Sr;L*!!zC|3=@B>99C|q*>@-TRI`*XO!R^q+z`uG38XLpE-05}~M{drM&3#7zd z0%D;@v&Db@7EtB?H36k8@o$) z_;fyh!2-4iW{6AYE01oD7x({yta5=`Rq*Ep-z^>nh&3;QF%4e@zV^HM(U;~!(l3~i z3}5~S;zGD5Ji0wNUNoYczTqZB8N>#U<_dxT{4KH#3=A)xabo!7^c9FtUN;}oeKGAb zDC|s+X^Dcu?u9wjKA+BKAfI&J_vrQzcp(V3uS7)vE$&L2AkhyB&*pb5h$wt1e-q|i za5P>iVPJR>&B@EK3*6@IA`e}g>aF93JPi{3w=5XE%E z^F~~5n0*7q4PC_y3@@&8K;7WeYw7{Ayq7oJ5b6d{QfmJM4vse)!Aa?b2E-XiX^0K% z45WxPh1>F?ih~!N)>|sVKyKo7u@q(4B?2xA?i(KP=rv6QUHqf+iHpIryIjDd^Ztt! zzyALR*NYy#rn?}Ed|#+MggN_#CdjqIAOm`N*BgRj2$UQR54?Er5$sF>O_1307mdHb zp#@6EkXU;W{~LQ~U2g!nEcFIvjOAX3X4G><46u~ClAV_UQo4f{<$Cn;YM6tgZ6@eK zpO}vzf7EllDE{^TKe*sI_M!r$0aVX>^qRhcEY^Jy@_>iIv$KV+ zq*8zZv>m{7zXr%u-pR+nx57j6^uG^aA0}^rM8y1`ARoF*pyq?hUm#y1MaGJ2@UVN! zhLP~2jzJRsyXHemFXlolII9i`LOZAh@C4`4?IH0(0&D?hqRXwv6^v?d7eEqz5d*`E zBsOTG^XTQZvIhCp^o%+*(Y+9bxWg6dj%`0c9z{<0Q+|RxiRlIfoNicj6&4C$H|znq z;T|iZ4D|Q%Zm7y9C*C3~VuxpUYP*b>NFREBEg8cji zNRYp2J|y=-3uFhh)I9ec;!k*lzF6}E_ zr269MJCH|Azp6swH4S19Qr2(*+k+XN2WxS~Y0wpv@Qef%Bz-K1@cgd|ic{WwR!HG# z2X+SQ;H?K{ZVNa6YPGR(3US}e%n=_+}^qnB6i94J5?n;(2|Y(Aju z(s{_G({;m(3vam?JfI<40=5Gst8l#VN4KW#GRP(F5-y-tLvsbkfBu%33V6ofz|70g z9l8Nh{dx5AUN{S~^+hIEMo*aBLgC{3pBp>q6s104w6Q7#xx{nfLsl7 zhBb;aoZ$MwG4d~nf#HQ6$e>R>k7jIFJ8R@)i~v# zEg~=SKL7vk(aYMp0@{~=R6rh}%jPD5(mG~9#)WUFKzJkQjC>;iR#e0ojaDuPRdjm9A7LtCjj zufWM_;z~%eI{OKfypfxyt3RXVom=POsX?9rBkv@GuR?Bq^sD(0&x`Xf!G`}=faIM5 zh~Y@hCqJ;^nEB>v1+Fw3a~|Ty7McI>G&|!z55q1wQ1tYg-Z>1eu3wZO8bFmGX?ckB zU8r;@LOKd04N4NAP9QjD@4qlZNLz!X`4|`&Uhet_vk{y?QWF?JEeKE>rmVlEKL3V$00rhgOJqP>MdO5_eBRt?UgU>c3ihH+HUq;8@4q|@jxaComP7Gk zJvbply!iPU*ozU%AYPpE9^H#YA3!0F z<}TsUdA~bAz@wLS{WTE=NCRwv;ei)lpMrePI%hFvLH7&ZE_w0)HxC22j_~OP#xv^6zZMs(gk2Ii5MPuVF0qeyL1DjuhV(|g+0RQE+D6yfdZ$O_rPH> z21sf&Jn-W86GWqC{#y)}dT_j`e23=L6{p}%eftaQ)CzaFQw8Bp)dM+o))S~xLEYQ} zi5F6DK|`ZRuAGTzyv+N>!>~&U4q5`yxCX7W@F^V^dRz%q~#B^+gRrx)CIe z+JGp6S`UhQP@@Ud3SvhY8MCZoB_Ji7_=o7JlOVf>jkJYQV`DA_??Ggmkc;H znI45$_M#VI&m@pNy{0F$!4BLd2}-Pa2w()N{P}@)AD$@beo+08A}F1OO-xf&w65 z9_Z*in9W<@tt@c4JJ|9fR&WbL;srCraAR>uvS0E7Y&cR2qX}#{W|A+2 z`W16g>O?nOv z5u{#p0oXN2Er9t)U><()f8k-+B>~PIyt?291awr+3*=g8FZ|szkQ-5|Ru7IBC!T{s4auF~ z55wJQ^93VWya3<6*8J#u^C8I>Z|;J^!c;~S5+%J*3y@1gffwmu3oxVQMJ~wi*v9=z z;Vu9tje<}Hh8G(@^PrCV#Y=C;-9@wK>>z5@HP7xD6la7(w2kEFDnnhLKEzlbXNw3 z7f(Myletf?X_yGe8@#C?-@uaC)H~o{{WTk$#9o*|oPm_KM8M8KiZf@pEiXDgVZ@p4 zHc0*WxcQLE3k!(h8Nv`h-h6`Y$L&wC`*9&oKOQ}Z;>Ss#Y{UriBPg7GdQFRj!G0`& z4QGIgtBtq8eiVcHF$m%eBtIH}oq^=Xc(^SumVCtUqZarUVsINk`b7xD@D?G6AHP0E z_v7U!*!}oE8&^C&JOIhEt%5=D%0TubG#)*AdH0Kg{Ak)P1Ws{=2VPvb1@<5V)D49Y zHy{;P{y5waoQ2B`u?N7Tj{*$*t+#C%z~lO@pVHyZ>H7d{Fn|)0M=!7I8qgUyrgfmZ zh8%B!vWUBYN9zIpmN%ecr}+mXf6GD;tJn16bg;9*&A1n4h~|(r$VgC+&!d-DRtD_D zrGj9kh6i4}y9xH8oFF8W`yYWr8OevakFkfcRVFSUR_{kiNsEIS7+!3Dj|k=8py2H_ zRfM}C3*v@Z0uVQFL)?H=F}-|*-3@bay5ajiNKChg!Mpq~j6rSy4Pbfnn!18gbLagR z{3l>;eIWvpmIfEUrdCkt569usU*GXSCtZ3?&7sm45z^N{()^%7hAn^p{|6NlEwlf^ z+h03Cvfvq;UehL!_dD;un1awe6C@377ga!|OA*plAZbyE%gTgA8D2Mo&A)?aW=4Qi zC_q%yYzFt6UYH;Zutbu+y9pvKijbB9NozrLr)?Hvc)9x>)C-jeE55$vVb}$=;vm$F zi-^X@HIOuPh{g&ky$K<`9VD#@v10WmF@~2B?_hxg@=NP8I|haqlR%1~?Xo@rXbSb{ z<#htxL+pATl=dMN>B;+`4iL(W@uhS~as)L^ z&sC6fSQDp$D<)XmXWBi8s}KV`CHFzDLYhHXyc=feix;m!qaTQId?E04y)PDmjD|K; zTpZSx_i7w#aFdrixEAYu68F4(n5MZ~dt zAlG76>I-p(;gwx5?|{S5ESiDgg}`fA>D$Zu4^mWC@xbEo@D)(NnSSPmxFH3@4Nf@R zppk+r9s^L_z;4aJ@S^7xtdZ2q>jLg0m^Sjl++cr&3$n(=qt{d?04(~#`!Fal!UYTu zfCj63P36~!FuV{0ITp3EG!g0y8o91ja7ffMkHJGVjJNA4u;x&ulJND1xb4p>yb(0d837z9i}ZsYwSi8hxm3c6J2 z#wD=7z@zvvw-H%CZvrI9Zy=g6cVF-@?1EGqyayyfNdwwypK=N8%p;s2vF9&LAZ52Ndcay}Uml$*!Igtjh4fixU^Ye)+)x@k=IneTzSmU)*nlf*jK?zY}oz zC3HI^B3fgu86X4Wy{3Geq70yA$X}Wd2z9!y@aSdTJwcqoqtkTeG?!;75fpt5HL zWH`^GmzM*4b=V74kQ1S0&q?sI733tb{1(W4NJ-+_Hc+Yw7w~Ak#NRU005n#{1fH`z z_<{qpYRU2de`}Kg1A}Mh_18_H&~AxZ z(5iQjUejB%Ayw`og!FQdG^DR*$^zBhyq|}`rQ3DK%XjcL3&`SDNizn97iAy~(CFC( zikDu~2kfxu(YyeTo=A2`^qjf@@*8rOXT?pB_c5cV184MX+X{)E7SDUIiu%Q;r|`i* z)3hZJKb_kL&svv3($Hqg98iy_^ZtwV27(*%}ZIP3#Au0d-;-rj_}+X|!-)O30I z{4Puo9I|y03=A)1K(gQr)N3li0X7G;sD`&0bbH+Sb0CW$t&ZU97zLbA93*)o7jRxZ z$VKY9y|C~B+ql$;f#JofC$J(Fnq?(GZG~P_@clrsNH#vahRCv?yTML-5eql)MH0vy zXqtEdN<_V;XIR0i3=g~zJqJz`uB?zWvF#c-O(132Dc7;5i370^KVh~y7HvlHOR6&i z!;5>5p)DVuUQ>UN<-NR`=ctL!5);S4FUMko+0|x9!E$N1$R2F=v(zzR~oBAH>W$ zW{4NxgVwHeBWLZiSFw9>9!@Xb-pIoMD#9RTDmYoPfs&>0BS`t<(s{_I*R+Wlnvy^Z zK|FeS{lJ0z?Zw{HAWyO?b%P@m)_e?yxC_azreJp=H6K$p!b0}N%7?;)^86=wQHej&?Bn$-AYUVeBpbqXZxqvafX0PAdU>}) z{Nuv!dcg32OXr~%UrvEMVyeOf3E8O-JCHI+G1v~wLbE#xSK?{h0P`X^RL>YNFud6N z0FgoTm_SuC?bex4Y^%SS(9CWC`E&Rr%1uL^b%SyURei=tQV5^F@kX;_<~MwIV1Dp z7qezT3`Z(wJivxy2IGbZTuCJiZadhI6F?2$N%s&*g&E?<`LGr@D5*Gsox!@i9qdO~ z*1K~7-K)DUg1m~9^mF#PWXzOWPK|Ko_s zzFdfPNO{p4Y#mZwtb$p`-;#a_7L_ly+{Liu7xuDgPjW%nGpwDL+2G z0P+@QATI;2ipADm{wO>P1wf){@g%?~EHIla7*pfbDHH0KX!4aI%K12487 z0f*1i-w?lqodt&vl3z^Dfx-vVFAH({#c35R0KtAy22~$*w?H$*to46I;4>#4y}X+l zL5_v3^w5HM3ET@`cLuzE?Pw$BvJU0V;8Fmzg#UIRe85@u7A&xOc}qaX_L{c;hI#VB zVX!9|pq?x|gYHTHv)DZuj?pe42rwe5e&pH?u%|GGeP)Muel;Bgi;PCn6 zz`*b#?k2R%^yuY%0*Rv&zhKT6ggD>v7bK20od!D}sYsb{2D|g6;SPE3fw}=<-U^gB zng<$ryLAJWv7zbB1LBZVp!<7z4}sGgcql>eG$OqzH-Mt>{)=8j!(|f49B3WK4Dv)T zuMj9kK&FDr|3l!|Sl$T9l8;Y;y@OQ89Xt*44pNr#BjqO5I-)0 z7><-@8^DHR`cWVdmmm9J)VVE0ydQDrtg40qta#}jP7vv09 zjaqP8f;B&5p{{`!*e|TXu0d*kX2C6cvHmi0l7ehKPz0wb$L0sG9h(oxz_uQQf^38J z|BixvEP$}%`Z17?kxDu?gdN_OL5+_M@BzYm;Jd6|uz(EgH8uGH3B{!lGm#3oX0Vx< zp~wl1QOr=BxCkW_!$E@uXD=aQQVoYhei;xT1pS!`%h^q$2kbOb#J;>@N`kkI-Jp65Uw`?z=nduSEl46XYMpvCoORd{hNeGwXCKE0+rpTMCd z0jhmrW$5W$;LtLtf`nEM#2HATn;_YGVeoXNKg+8`2^!I$2?cnm|GidnO`~t#{D?Wn#xEDmh{P=t)$d9Z( zm0&-@@^<4P^n?))b`4VA?t@$Q;_`W9uR`*6A^091$L0s09Gee_!t!<{$Tn!+mW9}X zl(&B$0{IvzIJFRV@|(}013sD2f^+}%G=AqW@6^608d<@xOE;% zC`N-Cn;*|1LNVzBI26l46f6`M?f{1(TLnreT0>lelwc&mu0aY#54dG7de32oqBi(8 zAM{W(2H6G;#p|F|CEds)WLpoSh2oRBFb}=ZJck;J55c$Jym+)77I&Lq( zRROHyR=5pZNP?RZU-yAKZagKJ9k(om6Y@b$0JZl#Aj`!Mfz1Og#_u(~0J%yp@hKImT5cax*)Huh+sOm7g3iyD1y`_UQ1vG zzVHW`16l*&(aXCGT$Y>ed;<;z!vimvAbv4|`epH6a4CUQ);8|L?w84~xct&T3uZOg zFMo|07+#z{1&;YMZ&6~N0pyxaSj?AiL3ru+9&pSH6=BAF!D4uqUDz33VP&0yH;8!; zf=cmT(<`rGo|N4JjxgWXkOqcbi~u9}JB$%CK>dv+4)2A^KjaFFG_ zyf=`G!fBg9&S3prgi;h5KwX1q$nk+)gH#mS!YzBzbP^+Nwt!1QX#c|qWJfpTw1jKB z!Tv-lWVh@A`4g!cc{~Fgm=f@Pzfzz@N3xif=s_*{-h4>l#o0|DkC^^_2?@_Uh&@P! zq7T>}%nZ=vgeyFwW}t*8E2y}b2I}X5GPX~zDf=sM)$;2tG)_SsIX8$iRu_W9^TqRB z=-xfL8_m04ro(J`VR-^0Ak)AXelkDm z%cesM{?tA2f`8L-#1gu>kX-qq57AVbd>oW-OlLr3z`KrKoyTAn*XtOxbA zKve>05q{1a&{@T>Mfm#A_Fl`q-Ee1UgPZ|U?$K*{7nF26@4sM2*uw*|r`Pm4L~M#%@C_zBRgXSTtB#&_@l+Z@M6g^L}Nnq1vtiYAzp{f zoQ7-wMGEWAd~l4znq=>GfFmAhK;+C$P{bqUpx;yB5$|veBjQ!TH*`TG{=<62!2T47 z$w&>cBCyFwIcOom*hl;FQ$P^?lnF343cfkA%-KZD-{JBj+vy+ zf)}%5Yu75nZ3hS9OiKoa7x717^+qqR%u7%pnx1?H%{DKDAZ~Dix?%HnaL^&SVd4%@ z&|$iv(GHTXFnfISr$CdnE@EZm?IX}Vavr^=8K8*ly#Hc5qOr9HBy9kh9Gg)NnH-ye zke&;YhR&UBgi2Q;r0YP^prxTNPrre-XO6#uC*=f?EV#h}+5l*347yy<2BFyzBn{d< z2U!@lt6q%Zg)Bl^2_y|N+oRW%?>#uwUi_QG!|*co71XK~JK$D*Jq%yxWcu$NMDfKr z@RWA#FgWuvK#bW1S_%7N6GD1BNE$WsT0#RElxsi@Hc;lh2)+mqmU)ZjKm%J5;fy?x zGoZnBs16dEUI=^qLH6{TUWF8$kTOIYA#DJXMs-HIEhMf%&Hxn(AZM(6i=261qqbM% z)fgCFJU;|Wcc8YvM=x(EDC_o`UI$&RGiwbO1MDOgxvhxyia{2ny)p}K;EVYnbD+h( zz!OmV<&}pNJdi@be+{S*Fx`?3E(BhD*aAtyi2C!~R!|Z~%AfyG7^C*)n1H+5m2N4CG&SS72 zH-IQm$bqW1Y=|>1WI_DM191jYP5x>NnjayofenYl#eHyZj!ZV=7i|Y$` zDaQ}85xP)c6k_9x*NBGHhkZN@yL2FB`IiDn>2n4leGw!L+G7hEH!g%ouSH020!f3H zih`1bM=x*hLr_XFT?D!>D0Kzuya3}&5r!85D-iPn8ec^iO4&VnP2)jhvz_-}Jl=qq z8n~JYDO&6iwz+_81C?kmA3TTo51e3SKnYe2BnvHgrr!rSgLnS}aH$R{c&;r6C0JJL zbZ~-&wLS_qfRh$dy7k)#N?J&*kJ?^X%6V~UFGjir-RJ{4?d)6gA;A|#AUmM#cQJ^` zNUe`A8$c!_TwT}BX+I_I~%EFn+`S{Ge_isCMB_s zWGwB0rj}!`VWIir;U2`Eh|n@feD8&~QeGSaNvlFqOB_^s9zuFCNE*E2vDdWtDLCw3 z)FY%@K+>S*~%Iffs9*f^xpQ zghz9Q1OtDowH#<#w*XuaD6RwdY%P+(i4(jr36hdFyqGoxZrkkLpcZv0XwQE*xRZR} z@W3w6s;w7+Fr&d6=>=X~TnozPNCO!G2vb6L^FX&>_VTU)m-f(6WS*tqkg&M}NegR1 zi&Ic)fbMnw|9f_0riE}*kms?rL}zwE!l#v+p8>Rk%cECR4t(k&>+En*hU2c_<77Sf zT|w*UekOxgFmHei6}?!ui-)1vbqAwIcPQvo#ctmn9=)b-!MD4-NLm8P?VzI_dT)cB z>%;Hz0Ti9z*PzGW)wLj3BV`YkE|8LN3Gj;M_n?sPX7YfnW(MsNYxQPf0Igu|K%)rpi0NR6gkC}m? zH{ib`_=wfc&=nrZ7d$#cH`G~x&!u(U;n8{DtGna_#|!Z_|NpyKmaeE1fuw?7({t^R z6yH0EhrzS?7^9D6>4wtNFj>|_aFThEKM9she0ojagYKru-HB1Cyn$AR;6{z?VsLaf zB|#GYzSW>m@ki<}%~^vMaHl(9cDxY4G~5?_LlShv;lLuW;U8{-Bj-gT#BijV)*fs) zW?Jep#FdtOJ0NMP<-rDcxzf1}6lZ3c!HY9K|>DNd!^U^Bq0o+Cl`irriYigCz+NU^Ixc@Cw&s|fWB za@86Vk6g9xfHz*iHg;(;Fud5Z9hSyGsmi05R|!)4Edj-9I>bisDv8%C5l!a5agcP7 z4ma>c4#*s6$#?e#xa4~SDxW~6g0hOtLU0^4CO{Iv-j(14fK>9$UWJwbPPM@k0RMK3 z)YS*ASiq@k{{pb#@2^7=Kmx>Y2_M+8mM`qUhGQlGdC(REtQCt-8)!N1@fR+R;FEGy z!CjYQpsktj--FJFhZY>A+b~?Fco)(L{0wT$t3q5B3U%4B6<}{8CCw!(|6?uYvT?d> zQ!BJl>(Of}2kPH+-hXkgkB8x97~;Ieds`vS^62HYz79@CpfO}qm+Nq+iM;5V4-T|l z*C2tW4RIP$pmE}GTD3l|TqE8J>TdEHyg`hyf|9Rk_ze+;7gF=V$rqfM<}F7grVTNW z#3a=Rk8k;{&|Mra+Yf;1D&7}Q(M)6onRsFz!bBe=6XT#Jomm#<${;3!=SP1nL%5L#YGN6}#A=X-fxrtVka@_b?;Pxb2kf!U(DC7yIX^%J2)KGbSPyO^86E&n|GX$dF;C;g zr=?((h|_!u5$2VF%mcTEK%-Jn_sxWx2ii*WLJ7q@i5H8|%~M2}rv^8#c?Z~5Q1hb_ zZk{;k?2$`zp#DWZa%k@y@Q@k8k!KL?ri+`PGg~h^wnIlyR1d*R_01qzXt8Z~51dzC z^dmG+0ZD_JJs!QLrcmhugmfuL8nlT8blz(oI2>ODBBaAW(%_y6D84*;d3ixYw*UYC zq7$S}4AO88hsvfRjL8B?Z-+?7RX~Em4I%9fk`94Le}_t|BcydUf{G4S-76vt;FG05 zxu=&`trBDoYY7~|NnP^#<)CsO}ju1#m@ULrgnmyVJZ`W6!?t@&21YX&4O0YY56a05B&cRIq|pG z)C6ikNGA`&>%A{xLAJ<3eES=# zkC2`Mk_PuzFP;1U|3xc^s|-=?nFCRsh)|sdl7=RcchC@VLP)!Vq(Oy(N3ZEKsI)Rd zS_32vIzH*;^dtZOzmNoRp*d3;)GFz`|Ke*qJR*Os<6+ok1#wClv|E1-A$=Pp4Rz^s zsPuM(^qzH~1=k?cUnU>=|Nq4rkaFnGz!OCfk98oF_kyHB#g9j?X))9-nF#4TkTlfa zIZ$aYgtR|Q`sI!T|Np;m0CAxM5;4&63K@iIMUb>H#AB&Y>A#4^5EDom+ChzlCarr2 z>Bnn9DVX)i1rg|UK4=V@7j!W#q>~3aTC;yTC?i2ylEMo>r3kB5C}ytdK$zOQ7CM^# za>1Ja|6kOBxX^P2HbI>jg-{(2lGca#U^7(O8X@ffl7>dj5va5bLRt|d4Jw6Rn(zAm z|Ai2U3qFgj*YsX4Bxc^V!jr-0HHg&z94dVtA$V1NDD z2CIHRJHB2RfFz&=(XvYreLM(#f*@&V()5Mq@3$@R0Qj^Ten63FB~Rr!re->AMDqd z^Z)<9$OmzuiQ^ok+xo&A;hX@FH0TUQk6u#~Xr-ZpkTwKKLxbHFD$R?K76M6w41dW3 zYK1U^xZo}_v`M86@>Z|u=hGq#FSbqMg8I1ER23xNdH=9t{*{c)>Co+=ByklRP@_yL7&K@n|-v2ZuD| zBUr)1@Y49s|Nk$-L1sgfbjSrz=-+=~jIi1QByA2!Z#K|a6hTN!t^mcNsVPL`E>K4VEaRX;fO_MiIy|HVd-a%g7S8w)Y57omI-NE(_`k3psL5YojUX;AX?=rz4_781w) z2;HZaGQ_i z;{X3ICW5%2dds8Nbkk{w4|5T!i$Kz*kW?%e1qnVsgmf@S8d{Q>L#6c*(k38jQ2G9H zCMd_Kg1De`09pzNwTlsGb?x(4p;4~uyiz+(X~_Z|EH|HVTP7h2CA zg{t0*P<;p_4YjKdDm@P&y%;17O*)*==0rV0x&5Eoi@YeqxDFc6_S z3?vPWd@ZQ75klG=Bn{0wOwjleMo3G5q>=N^S8(}k%5hAD;l=45aNYqA)%Z_E zNZvVJ4G*6Si=dMbFF{)}pd)v?L4x2s04gj^6V8e-yqJ#AGY2FMj$W{|Xq*_siwcBv zEl3(#+F65gbm#pSk<~m5FAto6H-{oYYCw$-k6zPqXf88F7-0pH20NhF6k6lF5JN~y zgQP(T$fMWP@1h99%avFD|9`;>5{2f)?a&Z=SOxd#vxSJMuU#>a=s1LsJ`R$Gx~K=L zdoe$<|Kg30XhBU&prSD zzX$|zp?%@FbCB{w7opk+Bn?VY9=)cqP-#Adv@l2-R9JiTnnppT-&ewY{AB?Tq{e^w z3Dkgp3gSW&_eE%7eGsAg7)TnL;QXM5EkZ~y2T4QIej!x486n*Pk_I{D<%Prl|Gxn3 zC)fo|+()6+cPK)26i79=LEUS54JvJhkhTU%LyMRDP-$_5v)5KBTt*9?N(+ZSVj8 zFXn=DKs#N55fB}f2px4GX>ji7HI0HwM+q9PT4kfh4xoU5zWcy3Y`TzgFa0GFoqdQBXHHR$1TqTe+w7szmD*dkv?o(!vG_>TIcN7v3 z_Yu;d{RFT!KWOZocM?cVuj!Qopz^I9oQF9;M?FYSK;&UvS4bY7jxcA=Tv(Z@x9b1@ zU7$-5L5m!YK`hKG1GR#|BXJ(x1spHV^@AIfPhG&~pp0QVBh2)GZaZjQ^6>xvmwGS% z|9@c$vIZK)KcNMdAVP;2NE#XzOwjE7sT3X--{!K*~Y!;L&T!4fV+qgz}XjY3ON)zTuEG--?j#0!c#yUInT<4I!Nkk_M$(*hxt@ zApsw~UxeX>TpKvx!G-6dK19H8aRvw23ps>2$}n?Y*53s6e?eSmk(~o7jyvza_)r25 zfv>X>n;(*((iaiZ*Fe&slsCAf?Dxe~4kJ2igA9MU2vm{Tz_=d0rgor^>b(C#0-;(K zBn=(3bPR*o^|Ki6?SHd)7{Diyd-R&hKy}|jNZ$uZBgcjB5m3j@^!#2Ch8L4s5OE>a zi--#iCrDgOLYOlhX3k3n&=_F{hzo6oJ%KtZ1)(|Sf0RGP8Vc2B^iHnI)>6-}Ydmw4(IMynt z^e%+-evmXMd|v8r`2YXK1`rpT36BIr0=oyHdLl>~8nI`g(zyufB9Jt+$=(UAn*0#b z!60d{U989d|9{~E;zG-DvE7hBQb4Fy1xedO{B_U+;uJ=NG#f}7bn7`NJwv4*6~aU1 z`3z|L|K;iv|NpcwfQQ9xkTkR<)b9oH-FAfZ9*{J&!qna^!the+GHCo0BnqvXyh0$F znh=`WLDEo74?tO}^ZtuugmeZ-8k)lIL#161(w-n`a0)+p@c;i8Rv<3aupVfYErw7n z4U&fDrf#V8_k6hb{!D}Rc|3YeJD}1x5Yl%+(xAfn<#~`@=RjPjzh*(>auq`LdXO}< znwbri?nX#Y07*k*XXjo>I?6#v7fu5;1Xzo9qKvjJ11p4$zQ{I!3mtIHyRZXXS?;jK z9DNbX2e%(UqivRa@XGl>ARBs3r|b}6coAL?_64{ayWNf`I^RO>7JLzo zFee6N4k-FwI;{oue?eTZvAw2Npk7?({TG@D)p{UlXmS4u+OOwANb`fFp@ktcv^aa6 z3-|GdDX_^2ksf&VxD677HoxyfORen)J$pdX&^T>{rk@!I>A4_jXegZw7Grq%WZnP& zFWNz((2(yu2}uaa2u&FvX;5>+qt~<%D(!-h_5?{o3(6X(v?@Yc3nUFrvZuQK|9>G3 z;({XGqt`SY8e-pb;C}uynTKH)wD2m3gXGj32;`n2GhT6xW}16(sqziTOR81`v~bLlXxHp zg1=x zb;s*0c#wRU$iuJ;I)%#v^~D*4^hJ;~bUa8GD!mpVy=fw-l??Vq(v<)IUn~MChbHnD zdmwRLhfv-Ol7?C~A6kCIBcxM6($H$>1ytGrA?=E=OlUHw{SQ(Ot)e5LJ`+SJ7XwLq zKqC7Pv|RX<3HSK-39!gc0i~Q5ATBiM_dsi}BM8+eLDJBm-wTyqijZCfl7>1Z7+NB< zA*8!O(%@i$7K~0HHNB?Qn?)F2*i|74#zRerg7FIIw#m->FYFNJID^aqS@SY&F+9=e zfdoNWz@yjHb2B8&xe$8zLDJx5B)z8DPLRz0Is+aIANmo);WbWT3@@cX!?w3TqR_-! z25rr6LulF!l7?2l#Zc+#2X=suwf=X8)q-#Oapmh2&W6A&jFY;hqk6zQTjS%;H zAyoT=q@l%ovOUE8+6ZX_kTi67q68|%AeSg&dBc8FbU2-VymY3OKEJ+$fj zJPq#cH@(oNuSc(`8&vlRg!EaEG$_@LH;6F2XedXdUX}(#>J@`r1Nx!? zVNNT|oR=ck{{MdgS`P;vHS*{+ox2I*<{*UXaFA-~D3Y`zBz%k!(iR|TP+)uXnwCIy ziy)*WLDJxI$sM!~fD6X;=rx_a9%9$CRCoZq?%`qB1?`=#w}aSq93g!MBn>ULIH1xi z5YlTw(x43ZvI&&N=7G4-{?jaXh+$O-)%750XyYMr8^kHm2FuY(b+6vwszP^NuVHecMVh2d{?M}vM z{LE)YG=5;)pOlP{S4_7h^Dw-a*o9;xuXm^z*hbT)wGbQMG#}D_VOxUYkAL=J3@<#B z5&k$0xpw}ADaap>>i_?LVU296sVU4KYeFFx3W0C8eqPK4pXb~S3boGrFFq$>_~RiH zraz(#k^QkRiHG6E$xbAHm>ymO4Y^ez5F1~EF5xQ$*$53eOK21~V%o@$CFEWhAlv8z zvN609wz#~P_Zz4K-fQZ!2AqTq54_-lTLq5E({^GEFT|2yK?W9^Y9Pw+f+>lI!Kc@> zW0eTQOE*x+9OTkt&|x7^FHBf3!tmlpAs4(I=K?LGSQ0U!+X=Kl6!&e#mlEJUyWS2R z#09U+g<7QwvZ@!!s+-WNX=Vb3Rra8ih1;rhgjG2(t6r+Yce1<)2ML1LNLT*{^?6OL z_K7gO+zqN(Z9r0>@O}B<@BjZV)~Cb zksu-jMEHXUFA(7hA{;=3HHa_+5r!Z_2SliY2qh393nC;ygfNKU0}-4cf(1nUU;F<5 zi(eq(D~R|2B3^@tXCUGsh`0kHu7ik6Yv2D*n-J>J`P4Dov-7-Tm}978=T*lL&(1%= z9-W^(n%_vg&})UPt8JMJO544>@q0ud*EsleJ_pqqrlKoE7+&1S1GQ7a1z>__+(Z~& z9L_`By^^W}IZ^w3EDwW6=RKd!=P$0b@Gu;AJp(E(x0;M-j;;oJJHH1BnF z8oxZ~P#v&!zMbD+B(;EQyE9Nn@@9jE=6X#}E)`*TAr7&s25Qv~@GOcSXcG+7s%hn@ zRvill&9k^kc(fiU5%TOj=Gn~#-#n&W(hb!GS`P;~MD)2wFE7t-NWpFzwiHr9eFW{e zo|6l%pgej_Pc9K*cwq~++Ft@<0%#eNG|cMeBcM6;XvY|kXJMQEZG(9jApY#-J+w;% zdR-^_*|olXuO%?CI-CBSyW z!xyGG*rVH>qw}*zcZGvT@-dHI6R=S)I(%WqVAqcvXJGg2uK?|w?R@%ToyV{Lh9?a# z8GiHZJmAsm5Rt~8&#U=NjA1|MI^Hx7{=5U8y$zrpm7d2P5p#DI14stsK9DcLTRH0)7#P5bA5>O`1p9PnDEM?282Glnt&{WZO%pJ@J;A5*nc;tr z=EIDh%||R=$QAzo?`e6r^rdgNnQ!a25(D4vJPwfZ_Ymc2XzJe;pr|js0L~hYaiF9J z$$!XUhY}y*o}K@}Wq1fU6T;oR8>C0X7fBwf-J~=`H!lyf(!?*QGNttJN zjEaC~=U-3j7!`>UNof3nN~3P+7f+x6{128WeFsu!0AgE|h@?$`${&TwTR`L;JX&v; zh=9TcD!=sk&;K5+w@W{O>b4mm#m8Mi4J-z@zd%vw!T>IxJi6;S3@>@K{x8Y*=nfa~ z==PWJusl_gmI{$L>w#t$Brr%Jzi^iBZf0FQ2W1CQ=< z3lGZ=CF&mC^%@?%Jbxite|q%VoCPIu!;>D}3?7U>JuE+ze)V8H<d|dsc;JQ4%Q9f(U!WpB)G@@TH}?Q2A^3E@ zgam*Fasb=_9m`#N!lT#L6x2RE?t0)NF9X913rRjuT@UuIPv`S};L)*8*8?x)Cka80 z=LQ>he;;@Z4kW=gNr=ItJM;!3@VGsik7$5%dFWe{j7rZC`|NmdSTlgM1HAC|o%s!89HjmEQA0FLx zAWMWjdVPODEa^P2zut{1rV^n~{1Hdf_}@SI#27js`~taPr5|2*!OELY9{f6oA$}7u>*f{#?w#yF`v`;^*@vef8vi(O};6{ z@bU;eo`-AQuYO zez@!U0V5nkLE(6*iuV(L%&Rnhji)aY{(=3)`{^b~mw+ocKwo^~7YzOJB5olhR9}4J z7YP0F`ZT1yyAM>Vy-d2ozyRTc(jT}y?feezFPt=F1a%9+#id8*@s}scKKzG;CvyHk z&m5hlA71ntGD3#M#H1C^aQfm zHw+KFnDXoU|JDQiEoVT*NVn?=$8Sd&`CHq-ZT{Cjy{Q*o8-nu#r~vK=76O$NKAjK2 z*#}ar9e2IJ4B8g04RT87VUKRt6L1BvDxlN#!V7MYeCvUdZJ>ggzvbD!_y2u5U!WF- z#S(@E zC}GHeBmC-*qlVuR#uuvs!Qof;_VsE|_}ylKgx_TyY~gpeo`K#W%En z3#yz!<20b^>P6Hx(757rQ2*_}*Qfs;o%cXFpyZGcXnWKP9S%_50{037b$A(kIv;xU znyQ26d=7bZv#$NA25lz!lKF zkIwHeob`Aa__uL%o`Tnv<;I}Qv058s>m!d|(-x3+JPj3$4y9}j6-*2zsvy&1!KQ)yzy~w!kl}$B z#~Q#@stc$`4w6)cNP^B=0?8n{2jKV!1&y}+6=ndnUY>#mFV28UqZfiPTp*!dQwK%J zSTsWn7lUidlTwgBJbFz7K{FP;qO;C2Fc=Uz-^{yU|DH+#`&T#;7QbhH!TtL$0?EJn zkn>GEdPNUw!u)$T0>!`HAb*@h75ii>#_(b*s+cuM-9l8cRhl9UFM5&0K>nSh3Gr`f z1e$+2G5s4D0rhW#EX2PK5h(thcpvOvuUxQyl_OyOz4H_9Up{32+JjEW1ql0PxxH!&RQ z-wB|**E{dO2na{x#J^L+(EO|U1H-?CVNm}r zkcPx>LKupFEg}BBWe@hRa~RCOf4;;0s~3jk-+0JbDIUF|pVeUgJ5qAaxf}#crvIFud4{BnI;D88wK1mxiMG*YZ1te;Y%g{@ox2@ozyW zihmz|1E*)HbzuJnhr;~JgYd6iD3X8kAxAxX^olaW{VR*)K963}aL^nCC#skd$iH7h zP{P0+r0yZA*eg{Lh8Jg%#6bSNqYClw)(|xRdVa(3@5B(Oe?b?+gDU%m5ETF3v;wDR zt=VAzCWpZMEAtH=zkVS|{;h|c66w(^Dy#~NUtJ{kdGw0TS}elwLK0Oh$V!ai1uLpp z7f9X5V3aWUr6R)c;x3XH$iHt?ApSiXjOO3SuNeMa7!39A1<(cZo%df%2uAU5;BRpJ zR?PzYw>TK)U!AXT|HcI)`L`c(qNPW#sIm&ozqUy3^XL`5yGVrLg(j-lAxkla7ow8nznNb!{JSv->fZE?|jIy$R53-#>z1N`Xaf{qgPY`jXO0a(?2g3a8^BL~n zx(MLftOWCKERy>?dPS2LiZHzJL={U1iJ78`6@tVRQN^^BL>ON1B8h?G zS4IgEzh48;{M-2n!@m~;p#Eim`u9KpihmoK!Tyz62=?#d0GNMcKEeIl7l7p7{g7it zJbFcg6=D9(4M4<)N3ZCS1tJVDB2mQ-nTs*Ja77i{0#av)DrTi9!tg>CNetv)9Yu(L zS<(GF^CO0TANoW6DeNX{G0O;?%#R-Nd7$!IZ+rCjS4XT z*7~FPmmTDfOjNN?W?~F4LQ%!O%@<*K;fN~cr69uaLKjI4;qhCiy5l5h z7)s+4WPmH=OB%nP>7Qd_4E*hSj0~Xhyn~=or8F0Qjf0SJu#h`xF8m=!J~{G7+(_fs z_yHQ~`@|n{12kG?d>k}P6!+^Bf84!K{E@PU!F})u+k= zKyrsCr19$?FL(LGAMyJWzksP9*dmC;HP2(khSROe_ox46cU%J&rSiSfF976c2646bOIoO3<)>^AQi1&L7~h zddE1>-OwZYI3g`wBE0Q97gbK&h`sH=AdtD?{^d z#u81BZZ{6kP8OBs-%R{128;|0j-B_xn_CUPxpe-2p>|RL+OPIJ&Y}Wxh$Cc#BnReS zkM7zDFYZtJ_20GizejiJ43Ey^{H^Oj6Pw3f89*9f8lmGmpy@3B7G2PEVsGgJpI+Au zJ3%WJ3@?4=uVa0GQk{WcjP(JC(sW($BHiKBe~)h04Ia%uR7!MRL35_lK}L7FGI(^m z?f?n%w>X-TOw3!K2r-dJc4m<;9gc z$an}eP#l~8GnVqg-2BoHzAzu^7P%McBjz1jf|Wqy|+L!P(7b2o4bb4^OwaFsJUS11^p*%Q zzW5>k0X*6I*rVGOG-U)yjip{5%||4BI$wZOBB+1?um9;Sy#P)s9>-lTfCklGboqiU zcnuo~SOZ%BFJ(aq}kOpRe5Sbw+0iyA>e zhSmcm%fNGt);mB;8($v;g-bUxWJ-^#w9BKLl^0o$2Urh(OCBiId}n4*U|=X^H$3pV z6Qr;6{)>)?kN;Z_lx#9Q06yOO#ff&1XCd=ZAishag6#qY7AVrdtHD6yhRts{Ji6^X zx=n8!Q)hS~4E0cnu4D64#!@!W&})g-3UEjqD7EnDW(|A_PUCxL!b0{#_4og-t#A2T zr-0H{^AQfi1F*P4$}a*Qofn%Q%6l~bWG~(M?U+J|OXDMk273mN#$OB!j0~kqJ$eHK zJi3KEJ4IAHzB7P)R{~n4BH+>Oz~Rx!44QEV&!fW3hK$oUR|qiix2A%Eq&q+XRe$LL zk8THr*ZVxWjXk?_{`j0Xn4h{>*M3;j{CuqX6^n^!m?G5C_0GfR~?s@|hYA?2f zb7ANW573ZwukQnoUR#kT|Nn!gd?8bwp)Xzt|KY_lC28A+GT;tfpBDm2egEvs19pNp z;dcJe{OED{1!(!1oKJ6x86&8>bg=&8f6)BAV~j`V@z|G6H$MJPo8SRHU7dk}!J+e` z$K}T!j5jKDJbGQE8Nn-hkmWrrkCko)jpV+p`}p6p^9X3T+W|DM0aE!grT*i8P`M5o zPjvWpoUv34Jk!q#TD;*5&iat_iu?qxlzC2|IM&{H62_ki`rjhkX!aWHz7Bbix4BYK0OIp9KhhwdEKM4^v8=ebss_X!H<)miKX+`L1uyHkxzPjzvt0; z{pB1`X^l2M?9utbv-3yu19r#e2kfP)ATJhx*Z({Rr`vxlCEPnf`(8Yn|A~~A8y*0= zzxh84e+y{-)1&#n2!BfnxMuvX!r$_Wk%0jeV*ITRAXdYF9{!eXAcI;D@VCBYU|`q@ zDmXn_zwx(DWME);y&jTYyTzLy$#-4^MRBx8^FJ2;mX}~7|B3LooCj%d{-?s$j52-E7Sd-t)(hZp0G}occGLfV|Nrj<6-qDPgXJ*W6X9=-{P+L=OZNZ&|EEm= zI~E++Dj-ws!8%JX_D zI)Crc`Jwp%vq$p}rV@ou`~q$QY5ea`rt#|?tYQbpdkK@_CD2MAP=56QH)|Le7#hG* z9+u}yo`7n+=4XFA4!*MY(7fQm`N8Ah31;xxxz}4k`P&1O_z~v23#9Su9ROfa~9O?W8s>Jt! z=59TDZDa32ifz!8!0y>}7`IJom)!v2p z4^%C^X!wfHe-LLd9Dw@I@=yubfB%W~pVD^h{sYwm|NsBr|B?~pKbv~&{sT?bcYX#% zR!I${?al-)4nbwD2B=*9cASyF^&Th!z$L5+NVc2x>V44sCIhI277593t+)AGL5+8h zZqWq~L6SlqmWN7mU$_XuCrT{^85xi&Qp>Opi1j+4${^UIn>7Wj7i4hB8jt4REc`7^ z;6nMg2!Bfl0|Udi!;GcQ4ZnH#TV{d8yG6ahE&*9qIvKJu4qUI^2?ecna9{wf*L=M( zZGuO4FvrU*a48H)SKXq9cfihk8S?-C{|O%5tcqYh!|P^9x?;5io6PXC03t7{3FZsE z1Ql=-Ji0}1g4GMX6oJUIo&@t5UOGVdqL%j{=7S12kolTmKEq1|kUS{=Ae9FW(EO@# zB8@+Uw|}P?!!A%Up2n}oduy8*Lzx7qDDpUd2o$M1KzS&QU;l&$zZ*0UJ1`*SUyw#n zk?{nSqHq)$Q$hBJLLC4~i_@$+j}S; z0_8tO(85ax1`lv=5>yVRfmW7VUN6~)$J#|m{TE1K+xZmI27AK+E_XrU;3lvSyp^c) zJ~;1t^oqXe6JdDaWy!^`54@eZ^ZpCo>i7RaRXFo8&?5F5u!cUSd#;si!c#0ygS!V5 z9?;-u{=vlGqQeO4>x0WsP#vIuuuSO_zkul1?cmZ>ws$LN90eR(r_%WKZt}OU1`l|E z)t)F<{KPN78wggTe}caal;S`G5}=io43PE|$gmYq!yLd0!G;|It;;Gi1}Q!W3eYru zjhmo_Uw5~F>Py7*}C15Ag_`^ujbESl z=oT>s{^t3h)eu=rKO(K?1=#=^+&Kv{y&kMD^a9BA6A&xmHpH9;nV!ZEG8N)G{x&&K zRc-~U_YwUIcslT~yk4S+I}N;C4XS%5fTQ*>q6!AN=b%Tg3pjY7{XX8uv5eISsUGh91yc|LPQNG#@}!65g%XX|Nud1CXLt$H{b4CR>H9i$nQO( z%WG;35OcaMUZ^mE`_=P2T5ngL96x9Dm(JcvDEz}+RV^=HKA+~aN{{KJu(&8;I z!;8)3pg{o!M0oJG27&#}y6`GeINo7^goznQ4l>rj-x~S<|Nqxh!SyXDEI^};p!&P@ z8-I%pBj{eOzaF5afBzWyTe2BJYj$3He826Yzk1B!B2!?zyI&;L1s+MEsh zK&3jUz5_MdO0qmUZyBESSbZ} zusl}8@4>(Rw#UWyFG2YU6pkQgfhr#d55^z-9iSG4Pj87mxFc>+@bSM-=Qq$YEZyxN z|9f;EhBbF5fubIqv^_kV|1g#``E))&I1#jW;7>kC!#&WBqt4@?U0$&-BiDaKv_E!( zDph1R!y|~LbPc%s=F|BcJo4cf7yEKu{>T3>R_1^F@7a0mWg;kw;Li48d{M#W-5aCJ z`10pJ&?eaTuTMbR=b-u)6hWZ+_KiV`M>k|ayGLi}55r5%&lpRqKHNwJ$)WD`@zm^O#4ktIREwSfseayhXaMGjm*h`ibpzfgqXuUswOF77=;0`o+ zEa9|A^Dh?uR*?U}g{Vj8p-=pRt~X!>vhgQ=0S5t)(1lO@0=^)^^#-W(!QYh&YKgU` z|Ns9VTtK{x2l2uEX0-D0M9F@S&VwkW>LGaf_l3e#hSen&1ItvC?uxBcpV;#}3foGN|$7VR@Xt^${p~TW^=J z9S0>w2I&42q^%G9t>A$W@b(92J^~G!z2Kko5j1e?(Or9@ zO_QNc5(X(USPR-Y4{CYxPd?De3~G|5@#`NfQU*yDuK}BIut@Y1f6PHpb$-Buf7cKD zm*9571hBwMJx~Jb`~~(l$PJ)wa_29P=0|^!D$4`lcDhG5YsLleK<7niG01w!7wqZZ z|Gy|IdjH>}*YyIpv48x<=CA+%gN`BxDe44`JvV`Lb%XYt+(-kB{X^0>tp0$^(SS-# z^tl;C#PGMAL$vKiFo2|9NIGzXx0ZCf&hXLv;MjSz`G*{TKRD8pZ-A?< zhu~$<-(RfX^z(nW>y*|5{C!6l85o*>@bmY-W@2D4yzOfE)~C02fk)>ppU!`va_x#D zXmf6fihxJ5>lB~P=RTdEJTz~4_Qt44c=VPqF}*03;9>Cm&Y}Vy&t>)O21&Hu=5J{R zU7r{_#fR~;i{&f+{xwVt3_J7;7#PwznZfA=^?vGVkUyJ`c=&WafEI#~2`L8f8g!3d z+ee@?lg;h1_^=PuT6EkCI;Utihyb~NC;0pikSD(RbpC(wKLfO|`1_0P8{z)uVPar# zv3$YbI~kPql5eRN!HFX#y@-koyH5me=`PbU~(qQXbY3m6xobHY&KD1toIB|Da^@}5X0&mTJA)vs+0ExbLKAq2fyGv9Ae0y_LBs?^a`7nNau~7^;27SA8R3v;`-}1MB zCJDPkr}#2{-3PkZ-KX>Y_gfyxmtJg42K9|@^S4-l2I`VsL5XvLr{+z_5DM1i4_O{J+fn$d&!?(js{4ES1f$c7`^U@qUU1a~g{P6exe^9CVQs^&e zG!E38Vem}83rd!KMSuT;!k)>oHd|X^`>HU*i!X1u7+$)80vIyC?9pp`7$klNB%br<|Nm~+1&*Dr4BalWb3md0=Vj5K z|Nmdq=AsPW!1sH6g3O+v@7DrXH9DZy1Zdyi|I$M6;5Awu587Cc7-zHm&ffy+^@E#= zh2XwcwFjtWSqBO-@L)BlV&iWCbtXZTT4@H#cpGH9>q(E!YcDU%|M=gdn;&c^q|3!s z+Ki&OwBqE;s(Hx$QNsf-V?iBC*m`}WvDg`)k{;CD>9tim_5Z&|XXp#ij1RcIqxuNe z-YMA&X-SBKsu+~PKAw{x13It2m1X9|@gP0aXb;y`>u*Lw!0w!e{2N z%-wr**6#4=wOx1;+~C>(I#=k$l83y|GO+WwXXnuuR~9gU$I|uDii$(<0u(Zj3YpPI z^nYDDpF1``XXI~HW@2D){C0%BR2HHHJMFlz`$=`CFkpVW3?9uDH0?~u>>3r^S z+;s)0dH>>4E39{;)dTC@@VE3q#?JU#e}nTsdnu%&1TMkgMu8_s!CNRHMzzC@`rZvU zYU%<0Z3kKpl-PT8-hj5h`CB$Jfl3vasUA$A&c}P7&W{i$f<{3-I%7AyD2o(g@a#PL z^8Ua7|6N=D^S6Q`5$sz|-_|Gmt$m>>{#MW=&L@5WXMr^S5Z0_Epa!QN>#l`j4E$}qApdqgec1{siMv@tL1u%u zgLPZHm;g090Ob768y*K=*uSg*vB8xL0|P^YhvjAd7B7%(owwla(p%{5($^g?zNUjp z59s(5xRgbjuN4NDc#!$pm$QF^>PiN9=YXs9;Y;zwpw1LHzQO%>$X;;pIw6HLe!Y|Y zU7}2&2}H;WE>KUYijBWza|dV~El_1-`>$%5S13OWuTjbGyy$Y>cAkLDwgV1o9mK<%A0e*Gh5pg~rc^&1fNHrOx3 zgbQer6>M|cJ#eN1kE1^M#2M^2V`P8N14qVTkaI*-z%H}}WnCMv zoeZD&1^GaSO0?*Jw}}e!zf^`82TB2<$iZNg4h~mv2ta&(<0WXy7Ub8LPyT{7nSvuF z^aVUB@*!G6Ux3vd0JXp1{iQI^PROn~(9XoKkd6~da|5)i^WIEwt;gTW(*|0EBU`sv zox!J9wc(~P18BTaE^PvM-4m$8a``jpI2_iP#h`Ukhe2cbPds{k5BPL`^67l%(+OGt zVrzd0T*Dp!Z99G8bPKdl3e@yQT9YIJiZ74Od!R#2pzXKVmlDB33@?IHKsl5F?ta(; zDR3_1cu{fyG$sSuC;v$u7RbzRhuQgCZi7U@6JVgdjG%QWCl7HmfYxd?|6qX(D1Zc~ z)NnJvt1-|z3ZL#|2~fe`0^)ddI}3p4RRTaQHvZNh3=EKoC68XyU8UfL_lqPEb_P&s zeF;f!!%t!GF2`?4??Fy%J;1=g0PeKER)yvdaM9_}Yg!9cDFZR3bsDI*i#l4&-#QoU zmm>m5Eqxm;W$w80iAFTYXpi%9YQsDd!9vAAo|Ki6NP>3FW z$?_kxBJhr9^AQRDR!NW3@<^;89lmL=N|!8 z?V%4mdQA_Oz*bLf3j6;5g=`X*_BE({FH!Tj_#Zs?1)g^Eu)JQc0uBj}*8de!op#_= zDlXuaDBvYp|4VtnR>JlRgVx_b;{775Dg4CnK*KWy{;3C=4=|yew*j&bdHs(xC;`4W zbQIKo0M*U^L3J~<9QWvE_W+%r0AAHodJS6Zf+P{+9oWq)0-NV?@Vz}`Ne@K5M>mKI zZE1qcd(Z39{GAcBVgWQ^1iR87OIVvw9-yYXR%yZ;1lSF@wU* zqxl14^8-fk2=oh)1W@sT*pD0R(Rq0nI0C^N+G}rs)~9)NmR|7aExmwND!dTC0czN| zUhwFyz2VV$526p$bLn(_@S@5OymuZn#{e0FEoFoF@x_98*!ofMZ0KdfOCCg6w(9!- z|DA`xO^((}rSho3rw=h2(ZBHMhB^!E9H`Sk&U)-C#PIsi3z>M73;OjhH9@5ej3p!5_RG)#ya67+)vpr-=vSe;{wD$UT*+uDS23);BP4bWvR}Cu-Q-0sQtq~9-OD(!}Tvg z6J5~y0~GuGt)MRdCw>8c0nh+jIXAd4g}4uFC(`^dVyGN6BIjXwyyOfhIKcC!FYG-u z4|#CH=S@$&-T+R&9-SY+VIvI+8^}ON0C-siWNsInPQXbt2vpF5lW77dnWiHp(@c;< zOF@D2LK2o@(!kTt&~WJH2O9}1+?Tve>IJXI0jF2c+O6Yt6Tq{^pk>0Kb)WEbxf&WX z$6{ahfx906Kr>s-9pH5NzjPKv*Hp;-FC_jk{1XAT9Nj-jaQ{?*{8Nwc4}VK7C{;B7 zVkyl89YEvS1+wkIUytS=jHP8@8$CKNfbtWXzvjH0)q^}<16qE55j5UqdAtU)1nwoM zxJ8uLi2OHwS2xH`Q2tv6>YYLI-|Tjf%|Dn+y9_VA?uN$K5AgKZAz04M!kfN#f=&Im zs|!pYf9VMtXoHU*p{4J5P!xg=TnO$2r*CdV`nEAV5PKMX{^&$W2WZ|2I+KqjErTYj zVe{Ld@B&YTfu@{b>G?!4_0uz2_!JQpKHzRJDF6Qk4dX)R13@!a$oU^0KE@s3@Zp7o z4>%iEFo8k{k`6J$sR4gD#ev&m44`bp--;4GG|2C$;ltkoI#&h}M%tiqpu`oqjNA%N zJO7|5^!Q8GU!Yz)WIhmdmg5VRc5rZ5AP0vwD85_&mmEWspC#u(9xUAgi~NJde&E84 z0TgoJ`4sedP5zb)g5{+fIPAdX6gVRAmWQ3V%R}&l8p?rW;PxDr@{!W=&=KqW(3gFZRNw-g5 z{8t5SL@AYqBtER^2b`Y3jVMTc3#nhezgz-Na?tiK_*x}Mrxw&QZGI!+(am~ms~TuD z!u5qmx5bOAFMfg!<8plg>X>#O{{%WM^hLmaeg^pR8EAbEs*yl#Deyta@cl}VhOkFx z=nYVt_ooVf%M$SZFJA_a&hy}@#TU(;(4mD&&a>k%B<3~vAulQRZgIdAetcJ)|=0L3k9a-toE$wme zHLpkWXU68ojNrj~k8akatzchWO@;ZY(*67Y7f*uT{|84DD14W%1C^d&e}d8zD9&F@ zegR%c$;%9K%s1cnh_$5#X&(G_2S6+Iv>;0oY?>djH@{+T{>50PfLO-o(R!ei6Wk~P zm7}pQlR&eP6Fd$cV2%YZ3u!*V1kw&VffLc)0k_6tMp-`p+6@S=w2UTT|Cavv@gu~$On0E@SJ669L)*ZX*3QBn{ z3=G)93lyG6E%!S0$~E+t)Jk1 zzj`P5yPh#HFz~lN06SWMH=$FE0d!L0!I$5DftyUA@B&-%K|{+wUfizy2r5~9e}E2# zdsJbw$Q-}hP^S`Mf22OL_#Si+IUAI@vh z4H{gJAsTEO)LXgQHc2WU84|3n!VXfe{ib}@$HnitC}z+nPf z`{Q~8zVHy7j}CcQ9^!9V2C}g8g2%xZHq8&%n_n=43g|WgP#F#$v;)Tb&65e1ZwO z%?x>+3@8D6SYG3A0j*ZRnJiAc1a0X8o#*`hg+@7Ov_|8^OVFg{i&H-Dk=C1o8mFD# zLCK;t1RQp19`GI_f6G2l*meHf1=FusfeKmkJd{i^Ityv_8&YJ1zOz(a_mCakN+n?%?AY<)Of_w zzGEemJUTx>)_7x#Re-k&r%mucjgP~i`V&-lAdd$NgTv=#;_LtaCxDmHgXdMDM-YSN z7pFIZJd9HRI)djv{(vSiI9`Y^ha4W+&j4Oyz*u4lS|@w)2WXT>-lsQ*fpIrzs1sbC zbl&%9KFsuDNskbNkLByq_n_^+u+?9&hbMp)zE(u)@85rM`4jy2JRWIQEw;;)vpydy+dJNno0Pm5JfE3~G0tkukgEpOSebo;g`EXWg(>8Me^^2SK|6sTQ_#XTOD z*Gq-KTSh=@GC-z5TGY5#AFloPAAFt!sI=s71?_VKmzXH&8?@dZQXB+52c;Jx)Av(Y zlz|IEq=X1913_u9Bm^_r>;>hP)&r%Mh^U6Fb3jh#pz01h00K$p2SBO&*y~x~a6b8R z)yMxx^#LM%gHGs%ByXtxc+isZSkO?;i)#g-3O~a22g0SGk{awv=sITPHsp7xD<>gb z30~q3st=Ij8Jw;`Gh5)jxcn`k_5mb+f|D$$kpL>k!D$(E>WBy4w0z>_R!~xdr$30+ z>-;U>K*G3U`NYfXpfrdry&QK11q1^)&3(sZhDWFC5AcyF(DDg!*8p0`ZRS~^4LrL*Bix`ysLw-C$HIZ( zQ6zXj5z-D% z_+F$-FaM#IpGf|-gSamoy`2OaZ-Cb=o!`OZ1E7ooIy(a1&^hrk=^to+I(q#Dcb|vl zdHxpA;vGD0lLyr`;CdKk{s!W&GLZK{dr-0aD;%VE0zx0yzO(rB90DI40%p{18wL34)4zAZU~$EP#FO*qK- zHMsvI2OcTo1g)I|pHBek6v*BKWf$aO zJdpQ^AA1);6*F%i10^-^Nn)VJ1!&Qm$;(+Ukn0n~I2>e~=S%NWP+yM0qxl`9hvs+w z2GCAO$bubceuAABTcG`UP_fJ3$_74>;ut%BYYa#aXnR63h=DZD z2RgY26j%JMpfP@MVFxPOK=akTt~We-OTkAO9tTaeS6qP%IDv*&co&yK2b@6r=2?47 zLHp*XGcqu|FiHcLO|B0-I$dADk}(6)ppzlU1sH=)3qYdqLd63#=)?gM>U90!(Ovq% zqr3LS>ng;6HFEra0ObqR@Bm#vb@Ju$a(MW9H2-7dZ#fe4{y)fP7yrQ>cEH2(cxjln2pgwA4({Khnh#o`ck<B*$m&ZAPwoPZXT7|3 z3qDTM`NLzT$9K?F9B4kc^MXg~x4IzEIaHvlw~Rb`{r`LP)^IX<^p-F%zHXfGV)oPj z|6jfX`4n`JUFnGzQ6}K@b^?6q71BX2{4LC&D>JICKnt@NJX$Z+ZF{{2vY!w#9v2TX z1g-gfjlYErB;5H4dk6Hy%jcj{2zAiqCCDUbdm5B>!FxeGF8&7%o2|Nqb5vI-Qdt>5@NZi03Nw1CI4!IAS5bcPgYJOy0#tOhA-hOL2wj2~(thw?3` z0-w(3;94EDSn_4*O=vj{)Hz{56f#M6G7#1=VwTb|M(AR8!RV$ zsP@E5Bd|trK1|~e7oAWHXYyy=Rpz<7CaO2wVaQY7< zoDkW7vMfZ!32K82f-Lsvya3uB2Mr(aIM}lX@bV5NJ{3XniFKsw#7odIaftH(KiH#9 z;Jls!ZkK_=7q%Wl8L7!~1hgs})K3PDb*Enig)ul?KnRGFej=ST1;A9Q^a(n%%I@(WN=?OafXWB{$Jx%l7J@T4cqG6(QN#2+5t-+3|~@a#O~ z*?HMx2k4lJ|NsBjdkS7OyyRnfz(?{_QH}@y`hOn1F7}L|@eWX10CXN6QlCcw)aNM) z0L>Nfw}Q`(1TQ^%$*|zd|CiGDL0dNeGnR;YH2-JjZwUaWL{Rpq?LUS5s-2&!*%sxwr z8%7efMNOirpvh509z~M0yk4paDnujm#TZ_ifE&6F;Q3#0j3cJY!RZcklmw{H0Xwq} z-tRc@60~v)KE4l0pWos8sUiFypbqH+W^ixv2U7`XJ*v9^=(HaG7SIV2;0y|C#HaD= zodQ)$M&O=M9JWClGYk)>Ao;2FK&dF$!?6Az$b&nw#TZ@&-v#9f29*9usUySiZQ&N3n|}0@d4RF2I>lif&v|~H5hcN5jgA@1%bDbT}lI)CIFgM zF69EvavuVp@A;X(PE;ZnR89)WW@Ley!Ws|L_(LA0@#{S@_RDJOk{SKu}j+?^2a7sEq+Sh8w!!=|)-4Nzjfb(AWsrUXVLp-%6VR zp7g%!`UB0}lJ&2@g5wEf4tT56j~9VP;C4#rkC(RKNC20IApaxPPmqoUsNwpusRuN^ z2&#WTT^mTbIS)E##NP@o&p>6zaZnM4)Q@-#;)Ax@w1W2EfKw5)OaO zd&6Deb|t8huLfQvF#*w%EQvn3OBHnBm*shIWd*Ij;O%p8%iI9eGH3DVWij&T4Pjt> zy$jTf0G;c4MFZS+g7o^fXM)@U4qs5a`^xKch%5<8>EQ0=Gf+U_ZfAoR6rpA^@cHT} z%kv=pbx<5Z*AsAn;;AGHGLe9}cmP!Ifj5G_U;#DbF{1&?G~Fpsgd#^nsWrToPn!U$ zMN6y@p$ORw51YIPh3CnaFV2GE3>u!`_Q16p;2;L|i(9{yT!c4HxcFPZ_d|o`7k6XK z-#dY-8n{b9%P9(3KM2k!ZMK~U~T%ol)y6yyesLLKTpWb;pgBMLO>g{PeYKCu^J ze&_cW5#iAJ{6~v(!PG^-FbqdUaU=pB!3UY`(RmNlNd@hyfm&mC8lDf}_JI5iPS>DC-#F9t z3GhO!vjD0Gpslk9%bCAlm8u&}@P-G_E?J2i((w$wp!06v6Q?EM_4NF$;E@f`Si>T4u7cKQEc~sLK!XR+ z{RS_(_klLag0swt7j^qUi$VomK_@D(lybVZe&cVw3_h{$`HQ4|3=C}pT`yzij4!eP*5!u)OPAgc>w zL0)?Mi9Zq~eD@Q7gzJIgNg&(Ked3Ql0cz&JY%87gqU;iA9r*Fr%MjNxe+%fehnI7~8`K3{54@kmyp^L7F!d8yn?h$ z+XH!ky;S#w=WRiTm(bgydAC6AJ@*piGSoi!@z<9@<@JFV>|iU8zdizvX2e1m_>vJs z9SF*gu>1vD*ZviB-zn%yhsz$#Zz7OKyiXV&crmZ>JLr~z6)Fr2puN`M^OQY$eHVE2 zhR*QmeCN{n+^5%d#f$AT|Nr;tu3h2T3_9Q*v|rq(vvz?e=m`AQYEZl$cU=G)4RHjI ziFkCg_O+`q_<(L@={E3e{>M_n>(lxD1!Et0#e9jhM>lIONI~a+k8Xn(uX@44{H=nZ zGbTLw^R9zZ-LW+OoJ0JYt{YxN^+Fb41#RU4U0}Sy)$k;!`2)Vbc%3K%1Gr#+v1Qvg z&@CG$kj@J11|4nFn+mF^KnE*=4hBn`;L}?=19W^7$ZMc|{hvS{^y&Qh;_?j89$DWN zKAqouI)8N@fAQ!%$kV9{z^lj|JCA`53FwOiyR|gYr@MBB54^BVQOx1RcK}XDs1%{C0$qzZJCVbb_nl0mG9%osWD#UH!15RjE`Ti-V|hb{h41La>ftntg_D$V5jl7 z)PmZ*-K^ei;AQdq%wWsnlO(?XPn+P=UAy3=6H>j|T{;8iCQx3CfjFo&|NsC0KE1gc zKw>j)fY;CYbiM>P@ArXLL;7^4Zg^oY1iq{J^)1hfe>^+ydS3kRdGW7n>$eiK*CNpI z8t>j3T}EHVr!RtU2r~FuzOQ=+K9?Hae}~H(gXRC$y?Y5dml`hrBDxzA{lS|->+jxh zcy`|O>3o^R0J*<C^e$r?Ym$3m-ut=s}hxdtQQ1 z<^iWa(Da!n=m0m+Vq_oqnraXW?GQm|xTL|_e{tZ-fVU?a)c!m1_y7OSTWS0O2bv!- zu3#*w1p5JW&RNSP$jRcM1jXO74RpF0C{eYn`TPGra_ECESb#++G?8`u04K86*`Pkj zan}yeb{_D;T2I)ZC<}k9FQ|ZXxJ?4_K(pi2BIxbc8kB3O!=U(J{q7{I%+ z!I>SDomdY3{|`>>;4nP?V#~)5|C@jO=WmH-1{akrvq3I7?z#e$uzY%R4|sH!LJq$2 z=)CXK`O>Ge^uP;wepq7RZ+!@MAT$So7Jx!h)DDl%*aI)V@d-h0wcmFUbWeEaagSct z9pL#Y*99+b@_|z0A=lO?CGoK2xDPV)dfcb8bcau8?E#NY*BLK1@PY0Chgjj!c^{ll zJvvMU18y)}huZ+kX+wvBBMN#yDW|Tadk9Z*I`*Z>{e&h)o8e-vZSpYhhM+`i9 z0=lOR*n#&3t-8>=|EzQU|CX;n8`+^ZQL7 z%>yq%1K>#Eb=-9YxO`dxo3}v6@DQ_S^P@kW&8L`N zf>stHb!I^Jg4#zO-`T*Yj!Jtp9~1ECHZwd4y}{sR9Aqmps9)4wrttbPW(3+8^EE__p-2Oi`F^}UZutN8VUKQB!%A?A zWY!T;=&`vM_`m;uVJ!_lHur%Cs6ll6Ma?|$vAIh@ionO_dV_Rw$1ZI8bI ztrr3f0f0JHCtlA-N^!9JygcZ`XBX(RmcKaz*R;~Stj0(Cneefs7% zD93WWKqOTDmNH109S&O~0N$g=2|A6o^$CC91aQ|_ zZ-7oAp2x(%aPSAy_Z!Uz1RX7p@b`k+2jHmS7hruD1e!Jw488Hmkzeb~i%l|+;d#)i z8r`EIpwtRF&kiyb8wyq%c`J=y<8c~)$kQ}_y(6IV@^2uhYFQ6wJJ4FhG7i`g zW$>^CkF+25usjUCw+nonAM$1|YfyUubO!)vd=O~}ryJ!QZ5xm(#F1|f4B({V+WMsK z8md*7JuDBGNP~7Wqt19<0aY-qw@c=tTpPgO`WPCPFXO<2AE@I*{4Js&ZSZC*c+?1G z?CrwKC~%(vbQ|oUPy7O+Ey19`6_Aw)1PA1aH2x6qg(HwVLf|)e>u;abdVlAX8GH+K$RG1 z3;>c3TEBr~z=Pla_)F+HjW0dGK>;1lM%`HlE^49i_cGw%|NkDzCuVwNo(u~O4fQzq zQbF@n^C2Ne%PX~@eVCxZ*9-h@K7T>Y^WFevevd=o#0*NwJ>XFX&~d>KcX%8;%naT^ z*LefHFYXAqns;CT`4e(|3wYuFi#MXE=Osb%BDDP35ANLIDt{b7MQ`U}c=_Xk*cMrG z7BmhAK0_-GGRpcw`6;Nhx(_<6MdLb3VRZ8(xG;i-52)Srr^3Oj*G2h1s3`gE!M`4{ zN74awL7_GHg2I>Cp!-6Q+KVlrplc;2K>Y9d{SLH9gBbAr_Um2X`l|CjING=HfvPFQ zd<}8s4}1kIcwh{=M;NrK5|rTjBA|H&QU1*1KrMgl(90iL&=>~)d(iDQtciZ0ECMfo zj3f}{kF09|NKQcYt}loNT~MrXDvdwnbQ-_jL;m)5aCsAV0ZW$8#LV)HpfaQNcBvoE zQbi4LkbS@qJ5zDCt~6a zye|ZtA@P~nRE`vbRl&-USRYV10%|?KV6uglBcMZmQBEb}Zv_plg2oMy%8|o}a^w)GMoHt> z04?m%eeDf$Xy`3anR4P2|DlHSNc}_nZJ;iG>jCug0dzCr%ZZ=`QQ-O*y?pouEg#U6OW8Hh35Ttqh1W07 zfV%u1{5sI`0~9VV)(E1OAE5SfDEva-KhUPvi_&kPGOI)ooQyylC&3+)Sa^HJwezV* z^5+-tW`YWd!=M{uOF&H;N2DU<2)sxsh88Io9)MIIb8UHBT7fjW54t7uMMx=VTET(A z^Wq^1edEGH`pa$fp_ zN7xvU%Nfum+Ak|0;=ZjJ5H+Ft>MZLkNVK?_4p>;ad~@1Q%KK||F(oi9Q2aJ{Y0gvSCj-CHN|Mf$p);QvRpQrFSwij9tK?}@4 zXSLSrgBCj;U%^-+_+rZc|NlY7I&8n~i)5GpcJsh%CY%2=mb-d%UT*zg$`2}NK=c04 zb@3kEcA#WaBL4z(SWM@!)&rGyLBsYSB`=?Uf~Vsbzd`4~+y{@F7=C-9>n*^5WFeye zOuT)k{{8=tW}i9u%xiEsf!D{phTFH-i(>mg4P!L>+P@+ECynAiUxN09Lc&uV)E&ML z&Xq4$fP)K?USQ!W{^Aj6G`I6OlDdXZ|Np;OjUk-*2|AQ%`0d46PaOV*q>s+u9-Y@; zXwCzT&pqqBAMMe32-L|72d8Fm_`%XEJU+0vw*u^aboUxzI4t1X|Nk$3gSOG2c*F7= z!o9NC-0RVK0X7RP@rhr+NdPopzJjqt3br&5l<(k+OFb-4m2!elnSitxFG3E2JmJxK z(W4o35abE?Sro6gA@yH9JHG@&!b5T{T6lnVze4-Zu<$?*zn61BBQ%F#ZUmi&1b3sH zPbVl~L7@t|{TOBc(y3BGgzRH*1k1fXsqVjvv6 zUJRV;4z2{PS8x4R@&VrI=Yro1#lqhLx_Qf^`3HaL1&`)m`lY8pBX<`;7l|;I?gJ%6 zkIwHWU!F+;Eq8Wcfb8?|(0>0P-bg(Fs>VRaOa2CJ^^o&u{{6pH0%?6Z*bzL;psE2h zZUWwy@f)wLk^kC-};ePv8?q5Q~csyiSGBAA`IOI~NJ=H3Lv< z4>H{jx;-`vJP(U>mP=U{@+9x2Qctk6Ugjg#MWf!^%*NlstM&dr_;jEbmY`-~ckBB40`og30`0J%;Gu*GIV3e1jf)}~ImPV?t!B)OJhG;h;>g}5^ z?VV8Seo%e^rEd)LUY0F_wS#tnCM;f-VK?u;BUbZ3^&M!HIr4m)})vop6RY{hIimgy?i79mhB@a+O2OsRJQ1TEo@7~QSn+hIde76BM#+dW_ z+kc1@6GUn@Tq^MQxBoBpuwk}$LH;fA1FiZ3)wZ2aL2WB>RM(io)<=ORX%4ebJ0 z|6hc%f|@+g_6*qVZm8kQ54GI{+U|kc_Yq>B8^q9dxS>;jf`ZkBf#D@+voA!EB1DlE zTv5T#Z_x89jx(09fmb$x%gYz(Fa9IWC~@#$JXFEu(Obj77zmgb|cWHTa{s8&0R1;bS@V7w6>Df#4J(@vRSc5KKdm%6pR8N4~ zUq?U*tveL?9z>9elZPjOcMyRW%D^%zONln*!lOpexN-9j*3vZ|-K0el9cYX`&=z!)9(XM}s1pc2XB_E#2GIJkK+s4abO}D_ z#0Zoz!2_?CgU-)Ho)pkH`O;b!R4}u;K-{x*9V~@B{tkAJ;enUJplx$5%%H=iS!E&0 z_~6R+eE;^}qZhQP5wzvuMQ$5-Ish!+2|Cf+2BZNz9Wd$pxBrOtA`yKAj)HeQ?;4F&72~$M1K*6EKdQ z_dS!pys+&AUEy#9bmdhE#|lRN);Zu=armmk%}C=CFBupZ;Ma#-`2oAX!=uyn#0%C7 zprH)V=qPvso(*(yNO$Q8kM7z7o}I^Dm@NeN!5I1bK|8SdTS3>1g086JZvmYT<=Xm| zzttEt3j(@|Dha%v7)~^ zE^YxWnP8pu|G#7Bai7i?@G1p#zT_uIet}Q{$WS5VfJ;z%ZN1Ik(ZbBYz~2H|TnZW# z)iVbbAsUB#I$wZRpdPmbarI8{H-pBjJ-S0dO9dcj-txC9ftJlRAJIUBF6dmM-uV9> z$%lQqZH~Qo83R78t(B1(v?Sv*#F3ueHY&}(8TngdSiqN#F!Hwuf|9Dudr(F={1Pqk_y7Oq-+cW2przKJ zKm^UD27&`gFm%T!ey!6ll>fi`4~hh6IBT5XZvidI0WAvJ0NRuVw(v#nUvQLw6@k_R zZQyUs15b_!$R?S9!dmZi6;p`@WTH?1N*ce$1O7Hph<@UaP+egHij}yBY5e+Eida7J zLnd%h6CQZct~@vwqa6DRz6%Z%7ogj!QI`(2RDdeJ=3nnX>mopzGlJ>Yf6vb2pn@;} zbhX?E@YDe$efo61e_>GvigM6RQJ{PVSqfCT&!hQ>hD+zKPSD-o(DkV=^?rf|0Y7zK z^vL`Mnle22Q{Lm?I|a>;%?E`nPxJQ%{`vpE^-`}BGruQfs?hQWF4j;I0eFK?^AQc7&R0I2&sO64k{H({XM(wn}0KwCW0F=hA(Vh zf#Uu!C>c0T`TxK5cI84))dk+E(s>AB#Y^Mw|3T^L#cOc??eOcf(Dqz+?THuP|Ns2& z*?APS7_&_NTn z`Cw7dL5v>BAAC9=8UBA^bcBlmbQ*hafrQ6*2G9a5{#MZKpWw?}LF=1*Iv=@o{&)Nz zqGA9YE%)dy7AUp#?7ZjMd`zOm)`#&MXfbC?2e?i42(*MZw(RSF&~?nM;DZmEk4Shx z4@8GF@j&aHizR$pzm*>L=(W9&FU;W4S$e{!w^-r@a~T(d2dGH~xzw>_sZV#Y#OwJU z-31aaL5Igc>u--<+ud;xZ7(jALbRaV7t?Dy8z#R2CJ%}uk8aipA!-bs-99QDE}g$T zdQB5KVN0>EzXB~*XDtX(V}M8{!=?7T`i6Bq4QRYo0=c>H!tlViLyRTi9v6Q>Mxzw? z!RH8pM&nB&LA6`!TTlnF+wR4S+^_#Z8^b`ca|SHt3cBqHQV{XCf;Q%MLWi0mM?-+x zYu&6DgTYPzI~*`)E4=#lzwsAnPkp&ZN9c2p-rDEjrgihL`ttM_hYo^52Wd4+X$^Q3 z3^GsT(aqWjF>fi{ybCYC{eN-08t%AO(42!uH)}+&8bjwTk6u$BxYDIBLA@sz28I{E zcXBbjo(>-md=Xs+*8dW;_Y9gPUOYDvV0iK9%R6ZQ5S;$ykXpDG|9e>es1Wh^ejhRk z#xKwC@~|dk{IK)*%ZzuR#w4WthUJGXDER?&G|W?v<~ISzG4jLkK(E`s<{wJ@?dw6I z3~EWVf=;vrH76J(P062WSaf>;F=vZ-*I64G=AF_=L~5Akg)pp!qD= z{Du7srKjNgaZ4^hRdpUa`4V(g3e^4G!qD?%N_QeD(3Jwk5-1%Ue)9kS>wZ{_e>DIV zfza_KP&WfKaQ$DnT)?AObf=*@gGVnkW*ipfj0nw+yjbVQ2Ia~FBN|226yjE zZcs@Ex+fO8e+)Fgxm*(D3V40;a{E$H*$wA|!UtYZLhg5Le#Tgu0_r=K=z(nGZw0MS z2L%-5S_o)6owZIIe7+2HrWn-j_HBJq8V%A?auK|+{MoLLybKI4zD@*nAdhfBj*$V) zG#_pU-NDQNx(c||8mwUf^av7g`^$r0>o9mTc-4$WMN0pVZCUfQyu#nI66}OWp3P5SXPNtOK7h?1oq%m! z0gWqsJHlSN33TCQD`;I4xbXr$;ed_5MF^bwK<6d!w}7fo(3uG?I${iv>rfGG4N&<2 zPoGMl;VRJaGyhAu;g@TH#^2!S@+BzUy{HDY?=Ux>tD`q@%Ty6vC(zL{Y~ZUbCd9s+ z1=_F(-~SBicoDkK;w5_pX8MQSA>90&u{7%2VfGSP#M%%37EpB!o|S;kIfM2Om%M{7 z%HS#q2gO`TrbqJ+zLILltQ0t^AgjH;{bXf;mJ^-#U%c1?$_zhPN;e^_DA5Dut~n4B zUvGlf7oa5(9s1z&hFD4-LT!ida|ZEW&RheY+<=sKNR~Fbe}RmrgK`&gd4W8?;_)3k zuF`x0bUP)u9u)`s6IPhrd|9Q8+`j_FFQ~nSa=#6Hz0DWU&Jys>*ycAVg9V_)5uKq2 zz{Q_OXD#g7Kk)63FEr9X(?#I*4i`X6C3v?Y*qqX}kR{?Te;OjKp8 z^BayAJ1RlrxS+we7od|kK!=2Hsxe)!*dpyVY;7<}*0$;0se z1hRP<2=m_l`wzN>P!MEZDY|(IVDn0`ng^O6{^Qa4J@|!GC8&4u9MmA|Jp2N5x`79{ z59rZ(Joe?@y8p<{KgjqtdEp-i4gXc3xjB5{Z-o;6hJ?f45-t46b02uAZ0E6;Tm;;= z%LK)JoCMw13DN*7&(YJz#oyp0GPN9(L_kw7W*!&+S8#hY|F^3X_GrCbAp%YfpiU+v zo$xRIUHk?t#>~LL01^Y&UoRFv{s6icUH zc*F2Ouls+{?H}#Q%nS@Z-FhCKmz)1H@wZ$CMOUxy7LVT013sPaJ$g%by!d~Zm7(=O zNwr6J=?;(Pe=PhhuAuRn&igM?Q~v+=>CWBZ16tAqzfY>2fq}uZ^N3I9d!NqI3ojOc z_iciAij;&vF0y{{X4i-Rpi$`71C?B$4JiDrSxgKJtp`etyIr?{#y+orI#=Dfu<=V! zUEB&H%baoqI;Nc#(3X3$3ZA1eGUL0qWU1h*b2ozv~R1st{~A@>n^bp8YT z7kvLN+^4@*f_w@to#y`nmnP1j(u9A?ftCaOt)Ml}9^I_HUf{mhzR9p@mnC;V9Uun= zsLxcvJJgQ61Z}K@wC_8QzgVyXRG#rqJ@9%fyuL$f4e__CfH%XlUT{Ua(~G-M0JQbH z1$2lLNHOxw!y4dD4>-MhbhFMx)^?=;q7AetA2i_rI#&>Ms}R_mFRsl7`O)~A@?C|UDFV;T*<;i=X^kiZQTGn{{^&ar1HE?g|#RU}sh8L%w zy+bZxLFEH_eQpe{v7!A|P*?8x$P3&~{;W?F!I@&z|b{pf)~e&y?YMaN_aldCy1}d4=7&$`yB7t^|Nr-Z4u!RV z?w#^zJ|N)VYhv%wE#TAbz~O88hrbmf{)>^n6?C4jPv;?@&TpVbZ1bV_|2>=EGx9fq z&U1rUUAoYt+gaiDe13TbP`}aL)$obqx1)@ZZVRe6OIAR<*^M$13|{x&e8d8E6wR}n zMFm>CmiU7T&61Tqoru_jT!6@;;sL++oxfG@-~a!hqflE_K{JEhtb1L-<=Oskuz`gu z*J0(^^A{0!K7fkp6^#6?pu^@@u=BTq;vXEwpaT&+x*3qo*8C4OTLH8`WDzXB9Td=l z4t(E>XKxuJxZ~`)<3+&1_y2vmU3a|P2JX{C%QaB^ItaW3?fU_p3(%b`0N&UC!e|ya zgkJN4%U93lqXNF&xeTE2EaCEO{>#YUw;$XYd=E-yOP7Mu)=^NZ@%-)z9^EWu@$7b0 z@aQh!07aKc<@^6|nN7akxeBjAX$xsWz}KVshy{28^?kI*#eb0H$&T@{FIPr@3d2L7 z+}ZqtxsG=QJAX?LXa@EqXz64(YoZG{Y>mIb!nWetxBo95KLichz}KrlXCECqVY82& zpaVe!(Ap-Th5G!hpmp@$4uNN!FY&j6`tYDz!VwiBsQY}}6_gtoUi|qj0Pa-qxA=lq zbbt?;Dvfmnof6m1!of(aRK_+Nc;BN(=FxSo6h-}}UOo)A;Rmjj$Z2lI|{hJVbKZ4c_ zfQFzzLDKRcbU$XdjmitQTu^iL*b2td{1xDEKfvD#ns@@us=km60$-!}s#_G44LrJ8 zU)aK~QS7_&?LRF2GsE2lO5P|%W04jAme|R*1ve&$L z@n!QtMvu!cJUS2VuxDUk(7bT*g$MuYgP>ds$={3zJubckkFt7v|L9?PqUfzh=Lyha z5=j3ZGItKy(t8|qGhw;@C;q?#ph!O1=AA?zWNHn18I5v8e_d?DCnjE=!IG@erJJ_!r>K+B`Tl-u;VGn zyP#bl_g{d|Uk5FX1$9S2JrPiP?>zpZ!vu7#F7#wTP#xq@65#=^r`SupTG>i(`xgP@_B!`_B*6l0+x+j1iY_6n7ceKRo zW&EJ=(bylLdJo(~0=o-3qo8dL9-o7S+Yj)G{I3_o`e$ITyiB_W>XooA2PN!YQ-e-e zt9RYSZ~tF#K70qc{S(w~2c?J5eQcmW>9t+u4w{*H>KN|RYg^?m%-|U2(`))5P?!NU z`Wo!fE4$AeG&1ytI^ULB8kr^0E<78R%du|G#hl- zkgd)Ku+VX7&O@xM>EZl;|Y1L!Oz29I7*Q3p^Nf83+j^vQc+2G34ch8Ia4AX`|g?Ld=A zwG5!6lK$6z{13X`7pCic40u)5VmD!i7ohvmL2@3wqC0{a7IMe z2Rb=iAw2b<*HEX?rYWjm_s%=f|!9=)=c%>Vy?aTX!hD|#UWtSLP} znBm11s07SuA!cB?Z;rwYFJ_?0b%cTCRyznYyr@Bw`(q83lLDEUfGh`U_VkMWE&c!h zg$J^@N3ZCLGO(V-{=y6|bf9t`owuM)F`Z*9!tg=_Q@qt5>@TaN|NmcnZG-q3tOs=D zORs2A-v9qE?n1?3A@|EqnBm07yi3NyTzg)DK`3M?V>PMG0E zBeFzD09b+nB#{A?fX1O{#5u6sDUjVhXmUR1!E#$bat3H}4?z3rdQF#ror{fl2`?nC}r^I zwXJ#~%<#f0AC!(|qs>9p$Z?NO<`+9GK$QS!l7hX&9y|!q(!korTQSvGYx1_qDrdJdm%)hm{uOlNv9RhZ$0KpV(r zYjB);^omaW1rDm>iNXvorgo!9x!HiFp4$pDyr_amdGv}3JpKP48V9B?KvL&hz`8to zMQ_@I(vE2lD0#nxXnb$R3#+M zaDb$IQKjT8!3KVMEzI!32qFcJsA)Z5@rNLBDJ1cGkeqiOB+i5+eheb+<}bqV;uYw^ z`fh8mIep<^b67)#8D3n1h(iNJG#Rvwtk<*?WYl(u6j;mbRo7>l7%BxCOz`Lxy;2UADg#BE z1gex}H(2Vtk_f|#zo1*}yWvSB4s-}yujyJX5r!9!P^CUE0PE7I6J~gE9960Vl0Q8a zMHpVJfk^pueuG8&u5+N1)J#7w{r~?(A58WWRMzyro(RK>atz^@UcwAMy{79j{{Mdw z36uQ?)g&sO2Qt$3frvW83u}lhOiBi{J5c;SO8b+#6)D-Wd05LL?QIaunx zf(XM4F;ppc&>EXw(`;*Dh8MpZz}|(qum`j?px3mbL73si1E>_VSX2Zp<>@s&VlK?^ z;wV%Kn%b@%0ox^GCCu<*6{^&3Kd@9Ls3`1*Ni>Ys(WU0#X2=I2b%qzSk;I=J2a7)di8mvOzw!l(UjT_`BZ(h@s6PM_4@MH- z3=!V|61PSYUjz|f01{V55}ybWp8yi)MiS>&1Ksq_+5i&&+=Os{K16*1Nc?saXc-V| zj*vP7s6FS|ZSUE9oa05vlpp_nE&r9i_v{8&9ck{u3@`p?fCuqBJ6Tj-G#d#pfVxAV zIjE9INUf2>3ad2=Sz)z?6^PaFpQqHrqnp*w7}Vmjcx?mkZ-T}#O+klKs;+{_y*&35 zW&bbe_{Qrjp!$Thz!a?8qt~=39#q`R=Ij6e|6*4?sJ66G*~JQOgqluzCd}}nHG?1Q zx?R~2!Df(P0ZdRHB3KL(jD`w&96!YV104SeAYm7%@GeFU1_qB_(_oOGK2*@-_#yDw zeZ8hGAYlop@UBeI@OZDO6-badgP#Gk%CeeAjN!$#n*aYnf#uO_s__hz77o35oDPv! z<`!dku?-<_848g3fNlqZHN63O-ySOA(Rm9bXX*kH)It;d zT`0`(LKG?pYl^gjHe~dgmOF#uzY6MAXt6AL7;Hl#NbWA0oGxfzN3UrhNbVq-Tp~oD z14wQuR1V}U(HTBq1J^wgW_ZzqEYS~XPj7P)W_VGIEO88?V?IbC3R%Lo8f;Vs$S6ms z1ZXjg;mK%^UeWmw+0aMA42a=FsVbED)9!kXms;S1>sSr+z~!4yx9U7SHHMc*zkrqv zSij_f$X?O|7n98pMK70wWm)$?xz9n3>2B6s9k3BEZ$P+lI$%BiP({U{E5i|Obx?T^ z>c4xy56&$S0PlxFp5Fk^*MN>w1r1h!_MkliuLr<-hWTOmeCv0Q&ZjRHfL0ptzds3{ z%a2Xt*FOPX2jju-23q?C8Seqv4;^oLQSkr&f3RAxvRKd}e~_ghjZi(1`57!L#x*?9 zuI((7LtRe84!RWvw64&*95j%H^PU@!dpvqgOE0K`DteCl!VE7f6@)>HTM+IwJg`dy zRD)Q4_uzLqgnXhp#Qz@6&wnE=?Zp^h0_|#qjkkd81K)@M8Ull^mje&4;^BkNYvxvG z0Pn{J>G$Yn4MpL1e(-31@EbHq2HmQKh;xv7a2O+*51OAsIZwWu^)DBa`GyBTiV^-t z*N-j_8i8{R0nN3ejAy?vJm6vZy~Na`^S5W`mluzMAtTi#Iv~fE%Ap(qRB8+wX9g|* z0a@+BzyP-M_3a5By}l2?Bj4ajgwzN7dKefOUbyWPWO%*fMg1w1xkOm{2Dt}(enu>4 zkPN)wn%SfI0BA)JWIP^fAZP_Cii<&;NPB%hcyyM2fY@_y2k7Kw(9QwSf=|eT-BPxb zFF|(*zF<5BU7r&QGY`CIrPucXXmvL7$UZ0}I!hny3*=#7c+mwi6ZveXQcn2U9WU0N zMDYb*%?S*m$XpL;?3DA+woyT9KAkE(z{(pJ31iHT&;vU%QkH$Bkwd$QyL8?7Edn5k; z|BoCmCkzjO_xHMkHf!x;_w4-V*!jhy^LOW=<`=;U|9lO~<%a&UffZM$&GlCr~pgm6lV8c8bkAS>`6jEsu z__uL`cJ7BZ^j2PNd=9z}l)q&Y69YrTPXqpzdT{%+c8`bUuVPIP%g@Cs{M)!+bAsXx z#1jK~%%k}bBmcgG9bW(Ww{d$|{wjLfa+1G=6|^{}H}&ytgwhDAk8~?r&F1?=L9h-l$@VBuuGBDUE@V9`Ls@v%Cx4JQdHb7qT z={(Fo^`K+(A;y-I{H>Zy3=Ci^KNYieFoB!_vbYEA_W08IK9;xmTUePG7@A)gH2>h_ zZwFnQ35pG{O^z2F!GcdfLE3znsrjWr^G{Cx=?7mgfw<2D63*aa1a!$rFK@y>Q2WsK z@GW5m4^7bFO(OjMA3S(o4Vf;uN4?8(3QWN`@pwqnK(re43RjSoQ)UlI%o#LkaCorgWTw}K)Jln7cuyMvA~ z8F=&-G4jhZ@Ne@5r{{*B1|^?CmrNUgYPR0eqc7_~t70dB;%MKAmutXI0NsP!QN+l< z&6~-Af8Q~W=0i*#&4-y@FF@2U{M(!vn;+b_iQsSj_6Kyn$#HN}1%=&9(CLX_o2wY% z{XZ1@cYrPL{Pi;Y@BjZDz772Q4ua)-LmNRs19ra6-~az#?{sZ_!ruzo!gP#@p`o_H zfWPG)*xj)W&;>b9PVg}}Hrp$~G9G{HX7KE6D>%1l-tcJtA;RAe+Oz4=d8_jnD9`Zr zScrfs{f#$-8D6-|{r2DRl4Ga%%j!SK{n2Ag44{L*yFGg0R#l=|RZ`^94Y3Ba!Q&2S z{jcQ>{+7$217x;wfD*L~$SKVS7+;G|@aP09<=@5us*ymF|3QZ%?Yr3ginI9_OWA!; z61eqp8d$SyBQ$71TlQZr1W$J#eklO50cs=EV|}25qCI+fYkq?}9{WJe6_6KguU;2s zc#$#Z+ka?!hAhACcA9(inxcw3*>^mv%mc}JmA>L{&EF41u}rj^B2>XLh2uXZ;bi})V_IH zUI?1w0?#*s_@RzF^+4;!dRgOK#27$}c|#zloPnp@J$iYM$AV^;L>Lwic=VRO zcwr3M`qz03R5?k54maz3{$fESKlrv;$Z8Boy#%_S`9*smNaL~B*AeFnUjZE=_ad%{ zivhGWqZ7Oa>c9`^c_DE3oO1@d2i#6*ek0-0%WDI1%GNNDiKP&ytN@Kmv>qrC1WojJ z9(%#z!OsAmr#lR4GlACP^xE#p6=iqm<$tEk6zy8 zF<}1-AX{n-vJ}n#VYvJs0CFwZ{~-HbKHtyD0BtXT_@RzFjUe{RA?ybQ5NPcu$o_PQ z{R+tTZwBuShlD>k2=Bi*;197M+$@Be4-S8JRQp3gNeFZ|7<6%kN3Us=vM>WQlsR6k zXygQ?vR>2kNuUvv`!A+9ax!=}|M_2%=+SF>$`veVc;H1tBPS&G?t}7<=}%V?h8H=F zoD867=ryg%5e3Z@Y6mee7#?^L0upaN0$N*Qcp%!N*YtOi2)NT1`_i(J6VZQg><#_r z(Q9f8w?w*;li~GRczFm8FHHB(QbKb7iw3Cs+uguUeQ~`3$^Be#qYpHoxZe`w{xuCS z_rJ;pyMK2e*!@#L;>hk_?FMsyWdo}F|9kYB*1CXgHazemx&hPu9=)b76@@`z44OrU z?6`Sh1hS#?zDKWVf-5MOzfgn=^k<8L6!(heef|Ic1t(M-bOh6ZlODaMyA_2QUVg3z zr71{z9W#8Y6p_N`L_IWo(jh_dVtYMO_`Gt4IekGrO87{+h%mh9sfUG+79@PK9l_yK z0uo0KpKe!J_(axYhEFWq66<;_;R6m9(3N!@FSykp_o*=Z@i6%GvcCEF|3B!wbWj@W zj{V^Q+J#jS2wIE*ssBOg!=t%gfT2{>qnq`gv>JnlrA4VKq{|4N_Yd~~b3B@lD|obC zDtYD6?QY=F?Q-GA;ZTomRvVCxUeos%p({N=P5&DkQO$4tU&448RM0wpJIG$D?%R5@ z)Z3$*^`ktfycY22X8kS&p479*f~^afw(;A4-`0~QH$9twvXppuHvbeUF?0NOkg-(7 zvEe6AiI7J(>nT~V_SgG8y8}61@AT+qb%2Vj_2_0j12VE(;Ppa}Zq^kbH+BoWp6b!f zdIzee6Pn+_&H`_H4Q{Y6DUop8!^6P95be_W05ZY?I|r(vo-x1l5&t%KCdWPTpas&J zM@lcd@Ndg!_USEW_UM(}Y%9j_nty_0^AS+{hr_Y?4^PPs7Ypsuw?2>seL;KP{ck-` zdJo0y38DMszzq%C=uA;iRr12S3p9Ry%%hw2p(MzI7B3<}1K7y@`%sTw)0=Y8`~W%= z1$?>63&mP!G7WG7r^puqwVVvDEl)~~L6P5U8VItXSG0-+oB%)9z!K&fIbnuq!vmlr z>+aQnlOAZlOs^_GAJ`a=UeU$AAj?4O;P%#lk~nCK7N`gl<+&it@M0yZ*rp6oh8I&& z#eSa$&4;6kb@>W2yvRio1C4Oi_=1MEVqb>VfO02v`~u|Pm$D!yfa_Z5Wil@eYoPv3 za0EN_g+dLAe?61I1=6iQpwmBIFvI=3M;7kichyM#mFEQ;od3h2r0ybHWTS zPNIr=f&9A_Rjdl6ZXv4JD$uNLFOnF@zjM4H{w=LS^Dif+e*>$a{%x=aJM@J^6^eg7 zA^zQ^1NN_S70kbPq~ZSML-wydH`o}DUeU{5puh$B_iZJLe@~wkW_WQERqRljD8q}R zsA4-o>NcW^?E+1%&P5Uf`FD*M#J{bTQ2&C;%n6{fsq-gf(Vev==z+zM1)gO|;F^xAgZ6J~g6-NuD{qAExpRHk7Y%IU2A@S;Z;e2jqv>UmJI zC!uys@aPWx;L%(90lZ-PgEG_>OS<0N7{_bI433*M;{Ef1-$g5AOOmCb9+ z`s#!iYJCFoA7~^9G$M$yXCAa`uDMEpfxlG>v;w_bS5FkQDCM%JWheuG3mYQ?18CoT zJ7|$+>;KXmk8W05Nzj0{0(c)M=zL#~RS zVx>2T8GGS{gAh0@V^G#a^0#gS73fGu6@VJ{3_jgzpjGLzrXT+oP)!+10AP+;ryE_!T=?@Yg^Wp^=UQYnE!$A%_06L1T6YM5e-H-o$ zI+F!J8(sKY?ZB(+L8bHyo8BM)U+VowoVdFBGpMo8+5)ljjRLgZexbbT+y57RTTzAw zq3I7aB@5d1_rH`AGBgWX|JN-JO0pN5AIf_)|70qC(fEi#fPul|`z`Qzs0i$wVNiPX zu>8*70vbQ`?EC><3i+Y=IeV$9N9(r|1^E6yrV^8#JPZs19{h_h7MZ}?ub}*LLkJu` z2SMd|H#Db|tONy-1B2tY1MH=&zO4sJQ$4yp3Vd4+l$dy0o+wfF=q{A-={)pW1U6n1 zBmio@hI5KLK$uF{Ji7e~UQhDu4)E~k_Ve)QEmQEYyjY|PQEqvvc!@{1n}OkfA8VEi z4*XM(dmMbu1d2Rxyn1#A1VHS!W;q4Ud>;I+KVIg6rZ^CzACU1`@UBa4&~nYr@1PrE zltF=VSP&d2Ym%Ue2GsD1UjYgfu=%iXeZ}O_{EM;ttVidum!Q4K(D*1}f0^_TbiO|* zLecF5uk!>AtqXx|W(C>F4|e0>39xwe=oSNufCB?+$zxE)e8C0U5zzdDrGyJIVc^kx zf*F(rAmszdevmTIcz);S)=MRRke#Nzrt+^rrN;diRmt3tyV5**P0fu(7<_t@B|xb? zDVduAy5hQo#iu)2!ngHFiH74b78PYg2O7GPd7B;s!;6Jl{0y(RLfd&By|$O7gc)AE zG2~)E(Sxmj3#xX(dtN}UY<}Z`Hl_>P;Rm`C)1#Zsqw})kUPw}MJ<$B05#+i&4jUf+ zmg$TP4Dj{d<)ER&-r55%X7X?|fJU7`+fO_@kH2`S_Vs^rg$ScZr|SxS@O8AH4NlAg zU;l&l>m3GZ>jv!^{Nck~CE#QEgTMJccx2Fb1OGP0mIM4P7r;Zrg-pJd|B5+mtoU2* zf&{utH+VKb{q5WN#iuiOfv@GiB8ivj;Oi?u=OTDEA7k_d<;!l+uAK%utJ1f=mS6Z= z<}fiZ_<|0R4_)EY`P^6Yp-<;IpHANyFPOb~7(BXtH~4h>&hYF!3c9RA^MtSEKaWn= z9mQOZ4R%)iE!Pk6Z>@xk`+$P@0@QV&adHn(%-Fm0fbZqj zGCY8GXxb5wO(^%XfvP-EIoNs3qw~J!_oKi6|NmdY`Qi^~Ok>9D122Tb`58QByxtB= zf8DGzA;p*!$dRC8?8Sy9-~NLKkY7)Pmv^8&K`o&BEPOkE`f5J(=my6FEE4KGu|xtW z241#;z2(60B03BblAw(>zLx(==0QWTI2as?FSmjfGQ22;ssr8L4GP+pBGBeR(A|db zUbI8ic7oM{%M;(;G$vomKgIQq4RwrGr4_!N&t3|Ga(Xv2cyGZACeU0Me|s)y<4XVE z|Nnh0zmx>|c7A+m1~Rw1bO$KO`*faqaY~jOw22iI0rMsK89=pSxfeK@w1Pb0)0uhz zJU(;Jqu2JHff&P!pKp-%>w|6~e*LJSlF^F4RT4Z<$yy023A-g;^8E$vBYgjY(;hT> z1lpW<==BcpbTfFJ)r*a9_!(ZTS%*@?f%k)hN>CKwd094sJB z(7Xb^8X9ySlt*uk3cpA5^AEnQ|4VdU%YgS`f%2h8=Q)o~-wiJ=*!=wO(e1mz19ULr zFVG~N-_m!WP1#PzSnL@*LGwlrT{>TZT0q}lBtHRd1*kp1z~3ScN^!ll2R`u&g6~m za~}H+FfcH9^|Jg1)wCYHpc26qw(s4eo7tngc83S(`cw}`9tO~UanH`BcNG7B5n{yyng;=0xAoHD{eKV3 z*bV%xpnDlma%`z4=qwM^V{ResTTn4-;0ktU$ID>Q%T=;P~ zV1}OvB+S6!$6*I{7d-r4Xo)er*c^czeqZk+h2IGmkouAmaQIbQAcY@z*_h!ar0`pF z01|#FmY_oa_zNCOcsMS!hlL~PP9PG(@r5(U{?Z2UL8LFLR=h(yzZeppur&b9Z_sx` z!`g=uph@m-HF*0FRJFm|hmH+@c=%g#L9H*)Q9_*HE+}|sBB&)&%7olTJoe(K400P0 ze8phr@fY`5A#FrZq5>sgpUw}y%q1!UK9(Q&o6A9Mu5NfEF$2^j>#bz6u`1;RHT;^a zKmy&h8+<$e_*#B15`M|Z#K17Yv-vn9xH&Kx`!&e9z(zFC7bmF@sdXo4 z3#3&Npmgffc?y(w--^H+H-`iujhk7H5ZhQlC%jGom!q#&`?kI+ z4sbi;e+aCKnK}zp#emL1`|Sx1fS13(Z7~L4%V+#8paY+MJ3peg4|lwX12ughjdVn0 zyae4C4;w%B=w@~`e2da#TlWvtTKmr51Uekh*YbIZjc@1A*U){}zP;&8zLsB#H5?o2 z8LdhceLJ7O)cyDWKcoe=2hsxj&JGHBiI*EeEwFB+_M4o#7{d$8$DqA$-(M7(f^zZ^ zP%e0V7pYw)`Iw*Kg~(FS5EEoQ9wdK(?+*tJ^MKEzOupZ1Bkhs=-vjNSBv6rW5eO=> zj<(+B?|Z<&z~I@-atF18+s6`Gsm*Eo|8>pQQI=I8gc(T6+8OwKVlgr$V3mz%O&eT^YhJ*VF#{xaNd9)xb}Jy zXh5sP3;EQxdq>a=IRHMntsFe&h2!M511~|VXh7p;pklUV_K|l;Y%}(DJFYkf|THyJw^Ztv9Gavqg7Nfod-4KLp`~f^C1zGF%8GSJKhT(zc z|4gO)9^GynpoJ$TmY{Zvi3jTL`anoYB>?G7LCdSym#e-ZuRj5`gL-Q(cyzj6c;R3H z&K4ISYv}k}CV)%q<1akSLD_-7WdUeu+kIYjtdK&@#s_k->Q z1SKm(b0_xj1W-R`1-Se!aq;M`z3?L1092|ReF-{S6m-5r=ld5kOu_DL4fy~6KP(HE zD2Xw=un&M{VbE=|FB-4^{|`3rhc!rj>4w*r(kA$HzJDQM2+4s54B##eHGdD;qx>R! z0ZJBvjb{ae2D3r!?-EE9mR46mgT zBXFR5{ft5PeK4sp7~Te-jB)%$IuEE0xCL6H;n8awx>cCrqz5S2U*3y{&F6S@yK{JS z{(gM{+JE!tWrDnVhTWjEY(Q2oK&Ws0r^>J!JdV}P@VWyb z{_;P}oR|3+{SQ!C4eP6TblZbMpcHhyd1+efH~v<0M$p_0$lWKQ{UY#LHC3P<(*tIY z<{wP_Euf`Et=~#+Kmtpak%6K73@8XokL{BICBRV9*&Dpnf*m%})W4 zvvv^|JD1fVj^6fYy;Q32(a8+*54avbd3eH$)h9k6uE;V-^Wd*L2xL72X#6r1T&jEY*4_XmO$m?A(i<=0K~+k3?hR{Evqu@XdlD?5?g6dF0-gUXC&ut18pS##R+II&&^H6P&f+nrBg=aqvZ3)gsaF1SCT=W*N>JZk9Cc^Pz~5vWJO0j>!;U3WM( z{N>?q(Fe8Nza3=<9eMVazm*?U5rEpc^4~yXO0@?-Bh8?Z=X?QpuVMjzYd%O>=kXVv zKfi!Sp20Wkbh{q#>HO)#Tp<7&^tJrS-#iu4uUNsqO|az>e@h#v8_^3HeCBNUWd#-K zE?wc#?YqOb^NUCG!`~jAzB520&|)t`K&x`)9T?!_&(a{bLdTz<@wX&_`x#$7x4uIuzec$}1+-2T+ypDx4DKCV^@Q~fCjS7J z8iog6SoVW@2d>a_O+@%xAAlD=zJCEK??FA1&7gn)g_l0KA^@)$v-0S?@A2Jr2dGvn zv3uca2T7L5O)>sf&=GVV%||?7IR|n`Irv)A&igL{CBb@LpL(GV(ft~gn zylnoJPv^N8KiNTjo}-}be~uZ{=Xw8PnF%P^e*Hd1cwgKDux(m`@d+{5>e+g>e@yj#7#-VK?<_Hso+jZ?t$0mJvzU?xT67XK7caP z>wPc!X1x0kYQA*dfALtHp8=_pQgV$Syq^_T--Bj`I)A_TE6fj?F@UsRK&RlQdo=%M z;co$tZ#MrH;co#Q4*u;hBR|;J4ZnH#!IzSFbhC2(RAun&yyMYr@uHmt6l{+?dTm>^ zL6cy|3=h0ujsUG^0D0%+lmGu=H+AOn@-jf`vDVwA${yXUYksLRxEen3=(c#h1Ju5S zoc|O1G6j6y0O&lUY7WoNJFjOW>hqgFRN?14TD%0U@dU5)Vx9RF=Af5ZNb$^?`3e1XCT)CeeX1J&XDEi$0I1ilgtbPgk^_UCW?0csF|n?j&- zraih@|9=NX4TFc}u~K#LvR}~VDu{WY{S)AGt3A3|5B!8FE4k^>`KkF4dx-*Qlzzt- z(B>-B<~7i{Y|vC_NH?eh4QjuCE4l5_&DRW>r!MjLX#Od~-?9aq;(s!i?gvfcf?Cgk z9+n47nmoD#C0>Kp&qF7F`CA@?R9YV7ZvizhK@-EJPoSL%aC;v-^K0$lQ7q`u?GWH$ zZE^xqHuJk&0C{2ps9pBb>p!TphpJ~a1Ua{x;ibucaQlVT6XN@qpwk;CcyzP=gvyIR zE=R1NSnUk12S79CZ$K4%j65t4@waROW&Lh1 ziPxgw_ytd9mxzOFKV1)YD@{6nQg z-2;478vj&K6BM+pI>kd9asyMT2B=d5U31KUvHuKIIKDX6B*^f3?~DJFQTiH4;p5Tz zzeFCy_vjY*c1)m@6B27OrJT@&Tl(xUd_NyJKk9+*cpzcUXo<}!p zJvhZ#yqu4SS5QAh*rS`(=Nl-`S-gauX9+rn1zHxv(sSZRu#(reA?{(VgqZgFG?cIT z2_nB6%Affe!e0&IgW~1|c$~Y}^!5r+;Rl+&&HD;gVtC+1PdmzrD9HVept~SEdQA(Q zV3oTaTzw3hdQf@-*#T{Tf|^$xpa>HO1qvwJ{4bROjh#PP11&GWSHeTiw*}p|>Cw#& zKbugx-jv6N_eH2)JRG4W{rr&40KLljgzemllky56DT z9}l=exf4|S^1B>-JqLVV=~XNGIXpT) zgI09NdUUhay$3tVb2+r+d?DKg3I_0eCff>`5>4yv#7s@5%!f-c)dI=-(o2$X%0k01u;TaVt_D=*eZ3V>>3Pte{E zRz6nH&JdRmpaH!$Mt+6~ucvu*v-Z3L`?zHp%*WcT-~PXtHsKxgoIP+_3HJouh2z-? zy1>5ktl>$=5ZBHl!5*ELLA%xNfp#9gc(MvQ!v#8B9nu?swDzF&ENBY0r5=1S-;;_c z$L2q5^_d>MqH4>889bZ+vy_y3f-6PPy`jFKBaT4ZPJKH6dvu1Lc;Nxs&eI)w!ngB- zN3W?g$f=zNJ-S&hyoKe8vKIKcfSvbW%uoWgqmI8YxcvWr^AEPV=^nkJ*Ov-2yq=l{ z8E*zxSdjGK(aRgS4di#$rnjmL5F1V|1qoOf9(W;#Ft?YtXPYp?>uXT|c=Ym40`ZTb zbT=I!yEWF20!j7BpUQ7;Ipx+kemwzqkC5MHbzx zeUPHS+zu21pnzZ61oAy7-}TzgeDwc6IHA4R|MA;@(5b18|NsAouOkAjmjN#^dto38 zS~_|Eg$Br~<{vElt!|(*I6(_=0zeLLyO@$bCxau(FmKK@elA2d!pdTl!&{Qv(#<-@oC;8^hJbiMInne=y1^W(7e2Z z$;ft)ky}9ZK{u=5D{#@1Wdn=!4Goa{i$VM4Lw-mB!X30%s@GJD0ahPgdkM?= zH4UisA*_6dj30P*{`Khm4r;4(f(l-V7keLbFn~+eV=pe<<6vn1!Oh?D6P%6izi@oa z!O(g9#jFP$3@+UX03YJmH&y_C{w<4VcdP(t#K;b8{UJyGZElhlPLiNYU$29=Lxdi9ap^e+186mm zXXo+mA`!>#a1qagPna#Q@i%P%Ij|eF75forZ58947h(Od^4X)?7+j0-f|`LGAUmRx ze*6bbrF&Z5DSZfXKV)_o;ft3V&p6=sr+IW&3%qEb59(VTf3Y4!_nPiF!w2g5dUPHF z)j(NHpw8I)7e+5R7<@ZZ!J|3|!{F;5d!0e&N1p)S`wba)1_i+jnU8!7uyEjS1+9Go zg~dxyQbYAfn(4a-9utztWsyt}xH|GV= z@qC@GKR`!jgKUZW%LmKbkL`Z^2Tit=@*-wV8B0Jn6+y@UK&2h1)%vm%l6fHZ!_!}= zXXjVYUX(wemImgkY};2S)EF2%j=Np}jXalHcyzN~JfQ}vtxHusdS&lv2t)d{kfT34 z@4rx%099(NYaohBo_ln%t~j9v+ALeIU25;q?Ro*_mJ|L~=yU<3E(W<7Tn;<-#;Aa9 zHude!Im+;Y@5MLJ9vmUVOQ7RwpTC%Qj32a>4jeD6*lm>uqJ^;mt zZ?}p{^MA(DZSbR@!M9ALUVt1bVOl20fHFN(>fr&t3E~B0n-r+90GFqr^)ed$KmWV7 zek+j!U7QFq7<4vrsfb}<_&~}t z#}LTnjU282>qQZM?7aWt$q~qS49I_|p3`~;j$=2+&U?PyHY#Ad(?RPRL1WY}KpW3J zIuAR3I}Tnp{=d`=REDs9<^%1-x=C?pgZmkgSzhF z&DA1|r97ZC!1x3-4qGA%>QWr_cJN|2-@ZmplS-W`k9h zUW@kWd=A>ul|6}@fnT2CMKL$nj@R>18gMA{1)x$0lqNwX5hti&)C%4N-+BMVvW?%s z2jGJm87&(@XI%4w%IIF(rL%<@UhD`44Q;;%6`s7{S=i^G$-P4{h;`gYg+OhH=P%}& zf|j+g?mq&_`N}@Mx{n1wIiF!4A9PSqTLhf%=RlNz@;zvQ?Tan1KxOoCaQyjnf-Ojl z;RelBgOi0vuPHaH2*V3okOe4RIB32D9ijvo8v|XYCiamJn(smLpRjZ7rTJUDiWUGSyVu~dP+;dcW{0I?Qv|d)8%jJVqky_gnIOvUSx#C<27SY z(7%6iP8hV&+jQ+ru&_txA;SYNX1RbW*ZVJ+5FQQp=Z5Ssbc_WxzCroQquZGS+)ahX zk8gL0ip1*{(D;|&L$EW!x4MA%nh?*t1RW_f0mZE)tYB@RHg3G*F*apbQqX?}cFzla zV{QhpF^KT>=w_V>HUG;$$oL!QV~BlE!2Dj@)vtsYUL0ZMVtDx*slD54I~gRthLMZm z^<;#3p!|&(N>Bt1M`}I*xAVSChxV#K!;weJVD0;E_7yTEfshJYru00xF>?~sm^tFn z&9*|O#11C4#iKi{0CYf>tw*<)gh%I(*Mdmnc2i8l1!NUv)`%&^MXgo%sx>(+bVFt0O&wXH)+K}W5y&V`8E8N$SEN$=H|o-hqx_V`aYw>H|OW=r#Ro0CU*l z5>N_3Dvx39DUZ(U@Wujo(K6)lhshwLIuF0FzW?pNPv^>=?4>kYdwhHdH;nQsFBin4;&YuJAcI9 zftTdFFhKk3kf9RDDHzRf6wn5GUX+6lKkhvK0yNhEDZD{L1C0!zeRR$oE7(hUK%ouV z?E>200qtx)`ttw3C-_n<(0qYs^FNW&ERSy1$@{`MeMLv}s!!Y@OR!K0BIl!!rzD*q0s%YihQ#NXNmGNt*50xY;-;e~^oT;l(Ll(Bz=4@?JFt z&?v;Q7e6~e%kXW5K+1S8f)g;?UNwf7pFrj13vIYLKli9HyvTu@(*!Z+@g6k>$hcwW zu@~zgMx6(#JOnywv77bq9yNxSCjb8be<4`=?*B`v`6xr);Qbkh@|6=*nt|Jy9^LG_ z1da%RCvo`~A1Zpb57df%nG5QhAWCO=djH_jdCdc~^!}Gfxf!gj{;60SR(*4TN?_I4 z!xKEZ1$KhXeI)Mz+KKoad~Kf?s9WFp{Y4$-nFIg~90G?)QNb+O3jBX%>R`0ErX-I{|AE$%%2!X7j**m=*h^9ZPaaq#2+ z|DfpuaE^+FoMN}HkOy@8;Nur9S%M6&dtdCWMhQ-McszxzUhcfy{D_^ub>m!U39tgh zKq>)d%mwvd{($=7onIY0&%Lk)ty+N;K?1M-|91hM2L&m84uc%U!vGqSx&iGl#~ucS zkKxIet>797+Mn_0b{By4qe1eZ^2jmFv-29L$#WLeiTnaBo&-RlR|6epzs=tYYUemw z9^r3U1#K(D@xbFrYZ@B+L`4wmkjlUH% zAG-@OZhwHkbuOrxV|j(Y)eKS&2*4cC&qgPUAOAS@OBmQxH24B)YPa0@K$ z|Ns9DzagXb;N;HlatP$o)-X`!246OV2o!#K25=C+1TD&hjLZ6TzVCFs^CFg$hry-W z^^Qm9p_iatyc57;3`5!!Q@Nxr!51uzz0O#)l-AnfJA%YK@XLxxL!3V292(A|n`gFd6 zhVolb#=w&Q!0THOqr{G#uo&h5S3uK1VF`(p+x)GdMZBP}YXQwOKn5)#w;OtN-UmnN zi?A1<;f>>!1$Y4+aIet6NSSsk)@E=PQ-2y8= z!r{~T0~-CH?kp_4f3uV%c{KkP0fqN(m69?z|MjZ03E;Hr+xov` zD(Dct2lB6bA?8BjUkuboK#CtwuLB|vi68LYdJuVVc!Sq_LHOYK0bPHJtR6JX1m%O( z%YwUO-(RS4fEp{uU)UW0^-+F8mN0?YcSor<7sL%pJhUJEfmidEG6v~lED za7=>cF~EHeP(Cv}(ELxhq!`rB0`)g0>;lbCaP#+n2L(7Nr`G)d<O1;=;hN3!G0uT^o;1qD{`?4z z#iO7ZEW`iJ|AZmAY655|1De+#_6vZ9F+G|e+y|9P{4JpELZE>a$X*Y~1Q%%i2RO$d zWk66r16)k;yMoI|@M;;*!rpptz#M-ueJ@%vo%R$~--6>a2t7VQ^@3;Tea!f@1MlHM ziBC|68yug8&|E47N}u3(lLyyQ;C_=MWN;rmlz?0+!16PH3n*Pc^0cGnk&>$~twDKt z0%#)l>_SNE2$XN2T|S*&TRE{9-xdS`W2SZPJ$YB_g|>=LFX^cpgRKfK*Iu>Sat-0 z#(WRM(=V*vh9z(CP!wq1s#_e=u;nUk1nYq22ar=bn84}%bu)B52*lZ-DjsxscqnLZ z54eQ{nx|54!kDK5Z7KxKQzbqE%~O?XtY8Pt+aD;kfy__+76ourb{3)CLj1!`{_etTK)7<#^*2l#v~ z(CKm^9w zj*Xz1o%=8LJ%Xoe(Bx?B574b&5ci|Fdj`1Y1?i_VLIw!9N;i0Po_KuHO@`Ya0GZl)p+@+u#{T5^cMejHGJ!te9W`k=Ew`VE>Ne+ z^#W+^Fi5_#`8QMDBybNEY-Q*D7uxGU1J|HQxfP71o-ghsf?6_1n}0L$w}3_rK?cH1 zy8!Afb%N&_SW0$z^wwT@aaRR&wSDackp9x;E}frW&xO?YFE&FA0$&Xb%8ww`>tU)L z`CULKM!w7iZ46zR51vdz#3yuD>Pv;?kn|4YI~;_}Pa$@!-vF)OM(*9eFg)<$=Xp>` z!vd*an}4vDc!SoIZU%*6ckPYV+mLg5VU3F1$IwQ_i-%u9eaTQzs(`GF;s@W=3{H!O z;rnHvMu6&na1g$T0yU^XEkgzd1_teR1&kiN6JOt1>uIg7@IW z`~{6$xn6kr2wbBxpsoLZc^cGHex3{3EC((pK>5+5^<;^@NApjSQbDkTJUXwxbOCDz z%_sMoO8ydJ@aQ}b8i%ai3d>jDK&s?G^%5d5pyjhi=XJ0-FaQ6ABnSxaQmkzbk3p5|v9s2{879TzkVmJx5{^gTzpnw6@3!p<1k;`FmkZs`l zg9Wsv9pp4{dm{D+IHpln93uMHu%Z{#f#n8u|La}|ZutLy0;q}7G98>ZST#lS=9j(71aykgtue<^dF#eXApgwA^sP+RP2CxsnE(ZnEbkIdZpjixNkLF)Y z{4Jmb|DX5;90VY-04hHb>op+x)C05+r3JkH7F1C6egduAczu2XsIr9Y%qcZNY}NCy zyv*MM-nZ0w%LD6Hy#uc&gZm|rmKmsl&)*K-tO!~T-Kq_mO@Z#_SqQp%Db*4*n*uuJ z@b?K&>aciGyaE&f43M3M2R?c5YaMfS)x5ukOkCy;{6JkMDxh zsu3uyy6)2gMR~97N@-Ds7d{rSfO&Kr5-?HAk@xF?R&JJ9c|dkC#e#zAIC!0>2YeqC zWP31wJLu92aJ#(q0|WSscXt8M_!j(b4%GO)&ffwmPoQ^k#CjZjW$&SR!GrS$Y%k^k z=(=6-vNcf2TFwPpQOe&^2X?*a)Vs*3@&ya%Ob~dIERg^w$JoOYVqaEG{(!Wf9wlB% zB|%XJn!5+xIm}QBbmQV1PzgES4BMyiWt{1X~U%QHGbhzy%*jKP!JLcq+b| zb^0;z>_CMSY_Q!d_S^q`nh;$~AYCnBUC{9tvrcf_ z?_`8@l~a!hGo0K9x-se{*L&pn0+-L7-(Mo%*N$X9%0dZHWt!sv+7kJLr9{l58>wn6 z)r8nS0hHY}+#qU7?|AfuzNrY5WSIH z!SN!s@#lX~VkxnQ*aL6xBhR<6mui1IqEO-kxqB9LM|!CgSouq}te?>Jlklc7c-GeL zCU_OghFVZ_7qqaK_b50~8ywe-TJL$lV`VyiVvuU4&Cr#%^A>knuDMXGWOU(HXkq#lv^}3_jhyD?GYGcXYa*ftmw48vgY*r1W5_iK1`Aickn3xoqNu7-iO^dEc)8UTaTE1fsM zmj-|~RrqwCcnKP*gryHiqVVap-BJy`BUo(a|No#B-@%}0deQL(bo;QZ;$c+=@O@1$ zAh$r4-4$Z+=(c`QDF|B9W9`vvTL1OO{}-nYgHGkK_UIK&m;qZY*=zdisSv}9^#V|p zqOM3%Z>xkEUQB^Vfz9`Tn1B8b=>A)XxJR$(qnQZP4uZ5KLZpyxTRc%N%<$qBhVV3y z>dP3yGeE+7K*GJY%R%gbzaRelbgO0_1~q(+fo|3F=w^)um3`e7FBY?cFD1Tm2sHHw zzuz(YybuHER^b;VAalB9pB_b#u73{+qA;+mHIh@`y%S=1VUHpF5hSdEA^fvUnBj#W zhVYL{VTKpK_`!jSWcCJ-@M8?&O(5Yj{GdZQZBz_Tf(~Nn6+JWk|Nj@_P(cp}AJRGP zHFbR=#PH%bA4CIGP?Q^Tfo31bu=`Lsk6zJ|X^7bQbX6;Tm3@`eia$rpd=Yu8GK{k~lOPqjQ)XB>v%Pp?x2o@fs~m2S#D5-$e_`SD z|1j8ROdz?(FgZ}W5Ol^hB)0y5vfy!;9B7!pqgQk}%UaxLc&arOx$SIqPAzfZ5}ofDurS{oIplT06%gGR4Dy$FG7g=GVuUR6eji%x-b zn}T$AKHCL}RNHw6g&AHL3WLskg^RsDE5z_ZR`}z8s3OycpcMkWwpT&7jk1EoA-*xq z1l@$tYrAQ;FvE+tLLdKwhr2+Fdm!R3FM!5hki;{=tC4LPL3wzu5Gb>|cLmUF zI4Bc)^omwZ21iQz5g~>be%z1<1IJ_|BsTyBj(JPuZ5#a*{kknR)6inB(m0(>z4hu27n1w1e z8zOZD6gl+}DUV*!ugehzE<7p3@FE2w1v9X89oRtkyTS}FJW-{7tpH19fOP3Wq&#{> zpFH>gzeG~zkPyQQVTcqs<)~i=YY_p7|KK4^5-Uq6j)2xesCeP8B|cuLK5ExG0F;LR1-uTb|a6u0oJh4qWOIx>O)U3hcbEEZ{gP0%@^?h}8K$(ci56 zaA!ONN!@}=EkKgG4U*aqm->n%brB@B1R@2FtQ(NDbfyS2w;{Xg#{d5>T3JCQY%RkJ z8;+0vK~uZ8JbF!!pM|8u3|5FFOng14<_d-idi09^xbYu;FZm5nyW1Qp2Ms>a?+d{` z+j>!m;e|9*4(t-W*BV6Fuf8Xq4EF}zp+HPNHjH0+5G!;1+B{tJ+N12{}rU+w~x!nR)uA(f-l zyAS_8JK0|}-Tv|)GGfs}A37wtG;_2QH1Y78&*B|-I~J=iP7Jz%c{>=j~oVGeef zy+^O8<6dwX_T_*O!;3(04QCHaBtZ}j=NAhzykLW9fJuczq@wo;F}!%q4Duvgmk&fL zgISp2#RZ6zN3UpG52CpK4{G#og-E@)yA2d1;A4LHTM|Iyk&t)eXo^R#Eo&Vltc2KMVYOkJ8p8`_2~b$sfx~J#)%s}cu_XOvI%><46F@UuAbeqOPj4j)u%J6d2cgXta#?27- ztOdKLo3#+ae`yF>|L4)onz$L{6jLRLR_iTb)h|oH2T*`7O@GObum^N&Irwy4=(w(D zw>|jIIM{rTPq*z)hakw}S0ov>im*?uNSV z3wS`E!K0g16RQ3d$i1NPB#&Oxqfy{=mzpQc@bcvfA<$+3#C#a&p1G@_yHsp_K=LQi z#6|ZCxAPrKE1XkH$)jaS`WMj zmB3JH?w;;VsI~;h&bl?R`^FxE?=Qa-f+rIH{ zJHUC+rSpJe^8@<>FW5YiPx5a&;K;v?hoAGfGygUgc8}!$j{Mtf><>QR;QRq1PJm?1 z!K_XeVen-M7d)H)GV%9kg9b&Le=ygJdUS6EIohKe96B$W7`Pb>FM$=c+yEV8+WeQ1 zzom_VfuS25Uabd8c#gG*f`WhxbP+46c8|`fpg?_L!vNZ01!j9R{$dnhVBl|mSO|{p z6Y%91{E!oM8jn~Az?aH_mOO&zHBlV(_CFWsXc*ACQBe5tZ`%usrOsmqAFy;D1cg)Q z4^RL#KQuV_fCJ=beoX&E+zbl(mq!2pg93^T6!wguVDJ2K@FB~A7c9__=ihdq`Jn;G z+~(&toCm>S%D)YqGCgAIr~0VlTTHKtuYF@({F>*vIm7ag|TEGH6wO z={w)nCnYaIi|ygd>RC%~`u66iNPs3oSbe*5R3v;`-4cmg;ur@C zROonnuWj%)A%+(@XE_;OU-j&cQBm;h1|2k73R;rkcKIE6i@~F} zcEJlT5Tm*N2hCpN4M(&pWXrq=p_XuEI!@P3ku$ffQBeM1YEkouJP$C z-QjWEbp~j{#fR~uN2l)uSJ2{zTu}4ycx%G{|Dd~^L0e2Gcv>FgZ@vne^XPSB1l?`n z!oM%!zhiHR%6He!=b%NQZOcJ(J?JSPg%a`CA@?b%Zf_bj~gK54uCjqx14{ zSI}We3@-fJvj2PZR{wWw_-hAQrpVvV4A%Kqk-w!8vW2_BudT>1BX z_2>p0m^XYbeA@O=1d&H4N6bVdydWTRUI4t2lKbT1~u_|MUR{l zWpL%+_TMX+WtRuz1-t(bAn5=cq&~6?48Glo65vZ{A>yF@JH58YE{ig}Sm^~?i+_N> zMOX&3V>EUL*b*21ZQ7tqi{bug1?`uGXsf?0%Fx*hnhtuAjo%_O?={?wm9-Xc;UN(ZZi-6TR zHor6Q=-dlh((Ty%kCVUs@4x^5J9|M%>BS3AQ27a#^XM(zv5Sj=fdRA?h=IWaa@+EY zHg7(#Pg@UENcup6zZyEZw)^gUAotTiU!F8%?|{d4+uJP9)GO_ zZHI$q;acnYL7BF8h7aTC7s(Ia{r7Bs!&s#6)A`M{^9OWM7-;_aM$Cu*9-YS=oBuMF z9tT~{!T9+_$UgxFkn-Y-9^IiGpgTVLib1!TZv|NhI=m$n9Qm#@Jh~ac#WCofHP}RQ zckK+1-V&z&;6=eNI@KXD^zz;B|NlYroaMp{4EsTQaScy`x8J!M{(lMDtm)I8+Tf{q z$MfJD&=KYQJv)U#B~{vgSHu6H?OT1HKs!*oOJ_j6{aTJ+o&oI7>3pED`u?K+KE#jw zO}_k~3)S@*eCCfj@Zw1|Xh{dekEcN!TZ;b*FucBmu#y>cT~dz}nw9lvR!W2I zQ-|8e54Z0w9|OZ@{yLC-94{)6>^cv!iydUwHSnS^L&*9hke5O0uaJYm5j^w%5_D<_ zy0gNCP($LyA8@vWhlC1zJ{Ro1c3wz$92t3kDt*G-Q1M@@gx%Nj zi!ZMe8|ADLxc@f5PDi3DZK|#*Sr^$@fi7Ae7G1GAa!u-CH~e{(C#fzcI!O% zqVdi;v&&9<6HOQm$Ab-mNK?a6yu)(eW`CBdFW*vKB3N_1z z@$pM@(0oz1YXj(TOU)ZTmLEL%{f`-b^Xau=_Obk3#0NfK(X;soqp#(k5_ZQ18x@Aq z51>t-n)f_9@4IyRcD(q;3AY$jdx0(I0L4*vE67_QHLjrTqT4{1s)N0A?8TULe>)0+TmvGBM4=K}@y6aE%iP-5!5 z;iLHg9F+$|85n#tAyJtM*67>d(RsoH?jsM&)BMf-AP2M_fR-?zLYII3A)j8`qo+g} zK&Rv8gXH=5S$p&rGdi^V=kEkl<{KiK)( zQo)H#8PvW8pTR#vh=IYQc`vx-$KNsq#Ont0K*fgI7f^|F(8sz!fWK#_5Cbd~^0(X) z0`-SLi2xk`;E1W6;n8{S#ipC@{=fYH9g>tix?Mq;&X@5CmOS@^4>Qlb=K&>yZ~QIl zf*{5d{=QwH&6eG!(hF4?3=bIoht`t^pR=rB1Z6;La0dK!@E1$-BYysEB4Wsy@aD@J zaEVJO_vc}8i5JWz#RBl$&)=u>2eJ;1@f%A1Kk$kjJ^#OC1UtO6!9(+&kL5Q{e*bSC zy)MR}l~Ep+H;Uz7D*XX(I)Jnf#g3nWp}{t$0d&YwFRNOE8UugdPF|4YH~!YUpgG;{ z+6E8H-~7#=I2joDw+Vwv1Q-5&CIT*D#f(1Pu??W= z&4qs-kAX|)IUmdW{LPABWk3J(w}=ZsYRs3DkovD~{M%$CAobjLeg=kvkC+?}{$%lN zKEizP8H?k=Ura8XryM&%RQ|efUOV`l&9S3I<(~`ZeaDU(mH*&+HW<@+KA;}iN`9F0 z=JSI*P|S$xwB!8EZD1uJr`7O->(gK+$A(|F{4Gg53=D4k`$PnMdaIdTIv4cenG%f?a zjimO+|Nq|(F_u2y-v%itel$Pee|-ay8z3##8EmMz!QnG%ZjhM(E}Nf&4u0?a{^I-< zSU#A`!obkY3|cJw-g}k1-F--LH1q(R{@~rTN-$Y`h9Sv5(T!bb_U2%(3%s} zCIHoB3}6M8AO)6>`I`+s{r}Iu4V2v(TMkq__UOFl2;RsH&br{CK@ZJ;FFXR^l^K7_ zQ5H~#=q-QiCeXq3o&R6V0*$SJO1RGZuNQ*dqj|#vl*3yOc=Q%9BW3UgMrb-f%HRiC zKZ#_^VYWUx=^H=k6MtA;gGJ@_M zG9s4ui{5%@9`a;7;?a7ket~c2Zy(EJ#mfBK*g%cq8fFFtP$OA`8Psx)12?Uk7(g7* z`4jg+N5gjh1Md~_?RfFvKD-s?(e2y8-?{~~W2f`{i}Viy44@{~OP_cD|AWg?XwMbe zC23N;L}~(080=4 z(E1jX9$M5vqeP&4XurSUc>_;pB~IYPc?uMO-L*4bY`pmHzmMf({+7SsnEwIlCxe?F zZ$a9-xj{`2&_291;O+{zv9b@;Sef}=fZ_EqaA(T!BzUX=R39{d09CjQhW}j+FM%S1 z#E|FjR{~wD)%pA7QqZ^sd_RF_=P}>jwEu>eKpyLl`tbk%OYiqc^`%GW$CnS@fvkqq z&py3jj4r)0dmBJaEz3hiygr@Rz-|Jc(ayiEj-w@+tj2dE+W*xuvdZzf01TfUaZia0&GOFLfv0FCKvi(_`_Er#ke0_i-g;L&`H zrTMWv=lz$_;E@&=P@ehE-&gqV|Nrh@aAWNxe{1qPa19F|0nh+VA0K?d-~6E7qq}y7 zXKx8RbOfMX96AE<<~2BIT)?el0sdA{m^44<2WOg>SHFPgCqY9B4gxQ?zXt^xXd(8> zO3-a&wJSgyU41)VcunO4U0mGZ(R#qM^B8|CXlUrA8wY5}7c|e&dHUsykDyY@bbv3|Nm`xOE!4)g3T+MHPhY4NM<@@$ZcQ!%KTm1FIYA%}f9O|9ALyoQ1!|i5VO!O#H2v*+G2= z#vN>+qo4PKs*p}-ek$GZa^)*f$(|tb((E_r4BC_YtxG^fTIY9P&FA2Tco69J3&bc1 zXb|V6;xDM$22{0bSk#t+x;UWmP|MH!&7$DJQP&3e_yYenVHf^=HUci4zZ@I>|1Z@8 zr9|PEZ^6YUXg$2;4gQw??~^fb>AVMO;*=Wt zSROADdnv*SicC=20JTql@VD?YgIXx%j2_L$Q8a+eJI>$C$PVgL`7`ows|QJ&Sa^2+ za_Ri;*zoT^f9ns>T^p7Mi!@*Bg8FHW{M#xSJ(~|=Dm)KXc%p<2)W#{j?s)Jwi&HNP zcmfI3x%KHh?ZSBj)FSy0GRLR4P{IQ;whkI4FN9pYCcCuymW#|ae$IbcY?&rAK-GhK;mT+XpXJBK;mV@yZ@k}G=vjg=D&s}i$GM% z`LS5O?=4iVE~?tcptGUTlG~>@P_>e%YPVxi8}{b^e{fJh%W7zqbLAB@u%H8GP~p9x zOxVpTHyu3g8t4xjcQw_7j=MHLXWjwcw$uLM|9?5lPge+ff2kTeld1D$maIp!=OcBQs~NgRco{dKs7!(*@EL{eY@a^#EX7o_~|Ns1dAI=9Jos2I- z--1UFUcUSYq1|6Y=oPOZbi`K(efhy z-wJ8~G*mO&^0$6wVqkFTJO}GOfO-v#2mi5fesFAl$Pem1@V8z7d+@hs=arY?kOKc@ z)GtuAQ+5D!?5l0mPEiJaP1fKdH4qg8p;94K9)v1~Pz?~O6GBabP_rS_5(u>xLT!Uk z`ytc`2z3!c-6~Q;I=_{Fn~8Xbhykc$;nDodq4fRBRnWTO(K7+?)Xq!pw~&bR>;#7i zXyEnqOMTFAd*|<$E#NGa+5ngI==}Xs2qf8SduS$T`HFAHi|ZReb(U|(%YM*7ZN0WD zVG{db5+$HQq1Sf8Od*CBD>ra5yu1WzhxOXl!&FXzsXPFx<$G<@z!Km&5RcBSps6X3 zPS=hXxnN}w;ckdp0W3_hLT zKu2Jxeg)Y(71YZ0=r&~s8QFOp93s}BrNrI79WNz8hIO8Q!Sz&t;iWlfi%2(X8pPza zUNDnuRY2RrS^XxdGC1<@yXw))J9#^3*@hCsyC;10=#h}%HK)#2j75OEcV_(8b1HAI{TBAyEuS5^ka8GL^(==MC& zYMamB4lK83xO`s$;6-uRnVoXsvZ}AdvxB6cIo`&)AhD1XSc0%k0=9(`H}NyCznU(L9nuyY|SScnjhMCII)6T zrOhWBI=omw_vtuv80`S9PllZ%+{!9AguLYzPNx19v7 z%K6Z38r3bz0Ailt{Lsk+ZpVYqSLr+m@xKtra*u=Wc|f`!f(!up@+XM+*lnuVEy}>Z zbG0%wY5cUY#`uYhtIDyUruT8{`> z!{Qj`(YtrXZ_vg?&(5>ZGyEIhbbtv_QfX19WrAx&?9 znwklal^aW>K%JVU3qbV&bAo_R=h6bu8S%}3SxSr?5qAYn08M*zzJJj&7revau^VVb zA1FfxcY;@4g3kMp|MuVT|BFvLpwW`n3BUjUKi-=1`~QDXw0d;6f^2X#{N{1IHR3lY zC4$=KpmP;^LH2oAp5SjT1tqm^uv=kc%PlORRb1Tx5}=u5D91s-gYl4uDCoBu16OmS@Zugu@_NC32L_6Uzb!`P|MAuaD8J#i9e;}(9|Hq_e>WckL&I-H{+3U?AchTpiyj{XgKOst z$IiQ;R<%br*eu6}zgqmQ&jditi+>)yw(nhq8C*JALDsx@q45qhYT&}Z4a^5s6)h@) zVAnAEbb`I$*zhBizoi~DmJ4F_iGo;CBIsXeXF->~*+p6I?Fp(JQ)d zttbQkwgVo?EKQI_B@;Zl!AZlV6Xb|qS7C-1r$C!uAkpB_4G;9DZcv@yycZlN{H-a% zplK9PtTq2&;RQLv1f8Ry&WqcsB>cb46Y`#wG>oLV%;)qwxqR zbt0|S@aSd+PwqbeP4Pmy_Mnv?z4j8I;l?^fk6vd1uWptPu7+=YdQEfYf)ZEj3Q!dS z+F|eK(YqJK@#&ljiWrxUR#1GsnCS#c=3r%@AO(r}bc0pEQcvrDA<&5LG0)~>68tS7 zj!$=n05mN+_6F<+O#<<^>=0mJX!xbh-wtAU^zt46hvp@ZWRZy;jHm4WKSCsko}j}qw}M>h(OWFw z*!+~yqjPHpC|@`HWt2SG{7|s*An2}w&R&qF*ENv&T91RT_?sWqdstrJ?-c}1h4*GK zdUQ_(>GSD)?UTF|l(Ia!Z4S8_9`Nbid*Ju~|1RBN6ToAk;5#oKd31uq@5Od=(1vGl zBtqNisy9Gk*b8!%Pv;9y%d`9~MZ63Qp50>KjwzHjd0M*(@b}IH&0hCrFnV@}Dfo20 ze%*;49-z6Bm#_bUGCaubptX{afC4S+dI=hu=-vvF0Im1f09FQaHCS>hDEUECha4!c zBc%>SF;G7XwAc$A*04l^NDUxUTspv^?$HTO2rpV3Kpq0KL5Tunt55e-kV06ZXek1% zi0OtFe-KWA04Ua4cY~%L8h+&Rw{8SYJ#<4u>JunzJD=^$1>JM43_3Fgl8t=2!O{8B z0#tT(e(>*AF#;LWcK|%t0oMEybdV^hJcq~QA^tv3P+1C!$KGH8-_CcS*n`E;)*YZG z!|@kqBS1Y3y#xGRW_;j7Iz$&Ih%$WU7vMeJ0=h0o|3W$FA|2hSP|=+b(HBJ=pxe_w z@kgET=-s;E_kYO1nNR2c&-{YDApQ&EYoJ585)vs8o0z4<5Hh_Gcp4 zpaf8Q1t|p02zT2Yf_e4Sc8FIWg@eY!AdUrPET7KzpZEn^!H#Xa3UcfNU(4s9`{+Op zEu9B(BrDu(kRzYHUW%S3LA4H~lzcm{cyt#CcxrwDjc)bFf{%j!;G=oLvlFy3 ziof5Ql>w=L1uZ0A#(CaCHm{PLRi2AoKZKK?*?~kSV*sYuG?B zxC<2e&}8$1=L#s~U-@+Y@X`DQs(kxED-k@pL296umAr&dxQRiGED!UfB*l#>;jD;f^rd3GAjd%p(L|x%yRLk zAjl24(peH{KYQo#7geF)bOySq7wl7?&iA0ZwGVjkpYZ5x1qr_pzYOy917FKO{4Kvh zT~DxgODB7P^Ti~%H6X7(dp*m$m&FKlkug%ae-t*(ZTQXb|BLA#K)pLi;&~04p@t+L zAIk^)eJ-H&1idvX;JObQ+g{x^4;=S`0uGi*o~{GkFSU;y)Mf{D48aB4i~Twu{)30D zkNEJrzAyw`P5a{ZGfwbQ!|$MR6$btmYmj~21rp$ydeEvWhyb`EaNG$xB^GihI=Gs6 zG1u?|=x*l@4Iyxa&);&{`Q3ldUN;HP?`)uTza=c5-ENS9A5h?V^@eEt_iX;dSf=jL zdC^1jVDm%95}pQ*2GD9F(2`4m29AaX4@MB5$;0wO=?Bm5FafAp{4Mcppem+J0=(J_ z#PNU>wZ5HyUQE8o#o%MP7gTWbw{8Q)KeUw10u3gjrH?SM7)ts`K}#Qp`1@{x3jAJN z>BDI=q#TM0#z-HaatNF-{#`&Mj7Okm2_#|6f+UPexcQKTvCs$NOi;*WZf#$WfsqjxLFPvA9`pwp!xNnZxZ zhYWBZ^0$Hte~2$9gVxP~LlNvt@MbL!NZAT5SS>&C_gjK$a7bMGXkL4<{V=%T1GW5L z3WG+Lk-}v*Xj~gJT;^d37fHCy*utd=v`ZRvUs)h5Tz;~F!$q|qQj}rG{{{wzG=BXD z<%*y91#DA6LiG@#A4Pm={O`Yg;*a`}#$We=A5>*x2^psIh`4_St_>h%Ao#pNaKTUs zS|*7UGLY4OkZj)v8d-;AdvJ@_7u31}FJMP%)7X4~Hf>*ARpMfRHDVzx8qdxnJ3PSK zK7KL!@cUhW-N(Y;k^)*J0NrK4-;xaGxu^(u9zPD+3hiq64Kz&2J9&vHgMV)dD}%4) zQ~qYqvAZ6fb3wVwr}MXO=X2lAE3XCk4}%;4+9~sZpMM(* zV@HcAs9g$H*bEc01qu0DeyNq_-_H7Ji73Nv(DG?l!*6MwEutVfkLE*69*w_#gXV1d zVnG#7H@HdV(YqBS4RY{{w6maXC?37MYZr?$fSlh7x)RZ&8|*=k&I`V+-|7T++H!%G zlpSD7>+FG;+!!E&!xLFd04e#i5-fUYit_B%lxQSibCa1XL| z-$&34E2tj_9tCOs$;j_|5Ylb*==Bx=7f>oj9-ZKp|Lf|s3CQKpN-j`+3TgmC^BYPN zH3+mV9+Ea!F!HxVgW8Z6e|U5r1C{0-@*sCZ`XQhzvQj~Vmymb^oy(Ja;l<|DpzQPl zlp0&6gV$C;vQsrEhQZlM3vNBApn3PY3EckaJmk@QNP@rh4`jqyt{Jrdc^0UC1rHb) zUV8ZmdA{7U7gD{nE(B%SUfXv~pdnyzzX>$%{QLj^7e8l$bVG!?w}QF|FH3$R;u}$Q zwjKp7@#(c)g=xlCOfzQu`2Rm`f{%5w0Do^hC#Zi5s^q(!6`+;;OR*pS|4(>v`r^C) zo}EWt7JLJb7s5J-hhYuR$Kc6+(0Q&eHvIhuT37#aHfWw*9x|Wl*zm)bzhxSD^a2#k zpgz~jSKzsB@c1%P7r$8+G+5pZ9xr(<4NX7biW)Lh0_t0~l)U@@AGA&4`Aep+Aoq9o zf=tCoJfJGAf7jpt|6ktz0(LiOw7L0}LGv$8{`Ts>|Nq0rI?hPE`|s2F9K0vOqjxK) z3V>{l0Ns9^FU7~;*j)=+S`F?`dv+cI-F5pPG)2(O8dwe<9$R4y8y;K0`|Up{)UQUOGXRqz! z22fG}Tm0hdbWj=qvtO!z|Nq~{mcK>$_y7MkT>Pz_phj2oZw3Aq@NT5$-<U(t$&J$(uZ2rSpC(AF-01goF zxGrcH1=ouuC%C|p_0OOM61Zdj?nTcDcwzMN#+(2Dp_Y1rmcGMm-S_MNf6%x^TP%2b z^xw<%Z~p(^QGbAe;ichE&5TSZyn=H#dn~2g(IHLM9*{B{GO_8w%fJ9S2AuijVbBy=_f$}C&!gK^I2<&M1g_a$xG&{n zcv<`A|9_Oa6E$HGP$f4h?{H^hz^&Fk=UkK}f%2#lg{ACSD ztQ)fPu9Xo~6!+RbtwoBxZ?Lhnw^LBU9nw+-kEOjl336^PulH=w5F^r{m}m1Z`#J%~ zz4o96L&J|!{+1rlSk8{HPzdn+{>t;!jT|@In z=Ov#`xHG05g{OM(&|Iq;s7T@82Cn-Y8-7Ibw~B!KW#I7g>D5i0Ey@5c0(?9F`EeKlWs_Bt{8cE0lLJmPuqjlC!15zmW%K;>E=sCDDn z>jmq3LwaJMZZ)_$;oJG#qw_Rq7y&Y}@|qje1YtbjWBIzo(V2f+h~EF^M~s{oz=P&b zpeYROHjp}KrPBc!*I0K1>xqHb{C0TM+2eJo#>u0;u=&L6NqYJSAX-})4kv^xL2Z2JXTn?g9MK}#D+ zjp~a(Kt6MUNAN9u%*@JOYkw(AEi;PH1fZc**+@?jO?PQ-TQ+ zpU~KZ#35+q8#qeAk&B#``3^pS#NHv0AA_9vx4G#3?>yf8{C@L$M~8<0lI6_J2RNG_ z@PmEKSb71!kIx-M`1lei^44MXF(~RScJONx%fhM$GxbBZ|QdhRPYRV|?>j!IR7m5biL`=H)@m zYt(|7w-+Mb2Qg0@F1{2ZURDS?e)OV8uc-{&sxIblNasa^=1V<#O;yD}4ziu2CCu<$-j-G;U{P5)8W7PbRUGt;n zspdnR9+t;TuX}bgJ9Y*NxOO^B+fY0al>}G~r(-|lL5(mkH???0K{Nd60y?X;_ zo#X$61f&DQLH7auFOl%*4)^frb^7no>F(iS>F!X>)=>4ItAzP*+JuIxf4rsNJ(^!J zd31(*9G=kK4jOT4{_(#=wfUbyNka2K&Jye9e_SO(*6lMG7#M2Qj)PTzdhUh?4o_(Q z$5r|rA_VGM7#=tb8CUBBtA2f{^+0a`JHN-FgFl#iS&o86jyu8ncYsDO52sCNKEQ}9 zFahLLpKkX6&tvMiSYZ-jIH|NlR;2mj&^ z{F4qGd?0`DhrBAtG^oED`fV5)7#MfNfV#V#{vI%MJ$k*Ed@K(Z-{9X@#PoU*e0?iq z?VIF*?-wAZ7#{f64l+T2f9e6lOU(xuE!#oSS}NnwUGCx0?d|~CZ1tf?9um&rgx7fi zaoR*zm6cF>9o29VLZrAtA4Ch+=*Zhz2Sw4fy@ttU%ZJh}q~ zJi7e^JQzI$JUWXcJi5a`Q~01H>m}d;n$Pb9(P0`ModFsU{Q(jlokap3-B2;4)DFsb zpuEufzf=Ss?w}25t(QuKKpP3V1w0PE;%I(U-~3Cc(Lzz+T&LG3ZxdS3V!}On0FX*--Ac;bkOxA9^LILKwZhkLk*zB(|Vvp0c4&B zhez`v3(y@M93IJ@JRZFwr#!kHKx6Esk3gqcqXYna{Sm@D^%^ghGyVAQ(OqruVjhHH z@nR~NvHJpOrm_>vu9kSw0A}n4t*d`g0%5-ZDae4ZIT#rjUc^Ay5g>K|gblhL;Drl> z4LXACg$0D20aBv_VON0I3J^A^?fF6k!e#)8bAZ{_pg=nL@;Bp;|43c}mBo;|c|d1z zqhDPQ$tw>0Eudn+qw}&y>!p%f&(3ci-Q^CRoqv5g4|(*~ZgA{8^TOp9Xu{i@qq}s6 zqvgkvh;C;QZr3BF0o|?#ES&{PJZjk-o1ZY2IDqbRfuD0z>g(CP7j!F`Pd78@x_ZL{ z(LS9YJ$gmi_J}Y*uV#BGb?+-u{er5W7o-ciz9IJTi+qlE$bJK*qfn1tw|~&{nOqH@ zfIP|J(fos}ysYz+M=!7JAyJ0re@rD@{M+1___v8LGJbO5-^R|r&Bgq`tKkzz{%s#X zBd7e^cnld&FkWc>VN`DG)2sXJkSIgvVNd@3C3hLpTEA6jdi1hxIws2C!FbHYf~`~v zycNCqIOB`I?C<_}9`fvUxy#Uc$%o(N0qEE_*!eTD(DVt8gHZ5&!k(R=MQxxXq&Pgf z!yP=j{XIM^PZdk^Z)37i;BPs{z`$U`$=?FHPt8V|zqJq4=i}eTqSEWJyWyv1d58zN zyaJW|;0)k#`GH641^(7&pme_rG#~}SU?K3mjJp^>lYpQ>n$`;?;vT)Gd9y*i(&sNs zjW`)Vw*-OKrFCxxU8?EZ`M{_1B`90&2E`c2A0EA;%*w)$~}(5jrl%zYT17Gsq$bh()ibLf7|!;|qNM`&aNXu*)9J zzgX)`8*0RU>-zL2{r2fC`orHc3lujEHL`zneLKIDsC#zaiT3Gy08Q2K`os~up{exY z>no7@#<#ab_U|t6rn6qt!-^oEe1CC$8!PC(>isbBEl~0OVDZu=9?icwN*97A1VR3v z2$p^SV&OJchUOoPzLHNIo1cJ|r?b4Q0^NZJ_ODm3jTw0A33P0_qA#u`_UY`+`2YWZ%YhPQe$7_UxjForz771Ep%eHuV;Asi zrf%TZ%ss%bS$ctAv-SbfQpQ%$IY!`o53Wq4)qnl>=yetF=&ttg(5`my=xo&h-O={b zqqh~b%HOBE8FV_DM`tVO@?4MP;|<-Q_Ey7j@O@hX3=9m%TUGx5|8D>)k}Qw&xBgdo z_aAf(ME7J+G2_t-R_D>Z8SInp-JlvTz_;_^i$mYP{`cr?2Js`JJi5WoN`YTk$LZ0V z`T?}?_wb8MCM@TVorhjv>+88)Jbbf#NMf(?c-w`-}fzJ!`1g(So4lYnWgAV6I ziUQXYh6i3O%Krjh8lc6P{FTk-`o=)>OvO3e`crFT5L-4$Nngp>~+-NhUpy|xarphE~>ygR_b;L!;>mVnhe zSrv4G4gk58N*9|X)N7^}>_USwp`!XCn z;RDWZp!fsF8Kl03H3K0HB?bQ0HK6{|HYU%`D>iA6`nul6#*M!PC%M6w0fAzafuVal$Ymbg`(c$jw7!0_ z2~l6)xC(L%M7>9^sR-09f?&5mDpQzyO7uaa9z~#<8hW0WxAsqP?<&BpTX7KFZqXG)SXpe*c_ze#@#(4CKp4=$H z5c@LvGAQsEJbHOurGyz?UxS&~%WDMUA4Bl}$q6&O-iF|BFcoHay$r$U2dSTi;A^S~ zGrVp?@F%GVGrTMY2QBD6L*5(^KN-P~Hx*`pUZ3p10IMH8n*Xctw+VrA3V3C6!WxDE z5B|kJ_?!QMZZf+JFX{vZ z7(Bj%*0KCA5ryo~00rtx&^}d2`2pf0*RSA3b57tK25w>f1;zOnkIrksKA>^`%P+Vq zzkt?Um8f}ucEmq_G5Z7;Lo~PrfoNK}Fff2c4yQrx<0||DngjLeF5q|}17^SX=rxVn z02&Mn;PC1EXn5eo7SN1b=X1kvFQOKM7V6zM{PrSXF&9HLC^EtOJ|O!Spl1b#L-sF% zDwS`bb1fY^{{(yV%IfU`U9_5=0jkeH2T*|SMY{*OIr-{QE{Kyro7`O)L1k)*ifiki zlJ~6#N^b9B1XYH;rcp_t*7x@p;%m4VK-a3eFo2qUGLRe$s@*^i0o5Xi^bBjmnQRqh z09kZrH5bF{a|n5lZZ=Rh0cDOK<|T^FKP*aEK>hsgFagjIkm+4qQt|EWh~mKR5zn4?|Qy%NN4~ zJN3an73BpfYd|Q2kJo_43lu$Czm>>ZNl+pkeCev z17!MYABg4Ay&Gi0iv#n1fLa_NHbgnUJj3yJn0j!-eLqP3i}cxWg|BBJb*}m484ztf zR`7VpOYe){k^871_rGY*gH+_DJfLcBWjLr7FOl`=W@U>34WpX!C4#Pb0*%|sz5|se zE({E?d!0f0LH&2nPDoA(e!<0u$a9{c!%7ES{Z5O4*vLMHov2koAN53VbuzlNUw2`?ABojG2gPn!VFB=T!T7+y>Q zZB+!_`g{SJpPo;-XukFN1LJU5= zrV-IXNb8$DTkrUEeghW(KArD9`CY!hkX*sV;BoPF=@U@CM{3+a+zmH&hXW`pU3}gA zg0V!~v-M8toYx=I!2Kzo&i7ygqe0{JlZ2onDWK!!_bmq>DOszGpG_>|C()bf-$SJKPzTVcxtt8SWq{I?m)AhFiyy?2?H1c?z zO-bo-k6zPn(vbG+U3qZ(bqhFsz7_}HH*o|icMu{s!|)RSHgL=ye8krLU_a-D4loa% z8)8w~3*G!4ou53Ke=?StfHtoudvdg%tkd-9U~?s5*plOE0g7|Wi6YMkUUj@EB=cRYG|KA`Al2kU>m&+sHjJ0g8R2bDcR^Hmpp zx&t^sw;o->>Gl!;Ij@}KC3qCB^Pop}nE+@YmBphwNC12qQS%SR@@Jq? z4E`4IwcH@rm?2!F?a^!U;WZyPKY4)t^PxoC$C{z^6J$or1!;c5)$kI?wzAjVl^h=3 zjIICcKzHdH9(c_M%^%GNIV^vacz7g#Xg(hUa&J#YJ z7hi&g*^nv=P$G1B_!KWLv)#Yu89eAZ8 zXdK$7Gxvlq<2zr?H?IvRcy@jR?J6t1;?Zk6DN2aJ)$rSk6@{D(NLoveg3`fpS5W($ z!3T6M!uNfk8R8ckp1=L?(Or7Nqw_v!BF0DalSk_TAAZ+Ipb;(5EOCAUr~{8Ef?uvn z-~wGm0a}OJd_)4gDHS0LuHV7sX&Bg3pix{2pKddcu5A z_p>D1v)c_c;lkn5ne5=h_`svnIiTB3gnyf#ga_jV55^N7nx}jiA9yle@#u8+=xzqJ za(p_IBRZQwvvJ*S0-azXNO8zi!r^h;*#cCsHY^5}kAGo)hy#r`d-U37M}pSfmEL&K zPym|3FTL@y2HZ&ixBtM+Hjl>tj(iLZC4wG}|3SyJm$5l~JI+_aY$baBL^cO{q z+@M9brQmya4G(~3UO?djI(87U_W?Bf6aku_DG@R}&|n=8ZbR`;0S$D4`X{!JBZL@U z{K@BJc>Ms8pF%x5KRI?@_Ut?XDso|o#HTk?0u-jrZ#`KO$3=NC_Yzl)xh*NTKdXQwgPaFqyw)*$;>J}TjK1P$5S z@Rq*v>3ra!c>}adiNF6B=mhg_CP&M|{4H*vRX~<^eL7!y@H?Hh{J`I`9o$=Gy_pOi zFWCS-QoGZ40qAmA&+o^7gCY=o6v)0p@Dk|%FO)<1z=y_rbo(ywfcW0C^QcF+g8+YP zJva~!)H!+fhJvO8`CF`57#JFAnErE>=z)u7k6u%SJW!GS-UDjOi>CRYMH!&$XMGnS z;>%O>j<4l8kIrYl{O%upI#XBpc7F2Iyye(@h{-qkl4q}zxJTz94^;-xVnfYi9?g$F zcvyZZ5%p+%18RqRH20|d;0Lv1EWeb#ZhZ6~wB1kh3aCV4^Jw-F`N81Ro1((++5F@K z_&C>cP`GrS^y$1{_|0**0;qV^ya_Ic__x^@dv+dhX!y_R$nW~w)AEonzw;r-4jU8D zB$Xy;(K4ft9ATV~9_;?*@-v)Ad}SDmtj!cf|{v z^&AWlQNFGJOF2N}F}!BK{(E#I4O#KGf|fjC+&s+S(aZWb5gfNWJT33?H{AhQ*30@5 zBDTTT@(h1d0qB@HYbpK~cSg|J|F6Nx!};{f&*05Ykp7TocZ9@CX|Mn|KYJ!S@qiW< z_uBmZ|KGQ_gq6Xk^Q1@TAs@|;FEv4@L3bX1!I1>I4$|;HXz~4<-JA@*t^a+%_YC_k z@a#Ow-zouWHYl6@f{TJ?hL}O?T{OS^FWmsTkJz>Iqhpw(=1I@a8=wh=MIsE2AwHe& z4G#or-h834j)MWz5&<`@pzU_hh(h1~zo5%DLnU5Tz|X<)>~;L_X?YZ!CI9jAx6A-t z8_;?1W$GW$GG_+{Pt9{4y&nJffp0bMJOSD_XnDzp-|3Q1=O?dT9)TCL-@FBlH~BDr zf9Vgpv^Y74#gp->ujM;mez$i%mheDZ4mOa%Gues7hw+7{1P+s%tbY1Y`MgnMAsqYGKUGfdoWqX#x2F`3g-L4BfJCFEu zht6>6j-B9RdBUTY^|`Vzg9pE}D=5=$cxeqDC}Dt@JHw|l6r6{BI$bxsXaJepdCRBs zqfh5Mkg@$aYz!{lu`_(SLl<~j9`)!v42l;Y(Dl^4tP`Nd?f{hqFE4;|9i&>b)D{sILiIDL5Z+FGWdsn0-Hf8`fw71Ki> z&@kyuaQX1^9_WaY=9f$_&w%=gy|!PHL6wT{1P@3+EdY%IzmU%YRWRTS0cQAs%As!8 z6)&fP*8CrR_4YqF-$KVzKqE#Ty{0y{!r*I{UZ_6*{~t0T;AkzPQo;!yh5^@K-QETs zkXZrHLBwZ&{{Ih?gO~@}2iN%&R9SR_Dqsbd?&YBR(xW>VrRsPA8nmc)@aT4qNOR=R zI|Cw)cxe9c(ER1mc|VOm?@}6n-VKk=PlgB5_>)eh@h2Vj=rz5{Cd`n=pL393)AhoO z#%KTkyI3yz1{KQ9 zKN!n&J(B}CJi8fMFV!h|^om?~%?q{<+FV&fP z9DKwKYOwNy_xpg=A1aaeu(n|={pj0zyX2H_>!p&Tp3KaiolGzT7<{`O1V9aIkeo6| zm7FhV#J2e#BY%4?=)REyAm^0`!20*DhPPjOgGN0Y|NHYXFqE-({%C%{SHk1jy%E%q zeHn5d)QbJ(aqtyO<15fCc=Iog@<)fk{ZaI8@(;rU9>-llBio>J^GifPZDrW#gJg+o z^A9O-`uKsEt?~u6mLU1ByNtu5H}u1c#s5H)4<*+qrq=fS^A!~XSgSa}Ik z*A1SeC|M6xS9;_1k{9LALAeQR9;kih80yoj%UmeR;1~j4^3VyIPl9an{0pjUyP2UQ z7|lQQ%j-OoU0NA@7+=`^e*kJHgGNapt7^V@bVqP_wB9Z~_c{_WKGz)#>byYa9Xz_3 z;3jeKw}QsoJesQn7)mvLTc7ywyF3OpJrS!N!13RC@5K&q5eP}ou7*!u-vrs)9nJB2 z5@fd9=Q(76=7C3N?Tr`eponTcP;$w)^$B>*Pj~GN&|(Vk`Tmgf3L2k(=?`iK zLFOGidQIgcgg`f~-Fo!@|LYmB^#&;8ksiIG%FLju`^DEiU;n=ZO^QOo4_^-%7@hd1i80Y^e2-rXe_~}H$ws3gD|bL0GpNh2v&B1t{pnzXdR-WP3j$7ImEu?0`2pGpFaw+AC$hJ{YsB+2hegA#xi~I$V-U^Xz6h22anF$A1?|)r=fM% z{_yB7{m^=#g!d#QGeE+_@Y0LKkN^LlY(2m~6*T7#OZOo29Z|=tEL^&mgO(n;wm#wS z0}XZ_2d^yzby>i(FCC!PVmF&-=Lb+z4z|Eco4*CLcm&iLa|K-#TD!v+bOLPd3g7Mu zjuj21WuOC8TXR9xcQ?3^S>l46T(nC~eY%}Ed_hf#3t&Z{jY5!RVYZ+%PuiG3jqc8? zu7>|TAqJH0=a*;j>CRo@)A<5@-VYvrzTM#hp1t)Fp5NI)`=$9?y}=t$F7fw)I<2mT zw+#;%elxuN+6dSfo4bhJEDV*=XalYGy!^R}bqkvcU`%UgAd{M$t28-6L2 zo@hSC2wDjUldgXVHP5Frbc0W4>;ceD?_Z!@)1CjpZ3dQKoD5Jmff@-u-LVIJx1jnD%xq#l8Ltp`Bc`tG%Z z+T^YqKw;f71$2L+M|bTGpUz+4L0s1ZFV;Q-l`4?wN6&6o0pIRi36E~y6QF5s-`2N2 zotYAlYn41ZT?Ih@fizAIy!f36YMg`~@ac}-UG=-5~9t(M$f8dhn?o?_TU@ z`1v2y`771*=!QrqgM0Fb0>Yy=gnX)E&X2Y9`JN9XYsjQp*=pml=|m;e3u=sXA+ zmqS`|<&f{vs>YA}Gy z8}LltRd}H);L-RGd?r5l_B@Zqf8a3&j^<~4&Hp$`N*%jH8GO1IKVSfzQv8I!-WC-&53n8fe7Tbej=a=Zgh* zK%39rmSlrmWC>oL!rz(%O2>#s9cZ(Y$NT^PU%G(<4z&Ji+ka3J|K1sT#ii5tMyKzc z7vJx{{on0-$EDl%M(cs@&@22cW&i*G2hYWVoC9+UcwSCK6;$xT=TkxBWgeg-AC9{T zfY$1HbUFxl9CrW@D1pk;)&nIr9^D=iprRSyf?stH&^RR8f?vY}hdnxtKx>WRqt6_UPUXmT5l1 z;nVrd@DkW#u`f@2=U{;4=NG3xb1-;xHiOl59)EoqT5f_y&_!?m76JvJnIRdYq zp9j`>4P_|d2jvZjxsY}vA}T;Kh-!87TTmZ|!K3jXXef)n1$6Hl*fX%i2wnu#`5Bh{ z*c`qc<0}aO%~yc(E2y5m_oD9$$YUi%9=)Q$5Vy@T0F8<~H$3p7>DK@Mj@?sKK<$4} zMbGAF9m-IW4tAR(Xsiv=e(n7J!XpnnQdY7U=@y|9*j0Qbv5pOP@ulr(`e5z=oe2&J zM^Iv|`^EtsfAsA3Q85510x_|22^Av-}X58nBSxM4Q!zlxZA^J^zT3D z$n^t;Cm}N_V8t&s8~*zbD)`d)^Ib2ff+lPo`2}566g)U@cy_X=ICi(fmq$$nu^c;H zRKV+_P}_&#C<^!OJPw^&2OqTujw;Z^TH`O!&V&+fkIwTigmSqVK&ySa_o!$vGBE5* z1{I09hX4M9*KWOZ1#K8S4i@$3Jp4k$5VD4g9lnH19PCJsg9KM_aiFf?LMq%~^M7HG zilX&fNrh+UALyzw&(5!&o!9ocgPe8E0OYKf;9&FUJPsBFxvI_p;wm<{tHg+N6?{z@ zxNGPFTEc~JCGz?uaCnA!c3yJ~1;=nOXxX9gYYkX_1ofFf?QL=7PK!{<3y;pvuUYx! z84PcGcJBp;Zvx08yau3B{+6rZ0Z^Oo_&$)JXXlX@TlJwH0VM%Q#Cs;A_yu<&fF%G> zrUCb_9K$_3Ve9o=4c|hiCqc=u@gFGup#kjE>3hPFf67tN@;$d+owX_q3=A%v?_Ol; zLzeORbpG_|{Nw^2N&yA7p#DG5Se$@Qx9{xMF*f2>Jo@R1}(#Y#Xl^)o&yE)S0wj#hMst_3Us(PERli=_ZKJhKo0Re;RD(^ z20G4jA4nMF#5}!!|6y+W?8u+b?$Irb<|>F&JDm+YliBdQ4ctD1#s4>u)4*q){t5op z4qEHXQCbWtKfrM-3yNDqy?_6GJ3km+fKdgGL2Wi?h+Sl?me{0RJ zxBp!_BS51G5+0ofzO4sJiafgu1bmY3`B>iLZw>kN_J3!Ah$rYwr_KTn&+Y;ak4_JT z&WoT3V{Cr(_rgn$&H{<%hfE%w6%L%IIs!aAx|v-&AvFakfq5niqUCZ>)dfphpk?e1 z496WrKXXMyXJ;|`!Dv0AuH55W}(4-QYzR#HthEeVji)r76gPo}I^D7(k8pW$^4~ zbL1EF!!WWNY>a0oTdx;mXE(&iFayv?nv`d^hzc}Te(`%GUxHQ)o}FwS%||qRIzK=w zXi&b#2ruyc#*jrYA)cLQprIw<)9HJ_15^eqdk-0k>%9MBHt5_GNV|HUHYnTe()#z` z)$joL{4ela{c*6kXXnuu@mi4Za#2wL_01r~1VpbRzo4svXL5*&0@TsqYRt3Kl>sBn zTn%1?X@R5Xgiq%$-_94HFawo1po064CaAFVJpj=K3ItFx=Ir%ggcLN6{DM9z3b3$p zQ9&wpKqWfz01tEtE@Ey7ls-|?6SxNQ1&0r4NJ_(}yH)~}zc_tC+43Z4CGt0q#^0ba z9$M@8bh_?v;Gc5Lqto|5ugO+W5#L#Q;zgS#*gpq+x?OkpbbbQQ;T{JSR=S#?0uh$0k}3WPzL_&qygR3v;lA4B}^+xo3U#k?rA?d*3w;L+)O;)VSM(D4l22BIH=T4mr&2(D57I)(&$Cf`Wo&pVyQpLE8f`He;zf1ayA8h>7_ghyxT z3DD?t8h_3SkJd}2QZFSL89ba!sG`3FZRUX#y*Q%|Z|3=K*eA@u09xejdH`w=I4weg4R5>8 zH`xy4&oCAcdEWEjbAHGmd(H`vD_$&D2Ssn_37^h~;AY%mP>KcF^}-h{!<@#S@4EqP z8NZ;nf)D2p@CtlzwD$%uI(C9vn4m~*K7tlCu7>|#vVps5knn+}Ptfu;@cJ$AtO18d zx4VZ&_jJ%od5`Y$0FT~^|1SyyLCe+n`#ysDn4L#FlAFN;p52odfcC_CFm`r>_%0nf zOx>G7iv%q;x8%E#cKi<78cA$CuQV|#MI2L3q0g`aiCUk=hg%|)` zhv?WV!qPbzWR~TpT5*pVkl`H<#^W#UUw!-k^-gfT!1&GbQ~j?_u*JK;%Sn^Jz4%`W z>f<+q+~?7G9AdPK<^$yQ)r{YuwtzK3^m`Ym?^=tn-P=^ z0zA6CB|JKBfwp@>H^+Jicrbbkcyu~}j%WnUhL;#a`pUr)9^lQfpy?QA4bM(VEQQ?! z&rZqL&q3qC-5}*o0A!wlsxbO@105?!HV8gqep$9-2*rQtjGSd5tk-r@@ z-T__=)RqjI@HKqW?ZM&JYopldy9b)hTwDM1_kk`VbLsr|VwUQ^|DMTTKo@y;e(>lO z`3h<`cpQ9T%iju`F!pG@$~Cjaql{=r!G$TQi2!?#<)v-6N=FVA7u)=PEgeL8Qv z7Dkl$ko8FiOSXg8OL;UO;{X|=>Cr9r`U0pvaOqA04`}nZtNs7~-?j6(;mMcENcj=w zL(Av&C5GQ#%vAfXX;w?a12k%7! zr36rmVTlr?2n1^bH^^NL4}jVP-b#=xz@h?f5`c3CN|ONIjKS9;aBca<-vZunY_0U~ zKRBQHbp8Stwy@^Mu@?^%Ay)CIfU7@V4?Z;pXtN645;jQt0jZ_tW&pa&O~_AE=fG*N^iRL4n|V!ngB-PvYi zu;2xULmb#zh<%Vz1kX-f;h^HvYuooyh+)D$K2UAY`Txb^D6s$E@Zj^m0#5%!oumTt zf4Ty6xX=Zd}0}!w|By5>nfM@+0ULht6xDt=*mH zU)b;e|KGFoIB0D~%VyB5Pp^q2Xb+s`u@@@)|AV((?DEn4;kX-I!SqJ_1zj-P7Xeav z+!b_;0)wmJB~S1bTP+L>Jg=3~CV28MK3c@n>-D|)CrcTNjY6rsXY+AJkLK5m{4MfK z3=EF^+t>{+wHzp6=ihh1#=7jhPv=j_sS5nl4%sMx+J2m$Y^=-Kzy@)E?rdfRPYj)T zEd+8uXiXKww2PqiQ~di_R5}kqcYHo>_@z*Cui=+fiJ)uiZT=R}9u?ot=dZi@ zphaw;D!>CYv3A|1Gj@RwXm4GoFJxKA#sbjfPv{PhZr=?)-QeXN3p~FwF(`me9CDHX z9Tn^(0glUJ&;^p9CN?PIJbQyApvpi>fm)(-0ON%Q3*A!Y zV+`@&X|Q7+mM3anftHi_^x8hZpu*tO={m!wGj)SYXY2}}&e92#x&y$BXY%I6>=hR``Hc z-gNu!@a#PF5_Dj`XY(;8U(ii2@0d!}UWbFyqc7K0z`mL_Ok$)S5jZ*0ikLK4*AhoWow@dOs-fg}6_y7Nwtl*h7(EW_ywDa;SXw_Ed z5yRWyc{PvDQ=rp3!Ap`B_;iM@0L=?}fLwU>G-y)LcL&IYKHZ_9r9KP5*GQEd1la_- z)C`mkTbF{S$Xajn_kRLe)cW%G|Nk#1LKa^^+QXim_kFruXZUoNPVnq@7XU|0=P~5C z@zMMSYDr0hmKTARUU%1?@ag>a{{n1vkw@n-570JF(0nH7yaGtN4PD{US-RoH-(1k) zO0@?(x=TSzk-+W*oe0wDy2InU>kd%b_2_k%04*JLhooK55>^k;g$2(+12)~Y2Ryso zIXt?}eR|75eV-lQkAXCShSSSIi-!4I9)a68<{sU(CqPaFr^C=4|G{YtAS)MJag;1<3*+`IJUv7t~|i&;6g$9Ysbqw(1haC`5j_1DDQz& z$&0I#ze+#HB@6m1M3A&mV zyeqT$L4ETN+xnvBAJ+AypxOLZ&`M?B?iv*V-_ECy7)11s1^N5ID{Ox7LKq%M3se~S zTLnR@9lMhSJi0-x@OTN|&Qt-iY8i?iC>1yEHnJe&;_5c6>6PkbM^S4U>|Ns9* z(hYtF=-x>F7EW*%%NXYBUf%YHP#0^82{V9v@giu}*Z(gcg0d}WU6f}xlDo?#P)Fq< z?mqHD9^`KRd~XG4GucN)!6P{sGGgS@`54q(@&L7zKuu)~SG%Yf_;#kK2)t|oB?{R1 zt!L-gm(5^DK*|eP|Jk$ipJOO^upYDn%%k~D2Kqv6P^Yg9lxRSU-8)NHc=X!VpHg7} z6&DBJ*?TY^^SJo$#oDVJ3_jhlD_jjv`gE3pmY;g`f(A=KD=<%k24}n#JdV49Cg>P^ zLHD?T>Y&^eppy(<8-e@59^JJoz*+wHi@@6)3?Prgmo(UT^1I#vZF+Bc2U=Ru`OddH zjRQ376Xn}oC*j-rza$W(-nTnn!lyHJhfn7-Pw3Kpgb}6lJiA>$GvlE%JbFuafUE;& zr!5abGll%E;Df!pOLssw;)2(!_;!Bw=mnJ_r3*ZIO|>3@#sb0h+yu}P;iwlJ;H}$> zu7fuCfJ%Yb6`%sv0exE6v)dbdj+0Mkl!Pa!yV-h)zeNNbqM$RJK<74j33zq~Yj}1Z z1|8>=#-AVB;M;lEkzX)a0hV6$Ktqo1VxV;X3ZBkEf}md2dr_i#RoIdW+9GGrY^z7} zkqp$17N}j(?Rvnsn?=Q=SG2HPgaI@l&EW%@zwS2hJotm(quX@>D7E`^LM{{R-T}(R zh6i4VO#AxZ2XdRBkLBr-0*~%s4$tmF4v+5I1uw!u2jzDsyS-4G}eJbF!6J^+onl`in;2BoU^FK#}AM1bNoaN65|5^gUKgA+Rg=$r%3?r?~G z&p~TmyGwU?cDi%C>;fG<`*lBP1s=Tp?F*W}0?oJ}CWAD5I$c2nbo?!#j<`qbNsms@ zt?+RwY5aL^3Lg9}hrnGUPf%mr7qsT|Ftl5m#-A6Ulg6Ltp#dEu1Fb&Y@S<4+(lZ9H z7JdaPtv~~0pg|H%5zrVYI4z%w~a0a6Ma@@TF-!Qjy; zT#^Hy6%qy2xSg>ZUWki;`XQhc?0N#+7u^SuI{adAXVbt1 zBE(Uh&IX_fb6JmWVNf3yG9(KcTlJWM7>)&vx}%S(g5tIFGidCF+oSW;iv-X)$eoA5 zF6VD`{SWG)+%7rxdJ)nP45WPW?7R+|()i~X>f3qLF$6ROy;~gQyXH3<9*zGt@-i@h zI-LAd4tO;F165T%o&Wf!9OAsdzwLnL;TO-ZgCAS%j;L*(ibtKez5Vv}E zItm~h3N8^nJKaGwvW8D5a_<^6pL@YW^8d#u+^n`fL0S<_2`u~HwSHx zwdHmfW#E@*;NKR`*6Vc4#YwMJowoW7oD3eFhkbf8B%oV_K<(%Z&_1dX6|k<(cQ2xL{{IgO zKG6E|Z-_8_X_UkT+GZ=OEX44_%!-rY^*K=g2a?~Qna#5kyyy!wbKeaa-2ycN7J@P! zXh~D&XV1>>psJ3=r@KPHquE)25i$b2oF7&{fk&o5g&Sy`3sgn<@Iwk5S6G_{)Fw*~ zg|ulPN%Ddxc)ba>TFSRGT>?Be+?fDc?Wp0==?t150C^ALGw`}1h(qM~;e$e;+7jjv zk51PUFAniRT;i($%Gw^?0-*fjne3|oE6*PCdvJpCv12#50O<8%bnNT{<@e42gV#OK z_y&g;0XI_8o|&Z93b@?yj)ND5SCmGMHt5;U%lYfK+oH3C|hSjy_#`nFUa6eQpg z;(LhIeV{Gx+2D}?xNAV`^-lDE|Nr_tq&x+OKX^&lUr-0<3TS-{e@h#JP=&s{_k9N+qQ#@azfBl4YlmXEjYlUln&FWC1+)V1e(2vt^Pr3E`d6bkkpOZ*9F%P&7j$3@SQE) zWgIW~KvhJiGY4c35vaR-_w^BQz6TiqE-1i5zb`|uT`g2Dshk z44U$Sl)&B0;F8VLqm%h1==?!&`vxg*P3Hua9Pk-I&_Ziy_IhE%2?^9N@Cpe>enDte z0BYI3Tmo*pgTv`XGMc3?AAtG_6FeXr8(`aYyi55&E80DgX79C2xL)B$M00p{%BZ-uek;8P z3jfyIkh36PcR|umHz>Y>A!Bl&yQx5XbW=e$sQPri_vuZRcmWzw1Z~a%EmQ)XhX_|+ z3fj-h-vT;OAEeNu^YTm3QJ#?e=>ax3g2Sgbf#W6Ub}4AR2;Tk!k}SyuU3Tfwc^Etm zJpr`O2kK7#R-^y_|AQM(i1701P38b876Lb+92mf3ReL}iF+f4kdHLl}aGC&%w}Li? zy<84T2T1FmgF)k4CHbI%^H$JKC5VZaUmgIdn*b}1KnrAF{AYtNg$3mkkQk^oTfqiu zRD;XfH2!>6&BOInpaAm9OI6S?UF!k}{;O(ie zpw7z?@DNMqDe%hNPTv!ti8f)-aZ}*@jB~w*M{nr~pU&^#1xc=;tq|am+lSzG#CM<0 ze=hzjW%gNouf(0Oe9EzICM zOoR~*>GgQg{F9|T&I2@D(t5Il7qnQobSY>bOsU`m&?!KW18P8LX~iD)=r#nkc|fBK z9=)P_m_Tb1J$iY0(?Odk|M9<=)B5#4Xyp&Q830Y6%`e27fB2Md@aX0JXbnDUuF-?> z1gL`o*?;B;+IiSw2Rcxo`5#khhhz5^@Jewc%f6fi4e`COYW@2EWhywig5wXAYhUgH z4dH<%Pws%yMt8A*Pv=YU0cg$~V5t{JK;oUw0xz|}IvGIY6F#836rR7R1kLtICITX3#ny*dDHM$RP>MzascsAOHLRA6yDYflA@4Amh71H93DvA*fVo{vpEO zvj5-z|291Qt^J_MGO!0_L6ct1|Csn&LHif6c(NAa$*CYuHh{MXK@Q4mu-7f+YN%&S z?_~vO{}@bCq|taw5oln0YXL9=)P|5ObSA=H`NT*}E_>fRkP% zDCtH0`Hyry5f=RmPJ#Wv)b#cLOI?_L!vil>!1gu&V=U2f1Sd(*hB26ak6zK;5Phc_ z!8sbd`zCDyl6(V1eic;S_&;c2GDfb|gs3_KvVHw;wBzxh>yeS>-z7kES1tFzQy6NV zpd(&Cdv;#)JotvgvH3~;i{7LE|2sDSu__3FwBrYItRbi? za{+W$FXX^V~<{5<5Qp|)uMm@fAFLHo8q`Lpso|@KOj=3m<}&ZXTVW4FyPB9A1ln^EIfc1xf^>-~~vB5!Gq)522Dr4W}AF z6=$a~D19Qj5r<*x{RsI7bk!oL1OOM_;B$RJBPa*{qWcFTb@)Zv-+}cHC}zMz8=%f2 zWPt=|buzfK@Yl2Rif89}XhXjFhZld#b_URG%|84sp!4`aJw;*A01m8Aq0Qft2JR(- zSCsAZ1l3(f|NI5*Q*s3@27U-im>^M5+cD=4#OL@%LeLT=WSuL<))Ywp!~=A00H}@S z47v$I4z!f5(~ZNY^D}fj2-Tsj;h+v=cbEXInG4E~;0B|}A4puGXI7A#cl?I9SsXkG z5R7#a0L{%F-N6zdcX!?Z^&?n7tCT&vLsSGj7=s0TIuj&7L&}i8#&1wp26V|tx3h#t zXMg}m2Hb1(1ohnF1i%%Cr)MYIOVB9+6Fk6%^=}HgK64cHMps52E(2;AP zc_#r6MlUqWK!+)NbbAPRbUR6Sbb7!nbJFna3=?>H4BRL}>X-ii1&T$`d@;DY42nlc zfE|9Z=36Ac zf||wPefqGZ=Uw6tI{T9Ar7Cz74747m+d;yo6TIGz1?p1)Peum;kIp~|u&-MWfY!f) zyzT%F0*`Kx?;SLJIzb0_F<|tLOBcUh4W35_DG$KA{uMkJ3|?Oi+fWEv`?}8%6vLgq z2VQLW`4=>VW_WTJcymtYaj+DqH5c|15}J_K99RQ<%_C@-3ZpTHWjW%DK)CU0U>jk^ zAAj-v2gG>L#u4^?J|J1R@u2Dk-FU3~Qa=6o3)vUx1G>QSIM^6aRWl1}cqn)>8dPb* z>Kk-pSyV8b4Vr{+Jz3)D(d~NxJgt2WbZ{y=s38qrrw5vna#!%}tWn|c>;&z$Y(64^ zKIaPR=QF_8R(gX<4i=gYoVb0*zueAHgV!!TAnSZh*>pAJCNC z;csAv9YFLeKvJN@p7{+D3!nr8+QtMLB1TUtY>wUSAoqZqCSYeecDflr_K-l!1&Dn* z;N_;S2VMk!`}^PUBzy-dNE{Rjf4)L2lk@0i_UR5i02w_-*|~`$99|ZH`U{Zu4Dxgcc4@}aTjP-6*LYDTF}|e1{%FT_<{r0$LDVW?OSMmP!CPI z%|C4TTeg5}S||Qi(D*yJTlb>sD=0C)^yvhpXHW!#`e&ewr}*{nf5?U}P_mK-we&z8 zFn+-p6$RLarVteapXAax;6ZZFgU|RqIgj~vny7$gbl|7;@V8z8t#EBV;(?yC!0{Re zNxqlCjd3QZW8tj>8~#?%Y4<+eK^&lKL`&sC2NX$pb~8b4^I+p|IR)CT10R0^O^oY- z28ew+Ux5rkghmr+>H)N_%7(w?8Z;PMK#TpsZSWVxU%-VYxFQ1Sg$|HA^rst z$*u}M-Juh}?P;hxJ-eA4`30Ro`5ZEo3!g$`!YGTJ3|{bk`3pLtV}eiTr=6hAA9QCB zs8#)9)91h74d9^gLH;^voU*k=vO-F2TqaSxiBgO0U>L_u+{`WfP5aZs$o%3HL-cI?IN zO9oK&3y%+IIK4~(ce5QBJi9|7@!bY)41g=&m#JV$a5)Q3lRllH6J9*}1db4&&X-^@ zkIv&hou5E%>-+?9n>xsC9^JJQ9Qg%PK>ZIK?gK5WMOs+zqGIqOOz6vhP*i&KhJuz9 zr3*2FuifzMt`dMPkMilP-SI+>o1MV}v}m>U0BA|2g9NCOkO0~Hk`=UU#cu9f)B{i; z_sN8V2C|{kVW7!dQ2TK=C=Y-ZUtHpEaR;%x#XLLzf>-?_X2=}*TV69VFm(5W&J$`q zSr-VNGy|=pZ3a!6ff%4IhVWbB?D$&_GchnU|8nGS0pFC``K|evEq_ZLC^LbpGURQS zpmA#OfoBI_a)8GH?f6@kfO5i5NB)+>peA%0S**z4Dh3uR;s7;7!6WAd^Ff1#{4FOyMnh)oKx@J}@4Z;|>F@uS z(V+Ew;NcECk4`aA&j`GI^PW%VdqfxMRIddUcs1WSJbMqiBR0Fy2xQhx0=-5|K3t0fvzy=?5$>qUeIWBe;h_s|O$NcXJ%QF%f?L-wMZk48X#BpI1MJ*)ps{n%>DVBDd3N4=A@$(@ ze{dTWQqOdrdhy~RXryE-D9$}P4}%T}eh+G(fL3|Is%ty`mP4SJ`r%k&3^q0ioMk}k zweNw~DZ|>k%|C2Q1sk30x z5@pb22y~#pqw^jpt#iEi{o(I_etFP(|Cg)4$4!EJVIH0LKqm#?`v5Alz#^d21kZo? z`~PJNXs!p5|2uEJd=9n?(w+gwBPja#TiyQs|NpWd=8x_W6%Md?OAXlbE-C_0r|h!@ zH7Gkn4}jLcN`QOv$KL$~4SgJdufPK-0hJB8?;vFZ8z_&03wEd>B%Z18A_Z&%wA};V zB@OABxSn{y3AKX{RLjBFE%0FuT7ri>KviZZcs)7mfd_%zbF%2W=R83xj+`}K zYJ^{P}n0TKhV}6gW8N5px!8`8<*hG&FIkti`D+`{(E-b^6WhB+3m&Q+xgqG`SEXX-c$q)s&|K;@ac6_Z~;$= z`gF$b05|SHhXH|FQ$F3XJHWM=E%@MC(0OOKLFb?$?#YbhZ>eNwVBqghW(JjmHvBC? z>>x%Af6FN*&~)Q}kb#c-K^gmnJl8u=v3~%Rp1Xr2KpRBBrzL=Icmg#uJe&Ws@VESc zXnav{hZ(-^0XkWJ_=WcyaJ2+#_}_vGf_GGXeho=^e6S%l&u(_l?s5)Lg8CPJrf<7twz25aakZpq$aj z!N37pe|PxB`q$Xq77leAs5R`a@G>4;MnUqUM|UO13w8(4t^#4$2$M&rGY7a_w(;l` z1~n!GKy@{!*aLN(K#LKM<$nMF^4H)0|0j4fR|+ujw}2+yUNFr3@!zK#G!J^*7qnjp zw5<=c(AKB(hi`W~!V;?RRg1o+o_5x7Sg@r}HFSJ17Zlc)<+T4oyCMtPBhw zmv}VS9$)}3@9%Wt;BRRIACYy5zvUwvNL~nDug3DXbhCm|l`bnNG1>69gs?C$>;omD z=3g=Vt%|G+44{EN*hEk)e~T}w`WRLQ2JrdjVD+G?5td&M`GAhJi#_n7aUm$UVh?~E z=F=S|0SdF$GoV5dvikp19(b`#`yDtTzXZ)=fa?)Zh_r(08n72j z)`OLU9ROM?<-heq<~ zl9w+){Ufk<_*-R}L5G>0`(5wT?(>|TQKx;N+UO=+77^qJHtxzEO61-LdW31j4ekKk| z4tF(pA@t(!e@JH)+{Xa*v>;W=VGq#Z#haf)ECO{Tp`A!jW`PtPknNG+P5RiDaX~5~ z3Gj*~@ao#;A1eGUpnIu7*ZqP|Mr2`TV0iIg2{dPM2$s*GUJX6)qU<@OJ~ccE6$7on z1&wIPf?UO)U#tL{tL}C^;m9vouHcdEjk-wBvr`;&ObWO|4O*oKnWA&-3^(xUwD9aM z=KvLNr9z-{l6Ya3zi7(*{@9yUm zK?v!-mwlk)TR`(Kj}<_EVf}Lnq!>IN_XK7%q=N=JAY$G#kiUFSfX^F8*#PVE3=-UG zj{Jh@pt%e1(qzPPFV9X~MfFS8pa1_O=HH=%CEzZc{xfhQ+6lU4!K3pQ)E(gJ;mT8p zeR_`kg82%s`(W)g(2Qqy5eIU~^AmIhUOzv$U2ntR0&0hY3z3VUTE6+83V+M-KmY%O z^Y+WNzd@~I@Vc7+pxV>b@IUC#lozaRpp4`TIu&vUxM(=>=l}nglfbIM`5b=eeH|#< zfXakeaG7wX6{HbTD7{QWs0STV>;blX<&XdWUlxO9To@R@M_;^50ZrtA%OPm_a38$F zAElZW`t$!kI7ImSK!+Z_WCG1oPB1(GE>E8R`v3ps2hcVIupQ5S|Np-ObY2Gdcx+I= z1!7OfFL2PiKyRCZ?D+?!^{v1E{|D`D1%=1U8Q{fP(EJWEZ|b4fSD@<-Anm8n122T# zK{v~Qjt_9%0Xp|X=e0M;9uH6#5H!AYSsru)VC@c2b!V;yRofi|>iv``f`-^&P4m!_ z)6G9jVUrkP{4JoV;(g$mm|k1$<3bECB4R;Hd4&|%Cf{H^PM{{R1S7br~N z?QO$v;DiBE+A;woJsTVt(0DoyZowCEyxj8l|9@~5@zNBuuB*F>j{6@f|GxP?iby?xr`46-_`K)i}5zvgX zMz7mH&@C;-9=)MAUZj5oZ8bPhVgnsezq=F|DgxAR2vGv*hd(^lcdi882_1)6a4e*`H`!0Nz*p%AIVFTOs6 zWN*-cIgt57c36J^efkh0-s{1LG>HhRTs%PAcThKQU<`zU`fHGJNg>ei&HjhbA#+e` z^!PrI7-&o~1L_!jb0^rUk=H%Y`AE=BO`k!fb+kvf8E6YG>(N~dnp}C&eigEiibutx(-~B)LDsv9zz&!KpUi+{1iw5(^AGX* z?$@g)fY1B<&d$KV$WY1*I$yTCp5vu^3+Ob71_tnHJ959kX*S%k^ZPz-&`~sDj-8NW zf;@U{BUTA9IEFZaZV_*O!|`HXBqxJQ=YJ2-hOlEV9QyzN2QM6k99J#QD9rF;jWsBL z-gD`E{z9?;|9=kPe{NBMdlYd%?5#=2 z>rp`N1I>YfFX!pJVE7-jeM`Wl^N{ALZ*GzbY5e&o9QdamcVRrp>?hKEoGFbz@1o`} z$j+_2ThN1=4)O~!fP%~gbb6B9uh0DX?V!O9kIoPLf^5jQTcv^h=g}P=;nD3M0J?Xy zyWAm-Kd&8h=%|P0ClAe!AR9rJr167|2j5fxzM?=7bjK$H$i3k8b00i9!#EDZ&4U}# z`N2aw9AqX)=Rwc`pkOy3#|PAY4|41Wr3dInIFH`a1JI*>v#)l^1%1!fzNAm?7ZgD8@d8CA>{}@lMHmat%pZku z4L$_QvGYhTi$Ev%I4R2y{Jo$9EF%ZAIDc{eFQ{z*-7W?xOk1xAh5s z3#bR@k$lNV^Pvahb@0&=k6!3^y@iYzBKnWW=0jZoUJ(R3gUbP71;lt4%||co!JR<{ z4@k&OwGm+e&81EK11i%Vyfg>Pg4!Vv`NSoVkS+ZK3R#cl+7%4^QxCiZ4T!+{^WYc= zfU5KT^Z)mF3v~P!=b!Y$ zwt{Xz25mg)brtaFY}EkysJGPttP0dM0AFq2*=hjVBqZgvEvlX=0&+wb!e~)gk$cw9ioDAL78KBMb5bIwQw}Yy}sUW9- zPCCBt(QA5Zkr2a+*YzOry-!fcNsxVcQE_qHPAIwJxwSxRueoxrwM?D z_CCYT><3R?fp=j9gZ6KM=C8WLIDC=|I9x1?IQUz;KxJ~blux&UYwNeVT)$qM&py4T zb1X#|K;@f9w>9Wsb5GA^8x@8MClBaNc$To6@Pt7(;g#~fC=mjm>0KJ{(QW-AU5J~( z6S6SVvD-uiG?CqT(D1;E`0%g)K^H!If(}Ht{9U>TG)aU~pn}hxH~nrQ!tg=}-1ZFS z0IkFW&n=ol-Cz}8vg~yWzdXZXk6znZFF^qodg8@;22f~)o_Kv9 z-oJ^8_uC%5&Ws@O!yY?9YZyW6h&?P%mnMGV7hv7FM}z?+_i}>vzyF{3 z1)K%a_`_Kj?-60}0G%2SY6TmldGOaA@~}Kqat*Rl(WdzUd-Drs&`~38J3$e=18yv6 zq}JyD|No$6N}&6=Z+SF7{^N1*mA!}N1rN>}9tTe_r+M(_9e6zx9RJNf`1xBQSDhCN zyx0pGuIqFb0F5Gl0kJ_z?KOzec?=Y0wc+3Yzq}1DbfNWCcd@{WcCZ4Fu2S&fo7~`h zd;f)h`1k*iKEm@C$q+RXE7(g`y_^Y}bB2WP!9&a*&5!7)_0(w=miZ>-G5>94V3l47dn6k$$Yx2IbPUaflZ*pPjd&2$-j7d z88k7*qT-Pp3OWzLbp!G=0CX;@6Z-_ZZ>Kt9Tc!m#9=?GuaOEg^%0O<$UE*ZGfURIc+KzyW~RZX&;MVq zf|Q#cy`fJ$dP^U49(U|K^5U5RD+4G~9(*O%{HVV3nn&}m`Vt+>(kCTiAoIQ(K;6jS zn*IO(|L)Q!AkmE8YxdnOt5Zp0@HzGit<3#Rnp#CnXj_gTvtGk34UZ{g~O#tTuaQH*3w6mZi z{UGZnJ44TaHx|@^=OEcUJHH_B>#^l;NdXVP+VQtQ*3W`ZvIR9LUT}MX>Ig_N02;ps ztvEBk@E5f35C&Zw`1(3a-j2>C85i7 zKpml1f#1RFkRbU4G>+rS06IdVyF`TpT5`dU*|^XhdZyuw6Ub=(ZHGV$20*vivGBKw zf({7kE>V&2?R@Ur`mI#r(76<@hW~vb*Aw%%fNCSpZqU7TNb5*Sc$$CMfzEfU zl3*yk=+W)O(H(jQQYe7tLtd=@14?B4EvvzEcmE;N9G;+w*5-dK{4JovM|>^+fL802 zad>ot#&_?(cwPh1V-4z)b=Mv+{Ptpt0vCg4x0{3~Xni*%Mm#&+C0_7c01fehqt~bN zn{Vg87r)N`g*&;`7o6Qe>(-iUR3sSq!3)T~yPg4!H}SWE?j-^>QP5L4_&mDrFPT9N z-Ol?jUVu)Gy9ciH7(VmobAr~G^KUx)9YLdRu8iMYJC8UvKV=N=yzF@JDYIkq6UOGpjE)DNupE5M^uo9J>wg!{&-~ja zfNE$L&etxSkDDJoOe&^7@<0vL8mE01uLL}9><%1Kuvt%v;*Fec_H=_)DQrlm<`EG zpt=xTpF-T*`P4Dg5p*~TsNn836|Yla0QYS{)sj}xSI|20*0=nid4UC>+bBH_K4S9d zoB(nas1kx5lmKc!K+Nkky;2K0O6}>3H-%sSH*|o)QUPQqw7t`7x&UdQH#P zs4#%rC{GH${`dHP_&2Cn*){=W8~@aU2OlywKl;vjssk(l+R=pWUGVrQ$o>|PL7h)u z%qjT#Kh~qW0n|SQ?el_!H{8BhkTOuLm4NK)oB>h>Hy6|%1*->LCiN6F3JN;OAJQoW z9bsws|HWGd(8$z%kAtt7L8Y3U@Q?q#ov94qnh10afdVML!MOqyo6zxMaGM|ueBz!b z=>9Emv*5Ewx4Gf}7jqy6dh)No>(luTWTurU$V@ee6`)mVoiQp3U?V{n?ttBgSfCHR zCI;It!EJeq&A@V9`+A9`H{KzBU%f=6P& ztpo6ok4Gsox>3^;gPmgY}-N+rS#v>p)d=3L>5)qQ9 z@4fiY`t!f%afmWdLHT+nc)aH4OF@PgCLcH$UeY7{~deXzuAHcME>@BlivRK z=oPK}C&J*7%mQ8G=h4l&Wuq#CPp@s#R3QdX8c_gGk%87*6#oZJbg@p^s0xxOft|Aq zYK>PgaD&?MptcAvXh~5g=v1W_OzfaZbI{mss%~^D^z5Cw`u5B2h9cTX5tBRlnTPXL)e*+0MAF+VOsAD|n zFay>-8^Hb#n*#Pff2#~A!OA-@z{4T?A0!+$K*IstJND>i?S^O+g=qwx2LM`U&(6TW z017{2h`toKzC++925U4#-<8Qw3qflDLHa7$LGM$C>+6Q-yRshUKPia5(-3`ZFnyrQNkQ%eO`(F^ z84S_41g`H9cs!1EHbmdCNl^ct1}_F?*ar(2X^6fOxV}{oec2FwO)!0vq55FVt&~GelntT;C*!zG{d* zQ<%PLs6JS{pZ*OFmk_u<(0KqJ-K^daeIF)3{pXCPZ!$!m3S6HO#6D?=zSS^&+-Ulu zA^N_og@wy2aI>BD^;&Saq{H-G2Co=Gz9Vpbn;`mjL-Z-a^v#CqtA61 zO@ZsHg6Qjp=)2Po^fa%kQ>Vw65HAJ5YTpt%ipEg8a zC`{kyU!WE>BHo=L`dHxlE`cT}x>wxL=hU$aaHyfg_1g=jDqAwew&jY4U7^)AJK9eE( zT;TdXffo|7T0``4!1Ub)ANGXE@7fT3B5-}XAo{o=`cC#j{kIsZ4|FgksC@bS1MI&i zt6|~N1krbUH8?!GVEVGr^zDY|+XC0;1<|(}qR$7W&lswY6`IbPA^KY2`h+0*sv-I~ zVETUlfW$j2JiQ_MLg4yt{Q!*{vwB1Ho#=u3?=Vy!EIfrF`c&Zh7D4n$L-cjP^mU`@ zyZs#;E?-u`!X*o$@AWEhxOl+y1*7R(4AFN4uFnXfZ#P6A3rwFhR3FTL*${nG;QD@j z2m7xZqVEW3@DX$t)8p@uaDn;H7@{u)uI~^;Uo=EtD@@;Ns6JS{|NaK{p9x%F7et>n zM4t;xUoli4teig#(Z>SU7X;DwdnGtrSYZ0Bq55F%?1t#OvJw`aQV@O35c|x#pz+5H z)dyPW2TGs85PdOl`yPSk3s{38`o45R^_~6(2^U!XAPv!{1J}0-qE8v3Zv#x=JU`j*4=ZHDTDZvjP_HN)UaQSAf&Y<94Y3 zxS{%B=`$LlZw*}Et1saEuo$9m5lr9ZFR0<74AEBu*S86xuNa~)8K!SGR3FT~*Pp@u z^MUKDg6MOG=u?I1ONQ!$h3967J{h<^Cx|{_h`z^dQ2%K|^})iW8lvyba#*-ESNrFs6Jt6en^Js z`?CxdE}uSu{r7npI9!5Y`fh)MgbOVHX+!j#f$Q4^(RUc4j|--6F`B;5AHn{c1J~CC z(Ki{Q?^p}ef7wudF#qj_=*xlY^MdG0hUja6=`)7vgSE4oA^L3K`h+0*j3N3gVETT4 zMD?FHL>~`a->r|}aAAh%`_v3|=V7Qmn0>+!eRr0^!gCQs-{qy?@LUDc*A3MN3(wmh zz~Qn6t}hFsZ!tt)GE84ER3GgAsKpR{HE?}K5PiiEeKIh8(rEg!A^Lpa`hI-?`_CDo z?@ANYe~&+)hKn&opA1~zA&5RK@L?0(ipEXn;to-bT=<9*&lY;1LhUh!m2=yN`R3FTp!4Q2haD9*7 zgTo~lqOTsN@AP{}xWM9F8lq1Ju5T4YpE5+B6-?h`s6JSG_whS$xcpfR3zs5@zR!!n z;qt8k>dt7WKA1aKL-d`2>$8IBI}Fjc5vETWst;ygF+|@SxIQL`zR3`M*)V;t-=X@? z8lo=;uJ6=4aJVEx^r^!1ZAR0_4AEx;*Eb2G&lsZbUOm)*)lhw~bbb0QI9zz(`l2BE zm?8S6!1Oso^$9}Dv&j&BcNW3IQwgH)@*;3}dc*W_L-m11)waclj+OTwwWD8KSQSu5S}WUok}AfjX%FW<&MC(&y_pVE_5R^;JRiIYac-!t^Dh z>Dvs^Cj-~#1koo9(Ps|Rrw!EyOP|#ceQy@R!i5W>@9{!#xO}RGy7TiJi2q>e#TlY+ z4_x1+H{fvD4AHk1rf)ZzK5mG<9=N_)5Pi)Med#cL%}{+XcV2!C4wo3Xz9fjgV2D0t zm_Bc)K3IO34bi6q*QW*1rwq||w+8AzVW>WseaR4ge-^;P<`m)jV?S|;ff$Q^v z=u3v^J5dewpD~)gW{5r;xIQ6>K4XZ!CYZk8uTcHx4bjH~*LUj`I9!+^`fOqP4ny_9 z{3i_2cV|8*wcXmVd!Seg5 z=zCZR_1|hVeZOCT{r6@bEL^%E`X0{%hs$i3zGA38SUNil(YFV#F9@Pi|3g-a1cpZ08UxQM{=Lo`$$tbe;2qK{=ZOrI4*pEpF` zWLWxChU$a0=ZhiwRN(rUAo`>s`a)p(UO$KU57u9?hUoh;3ufP`=iqRuo&|Pi2~6K+ zs6LoGnIZZ@;QA&(^d&>|DZunqL-oPjdHNYRTx{U_q9FQ=A^IM{(x)?;zR3`MJaBzV z5PixJeH}1;+)#ZmcSb|>{h0~#->YX}|9zeb_MazA-{ohh;i3%DcLuI+6GY!*h`z6| zbT%8R57y6l{S@rKJ#c+h5Ph2=`gXwdC8O!v4AIvE*XIP$*9_5D1JkDs)dw5bsD|i^ zf$QUf=re}s3xetU{1oCpm^+;z`gq{_EXrhUohS%SYa5`esA)vB33dLG%?v^u@#U2}AY4{Fe;T z=L6UG=?U0>&JcY{Fnzb5poWV!M4t>?-!6zgVTis*<HGZ{ z;y;*u-Vl9Pror5K>oGW7PDAwh!So%5>VxH5VTisZaD9s)`esA)3BdGqqv^Z-2pldY zaD7=2ecq7t*`5Ur&tRxN(E3(TyLB-{p9(yE8bS13hQtHgCqd9WCx5Fnn!ap^zBTap z`}GLyzsC@L*LOnoJ$?iU7nps<5Pf^#`VK+#Wkd9NeT3>;ji&GSL$Lo`;QG2C`k?9T z@I0vhiqZ5PhUi12vmg|G;s2oaS)=LeM%O0=(YG3sUbeG9?PEsM7YxzY0#7fG9)iQA z8lo?JE7ZQz4^hKK8lo=*u5T4Y-(rY9gT+w$CZp+l`~Vy-HE?}J5PiiEeRnTH^+luU zTMg0Y1J`E-(dP`&cPt&MPZ>>LF+`sXTptrepD;woK?_ma|Gi!*xH}Ld% z>H#=hx*_R$Dy)9k3_0ftu8$d_F9oh|5=37%L|+1I9J3lt-|73{aB+d_i-PDYhUiO~ z4fUThn!d>peLiq~N)Uaor-JkQ{qIo!aii&rhUhyo6_(#$-3R-R8)BalXk!#;KH&0w z)Oc5h=z9X!w+W)J8Dd}WSEzln(e%B(2lihKTwfJL-(rZqoiP6;qv_iW(N_c4=LFGL z4ACb5^Pe`FzG{d*AGkg)h`#PA;BZlcjkkWjhw49Ph`y95uyDC_4;(Jh5PdWDLgQgK znm%rbJ`=dUSrC1fA^I-Ng6eBV(|7qUI9%4i^(8^{Er#d|Uk=shjizrlL|+YDpB6-4 zF+|_1V^DpN`h4K}KHUZT&l#fcP%c#8?Yoe0fsH3?L-fhO_3eV_%bpAlPigr0 zCsZG39||ZReZB+spUY%ecsAVyokxSZ9YWQk`G|#2=R?TybB|urqpTtf(S`>Qr`Xus z{{R0)yD#ece8gI&E1+eBuzlCbzLrmmy*;{jgH|^Bc0TjfeCGi^AgUcaX7UNNxnj*< zPKNGg&@y_^N*nEJht6gR(2lg^;~tjB`CEJQ-~R914Z76Sr!zUiqc;_{={xo?WPPa6cu{}r|Nn?6=w%m> z^_`%T4?O%pOVT%kmiT#ef|p@}7Rops{QMv0viBZfmw`7)LtXYR59Bh)^`~GDzSIJp z#|K_-6bfDu2indn;nSUN;c?vE0>1)@Ba@5tt18Q1mJIB2MZm4VITDWzvH(f?4_Jwqe1I4L3eii z2;gLBZU)^N#Rxhev-t-L?7pzw5g?td|4Rg2Ti^1x{s+gyvlr7Jz5U;?7_?~fpGS9a zz-wv5{!owZ@Boj_3!cq?Som8egSPW@7f0-zCd~laS@GiE-~a!+n?Y;FTMyKw90#*N zK5ah0=-Zp4BGCzsSVxG458!aa}}c|8xdUelx7IRLV}mdT^j*<%N2RqgAe2=yMl zw!b$CGVp7jCzfGX|7jKEWM|bRx&I>0GL(Kv0ZP@_X52EhT?d$=&FV4f- zJD~V-Lj@yO=~<8F15CR>;}IaAzuvbC?Dy?Ri=|=vPeL6-96>iif%k53xPb0qy#J!9 z{Qv*vAOB0TLB@MnI|o4S(dOSa8MIpU+aV_Y*7*z!3?AQ|!7k=+oe1JVUG2iZO~JAG z4=;bqV$iXQkC;l#9Gn0AFOl)+4)*Zqb@~r-l82=;C`niS=Yl8$M=9h2DbQ+C@Ony* zZpbR-?re{Jpsu+i|F+uy9-W8&2Sk8sJ#% z{_*m+f|PkQzhVMyYz_8!2|7&=YNX>HP$0kLhM#{9if_I!}3kTn0Y5Zvs60oPUG%c$6N6L?DWzz?-(f36Ha(ijk|t znqQv5qchmU!!p>RcuGU%f3DKLhDuPtwSbndHos&7C2a69+!Gv|&oY7Trs#yF>s}`& zkPA8wzTN{`4+~oByyCww1L(jF4@mla0rD6q8bOJ&n6<$ozC;qVM72BihvCUxpyQlQ zf?fTx;Q0Ul(4Z|fhXre?u19YGBglCT7QCg$J*Bz*uP|ExL!b$-S1_u6CCeT@^ zmRI>(B$*i)pw8oO{!-M7r_rb9&$=|*iRAP5K zdw>FizvU?tl9@L^M!>Tt=(t9h*IoFx8Mt(QcWnO0%iq!o-lGN1X5cIa&s{B`&59uZ zdh}NO_vozl@UX0Q;BS%y8QVP>Tpe~72fX-sk`fiMT;VDLFCO#H3=;DaGwzzRYB);f??7=ZvffyuG? zk1c=8KNbdt?&1vB&JT{w4;UT39W&r>dBniL;M#J4zvU(bVkfMfF? z1^y`q961i~w}38A1D6k-A5=lRGMaxdN?vMy^s)Jn03=E{_*)}EmlZWW?_g$N=nT%_ zpK`!O5oE@H{+4!-vp@%I^alP1r6h1d=K>{k{uXZ*28Nac{H>osq1t>zVuvaN18BQ2 z=nN*%8dzvLckFdhxzPNBlfMnLC&sb)Pd$JCM9`sn&2JeUoBwF=w-&O1QbcydF3@=w zJ2e>?7+!7%@9_c^3k=_nF$jQ;X_V;fj0J^I^S|g4#hsvy*N)Bqs!POnf;Q1PHvh9J;r2{E=W6&3 z98R8KcfIih)xwU=fAsm=#X;*5Rj`i zKzrsON;n)C7{CsEu@&+E2}v8TNf}gFmyU+><9wsJNx_p ze@}?fpy4@)z95*sP>_;Ua3zM{Ao4~~dGLjaP~8ZJi9ls{fO7TA9Jua%TyVF4ybSeT z7{~%oY)a0-lz`gFFV%kk|L@xQ|x0%GaO*hrjLrZ}8Pw3j8f!LHiM-A?X?v zzo2G3BNud0qu}&R^&K7tUM$|9^eTvH4Fl ze`_;L~>zWVw9KWe#M!U-y~Tl4>b0`1KImnpwMj6c<-!k}!ls~Y4G zP#N_Sw2m8eBN>0|%s-&38nPq61=dT@2{W+vEcm=UP-6?yVo(58#mL(@ZWtc$vCa?R zZ?QwJeGJiS9|ce`kEneNAl0Q23j>2^^IJxb&if#zy^wPG{~yOGK*v~^93ZD1S#IuN zU|`_yeF`aY9iWF&Yy%%W;JDWeT-7`QmDrBWf527IujWG>D>(RDt3eqfIK#2|-~SR7 zpYCK2NDMRaw}1{>_w0310hJ^kptdxB(>c&RZoR1oz;1i?;{KNZ{~a6uf=uUc=>q%4 zH2XWOtV^`||G#@OsMxR$Jph%5q$Wj11_tC44ftDInZVi8quUj6v=x8raZp*km*hk_H zdw_BgKlpw*en=3mVB&9W1WCf1JH;R#=y34879duqw}%V=HY0Epwt^~JPLLEt zNuXc`)enat^#dduIP!0+QTdNl9km`Psd4OegERr$89}YOZ=fud^9f{3iGi!(+n0U+ z{{MGus8IoR`PHCoP@M`YZ#{DX&w@OzL) z_*;8Hq2C?s0gb4a8DKXsc=Vdi`~pjf*UgbrVrv<=7Kb0f1ln`d>h=Hs%Q$Emv{V)8 zXpQdm|Np;C1cf!YodW5eVD>McfQmFk&N#XebRN|wc;*0~DBEj#4(=ou6eqQSw z2A%iaYbpqL#D25?|6hXQ2hkrvJ3lVh^Z);s$>44*B)%HJ9aJH3KkF3}sB!v|6?9P~ zs4w{cr3+~D1tiBfHlO?N2+kWXn|}ZQ|KhSGXv_|Bo(A|l2ggq6PB_peIG^rx^i$^` z1q8V1&cWaM1$0MF^BYFc2`Zq1F*)J|qdjQA64o>M3@U2D#T^rW>oZU$foD}vKgFlF zg3+h58k9*DTsxmRHh{(s?t^Y`ZTO?h-v_Gm9eYDmE;alL;BR;1W?=B>0wf9=-7xa$ z&i3%_twlN?4CE&t%W8*WF~^45|6HZ~jt#Z{cuP4vo8N++fV<{U@koXom)8us9MbX- zf3E}hDq(Qh2|j27R7SdVmT|g0kl7V zhbgFCaEOV4A#H+V!yg6yzBW*S51L7H>3rz1i-CcGK}>{!!Q=7+kJbzPt)Ts-5YYpm zgYZE@UqKZXC}vu{LHQeJ`HkrbZjcd>bN=9-IL0EN3w1rXBH-`c$`0C32unNappG+S z+zA|`;vh5N$%m5z6r%}@pyH5!n}uWN-{$|k{H=#r85n%5lLPphcd#-rfLqfo_M8k1 zpks`uvobJ1`Vk)8!49BCkw@o656eUR&6iji7+_`YF(?~U=I#QWaNp~q^6%vakY4zC zz}@8;JGo%_{>8sl|Np=I3d!`4{0J`(nO{N5!>J&*gX#w^P?Rv*ISY|Q6x-Crnt-YWzPk2fMpHG5lFhWN_LFaur_WGz?X#UB`-@Y59 z17bKdgTu3dONWX8a&xh!3s>!X>;}B{g*&V@9W=iHPj8c-gVI}RGD!X=Y#nB&VC;Q9zOKE?&fJu^VXN~bfpty#>~03Nq30Tl$0 zGyydjS{m`Ug3cE?#$wLU4bIa(y{Q{~dR^D}bUp-+N%t1~hadO(&7-%1@x?}CUIx$3 zqus7+KqI@aL0#&`zyJULx94xa2dcdx!_wTV5NXXEB-~xh@j|Qvl-9tvmA(WW{11`< zCAEF+;G`A{OKLGH3PdM0dvH=ydpQe~{Nec>SNNG+|NbB9b7=T^bRK_M2Rb{PA5@=! zL$Fm2)Me?dV1o3OKy|}Q=zdR+?rujCM@d-RHCyb)%2v6=nr|CgY~ zG9(@$^?Vb!(F(2SOF>PY%#xDz{SG1~%ecs>I)JU@feO9{W>ftM@5V+)Y{1*zr1 z^)?4&JPuUDLn;-Re<25xzBsrarLj2;bd3K5&t7+E|Kw0Hw_`&+XsmxBco6fEN3SX0 z8(0Z+Mfd;zmzAI{^Ip(M#C{L~8vlik|D)Bz-$30ccnkIgco4jvzx_TqZ-L8950B1^ zj?I7n^S6EkwKYIz+=54>FY-67WMW|00lH7%<$loF{GfWjIRMYso{T2S40_WS?;6F^7n<-qD&P`d42{Qv*U3{V~g=QBk4_Xt$}@wYAkwNJX8 zJ)kW@pWXz<=11VJ6QZrqa*PoY=kLD%|NpWRVi?4IaPyp@=H-IA*xl7I^L%^rA?9U! zIP!0^hqNa7TR>sea*4n7@7MqTUv2I)xF z1y{SxFTj(TFU`OmHBf!b;L+>B1Ui$k^VG}8U;qDu=XGB&zElKnu7r1`V5ixd+5Z3k zQUaX7L3P&4w(p=*QmZ|n(^uu+K^@O}P`f7tG=$guo(Wu5xq}8H!4`RYv|K7t^67lw z*?H#Wj&J|}d-l46-PCfaMAowPR>^$SR7c}_vQXe$B!@sSb(X;a? zqzHUD<;(y7FT!=-{s;9up^cvsZI5nm2cOOdFJ1n?XK?siFMa_zGTXzk`OJUtG~mnd zFQ60&>RCHBpZ)*x0ysN^T6_keTYfmd{r?ZWp8zxihdjrLey9hel!NtUUa&z1J38;b zur>PsAJne8+Wg=ze~UgF_}VSU=067fEuYvy98gK^YWU5u`Hw4q%Vp3QPd~W6Z~mjl z-{Q{9zyQ(>?&Y^%1f@jm#fM9W3KMe8&)?euv1$US`i8VSk{FTN9iaXYVy*}@etSq2 zI`aEJf2$}Th;e|w6}-p+KH;>79m!SeL9H)%YiJ>ehiDC1xOV<5C$0b?h4L<1B;7zM08qM_DX#OT<346c|(0Hu)a zeagzfV0fVAq$7Bc)P>*m2RvX~mxBscSo;>1-(5Og*FbW^3(tH1|GPk2C3>LZ7Sww0 z1rK95Fu-QDL6cqq$df^!g&Hk!pjd4EUy=bHmgx3&aOqwQ8gK*8fNP!t&02OkM|fzS zNaN4D<>DYI`0OkO@9VN96_8~?b7)RS>|oK!?h9qZ|qIRsb~4^$@g($fNT-`WX{2}tHhWkpJc5ukv8Cqpj~4|!Qa188XB3aD?# zzwJu%D}&}=oc!$|zDqaQ=g?tD$6i-P$WiN_$w!Z|FzI0=zYm}cjaI*d+wkC4wI!r} z@0|rI1e%XAx*CGcuzU%+Wf0=#hdfAbzQTh%NO26rgSr{A0EE9Kf{%frw+NC^G zt(W*)i#Qko;sAK19C#SR@De!PfzFbxa(n+DJj?IVdED{a5k~&j8K7Zk z)RflD2XfRykIsKD`#{w>j`q7thwEy1AE?83&5PXA@M;(|A-Nh_7xQoPUGs7#sC|U1 z{x(5qgz9H|ziZmy93FaB zfY1Lw^&MO=!aVE)vJBE0F#Pu7lO``inkRqVu@^5?-u`d4Q1a|N%HIN7=KvW?Vqjn} z@ag>EX?d+g540NQ;47QvN9@h7n45nw^0$2f4S#@VOhIRF@3IDU#z4o>gXaA}3&f7S z5W4X9KUmzO^VrMDpn*+LKMOT}I(*l_qxZ$cli&Y?A`<4@H$VUXpMa_!p*ZCvyodeL z4qOI7+HdeO0yYUjaQ%)GBdD6?-)7YL-Ldlvc*R978v{eH-@b;QX8i4^LG8(2)*CxP zW0@yClX*IP7!TV0e+bJ5-Dr)sM=vUkA@$Kq{$HTcWKb(@1}NlVt-@~P_=DAFFPg7I z+Qa;yfb9S@1gH_{%`#@iAQC|KvC#{GTF)Kg|9Yo3BCq z69O9D1-bJD$k++UC6hm>IRUyS0z77Mtk@Q`LZj3iG^JW<=+W!=@3l5~{vKA6=^?3i z?R@EBc?>qnp$M|1H{ic(=UMPz7HDnLHU8$lAK*;qYIxu!54ca`z|iY=q4_5}f15ZH zD2h)s|77HE*Wv<|wxF}?``y7)p)cBI{{R1S|5wm>KXSj{qgQmMyAXpRXp9ClkN@J| zk1zinkGp~fWEox_1+~7x>+p`UA(hrUKoJTr9ae#O@Y33#^OHjZXpN5p2LnU%D}#n# zX8i4sK<%>q|C#F;7#QjpK!0oQ zloK>0>h0lyrJA`9@;6H32h{F?S2LHGKuwD${H-M$17q@L)8gyn{xzqvcWl9?-Sw;C2`&C|o)pH9xxF{L8h3 z%MsMsX`Ks-0n8a(1JpF(2D!QTw)Un(HZh-oM8~UL3Cq$aR^(Clt*#j1KV8B&=sT@X>U$J1dknn_;U!N~R%CFa; zgaj(TKo>5gP4GB)fEiM&H9z>{(R_jlRJ&~j9SH-<2z;OzD&+tzw*XZtD2wy?Tl+vp zH6O7+ZCmfU28v$i0RE=$py&sWf(1JiLza?*SI~jWXi$Fezxp52v;w=*5z;}h`11ch zSOsV`Aj1pq6nIg7?4=CIVW1Vg-QEu1J`K2}JqRl{*+DUZJoE;-2jS%pP}GAo^?LmW zEd=$j^aeQxJe&-&2-^Mz={mHes3#v`q+U5WWDVn{M9| zDIVH9(Cea#SfCBUV=rqz|Nrj_y6egFD`w!+PkYsi>>DOQ$1OQ+J@lq2L9Dj{jfkfXay0C#CNk!71?d zGF)lwzyU-WtN#E0KRDJvfi(R*ByE9A29>_A8z5^O{)6XiyqG{|@pqnh`2oa*WfXAx z6cpwz*3hQ;JkTAMplzxkBTX(NhdXF02~2uGt+xQ; zkB=|+f-XFTDzg6sYEgm|nS#tiC{lx%2r;SwJ4BGAgCxKU5G+7#m1gL~ z1gOgknXh;c@>8$Vzn7p3XyM8A#TiKC+ki|1h4km|xZ~^eUPScH{|+x1j=$Ix4=tEp zGJ-8f8RP=p!U`Iy;cwvwIRO+;y#fDUz5@pes0IB46ezG3^y^=s@cR!MXnZO81{5S9 zC7{(a9=!qokfRZ_zycJND)0XPhj{TS=vXt57tehC|Nlj;#M}R{()y)1$X$^92Ch$q zLDL=0Xa0jqxt2AcYkzZo{{P?n{JulOf7cSu=6`zptv(=kLG-+w2MV9&1K@Gimz^I# zD_9=A6auFQsNlVC5W#NHnL-dFZf#)iJY>Vm-;w}oC4m~L9_64V z3c&jfa(o~7yHFP*ZzfG@L&w~ zfcKw5K`Yi^w+3>68Y#`t#ps~(>EVem`4lJ-g7$}0d%R49@81BY_?BbHi&sE5LcvOQ z{?^r?;-NPXyrY1B8zXp=h7~iYxu;vo1+I=-Kx2*`y{3|vgu$DlI(tDysk4Vir*nki zftOJryWst+9iRoT;2kB9{?iUn6$jpW0_B6wGkFQRt`N$X291)5fy@BUf9y~I@!1f3 zZV>+)WQY^At_2iWpyJ!3^ZbkVqR{XH-9fbo)H+}c_IP;`q8QR%ar}0KiNDnjRPcg! z$h3eqGr;521mt&koT`C%y^hfCu3+;oUj7yVP)PjJYLy(e|u79As@Pen|LCyPSkh_Cc?VBNLLhff z*a6xH`jQRA2CLrzn!tSd4b(RV^Wo{e_&6xN^S6Q)1B1ryUYdjSK>EY{{M#HDn;+b_ z3FU7A^)Dbh!kW)9zW56&vO14Kmz;s_Cx_Mk%24x!K>-RX#6h=^HPnMv;zWbWz2^6f zpfG;v_XnwteRmAv2+#_6up{<>bc5$CPX7T_ZH!#}tp~x{4?;E#Z2@sWO=0Mo1R*8{ z2FRp2biRCN5je1)F!8q(f+DF`^yXP%2Ezj{ie7yA{}Oci_YUxs*JDsU0NN~v>{-z2 zbC_qDUI_gD|DUJfkcT5!BgBh5U&?9 zwA5h5%ilT&qzRP2nn7(INOP|PB-VTgvI?*oJVFLqHs^U7_=I3AzLgnlwONCg@D$?Z5y3zjz=3 zshlBVAX!jJ&G33U(iTbR{w~mpa?pB6@XghbZD=mt`$1DVKHcRJknNisrA{8r;H|za zB?=zh#R8y4@t(H-{~LCLw$3tC1S4PK(wlk%F#&QIzMl+vzp`)V2ba#DpqRixH<=6cax|>1saW0@O*`OPvJ-Ro8Hd90P)p{g1gZCdZJA;<3%);z}zb9w0kfK@)EXb+GYn56gqayI)!x!tP^6jt`Gs)3v9B84#PueNc9f zJI(>c$;(Vo-3zbJJ-WgE_dxdlZ4L&P&X+Eok31l^hF8o5EnxsJ;svk2MeGj-M+9h3 zd`UFOd*E3_%|jlom+A~XIzNJD+j4He_Q!)ZI6=0dBX5wOV*uKQ4l0j!EtP{tCMaF1 zfC^erGZ+*Mo%cbzi+8PnDLDDE6+C2tbRYG9$P_y0x)lk~zGctOBR<;c4xsJJ{4LKx zRU>%zoQc2n7O2#PZe!+e1zk%9nws|P3^?yqIt)Ow6+%55I0tCS&~tDr)bz&*VenNHE1LiR zKkj-4v;nQ#^$h63GNhaiZI>Q*JpCuM+8+mt8UEG{3=9mg*n!?T*&D?O@-;LiKq^bm&UjFgf$rG=x0m?0fm2!Y z113-FczEzPgH~)E;BT>DW?%q^UuU?7N9REg%L~PV4b`AY$O^CwM6}oGKPXH*ED!QG z*Dx_KfY&j$7J*ryZXW0sbkOE*P>OvS%>=qt57y2B`P+IQ#NYi;BVU59V0k(1m#pej7O z%L720eqYFTLiYB8a(MF#Mvobu%fw_GaG0mYd|Z}ERn9`&&NP|O91G|&oAXmT>VZFuSB z=Rg1dPw?z+2W>p&-&T#jJk1uAi}pE#_p}(o_OyWRzV_^n_jo-Un(yFwyLb;I9`(TC z;|^NA1@?wVZv<#T7u3o8t1f`)ghL8%XPa)3u~@joPw zgM#Jdx8KlaGbjyi-wkp5M^I>YhkLv{^7sFLkKPC-kgH#=1nu4IcK7h;4fqdos;6bR zLvasiAz5i#L&ZPd(gu&_7ffJx7Q_7o=_i1iMbHrT=r#3K6#|uK(2aXWEdT$%^!^Vn z+CWLhv%A~_6fdCIdl?RDYW8|Dd3O4Hv>Yh$^ys|h(Ruo19w?B&{;C7F%3ecUSO{7N z2G0iH|ADrMgG>K&|2thzyacUwgVo3U+dz%n(~woPWAH74&RFvS zP*jzIZp{XF_|a;E2_DJqpw%`W-P1v%C7^kpeh~i{3sa0o@^lchyB)Uw;{vE=?QRDv z^n&k^6DUQUVQB)Zf=*92gKh!?ISjly9Ncbet`K17ZxKNr(Ey(p1Mge>1m{{OMsTyO z(-~9-D?!fk0PWBBu>4RY{u0#Vh31C?;10is<%bdh{(S}8vd7{#nx#PKtUB@2yXs^X3_#cZ9UMSsE6e# z{$_sAz{|D*#^!&uB{eRV-}qbp{`vpE`Cm-w3Gkq(<%#0`@EI2H1O(hepbUU)A%E|5 zP_hKISfK+g{QC+RUpIJIe&BD;{0AC+1&tL{feS(>qu0Fl0&-aNi_*y0G1L2!lF`=tm&m0^udPzpP?1(F%}fyV@#Jzna81|&gY(Onz>9;QzPJJqCkzibd^^U+-&zZ5bb;zhaB~J!zQL;{P?3Q+iKGOi5E_Kwp-J!% z-#k#+*7**$NdYwW=F<5cet=5rJWz7#y#L}GDWK$UD1?a`to!Bo-_U%-2{C1SRR0MQl z7(evtX3*(zb=SWAhpg>}?O;g(ZKrq6*kQ-W!0*REC4$33FMfUd64m1 za3%;2@a#P1VR?bS$pzeF{u{&J3aV=%E0{qW8(Tq>z3|Gd3~CrVDCdHP8sCCSYEXZo zyEtQ~JIoQFtfyV{|Nl!Jcsmig|0Go#oJ>lb;d{8iTNhq}hSS0A0+2byAafvd4fkI> zF8u%hC3wG5ujx-E@Cdfyffsjw{`+ru;N=x~e+HDieXNTEit2Dw3@#lyOwa@gExHf! z_XdLU86>g3j0A-XeEh``oUb6uB11u~QE-zTbb1P?27)vz5#xU^jlfIIK=UM!MDEDH z%?@G$^vJPNF-QJ=Y&P*Fe4xzRmV!|4?BUa!@!z-e9cXPq%LQFaXDcA^21QH}KiQ;2O5`AT(eRiy3$@0<>p6M(Y7l`*|+FXqr5Q z97*B=+Gh*u#k>Ny_My8}?m{LXAnhxN7obk}=oJ;&0Uo)%dg06emoq@Rz_n67s6Pab zDNwl%iYd_0;>!qdArD%g0XsOW)EhPvSL*25>jrL$IyTtxmUz7|s{8yOeB_-+Z|Mrd zlc45Wr|XIrp!=6l6D_D*d#McTUxCtm_&QKtE8PQ1jIURKrhkezI5yNVa+R+1Y(B;W zs+V8ShsK#luc@j8I5|W6NnGFm{ck?;|0Tm8(ERVOH^?_ar@{B5fNw{34Dsze65M&( zqxnrlXXyf;?p%S+&?P>dzAI2FE6{k`G1nOkuierncs8@BFgkua-oW1?3QqLCD?Gbh z89cfLL8lwFfHqWs%7GTpeZCE~GZ^?=Kw}Pw@d?jvHxExsw*dYYBTz~4tqs(5XX0;F z0d<4FyFrig69XCD8^Gw<83tFAyY8VhQ@RLAYo`45z&Prd&4zx8$r zr;Fup{+8JP|NpyK)-K_1`3ySTCUk*kcb!M`BPP%yvH!~aExzEo?0*b@%VE%2R?u^p z+TMZ7N>r~Tfhr)&3;eC7ATuF$y;B1hI}kBP@DWch8A0O+@ci!C8Oq?{ZR0hdG{WDy8niLI+s)(U8BiHE0d&x2%S7;)7>f!xN?JgR zpqgJWg7!4ObOH|txiBz%b6vo}-(n0J66kdY9T-%`<=FgRfxlG&R3!Jh|M%{=J!mVopm1IIBz{r!tT)>yTYTB8EqvPXuFk1^N|Rb&L1d4kD&3m zumJvMGf;yWoWFEH)`12upj$cIJYGtIJOb-~dvq6YcytGGfV}L$3+jElc^q?{!T54J zxPW8uw5$t&oMhw(PfI&M!xHec1e#3p=yhiVdB}x-8@o&ALB|HrQHG76w9xP)h9BH? zb!_-i%HIN-C~<7~!NuPSYVJb9t?L5#n>T|TvyI(Gg@4K+ z8wdU=2RTmhxBh2iV6ds?Z~4v!8Wu!O5<8Va!Lnpj6`VZcM;s`GNL95b1Q|GV1&A{U?EkVwZ2bWK%Y4Drt0!IFp(!c-z zBa-4V7Pc5@5_RmJ21=5a7i!8FFG15^hwlW(POz{?@+U}Qyf6#AfPDfqL3(r^gX(`N z4KMFOdnrJhS)nqX-P1s6x3_@Nu@ju$LH#PI9NgC0E~sl?UIrbKd8tJCo9hAv{ua=F zI>+udaDG3)-*NEw|NqUkOSt%3>OjLVklY2cz=P4Tvk#P^uvx(0I{`G*35i2UypyS=GrB3^=yvK zKVs^0p`L)*5BFdP50hhe8z?v(Ey4MpzlQ_7TFkK%Eb5W`;iV+F)`rBBwHs(08MGFl zr605>2z(IQH?Yf8L8F?rOL$8rgR`7voda~$2@`1S7nJZ?YC-L7c*4&I<$HL-PXuLr zM8da+Y<~L=vZUd^Ie-5g&?HF1e|`RbZg5Tj9rKd`GNC(^!2^`6LcqP9+7%w%{Gjf1 ziwkJA5~xgXtpe4Qovt%HyWJvuI=_4L7BG2smU(z|dvbVm7jbxWo_aBv^Z$R3Zr2&0 zZ1>U&Jf!93;nC~y-?P)t!_(5wfxme>xRwQ3yB5p>)!d80y+F|Lpqt0bX^8r^+jl`X zsA_uW)A_ymAXMhz(UmPj}@zvOgm{>j4MRt7%O>xTk= zOU^G)E#bO^zXf!OE~N4}%-<6F3q60J#bj?QxUdZapCAkJn5U(i1Ans)XcZi2`Dm*W zm<95O1ZZ_ruhTz}s+Zj0yJx}i4Xrfx{QCbNp4HIvS;qA5|G}vgGoyiaML@j=OL-_M zAI-r%pmlDH2cTIRoQqvLT_+%t;)_4izan_hJ0$*nFJPvDZW#6v@8H$Dx_t@>s2qFKAQ8ZEz&H zdAywQ7c{zId93~y)Gc7Qc_e@E==AOI>2#g&B6%8U$_Q+WN4IYWG$?$!T_<>S9(U3F z^?Ds-aR+ED)uZ`6BPff!d=5%ypy~;cSEN}O7!1Gpbbj~gtv&o=?@dq#QB*`+h+!Wq zs7KiOzw@BsffuUl*cm)}eUJNe=1%bKeCpVF$D{K!G@u>%x0%BN8+2aJK2R|O+HC;! zJuIL17K41(e4NqK@_y-Im(ItawvKP-8=vmn2`@RmgEmFid3YjR2AW6&7tE~>8KG`` zA$#-xf5*<_FK2xN?STGY!QXlf)HDG_2Baf%{Kc*hNb#`=WM#LXhY#aVP>{o-rTI9l z5Q0VxC@y+U#NqM5-;)Dsb{xPG13sOu9Uh&&6J9)=0*?WoZdX_gcy#+hW8kGGY}o{; za$dX`QdxnfWI&bGOVIHf9!L!d{w8pba6h>2+XD&?yd^j|=Aj`BI(#SrTnmF+LZDOC zAceh4hm8PK4J;OV=75tH)ZgG_1x;e0VNKpC@b(lac3y&(*m(4s{#yl_GW-4_FAY+v zcy_u)yp#c5fZKc=+}?Tl@%#V(poS2CE9h`%P-BR{)c`aI1Z@z#1dSJYBwzB;Jm|rA z-J|oIPv@Z*@t@!P2V1iev?U&ochUXu9-kjPC&T>!KG764e~f2DQC<-I>5;6dR~SLMbVbOu9Dd`+v`5aFjqZ;>&W-;dHJ`Tr3apx5k2& zjsCFb?+2Y9-CVmwnZNHYXssxyA;uu!$8f-hfAInSCNt0i<0Bx6UQ>5r(A>`V7k^Sf zA@1h^Dq%c3{USi6Oe<)$*~__KK=ZkfOnwzq-@r2Y3Gm1$jtJHPxfI%94*CUZt;g~A z1%OT(Xns-S*!+W$zimBerK>G;zZAs$+u&LUT8Nwj9Y^N!_RW9LxIbk61u~xJ+4%>w z{vgArdp~Ft4W*9++B3!GaoiO&|H9zYS-ZfaH$uYWI|KM!c@~fE2nmnY+x#t#91INI zZXzDcaU7kXlFW4m|28*C$Ihdju2UR4k9l^xsCYOwKUMIwc2No7Z_#68U~v4_q5|zC z$%9&w-(6Ioy(9rP&@p770}g6bK;0w;kIvc-NAL>JHSC}^r;Cb%M|W)pWbVSX!Nc+g zf6H!A{oniybY3C&$mhMF85&o^Z?2v1LH-4~z`&)LoA&qVeCMNi%@?%YvIo==?EC~O zzB{kIke|cJ0CHe}r{z)primb%ySIRy;@Rn<0=kW$--nd}a&|AsaQ^v_GD!^N7*NoH zMjbsnLsUG#!;YZ-q(^t?442NI9-a3<8rD4nxrV<5v|e?ey&~uUWpMm~Fl5f`l`;CbCCDxkFQ(|P>`<8}@P zPe_^tM@V!2zyJTi1+GW0DN`mSf9K4CM%hcyqQ$fcp1q;}JuNTsw>$E^r3uuHI6piqBP5A!re|P8v(5d=2J$g+W zmw_sU=P!0Xg+{mMaTgT{&>9Dj*%9DzU0CMi;BS=$HN`t!R5Er%ff6n1$g3nctD-Nt za{(tXm(Es@AANdD7x?tnu6W`3?%#ixZm^hR^AF|H%9j@4I01(XD8@l~&$By3B>)s~ zzoBvH0UBj(0i6y5a}yJPYaFQ3L=+hQAcuj6RbW{l6C?u80xzLiVD)2g7HEA1HaA2C z+SYYZ@$j^CQGsui0xcf$>}~-khVIfSh9`YHKZ5R*0H3V|J_zf%N2luo$M6?jZ~y;~ zifsPzpTDIZycB_pzqJZ%ILJ&$IX4ZojsqSut)Tl?JYmi*tpROb^6d0c@!;Pk&;VN1 zZ4UBQa*GP6A?DfLqXO?@ZUGB*h%kbJ3DO6HsN(NA3~uj$@&ZUTIGH+jwy1y#d%+uv zwFncl#$JT&vjP`ku8<k``bmunY%BvzEiL6T*Vkzo12fpq`oy$WibtHU*q7dO=;y9&i>r z#=@kGk;i&LS08{%R1awLOSq>@K zK}WJdG7D%-9yAgUNu!D2p#cX5utuNm+6A7;kjxLu;l8lK$#;rR=dTwfum1h_>^%0; z7<_J6Oz9b955L}rN4H0J=zpbJHudhV3Z>3+L20;Pl)c(^A|1CK*dL?Bsh4$ zN8*C#240$i8k^T2z4;Fc1(5GwE(4v}2Om#{wLhWb^`Q1=g-3TBhflYg1V#fCyfn?D z+fM-25C!*RT^DrTaBP0Up$cl4bh>twB!gy%T0vb$NB(WoKyAzBM;zeljK8&qg@K{@ zF^glTTZZRxH*jso-%`%Rz_7y!G|oK%?Yzqh@WBLF>NS^6*9OqiB+$yG&by!mO8hMW zpebSSR3j6At21bH3cmQz6vP8BlP!ZTlZ9-b0J#*rX{9#+w9tmXtp;>Tzz>Cz@^8l- z_*?TqMIfjL;s-QgS!=Ndda!#O;=!#q4XFF1m35|Z#}eg&RV@U#pA zRb=2Jl1_7gTFPY+I~C+XWy1FtrzZdZ|8g7XBrVWj-ZeSt*7t=hdgM72`Ii=8$k_4XyW;Hn1#R93!JDNO2j~& zVbAWc0MOD{&ISuB{+7LL(4*d=!}lEgt)S6YQ2GPUAA%cGFWVqZKJdIKpcS-;^%5yepuUj@I0itC{Z>g(J!tJ009h3TDN-*bb>5|G#IWKL;pJLkFjz!&NSwFMYaG7l5`>`*yd18tb0P z;GuVDkJ+d5(TlXF|Dauy@1QLZ<{-nm_h~RPFhKh!bsR68j6roeWSs-08IR|MQEnFeBkJ035#Xbh?TJghdK3NGGV7#JM8 z%QANI%fl<#?=Pf+{{Md&36qDm&%S$f_JTUHK9D$jAvzJ1(!p(Lk8ZFGD9x8ahi_j_ zgwGd))=STZ1ZiQ&|Nk#nfHRH*12{>yYzA$T0!e}cR@<2&MuvL9L;s*TRM1!s z_zVeH!r^Zf22BgV%OFQ=p6iYY#%&r&{2Q18Sd!dAyW`XoB>|JbFzlXF|eLG5G&~SRL}x1U%*8 zzyR49wg5cda)=4sxB(SpptRlsI`H@9>|dZ2jF5Q$Cx;a8N&)}>zkC8}8FagWrUP9K z--1p(fJV5;Lr{u#odeE?ovsa@mY_0v9!eQK0o?w8%`rED%V;Oqyr7j!=WoaiNiS$N zq_=#3^FK-cc2Ire(H+|0(OWvhrSt!bIejdkzH!T0Mh1p%-#Oi}Ge9=Bo`fVn{tgdN ze(#)`0c!7c-hCk(_xV30{dshQ1uYM{^1D6<0un6!zDVwaq#qwpBzA{+yi5R< z%M%=X%jbg}()Ix~pY7Y>!uis%^DHRHkSnn^P^AYMUu-?V556tHv%Ac}vpWnlJp&oA zp9k7~;i35{jX&>E8h_sDH2%E99-1H1`15W;3y?Jaq$3`^rvLs6GNkb*orazC2P#P% zyTOxd9=)tDe1sT0dPNKTgcy9g+dzG(=ATR+{Js|q54`BV_V2%=HP|Blmh0fIB{&N@ z9(=;F>#H0CgHPvoSI#&4KurmkPK6iqPyL51kAkLQ4*piq%5G5M|FQ>k259sDe8|lh zjlLbADLIeMLobz}9XZ4-InqF-E@;dJFQAsPmt<19gq0#KFI0y<0_)bfJd%k~D8Ry*A?cEp2D$Di`;|9{Tdj+Z8&J15}L z4$Ab+pi?v;*$8x+k4G>3JPpu~z`Z|Nobh z{{8qYAGfB#?dfjgC; z*{=dnz?eGO#0?y={K}X!$gQhn?PWlaU63G9ca?t_gq@RdZ^Y<5i-JncS z>IsS^SX&h|8t@Xd9qGk_>u>&p+GqUDpo1A9Rr(recNRRRJs&(q-QmLd!m;z{%iEw% z8??duvISbs!`j!5p`M+89Ya9vYYXTuACK;G37_tIkIusfUb8koX7p(NR^s3Rn$2fq z@ae3ND3JyqB-wlna%CjsB*`-`LB*E?0~RU6FaQ5f=sXD0>eB6>;cED;`5~jL;gb&E z6P*W}AKYtx$k=>Bq0{$32e^&wYgrq>-vY|Cj^A2AjdUjdR#3Cl^Sdi_{1-IV?Acq+ z=-F8cs&4E%e}b3E9290?aA^2n$KSplT*Qg~$rWMnNM_juxgrg+Zy#o6sRzuwQag{{ zFhYz&+IAT}aIaoz$vTt{-hfBBb4y5x1 zVD92?k(Od$==|l;Yg#x1RG+*zJn%yQ(!c*8J+9rp8NQvh5if5*mWsGAFm(O{g}6`W zd&GK^mkldGz5A&dpiV+VFE|K2nt!o?E&*lwc0_@{C0vYw!QqW>tk@Bo|9c?;xAB=ezW zJAOad2wD`{q9n|~;Q0L@1L$swR#9Ql`C{MrTgp^GgY>l?phH1+fyO(#T}vGIM}x`a3Fs>$i&~8pbpw&2TQ3z>Y&!R z8zab<{M*F9M>8x{WMF9i<-p&%3B-8Fu?uuX8-Hu9G6RESXK04we$e@FFF~i1JA!Nk z9sI!G$}P&k0K3Vuw=n{r5T_rO+i;WmdLrbJSmavbp|bya^#}G9>*j6EqNjg z44oKPI3fbH2IR2DhoCzgL7pn*bZvRU-P{20- z0^h&|x(pIwl7a*zTtJzPzh#~jvWF)~A$zz<3faSuz+R>W3T#{cmV9*(!;Zh@nh>VX z&**{N1-gInB@4I&KVsnmYMCQvD(Q>=|AR7xPv?7=&T~k)jcM}#{~%vDHoN99LJ~-8 zz9`5*&=oC^TS$#M4}HJX_y|D51WL1Wo#bQ{g8`Yl{+spe*OQy17ttK zRoS3y*y)<#xL*eppJzY^RDjYe2MYs333o&735I=6pi`##48N@~aNwVM?BFxD=5tK0 zh6i>kf%a-arj8u2=J{0Saa)KQLMQYe5)oXw>p3t z%iw_d4oW=Gatm}-*>efxpt&gl3L04156L0^8qgdPq6*0kou4ogC+K=OC2>fyZ2k@I z1iM0a{e^mXT86@NQ~}70{c)i1Sp(|xbh|o$=OjV1cLuAozZdqKkiz8?JBB*2A$2p-C28;sME6us^B2@ScI^($aP7R{`27$#+Sx$SUc%=1 z?T`Uz%p(-ETr$AJ@(^f`o)v$Kx*n(+0M|>P`iQ@!NCLF}!|?x$bJ1`AL#|Md0L4%@ zSdC}5YlNq^tAj_U>yFODARQ$?t#b?*7#th_fZ~n6 zX-8fc%aqGA<}W zeC@a&bl%I$ncqQ$3aIrDY3Fh9x3UO=Zh->Vri_mJtwD0244n^Z);Axqz$kl}iwWTBfl;hyN9tdZw<%c)}5=>br!4!iMOnxZA#0Fkr za7_tx#*`j^%XtG(YW8&iwL(2CKk_$O@-i?qzc2t@F5G?-R272?Gtkx*%ZvO?nmh~) z`}Dvouin47KM%AT%ao%R+`xPB!Rh~hN6_h33V6Osuu|=(7H=AK+OaGmiYpp#@7@67A6tUR6Jy$`kOGwAO-%Gw_t`U+4weZV-M^Kr$AJiYi*BEI4MR8|n#!Ge3!INl}lmn=e;(=9C z9tWSXfvPBVP?;S8>eF_EsyGiu1_nq?E{#-^^Mg8et)TY0<9^U((VpF|72sBYN3RJ3 zY6J5GsHlb1+mLz`l&oib0kzYyG)J|-sv*r$&^ct#<|ybcYH)Kj9;6YR$!&y?Gr1n9 zZ3EBb3PPCiy;T7eJ6ilL$zmXeEq}`%dCX|m0JYxW(YzgWjB@J}{uXutL^S^f6%e2` zrJq2#2_=dQ4><1k0}X=oitcL{W_Yo2J|v>>L{SUqsMehy)gV=(fi3vHPfyTrI@p&r zpke`@s`CVqQ+0wMq_jqK;^bU9FF-CA2Q_)U6&OGRSFN8xwH~PH%dZ9MKO6!V6`?Mj z7oY`2i6^Mt3#z*KTO1`pSD8QIZ?TYMV1TrL`P*)TGX8G`{+3Hh3=I3UAz9g_)Az&+ zhO?lVR^Jn#E(V(<0|Q!l(+X<8b-HGNnhLt$77qA;0Mw>Jh#CV!^J@dJxy`>h`P)=K z{r~T{A2hi5vfvXaogmr{t#uj<44{kg7(9ASquoIZPTs%BJ_PP-wIqT2a;^cp_|+L0 z_JJ-h@c~^6XSg@R}WYGg07=)er@2m zKNGaL9TdT{K7b+^bRgr){tvM7dj_aE2T$o;C~dhKa9hre(XqQW0~Ck++aOI=ZaGj8 z*zmX5vNJGzKMrXh*l~l{pt}c4I2<8^0E}qq^1J|~9t3v?LD{JJw+(-*3p62sN^Aa> zcu?AfyC+ZvIf|S?d#Awz?VzC(j%Lun$sSb(hUTB3b|a`0(&_5qY3T}T4ue*Sw`>Q+ z45U+7$_Xwz?|@na`$27=m)-9{14s;zl;O&Q)~YoDm5A_?O$~fC2CQ2R35EM0mv)zC zG(Y0_eheH2EoCeW3_C!*YtW5Qr@@r~C>J`ESc1Kr4r-t62Mvxl|E}Y2;d=l7KPZdJ z;EKXEa-de0BB*A#_YQPRwrdHaW4CLLqor#Bf6HM|8P#2y@%otf9oXB zUW5I~zg}DFVv&;PUSk z7jj0q!-X6R=fE@3sA16zs?2}a@VB%Hf|71AH9s#pY5-fw>bj(9`V- z8h`|Q^X1e}$n(iI3j8fMUxU`ZLkC&pK<6EmN`U5(N`)Zj9EExy=ErumfriFVyWka@ z{-X~2J$wan4A@_ekfqF^l`fvm$C*GS@ynfHZ-c4~Pz`s{vGE~jz@aqR6||z%7kRh}7SD+HeH-NwS(MQm^yPz{2ZhQodcpPBb4LM%N)#K$c zkVvm-L<6|pYIxwqw7viSzdQ%>W;Zyi2k^Jd0%cuD3TNVP?Lo=6b>Mtk03Nt?;ooNA z()klI^^^-z(W~xUxJEV(7pDK&;;6iiqWwH z9EZ)1IQUz)fohZkjNq&Y>44;bGU&_Jcc35&1+9vx1Feb>lm(Yj;Kb+Ac@30IU%&kS z|7FNuXtxHG$|rzYN1(P|*Kg<=QFvx+;d}G{|IVoz3=EyeKsB+I3Aoks@Pg24wEcm*C5%An6s9JNR4og3iGPA7s55 zlqwals3H3O z7^tzw-&zf7{-e}CKczuMx)#VaabN%c|9+eg+;iXlbIcdBe5yK7Z@!7m%)~OSkWdm!R{xVdLe^4>+J5Q~Azc z@KHcvkoo*AZ}=f;wB<2BG~Krx;BQp}wb4LIFBUE&J z26?44W2XtoK2Qe)Wb7=%|NmbWfi$mxXy$`zo@fNJuN7<`xZ{InAvZ|RN{F7RU){iGoV&XnNX z3?2>>7elTrIYAR2y|BuX58Px~Aqr};#PYXp1`XPR2L78LaqI*&8~9s!K;wsj#Ep0(D2MylXVk_F(gMAWSH9aP2b2i-3MZW670268g?k;22^hR{S%LTq{l4gFRm zKfjPM`2YXqLr@U}=`nZu?f`e1J8QQgO%4<-&qS=@mbZ`Kutk>iQ4Q99+I5w{Zb+$nh78ah}uHe3c zXQyifEHQ(NW>8HGneYLPgf0R%BSDE3R8PD-{Ph3-otBW;KJ@?++xZ3{pM#SHwiIdp z>i_?pRuC=Ap;~MVkW-}SD`=QlgTe%~BMg)xIrRVkfBFCA|NouGcE+ef`i@`pKvtE4 zCd`jL2bJ`o!2wtSaQ*%N|BfgHKolsa?Nyw(0szu-y!7S&e{jnYktskzo&R<^ zsxvTvXKcV@QNAZ$H0%BU56<%&L3fvQmuBo#L3U$`9%y6R!IuW_{{J^TxeHWUdGwm@ zzXu5zv#pR$+huAJlz$Y4HRp3|q@ULqo{==Y0eP6>56qZ~6+#1^YqW+m}Bc z|Np;h9;jUc+JpuQ@nfjzeEL@d7{Quwi30Ai8w+MmGu%Gnn|Nos08jxs- z)dg2>r(S>>7ocf}tzSVb(46^d(82xSIdfN!m-D{DkK2P3v@SW2=GGkWfEqZzpLofG zu1YQk5(%Ky4T8#`q+IIpQu;N*tQUW>A?Aoc&4E?^FSo$1!+=HTrEG**9iVYdP>Ztg zBf>0jpMMRKs%{0Sjd7rQ3N(8H3ac)tjfiKqq{kG#} z50b0FHaQ{L45SU( zbWFMrEfrcW@wYgDYPD*l(%?m<*8l%6H9^A1p@mVp7C6;M0E zIzh_3#kV1)frmCIrQj?klOF#6ztb6_r2(o%R2wOaw>Uh67LzW>MbJad|NmcVJp?rn zLj#IM!RM*)d-S?7f%jT_bYAo5JOmoVhRy|pyXtpAr2tAvnJ$1a@WBac%Yml=tw06n z$@}1v_%O(BSRJ0K2`c_T6CJJ<7^9*sMvwph-+2V$qXV}ff#9qK3IyD(iRAnL|L;5s z(K8pShaVL3ULfoL?Q{c02{aFaQ}rVaNUDA*@E(zpU%W|&ln0=jVnH3V=8 zT7c?c=nPNGJ5B}$&_ob)UZ=(M+5i9DuHa7X0saK{{Mf;2d(@eEs0uCSq>@LnfP1tK`n21OCk|GYzu2ifNx}LQ3Dt1pzT4;|Lpi% z;_rbgb;tc(3=9k}CNBN=|E148Xw+W=2S22x^x~O1cwq&&In;R&G+5F6h@<%cqhqIU z255`{G-3^l7Eq#I2ufmiAc3oY6A~etH1J2rrMv(C@4O4q!vob*2lDdHyO1Qu-@<|7 z-CroV}UTk3z1I9;PlHl@B$_V$NiwaV=o_o>PBnV zfMNk~cH#2q4FlZ>=FxcpmQ(nf9qxguFi>S?24;aOGab;?sj$jS{vN0jhxBhCMHD2; zIrv*QfE?Bt3T;>}2Q{G}a!mZKGX;>FtlgkqFWM-Z6lmNC6h804;REh^!$;YUfWoKw zA*18|si4LDEk<|#|KA51vjJ5~sf+*pe`yJBMuvKL^m_gG?DX~UwDfi0Z-O@e59u~r3Ka%bNGrTx$V&+bx>7oMO0 z{eNkC`~QEB&JU195-&O5qqmTbEI_I-3_+(F?Du43U|3@3(7h4f{$}7F?%m0@Xo`Uv=@B9w(1gI?tiq?P1|Np;~ zdkv}!Tr(OxyF)$rTjW5~C*8gQ9+szyW%xnYpf*3>@6hnyj=u%8-_)VupDlljxHzck z0-nzY?Q+@=nooA@>;;X;9%Es$h1Q-(74QH1|Np;i0&mv>B^ARDpgaIdD(axCk6H~BP1m1pby~zm~?`!`3pTFe}XkZ(y=?c5CYa?hN6;k!^w-$Z<{~xq;s3r63|NpR= znAoqN;ROZ$mJm>f9xZ!&^okzH6J~f}-3rRs$l+)RI-d3oNKU@>%m0_+U;qE#wH3K_ z+c6gu+pZplmq4X-F^A!$1`9p@DTf@J|Euv&IcRZ_zx4)aSOUxRO}PLA!>%15!=OWW zFLuxS|Nmv%Td;}XZq&;ipz+-9P!5mdOrT4dc7cXULB0J8+@O#Fb)Z1PFPm;)gk3pk z><%)+z~2%N$|E?!?hq*B!NTqv=)S#{C;TmMKO@5K;b&;r-2l~hm|^!PSD4|&|7NUV zw*e&gxcSTfm$M;V4-Svx44@$*w89`4>><#+sT*kcV&ipaZRHHw_3gY3w9^o>KCm2= zY$sj+|KFqW_exM<)z*6b|Nn1?`S@FFu7kR2ki`xyQ$eLAIBmX6xsE6TUZ^KPD)CLA zVz3*$7!%8i&lHUgyxUhF=O1Ic}C`ttv!>&^fFcisfott{X! z4P?OnMT-KK8usN((CQ3OdGZUXHS!`t;s5`am!AIr558Oqo;6y&zWD!tX9-9pY^+5O zr1IVi&=?bJxzs)(1_lQ3K-Y@{cA)01tHjGWpnB)0I)7`!J&01!v^DfbRfy85Fr|gC z_Q7qCJ+Q*>nEe0$FB2Yv6DcS%LHQmvG9gE$fxH4*%LuN;Km|@ONTURJRb*+#&J<9% zfX077QbiysQIK`}yFtyuO;T@4V46Dfr_1o*GM&#H%PbwB;0ljBn&!E$<^a!HaOsZS;n8})r8{&B|F+Q0o}CBzTiQWm$B#H1za47eZ~YJQ761N1Hqbz@3b=v< zubf~+%*eU&Z;xb3b8P%A$;jU#2ukIRj~KZa7$7C2EC2rAFN?4I|NkOy_TT?6gTPf! z=!q8zvmr~HUMhf3XmI7&^$1k*KqJ-TI0I-v^F^23|Nk#5!D|FV1NfT_L1_gvaNVj7 zYNPbJF+p1X;H@Yxh3`SyYQY{b~I(YOJ{Rg#rz>8c$KobSst{l5G zK}!ZfMHpzw;C|4`7LVf$AnJu6$l^VhK?b^l&Ru!>|3BE!*6OFANI3?ZP$>0ynTgsZ zKJg+n22xdnD)fV(W-%z1ofdHZ5Iyy)^nf&6*_40vLDoL0`*y; zfuza@(X#G7sNw~$!sXy^{e`S$4pa+&^M>m%r!NB)c+JScFy%Vb;mt``VX7jof;P?;dWf#-2B?+)5>yU=+7B+B*Ff2Jw=|@u z1|C{UdHDbT%LS0ii(}UjP>&dqxn8B z<|aTbJ^0wr#h0M6z?Eay98d_r6FcbC29M(mAnJt*$S3D7Kns{KP(cU{sTY}2p!vfO z|NrkihZffUQb=Jfe((SPmnERvF2Nx=7hG~dLvq3`So13R5-5P71zOl8sJrq&nGkB9 z$8iSGl*o%oAZr`JEi_O`=mm~`s770)#9gWZo8o%87Br#9)WxbatxBHRG2D8P_YV5zpWQxDYF{1q`Ef@QXY789`oqD z@G|}4|Np(vZd@;DMjq6SYXKG1m^C*;nlQtQ;A*UG6&;YAdG(k7FWo_!_ai5>;@kiK zcYc7b`{8d%x&8nD%T~}fSx~vw4~lA#FMK-RdmLu~^*dhJOaA}=QV$eJpo(x4C^SGh z2b67EB>w;JJP1mIFE4|}o4coi#?M{4T~BnnZt1+~*m=;S*YtcEY{GP^A)>k9(jB`6 zyyWy{-_`&BcUFRe4>W85GFDgO|NobFA3%~7xSrhE106sTk^n`1sK-mtZL^*KcKSfO zEWgCTmD&+daSN^kwLrlOYmuWQ`1fIu1mE=>WR$DNOQ+|cbOvhBGrj_`KndqNXf_X~ z{S|0{8szyc5LbYcK!-Ra33MI;`(FnNd;uKh}G~=bnP4JXe05o2b#K7?)^#zvflR-x$HbV-pmyH+x|KGJ9RDHub4o#EL zX8m8ELMp3FLLpK23N+=_9qRFN1FY+s3`#%Hg!|&H=>PvOD?nC)lfoj<@qe(moO%<< zyeA=%P*%uDG8K*?7#&xv>-LS1@d=)U-GAe%u+AKb73oy7iP zy2$_kFP%<7o%RW&0Gc2?jx&I!gkF?_RHVRX*(G0r@&vT9;Q=-6z|AaYaJ2)P7qkR< z8h+U}c)<9jD!4iAnz2g_QWikgTK-^^{MP*JWAibA7Xl(k39LB;G%DQu!)06>nt#~wxAd|>`%<9O!Csu0@bCZ2=98c%45+b}4{GdzcWbAD8+#s1;N9A% zUWS3%TcEGQXa?+soACetFHJ!!V!(B?JvbXdgUblS0q@Uv5x)a8jaRA-?zskoiowR; z{(KA!{B3R^PUj7egD+TgpMsC@;NWjJ{P-U++uqs>TBQaW5dtsm6$M!a&a)=S11g}= zm4*t?rLJ0cK~V-e*4owMrR-f;>a2ec7H0D7boF>y1iIk7^TNx*^Pr@F+Lzhn(iys@ z!xyDX^L`3im&SDq|2AJxm&T<#bPfNu&`l*gX^j<3oQ(V}jG(1DuyOLIFaH03`50cr zy1qklgvC2(M;FxnISg752Fk6;pFO){Ieb9NW`AmPG5B=*p77{ocIDq+$@H@0IB3df zCx;pX1EdMz)9HJ_r8D%z3pqj1u?D`N&en;}V=qCALmKKpp)u<`$i{cz6-6(5LEZ%? z;QL@FffDdlaH)TQ33^AEtH;a3U^!5Z-iBPmt%SApE`SPSM79C7Jzv-f{{R0{7gWN5 zn=qL#K^;+$@$n!d;5(5a`NJDz64)7h4?xiaQpfTD2RQ{EjxT?J0~q8+BTxXt)&Z%4LKf6W z+m4!7K?B_{X7T_3|FRR*X90&jC}~2rM&AY{0eBhq@(gG-4Yb$aeER>(k4V+4FEnkj62d_YLi!aoA{{4UX@CYmb=Ym#Z!K&2>pJBqrpbj=nSPjfU?(LoY z`2YV-K{ZgNB>HZ@AZX1FIFWnu|Nrm!&9#D&zcm?j6azF>cy@#1)ulW11Y}Tmrw~N% zUWncog8ZOd4p;Q@*I%%cUsQJg`|sHNAH1)y`T0M`#^a!)A6_aQ0d>0?K`|kI1e7X| zF@eVbKz*r~9I)1e3Ah-A7L@aO|Nnm(`x|WRP8N_1sNMnRQQs3U8hJq-fVrTtBWUdj z%GED0|6i)Tfw%y=#<0}mWyJ?Xvyln36cf~J z{0S;C(VC5p;BKKuujs=tVTKnz`B>{s-f&@t7Y1Ot(u|i?=l}oTiQe%&!~^M!z1#q5 zo9=f9<&l4fKuwS$Mi0w#{LNRNfpfbZf9vUIpjOa}|NmP~^0z()rD#||c<1r||1X)| zVd?87!;GJJ50SxM`!1>#|CsRFF5NMfj38iZbuCDc&Q5Rq||1B6ZXab{~eFJf{usz@3>zE60|1NG&CzS;{Bl(5<|9|iq zG8k)lxuU>x9L_mk{=Ym4I`aPH|Cb_9K|NlX2-dlJs zf)2|A?e5@*>>Gdi{UB&HIp`7!4^ZQKKd2}0viiXP|2w5Xc?~+34z4prxxf|SiI>-Y zVupy?Sx^B2ww|NZ1s)=LcR<3f8GQUL*(X5m2M@6Dx9UBBx=8iG|Nk%Ne1I4TAN=?Z zT9t)9axs+?8g@5t|3|)H1#-Vim}BQR(18+H9YZ`j|Lg~yq89uj$>jV0eW3DUKZx+? zJnYfU+IC);!K2fe&TdAQHP z@o|2aAj1n!CD2qHLM77e;n4eD!W=_EM_Y9M1}%UF-4Er_ydSibiNTS7>d_ZJSMV|H zw*aNfZi5$ljKBXkytFUf7q3CpH&?F1Tw6{r?{n7zGf|z5rc~@)C5)8NWQk&Qg$Iuc*>a&_Rs%UrgZu zt@(8ZFYfT@EUtigr3G}kvPb9ron;X94|fPMyh!H&RUxQegT`-zg>ETZLj_}MiKwgL zThH&uU>t>UJeQ^kIvto-6AS4 z3jhB9zb_mtdmnW9i%&P$M$pNz94|ntv%!&tBr4$1dZ|QmUnE4!3q#OQP^XKE09*-+ zO0;84>|vw?21)PW`|f-@kAjnXum|`;A^08Xx*pBH8OtI(l8ZS!x~;8?c}j|V-55Ka zIea>GzQb>7cZ_q42gR>X=W)l*@1C94UNot2F?e>~@ag>M()r61Jbv_byC8$%0nkaC zq4J>m@;77o3XlmNptCrh8y<-E=r#QuBFx|z;}{Dz@a0_|(9#3YJ%Zmry-7qKqKL z-5wk-;y|b2Kr*mLw}*g7>&cQ9pX6rH(40rF=*w+_4Eu~Ax;*)Jy|90w_wWDzm+_#3 zr(oxOfzHSAXnrH$(fAKEGg&6z`Jwp%U-J*1a#4?7(RrHSlVzG9C(D5R;n8av86wQ^ zLWLbvWt=?h(OLTA1t__Cbi4jId3b_Huj$HQVTKnhVENbgJbFz}g7{z9KctuS0Ma#Aon0*r|}=Cds)T?x=gVo1}QA=f^u6YC@j8i6=d)Lg+&nP zL<`igP=bX;=ly;6jTsoCJ$gm2Y!zg1jEQ}z48BVTbhj#~>}Bxi{N!=)6-#fEH27*~ zj`B&3ubx151WpVFSJ;!f|NVbi2?{$z>_E%kaK|vu&U2s|0eZv`2k5MF@G)H;y=@P` z1<@DJ&g&k{KZL;HTBU&=uAYs5K;h5d2D+HtrSkzK68PKKKsK08MbiK}qDwJY7_>2x z;~}_dZFu0thc3`Du;77N(81uGj@DxQEufx>XZK$4*?*v^)fZlm|A6)t7@jn|1fFa4 z=sXTOjr{YYKmR{F^5>iJ3l=MQCX0D=Gb3M+2&%ZcTS13iflvLL3SxCS8-Nlzq80;X zacDm9=oRhVBFOL(biFmqdO1*^r&@kNh0Fr3* z_yw~SULFJGz+O?Om4cuR{-7OL9Q>_Opjrl+{$xRhoqB+57)S_eSRvFfKG0$KFDt>l zyJsM`y#Sqa0yRPkWJEiP5g;L`5qeM~)c6IH6<(VC1y%1*Uk5{j0(6fDRA>U|^he?U z|Nr++kO4=(={tXLlo=j)v84Uq|CdKV%XksF9TYB~`Q?6r%P4T22x@gTzmf3mHuUYT zefNI3!p3Q%`>(xDzzks9<2vT#K8w*e}8dj2`HXQW+Kwtf1mDbi5FX> zxEP>^Ztk-Im0O^5K;rNJ0iO*5zj^>95~Ukh@U3y(N4)|AF$oE9me()&KRN zeI8_S|vHISh z|Av>~E(VE%TpV%_lG6A+yIE8m`2~GIE))m57oRJ^ZhTpdR{w|lcAf`a`2jx?PNTaW zRA+XEo&Y!A4KI0gmL4$t=F#c90dx(m>ke1L1D&pCUg*hu|Gy8^+y|e-0V+1{Xnp?= z%PXniaCa8)>^%13$z6~)d^B*zJbc0XlPf)q={)PO{|Nmd_MrsbC*LTN{g6sj+ z*WjB|Bs@AxPq=jN2Zg0a<1a-%28I$2&(5nJt(QvcK!<9BYoRny7Cv$Zlr()$_;$Vk zh4%4%AW=|&X5WDX5F7Yb3};YPgdEG@dZ-0_69%{GvppJ=vI>wg)Tr(7c+F*$E3h@u|?yH*P`#BbEW&#P|p~ln}Ds*(13fw6op=>J3l< z>(g7p!1&_vO{iadIzK^6WNk7JN#imxCG?pz#gRWtuRXU;K^w_WxxMxG4{b4^aJcLm1rt zn&|ce#m#GJUlkQ6gaA<@3-QX@f*omilK~5}jMp#;a+fqZ2r8BOf z1~N$SCFmp_&+aLZ!0C2^1`Oy%3TVK9E(nGO0e{;w2GA)k-#rh$XL0Op2e*@daPYUE z2L)cY6les4zwHo+(_AgU$ltadv?0E`MFrH<2H$K0nt5?-d=KgoI$9pDvjSB$Aj#JT z(0t+2+W?yP^ys{~uUQo|+56n_-~$$qUQzB9f((w$Cm4N`54>3a?*IR8XAVcpfTRgsAK~h4&Zac125j!fYuyC(U;qEVP-uAbA68#EhWd7%g;(?*=vPyKGA8IWILCu8SU>aUyD9i|`*C=5 zes<|R=Gl48v-5oOGiH8G*A0%HpZLLdM}xbUFF2YX)HnZ-E#YZ?5emAyt^F?O=;g+L zpx}nwEbZC&541Fizx4qq27BEVd_b3Z-SX*t4!Xwrh3&_G|9!fBS9o?F2Q^}SK?RIY zXSIM2=z_lIpy~otaiJ75y`dXCI+4U^QKSdFR-Xb z=W$TUcJ(r(AP8k}|oK$G$=ouN~FI(=unn0XoOC|C~y)S3jzdvv<4cwu|_&wrop z*cBe#r89gwpM%06Ucs}Q*{3shfg`B4@=Oj_fH?8sBYtpOo*9cXJ$geoICeT4yod$Q z(?DIJ0?H5|Tf{Ge8f&2|e7ap1_;h{*xd0>w3b8$xAOVxg;MvXY(j7X*kzX(!96qSF zvSYE;vD4ka6?C_2IU@rD$mzMT==1En2dW)0;tt~?YVcKD%||?ZIzOPa_!tbo`C=p% zf%pHwLmagX9^IuYK)1bhItzg7%W4c4gF*z9OngA=`C!Qebf725)9jZ(_1rIT6$ftJ zLnMy9Sa%T;8nq0b-E5$A>Buiwhhes7C$6O8+4vLGE9Y+$1>Z@2VwZ~m14HuzKJZ1w z%?$rRT`fO}m*2q!E~H$AHatN6q!;-Y!6^mYm;(tw6R!l+Ri&WBTc!ZM1pt;F5upU0 z=6wF*^;^(II>%pv?hkz-SA%lBJik0-{1n`N{Rf?N_-y#iqxp>mqzC2E8F~Oz()jLx zbfixDbh@r^1$Caby!goX{r|oQ(CU8B5Gm+hiutmj&J&~q=mN_5ovs3&okx5+GXh>L zz5wY!JpeT!j_-p=AAjL<;m?0)Uo?$BpY?2vD1&FCI;h(U%60sL?h1~b;43LWi3@xo z1wXV~47!WrT+p}wjt%>4Kn~#VmS z&A%ASn7gYuVD)bqGjj!pNAmv{_xZROTn$fpG}rE6@a#P53DM-!&A{J!2V{10?Eyx| z=9~W=zk#oj0bL>on(*!p;Bd6O$lss9#K7R9dCIXffWxz!!6W&SN3X~QkIow&ofi@J zQFIpwcr@1u{4ZhgXnqB9f`mu&OAe3L1Eo(qx}60;mEC{PCF&(A(0+)KM|ZS@NAn>L zkJj5I@+fLbA9{2eLZlCZq)Q)yM;^Yv_y*eU(_DLifxi`W!Wq~@{H>t#>!E?S4^$<+ z;6D#82M!pX1SkFDU{O$~ZQD7JgzpNEZsyPY`JCXa4=Q{;k_GuSeGh=jNe|8o;JzE$ zFar4IkQfyU(BxRR>lVk(HfRsd!Uyecc}V-hqp|h?s9(w7!UYXshLYnbj?4nPCG-He zLIo97Ag6;IDF~JTU3U#~q&(D-(Fz{P;{2Mi#5nS06r}3_Ixy-whAAboy@Cm2U`IKwbh}4@Liro$A}F8a<=~jpJmH~v zD$S8U?+l1IVt6u*Kkrf+f8GtlOP&Xx@Tc)7ol4_RIt;yh;=zm6;Hz5lT_1RK3-Aj% zC^S9-Wo94FM;@I5SnLh;=wjsGV}g zqnqb~M=$Gzd4deV9=)RH<_R)%{stBL{C=RjEIzY<79IJrICh6J7#?u#_T_N}okQDe zx_KTb_@BSH!~&YJ@aQ%DwGJY1kmdh>(73uq^J|mF-;In64CT5Wy`t*`!5#8hkU0|1 zZo3x|?BG__gI2IUNdKdS<^TU^knO#uo56z!h6g}%Sg|j&SwMXXHc*56zDKu($HDg; z&Cly!T)FY{zelgB_DLi&99TeeL!fp?>w%I@NQ#$36#qMcq*xfFxEHFp6-jXwMDayr z#m|^Q3tzx35RgmwTLMAjp$ONwLG;W;*0TwuM-xepEUF$Mh@MPjJ#`>GU%_2Wh&?a= zfu>dAzP@)I>}ykGJzgL^2a)t_Mb)zkqK6S#j~GZ#FOnY6l~qV#PzKR+_Bc|2Jz@fF zkVVqti)xP(M9)lQJ?lVvRFU*ZqUzy;=t)J^Qw7rV5j-jm34^Dgo-HD*Z(Re2fg!RU zH;|saNP0jSAIU$1!r(4w)fgfSE?ohKfhMvZJCL5ONP1SH>X`@8^YsW)7;u5~fG%r? zlm+}PrKozcAbJiW>$&#--~X4sNcK3Q>M?`p=|$GF2&6|6Ne?fo9wvyMNMt>EAU#jP z2fahW;3lX`iwJ{rm%(A6imb;9q-P_No~5XIW_ygd z>EFNqFFld;*rMt&g6Qc))-w;JM-)j9C#s%*m%#oBMb?uA((~{qtQO#JxeD4hfe3?B z5Iu^>ddxt2)*|Uyh^l8AM90~Cl^&u5=75VWIgBp{`>#Z6-kdJsvbRv zo>pW%vp{+Tk@T>l>iKmM90q~NdeT68Kv&Ac(&$CdHK>R%I0n%pi>${8q-Q0#7Y|80 zb5Zq7g6Mg95Gf4){rUI*Whs)LOjJE_5ItLw^_&9faYWK%imFEoqNfpA&oq!8UL-w? zsCvF#0EdAuvYsT6o}1wQH^e_@K?@!cVQ>hdM-o|&9!SqpBt4+B=8?*`K8T*D2av+x z*YAJ-UltzM@7!-=Hl?>CgX{?mDI76wbErwgLzA$S!rbTs(euYdnv<|64yMAZ`p z(X$p=&moW=OC&wIsCtwjdMc6i^nvuSBI)@FIs^<6r|-^z!@w0;PZUVc#jl9+;3%q| zT@XEj$a>U3dgdbOnTV>V4Wj4nKBRQ;>F2-yFG0sm!15gExCx}R69mz-5?RkakRDSc zdo)q)k%QifU{FB6gUgre&4g6LU@tY;fYk1moPMN~av5IwobdYV9beuB>ifrP zMbZ<9s>cnYXD+gyO&~p*NP1*Z^$0=qWFqUS1L^tt5s|lFg7!@z!r+u5V zIf$fZE2^GV5Iu~@dc;6_dXe-rqUtGw=sCL!DGVNc{rCT6B$6IqR6R}*Ju{K@tOMy$ zMbaaQs)rAvCly&w6-duV@U~7!I(Q1&0EP&ITPML`V2G^84Wwr;lAevIdX_=-{N0J< zA0d#QP9#0GsCtSZdQKwix%UOM3=2t*C#oJhh@Pp)dRBq-C?e?*Mb*Ov(UXX*rwpX$ zEoh$=w0wIA+SY~$gKHR7RuDZCk@YMC>5)a!BZ#Vp4WcI&Sx*s2&r8s`5zsKW`wpdjaOpTW z3^bAT*n#wHMbfhpRnI(#9?&{s&{zw2ET7y!vxV2iL56Nq~|GUFBdcnZi4m%BhtaSW8g4QMb={l(z6js z&r(!9vmkmtZbR}98%R$rlAc0TJ!udCw0QG;6^jM;4tt-){_L%a}%^T8=4o+g7!)x!r%}@k0i1l zJ&>NINP0lKJCWK*eGolQHzS3?uXmvS50ai#RC}TzdNv~KIR?^Wi=@X8RgW4(Pc5>Z zNgzF(NP7N)ws<1^^XU*c3_Owb#DVl&1@HcZ)Qu-m_3VS_5k=Oc1=6z+NzYVNJzWqz z4>uu&!MC@d{tuF#L{vRt5It*=^&A4}u|(3Ni>gNnqNfsBPajARE0Ug{FHp+(cL%{? z;EJp#3Z&=a3q)QximGQ9M2{e{9yO4jxk!2@qUvdb=()QQDGWZn0rh{7^u(g-34-WZ ziL7TINRKI!9!*p|au7YG$a=a!dKi)Pe0`1*2Coi)!@v<)PZ&tgS@5YPkaTbmRnInv z9$sWUN+3Nmk@WPU>S==Lxw!!;4Bov4^?#7`M55~PgXmd`tY;TUk0FvCRa8Av5Iu#+ zdfGsG{(_H&h4|;=Gn6oRwjUe@w#a&dKzdFh>Dh~_XA?vZC$b(nke;bXdOA_{)Is!I zU5^w7uU>)rKS+8)QT2F1^ejZyvkjz27fFvIsva?jo?K)-O&~o#!G~l+!r<*wlrVU- z4;%)T$a?%hdX6IL*@>!W9YhZ+vK}dr9?$_Cu=2VURZkT}&qc_r7G!qn*-KFW2g#m5 zR6TAGJ#&%uYy#=gMA9RRsz(T-Clgsu9Z1ht(B@uf8UOMLN*LVR3l0NQWIbLWJqMBW zY(>?x3ZjP*S&tYUdYmA7W+LlZ2hyX8q(>4} z4Dh>?XBkA#-!(}75d!Jy zMAB1>s;3B|=OnV8d(T1rA0$1VsCw)mdZr@lSq0Lgh@?jpRSy?LPa?9OGLW9PphMiC zVek-i052j8uI&bgfiAKhCy<_RANQ^K&&)81RAgv?A%LMAefA(Q_18&#h3In{t{fT$cR?qZA;RF&E^ruV zBI~gO>Dh{;XCL)nf+H(~GQU z5lD|Dk{(`EJxmZik;r=TKzg1&K-Bd&LFb1c!r#+jq*$CCsYwCSXfC1Fk z>ki;BJn%vmBsm2xDO3Uui0%LZ!vilEL2?yvxqHQ6IS+{BlPCZFzl?@Ue!Yrp>T!^y z9bEDTisUMgq#|5$H;QC0ND_1?3aBvdHJyhdSpbrJ4m!-So6V!wv=K!z7$kWLbb<Y6Te}>xH^Q4|sHYN%(YE33zmdp77}OJ>c2=pRru=CFtmk37*|{9$+(#r+@no zTCk!${o8+#g0fWK&VRn$^#ahH&?Q%WJ3shzzTDMd3|jvB%%k(Z;ei*ukN^FDy&Jq< z#9hLpvl+CC^Tms4Am{A{u{~P^4PR*{~`M`Ji1*^_;g!RQ3^m`HB=hGY%&$H1;{Vid z|2-hfs-}Q;-m-(14=5L5A0|6Fj?X86XkXG!+y;?_X3+g$9s`Z|7g+2)p9j z`NF63BRIl5KznIT&sBr=U%$BV@ZbN}+aTfZ+ij!b(`&k_T95%`Rk`x(P;k0I*dqnC zM~HZP(jfK}px9HR!r{|v>Ikz)>2(OdyaNNmo=sCA{#iAJX#f1H0{e#p$sW+M>WnF% z^annX0F=BuF23{Vgk~17AT&jn3VU44t^g%YM9Mt8a~^2taj)p}3dnx#niHTSrHU)S zhQN;nC^-qz209jCK6Kmh@(R$-A<&W^$N1QnZYTah(>Hj1b%J+X;e<3?7}$p#49ft!NJ=1sFVfU2k|C2Md7|dvv-!@Mzu*TKdS~ z(d~MpM98D_{)-6Ef)1!?={t{Z*B2=s+K}Bnr8*wXM-(8N$zl(K@_Fa=7Ztxb7(9Aw zFL-n|gIxL|VjTy=%kcmI|GzjFh`yc_QJ#5re)s4#<%v>e04?b{=NRe=IdI?#Y@hxM z0lzQ*L8nZ(fL6&r0v)8;%NpYhS|Wenqti{nr?W1>r?X7MFM&v9P*wIq!}rU7(5alAhdp{(Psf66a#rv- z?hLw@j^Ra@JO=|L6n^@2e)8ya*6;wGKJ?t4 z|NpTRqnycY|SHrh9Iwjlr`$4y|*(mY1fa1wUy)?v; zf14YVZ|i^l*8dC)3@ryrCflf&^gA}xF{_t$fEE`E@^2UO>SfVR>lEPM7RJ;Oz~tF{ zl-aZS81ri_nEM?Y>X>3Yd&`*kTLVGs16yyGu=8(YbLwEx_G~`N2+9xq+uRsEd&?L> zcLWrH0zd;CWRUf~HZdi8Y!XV3`?mfsJp?i=fxmSVXgB)-NccA&VDw17;Mhj z!UMC<1!A8s<3Cr!|1Tw=URMN3gZvEMKm0Now0g4nKO=wZJkWtJ`#|Xv8YmD2pra#@ zw%;PHzlXFJn%{VMbk?r$=q#P#(HS}cxz0Gz?a0ym;~#%Z6(a*fr|SlfZblFO{Q@4n ztS6;K8Tj{$1T_A-{`>!b{+5Fb3=EwY3{UQlwq{`Xexvmgzvn^C>pK@SFfdr2=lB0< zd7Qs*E&~Gt;~`hWlRmwyp7J6LKE0w$(?l3vb2T4eY(B(jdA!8VBl(mg|9%q>%VVXl zntw2sJWX?KwDJ1*r{s=f^G_E37I7v92G8V^&4(Brn-4N}y7X>oKEP;sy!1G@J>lAV zvc%f4`R70Wme~vp46ePIjE>De|3Y@MIX3@gh?yM!KL$sM=}fiSP~Zo zhU2bV{(+7P0w2HPxCeYDK(DN3u^j1%piQc3t4nUAw~Yn^!W+2G4Gh<1cDJ3;8+^`E)+;WW3^I`JnFH4v;+_-Jzf@ zt|HJauAoCZJerSqAd(aOJg08g86M3RJp6s2D=s~{T_?C2zV+ypZ7LFE@aeYLQ4HE? zc8tB)@Z@Vzh2pWRvvrReeifJA^+*os-2if? zPv<|E-a8D1_!5(k}$@6ju} z86*y_XTkC6(d|0J$5Npt0pxX`ZVQ-`_*+3IZWtbTxe0W+0yx%Q%K!WS-?`UCmtiL_ zsBtsHL-U|#=NZ@5w{?~ty|Mv?f($QB|NZ~J101>Cu`@h6nRkHppTEol<-T1Y=Kufy z>%DtfRD3KSc<}oidVK?AzlSwP{R5Ew9=)<$g{a~F5_FKq3p39*(DoR5c^mA}_=W*= zHBmE<3WG=E8w)lDhBW?sSrc{<29)duI) zw@&9{VDRYP3R39P`QM{=?t@qV|NHc=Edb3nb>4d+zyIHVpWdk(KsPk==Pw1j=6I{X ztN;H`fR6v_oC-Q`(vg1~*u3Md8n6C?N_K|htqE`z=-vZx0zcj=@#_Eo3E+c7rWSxa z)H(M9XvDvBZUo5I&fmVB?|nMgGJs|{I`8spE(KW&y5&NXje&uGJJ`%L$4)knZm^@i$e1jsD=FdBdZ#)d6I|#UCDxdqJ+{2OYTEo50B5KV1lPwYfS2 zgNNlo4}QOcki*1|d-Srfd30`t7|7D@(FxWDYBTkgFvz`Vzx?mNN9RG0)&u-4p`dHV zx*-;Hp7-dy=h=DBuh#~&S(Cw|H-PEIEblk}J-WeW`E>sB=xhaf&!aa^&ZGGlzX!kP zJ&*3KAWwQUKmOpsco@_mP6um&+WE+%dn+hhJq|u%@#tmw3u=0Lbb^D-r#C^)qxk^8 z55MOF&*mo|JQ?qR`X3r#?XBR@?Cu3w=V^JYM98P}8|btXsVksn6j<1!yA>4jKHXbE z;p5j^WBtRk*M;SSC*wJfPOy|C^k6{#)&S6*)7{`m^XPS91cz~Rogk<$z7*`d&beS; zbb?K8-V2IyX8x9+{0s~}$>7NH=w)3eD$3x*zhB0o^Je33NbRtgn}MNuFF0Aij?Ck4 zxyHi4;L^PmB-(iablP8^Au9tzBUl*&cq8#@UIqq_!&+d85o>;d6XM}Mp-j3@VEa4mA}asJ$hMRN{BG zKTm*b>q-88cF^&$jXyvB0aahuLFZF`zvSa}66=Cq<-^U{X zDxMi!G*A0<_C5e5;pE%Cy(;%Xhp2gUPVIOFIv(&Of6GMB0mY!5VIJLkLBS65u8-yk z571uTZWeZr&ejbev%B3nJUUxdrbv}{)>W3|NgslgXLYi!9pP4^_^k>9gI2k2x!`@mn9Cg)vDKY z(qTc+nNPjEA`Bkgy&&g#9DK~;(%B0#$)j^B$P$mvtp*_1F`oA6+`0jz9dt3@-UToJ z|99;?4lUQ4k28Aonr_Jf4Su}`?J@f0*?f%Y#gmKw{(JK8cl!t4sQt{NdoRdDpU#(_ z%||#qnhy)`@3(P(QFjJ3To1Ozr}Mqxffs8p{`>D@2~JF~s z7a!=d>2_C80__!@{{$2O7ZBAq#9bb}tRFc<8Ql2yi#UMygzAIJbc_U4&g0Q5nxQPp z;KIL6g{gZhs0ah?Jx*a^VCZfI6?n~iL1N61BBi@^2`G+QLBRsM542RIyBCx!K?%tX zd}Boc76B!L^V#6& z^XZ%mN^$(#Wgs3D~P1FZsJWf6D_Dzp$nE`VASxfmGWS0TrSh-;|98o0GBAJ&p!YAt^}z?m zg8d8$A|FWLyxb1j8_;X|BOPqF;Q?2}Cq9s@3kmHPK4<^^hiE~B5lr*Jpa1`NgIh7p zKNy=Y{O<&_VM!U(6yan870cjE?a@6I)GYICKF$FxHPiU>_kv0ch{2#nk7uVixTq7f z_UHs_N}B*m%P-YHrw#7`sqpA-1+~6hI+vaRH-g^#^ezQ8^E`Tc4}b-p!NRYz^#Z6Y z?gh8!JU~5&tsoU1kSq;t^1RUf1Ulyy9B8cv96Jy3w|oPgMcvDrlqSdkK6#=ObagNv4xTx{y6@A43s-9({Ji7OSDpQ}%pB~*?L6vCZ zYfzUljX!@axQ$%R4jGv&Ts|dJsH9a99!jNXo6UN{26;$o^ikkm} zIH?m{K)>_=ciN%(rF1wbjxogLi5f>ayFAr64F zteHV4kAwE?f%`$n!9^#ibpe{D=zQc^51{(iHo0nI^Xf{2Uk)rDnX~I_nI<*7aadLJn&)#NL4pj|Lb;WdhzW%=Ftsq z;)2??+~BtD{}*;ALAA(MP#4Fe8{F^lusl}6;nVs5g)&$Q<>08Od{9yaRhk~Xsj%~p zK}YHtf^N8codR~h4c7iiZ-AoWg(%oGaIpm~usZMibpCv?_b{ZiGj#$lFaH1H z%?WVj2ksI1KpJ5_kXARS(wX`Xs$4!9*)ktU0QvN){&*w6@M6UYaLEU<7-|G4dYU*` zK}iFgK|!(9xfZ0rxAQAFJvj334`l#n~QVbuDczs2x3 zsN4jV7I=z)*WlePQ$gJ^k6u&FB#{5#gU)mU_a9ztISz_RF#BaIXz_oq>5WA2Y|E_U z|Ng%W1FZw^HRXqCgB9xF4Emz{I5@ySElfz+{<06eKWZu{Vfgf_n)ZN90@u9HUPzh! z`wwZ_Ia-5{uk(QNEkY8-{0NVm;N4@0w4T(t6O^INSK&t?c zUen%-0t_#n9Rv9WoLo?Ax!!{ieWpU-WytSe>^TNbFW|$+U7(Ji_4EIKL?r@BH|xGa zw26v90svMi^qR_ntSiT5ogB=%#o!gc?_c;LSqJs^%Rtbcn_k|gCQz})69}m&Uj~CJ zLvUHLOF(Aq={q9NO-HRtr$)8-Id1pOKM)p?fPhVSsy_-CM!UXK;J} zn#5LG7+8kUo6`Xi7!*_ZQ$hb;_4AZ zG`|%32|CXEg>UCypI+6Ooq`M=h_M~d&f~C>tXFhx97y*w(AW%Q9LMm$i)dp+)jSmW*fw6yn)>_^VlX`LV(MW~*A^`C@)x8mxBy0LP@}()r^j=YsIB*pHJPVCNm?zy3Iy{mOgCkS4>7OtI|9%@MA5a_f5j2Or zxU&};lZjyK-oM}mYX$dEeL9zdieN}34QnPMRn`LFje78s1QscoE@0<^N-Joy>gC37 z&=dg)JaB~hz{Aj|SGBlZkm05CKO|M2o##9|k3$0$63U>~04#XFf;URS69hDpp-zAW z!+mFPssvY75F006JXGeHtlpafW-wkN59kr@1yts;n{4@;L+_U zQ6d3497EWnn*rH@9c&;6vcqla^pNoAYz0})FPNZ!Y9eSP%duf8=tSawp55g?JbJ;7 z1&y}d2?q@og7u;5Sq$F24o;*HEfE(ydObdPw0fnO6`P$HkRgBHq$mq5pR^)-Upa}Oa-?tBlLLT`Sl0CoHe z16kfB1H%e}L9|&|bYqug3#W?gI@~>;mOUP>Ot2 z4?2MB2rMYMKqnwhYXyZFIF5ZfA3=_6g=Rvqyct+t*drO53SpTL8m15UA*bqia2|4m z9O4c-fYYN>xEFL@P%r4rI?y>x-R>ViInCRnn*pl+;17O}86F28@Iy~;LaupVg6>{5 zyyV&4`vNp)f4mh$fmfwK62;3z^t$?`KX^y{UXVhM@5ezmU+}kn18MGd|KQmj{$L+S zJJjQz-SIy>JHdu}K$`e3CbWQ7vfOkvJOEbc0coy-?l9>*{=&EgbfmS23N#FSI+ub{ zW*UEfFC<-Ih5_^x=}r+9L@o4jM-d2~ZUZ%^okq zLE{G~I$Xbl&R10V{{JQDP&d!+@&}&X^*=y`i>zmN_y>>9pU_MRN)a0 z4lAQPI`@LS2QDx@Km(v(K+Sbf;~vs(=kw?`_c-{IzwsI9G$oJZlO6{j@_TT8^yuV& z3EETd*-dnMjH*RRkDQ?N$kvQAJ%Z(zHG$+Y(<3x%Va5gMv_Bl_k-r6W8YlLs02L1? z;rbT5&m3=PRy7k2&1Ik_HYhYfd+I&9@r7nJNNKNW&0|=e&(Z{$@Biav+)wbR7ox5D z(jV+P)by_kK5Y(^{^Nh_V+CghaM1-#`!8lULQ7GP&YO^=4p#NTxe=7!SyZ4EFCx9~ zg`{^x#p}o~SfiogLxz_;x;Z?W ze}WF@3*-RZ0Rmbk2j)6*FkbLT{_(S;hajW669z@7jdlnAPJK~kU< zaqsK@{D&5hY5e)B1w5h*;3Mul8&y=m`3N%e0t!EV!4wq*sL{~C^yrN|;0QVs-viRZ zeDR@CnfHMTf2e7n`SUXmfGc}&rbrGvz^}O$H2#FA zb_dn%lfYpg4k{%)I>9p@9*{v+k4|?Ek8UP-<4J{~n<8 z-8#XOKAy*2R0Kc{@_-D^dv=DXNPvRM5HvsO*?Hr|_qG53gH|Ac>h?>)9*`+4&(4F; zu3JVRBnLn}WcUr7Zo#$Ji!*g#e}g*Z9^F$x-U1!7e;Bkls`L1ZJg_XRF}aV20Xz;5 zF2Q|4wG%7>K}`m?D!q~FW@s+}6hV*#4hon^kfEJ74KIPsgZ84qPCEYLZ!IXnVyQKt zxd^kQg5@TxwMJwdsNRUeURZ&1AWCUv54!FTa^ECJsTs5ZBLEKO7s^x6OAkSiY83td z!8^^tZB&n5$nbKn=%n}HlISyke#C>%{P_tV()jZa^J{`fUign4dBU%`6x5aB*K7ri zN581H{rCTMi>u)Q@cFX)Kqt$BdhL+0ffsvK|3OY<2j6<&0}%y}X1{;2P!-h5y#+eg z`aLvMJvxuQsG1EDKJ;=Q=#*iI22eUV>Ct&>A81_%s76au1*MSk2dH`vy|9Do1szK0 z+wJ}W)ZPR)wmo{mi2ypJ@nTsxNPqZ)eL;u<3LK;09_Nen8c-qwvwb=rLPtA5M{k3a zdvqRu!3I{q?9uHl-~s8eK#S2d{(Nwo37r2ty0?P*i=cc5ZZAPkutaNFdnAW(fbJjY zW&|mOXym-$ksNjd`9VSRqkhf{jvcKaE@}x5+EWkh?L3F1 zrRx*X)6!A!K6Ow}2pq29Fn$pb1`X8^M5uyWnc$FoAy^G>et{IAmi$|)KpBZe#k1Q- zMF3hEA;J`F3B*T`xph!bLE2y7Gl^MLpv5jC=XxZEb3jT{)PVKu4*%iN$>`bb{{VEI znVv_t5$MQDXxH_HaPxz|rIH@qjL?=3QVaHjM<*xpxj1$LddPc&cgLfJ{Iw8p z$iLVZj5Xw^SAs(xEDKr=fYR`_s>B!a;1(A&8XV9}=fOea{s0lscoMY;Xo*vI`2$3=*rVG`0(3wqXiC(xvlVoH zJt!Z5@&cr&=l^yz%x9q^^Q;KK`XZSc4nQbJgY zq6xGU$^$y>0@w6N3tdwIXl)Th8KOE?egUhFD?WVY&zDH!&p*zu2_BE+KX&*Dzvf&} zFu-c#x2FI8zufs7-49|f(M4E54ur;ZjSRAcn zkIm7x2uHhgCyThYJ}FW3=}wjajq*rf1b%MDmEM>188vZGiJn^tR z#NTTD|Nnni!`m*M(IVje4loBG;@x#GmLPm(i!BI$@nMN~@Wv-d)&gf+P`oFqqX*9W zr-;Bo*nM&j7Q6RjwYv_}?h*_1NO`G-Zf`k~y^z$OiXjq=B!Y08E;hFrVs+aiULwQA z6T^MipI{4@jk~dgORo*KI7!2_8#7!ks-lNWJd(YTaPh?uu|^U>go`LPx2a=w+bJF_ z;j$Xk*+)w+h8XVK{}@}i%-n?~TtquS>&wu~C_jYVj@{r^Agri@OhsS@(i#=?K(az| z1SF6&FhsFCZ2(5^2_^COOzS`aJ16$d0dB#=Z9zW=lXi|+%iu-Uns z3+{VZ{P4G6D^mC{JUr(i*u!AgAnY!~X7^RB{?*2`8#7f*Q$i1D6(oBhp&*1I!T{cE zKNVC%f;;b^emis?s@F8aLXhEw96!3bXC8oRZyb7zL3&>Cq3fA}&;xC%f&1+qy{0)J z4LdP3q=PlUswDoFnc&=L?a^zh2h#9D98&i+frNWmc`ZO&(joJOowq<;v(96_oe#iX zdJ)41n!^v4fHWFdADV+Ei1&g93jpOvZ?~ZDmAcGumCJE^yqe$@acRH4ieA;ZFnqqO$9B)1-F}C81jM! zUhco>3&jLBL_UKA$#xte-F?=ya6x0=;V9(=`Lgv zh95TT^6)Om5#XU>5BSY#E15x;5mpE=@VCqZ_100Gy&kN?-0%{7xas{1={E3mI%ujC zQl`K7se>LS;M{WLPK*kQBBQ?-*8_>d7$|e!gpiTmXh6kvH3+buA<`9l& zfWqb>Xd(|J3w0ByGthbbMOFrK0D&D1n{tNv3^oi59{-I-8vjLfb3xOIpiwz!AcTTE ziX#wyrsD_%NRfnOnImM>zZ1)F6?mu$mW;va_hsU3P`rRs1uSY_oJ|My(!kLH9fVHuM`tnG zw!d$JycqrgqFE}b-gE%l_kYXP^2HeSv5$>QlhOenu z<8@vtj--W=+aZIY#KtQd*wd&5RZ$~)K^1_}dpvgo6wDsS!RuZA|NsC0I%uIG z*n@_b3{OI|i{jGW1J(`=LC_@G%c|>;$uM8g@|f@!pz&Eq_3YX0|HHGp{Dx2G`+yfA zW}wO$C7>K59it#6g*n^^_aC0!;UFCz5HrAr`h(^{P6WIVz%(P?F#=-5munDLAoLlY z1jUzUclnC|SMauh7Z*%1+z=TD(Y_VC_7}e0?mxg$UVbCs#RN?K(T*_?14=LrxC9LV zxcvc``W>Sjqag+uUqeL0NmwlQO@#OglH`7Pb{>TK4>Y56DF9TY{5HYxlw*WrB*f5r zS0VbLx_rC&K?_#OZ@|6f|03YUPD~Tx;vxFyVd_5#O2z@;8_Ge}*I;UPjDgyofT{Z% zY%CfUCpK90M?-@|0lR)w*Z(%g^gldd-Ma!w?B>4R{y#v6hPZZvmr%oN_-;Q5Xq$_F zTcn3ir>BF*aYxW_FGJ^j$IhD`#~ne97KY~MEc}9u4&Uy3Nd9-c@Ur>w-{$99j?E95 zJUS~CI`6x1o_FY|^zcZAj0Jb|xk4`*Klq%VU$9Q0@gcam#tCkxd0oMXlarwM0EG-F zMh(BcP{;HWJfU-AY6mB@0K;$4Wd70!BSc`y{M=;>yDvfP_J0uo$@!}>b;A>R|7B=! z!h`Ys0a)9_qq`0fl>Qzb$KAof=yBW~9D^IDcP4bWod5Fm@ht>;QLGL0#$lmq6}? z73H4CTS1c~U?&`J1>If?ssW%y8A$ZydQ|n@{vUAYfv)hX2dhUmAs0g=`Vy#kmIn<@ zI(RhxUdh0~P{#S~Fdu)*EKpOt^ZpCXS)2?Wy{3IepvBYgAqP^bvZ1%Jg^~OT$()Q} zyWqa-HuvcElW^${6mV_5R4VP#?J45gda_i=qq$Onp_JRBxzd4wzr~-0fx!{U_mB?9 z%dHndA?4ZK3mWwW>+t9<)F=@Fje*?SRG8&(>C(*5g4h6fzG!*6(YZv}0X za_pW93RB0<&;rNq@CP0j-+6XIBs!;pBtXZT9E2|RX}w*?+j+|av~v0Vi_QrkGr?2M zo}KO=AhYYx4P~GC^W8wR_-dZr=4t%-C-^nNyOj8kodM0`gH}=SYl3&4y_jqP>P>-L zoBL8g9qZ1+FXCgt^M;0(pd!az4G)0UxvPSNt0y^>wmf)K<48t*P81@1@Y0IL5+?WM5cRae?7I=2LfELrZzwqr|3W@;7 zZg7Z!)>34H5wy4gYIn0r_rE`99N`P{ej=?nAi;5^f!0vg7GB&IFrL0Vi?3_v$) zcE9d}osZ$uoiFji+~eDS-_A8)^Ip%`DFHeUqF3~Z4miQSs03Y@to9F-fDnn%{{u=Y z122<(=?|Im1m{o0V3OuC=s*^1V;tz%r+NC=2D0vb|NGyw6Fe>es(kJj|NrmV$?n+g zS^#ZSce~~|cDfdzw#9Co1G}xe7nBU4&I09kXfECfmPXFS%g=#Yb@xD4oGJManx|;Z z0$p5+(pheTXoJk>gDS<({Q3T%v}zB{Fdp500%`pD2ce6T`Hvlc!Y}Bk09sC$T>pY! z6TH|6S~VPe&hG)K9<o5n(axn(9exC(-4%F0u^&DQF1;;Kplp&FO{VXVQ z!NCS9hcJdyAOpo7y`~oyBZgBR{r>wObl8KH8z_3*e?VuAQG>SjET}@M)L`ImT?Se( z-dqW~p?fxjX~DqXI^p;K|1YP3&e@R%6%q`fWmCT0?4ZgHG|~lW<$+ue>LLZe24H(V zKD_v(iBXNgD?v7pwQ#-QwX={`+6&)qeo%!5Gs&a*g+joKa(xV=U^U{NGoYaH{{b4C z(-mX@oe~6HO7X*hzXf!pq-VE1Xcazq6lNKyU;#~AfzAU$S&&~+2pVt$jT*oL$fMI= z0=i5UbR~4>A&=IRCC(rVy7@goi!UIJ0_ft46CR!HofklrmKNxY0r0~27w?PFW0LpG z|NkIGtRO|brfj=}pewDv{Qvvkv)djNk}pArNP$W%kZX`!0a|AO%JBSx1=Jc)e*|pB1mdlLx2SudR)AJ1dv^09Tj2v) z9qH5g-qr9xzzZXg=@6I0k_4<-?T%!KZ#VnSM9^U&5O+e|2r5tD?tGy}bWp&W-cL_L zLIUJW>^6X14!5F}cq?G7^QM!aoCB_KLBl(mpy};*q3FW^VBzVZp!yceT3rf^__cQyp%67YI5&(0e=K}XI($H73VUgU+K1QcTRK4NtVu>&QZ-Tp72?HX_;;M@9y zzvbL<&~Wle{+6R4MmMKtw}}dPJQ;17yk{qm%FBhvLHncJfA~Pw9)ia(z%JegIvVT6 zqCcRz_{i%%&^l!J(yGt=`PHCGP#U!oL|O6ys|2fGKv#cYRDx>9K}CuOO5K_dGS(c` z*rWWKYr&1cW5-bIR`B*s3}eq90}m0sSe^~4-%$o5z+v=q-7%28j<{M1{a|VIRx*D} z5F==v?)w8!$MJ(&%E`w-a}DkL{wC|wxQXMz6>D$)|YQTU7J2}gT%hq4_)2(?)C>qzU=}OB3|U8c^0mX@c4yH$k_o0atCvO;E$5AT5X{s7E)XpYd`bXdfY{ z9lG8YsU12Q)I7VJi6bVT9KjotM?umjJ-erZo5;;o3Jf0IMH>7qH^Cj0y`ZKFG%`Uw zAbvq74Ub+EduWHI!yqk)G%^9)KbdZglrHA)WD*2j887Oh0O_CH z%m-a!1Uf&cyUM_$vr6Hm6nGN_cnKGe1U!sEBk16101bc8m^s!Ng0p_0@*8vEBgRw- z(YrmZ4}p9Hu0}x)@CH?*%l%*ufG@iQi~HlS9itir@0`FsR1a&5KnlFQ2SK)jLxM>h z6cVth3g`^ri#skD4L^v^X0T3>@)uCGp!}E{j6-?IK~QA^ZujqF2PY$_m(zbh7q!Ex z$W^|eAO=^FD2vxY8&yC$UwDEQU~aAgFI)#LWrj5p32gRz0qPf5Vc)9&S_z2K+naLW z|Nk9~puv+)*9_x(>Ib_UPRxe&p< zAZt9k<6pc8=VfPb7z&VrqWy7rrhSBn$EYBtkdshsDr?eHT>c!0N5dvqRpu}}qWDXMdS>_tyZ&yYkwdz%oOC10LKl7dA1P9zcV5Hi?b z5V^T~L9PJh@()P4TpZ*QNS_TF;2zz<4?H>p(Dt3jgAOAA?VI*E?g&a446wxPhD$;h zmxKt|A+R#z19+d#i+WG+1~c$Hu21J9$OJk>O2reB1i>9?==46UNd#G(e((`Lc%?RY ziwVZ0rf0V}XkJs-^51{xT3yg^Mdz^>+=e(}p=b{%s36M_#1Z)iR;*q20J{~mZxAF4 zo%4q@{$G@N;H$lnt8GGcHfqYaw;O+sZ zG{9yaaRJr36MI0-O$XV7C!l=58bL!q=w*TtP8kWX3}&ntq{AEk9>*QP1q^De+}{Cm zCC)n4u^W71f@3E?blm#y%e6Z|?netJ4mL=2`T}G+v^oVIFV0Fx4h(^$57@&41xZ$hs0xqMl zm8Vyn!R0A9Pe6-PXoP@oUw~}agAIX#3M}y2q-3mXlOSht6s5vr4>g!H!7eig*MwmE zpca8LqAe~>U$%iFuKWk6E(TBPegf6TEFRr~0v_ES0v?Qh0v?@CkPTC%ixMz}yMd4|3&nT-yA$fu_1ZwmJ#C z?tl%of=%%0eDB-M4mIROC@vFtwn36KVxiEltx%B<;6cM~M+uM4^S-SIN?1I*D+GMH z-2{9X9R)l(%O${5w5|V3LVdd31w6VdC44$TbeRUUS_Y5OuHFg?NPe)JKw>LifA z_9x>AjyKI{i&X6RWV zpg{?b&Q|bwzMz9CAY0fSArtwXt)SC=Urek2_8+`_34CpUN9W-eE`6X`3vhd3UpjaI zWiDv5wMVD30B8o#)e+o{2FZZ7UPBMy>I5wXd-2i%oYbMI9JGEGG$iBE4L$}8l(Zr3 z2hip=oadrAd^^To$^#t*d=Y;5>wk}C@O%%0$MFN8X=nb{F3{#~5B|IZ9+1PR;WA=i zzdG^@vZ$2$fu{ciy1~AL_9q-6YYR~G%-7A3L;zpa^8_q_JgIeQGboP0$Lhk0pi7`g zv5NWs|Md(H$Qj!xG72&O|G$g`Er|uKF!wIE_{$%a#8lk(E$wv`1A(S=oX&!X{dp9ViPDNAgT2w=*kgLw*neh`#{I|dv?pi znr$-n;3CoRBv=Bq)po!R(rSZj`$wb~aC(P^BqXgI1n)QX!838(c?-OJ@x`1(99c|w z6H2IoocW^O4(d2W;}i)Zcj0LRL&|9`TrO(dh~%R5AK(Cb@x~Urlcv~W zbrQJugXyGb(8gSB9Yctd$`fz|(z^|y`vAa$F`nJ>;40Rq^U;fN$WDFGZ~~}cKlZ{5 zmjP=xK=P44(W%`Rbc{cq@-%t_D6xTCX`miNZy30kezAlDG}^)rKJ^B27T}AI<%q*N zY`{g<;TLmlpuy<@S}t*XA4nWre%XM66KpDIe=#)ie&)|l`v6XHkd?X~$zhP567;6S{gQoZ^!sbB%#YTJbFd7)`90l zUo83!nh`Ze(*6OW9Xyc%O>-}7!a<4H9$MGD$SuQ+14(N{96;Am-!m%_4<;v=)xA-vm0;1hNtU z)R2IkpP_*F_zX}~B!kX&fK8g)mV_Yo{vKZgi3;&we?dpCqfUlG1{iGCLNXk@;?f2S zAXi+HYr(TN9=%gR%Wz(J>40{`RB*g_Sis5fdX?cNWVLVCfQ*BRfS2>$22VslmS4;N z11AYkQW60(A-(l*%-*`HB{(iXy>*Z*H2fg3|KfxNO2i{3T)=q&EzV0oW8kA-H3HMARTglkf@D#hDvQghkU9#f_9T=%QJvbl8kB9yL2F}Qoc#0m zKXkDGsD$e-;CL~O6_ioKf9wMV9xN|_T36s<-51Br;Z6oAKy`AKIgZc;r*^c^tsy>i zFM($pAWjy;bn;^ssFOi~i0Nbzgp)xEP@TNp42P2;)f;LkgV$~mmmuW9P6m(8r+`-D zKyoK|rHi}=Xyd*f*wNso6ga41#aNmdo&e^=J_2ZAr9-@9|1D@FldMwTHd}eZ2rMm?gP^ZZ5>03)`!cn_^<|S z1lTr^57CYuT?f`;|6*D`cuA@u2Y3d}qw|pAffti*|NZ}Zn&Bl356rxS!vhIm)4=f! zUI+p5@r%>Opq>}XEH+rY*ceAVQ&_0pUIq#Us3YX}g@NYR+%eq%7JqMq!wnRcmf>JG zKuYjX%o2Qu5j_2aWKqkOXk2chusA%t6cjGzh{5d_iD97B1x^~U^aM#rGeAn4>t8T< zcE>;9Z&Y=|T7 z!1)_=%nDk`hPNCBPcnfn;sY(G&3O11enAW*MB0{s0uP+1;9b~H1~|L0(+xn5$D9wt zC~%3MHD(1np!@~Movjg|YZSZ7f4uYuGyH$N+yGvU3tqX%@6q|s1A6S%Pw!GbkM42~ z&=ORbkhTZE>v!l{hnMRXgNrD{=AgOg0zHdCJ_jvl=WjU%il%O6_`!OP{4H}p^Ptd~ zPL#qZ1gsA$WDbSWF#QT>Pg4Uv-$G{x$^}1MMVDZBL|Dk8e!a6nl+b)5o*C8!M z56%k>XB<2`SyWz6K&S&3)(CZwrSc7D>|bB=>_!A}`*L;$aQN=C2NfKU5C(-csCRz& zg~v5;czrv}&fjVXTDQ@9o4*BgDJryl@aVkvf@QwqVuKowdbXuT*r zWq`{_w3JZ+N*P#(#5XJerG9AV0W|mia^3>acmg<`f!%9(X`c?r#hve8EWY~p|LYy# zG5>A>kAtr`njh6S|8gt|2Q6fV_~pfW8Bh|#61Z*)K&b;gE*h+GC>LJV z|6FuGt;K4>?Dc%k|Njk78XC^n zd2}+rJ_jofQ7WXva}bLrP|C?wb3kDjDgiEYq4y(#TD_qXhL;>WeKTHmf)%*`0Ihm< zM6~8SJ6$DSyw!m2I083tkM9G^cOH2$RReyqF68`0*y-Hh0<+hH5t0reyNet8v5=De$L#wa0ihXSzd^2kgnDYrY>*zuZr>8eirAW;k}bmN<61gEj?$nh2m75XVliS)ge;1<<;j z&I>B_praL`J)0l4{4EWP3=GXb97|-Nb5Ni%7&K=A4%Qcn7eJ}wAR>0bn~Weq@^ls` z62X1ZU!d9qvX%+l=X&9(4()-!7uSJ1AfME*H`2iA5xMP1^rEGNS)c+!HC+XCW{c>g zeqr$SgrMuoUbvovcaR;s!8ev!3qTI%gLwzy4_UB3zzq&iL(>?PD>~J{4Nc$92XGI7 z#SN+Mf%!8*J%S4!s`U;3|ATWA+dO*y*60 z0`6d)Q-uaS;xKQpc$q4W#yhwIM-F^KOPEoE@7@f!8$7zfmjdhq^{`&JVY&k>{!Rsl zJHXW{nmh1zAW+>A26hL|4&ZhbJRQI&Ty6qaoM>($VYuedbWo1p37TmI6>CT*0<4%0 z3N`x|3Gt|d;h>2J9u;un1LZ{677Ngv#EUJ;*mDoKl0|kT(Mwa6z^;I&pFmL3?^DJ| zKVWe)WgPJaE?$wXhm^3OW-G>$FK~H_8gKKafy1alfPn!NMlbuOfkFn=O}~_2k!N@b zv_=)=AW%pxQUZkte2T`W^ZjT3d_M4KJ+uX#ECxEA0J=R8W_Z}mQ#DPREB8z~waJ<})EYc2AvldyT2P85ZS)>;v(upk6 z4-zRy7MTDNNktX`)#WdPkwv;eY8;V8K#Az3KC%d?EA&zpS)>o7iyK*_10?cu3Mi7G ze(wZ{JVzD*O&Lg3OsTl6@`K# zG_}FYS#U*hQUMgPn7w)Ole#(BW=LmI8{Fo>62(GbMc}jtabBYWR_AHqa2`fc3ZD5T zW|8=e$%v+s;qA`3p!>`q)l(gk3|Isj3k;xGNSq9c7ex35g8AUiLN_0LNFutF-4!%G z1V4!3r6x?>59DzQu(|_2oo=vG23|5w2E`Z7LN!SqmM_6&KI*6%t2}KAjNC~eH-RGw zUg_PGgT@nDrPnBj!wncM4oG=HY@zjXBFGKkt`>jGTj+QLnO)+!V6#A{b;ECr;$nlB zK_15)z!xQ;7Mhu0J>W3drw=N%Z^%Le0G^M)!i}=n^ASc}OZ3sa?WP=7=~V93hTr7~B!R z`_R0MTm;=imjrK-F8|=sjpB+D9iMJ@yumQF541+EV*lOJi$_+2Iz$4Z#?Lpz&4eqxU z-2=HFyRB?sTg!hStvq<4-TXtm+;bN*!#)NN{>6ui?Om7_en(H|jO1M3m>o^$rTc)uw zFuZ8p0qTolJ;(87WDh7L|Gj<$chFSOLIzOucFTkE#Ap6|hYO$i^F2PmjyHi^X9qs; zI7G7)T0x+R!sm`Yc#zZlqlpuLq4$HydHmRE4V6h z<^T-=vU@aF2r!hEdNkYKmK8n2p#m8i29E`SyEx$0Holz?Ul<(t``@<{ zbe0`>{KD`OctjkWUJt(zJ^+dV*jQ01JG_!YDPdop=>jh zmM<=dAVLQ`iV0e73^x5mDcDMk#dYBH4-Xx1$P-*#SH*%Oa4xoklD;{7dg;AK=dBkx z7NCml2zYLanF(~IsQrr!fAp||+;1!Zalhe7aE^pFs6n+`=iwJygyCW4(aj9@)Mx&D zeX!fXUH)X)>@IZ6J~X(nE%F2{5nLjS2rKB?M^JW!6?d)>>p*+|5g8M_84z^d(ZNUj z9-aUA1>F_E_Jc2PWXI_5`*c3)bTil0u;&7B-wfhb$Wq}NJWGWk%VQu(s+S3e%b&D@+6Q40$Y)b%^S6R- z$@b_DLb(r3kH6Ihba7{Q5ywko(A}ZX6)J|8!2L{60Bzd^o{@Wb?=N^@-J`pjqv4E= zM`1iZXQz$xU9?h0;ZHfH?CiLSq0(sgD)|JHRU+8Kn)OZ zQ;ydJ6w25eRU1L)5Ol+ua-NTnn{uFIR6tF+w;C8tIgk{jDOb>pkc5cvzQZQs*$s19 zo+jL7#m2Z@CXV8=^$(F<2CmGyIbH-~x(p-*amTeLba(i_B`hKdzN!lSWYu4`AU9(f zpebwu`2ZSzvYaTc1O*bP80+SEu}U4J{}!y7>;LFouDSP z;Wy~9ub@nth;W!kw}V83hX)I4Q{zG-D5)TI7x#mX%!Mo}L>&Dpg)jzH`@}}rnL?m* zU6D_E1)tIiJ?J(20jLRs5hj^eyz%}w? zp7Z+RKBg1kM}nSifcOI00LZyl;V-~Va?nYy%P>uVpFP%vX#i+@3~0I*e$s0irheFg zW8PS_L+l5g*Yh59U~a$*HB9~Rf47yw$Z4LVU3G?4cG#fy8G{)eA4d%7OO{}_j| zF2`a3`~<8n>;|Bo%9@I40_^ZBuX;!-#BwGpWV9Z8Brq+U*AK<;tC^x6>wE#^(?>z$A`^NwNfJZmz*7`%x zS$6(yjvlb%cR%yzTk{Jtb{>Nt!TXHGHcyu#4c7pBU7pzk7NalvL2*At3PIz=Op%!i1YCu5<9h(4+zr9>i z0~$(HUCjobyPZ~uGp1~7sKtf7}8V_f>@4YnEFN&p?4#)1C==UP`z&|*YT9|BTO`*c3@=yv$v z0lWOA^~9_H|6iDCfqV=$6miwZ1JDp7Xqbh+h&*0Wn2RGlLt z6;wxhbl!a7r3h|+f$Zx%_QK{0$mb}{6^PRoBN+)vj4*={MtXow2tNc$l`p<1Ae;K^ zG7eLHD?lCwk8d`~g9jNwL$&1^AW?ScDFnZfQakiwPpoN}5o{JX4etYufCs|8+O{fjHO zyTJ$6ym%&$92z%pO=;SfV=)I5I7k6I8^x$zTt2I;aPO$H?@{rms&B}fW+br#4;ttU%`Uu*HpyD%_# zbXN+1Mv_H6I)8d}8+vqp_c-{TqxpG#^M9d|M-C0=8az4;Vav7TA(oqiZaD1x@G=F@ z%+HrnwEhew_AbX}7U#9#kE49^VJj`NEn3$M6DpWEE{JB!~Fza*K;0K@OV9mjEx3FRg%uya(eq zkLGiXo}Hx?D>(RD9^`=5AqF%f z8=#C~fFSy5$e?p3U|Ho$5n5~`9i;o2Ki?a4c&IgWn*+Xsxj|==f)8rII6QO`x(%Q? zUHm5=$79n1bFmXXNmUd{aEc7N1!_8%X6*dN$-uA+v}_9$&TnKfQshfrkV<$N1lDYM z8>*R?3zVFp2Uf1fqFDr_60R9^*7P!3iGTtS78)jnXz_ZY1&_{;Fe?v2G=lGP?A{vk>i_@F3(XHW8vl7RGBEJ>J2Nsc zH2!l3vq5C{UXYUJ{~G))pfiA)|3~w;=!4r;;9CwlFTisJnE&k%2Y<^k(D9_bqIb^< zFzn>xf#iQLS@fJ?Q2?s`TS0{k?2K-Y&SRYyJubd$e#p@Xwik5FfG6ZWg%XpNlO-}9 zy`sq=W96a7ewG0n3-%4@5FE&6Ysit}*Yp4X2OU~k4{8zi%4&o3$wBmi<^XocfOav0 zT@AM%lsUm7Ab+%KBK+yW_zmigZ-+Qarh4>>{y!tYuu}nI+>0C}XMhhGhdAFG6pXDG z!Lz$yV-eRwv>X6?W*W#8UZ^Q*NT$HfE`^mjVC^8gK|#Jmg%}Nvm6y9f zlkf*$FnM-@|73YEH}hNB**^D1tlM_cM+iq zJG8Y#WakzR70kPJ(3-6 zAT2$IHpIbG126vl{Qcjj^C9>)AW$a>v_1~hNm};v_kZYoi$}LGv?&j2Y=TbGfvB;)NlSiBgJ#bnQSd$zJY3uhm{|0W~5}>{3Tx#`5yg zMC6bFnXHb!6z?T5B403cDNaE*dG9oIkzdo%MP|%E7ukj(a)k(yGNfG@kgVv6Arb~& zSPo9_*t1Ol=0gPjyeQNo3k-Qey>MY!@L1q#05j- zD~8DDP3XEXMV@UzSMwA@L}n|xnjerma*+HUz8hUl7=}mz5hAIeL%~r(z8gcN3qvIJ zIJ)hwC(uRWPNIt}!4Nr%A@T=9MEew|MhS%v)__i?EtPVEqF|DB6Pz_rw-Bam83MFi9)LFz4lnjMhdLLunzre4wVBLWON zmxw?bRbPeCv-jh)|Np^*cP~M=ZNLf&NXCA63K32qKXe{~T!RJbv3l)Xi|nBuAxsaQ zM$!&3@Cb$oNDajLxnS>?R)Fi~(h69`%-?eI)c^lGcS5|~aTwxlU15;7!C?hf4`v~> zfXwpf70o&5Kw6NtUBPpIHON(VG8rTeSLF`6*$AZS z8OYyE(1@HO`0qccd+OP3{~|&cbv+1ZjSR~tP|Xk8p$r;l0xx6%EuVR@=Hu`Gpw$w| z;Pt|YnxFhdy;7V< z4oT2p^2;6^l1d<*`6-}$10Ip{?N;As0$O%;`vXQmfyJ9YU=JwpQV`^BJJHMZKPIEt zZU(YF7SndHI4cg@A+d(ECV^iNv|%3WrLU-YsyO-o{~e&z^YZ9l7%LOpzy%M>gYNZFy2_hR0ULNh^bClPcG zKIoJO&^h?fS`7W(#q>l_(1SbS&{4xsun06Vz!PlFiJ-CHrJ%0#Z^#rObi@X{@YDIj zi%Bw|whMR)4|E3y-l@Xm4|wMamx719iJB`+Qt(LjhAi|0-8bdIi8)!=nE(o0_zL13 zpf%l~q7oLWuwi`kPzg)`d1xxg$Iul~Y~adgYR4;3a5bJ|0ADXqn(_J|`v*{W z9HhSa0aNp%pYVhGA(JWK^oU_Qx~;e4K{K)7(^^3L(Lr+}po@CTA@>*SO5;crOOUmp z-Cz7e3WuhAWKC%I7azu@$toV?duYxRM~AiKpK$%q0hM!;7+FvHDo|KQurzYBaS48%t;M}TfO zd!dbK2z)8e{urdZ;s0VEXb&*x{%PnK2WVaX2GBW(7d$$9L8k|McC-6-r+@J11TXjn zFVEMU3o2XqkDY$PuL(Y-mtV6NbW|~H&h5?%P&E(M4LTB_8>|yFR06UKG*nUzRv-+D zJ&(?Npq2Tc6OF+~uDk?K5JICEIvCRp-VTt)Uv~h!4IOcX1!ffuTHoqy@M0IP#nK0( zQGE~Ei4FBR$d@4BANb6lp8@i{!z)liWruhfdgazxke5Mz<<|uJ59Z~U&wu|1%`jiu z2Qm?QN)vRMaPMP7!k98SgP9YA(fcoKQ?;P(iyQ$c0u3+q+z z^(~-s1#}uE$7Yc0ah^tLiEuLJX_R-K;BYc{X+ClqfE>9?tdm`koZPVz!^xqWpiTw_ zB0Pu>!xBW>6Fi};iOb0p&InEfAC(JEuh&)}yBK!9ukHbJ|0_<81tgijE0pVIuD8q^`Ere^q!YHmi`v`|? zF^UAz7IT||T?@KT;KMG^J_m5p1vlED#lKIl!-p6B+cD}?aPRfyw@{F0A=*JrDD2t; zaB1I;q#e}W!meEqm-Y%I?VzR@cI}t8;c&bql6FwL4ZHTqxU~NYLHHfi$iuEZ1ef;R znA&~1mx9hTfvxxHyy@HPqVnK{;I_a2cYzvvo}D*9mUJHT?DbK(@Z#r293D#uL8@TQ zcY#`t;2I9HPX%-Bj7#gQU_^L;PJ#eA6*9GgoRnO);&Ak8B<-MM zBd}{{#icz5NjqqTI(F^Hw&1W`7fCzlKnm>I+i_`s7liOT==2Kg+C6Y-Uyr06bkqfQ z?VPx@7a(Z|omGKd`>D-1{B9V8lw3fI*AV@I58WOgUQB#}L*tJ?gs(xTZ(z4K2$#J( z13~uof|5LFIYVzGc*i&|_)yyyF*iV#9@_=#8bRFyT8Gm4{sj|g`6pzS8P@ZK6h@g~ z^T36dXSew-P!|d!yYy!Cni}v>ch=2ec1cF_=Cob(9 zz}i7g8~%M$AmgAOm^o+FNgTEpB59wBQ+qZp?M4Bh{ws83fbper0DOGpA2?dTLvx@d zADU}$IN*an$ot@Z7%xl~f@-(=8z8N%|4S4=mvwn`euPKiKaffJcOi;AI!J8(c(IfBvxc(mhDM)QN|NTVI#D0%Vm3UqHfIObm* z!q{*B!4Kqr_Zx_TB#_-6y}=t^l!EPdzv0sD{l%yAy-T3mQ}DbpPPdc@P@BFWgX_Dvsn-*gg*;bBvGCEN+01=_@)<8Ur^=%t!ab~ zD6)VBprc0M1BO2NfRsQ*Kywij~qIOECN1YXpav(8lb~t&|1#gVTiz^;bgRtEDw*k*9^)^jc>xnSSZch?&fC@&}70=cvN2k5xq z7SNH5P$z)$VQ;{P7iI@QMwBDnOV(V)4QG3f~38nwX-99T^^K@@y99dXmyy>K4^q`g7*b` zbRGi7B&hzFUk5T7dt@eif)-kt7OaF!Y=+b#&Ig3%QP4C1B#g`uGtp)i&9JEeMB9*<5Z4v%gJ z1&>ZA1<*PzZ0)U|?jT#)Uq1rxaA^Hjl8S6~z=szRAbY#flf@(O`7q>J*#@@K{l)8j z-E%>!A{&2$)=btr7#?W+4O%P7-*@gB=uA@ZnV>JNZv6ibSq2DR#n=sA{l?$&@y7rE z9v5H0R>QephpB=r7F=@e|Nqx}pkp7P!?b)r6Pi7jp(AyOE#Y8slgl_d<`fPs&2a<8 z>^^8$<^^vTB>PG+gN{l7r#SEyix*!mfyX!uPwoOK1r6|mwq$??cxPP#r8aQk1UeZ3 z>*%u2}cM}IFK^S6%+z5 ze_aDn`=G-EFIYN30fBN1$;S?`5a<|^WlO=i-tfSSm`YH>Mhd9Y7hwSfG734M3NL~J z3fvC?1r+GUb7<^;=FgXehF7$LN3tM4WYirr`UXDR0dwpd6i|sE^Ez*VhN4eG2AlSQ z%zVLl5l28#I6hYB0?LPAufj{AyBBblLQNMy-lgW?@&{)W2Y@{r19t#?Xd5ifg2Q(5 z%fKRMPy%`R?h3fvZ(j^f0WV_8|Neh@=?}oj?}DQ)X5hI2j@zkP{9O0;NnIh`S6Ayf{>bmNE^`<4T#=&w-)}mW849HK_Ua znLpngnlOtMJd#13c79FB6^pntu}9}EQ1W!Tg2O+WPO#8I_I~hD9Lj$=!jvNi?vu+n zl%EDGho@3-VlY1kOQooZJUieaZpfV8v^-17bJrv1*bWH;-nlrA+c)W-~T%p zK~wv%C0DIKSV8B>x@I_bw}Se+jtxsejk159-E%j9S5~k?M*)~#%=jO2u zX!iVp$H5mYy%VJW|Nr0oi-W)2^Z)<l_RBr z;8jNi%aF(p{AI{aYj7EI_ZVn-QfbD{5A2`?z0kGdJTc`7s>PN#QJ?zZEoyZy^V<=Ci;5U%vhM|Njoq7SWdv zj)LMG+^@~=1~pM|jDJ{xltGee2B>FLbPQUJ!s~Fbu=Fud7-Hruj9vlw>Q-WogYL8h z*&JHo!Fb7|`4ppPXK2OCyGEeOG`HgA6(ewBN<0Q%ZuA2*^b8)M01y3wnoYjl>`2Rv zKD=O`hEb2ghDl{C!RF~51KA1oExg^(c=Y#wkItLmbsM051gOyfswXs$!Z#m*wl^V8 z2LoqD`0gV}eF5En1g-%*lUqU4CrF!}P>Yla7GSrqfZWn-&j4EASOPjRw?x>Zn-PAU zlMjCj=we#vXff=1DvwS-36E|rkIo_qk8U=|=2CvaECr8)Klq^w>tUyEf>sT7no?ivZh#-Ms<(zzesa zBVk|%pPY%|U`P1rLpGfblNo3vZ;KLSQ z>VOUdV1Viar2^PmF7Of(lvbX&8K`Db2kqDs0X2P))7o5cH3jy?J_C>!vJQc~;L{0O zn-8sG!Qw)PKm~y?)C(AknJ~QoUSQTKjBtOavjJ#lY3qR!M~`l7E(cZ2C=QP^1*fn3 zim>$MoB8)Y_{KHV6m4b-iVDc$EU!XP5`=gNyb5dPLG*$REbMd;pt@z`}u@l z6TF@L#bU6D{GbE2#b2wW@ymmj1Avl%qX1}4xsXTaLF7_IsN^ZMfeXIw&;xp-V($S+ zO?e3-3TYNXQtAuC1E568qT-Q!IgLLbY%6Gl1ZIpd0|NuN-h?az1Ghf0Ttn;G9sU7a z8p7JcQV=VBIv?%>83C;+At~#{-u>7k0bJCAYzN!u!Fd5Z(nU-pXoJrI1kd>G+sF&v z-2*KQq4Nmfxe`@ebD(cP6;U@t`$3%ApRL9yVj%sgwML-0Md}DX0G;>@oeK}x3DSkF zBlxW!B!i_R7z?QmzwZX6Z*h;-OQk}u)%oQe7(BYY1VEe9MLjxCd2};@V*lVvj^>B; z%|C@o9`Q7IbTUB`*Ne&}I1Fci82$}xI5@+Aj(~xzXiV7$t{g#wUzZ^110v3|50Xeg z4oaiFfa!gawi{7RDBi$OUBY&+Nn&(2nmF)tqP#hPn-_F_*k zo~Y#|8`x!_S`g+{&>VC(=v>C~8!sxB z;r8LWpaz^pZgndElbe5q2$B3EHk8E{G|uJ3($loO{*{_STC%rRbiy zr3X?7DiP%O`6DVzSn+1P8(gA#blwEZLW?&@mU(e+7bLe(du^?o9%7Cg668*&$rgbP zE48GYfp#x^L_s|`$P$znr*8iJ|I!a6g<3UZ6+zlrg4lB>brx!FHnO=zAahy3Qjk3@ zP~#oDYcrtZS8R|g<~k2`{)6mp0q?q(Jp2ED=ck=zq6`e3;AJQpH~;=etU!T;#}|n6 zh}i;zaOiuGCeT*KT4aZwyz%${%bOr6s0*PstU?d*42*5c%h#c+xq-29xdUVCa65*G zCdP(&YKa`d@Yl!@xqx!c4QQkJ?Yrplb&Ei6G?XCSQg9ytefAIBEJLjb{%V4q^#ii71iJhP)NpvQxdlfl zd_d=}Adr^-|&orZZ+Y4G7cP+bk*ws3wk9)}lgh6FE$!!eqMkPZyi@WtZrTWa9u#={NZ z=7x_9(g~*fqcEEr{4Jn^wxOvN+@gIUu^DSq_TVN^mdEUXg3|+P--pO%pS~KnfyBHK zlqeBRo6ch|p62}h|1urC;wAh8s2d^tS^?TFbAt6B4}tm-u=`fP{YP`~dN0t;D$pzo zZXds>0Ivi-1YK+b?$Tf4Z`lu;lxaP{-?9zF=w<+oRvrAo4;iXL9-Bf<7uBjD$3h&% z_gdPco1lB9ff^=|oq7=W?7-rll0;CiIL3o$cYIbsFZv%MiMSfx_UQy~KZjKQN0H

M-;O~K&e7>E}`M0$&fszQkx!MaV zT0A zt^y?&z~>x)^XdHm;!?{0|F2JacDJB}6;c>11DV=e@gID=Bls$_pP*ux@tmjSM^ApY zj~&WN!4!fW6{c&vLG2)`=NUeI8H&u5U36T z)o=d*nTnp}~0(tQ>R# z@~an3$)HT<$#~@TNzgtW&>eD?NBNt+gA!0TIM;Y~-uDIFc<2ir-~yeid7Qu50n7n6 zn?RM4c8dzA>i4kxP!#6a-J$}joI#Bi(D*H=pV8tCZX7D`x6T3uaJTOaPs{WCExq7o z9<=JTfV2fc!zz%L*$c5QNM|$+tSm&uquWWu(n)~7^)9HvntTDYrQ4VBmrv(qPs`(; z{Lc4%I>FQMFV%j4wpoGqA%jZ_Q2uUW{|PF~z;&rl=kJ%Qkj5aSJq0QVz>2zlffRvn z=Y*YE^#9-g|Gt**_?vxxf|m7ue_0PU9pps@P(XqUuwO4MlRyFK!Fc$k+#itbP7A+hEL}&(52lT9p^vboCTUV0reU9LHDTt1H1NxZ4xM!K@MPkS@j>p z23-?y|E0)ZP@5ZU8u;?<&L1AFxA|K@S66~Hg3SU&;xUlPFTR0d2kZ~#m&TyB0?4b- z#%kxU7uOR(rh$VDbl#6gC;LlYkY$}ed_ec9b-o8hJ9O!jM>n{n^Z_+*k9u^2%S-UF z)z`m)65YF(pbY2PdBwN$`^!8~-UMyW-~A0#CipYD@^54J?ELSO{K8Z7yiX^%>j65w zzO%N&6|~{%yhms4gxCC_b^_yL@W%eeZ~yA3*dAiE7XSirN?d`KN*! zoBof1BuP>=oJC4 zMmIcw)LuHy!U&qm_B_tQ0-`;d4{&%`9x8nv?HCh#IBmk=G=y51|97x}TxNNU-}e~k zD)unPP{$C@&OgDOhr8K3%UN0vltfzIs1Y?h0BuXh9!8jPoE;P-KFO~=y6ZVS4?blE zwZGIKKKl>4XEhQ$0tQO(0w7@lsIU`ASirGUM& z#6C}uePt{joxfjzvQ6uOQg7Gp5ET~J)=PD^p2?>`%N#g-x}7-;4}c@Wqq|tZ};$koM7GXnzaj-)`1Rs`3nn!TmfC zzti@Rsyu_?fy4ar3?M$(Y2luo{~f~|Ap@KsXL@v=_Go+qYB;6w=d-#<@-ZOi=M#np zTsnI}gA4qct_vVB1n&8Qg2|^7Jm~4s2`)OJT_|X0AC!rXyMptw$8lFs&yV4_E65fG zkK?YO78nD+rt1dZ)&nIv-R=TDoyUDUkM$NXzF7PRR4113dnDg@?S#lLpfvsBHz)zu zdw_E_Xe{T&w`kBv%1v7QVq&chy!Z+?Ih zYj>>xbf=9+=U$HgXjix!9spVH4m!3(0OWa4)4BCPiI&F(ufte^U}CsJ;4|zbO*5Zm`=$C8za338$~+d;TT^Mo`oKFMmrt3j;&9 zs{|;%L&W(QJdVR-)T47QsK3zJ3W{-$?pBbC;Smpw?QZaT4B9YTE6q- zcRuFZ`2pOWFJcF+o;&8#-3z*s+Nbj)I5qqO4V_MJ0980Y{+Eb?4jtejc6RsPO3JVgA1r zqzZg^&h!7^gAF|`&-!$}^5l0r>(dQ3$p;d$FRGsX{~s3*s_^YWwsp6H#;-iOA?8~i z_TYEF;bD2YDANOS!YZ`f1C^fe0^y%$=e-w?!a-BEuv7p^6`-P_^SMXo;TJ7+C`sZu z10qSh1dkFx_KR2^E?(*ZaTqAkHmw2mK)YL1KuzCnxy&V88F?igxCE?YN75I^k_X$p$$vU zx)8TZfL(UDcqLT4m6eHs!Q=P=Q1(PB35B6)^+nrlP=N?ew;tV)auF_@ z2syA#3j8hJ;5I3^Faq6}*kTRhL$bsR{coUlIM|w(%HU2p1L#V&4A5BrCP-Q2(`)$b}fVTJq@x@1P;6K6;T- z0|{ULmYtwf4m!r~@W226!M+sWZ{5lOItCitPu~lwX+Xs{JX9=h;SNn16gg06^0!EU zy715-`g0Sm_ay_UEQcmGP+m#)0p-bCpfao_1e708p^)v49*ieE zEsuKgyB+oDJowTAY5vWl8Qd{v;O}?~?qY!(`aYUJz}+TTIt0yMb%Jkan;Qa}X!cP_ z@$5VXTEm$Fnl%Rv*umOED;W7(DnN+~kx80CQ<}I9ErW4CMmQ+A}JEVId>jD~L`wW`$)BN$$ z30yw=fCsN%nu2@Ypm7RNNFMtGN~hpGWgflYStt)!X$L75AbH)R6Efiq$><)Pt&p-0 zTysHlHpnhePx2V70DJ|mnEv@d4&Hzig`kw)-3lsAU&w;iYDY(bMr<6xjsV;4X?d)e z%cFZPs3i34JO(WceJnrnH$4IsNS!x4I!|M*7Z39{?E4Vmb zSN?(8SXk=C+W{!`qK73oJM*_r0(VWp1wOcT0ad&nkkt4>9BL1LOAe?s0A;2!gk7x} zkdz2Y5TKN}5_x_N+z&qnErLBQkMTEc0!<*QfJ+Y-28IK*{H<%iZ#5#$O; zb>q{y7qo-Uv-3V$lS&uf-|%7l;cNNcli&Hc<98R890mynhLSqp&VQbr$3d6rH1~mK z-655!Z|4V}&YwP=ub>-xL5|QZM@dl=e!`2)7I)C#JaS8G3b>{9|3#-CBt`vr-IF%K z160tz0}X!^!Gyt8qi^RwP_xDYI#b&XK7$o>s7vSZ7Zs(Tt^$86XqE`<$d{lb4;m2h zNCsaERJs!3t=C&UAbaS2I?sX1InA3Mn*Tg3Kk+wLfCe`;FT$GXmIsTaz%G2{)A`>+ z^B5>?d3b=EOptj$PdZw`2rd; z14rsh!5^R;TcZML-2LhyUv3pR-kIoim}89W*{h4d4P_Xd->w*?` z%|CccLVPXH^EY>V2A#QhlfT*X&;S1~t3V6AED!QGU;py||I1Er!BeAxXw1F%;REi% zfh;R{844P6>-_E04e_-;xQ+}_@$l((Qs^!cu`CiObu>KSWBIa}*(3Rw52TUk(QCs9 z%F7V1JA#f%Lvzh* z8&dK^5~T+ucX-Tr-GtQN?sgRja18YAJm}eZ;>Gcg|Noyv^v_}aad7|fn`5Y};akuE z(wSh7&dVOnZ!|nQYfrdzx*qZA^xXlQ5Ap4_Ve_&4T~y!gdIU5I;?Z4u0^A?|=G*xY zGF2Jyq8`)?>^v3`<pd($5@v+eH36JCtuOCCh!=u~X17*Cz-QqB;Jpt-Zce^K`@IAWS15niq zpvW5@09gVVj|b`h%%9K3FUbCxKi^M)U(jFRGk<=V0>5Cm!e{>cI0Jscc!SUU`DqUP zg6R&Q`SbGv_yzL=KJ(|7CGZQDCw%75uPfjetS|8BZUc>4cyzXdC}jJQ$9zEcd35`8 z_;j;@bDKxEy+?N#hiB(WPtBh`nuk0sFP18LSe`FdH@x(k8+88gAx2NjizVXx+gQXM z`M2>1Xr3r}g>e62kY^CX9pLdUk8XC4?s5(f%MZl{hL@oI{me^GnL)Soad)_e2@lZl8904$cyu%QbbAT-bUSf$hY2+Q zVyt5U-+R_==L7Nz<1e4iYyU5_9w_1Hbe4en5;V33>KB93ZgA)C{T84u5NI^+^a04& zrJe_<;Q=Zb{&z-jcpPV7V_;x7?!W^YFY*B0+i~0hG>XS?+`$Aa1RkwRn-B^ysq^WJ zCa6Ku9>+nua~L3FP7WF%)%=1E9Q=X~60wIt_B)0;f>!A{cK!it4(|L6$`LOdp$1q& zbTY7loOs-U17v_pXM#Xygowv+2MN$xkmC*pAW?on2L;#Gw(Ol&?9uu8h5I>BqrF-I)C*vJVR`P^e^6a$2omkQ|3dTJv;WaMK$qo! zhmaAG%P;Q$8PJA|t#-S|^hPi?{{CMNS{rx~REKr`Y5vV#m)7l`VtJ!J-lKc}3XmUK z|CeOA^qMeuCV%rd_>B3*k5iz5-=pAu!9q|+w%bJoWR#=jy*gRY3Dbt(G;e?gyFp&} zNIvY@TXU4*h0&g8|9v~xsDO-g?JQAAaqNsyiGh!CfxPU(z_1^b_+Nb62eYBX`LiQ` zzKcqR<30ff1_ltvN2LNpLFURqtU2Jt3H*W#{DK|={DJ`r{DKh%FF|YGcI$!0duQ(k zZIpOD1?>OM6Pg!1IzbCAJI{m0BS8zAn%`*nbens0)^70VEIrWay2sP<8-Fusj?%aD zh-346MpwhPuM@!Io4w8#K>H5sK})SVFSvBR@;LZ{1++-73AD@1@!(SypUy}7Km+uh z_d#pXB0x>+?VxpWuMIr9eGfP?-u1BbJ;C1$x>FluG=I}c(41y>=?U;?9B7SV%Y9I& zcb6UjFa7{8X;bJt43>7ZbWss0;rD<`zS!*wDjq?Wax*Y6bl&#?ovh`00&e$Wkm(ps zYBd4RM?Kod1=a*s-5Y$e^I)&@%GQ$}{H}*yih`y|C-`(e>bwtD1y%#{Lg%4g=abE^ z!&@)$yWW8LrwKG1!!OU!?YhU&@_2o$N4M(+k8a-+9-SO6oi99^k7$4swqqQqh~}4P zaOB@6_YxF4(D4+X&e9W(&BqyE?}L^%%||qLfQAo{w1L!sVq*4=f1qex1&&WhTtZSb zxbo_j_vozM0g6Zu&{P>{&1z&fg&WK#|^B1m4iNP5E^r$X}p9 z>-OE@(J6@$cAy->;L`cRr}Ovg+aOtxt^bk2$?(8yc=-V-JAyqre|t2(c>wCfLzb(0 zbb`CNK9Kb?K9E&NEeA@J`8C1wsQj9~4g8v+6Zkb_7w~JQZs6CcPSp)(1CPLkKR;J%OLjfi_pWM=@S>|gkCrz<9m2?%lmX^ zad?1MX?6N8K=PaG3Bv;(ov{bN$;gC-fdRBQ!?W|7XXh1AgtbV5x+a~kz)2@m!Ljo= zNZzHhc8{Z_t4IkSxK|2Z@hss4NID}5))*$xf$E_1VnHjpB|N%a7r1mP(bMTW=S7*r|Nq^-b3mJR5Rqi*A;90l z13v0>+fT=a^9?WaQT)Tf-|`HU4nct{k8Cvuy485n#vglh|Fro1`~QE(WYFR;euRCX z*ks{v0S}_}vOfFz|G$SNE4!*31Aog+(EPZ_RSpJ^?+l=dj=$yj-~azzI)8cen&t`c zF!*#nH$3p-^Y8!vU#|NL8<%qI4WHlqOSHV+qnG!`e$cX4k%=CRr|kYef}|gC{JjJB zF~RW%Nlz@LO)s-RX29>;aNJ)HiuF*iN*B;I9owv5IwRZ-HisFUCcx(KZ{vPh0hWfe zpIthCG(WiC{KB#Mha`VH-{1fLU&??g9$5SQn**!D4p7bJ!teUy<-0%s|2yvI1=;u* z%mg*>UfuvRr9q-+!AwxQzV`O@Y(0meEtP?Om3fJd@TW4Fz&PMbzh zyW7%Dp#CkWi470`(vKd=ZW7%rO`UEMh6fH$=nj|Yb{A;9RN~fpphT+q2V<$O;eqCQ zk^lTt4)nS>{D-yEyTe7Ae=(Mb8Xjo=1(9O_$uWTI5~TG4tp`eFy4^)UYqL#2!@pAw z@NYZN>(cNa)P-;XUuRl+8e~4GRrG%csLjjodI%&539lWXd2J-~!1Yn6XXjT?kMqxd zP=ODbRcGD`YVxtDc(fiUF?Z}PC4wudc;Nma#u;U(3`hWcjX@1|MmvtxTcuq^!TZ(cFB@Q6_!L=c%?{NPj zJkykjdvrSsd~@JtDdFvI-on5DEy0Y(XsQOPq(&j>s$VoWy}l=p53(! z-Ry?ne0tMaTzU)tx1Qv8{orbN8+4qu1A}9)h_PemrRGzNju&6KTAEDZZ@S6Iz~It( z&C&96(L=}PpZ{GtZ@czZGIk#0ce(Le0ouNTYJ2n#q|Mr93V-t^h&Id5MUNeOgBdk% zx%8SaIX3mLK`u&-Io_|99**+2UyV(S_gXTQxpev-==43(8G7Qyf_NOdg=k+gerx{6T=vtkvy|t>fxQU-b->K(G^k1@S>4?%H{%^%8&oT5uOF zl*2RmgJ<%QPTvC_jQ>0skGpjG9&yn;EEY&;Gk~yPg1rgkyIoPq*&@SIq}5 z-M&X$HC;JgIwI_I?R92!?`COnv^>Gz#Qg97e;3P(#hk8|2l<=+fQQv2AIT83`l4KCfjTRgf;cXWpy=ypBw@*ucq1=Sn9A_#YP$MU#z z-U6-R2GwMmH=ygLoO)%H94&7bJM+skxH8^$w7gyP!?hEn_MS^;D9AF9pFpt|wg(Z? za-ekH9SX7$lmI}U>h?Y1nf%E!`G`mIrB2@?@bEbCV(<26{~ax3IY3d|?R%t{#j!J% z0~RVTEy1n@#{;yZ~lyJ3DT zv2*G6-2u)iEGjPDu16qinLs;SIGD>h9gn-HfYXRiw>D_mPc6gCdB6Yv-vL^<__E{g z|NoGMSaqOkYXYcz1Z_qHttkT)%oaYKz9&47gIc8w;Q7_pAdj?O;%~VGYWsAn`*dqL zcH5}9c7yKGJi_AHe3S)r^!pnI1_sdLiYW{X46Y#Mpl%l^mRx#m>_O9TwHsVJfBJU5 z_vv(9!7tC?+$&<{(RsnK+hlt40Y=wuo%U|m4WLQ+y^Nsi$T~m0mIs#`j+U2-I30U~ z7#%II7HKvgW^%DS&EGN&)UioE?AXoI0-6t*;o2?IVtKLXlB4BW{$@o+(5jOij?Kpy z9W9TQP6e9-&TSSbxeXkzttUbE4gEu$+tPZe2y}Vs2bXS}jm-xbUAj#gLE}CJ zE}btrL-)9L{&nsA?$PPH!Ljq$Ye@O%V)?R2)6w$0M|bH7kM7z7kg;(`ez)_EmRBA5 zov*%F^b?YNO#c7>-+Y+S#qx8BSg(jQI1ojqfX+GW=4o-Xyk5MeJ9Ljnx9%B40PZWOTKBRqSASk-up!sIvyKcLl^=mrmb3E}fwVUV!}T(j9uh zrQ3H8Xk?=ZG&u&EA%nGd96QgxOavPXssBOs(pUbbnt%WQgHArIT>ZiUe_fI*jFTnASB0t#t%Td5?erHAK=>b8Ynkj;%}V?&a(=x-6krY z%|}?kH8^Ml543wO=^MyrrJG$1|GTz+D_IGtPn>&M>>(Zj&u8544PbQa=9%KyEz


l)$)7k<(Hr>Ef9T%mzwKEAafx1L2=T2gacv>I5?sYK4M1%$qn#iCM3Q1 zbgQAb4m67A(Rr-9UIa9G)_Lp2Z%`K@1kyzS)f=4$Jvu))c3$W_1B&U4k~(E^gt!zNtfPA zdB@HVF8rQ99WOs{Joum0H~GI)cg=1Nm)7GYM`2C|w;Nn{yzu<;A0i8KHpEe&c7yAV z*R#?lI5z(M_y2!Ae_Jr9UI1l7l(CNqE|#SSN}juPmM(b-+Q$a=Ufn6i1D&oj!0E%K zyLN_0ud@auQan0c4}gLjRJlOXpJT5Zqhs?iCXX4QB<|9i#pr7JucXs6`535jakM;J zd>5R>yK4_Lzhrdjd<99>FGRk8@&dSAKz7iC?$RZ_Zj4|9J4=^<%m9t#^j0!j9^-HQ z`1k*RSI`Q{W1y~S;{X5uCxCXgxL9iNH-pA)K@J7k*7*}+3uw5x^Z1JupFwu83rz|T)In_ye$9!|G%r@|JIWw2f*?5 zS`MDR9667H0@$UqWHJZHtIb*e{{MG{BxA?UZ}4RN43vzMFLb+1=5T5KPy(v+PIz>N z?s#Dh>b-S`?f@GMl777gse6afUXk$VtUX|Psy^4V^Sfi`mEJ-|PzGWEmHA-zI&vO$ zY(B#1+NtMg`K83&we^W(uZxPjW9MC$&WDcto<|%nKLt5uhHtM)yJI(-OY4i0)1V5t zv-Au|A0v%dyfxCefF5TrU zF5P}CXrqok-RT-0-E|t!)kmN*-?j6EOXoMA?kWzS&P$HX4;Vph5~a`l`OX|^{ADLS zdP5u1_}?Go*K}5GU~9mp3OaLu1Rz!jI!ib<*9$Q6gNH+16+b#QKV;-@ z0j*c_?R*JZUC|33Pc}Sh_zg5kHRtR9|32MoL1!y~>U+?B2;bJXC3>JXwg>n)lh&O7 z|Np;8+5GH(H<;LtCXR0&4!Du2P2i2Q)tf2_mrDHC-2gMI?NBV?paz zK>@bmdI*5J96 zYz^PmCnaK_Mm)$PtS=UBg3Qa!-1O|f;enSPpgL=U59F#FM^OFK3*O2Es)CM#m&JkN z*{Ac{3klF=xUJtxbUnN6Kt>6|{J#kiCf}iAHVCn9@O_&;o#4QIIq%>9|1aX!Jo}H7 zTlnP}LVbGu;px${^EzxK9F`u_SzNl^FwdU|x}Jm}K-3^a1?(|HPXX7@A35+af# zs7t^ITK57@ji7#9w+OR~q6i{Ez5^x5QzcT+aSNAj9wrx*6#15z6j=*Ok)UMZs`vnu zTliacgZeF?W>n`-!%MD)2OPuUk^2qQuxtJXN|;MQ2@|wrmLIaptMv&eY1*hDN5jbt zh-i2YjfSmoF|?!!I(P-NMgggG0M|p{REWq^*wf`Lq;v_oQ}w40Br}0FB?Ny0RRW;Y z_=K_4(x)5ja?pqjD4qFqCTsY%ek&1$rXbcAA{#)7@%sy&4dBEW1|E?Gtxtq#bnLDb z@qnerpB~8R@!5-xFaQ68(zYHfZNn1e{`Ht4u^J)Py%cmP?EC~R9$i7(8GJjBI)*rQ!k44?bo(m!bk|Bab_;?>qGmEMFqD}$zhY|s#aPbn z2x${{y9&5=mNK|>Dm!+vgFAP~6OKsrW4AbHV5*mafuWnb^<;0LJiq6~gTGikl0S8q zZ07(U+IjhT=g-!E{H+q8b*9OeI6rp!OyKZsy;L%*n|l|iQP+C1*HNC|^Wf!2;Htur zGo*Dl+v)lEAPj~16knxU| zSBgtLPyz|mnFiZ>=^sdSx9=X1r68j~ru%@#3mL%XfI@-L)yv&066Y7Wq zAV0mB{__9-Zf?-}C8+-H&;ziv<#_plOXopY3fsW(auuk10Uy5y^|$YV2F^f{4s{FE z5KtWKeF<@d4w56lp|a;MC{#dk4vxdwAR{3DhWg}16I3hcgaJ_ayzB%G^_c$u|NrGZ z(9}Z#D1lr7t$ju04sd=1t&IqCgzhQyXnqsn(JklG?Z|=BNb%@)6adW!f^Xilyv*MW zx&zFy+d;sy^Sfu~RnN}T;CV*S__0r?>jIz7Ly-QXN2l)$$NvEeKHaVhe7a+2ICdTb z>2kDm5Gj#^tMciLodMGJ;;srP;$mljlzYqoEgO;WU_9)2oJ9q+z6Im}&*LsCpaD+? z$L4>r{4HxhgPqO)bopD7K#hWK*A*_71p;vKX#SQWMg|7R>X_z#YW%IB9b%x4#y1BR z2mTgU(A1sfYyM^%5Tg@xf(q2(P)Dz5{-MU-q69v!mqq2ZuM7V+3K!)Bh z=4r2hPC0Kr5`k0=K>DE|uZS@)Fzf&ko}Kcqk3q!0IdCcPw`>FT*Fnzd;sj0JIzZ-2 zB|zs@fI|rCHc(JO-3Ja-&{U^`060ulki&FBr!OQ}+myk_K~Q6&3^d7hoJ9q+Le8T*wgYtM9K*}pzo4!T)LHT<&YA!+`h`8jO)v*Bx-RhO z_Fdp(`I5g0wBH?+Jwfpf%3395pp+s7N+}@Xr671X&w&9kp9(tX2c+XgswSdU)O5*BU-k6u%$Ze9kT&ijT3UL3gd|Nl!- z@U{ro72V(oK>_~OG8W|ZLyp}nDn6Z`UxIc|fFj^MD1pHPw$pckPp9hyP~HRuOgAW% zRd>4X;ct~-0UtuU;+q2-BYz7Q=&+A&*9q{rkwG#7l4UQ;gJzhaX&mHrAqLR?KN&W| z1I<4J_@{uEsyKGKsL1R9$@qZs)*8_6hi=~$-yGSP_*+1O{*KKRpq8;0`0y7jrJG~t zF_+HLJ#cqG(}+js{TD&<;FSu!p!>f=4>&gei{o$o@e6bm8)%|IhQXurGXInVU>AS_ z<)!{_(0)Yl`5D*$fmVdWY60*mZIBwE`A0PHTR<&E!%Lu9`JJFr z9<&wR^#&wOtOEyI>;c0|pdbL1RiHwP12m27X?c&|p;60x?Mp*%)#Fh z3~m{)PPxU)0MZIt9qI$xDdVCdu>-_;S^o=q+J`1sB}gBu1AmJ&h}T@3#LH+dOAyXPf*IzNLQ0CUyLZ$CjJ zcC4pv@-n=>3l6{OpxPf)mVs+g)bQhPtpwNot}B`?82CGLkn=3Gj06`_t}9+lkOdVX zt}8rdfWp?N^WZMf!U`Y858%?m6?8SsffuW9{QuwSx&qWvf^6=KJpd{ReJo!W+kz7% zC>q~^7d=7Z5WFO=({)ehai7jZkYX(YTCX(!G%x1>^-11>W;yzv zYkKJoH?$bCya75q6_l01>r@WzVg^?y@4$uSpKJgB+k)EM{OzCvDm}VG4;Y>Vc>|s| zz<#&949cD^2O-`E$-V3cowm{)djOnSo4!M?IS2Jlkb@O11^G#X<7$P+3~2rY8IG2K zW`V9m=yqMudH^)D*8y7O1}d^a3CIW>^B4&T6u__qS31Z+(HQu1DN?1}&u@pwC0hKBksV3sv|NoFhJ(A!4|9|mk*0cZM zHsH};|Nrj*Ef9Oj2vVT~YG;4{`v3n9&?dTe0IuG{*s6B;(TgKG>u24QLT$CwNz~C+JeP&Q?%&%%k%rO0(SX!2jR`(7+n# z9L?q*|M*)$^R@?HITm(CZvpw=Gz!Fu_TPx24v z?vgzmt=CG{cyxmg*@GN{_`>SW|NmgAZt$UquY1Am$!_pwXHY89V1{gsh1U0|=NE*7 zw$NiaSdam7V=45ij_zJiV1wpx)`DBQ;Ijxkx~GCd7_^w*r4w`>H2gS;R?x}kpuswR zLGU3{{DR=&yB8Opf-5O7$F=o8NGE@*Kd5Txb)9hB6*Lvj;L%$;!x1#6&EU}q-fIav zCGfZ_D1sS0x*a(91zl(G3%afV-=5pY3T~2a1-Zqew|2))P+QjU5~Pp#V(x8FHYnWz zigI?)32Lq1O57oXKKw0?EDQ{t;N77wMCXA z^(Cmdi|qiPf&{9MJ-V%-V_+bMyf``+WFCm=(Rm+|6klwFi@hv^k2^rmJA}ljM<@8Y z5D%yW5^jMk0SiHIPJkS4>BxBwGG}1m*!UlmT=`p~L92K=f4Fr1bm@E#N-)noW_14a z=w)eh={9g|{a14OHDq4j6?9-3XeWrP;s4iCX%jdPC{;OkYJy3efrSk_gQT_zk@dz|yQqlrSlRKbk(gSimFf?h-2c2jQ zS#=CaoQ~ZkEgY}ALHm+Y6 zec|``|NoaiL4A7I_;>eI(87GskQZo`WOFsB^>^+M=t_s?Y7x+BouD`bow}^SKkpDE zQSAgRyFd7d{e=VQfcVwm#x(0?M?gzD458DSh;jfuoJ%I5dZhHR3n&6Vxpblj zF6ginkTXyN*9mm^J7(ZcgOod1J&Ac@8fdb{@0Tb<@JuQ|3Rnb zgLV^xb1@eGyITI^Z)pLw1v+o-gA{$BRMvW+|;3sCI5xHuD*=U+bj{r~?9#wpMKgZFoNblTSb zkOdt8zx84nAK9QV*&V!Fv%k z!5gbQT5s3!cy!)+@nQP2|HoJ)7(mM`PlA?QK+W^${O8eYdufv_!^_-dj0{K<9;qdOGogfOO)hhIoc z1})8n)GsjiIfjEK7{fd}uYu0rISa0+!E3@mi>4%An0A4N+h2ip+IK=u-8<~lS-|mP z?`lSd)&r%I=o5zU@jy^<>U!oy>WpXqyIs$qDTD53goY1jAt{GPcYOq?V3q+j$V|_j z{Qv(2=T49(s=>mnFT7VUGI$(!jsVqHpkXQSYF0#g2KxsT3ZSqtKyFL?@aT4rfE}d< zJ{+hs^npirxQ9n)=>?BoQ>7E2U9z<|!0U8DC$EKGc+t0mk)hl7g-5q5CbWC|LYjRJ010_D) z0ifm5=FPttOO-sD4@f|+1b>kN-$tSeN^hMPKpSX5`!O68JUW?Q-{F@BWjO{9$iZE& z&%F3F;o1LP>Y$BD2ar-AID8>{A5VMq`abYzej|bA#226zV(Wp5pptT*Zr2B(rPi6v zFBpB2Pk6N6E(!BVKGAu=qq~~JtCt5fZNcDi@Bx!&ZwbdA&t4G@56xrX^IJWdU$J;t zekxJ-NapfrwmJXbqw_?`E069_kVl}We9MD80`i6n1A}unOULU6X%if~8D8H67izCB zz0jY4GCKoWM+9=e;el`N77ZmVp!2+t)831C(5kLO;O1lNr8;4c?%;rLP8qtg4^jp)ZktE1vx0}^@luo5tHJF`pKj31*^`pFu(>YQ7dNMX^78Z7 zf}rs5=&sfPyT1}NOTBN(v;QyiA%mQ7`z1i~t)Ld=OArBaD|py9_V8gudW94ipk1uN zpdFp8ZIE58e8(BUU8>Fm4v)?V0my-Ch}??M4-Tu&?}pz%6V@-5fi_;Z-Y$^@rDzeb zJ3%MEM+zjPow^!xZ>tINI z4t9zMXo=yk7SQI_P|zw`{+4B+&3YdEd56+G`SZ>~0>`tHJ&ix-AZSl+^J_-W<18wm zvdy#k4To>He)I4DCCS~cXFR(_R9X*|tN_nCTz|m|I)kv29dwxKX^-UFp1m^nJe%Kf zq)h;|Ynxwlyhs5R3CEp5fzRM+d9U<2XinH4B-ngJ0=z&L9EadFe4u;)Dw$E%?|DK- z{$DRdO6;KdcF@cwD6B#CftEOEj_wRZ-5p!3W1X83w2OqqxC?Eu4gBUibuCAD9=L+ zUoDU3BL?72wvckwqr3J7cs=&(>mVk0XY7mgKmY%~KK{a>=h=Tyeg~zGVB|g4>CKST zA>+|48hxCX;W+35D2C1m7LVhQ?akl~*5Do0ApI}H55d<5f%qWvU~7s!JFf(LYJLIj zfdJhC(ANqY%jotO@acBv@aX*Q+4~nAI*cFjAvR8)K&TR)~E>hSpKLj z1Lapxb5+pO@&JDe_#muK-xHwY{AxWwZQ$cCqWVDT$M*zy;p16QO6#@Z@aY5{G!CAu z1D$sQnyT~Ybms73eBjbqE#uMYEPy#@3@#5moBxQ{H$b%ebe?|^10FR2>jdd~eF9n! zyl`%USo^vitk0v>jBX6=@;rv&;I*#`=0RWb_FGCk8a-`C1#*|RzSz`9`}Gm z|A`k2V6#DoAow1D*yzz~!|~!J=s=Zj*Ap+j{=?R42SSP**nURvv5L?gHQ*xU#nwhh zj0HefZg(CAo#WH%px|-b0dzhfLz)MF-U09)xMyknIR`vC@AC^fbG+~cAC*}u812*f z0kS|7lx#rrq@DL)fKH-yHT?Ga5mFL|$8U&FZ@NNox4Vo-=kL}7CBh!v_22@V%g6G0 z3G0g~{m=e`^6(LlVR z|Lb>xMk*Zmryp}{wyWo#cEG{n7=KF_XiBQPp2M;E4ao`_zN`9SgzA~0lXNm^CGB|{LEv9BWFn~hv9+Op#3vo zy(P0>AA*|iYIvaYqGxZd2Ixkz_oqM|&(;I{{)f<($xH|3(`J-S;*fg5qt}EPRE?{E zj%n#U0;=C)nmr_#AY&*mkAhqIC$3fb+ zpz04aAb=v}z~IvPz_;`7>%)czUhhXL4nXU9(AN)mcy!zQbXRhKmUE(KFz_mZ+5;}# z861wyPdPj+zZcoMf_B2`fOac`Tb3Y?z#HTIt&2c4WAhOYmrmI6#-P>n@cyGGXh-vD zpUz*dt#3GoaW*m>Bc+jRkdD`*LtC*v<4%kMt?&ewf9L9=MTb@*EzfLC@O zC@lshBA3pSj^N32AItB>iO{u`dZ1m%;2~|0MV-DYTtJ&e{)a0-?bzVhdC0NbUBuDS zU7*`{1;jc~spHWdEa1{D<=FU`0qXuH(86L@(BbAhp!sl6V7G!+%{cC81&wUmJ9dsw@&%V} z-vu7swJUs>Ll3+J9a#m*$Ds3mKtbd>$E7oL0n`UC{xN|@IBE|-oas8pr8{&1*!{j6 zKzp%|g979`6UgZ$i7u8w0{pE$AcugW!5Ng4AuCS{Ks&q$gbwUd4zTH<$oLH^aTtI2 zSbq25clrUc$g%lXEq^O$-Bk0>|0SG`mM8i9H9-Yux9g7M44_F0mrf6fP7fK6Zr1~# zme$Ke@I*5tpL7Qcd~@Ou;BQ$4N=M+7>uPxNv-Q2r0*@aV4H08S^ab9_2O7r1o# zu6O~OqJ<~AIUqN6*Bb8#N3hyYDSif-%TXYlA{aq#G6acs6}Vl7YZ zW@+;16=iBhUU32`M_C{40nMBia5zFw^zrO;5b)?`t=i4YaNG@iypBhwn*glc((Q(< zki(;!_2Vv(eg^@M<8I*QzDMWx*q13EK}}XrJYlFW1l#8z@cJC+yvoi34&?LHL1#ZX z@(VJ64}Wq59Y6y<{mBt@42?&(n}KJigTd>mi2jfV)IFdUg=eP&$UTWr_q@#h{~z4` z_UH_^@aXh+0QECqZ5K#g13o{=qqBC8Z#SreSh~Td+sp&9$Y6y}r|%53;uX3!viZLa ze@ijwK#BIVj0_CT|J6$b3@`1_WB{=>_+1Zmy6yq3^#RSGHw%CY-fkBa0Z_^T-_zmK z`3O8K06B;Te3pTWiU8y!8a}w>3#0%4{(H>uWIP5r0*1fk7^uX7o;>5y`QPz>h)P7K zD`={s6|}C&vH8C)e~S$h1H*Aw0dR0w-s5iq^#@+EgWL)kUxAws(yrjxdDIc)HVn(R z{sUPKI;0G2`%(TD@Orf7znc6lpsTjJLwB@ZDv<{rlLMOjb?JN$GA{zuHhRSfa={LW z3-0qbgW7ezo&Ui0fWn{^)YEt6-=_DvlV6^p8N9N%40LbdUQN(ok3Xz@BPx)1|AAUr zd%$zuj-ZQBKOR=$I_D4a=D^B9@EkViPOBH-gCe_qXLK@x78`)7CH|In1_lQH^{xV)jNrrZ(k6Iz z-gATm^fYig`M4`Mre2DA)pih z8Iy;lfD#Vh&VMiUKzF@#{&U<58ZduZ4l2#S)`Cx?aNMf}D%kFUMM0x=FE4`@Gc(kJ zjx4zM@+UYtAnikNeub=^^yvH!8ruPl_`P^q2I?K!?z<(+0Ln|fI?SN6U_f1&{{aE5 z2Py>MtuJV~1=z| zm>j!7b2@NQNInCb0$vUNdNZir*#}yQv>!ygUJM>IdA$Xk9>L)c-j50nE6{|6hDSHM zPj?Zhy?X$3lp?5)2f7xp^XTh<2|l2;?)N~uL;s^5H^m2+dGX>Ws4(;CdD5xv8fQkm6PK(#b zgWIt2Ex7+1-+<1(@qnB=>(RLtbjC9D088|$sk?ClsI_w(wA_XPdizH60Y*z!t$VTz zj-6mx{-zW`&>{P$JUg%Wbe{A9Eq}V^)A`&NwASeKi-61j{~vGt^Y1^X9Aa?nJPN*W zY8NMHrNUeO4p6V%vH7nUe=F$7IgjpQ1E20<4v)^cpe*ju4ZbDVqw}**w}z+XUH;}` z0nqYJH%PrVl?QZm^CxgRhxFJEf;p`0?*Q?AC8j#-q(YV@ub1 z^s+jx1Ft(wx+}}z(G9k=L0yf@KLdC<8Yp2o?gf!Avetvz#8W{{XOB)M z@F>=0AqLQL0fqnn|9@j<3p$YC{)?3$x*1%MGL)EmbWa7Rf^M+uKw4E` zTBYGy%RpK>@4v{a1$VVU^-H%a;z|tu)=8ic=uN$WUK26+^nx$W^z6Lp+xY{0UfxZQ z-mRb#!lQRD=rReP&bgp7Q(pvw*3fl>*{ug0JCE|WD1t)~tmsARb5Nk~1?hVc37Y!k z0uKl{Ft~L0f&$pJ^(24G4A2FR&3i#-Ofn$Coxi1mi-Exha=W?*-PyPSz z*m)GRN@W+Qe(BEB08K@RfeJy;>;vnI+8WT@!uuDcAR01T>kC?k(h9l|vwJTn?x1El zBg{I)4!Xb>!z@FP8J+K6Xx4!08gNX3mY_f)8`Qix?f`20FnAnCJ=D?z5;Ztvp#l8z z9k@-#;M2VpG#L!aNxqhUi^afW8vmf>S@VxL{uU!128QFUcc7^b+|K~5^?R}C`@jFq zKiKMmx|w}?MOo_j89X3S&=AFXT=DrO!!-jKta-cn8%}+ zH6Nte@^I-T4@iXW5Cs(_Fw;K!cD{4$JPIktd@cVKTZ4n}ANb~K1<-QxmP}62SU_xv zBIH`q5$F~{b&jHL&lHhA>17Oetj=gBu^88Gv)EH~)j9#FHmyGBLA z)$pyW;WrOR7JSLh%)kI2pXdhXS5Ujth#lkxX8x9BZV-c!zhwW96`<|I{H@=>d3!3zwJw|=oH|`raX^zfsQtp_##yq016+SY@-e6= zgeG*zO#q;h7#0WMf!8NzVD9hS$jHC|KH(pfUc0%${`Bm;0lHa20vbY%4;d5~7+%QV zfN5&g0k5)vg%N)X=&~=cj^=+n{4L)=dz|1VL3Ka84%6Lo4YXJ1<*)z$CxGrlm1qRl zc>L|(!Gl!J93Gv={s(A)D?mp6{)fzFd(8VI4g<~GQQ$bDN0H5Ag(5AI8=wgu;{X1(!tb& z2seP2ui$n=VCPS$J6~)$4mt=P?h5appk3zQ_*-m$|NrmWt)l{I2=M*{jcy1DE&f9rGb z6c|`DELT2%5qJ{T`~y{Pj-5wevVsp10k>OTC@%xm=+G7@8@L(O1Bz|E}frVC~ktKijF&A_d!}Xpt2ow zpB89Wp)2SXGmv7B&U-IDZiK1tYy+1D;7gF87I;{*@wZ$68v|}v@wYAko$|jA>?6>4 z-rkv@E@&}~4=KLoAw?;uy#&p-u7)QKPr|b-q(uSCxsZYtnt!1gC*VcZ5#*fHBK`gU z|Cc=9z(q8uUg+KmYDGa+gR2K{8w#{fU12{ch#}|5LMmcN%c^xfs9XZIn9hKf-*!VX zK<6zF&Z31f0 zfs)M2$G<^?e&F=t0a>rv;d{`dbMJ+JAkB>YeJj~PBdZ{_P3zbvg%s>uT`PvF;L19WJ^DJ$qdlK{wg_rlzhY1=lJnC!tm%n-TH_%=)XzyzcXgd^W z#vazN1Z`-9&X<9DU*LPa-b2&Su2-Pm7s%}9pRxR{K_G+nwu3T@8|c~x(7i&xz#Ck? zJM!=6^68ukid|^4?#13W|NcX#TR<0qeD~<(E!)k_0KO*|eA&*6-QPgdxut6$7v}hM zgS8u;^z6LRJr$G`pgBX8Apz8VEaLF#oC=CSTTla_v-JjOXlTm87orznNwoC}sI3Z( zHJ@&<;u1N>?jnxP56ut$Hvix$5op{C(g!kuzqJ`OEC{_boxk-pXzQmXIF}SFcqCu& zV4Mo_xkoqTzB9{z#ay6k+&jTsk8ZFRVC~R}-~RsxjXyv_??uzgfB#=rgWLz&2kiqo zfDC*`#fwPrvh2N}^6`c5t^faD{`>gHq&Pk9`59YzA1mC;^RwKwbFY#lQcM zo&+cdg44>&HK5BodPP4-gZJv?!Oao@nYHNyXoBJX3-&djvIJZKft!RcKY~sjfuvdF zlEbyTL`C8S=V6#XIz&E#GQK!}%QMh~TlZAZ1xujQ>sqgY_?_QDH)TLdUL(+2jb7H+ zd7y?iYu#B{2L6_QaPbXpj>FpAt<@m0UeVio!0z1_1oL~!lK=l-#(~r7EKpkI`3O3) z_oYiWxP0;L{Nn>@5xI801Kl!mj=%p2=yEG30n1}0${xudJ$h>oLNb5{HC&Kw|39=)X}!1cKTXncgB^Z3hNuq!@*T+#Lc z>N|u z>d^^a4-G1q`~D)zFPF}>puFk|?k_?I3ZUcG&>RI%EueFiUfe$bIPwhE#PB}z&C0)Kls<_hSW6UZ@CLvlsl&tArW4ksJr`O z9#r`;A4rMt@+GJ_Z1|0TTkS!^lP@QO&IapcoiQ66f;&%vLQo8}<_!{p@I=f666+Ne zgZS*HKg?(I7ykeM@+qiy*m?Bjjklmo2fnkWdoQdt`oAQ+`2?d!C%BQ?>BRD~>nk|3 zy_9+P|G(qj-=IV%2xd+KF{ix!|KD+!5s1kK8mjDu41;xp+pHdzO#H2&pnACiVHGGa zomgJZ{t8aGu7=-Uf{uU&mEXM%93H)48r>YNC;40TLDgLI0nkkirEg#6f*i4T0>~OA zkWsxA(8D%%LR!1`c7f;@4lBTJZ9Tx>Y5n#8|Cit1K#G?Y%m4p>DgE{T{}=yK&=$-h zolgiJ4?gYD{3fHbc8O=Vhk!?C=>*8U9rWBE*ABEnQIAgF29Ito&>0DkMPa@>z;k!; ztPBkN?LR>a7_iLUE%C67ox$H+4BDRFT%#hu$ltOI)aC{a`PR3js5>QeAbE>RHy zowi_Eq9VZG0;*y`iw7X{YcEP4gVL1;vn%L8iv!)ROB^ka@wX_jfkr_g*IBr9g6IDt ze7bWFICdTfb@en@Kr?3xK!vko^FQ5EVV}<29gg5Z^5d=xK*R896OOxr245LGK_jdu zSs567JDeDe=Y{uaIYK9c*4W-rU$?CL61(~ z6`+|d(DAEYFBtPAIU(Oab*CnssTky>;eAu2fKY&bo%LlMo&QdJUzNg z8@{=5D3s`Wbo+K#I>zw#$by{KJrR`me0no8JV1L1E_w31T=i(SImN)=0;&W(x_u`c zX9OLPf7}s#%h7R1@al<9M;VW9@FqrR=Jn{50Iy^RrF);w*RUY&4xQ0my27LLCdivF zobN-tXLzZ(b_GLcfDV5r=ybuC(%^w~hU2b~asm>q&*0-j;PVdow;6y=w+Hq8MHu;8 zDnS)#ckPUq@xMWBLumiZ^#G`4Yk9+i-|5)PFt7}$-`foiQP9W~G(=yngd_&Y_@YO5 zX-9WhOs|UoXqLJEBCNf8+;s(LW86#7!L%TM9d}&;M1bt}8&TT%XR@FU7$_ zEU^bXKv|~Sb%IN0g^owJYlla7=?w5qgcTkyD$oA^-+2ghRG$t1wFc5 zCv*l#_;h+GfHTDeP+o?vigD~_>~xcP3A&sG64EaG+XOv&9U1vsKbpaaRV=(2wJBSMWL@-_BCV&3_rUYJcHvcTIT36)K?akuY_>h4?fPud?>ObhH zi+}vh%lQ}>K+z(=2=Y9C%PVfsf=19GLCC)M>2}@W0$QkX5VR-;Rs&rH%~m9T@MS#a zYx%>M-}ytY<4us2FzuJGwJMq4Hfp720F=n+;vEcnL2#NRTT8+6(HKmI1r)k0|#K#>e8XAKX$-V9pq z@{NJ1H1K6EH+V`0G`Ak<5Bt*0Z_X@CCCMPekprBQ3F@;IoD2+x|6%n#*deV4N`ye(gB&u)&cWY0ksCBA zQ@g{*@_(@i#14>3h2|dt{4Kjdao1V8qnr8L5dr>I5AZm3=?+lfzia{(pYZiVV0q9v z(qOr?fB*llVBv3#1GNZ1z6b>g2=KRFg$cNT1eo|+mw@J&Kq`zu0uKDGvtcSg>ugst zFfcLjx2}gN;sY;G1RV|zIzq_a!?Hqyzv&@N$A`b*!zmgVAm?3!T>@JD`0WTIe`_^N z)v3S#|9?Be!ruzIPYtYQ2WZL{7QdkU(SHLue}LEgfYJx((h~5^B`@1RZ3=KZ0wm54 zI;{vqyv#!p2b~MC14O(GgNuU#AEXDgd+Hkl2S50p6wo2;ovso)K!Pu|Kx#qf`!0Z~ z>t<+vz|s7JQSw0Z1A*oP0*-LC|KQ`gAho<8cYuhO&*0)dFn_(+bsf~Os@(xwFbj%t z{$^14pv1Z|e`_ZP0|U6^18p%B@#u!OT>gR61y}+k1})&CL2ZA_|NPCrL1zW^ny{yV z!v&PXeJ%g-H$P!T7{=eS7o?~Yl#gHu8Ip~Vi%dgM^B<&j0Z1$3F_2NMEg^- zboonXxc@x5Sv@C$j_Pq`0QJQ@J6$Ef*4BV6f|hw;hlAYQ{KKBVY{-%g&d;&)5|K^ z1MYrX?FMzfE!jZX7L*GdK)2B_^0&SM9ef4S1e*Wz=nh=~Zi|4Mo&S75dl)n)L+rfp z3$&!_fTN|W1b>T+7-(UMD`@hC0hF#Fg^4S}%f+D6QF=ix1BDLwbTQC5VW7=QGhWD@ z2aV>q&gk}?VEY1e-Di6$Hv6C|=ZvoQ@ z^0Fb!eM;X!@dS$IM3_Q;m_kq}aKNni2^p`4mUW=|>-Pp32fdG96$RI>fqMAFuM5fKeXlf^4d?>xIf5AB8;UsJe!X(zT6MKEd^{o zq;7ig_X0xG!k^&v4Xz9?|9=HJ3ak!P_JEpo%HU(0Aj{HAklQn$77}Qy4Xk1Q5H!4- z{K1nER1x^_JAVfi^`I6Y*yT&XCWHHpwL7|lSwMoGo&UZa5-7=U{=v=Pq7QDL5n&Ig zc=JKF$D^C|e-~(HfvW<@)R$I}`O41kFOz=!{|_qTK+ZE9&i2;1iGzZ%7NzpYW!0UaU9}rF$J$M z3I%N}+Tqb1B=F6NorAwc5fqBGGYm>NS`P5Hm_TC=)^Z2!DFC+xz`M<7crb!?6G0kB zpc}CuUIbeS8h303ohl7VOW<}9IG6CZf{ZY{1Tw_=kjD(elODY??BJWNVt0TJU+Z?= z0@_A<*wyd}C~NVHxgG#TGpIA^*y*aV1H^FcOx1DZ7j%_)sRf>nsNDfxzwQ_YI^@i! z^Or~G?*K@JUbX-6k03vc`cnrjCqg!Z$LCgaPepo#9<8EX8k zX`uAb4I5u9)kS#QgVA*d=-`mr9WUL$Bcxy>Twq3k&d!H~HY>WD`(p8Qf%cJnjl^54?Q;5q9R?bRcs(xC;dG3pfpcW|(2V=WksN zT9b6i$Fg<@KPcusm|b^(R&jfF9%=q*%irPy>Yo3!<8R&Z>Hq(5a7_04ZUIGO7U+Pl z9X_4Ez;XG)4zy}4!Z8vwQfCO7MRna`_zk=b8Wc*P^x@c9ssm0qovs?-bOK6A;PT@a zXfm_g72aC_g$AhY(aoR=ni&SQpunN@^5O?bxPig|91xzzT|vi-GQ8Z5O$M})?d4o7 zhC6`HL}yTCSirylp1p?jVG#CYet-optR>d`qq>`!zhyo%J2d8{S z{?;Z~lYsyI|NqS|EkLb#(0pwhXx~jY^FGkvlqv%QgFxpY{??t~zA_?-p63FM2K<1h zPfyT6+O7;Q55EKFkUg!u3@^Jtqi)At8Bm-BN_8*if>oi0ALwv2Q1~e@fO-rvV1K+U z0Zq;wcVz&TT7une5k7{^i0>Mpb0{FF~#4S#RauNzvTp|@&Z+$jc@<|?{;PZ z9aPOyk_@UDL2W9~eM2tbz6i8I1}-*0E_cBg8na}CxauDyb{JiEH2?jK!V_W&jj)!dZd8{6JNdn%|CXtUTnseBThpkOPY8YUQPlv zmZ0UFIcNZ@^E<@p@Zt_+8`#~4!F3+Ez5@kED`?^XM!@-^K@;n{PP}-oXWOCFqz!-w7aBzqok})byADa_-A@kb$Bd zu7*znKq&@P=K6I0%3|~codH(515|r<-hXlI804}R{*K+R|AWt+IF{zfpLYi2ZCJ?* zDs{nCG`QGJ^#`~+hzx7>SLEWXz!itAxF!D{H=39H6=WsmD(fRVE7Hx-03x8?=0N{>VbeZj=r1) zcL_LD)Q=)U~fa z(EQV!zm1y>GK>XjHI@iKG=k1VPdWmg5(hO?89#Vf9xr3{vHV{o407a zDn*dd3e7)iOYfpa1ApsAR#0&ON&uk71StK1va?UG3A&hhBb0~Yj=R`0~Ni7mwezMe5?i%!u%a{z zatf%TngMekBxU$Q4|4A;-2t+&`PDP9r-f5-8+9EJ^`cY=%s=Xw5Za^T`v5}tKI86xoDzyB}6@efTU;8fiC z4}2*4i^Wx-rE~vlBKTWOz$Z|K?tr9DkSb7hj+r_^GB1UnfdU7m#sGDLUTnStPU@X+ zzWo3H^6S(8|960oPk#LrS~~D=;|IGj4%V0K1XUZLQIeGhK=s9pmoDJGEM)ZxC_X{? zp55@k%gx}1IB3RkN3X|KkIvc&%@6Tk>c#nPa1 z2iBV`=7nSckPQl*2SG_6w2mU4h*XF>f4P_5+w9)pGS6F&3T zx$Xc}U1|K+TxU22foira#up3+{{MH3js`VZzB~bq?QQ`n1SbqijJzHr_D@Bhnlph0eMu!B7hK9n7FzXCWXf|4OL@qvym zgO}i7=Yv8BlFH%bAKbM*oyT81+xPGPOBK+-KsR#A=)C`8&Mk1V=y?1Xlx(1R>ilEK zH3YRX44}dfbPIv247mK*`WTvA9Qn7&L8@^6mfzrG<)O{E7ghTpA@lMH=vEx?x!r9b z!@(YV5d)KT292A8#Xt^p1v#)A+X zM`tf+ABRt8D`R)`{W6fWhD*_p52ZD-yAqt_*tG zgPFetbOT!R4;KDbMPbMuIS$`$JD<*X-PID{b*Kid2Pz~zW`LJy|M%<-VP$x6d?QGI zLbm!bURD<^w#e3>HOc}y33>2bvJ0KUnh8-^NSCV9pC&d?Sc#p%^nhr zkbOsgq(F7`CS{;QM7`mM$JVCDh z=g|#baNXg$>xClNmHZu%prMoIql}*2Au1f*P9iRrFX~r%cJq037YcZES8`Z836yla z5Z?3e|Le{P@L(+#@a(n&9hY!x!~g#;`M_Ru0R@nwK(_=RD5e(F2a}5EX%MPTWlVt(*!VwdZ^~ z|G#*?^Z)CZ>N5RgrfNrkj0L6TFwFIbL z(s}5AfPrHt*pK|6^(M&|!2QejK8(L!w6BNxza`}F|Nk%FfltK&jSnz*^zH>UAq)?I z%-RX6lRO}MIea?*efC)G+3m>TaU9$P2aOr;2lehDsT6A06n;<~xu|gXCcgx4g!1k+ z(MM5H#LvLsk^I4@^FL%)s}JKlAI5(#f;WKjW-n;HG1yby{E#&2(Fs1u9()|cw+7Ip zA|rpxVj)m|HI?iJwIH6qSiTpo7Zj%g{0s~)oD1P%;QQvm$3%OA_BDS54VLzru2KQr zWApq))?Qd(bX?~Hh4ur`Sq+`XKnGmb&4G#ptyXcP2{FK}P9ih$L-HhA=kdLXL<1?>wPgt|Appg{EP@aPp~ zhp6-HJnhlh3%cnR>@XiteS%QG2c#adA;Y70E9mM%!~Y(gTX+2X|NjN+YPk2Nf|czB z+2+wJ`k)i+vlmD9z!j8$6!i9HfLqE_L9PccdIR6;-FpCJ+V)j&#qJ=*kiCImH+l4m zu7DcJh;W)BNL4R*rAN=2w@g{Xpthd5NhmfdhKrhpXmx=w)k&l%z# zNMZmP{z4pKnmG?N8Txeo+s~^2I`;r6r%Qs2g61tyD1b87uQlL|0OESI9suWnl}gaO z)myv32bN%KJ3#w-TxYzHL^$mvct#r>M;_f3sO&#ZI^fo`OaRdux%GxBGNH121m}6~u9saFx5c7#MbfjNJtyd^(@` zbpD6zdVFDlP&Jhc8at`K>V)BratA7pEHt%h&wf6x`A_MlzitS=^7 zgZ9Y&f6-|Tn!y0?CG+fb)qrfQa#V!)#ix5OC`o(tg0~%lGYTYvI-dy6<+42@t!MPf~Z9c`)86W^{u)J_aIO;M71H*n$6C9c>S7aeu z08Ww{Ku29bwgrObS5RuF)?E^yYDDj4@%R7#K^3M?Z|<)BkW}*yr7A4@3Q_>BEPp~P z%Mx1#6eXYyo8a2=y$|C*AI5htv{!=aen`bH%nQlKFT%1wf{;ea21#fVgyfcHQ09T( zmI_Y6poj!58hTM*25QFfx7Nb6Kr7giAWwu2(1~Lp9UvOo7I@(X)#xG#%Ie_lc96WV zQxhEb&vt2m_xD4U$x4D+XrOdBcL_9&aDjA!D_IX{>$C|Z)!hr)&jYTo5AnAINJ1k5 zrbaFk)CUE(Fu~~p)CA&hQ3sn9An}q3JPQwQ$GCLoX}Gq&t>Evj(`o%*BJJ4xm(j8L z>VHt*E5@}qhm{euAFoeT5_IK4zOw{4`SEK)8p_i(pFxVUdyJrUkojOyP_N-Qc(IjZ zvx`auqsMUv1yCEvr89$rU(i9|Wy{z9|0i_28Fc$e`1DrGxOC^~beCyB5^3{K#yS?C z?rH_FJ&;rm*>dzkOA~ZT)29N<`M&c%W+U@2Jim)QF^WUCmVl%DF*|C;Q>(pqFaRBu``5`$D{cGi;v}t z(s#a{d@pAr_APcpwva>4b@Ayu^@3{~EO&QI`}F@mG33 zf)|&84^dgW7-o6P*U$g|zZCfdS}Ebez_6czfsx^b-4d`XKu&1A3fdz)!Eq;ej}>U% z6x_bpgUNmGeG3!iqBAU;QbS@w|%<8U*b zPPP|W>7YOq0d=Av&3T89pi+a)rPG7Qv)PV;zXi0o-=}*osGIE5yB2gXl20e7p9$_V z{(AB9A}mZgSU-a1ogRAhg14N5PXv0o3p7Us+J7G?1DeUnq3=YpuwwH#VVC!UDy7MF)K{su+ z%wlC=s8?|5d;#7K%*o$k0a}~X{FjBlMGv$O400}_<4(}IOfN+~K;zA)8$65vb6zj_ z_IHYPRx1#KlQS8(Zk<;TPgxbVBaFuXLO+eM56 zbh1RR$N$z7{H?Jd?ahDx^S1^wGca_XXnYtN8X9`>g(`?*JkfdZ;0q>IV`F3E#)lx1 z@nGkPgD+VcAM*3_^Q(dgh#HQ@hyNM=GpK?H#uNP8PaJ$9z<9!?SLcF9^C1?G=3fe> zZ9b551{^`QwY&jsdg}cCqIWK+WBUI^>)ikU!ClKUi~j$IS_;AU&*;nz{n_3s{#@&>#znTsj z0dFr$KwCz7Yc;?-EFo=jNR0|^i+Xf|`%^E@0iSE+)A=6SzVhkK-SA@4Y|scHxbB7@H1*pBVk+|ZiM2=bVU8Cmv;Y71w7gsT z9(po>Yv)h!9E>fe7~&^2YCThbuA+CeNxJ?7YX(ADtmOV4*ue>I#@aO`ws zft*y(8S@&n3wDX>%zsyRS+B0mHlob~-h%UnoZV*(nh>-_(sW!C@yFAu#1nF@{< zXbQkqp3VdX^=wW%Dzv&BT71&Pjn#CWl{{Md=lK@WCo}G}!<6H0q7>|l?=L5q_ zpz}&Qk3&yeD(-_OJ^t4HuRxCRmH{97)(4uTZuVzkeAxnuf7fnJa29asu9Ip+W0TskW_JUTgCIx~1cnFBO6o;JY;RI-2@fiDCVK(|7G+2BI> z&>xUf9W@Luf!ifK;+;GKpyJKP@>S`Fm#N=DA;;j@=*a?#z?Y^FK6LyKQXzsmqTS$u zz!z7*$Hg7=>}G3DkofoV=j;Ffn_nY}~{Xyx4{Fg=6z^#!hDr$L9Zh{4M;T`0Bjs()rWz@>9pw zqb14*r3t*7xmNr|9|-kwE4Z; zNyL?Z8>pF6VhRlfNRYrvP-sBMF8%i(8Ya;GDm=VB84p0i859`&?E;{#Zu3tC{x(qm z6Ba1^?Mk3=uwK#M+QP zJi5W>9)Oz?;8S^gx-%j?IxqNW{(!bSKpDSJmLIew!lM&hB7$%I;N=AkU4k2@kXj8q z&d>=S`Fo)W-s1pP3>^$~>Fxz709PtMctE2^plr?Gw-!8@=A$C;&5@IlzhyEX14Hux zM#oNff#x4f{4Jh5pq6^Rh-Y`b0%$&@2efAlR3tRNVDy;b(#g{f&fhMOb4EaI`WLlP z(4s))2dIn$7ha7XETC?jOJ|0FXD7JX4(dQAFut_=0xLn>qCm--?WGP#1f=-Il<5!= zsV|_U3U0fC6T?Q(ns`X;&j1bNz@r_WN{=H&y$>W7QBpu9=#(!=b~U`@X?Y$k5!mv# zn1EKCHvd)RZvh>?2CHEj_*=@s6NBKS^YYqXNF)mE2d#_w=D^ax-+KJ-|Nk$8{`~*H zAGF){#f51QKZJo-_9FaX04m5qr+0sIU{~O80iAc~2=S632WV_+EvU+a7G6>hFa%gd7Qr)boD!|fdP*|Xr=`(w&nxP97Fnyu-Y8%({ntK9Q+?S;-Hbl z$-&>cl!t+#xmtpezi&2ZG`QPY!KK?`KWIYSrE@PR`@Xml4vrU4-fH;+KGCLv2b`_e zLVA{<1k1s|@NypLu%exy(=ZKBLJvssfE?uI2s)|kv2W)Umrn2*tgfBs9edrcH~;YG zZw~@puhYx>S{=Nd6?$5(Yv)hT&O6YlxD7BtcW>&6C1ctEN=P;+h3W6-&4-}qY|gS(th|3V`N z8pYtaoew%K2)ecqw7wIbFCm9PKy^5F9!D(r;co@sKLp8>9-xCi&VvsAfQ~A>Tm)Xz z=L~A)@$k2N{sD1A>nl)Gt?}u9`Tzf4g7>3?52ayQ0qqC7g3j8w4jLb7e)|1oFsPF0 z2Ajdc-?AQN26#h4F<}v5b`|y zElN=NR!OiaPygHh|L@p%7SwWl30`IgIZ$dM_+$bGL~y=%I2U{fi3c+{o4o|BB?J$O zfo>r8>@F1W?5^bS?RHTC-I~MS?DXybf7oT|{H=dMd#*b_d1(Ifu)M(Es|q@Ws`Df0 zx=ql*K*xO`MfwZ9`Jn0@T#AEp%U{rdt)(LefAeP$3p9ZZI%>NYJYxary}sz03@R@m zttj{qHh;@vP{IApQG&6A1vK>zn%?#73>5I}bm!o2%?9l}?PdeFoS`+}3n5X^anXms z_F96@}`s(1S z@Fh43!0jRy7XFr7pmtm1(;xRiu0G2Ftx=|OG0io-AW=x?Y7KbrDzwLa?8QW| z6hy;B&@#(zHqeB{%T1t_$}>EAc@L=YGk9cQVDn)7)Gaa*v{m#D=n#=!UiQHM|3P;) zwSulI@v!8TZvbtL-4B)&^|F=)9V2JV2Ab1(4o%4(-6Dq!54_+D2le^E>G|aZNIRho1gy!Cn_z_=vQY2s3ik-Z2vuIGoZPG zg@L~_6x4tLrLh;qfgq2wy^I7c6yDhlGQIr{Xl$tm#H;}^5shsAmf4`h1sU6c7Lh)k zm(Uv9A7+9^a=@7lTARL10X2pp=2(E1aI`Rhx|k4iU`+?`5rRI@+_`2ZC`UttAjki` zJp29s{}mkkt>K{aHl~2O63u5BUn+vvh@WM8De>$7{}-lG&;ElN8?OA@G{E*80k_M* zV;u3&eFtCsn^|}n3=h1}2}Q*4y1Sr~ z6kNK44*v50`Tsw-WAyUTCs@PttUt60yaUepkgn@5aDo8U2QRPO0`-`{?I+*P2jERR z&`v-AynY5Z!=cr57UPSo8Q_6}h$ztTK*!`;(Dd=m0kr?wBe@mS1OY94i>aCI37w4q zZ-eFnot)HcbBLj&8QfZVVdxJ|LEvN;`T}&sB1mgz0MAR-mykUEvIbOlFusMhz&(?{ zdK`Sl^rAuAP*nh} z95_CJjx>hVBfsAN|NrvBPf!~dG{yC%8|=uJMK3@i0t^f3cB<|>}3;Z zr~ous1a;^OGk(x`xVr+_Zp6%%j`E!z0;41X|H__JYPkJs1yy55$6)U%>~eXuxb}&kF31 ze9)LOtkDWSrPZVJILu8U{LlV3gWHOrD+3@-JH+3o4b}r5kA+Ox8h(T7fSwcT*=xh} zLYx~k5(Lh)F5O^zJvxv3c8dFS{`3GHOL`5`2?P~XFRGhC)i2mY!;_xJ-9dX489Y1v zL5TpQ094_=Jn|0|b~Y+6zg&kk1`qo{b3)cDkOAQKy$58l2+|$}H4s64JW%VfQ>+_w zrxv(V?AXbo@}dE`z643KykdmZFH9hH|M*Fo#MFG811>{A6VIDY=(+Z0eq3gW#q0-b`s6Lh@LOZDrZ zWu88r|3UTpi%qTn|G$)d3MyPYJH@6ti{s*mq%4r1^0RLa4w1V7e_adehWCv)x?htrI>cd^&TD#XY`acf?NJBRy`-A#Z z9iVL5n9A}0_W%DcLFZpVCKf>Bw*@ajNwiw#WiqJHgBOY~c&GgP|56QfE^Tj!O2*4K z;Nuwo`*haMcxn3*6ffY21tp4?e;}=p7g18r{=YPR0vi2;-Om&580OPkdjPzq)E9I$ zPB8eA9t)4o(jDN-Ogmjype-ncE++*AQ|47r0d@qml1z?~fq{R@0T;{19^JkN9Qdak zbKv+;%I4VohqqMMvy%^P87cVGu;wEcE}aihmXU(yA3^udf;IuXu;K=nP9MKy+R+xbN*lfvB+70%ZqX6hC0CCv7OXoq***PAq z2SE2_`yTM=Efjb?3A`Wszzg^0|Nmct%C8r^!YBtmLhmOEcMOBv&({3L0xjGfVfWmC z4!B_O=&aoVzU0QW9O;r93(&D)y{-owJFk0oe(~%)3tk%Ky22Ny{Ur zzy*=-j_%Mc9-WLZRn5P6OM}4|L&pv{LcwSMCw%6Y`xWX5YBYeaAq8gzu0fi$l%l63t9>YIsn_Jw>l$@|NTji&YS##&JrHIr5zrDR8Fbb?Xf*|>&T~<*08t?-2_BtWLCYRJjyHpj z69CKeCmr(W+zYYt8uMpI{`?pf51&qN4WG_z1E0=h4}QUD4(P0!Pp5Cki&vmk&)r}h z9^GK$S`SoccyxX=yyVgO4;;`hKvOnBe?c=s6@1;!5v>R6&AWqR3=h0!?hcM|>NRILd1L-WJIuA`$e%Eq;xd|)f>khKocGep50=g;=MaKru9;Vl1Fzp$X6b% zCq4OH&U&#Vc~Z zK#?Qv(ajoAAj{yNaFv2|^-K>@%;cnYixo}y8G&ntg?r7u}WCvf-$S>$G-~qZB zxzk+%biX1fy>yx%hNmYmzntYTZ2k$t=Ro80pzyodQT2Dbqw4Q=N7di$j;g=;A1i;m zfa$aU9=*Ih68sFE-#n68HbSmp>I_#v@o#6i3L0PF^*w%hhR$%2*Vn+b1o)oH&TyI6 z$N1$LK<@YG{DI(0jvhyjZ z(DUs43fk1r&EV1b+oyZO3{ZWtjU99x189k{_g_SzpV%O{SJY4-5loM z#@uqC^d{)|QO##QozGunUt$EULw5Xs6?}yGu@_!Tp8bcYYK9hd$oF*`etUfq>4G_M z`T(6N80-PQ5}f0O^`tldJv#4ubRK(gpb^Bp;Q_wb9$HU?8XnjQ+B*(9h7ellcmDqD zvHHbg-e;h@o?c|Lf#_o|f*C>dkr%%?p8a>V{93}9*4RCRfq|ic!O`*voX5cE(am}R zlybWnx*J$P2kJV5Iwt>*JA>8~{_k{F@aVj8+&M&^fq?GnS;fCX9W&y_J_K*9`NZE-7Le;(D}i)^D-zNLV`O_d-U=ymEmXb z;dj00(aSp(!o1n}vGbY-<2j#R7Jd)Lf33Gm5}IEz_VNfgTAnO&b!6`(RL z!K3*gBUrZiJtP0Vu>UUn+Za19G{16e{v}y<)y3jK$qgIb5+0lQQV&@E;NK?Ld7=5i z{pJ^rHj-tU{QC|yzc6V2!C5BP@JqLZwc%HMsSMcI*8inTc7XEEVetGSNbL2Yv7WT{F{Zp|F}MA zu`$&AMaQ@pUKBw!{{qeabwXvHM{zT}h=9s~x>6v`EnUc((?FU{p-T25YgX;#Vt649 zk!cCjfA)VzJ?KVQ6Hs~A{ExrRyZN6ef4?oru;goSpM-7YVtDZsTp9DXTm&7N0O~nA zb_cUWJ908R#yA>YjCE8z=xBJ+wbL6^k$_542A||>9-uAmwv17rMbDRBEQXlS3R-E{ z{F{frZwlxvm*4y)ws4!CMRGH|s0OPmX#j6^e?4Od=#-Dw6XEq8IElP&g!3K2(+V#^ z#{+@W%?^<5FG1(gLfT>A{0^3e@$gWJo4=P?FhOT^C>vMg7iQg_lq9M*TCZ@&U)bF=h15`vxSS{ z#p*wxW(bjza?7t*?-s058yf9iMr4JJ8B+q?Jf8ZUO0Boqt{k9f}6pm)Ah`YD)41Su4h17 zQ4>H4za3%XZ#4q3n$IwK_1aj2uEOef0!18%fW)h-;Q?2}|1O|d0X5`7M^f4T_{ak> z^0O#t`MT>FkcF@Jg42m(^FKcR{wq2V$DPpuIqsvY;Q>cbP5%ESsK*9Y2aa!0X#?#u zLCPG^G<@qf{=N%3&;I))fAj3T3Jw>a&QCA6e?Nt+RaOFBC$0IwvGZ{A4|e{($)NL4 zntyZF`}!uI_USeC2?yniXFi>$d^*4TcAk3C^b3+u92prHTr_Wc_uBCIbbj0g8hGlw z_re4;u*&HQzW)_kuR6xZ9-iRX{9BB_-$Uowf3UHlVo1hbf1w94vvnJ2)k^bkLH<4m z&}DFvI`H)Fll%dEf#VX8YkPTT6@gs!3A~-+{EPQL!A@#D&&a?4Hr{kv7)Tz;)n}ke zyg>a~kYAoTHveYj?@s|0dA+8(_8|4&Ux3ar1eJH8pv~JL1ufQK3r+pO2A=ZieCFGE z9@Ojyonr`684Qs(0n7gaJLvn1IH+xH5Yul4flP-**q;?rx&1l9>EH$ld# zKy{XYb&9?Z1?dD?>(hDt1v^x-9}-8b^|C&_qK{FOJoy0$iZ`GFwO8~EisW&KWXnOV zXaC_*cX1bJf~fP}i%QU`HkeTdNwlgVzt${%Fom>3v3 z@4e818u#+!U(o$Hy{3X-w|sx$2zEtjfn)P;_7Z+a(3}UuOVCYxpz_^u7pO!3@(Fm> z&IOjjOnf>|g15tW-g|KgG|J5B%J6a~sGx(@-^li}fbCxeQ&$MG-?#G@M2QF}v4RR~ z(E0Q*C4La2;P!zPfr`G)doPk;iZmgLApIwZVKyMcK;?1gy%$z6b&MeUUdC#I(k_D| zc!c%kEsSvbxC>Omciwx!1k-mCa!4z(`QV%ds>V9+y|@LMSOEEZ;h+EiC&0=}*!W0< zM`tbiwHGhir+oSk9?4|@9oyI<0U9*zJnV7sHGlKtdeAvMO#H2&kyPK_Q~{6H+x&f? zbNYRHOILVyv#9uVe)nuX!r{^By5hyXXeNdR3ti97{AAn(Y>}xZ+RFzIzwl?&^*rwI^1N&K3kAP zr|Slf&ciQC{zHqgZcv8N`~hAQbl;=%&+kms1GLa zBC_@Se^4bB*!k}N1ju?={(Vl29?ge99%u!X6pqK(RY0Y9>n4zu-K8r)<9vc4Yz&~# zY6YcP&u&*p;9dr)IQW9U`9Zyh=8Y0jkIuuO^b8u>O!xq5-@axn{RBGV{y1pK*nhNP zB+y|j9?eH0kcv!5zH6ue9q0@?2j=w@ka@?L7(9Bb7+pGDr+9Rh&UnFcmXX1w+jR=) z;CxV2!Cc$|YH2v~Z*vFvr3G|84#Yeg-BRXbZ1Mct+`uj5mII}4Un+waip2_mQ$(q( zZ+EH!$bbExz)N*p1zu`{cTt1VIe4gcLd&!NP=A+Pf~B4QBY*$@2OpgSu8$z`@WS*Y z6T?f;DqN7eUV<*`eWCRK>3>9j$T7^b^P6L+Bjir>Zdn#jIZ)u1YWwu68V7PS!16cv z&@NEFl(~3rqUc@Gq&e3qcj*I^Jd`5-%k z2mD@cPzMU^4|sivW`7UJ+}7J*`!@w3*$>*+1+u@n7i@nDNFB`n`=Bd@I+5(}vw++G z_yB(ULxMfJW#vGowcajO_32f04B%!+n*d#P^!$Y|#J)f7NdC24un$yyfHK|fZm_$bxPj8sfs*GQ zy}lQAf%%S;)3!Dq?YTXZS|08v$(@pef*rJ4r-a3$+g$<_u}TdVdZla)6^#1e!79+$ z2{<2|eEF93{eN(|;?Zl%oXo}WLZ%AjOZXTPIQ$($e0tL*f<3-NjrHkHm+)iCOk5pVvt9w;>imk*$_fx)BKc5xCH!;3wYj0~@jdvvoN zjs(r5Kl11`z3&5y^Y`!Gf>Oi^xYV*|u&&LOccA3p0C5laV3OuH5+0qkH(vbO^zOe$ zZ|x0_PS+bR=7upr613|LkLC&i#!_y_1{)P!{uU8N&?>!spe7l})uC-4A+C<^JpMwX z^&@DF@&Ry|bl!jA@$cz>&}qGlPtNzCkup$!MT8eW1s=0q#RG5j6p zK;|ERF}(%VLEHa=9n_isAG91Km%*|5Z#;hs=xV3V`!BTKJ^k;}`Tj-IS5S5Wg~PEI zY(nq;L+T}P>keGVgG#h{%RYiegd`A-^yp?y1ZO}AbjL&5OE0W{JpJ#|t?|11h2f8< z|2yxybSu2r{uX5A^B4R`R!$at_rLT0i$7lwu4oW^_usL*mf^*7B*ARKcgQ&eTz-Xu zimorv(Kd;eOQn)8T2?bM*fKB}FqGPY9ABNy4Y|S+qyzamN_P*w~kobKd+1<*!~_?gTCdkIvE? zFBHl_4WZH-ueTujzhL)4`+lG@0@NOy;ljUd7ies>(|3(y^K(Ybxf%YxH|z`y9-s@H z9jKZt|NJdiL3>?#O*L8g5%;b8c58xsW98UT%b;6o z?8v{(m9gbOiI!(?ETc^&e>>>@B>rs|Jd;JH`G9X$>8@SV`k%iQbgq_TvyV!GfJe9M z3?I!O-JuIwFO_Pb%#-l9whA+Vf&#NWqXFBdeF#Ui!bODl|Nk-^-12b&2Tcpu;uTD#I?X4Tz)F3=9yjECcPP2YZD@5VSix z5bPE3@Xcod&>0Tb_gR73ot>c*USxq2Z|DT@nhJf;Vr|Pq{7o|K3=9nwpj!syL8~%* z0~nz?u6uwqnIdcQ0-f3b(!|0I)AS0|oo}dR)b;4)<@NxboGqFTqWE1ddh~jL2H6*f zfW1%z5(N+LTzdKTf7%3>?$|Z1t+)AGLFZjM@^6QPPujs3?45_2A2F|B zi;2I*SO|2dLW{~22GC|(nBQ-4Ffbs}w@>Hkm$BgBgXH(_&^4fe&_0xZ!Zr=$n>u?6a43N)3k$45f0O!At z%%Gg~pOL@i??2Guk4g^EpuC7jujzMiJKcA}3%;lS!3Kje94K?XYyvycbqzQMe*gRb zADsSM*g&iMnh%3r11cfEy?Oc{H2n&mMw)r*?|+YO(L+J93?N5(bTWZA7j)OI0XZI2 z*lYr6?+rZwn)m{>-(Q4%Vr2lWRsg97*Ek-Gr)@!daO<^N50r9wfKCZ+2N#LGwfn*A zhe1YlxbA-uvmG>L?K{Dv^N>e3>#_jQoG3VO`G3P48wu(Fseq3}a$o>udr&v{A1ecc z4KIJo8&GQKb!PPFwf*G`8q@LZ0H3hsI^l)kr>CI6=m1sRp!*I%SBvceHNQQ2ZKsq% z)V|Pp30Ks*05p)f&6&-{mcM-p=w!rQpmfThz@Xs4zxWV;a|1I21E`<ztogEa$xt1@W61Sp2T+Ho>?9A^Oa-d||4aXWh_Jp6Hv<)q5Ks)^$8+}v~Kt(J_ zH%LVu=t>Ys<+BJhBn7QN6kzgxpvx1sIWyW=@wenaLJHJpZoLIs&W^#F0bN3ZC4Cs3(rtCY>f@Zvk@RDo^G zpw##BI_QQDP=@DkLkN^KCc!J8PmKyLzrWzFiUr;UC{GJh%89~w18u<^j zJo&}ey^IW=%{D3wo}Df#0v@38AA4}7VpVbCX7KD}QF*Bky4MOES00`B`CEd)+c->l zz-uLaC%jO82+8U%t$zJSFTeO(g+cxTH3v9eN}+2*gqH_E>wMnwah zRY0L4QOXLUH2AkUGkG*0W_tM-biW8V6NAn__vp3tcLZzhc#-}TmWfO2`L{W<+t`+u zdw|nFEb|tpgEDR&3nb&t1s^N`E$qHD!DD|No1PA6Xe*I(`Qg zL+lLvtye%LLU-weT~OOELY&_5;^h;V?Io+g_ZNbPT0MGgbGx}1z)N0^!&Q`q@^5qI z=saX&Tkh=v8mMM~y6|GLHOPg!P#3C!4}5^SP#wfUb79ES|Nmd`gIoyO-~tX6&`g0x zukC^msI7r;TlrfKfYL6=@u1_*J$h|TVUE{9QuG@%j)|m538si0p{Vs069cFa76KK* z6WG85kl@?KLHq_bP<1WL;L#f_%-_NU+6dHn8k`J3cTv~|r*kp9@CL2deGR&61l;cg zrL7n2j2y5FH$izAmMnQe!!f5xf8Gh2XgXsDnlFE``7fwN$N()uUwVSIJ3!Ju zxJ`Qk)MEsv{TJ8YGBSAd7Bhkp{_d^tgg>DPlJH+{2Rja&e>{3a4}dE;kIwtxyk`9x zR5gYk@Btl}3!0v003B7pcp2WbEzJQ{P@t7ZpjGLu(cnFOz6)M_`p*u^3!qF2T4?n; zh<}?iCn%Ibr(oFF^0(^z`~M%rU(XB*buLh-bMd!=jwJW!W=-(|H*;ifz?wOe?}Po@ zdY~i(Y)=Ph*c(*hf|}D2OwAAezH9~;F}BWWTnsPML1*Ij+8Th^ASZeB+Q!;)GraVN zIWHLDJWvzB5pEP)^Mju+Eq;NDIgei38*$tWFOKhkSMo2#Kp7uWI9Pb}+9stU3I_x5 z5%{hXUf%cu@!5MOkk4T0X(H&Z21t6c0H-IlR4#@Wzu)}-|8n+c(BaN01_#n zvcto(^XN;P-*7p8bU7JNncIAr{iP+S*xKd{PSur6;8fjG1!~xXt`_dKZ3fS(`F6ax zi_}~&WMp6fH!b;Fmw@+m`KTnYyj=a||NkAJcEii6PoScMgMq&VH2?3>Tg?G#Y|jKA zECDHI);|QTCI+RG2``-AvVx*}!pp2L5N#k0rDr|5S!a5HqteR;HcWEjE+{G??e&Ig zPJ{)VAPYb@l!D4kpWbYy<`;RLt`kZXz}?8^7x^HLFo**xQCXW`=ytkJ@ZooP4c_JN z+wtPvBXExC@M!+Q1sZ5?2VKVk?)WGRfM&H1`EE}z~BG> z|AP+_=#HIWc&YU^zw1RuWfzqgM@}D=2+j-ODjmFH9#m3!^xEEC3@xO3UO;RF<$?Lo zLdv7pcHvT}d=5gs6|@oplv)EEKxBx+OZ(5DpyFik=&k1DZ~YI7%x=~!cW`hqUxlUo znRniT216j>1+pJjKA&xcTA~gqC_pX6){UT)d%*D0%UDouX#T;&->%LN^7}1_-@^*H z7+ze19QNG8%m3^@cx~WLP#$;*aY5+>@T9FrudS#*)PiI8;J$1HwZgzBt$+%HAkfxZ zXwm+%6};UukOSNgU5r#Mz2pF$7z!$xLDqQm+BPnM8k~z{a1-d_0{(5;td0$TZTZ^| zfjY3@lnAO~eE1i?;BPhuZTV~XtIOX4x}4p${BU=Y0?_ z!~vY4cIABmHKQlIya?KU3T-Pffu;O^gNvvMumXEMxOOj{0OAiRGthtIZ$G1V_RYf zS~uqc8c7bF;L&T^dIgp`f8TujAL5aC@Z7kMN`k^mi+7+SxIw-Hb)rCh4bZ|H&<09S zBeLZZ1E?qXp3$@UAcse9=>hPWG~gJS`xG>`fA~e~lc)ciEtL3M8bPU`^){$lt*G$m zc0JHw!BCp-(aZW9lubG%KqW>j=%}D>Rzr~UdQDH6!^)WixYIT>KpIY+Ad9=9&5||{ z2b6Z34|0GSP6-~prf2VgW{i9%yeN4AEzV{`Zl<~749=BrFTwoHeDm%9hH61j-WB9; zH3OHmtm`1E=EGIpy#XE(o(2&Qhl?M*0n*I|(#=-dNbT&p~P)i8sl#%`uqR?%W|~rmk3k&?iO5SD`>s4OXo|M&KECL zK~*gTFeh-_c>DiF@#CleJ$gl1y15u$-}30SbvFYyOJu&j{SPT< zR3HM}U*Ce%2|&y$g_w2iJj|>;*TK?PO}QCfPxj~)eGOt<^XO(xb^_bF-xTBq(Bhy; zAeG&$-XQUAa3XvF50o;HT(4+9Nb^jOUeTqd+zc;4lbasBqU9jL7SN%%AVJW1D?Qdy# zssNgdiI4zI|F#@vWMFV@eOtnQj2YZn_UZiQ*&EL2(_0D}PC^w<3dE=Ln@{I+ zm>*tjn#jb^V9ikC0d6-VtLTh9@M6kDCI;{-;t~z8JpaB6&969{f3fhlfo>SIQQ&U@ z?Zg0eYe60KmII}CeL+JA$mT#p>xIWeCI-)g@0s_3dK93UdGn?Z|2;ZgH+X($Q31^? z@wb5PYxC?bQIP*|4|2;d!jye3- z1qoF!GL-D_Y(CED+5C><^*YEr2me0M7?3yPG0^PfX;|cz3xUO(4M{(`lg3A83+h2ggszuK4>UOt4aGXYhQ63|;E zY%jWVF}!#c$H?#!)E4*XwLRbtYR#4|cyTojlnhE2fN!jO(SH9aY+W8`z78~O$NnfsDG$pdur(|k zKE0~i61<>|t1ozNf{Gp6ryAgC?-zILKrstG!|2jtP$$RsGFXQ72$(wT(Z~Uw>DmfX z*Ufs(9+cH>-Hkv;6U(jusp)2buA_f3@h*7DNC`h^-n7@$=)(X1FKRFR|Gy7(hlxk8 zt)vk*!;3k&%nUxgs#C>4H%}e~P0lftIP%Mb-Bxhp>3>j)?>q*|S5Au=8GJh5`S+&S zFoISjbRGhAzhZJhD|0zr-GX zp?3EvsEG?*uL^SS3+Gjg46z=a$6s23Zg_y-kB-GZpe2nyo$oz5K{q{sOhxzAj`I+& zG(7tM-vjOyQ2e5J1$6(p2LZ3xIuY_p^qr^3^MfGwg3`M^$W!308?u46pn+-S7miCo zc~sc5vqc3wDc{)y+WXs`zPX1m^0$JPg*$ea#yED@M!Yz-;q8CNhT05<5-yKkRw)TN zhGPtjFBlBD7+!S${r~?(ndZm;FD@EzF~AZsgFZLIi-Igz3Vvn_YB^fG@M~fN&9h}N z@V9C+GBCX0+w%IqXLl{f3((e6-|ke87c%eJ89Y0Wy||L_=D$a`tf{IT1Nbbt+oh`D zdI7wS!=u+WYyua<3x2Q#tOBaw!T_{V;DJZ4E9ju_9lotkN&{afP4Iv&y=pyB7Ydp< ze{%}7PW>M!i+8#nc;V|0vWC?T?7rFqpydgj?i??~T-iYL0Xsn3UOK;nN8(;Mo#bEu zt$+J=M4@!0C+N5#kJbbAt38jqdVuO^w8|H>hRvh-hz2-?Ln>de`#pMXzvyx^yx3Cw z;=g0JYsdnueU+!6OUfo2_SJFnE0$02X8)w?$?8^2ZppkLO>0W3ZHJ(o62$wKHc>a zD9OR2o86~7UjfuM@aT32t@`Web{FV$T>=VVHIH6d4M))8AclRQ4QZf3tLh9;q_g%Y zL)X`Mb{^^WU9uZAq5wJ(1T_Ea*j=yC`k%iOv>L&qn{}bJEQ61w27gN=GXuj5@0d5B zx_X8q|F-R*30=?zM#s(%ogX_tIUIP$?0Db>>w%Xn&CeJQykcs8$mrPofU)@zp@4Df|k7b~e`R6Xst_dH|!Rzlq zD*#_49tZ8PDeVB+*m={Z^VJLg_MiVjJkWx|%gLak@h3Pfz%^}np>v#rq1$x{Xx*+N z*kacc@C8Hst*=0(WAl*;*m?z6LU3Ss;cN!+=SyLf^3Ai`UBd9TM`tT&N1|u9yM{++ zD`?B2XSchBM`tVOl7kl!ksz(dUu-aZ1KF+xbx*G^Xer}{7c-7=FgSKk2ThxL9CvL1 z2mK}f77iu`2GDtkFHSIi0<~IL_*?dYo$Mjde3;RrH$cMUJ7_qU0o2wDknm{!$y9ft z!AiOGbVC)RV(HQ5-;De%p!oCXHuW_FRisr+9-W}6uh1DUu3QGKn+ToZ(d`SGX)c-W z(;N8Tua`v#bnKmD!%r^$78y|gu;C{!f6Gl!&!yMYR2vi_$6w3<>1{nwBIekz92DjM zJbEh_LC5g_dvW&5|NkIIg4W;ce#FJ_!e%Kb?%spO?LV&k_wrr zcV#k^DtUI-OMpsU$rpcagF4Qlcg;cjf87;4x`jHMK-<1Nn)iZ&m7!F~v%6jcq?Yr= zh1;O5%kBmq&3i%N%)sBm3UX+3Z37E`%X0?Mp>Z#4(m(xo{O+D`fS-YZztsr3XMEYO z|NmdAg4Xvo)NuXh;%~hPnyRef`p3)PdJfb~yZaZ^f&!nzS-avzc;XMp8vC~Kc+)HP8bRGv)%(J{eMHWgjYX&*98fV=MR{{8>|V)-p_KsmewpXC5riue9S@`{iDUxGSAj>i}nUdqA!-@^JA zlrl`EO+by9>pq>XGhQse2ySWdx10yXUbpKEu;n0)uKe3P{(CmRV0?KA95nA=XoFnY z>Du7Y{KL7#)B_Y5r4nHEFaLwPskRq1z&+1TPe5Jm(gvT-_h9K47ng%v1U2T$Kd@(6 zO73`cdkA18cFfcY+G69;ZJJ^XbM^$64&NCs-dq4Xy+p!=f1B?NpKjL)V9Q=AgQ~&! zD^LGJxKqK?z3}!-FRPCRIIV+AUY}lDHw|tE(4hjRjvz*;Pp_^Gh!Nt`t7>)P|Nmf* zUfHA*prMFI9-a3%~>9gnR@yzeiTD}zQ7LKk>?9HZ%ur9Yn=kXUO z6+y=Se{m2@e}AzPOuv7z5llaSu~HG#q`mLaE1Q4)|Nj@WK*HUs+2HuT3Azu$Hea0^ zTy=W%ZUD7yUVK+%WAN-YQSs=6$OnOJYCHy(yA3j}TUNwGmH{+KE_(Y2sL^I>3sTZ; z{eq|M#ea`(YmZ)2Lv?Nj@C=kkujsRD|Np=E*!trCi#4gBvh4_mN3X4{IyXbKN9Qrn zdMR+h`%*s>YkL{oo&s+!_3Zo-?2&x`MHG|vXD;{-1yeqjR&fP0`kWt;izzpv$&(i_m+hqBrh)IS2-1#W+V8iS2*7(nYP znt4lF->}10I*+WdWtnZcdNx zi90}rKxeN8SX}DcaRvSse^B)US=Ilo6{Nv{ztsmc+^BiXV}@t1%TWfG&aD<84V|qD zpo^2gxu}E)@V7o^V_*RFt|dSVo?1cYeu1v83vulBQ3+7I*m*(~G%C^jf>H6riUa(u zsXw3oZ+_%Z!sd9)MJ0m~)XGu=wez}NR1#LO^0!*@f=_pAWdyIJs!g{pEoN#5X_E)v>t&rL-<;8Kv5C2~@ zefMF!;2N6Z~lWCo!zX<3_*)L|ACr?-8;a^Q^plk`m**K$}%8{vZ;Lk|Keff zkN+N>trDPs1pD2AzjZA?1H%d?{#H})HC8n$pqhri)e*|G0C}|)bTbubIRvQ2;%^P* zXJBybc2P0#>HOb%pn|LO_zMX=P|1D##Q{wStr7O-zhifeibL!F3b_}*bRnXPpt7$( zvd3Li96;ySg4(GZKArzSClz-d_vmb8c>n+Zi*T1W|3Nl#yzo{2{@0?NoqHW1iN@gl|Nos^1HhcQ0^rlgmvVq6NI?s% zAnjd9``gpI2^wnXD{Ujogv@({e{)C_y0lN??nO6{vU4z=>#>9Kr^wP-E5%!FyPC#e68~Y z_+Y0jh3*NJ!0a-8`d|v)h{uTjH zf@r8^VBl|22OnJP(+QS;@$oQREyxBgh-u~s(_9Vzzu0pIt_ajWk^~R68-4=~MHrrg zOF4EP_W>Q04Ket{EYL{G-VNYrZ3W%F{$eT*XvG&;y7fS*-HWg1;d)yS@b~u!fEMq7 zrTJU-3NkQsgLS{~JM{E__ueg_GX+QfDMuZfkBT`q{}15r zn+CdcvH88fM=!6_JwDK}b1i##K)b^)LXOyU?M)Z(>9w`E$HxHLz*&D7G#JDy4(9F! z1)xVKI4$@lzxC<0HFzh(;Cb*Vi!bBfG}wA`NB-^MT#o$P%Q;*-A3Ap4@a(pC>HO%~ zd|cp#;KBd@eJ%f%-f;!3d%egAiX@L-)>C)+7<_t7li$iPc<{S`{pj1f4m6nS0f`83 zx^U#*9tJYE3~sL7PS6G|&*ozSFSZ{5nf$KwmIoxMdUQ_(JGR$!iUO$Z0^aiO(`!2a zjSRz!RfnGb_wCIKfb`?=ni~%`_bV22eNfCj{#u6NMG(Z?0wT<12b=q@^p;OIICJ}S zLjt$glo`p~&X1rt_zMF^P#jgFJv!_5|jidl{uYgCd zEgML|%>AH-&PPZfbpG<_H5K0tiu4x?4nF%;iLvH2(?|Mmbb{_O=EFI@M7PUk!dT9tS35sPQHjhIL4|I$;tK?~YmUIt(5 z0i93nwe^taW_U5>gC^r}LTTaTgWP$x95b z-7YEtARcHu3tV7FfOrz1lFYR`ML+X-?`>q!vHN5ukM9fPju2?5p4 zF)o}39Sy&x@#h_MG`t3qi*Qvu>Zo|k(eNus<{Ib-oV#iKc_%@PYiayRhtv3zPNnhZ z9CYLtbWsTa)%7hRpmhYG`qQJ=cIQrTEX-Q;_W#R2;M4D27#O;3cL~cewEnM?^XO*X zE)4193;A?|OSx95->~}!e7adRHDnoHa{LAj|2i;$O56>x&;Em_r9tb~A%#CEf;x}C zaEoALcxn0zbl(vy!GQwLqZ?AGbb~7u&;hiypqqst^%bat2u_whol8NX>)3hKr+Wja z6$GlIJRo8Hx*R%w1{(*mJj~zQ0h&{U1h_}H%?*$4t)ScpiQ-hFU(HOY4 zye)ADdBET6*?+%I8wHg5gYNMGHUGLx}_YTX5IeRpq%>tMLCG> z-U>3&k$>A3@cMVGV>CXU-%*EYbOV0;2i@B$0BZjGbbbdn;9p!X`w7~Q3Tcu^z5f5d z8{Ar5;lSS-!o46o`TyVXIAqB=C>=O{JJ!J8 z>JEw#XbY5uzcm5G{eBE|=MaDEUeHOa-~itZ>MirPWP!(2Sc?U~d81U_r`J|W8ng)w zRAn&i1MThwxjQ%%)U;ytfha3^?$IrJ02EQ3$2_{NUVP1DV{q;K0NOg`c<=?cWAg{b z?f?n!VAn4u{`P5X3=D=RK?^Wqm_Y0QOH?>Kdus(eI&Zz;PW}uU!UqjmF(`cd530*r zr-K~~jY|I3Z=ls@y{3iRL7hb1sO|s%!xnRK_;h~r=w+>z;%4yawXKliX7J>9`RdVm z-0;#1Cvfi)H0=dbEdY`e@)9+to2!pzVHK28*wtx6Q!S=|eWmQ>*v^0+w!UsU@2My0|R|D{Z z9;UaTVFd??Zw`_Q{H=B1asg#fBpS5Uq4CHKQ2zqFkIOL@+zW)9&*IX(71SYeY<$)L z9?4no_y7NwcR@>j<-zgf(Y+VkRQ5RqTBZt4>V}uVd!|`Gs)0HM-$6r`Qw|w^dok1R z2WVOW)J{tCH6cx`N1E?Inc(F&(DG{d`0fkuQZ{h)k^nl0d+VqF|6iK_1Q)W9`U^B7-C&{1 z-!d7rki2^<$kE_D4!KGsb}wkYLI5=Xbnul}^P~FC3m(nC>iJvP*ccc_GG7oi{w1f3cLP zrFrn@9Rd-b!L5Qc{+weTy<0&IQhv==5cOh7J7}+Qr~oL$kAfyO1w4B9f}+5q+e-qZ z^O51D;;9q$MM#V_mCMYkK?TqV9d_e8K9Q$@zxdZ z|NmEEU|=}jx&SK2FW8y^YRtBEa5B8?0gd;0^s?rQaie!gK?|UYEjT4MT(iN7@( zyw->{MFljFDtc86JW}&)9c*31l5LI6t|4Soi`0qaQ z;r~8S2GIQ#w%K{0>07X`L0!m@<_8MjZ+J-Fe(@}TnW6cy2&mQnJCK>dqZ<-bowq>a zsG8?K{0A%FCk-)1E{}^r6|{H=qIo4k^F9pCZ_a-B51aInF5_Z&Q60d{;L+O)iVAQ# z1np+%X7yDD)j<|7{;ua>c&P`@W{~s??R}I^FP3~v8v0ClBXwt~btq2dxCaR;#YYLNKHqoAQ+-b;$0 zpmbC<@FJl21zbGjAXr=-ByLgs0<`<3*K|KbP#h$vjHFon z5Lj_b0vE#zZqS4fwDM|k25n8~t`%_U{MPu4fr)|P#UJ5spn11idC;)uF^_KR7g<+6 zf=1k4OnUqgy zP(c$8Ucu%i@DjAI0Ep^*9c-kajyp7w*woP%{}^PC4!Y)$T7|Y2;g|ZL z6;Pe`Up&)$^Z(^rXq=uD|MuVT_RF=Ph0fhfNU_;w1S+FJLJkVu0TRu>nE2buKU_uoNFIIsPY3IS0Zr?%cM?89MF9?EK8*2}M3Rd1dPyc%!X91PE44{$& z)Du$y4QxV22zP>pOMNb*F~?;>Y}5>*F|#))IT>CufC9MJ zwo`zc;l;^aPyfRM3e=ng50Zj{>^~1mkhPu#$0tl0H1-NUiUTrY1D-a0;jg+nTV-fd@rUYxIf|KFo`FKAKB zi^*$2CE7F4NtB0PguQ@rJUfrR;M@s5iUG8Ig$1&F#m=Mg2*@!$oiD)S{NTgNAmv}D z>?{^J2A@vV*(`DlFN;8PyWo88(QPX!Da-KEqBbB~dY6I*c@6&?-uCHy_9Ah^)Bnvs{+IH;aNqg# zzv1m>3r_wihkZJqfzz_9;oBGXP!;?yRChiFU8CM?!3i3G1E~Q`hQE-5DBy3YWdNNj z{-*VIshQzzkKVnYD`7!LLAQcJ+5`Di4E|Q|lyKt_kjtT=0qWmF^t`yU1vD_)dZ2Vi z_g)*2->uhy5){b1*8e3-4Zpp3wFV~eLVn%T|F0*4!|O%!4$ulW+YqWCzuDQJ{meJMX*%>+;wEif%~y0LS+}=q}E~yr8`E^o6@SGkoQY z9axO@3X>ee3w@9{RP9n3kXqI)AaQY!IOsqVk6zoe5cN|);{V;48TP@3)*#{~Ao1rQ zaqt3-UfVxB+zcM|T1^Ss`T!AU28s6}iJyar zKW3C;cu@ut=LBWZUfcZ;@xvhTIFLBh{EZOt#UODvkT_KRLWp=XNL&vj4z+hOL_8TJ zE(Q{Zu9<6rh&zMC|G6?Vzyh~j2hk(XdXl;%%j`% zFjS};A{6b>ZQ1}8ssIa>_Iq@*riz1V7Spl~uqvfyC1}>4)fXcEZaqvq1tM+=5&s4k z_koDZLd4nN=9sL6^tV9%2dxIt2OTdCI(+=I2fvm($7lXX)<9uihEE>+TKu2+qYixH zk2v`9{PSlvz4{O258n?j-YfzwItu-f z;-L*)8_9I?@C&gm$m=0JIxlv9^5`~Q@K2WEI8zyZ=K99?z`3;82ouv;v zx=p3v28X@?oB2WltDl^RH1E(~aL_#P=!BVfVj;FL`m~8S_gR6=1DVAPDvvsSKX~-| zK6p`r)y#PyGZCE==y^-v_DP6m=O2&G@4+6OpIGwhi03yxU>^qB1|y#PM)$D=d! zhDUGc1&>bO2R@((T@I=;F(UNfM&$K>ApbxQ=tnX51t^W4@aQZ(;BoMUokwTriBfNm zUKdVA576OSoi{+DrG6g0F4ByUf~42?0C>@}>kW@?)3?868D88t4Ngxl5NTQibc{1- zN$X*c&hsx;Tzd{$;&;IVVp_>2P{}m;+VlUf*S?V1h_ZYZT3&WO1)cr+*D=Jm^GGo0 z!~nF5A3(>0b(U`M05!@$13V5MjG)li!QasXigZwN_vmyz;M4g4?EE0_UKbURhfYA9 zP#OyH5Tvg4-2h%r3_459R0QN9c8G^SEkI}{b@hO4tbm@A1R5T{a24z?n4u-BLH^o( z_4)tT%aGa&*I)ct`TYM&(B_jDdK*xDi=N)7A3wIgWEoyqoWdVJ91wq?#?R*~;P|Oo zkK*D1kDrvEvJ5ZMPl7!}D1HpCV2K}TkiSslCt?LGe)`s-_!c>S!hAcAffD6ckIr+@ z%zk|rXn-O3g+$Y*|30AE(RZ$(%yihJ^AIR`G=jDycisoB;k(xU3EcBsm;32|v`^;) z$Py(`eF-WLz~v2A^A|8MFa*EY(TLUjgP`Sb5cA8R=KEncpK$&3^*gu_{_uk51UP8X z>Zh``$n{ewVe{s~%-eGun|W#|<~eqrfE9_c-(?wITFl~rpFao+ACGQUUOs5ot^u^X z6|Mc^(JlIx7u4qX;n6MRq1^YUDV0bjKd> z=w>zL0v*Bw(!&fITj)laq4)b>(8$ZsD!m>FJz`bqrq42HK~>iz%!e}duv7oP6S4B$(wj=%f{TAL2;zjZnb zygmx<2iER+vE7Z6;pJ(N+ysx_+C4AYJvbR&z6Y%&)m@E}!65A?k8W079!UIJ?f}Iv z|C9sB`yW8@50)3`{NZu%0jmcyIEumTT~PV}-I?)*8-GAjfoqmo^3QZwr?2=q~2)==I$XIf3?tGiZ#d^H{gDh+{*Y1fyf8n@EWf+NJ|H zP#SAKqT$mCx-Y>IdA`fl@Z0N)p!*ZL-2^w2e;Pt5q5c<)JDJwvIb_eiz`X1e^b2&lj5l4FKu9tb40-hp+sCNJ@ zH)91YIN{vE#lQgC`^Eq|C-dM71;l+I;4uu)%HHmJndblhOT;1h{)IHC6mLGv*j)h< zE`1Mbp@5I;gvdkEcjwa=lmGw!AKQ8Szv?=K#L4h+C(HFhsY$)O5NrW#Fb}=#3X9!r%Xc zYS-@48_hdF>(|*G`KKLtJp+_LB!s{J@Ad{Q@>a0y0IifLX72PVXsCV8P%^LCsf6+M z3`BVC2Q5{4u?)1)xAX8z&;gY%W-bF)Zb;)b;Qp{@=O1wM|2KNC?uFrj7p_*ISufw` z;GO{3jmIE?^rHLc|Nos4A|BnLAfG{-kDSnxWMdD%&<5Fta1SVaJvx6t6GbApxPhOG zYZ<{&D%VgU!B#H8zb!z*qnFooJ0F8bvdBaa##46xAMwjGytw`A|9@!OIS(qQ54;uz zjk9(;2sFQ71l=vT12p#xZi|D&4G$pi7KEf1k8akrY~b|X-2^Hwdp%(F%#VNkEql&_ z>KS;c>(N=k0ljXnvp@!(zCkGi-2dsk{37EA=#mnTZq{(HsRrGBU{f6#JKI2v=AZxg zTPn^z{oi>4Qku7c>Mx(p1h}~YG93|;U?(Hmo8a*YkIwHd{M*tbU$BC#IOx&M`h^wb zaD(n?Ad`EYU{?J4$KRq1vf=`g6&{@ta4S4yTsjgUb|CGjgoFnu62K|E^E)WRzL)_T zZ121e9zy9n_Hrj58{+&+Q2fEwH^1R{aT+x51=`#K$^qT6KRh~*oqV|rX=!IlZOA(;H~*eCz*` z0LYwwZ|H*;vmC%J7CVpb*axqVcGt5zw@ODjNUr$Pz}$5>EN;lR-CEMn;_P;7uQR$b~3 z@pkhO36IYE;EFx=CFuNoME>iwVesty`=Zngv^wX$N3ZX7NIv%HJO<9&FLr+g-|a5q z(Rujwq8GV~p8kLN>=dZ3KrJs`eE#|We{Ay)Zg4S-FdrTsko1do%r&Se*##;vj=vBF zCo=Gk9}Vy=7$uLdV&msPM@fb9%3YslKE`d!!=>`&1u`fUV`Tu_cY6&e0 zmEQ-d=0F+r-3TuR;C=F9&@&iJOf9lAk=f?Ln0zi{XL86JGwdWkw(G zfXJ7Kfb!9c*S4Uc+vWqH+v7mvsGu$uT7Chk1Kknh2s>99tu^-Ix-lp=Stq=fWq5HK z!ma_a_Zu@ayx0XIwt|QaAY!#KGlNgJ=^92^2G4Fbm+l3ig2b^mM1`?)0+`wS=O2Fy z_>n|s_5Jj3F{yZ}^iftG=ShO8MJkGrUV+u9(83}`<8#Xqa}{|!%i zG`|o?bL{j{k?=V9f*G_*LBtbuS2sA0Tsr^1xNZfSmx}n{aqu;B=lvHiKu+p>2~K|~ zb&LMz|NmV&DkL47k27{gh#Yf}U~z2z&sw_M@HT9|xbuGVVa6B7K#|*R+WtzG0TSIl zoi9B)kAqK>eDU%V=zuBEmi2mTP)nY@`8R9nagT1(gjb-2PA}0C%C1kKWfx-Ds)pCc zQK|;WNpr^?z@Y)HBaS=BfCgyNIs+t78n31NpgauDl8{weFNEg9#`ln-8(jV)*I3}V z4*~7l>HO`{yLSg@0 z6@0Zv;}MV}KzRb(FM(JFS|Ql{o4bUo`L|$+Nb_&@()pmmo}&}&6wv*r$60^9kOjGk z;dKkB`~>wCI9}g}j~{t9|6we><@JpcM=t_r3H5%~IW%3(9_w z@&FV*9?fq8kh8=OkIo++?W`ML$TEPI(zQAr11+OxeR@Ea;W)&!ZdXu;A5zeif(E2p z!A64b!#((p2h<({@0W7y{1fca8^`F;_y*L@Lbl|FM|TrwxWc15sKVpmD;|%7FL*pG zKa?1GSl%en^{_lv#Oh)BsTlQ$eg0Okmc}C>)1ZkV_AqD`Lgudwco`tijHmy1frd|g zx;0+2cy_uI(R!eSwfPle=`C(7X(vxIj0spQ=PY-xt+<(6}>_`7w%6 z^Fin1dcw{3Kr?^AGqCwPKZ4EABHsLkAED+i19e8>=7W|$_;w@Q9{@4G9AZ8fhWQ@7 ztW)=b>Lr7hwG1db@*wpCIQ+or3$zbXYXfNi#cI%@u`kZe{qP^$S7-1@b_Ok3^k_cJ z=&r8kgA*FgCRVzy`JKhR`5c=oDuFK8EQ=hi#_ z{{Kf#z%L9BfD+!~Uyy`1dFs>uj?K^5J-Q{jomD(K=YlT(?ra71Jo#JuKppSnt)OEu zKucGePjGZPt9W!fOB{E70Lsjuv;94~ogph%SArCGdnkZ*I8{b?SXM~zw}gVkdiR13 z(C7?(^1^MxQ*cTGO(o9)RrB4wAnQDO!B%*5I!bsXw}Kq((Yy7>zyJTiDb=Ibg@Mtd zvlS%pq9qQr0}AXl(80*ZUL0-)O`?DX>A^;I&jq<0WD>}e`+h<^xo!%0j;}L91>8$O z>9p{-egnCr@dzl?q9Fq!pmS%y*Qk4RJ4tlU0Qt3h!xIJuhT{z&HrVUkP7rTHuF666 zHt3WD%WI`spxscQE5|{tH4ms?I~^rJPE&?DO?b-F|J_qTj@}3Az<@X3RY-IOsC3Q; zS>*xR!SlWsRPcd{Z3e>w;7jr*bO$E9Tnrv!fRu+G-FrbH`QnKMCwLFmmVf{MzwSV^ z&p_(4z>5W7>K!8ZxnH!-0GaFpxvw?Uqw{<7Ge(cjrzHk2yt}^r_vp24Sqs{(G<^mm z1H)?`(0E1jaUKuL>m~A*?i{6`Vqcb|GBSYD-;3X!-~PWo2QSY-#Xkdhk{DtiEPtc- zra_(bv1vM}eg)?T(0EqoHBgat7F3%20i6h;;nQv3S$f8?;Xe<5iyUa{{8guPDbKLa|C{?97Hrl8JdwLvq-2f^BkGt*wQT#28pnR0oH|W4856#1! zt~-1|hgEgE?r`h`-9HDq>hcgsSugMT)qD)Dt=~L)9eI3uSAycsgWvU_XXmlkqOkUp zXY(;0U(0v=&HW%P;Bin;9Z@8?h0zoFnD%?AK@3Xt{WE?GEM=k>=VREG43zo%dgYnsXqrQg*{jFI_;bw(i;kp1t9a6F^=h zGBbg8m3F!w01sk&bhCzVhIH2j2B=phf{`h+xKK@D(MVoku{; zLS2vK!ydh&#`k3zJ~Xp5F@9)f)p{Vyz}R{JMSUAHgKMXb3j7$T*ux&(tc+hlz7PPH z*zK&3?}1u%mr5>pbT<`%vSsUmk|Q6QS=H{#GJwpw2clnZf~9X*c>}s!+A##&oT?5rV19aAAw;gyuyY_;^x8sbUqZn&17@mZcENejnX~{R5e@pSVgN|<8If0Xb z#iN%sbp;=T2mj)m9=#Jl*{n$PbsA(m)1&zSkB8+2{uX5>1_sdh);o`G(Rz@NdQBhn zfmU-^d2}8!Jn&+2J1C(sytv)+?Y~FzjpiQ?WivgxSwp_cFm&GX=rwJ835%G_cBJ!C z9h?6!^0$P6E`aP#T!d`0Q z+xn!$95m|c(`%ad_y7N9@DQyCe=BH02IL$`6>v7b0QL>IWN-e#!rz(#ny~0Kwf_76 z|H~ur@%9&|`+tEpX@ZW7^z1zHauv9)1?~6y)_MO$+$Ye95{EpRfBfffsRsL?Ti5;j|G%+{8DtcH>q78# z!t(t6ptWG2i!}RK7#SFLfXlm^9+w|@b{=tTe8O-AbbR;}Mh4K9Ok{YUlWij74w% zzew%_t*CwS@+Rhd47iO2>d(MVTtit&1zNju-1P#e7H|DuFAgqA!TtbUip6_|jR8Ck z>;Wovzj^eU${2Dncy?ZS!7K&3rPB2RX!$!Re}cy^9Gm|#@%M)?GBB)QEG>D_Uk@!S z9r@c;!S_`BW#Vr=32IYyyK#UP^!W7VUhwIB2kt+-P)Oro@aSdzxgOL#43P$%;HGq5=Q4SEbc`b-$Ihu%LGtfg71$5)t?@{tgQ<{ZUEP9uX#c3d}zH^ z!f#!{QThpVX&$6~k8QpMls;f>0iXQ$|2yv+etS{e1-h*aJjd|TybIL(0J|GxA4olH zyc1kwLynF??!2BbJOHlw`ap#)IPH7|RoDEjp!<0dtfjLCf6FIO4Vir0 zqnEernk<9iHKfMfH2VgB|y&{Y3kkT)1gN?khtbsm4Q zxD7Nk1aV<2;y(9oa6q(vD-rhSW_5oJYPm6ZbXRD+aQ@BA@Pcn1sOmlbB5XY~19(Lm z+Vy99L9xlMuh?NGD4P$C6#^7$7ZTEYHr0ri&+|Gy}l`xZ3b500%5&EUr4!mF|j zjK^C+aS5uJURHuKO=J^z-vMZYHviNEpwu(l;e|~n z$`lcJJQtLnL0wJ`k7QeoE3yo&|4SrZBsV}e<@^G#t_IDLf&952bcp_oV~tP$@0SAw zM(5!dI~$+=w>-@6d)OoS#|{Pu1_sOH9{fH(I&JST`^F}20C2r$XzZ5(8wR?emLal2OWN^sPF=Gbh%IG zbI9h)&ciS6S%QRK`E)+>=)AuZ)UfpF)%E+&$?&4Z@&#xnr}Mr?uc*gs(Dq8x9~Zb7 zUgTK50Ilo;pKIXJD|+@VSSsi)7sHD{kYU}btDeg+K#T(2MIn0oJ7_w^M&(74(To3} z)5XB2o?U$f)|Vp!s{f2$z#FbNdAJx}NQfeKIWU0zdH4m3C^PtMGLOz%KD|r9Bi)_H zJbGn&K&M)@H-SclSS6mJ*gO&Bwr-0TFAYJSeEveP_UV7ne*I_QkbTiq1=<~V55k%H z41Cb_fBqKn_27J2!t2p_3?f$vlIy$&X+z|IIN;{~?sZ5CL8Zlu0FYegJ<$Cx3@@BP z9I(PhWQCw%oEPdKxz2n0K|4HNNP#$Dh3?1-!E*neg8CQt_Ji8)FFt}eV1>NM3c+$$ zL2{k<_JigrUz`AOzzQ#~MRFrpZVgDT^WJ{YZkZSJK^(BcnaB#ka?MZw|Lt$jtO*kCX4QHEsT_|tfQB)^-s^n+qNf!lk=`u_`49P$W+{)xBcRxT z){n7=UxGG!y{upJ^#6NQs6K&|7u~FT9)tJefXWNUkYJx~h0foekTa@5UE*sM z%nY6PU)WbeHnUYof&?#u1VQ^;Knv}_L%5*(a!)scrWv2RbQ^&74z2~OaqTQ+fV&4V z)(o;gwDY4+uR9ZHMh(}BfDZ8;+Mo@>-zwR^-`t_gz`)Sq%-H;svo71GH}-|&uCr&( zobl#sK- zH1O;#{MX_2-^cP^ae_y$>noqm<35@vJUS17mMDL2efr<4mqp>V2)JBse#Bp@4c6np z=-9!bc>`r`pi~vK5CA&a2`>MSIWrmf^g1)YJ`Hh~Pv?Qxr(W1KK1D99q3dy5|JQRj z|NmEF)B3GW4m_k)_gIFZ^JnKLk6u&dT39E4Vkvm5PZCHDB%^Wz);KSR$auhHK3<2( z#FnCrz@<$9wKZUEXHc61bics~56kcT&ER>K&flJ(lNPVI8vb|Or_aF9@Y)38e#hSS zGiT25*v^D zeD3%^L?xp2K0 zsZ|XuKpIMr<{QJIN!O$Kjf4;SDb9umJevP;@VA0j9C!Zq=(h4~uIFIz?7RwU?eMqW z0JYpZ&$)IUacusf&EK+&fq}sRJn|2^>KVMAQ4F*zO3|M%(q58K5JDqvpR`}`Vo*Y$xHTW^ETv~@iIJ#iRx z$_VI8R>;Z2o}GLioz51ZutGXZSs&Eo2d~_@0L@FFwl8?|S(Zohe-Zu`P+JYWIe0m! z6q@t{)UXFT47}L_5|4(LKv$emTwvs-ir4MWvQ`#TaP({$LC+v zYJ)ql2Ru7n8D4$@wZe}xg64EQdPQ|X=7D-f;QZ!soDr0IJbFd7LE<04!)l=MtEGagao*0ey$c&JhF=41*aVLtFUb0Rs3t+^uTLS$NKeZv z9^KZS{BBn~S}&DKdT3toV7%_p>CEBN`M}liiASgP>ouTq)Ti?wXs^->n?{h2ojE}3 z+`2PSPvS_Zi)sCIBUM~?bh??yy)2Y zl!3v30WvShc$>ciG#2C0dBaEZfrsUVx;NmhWZ!){L5b1##0yVl(1|*19^Jktz_Tu@ z|No!=@5A{5*Z;1VqD zcIAVs0q0xbH0=o&FM^0`L&T-w;!*j?>nC7|+^4sf;TNbO^v@BrY7DfetntkZ&{1oh zTUUUVY<5m<_=&n8;Dq4;pUz&;;Vd4jh=qS2hevM!qhqh*gXSMm<<1_xwmuWU^9$`Bj6dxDKS-Nkc+#=g@q!EgKCWJ# zPLJk8jJ-S_Ad%)DoMkUT8asPI#x?(lDmw_uZyudfK@N5Woz5D|%)sE%(L3SS|Nl^@ z7@jnQTsG*q2h>CG>0Jww1f9zSbcVBhn%fX=4%=mm#` z$8l%SWoe*WHw8R8oj-VVgQF1?2;Jal^yr)lir3}?jGbV9^AGmA5^$zxl44-!>~#Re zeeYIK67cE#?$X)o1G;y(b7}yXnj7)+|9{8-VHz&oU}iT&JtD2N9&qUft3@Olmu|2b z{H;z*3=AIKb3y5iU!DOJexOsAJ$hSPLH&W_&Y}x}UxqY=%##cIRHOw$5M< z55_~V`1{Y!-=_ky5ma8=2{SObbj}4^4Uao$G=T*X5rl{r&{CZBpljosAG7ecq=HVB z>)r~A9G~R1;FQ<-%185&NAe+$}z~8z;odGg$;P}l=zyZ2i5p;Yl z*xt@oFon7|XO2GDy7V2X_`YoA`8Ab9gi#24^Km`txD@ z1&adYEMyIe$QIBdKcc+P-)ah~9U!U5hjA~+jiBPLRqOZv|KQ84kleQyRBm^(H~-M* zZ&#FOVCX#9e1OA)*NUT-dc9sO0~C1HyJ}KFtDYr@Z|03v@gmDD{Af-`D+) z&8G!kKZBQGPwIpmn~yL$HlJp6>0Amb#X83D9FG7Ic-4yAb)$4Bdu#8 zpx}d)#1I94WkFd0?1`6_|Ns9773dzlUW|^-KehNms4w`t8q83vcmTZXV2rr}XNxUO*ASpjO#cY-VK=2J}2kOi&J z_UPOSs+@g#U61>8PX#f3JCDNZSC7tPp3QF=o1gJ}9DKpz$iL0R$g!i80aU+k1(g-P znlBtXFMB2*@UT4Q+4;qX-{-+g4-CJ%blz${CD0A=t*Zpcx8P(0PMe+Vpw#Kn&FKN! z_X>8PN9#%c4u58NN&v5~2c5su0lL-MvGa20MaPE6_012Nz!T>sqM#f3p76I`lVo6k z`V5qW!PC;Y$6sy-ZRqF*hc7G$8Nrd!A|V5f0&fL)U3@)9$NEM`S z>sudwmlt5~omB=MB>o68HQ12$6c&xp3e=i zdI;3804+z@3))42H5vM;z>?t(X=oVe%Yz~Y984I=@U@8tiZLiL8Yd0Xh#8}d;CSA91f@%G zf&|r@44sF3J70lQk|)1 zo6e;h+*EVv1{=)Z@mhs}!87>?sGr@p9^|&?TYu1SgN7AS zYZPAIftz-qf#3tspg_b1f2+v1|NmhP;ua&&RS=NYl1J}WfnU%C;)Vy(CV=`894rhB z&3i$8Q%3&2FFXtkj{Ms~89bT~Fdb{{`1Sw49;jOcIuEX6YCEWj(F>tEg*`f3L5_g5 zu$%w0^Y^Q>Gca^d1sT=r&)9m2zi$#qU@k}ibfZRRFQ_%;)2Y`R{2z2e5$IHwFb=3O z%|AK#TeVd|U9%jMu#u)E4V*1zGB-c@)$z>@Nnj^?O@8 z;Vn8)_Y!pd3CKUmt)PxKXdMEG2l0~!q%rT&d`!R*)WUC7{qp}mv}q6Rg1oc?WxnL8 z;MP94sqd5g3*6MV0`&$!zSjmPGjJevgS#Q1Y}VJO0P3)aCN_i4kG$v8xfD|Q{r2tr z;@kP&v-6ruC%AhE?LPW+uLbohAf3zC5|Hth=GOu)pm~DkV*;J$n|}+`Wq}fKuRo(t zrj2!>g*y<`frf+)I6R=4092enI>ks%2lbr6IS4ru@PmUN z++}{b0CN6n^DhC={ZNg34E%kdeF8q6OF`!Oc7E~fyaws6dvxA(>HO{6`5u}Cq2Uj0 zq`Z~^=UY&~^j0x>G#?aj?ED0ZfNW5g6chI44?P~=0Z9q?+>K$>)qh*QsoBS zaVO7>R9bY2f|4@tt4h#DpaV>>g2JPd8=9%%cGZQ0s~aOpP)7q?awA7GxI~A>FR0i? zk6BP0A;+vK__SR_AG-?!BOV_gVsx(HxuK2{?jUWPL86Hc;~c z0dS5}!A{mpilE*0iVw5573bZl;YDMhsB()_Q=ykB^6e0g?wmH7vNSfL2~Uoohj3+RZN* zJ!Zgax8`G@Bd^<(oJELF7~EqcaZHMu8V+{Cy5@{{IJAtBokfKm{05zD5*S zpuxhXH~;_pqKx;wGzW(jxF7e4UtlVvwAH)B-*uHAR7&0ejRG~CVeD)L6@NRJKx6rq zM;!V6j&y?CwvNp|)A(DIxxi)hQiyK-BmC{tc)=ojAtHJ|s<`)qT5tR<>Rb#AVCE-& zfvq6fW38b44H|>m3d-)Too5}JpWb(D{_Du!+Q9|tO8iXZZ?Oh9A6X3#fM!@K1iHZk z9iR9GT0wd|dV7z6#y5JW9sr#e-rITuJk$-Yi(NXw3G9XVY*q%BZZI2KM}cO6yQhMb z9s~CQ8GL&8g8G6UnxFVvH-K*HKpH)t3u*&+bZ!Nu_!ruX-v9UL?geS}=mrb9bb}Q@ zTOl5rA6+`{d-jU(H$P|e=mgtQV(F0#cC-)UKS-e65Mp2eZ8ui%=yd|^kpvlcjLEIxqTY{_N}p+1lL-@|G+x+zPV$#pApG|968OayE#Dvc;Ivg?dyQ%YCU?LI6OMtIbKG-24!JLeFN_o zY-eRa?iYY&5s>-?;5mrisbC6Qzu+tAT0U?BfF(Up+V1sdY<|s{#;^CGijBX;1vJ~1 zd>d4XLCP6$?$blcec*!UHfXr4mE5xP4`}fqq-}5bAG|8h@W9JUAisS(%*fx$1Zpuh zA7J$9)b90X1T|-%9R+Yh8q$OZ%^mCpUGN+78KvY?dyc{duWp0b1hMD8;Q^0c(d=?Q z2FK>V0{nf)z>5LEtq*8Z!?*K`Yv(&?JH(@RE@&Fbv-9d}IYj*nYJv3ngUd&k&f}oA z2&Coj((BIX)2WBn5J6OR9HpRfiV_X*+%kcNe+PJY@0|eL**=~BKsJF|{;!~IP1nw^ zkYW;4H2EgK_2?AyVSM4!nFlW^Ar%0qPj?*@v7ml#)hEzdDd4sqk%gx3bI`g+aK8;| zF{Dt1#tNu<^T5`9duapeR)B{}d@LV;2el4825nb4?7-g=%mK>5`uy!&pk5(l929kc z@1^nwP-P9CYJ}FJ(2g^T^&E));>&9vL4LahF4MbvL0J}by}1qts35=9{D_eo+$%0M z^yuZ~_|6IHT_YtgjMg%LU)#t3|6k^S9M~(`4Z6pr`2Z87_5nq;N2f3-ae|6ta-61!{XUB~99 zjQlM}KK%a=X_j|`OGeGZpt84=jd?CObZ+zaErNtHC~rXB0sA!E-N2L(Z^im^T}_7+yv`1dWdWb>wdWUH1<1Gk>cL_{bjqJ|`Xq1{cof z{4J@VaEHtSJN3FKFgor`162=-po_|8L_Yn0oB_0|^ri2U|Np^LA_m|KtuRJ5lc58f zFE4{K3Utu5+n>Xu*AY^dZ+#9<^^E+j_MpT{MA7#1E4W?5-*V<1C`Dt*t33~kh|0jL{Xe;LZ0Z1ZBDYF-BQ5BWe|?G?RI$j1OqP25bNo*|?}?%fM2 zeH}aRcywNdmdLLqkW1b-0*=jp1o->Fd&ip(fQDljJv!yk(jYVsf^uEyK~O4Ghg>_0 zx2YKZ2%Z96I$wfQU_Yeb0S#xqRC)9NKX`s%6{sr?njg3)2pYs??7a5!9ylF<0|Z`t zzvTS_4$8HlCSMxA{!#vR&{>p-z}5S~-^I_tzyMx}&ELub>HULSh-v%*$5t@%x19P4 zHo|t!WF7`ct5Nq8zu;a_3-IO9umAt=GzVX``yV=H1#P>)8g1MBK|7kkgFDcc3bgI^ z5;RVk#viWhGMR_LajzQ#)DZ|P)`F}cy~(Lk25NFbTA`4ZCuntC$5+s@Wbm-QW9MaP zZhol_Y7>B4PN2fZrSma#?8GDaHmD=Scmt^k0xMHE_*<@nMi-io2{a#Me0k*4|Np%O z{~db+`CU8jV6@{vm84_i874*s2556mvq_J=3-kW_zO^@4m7p|&U&&Bkn9eJ zddQvQrNL8(huWOMc0%OBg+E+1Y63h5LHlBYOF?P;W!=E1N=7P!(k1a+614=^?#XY^#e3MzlVt)pJq?BATQF<_5Q zIf(w|{~Y|SO&}eu2TFXQlMIN)7__9rTRQCo_e4N-IJ6>wPCq~jXlQc@Qe1%@0%;a# zo^PgQctm&^ui4u^s)W6L5ATa zs67PDlz3KhxbER(cqw-C|NrI#2EMINI$V$WbUyIu%{>O4(1osy={W=hgrJFQgq4BRxCdO-8=%k!^5x5OT0^hiF8 zWdI3v?C9kZ(8v!Kqo;yvEsUi9@-#TlfU_e?K3;Jj6m*#CMZmW;fz^YvFKF#YCu29$ zOVI8UZ2eUwP(h5vL0f-AGG+UH(8v}>JKv+5sT*8Ub#lC1a1Fa#KwDtJJIP^PZ*X@W z(wEmf)Or9M2mF4A7*D)R1GTR}6I$@x3CnTpb^hS7Zy!!jX8=os3Rg?2)$bOl(+|pO z&>=l&j)P>i&eNKQL5-b*pzB;g-Pe{tP$|~STJ)Whp?fZ5l-Uikps|w;I&0M%%m~_3 z*a;pxgY_MLvGex{g7kt0sy^QM|No`d8*qIOZZcrh%b)=xaJ~F88I%@!MPDUyfqFEA zIw*DN;BaVW2Q{-mlRKb#5nA{VDtS7OgWP6&6D>dt4?sqVp=A&>d^%5mzYS{OeE{td z>=pf<4sGD2f*UEw4LtBrB&^Hr*?AQ<%Y&t_!39c1pyC5G$%fw3hPMk!!NrFLxRpns zpRE8c(ZFQ~VzB%51ZaTxbbbdF!!NyVfNCI6WP(c+w&&ovaQ;?tHu&&TuRE;&@bEim zDFtXG&7f2jG}HpBSwKTAkWc~*weZh6;K=WKpydF6>q0ir&@m`^`6M6kVLawx`H8>j z)tmqSA){W9aX?qlUdhJOptehI0qA-((Ad}A zgEVRwPrP)7-G}MZ`Tj+O`_uo>f)Lus0bND}?rcMc2R%DM*Rz6JV_-k?T|o%~(1tK@ zdwmUPV4+u3A`M>nL#Hpm11a}CJFj8uGoA%G9TtzcCQCUW@ksQTa>z5#p_!0S2F=sG zdp!ZPSncg?Na=j!&j0^A3_v|R(BZ9)dq8^vUtYKl+O2rsr}Ggs*}8xyPC=Q%v-2Oe z)+eGj!Oq|B|L6bzm(dSFE!t0zu^3Q*xpw}>uakqnWiM#x8Z@)r>%r*KdHm(2PoRzd zmtV@={r?{{y5Q4mdnJXB;pHCCR!h*p%}Ewe$%T8A0A~T#d-eZ+k7RI-4s95~yb4*p z0jVm%&4kWYq~R23aR-_Pc)9xh|Np&}j6S`#_8>=Pya2VFk;>thZ$R_#SjvBCP>GC1 zJOWfVf^ME7tNF9*3dl>~(QZ_~cywO$=w6j*uh1oJZQ;0Y())XnK`&l0hJa|7a_$5cw!us zq#!{J%1`{Q-!6kPD!Al%S@{hT=^nkJ=acvtUV4D5Yw+?O(4HKRUM~)hPH&Ev2B4Ns z=P6giCof;02PHb#P@pe(C=i-+@pPRKiI;=FW$9ngPE*k0iUW)gCp3 zAS=LgV4j^vKr54w`(*;>|NnRGeC*Tt%cmRMXMOqNH~5SjkJd{_>Y&S;eE2;d8J>Lk z{Tw2D^tz}pK?jyjd_*Zi13)DJq%jRmtS~RWJn#dw4d&j67EdXBb+iFdapZ38yiTQ&%giwk@mNOH+P(CjI9?zcYhjw+X32O0zQX*YR3Qn|I<2MCwLrp1)a~!@ZuOJBj_-^ z^(R142bKnnPJ_xCk51PP(0Ol1|NjTw!hX!7x3&SqI04>OmfGOcn=FyWpL5WoGj@gt z^gKX*LDv;8l23ukm}(B_k&z`VKHbR@zO7IATULVRO}c9vd^`X8YCiR~d{-0X)A_S`sOk)FhC=&c0(F?M`7&=(9Yd( zk6vfc*4qsph$CrtfKF!e=wr6xCC9;82Xyo>*3g~`I?NJrfnGTH zAgIIO`^h~)#`MB01sy*JwiId`

qUt2&BO8^e+y^bPVA8S36$Qk=HFwCB|;vZAHiK^&9;aCL7`Tf2rl-(4SGG)4xlP1*#5htXXtY9 zRfV8*1nUQLl^#RwlZBjoxqULIkOU=n26zrW04gpmkC$?T3oCHXdSS-VTQUkN!9O(k&Hr+zZ-_-+Ge2 zrRm@Q|2r8NWf?RNdL*Cp>CNF}e3|zTw0#7Uejyl6I)49zbbULW9>hdS&f=w1V)9vnp<9|!@rc$(iR zAXgDD3=h1x2Wg+Qf^U-O^?l&c8+rpe=ym_a!vYep&4xZ=s=#G5=8dYKS z0G&hc`0WT|iNEK?Ki>{Bf)-KT^0@d5WpIYS6|@xEqxpyeq6Z5u-=N(c{?a`j&D9dj zpi!D=0g!Q}8$mPVht0vA-*1N*!DBWrHk*SR@vj#_`d^4nH9voACMcUX*QiJ^Ll&3$ zcBiNayae?WJi1w(wt>4F>U+T*7sCTDB0XOIe{m!jQr>~$Be`CryO75x8FT{hfBp{e zfmu7auP-jJ<+{Gu92h@j2eR0JQnvg5%t8)O&h_c-*Jfm3V7%thEApS&(4$x6I_TuQ zUXe*2jE6jW-FJI*9`rc)lgWeeBB=k=0X}CR?i|nWFMJpec|uYSn~&xp56z37ohLky z6uk86W#RHX_|x9w;13QT%@ZEG7+zm+FAHqB zJUf4Se!u7gK8=6{eD*NNlPnD$2OqGwXr5s0XJlZ2d$bjNO~;PIUo~R-4}I0}Nj?S9 z$mH?;k!R;6kLE{zJP*EN@?pH>0Sc>w512eH5AwIn16Aj}tl1pE|Nj36 zrytPx?hlVn(7s8~rQ;eNowYYoJh~ynwH}?JFAOh%#+g__18pgwoW#i8<0w*LDJGF570Kf!|?JDHqOmj zI>Dp!_%6`&KV-;kQQ_nN9>{>R0GmXjlm zr+)^eD%1-wA>rcF>D%Ga89L!bv@vMXA#{RIH%Q>P2gJJ4iO_lmG`MB~I;)`h2TQ4t zPp|KWmsOBPBBZ|SjuilPAR*2HImEN`AlOmQf?ph1^XGq5hR#T9b=E$oa84B&2o4G(|&FHm%K{{HT+0BYLvw@87SXWPP+ zIxie}0rJ0%1b;i|bVG0t=1~o_`_k|$fxiW`?z#DgHGjVtM32f28_-_xNA{K%_;vVF7Z%S!iM65vw4?`|LSLwXMJm%gx}ya^Bf+H{V8?^XN7&H+{TGa2MRkJk zA^#80z~)>5ttSL+-|jUv+Xky-zBq!$v>X^f?J7`80d>-vAKAYI9W(6F&AJw%o@qNw z{Sim-Uh%0A@yT#=)#Ak;!_~vsSxoJxOfdj+!rD~5iXtr5jTa1XTZgM98m_) zA?tTMdQF!Uqox-TPn7r-1#xY{*G=?RQJ}{GeTlu3&^a_!z;kEKL<($d|RKCs(XN!se@(~KnGYs(?4jO4Afq@ z3yLhz0Q*gZ9X^Z?DoVY3OH>#^`PKkb7K6>)25L5KgkM(1U%C|1=9mXEsc;Lk&kZXH=FL?BZp4g`dy2h~+d~`w- zXcK97?FCSY$lsC!I$Q6#%_q>2)OCuk-EImV$saloI$U_~2eNqz_oKPq>|S>*4qYZ$231<=5MJ3X-x)gd^}ab#lXMc zq{4;q80b`5hyFM-OP^J^371_9R61r>f?O-Z=(FbN>HlybKyQ=&n7n?=YzL%m?qCu90R0 z4c!^N{{Mg9ZSX;c&p}fGK_JOa@Ti{nYtRTCXv+cQ9!$`=(2!(!_A_W}0(eUA_=^Kz z&J@#f(5yh`;TIb|gS3GM_O8AHF%c$!&M5~SE9~&?7&rxgD-C)^ z^AQF3=n+Q!&R=>4(zHJcYTCcv537&5*`Ud>be>0Zodk2~bdT;bf!FZ*3MsjQ57L1o zS2IK!8izvU1^!lNkR(JM_+~LsvIgzC0I7QsZT0E@OVD*Ikb3j`&E6TtbN>JL zNIrP*CsK^5Y97=)4UUeNImrD%4|x01Q2?*m;n?$Zgny{LA_i#kvl(Rmy+B_#|x>Fu7yr~l0dSU~q# zBwy$}=#hD8vWn*SY4;A($m$EQ;a9#w>*mEBA==4_b>3sR3=r%Yw4}i1k`E#ofkDfX@1Q7xu%bSq4Qw&p%l%ZteZfG z9wuMxJnxZtsdz)K*unqu9tVG^cV5%{rTMQ{WP(fPv8}8O3@(}nJI^)#6k!J0@di{) zB_Hej=#hC~%{>f!zV9@;M*!hKjyR!m# z;gxUlJCAPbw8lsO8NGW;bQ#lB8UArzNb7V~croSK|NpL_GP)adB5LQS=10sPoy?#a zu9km{3=F=>Pds{A=NE$dN!vseJbGCt=YiQQ3eAuBn;*#YZ#%%h?UKiFXHa9A;ou|A zgAaH)FLVbhfGqp-pYuYevw}xAtLYTbLI7t8w3|9WJ9H) zz)%PuWo&&1n5wh&Uc`(VsN+Ot=-H29-W5~J&S0MZq^M8K#Ln+L6+lpTfC@v z0$N2MpuoS)OV{JL6L=lI$8jc5+r0T4wqHZ+P};Ay9^Dp@Qk?rHtR@F{;`u=h|9zm2 z`^lFJmVh=T!J2=iPeD>1oj*>3`$e0tgZnd(^+CO+C200Nu|=`Z6K>z`=a}}Le93z5 z6J&iGqFye23ho=0-UIasK~|r9dH*aZE#H4(4z?Rne}(z$(2fFhzm`X@>60|H__slc4?lQ(XoJRPz}rue z;-7JfY5B>Q6Rv}5B&7HUl{tv`0H>dmFS9_ZI`6+&boKv#nE$|`(fR#F-tGVY;bWyd zpgzf*NJzgBbXY+*vj^y4bI__q>5@m^j&PLT_2@O#0=xYFi$&HD7lUpGv}pJ#Q6k&? zsNLhZ130@hpAzutOpxdZ(1rDpK!(eMoPe0?0=3^D>9g}G=yqJw^Qn+D@)y(#>HG}Z zOKxKgI+*PUBEuGfH;vza(X8+ibg!I0lq&*t4YYqB?9pxD*=?ip;>~rW3Gxy?e#kPv zUKY@WBLCs7TZEfHcWHFKhe^DQ{r~tsC{3ka0p*JOFJiBtWM@QtilidPC(2!Ppn>dC zD@b5LoX6jC8B}d|TY#Gmt)LUZ!HqQVL|m)~Y*pdDi=YKv$6X(QqWeXW4hzEy_7XX? zHHx6lJ2>|p2G=K`j^tfLrB!+n(nvoAZloUp?H31iiaeTsaFtF6Cy*Df${&NbW`PW1 zU_hM-IQZWlIvW6<2KWV=2GBg{aqy+Rhvq5pa6Whh>4lIjWTA@HWz6%e@6S_wSB@PGky|FxnMs9ANbOOnCkIC%OCRBL&3I!W*gI&n1r=i+b40yX)2 zTS2!EgI0MR@aSy?T>}kbpMc(PoW`GXkYCfa0VD>J2Td4)*cYJpPN(tb9OBn>od6O8 z$%78o2eEH>^tOV|El=amIn1x=x&R~wk_Rs#@ZisT0N%o_>AIoyKY!mv@Il&aKE1vN zz@x+-kjtz+dR;qSt02ZBTThm7`6OTR>lV4@(<#_|h|#0@0Eds|i4qx)ZVt=q_4hzG z{k#SVdK_m2P4oI#o+y1{d7Zzt0Bk`o*g=ks{wfF9oBy*r@J~7B(GB*!NB2~a$32>V zvUqg%N`SUBc5ek=)HU^>Pxo4or+vD?w=gT7^XQ%n@}xt@Rt<0j9{1>+s__5+{}*?_ zX$;Kv?1U_e^=SUZ!r%HBdV8uOeDS|W=g)mIpse)$rU$>r`ELiA`CIsz85lsebzV65 zg17S^XgKDfyyY?erbs3Rh6#oTJe&U_-1q*)=__FO^@_BDRwIG#HB)MS&0I0Py53JbUk$-!*Qu71*gAdr#8Xwg^;JlFL*y*m+uoo0~4E(L>;L(NOETxf- z4e2TeJi5Ut)u(qUXo;d{r#pvF=l>T)uRzuKQb>;iIhbed* z2j>iM0_`r7@afJI@aazD@aUFEA5;ty>^hUc0Lx zdmf~81$(J7sM3%F9aYc?HU%<(!^+<>4YV*GcE7=1kZNeKzA(KE8ixY!J~;kj#`*vM z!R0Y%F6s9

~Fdua}01Z~%q9qUJ|PVDfJ}dEv#uhrG=P7$M=xc|w)pA2S0qY%9QB z6G(Xso^}GY9h@(Lq7XDhZ3@bP-C*Z{3l7Ni5@@}fM<>|#Fa7_6+P>g)un!az9-Y@; zFkkxr|7AR6=*NYD;RUl4sI7YZ- ztR=_aavT)#+q`v~A02OgXu)}^BLLLlahBj0bdZ2dlY>{h98R0y+3gCi5Su-lYeADf zpyJ-QJ6GUkJ|Z4q1LxroudpJ#(sdo`75-Lx@c#0*{4JpS`(7^r!CjF*@QbVt)T{I{t-@n*qfZ9XhZvkB)@6l}y@lE<^P@0D~L#ja=IErumha5TT z)A<~<(f;viP;vGi6nPP6!SgaTpmTyd-@WL(_8)q5TqkI+m(nEgqF&H;K95e&ei6`F zv`4{N0=zE44zwYIzatpn-qL_$P9Bm4Y$~B)q^=2B7c)O&LJKm38Mt z=xL>(PJFk;>t1kfGW_v%fsLS6b6rOu>VW?UKpJO z`yI4O3>+@-_+JZ&|7GC#UjXw|aRJ0rvrqg--XVoOJv;+Nf9GYG|M*+MUg$N|iv+b| z@4r~42kMm^h4)JMTR>NgfY#$d5=0p2R%URE72Gb(0(mm&2B^pc8+;rz-v21=6X-PR zl3b5&R=o)zb8q={LJv6Y2JJe84kNrg3A&gYG5!wrKYt5oqV9#>32+#^1jQtziQEsv2u~ld1xN!_9?!y{%Ftv)!@JbpO*lY71e{0S&gie=+YUs1SPoV%kyg5&g*i1-Zu`(>;5%K^{i9hrb0h zfC#nqzW~@xpz|Mcdf{;l@;GuFbN&Qd2C2`XI#ab#+#3XO?~6J}EeNYDq+Yx|_8-(s z2gMj@G386WgP^V&YJR^3N#~bA>HPIsP;Y(v5r{X}A3;gXp!6TwVEdp(5;Ef%0v;CZ z{0v(1eYys;;7?yNBj+kN`*_(n=pz(2}jr3!sHe z9-0>%`PYM(OdgsCJAXLxuRq|(zy3t)ff7k(X8w*^Mg|7ZDuO;1CI*J)7dFiY89SL< zPnJkCd$aI&l!Ih{TJ!ha12JCOG#_H@^k!+j#NV=nfq{WJn1jCqG+)sCOPs%NH|P?^ zYLVtw65ZZ1oxvQv?V!0;j~SqI#=hV4;P?38@a-5gf6Hn{28PC;IiN)gE&U)p#XKIp zwyM#f6|v3&%?BCz_t~&}bROz;W3>EU%H4d35!_Gd3>N5g=IM5p==7H94Pf+0KGb>9 zBl7@!`salLlp6U#ifF1VU%j!Ozjltu%vj#}gqth9>VGA_Z z4sO?V26Mc=#4pd#>&|%GSpcNS@MNd62-xn|t%&w~x3f(1A&Jglj@ARE#U9CN&|8Fa4*^UJ@WfpB>JfM~*kCo@4q z^PZg-K&@EMgD;qTKuh>oCV|tU<*}0V#-E^BA^w)FpgTptF>4*k#qd%Q)V%8av=b!h zfiRIkqxcwPsc`diW{>apB~LaU1ZjV{8?<`3`2lmuxGwh|NZ|DxvSbSB-p1HdS_nj29M?=4afr}paG^S z`mmhs(Fwj0^2H=In8=Igpk;2LyTCweb3BqAL_l{|gSUf%w$ga?+KN?zrl~G^bh3(o zSlwU~K)IWhq4g1?N8```Esq#I`27xfbh5sxkYso<6=ov%o+;NO-JyFtdTSd%!#GlD z9FRB%?VFw9aqtl@zaZ$gR2K$Dk51PH{%x)Yn!)`dkAn|5Jvc9PhwcEWJorcm%-PcX z$ll}NBXKZi1B9ahx=3Qze?|uAgl6ahkU*#Ff)}!&Y0A#yFTnMEx2<0V$RCHn<3*r6 z;{e*Tl;Qze<^nn`=|8+3YY$p5sQlue)TjTQtO6ii-N@H-CwVl#X#j8cM6@?cxgq5+ z3#c3h4Q!SicyUka)Bo4|K;`a>%}UVqE2UFG-OUL|8e6~``CBVN?Nv}C6*Oe?;*iEe z*myOlzXU6+!JR9Q<~ISzF$`Lt!gL7Ks^;%#0+rXzwprzp3=I4&EudS3SpCW+K`WhF z(m-Z!LFyQY17YU$nfHdGzFM(>1XP^%4s)G=7KQS^e`1F=8@afH+0ou+6 z8kF?`UG(tkMfhG&>!o%Ec%YFJylQX`NOgDW0;I*so{S8jZS#!$E!iMvfJSFPYXrel zAgMq9gBpX-6{yLsTYNf`IbgG=9=$CLkX1U&{M%eN^ae2UZ+G1TnrA)0=yC87r|N%@ zd7zZC29i>E!HHu9gab)7OCTu)l57@0IG|($PF?IC2Op_{^&9}r^B#Pp2}(bpjhc`_ zMde_SQV-CSEojmNX^#N<|6^Hwg%`ZH&FcyX=mEr|NsB>DbV_*;6MNWzbpck ziQw|@#bO0$df;#E1eG?R?AHKdAT1C9-BJfl8>wKadV!aqE9^k)|GQzEmihTxmw{H_ zLf2P=u22Q9uLdPS{?@6WYfZ(uAbtIAa9ItmKal5Z!8b2K`bnNJYaGBz9T+^4Sp`ca z8NjK+19Z&j3$F{Hr12cokvo3^r7t54%0u4w{{MdoTK0(19)Ae-O6e_7{&;=m#UoWv z`iA#EK<%&dKA`p>WctYiJpTb&r`r4meFO9hH6`@^2k1_7aDVa>xZnR`%kkI$J$g$w zcyvc7cy=D)-xjP3TYP)m88Sr!Iaw@N7u0R>=(K(@5i}A4iU!bza&UvJbjOP~#}SK! zl0CXZL7Uz@j=O^ESai*T9?eHUyVu~!20nfcKPO`%Wa^>|Jay6H(akE+4(=WF_rZDx`jVi=>HQbS zcm4nWVv-6XJbO)Byg@yxr_iuO3qnwZ@K^!T0`=%T+<5`K$`o>yj}1p@cJm{LQZJ8g z*6GFITRS{@LB~D2-guD@E7d{g>3MXAJ^+OP=(tSZ3!q@=4Aubo9_($9@4Y3OPk2Cl z{vyRg8+s^)2g2vEhbMr`2UgH(LS9h6Ocpc^3~C>M_75P0*?Ig$%wLd*>D?mmp>79!Iw7Z?cyziRc(K41w(}iauJ)Sp zdw~KSyejYs3%F|#0QMhba|WpVGX$MeAjr!AUXQpy5VV2)_zRB>pZVpQ55vj?5s+v25uPcj2JL6-wD#x@ zJph?zd~t8j|Nr2ugtjbv4``SGwyh9yqA)an7#;v!BnDc)0xSPGA?4qGP^i8*yYV0B zWJgfpbg1Cp|Ce*Y#TckO29buhkOMSCMU;cl=st8)ahTOjd*WWL6d%<(+&)g+o zrym}F!FibEIrU|r;ls}RpccqWF3?&U`2JKxdWUBH#y6mofIGK>F52|yoC>O9kXsHX z;BBD>kIvQ|AU`#~U~I76od@nDg75L{c30?ZUGeY#e^5tpQ68wH=qmZ}|7S=3d>$1L z8KNQpqGD7OJiA>~3_O#4R0Q}ndoO@Y>uhBJ1*zuL2cW3XoC~^Bw)G@`M=&b`L-S8= z{yrgQ&>6bdO+^eeDU@4|Nk!CQz4#!-q?5871Xn{2F>*J zLWFw3doDaWw}Nhh^?=;8`GV^sC_x?rFBo3O0?B!4+dwIL>IP6A>bwpr^G#S7KrN&W z9?%W6om0U9(c9Dj+WFcEG2HS(9j}KqI6(M^Q0WVeFc;|f|r9?HVN&|uq^3*A6n zn+pmg1qo331aVC7UXYP5?ka#9-3P&Y8y!INbDifvS@7CcaK7w_11;!kxyi}^TH~Sk znLj@hw8o=Q!K2&JpnEUKHh#^e0-&@CnJnbjTnn0o*GPE0JC+IT7 z7n~nJ0RXY{3@Ef9b|yjW?0?0~z~Ixp7NnHFg^d%$0lW1xe?I4D{`^3Y3nIZT@a>If zI>J~PTlRKZkn7`%!f1mEX zAib>z_&Y$S)$+Hj1c!i|!Ds$_HJ?tHSMosKC{ut=Ho^Q02~5;b1o;x`J+Nn(SV5=O zek;**1RYY>5)GO@Z2rf@-_i*R%WiPu@U%Q$%js!(l)oR;N%rad;nVrfkAv^* zeHefEFuntwn0E1>2jd4H%OCuG|3C?^*Z04VM^G)4bK^w1H zzw!5hPQmJKee&=Be|S&%xX1VV9{e6ZJbGE@cyWOm)y(`YqMQs2{QFoqERXT`?Ol^|AUSNXarwC4NbChL874fuFbL_YYu_4Z7>@HLw5m(V|R@T2QIJO(KUz=A%O|M*+& z*%%nW?RbywR#1`Z(`jLN;N>y~P^r)h%BQZN0g@un3@vIht^sWz>jZ^fi3%v^-`R+i zgiAK^cg$x86;a@13+gw*asjmbumx)e=jGM|pw?I~Yi|o1!)tw5eFo}bM?`=k98}(d z`ndd%lJw<9(3v9>JbGD+TR>G6$|dxmC5Il3M?f_Nv_T4)N(P;C1is$XqqnJH-M{}H z-Qbe(p%17*9m|JGc@-? z%0}?y_sfO9!I2HB34A)i#a1^sv9zA#Z{7U&|Nob#K)D8dg)yi+16{S={6n0-UmJ9l zcq?ei9V9#(RCE5Y=I>hsDrUP`E5kS#JfOMy%#Z*78*Kljf&2a*-~tK~El@ATN`ayU zl>GQxe11YQZ{&KgtDvQ5iyJ6_I(CC=O0cJ1D*ptnM0HUSaqNy!;qgqaQ4#RzJOw&O;ste}T8Rf)4)yO&a%#G`Msgfb7O~>1_ZF`GL0Mg34Bp zURHKD(3Sv}3dY0TQ$c5JcYbi}{0!Q54jMpnY<}&^-!TbPqJ4Kf_?xNuJtKd|HBb$Z zeEr~mdEd-S@~y7}JrDj;b=3UT`MvQtXu}GBXFD?k!+ubZX@2)e{tjA7p7{-=(6RHU z$H9NWEZ7s7v{!0D_TCtw_AEeFW;D1%k z@155gk3o$8z{J3?4{ZE3kK}7$bzpaZ7OZPtYktS5-Kqmxq|hCr!ohgMwL3?JMSCh} z1%V6W4HxaTBLDyY@9qUvkS>}RGB1HjBp1dLuGw#GTr>|b{_se?r1`-&`RzVy1_lPm zj$j|gS3ZotJZ5+>9%}w+b(EL57a^dHGe*WmPde!*X{yD3G2?}nS23U!d^m@u)maCG*9)4 z1RZ?D?5KIc(eeX-%MT`S=_=r;EdncDKXn(tOV@4(9>!0w0yg=Qhvqf(;`JR`@!GQN z7bqEft+SJilK6XMtCk+q4gWw`srp`3K~`@MNg}{J-uKSE0?_OHbzeZ$G?S+#iwb}1n;-xGzqI}N z|NlPF*6z-Wn%7)<-I!hYJ&%EN!AnNR?-%$xKw}}jn?Pya@PFqw4@e&JIQUNerS#wb z|M!Ene$@Q#(i;!bdLNuYL0T_YnDy=hX>&EaW z!O7ui$)m#G`WrO9_wM`u|HvM){rvxbH`srz2P)#5f7tN%X?+Iy9@I4g?SFkK4cfB? zcc5?b0Z7V$Oj}&^0J-rc6U2=tU=sqKmIq4IJbGC-IKYa{mq&iVOa%wz(NF*Xzi1SC z_}{VNA#=%>&`fQFSzl~Goe^0!8Snmx@&0w618KvPzr^(nR&6EH@d>p&(VMxEd9 z1_ds7)Y$~$f{r^N72Ve0!ORwW5a;55kH+_)3dAG%xQFF&{?-J$hyVGvIV*P79`Wc6 zUE$GNy8+zkIPMBM!4R@}88nULdZ61`0kjG8fqbXy9{z34pk0#9AkGf{?aoTj&B~pw zTllv*t295b?{wYpVlAle1nS^*f~@Y2<^Zi0mj<0$DF!*U5_Dc9e@h?uQXJ5@6}&s` z;L%;X!h`V#e+PIiFT#^tyFo3K<7i=~0y4kzo(E(kIrgQ>Zcv-Uf#HSpv;Y5Jw!z1Z z(X_n2Zk5iUq1f#=sf;%JGigG z@IsmkJ`Pd}E}1JHpq$O9m8APLX_3V&-bhzXjb@Pg{U%?Z~p1L~N9^b3O+-LM5I z{H@F&K1BZynEv+={T|7z8{<&MmtXA!g%9XZC8R+^4xi5FFYkl;fvfpJ#Uf~-5N8p1 zG^c{P-!J}b0fioD2VyHDXh)t618C^~5dXGf#r=E?3=Ewg zFMt-*YM%E1m$4q1;LelB!5@m6KRT~#9{+x$`2kPk@dH8(42&l-56om>V9-4Yn#)N( zaPWt`Z{~sYw6rwOgFh4y|GW0OFfjMJGxK{MZ+<3s@CTD4;{mwwpz_(V z^QUL$VbH!|&x5~JHGjBj-gIR=;Q~_i!?E*#N9KRfytw1RAMzdt-zzX4Klq=?Mf12z zFUwz0Y38W;!$tFeNAeGchJP&lEuf}Z^GimLUQq`V&?Njxk6xDZp!Efy17ksFkbCrk zqs*hT6%;rxxIo>c&f_nHcECcW>izNHTyDfJY~|;qKAf3tkf4I~BA%9NHHF z#a$z4P9961G(G9Vq z(^&$1hA~P9t{P-g;}K9gN9n*Zyomk>%I}9>{sOO{WAJFUHHZe6=24(n?Kb6(295Ev zibR8kytjgU;nJ=9FA5YaB@B!&L5oen{m^9BB_7@2fc5FD=0Kg2TL77oTZ3&%ZVqG? z4l*S-1Hyq!$xVUG!a=6wCO|l#dA9D*70r(jQ*s*!P04{g4N51FiA-Tot^%Ex4PJcD zFV+h362G9cz)R2}kQ0#iM|y%<%8+8o?hj~Kw;p;)q3!%jiwhA|)AKhJp5X8XkDb2&oJp{Za5% zIFDXiiBiywskswgNbmad-=}vkC>i^7zVqqb3Qoz8^y}04)2H*3#}0;Lv)%rJ%H+;g zP-h#u>j5;p4_N^H;@DbfI=>4^=O8mc=^UK0Js{~Gn&w{$|3%*K;*osGqw|^vcm>TT z@Cuq%f6%-dyorOnQyj;#4E~n6AZvSB^$kE7oMi|2IJ}oCfByeRnl|TeJqR)w68_sj zOi=i*1@&G*^_=osNc4$=1sGl!Ge7H&|=%ls}sKo`Rn zoB@|yFHU>~Env%ch0XLG0#`qs0-zZ{enAHgkIn!MenAh=CT656TN>mt*zUJo>Bu8%&_x1r-II=1sUQGnj6^W ztjND@s^kCv|H0>W^0)2*t?zJF=mu9do?3~BuNtspOh ztGWH4L-y17^Ls(F5YS4HUlW{>;7t_p2-pkW4WIx5SB8^TfO-+2CH#blCkqCB5ZviVesPII#BR|J;w}o z^gj>CAvCO@GmSz06wsLeOVFqsG`zsa+q_U){{O!RxKjjLoC?)*aW15JX#*a_e+E7} z`NbZnpgLIaIpkpQ>!6mT(6^8OUrqy;rY@i>fjlk$@=rPNG7;LYfcA|zJz8(`x7vZS z1!Ri~QillC8F~T^Px!Gye?b*ZC#W-Y0=`0kzcmx29THlwEdb!qddasAR1$&uS+{-#vWDC)s~pily*q_?2%H7F&00j1k*&PqnDp!~3+hQBom)ByqY`;5Ut zX)8fF!4)L9%~{2$6_gQH*z>mi820FhS zRInI<&p8Dd_5i$^0NmH`=-vy;E#I6~+4x)1KmqJH2OJ-ryFq@~0}fVDznKBD9f_a6 z6*S@kUPHs*DgZX9Uf?A=7ImP*A)xBOTDt26UJ60g86NPpdtNL2^Q4AS1(z)1V=+PH<)oSOUtdpb`YU z%OD552IBpTpP&g}P+r&rZWORS1Z}n4yK=nPK&R?x^JxIaG+tPGSssyRS$$TABOhetud z9{&q83ILuL0p-$`z5o9Ie|-}?U-RPjOo+m0kiq~^+a;0#?fhhLJq+3!^zT1^>uS)N zXLp58&~eWHm>C*>F(`r76@u0ag2f(y#S}nd44^UeL!i`hNWS@z{J}@Os^G1hptDXo z52dO8XDks;WBt#V*7%6wABf9&D6KPC0d)KgXxm}h$^(og7M&N;4!&S(e!$*azy>-F zEAyMG=OmRh(7`yJ2R#nHQ_%c)@g?KOgD;sFPe2aM0h^)%-pYJ~XNBftjLpyF4?ctX`9r6( z0>sayI>;X6Zvh>9isVVgmtx506*eD04<69*xeg4f{~7;4&a>wQIkVFpbVS(;zl9)A zGN*laR`}1z-?9lbxYBtXJVfx~6KM1TvKtn>-xL%8KX-t7>>fzFVef)&Ggkf2*m($a zDh}ePlb30r5>1}r#qEcXcJw|7zxe=Tcd!Cv*CJ#yBY02fOJ3;s5ER_Ej;1nw5{|frFykSwWS7;m?0wMkNM@PG^Oe^$>SsTXqc^1O^|3 zioPzKzXdex4M`9sb0LXASsRfUUcQ5uYcF;`fP@d|1TWA!&(%}|NlEc)_U&+>E(C*@bV_K(*bc5e+$e1|NkKln*~zR%i64k zaG!7M0S|tcA1~cOlAeK8`MKLK8uwZM7>PU9o+Yph*2U0W5X^RAunD zbbu}{?|%CcbdMisbQM|U6%>^q&%8(kt2~0F(hy|kDioC=AT!P1e*E8DyWqc1H|RjC zLyn!-_**~{VDI>J{(oU+0N$&{-vY`$uB~rNv_bWH^8Z0>N&>9zdaaj$9Si+l56X? zk^uf~!SM4nT^K)9$bzPX`)WWtTwX|kUD*6U{Qg@oR8A zyex*~uNRlW{3GCPAE112_%%kDf|pDAbpG29Ig=rDf#dhPFScX)Ol zckI08`28L@+)vC}mW0fL8jwm<8Wi=*$5cHTgaXlH8_)h7r1p zIlxzcym$x^?Y9Bt%x=(Oqf<=F9h;9bzF-Hrq0^ZIyzc|DKFO!^8Q7WMV;8)5F&k90 zxUTT*Jo3^Gnh!w720Us$_<)J?P)D%R%jMuu0G-bSKR<)N6|@Z-dj1xuHR%hg-XYiE zKS?N=xYi%r$GZ<*`zbL3l zvki3G3}Q9!NzfIS0{pF=prrQ5p)}T~J6i&@uDQ2#!;2;7A!8dYphcVD{yb=Hb1%3t z0ba)pTH3n-w2*lhD7HXrm_h5`L2G+o`~bCqwmIwibY@F{kNgRMEb_epZ^D;Gcr+ie zfc11@k=A#B*Tb^H*Zb-UftKom!;MA71Jv1;_h|klT>@I~TYArNFUanfkg=@iFCO&% z|Nmn3_XnUW&UvE1ga6HmutuHo8&IPTe10wHyg-j$*8`yAmi~Hl9t58nxC1o)Vd2pY zUiS+>ANqvhB~ZEL)AIT|a za_oifMNrq{AvnxHr&4yC&IZf4?s!oo2)~t#zoit^!|8SA@aQ$YB?}(;@#u72@nYSL z7ym&m*K44|Grk>R=WmH&VqgFry3XI)3Fv;lo?DV zpi&;-0}Y?QaDYgIy0NOP3=A(GO#AU7rd=r)}K(sca^lBQWmnxLm<@NaY0 z0w0`Bla{^(AgP=m(n_&LAoSBy0V`z zGkA2DE&yrzzZewS&pQwCZ*$gZeq`VL;DF&t&I=%0bUeCEAGk;|ys!qTKkf{gLt)ql zS|bdqt|0g2ZFAP;pL)pfB=o*KkT%^H+)tPpUiO05q=NdHp55Z0G3(}E{QRvVpjCU2 z<~k>+hYrfm4B(6pT8}ISS9cR}o*w96H_+PcmyiwYAax<&_1pa0oOC@pLl=Nn-g7|G zgN*=x%UsZ@ksP4Gg6_}-pZW8hI6S(oKI<5>>U{p<_&iX@>B#Hovy|E#UDF(4Ba^kQLCStiGVb`@y*dlmu-+&93g!6`<${0BxTF^>fs~ z_EZais@@l?mj3_W;H~QbuIj(Nm^}?__X_YatOrWVJrJwY9eTmVb{}M9W-(~L`tujs z5W!B+NLfR&?s3SPn;DP4c-RFBeA`7%pserA@gfkR#0{bZ zl=F6j8W?Gl;W-bQ>A+deHV$O8Btjpb(?7_e383H%?E4Qo8K)C9;uj7OaPyk^5R<0|Nk#9g5)9mV<5gYX#V9zHh9rT=z^DVpk6s* z_e1Mq5FfIeUYg{2kqtY@#wBrcwyKL%3h_hph~W{ z^uUXYpyQH2fj9%)Od@7Cj{~HlM;hgi0*&%RDtgdD4+hXl4;4Q^7L`nYeFfBhJHlRy zsPApLaM$?@7ODvA_lH?;qxsm6G@$KNdm1#kbVCE`7{ma`8J{8zL7`gKhQ`DsJ;Om z&5-mR94dSs;9JyhfZN-#;4?Bcz(peDZf<`M(5uU?EP4!DUfB80qw_FG z%U1BXH6)lo2TX*10Rp$gKX9D0gu>$d(1RDC8t{cw74m#9B>s9u zMT8+`6nHAnv-2xBV}XtsYJ9VT0d;}d3Bv;~MEeK?hfn8P(0UfgaiXA31Al8G8v}!9 zw~UHM=MBh^xHNx@FB=0x<6{O6(1CD{;C%$9Ro0-D4DVkA1u`;tbekqygVs0f1sUei z*$O(u?u7+JCK5#kG!gzn4kDwDA_E%IeZdmQ$N-v?Z~nnjBDoW^+Y{7tIOfr7TLmhr zw)%lKq#pC=HhpXbx9`RI0FWkd@(MiW& zRKzhdc=Uq3@WO}X?|+|e@MN0jcLoOVxN8R!C}0Xex03R=c!Ty>bUO&_2g!Lf|6u3u zJID%}uK|srK@XeoXgzFZgs`@;L4~ z0n~N$IQUA+2Xvz^_`Cq0&P$GskN*GXXYe@qh{rec(hHDHil@*vdxK98@a_!}V)W>A zUEtBp+F=1|;e~d1bh^#}-9EzKVg@Rqx*G1Fy-;oim9Y0=X-ovf?cNGXZ=mwx zX#=RO2ws%|8nG|~H61%$JD@9SUZhK__&1boYYH1sylr z3|=?F&=IWb(aFu zTqE$elrb|f!1s(E1jSBgwF0Or2d{tZMj0^50|i>+5m2s%)cf$MOi+Kxr}LOc^Dznj zmc!sg=^$YE|797t`2{JTJev1{@)L_k=Twj%_*;I0Mq_%xf-mfy{(`ocfFwYdY;{A9 zndq(nr=PxupxNtfjGf0E4!mQrna|%28j@~)z;DCJ-@f@DXuy)6f7=0%>~AT(EDekY zKuh9}d4MVuaLVJ~=E>N3;=l`*hM)8K+rg)nY&+n=_`w6TSPOJO-l7gr1iE&-Oh;Z{ zYO zq5A95f1hr!O`eVaA%`Ix^MNEi{+4#oQm)SbFaFO0jYZ$`=>{iBkAttcJUfp=vsK&5 zKmY$XzvA)fgiIs&KwJtj;>FT-(0~Wn?GVkLoyT96|M~ylySGLNdIe121f*jQMe4v6 z%nJ5WSZ)40P~_oXK2JV(&!q5Lg!klAU_0m<6SK&C!_arw>v|1a4< zZ4U4}7u-Fp{H^++d!(8B!MD7=L^|vq6h+|9c{q6T0^C0UwHjvpN3<_JdTpb9Ss7lG zr2K)EyN2K3B`;`t^<^JqaWy1;?+3-ri*3t3f}#sFa0LoTY0!X~JluSbYUKL*{fmq~ zh|}8tK*up(=717eZ;2V>OVDKNi|tRq4dDq+;41l=AFN8&zxe{W^$8l6h1SQWE!>d$ z7~E%g@$CUd=$81ba3~S<=ynDjvj%FqL);HK9`P4PiAKXOffC^tb)XqpNEGYJu;jmw_+gSs&cnLDk3|{61JwF5L4h4`q zxL?w6LH1sl@M88} zko}<;T9#q-wrvHNH#xWYxu=h;`i-Vv}25i=8ngGn`I|ruYwvPU&CZ(Q z0M47?-mttm`6{RofsRLecAf{_FZIo%*Yq_z=!_H3&c7a=*FoLHE1+>{ju#60ur}H8IlmkAUzkGT@ch-F4-v&C7BH+cd{{R1@B0&Xls0Zq8 zdOn@cZ8%CaZ3Ie0Uu<{}PR*cU!q;n{^F=RaKSu~oPn+;!H)!L*HfOM+c2G2Dm4Q7t z+X+-wzw+oc?eK#6as3sXI9>`WP{HLZr2GS4 z2no4J?{pHv63_y8sD4I}e(-U)Y4EcXKK*rsFA>aS^KYZkM5-46ekH7GG z{O3RDn4HdIFZj3p{SUg@8yw0U{4Md|W-6pn%`bqOssGP_=NCZN89f1c?Bf4@+9101KYs_PGvKik>G(g- zPSCZvo}hb8!56WzdUjs%(LCj=dB(Hzf=}lI(D8mgnjnhF19S}F1&{A9L05!!{sFoE z;17GRULK~-PaeIdy&h}~SdR~M)I4B#;Kk2*zyE_KkWwIH6_Ak>@cOXBX%oQv#X*S& z-T>f-9D)QJ-~}DF?Y22U_f@c4dzpDqIf!%NU&EKvS_eE`&kI{s1!+$Laf>3rnT zYsv(2QRjWb121ak{r>;587v1*Z@WNUL62V3>F$sys_FgvA3Ssn&0ik9rrRM>KE2fv zh6i3)&-?w~qnp{MJ6YhhSlR^Vh8ng12BikRtxxK-J-V4ao8K_{cK-WzM4^Pmr@L6f zxAj};ZI52tYc8w|FWyK0`TzPXw0;2h^UpT_{r?g)83D=$2Z~_l)%KdUFhkNWwEn*V z%6-VwgC(}$13+y!N;sPzIe^Y_@s^18=se*V18NI6fYu`02$TrEr~y^?j}Up}MfT(W z|6gAOrJTSbc=_A;6p>LH-+;#xJEwv=g~;=iCkzjOTI21%iUES_Y5a(uNn`L0e|JV;jC5X5?>?0?m$e-T)n_067H1qw)83J|+hK{tcj> z3G{4xThO6~{C#IZigm%e#UKm2!O?Z_0iOqCMZ8CMZHGrMcoz+LJ%UFsxLfi9)WL>! zvpja3{~r8!>Fgs49^K%Td!C(VJP!V}_q_PW^ZOf*gTL58_dsMG0(B-mJFk0c9`Ww2 zQDJ-$RP+Bo=m@cfZr=r-ouIqjAsTzJ$f2+d~3;UOgrg9($4Y^3i{f?yaB{3CbwyzKjgul@p)~2%`AFYdcC!J-SWpG$k33=6mfy z^Szy)Kw3gFK%+9IqMDKn;49ZbVh$OM4B+{*W>BHH541BXEiEk#RMz#@uJic*4#YYL zzC)Y|bUl>jL62URP7lTdo|;GC$DleMe8K{D3+UifmyXo+9tVFhd1xN$yx;-8a{AIi z(CMicIZrq?{9*KHzW2Ywb=`|;bN~GJ=r*0M0UDUN@6mba#g=qN21L*WIR{)IpB;1qu-TbWk9nj23`S4fJR{0x1%Zi)wiJ*utRw z@h@oCEGXs}4*a+GfbL2;4!)%#o1Ky2WhiKF23+oecXx7t*6~c515PS0RY2W!cpVOM z#*5OApsR60_JN88kbwHkj|43E0`8%K)-{6<=mPD&V>$+|{9a0e<^hq+zX$2!U7mq3 z6BH0Ajs_JtFBgEuYmx6++X!wAgb9G0#F7RI%`gd%ZqtKmpa8u8;$tc!!^<_`u@cby zBxJl#Cj~s|^%8UxAgJE<=mu}-*$=Y8V+V+2U|?|Y(ERRU`Juwo<2ZOr8Ux5dpgmBi zK?zd*60{u-v_8Gpw%LxA!K1Smw72KQ)KE}@0<&Mv1nquex$p=cWFXTpy?5}}|NpQt zV=)oXm@&9We_@sL|NjftYY+Z=H0}kN4YJjvm-WdLkZm_TdPS@B*cd?fC_QIq@Zfj3 z;L*)$Zvj5--0;AQ*i$GiO6YtFcu?6f1blc~C%9SXaoiPrh+l)RDH~|MfxqQH$d%o! zGAiJ9OsRrTudccy8w0ph2c3yLIR)I#`J)V$FL@3sjOM5Q`|o40r%&fI@J=9* z(_VOhZUF186@Vq07vB$n#*9D>D3F(4yqNqSd^|dMN)FnPM2uh63cLshEo|t#4_2HF zx~8`I2x!y_KC?%B}|>4TA$7-K?&Ppfb*N$BQ+YAm6wy0A~SET=BPp zPMPN47J3l2GQ#yBRPsOQY8_Vaq~HG+&bi>#5Z$2%P_7BO(CK;rbPW&6oju|ZweSTH zu7|*@k2+irfs}%;9|Em-0Hv)rIUr;0`L~B2LbX8E;$6Z%| zQWt1d+yc-PyhrDKenA!$&{DY#{DM9z0v_G22Ru4mR1`eAOBG(Yg7pxK6uha_^jZTFim+*t59?{|#YdOt|C=jB82MZ7gG9PnD~!NnAe9f<89cf{8}j>)fC?vY zKgpvzbb^QFtsmB{e#GwS@_{EoBvA4}OYhlc+OB@a9-Z}B%h zVrO9Rv^>Dy)CWF%?bm<)mU?yu2E*H~t(PEkVUGNsw_FY1Hb0hcJ>bIc`NGxkzhm=L zd)L<6uKb?A9h;xqgRZ&aZ?Ob5ML~hq{DXtPZ9RzB{DZT^(4)8D`+hD^719a5FzdyU z`yc;%bc5?)P)~TO?2rGT(TV1tEc`8Bm_R2MzCYmD{O>>iw%e}!+unLW<|_C#T{pOb z8sDIXKLaSIcpP^HU5&v2ol3Hm1LXtX6`*vp0JPo}oYY5&tTF);XcmkM}x z-uLOOo#4ax8JyEwK(|PP5rj{)YRvWE@76iV)RfZSnugTEQ%3~2elzfYj^TJtN;=3gxQZQK8VHU|7t z;BNtKa|R7qdvv-^@UXm5dc&jh2KXu`&)!%G&(8bcXaLoRplASbT0!fyJ$h|(Tv-`j zEcgEN|0QVsO4@mjcz}WvluvnQ8n80BbWR1Ww(x-r z-@JGk3$_B(S8(YD%QXM6hq!{j{Vb@-3=VC$Wz)d(zyb}w^dK828-7{ww>E;+f#VKg z*%wnbkYyl~Uo^*pPml$%n}66lb{^($7X)?h!Din82O}i6^Y_{R`TyUs!9tI}6_hl= zNul$W;Q_;M9-6;An)iaH4H-N-LFvFD(X%bb}9mfQGOu zXf_vAB)N3X1(l!B{PE)7gGZoaZ9yiwbc1C;ZCsDegC$zv5VpKgB=(XUbjlZK#Rep= z^SAu^@&7;nK7r;}2F<@X%btLWub17RqXjz;b{_KRH8r@!&H%ccp_}!YmISmaX4(7V z|BL(+;CaLgTCkyfV`JD*{*yf~Ktsna2G9h;-);yVNCB4)9?i!XJvvKgcvv3e2cPQt zQWh-9+6FSe*VF@U%-lWTiKdsi;Pww|8bm(D5N1s+NWPoZ4u;{QI-H6|Xt zwl9s?7+$bU19eEj=lO!J;??}@(Ru5Id1IfV6pKt@od}o*%Arv)zhDheiL(Ko60d~J2+ZMy z)W(O54_`ZkK0eIfG8sDiBx}P_VglYF0$TgT30t^r2AakL&zIV8ltkJHl(@bKxC-k2 zfTxaZI7-h%gZthdy|y(5Yz&Suu`dIrfZ`N-zCCN{KFCE>u`geo`h(by%Y7DZ$m`a$ z2`{u4!ug(QVN3%Fi|`De--WdE=o0woLZtxfRN1TCK!7#LPKl*saLch*Q- z`Jb`G7<_RAXd)1FY!H0hyWtlHsXZ{?tBIHs$sHb=w>Ex{y@Dm%3fyOO6?}5f}x}!nL4u3n$&fl^Rv@ajB&H`x^ zmlLK9)Zgnt=-ikB>J1~#%HIg`cdw||D{;u#?4WICxv8%~%TheL9TZS+jZ}CE+K!es z!KYVM@)aoQT?fVfyCvZLJ1y(LomS8Q!;9+upb?g1NE3#vptf%}A85~!0a)FCk51nc zFPK19b^D$G_tg)BZ1m{754NwpIMW;vSVdMjAd^(L@mV>9uAniMlJwHGdKIm4+ zV=vyuf~*9`UMu+Sk=EP%EugzckoUhEfQAzw``=YT%;RkQ z10CDo3!diFL}}k4kH%9MhCmb|p#%ik!s**vI zpMk$wp;dO^)))U_{q?7yy=+%ehd{e+(*-0MUfc@!2OhnGT<+%q8m2lB?FeqrIK~*B z1T6?>2Ok!IQeLJ!2PIm>{U8a*U4GE{M2A5&bthU8x|k7Egz~rC1D$vH-B|;)>HG`m zwEk_*IzFAxVXH_$y%Nw$59C!Ipv9A*)h>_`F>p}_>Jx)DmA&8vt>*=m!Jx4W(2^YJ zavboiQa5N@q$}u%MjhzM05Hu5K*chm9#> zQRdKIgX@hK;w_+)RzpGC7$7?Vp_3WSM-o7V@nL>>(EKO39+<)aYRw9izil z$3P)gstoc!&T!Iu@$w9)dJEQhS@{3|{};E9{Qv(FbPyLboPN*v|No^Yygq!f`v_FE zGe``yzU#$}8Bih6oIfbw+JiCb#}}9X{r|rUv??XmqxlCfXwDWiTXE)TzUBJe`Q0JLoAkZE?#4yL#!<`Ol~GJ7n+X z6wm=(0WXrXKm~a%wEBLrWcQ!{5mBI#mlip&t5ZQkG)UDhbbQCN^O$GzF^SSvk6znP zN~{d7hTmRrSpE4APTZh*x=z;v9=*1@XW1DH54_kn8Pq`uJz)6F@c)a%PVfZi>&2jS z2+v!fcIkCaXuI?ph#>+xALa?|S)9{Qv(Y=-x1p zI-kz>p!JXzpti8^i#(7N=yX`bdc5d^|Np;?hL=Mxyg~eM1V4M~|Nk#RTjwD86EqbU z0TMC+ms9Uwa0h_Gjnzg5)Kd)wr3pS&Sij4E9m;GV$UU(921!rg3elt2blL-P2GBY> z36IX&11~tXftp<4+ldja|LLrds_Qok14EkQcUN%T)yD#w>;mmA0*&c{wwaWI_o``v zN`*#M&^8{^M|;>AJixs_0nk3YZqUH?wzaVRPoCX2DjuCbKowZ?5BAdI-;aa#UGTT4 zfW{UNzUOa#UjIU4|LgyTw?Q%8>!Kn6s-|9oFBk`{m-jgMg1`Aey@%yt{$9|b_Mj12 zpKhBQK9;te9Fh$DEvG?EL`&N*>>$o923g)OnI19iW zM+m1I%!z?;%D|io2qzKD0qvLYv9$GJmt-iF2CpQ5C30|Wda3!5$cyzyUjO&8v{e9W zSOiMe&4(F5H+6kGqQKt@8Zhv*j!_Zd@8w|z?MQJ^QGj~I4y2>i^#A|=p537w5QASN zLQIna%c=bb4T)|G)r3ekKa%rkKE(LK7NX`Inc zK>@qvAUG^sbv?RGH6X&!b|yGyOg#wd{nQ?KG3Omv=U-;9yFoguKvK;|Bz!tQpcMa* z`0)hQHZO02Z%F}_2cQ);;8rE59Oq|&mg9UNhKNUZ>46uZ_0OOqB0w{Y{PK`BKd^$_ zu_IL1h6Azz!=t*&?2BE8|Nnm}4qM*>5(X9M#h?P+?8RJ=Be>S@0ztew7?0Tt)CL2$Pd$#au4Iw~C*Q-M^8OgBE{OZ`!GGBL#?F6+|2;aN zzVKW5;D7Uv|0PVZhdp|2!``tnyvRO|QfGklgU=WZ1vNZ6KYKL4(LnC%+%P=Q{0w{+ z!R=CRQ0H{^S!g?f*|YO1#)%}Lbt|_(E$90$7Oe->GDkoidsr<~8qxfq-SapLX!|K> zMZf{a4i^>O7odT3kM7bFps;_@odz0pU{OKonIAh0N;R%X2dId7G#}A`oSy0!8+#b! zGC|M(|6i=xgwmo%^bbQkJFj^3iuT+D)r6hDJvzUGd*?4!hk!;f?t?ZPbvr14cZnYd zO$;%>#uS<%_h1I-`gA@5^?qKSgjC*;^a%?;Q0>a$(fH5aiJzf92y~hR_-Y7`%x|D| zk1w{S{s(P&<+}+TI{|Hz?Pd)Z09EQ1FVsP9=nhcu0G(bN`vZA=;3TyF;IZSj$+qiF z_oSUYK(~W`0Ii1eIQUBlG{XSCcpQ8avE~I2%O5of9+`(6ocI|$7_WP19(xH|y#{ZO zAeqzo39?`T)Fbiue#zteBaefxgg_Tne!l=39=H5iFXoYX0Bln8dqxjUuxVQ0t{rO$ zKe+wqDFthb99{}e7wF;f|Ku#|dM|KzfR5dGu_gr^5Ue*)0>TeuTDQduxnNK+fg>Qm z{W^~wo2Oh;d%>+Ih!PG`nBj1|KE@;S5W}fi*3fWh_z&72ydyYj_5%GKE)1Z9mchFv zVg5h(iW3qB+(=20nLWMn{2Ek2!Ew*M9}F_d{U{stw85~If7|Nj54=Wk^NwPiZLf!b}HYtYBYzz1|a zI^KMWqa#2!+NbjYbW8Q&v28u0M<@#a$k9Ra!?y&=+!9-RRah#ilh z;bPE!ZxZ6G1~tAwHz7{&AUVFwJTecU#TV%QUy#rDyMT%j)(@a;*K6u24vRPT#h`8j z>jEBde3rt+-!H-)pP`s4s{ zf+lG+0$zi=TWEu*9-R{4La-9lCz#>^>id_7gS=tU32Lr90}0!9frLxLKy1cPu#KP@ zGRXKm=%@t#7I6APZ07&%2GYUbcNKi#^kOE^NZyNQ5W!B+QVi(s`p=+&;N~M7uo#8K zC(>aex}c%}GVZ7ZVuHpUL90PQ=^ptUc+e3C(E1KE*aIHlyAEw%fzDv>eEwppHQenb z(jY&Ebb$Q`D%T@B!7grv9L4bd#ZD`v^<1DeaXy{T!7Yc_mvSB82<8VBC%vW_qOb^7 zTL|lqfXgS)I5=o_=fyhD|Nmn_MStf-q-E^iUxC)IgAUh(E?!T*bQo6ugY|m!0}XALnj3xtxjEDm0 zDab3G?e=E3v|~H z`l;zJ%DMjj2PMN2MUQTjQAAKL%%k~;0mwav!RC8(+rIn>D%_sE5Cm-r?{q!k(aqZT zQv$rgRLiGV)kKU9X+0Et{nlek@Osr0h)U3U)%za3z9+ydZb2)Ol#havHfUL(N(t8s z*Y$t?zs&#t|NlNF&@6PX?PF0kh8O%%e;{Yxdvvo3|CC_h7jr$qujzULvsNG9AY16O*JTCW<%_K@&oKbn7tQvfz9na_G0xBxV@zv9-a3ccYqeWf_4n;69g@r zmIfV*-Ff_FCTMW(-%6C$3T*rlY?()|trsW(gXW@qdToIF9wOv1Bru{`g!!)PKJmFgT&iF z;vjc>^xE=4#En7Xc_4AnJiSM+ZTu_Hf@N^Hy$Az|gL+CHy|xh$@y|ab7+%;Ri3dT% zFN4I@K;lsI>mcTD28r__iN`_2CxgVlng9F0j|UQS0V1G zIMjSAh`2FGd>u#}bR4QjukFD{VE1!_#HWG8q3VN#!REjIF2V4k4oTb|B7Pbqo(2+! zn)93wY|d(sxF3@Ebcns(AaOI0IB2D&N3ZRAh&kCHaXFAUFT`JSA>!U3aW;@R)IC)Y zaj^P#W}rlW`~@2*oS^0vL*##dlVEsp4l4f)rXO_1UMK5yklZGy+$n_IbB|8e)gZZP zP&wrAk%NR!Gf2J+D&Ggw>(OhgF9Z&!Vvu|oR6Y+R4-J>|yx?%L2FaU2<&ndu9O7SaLGst2@}Temmk^-d4n%%7NPZhs z9uz*XS$8%;i2FhEY+-*ump*xPvK|3(+tXkD2VH1jyGn|U;RR@S1^Dg{*7+dGtn^o) zMG%ic8)|!Pc|f*w8@v#)dHmm_Teg)2w5{y8Mx(`G@?EhnbpjsO3@5CY3s8=my&6)j5#wYp88NU<`! zI28!e0TDkJ0T#aq65oU*UX~0N-v<((1rdiV9qbj&P6JEb&p3+@h>T7k3}LZzSqaR_t=b+74m0XBvgVh}0NS&JZV zt_6uPA&G%To_b9;H2?qq;&lMnd*Gn+=oQ@qF{KHl;{rqqW=c6oY!9kfrT{nquO0dS z|HVR7sc?|;UQ{thi1P5z|NmbU!K6HTMa7PQL!y|ImElDclK4J|xF|0x!wV-Q@ix$n zzrCg&AoW@haaagxzXBU&Day+5f*)0?p$IH>>^&>Pi!c5VZ-bT~di09AmVl*}d}n2N zaT6*94Ogjru#}$!E5nO@s8ad`U@1kA)M8YrFAymnkW>dm3LLj<4uG|+;%8%cQGg`Q zau6(j3gn{*B=JA{!Q!8I*%)3pAc;TO2Nu5y64yWyKLZh;c$byog#ePc3B;T~cUT!- z{O|+&9qb+%h^9hUhe7JSki_$jg2kCY zt};Rr4}*w*1gV!o61RhhgY9L4iG!{z>NUL$Qv1#q91=dApFn|OdIltR3nB&*5RH2Z zwr?j${1B437({#}NPHEN_&LzUTfL?;LE@8;#M>a^T_Eu)Byl^4cr8dg2}%4LBz@UVLJ$g-9^gs=7@Y!ja{}~w!Pl7gm_lo-N1xJ`S$WekmkN?BOmqNs| z*;pA~{PaeM&)ox7Kbeb-;l)EF@mA2KioK>~An}t(;<*rUqg$*DFE%2HUxkRzy~)b( zVkVOKUWoXAkU5P=;!Agd?L7w)&qNZhg}8G!NIVcpJQX5-kDZO-g(Z@B?G3Owvq0(< zy+I)(>U9Wo$SycIOmBk3IU(XkNa80z;vc=h>ZOpx!S>$t0)-DKmvr9u=r!F0QhU_v z@qdU2C|{T^28nG1s{>mk8VV^cHZgN7!R_sUM; zVuM7Z4`^Yp=;!$V|6lllwfJf3N9IkoZ(j&@GntVJUlB4%oXsFIgF0RG~`UhDd3BWMy~}50!%E zl?hY8y6%ChG8eE#KAry{ZcB~&|Nn&n$RE(-mtHXI{QJKTbSsueuWd3X8w2RVsQ23c z{zG=#f_iw3Gnqky7ce(n0-g8JYibYjb{VLq=#=e$Ede^PQ35d$)gnl3#g z&fw8&E5pgg@bcsb76$nEXy*@AhI$4DTLu9Jh7u+IKG3-iy%QK7{QnOgWo>-KaR2}R z5>EJdK*g;_EBpyT16ZTJmZ7-8kpU3vkWJMV$k zLSBG~x_ETEUhwD+1y`ZS4Eq&8d$Q{+U;j_ze}4cx#`fK(Qvs|lf`ebs0W|M@;l?T87#i`U2t;Ymd&-7oc@P8en&p>hA|F5Pu=*m)%Qg^~p%Y(10zfM<4GIul|*(=1TWA9s)d&6t5^bwKoS zhX@emaooWJL?3rZ08yaZ`uGJMH24J_EM8oMMb>fW6p*Axr*nV@$W8`u546)c$D{KG zzo2skzhEzhE=y>_3p_4&&ON9pTXlIxf+-0ePwobnfThL!gAn-?E93 zfdLYo-sYhBsR%?Qx^4ii0(_yo_V<6oOW<|dR z;_FU$`RWMX1Lo0PyWqvgHJ}`WavH)hkh7bQM7W^M1%u9o590vo0;TsG8-M=?+56x+ zs3%^#!lU(ni3~iwv4gCCaReb(`r4=SnXBQq*Ic0aVDMIrV<4kIJ0{*j+%N;=+$XM` zUth~Z&2emg%LwWobo(}Vbh~!AbiVq3!KXWQ22>-+85_ZRYiD@0{x7`%USbaM+)H)P z(4O)%&Fz8;-V!TGk=_lHMk>5qM&D|BA$J;Tg!61fZmmA9cDoxi}BYrwR0 zmj3YQE&cIg|B|o&QB)(wV?jf)5Ivw}>Yb%8JbFuCyzq+xT?P%B+l(CQY{gD*i7ouFA+pUwx+ zqR}xPR5*gy)%tWVo&Z{$)4ds#N1$ijzmEhDyMRt6UJ~`^e{*#Kn@9I%&@sjyovu6h zTlhgcq(I5Jj){T6yVu6##a@_>V=s!L{`~jotv%q=y&GhMN2lw77kVGTVmm;M1*MOF z{)2D8dF0V+`fYv*LT?syy!Biit;Q5PiuzIjFUPLE?mfo5Ec>*%(6m*Fk>RBec(K8DPy~2%?*~Q4i`)p1Yr!t} z=r!ej#>xQNkPC`sP^8pPegHa*ro|jQdHDXte~{`<*8@J?$sEvNhn5(jlOO!|>D~-- zRO^9K5s&U-0Z28xt#LBByWVBO9Mtq1D7 zT@67~p!=V)GQ8&UY(CEDVp*L~XX@R{QV%*K%Y)fDz@wW1j07627(n|%12`b_l%VbF z#~ELI5B~ihq^bV2N4M>v$Do*a_F_^gD5k+)1tpKk4B)Wl0&mWIVaf*D2xXcER{IJR z{sZss{q`bK5ag0NZjTur*5DeXqzb%Q z9<&Fyb>hGO|6ewMC(A(gV{wNS#2u{2?pPKGafcY(9iW`@g8v;T^gn_Q0_wG8hiEW7 z@S-9R9QrTMgO?mW0te-P$NwQJ3Ld?-H~+CRbb{h22yCY70r2TvFI*;qiZ=&v`R37W zs`^NR;pK;KkoJm4w<#}({{X=k1@SK+_&LGlX_{JS9j1O$IB zh~EI?_lk<{5N9y__Hv%;Yt#uchER`g){1wa#=dFfV(3~|(8?H*R?u<<*nM4|o&Q05 zeIQf1;H^Fy-R?1#?g{)Yt3fp}s5kK9p#JOsj@{)6pj(nb2Ra?t0otCTc`uDW=cGsS zH-1gu4Iba0@i)u{6^+TCJ-fpLe0o*NJP$r$@#-~E^6IToG63cHnSBrbdv?1A><2YD zd>9{qMu=ae=z~{YdH8f{cy=B;?f{x@V(@7G&%xh*6I=_I26(i7D`E5Ot&8}7%`>^y z2GovpJnjaX6=87X7j)AA5e^_7{m(%hZX=Iwvj#hclKY;W;TfRX0o>w* zoeYvT;YGF{$m68}o}F$Hpiy>EaSz%(32H|)S9oynw{e2HkJnyufY+zLum-8`bPIS1 zx+)X2{|&;oc*zZxcj;AO@aV1&*aeCk&*U#Jtc_p)ckN7%@$7UDcnR9|vL7V#;z%K= zi3&--p&reaETDQY%(L?xXd}s2aL*yQ^KwasV}p$fgHPxCQn?q6(V*JukY~4@NAhQA z4Hx@zcMj;LW`-BV|G)({sI?sZ;@R_OppAH-GBg??uKnU1So|GmE%xM8P}O|s^#;hg z-xtlU5C401vc2wu@IggT0RMAPss8dc*yPs-LH#SxM85?@{329*B2tA8ouBPBW!WkY zp5d11dhs9RCQgsewQ0dJXsg;f{TI^%Ukh=&rp0ZpXfR zAp{Z91NGiKJ6Tjbx{=q9*`xH}5d9Ow1FtWE!nxa#13Z!H*?Fe7hMCbL`TvW9x}aqm zEGjQS_u;&7?g15m;PMZ22g#Jp;P8Vjy9O@@dojNQ9GLtqpsgaFokt9BznJ3;isqw^ z-7YE#tq1CrUxLm?fKCeVXg2S7O-^q{ly6$a5_wU3AW_*PEh!OHvesahOr3}KgC;Ux1e-tn-(6i`_zhG!PkRqq{Q+)0 zMQ1()WhKy&50JxKUU+7Lb|--=a!~3Neeojv&wub51<+L@orhj%Koo!)BM=40K?*<< z^iT!t5Cxz*8Kl6?15z=+i1&xyAqrJ@KLcbFq(R!f8{BSU2G`^-OhGC^%_OMGtr;L! zg4(^YhhKF31TED>T^|SDjhpi}9$Ilw&sJk6sf8pKj*>(6ZeC!vh`%pRv5= z1*HRz<^u*Emd8r;J-S8MJ-c}rJi3KEECoxRL+cNaRp8Y|kR%B2H#qJEwYgtEeqjvS z)GyBv>Y;hj1A2UI=XcOWotnQqI=_QA=XN`5fKE=eJX9<0(JkCuWy4Xg;L%&dY~j&* zvQ){Vx7xyk@dT(3Xg-~XLB~P)c1!ql zi+gm2ZgA=JUE|ZOhFrp(Fg)Pc?QGHMy27#Bfv5QebMp`RatDuIQQK{t3?9iWO|U^W zNIS4Ibcavp572?Jtq1t~LU|Y%Ji47FJe!X&dK`Qq0a{r5-={lthhw+1fX8uX4bT8a zr?bF!*EI|bEDR-FzLu#B{H=MMAZ@N2JS`9LH$^frFo5Nm82DSa@PKxHfHN5be+vuf zB#6#mKAMj_K*w1e=LKnF_DrsJ@a*mexyPfsz{A7x7k}>_Mh1rN3Wpt__KW3le&6HZ z7J+j>9g9b|bAU&0b%aOrKaMgM(72FKXXp-(&SU>CdK`Cl067rkV2{=V9-Yn}{C%Je z7arZhh6j8)AA)mtbCm-}y|YJeaDYc=u>=1$7ABByI~YB>ojp7(ogMglLAPZi1&SIU z$eF?(-Odg^oex3UJ$efm>-Ktd2M4^~4J+R+dUU&P@UT3{-}Himfx)x$yszeUSTMBo z@-Q$Qcjf_=P`<7I>oh>e#r0NOfRh8r4;CKG)fzsXzkE8cd35^jc(Jzylx%!=cy{vn zcBV4;Fji~q05zOmf|lEX^Feay3eRp24WI7X4ZfP!y?R+Jp_Y|!f{u^qzs$|R;9+^J zmd``;oM$hKktZmXyKXq{%mbR*bu~QT+xnlsuayhrHD*wnMsf?|d5BYdI$d|XFakTJ zTEnN?b%zh*f3Pn*e|mPZfgI)wy4T8&i-EyM^SDo^vw`6OkIrh1*G3aCW5}oT+5d~6 znDJyha@?5*v^oRa2=MI`1DWK}jdY3^e`_5m%$tvRK-))<5daqk&^mk}&t50cl_5L2 zodr6A6+FAEH4eUD^6d7O0FU$g^s=;q5co-PEgH>Qz19X_y!53_v%+3=0 z+gJp^xun}!1vD%Qa!2z4MvsH9*gBn6__v7&HXmZKyil|WVQZU!{>ECa=EH?v2tcR+K6 z0|zKqcn5$IsAq493ZqAF0Ha4|Feq&^I(C4XEWr+-)a}{%#l!MY&Gwg|OK)K57A61J zf-^EA|2IG2Z$4oF_8(Gc^mBkx4O|t(|48!h*-_+WkWJ|h-SKigc$WkyzoYw0ADkW` zCi8DQ0=D>N%zscVj^fU@s5U@d05UrmY&O_j-_D=Dnh$+jPxAM(01fr#dJhhd?$87L?SUZI_f|)MtN@wih*BgifEGz0lllAJf_Hit zgNmg`;HjtPI!Lip9N^LE4T?H8aIwS$ia1EI1R8-w3gsUl+q#WGvF_9P2&CPk*8^NE z6$iZD4XqDB>E>l3QokRyynhP5%Lx+R9tU4Q!tv#6aKi&z{2T|}0JROG{=f^?<`W;l zQH12G+ejwDV(@kE1duzBRB0onAebs7>1{}cz@3GV?~nWmI?AYa$8l#K&|HPD=5;f06pw`^W25_3e=HJ~&=?v!1mnGm^Q9$YOr;p}C z(2>b~r@`vLHJNX>bAbowR?zMM4-d=(Q$i=E-oc?gntE+Exs zsEKF8Z%`T~De=^T4=#dN^z*?HfGhEU*6WAvc-ap=fB_yZFGW$)(aS6}z7-n(B+hXC z3fi^_ZD+v36f=YCMDNjU3`+m}{iYyu zdvRrR3R{SPw`U;Vl6vClo*?Bb5{XamVyAP)Y}l34+Urm%`u>abW;8 zCP4F0h6iBPXQ#8q4p8&r<>nut_0=BTzB|AT0u~1T7SNT5;D%aD#COoHsPo62c|iNV zVEG1g2uOtu2Y>&6u)~}!JeZx~t&!s|3~J!{2GmRi)z&_YKVJ8M+9CYg1U-5k89lna zB|u~C9l;8nCpx_aUZ#N#KkR1RdIvmY<~IR4WcK1oA!NMFqq}qmEO~ocek!){>AYZg z$)mSA;57%xT#s&0mBkG@d(X4;M{^~pjsu5euNNbveDwJ5*uf*P~HU1;e;*#tM7D{07ZT;Z`^85hL?-KgG>_k>~>B7o77z8 zft0f$T3;Xb=>`{Fpt1)V1qyf?gfBK!!NVUsX9;TX`)V@1>7=J(;r7t_c#RIgx1o0ARb{gU({{F&W|Np=2 zf#o-dyfDZ*aB0oo9|)4qfy#rLl|GEHW~E1`w}#FdP6ng}976p4HXtX2gG-U>h?lp)ZPDt8m#aXP4!F~c)KXaB)A`5|Tomo_>5g6C z$#~>t=m${w1Fo~c>%CkL_;mU%c)|A`Bn+;zz;l+6iU?dQL8~jDZr=s`?FT{KBuK@y zz_;@O$ZUwY_TUl{!`yA)UD%ifr|$v}Xu(+lFE|(YbUyU$Jb^It^(S~FfbNfgh0cw? z|Np=I3~FLQvOH+q1|}!>?f?Imme5k~xHFF!Qpha;>Dvu%RaZy6v;y@Rdfop+`@24! z2RvqaeE$c&2nTc*pr_^mk8al;pj8E+j&T3?5C8waRQL!ACTEM6e?a5gE6YF$GT7qf zr(gg7L&jqq!#q2`fkv1AI)*rc?m_N64LYy{a^|rlBLjnL=W|E?ZETK>&l&y;GB`HW zf-X!2O+>dG;BNtKj|7i1-+$rj@b|xK>;ICnU7!r*(QA6?F=+bl{);7Qe?iMQD_^lP zIDS6@UT@V38o>Z@1VDyu2AxCp{RsH63S@+ajt+y=)NBTtrp{N{SM+Z zK4D-GV1N$Rp&zUcy24rpdVJYNd$8O1!ADZQz5?kdg8C^R!AqJzYagW_gVuwa{Ra7g zztsYCo%9-rI@i|!{H@mi|Nq|w$~+#urc#et8D8s70H35X-5E6VarosmL^~0*$<4w3 z@Bdw({N&MV>I>Q}f^^HWW1M4r?8`pYztD9|AoT+F;4oVDh?QX%s4xVH<*0(i=1D=q zjRCZf4m9Bdl6znWma7M;2Xz-fVm1)MvHQYQjY z=LS*-x&{lj{sko00a1Stq#jfufW)4tfb9~4x&sttExu6mBOvN4LFz%p4oLkLi27%e z5O;&`nbm@-*MO)G1F46(rv;*ZnJ5uwK^-GEp^FS8{>?qb}U`TW9bmj1E{a@+;&1bISperBmzlgmH z8vnWf!ZhgJf6!_)36JI@$jdn=_;hDTyk3DAfA#FG-Et7v`4S) z=36Wb;FAPTd;~2#@;w1QFB56<4Ag!F#fL{XTZ08di4Dl_!Js8~&2Kn7y4@r|(<}VV z6)ub=nxIi+!viM|Pw?pc{^ABG-dhipyaLIUK6%Z}FVA3j0Jgu;fy1Md8Kiy(C@N5v z@9=}hvk`IM{08N+fE$Jfy4_h?50qAWbpH0~Exq8`dDXG=j7PWa^@E@#4WC}KAoRH=NQRAggih(pt%iukM45N#m6OT9w_r)9-#Rz(B)m7h)cRZJox|r1?bpv zP+ik{p!6)bU+xN8_sF6O8bK}<0_g%T4~35J#U6fPRrugPBK$$&*Idc-zeFt*w80*< zzV~Uc2ei2Dw(j=icmc}Zoz6UM@{6jrEFN3CH!@*PXu8{fIv*1aSV8|%C zhG%yG%8t_$h6g~S(k-BQa*tjoaSzZH-v>QZ89;Ta<}r`vhaWsFzm$l2G`;~%czZPW zsQdu6^E@oSl)i3!_@AGF!9(*5XgHu%3^aA$Tcg77(OYcc(fs^_M=y&w=*%QgeFN`p zf#)@ui#0qtFZy)G?szdH161LJZgB1V=+pVq!@gxHS6N6{x4R98#J@Dee z^Z);Sx?^`V|6uMsSfUF$t^_m;3>w4*-E5}$9W<0%pX$-=Yyip&nVyWteLAZRUW4vg z@#%c&+W8S|7;Kf^#OMG2cOC>Ch?L@?4UM2=&@Bp`C!nzd8GQw}^E|qXEx<>k!tz6R zwFT6olIhTHW2f&9560s!P8Nf_<809Fy8}Gc30}wI(d@(XgW=`7Q|EQi z?2-@TF_-Q*4aer+%;nCG&A%DTyg}zQG`}-w{{O%92}q&ge~?1Q<{ASHCVudmvd-8J zUr-NeDd=G7m!Jcn;PW|-&97M;n}0L$x9iP*@V_&*qxm=^l3G#lF`uCE>|Wph9?2&? zdU-rO4nAb@U_9Z|9U$S;n;_t5d6mD#AC!=~oh3ZFy*Yfks|7$OKKfYxEHUxX{Nd4g z9<*PrGjs)LHAr_3D73vLKJ(W(bNFvYEhA{*QOjlq28J@`<`=A> z<$moe85kH`yZsUzdjtP>UUO{z`=7t15!7x0c@}g|mP>bNhfn8+&Y!NG*E~B9xmcd$ z?|lJkl_noF{MPB){hVX4e@8j+Q^` z>>NA)f?WN28aN$0Ha-Le&C6F{J)r($=?ahT+6j<)($bFKC3Hb&=z^DDpz__N3w%32 zb^G?XbeApxtxZt``MNjoKgfqYa-cOQU~_%C!HKE!TI(hL4)FT;z0r9AGhajP_3ixhx)qvNUhe^|b3M+Y0$Mi%zKrelI(Yi_0FRi1L)W9zwc+Ii zP&&BZ_#BjM_*)+T0p0ZThNJQE|NlS#8(uQ}<{0A94ZiWivGb-+=XIa%R?zL^(6a5t zzu%xsS0cazSdq=YnE72UytD_k;31&_3ip>UK}CjWHmJyOVSwEC3OQ>CbOsOla?=}z z2S5SH1`6cPD;}1gA?H`T5WNn%vcQ=Gew@Y@1_lNfP(gqHxGSj5%i_@e|NC%00N2Dw6&imlC_{smB_WOyg2WSOiB7_aXa8Fd zl2Uf(N*mtGu}`t#qVJN3%T z8c-V1L$p7Sftru4j<5c|wD}L(^L76PNB*DxV80yq=sf&l)!k?RUxvZP3sGzBERa*d zi6HjnrMy4?(KlJ;36u`3;9pcRq(tw>o%5`12QC z=Rj$uLV}@`-=i}E)Ij5axbUz?H*4!@aR#5xm!M5My`~;Du+hY6u_)(pfG6}pjjYy7 zB|;vZmtUBH%;>cgU2H$UxOX~8xji{j|8uHbl) zc>}b_27J_x-sIo^J$iY6U1eox{=w)Wd8zpk6X@K&)&m~BtS_#zGI;X49P{CKdHH%e zv|a}J2eh8Zr61J#e+p`EbG!&ofwcc^Jen&&>-G9ke*OSiz&aS^^YQ z9-W6yzU(sjgVY`arDM>_x!31je7uHyA89E3tWl2c@QBt+rKyhHuAt?&=7zWVaJ1X0JSVxUnHz}^&hlY$~@N1Jy62!+3lp@(F@*%1B}$%Qr^$(|0L{BDOmJ3n|Z9&>E|!QsL0f6SxvoCo8<=6@j0 zL62@P4$vBq){~%9SDX|)G*5uI&4&y;Eiaa?@JtSh@$7c;@YHrP@aToEaAdsT!T1BY z1q)e^-|e2zdZ0woquV_Ibn!?%c&W03frl;VNG5)NlrwTc{)MOyZM{?y80yja5!9Rt z2?pu*NWSIMtpGYe5;Q#wS#`h)T8Co+>I)fw7KCYlE{N_t@1c3agYno4zN`oTJvC!g zU75?XlB8hJfoRu3i)dcFP6Vel{+5TJ1D<{}^0$K) zka~6=X}w*-1v+pMboyRt255bv0O-8Q&ZC~mUk(4iP}TyE5qR_#z-}fjH3qF%EpzDv zucrphfOvLqQGqNf{8qvNDhB7>d-_OM5HfyC?Mi2j7bx8sbZN-w5{fy)2G zAX{gF*1F%ayut5x!Ljq|%Q|q{VR$haqT=-(c)51?47gmo@#4l~aJhB^d}b`TqBs23 zdH+S@B1VQ6cP^tGsWSl@KL5Z)Qs-}v-p~^s&2KC`x^0uTpza$39Rj|t3fuwn0-cL% zc)+8%UVyPw!J{|y0%)HpXi%y%_J+rC*9)Mzj29cbK+XVfB}1I7T`C01xS*v-koL6U zf!Ft6JWmGImhk)#3R>U#hHW8!0S8Z!9|Z9xJEe)+RdU4 zG8ep117tXZM{n(m7yJi6adiBJI9yrDO;7=`{W5rEAGm+}LTfLmP>BUEj{=|b{^G=w zXP|Yci6E;wkH5Z))MW;TSGRkDN9U*310@pRLpH`&HsXJvTF z^AR*P;J^T$7W3#e^#BQi2Jw)}zixl9c_&NMdkg=2Bp(Ac96{|U4`z4J`bUp$2A^&Q zM^G0XWIR)eut%>c1IV29A3%nK!>#k9N3ZGYYpe_}XMOmOR31X(_o-tz_0R&|Nrl7UGVQe=zvB3 zmPO!G-VZxA*fDgrf{r2QZ~X{r#5CA5@V9~%<$=aWY@@ERGQ6-n`TxIf=Rc3*tt+1v;5MlEIdN7JGGo)(Unn1v$gF zSLeuU0Z@6}e1yZ-@+p5yG$ZI}SrhQ(m+K*}D+TQ#e!=wX|9`{VDBVT=)`_5gO5+ib zzhNyP@W>r}|0ZaiXU6$w|3Mxr<#Gghrv-G7tw(R~22gFfo0wecoq~ABUK>7 z4}-e{E({Fat)SFlaDbb+6U>6}JDFdC&Nm02i~s$F#W_%Tfg*k%=*Zg!I|lyNGoXDO zKfn`j;PmOydH#h0$mGm_|Nk5Qf1v_#@XIft^FyD|#>H*)*=N{nhsW0gE#04*=gJrwK8-3iP+joXXcjyWq#^0`nCq24L7x?$Gn1c@?iaqcm0B+3h<{wP_t)KjoP(R#p# z-}Q!1=Y8MKdoPy$ef1w2qCTDPK^J?2&L!`5UE$x$Vh#@3UJ+&wP_TD`!t@vG42xJg2&FYo6$q_ zhY#pB${CCd;QPN@(?JCm<8#kWJJ7H(uSYjybA<~Ne@i?Q1A}YJe^A7|e<3vQ)qleS zXv+!NK|26@Q;{#mhSu+(en{s-pUzi~JHexRy{#bE`t-IQ0IwYfl}7srx%0+1bjOm`1BS?`1E=xfWoB} z6p=oi$9+0`JHRfRIsr`0odKHL>+D?s=7F8|BK|jMBQ03QryHUU;%J|4ux3xtKr&c| zXD5?qCz}uB0nbiG&u%+#Y=Rm_6MQ-!fv1Cd!5;q?587&E=g|%3g0I7X*0Y}7MjoJ% zyZb(!tq^zhg52ey`N^jf>;Mm#)24z=dJ+lR;0I=VcC-0(gVp$SgEe_-Gx>BwO_>Vv zmM1f_Pv_i*_nub>3j#CnQ46E z0a``XJs(uTpk;kfrM9r;_kU0e9JKAhw|k2UXg@<|>lDzEw9c(FenSq~1l|1T)46rU z@BjZDza3+S?g4N9$IRabYQ^|;?**y!=$#8%%I4Fnt9+c5;k7)Xz3$okj>WV2I1AJa z&*p#3WyOx&{2slcjK{%KrG^K<7uoTjd~rb(v`g{+3y$Ci|3L%io%g`o9}c|$oyOh# z&d<5r_`yRcm zAdh-S71UAmXs$M30QC+_d_gk}poLwa-5w60#(;oIlwRIZ1LT74tOB46?Cm7$T*+w)D__MU#<&0HUEH2vOMC$ z@BhHJ^+|~&Ts7!EU7yZJFZiQD#a%6f52&uGW$UM|XgPhvhZ?mbIXrm)*4t zKHaq|JTyOfYX0}Myw2aV3{*#ShE8~q8};BnXpLES=mby3P=;o7Q$O?9IdDKi!$ANX zsQfLCpb+a0cJQzaw%~6u2Jt|ZUvKOlmu}xVKA;v!FlfFCoQ3X#2e^O!_vwtC02`%^ zc=rE)q)&J3gytX2j-AKj_**_PGBCVO28{u6s}emBFK1 z0JIzR0KXU$=xhy-?jjD*P9Bd=@aA&<{@Wmz_6Asd=Fbn%=w|lloD9l#{DPA~#aYWq z{+2FA1_sc=bx;da4rB*tO)qHV9(;dYx3`8zH)uHT{)>&@z%73MR?seK@X8f_c?Qs; zl2(3D7&`e|Nb&wmnT~~nSuRR!pEnY4{$oIN2dUmpT zcDpiwR`YvyhBEMP6YCH-?py#`<>?6C?Dnz^t{xP`@N_&MG~`m9z{uYMI=`dab&gMG z>IC1;`@En`;n;ZuG#?9!`fk@19^Ih}K&Q)wyMh`)FMT?{y(oP0|9`w=MDq{UlAAu= zsi3HMSpzF~knAa$1FADELl=}7fg%}}h|NnQ42Bm z1+V=B-yiPNTYBK74TKL4QznKI@#D?~pfy~M`$6POUa&Rbb+`qfb#IRQLFCJC@cSh| zCFYCcVW5gRbiqq;#Qy)zUoSRbS&2|B>jw7627 z0W{Fy*!jn!^SVbb_?qWnP*OkT(F>lB0kJQ6G`_jPz<_c<5omt9w>1DfX44B=t>)3$ z3L4S{sXyS+3!abxv2S?vg6|;)u^;e@wSttU@#maQXKMt=m%XkNUMs=M=hjOlTt3O?{JVM1`E+uDPH$;G zz~NzeyhP5UJ3zqE@=N_4kJd{iFFioQ$C*IU>0x=i^bz!)W=G2}{H>sCLVddTf@XVN z4c~e;|7R%?aQt?hk-x|m9#(qK{oTZaDfd6Sz`T!h5!8bv3$Vav;ka9frHlr z?Am;gz;Rb_#xlI*(G3o6pWX`Ch;0drPj`g`s0aj~@8Zk&-lNyG!K2r=!=rmID3!Q$ z_kz-fZ!e2Hc+jA><3%-i%_GX_OZc|F`T8dq8tGpzEsGok5dH;9z;- z?eOtGxS;Xr{O$vZ#TVZVKmPaWhQw&+;g=u4ORN6FWN#v5Jv)!S1YP`wXb*ez1|UKg z+)M!VESG^=t(~C_9?Ss(FF^$(e0~;so{H$#KmT8X@A>St{k;`5j=dF}ka*96#*m?* z4HkO298^ZZ`y(E`wx_}Br-IerJp)n?X1~<^2P(gNZC8Wk!J1#}1LE$08!YtF1T^l3u)iBpoOEvhuaar~22SqaB);(=XoB|ti=7)mBP=Mp z2Ax2$*?0t0@}UgNfa(LVXJ4oYf`+aSdvrtW1|{c~YoLmx+d;s?@~{WL&yAPI{(zd# zpacqPK6`@IRDso)KAi(vF?AdkWohZ4Gtx}w&jFprxfi6vV0MsPmvp=L2y4>+$^{NQooA%aNCI@cx`n=X=M_J1;~-K;vHrUdn)aQ{Ak6>%b{2 z1w1PVN?}VKUVsjbE`x}d$HOK-j0`Wv}^ztGzC|No1lUJoGWQNYK;5cAU>9-XBtJbFzTi^NgtQIH>bVSWT%U*geQy8`4# ziIhM8LH>QQUIJ7$fdr4dDE5bY+@~{jM;d=V>xMRV21p=ux^95@l!bv`)Ahg$Hi&P_ zXGt)WxO!N!rhynBZ<~S`AaC1%7%m=`tk$zY-hK;Sql~l?p%mn84^(d_fXVtp0AAj4<=d@lihK@Wk?{P{r&{DJ`ro|gAYOh9wh z9=#$G9^Fo-{ai zx-y`20ZYBmR+vKDAwIpT)myJ^i-8t|fYx(@2Sg5gbRK+R zd=Zof?t`Z>z-$?{(E*F01Y^{f;wK^&JnE# zN(+xWM}V?DXtlYsgimL(f=_3$2HH?f6FB*xj^$1O^*}&tl3YPr9|rhz{&EGK-TV%8 zbP2=r|No;RJv$G8CMNB>og;j@L30!DS`U=;gO)six4GYL2MrOrLY69m_CG!Z4}pTu zIQee}nj$#xGW`Gl|IH`~3)A)rmxy{2b!LHC0-zd>1H3YzM@>;x?x zLB96rt$pCrnfd^H2~y=5AB9X%Y;coqt~FCA|I*YD$&}cv!PCP6L%>B`gdK&8L|> zx=nvhl>l7}{elyusN3|>RM6qOKS1qW%MbjmDPVO9pfvO%9%>4A=Z)qQ3f~Sh@w?pc z=r&ydHQ)qHKET78wRx%pLy2SKX#)m91`li291z#ShKIl96X^P7_EN~zgrMUUJi1xM zmV*mM^+;I#s%r_#3N8!`ji(J7K%3i5nW2^>LoMNNdCA1U(D1y$!>E0}X0BC`O@31Vho0J-B969WT$S=wHZif-1vWng!_kAS&jsRh&> z9>>|h^(5-iiCUoceDe{DPUMLW$aq7yK=UJckLF(@{H>tjLC|!)$2IU?1xb+U;EPw~ zLDqpUUbThUbKG?eXq2nrynsiyss0p5%;d+t2Avt&Z7K#4fHis!9el(AidM(Y>yG?W zkG*h@d;Q;~^QT9*>C?$zoegINAZlIsU4Md9@=rbB$a$>Wb&V_kwr`G{$6koQwXA|^ zQNYl`zYV18#fw<5@eOAku&Hq2`~X^V+F}G6$N9lr%IDE*doCQDpzlkAT2ZDQ5F1`B zhMVavc^z`)<~3)DC30kP353A*rC_}nl1x{zeEfq{qncOfwD)Z>kd%Qtt8B&8*JRe zNuV(M{$iou>;Ir)Oj7&xf8WkhhL`N%(J0e{VEN}S9)gSkwV|4Su#{MV4Bj6NYDFG{ z_-7TUxC9;KvC;+PCa}?Mli)6O_InNPFqY1NoJaV24miCuJa2H}{0-fy0~+Umr2|Ir z2-k$;paWnS7+yXDPenU0z|)Ds%gcX3{R5=*W(?Yt)p`8IjmzNl_AwN6T;m~+Zr1gS z#Th)n>Fum3EM0fk?s(yE`1L<%j2zkpsNM16uM!{Xr8 zhVcFm+&vC2ogwb2-SOhP0n`-G!iv|+UL1D-H-j`l&geDW7y`>>_NJip!72a|KM5CC zH+}K{g%cYjS$KdB3Ju-*419Q~M|T9riyw19O+C|@aQ~fO1Zphbgn03l$qTggBZik= zZUt{ob%CyD1(&6uQFqY%YqzU_Pj{{asB-e@E>-a9uGR4A^aUTo$9Ii+Og6sCaaTad>nJgL};2HXFDnv}pN0;|lvccmHu(4-(83h( z;k*TNp8W?O>Ht~|G2_L>Ss;&v&M-Xb2^xxpx(C#qX9SH}bvtpqL+5dDVDW;i0EHxInZwDFDL&na9Isb{#(9ss z9spGo$6Z0Y5E)(ug7Q!2{TDgmpd&n=zi^rL=RepXFIzwt*@Ff*!Kny5p7~-~H6z1| zg|-j=gV$%l=7&6bdqF3Of`%JG>rz5}dV4{OWqf*D!8b041bZ~TS;2^H@DaQ;r?WQz z?1-rm|Nj3E@aSy?4P1a|&>|=h4O);C@ZuG?$GsI~vPbg~1&{8%Akz`+g}T=L|L*}= zDFpJMN9WcIu(5j+KuzW|OF;7oYd3&a>oosm;cv-f0xh}$S>@3?7qSNHUgz=7R?uO# zFZ>q#|L@p&tog@({+6$xv7v5P2Jl_mTOso>0v^f7K?AOqKloecWP%PYE3s;R!RXl? zs?gc$0kSq3O!;)%9CG}2oV}D2H2BrJoPmMCxwk~^KlnJM_a4dLUR;rS_}{hlTb+?- z@;RSglhd&N3V2!4VU8CmoPYj%CVv492Y|XQorhj5l6v?b)Z4i0(G6Y}h1MDdue?H^ zxO8CffZTUpBJS9E1mx1*PyvWbUxEfP(nUU zJi6V%JLudzxWay z!!Q27$hCU#zk4buwY^>k&d2cfa+qf)>^L{@4&vrF3Xtu?kb3(3w}b5bt+we8{)0A> zwU~ey-Hh<4;oxsoOn>nI+Yt`_774JN>7gzOh8K53Kusagk_{iw!l%P8Vy=T0O&kH$ zqAj2qEsy5kEG6KM!=iQ1{zF&tdvpg2c=Q%afO;AwEZ{?HTECUpfZEnPpTLt^C7}L< z0;E3y-qU#)+K&ZgNocVe`||xY_8wydtK6DFQ_K*xpv`*F$bi&wpmXl+JvzZVxL-I5JpAw332hC20H<3EpYFM!S&Z+; zLA^`v-2+smnppot*Ree2Nj2sFUn3u3;y((85j(|fkyON;reI1c)1!}8+S-DF)(x< zfAMPysMZAs0XR;WKufi{6F7W2--C|0EQw=24PK{FX1y`q6fK?_$wM{fE+=Ae8!Ye5Gy?r`bs1sz>>+;tBF z=+X|$dEhL?-{Qc;z|dT~=f6)fSl$OR7R}$H0ji>UL8%;c=5y=G5*3ebi2FNT8@zj2 zJi&{XyIGjP8vz(RI>FO)pyQT(I$b-CgD3DnHla=|!qkIG-&Roa1#PwP>}CTM@2#nz zMBD8K8v5q%0o9+7eOW%;;FtyFCeS)yA4r1tfu`s*PyW1P{9<6k9Qg&^IgY!61~WiM zzRv(v#V zVbdB9PEhYWdTp;PW(5sCD1ZG0K4-tz6|{zQgGaaP3=ia-)6JSW9o&m}@lzZ$3wiv- z#=S58Pw?oiUGO3uWSiju&}@nwxVhv2TE9Nyh5y7qpr!*T2Y}q@*?9!skMZnw6?i!f z#r>c#^XZ%mikBCx+dwV57xN}P`|r~Y7V_u>t?@kkQuhz23}gUx)E;aFE2^9XN`S5n zo}GtZvVmnm>vOs*1YXVn^C02VYumd5d|E!3Yj_(p>w4VdxGQK;D}!g}KabA6puz^U zmcyeHJa_mK)D8mA@4WKpwO#EA?$ZAGj2uiWkb-H&OVAjiM>nhEH1J?TkSDC06QS|q zfA>_7zrb@;?_Ml_4NA$W8$jo0cgBLkdI6|JdJ(?|)Lme$m3FB}CO@%UmT@kaO$HBTm(GD#iJrEhkqq}y6Yv&io#wVcDJ3!Nl{4K)F3=A*&mP3jb z(7hs^$6w5!04g4igNp~y{#J;Et{twePxxC|LDQ#};Od6IWg063gHQKbP#A;GEUF@uxpc6YvR6z6L9^G3($raoU zP>2OJn@USOnrm0E@VDf%FfdF&s~kAlK&@R+%JpbG0*VWi>H(Avduvy`aPI?6hJoE( zG7s5?eKBAgggkm#-!BCX&4U9Il+=BCvn8Od2hgN!He^y(4;*>H0zRF&J3M-$;MsWuG)oN92%R3j1FpnCi@j?*JbPV48C*I)K^+1rMSU25gLXW> z*!K<8nt?1nw+GpE99;B)V-Zv!fJQzP;Dcv6pxO*c#c@|~v2?r@w1pBhyzJTSngL2F zJRaQ)-3|_&U2> z=?0JFxgf)RI-mP${`2jvQIYUr{OrMa+oSW|i;36&{P+CMq5`UFOIUroYg8ap<1<0i z@{Ip{7=Qb8mTvIq2F;F#PH+YF#%_3Ymo|V>L@MYWyXM*%Ec~rSpuuO5BS35NLC$Kk zfx4ol3S4Nue~}K}BH_Bj!_svEf9o^Q0)XBa6$ympp4~Aj5}?(@Exn*H>UQ1W)A{@u zD5I5b@X);XLhK57eE}%BGVr%dU;@cNCigoPUe1IpHiGt7JMX_Zu>f4oP3(o_25|cx zoS67qeuFx1kVY5-f6KzZ|NnziK7Y$vaJ>%BtIZW6jHLpgVFdeLP*&h?sRXTmN!kR; z&G*4qx*dA)U0E6_M)!&><9%E#LnyfW~Y*njhQ;wJ}OfKmqJB6IA5A2Mxe$f;s}7_g@rl z2iG6Ar>C(nym+$q_y3n+;K~DJAE^E~@Iv1Ml&otHya-zi>JgP505zbIhU!Z!LBsB# zU2B#gJ0@I!R&EmD#uw|33E*;+b1tkLJ+A~B{eqYe8RIWK4!X8`8mJ)+o=x}YgtRs~ zr-IggyzpBK@*hM7+79Uk%e?M~w$ERj293FZ1}ngWHlSuO=!ETW$N0e~pgZzUJ?hwe zPU+?1U!X~J(6Xlv$ceZdC59f*4D<5TA5h@@e=)xs5j2FQk;K9@x@Z4wuj`7+VFDhlf{`cq=oirWPqnZk;)IbGjYbq$Ibl1*! zA*m0R7XrzHH?~@USo|)Bpbedu)?k(3G=0QsH@H2 z;s+X5>Ae3UV>Kvcxh{D52{dfc{EVN!W#=!Dnz#Hd8^GbX7 z-68(*=nkC$ZnXY?F~RBYe~)f(r3O;&!S8a|qm$`n<*)z$A+;4ah+leu4)5x)FgyU7 zyJlfvU}*hcZ_nR)l7WH2@FZlN7G&=1#WV1t9;6%Z_*>_J#@3pTC^*J|`je3EiVFjS zOK<-F&e}7c$wz&37cc{U&c};P?cR`=+Rqx;l=D%pdO3s1((kEod;j$z}81QHveTRxd9Cf zm(KSu4reejfQ)tNd~bO2r3+|gZ-dr@|Bju1U*AO9pa}1uLe>Xd25sg<3ytPS?4_(8 zt+z|LK~>*w7f@g_cz~9c9)e80NS8eOc7&t!A$VhFXY7R+(?RL5^9X35up1OCpm{jU zd;Be+^_w6w+Vw#5x6eE}?;m#s4Zt$IxH=cK_T@SBa02lT$l(N~j-XQXXFDjDmYTw< z=NzAI_z?poIq>5JKn+XKba1cl8N*92Qf~bQ9WQVO^?{}p9T-3x z81KJuoBQnl>&u|{@I;&+P&&n<*EVMn^z4AeD^Sl40JTX#4ttpo%9XvgsS`ojqjblM zsuiH@QM%(Ls0;8yM-yeb5kCG1Jx2*;9l{IHspFv!JbFVPym0voI!OX`PE^pNyY_)c z=RJ?^*dHff9@_i=|BJI4D8@tfTZejfp6G<%3efyU!=tnGhDUGd4djRhS=I|W+`sn0 zeo$KiRNegl0xCqoc61(kkqEkzwmTFwDGNECrj!kA^Whia8lcrC;Bp?Go zFnaWwPV*OMc(G9hIztRTucPxYc+2e`M^HU@|3wJsUh2-{pwqlOXMl>c<1Y?2f-0ff z7lxO1f-)oMN>k8w0BD=bqto>Tcr$f(fIz7xs7^BR>3j%ET|ZBPtECbr&{z(55&&}7 zAb7kAynp&4^7=E|-Tk1L3ccacS^D6`nPs5Z3I#P(9=u-X(arj}6I`iXtbIQ)WB9c@3`%kqgJ+fc&yMe@Y|;Hl5Ji6OK<1nDJP9Vc|p!=LWJI{mmUk1zu9n=7tLTq>;a_jeh z(0og`>k3Hn=ym`%HQ7OZ_T&l&kIveTm!M-7q4l&!=M4|W5Bwc%pizd-|1Uyp|NQst zW>*C@7QK6U^n5x?clh?EOL%npf{uVLVe#!wmjJDrXn6%{dUpPQ5%da_gMBA}7Et^4 z%E*8^F`zAk9=)YId^%$f`1Z1}fKIx7A$bl|BF4_>bY0NxIz<=Mw^;fA|NH+X**@K= zJHV$%b^iC!yay_~H9vVU-t*MF`hw*YxT&+^#cI%cgW3g5{H>j!Ll?mpJbHG=3;1@c zzc~LAlo)(FJTz~3_LlH6cvybmZ&Cs`N*{oI@)ESw7o4uTU8i_-hc@_tu2A;f0MTQ!vbz9rO;MsW`w4AWC!K3r|i=>&){vUUp0t$|ouAut0n^n9W zoR%9V!_u;z_ACJh6i2* zeg9Y_J1m_`g&SevpeJ z=%B>I@cB=VUR&-SP<}1l@IqlRD0)gayk7j`sxqhqg62oZ&XXS9egdAI7Yr|fw}_(E zcdnfWA+XxnL5&w{&u$Tw7gKjX`VV4&rbl{BCBTNU zT9imIyr@Qz5r@c#fn*YQKl<;}t=iNo&ae~IMD^$u-3M-pnQ}l>y(pGo08Qn+U_TEs z-9`nbOdPcQuGjR%L{`xHE0Aq3o}7CGT5xF#ag#@{>E(&63?99*+#sX61zvpF^$2uc z=Uz}L1DcCtEiRH^c(JY#)X1_;FOq;AP#{_jx$%46L{^3u@>fBI+IoPbp)Q;Qxf*^7 zNSXm6t%)Rk_XYUM>({eb7+wT|on*^ZBmue?yjPSFG!fQo%F)fj@WK=#_pT5sw{$94 zp9{!XNr>Dfu$)ilGmlxo_JdpUyvtU;)DwKeSW7>JJampa$ zPC=xbLDJxguvc{ZHL!H2IV;19)ez|vh^f7zyRU-fobItOyy%C>dBEi4r-9|}O<-ks zQ4EpOK{ECNBw8+lq(dOmydY_4&=o@Nl0N{FHibyPD}egnbTZiFH6S@jh}g0(ZJPiR2kmn3=rs)niN{04JwW0QLEWQXQ*V&CJ4D<7B<=`m5cZndfyDJ8;u0Y7 zM2NTvNL(Bu&Hxf;WMBcE_NfOF|GyP%?~8m1hFy#d93XKOkoa?m_yw>ysB_NS-IiEoF9F93@xfKL-;1&Pmxh1Snl5e^Y|fQT!A#Q%fD?YDxq4f00x{r~UN%L=j*bO?a0Ljh<(%qgGF zV=sJ9gR&i~S|8}DdeBfox2;kEsKa*Xh0*Cp{|!%qkFk8_(QV6JAi?lL4l4Evl)Srb zzvoLZyx;;E(QW%WADUEF^@8L37{~$dPCfeX)609k7wmwRepXOU>$csV4|l+sQ(y-y z?L|0XW@CT zIe_E>A#z$Uxq}cn6Of!KNDk$2-*O)n5De|2{~jv)y3>mR|vq|GXL^&kd4? z>bGeI)s(CaAo6A@35FNJQ2A_-Jm|Q4k6znOi1|A}^2ShkZ;(7R zTOp5homIMQ6 zGqtKmuk8PJRt9i8bRSrI=lvItSAxQW^$0{!$#YPX@cpX4|Mx-8ueL3Oq(vE!`P;#2 zkH0t%l82_94eem}pUIM7crhI+zaAtHI^y4>*VZ1Q{|ZRH94g-rl82@ZO^Ey&kbF2) zJ|83xT6XEtYs&|bZvn}hL*@OEE^AgU}tE4#Rxiu7&Ko1YTTS~ z;otAT0vhae>E!U}tl)6bJmzY6AkC%IfyJ@&0_arL){~`I3@>$>g2FScGk^uE(4&)e zRh9&UODF4QP(UANosb2(zJ!6{IO{AZ3;BdG(D`oS9-S9pLz0o@@*d4U7)vZYnt!mD zY8xK-eu#mAfeCb)kGsNQuz#9=aFz-g9%y*hP$CFgA_8g(yD%`cegi2#Ji+k5w_^?^ z-y5DOl!$rsx(mS8F+h!C1l|7ZE^rvsq<`VS13HAocA*|pVa{^@EtRtorZ& z*V{nuf$+sRUjKi+48cEE%fJ9Su+)J8+_is^#{KF)s0!@0eWMHV+#$mQFV<>2`2WHe zB++ZTsuPr$Kwh4XIzR#*f9YoZlpz6HZ`lGG#0&N4X3Z-FEpU7a?l@a8@VCrxdGNp4 z_Hu><17j&K*h<)Xn-{+yy!`LcEjuSeg5fypx(o>hQ2GY#{%O5kBAf=EEds9&>yG9C zjiJ5w=$6gM0A<|UB_g18Y@PRCfaX0tVDc}l{{H`eoHZo_l8!u^|A>_If~p?tP9e>)*`A>;%hm9ktKk!P ze+;yr6%xO{K~ekS4kzf$!#5ltb6q7W^n->%zV?MSM<6LI|JAv$L3><0sPyY znLrl&lP}f#; zF3bj(ZeGQ7P=03>O9z#f7Tvs@=@JZ}5w)i;+POjNV{IR#ffjL@Zf$2}cmW=P?zX)O z5n2xtS_tkm+n$05t!igwh<(`$+Wd#;FhbfN$Z-O4k4HDFZm~FnN3#V(Nwr7wF>#OP zXFog||1oedFqCI~V^08G7%G|sGPm_oNu;acCC8l~>KPb3`1dpUcAfxT;m~=|)AB>H zlSenJH(1#L&^}NP4#!=f9!WE+YnlWDqemyN9!Rn?fWxEn5a{}27tnD*mrB?@Iz?I1 zK%PB3!L9` z_>k7=@x`OF;zu*u`^SVnXSMxi@ z(#t-btUjp{4EsTYMjpqVK&=)Ak4{mIR0)P=R!5M_JdU%vrAmOd|1-Q$1jTA6s}aaZ z&}8OEhX?;-4}%69nf5a@FfhDm`1bO@M<=TyQ~`LW{^=kk$)f9%B^Y|W7(02Ffh0O*E*+{NicwK>Sis7{Rn@fbiYDi5duuB``3YeKtOLqNJZLAA8u?bZWz7SQlEOq75$ zM|`?fZuoRQf6)OtvJP}mE_ln{^B16HN}$DJma;;L5)Accz~S%F9S(ABi4`Q>pt?VR z!{fL+*mdANa>rS(CP4gh*rU^SVS)t1OBv8uZl~zf1PO-Mm(j)>kF!pLD(`0PNC2k} z3DB|rruE-JXB)o!@s1f@Kfkp8irl1~V0fVMKj;w5a*l(~1$Kb?9U%UHhH|#%0~`mR zbAWmLARf!X=PY2JeHm9H=-AAL<_ipm4?btAkZwM}ybE-L8R!^u1_yqZLx}RH`2Z7g z^);cJ-SE;1_7aH|jHSFQm`V~Zz5rJ_o$TOaq8%90S`U`U&ro%AFcmOd^CT$be`zE+!b#$XRTT-331`zw7lDb?H0>vFj1%CnUQd z^#RDqKS5_t#Qr#W8MLt;;!e0aNZA+M`Mdc)f1Ok3O-Im$(hQE5pE&lqsQd?ITANmN zP;P8~{^N!I8c?(NP-hhAly8^LBp#3BPM~;$w3;FLH2JzmFKbww1cS%%P|@S$(fQ$n2meM(P|XA0L@*a*wB<4WR#1Pyquaov^9M+QA zp+~Q6VVnfWp&s45{)OTUaQCu+-3!{q+Wg>$=fM}upoJ}+Cp?&C$EA%IzNLBb4H%Q0PTJUU4-P*`O2j;_kzd4R|=k;2Rbhvd?f<95`mwg^IYRO z&}2&EqyOv-4E(O=96K*|`d$Ie(nopp)?RpV@X!DM-Jw@Ni%UWMi0;x0j-3S(&A%AI zeVFEZ{~bF6WE?vSL|j`>mU`$KfsT9WWKrpL`+x8mtH%t-?wSUP7d(Id|JOYB8ouA# zqqp`7SpN&q+KKMaDJz=25=VZyry~Z^0Ur^+@%*Tzv>LV^3of$OrVnsseJ%Da2q_G z_|Fl%N}&0ThD*1*h)cJhh^ys^8h)3~6CR+8Ee?VXSnE8{UCH6xE5m3R$y3YRe4G(< z@3%{*?-7?y*Ap*nK}UlmyPoh#_C4a$8z2EXH#GS$==w_EUX>8+IT@0IEI?e&xJ z?=@-kwfxB63_9P=r}GBryz=IQk|3i%#&}wuhM5GOBKF{SKIGBqdg3)dr2O}6KE&c{ z`LWpFvD?zK`5;T{|B^R8p!;lo8GZxRGu=!s-Haa1hgdwC53+dhuRjh-sEi*xI*)Za z{_!~YPQl0WR?#icEFQ=t$IcR_Kfab9i#E32t`~eQgQ(A&Uo)2QI(ECL{PApl!_s=7 znR75~U zw@2qO-(Hti29IQC5#L^!HkWQ5ZpUsG9v{sU9-0?AS@^+4$w3y!&V!&V=F!U{+5Cvn z$MQzeRgYe0N$^a+r{!Ts{>eu?HE;X&7C-kq_>Rf7<%w4>%T`dld+@s)^kh8h+bhH5 z(|Oyc^QEulQT}GoekO2v28xt}EFR5=Sv)i^cyu1>bp8Xi3T(~6qI;grFBp9_UwAe@ z_~YHn!VJoc5{UTd4)_BKmF9Pht(QtZb(Vvog2ST|^)y`2{WjpBf`u~lcmo#(2E+d^ zB0;O3jys5ex@sPs$6xOSr5B&h2cV@Spwr(w5Bv7!s7Sm7?cthWc);`EGm!s$_+37D z_p%s)8yE=pK;s*9Hi6^8|E!=B5x{r!eF1gwIUKuPMY`)b9D8Hf86CS_c`OgtLDMhe zf#&0kmWS)Vzc}?1w8r$9M{k9MYwQ0y5zm9qnLwKie!XD$eIGQW?8ErqGuc(dv$s^j zrj2F9^UAql?D;QlmKYah*dC1Z7Us0Y*XY3V6&}x?xKA?kKeNVU=euI=Nj@=wC z-SUtCKF;FFzy7=r<44cVbDbwWHBWmUe5c^4`PrxQo=ayuxRhyr#^_^txcH=NH=|2; z>=lo0-xIE&&KGFisB5>2iil@&sR+oWtxG^P_rYgOp1n3k9*pN+b3@BH%U{Jp9?kDr zJeuFJxOCgOSlXAoE^-8yz@T*7Ee=o!2_UVYYi%o-V%anS9x^ zS7cJRQR}yoh~5B3et8CPI{>i~j={0pvh{x{uVeFTM$hJ#EWVbfir%<(#y}kC+Ia)y z#um`7lFF9O3$GFFhi#oO)X8}! zA9d+WX_j#8b!F^y7J)4bgIr|7(Cy68Tfz9E7QA5l7^rjuRUe=(0qDG3+iqtLk6vE> zP*{Ss#+G1BJ(8BA@-i|JPeUYnW7BUj2Xl zsN0$2^)|!*9?8L&>2>q#7ohkF?fd{5tOeHykkf3yO&gBp2h9Af`iu+=2Y)m9cE00p znFLx^)2-?g0`BDUw-kd`X?MQ!>D7%4kzjZ&4jrGl_`4(<)JX;1U{dYb`RChV#*)|I zO&Q-`d;njvecZS8TZw~Xw;KmIZ}RuQ1f?uU{`BPESaOvCnnC$n-h&2>ll?$`_Ush< z;LE?Uj?%1hKs*_JO7nV#gkv3`*c2gQ43mVc^tGJ9<)`$@W2O8{*5*&psiY< zR1Qin-R_`}pBfAedH#M$P~`@3jtBoncyYnsA_Q8Bl1@g+oZ|x(u-M;1L9w9{s%fQ8MHpL!|B!km!P{q`Q;fv;qdYw zVjZ>NNzY`^?(!2Lm--;Wq7`&u*6YU;z}3bJvoD}B`G^O2^rw)Cfx)xWMMcE$fah@* z(9k)!I8$911R5YX1|DJy0j@8{L;YV z-~(n4P=he}qzC5-56gcgQvCb)U3wiaI5zxXFT3l}`Oio5oJXe-=sqGS%kaSKcSr>? zWV{t>zJ*UOi#e!x{^!wcTaqZw@LDKs0(dJK=oCcG6F!#5N_hFV@p8S>ogfO>CgS4DgE5Ze7VlaR&Zv?4F=YCc_y$`S-biCKC?Y{4dG! z?EKhy*(3Rv;Wx`e^$M?}(k3|aZ)5W84MI_-Yk9a%)3fuEN9PZZ@6QU{J^0su_h9_! z(Rr?z-SIf+I4K6-){_-SJeyxKmhSV_yyemP!M9UH1zd|k+v~2N%f>*09-WZdE%q=} z>+20j0R*1U0Q)Bl)>cPf+zh%uY#Hd#(O-=GEuj8f^Dh%xVC;Pm46A^zl*5<`S&?9g2qlj*$?FMUXSn1KUvCNH2+X2dEER%o4*xw9S;9C zXGTYGw*{ou#-KFAr#G4L`=R%sOxF4XbgRWSXU66S_iZBhTRwtHrq0Kpv#3GK`N3D; zzIKF`M=!Gf-v57`K@7A88?;UgbPyV3xg>w<1yI4$d_(~pPSA3?_0kT|3@E?L1rP92 zybB)3kAb?iKE1AIUhsoQ^g}OrFkbd(z2w91`WUo%i3N1;cX#NS)=QxE#)mw<-*RmJ z_uqrx<PQks=hHK0`of zn7{b@?f!p{-Uvoe9T7MO)Vse4IZF&Qy=(CG{(taT7P@{=+A;hOswco}(iA+pc~xRi z4}Sw4;k2OV)ql`AZyuelH(p%+18N)|_ULxK;n5iZI;y|K31lnij3|%J`=Euo3QQ0F zd-Q_jT_1qe9d`f?+<*=Y11%DUp4=+mr1sE7WE#0f2JozQK!JfgR^LI%gsC@D0y#JaVG;h{?oRNPUyNymc zmnZ+?V@2;<4wM*pbpD3jBM6EzP-L|nDB-fvDgOXcRQw8bg8D1Xe~$mJG*~l~ZiXiu zM0*3|9 zxu{34={zk?2L5e_Jd#=3JQzRN{eLjwcq^#V0##_Ph6fsc89=Hf{(YBvoh~&0;N)+& z5C+u-_YDuY8oqTkeDYcq(vETNEm_Op(wkFs!I6JoIHPCtaYoSjZ@onqn*VW@YdSXn z;i$Xq*!)MJ{(dh@L$8a|h1b`>;RQ;tS>OZBA92^0$6tWneh& z3OWsg0VL1l*;~%!*z0+r`6nlTyE*7)pXQ$i{H->^43KpRF8ura7(JSgF*-K?G${G# z*z0+|`6mZ|o47CogHPvA&(80L-(G@FTZiU*{%ygGpm}mo3DJ5QbeSRlwrnQXmbd&Z zcfcE-RhuHj865fdef8+{T>+}4ihe+%0$gA20IBJ%W^!!!Yrx-94%!rU+!eI%oZ%C{ z04uvOJHzfjpj_DLJL9z+D4akhflSf)asU4(egRj|qGbM-gCN&wJ^-EW?#jO{9~|tU zv$GGgeDdJeI`N4=5`y^ZFyU|8f4Il&igOe-{1fL5_GD1 z+60ilKxGv?ggE0;nMluh2Q0ochU29T>g zlK+F0ocQF(AIb9L6Mw|PPyB))mHhRoF5SH#vs^)k)VMM+F!1+D3xZA<011lm_wC?h zVA!F`z`)QAwo>zg<&PS}9gr1HysDa=6Rv)3vmsddJb@Jf! z*4+v+j`4!#iB4D0IXQjV0^sAvOC&&JmArQ~z~!FgxJ>ud1(4xVj5IkDs;D6_h@ye-)X%Wr$W zAaZSM1ZaC0Qa+8>hvrjIqFvzF@K=w&)m(sq0cM36sypL89R>yl&10RPzTe{axYi76hW!_0U;sG*++=EgVF0cPKv!LLemA_t zzy9}Y*5)6a=AEZFgk$;~%q>uueQTCpH z{U^rHFH3%dx*Oj?MK6DAFCPN~qCE#XP!d$WgUkiVm%P*b)LR8gN#~n?aqzb#@`1{E z(Ed{f!%Hu({rvwQ8b6@q^^)rsIL2c^1z+rfUMCKZ)( zpN9XNe+bs`feSgvxYWV=@15W?-9gu2cgA+SP<;;CN&AP>r#rTzyR^ZjGee>qtiZGL z5OgSwzwZtYXi2U!r%UHUm(Hc2jh3L%6UNh?oku-8k3iC^BmX`T74RZB&*meH&94kz z+ydVtbllVOPU$0;Zm6~w-K7nloxi}=f$eea%~AQ`$#~So@==|$PiJh0i{>Mr&g;IN zZ#;WrL>U}Azv42#3dwwsc`lvrJUb6{yH4ny3o7~yFZp!N1)VkR)43P4$5rz~>un#1 z=lMM@>;M%JKAl@ZOI-Lp4|j%6=mc+n^yqcn1KYa z4numRpt94W(^;h3bq8nrEPpui`yX#TP{*Np&{6Z4qvrAM z(h05K`1=#s7#Lbl*75puKJPsDg6lQNTSvOLf0d%w!pHJs|m(Fi5UcLe; zI0_offL%Y1$Yk5<RAQC&UhF4;=>=1f8HO!$T+dbjB`t@#Q6WlhXp9ZqS`? z2SAbD9opg8?IEIhu=ON=>ur7p2GF>_XRn8ZN3RK^N3RPr*gGHjoA-f^oM?Ur8Sb~R zv@3bZ-?R#JkOH_yZaKuuz|h;o!0_Qecz&Pv|9^gvQ3{}W&Q8|_pZEo87kuK6w3XCh zXF#e7TMv}7J052S^>jd^XddA40gql$E++{FP>$#4@1MuTz~GU50y;@(bIPOhpa*yw zQH_^@!85r8G>mY!H1weIiN95s7kt4^i5qAr7PP;`5pGsKF0&GNKxUP4cyyld z?DPc>o#=exZ{5Yi02;LO=oPI583Gzc=I_sg83LZxG(kA%FE_}gpwYP#9-Z9a(Yasz zt@pV>vE#(y(JN|#Fhm5GA<|%%fL1V_@a*IQ`AOs#f9oHxAr2rz-a9}?ZutB6a)K;8 z0UOjtxMV#y$U7Af?{I(&Vfn@1vh>IQ|Bl@b9IsC!+6|ta=RuY7OVD9X5K&OReYqAi zWR^S?lzTjSS!?9M4J=ns1B>OtORFECorEq74E!DXpwlaROAq*T{&(s0?QlH!jP*s` z1JH8((jy+7_tW?_PJmjK4KFeu{QuwWd!Re?h)cI`2Pg#`>pY=(!G-Yy=(0^?P}{n@ zwBg_b5s%JKpgA4JL!BQwFL@k%qyU|@KJke^?!+g40o8sDc7`;5{fGQbp!Oy>yV!tM zh=J1`IN5cB8r~Q9TmFKCL5D%K2=RcMRHE7%pqf~K*IS*P0bCCHt^hgZg2%y^3Z17A zx#~eZf6H@F+qrf|>;ID2#$OB!3)sp-LCt;(O|bO`i}XM7>l_5%unKA;w;tekIoNps zT=%E(Ya9g42yuWKH4{MUK@CTb&V!u?Ko&I~1Z7*ziyjBzEyN2RAU7X;p`Z%N*SZW0 z4$Pn_e^BG`z$gC5L!bB~To-^`dH@uf;1(oUrR9ZE?(WhVpm8QpCkrJD9k+w0lP#d& z1!W=h6uXfHlup1SeTXddi@&uWaz__J6EcA=NRfGkWh0G9! zIO8(p1Xuz+3$0=XWg*ZQt>{NvxUb%U3Sex$+6;C{JtXz>gHpfEFaFjk%-}ST3uGtjL>^x8cFTp%O4*lQ!gP*@Y3+$;6uoCPOXl(+d1Oo+gvJa>P z`{3DWqVmCyf1}DN{#HGZc;}IqIzK@f&4B?{X?E96aMV2Z@-W!xE({Esr#w18xM+R? z^(YQL62Ztb2VNcr-Jvi6Qs;tZuY_KJtG$;We;_Xq>ULex_>zGkfEg)C-T)a2PGlI# z@xmwmh|8eVcp;7dS|~U*BKkA`|Ie@CZ#x7URfASw@9RA*T^I1ToCZ~3ovtfhhJsI! za$#Wb?Ic(gwt!OvqI=bO==-I{N1$xZ-?EvVf#I9$3dRyu+}Q`zT?N%Vg0(BUeP@7r zsZ)M}o138CBB&dc1mTKWD1+nw)JstB2|9kj3JR0%(iNa82b@{Yfo?r`*$8T$fYJk~ z1OSzupZK*7eBzHe0Zu!h8~kAXHE`X%g1>b!132xm3WF1w{z3k>z(1h-iGRTBerQVo z+ynr}4rn|9G?tK{_3Ho20oqZL$qC*FaMI=$%G2_HIpDg5^TfBu%3&;S2- zp6ITfp!tFEhvtROgUt{5OC&v#PkQv)#z}x{M^J)_vpEmyoUb_egQe4T27hY;6FA;M zQlPY^@cIA$X7E7BEB+q!_y7NQyH4=v6_te;;JQNd18DFgj^)tH>mT5Kq?ZrhfF@W@ zf}1)%ohLx$84tV+Y25?%G`QXLayqEn-J8wjxCgYq=4I(;&=n@07hL%Fg)#c{`Y}2- zzcO%a{>53I2I+_N@^pGOA7pgw{4W1_saOUmSI2F5RIk zTtR(x&^(<_=g;r=d^^v-ocR`1n%sY>`r-e7Xe$nsgs#f7GrSc2@c%#90Lzd3eji`& z1Ept_Y_Wj9RU1@-cZaTU0UgeJ@Rb56|Fl#vGcX`(;tg#4?MuG?{|~By3z+%aH-G*A z-viovgj)IX&{t5RaO{n|09o4ZYIw2}bd=?97sl(IwG$jcz2iOsCeU%SHG=;JHs{=nS7u*99*&s=fN})9ngsV$XP4_7x=g z9xgcrSrX(cpU&ei>eXIB20UIqdIwT|9c)e}ROw4L(7Myk`*1S?pb|dap)+2B%xJEi zA07z z&GX<31);sC&e~P{8b>cmUL-Y5s5G!S8<% zG>moJbq2_ZpZEo0SAa^u=FOR+b{~uJ=^S79S zR>pLLyA-YqKus^~71fVV{4vMV`1KBgTTJ|2pxn;i`s3&S|1bCa{r}&+*GKTbV{ag6 zD4B!5|0E-*ce(;PK(15n)A`Tv|4Ze!p!j}i;L_>4g16@sby$=^M1fM7MhHr~m(7KZX<@Gd_V*x$6pW zI~qAm1sKqJb1Pm3d;)bO!JSy&&L1A&0SHjb)d$j}1;sA3W`pKYXy^8&_$Scv#u@uS zb6TyJN@O}gSLA@kK_M+{o`bJMc7l?a=Ecj;EdTMh$bwFBd(Oz;V*lg+|CgdaK%Iyc z;A$B*GJ5cVf(Pe8(2$@( zs3ZTrZ=mYh@WFl1>HH;ip3O%YUHP|_GPt&UD}CtE?YqFY^WV$VSO5Qm1~K_t_rL!C zA3OvJ8Z>Ku%>oiFc?TYkbO0&h-}m+9Z19njFJJ1v0#{$GYh>6NUQPgY;=#$Y<<Q1%j>Yj-BD#`TphZ*Z=?X_xpp2tS{gG|L^?SeBwXo zFqF#=Am=+Ae5j!K!$a{WG%R1n|M~y_#gPa1|AWeH@O&1eFQ;+Aqw^_bC6i+a=w`*b z!yb)qK$F~{+tv*)b=L0aECm;ZXtP`%oi{)^aRVr2If9OLs#J7reDeSQ|N72bKAjK1 zuID`D(HXh{)a$tfUNG*``Jhwq`-PRDq{ZK|jhO*79dRIyU+)5F02NforSWSV^5`u+ z;L%%q1T=5b@rhqBbixboE1)2F_=#U2biyZo0pE^;FGV~$5A(Mau`z&$A1=9c=N^Du zV+SgrJUTCcI-4&PR6#9E52RJvhk6@9qfwx82IQ_opZH@~W2Hf@2=L4eZzh->$r=cz zBVhDFum*np6Q5l8bq?^i-{NIpaP2Mq4;r#+{vpQS9tiHET=3}Sl@|avA6PD?@#`Pr zZv*w?AScLy9Ol^kf)RS$scY*u{tgpn&@k2k{?24(1_qbT11_4b9p7(&4&-q)JOCN> z>vr7%8u@LD1JwbbJ#pr^(R}3tIc%@>qzmLeNq(0@F1;%3;GsZA#$zvL zUIaB@T0nydF5Tc$59mQIN^2)yGO4BBjkdK6Dc0rkg0k8)&NkbH68(#0X`@z_Tck3 zpmTCTZHmjs8Ti#17?7KRH~3raKnWGpV103<8nm}qw2X(7;TVIbXXhbkKa77Hmq+sf z&`N2>4vvTJ#X|NlSY{5nX!0i`*lJkxpR&;S3;2N+!qzqx3>=ydG> z73UoXK%ELjsQD0mp!|lUuY(UX_~*I?7a7X+VU`C?AhtN*SoPoNp=6Tbjh7!+PD zyFrcykBIl}<6&Uv{N&Ngx|f@iq4^R2Cw>8*3!R@1{$go-23mE)-{Ql|0FnT^4OEhT z;*VopAjZzndZ|R&5Y)AC=H>*AlYKkHSicO9Pqt_jD=E!F*(2_dOUN1(_+^fpLZr2vi&NH9* zwNCXG8GPc8IS48g7DER6c+Uy5GdOk_ed3Qh^NBy^bQ-_@3I6s3UIqq_PDq0nr=R1k&}%qw^xDf_kX{8mIZd2pOk2 z^)eMaK*RvKkEE>voO?_-LAl4zv-1!<|KZL*dVl`^f2ji=EdcH3Z~(R3KRRB1(%T`# z!oYC(l?&&im#LtAz5F15beHY`-3!~Ym5+g;`5!BP%S#>*gNeVzpA(eG!D$;jL)ZL| znZHHs@Bjb%p*2v8WApj{FCLe_`hVQD0pvHAZr2t>UE|q#$nZd?>kLq()a`nNzrS0M z0koOEqgfDC^14pwuASl0EBcuOTvy5*YW>gOxtRx4{Qc+eUj>Qq&<*^pR$SmHlYIqA zh`0EgHMl?rZ@L=3?RK5uc#O%=w>OE=)$o7w0Vc>%*&eMYOI*4gK_lx^HQ^Hl$>5=U zEJJqxco`Uck{vlfTl+cfJ`|+t`zre{a@ncYx%y!)v+5qW@(EsmjyJ# z0vfYK8@p)n766UJmLrc@e&TP{0j*)`b_F@^hX%Zw@&Y>!%dmevXvQ9M2)2!nfx)Bo zHmt&1hcGD_*93wdXqFVb&=`3t!we+a?YaUoedu_MMTMbL0zCEx%6CtHg1WB?FYo>Y z4WfMDmuCPc1sBE-pt`4}<>&wZ;Qauahnjz}@b}Gy)kT_z;I)x!>ytVQ@O0cWAIQPz z9-ZLk2drv0IuGi2Ku(v1G)$m%tViczP}4!nqw~B==Qp&v_z(DSKXAnlSAMV?Ji!Ta z_*(E{Uq=y3XA%BZ$dxgWX+7}uAH6JM9=#!g65vH);1tf_VR?+dxg4YmZGJBq)QxnV z0NT-VA3T2yb%;l2FKDLOr8nWf3nbaS=(q@KAC$JZK-}Tc4ORhb9e{nq-K(pB| z^3VVO@6zjF;M(D$^1r)UqV<0%S97%pBY&S2C#X&Nz(wKe7bXY_;h}B z1+DwL51vl+=?vZA(di4S6=%Fyau(EO^xfgp4H7)u9W3IJ>?opn2($`w66hrIgAbTM zVF>C(dGv~~dGxw4O1$Qp-~rk{v;mZgVf%+HEUiHEqa~md;X#{Rj(9Y`U~I53DEaa- z8dN%UECVf^hOM^+hlMzJ#AAX>cWg`Z0Y*rWxPtBvdH3)Ce{gG(zdr^%kp2!-#f z`G7&E>kQBa7tKSZmL9!4;8|ag*F1Vz_&j@kcqLx*BjUru@>sDjXa|r-^GlX)OG}HA zx008dPcedrCckxtPIysu3e*pt;L;rcI^!EOvetSXl%A3uM7oPbK-0?{ATHD*pI&bX z&t4Wzk6s^sQ22RT9^`L!2Ppujzn3g7-I6Yr5+%?1n?cF9+nvMJ@DjL>4W56H;DoN9 z1Ks+We88iZceM)WtgaKF`39bY@K)|q(0aFIcMhLk*)A2($qXkvI{80%^KY~{%-?!| z34AUDq=@_Gx`C0u#fOW5q4g4fM;R9b1OGPH8J?hqONaY^k8alvPs`){Egv{QmF<04 zTAX_B|9>dkrxSFlxUc2clHwP2pxg;sqXJH`o}EWuxSkBjGPzvTV`^APP*amiv+b5 z*D)|KOnAW!w&18|=dqUppw!~d;ljTSeCjsX640Fxkm9EkyyC&7BXq)x>q4*oyYO!d zodCIP0CL3j%a@@0zCo>&PmcUrC(`)!PJp_mf}cPGM=uy(a(n`<_lLM2oPWUPgRVY8 zc%n||)qjW&KuZ}e@prsnhj@a&)%-uGkZ_&h1G|ahp=0w8Oa7K-4h9Ct<^znrz3Ggu z9qhiH?|nPJzBB~420-Ict~;7vFgHK=%intI59kc<|D~y*GU+_{%rBqL&>b&0&w|so zPdDiB%!3}u4$y4-5ENy-*or^2^eqBO->+D}Ya8D3H_rhL&bZF-?Y!b@`2YJ2NQQhl z_s9SL6I?(CBA1XMxK!a8=*}z0AktEWCDbfn5%B_+=a@4j}CpcaE2!!}nbcZ+j&BbNKYK zE>Z+#gd3n;B{C;q8KLz%sB>_azaA>i2S3@yf9`uza+o*hVIY_-*54^_<-&#y6Dl%`sE)7 zL-RxagTGineHqZI*;AmocK(+AY@j=jK~KBq z3c9L^;br_MkScI^g8EQkN4(qxN^^R!`U;#Re# z@(pO58dPpvWMBYwS(^Vd^0)kB12ts@RPEW>89aMgtU$dGXn*w+Ke$tJ651I#1?u^v z@#`H1837u~X+C5Cs_Gp(LR9|ySUxB{-+2w3{y*^x@a|v(bJR!G!1r4)afx5f5$iTDLMTOC^!$bvg#Chj=aA{P{3k#Sp;NptE zW!m5W{~_0swf^VtdjNK#fT}SYJ45pUMo@X%T{;2Uw>$#cI|*598NvIK9dBxUx%?wI z&JRJN$?hX85AS&Kod@cMi(mf#2eoYtJv*;7gByvAFRwvz7AOgT8?`U3z!P-f@h!sx zFLgeEy!pzf^CPImY zP~~R@MezGep1m$iOli<~k30fO5NZ4xpk*|tKk@5;4Fh+ay$l>Xd{q8_;*UHHO-F}7 zhM)fY|G%f@kN@f-8iSsV|rR zLT*cZ=R&E5D^fu%ME=$--~a!ADfj*V|87T)moGp5|L*`y-)m3|R!W-T*JUV?hfJbw+4}lxr8$ctv9-W6lbAh0icXu$f7QYE<8)B`+c|q+d zaQ{ULH2Df{KSJy9mqmP_)KA29N_o&!yyg@U|u zjNKB{1c9p9_7gM(2ASkS>)*Dff&&LU>F)^6bpOE_zljr?>BK&Q!UDaeQ!=;PwFP8D z^8v%wOD_EW2S9Fuw04|7pz8piJOLU!dI@Tac=pz)2zd6E3cQFtbN@dmje%||e7PDl zY1jY${r~?j{l0@rZqR=FOQ3u2KwG|CI$c|QI>9YLk52HlhcE6Q2H6AdgMk9ZqZ=&j z(+yVS*$G-g%HIb%T%_9-+A(`s2g>}Q9v8TE;sfczzL>@V8iI%PG$4IfXp86N_Lu+v zLkgs|Z$OIzpslwOg>KggE|5|XQVP5j0#!Esq5nWL&;LMk9H}q`FU7t=*HX-R4{9kv z)>5EP_|1F|N~55HsXKJWCr5q(nS-sD_&W=KLyFzL1MmL-f0+!*H{T90^0&VE`~UyT zub`qB+#YEC@En|nKAT0}j3b*$SGNfV4_mKsSkC_{{?} z0oi%tW%uv@|6h0>1MM6;@zV3>f8_gheLIgkhWR9aGyDeH+VvMc1=R^&t^_)crS(9i zq$+4y$pbVq*mda0AGr^Dw9YOydvXea*)ug7copN)aPeKz-N9-2QPm+Xz<*r zmuKs7W(J1N69*rNytd+(XVCoz;)0AS-3o4bfJ}jGiF`2wY7k`G&(71J3Hr|CI~W)? z*tm2)11-Zy`^U!6`0W3G{svA^C>(sI;KBI;RA7Ehx%Uh@PalMCqd z^KeE_#vjMn4Z#L5bl&i>JXEX+YtM9k^k_cB$iL(m%fXid2OqFBKje4h-{!;1(Bbvp z$MR6=eb?4+634Wpf4PtIRcN)K@QZA}<6$>U%}^eFnM54~Kiu&g1yZFZau%^8?EHlgI~Xf#lKo=;}RMzm>3i zbhCl>IfDXkIrY*rQt>G*qbM+4%=) zJfpi>z_YtVh2wuPhevlb=#sS3*U?~G9b;k-PXM{squWcsquWWsqx01N2S|HILG=wt zeuoAF0|RJ_B=mlT9Uf?WP!zPDEM@iR6f-=4?7FlGFt>Gn_UJWz|5A+M#j1VJ|9kYB zI=>QQ@aV1(0Bt^)4iaiTP@?S7Evl>xx+Ou#qr2+?Xd$Adhd>EW8h<|PV^D4vbO0Tq zTEgtpsSMfZ3U>d?<1H`$L))n!_rCmo{TB*glrKg>R4|61&Z`WJkUkk;;(NM|Zz zs;`%L!4A5?sS0fjgRsQV+pP`Vwo!PzV5FF1W(X9FK( z(akzh4wND-3=h2czxg>VUA@>0(ZA;P=@$|EL2E4_Euhl6-*2-JonxI53e7P%m>{q z#_=NC@9%$*j?QB*7(zjZh{pZ^xf@IRgs8VhsJ{?`Q~eL{{n?*D%d;(w>eALu$E`pFqYSqW`JT{MfBHypH9$4LPc=UR-5$?alHB}?sreUUdA3KlgF<((0O(wB&}n(i|5QqpJ-b6x1VD$3 zdNhNMAcCCT75o1Iv|O@bEAax!M1$^!LpmQ1WcLaY&>gpjU#9*4|G(j>LWwl!7~a?O zz~zG{_|T8$101jWz3ZNra`4~(zTNhq1J_y)lqi5&F#oT#9w?CqRqp6#jX8kUEC0XTdH}Ti zsrGPQFmN_v=4Y1(JcF`l*-I0<@yugFg?vJ_>Zs!hX=%W}qCY@R`4kS5Qiv z;WK|7tEG%M1HTxrkd!z>8h_3qeofyC{F<&0UYv}2^?$zwsIuxj{9;ektN%Wo$s8V_ zrBTn)`15@)r19s2?p0$x<}ASA(QUg(40P5ak`Er;tQC@=Gq+6}FR?Lr zbc4#r`|F+~Ck9yi0qovT&raxZ4j#~RhClj&O=5R!uu)+w6+=lD@bUwcKPHw85p!$X1quc(a|8{u2gM6NDgB?Q&JNSrY2XKCY-nGZ^;=U)mEGhvR z3@XJAoJ4NGAlfg#JvzU?xChYyYO@sY`wh8!5_Cc3RnR>f;A`0SWc~paZ=kb_9)fQn zz7MLoUmi{R^B)|3AoqrX4ua`?>KKMpFoCu=fX*lI=(gJhYEHRyo4Z<;sBrK%ftt}C z-3*T1F)BRp%SS;+?swks=ruVCI)duOvzS-^J0(DQ+VWnpPxEU=m(EWvnx8#-SuS`m zUiRn>xzFLzdC^1jVDm$c5)qH%4&W2|J(>@2cvv1Pkp`s$gqVQGaR$&SL>`uhN?&+( z)-o7g^6a!xfv*pW1+`l}y4kyh6T$fd+dO{uUla28I{?8}EZwtRDb%ntgf`7(F|Wdp7?0&&AmP#Z5Omg+ zD#M5W|2;GhdNe=!;9+^DMAW144TAs!gGY0Z$`9~?36^I{UpGGb4_ZN>dBvmkQVE+! zvyaFR2A|#%6@H)I+yg$HKRuhDeQ-R+rsCOK#|Y{K1-y0!#Y=Ahhfn82h?-{}2VXIR z=HK|&p90O~zIf*f>XQ2I@a#Nxj6r1wDB*ato&=fT!S8ayqxmHxxVXOeLUjH8|KQ8e zpS?Kc3e8Q2U)YO+w7Vi!gq13J^rqf`lsd4(+aT?a7l&OzdFAly^Di>DA=U5T_`)Ba zFFZEf|KDJ(;@NqGzXf!}hfi+-qsMVqaIktd{-bJm*1*E^p=a~+501y!RXls^89|La zV`%?*8`Tg&#ab-wJ~aKn_t2 z%n${Yiyoc#LDPE2UaSVUZw|jc`9g5(eWdXcP(2jv(Hncfqxp>iateK6c;L7@sQ=2~ z(Oqxg(OG-rwG^Vi2X6XHv|cJT0~NEK$30sAm%aua&g0qXqGEvBa#QkXK4JiFl7h-8 zNcj%#!Yuy^YFSoGygvA%W(&%3M2PwwfR*`N1cF#P!c|MhvK z<^ZgGfS#QNE*;R1&uV@SE_ZI1@`Aj!_AICw4Z26Bo7n@jwFq47l{^96hkGB~%niNZ z+4<##Dfh4c9^KrYokyD=$~V7cYW~SsX5!K73p%3IrxUznVG|!niR%TAZlrsKOQWF9 z2Ia=s!=UvI&tG`_0F9%Yo)i#g@NBkYDA5KPM>HdFk{)M(BKEL>v1iI7~l)^!6JBC@1HlBqw=xR}jesKK- zT2u1$g(EoSvR>kqV0aOF{MUcbqD9ag-Uby=KZCUkBp&Pd7k=ZAf-I<(WSs>PcLj-q z&a?68wf!ao7Ow({>pFr;8P+rqd*X5s`?yCZt2>ChN#^5!k8WFQ5Sy*|<^LCf_dw@g zf#mf;Vv`{9%DfT`u`iz%fm#C4@d}V1UoeABKK`Qn1E`^1ny7?Oh&Z_2HnQS0$Y4LH0X_d3IidG|xfzXo8NPMo(Gb zoCq2lV)p1}1D!?u!XI?KBV;M`6;Kt^dY~j9bl+-c1PACS7H6N%0s&Cb<^@_`_YE{3 zmLTEL8KB_N>k2yC2DCN#1Ss#rSNxV*p(H2JxLvPl=39_Xut}xce0o(Y-~RvqdM&ga z4cd8n1GJB&{YBvhX!&G#((uwtW$+*zxIOOC%iH=9v_1saeVUyYLEaJpt=E(G==@~( z?d8*dpdma^zUei+`3AJg`()`;k6vEekD&G6AQgwfD!}GL!VeU9pf{jAr6NAvX&lY}nfP0~K$5++D_$hHffCeV@WC)kL4uvfU(~z@&4C^T zixq$li0n4-?2a?=Z2rT--*O(@sJ{W~hzq>V1-IWkx*a4ymt(~HSSARRest{iV}Z2c zTThk*d-RrG0C%E&I#Vya_*nelKj^&CZdcHub+9GZ>L81ok2pXEC?MGybdKa6P>~Kk z3=V9MBbfjCkVj|i37_8F4X?!@$r}MdIcbUM8T-OKx z9gnj?8WOilANqFZGB|eEvb6r^Z#Dk^|G#H;_QJ^0hF(JVUoR=u)cIZ>18b z_00*-PFI7M4B#`ioF!g_zK7N*_ra(A?*m!zLg5W~jnRu2$HC(hjmJPEF3|CbBa@&1 zfAN3qeNg{n#fxRfAh-2;^qNM4Re>&eYMk;MslEi2*`1(S1yFjZ2OTNcZRXkerTIT& zY4!`THDCUN0;~BqOGz#02+yw|DObUiRxbmO&Ikd> z;cgzCpp!LtPrn1DP|$WSCwScni$zd+?v4Ycx{@gfe}ZmfH+>CV#})0<`OKyBJ!llb zF)sF{ENDs#v_2P<&k8<*(&CYqW#FuZRNjII$Ux`+d4NZBPznyvz}R+h4mwa$iYz%|hF0hC`s z?E=t9%Zu(WAZ?I4%0Ywo+MpzgXaIo9Q>gmiVD+zGgGz$~C1RkSLU#pt;MJqMh{L1X zN#NxF2OgdGUwDA*djQD~82Yn8yG&cb`eT21bRIwXawf<|*!Yr1=RMGs+_ol1*ce`{ zZ+ZS7G;jtkc|jdq)bTK|d!nK4QS<0#@aW~0dGr7OF7Wk)pnK>nJp{lTZBBadyB>nv z)6;qX#R||&-31)(z6zkmuTH1i}-%#*-s9(-RIXxs?7ggs$+;01dUsLVL}qCSU_0bHW7`f@7PXps};#FP@ly%JyTRY_!th z!T;vNjEc^9#pS!8@nQZ}1yB*z&DsO zm;ft-ypyS1$@&nQYy98R64e5V@F53WIqXe6OLC*i6 z`epgQ{~#Zu)f?8Jc@}7oiovHl^?_qIi%RQ(lADIN5&60EMluoPozz%Xi#20ML2TOMs)WzT z;>L@fqu|I%K&j&RTiGG4E(54@9T+^iSv#2_8LxEri)S}Mp;fx++hKP8)|H?b{LT#C zXVp3f#Ob{M;>a72ijoO0yFrH+%QJX%hd%K9&Y}WND7+rstkzJ|N?bjMjn<=yIDViZ0OUyGhC+f}6zq-CNR(hN zO$Sv-kb2dln^lqt8s3Lql-&S@X6a6pOrY-3&8iCV%eOr+zx2!ib+AG4Rr}xt|I?TM zU(W$0Z`0Qx1Nd7&r(C^0{^HtVu$Q3yxlnL=22CU)C*&WXdO!5Ti(9`zyDJS3v|cLV z^XPW{0IJqmz{98>-Jw5HJhVkrLG#_EOeYV&r~{dcNX*FPJ9NwoJPP0Z1|{517#?u= zcAOn_B-wA!_=`4L9rzBC7&Q=G0LOUnln}W6C=Nb<`vPdQs3Yi@BIsqYjQlM(7#J9u zUoe4=#cBtglZ1QX@aZCdy3zu12l)OP@N*h>)B@EYC*t$PBkRXChB;YByp{FewpM23aTXMsizp!pOf z%t2RvMk3DPqzlYpaX~JcUJ~bLNE37Y(6Rh zI*Yyl((QWh)0unWg+SHY|Da87pmH0W%OXG-wcGUqc(ej^R~M*d@e&j@@b;K*cdo?i zt%wi+#g0$62Kd6|2`}P6^H;40O50w7E>i>LCy!p+-E1rjFRsY`{{On^MejV61}!A~ zVDn|*LJgciEq8$?h+e!0<-O(~DkYMjrXw?We|hW=@H7Ot3j!|BQ0Mni)87tI`nv;8 ze`_K6D-<*;4sMHJj=qBHqtY85-KJqb#Th(~yMitNV0e)Uaz*QbQWccShrbncaRI1n z3$62^`MK9r^B6e(UMPZwH$hG7-qIW30|$=0@Y@R-gRQ*)no->70b25413HkPJM@7^ zw~y9Jof7U>%%XE=HCAgSzqMQ{Qp6TUno>B zcxeWxD+=;ANPQ(}RB+|*|NsA&a6$?J&^%GMso@XMeR%glLSU^YUxLODq3r~47xys4 z{Fl=a?f~UKq-jXdAWrie^jvbB4KxD=c2>Sex9NrNP>;QM2O8OjIK|BIxGSj1#Ng5V zgQdg{tyK)3+H5`|0c{l{r%%&Lm~o(R0xkc2y$94T5Co+u9*=Hj$Q|L#B{us&feG~w z$TqN}kVn@_T_73uKCEU%tiJ%6{ec}cf-K7TPmICvn};=1$u97Ejo#8LKAn$Vd;*mO zoyT4;ebF%+R5n4<3tIaKC1gP95foL?9^IyUzQMxe7HGHx5++LEurTuIMlQI^K@kLM z6hYI0X(dc6$c=Np|NsB`1Xlm^faCD>MsWWWq*ejqAH%<(^nB3pfQL0#$z-UPo_O?% z23-ID|AjPY!EqI+`rbGTIz9tV9WRZ(gZ8(9;vd@f^lV7I0No) zK=_lMf$WEcFJk-wobNe2y6wLoXK-L(C=~@Q3;?Ga$W3^Va>C=_dj-eNFFw850xxd7 z`}yCcyFdigDNtZwC}r{K&KB_NwfPE4Ag--XO09fAi_Gr7h;ISaCkH{!4fkl|1{v?$ z`oGlNqtjae%@$aDeIICk9n|-IZ1w8DN2Bup{a_gbQ4>vvrRSG2`UcDw@FT7aZ47L

>mc5;?>Bb0&=`d=PQqckC^#e&w&M1RQ}%w^{jnV(0zl*Z$91i0^g1}l!U_#_W~IX zs%92~4S|>pnk^J?>3r$h`nGN}sGjib7P;@yDRKjJcY%lH&C>Tc!pjG=gZn@D4wn}X zY+n5b8-$_Ofx)v;MFkX=@PKNz1Pvh^e5nC0n;1Mg&wKWks0h4>o&yfrm$DFX41L~~ zul~REg>oVd=>cvP#CI`HhE9x9PO6VkoN$Pk_b%>=^i4SQ)`r_r25k``@wi zXzPIzUQlA<0F4fSsu7>w+6^Avw%b2}O4xfooxfgOSqp0Wl}13WF+J|O0hHD{K}U|H z?s08>TOthAU&;k;VYXZWwPd?(OFxN&uDbxu*MQqL_g-}G{PiD{7C{HzcDrtX-9PEk z?YhCmQlV%*NP9`8M|UV_mLAgf;|E`e;n94=11VcT(-%lNe=Ddr`9knCr1fq8|Nnnb zfdcNmf%=Zs9^I^azKVg`GQI0zZE@vpP+OeAqqla=i|>Za3@_h;+s7cj2WWrfVPnwv zgX;`PcNRYW@M85Th%NF^TNZ;n&d9(}Itx@p^+HC`S{OlH&kj&M)p`F#1ypbusAvLh zu74pm4W<7E8t(>;=ZAnwrWZfog0gpph)3sf_udj+2GAMcq3?f!4$5)?^=`m-(Jc7` zn#2N6q*{Lb`9IpH^8s{>9eFtqr2Ye^j}S-5?U^sE-v0a#S`z7E`KW}`r8AiY+zGmxmuh8_sZez*bDLgBMM4ef|lWwD{rCT+hJ(>N2x~)`FC zt^fI_9O5`slIZa579TA>uE~ z?t`{E%7gsT%?4@z$dqmaU8w$g1GN6@W`~JS_UQKKc-`yK`Mo3b{tNKEblXDjdv+dc zxm02T3O7)Z3R*SPdHBU!rN94uJ3n}I-t_1-byx$Ma69DD&HC&kXfZx$37MHSPfN--{;|{}K1jnCm>$lQ6-_9Bp0Y}hy z4lAg!;MeWC!m-muh2`}^P`wDUKjR4l!#>cGQSjXF3r%BCO?JHG&8ahaO&@;}Vrm#*Nd4$}Sv*Qf7alxDpA|FQ_w zihDf)R3F}dv3V6}p`q&r(4cFl>k5x<*22$X3_g|`{4JLIK#P;!zc2ue9e~dF=(XLt z3KZ4H3=h1RzTp0U(3GG6C>xb>QX{$mD)ZqRK?pP)A>|uGCzXf!^JEVMQ zuGUZ~3G?W#mH=hC68;xjtDYm3r=XtO8`MJjE@&~%4WDk)8E?fP3udCg^Uok3>w+$K z1g)V7_w07n0NLo-&76KJi(hI28v5P=ng)c{z@WhaNPE7w z_R5RxTFeZuXG7cz;K_mITbjTv2GitM z(1I5-hZ*+*N6We-J%;mz{*$9<^&Fp-cnHc zs{Hf+{}=PX%Q=pL7Q5YkAqeWXHveGZZ*~9w|Nl$SU`E;mk6v5rZ_ErYLU@1w2Pga& zTz&VE;uDl!z!9wnu4ocGn*WQGWI230&RFW=(D0w9B+sLpb^kkX@%0jPe>=1t1R6#Y z_ULBq`2dk>0T0cA#*yneUY3J7kof9mUHBTT&1w1~6G=!G|N=4v?2BLfgEf!nx3N%_- zq5|IP(Hr^zw3s+$@vr~iZ+J)^Xnr8_dIv&1C=uUy@)I=H3sMJ4BrBi&{QnK6wD-lX z9`x{pxEH#{7T)R8g)Se{0<|!}X{^-9r}GhLBCyx==>PxVs|8=aVR;0t&*62%@z*zy z+|$j<`Cg2{qnUvb>@#@yK*!6WHKqk}K%Fo=0CxpwH_40eWuUewG=7*pI^pfDN1mNW z9UGs5Cta?2c78!rv*zE9u<*C?fwzD{>P@6YnEb7M;2qN_ML#Sbh#{6Mm+WeI#!|A? z@EfRh0~OTk9)l*nK*M>i2VA-hK<9Y2RDlQDzj^fXfIDX%y&@c-c35)-he`&vo)My0gt|g9`Nn_2Rbp0sr5jKIlnxEOXmxZZl6OOo}E6& zIl#4=2x#dTzfb2kP|}f20b}Ul+m;K7>A3sR?!)sZr$7$prR5yI||x{XZZic zWqD9#U7`tU-g7W8lyZZoKOqaH!Lw4xf}k6IJ-Th%pMrWjzd#FSRThI5C4vnE-8l*h zT*XH}L0d>bHKf_2pP&hPC)e&26&aAbmOlLX-_i02e~Srtt8_BUOKotTWkB&ae~T!n z3&9AMg4LJcK7i@dpZ{O}0M&n;_g_eW?lwXm$KY?d`}hCqFhIeg6N&EU5D5 zpw=p68nN^e$WM(Iz~;1^16{0p;Du5rsFr^IA`2>f1|+-^o?pOyAJAl|Pq*s*XQe}^ zqz{Blr8&T>Vb9Jh9^KF>G)M!Pu_Up%%r{E;KZyqcO%Tz!A|DwGO z6glAX7oHvw_o0HPQoy5hC=D3ULLt9w5ohqk1I!}P6CQDg;Tc4CVp$(hd0=WY=3JvK1fZ_@jG}fce`Ihf=X` zM-)mleLAxR3=h1t0p%@lK5BTf-=mZH^>dK_Z-CG3ISRhM8|3~M-;cih|N6{}3oW2b z&uaJ_9H;B8SfJaoJSsueDWrUa#V4r!$pOw<;0Ya$7mw$G6hY<(FC$gC&p@r`haR1` zUVH=k=4E!wuAhSB}zc_sx6qLaV-3|hv4x)-jugM`p#Qq|~lOD}h zD*RIqdNd#6@L)XQVR^0ewP!QPh}JkrW_bX)|5yQ3zPa9b3A&mO(Y|@X{ScgZ(?Jmt z4|0ry0BGiRSms7 zhYb&a&YNtuR^gv|$fNl%hX>;Y56jb~uU~>rv4gcw5N7hfcy}FY=F3eWBf6^vUhJO! z>wo8gmy5vsXo1)Bz$s$s^k4s9w|Ml{K6s%e$IS5Z5x9y3jVFN1ouYsL|AS}JGyj1O z90AQ1zc_RYQqqKhO$vR`%>?q72Z-0p0|`Q~{wh#A2Xv+`I0P+EmA-kY3MzPln(jmA zuVC%VKfy1~T0Q_TMd>wl24{}L9-W6?aDXQ4I&Xlh6>xfV+-U?VnR{8|=774Xi0MBA zP*vm6TYAEymv@rv-~S%HqTb?v|D&ZckK?X4AoGz&KpD{W0lYR71jQ03XptB!y?S&D zBenM)G(6)dy$v2$p9(4)I`6;ez6nY{+@76Bn!$V67)yL0`!&irJ-TZjyf}Rfbbb$L zL$vP=Nb~r`k2@eOt~WeDQ=tKP);P3|xXhHVtLYwCtX&$|{GaraC zq@{Vh=&S}6D-1r}3qS?%i(Rpd44_R1LeL#2y|x@6cWnk8DB60vLY6S}+beNHiM6fDI+G^0#_}_|4S<4E!yPpos3a{d^1DY&zi4 zYpNj)It(7P2`}}8M`!GX7v`5h+i!n}lqjM#H$YV)d;|&9=LfALD|`Uz4>Ejf0M%iP zC1*fw+g5&1V)fktjv3GiMU0>$Q$Y*$Ugt6~yao-|bUg$Y)3-jtis^;L;ALAcZq5KN zhi94v$_t>;xrVzS3qYfDb;ZyBzj#>(j(pVe9MpDdy;P#wU-J|n*i4>?SsjCm# z&;zQ%qCGkffp$gC24(1ORvw7$F>u?Ji^1hTJp7@1f=<791)8X6Jy4AGyU1F2oauLy0p= z>M6AcjrDqf%RSI)5=eRQLVD6K(3sEbg%Cct{ah}=%mA{DjY@Hi1o=0G0;kv1EBg1bl3@hix8-x z16hFvnwO5g1FE)5%Y8b(yBhv~q4NM#1%j4Ll?J^O1g*xC2geV%-wfJY16}&X-?E8; zfgx=Ic-8?lg{^%3|9@}=CIoH`d33rSC}r{Nlu_~Qyzc=@RIRs5jJ_RaFWKtRdH?kZ zSonYym$LYFnyC16e)sMC{$kaAxC<_T#usA`fDd8X8UVz3WFxQLvRiZ4Pg02?@O$)Vv?hy?2=w=nZ4qC186qJ9z1cPGKqw_a^3#gq7 z+Dr^8sb6$}TVkc|pqexWw9F2)&FerZ@9QW~ct#6=%3gm^8^;MfR!bD1@%ijU@KtDh zo{a_%R6{a718Bk3ZqOPL(2zW+J=b|3G|&kvwD#w8jwI~)757c{rf`TT{e zE2y4&=h16B8DvA}p%=+VK@kF;e+3s!kojP6@c}B;Jv*;@bY6CBe#+j8RFGu)f`;2b zqff4ePkee!&+Y#I|FtxD91V1)AE-0-q6@U+uR9hTiZP%fM8&i7E+{nbfWq}Ue5OvO z^fY+#>nJ#1zbNkc1=`K``Vyp^evu5}gDw0HYQ1(o^5`{<-3?0o_g|>K2j46T+3yZ2 z$^~9bQie5!C3b=o9RdZ+-}G0Y_VEkWUQjInY7#>y24VRN;tw{Ev7mMhXks56>98SD z{ua=P6)0DV-*%$YcMt#6gP^6TQx0)nbnHCWa-hVoJM;)>Ik``# z%7vDbu>D}HI#82KO3@}^!I!(a?(t|oq5*a?TKVqS?JnR0?i+w7iI2RfKJ)W`cjyt% z&ZE6f|64DVn87S_ZTVIb3Ldb#|HAD&s0YTn{UXFWrQIIAwFh1Z2r@IgZh)k})=Rx6 zLg1FFM|ZV?2fxb)$QmUZiB}-wJvyBgKt2H7__i7vr;Oe&|AS6p0;eCS*julc|Dj8f zAnhlxMaTJ=8D8!KWhdWalnMZ{e%3MEv-3Y>fDO z-!dQ6Gy`1#+HE`MET}srD!UU@V*GotbqZ*(nNf&Mhg&0Z)3OEQosP^cu9j5On_Ad8oHq z13<(1zm`HOHfQiIhU4s|VE=$xO5j@9qnmXB$kn~3g7 zXuVZC4>QBd9?&`y(0;EqFTz3T2{cUrvdU`**u5>2K~o)|Au7!B65RD~euFZeCk$QB z1v)ws`*>a=-tjzeeGA!h3|gEo;M1*p<21$&I*)GFU!a_BX~5so35veX?;gFP>Yz%Z zxAe-3d7um2I*-3_D@7cZG`oj|!Lt)|gzAfa1yBzUv~BRk7S}(Z18QE(kpu}H>UIU4 zO{Rs}`W65O_H$@@hzW{|EBSBahDe(H@=0K)r6zvA^JU1jzoENcU8O^@96K;1P8V(14dux9Zz7Vhldr z`6vZ8c*7!Swk8-nB-Cx{aY`I~k2GjJ4YYYc*rPY}gh#Jw1o$eJ_b)c^f%-Zi9fqg@ zsS7WCL1P%;@(tW?`OnGB@Oly0onZcXZf1tpM_yFqf%-0x@(%3Ya8O|eu3JDMSAkNJ z86E&l)bqEbgYG8iHdQ$TYVQ8_?7RY+kSLLWSI}Xgsx`0UIq0ZBP*X)oCkO!9I^}*8d`6gw}=XSSvG%rE@+=t^PdO&Eykb+Ex$n7zWMh9{+0-cksD#^K{0&h#Q*=0rGose zpzQ%3-KL$$@@qiyphY1qpzAR_oBy-$x1IoZ3PA0T7qy!pO=Z;5{xQhPZc~Tjpbdpb zDttO&<$+^-?8`3DX?{rak$Y=Er9KNMGsDY3aHACzEesyL5OE%MW`>tf!KW}l#6fOp zb^G`Kzh^g_BY2(AOHritSgwZO9QT9vA-wz#DhnonCaF&R29;T$V=+&p!0uKob@FIN zcbNdFkqFuyQ3zT{(E1QOK?L^Zw2dHdqMA^$@5TQtP{xC}tGBelqgV7Ss8@IV_ydra z9MAp#|MC>5sonYg#gZ2ApyARsP=gsXXt?+UXygYpXy_Ra+N1>5-Urg&dH)3)NNYK0 zxCmlw8C3k;+5i8+t7G8(ZBTgy&htq7bJ171ya1JF9^I@Nr$JW220}|^P^Xd&;jL$I zdENQ^MZzzTn|&XEI|Jau@*#ty4_+LLU}AWE;Klz;l-3kTAKX1*o}e}T-{Ix>mEac& zKSA*TF2JY$`vcxOl`tLDmVW-?s@6-;@t)wm=XYr4i+u^29Yv~5VdjJOp@K@7&QGAj zX}dw2ydv+ds@gf&dyV|yb zdK}=R2n{7cD!|J;!t6jHbN_{%5J>1b=p@Bv&}yu1(?5qnOEjKC7Ullm@*i?aB+Si7 z{)LwLe?i?A(7?qT4Uf*y9VkV=M>ne}Xm3?Bs6+7>R5W(J2M=nz*me@sEPUU3pfvnN z*ICd-4BtS`v%f6F0I`O^GL8hT^a5f1*=9*|IX=nhEx&$qW+ z;l;#H|Nr}T=P7g^1`h&Afl5E{xZE>Ppexz2*21YG?0n#$h-1@r$G z?)M-5f4$YWJD&p_TCJe1{vbEDg6`jSHGKQ>AgJsD+Xp%EhK&t03;}YtPiKV$XsEQC z)d}R{<4&OS*BL-(m2^6Bytv2w_y0@Kkpl4Y;l=7%plX@F6?7SwM>lKAQShwB)J9m< zd^!pgLky4;+WDCN{`c&3QvfxDL94mbCU|zcGWc}nZtw-&Dh3+VcnMmV4RUNt@PE+F zEbqakHrzh24Cp2?-_G|h9YI~LTd7#rw?WR^@jzzf9UzcAbAhak-6VJ zdQH#&|Ns9b*InfP8Au*dzJi)k1|Hqef?;R`Mg-~%%f9^K`jJzFnyK$QyUSYg9U9^fT$pm7Tc5BTAs zpcW6<{_bK9k8W%5ILnLWUqJ`jX?t{=*6s(bP6Fkh$p^qAD$vZ>Yg*g`YDgY`k)7}y z)QA#TfQ^Fo3uI9AKh2Xr?}$ftF$bvU*6pFdF9sSJ^6Yj~;1_fh_{?ADdIGco z^n^!ep+Xve&OwjkjvAnW`Qwhz<9iuBKsPS?DZDVP`2{&9=;dEOE-aW@W7;{@c&1CVX1t|uJ%1>GcG80WwG|B?eV zUXH#00vf-Cm+cYA&ulM4A;_kv2g<|7f{tb|z4 z!K!!w(*G_g2DPbudQ%s8blaBf6$jr44{EpenwGIKFn}7`poX}|aaZtw7Qd$JffsAH zfQHgsCxFs-UpKQyckK>{jub8i2G#$J3=EyF8(y@7RP};x848`@(H%PBWfI7r;Pm{0 zdm5;GDs2I^Z}Y!^8XTqyb!^b1-JcxY;|-vR zeb5HB9iY_wdL_R+gKy_oU(2!r{ua=xN8j#J0nhKpKt3*g209?gfuTF}Kzt1{+42}nXVfeER^}d!+Ad4xf^^sU;9`-E)sbO%BqlYQP6%)Ps=+c@?OmXC`$8?3FM$_5USkZ4@Y2!NJ>k%kZ0r=AjonXMTg0 z`W0RPHM2qeti$_3o&yyj4+Ee7fAOajT*UmXgcUK1;qnJT@;b37MGSa9G^mVu;jHx= zvfpeL%J?lv4&KLsY!ZHP0#uTK)*2~+8qwXX2X;XVSR+sZhfSP(;gyF^O3E=YaC}?2j0B8nmH)y>YXanaaP!r?KVzBfwP?c=( z9@=|2{NgBhH5X_TnKj&}nY&>jaXkPOx8QUN$}g^l2X=x|2{@^|1nns+|~5P4`)eYpzM_SM74&q!l%KHd2oKHchQ zb)d&_SJ1>F17ra5g)?aDVC#Vrc5sbYqV8(=!~^*(0{&L;>7n3+2wEutTJpg!&j30* z6>7pn$jtpQP=mvx+Zr@@_riBKXm|y5^jpcg7awF989)`Es7H6{3D60uJRY6LUvNd= z2d$Owhny7h{Kc#pAT3A1i`c+jdgys9B|0ziK@(A}2l!h-d(A#O^4Ga?cyzm7NaMfe zECHJFcj_ZT&Bld0^-QTEyoO{3b%9uS?-65wTGXF;b)wjL-I0PV3}@7rB3@OlZ@{oSD_S}&EbHdrv0?1#jN zQn%}w)&nIX9^I_r-~x!j$MQ!htEc6$(z)On@z*mzXN`bnPhMOD&B(SMC_Mv;9;j8H zZh<arlY23aG3xf ze}HeD;Q{4W8SpYL&^{+n(-pGVL%QTCXdD!Db|z>|SSRRu$WBm#DFIzrq5;}o^z}Qa zKU5kBo#qPr5Au775~$I%>jkJ#2F+&9JPj`NUYuA8Dmq~0>GKye;411$!NuN-WlLf6 zogfoDRx>d8c9(K^f-Xvt1C=ChGhc$%bA14fs)G(7M1&B;0gm9UW-s3FL_44xQXYgl z?gU*6>C?-q2euD(LW+b(FR#vLQ28r56;$MPLT86>%mQ~MN!qKn()W?&QOu z-V$hHtk?EP2^+(U_e=g`zrUi_bV@y_6Y&(Z~vAl0C$~1NA}zJ(7Bv%5rv1GJ{*#Wv7ByVe6GhLEJM1v=?ffD<&@ zfPC)bQb^4xfv6!s{cjr;@cm#f7J-`h-K^R>L1Wo9DjXi&44#%ODkZ)zc0Bt7IS;qj zR<(qU0d)S-LC_Xb4UcXE!vile^`HNLJq0%J(rr6)BdA{kS`EQ}?En84uU3GX@P}Xe zfy$Z*FS0@Y?X_J~3^C{sl0gdk&;Ns$Tfbln!Emn*aQTCM#&(2b93~ z7eSKm^F^R>l=m<8KLy1NNM z)<6Fbx(&Jow5*N4540D`tC!`sa&*_O05yPKbie)sZfAnlc!0;PKpRn>zgPk~^A#ipN+{g|E{dOAIA4KN zN2fsPD$veq@Xq7sFRHgdGRHKJ?$90GP6jTDA6z(JbUGP;7PNuN5v2Lp(sB>f?b9#r z?g5`U_Chre6jG=I*rlEz)gHaJ8bxdj(Cd7_1^P>KUC>I`|1aX7fEpCfJbG0UcWh64ftcV|Wp@@c;i8UxPs-;jr^P9C!R@U|;|jkl?A$&dVO1pFo|k`=E1@ zUSxpsH*BK_9KrWAA>D@a;`>{09F$stx;3J&6+r77JHboA?m}fi7lH|Rd_N5Cf<1=a z-v{cTfSP$O3=FQVZ%dUy1rTWVtwh};*?|R|&OLfd7#KmTZk)9q{0H?9yG1>>g1S^v zr59gs2P*-|s&YMmTuz33S_a7d;P5iM1Pg0;_v{7e=s(af3#c0=45??BOE{rRLP6<< z_2CvVhG?J8XJEaKF@~37J-RJkg4Q7+#R=GakItu{Htt`?5Xf;Yp!E?PFCIcpwJy~H zxx*E7${=XHfp2%N0C*5^5~wum1dZLjfSrH+7@WXMFT-o`_b+rVgKDzU1JJ7e{fpP2 zsg~9QC1D=Drty`aLjCv)aX-)uiRlIq7j%ppJBZ(Upv1_dTXga!P^%W@7&q{Jgu(r6 z44^aIK;?V$5lDA2_Aux?2aNSN;4=IrXq^_c{sK7$d4&#W8Ud7YeY#E8Y!+ki?Y8r= z{Ler2km1P}dq5l1JHZ25rGh?|zd^yx4B6PmTp|Q&@59cz0%xtmp51oPBv%5u%G781}J( zqX4u#>%|s1P$7E!#hb++K-b=FJ`8Fq90SdzL)LfN9tLRu-P8M`6RPweMCnwB(ictO zb)dG+8^sv*fd-vlBtq5Ags7{Bs*8H||NlN~Q1`aiw(>9w!wXN40BCf~qu2IqGY7*9 z4XDNhh{hDCMn#APmo|to>;ttQUNAt_SwPfzLDl^PZx^+V0y!8onD*j^EW~dD5Os!! zK?@j;fLapgo`Nch=P$yFfBuKGBNRX`+Wz$a|7ee1TlK>%44~P6ah)WfVRj4* z3@_}VO3NWiPr;O$KLs_=;QgOak8ay1n?Xta>5DTipfMlT(2ZgY;OzJ&7^OiEDepYG zZP%=asGkE-uL@JY2c#a}drF(&(fS{>(UBcA#(nSwPxAwQ&|HRL^AENXk>($aprbt) zJorJU#$N!h{|6o8Zg}Y%1ApmTkL~~gk4}&<_#WrhZzZ?D*H*S3D7grpf?)7~n^?Ne z@Y3tu(DfD`$xZ^j9*mu!TT8h-x`Q}8I&BVmbb|JIf!DuzbpGi4?$LS8qw~=Jhe%}& zEdBm}h$y2$@!`>J^#38W{Q}`Tae&VI18E2GeY&Ci6QG+?eL4^Q2OT~SY5zjxy&&pO z_<(Lv?e-Gz0o|ku?w3I1gW&RB3Scw3og{oZFa3W232z^;A5MVm1YN}nK2M0_f02ey zx0eFQNRZMCpo49o^KlsJ{}&lxQx2;yG1P+!oBu@?Shb-97-an|hW`IW4n%3kzJe-UBr(DaJS{tP0GL5dNa z?kV_RM22yY`pDxrs58O<9(Bi7|6}GCA=LcR3Cb889^FF!AAsV^r<=>C+eyF!A`H$8 zDDmObE#%YfCE?Kt$}a+-V>Lku`~f__g!*&~K{Z3p*5deIqyW+ZG8Lp0oEH%J4^{pD zA`MLCDE6bOhol8i{=uRR7T!qifhT-S<%sx3QV%g7kzX*iVToTP{b>uXad$V)Gw* zLdRkZj_}8t&@r_mm7mz`$DUs>jRB<}RQ-4oHl}tg@dXKgeE9>@7_|BUl0QIKTZ7F9 zF_6nA@Ur68lck&<$Jsz<0-?+EZ(|i)EY1KslLa}8fz9)POs#lye&CMyM*1Nk%NJOi2*bZ1!1!=bccerR6}?i4B%Eg zWPZTa@QEY1V0gVAoIXG&@04gAd@s=a9CA=zsgOsvn*gX4eDH<9_X{hS`KKO0a({Qd z#Oo_a2^>6jg?x9Mwgadie-AP?4c?(x`RzAoQ6MCLhl0+a2MxP`j>&ZFyaMXy1$*?` z{z+zI0LAQ!+pM4s42NAUpO#2DHvjowV(-y;+y%TD5olV#dVA(L{_4xklF?|r%z zKqDgp9=!n$KHUW#o}D2o0v_D~93Gtk9xt|qgEr!Uwj6>6CqctQN6bKX7P+W^G#mgc z_UQy&1cb7s1lAq^*$<9`JizezwI z5eIFE0<9bmUBEBqF3=sS;L%&V0CXv(Mpw0y9zy`d&@aZ=81>KUj7nTd?2>;p@AaNE32L2XM z`hy%r^bRz(t1ufhI08C}$aRHBuLsBL8EF$-K-0&*D_&fg{`0?Q^M7v8xp^h|a81WS zXAr%ZJ_o$vyb`>imV&a3MaG4Cf&)6}+*;a2aj&Q51@PP+&#J(k-94u z9<7&3yg@~DiLFPsqXKB8q(sA`x9Fco=kb@zjX+~D;QpCMw||01>&emsQ1iiMEmHaE z(d{S!xo_7|07So*f|ScX-R>M7-TWTS#~i$Rc@BD5o-0-XT^rbXpyY{1x0}K@2BuPB zP&(`O_~Fs~@Q+95iEoTdB_BXNNel2=Mrip8DhohsDM14;Um^JmWql`T^~ZKOP~q?% z)SF);2f7OChzIBUeVaipqk^LV<%{_ez)BVSyRwy zi=ff;US7s>4u)Nz3+6m}P2D!LFuVvbe)-?A+eL+?^#Fe#=!_i0+Y>yy?LcR9iW+VP z)m>m?Jv;BdxM~72$3;cJ^Wak!zit~1$8X0OOR7Ml!w26hyqI?e?0@ki^*C~|9f`x?E*FR!ONOGdTpOMp ziP)pl^}!3j|Db(o$fv(^!aeaq5#+wmG|)Z-RJv z6$Dk(3a{6_*rfwH^z!)YjgAeq3_2wdAb)uDvIcBm0Uc1?{+JoG$Hjx+^}~w~te|*i z4V(vSxxKh22bq4DcI5g07Zks4T0bp~7jbRN4$ z_im8KLB3^u5h4f**4^M!o?ym+uK)1pt`30fS`Tte_ik_m!4!e+>+aG)2AV4coA+Wh zi2o68{)^clK6vdkM7|ruUyqQl2JyQQ{A>^(eAf{~eKd&gjF9&R@j+{!Aohdm(@>Aj z@1QC##HU*cbo9=P<$k~Zdoms|JmAx*3@(5%(<|sa3((|vu;Fcw<~JEW-L_FPQ4cLV zVR*o|TivsFj|wOfUj!fd@*l(jMFeQqvon+rjwsMUIYE0s*9Y!VxdDnP&?-+wkSn_P zs62oOtau>+75KmmDy>}?y!h`6>gl=8c(F~4nE_-tXfdour|X0ltssH!Jt`TXWA-~; zJ6>FYC~ffUZc(WK3AP?65dgQB95|robd`PvRY(mi3=E*+ak1~O{~$i7g7R$MqtXGI z8gS&Fdd#DcS1E8D!JU~Y`clUw}@$7A3JE6kB;KTUBgYkn$ zcj*eyQDNPo3n0815Z(j`uLHts0Q0tj+y)Y0yaD1f9t4fLF+M=)0hRK5G#|-;Hq<~1 zv|qHDfty&+@)4XIuD$#?;Va~P7mv>GFI{TB!q3Y9@l&c1{Fl#-QR>r|>ZZR?>Q_*E z{qRB18Zkusz1ZXnXyPa*22`RSd%@EC95Nw^QX(VDGx!cf(2iR*7HM96$lvPR~EPOL@dJ1{UHk57ST#*yV2n9$@|Q23xDP%1#~ z?=_7KhE~s@4SrA z9`Y9O=nm%a=r;aeT=2g*<9~6&|Kf=M#R30|J^mLv{4cinUu^KdSi`5=TfwK>S;F!E z6_4Ij&|*>0{B39Lix=0^L6;`hzGyj6y75I8s4UiljrW1v?*Xz4)YLZJw;XzS7sv|_ z)j{`lcK-5E{M7u2u|yTLE_#v}1ON6Qwr__R`CGwF<%|Eo0~4k7uzl>Hy&)exnm;jl zG=F6B;5^m*h`ChCqnma2Br%3>4s1-Nye~NzKKzH-57rH;68D1!p*TORU@z4G^+}aI zx>h!`hvrRM^AXjiVHFF=Y|dppxxiy)b*hJ#q#Hh65fK|9e;-FSYY%{`bGs z!ec+E+snYf;PBE>=i&beAX_>=dNhB4y6?ma=F-;YM@;-JssBNH1;JfOP&=mchsR8h z@1X9jN9(sb36IuGl`I~;?*Bb{T^JZamO|=3kJd|dZ(cuxkFUVu6S`iI1JrL8_OSc~ zx|LqH$aWEmotmN zl{wV?AR(mm4$EI2-Sq+>yH38yDth_<^&y!3Agf=L&jb}}$6vfZ3|gFKdmw-fJf&-R z;3cOc%5WE=e1o+&U)=6_4qEQ1@6pYAq7SqbA@+x>;Yq`j9=)OyUPBIVw7q_Tk-?{% z!SKMzmwP5d^3e-ssGYwLfL7*!Zv`_vdD5fvm`^Y3@elw18(w-@aOBy4kM1x9kIoO@ zm>NJQYxr|`bc=g5A8_#K~!l0a7G;XoK3x79QR10v^2u4lg=D$IxB^HIVf{27O~^%5ePaNPSAh7SgU>HDKN9iiyns?2!29RDrlCtf{bk7NoZlY3wn0lkUE4Pt zFJ^Or!XE7ZlP}SZPvDma-#_RW=GplT)Ohjigq#M@dHKbc{h*5Bkw>qs5Xhv?W1gKy z4G+A?eGi`K_v!o&sy+1YfsP6I!BS%G(Rmn>Dm#zAIH~XebcQcz?b)#xdlVl0_w9V) z)A?C2FPhb{_Fp`b5BhZbNwgj)G4<&76L9T3;L+_V(B1h0w0=&?J!4Dq2yoKSQ@ebN?TJ&c8kP|4|yEy$4Fq@U|Xk0N$s& zUcj-t9b{hXfs!=P7MRX&hPPh}L(&asc)`(nK1jOQ)3duB)Hm?yR=EM%;Qtsj2KV|f zsIOmg9TYsxhZ$dZ?*lcX?7#_pK4`^8=dl;h&0qcZ?XDGo8dS6$G+YC&f}wRYsL=wk z59~hJUS)854s?^5z_&vJrFx)KjX-&nAGG4t7~IGQOEy1ZDi!qTc7PD3H`W(<&{m#QLmPCR^>|GCl4hKH&0IF0W zM<;P?FIwQ9Dt81hTWu~ z1#Xw2v|;&Mqd?sP)KPrUI=XIs&(15po$q`)Uw9sT2O7e60o7+e7)xBBL--*c-K@2p zkmdt_3+R3|pYCb}(7_4FBly=!Q$Qp5t)AU1$6vR=!^5YyUcmADQSdna8Bkt$eGDA_ zE}f+-K;qzWe9-k|;Ff-8>4Fzgp!?RkT@Q5ouJGtCUEtGO!SQ+$+`P{79-XBtUa&TR zhV%b%gPQs!F%Z4SUz~6G`QHORaPO&jwdFubY`5!y-T+1)&R3qDA}Y{>A3*EnOBaCL z@Pa%3>wlgvHKTHj*x--1z!^sm$obnFK7Swg*@g8DvvzC>t!4SJh~kOx;=P2K#O9&GcY7D zFq8;*G#?P?Jmt~Na=`;MTXPt+6$+UTP7jc?RKVkfprwEU9^LgQc@8uJclj7N?Sf8d zeE_OTBs{tc1U$O^6g(_FBucsXx3M)pV7Fl`0bguWwg+7Cp7#W;GCgK^;Kc+hkZ(Zk zmTp_eHt>4o7mZG!GmBh77j!@;q+~q0ZKd1989-xp9-a4gfhKoB{oj{iPQU)YNYuO! zx}V)$!s9zTDE>jSt?m*aw{RiaJE0!Ewowy7V^~i?M+$m$y8d{Pu>x$-kCTUC^?f(% zl2*`2;!|i<UM zV?(VVL#efA^FNUiQ_pT!4$t0L4v>pXK>MB!zOXB`@$M~AVf5&>e$ll5KI&$F(C`ie zWIy(6kiBPK@IL@GteByCOOAlb>)DDA|9f;Ed%Xuz-Z~z06<~xf?u|YCjh(4P`n4xK zJ$rP!gG(`w&f}md2?LLAcTk)41;|m4L9@oN%RQt@ufXR|7)wupOZUTR6Fj>8KYTmL zUdjrZBw;o@aM+_;5Huxxt@)X}NAo|a(sv#QU-5udH$UQU{>4~w*YH5|FQ(FK9^HW) z-wv^to(453k9mNWlw5=y=`2;c)1wn~!8T;M8Y4frvjl0!fYYz#_mX^YLWFE0cihXu zz#sr$`U;K*&=PFWkO63Bk-PbUyeI$SqeW6_6MPsy`&d3MeSmWG11Oy}S6eWYaDWCx zSKfN@-{ZKm1*oC@`aHCM25Uco%Q;ri?KQmMLJrZs6bJL+hgVCLK54F3U@E=${SX5K zBLm34?gEhd3f!l209}s5i!hE2Yy;?gcgX5d5s0rD4XUpKcA$ZdXu`*}FfAJ_7G=mK`?EuImpUw&nP(6>jj}IIzp`MV9qF11; zWDSpQapbvR(22cBhscAvI?%FS17)6yzZE>r*bLe%_z2vTh<&+w3ux^m18A3VXX%L- zbGCp^X1V`Dr1t0k&f}ejUu0K-nr)yH$wRMzh7GLiL36A8E!M&J|96L8Y5w&edXO2& zR?xwS|G~FBgKkIR>UCoDIQUq>gY$-Gr>g>rQ%dVVXEMRo@`A=1AniMk&L54BKz;Y- z2kai47fORbSJkG^0}WMx4l?&R_)@{6`6qYDCb%uK9-uY_*yiQ~j2?=oJUB0atb5%L z8qfAXIIGiD;U#Ev=*0`W=l@?!Rsl6!SiiJ^&u=KY1)7`(?P}zfe2!ecgZjS~O`rkz zr_do7kIsLfX~S*?&?@}nFQnN)`}2=9|7PWHZva)vy`mKn91I@GEVDcqFW7;XPJ;47 zx9q|OaR#4W(}S~FKuw`iMR2|X*Dat!I+Qnq%eR^aarnL%(7AxUrq0ozsix;InxHWw zwFT5tf9}z1su&F#-aqsr19XfD(gl!Ue|O7DLhO@++6TEucOU3#V~~BDH-YW@Qjf6j zbswnwk$qVYb|)u9AAf5pXg~ngUxB-~7@~g zn-0~u1-zXMlD^>guWp9ue^ZC>|4Z;NGNSDd3P*7M3wP{152~qP#}|VJi9r)q9-XDA zC&F}|Xnx4()2kxb{D86f8GEPehEh(@;(hQHf1uW5?JrOb9+Y0X1->0q z;BS2l9!D!s0Id@C>2=)!Ix4UQw28v8`8ktkuiFp)7SKF};eQXyTg9NGat%*fL+gM3R?vx-aPz^dUcmEj zNbO+$)-sUKQ0Lzu^{2r1g1~pY zfa1ZgH|N0*@O^Kf&DfynrxtET1_r|euel)ZwLDZ(?a|G140Kb2XY*SQ&rV+s56i=) z&$?YVfF?OWr>l5a-r{ctwI_YRh)rmJaT^n(mn}<#}``r!~)db0IlbE?$Ip> zT7!D<6%VvsA>RCpt@MINx1#`P_4;v8;}+D2*#~JignD$>e}MPUpIrcN=;3cM_Pzff zWyk`Qf53f6&>e-{@d_)!l{aXd?pF<@3sRy2Zq0bK-Y($-ZFB?e(FGl}Hst_hnhKh3 zI!j-?&<_TUQ53lTUW zg6?Ml-OC7?yYT6J^}=vBxP>0-(H(jK)CTkM=)3^x_OpOa75C^45&#MM^KTOZ1@J5O z#z&yJYtZ;D%FH#ah6Y#9kS-)B{d+);Broj)naJgNoCVZLWB~1F3>N_RKS0}_LFfE= zcDpNhbVq=Xdv^Eju9pBg(Wmp3Pv^fE{ky;}v<9Eb1lsT8*?Amf9@K>aU>6GUZ)55_ z*8Gg$q2V7pf9q{f(mL=Gv_lrz9Vc;KZeBt80c{&)%6@eZpmz{MEoWEapx zEx5?;rOe8a?tQ&_+*LA-K_V z!=pF!38>NIRt9PGBzfKc-|hMY)G^KnwQN8Q4$i}#ow1;meMlWCUzkOQLG77`@b=7! zQoR?mreZW^4q-N74taKlGQ3{-!p7|R{}<1t!EF_fI&fR%*hN@dC0+oftpbT3(Lj(g z&~hnjCjJ&sso~Kr`n4J~g~9|{zs38oR*V6B4v~j7W2q`=Js(Ii`P(;^0s+t#b@p#Z z8cNE+qnF(d0v^2~42+;{E6{w{%_|62e(f7eAV=v2k8XC*B8Lb_Hyt#N4jvh1{N>U4 zqw?^}w;~V!gY&6JH}B0VF$RxhkUkcE@NtjL|M*JuUvg>vM%r`baqxve^8^0Z9k6l~ zvLfRps1XA8AGke-u;)j`Y>(a$d&ZZMko4DFFTqq|RHgwgZX6VvDt-DeGj;|07?(t4jjlm1W5Vf*?ApY|L+IgdJ9@!^%c}RIs+=$ zI9}}B`SQOf=!SX*0S53U)At^r6G1?8w1+%85Bqc`aCjVd0L?=&yy)Hj2Yk46Dd(U6=8K`QwZKuXjQ6TevUid>T*CzD>_g@CkTu zo4cJ9S`XCedn8|IegUt@y6ZSRW_Wa-^Emj38C<1lUi8pB=E3;SgYo=}UE-h#%3mJM z*&G}my{y_77#Nx#F@u*1>Ui|BT3=#d@M!+UTq5t$%bK^1k--tvkrQ%+UqGzu(aRbJ zY8*8m;qdMJ2_9K~1U|FieYC6L0mznm$9V7pUQjzi9I`o6#G_YK9;A)m_0Vg?_yoAW z3*N6G@lxPFWWA+l=V_nLlODaS{pUgT#HHqk%r2dWT=};h@M!+YSW@KC%R2QU$dx~t zOC^0eZ-TaDJbpTMk%#ySTKHVHXpz@9R^*wMt z^6X}W6m}vdDj>u8w*@F%c-8!f(S?88q1W>!cr>42_Ut_9(aZYi0t3VAZ6INfURKeq zj0i&!sVfZ>-#@_f-A}=Zx%nA*=;41U`-?+{&q3=KJ1>K#NIIcI3DPCcza8T!eFSO^ zG(1c2=mph24g%c{Jf$oi-Qf}*oic|&Lj=5_>YM|#SZ(#Y7yl7!cHra7@cFN9Hx7^P zDo~1+01rub9(s`hY8*9Za|l2i0BG(7_tiZ+zk!?bplJ+{%OiZc>p46+YiBri*DD}b z5TH%y?K@un2Mw%(+rOX{->xehyWJIKp?NMVEVYm(K9$cKhJbE#}$j`T;av z(tJVy)HF0a0G|GH1GNx3U4M9Vhpqq}Kl{$N+nvL;J6*x>|BLjMFF_a5?r`Z$Q1Ivs zJ>c2t$^qJ5jy7U@2GS^o92f@4=$_qd-;OBoxAKBa@2(T@NWSi2d7ZzN-R1uO=J$;J z9Vwu&NWSmcTPD!?-={bEzei{30#D69AYCmJ85kH~>9E^%fk!vbjc*4T`CGa`>HgwR zPf#V$9U#!%1R4@=Jy7E9(Y*^aApy#xhL>LRfaVK8*TPvIDlzb|4#N(4x14FEhakKu6wx^XRVl;nDp3&kIdZuMKqWI;gg3KEe2MDp=sS$HDjf z&Cly!zCdpOdVXgDZA<5G1)1d2dEKKkw85j(x5KA1bixb%n6LkRxxW9t^nPGV!{Tx3&HTfi>@o6DXzny_KdMd=W)n5{qZ8$1Jt&y{o&E=`=RAP3G>PS z4`1BBkFuKrRDOf&1JL>U9-ZGo0}{TSM?qE570?L>!Qd6hr$Ieav>X6R{Gj2t7rEfW zbB=))s;^)#kk7!!(P6x)}nXncL3)FLGcKphG(#_1y~4{QqK5v&{e1i~p}@g3CpZZUIQS zFT>xe4~p_`2M$n69em8yi)BKv^*!L8<8s*91fYNfRqW^Bb@~-hVZs4gzW_ep-LX5A z#nC#HfxiWGE**IAFZoul7id_E#j(?u#e?yNPp1Ot2wc#L&;sy{!zKElVLWgR3(4f5 zcmtpN_5a1(mmq(-3V`)Nl$TxvDF>g;0l8=itm$R(%NL;Y3*h6S- z;QhJQOQkxF$6Y~r0SoYV>rfWYPFI1Kp5Uets3pk2z<9|MG_lwj%HWaw zX&0zb@(`ZXYCu0 z&d>)h8eG5r@2-6Vy7CW{8+~t-UVgy?It>(2pd*`q8GMspH|xVZsL{e6-NsO(;r{jL z^nKs~TC<|;3eGPtJi2`!v>YhC@?z5+(0=hySMV_xjv>K5pql`G^KUCx@aXoJZ~;vO z*9$l{J^*b615M(7C(T60iP)PY?F!HLZUM>Ngw)B}Ee^&_SFrDu}H&qMnT^D*yk3j!#Sd05f9( zxZ(2r#nk67{=?*7-$M#;Q2PXw$Du<^5+2>G7jqHe0bb?<4HHPZhlPi*3tD(Ax(x~s zn0cTC4sOYv3GVz1+5^@624r?A%xra!% zx9(u`!RwJOzPNP@`}wh`=C8?t1`?Y2KHbg|NOnvBr=90cAooMfuOiBPADH=SsP2a? zszR~@8ZWgkUeqJ(Ir%~eWDh*Og9>fr@OhIBb-y0Wd{7z%uj#_Na0}Ld2Kz@GVb8%A zt8Nk#UNxBZf!2@VS|^5-|7u^nSndc9zk@HVh_a6d)4t|6kTq*~mZzmb;>#S_zEd}l z{TJ%l`N^^KG^jQOozK|{TISJt@f#CUiRkNO@V*Jisshi>gP{4i0MG8i51{(vxktB{ zN9RY-WEyBV<`-iLY`n`2Hs0kS02&zE2Z{&K3ZzTm(JsdTpU&&9oi|*CC+#z@ys@I!|~E zymSGLvw+(7Pod|HLe8rL?M(rdv>HC$`k1W*&=JB6o(JD5xLCd{33lu})BN*) zi6VHCe#eW1grEOiEHh+E1wcby9+m|hrECoq5{xB5;FWeLt=-Z*P<4+|2|~v8dqWQx zetY4X3@U0}4|sLP{6G|$S{|J@Uhe?=$FVn@5!?j${z9_&|9{ucG#1eDPp{9x+Pk23 z!}k}ykHEc)*Uc{ubAe{K!SnT?@)JFO^<-e=FHm~Nzd91!KB;~2V!ItudiT19lKvn| zut2?X^eKC2U+Q+LwMTck0BDn%how96RDCqs2o-p50or;y(7Y>b%2=j!+qWYEB^y1u zojF#pm#ze*t0nM;50eMK%MIjn$s*H0R}_Ulcp;$xTIoFYly6{fn?4u>P-uR;HGIILGRbR(o+7BzQNm^hG z4)=0o`?*l;2j|srP)`OlsoDuDnIu4Ca-gw#pYAdRpYDtw9-y)F<`)7Uo$eeyogaKa z!vzOlD1gQpz?+=8K?z$}5wwVq!L#!VsMXl{3DO&oE_wX@7z1cB`nGGY+yBmk;BhCb z=2wi(znJ*jK=%Vc#>PQLTmaqE4LWDG3bbmi`G|y1=L?h)3{e1^g z0Nv5d0$O|T(s{_IQ|AKc3W8F(PTvzQovvp<*A#7qY!!R4@a~KM-M%MWx?RtBHvd&A zo$JvJI!NqgKB%CE*XLksAHp4lu>a-9`=I$x(57M!%MT^jI*)^f8bF7QcDkNrMe>Z7|2?{c4LrJwGCW$p zm9l|bsfQujntw2snfi1)aDdNk(Dncw$N=gy9|D{7LLIC(_6Jn_B+`0gkSP!ccyvNk zpM3da`b+rw@NRdB<{wPu5{8$+r?q!p01fql;;B0veAp6n9Jm`i@>VWrc&YVd=}pia zD`-d?RK9mJcyv1`K;+9Fzy^j_z~Td(K0$TnZ}4)aZhPSlcnDp?P?Q%|BWA zTi$|3u9|;}@V7)WGBAJ!vsyuiJc5T-K^G=@bc-HJ1})naf|hTfaVl1i)=Q;kpp|u? z@r)KrkVT*?N;w!x7l5Mr^)2N7%P&x??gVJH)ayf_^$tQFh{4U>4bKcpwt03ID1a`z zYXOZDc!JU@BZF@zi;Cm71MHxI`(vP){L42XJ$Z1){=J8G1cyiS5ebjZTcBg+4*p_> zj&Z!SZU>!(#^BK{s+jYkm*`Q7jv_yz}L_uWi{xO*a!l`o%yr@cY@S2~|MhJaET=rndm{%tHO z;3?H|E012$c2f=p&?tH`OA~Z0%mmOd4rF?Q)1&np0z4OjBq;@xY_3re zU?`acu|ee~Xt)J5egUd4uS4{|1mCNGNIbCh^WmP5^&r=vy=wSiHYoRluV!rhU%~}C zFadHOj!$>;2k=CwA9$FTMa8%C0etZvQ;Ee+(7-f!PyxKW26A_d(Bzk(3wS{_2$!dI zYy|Xj9%c^y)^Jb??{xkEUTSs<)a7aZ$H?EZ0L1E!QBeS$R>0rF2vXI2gu}D9?4J*4 z+s%DMPJbzK57fMKVDRluO#nL$vQdv=E!cyw2R zhRYLHu=BTq2dzPiE}}srah=CrEW7sNKlni03BH{*DiVmv9R<+X7s6SG!SVuN`KP|E z|4SZ#^%rfO>!6^C)(JuU~_V$AQc1Fz{3xsLS%lqw_mx=;wvY zJ@6^#&|CIIJi0{}fwQX-sN2QgvK4gW6X@<|ULDXvLthCG&`J?)P>gr8b|iqdSiJJ- z=6Ib4iWX3nRZ<2T(Bf}711@0yi}1GuF)}cKmJji_g3^sc!+#$B7Et>1=w^+N1Lb&d zxdK}IP$IelHdYKezxVqw1_myM5@XO&9Uh&hz-2CYuUF?mk8UH7EC)krJE*hz`rrhg z&J&<52s=P+y4RZ^lKkL%nS8pv1U$ioeg()gogcvKXKsNGM)K)A2btE3eaZ6@G*J)Q zhsgRe3hXNI90F4L#QHN9A`V(IGXYeAcOGwkF7MI&Uz)!KbOS2*vS`qbV;>>kZ%hE5SaXv$)EM5MSp-J#LC06f`h;1G$?Xg|MRyL zYJyU#KP06(K~m~HkViUy`E+Z%E`iibpd;@<^=wHQsHw=`atBnVfny;Fba(H!1C0Ew zpd|o~4L^AJTjC(btcQd+xL*l67z~kK*D^3LfD#>gdIdEqJg}$N7rw0rN_Kd5J8&S< zD`*{_Pj{ApXY*ec{+7w$R?a6#&Hv)mM9@%1?Fmrz@7a07r}Jkt`0BNHkR%McP{sWj zQaWQ*jDVyEXnJL}gt-1CXr>C3emy%6ID%GKH~*04Z?XUX|35eZn}LebZbu1dj%&38 z?ZKXR6n5@BEd4@LEen6k9B@ttrQZz<3=E+33%V%;lzt({2C!Cw(}~7Qb(H=`H)|%; zec<%!(am}jls>u{UM_^B-wFZ#R`8+G-J<589aPO$44_@T6`)~O2_Mi#s%Ov?4DxzR z3&`uBd(#i_w}8?s=yotGZntn?N9RTURzXGv2GHm~q@3vd>CyZRx;gY?^FwC-R`5N* z-K@XDK^s^(m`ZCrKx?s?L6_X|x5zLuFnr<{@DlLo{L%aXDmWb?=q~VL?Xma&;Y()> z(meR<4tQ8z;BQFV zAkGHmH&8PZwBV5Q0;t*pop%AA`vNUG^XO)+fkZNB?<{}ob5K&TcH-b~y$fP>v+6

>R*8}Ap_EWT7JkXKJa?*bD$W5Y>@p4nn`ax$=~-GWHMxv zEDINSlPoAq89cxpM367i_}`!Ousp@zatW;aqDS+iKOP5P+Iwi8@Zh}Qaqt8)=xDYR zFE@iKWcc`rN9PC7rIq0Qy5E>QI6tgl=5GZZXwm$TiNB=?w3PBYNCT{W01hAUWnGZ^ zH}+-K!uQDQk9L9jxls2U0L{g>goEAl3p7{laqyMBhvo$j&L1%M9C&E~G9KZcg9n&n z!5cc8PcVV@bF^OK?*rZP@{$FV&7kA4kns*^|IEUpJ6^z}vvxrz=)Ul3jMWR4*FXg< z=>CdQv6pk0KvVvpc3ZB5FQ@^~&BVX}UJK8_#8CRuqu2KUcp0tl29ItJ&@D_Wz%2vN z`bLj#0npwFCIOVyYfSQ{nWv+(bUPnv-O`mt(1I>tiDg!kP!#O;ff2ly)`97AP z`CE1~FfeqN?f|v@>p@APJ9GnRIR*Ii_xv)@;pLEPWU|&Bd zD2{uy9w?m#sV_XbU01vm1UL8~`Lp#vsjx>kYYV7o>Xvw!0G0x^A0jwjg4O^-`;Fbc zJ6cbc6z+nYG=s8sc>?6lVhi+3{J`czf|`SYAKWhm&80%xRiNbE?YaZhumtr#K|3xV z&ien~Bl*JX1>kzAJM_ToX`t|8Weft<`W6iQt<9h^y)$&ji!cq)0A1(~(2lh{P>Fwt zoxc?{3=7V(F(75Ibq}D13utw+GI&f4q6O5q1GQu8+dymL!N)U+#DfCup+~Q2l?Z4P z80hMz9UzOlK{dSEi)YYvU!W;%Q0#+Nh=AI9{4J88LIzypW->xzAJkF=#eN1zrkm9< z1XO=nykrJB3%u+kLIA1#<1Dd)y(AH07UZsEP#pxi>mF1G-DH5Ir1#*sXZ;!sF$>gI z0{8b&)(r5sf{U%@BNjfL$d$_WY2b!YDZfWI>+Dd73H6{{+Fil%vJA{%eGE2P;$=MK znvXRBAY~FS13=u?1Eq2v-K+^vtyT~ng@F(yx*#PWlR!7hd33Wzg2gRf%0iTNfep5J z$pYc-1_!Fd%kQ9#uidOJV0$cHegGT78Vgkny8GCpo3#(D*y80Sh^#nN@lFW$1C+Z8 z!cBxKp8fa#{})d_-UFXM5(+BP6+d`%g14i98f0HUD`QtMg3e!HEeizIL0pWb5}=#I zz>R&Ry=vfe2x_4`f}C&giOGZW!U|?^ezAe*WGXoZ$yW`(c}k?=Bdn^?;Bphvq5+rN zjtzgH{ROZLNab|UJ;Go&2XlB>3Y4b!bUuJrc~;=o+Y$CsKhS8FC#a_hS;xjwYU9z( zx;FsqaHdlIPy7Pj0-qfD1zc1F()jfb@^@K*vT!SCfqpdj9wUS+K=n{JZ(^_*1K1HB zmV*4PeBe|mngcS>iHn856?7q`kLBZ%L!ea}{H;cyTUJ4rD`9^0!_A z?f>k~Q4#R5&KBTrJq(Ip&@9vQ7wxBi{|Du4(Akf^y(KCV;8PtH7#K=eeY;CkB*6Xf zC7=}DTP)%6of)<}vRDE%#?i75)P}YE#@}M|ACxIyf!2MBe7pxTvNaY|L#cp#2;29< zy3rpT77qL^<{(MXwp5R9-q|2gM=mD*R!)!);nfs4yg-Mld0JlKZvkD84Z0q)`N zUFF0108v-126ZHQRdt8ie9(>9*jTu z8}2fK&P0LaZ%}>x3nl&Ww?Zlc)*XIg4Br@-N{f-(N}zo)pZEp*1w1-Gz*AEgqygn7 z02$e4U|=x##2;}G)P6eTVR@)T6V&QB_`;_70ekZc=H?%a{B7V10^v<2aJdRvLiVzH z=6ldO8%P2IwVObd1Spe%&KiL>h(NH;0GiMgA7Z&UMzipsZ^t z0BP@ebhEblfsUmS;BN(Wm_4k+I3O2WdUUg1_62#8gTJ+zfq~&=?Gn&13@9DLBNWmO zy3XGM+6@J|W}x{wEH07S9VcGC0ku0OfE0lCcO##t!rux?Xe*fbTR?54m!LsE4{JXT z`1v{pAjevB@VA1z3idc?@EXz{@<4XS0T0V-{4Jmn5KxmDG>QRh|9n8CsY*~jx%k6_ zf7cJtQN%BQJwv`j!{gu~W^hZc^MVJcMFh4E5+JW2#oQquP=K(MM!q!Q{Qcjfn{^{t zfT=VVIdTQu1U~UcxC_9dn7_pdWG{GID^fJKOTt7CFvDA69^JfOeL(Rc$luZk%2J?f zVSTz;HT=aGJgqrEr__pG0V%NN;%`X+DR>SFTX1>>&5wC>{`khuR4M{4Kf42dK>Y(+ zWbgrbtvE;?tRB1t19Y1MSMvi#WEGJ8rXJnl3ZO$kAm^20p8tWY17sd_O%te`2Telw zbhE=&HG$UJyL2At`~+Rs)clNH71XLb@QOJAw4!O<63~Gi)f_BQktO^djSAr9NXH!@ zJCeXN&0zCAI-i2Jy3X*1Y<2B;cJDvx8iUvU3*hJn`WLWW(zL$;iUVeRXe zyAQoU?s37)2h~)6g2CsIYKDW>f*ya7nEl~DxRnQ9K&2cH5(OW{jO>5#`F)_W*Fp0B zfAC;LD0rd}G#vxFS5(2LdqDyt1H-X)(Cj(Wi=F@`P|*fDVXYBVaCN@g=g13M)qMoi zCf!&0|Np)~UeE&T=b$Y+>ncG7a&iS|j|_NcF|3&~jwY&NCj}{sO^_A3Q*dr$Z$?X881G9`NXOIppAD z`GUV0bT(k?w>l@EmA4>d~`bu>CO=F><+c?NOt1zNapg;{NSN^ z!n4=paO=rB6_4&J36FyhnGFv>+8Z9-BJ3WWB5dGIhn5FR-+M5g^El21YMy)dvM76Y zmvMOXR{Zcx4i$0i?ge?pqqCaB1GHqim*s-yMc?iS3186p3-dusA$Kt|2nq%V`gGn5 z_+QT9(|P>`Xq%o#Z|VbZ`2!uFh&>F+kD(r&7qR*;xe)9(m(K5=-Hrl2-4USaXU~Jr zm_56L1-gqQd_ebyb!UlaerGO{@ksvf+pY4Wdl$%YKHbh7jNg5epZIEi&^+$K_`AW5Q3R>W=*Z4$qT_`Xkg6behg7&(2?tkO2YERac-K3tm0o4_XEz;M1MS(d{MS(!Bs= zU-t}1fJJaL|77BCISpFV-Udobpp{V2Jv;m@pw<I1+Svoyc){NW9=|{c zmsIh$L8@!;+%8CENjiTUWSuhu)Ll@MOZ@oTAV=CE)LQemO+~e+M1#Mr2~9|}tQa)d z++CsYqWv_em_5Ph*?9mok;`4~>Cw&gniCX1J3+%pjv>1g8OqCjIK{{>|sb}*s2cOPj0iVuSu%h!tSqZ4zd=5JQ-1_yi z|Dd)cbKdj+FZjHf7(6?VzP{|yU2S0a?FAq6-~X@oAr&X!@)WjT)3ftS=Q&V%1&<|n zUU%s{^y1GvP!InoXf3$FHwOWM5?+sP2Md?(3KrMa|MmPH-L)scYa^b$VEX_6|31*c z#h~k(y9)$fGn-^I;$HXf|Av`q+R!sT*-`DbA>26Tip56r-9u5{b=EC$}^ChTZh7=rW z6JYg6xMP?v_&&vuV2|XR9?fqmKoRB98M?uvb1&%B0#Gpcbo$Qd=I{Y+=?Gu}&3AYD z?f_k*2pVI00vfeQKJAfw=(y`1a7o;G#;4cjEQsmZ%W}x@WM}9Uk51PWzMzYud{6jv zhIV*#mNs<89`Nb>?b~@AlHPo~^+2=RTZ{kv@Af?a8n|m>WMDA7ggD>o5C>=*bxSsA zD$|-p9CWXh>xO36J&YcVhdjEOJUdxbJdQJgl09f_1{83fph-x}W2K8dx_wV{hfeYB z{O8jh+Tqh3+u)HLdjK>*)vC-4I;MYzdq$%jCja(t3sgSM-5hEDN3 z_>|ez@V{@b3X|qVNAPs1PiHJ>_s0RBULLmNuAqF(0PV40cLAIo3-EuiMOr!|Whrhi-+5dJv;I%CSS z`6!2{<&o0WNWM7X+3gHUunPRGpyMdIUH4cX=5M_N3Z&*=ETxuauyu=8!{|K}d(t*LFx%LD@Ngyb0B#S`1 zSU{66$6lx!44 zv%sL^V2}kk)3$?;B{=bVK4>d{@@0qvLr-{sR)d5dXgGLwmbWFe)Z{0J>k=9a@n`@i*M&Or12nO&;Vcwk7su&_{8+tZ(siRXg4m=gInXZUt>B^Xa_p+xgD7^QlLt zYllmB>WbG~p!3>1nt#ieNIUW`zEk|cqr0}lqqjtw5n}DzH!uIczU|xj#-kf-5Xht5 zV6$F==C;A1=hGQ`;zh`|`~O>S`*g>G1I7q+`#d-#?s@jc+-2}=u4PaGg@K6*=qrP~g|8>*NJ8)(Aq5!ZZ1h zhvrX@&f^{j-`o0t&QI*+ISMLm_*><`o&QR4P&c~qIl~7~k^bAG^SMX!gAYEM_dP8C zl*mBSpGV^x1_99C${v*;{Gb}v@=xh&)&Kkq3?7=`Yr)w(ntfP)FnILVsPKCjszZ&^_R5aV~mv{sM2UdH-V4 zFVJ|jn}Bb(zW~Ia!4e+H0V3TUp!Nr-fd}%c=0(tnZ=mXj1Jq#cE%@Ql%W?tS=JD(- z0o@W@F5uGL25PuC2KaP43k3RfUJUqO#^KTV50p9IfR=1^BaJ7QDth#$-T*g~kg~c* z=dt~uL-Aht9DMQr1^YeF;2yZ%f%lidbFSb6N3MeUPG3O7E}*(n1JpwFNCsV$=k@{A z@&>uw2Xs*mxXEn+nh5mhJmlE?T)_i0gJSuKzhyfE1A}9?o67eKj>>Kdkkj!!yMqKk zN8CGjcE_lAcy_u8cy_x=bQg(u^j33tbTYSoD>3!x3_aoT{ib8*XWw3y6JEV6py?q7 z!;|23HzFJ!ogv&D9?b_iJS-2Ez5^})_Ug5{@7e7u(cJ_JAkW70%nX8pzTK_@0gzUv z<_Dk7YXRXto!|c#arkupda?HtC~d^3cwh@8P`M3S`w2QSDFU=rwlhQ}13VIOj?ts} z6lgMy5#%ioe%DVBuX%Qs3h=jp&V2Lit}`(F=F=Iv!3SJPf~G}WPrRu8^#`;=aDxx1 zg6Z}>09qaO5_H-)tpAEL{DVDvYg8maSql^ap2@xnzTF`z9EcdG;OIO7I?ceNyU0M> z3DoK9W;q5*ND3a^49yP|JUU%ZfJWOv_cVisQY`=Rw}9qhKt6!Dp1<`SXr!>$MFkQm z-9;j>ctJ#p1!&bLEK)>HAtD7*e|vU|aACyD0Z_cSbWZ|B3TS}cH~9c4mK=jzx+j4W zzXvZUo*Xql`E>qs3xdBN9UmzA|LTa6oW^1nE)t+An{ZJil=`b z&F2|Cn$ID}(?5t$Jv(a!_*+0X#KPjqb%jT#?*^aF&>cRYb#GUHfKJ5>7w`dXJni<~ z;L{zt!>8N#z{`7}kr~901hhTr3E2$k2|q>-ypUMKvH2-uiSEHy0^bjVHqVt>eLHl3 zzx5@kbV56u1~Grv?Ih88Xa!>_---hzH(xR_f~MPC7#KX0-4#5$Yg9N~dISFZ^v3`2 zO#bBC8Kc4h+UVYG^4+8PA4^Gy2Xr6oG0+NuZZ`p+Za)Q|&I6vkE{7d_EFbVU$1s7; ztnqClP_weO^$K&oQpl-Hjr`r#ZE#UTxN4GO57!E*YV^=uvw}9q*!RJdBb9g4Rd2}A{ zblv0Gc@(rM<3;)Xm;XV<2x!OU3D?%Qb!MOwMnFwJkMB2pdUcTIr#-tv89ckqAhq8y z4p4jkMaR>Z|3TH@W1sHQ1EBN?b5ghO9#C)FNAt5sCv&gke~%fUrl6;$iwXyL|Mme! z%@dBD?g}q;L8$^fUe|f+;46WbB5?klnkOZjA1&tkf zbcYK-YCi{1x0b_0^MpsQ#}AKAKMqgO4yoRv1E2Zp967o>K?Ps)K}L_{lODZ3CmcL1 zKNg31^m-_Gz(?04Kml^nr_%%E`hz~55kEYRGk|^8=>!=x^67NC;L{m&!{fLU)Hhxq zJdQhoG8+TGpwj`cN5JLLi{q~`-0zd@qyTa|DC|8!r#^K%f&=UzznGH%$Rj@89$-)S zXddwCb@<`a>BiyNT`1tw>vW*I59I#O{B?dDpu@YMp760eSRCom>!FdxpD(H^1iqac zblj){$R{_Uu2197In6H^@W2D%3oksr@H*hr=?=bk3mgysU!f!>P<;%G532cx85SuZ z|0H_!dKmBvI!Jgl9{~HySCEYX>K}&}pn*`Rhi*XqN1ngbU(qgpSkV1r0g9hi0dV{% zcr+gXt@6o3i=PYR#1Xh$0LN1}c#$NSj~PFpJpTZm=MNy#n2*X+Z{X%F zB)uJA^_bz&>vGV+$MQgNk;idHP$YQtI&ygQ7HS}}j{qoNgQYBwmA>%kb#(AJ?q~td zKg|a%KrwiMU(gYhw@!IiBz!G2NmuHTUmJp;o zYktM(k$eeMs(FA)HGhxZKn0KEjuKF}gUbanOEpk_0lR-3z6?B$ zJ8D4Fmj)VAy&7TD#W_7=5L4x$4E zE}z6P-A~Q-Rs^iQW#Mt$K>}P$K&wH@8(d)bhd;s+{!}hsBVgsL1E@aV$^kB4A?1<> zKYD#mX8GFx5NG*H&G_(u#fOFmY%M_Z0dTXCO7U_00qx_%0~Q|!p!iT_2ge7b-AJ|g z_>X!15~6;fQu>0mf5H9%)pr*Bf)0>&B7eT9FB>iDJN5gtiyv6~7w#W$eraU|#}BUj zLTUT=9v1&lz5WY;)!!N(#~l@*^*1=%P+EUaze`K^!|FfUx&Qhds=6Pe{sX%lRR2*c zybXYrw+5hdK%w;?xZy{o@;3Z7ZNnejGXjM_wR%Qq;XnNr-2I^X9JH$z ze84JXK?7*zNN2ggi^9cE{vU7FU<3{2GB9`?Zw6hZ2?|Z{SRCklHji#^gNEdSKWY5= ztip_J44}&{CxAwKk2?o|6nY$Y&HxQQd2~7_cpPsAtr!E%Q}YWtIymxgo1)?ZR_h45 zACtl3xMKoHE$B$okbi(7f6X>EW29M)TH$ct-jfTK` z(w#*hwcz0?kIqVgmybbXq7zZ01BZEtV<&he`HNTGpbO*qTVH>?_usYk zNr|CHx3j@9a9}Zk_j*3~2wDQ?pa5Sq=h58&-Wt&9T=BwY3TP3={TD7bKv4?4-@e&h zzyY*G2ztLJ#J=EecNLG$-=J;d-!CY;E0l_OHXm{D=}d+krvRHD?5;Nei5q@4pdLzy?xucy`vP2%w}D2Zk4uuY&>%etyx5 z&()xSJpN*}7s?sW9-TkB>lL~^R9a7#7`Ohf(|750|L>W6!lPT{6zD7jdC(zJQXbu0 zo}DKhn;*)1Hvi-(5kkbb<@ZuO(0Rw-jy9A^dmMZz(EO0!qxEFzbC*sB1((j_ukS(T zB|!6T9^GC7uOEeWegfV0nEW5bec*6y{?EwYZo|yLz~9OP$~xV0plt&-pv?gCpaWo~ zJi3`7qt+rNY97r$IQU!MfR=a3gZAUFev|`m*1H-4JI;E-)@T3s$$%z-du>zASQuXL z2Y}Yu9Dku6_~-vVQHVsQ8E8QctBR~R!;AO+5P5cxydXqA9wProMx5crd8qvJfIt8D zfljgT=(P=m$X@};uZPMX2iapSdqDwmdhXyS<7w#bJ&;|7(A?H=Yu(t zAdcl>{uT`oqxm-rf2#|K)p-MSSjkDq`S>rG4}*r~55xR3)s%(dg+0{1aFBbT{+VeC z_D=}NJ@Qa_bC5jLKm8DS9gzHgKZt+DLGn=lG(zNAK=SvY^4~$`bel3j{PR#6bfXjK zT>Jl^AObnK1#|(jM>lJnB4{`NyIG&0*#zF53bUylqR9fT=^R88y8`Ik z)%zaZ4BZVKp!fhSpm`AqQVk327uHW6{P*ZK6#?n(JoM5ToJ<`UUMNGvzes`N^bpcM zFxE_vsc`p~I(YQP*fWB%FL*&TwA^{|_%YbrHBkMbP;){4mqiY=638_LFE>Aa0NO|3 z(ari3#r%>5pp%;!K>NkzLHgiciD6)TdE)PX$m%h}Z!efY8;CmZzo-Hw#$HpeAkbnm z(6+5WhtVpBM1oonpb0m~xf#DbJHL8%UV8~z zhCRWfJ6Pb`A$I;2VNm*N{>8%IQVC&+@VC^1&Y%HZWeeJG((sFizoix=*DY!XP69@t z_1WFQ5}uY{OEMiBo`3LY{>{kWwvvH?0kr-XvVnazC@J$YFn})c`MDo7(dyC3{KC}# z<$n**$ugjg%Fz;_MRPvA2@;?aHCn)DDReWh1TEy}Zv`zg^5`xGUGWRDsC2sFNr*Lz zP^W?4r09-%S=f3A(9t@=9^IlQ z;7o7y5_Ee5DBXb$i+cGVF+T~r2?EWE2{7{^ZhB!0GQSX7WI^d$b+_WOaR3`atG`j6ymA0kn;w zPQjz|@{9SiK#L-dA|2B47vgrvAsq+6M<2Z9Z#nkj-ha@73(!i(7Bg@XVtp(FKcu4& zoQ|plKyEClgX|{-uU~Ekoznrj=Mi#F2WWjG-C`Lb!_nHcISA#>iaQBA_Sk4M$~y7F-t*V39jEQ#lfz72|6JL zZoWr1t0%=Xo6$M4+V-`gtAU zP@6&LA9!@LDu_WG0zI$eCzK04uOmwWA`3pR!}iUW|De;Gwj!O^u~QV>Zc@_)l^vkn zyb)^<=XJo-D|r3bImmt#)H6G}>l9u*oeoO5$cJ_~gJT7HXa{KhiZ7_dlzIkAxzIy9 zY#}LEQwo%F!H0I_Pax~Oj{lGl2bUvsKd(c|540c~?|B{57l9HnG@Y>)ia^o>?7WUn zi0faHabCx}Mp(H5OTXZ98@%ft+#&++yT)-|$4PKH!91^HC)9n=@{?5)luA+0>o9<% z-*#bW`ppNQHv>Lu5Oj^$q+c?5j!)j?O#z3c~HDKtNnckH|fzSP6L`6XlX zPo^?)m(G*m4F%so=A2sr+7$6ar8Ek3nu|{-;20NsVd0%}vZbRO{O)Hwt`4AKmANTW-qFX%MLQZbOp2-9HgFz6YPwcRiNyL7vr zaOw7i91?laqno?=q5Mlkn01Xa6!n3&dV z(D8;&$U-k}(6yp|kp7rQ=OK^phkpP6|G!ia(w+?xfC`i(dvsm|^_>NMx|yIS@5q3z zGx6f^u>4qh6?9T0QvJmbGOF`Df{$l%fGE^!#df0oJ2E+%qH$pr?m$QQo1N-dJ{6+wI zAvfqcV37%+quPJ4l=yjmKLYlatVee!=n5(kRnQMJ&BxdWFXYPZ|9`#wMfygR^~syV^|3q znJWd|?Iy<$DrhViN;JS54?tr9;Je-OKxZXc9tOo9xU-cu0oHHu0NwBA|Mbg$k8aTY zZl%XTeQCo3C$YtE^FPm$_~w66B}&cz%u0Ph$raSaaRIHZGCaV)O|bb9f5R`vl5EiV zE1(tctp`ff(IiVBgYNrz^8UYvr6UI@jY9i_2~Qw8p{G#;nzHRMOUk`Fu)2w(BUi$pi3Bh zx^<5WiZLK3j1z_jJiBWdUQAyKsC0g7 z%2o!S-r5~Lo!>k_H>CV}k>~RVd@8{+(7u&!&?r^w{}N#z@EZCTfl$erpk{4%3h3B_ zC!kxKK$nGl^XYv4!T_q^2H0q5dV<_r$KL|l$M4zg%dm?T$xV+{SQvbIlNDZE-FOdt zuzk`<_H9*RVR(_b5fnN#DgqDVEbM;ExGsK@RCQb>CHUQK8)ut96_TkQ17*Z)|`XeGstWI`CB1} zsT|QjD)1rWYhb5=Hax(hhXLfYa~q&e125kN4JP{Z+McZb54ltrbb%@~zCdf|4|;(k ztEB)munQ}{!RB%zd3lF23&V@D4WJ;Z-SNV9;fwz-?ZMqPNc>=^4+E)pgQ@2QssDtu z9u^c0kg#c0Mud&pVvzZz2S6eE{l$*l|NmbygDqh|ge=Gu@Ie`KL91quf)=atuf2!7 zR~!_6p!|WJUqIyyXbWlQZx8St>G!Y{h#uXnH+jMBG>`5bD_9s9UM%ti1y89Os9rBK zd<#A(H^oC6deylps00KRf1s+z1=L|reP9TR-QOvY*cHAEs!UmJ_{12%W5XVd0qVL8 zpZ}myQ}A)tJYZ)*%Ol8rAs~^LiOnzmPXHa90$tp!P>;BL6mK(DAM;p!)%lZ;r191*b<2`7UX$&`@*BUS^(6GZ+P+P z^^5;6LHA3&II#*;JwfaPr5{LmJ9hp7S7e|T<30n>4w&XA{4Z*JK!cj1XZgjz>q-yv zZv(GRJmt~r#n}8Dv_SEoMR25ccvKu5yF*l1nh!9l zf`Yg45h&a_FF1C(sIYi+e)IwDaC){MbWrmP7TcHq4?Y$Et+?-Iea{6>>HOO!fM%>f zSJ;2Qrcy@kx83$@o zc7A^$F!#lOk6zoI@}LpvV}=J_MD0RJ?Xdg_3Sa196da(d4Sc}&jQJ~gbk~CpyeZM| zc7ys8bhr!y2SX`)>w!Av20n-GFbvOjy0Lh4{(^W?-Ubvo+@Px8qg$ZyAp-+HgGb|| z|NlSy_uxF`(J659FvxDC{lidaX!vyNu42Qi44Z2i7$930JesQ`7<_t*75H0Ef;QQ7 z$4P)%CBh!Ppy~^JxLBbpxWKUW1RW~S`oDw&bcoj(cTjaw%fL{Q>VaCce+Ko2QMZwR z_eazo@a(SVcyU}(D_DJz#Y9}3GjJv_dPlf zzW4;*f5!$Iq*P$=>HO~5$@XHNCMb|VH?9bj`a*2rVBl{7-NOw!LBgZE!r&$7JTJuj z74#ll{#MXHpBg!LplXq@7wN3ZC0aGCzirT6=u*OChuSP$UOvI*~9@2=U&rl zW(EeR=>||a2p7^1fV&quJ`QTXd-!xG6(H9NCkzj?{^##wVg?}vw z@b)z*+`4OLfUbIbQDFV&zh@`tbU^-=pP)u+=QHrp)=$A1zD@#kbt9;W*x?AtAE3kl z+NcDc)!qzFyx=R4`CE>FW+}HZfd(e|9UA_#^S5jQT{+wEpPRo0G%ez5`K5%@*YYcW z>uyE{&>hnJt)R34@)+o5O#W>F0?m(18h)|xx7IK+Ff@1wGJy}Veh=FD`~o!V1NI8| z5LdKf1w7Bye8gi1XhI(xbKrp)SpN}xs8P3r!0YLdbnn|;CIHIct-mx2x=^#zUfbY1{o=nA^S^c3Su&{z|4eq}w$3K|G90J*Xy z8|+F%RQ$CEMMa4qEE-xtr%8eAhx)7Z(n|}_xtU1&^O(T1X8iJy`W}A$jR=2h?EnA& zU+xAMJf%B8>n!%`KK~C&Q0b=N1jTR!mY|w8-TVI%bj%(|))OK-3oe@ilI;OCQ1ceu z``>&DvUK1@;)DPH!R;xJZq~0Xpc+`<<=Q_eD>fnRL2w-v0zTcd^Y@Ea5#Y=(2G97h zFU^1c{}0U%;I;))gAJ5FLGu8mZV*$z6K39!kFA2OwHJv+a==z*C25XtnL zKfr|wBz%zD(x7k!nGZ1;>ON39cyTQM|9{VJ9~A-c!FCKB4Bd__B{h(?N_QZr&i3fM zkJ3izbY$`9^cHyWXFf=0iHgE!NB(>l6$ySpXUK{B;B%o8K_~EoZYoAPE6Nr$KG!Xx z0&1{)_}};lT*-4@@aSX)dl4Eg5W8Cs)HO74I=loOfB{MGpfWL{;>G{hI}v;j5PvF! z5Aq)<{Pp}JE-|{7!seykAa58ULJtn2Mp0~4N?Xg z12+OOkn}5^zXuv@goLk0cRR=+573q1!k}|W1wa7`8hCmNKF`7M0CEg~&mVs37!KaA z3O@85dcQKL;sD)!!{ONcT%g41+d**kak5kcRF`V-d;ncD%4rB{mw{%4xBnGo@Bkm= z89N0u^bgM0(0hTIO3#4e8Qz-!kB^$=fRhAR9b`oYbn@#FblmZ&4XD@i4ivgxZlFV0 zOUfLZpKw5A`CCBq@h=uS|A$;i@T4RX+<)N(bw(iN4O5AjPvyOF^KJcK%H`3`I)xEjXh8Sw zKQn&#->37vXXlX@-uj?55chmKpM$m~+vf zL*s}4U$;Zk*Ne$cVBfq1cd9$zzxb>NDkDta8~~LOpg<1#0}JFIlR$wCiEmK)0_7i2 z7ZlXqMXok~7#{HG4gK&!!}`zv&O?R=S}&Ebcyzmd@aPWxk>a5Z9hhS}dH99cJa7_1 zUJnI6)~xvr$|Yhq3=e?H>THkB-=3Xce0p;)Kw5dPK+VTPR^X!3&ZFD)0%-Wl6m->z zN9&~$8~$xV;1Mu((Aurg8wjh_;A79A1!|yl%K&Xpl`eyZi{XLSr(cxM1$C&v@-Y8` zhM!<12Bs@tTulchno>iLZdZ_f&`x$7$Ub<>WaIz;kPA*@UrrN!2+Bg>^ypsT(HnXJ zG$HZgy(QR7yL`HHFZi~;E!hYu)m~f&9b0MnqGX|Gcc}uXU~ilB|NraBFV4@w)j#HIGP{wH-Ikd0j-y5_{m)==>gik*?O`>zyow_SL=b&ThQp6vP2q%k{Dt z)Wehq9dZRaHc#LsXiSY?p26^B=LyhwxZz3gE!?0Z`==c2JONK1J3%WJV!>*_=>atF z4>}>^Mev39{|!%itOSic^G`ka`ZOf}f=n?y2|D_}bf@9T?kWk(3JLxx2Vbv&`U`B2 zf`?^=0!Vb)1keGgt#|(Y{|~mP^8|8f2`a}x@c}wp092~J%mw?Oi*A0ycT8SvoZZ}&P03Tj^d^Pr%<;E^mc(Sz}n-Ty}re@A{mzp= zgYj&hZ!imK;Z#8v+%@EQHHcMj~6?pfJWySK;GsD zHBUhdHqh}=Am_5)`XLIMgS*2In}g%*15c(Q%mL+l33@wHlnhZ7++==G=23Z|i z!UgKNgBHMn?$NpbLLd;-@+o=M&<$E?%VY?eM|;tI6{W=la&Pm0xpHxjUeO0<*%>7j=i=2LFd|VfX~=T{{Lcg6zI~pQ1CS( zuALu1M?rOh#!V0{q?a3NL3hvB9@q!E^~q9xk=#sj%obHnfeDC1Xsg_I^)6CkBYcZ9)b z{(R>IeofZ}FHH3w{`cr~&hY4F4f+OZH!*m0?*J{mf1xe$;lD?BaRzwJedqBP*;3E{ zf9B8kPVndr-Q&?)dcdRCHk_A{!KX9#0>7s3ffu`efQp}d*9H87&Y-KQN>sW-_c(Tn zsCaZEw`G((nvZyZ0|!)BF?5&iY5i7m2eeil+?3do`v3on^;2-Q51yj7XEd<*x9bbU zzg7L9bEPyurz3&d_d>7TK;@E0cLQj83RIMud00x6zW3=&;PB|Yx1SkuSsrLT`U`(` z(D5R*68qR07#NN_D1a!>PS=VTVyXZC?}IMzE#U$+>thdq4p4hxoAm3yN4My)4`K{p zlfVJg>3ZSC5>PO99)B@M24y)oxc>smbFKgD6g;}wn*TF`I@4tw&HtH7L3JPaJXi3o zVy{1fk9G#nH@%p85vhFx(hp6@951GW+QE<;96+bBfzl5|zWEKL{QnFImgGKAGOz&8 zW%d?0yjYwBUi?&I;L%+n09s)mbpG{!Nb>-tUg)kCcwv6(^?wgb)&uXw7)qaj>J0E; z2dLrzuYdRGW-a|F%HYw=zzCin_vi+lx6SU+D{{fZ@>-GTYwa||ctG*E)L2GLs&lmvJ{ zFM1Yz?F}A>M7ihL!lT;{e1zF^k8VMa&J*w@xrqCx9bxxRI|zVM*FI442Cb)q-S1rG z3=U}imQx4N*1m$$B`B^CvSa5pNYCOI=t$2D zJ#aHT!~=93PwTf5Z;wvU^>rmIo}Dr(po>{SjoL6oFT=ax7k7yt==?8uR|9gs4#pMG zAb&)Inq8$6d|RKC2*Fm3BEsMB!0T-wf4H`OD>e4%e6$}l4E92-2<+#Qhp;}*4Y=*4 z?S=Q8{;A9}!TCuo@ldhf0E8-E{YywC%5 zF6Lj4PS*?Ii~2xgX+GUa9L@ij_*-XzVxqV9!i$Y+fBu79W({4@Q4;La`5rXB$N(x# zK!=UWgSs%S2TCMC!2k;ZjuNic+ok3{mKh2qhK8Uz0MrA6b~Xb+l@Pp?1f65mU0Yyy z`}JCQ`>C73s_bP$;>=u|3hhnJw6ArSgOq3Hm%-Js*%f1l254iC^8y>fvU1)v$B zPSC|hB{M*$vv2sw$l#Ow!L{{UNeAd=ofrH^UjGNxfZz);K_`uQ_qv!df)3Jq(Gmzc zvGn+hGZr8kw1?{$=$b3YGC5E=0J^gQvWOUIM1sF{Bj^UB<|7KAYX+f5pTFctLCjZ! z+y`2;$KL|FZ_cBeHTV^zIRiR_J{~k-(QV+-SqvWIESdH4E_js#X#GHEHV0T=E9eRi zv`_dCeXZ5wgAMfa-gLcpc{qY;{~qWsRAH3x^yN>fZPd+zlPV4)Kky~ z$_>cL#kDQWL`7VE_OBOIZjz1jH7EusJ|%RtS5K-T(hDe}cB+^s*L!*l!_h6%hL&gnh&I z|Noa)A?zLy`y_-N0AlZjuth-ZjS%(=oB#h`E`_l7fY>u3>Lc zglz+2XF}KlAa*Q-eWl_5|CfOfb_9s+3Ss}L`~Ux?C4^m2^Z)-#T?qS2_5c4b6(Q^j z5L*<&<^i!eA?yWJ|Np=I3py9Pm(>Ks{s>`bRQ~_}@+pMvQ}O@*%bO6kLh1kiFV8~Q zSIYnYe|ZqX?f|LZ3SrxX{{R0HG)M$3pFru!;3XtIDYSs%)8fU9X3$ngXVBsXP#*3C z=>%oBhTs4HzXXNhi)S4u2OQ3qU+gqXAjRm~=0BPCFA;_{9pUzjEZY(c4r9rC_ggrZtcyu#B z=POkIgV!Wn0L^A|Fo5^gAdh_Vw}Q^y_5fd81sUT8UpWUVm%9BGJX*h%cKUR_GW-U% z_=N_<0-w%z`?*0=mG~`sA$b?H78bN@;W?;LQ1$cw|Ce>((LJ#Fb)fk@$RVg6ouNBk zc-;fv9KFL6v>Muh19Z72Xyws?QW?)~7ZnAMZf^yj&Q#DW?TMG^@OG3Bs4hSL;%(du z&<)Z%USEEZ)PC~X6_}> zEVK{5%LC9f=))Hezkrh2VNeq*66~hZAm45i72obO1K-{{1yF-D(*wL51Y9H~DT7+U zrFCE@b>8>s{Pdz8JedHJ_2@hdnts@)3|Y6u30hO>0&2HCyq*PbkAbd-`2M0a_Qn6#o5B5u*aNRuy?ELR3IP`e z24ug3TN|L6BT(8$>9U{j=w_Yu7}SNbVBl}D0G0XO-WEQ+)e1hnr3ZXLcLjHYwvT~t z>+}Jw{q$Y&qEHFs;gV91?%D&OB|VJ-S&P;3k9iiJ_fN$$1{+18m^`UP|SbRHu89YJjG<-WRKGjxVer|$xfPTv(T>JxviEnc(cZ;$<_acAVhb?Fkwh<8KAciSWyV&LJ(~0G;^G04~m0uRIZDfLhbd;n}@& z1`DXZ_g(Q~vH~I$+rgpedH}rg3sMhzfYup->^rT%!~i;V_oWKhK9Kl}>vBvCFL!~~ zs!TBa?*R_LP*A9>c%dr~3c%1AKHZ@UK!vp^m*0%bVO2e1tH9Gu{8G(P~fRTuEL90w)p&ikGR-z)fb=crit_Lit9fKROe zUk}y`I`kO4Oyiv#C=2qpOb16$=?>p+KMv32Fc!~l&hH07nUTNsF%$R<;67)NncZ#z z9tR(>crYG%Eewsv<^uxY8)TJ1Zm^apeFwU5*Q1-Y`##Kd55Xw~>4H0frZfa-eAP zT>;9suAo~=y8{J$x=VNPZ(~{^z~2h0e|1JJZ59+~Ic~H-%w|2{m|FTRBFF}`s zBKjjfy}FW{L>XR!u7L;n4}2v~>!p(C{M(p1k2OEzcWC&>UUJi;@g!)mn`bBIOVAbK zNcy|01zv*Ym!a($50E|ErI{FBazpYXqK~ESLh*VJ_dANx$g>(UQubg|NmhN*FX(( zkM14dm9x%^e*X6Xm(;#1K$Glzp55##!AYcL4X6>(?I>XQAC!?m<54f3UICRNzAHRB zkAY6i_3d`#@a*Bo=bms%-4{#F()J#ee0yUFLS9o?F2e}ip^9t%zi5VcL`mXTo7WeFC1TX0P^Iw&L zftkUB^MYq5JE##Qz~IyQ&$E;LC1}DPw2rd#`wNBdFaCp*+xr);a)186Yy?-oC&8;0 zL6tDbEia-$Yx}x=S9pSa7AU~Kjp^mQzyJS#bCwX`Z<+J=|Nm}hg_j+mR>Z=(d;h`b z^MZ0Qq?6ux4Kj~!{Xzs(ICMI5fLZ}O9=)Pp){8QDSY9aQhp#|}a#dmzf-xJMY2_`5m4 ztH&%oIG~pbcAk0x>Y2d`D=|W#J~W$WcDrS1o1tfu{F?%9a$dTtl6OK)6MZ(2I5bTZefqk z8_kd89XqdpuE#8y?a}QGKA_kGInUAmH(x37qI!nVA?E9Gm}$^0$MoRrKiP z_1nzO;L`cPBblYqgYg7-IuG1FW$nBR^0WxV)34XS>|-^&2NDO5ibDg#+JmEHmPhBQ z7jB@^24owk+6Ui%*&PImYEV<2k-rsm!?Q;(tHMUm1{^02{?=z8_0ZMmTpLmDcZQjA z7^DQn6wv-jk6zYW-(aSI59;o`|03f4zyIL-Y+EOTG(pYX^zHrsvV+4mV+wOM zFGvu@mfs-hURIM0Fjs@GRfO6ix8Xf#su&XPD{q4A5k;~G6q7CBz0IAcUOWQj0GK^X z!COAS`j7*<4`SKzc9>6myU=s42VGgYV;X+#?3MA2S)$=s@Hq=y)r5V-)yqjISP@*BnE@OM|X} z#=0#!eHXZNx~@T~n+*@V`1<`nXthG?fs#B>)4iLu<_5I3Xz>EA6z#6HfHeJ|fmQ^j zi-W4+l44N#>X{tQ0y@ZjHn>oAhu63K&~yu~Zx5B!dw^DeSVszg?hj&>gPL9v&>g$R zv$N;k2GF<}a@T;r6?~dX^AQV=&J#!tW$?V;O`pz3pk*%g@t`$I$HB|r5cSO-P@D9H zvN#iiN4M{S*K@()*;u;(RJoM%`gA_RpfTj0_wMpeq9vNCIt!|LEM%wIPkqXw^vK~*OQXayR73#gmz+5CrvzXi0P&9nKB2!9Lc z+G@vdM;Q5A{XwN1_@d%eP;020we2QoFwX$gui7E#z`)2N;K1P7`N8wx3ua%#7oOiA z_;els-S2+!1?V!XgReL}Ko^WY;PTMC;Hi1QqubE{JP_5q9OQ%w1((hP9^Ea+!I2AU z<;(}=E$adf{#MBSaSj3=kUkWDD`<6sk9CFws6QD1FS<%RKuf}5Ww>K(>|xNBAkh8g zM{a>#`Z5IEv3FpAETjb8nhw5?7cy$rk2q)3qnCBzYDj)6U2S*(Jf7}pc?Ue8+k6DH zBn4!8+63@28_?C4n?czfJ&1344Z;VXm*COOy7D@NKNF-L-2Mg))WFxnTD3yAi(;!AnAwhLH%FKbQoO!zjzM1qzAM@57Z0b0nj5+AT z7*UY24Ae$?F=aG}rLLsq`Mw_z)<}z65`B*I+F50*%Uf zbpH0}wl}==Vm7E)XgyFO1UX1Zp!pGV^DCz2UyS7<-<&m=N@ZYIjYIlhpiqSdC`aiN z&`|NLzsTzsAaUi{`5$yZ%QweRN6-~8!JU^4FM+P=L8}HFo1Ze3h`x~c2P#&NfU=r_ z;epoypnkxM#qYp^ptjv>kfk8TBdE>nB{yui`CBG1FfcSf{#)t|8aNZ+-zES~Sm33W z9Hm@_2V7g<@=ra$2%3UBfix2;1uA=*kASw3!3Kd4@eNu+3!Q)i?WAwX`Tzfa^AG0I zIUvJYK|8acmVwh02mjOq{M!z^o(msO@#*~U(d)YdG{W`m#s7z(R(>sLs1ICDfjdH= z(Kr597x2P+e*@3na0QRnlO^dMo#!E`e~(jf79oVgdJBntw2s=y-G&DS*2z zFU}nY<%CBbpp`bqUKl(9@gN4n%0HjZByd$z+6(F#bU=!!7uP&r{0G;{;PnL1wUkKi z_3VW9FYbFZzfth$E>l2GiJ<-aN76x2<;>v$KHA9}e3+td>j7VWmm{D_Ac<}_AS+xifHK5!2hde+44`dz@{kqtFOE8b z)xQh*iNmA2fWs4X6BXE0@SYA8pYGHjpviA=dIyzN?~rYN2(tMOSk24z zZfM(~k?M2sowc9{R`BSoJ>k<`uHeeQEf17WAWIiKIzw+5UV5Q(`~82%=BLb{`QZm~ zpZ|l#HoFrPJUWkibRGtcA-@J+w&W%O+B7TS$iK}+MWOk@9~aISjve6H4c8MM-3;H3 zFqW``8lIq{xYzXrXe9=yVn&&#Ed`y)sQ?Rm$GF(TFY@wGLLX_pfMZCoPj@;ft3dS^ zxE|?tQ0NYjX#T}iZUDN63Uu?OM{@;e3@Q~=pLesqI|CY9GSzwlJ91Mt3A7v$+|OeG zoks!DUUm??MG|IO*(Ox(VpQ%FRBkH@m%ptDY&DYU{B7|tp$df;){to;=+2;R&GeSWO@9dxe=WhY&2i@am_{{?moBSTV zqF)~|GrW+|2NglbKs#PIUigP%kICuIu$Y7{)daQgSyaFmJ%hK`l}CW)13>L?kLD^+ z{DB*0-K=`2!SR>%2o`^_3DEd^A-oxU!cr^fv^9@z)-$I>89X{~dGwkJO@OVjHAn!h zv1LNUbGalanS2Jd$Uw=YbneUN;F=ef9s;1d{rKBJ{Q^)sxf>w_c3n4;Y2+l63WXO| zpgttXyE6a(|9_bV8bw7!C!#zCkH16vg%@6pSf3Q39Pd)x(Y1HTcpr(R=Pj`j_XsEEW6jJ_yi?k}wZW9&H&QbYa-c~H65;rQbJ%Svzyo57>E?8S?86$XZvI-t2&u>V0NYPiFQy5O{e99AOR&4h{c!N)$ovFW~{LfP}SQJi5g^IzK?}mlG*{;nDg1 zrDpPH(4Y{gN6NqeUU`YMUJ{ho9K$_3&pU>Bc7oc|A;CVKhdmnKfDRu7&02YMhIY7g z_SXFW{~x(ca{{#f^0?~+(5fRB{%sKgF5MX#F3cGcj^7TmlyY`g$ha`R@2s8R+xf$> z`2iz;%Vs_X2A9tN2j2^LbeFE^{Mq>M0O%gr?lOT+-v*Cv-wu!NFb)^c7S~anU^K)ywj@`6Z(d<3o>LpVJ(koo75XkAU{Al}I42rUKng zTA~0CkK^FGkv%}eHpd-)fJQ(;x0k-?ywv>M!K0VuvPY*I2V`8q<9I8m1O+uPd_f&$ zH!jdNZLpYQ^J4*@WCfqjhx{!{9H1Gt2VT7*pnb-m)pWM}t?Pst7(9BN#6g$db{_Lk z1>J$`p?Tb+`Pm21?YE*>uf1)22D$h43wTqE6zC4zUKbU9N6nL#%l#o{orvNtQ+K+ zZr27RuXVc40Q=6Hmx00Y;Clhb=I4z3t)be?oIeBx?&$>Vry#Q*=G zBZL_|j<+U2ncbl?KxN1hA<&8JuArF-hUUGX#KFkl0$L#LYI&Bw?>r*|gG;yT1ds08 z6)v4GT|nnre0%Y+@&Eq`j=i4$J(3Ul^x7Qu?N$f%DM~p(o3>j|@PdN%d1o)kQkTwN zkcBVSRlfZ1(hX*JgC#(F%{{xz1irh@03Cr+%9HlpO+bN(zjZY~1H(5r0R#S4E^xHD zE&w+J8u(koc^N>FB+&eT-=h=k50B=(Ak!K6Tkml)Ff^vlsDJ; zlqbRCT-~k>pfYPOJ80DVCnJCBW_HlZIG91Ppy{gaG69dyPoR!mp9n7l1OGNRftCaO z9pM5D3@Z#uxSDGxF!HxZ34#tedQu_>s=>iGbM6&jU{Gafum>IM(f~TYLQ9Z=p&4Wc zJ1D7jTf1~l1)Y=G>DvGrtkkl*|KF$6+NB#T*zMZ@YA!T`j(ffVauVc5(w4iR%ysYu zfAfQSP}?c_dgl)h%j^8DSEk(i?`Zj#zi%N(0rUD$j zTQ`SKFX)a(a3A!=i3U((DNKNWo0Gr_hZ0pE%T1utsYJ#j*+~bK#yomu4tsRFc6f9b z2)x+!3sfV6`Zg;(y61w55^zhbGlB!u0)(Fk#NYZAoZ(V$xS&mfg4?+(6!=>+I6(zK z?E=sVttD+9-TdEcdn|{Y z&NO%-D)I0?$fe+;w+_89tAp*&h2@8CmBX+E(F)2{kTZyq4|QJiusp=yDmwYzf7f0c zK~OEF(EN(gwb%c@NAe|?Zr2$e-7FV8I>C9>6_iA~*cli=>yVq+85lsztNK|PKwH81 zTiQU3Zjf`DpUHbP|Ks3qEoKEJJq6I1FF0rLw?5|qWo)o%pt8diboV;w;A94mx1jUsu2X-?KYR!0@DJ=Mius;V8-UNzT#$g{Vhzk%~{}d#_%R zw;&IJE-!cBpL*PZf7^d>?n?$`nu9O+eS3XWptrt)c7C=l=LQAaCH_`zP$mRV{&o6J z@X>tt;$=R>x^CYIAj@10->zUP$?`}plJQ8clCV5i7v|H;^Be5YdM*YApX7s@=X@BC zdH32J^z1eH2pWIZ1XYS0B|;v@*}*kZ^KlLj%kL#pX%i440v^ZRq4m}G(ia}dA3eIg z3|zW(KCWQlZ&?Kz%}sVv@aPpe?9mwtT3yfIx`2s+;f1v%cwf;3k4`2~n0SEiAw?vv zmeXvAa;qdW?YonJ0aIxr=-OLPXb5<8Zv_>PKD`zHJuFKO{wQ_!=msYU(EMkk0_c*Y z7ov|rBjS5OWwlqQ4eaB0Tz-N=>gAW;pj{~7{N>T@ zx&S=K)}jlVa_F}Bew+bR__f{#x$oe6f#&D@9?8cYJO6lC9_MeBopA3z<9`p(nIr!^ zdRairf*3pwzO&_Tbp$0?Q0?CN5Oh#u<0DAbd(p%4ObM21_Y98P=3P|yJ(I71vMy-# z54isAHO&|L{~vaSOsDGx(9Q53y`dYxhmRNsftRby0AD}f`Ou>~bjM3?g#W<9X|6Ls zb+k+8Qc!rla7=soA5xdWDr`s1lb*>J9h(m_ww~ng12xb*y0?PbARui%y)u`5pcPi< zR8UC!^{PB`>CBx0UX`&GRCaoTPV$=zsvLYeZ-c|xqg&Xsy9{)43-~(b=EEE>By(Q= z_qF^28clrxu^F7#UAl8;cyxme_UQ(j=Ftr{%A=FzGNjD_vI3N8cpC&57&={Nygc+B zR&Ie3O!I?!*IpaO&SSj+|3L+kXRnKjz{}L%|B?0!xM=?L>(%-F@-g@b3^up&0ou2>hLyp$H;46yM=uL# z3W&i|^C+Y}?b&Va)A`)9`8~%A#(?|(eJ%f%z5%6sSHu5?C;7KI3A}ud;vP`@q<<%9 z&sOKzZr2GemM{2w4S#~hVE^;CX#D*Dzq@pTOXmws&;}U(7Grh>2H$QQ702(#85BTO z^Ip&qIS1eKJ2pSB_ej3r*m>4P^M{Y+Fa91276t}T%fzMgrK{l+&4V7DpFri>%lkh- zm6tn*M<=*ud%5Z>C{2NjRGf`04_H~d@Ea_=9h?6$^7p-lOe?Mc4;O$c?II43UKh}g zs0;kfjcnkS1%C@@_boU)uY+9MZKDEny*#LfJ@}p^u)nPvEU&KAq2-4>P_n_yTG>+%0_#ZrXvA{dBQ>QOobR3p8ud{Nq1= z>psxv44C`!HYlx3a0Imn_1Hme|5qN#A2m;T^s;>RVEp9KD{|SR^P-35!RCh?C6Xx3 z_X{P8@bPYh1k#nW7fN4r*G_2u|Gz}o#qzyN=L`Nhhcth*T;gv9jWD}(zI++?9h9uV z{aV)ro|Z>S*g*x3XD2)VHa9^~v*Z#J0|ThNxC>nV^1FsEKx*$g^1GaL+yhGaNG)GS z$fB{%&;>61t|wvr3(&bnzd;L4yIE)M19#THT!MAhHv~NUk7R(W;U!QLo4;kpm;e8} zU1#`o&jsabRZv5=vlVpYiQ~7!?EEdN;3a(bJvyg?j>75eb@>1Pze{H?B$vl7crh~% zRPw|waOnn%LF@i*usV-!u%_<4Amc#EvGqTqjeM6C;%ENWqu|vX;6feNOuhw5THu{Q z{Ghpn))J9YuA?cD4C58@a|Qt;^n`|RcU&!AWU zm-oKi;Bm44{H=bVhC;WGih@t)ftRy>fK-6v$;-l{xpo1IN3ti6Pp`^p{uUz^1_o$5 zpT7mXkE6SE0cgbY<@c{3U0`$JZTXg2KmY%SRA>CHeLq2&&P7E4bjXduOD%BW16J<~ zI_31GBd84nPTww_r(S;e2r>>-{DQJ@jf%j_dvJNj?s|!rUSI`a{T|(=3p~301U$Mu z1z!F^xWg5sZo{Yl|9v!Hc=XzQ?(}W&>@_*))9E_lMMd1b|J}X~KHaVpUT*ph8X^Mq zP8$piAdT{+9PFpw8X`_EKR`rT`6| zfDYx7_h|mbQ6dP+An@`>4mAGOUAv&+jDiOw@4%&)!BQ}fI0!)dRxjs&0tG#b3gny^ z4*phkP@r_CE_mtk>Hq)cIvK_~4Uk7#4pb;0dPO@wgU&pC!r%G~r06Fje+$d!|NkBL zf(n+GA)pq0vyaIShL^WLfIJDl{psah(5x<`W#Vdh$rE%#Pcs9!6Y0@86_jZpX%|$N zzL=T;PrFgKKuwpepsWX~4L!QSY9YxNG@jzoX>y@d95e%aI9kp!s*#SS>v zflbxF1#01x34mlEQ3O#53d0plC43&u;1&`Cf9pw5hJ%*spkjx=WY@LJUVL^@NaVveA)6F6kxacTQ2^ux@03QdJ(ja$2;u)HDU`gNh7sxHoJvu`hI(;X+P)q~2aT>aP!7f$! z1B$2`6#<{*`;MJIJS~6ox4O07`w#9Vy#x(!Lz2+T)bIcQL#j9amT4dU|A$m@j-6-W zwcM2N|Npiz$qx&##7S)V}B3JJ_k*99-PfRbNxjfwyxf2+rPkPpGLFcye0 zix-u;pxA1F4p?|}9((Eg9&9jZ{OV5%NOA$l=eN7M{%6f)@}#O0|P81RTE|XXJ0`Vq#!e z(ZJv8#0aW=+ytN}@wXO%CXTwR1;DfNr7Ju-YbU(;R{`>P>5A?!70@VLIuip!cbI}_ zx0^t>hlJ%t{?^;93=FOmh1)Fz~kovw+6=-Uv80J^{^Vc=WP%mj3@=D&vvt zx}f<7b3IRY?2P8$to(hT^8-D4S!ZYe|KED4gu|mdc7sQ!vxMP+m-|7dBg#YSM~`N( zsYk(;)gzCCuLQmwaxA^|?GOv}ezaaz&C>t>8=f(i?(KG+(foszzyAR<14DQ0g67}M z{QXxzP0-{E9?6G2dRZJidPST(dRezOfmRT)TzK6z0W6w)+M}1p(W94j9z@~<^ok-E z@Td}Kq^{dt0u-E}CfbSy{+1)4Sp;x>4jO<1t#-TM)A+bZhg;#Zv{M?zcM;DKV<~(dIygugWLQb93I_)KRmjb zz8z`cZ`}Y&p^zqHcbEdW)mR8=6-@AGe#z1Nit)G`=)O&c&M*a!P7jWk!Qjpwv>oNT z!SE7zWDc?;{riO#%=}Xiy$k@W0Ua3Y(+Q1-8FLZg42lQPdLC#xyvzjZSv)xSLI5-Z z`5%01PMAPz-I8C+e2ZcsAX!u6BNESJxlv+U+eDT9F$vu!SK+3RYk^{g0 z|99+mmw2fK&P$N!dVToCCEt7h9Xn4zg7L+YjQ{^T4?;Q9GyeaF)L(B6(CRPv{CGHc z%^c{^g0JBHv!K%_Ex@bKyZt~1*+7B~)I16R?Mx7G>7D>Oj?O2!K*S^2S-}-F2lv6H zGxP*#K*mG!;EPA#23|3TOLyoApX3J~-OQlAa18?k!@(BWdn9`+ z_;fo9cy<>G_;kl{d^^Hen&ENqA+xLIC(v>>%~KxT-Vz?YPCvYQMLv0Ux^j4SI}3Dg z02PB_KAra*gMxgR6F7E(Zs2wdc~J#Ac&7P?f=6%ajUAxk1$hp3Lbrp&%X;wCDx^H~ z>~>Y~>@Ah>=w@hspa42b0JP+{`N1C#%MXx!6OP^PD&H?SD!VK2w}Q^S^z1Gc@a%PU z@a-=3@a%LK@aT4y=&lp-?RDeu>||^GUt;FbS$e>+^Owi>n;yM9r@VSuK#M#X3@<^- zNfSZO&Jr;WkLE)h9+rnn-+@k5@$Y51(A@^|5a`qtkaq*R+d#qV(Rd2vEzKW3o&N(I z1ALg%I6yuQ0fpC#35oyz`*xOs)(k7WS3%@3G8J6$tCWmfY!Mvvwb z%%06Z7(Mu1KX`N&3%pbVD+jGJs5dbD<^wKfd^dP>`tI=P3_b87H50T~3sltjZt&># z-Qm$4df+9~|Ns9X^TDo=`QU$!p}w6*K}$Q&fOoVszmWi)cL-~tJYWFbqu?&!(|O#d z)AhuQgaXj+8x@~!*At++kdcvrp*vUsG-V;+2s)@p8PZ5;0Ud_|PRZb7I&Y;S_aB;n zF+$GM2dgc~wmemv;@Mrm;gNh0JksT3d4Rtew8*;ioJaC6&1;^$E`J$382@?phJ0l} zREVha!G{RU2OlbZ(diAE&zCSn-oy%y&*mc%pm8ej&RIlCdwB%B6x)G;f18Iu^TWo5 zpNu7$-5wI)X*ni)JhJvcgp6<&hd zG!vjj$LsUZe%Xs?&>n$q(1j(gCtk=YfyQB6Pk=_!Jvxs;kNN4g1BW?m)NdweCqw5? z&x0@d9h)E4dn5-)fHwDf^txPd098Yl2Z~p=UaE@)?HcgubpvfTt=D?(2XVho=W&m2 z8}{ZyjGmn}tPCE_2RJM*)){*w|MIasU#soWZ3nTY^qNO^oxnUo$mq(y?IdVXoKJVLfNys)hfinh2~ca;r}LvrcYugTvYP^^ zxN_+XJ>sc(#JBUo3mH&#-yJ64lN@@)r#tq9#|+Tbo!y&2d9%9a|m?sxa6gm0PcS+Lf)=+n9%5uvQgSss84lXOaW59M z>Jm%21fMSpb%cyKb|Ov%2K6dB&-!#81eeR8z1I3JJ5LS zAVXSO=ZA(fEUv95LFGfYvw%nQc}CD?K%ZWZ10KoWJbJwxd@N6Tbo(CQZ*BxFUhJ#_ zU5PE>(R@h2qtghqlt#j*GwOp!XT=GR&VUClov%DPD?a#iUiUce06JHl!Kbt0f=_3` z4UgjvpipG+IPL(xi`=KvTfp&uh>AdWu!>K2HfV9~_e;vb3Z<%^%|{)4Iv@CSW($C} z%_A}w=zP)_#WA2kIR?<(1%}^VY)$#||MfZK^?2cqVZNY~`8+%SdNx1%11h9IJ9RI6 zfKmgr;E{arf3W~4dH8gG1Met0 z?x}ge^ZWf55ui2Bj5R78pehE%S)lT?Q~ClUxef@aC!%IFhTc!1%pn@U|I&*_wvaB zG)^Vq0a`HJdH;p+X7KR}{4ENlAaT*dOF+7@h=Q7~d`QV&AR*|D(a1s~uxJ zI*%J(GW-_%GSUiZ{STyk2jwSFYHNNY;nQ8G;Mpw>>cF+SgS(*aKRi3Xd^^O%-va9R zft&Stj0_Bok3bD~{?kQ2NcI^WF<^Y259s;L&`7(X-S22iOIm zt4Sb!Z(;fW|G(ot(2;-ObH#RpSRTh+Pk;_+bleM?N`T&_!2r1mB& zJzs}>I$aNVXx@7fWdm;c9{}x<=Yp>{@#*}vg0V!_qg(XWV$k}p2cY#|oyR=7gAG%)eFEk^9 zu3&~8)U+X>#k@Z12}nQ;u13|f9c z6B{TQl<n?Pzkh}@7FR$2FFfU z4bbvG$g*v#%A?y&!J}IM ze&54y1_p+PXA1nSw?M^zw}XO5H-`sg1l^~*f&;SKrNbID;^Zs=+Pcyn2wvp#t@S`D z3#k4Dm0fNNA!V1D%{|b}7ijSfs5kA?tpHkL)GKlnR2q0R{`$|%z`);r0%Q|-(cCjo zRSI1+cg&;t;Rg@PFW7q5UrJv$K7=fqI|JI)!sgNJ!}Ei|r`Jb?-=nt`WS=KUcV{bT z{NJ@x6I2#Mn)xq5v!bB=yB-4I#efj6y;Ojem5#jRkF*xIaibV#G-n}5(!Oa%%6r4xrUXUAJygmD2H9wOw9u zct9rHJ$oxTKrOJ&UeI{$ivSByNdRVh^tw)f_L@(D3i5Bz)qpR0ro8*_(G6bPm&TvZ zdbb*Md_8z(nO_h*I_(QO2<;v?+qen%c7AZ&3A#_pr}L)=WWkt6?_SUf1CQ>4fEVv? zzy9wDDpbHu^*HVdo|b;WG4I8HkItLmJw~APD-i)Ia7t7JK%Ct_LFp2jtnPVq9`fuw z_QFjS)MpJ*QSt1KQ4#ol$x%5(MS;KdIw*ph4?B2vgN~AjQ4#RyMj3|V1m%6yVK`7T z3%=;MJkZtf8>lO>0CW;Scagx$>EO{J7Y2rXAYXa(+Rom}%<#hf-Ov9}e}SqP&{0MQ zLC5vjL;Uv=bXN+r-0}deV1_MfE?a=goe1W_mcf_nfNa0S->L+*y+GilB-nOve1jHz z8yJ3jArtfGKX^YJXvhJ+9>44;Dt8+ycR83_q3}Y_5?s{1Jn-lL{}&%^??LVx0oBo< z-1K8EBsaaVxc47CrydJEN$=&gKmR~WdR-XcYaX|^CbM9oL<|@OF(PwTz|ZHu^V*Blk1O@hY|Y;Kz6N|0}0O==Aaf7*m*DRtc2JF zIy*P^rQAYB21q$=h<+Xnxc&s0k_0s+2+5RbP*V&+8!WpWK($q=Drf^459o%C6AM5! z257y1wE(Eze5qdi8g>p6ND+tQaTajbFB-f$8+5EZeEkC`EkM_2Lnj|VWjm-W^XLRG z2=1I3gT6G|@W2bzqaQ$bcYwx`z-6^5xU7B)TGlMZ#K7=k>d`;{n;!^#zX4L=EBVc_ z`I!j#0z1&XWuD#apn?v(H-wqL#gd7Eq4^gRf6JCEP`H8CWePZguiE=|NC0wfB4PnQ z=(LNL1W>*PpFfcgVX^SHPG)3a0F@}uK`Zvmj(+&x-3oFzXiZt?J&$hiQqazWkadhN z*j|17?*ZDP09w%3vI1;Kg#-(K%Tp!>hJ6B{Vx`wM`8gBAiw#$Q{|Dto&;e4Q)6sO? zL33NK0v@0SNarmV$o#NpZ;gt8Z|6&J(->6rIflPTy73ykudMU%i{(?^{f~$OI~{bv z9w?S;Wzf}jl{|Je1YPFJ z-?{*#uy-#g{9Z(ZMhQC)dw_zwbt33UnO@W04a|@N64YMNdI`!6vd+`QKs(m>TRwpn zKN)_5T&^$yls-8g|N8IIdH7{4sNd6_FYxj%ayiG2*rvkYUJG913ra_=JHVx4mcYyP zpfej_>tR6q8zLsZ`)_#rwfQpg? zm*7)Gy1`8)(2lF-pDg^X>lr|^ay}{oX`cLfM?8B=1w4Aei@u>t;uRPe9QnmSYg<4^ z=?H?GARfnE!Ex=;ITf@F2eg#l6_jH^YiL1xiWxjWEBKGQt^j5F$@7h1x*C%`~i&vWC*+j z4TpR5mTmwawxpo8i_J4vA(I{5jHou55BuYym{ zxzPMT9(3Z5p-1x%8U7Z~c~>6IKcq{xG&~b1k@4ufzfX~ef#Joe+5bSf4K!p|G7~&3 zE$`9%gSmtoG%zIK!N2%WaT6$4IxYMMx&sNcb@9ct6Tkm^f=|xnZ%G2}?Cz~mk$3?r z20+a>P^k{O$JnDg^nyn(>$Ek@3?9wDSW1Mz2Rw64`1Kzw(|VvJ5p;4TcoG`iUH0wF zQQ`3IEKv~v?LE|Z2|8&9+D-zMffZ9BWnhK@sNA=Bc^FjebVqY|bVHY$F!Q&%|Ns9V zdRaXr&G)j3tzl+(J?({(Dg1l@&(05^Ar43v1#~#lZ;!?|pthz@cb0@pcNAzBC=2)+ zbI<_2M>kV*l?vl${yHxKU&$w)jZYXrlSz$7npr|ap=&Kb6Bj<9gXeo$HD-x2_;&jX zq%~VGxONvx@VA1ipKfPJd99WLa=e4YHwOs?{?@hN_;&{9=HqGnIR`<5U>>~%2S6iW z9+n^Zo29`QcP0sV^m>6uzxV~6KETGfJUTs2cpP^C-LuKy)0uI@qch+Ee7vjE1EdZ- z<^>vocWwQ~-?(QI}7;qCOG(7KHzUn1^2sDzF$ywR^V?f2h}j$&IUf6$)LTa{4I{ja8Ek$ zw>E>k(5uQjQJC)!=O|@&X+U5bram_{!pji2en+FPQMOw`caUxp)TeZb5a1E zUN{$GpKC`NfBqp*I`!#HZGgDb0W|Bum_&`1Iu z2hbg$@Z#t%(0+CPmKUHp<>e!AEeX!Q{M*2H`>bH%Z@H0h?|<`yza3zKmvvw@u<=+` z|3Cj9X5drS(AR0}s%(PrbZ#pqbWA4++rp3B-QS?l2Cdv0Dr1*sVwFfzm0U!Gh*&1xC-# zFb?SG?Mu)GAAWfU23OFH@n9aLegMsbfd+|QA4S@}%r6f*zXDX&fvP(Xk6zjSsiF)i z9^LRQ?k@~4r8QeKl!D|6LB%VGQ|-|!n*`;+?gxSvLPy zfXtWix9tQSSMuMX^s+~V> ze}|G&&Hn{TXCNzE2v)}50=jHr!b{MxLHzOz&HoijXCbSqhN=Q>51s%$zQ~0Eq>jG@ zbgE4Ae+Pc>;465?>jaNp+43o(44^>ZZvjnGzTO1R=gt2)N|c-b3-Gss&TsVSl?{fg zVgOY!$SjD6l&}dvu$DQY&b7xZ6ztyiRBnps5(p5d~L3om3VV?gS2xZf6BoMbL@T%?}(vQ+2IOpr$nFBo)x4Gtz2Z z!~dSmwFM0Pt)R-ox4YKBxAlJsi*I+mMCV1%UUvb`pB}BS;ULH$7XQ=(pcS5s3=Aa# zEeA??njdoTw|29DHtsPvem}wmy2GyZGAIjyPs!TJ%m5N*U|?k6Z+!zg#_#(P1_mYu z{#JDmr}2ph=&ZrkD9~YAjSm=@K>4lZK#Ax#aA7LI-}(YvSUkWY8Cgk$3)kT+dAFF7iQOYpZYWd$|c%RtwY^S7{qtFcSUVI2G| zKS6DnW@ZjhbN(o_&^5f|$S>w9(9sGSg>!+79lCT*1yyQ3ov|Gr$6X<jHKZm9b~H)6YVJ_5Txi)i;RCFFje&QQ!s1mgCxk67LQ7F-8_>j_tQxPy`oJlyvp zhx^9A|NpyyUA-JsQxFmAkQxqTA_W1z^8;4LD}(x06Oi4_$N+b@D`fW$B)z=(19La{ zj6@RL4Z7Bf>;%Jz-Q97Zy$JC6W0?D!A2Grm&w(81N^r+ZfL0?B?Rd~idkO;G;|n;QoQe~S;O#wOa)py>pk z&QNl*X#YE`jy~}V)RcghZ{5Khp!GUF-AO+{?ib*14FN6Rgp4bBbQ^%(|Lqsp{Q~?g zZ@@iVtmTVGr*8)&frAIIaFi-OovFBT<%72n=e}$QI}n@?J(`(8xAwYpKJRGN0GD&E zCg1~;=Yk3|AIL_C7ipkX^4(w|aKUGI$p^CS0Xh)@F8`pVAt(`miUyZXa0!B^^aHQH zI_?T>B11|J8>k!kw?UlK4RH>{Zm6X%mB6V2?tYif>pq?DI$DiU+z;^$cyq>!W#2%v z_+U2N{c}MIu(%&ua=SpbPeFV$7c>=v$0y*C7>our#79|gAfe8`4dOtEk6a)dt$ez{ zM!%c@-eCmV#{`Lw{h-397V6Q=A0g_Na zrhwxH4rF`8{!J<_0 z??4ZKP;rLO{UM+|R1nYO34f3&l!m_+G42O#9f4+L@X2b>nb#LGbjav z*?2+_R6>K@NkK9F;swNc{M#VzfF)h9-7h!({Qv*OR;7FY!Tku>{1Rk55Y!DzKyL2e zfZS~f+Eg&^Mx~m;L zq+-Xw-@2KBfuY+OHX;LB0qWU&!~r}agL*T}DNs|f`A7n^=?gmM5;Sk;$Y19w0XkR8 zqxqPC;U&-jhmVQ`D6a2-hA=LB^wu_j0!|@~Kj$*Pn1{k~*9K76A5=<#7Mg&Toj`^t zz{{`r1w%Xd1$}4m3%ag&vHdwCgHNw158SmaLE!F_3#d`-Dge4w+oKnBaL9eo*#3(h zuR#4l{ua>H=o4P5gVvzH+Z)jJSElxV{)4AcUwA8`^spfFQ;5)(@aSfZXarsAY5|&v zP6Mqd>b&aN`OmTQi$~`v&+b|Vm(Ifu4gYycTpYd~X9q2;_+P5*(ajpw3|hS*@j|Qj z{eO>MQ)4&K%=RIV&ijT3UZjbFPO@T$>?sr}y@;4^a{Sf?8d_&6N&R-1vDE3?VJ67g zyWb9T@VD+|U|=x(_U*6$f9ph0_owrwOXox1&KEwN{~enj^1R^h`v1TAv4UskkrE%! z+_wJ8XaD!9g5s;!_OUC-{?HRIUY!TcpM;+9=sfm%uTST9&;_n9RBwQ$4MI<}9w=#d zZ0G|!0kq8a`-|Bz|Np-z11*(VyH6cr)B%`L^ASe9%>V!Y|2}Pqg8wiDbw~>QKnjc? z3YNhX#3B@UbhEnGfdl%b@_*2rJgWp~w@k0;f@#dqOLp}|P}Yio#xdae19s-}mte@D zX`lh$_Ik*GZ@JXH|2~~BeL5e3rsgbM__wupf{uIS2X(s;VUKDaWIY)NXo-=B<-HPL z&(1%donK!oLHc=)-7YHNW!5e#3Z+h<^+cc%XaP^lyCuq?zOhF)gDNA#|9THwMuyPP z(hDz)L1Vt4)dZfFcT4Yr7TbU`5NzBXH0KAJf1hLX=l|;s2seS#V@R+^;~N8Tw|y(< zQd5uaLIID?y*EI8r_QM-z*O&xf2b!~y#Q_8a+L7s+zQ$d<8i$8$G`vo!8xtd^#VQ{8bk7C5qSIN!qt{siw7lD+dn?Gv z9^HGvUg~TEwVyn?TS3114>|z`-?|z!QWC@kM35Gb9}lJDm=PdLB8^|c2SYwZviDKkM7zVPz9a$JUS~R zUc7$$4}1@LV8Y8?pooHK0hLpr14ISj2Z(ka`o_Ri@&Uwu`4DLx4#e{>uIyoC0J&r_ zXrXZ-xby>s7ii`&f}b0aUb+JlUV={8_UN7qa-|1o?a2KXYM}mVx3k1?xc5E5D;|$K zgHAeS@aTjFtLqK$C3Y{&WWYn5pmLpG?iV->hB=1%^yY2=-5Px+7<8ms^BV)Sny54M zfJbNT29M6t9Uh&&Cyu*b00lHCBmS#~WW;x3pp_UtpkBu965*Yo!`7fD(x&iy2Ca(l z>HG*ffwb3lNeUywi~pb=AIh!CydKR*48R!&e74wY^_;k9y0IjEK{a=#m(OG)Jqq|h1^MVU#fvxY2ZeIbP&d>v$t{0&B;>AU7kdqFB z+;0bUzn&Oq1P3iSyY&#L zSOISo1RahI4JOC<*q7TtXNF+3CkVx7x2phJlylk z><+=B)0Kmf;e`RH8HO)9_e-KhC*r(S(E5igh8Lh!uO|;94N-&ACa81--2&><3C@ll zozU`PE4T>ioC;ot(Af(rW{^|t3uyL*#y4p68=es$rB%1Hgh%IGP=VwDE;FH1a5F%q zA+*GBknpf{jNoqx0gHi41`l{a>Cp);5MPM%!^+Fja*u9ExeY5T-6cG_w}M>=$?1l- zJ$fOfDWnK>1h1jl1!}qfzW|!Ug&EKdsR}y7L4!OcOr3IQr6Oqj5Rwc*^%`6kN#!BT zcj)Dz=l}oz!R~7Q&CU-wEv$Pgs3`R44yy3z_7d>01p9%%)eBseZ-tcQdqGMJZ@-uh z-f9JjESNqA36E|E4v*tb;1cPj5V(kQU;ve8pu3vj>oFj~_u|NQNO`!Q$nx+-vN)(k z4PRg880HCCZI8Hw4wSM(%ON?KTp!2+&-=NRhgUtV01~LDsAjte@9=*O-d_Y?d?)!8b_;!AHp$oe3r}Rqew^A8U zTq8;pF_gJ_&+a;j7ZacV`~RXx3?<8e&)WpMC&aV!3V4%K>;Dp|7mXW#{|8^nb}!na z^SEP7>`P~G05f=Wv%ahVHB>ELOq})}O%3S$b)>uoN=GpNHveZVw`u(kT5n)yc*&#J z)H#HaA@=24aLonkcXzW+gqmwP?frkS5(SVFkIv&SkArSB2Bm1jZ!b;<|NoCE= zkN|a@K)obzUO(>I0Bx(yKpvk5Rj3}&Au60bC)bV_t+yB%UV;Y9J-S&1%R%wW;A!c= z!QXlYlwZQZaSv`kG(U3i=q@(kZvoAxfcgyDZ~uXoX1KPTEMWy7ChP&~_ndYHg+iIc zH#bQp{?><}D`!A=dHe&P^>O@#Ss19Jc?|5iZt&U!0sdAG@M%q;qdy7+z=nYA{^rIZ zz~6ER+!Cq=$J*r=KSKZi|IAhn26;Ocii-A^eI|x8~ji5mR zpU&JJ_yf{p(=TdN6qxwIE73f7L1Sg0kOR%b1mqQNzj@t@Bk<1&^L?_bnSTI4RR%DVKBBN37R~EF7^Vi^71(D zief0%XmRa$@$EWjfq^sVj%WVXli&&e<1ZLP5QzrVlQ{JE|Nobfj-X=Nfx!`yP(U{g zgHq+xR}h~f`S4{jXqpr{f7$?QbR4(^>GwPQ`Tu{yODoVKjn3zwT=gRC)xZCq-2oDy zK!Qdq*#V?=osr??9&j|eFo4_%Nwz?L3&1)cH2;L#b|;nV3l0c&hP zhg4FoF*3Z211;0`5}f+9|P!;^5#HWY4Gv%a7RU{L1q$ETm`bExXTaJs9^Gy~z-x6ok9}ic zDh=@H_WJxrvoa=Nw(D?zhxar^v z0e(%_4F_MaH$PzPbUotO{DYCdMG>?b0kmGabvd{MeE#CUAE*R84i1GB&^e*q4jiCW zR36e%PIz=PLWT*MAxoV>14RO$+ei3ILE8p6K&KwI+yo86be;o`=K0Qe zp}yA;12Wan>b1>5@FqtkcBi>Vb*6}_gXj93{!`w_ZX6|z7H$-?l! zi(?GWp!+c#za3-eZ;gXBd)|T;*>$r%11C8F&u&)^56b`!{??8W|FU<|EhzGtluNpKh-oV1ILh zPgOkO(U%PN2bx!KXW2pyZ%ucaMq&D6V@089{7NTivsB3Ph~=Cli0$Dp2Tl-v58`^%PKf z*$g`I`yD8NoBxUMw}4KObNqIUk-s$xlx-UR@$k2RWIeiB8^Os`0K9^40yr!{XL5r) za`2@<=ZS`=Ec~tDhG}<^!pn!?iW+oJCFl&D=)p@9s;232U<-88a@5*(dne%*%`|5?GSruB6$B@=!_St z55VK|Ge8@K!0`sE{$0Us(@UU;>jfPxbRV>4lwZ?z!T$@;D}F)#b`XHx0>;eW4qBRJ z!w8|_=}Y4ErfxS0kM1x9&~Qz+8wV)=bYA0c1zk983pz2MzkS=E|Nk3*fif3=JLs%t z(2@JC3qj*v2OkJ{Fn;st{N%y;!Q(kln_v4B%5~p!FN%(%TodouG4O4nZpm z{?|#_fiowVFRm=JYi*ph(|9g|5649AAXk$FWn$bViyJm8*YB^ z#IHv$>&7{t{NyA7J^%`)-=kM_r3GjRj&;%;&>8Td94`-oM*ZRP-K>GBpkhzprQYxV z|0h7QcIUenlRN(Ze`y0BHv^STFF`HJZrz>fq707Rz9Jr$r}$g1f;`aaI^)IRt#AH2 zHq;6*cyznY;BVOr9`2u_0!sHDpxs7okRy7ELFXR)zw~l0^qd`!Zq}da5c|QK3A$NV zL7g)nwDO{xRT?Tg0nGK204MNLMNk>|(gUS6hhzquV;bbs3oYT-fC zk4Lwk0_awcZwHx5g+b*-w>!9<;@No|GHwn!V*Ng7p}6HQ{+4T?lE?BQe~T!{rOluN zh5zw48-U8NZZ`#=ZjRUMA%~uV_6!FKxO6i)f-2^gm!Pr+w0R*FmOgyC9e#LpcY#{% z(1Uh7LHo)erI+QuBAJ(<&g9~qXk?# z!Ba6WzE6AczcT`KKn>(#PsolkkVT*vcLc}#>w}QA@)C3(Fd}>%za4BSErNNsn*kIV zEuh$O{C*I0=1FOM^A9%u7SLHe{OzE--9cqEsE-Odb`W%;;5%?x&Hyu^*@BV3_10g| z;iGT)Tlqlgrt=fT1z=~qGzX8BFhGqj*#X)I(Rv%)lse>V`J+U^)AB?q-)mi1I<>r5 zq6kaVK9;{q-x=P12|7j25!~uEy!0~n@BjZkmaq6*7lI+RA! zpUz+4A`Y^rJ>UoE7FSRTX#T}qX6s@3uSn>%8O%ONdMj3gri0E;yFn$v%Z7jd{~O*0 z8T9wh|Nn*u48OfB`TPIB;U$PP_-^OULoX*od|oQy+WM_j7<3q~J800P^OH;G=a-=I z5pcf}64zao%nUC;XZ0ct*MaXNg^tm2fbPZf=yp;7Wk?a2`?{SHJem(VfI1VOJwQnr zv}63?AJ7(|GEa~0YS8W*k6xA^9+roSxL=!t)OuJRD%SI`^inAO2u?QOy7R@MDWHw# z)e`$asqeUh0*LbHbgp>OdFkJOaFX=swf#}S%<$p`_?Tu$dIa@{n*X!%w;uzAcCV<0 z1v^9Mk5G?fmL?Cz3!r{MNO0$G@a^89ti|Bdt9rG9nE_m!cHZ*od=8pXe7WroY=5#( zuWF|TD?{fku!?A(&gY=P)M?1_trg4+9?kz$O80|0Va$n;PT1$)cmKl;1aCG2jd&Mu zyo>_rg|AQW=~XqUU}ku|4;p?xy{bYW{yM~7TJXR-Y@aa5f1&%plee8up;O;4*g=iz z<{vC29H8xsnw`)7gIrRX0C7ns$R+o{PNmbRwgU%;q19s?o6OV590?_e+y{4y<{)0v*93(&^%enJ^Bl`xb z-?Q_AXXi(c&T}4}PhWI7g0caqtEvksCb=OS=7JPFI|Y4P4}cC<50LQe1dUjN*bWLF zoowJt(0L*DFw{KINjxZKno(jVA~0d|m*8XxnFIU`3ef#=keFNl^X`90ya~KG>;UtI z5@^pg55gNFDxm2&@RnzfPG+#%qdPA^1|Z=5WzZgM@SU^Qpi_>ZI$pw~)As=A=rfR| zUQkP|z?PPta5X&XYIp#=;}~>e%_q-+&4YzqOMj^KO3 zqqo|@r#tk3M{m&q56kbx^&XwfkQD%jA$tyje|Q{cR%UQ<@#u_t;Bnjuy!ywZ)9Hjq zr`H9a&Z-+8$DKe&@-TRGf;O%>fj6Xig7)}1{=e$j9ipNF8Kv$#3_YfyR0VVplSk(b z&~8A`NleIR)=YTuS_o8GF@V~6p!F6y(x8Kw5K#b1&)}Vvpm_q&Ko~4xdvxyyjmW>? zJ^*To@AhD1V0aM^VT0!bJDb5mJ`kY=;EJRfB=f=&A_U&`-PsJ5Y5fm7mt;5S(9suS z5G6Yxy1+ur5TOGQA&|_A5BtGZpMVH~WM15b2wi{(fn;8sf(T832!Ui?Y=;OrfP3W4 zAek3SAVQ$4c|1CsK{784AwmHlRjvO^MIl3K&~gY?-n__$sEPoo>TCuneh~o@>TCuJ zfj9B+%QL)ih6sXu{ZbTMhl0yjQ22s^71p{0B|8n!5+rb-gT^X6y4^WEdi^;-r@nOh z?(ped0qReASe__VdfCSS?ka=VeYIME+IHQ@DoP3+yIUO?!S^HH^X=XXS`p&e+X|vQ zI$aNVS{^SIeti_&fAa0N_vi)-m2C0s4ma@W24|xe9^F9#KHWtezLsB#Z-d*J&|4I_ zLANNfd32Ya_wNDVl?|Z16^%zgYph@JzK3Y}a35S6_nOA+ z{rCUH@tL4Q9QLUExc~qEi&dMR|9`Cl>ra3#g7)ZUSjoVkz)&jtqW0tS{~pbUIXo@z zl*oH@TZ0nWdynRN4u;aJ9>+m#X3z;%AnDSFs3(EF44U-jzh~!hPw4F}KAp9Y1W=mf z+3O|%O7AcKfoolGzVqyk697kQDX(vLnZipg@Io(+N6wzzLzNwD)B<*eb+&4bb5ppv#UruY)I{ zL8n)Avwn{Nt?$!#QSSZzKWOJ>=dl-OZaoF>9`8K_|K#B6R1M$eCpA?1007r0zdzQ5)lKmod8zf`k%k0 zn2`ab<0)vO9=ty@T>~^tf81RIG^gs*y}bZ*k4Nj167b4d)!UCjhiSZ6yZhgNkKSfb z3F6be7_>A2G@g9GqqiA!4=#v(!K1gCg9TJ9_;XJ3 z3r+^<;1}!$EB4^eJK@pm%mLB?8g)9E#-DS5U$7gZ)0qQQrOSi*c|M)beY;asIDESG zUmP%h0SY$9|5rg*zd!Zp-VIBss^Izc13Uixe<3XkTHXnkc@fX^^S{UOW{@h7Cq24% zgQ_r48WVWo43Pr~K;=N!9lrSU`|f|=)^8;opeT+9S=hT9RQ9ApZEA?&;#>G2|4l796Tor>G8UQ zmtDFVKJn~jIR@E7@66$&`2jRgcJLQ7=*U-()&q4aX%qarZNPW7U)cdFj*geGcz3cq z1DEX0M;JXVkJQ`)ZQk>+JX|XLvX_B@VFgQRq6helyx0>Z^&Z{TpvBS(FQ)DQ`J`IF zqtjX9MF)hV;nC?V@S+;T>2wC)y|#j>^f2hcl^>qX&;K}nV`nMZ;MrZz@gf{#d8a%0 z{J9k@CG$az3l5MiFKj_F-8Cv7Ku2D1ywC%2J6%*hcv!}sC~frYt_^r01r~D+K+WE; z`WBRaLDdMN8B#Cs;`w$^sj*vv5!9#YbQUP#gw@sH{mftv_@r}Kd$kjq?7?lyZgcQ# zJm_u_@ZwfbecN5l;nQn!%tQ0L$HD*1FP^=6{@=&)b4k(!pYCi0&u&-5V%C|JCC;E= zd$H*qB*UAZy0#d3csKm=%@&2 z%RK;oq=d(DhZ~^52#?MJq+=xlKx)CQc#lqh0a!W*rSTX3>{#cQJ&v=33Kx&#?x5Wl z3?9ebK`R^>!0UX${@Vv?^MN}}KE0~H6h#?=eL5e#SU4GUNar)~;W&q1JbwEWbb^#e zH>;yRc)S&KbiJiVH)~RmD0m$G5O}lxbB}H??}SGu_?!YqenA%%i5IFmpmA%^{R+@} z1(ZNF0wD=h;>}%1w=BQ_Waw&-?jVWROCj+Ab|1)Tq44G(hetQ-+dz;T7(BWiG(5T; z48W&$bTjz$>Rj;buD$T$nhvB()p_{E?yo=pgTz49A?QNv&ST)D68rL#((C`w{JsB# z3TWsXn#qG-xZiyKe?KHl4!^Lv`5b)8QcD(SJx=El(4=5X9B3%Cw}Jz7P9e19{^rsA z{Kqb^Nyi&N%PB!&Zg{{$^Jn8hkXZ*`GJp114VuEQcybq3DIRME9Wce>(QCUtotfcy zGYbm?coG9#uhG1gd{OuA?*Cm33<97FK}&3Qae?K<_Ba*T_8X?*oJXx%=< zlWEWI{`X)!;L+I(3X+$7k;7)yObCh7{Ein9=*2t zt3j*4IbJM(fA>GwuP<~T-^DUs)_<{-wi5E*4fBxSOveBcn8QjoadY$I0n|G~x}O~+AL`M~TH+@Ps*gaMY`SId`+(eI;nS`Bf+q*G zTT0aR;J^Q%>u+0BK>9tpnSFXyzXmWd_;fz==-vSmdyzB`v_^y(#%-SU;D0n|iEFQE zTL=>a_`K-Ymv`qqzzkoHZdO}Qkd5HH!t23Wz{J3C7*bw?>LF0_@$rTvADd^;vfTl+ zTLiRJ$w3050aOtOk-3=BI#gX^I61PP#Z z_q#y;@ac8k;M4ier+YCZ72fwa-V9=aYKbg{7hkr3ZmI*zMR}|Q_3$G>M`3R}@X{aD z7J-j%gT3?88YBiDhXHx$MLKBpCCGKn7A*WN+E7)of6&6)mKw=>|2?}|RCX$ZeRZh$5$N7OY5tZB$$S4_zLLE6|3&7@yZ<{6 zd33X$044igQ%*tHyyyM9PmxmxsJ{h@e@Nd1dQ$}G5cc05&2KcCpR;#{o&k-Jx^()U z;BVmqg*tfJ6Er&D(fnJ4zvUk27S6+r{H?8^GfK7{1}(B|_|3!LA_}T+yIGHUf;zw! zpak~X1CqdQKL!nw-}32v=+pVn5!`k4={E4`{Qd%TkYMK_(EJss=LotWh=;%B4tUUu zwHBOyEz%}{$C|EzOSWg7p*vojN&WvHblpzt0ng5Z{4G~Oj_h`ToT>#HLV+bK{ua={ zunjkVOBLu`6zHx){+2hOOD;ecFudUaWhT&()ZYWTeb4xGyB>JKznOs{DiZA!c}Tti zc}W85C632;|3miplv;Rnv+nc~1)r4p(5Le|%!3v_o&R2dPKgD1u*BG-n{~1mC`Ven z)CLU>$uszXW`;U%LDho-=Q~JC@1OtwL0U@1L9XyYyXhRf?!1}<+^mN6GrCy|UEzUV z<_-z;v`64TM>72%G|)jO4}vTxneWlfYVHbg({x06@6pZb=>a!S4Qig)qr3k>$K5et zG4a-Kh?DtSK)WV9x>-3rAf`Hk*01_>o&z7f?$hbJ;YEBrEb>5uLEu;`5#!&+;M489 z0ki~)oxe2*>=e-b^(R1C6OwFvI==@vh6ed``yTKBoe}DK=Eaxoplh*@D1a98@VA@? zRY<5M1T=iW=l=Nac%d@yIj9KO0ZMLvKx>gvHi1r4g5BE-az7$G)!ZQADfaO0|6QPR z1)KkW!Tk?%MK|k77pVV1XLWgWvs$`=!}H}c(6U{RZdOe{eUQUqS0_54NE#(zlnM>~Eyz|P+i25O2o|6t*7sR5mJ()>e&zr~Urw3_$;XgZn= zv}WrE4}XgZ=mO(z)_!n0lmL}aprh1(6#NElsOY>8TDZm?0-xy7{KMrYb`{Od32tCv7+Gj|DB+*1fNdOSPJN*Y17T1 zL3IA92hggT`ydB3AF+TolR(SBAo<^;^ZN?}HHcGM#hF0^Kd(XeUVzL$arNDQ&u%{j zkK`ZU7@0~%K>h&Vy9QeJ(RuM36KLNfXiB6WJOuZ@gv-;~KZ3tS0(`KF=Lf?BprwH= zpk0rkRj9Bfs7(B=ao~y0N&y!BsRv#L{{Ig;Pc#g?d`=vizCrsbJ(?f<@qn(M^JuR6 z!2nVX>N11I-9i4(2el-Rzt~_7S&=&Rz)R2(OW^tmbPLRj^1~2`meazZm9zyCKHUu9 zF_gt%7m8j7=LoLXg`oAj6#}4r;QTF%KowH+e-{20&^V1p^M4Wk7B@x)2JoSOt)O-^ zXxBJ@%Pnvb&AZwel!p$q z(BiOe0mse@j*SmM4ZPAO&^c4DA?t=a&%d~k2O8R_lK>?XmQaWnrXF~y37Wx$jYs=* zp7dz_U((^x?a%SLDQ$vFHyhM6S5Q#^x||%eRAL1?e+&4WLU5wJ2XY8F(LQEjU;y1z z2f8c5hKIiea-lctJtvT7BwkK}&)0Z#^S-nP337rD(Sx^7Ji2**f)#VV1PxkD@aX3B z=se&2T;8MkzchafNUY(h0Dmj!riz!J!G#~V)#1_2+vor>?fEI{6 z;cw9fFYAKd2K<5vwC0k(T@17?tP`~5^2OVB&@445eH{i{%HYw>8|esfry{7l_vi-Q zpCkxrrpWNO66P&RpnL$j zdFvJU7C6@xFA5Stn?77ucr;gVsPMNsfNuW>sDX1f>s=M9x^=O(fmt=zvUR{QiboJtDFCWe7PNT@osm40C+;mqnq`< zH7G|&ywnFN>-_#Ad@aJQ-B7W|YY<}PAhG8E3H+^~6@H+q=4&!SHWDP;&01swG4vM5 zDc!7(Z6Vy#KmPxRmS~`>deuO2-g=yE7(gaz){=+y7vdPO@zM%G}Q?uZpQue`hhjw;r>wh-=72)EA~!UZkI1?`WpfpC|DWvc~V z3V{r1Jy7c4(aq`vE^aMeazMoRTV8`yfmQ|8gB(mOL#z)EUOYYz%5>aFaPXjZ3dawYx*GoG=ySdc;JQ7g{S{trtsYR z|I(QUv}X*GKaksZKE0}ESwtB?OAIp5nt2|eDM1!Z&?r~EfJf(V-)?iq|7xJdBM5^p zG`jy{!Wz)NM7dv{-C-QQonL)>%LH5v5BPSP8=i!!n0FSu)Lx}T0=##ilL>U}v1eyE zhvWZL0dPL_>8=()7!K8D4ma3Oz_;5CG}q?S`OmZ4T>-S!M%M5WQu_?FWUl!TBe)G? zd9n1p=fMZeKE34w6 zb9fwQ0uAu^bbj*fE#m-bN#a1#G7GyFNc#}GmUOrle+AG*QJ}!;{NvbN#^KRj`NN|- z;K%oS9?j4Hd}HU}Z=G+;zyP|UtyAQ?NAn8~-`-LI(10GuA)ru0a)|)kSa%MPVGv_I zyXzGoMuLqqBHFlvtKeaw;MrZr;nVpI6s6$Bn!P-b8@@m-Qq5By-CW@K?5*PP?5yYT z=;Q*0Qknpg+e+Yu)p2-s`zt^~Q^2Fw1Y(fpM~`kp&u)JXkKRhCA%-ABl8_D2ha2L? z;oI#d;Msgk!l(0}Z>KrvTHMaR;I@Lmix(?FTXK(p(uYsCLANvPkS13f1_s~WS_jAG zX9_-@)dKvjMrxoFk=!|ayGtEBdILB>NztcM0h+X-sc+{>SU5mz_3ixP+gm2#+i4C_ z0JXJfC8+&y2o#?ly&jO1(<$KiKSc#Of#pCA10`cnn1SM`w@kpNm-iBbC!NF#7A!UGV|5juq@R*A<|)KB%ew zpT9Lgf`P%eyOaY|Kc#~0s9oXN>GlJ(OUk#mM1{kn(*ktgBxs|9Z>Raog}+g(R6?;5 z(h(>pmmHs-MKqFFaGsyeOtoi->dS*7nHEnJwXLV^9v5oPB#vaqd?J)9;Y*wLmUQD z>)V|s;M@5TmO#3*4SYL)fVKdG2Hil--;yYwPTv(iowW;I3xU>stv2`r9*_genSqBh zl?@pfK$8b86ATe&jFnvV=&lB>z+3hC_x~5ANV-Z-`E>iP@acA402b{-N(wglU_*<(iLE(0izaTZM96#K65>@MZ->^$Jn%L3}~F!*#H^5{J8)9JdvL-W{+pG+@7 zyXn9#^6U=f0H;z9%@ZEIEQdgG>C@@(!|}h03R3A126YuU1R*ttM<*zmgBCV8fYK;< zR?>CB3!crOvGwDS#zKh^1B1tRSI{-o|M^?H4Ir7>qq71%3w&D&@ii!OLb5LhBwZGO z%zklwGIG}a0WS1A13rM_8M&n205_$c!?PQ7yB0W+dv=F?@aQfFnbdjE0~83Ip(|c& z-Ux1tFYxFNUD5o2(WBRe=|5;Ul_#S+2gqRLNC}4;?9prLVhOs@4T-=wt%r-~TBp$i*ZF+&I?n7D&cfFz~m=nQhm%swA9ONwD&cD9knkwuE>>_w&B?bl$$VKp8unW{RuYuBX>u*H{2G8EQ|1SE?=~vJ^n`h_I7acC3D}`JafU+?pvvm8;0B2)Zrg7l#>CE_n znv<2FE&-)!kM4pG9^Dl`Ug%!?2|5-EEY|A*PszA^b8itW2;eO?&u&mGn|nZSwf5+| z4yp)1`C4%~_#%-N9-RjvuGG8$@-`$}gK8cR^lVoTH@*xMcaWSX@Z!fc&=ftPWak9e z?8X5q9Qj*fv_bWEo&cytLPDKXr-j>!srVI=(zHI<^l1s&2 zhMIwnK?m>a1Kk+L-{N8hstKUo_0kuxu6nm3NVr1aMRxrINC>)s?tcZ<<36C8NWk%b zDtNFITH!5O2n#uX4$tl~4oC8Apy|gIw$#C zI0Zm8AGc>WqX($2KIYQv_}}B;dxhp_@}0FSJevP8^0!>kVqj=~$JqRjsmub@TK}Lb0D~aOhrzvFXkdU5Y+hj;sLrv>$4On7(sUZ z{l><`->SwBDie^;cPRM)QrN-;lCUg};BU#*04eeN0G^Wqbw-6fx*0tVzTjzoz~B6X z2{h(aDFND!cJW2?BS!v~N|5^IAKLsapAA4)pnf+1CuBALmb0K1YV!|u{??Ng3=A(y zV!!@>8L9!f;1L?I25@)#K?C+HsFB*84(BUYSq&LaK(qfs>AUau9KW%saPYVG>w!D6o}D&dJepr}csBB=Fo2fc zclv=kwV?Fj_#Y)ZIG|V#iYJ7BFO^{R@1fFnp5Ix(=JK~J1-1U6^|7bs5l{;poPfan zdWfa41{8|DCuYMu?GNoofAQ`73p!E;RP*?BJA%6Bt(Qtf3=d53=&lC`H>kVrVR@+Z zJ-CxSSr_b8pH7zVAg_YjIuf3pzMujg)W$*1^U-k2{5X6%ODBN3*q|m>r@2SBBZp77 zqDQCi0#IWZ)IV#{=Yk|r(9+I{tN#6OIl$i{4Hk1z;Q%$ZA+>}rsAcHU?KdQJm|Osv`*s1jNOn?ApRCbWsrA3EiUAdAmre&f!YS? zq=2gxP@@Cfo4gO}e}H$Y`L6KLJoMtuH;|o(hM{MIm7UYED985wxer3S4}l zmW>(+^GcD;(_!InZH1dxO|*G8X23!KRMx^OMo=>g-fU3yghg3DxUK<3nGtr3_>cq@{<_*M2n(77qBd zw~FD=z8b&w=3gxQEeW6~#A0nsGI6$|B`E-Idn|pD1SpFz|>f2i=-~$>a z>NI!!kJ8gDhg;~*@tHs0;X@k#u>*|!f({=b-3Cy-@E@g{=?d2YZcT%BO@P{{ogaL9 zO+ah)LEUXz{?;`Hpcdda{?^6v3=BSu-$6|u&(0dqrH4d6V4e==_{?AD^aEDL zKz7nN{lL|s*ag)Hm50?0s2!E5P(`4QC!}TpCv@aNmPK>EKsr{S?TU!5DVj5V;0C!t zo6?}V*P~YiJPZoTlpdNFJi0Bws{&e>LBo~JKjq4KJTCs{UwodwiA9ou0lcyXHi{?# z8H@$hh@esey*9fu85S&V9KM|&ARWyqGN3%@&*9m8K)|Q-Ke#$R=FuJa!KXX%N9RG` zPWI-9%qv*@Z;6V4M`!E`kIvEw zKAo?9JJ0%bx^{SU);56a_0SowEkX0D40JNJ!t29GeK`)epJ3gQFTUM=5+2~SI*UHt{lDW&Gc$t+ z|Kbb$&67WYi#iV9-ZBMnCb$o(xl% zqJU)S)+!?&}P!LvD+Ljc^J*(uGy(EN{yzZGb@NF>HH5GrhE~a4(jK)EBkW^-1aBP0U;nR7Hza>W*r0)NV zB`FXEo}EX)4X-aspw&i4*h>XL%}B_RSIqn^(gGmmhd?3MYa6G{#PFhf0!pX0W+E(D zK;s19NfeK6#~&-$`CEVRGBE5C2F(hCrr?zYL2H04fBE#534jx@2fxc9k4{H$8Hh5K zq6s$=5xtQ42v@@ckjeMX`!6ORf;Qbex>={oi86RJGcbB|yRHCTS=9Isw1bGhB}q5LYMo zo*a+PxuEk?UmHW$H+B2&@aQgG0P#xa`4`MLe*E|7j$Pph+Gm!0#HU;5uy5;I{+5*z z3=E!)e?bl^x$n`<%B%qDh=97J??5{hyJvtFw}W<39E$!8ItX#ui<6gs{09yFf!1>! z^5}H!c%dHi8#LnF@w(TeoAnde01gjJe-8fEInO~SDYE*>i86e15EI~U?FI>SmM-w< ztex>fKOHojUAh3&A!;oI$#jRV@aV3c@#5(zs7&(@752kYQKQ;6jQD z=(3AuuyqWcmM)+^&VgrO`|int>=O~-Z(aZFKWLZ_)QI=#tX=V9Pa4QzkS)FtYx|yo z%my89dJJ+PmUIc{w<8Yxt)(ENI?sXDLU)2rtMXm(V*L$}X5SSau--W+#rlHObvto* zbQXXbWD=lb7{6VAiafINy$_ZMK}~jd4p57!^AxD{k{OeD6^tx~|f<`p>TYfTviU-jAQg7G~NR1f+8sc*UjZ(p?BV;GKeeeJ~@t}v| zMer$yieNYL{*VT_(Ua-hK}P=8Ks8W9{uQH#<^}$S1)xqfIO+5dXBlWj5Y+tuRd&AJ z?$B!vez5SjmJ5Qy!?Z_QlmWaF{hOOS6MySzWl&=jT(zK%oP!EYNViVFxAU(@cfbeG zcnN6u?GQVEE9g7`@CXLzY(tN3Rxwb)&|SshVQs4+{4;9l1C7gm+vr6ejPF3|qw4^Yn*blL={ZUr|~(H#LAy#o(Ff@c5tTUK*} z#$=)61>jkymq+izQYff721yweKS0V$eL?H(JofQ`w$<>>{|8zMq*7u5?xOXU34q4x zL5=DEkP#k;&B*%sTX?uZyN%^x_UWj+3`epJ)>`TO0||GJAE2?dmLyOVgKmItS*!qx z*q}Hjh29;R`9-v%kS-`>Hngyz@LCeTtryNFt z1p);4A!jo(^0yX)mLT=A{(1ZEzlWt02Y)N*UT;uJ1|6>nN|heX4}OE1Bap3!g#5|K z-=fX~ia*gLNl}JxP6~|tt;<2K+w~s;>OCy4^S8_fxug02fBqID36QsrGkG+FI-gI$ zOQc*>I9|$2Kn8%Ygk&q|@Obb_kZu3||KG<4ijkVR|Nid+tz-r{mA_RKRGN3YsDMUv z1VD4qNO1!xLSAHbfl5SB0|BYo3$YD4>mX^;ao zJ3xz^uZh7HIUkS*`IU8*1jzpa9-s+o@R_2CG9YmW0q{|>prbVdzye5#uEkFTWbhFV z$XxGB|2wc;2WtF+J=*EI0OW0mLkoU@9O(mEWatWRz=9^SUt}HyH;q<6O4C`q(9#r~ zW_#;?fcqaFooJ;gBwK?rEVwxbE)8D9?}LP9i7hBQd-Qt2LlIF7W7SyJ4AIEn8p{Sc zAQUtW^s@0b%r|g7;2H+4^x**2bDcjt6hEwBEIH!Q&1xtHN+cqTrQ2Whoqh)?U)Fen zvLVDpXtN2R;Uw@bfFGb9fk$`Y575y@iXR-CA29N_g!6*dNU`1(6=iVz<^Vb@&6Ssd z!GrS?B)wUHIK72GK%;z+mP8;Z#r#i)mYd}qpfe>qe|dDfeeh6r`vIyE|A6u}xH99|Nb2nq;Z+!?7=&geq2U>Xp4t8ko6V$f_yY!!Dx5Ecd&{Rz4ArHk<;F0K= zoS@VqY9b1%!-7=49Rlsb0hJDxCqOs+Kq?y#exF02uCGsTxqwG!7>8%415W4qfKEd0 zJno}-y!kmJe@h@2$b8!?A|UhYmB9VA)=oJF1|Q1<`$2U$xHj|P_dD*}b8v`aHEc%XW~pIi@o0xjL|wiO1OU(W~e0BE=l%>%x8JbS|I3RvAn6raE(U?b_M(c}fy7p#ifMtwrlN|8fy5e7#h5^1xu|0ATK@lk8Hp-( z3nb=>Ds~JcW{4`b2_zJI9--Ie=3=*4%DkcvS>p~Ud28orSihXbX|NmtYs@P+Ym>;Uxd61YDs@QIjnA-LK z{~>olfp*q|PRK~{(1u)+#NTQNDvx_pZ}@aRK(vex`*xReyy)Bh^S@^&8)*EW!?W2P zvUKX^HSky;3x7*JsMZ3n1b-(0s*OQ?4J`=i8{`%lE zW}nUn9-1FKx*0%iD9CUU`m73QU*5^md;ecD-UFHFBmmm8`SSW*(CGlaD_)%2462NM zS9o?FczN+QNQLNP0a1pu?@m1KeEhA=w?OJXKn`nW;%~hJTBZ(OSk1t|(BNTtjlbnP zD3^AA@;La)9yBo2`3ZbBD(3}{gD05NJoxhtyzF3RU_h)7g|sCaAO8OjZpc)C7~QBt z1t|~z|9{aE^6&r4l@B3xJft1~4abA}eW?PTod-P+zT|goepvsK|K0!pphfmJ4?+8; zpMh4@bsm4gDgZjE{0OMS4L$}AbbTjiXO?ewEe9wFT)Jm~PTzFto&Y*5#;3c0!=*EJ zhD&GYf)`SYL37!@3NGED3tYNmXMnZe7ns(yV?Ff0DJt)m;e9w@q$`#yFiPdz}3rx zFA(p7Dkr4&CRjb_zEqEH(Wio-MhB?T#l+t-5!6QR7VYE*HM*GiTMfQ|VvzMAAE-VR z;^1$U|MLI;i(jtyz;!BrivZaCQ0OE*XhaSaoGB^-FWma!*9P#nmV%Q?fB_ZeU^JZw&$o zbe@2vp%!a?28K`k0-gdMofqJOEMj0mCxK7=kq14%OY|8S7!1-p`0EaNSRN|T1Wn-{ zd|}i4fW7$zbMp^I{x*KlU z)oryPx7A0y`~NcK`!QXlrA|?WIsDlCvf9s)7 z|Npy6 z$|rsSH-R*MjT347A-rraSr|U?3%c$|ja(V2PF;xU(i4r3%FgtS`12+-2yM~fD1ndpn|8{mYoOG z@ZtlV83z&oD{X$x>5^xak1ji*4C|No33wQ{m@#~)em*C*0j|aco z@t4QGgF^o#e`^fLFWsz%_&}j=@NyeC?Huy#Jn7N=3F?Yd&5xM*TN^<^)GgY`4eH>j zF!8s7PmJgUDQ$iPb;U0x{uTuu6j$670dqY;jyUKcdBEfQh2{q$FIB#Q?ElZ-vKJge zqKCLa_CvF_FQ}2+ExL>snzd(w)v&UGtabp6YjuFKw*0Xd|6iT~Nr4@K?%o5SK|Epm2Lvp3E`scV#m+&r*h&BT|37Gu))>@a2aOVofs<7M2WVE_1Ki0M2G!Zf zoqQ&+0CIoJnIF_UNo9EX^c*O^fJW|ESMh+txsU@ix(T{$sq@wU|Bic@K;yvR&R-2m zeYJwUR1$RdstBau^Jsp>BB;Pc?|u&ANvjR7rv=s4S2GIN(54&L@5Wa4qBry6X#E`S7>a|NQ^| zoEaKO9 z6hLI@g&#q!N%;QEmiRXye;xGTyx9DZoxe2z#07<@JBZQEyMrC%FHR3j4-WoTW007& z7YBcW&~XoFC(jF$4gdbXKIGG#+u+d+neXTZ&v$rq+bXhv zCQR%Z_*)o3o71~}6+F9Z!FN=2x`GzLPXNt>ya-+dvfOpW%dk73IW^Y~kM7zA(1eHw z=sdYz&^&TDhsSY;51=IN_+J6B5emTqjm#W#UBKwu`4_y_1~j}28pQ{l^3r+Vr_*)C z3!ifg3=Opl7(ly3Jm6#S&>`A@5Bx1J1VKYU2LyaO*?l{Yp;+Y6Evm~3+7kfUMez>4 zsRzDF)wfe0vDkG023~ZS+yVt6bk{?tj*3s`Lr~WC z=(SxP_y4~~uP95@zyCg+z7xQK63+GPKPW(ax_u{jb{_TUb{25_c9b2oa~O2!F-NH^ zXxE1X=(v_n*9D*n&=*gtLFYR_)?|AgXHfwqf|m==A#4Rr6TvMoivvl3VjFD1%ZhXV z|G!Y&0^X_siZs}k1dq;tKAoR@G{3z_Spk}Nt><{@_5kEv29M6;@ZF@!-=Xajsqg>) zzht_K(mv_-PI%dO{r`VNAb0X$jRnvG@|X8sgG?{vc$x4Ll(qhK9)EEv{VS-ng^qf1 zKt??U9RI7?@RUe^3NkOy?$>UP=7;hg%|Au>TdhF+&f^}Pr7K?Co%88GsAmc4T)b5L z1uBd~CwTO-KD_~|5Izhb$1&_{S9tYnk zSbpbk1#PMa&BV7Da)34+I10Fc_G5^g0No5@;nL~a;L{n};nNvA0kme(&;z`Z6|(x( zcfpI#mCygXbh|eAbcc3;R=h%1zWOeJjN3JVMmd{dOMgKX=YCL%0AFm}>3ZPB(=?2@ zei2ys^*{JjNywmX0v{;jfljV)=YtLE-s6G|>Z*W>*lyOVOrRpp;AP?uP?7$Pza<^y z6>z)YA`eV|120T}I*8Q(I{BgjqJJtxzbAYqA{o?vL2jf3fd!BnDXp(TNu!rF=qfA< zZ-E3ryUZ*P@VCT)hWbI(`^&I@{~@Pvfk%2fD?l^TpmAD{ZdNu>5!h|;@;<2E?ycPd z8sC0VXa~CP*>%Osm!Jd$?qSwJS|+!i|Np;B2sHk{1@3>d{`)7w;L$DcQXgzH>w7TQ z;N@!Y)F$r)22f{7jDx>b@&%~xa*UC`h5yC>{~j0rf%Yc6u&4)ZfDK*oQUfH|Et&vQ z?$*>l_0g4)Kk@^*s**!was8U;kfbfBgR+JkOI2YSuOXWZ`d700j&v!MCvU zLg#rv>cR6o!XUYBR&z#B>@awAn;r#+vzdqGG5*#|Pe6H$_0@k7hHnm9Ec~qpK?0rE zK%2{WsxC7EE`}O~SPs;=R zt$#Q{s|#LEd9Qof~f~sl<29N!qmMW;r zo5uhCq=)5C{+7)jKt;=WkLHJeJPy9M_t5;|!Fd8U{&M2w6p%Est^*#HKloc@!QGtW z;C;GaT|bd@9eDZg1BTZ)QQUY7=Eh368--tC=&9vI_E*6tXmB)efP=&N706TI_J=2E zS6$@Tdok<%YQ`}zPW??j3!_I|NrC&Zf}8_Ti~7`xXlIb4sL(>|3CP!FYpC*lP>)K z4_bNAxfQgi!UeX(!neT#T!e*A0G$Ko(;2(q#qLkvK`ZuWcyxo6S{KOpbjL0Lm$u!Z z9Uk4j4K9!di)XhXf9qZj1_mGN01p1v&7fcdO$~N_^EmiG!9(#N=$I7F6P}%nFSmma zPymMuc(shX8R+P^+6A7SM_%mK1>KDN54=?*7R-lDAps0eBhmzpd2xuYM3Xg8z8NMJ#IB}F1c=U?$oD~5b#aW`Vg1uA$ z)UlNI=se~Fs@);0%wN1N0v%HfT7?E$D+E4Mi@)XAga7|u+B^iG7gW0da#w2Tj2H7| zKo)^^h`3GwjcS6+t2vMV|9{!~7?iU>_q}$9s3<^tbw^(O|Nmlk*4O_pYd~Wk%|8xSX#I2R|Nocl;5I9GgBWPfIB50A zaR$(xGN9(MN4F&;CVW@CSSJpO9Y{0PqtlTCbYY5yN3UqxX-F){tY9w%ZA&W=hQ)&G ziWixMpcp_3{ax=t{lE915Cz>o{uAP>mrRfT|KBABa{iH6y%f*(?6h)GkCcf6dv8I zZa+X=ftUTD$mnJ@2XhTxa^DAKp+n%Zz;(rof=Ezd;JV_a6ex;1PkMG@DNr9V@wfZ{ zl@OhWJiuK@{#H;o5OjD`%M4JR&@Fo5C&)H%SCYTA1tex2$id%Q1!8rJHvJG`_~rx} zPRjfU?&mpz2DTiKx|Q6Z`WAd7BdDGNT|3uuwE=jl62zGdEn(~u=FA5IxW`~FR~+`fe-+ypulCxi|<>1|9|-fRQZ6C zT|B6f)XiE14n%>M*5D2Rt1{Tr1~2D;!ls)w1T1Uta>ZRx)Pg!Cpafy@B1RO%ubtu1 z?YjWfrSWL}4@y`ix*olz1}8zO>O+a*3ieW2P~HZeWCcl!t}9*$VnuMhcipq|1Z2eR0~2_}ftkOR?fw7%E139O7Qgua|K-nj z;6??CepZnFbZ`i;Dt-k;r@_l!kk3HZ;nji4yl&QuU>`HQT>A~w8Un50j0d@<7}Ti2 zmU#GETi^fx-waAX?63d-e_8$>R35>HxgqV5gZwR`pdLu)DX;{jQ39D8LT;3Nd`CAvi`~M$Y?e79vG8G&)4h$Y(;}{qi8sPTC5@C-eNDYcsP;;#1?MqN)bQ~<< z2|8^J+yeUH!+8MFZaN80S;s*u+nPb6(TLE$33A~>CjOQq&;S2_c^VY_@bf}Z-3hi# z?lob{et{By=LL_02bjSvvgQ*^FRdY^$|-2{F@wC)%^Lg}5}RK@I=WePzCgH7L0mKg zdT)Rx!4828^gQ^=-beGg2j>r%2M@fw0dB3cYJG#4;PDx+Y7bE3uG_Hrnfy!B<7g@` zfiBU6Pxx&ECmOoA`G6E$4aCfza3*Q6$M=$A>h;b4U|t`{h$NsUwD)~|Nnw{@?Fq*(V!LNhTjbT zzbxJk@+5eRHS(E6!5)ooUV!SP&b<=<{{QdX%JT33fAqtNy4@v?yF!lBKi>M_-~a!h zx)^kptVg#y=on)DmjB?Er-uUQ*tp0D(Ea87Eg2xO-n}0{#)cm8INti=-~a!ht<^84 zciaUpp9PITUjoe^cFzS_?$HZ29CYVJ!(Na(7)oM1x?90g-30<3-K=ilz^M~xuwVdP z6;WdA(cKKb)wg>x=%y0TzD$o!hzR(O(`Jwpy1_pCf61e>RRAbREV|KRxd?5+nLa&mOt@Bc3YKy0BnN6)1#nd2~k$bUUeZwle(t|Nr|1WhVvxR!eXS zfJ8IsCX~(y@YJ*bJib87HUdB~*X_CkY6&Qfpe+;Ogct*gBhZ>^q@^N|{T~hjz25(Q zx*a%tG!J0H7SvqoyveWG zx&U&5cjH3kwMme-5Kx=RdLn*Xu#x2yzRqHFn? zzhxcBLCpslJuOd_p71!{%JC0$7c&Ec;eS`dOQ17R|Ch}2>Fxyydv?1Tcy!MN#f5jT z$O*4rmJ7b!t_rT8Bh*6~Ji5aLKnK-;_Vjr+pJ43n09smCS2VWpUxMcJxeVWphS!oa4#WePrmnPJ|^&@?)<<1pqsRPB|Liff|5Kqdwu4wbCB@q z+#3OoW{|K0Xh(sVg950X>C?G30hAiVJQVl^TcK8TK#N+BZ}$^tKzX$GBn*!jY>ThbL& zRyTnUX72p~a(S;Oi{ZD|i1j>BcRGR+aMWK=uJ9D_w7gjS+@;%7#MAO((Yh_ZH=&s^%=?;Qf{89#FJZQlC#7lipJRW?;>cRM-I{?XrQ$cC}R;YmXk#H4A7Ko_l747u$5upq}uHSsX32=OCU(iSsCGBSs}sS0@{ONd5yodi-Caw z>}AZ)|NpxK6JAdE@&AA4DUXAXSUngoyabi^ zP+qT#fIxQuk7uvQ1<%e-J^R4=)N(~lD6yMYwHD_1YYcq0+ll0aEDsZyZrb6 z*PD;egEue$x z6+F93RKT~qt^fA#e|P8%aB;Pk0klsb-$BBsI|I~yg`RBc(Oo-%UlY_{tzF>L3mPl> z2|E4sg^4eyemw^2mF9r1TebJ;{OJL{-}lANg&!oh=h|rpWOZ@5(_&ftCRrem(ESf)3CeTa8M^i!i}wpo`q^ zKNn%}=rx_Nk%hsd8+0ZnUoF~&28i}&sAGt$;Sxqe^C<(TG4p~ z6iSgVAfe>h3~CoyfVQbfg3`c?j<4X;hf278x-%qRi-GqIgU)Gx32s;Wbguw4-auR0 z^h1CC2i;TT13It&eY8jCF~=ClK@5(uhL>Vr+JjDNMyy=~wG%+?WshD{-*Ze1;Pw%S z|MEGw?F0@N5FZ@pq2QPX-Ne8Fa_pMt5Xa7G0z3AFNYg*)9mT!24Cj~_K&Mi5J9B`l z1A!OILGJ3V762Vi)gAKlKj@;x<|7D!R-%s4D;#rZEy?) zCu2v@#dSWtsS~gsF52tb0ZP~>JbGPcr19q*1aU5aQV~e+5pZ(XbluSUpT7^%2x0T+ z{O;L#-J`d32e<2oS zf=_p82lya;kM7t8(DC&?{4Nh5Cp7P2U|{H+TJ!%u`08l8XOPg=YXsf=Wcq!M2Nn_(RmOQ%A#JN>;XD_n!g2fp$K?5@Fi%~=>Hcp=YbNnvp{zP zsNK3j%U@o*1h@X_D@|G!?!FV6rP9{({992(60EuTOY zOLy%I&|>%!-WT%a;DtLcL0zsFpUNPd%m4mE?sfpX(xvnL3yH&^A@}-<7w37O{eQvL ziaeiM3L5{fVCL1|V3v>sHTTcGt)X|_kVw?Ova5X&O(e05CvtUdtDHvq1YujwpZ{ z(!7fGw+{=9Mh$E}TBXF_NxE5AyT(5YFe7`0*zlFhE56W$JP?zh~g9=a$k8akS z2cn?0JEa;Py|TA&FfqW+livrrnhjJI2n&ObRcCd9s4IEy(Jk8WOa!!U(WBey#a8uy z|9!d(6g)Z)`+^pYrECSQHvR}oAkRP@uhKc7Aa+qfBoeV`pU(G=F<>t_#)58WTKM7r z{|TPmr2-%gUu;3?;2U_+#i18%ng9O3J_kw%$noI`njt^r80y%07Tjq9UDERhd_8I7 zn-$<@L8*XGcc=tf4btr_0je5X9GMsx_}jUezv8Zovq!Isg@cdf4Sw)_ zPM*Ci7M`8X9EJy6Ti@0xboM5I%RmN?ZXPDjP96qu_O?7;`o0@115$RFuwI{Th)LaGbA3CVIebA2 zo92O9t=)S;Hv4otb9l_~?Y!vOeBJ@v0|E6sHi6T4vX@9$_a;yx*E|;nu8loFCouN% zoC7Z?c^>G|9R%7q1Uib(r}J09i?Hd?|R)QfN1dQ{;CgVMcg zZ|#52y>H*rW*|`;zDqK2yL8$`jCXY^to0vhjCw4>B zb%WJ;bRKuqQm_8e~^K$Ag6bO#eBNKD!ReSJs{5X z>~`jG>4uory%l7(PdC`6mtEjH6u|NCft)%){p05I3Y4bK9aEsCE=n}DNEJbs`N#^?hHnwR{bgb5l?dGUJkzyFR6J&*zka(Uj4UH|^W;s?3BbPNUG z&+FLmuKfUkIrWv zy-wnw!;w@OKno}|k9jmd{NQ2vr9{-D@eKoLrEznQ$`5`}#01&sLUyq^5`y<@a*Z|^>HPS=Siq&*Tg9XE z7pPX*2fkVWsXbEa0xA*^`R%X|Xa(GHkIsu8n%7>$m)`vk+WG@3|6upeH2d)UV0dZ& zA2wJlo$&nsi)%F?>sjURfGc8!Ww46auMoZc4z7#Al{={Y+xP}lkN9+Farkr_d31sc zTF-7@0kr7w>8=!T5iIgNK1B2ticLI)$&kiy$FqCq8^s@df1s#o!;bsZ2CBfkG8@vhbPo-EkIwU+ovsp4WiS4*fhsmoXNL7N zXm22>gZ#{+)3w8+7i#_**?eJ4$*}LD%nsntq^L zr{MOZl)0_)AeE4?_3eD&)A`Y(^A;$OeL9hothos2zy@$R3vxeb`QmX`&^?(9AjhMp ze|FGr3~*M1nCAm3%TjN+8p7^6cZ`pH`GpH)qys}5e?IGvZSa6{1SgK!%nS^k2j409 zbZ!MzXrR+qLBm|2I_`xuc##35S_NI&cZ?r=g^XwC`PW(CdIGEkG^zFRD=0Y~0FPGi zF@a7pVFm4Y^R#r8;BQ$1x5@tKv@oShMz}wp#tctoRX(6%%;Bp?Qvr%ZSd^&6?lCG(P#JQWv$f0 zT23qh&j*0R2^8WO<%E+KX#G97(*vqXS`U=)f`(I@EtvRQWcCUc$)P4yHOHfeK_wx-5u+zr_#ing9Xt=^&s1 zLH=z*-~`PM>yUy|WvnRZegM}FSn5Mhm$yKX-RaEnLWGTh;bkhg7KNmnol<8Qz*ilE zPYvnp1!W7*ZeIzH&Z!k(_lF92bozF9fI=6n&Z9H5!K2f60;o_E295E9lZG!SJ3`70 zc%i0I2patXtq=y4V9*Bq^A{8I|NVdY2;7tbo&W3zI`Ulrl&4!)fojcO)(IjEpoTld zeV|MR%~J4O2J+2|TU-nbFK2^|aRH_5Kn`#iNr6UDo2x)qDhYvaHFE+_qqS@W-5j-z z0hE5&!R4R_zw4owZ+?SDuE6?Hnx^x?#Ru+05DPAt!Abgs;%Ct08t*M(u&cqDA3X2@ z3N=t56@Z#Vpg9y!d)A}71Jp6`=mz(#Ji0*}ml!;HSw6hxhm1#A`wQ^5>;RP=&Bq-) zERPqx_33>6aydB0KVqV{IY~J1x4Z@4^W-b= znZM3c0aB#6K#LTQZcmV~GwAef@Fik%L5&ZO-o2po2=Q73l;zkPj$L(I1Vn3LDL+dT}UAR@C$;|F~6Yej2GrspoL@Lkbjv7UQ5XU8ocK4 zKnkPZpfrdYMteYm%hDg3bx72^Mslz{dJEcyw1nL+%Iz1A}kpN6&*V6+nUK(OV?2 z3*>R1Zbt==Zf^<4pe%*}k4|tmHyoOEUM$rESp*gXbwOW7gN=2BEJ=F-N_E{(&VTTb z5~@GeFG2Q)Dbyd3hRKUv*&w4){ZI$i0P_QAIs#MA=>~KQ6{yW~@Dmqniu4O@71h0BE2JwBoV_v@XG;n+yW|YQZLZF3&ib*Vf``Wuqo99De&mL z2T}8KKd7#Q^uN13C02~_z(artM!Bn7B#-sU&1g!jj4|Re~D5x*)z~BQ~#r)o*)Az=U zoh+b|(f7s*cF-z}5+~4IF(tv^JKR!NFqVee@RVeFbhBoi2TjKqfOcuHzX3HMK()P3 z=X(!Oq~beIun z0IBo6$HDgsFDCy5-Tna{O!eqwgtjaAxAlUY=-KR|!olGIDFH#lq8%Nb44@qr9*~U- zE}b7h?RdqzSOLV<$6c=dZ_c*9JwcU#T&AI>_*cRY&-SE;rkSQ;YJO$MfkcJhk7q!8omvs)PLDlKH z12kO(j%nCnZ8G@ULX>V4_*&G)BcLG!aAI(b1NEe!{r}bjrNSQFtUTZZVDY*go?j|B zUY3K$qQUvzqnlOn6e#{JUMBwk|9`@Z*^QtC%K+LU`ojJXC`=)t-^m6K)2&#;)S+Vo zC{RIr7x;FB$%WtbIA{t~6Le1F!50c1wxB>RQGnbA z@lqY!Y6SbY+fm~6L2y6JQQ-BBP>*CU1;^$S3O=3Z!F$p=&v_ht$P8M3-R&g-nr(XO z**OuU5i}dM!4q<5kOye@8no~|1L~C{x>FNC<87cee9PuJcmKa!_wzrpZ=m;3fb&?W zXXjT?{sK){T=r;wV*yHmeJfZPkTcT_(43GH2dKaVZ3cZ&2kO>?lFK_#m#fqDfJZND z7O0Ed=?a>h+yG567eIq9FD8Q4Gk1p~m7m-mu&bV955G{#y8AzE0@y9#uAS#W^Y7O{ zb3~vOjo_wv=U(vGZFiJ}2c)0d9R=&<`aq^ckezzM@POmD!|Ww?p3T2m_`wTTJez-u z@V8ij`$mTu`CDgzvUJ059{v_H&{C*w*7j4N5>(-}EFu7XTW|BX#)B%WZq|S^U}=wD za5nMjoC_M{ej&y1`@dszoeHB5bnv?KnB)Oh!?!-&VEN_;4UWwZ8CgMFs2n*#se-?y z9b_IN_ZuGYZ9U1~(h2GXKneiQmzo zmoJd%dCzV>s6jrRpIkuc1Y+I`*w@GfQP<%13W<69-2i!Q3}!Kk$k!N zHE2;KhsW{bKmPy!?~!~PR9X0R_JSr2JPtl)25mv`==|xSdC^1jzE9^|P%qS@*M!4^ z@wi84FF08(PQClzvD-}nTs-@9KJSfSbnJ{%c;Wp4R8WJ}_;iCcwjS{52Aj;^3R?H* z(GBTFK>B|^oxNbgnLRjQCZGHWDn-G={}98wAxb)#UZz8)lEC2x9t!~-cL5efjEAvi z9)*Pemp_p8&o`m*^aR2O>+5!qc)1xAKQC@q|NH;KEe+HF1iK5gViQ_&dv>yL__m%b zF^5hoI39c{;E{aTvH2lS=S`o^Tc8Tt@S7*-B2re9VgPI=4Uu=2z^uGrr z&Rn`ZBwinf)+eCy4qS$Wd3JsS6(63Re|$Q>gBS613wdzwxxow6pGP}_mz+ArfJPN#UqbJLUU(clDzABm z3FITg121+&f~LnI=^Ns9h{L}Gdv-g3yMWyV9H4ux+Zm?c{SO{y7Y&%h#^Bj`7IYwH zGRr0p#tU};AAs6R9-XHkjoKGXAb$p{fYxeF2c_?71<-i21QTd@7Svcd1S+uGHiPzeLo
;K$?Z1>2#&9pz%46Ue=l3pcKpvX_ z`gwF0OL%lwbAYaWeZd8i0eMXTX60dU{p=v|k_}vHfT~~2@rlKtVia|J0yItsy7d6d z7)~tMBp1+8prGAw-LSEsQh!LljUP4+|-3dp#0_9oh$Lu5>ak~`C?$x!S3{c zjvKsQ2aO*n|7H09|Np@Yb-*hgUMyMg57KF!z2F~m69Jx|;B!RHZ#cT06j~3|C3tjR z_U!!T+4%>S=)U`Qp7rcJ|DwGe6cq}d-Jr8vU-)$Xgk%R-!;{S~7(1O6JZ3;L(;*K~ zcct?dsNVrv*98r5@OU?5BVFkca9)w!2g@rxVJI_L;PwqT&ydtdE(4d=D1Bs5f3f)o zb7>y9=UI!=M^47sN0vQ>)JHx6N@Upk$hKe$5q;z)(1Kr3KNQ?QHlGYC9#OilSo_ER z;L`-b@d|b&_Wtq9umAs(*+1?BonZs6w?X}368py+AA|al$n85)`^WRY!2AE8{&5|0 z|Cl)ewSNpxkC3h)TGJ0c{{~uJ^k6?^UDSmr@aiJp?oSYH#6u=8|Y}OYwO9IfJ}yrE4;9N{p-IY_>uy{lb{a6 zal>yfu7i$n_yj69Ctx)aW+j7?lB?lK-|i9>&_ywh-&#RkIVS!Ve~_D-4>LF3 zpz+NT6%KIwv^R8tZ|4Wc=8ufvZ2lh908Qi1=S`Wz!T?|lnNO!w?18ADvBRN0>w8g-)`J6&n_XhA1 zpKD>@u`lonACYT5o&SPBtrpNAWG~AJ56EC+z>DHy$VeZ!xC70-A3F8_|I54Jo*1aT z)A`R8a`NO!kLG88K;s(SVp$AX3@@rg|NoDOdI>te8e9+9zw`qaw~+c8oJROTg>-kl zf(!pPe+9=2FF_6dm#pCMHoOG6VWQWz;0`0hi?#ls6z&3QtiN~Z1P=zh;1mTdKPi<1 zS4A$}U_lRPXg5s)bwZ~Xf!0*?f@1@;q~iUH)R~}K(uIKmT=s$TLgzL3a*8u9od<(G zIzRh#p7VgLJoD*}6>#bHMO}I3(RrggQ~{c>OQJo%i8`8zfdSkl`pn3{@a-`8B#_(u ztye)QpxapivWOkau{snX-1Fc6QEv-v4VL^oK$D8e*FbG(k6sr62hhPC z&5J>Ty(|KteS)CXYTxQaLG2&UZW|WQP8;ZYwnL@wT{=rA7#@HoqSllAQxAaqPvCyh zM@G;Jw}TJZeLy!Fy@#e(Xvfa8`Md&rT^qPjOVVPt$Nb>MY@j(PMJi3KFI!gr{J5Ty{KJYm1DgiDVdQ)$>fM(e5 z`E){tFTn#!FJB5Gt&elz-{t|&a%te)46(0U!lUy>^8@CWm7qQiyuIkt3Cee%8DO8z zx!~?t=T=Y$3DWCAjqexvg5aF#3X4EUe*+c)V11xb8lP^kNiN;JAah>^f-HpfmtNe? z1NDC*@BVje=tauFOQwP{ume2*x^^A|<=?Z8A _psVODI!o7}*J~cVwt_n$)fr<5 zs5-Oo1ngx4A#y=A0LL+XThM9(Fv>1O7bDuekr^ziw3d29S3Lp|NN~+ zVCA(7UL>o1`tQ+Q3p!1Mf9e7LZ3j9*8|>W`x&tIYTQkAi-T2$*GBPlL%7~*NZQv+B z4s+j24@L%t39$8_&CmaM^oDNu%%9H=ss=&T26zb@Xl$S}c7sQEIS0r$0-(!(AmiKz zzcDa@?kf%a;nMB8#-sBSc#SQ%v-AIjs5f|WQ^2F!O97-$0v7%r-KgjPg3g}@Pm|mR z)jrK{I6$R-=Let8mst$mu`67_=duI`yjTK0gXxHZ2kJ_ZzaU+xD@7pT4fU7dx0i9C z9zRm$3_4H{F`o2d_Tyimb2`v6!BVKXE}(+wl}qQdXjj7nkbWbmH7r*63$&!j1+<41 zG|IvNzCIHYe*7NIrtkAsWz^WftA^~o32VJHKlp#A}9c>1G9=XF=Z1D%J!#m!4q za87gqZF!OVg(7eG?Ij0T5>kJH^n>d#$oQjUCv5zY<3-`tr_kLVFI_qxd34@)>^u-{ z_ze^)u`iE+7Z^C8%$IxxWgdinLu~rN&Vv}y2pX>d+YK2jaP2$_F`)CbNAnv4kIv8? z$hq%^;ei)%8=wAfJy7E1+WLgQ71aLo=&s%2(d)azwetnIGu3(Tg%)U`1M)B@f9qaQ zZs<*g9d{mk7?B)PwUH{h^&^wys6=yW~tVpZPH|BlUnnE6{k ztsTeaKTP~BZlH;V?$iU0Ad?wDY00O%bO&g*3e?{Humw^;Jn#o~D=ff!Y*bYK{Rgd% zY&`(lgI%HUjh(4P{^dEyR2?XuyWOGlNyoo2F!8r;0VT-p@(-Xn2Ve0t zKjLrx#aJTQ{EMyhj7PVdz&8f|(!(C0wUDhROLnDA0B!yOWhui0hL?iDfekv++>IAB zB3XOEqx0~KTe&~~dvuqAwoiC;-f{)4qWb=#_0<3WQIRi?fZ9yp{)cCGod9^(gx`yo zuJ8VPb{_TZPUGz}CJfVg>v7 zWfo|U3B3G&Q4KNe^#(}3g@oYiMW6{=m(J%e=1lzee-|@sh885!HSyp77p=jd-Ul>2 zyBZz^y3C0JI&)hu`G`DB*111W7o{eW3{lbg@zZfqqia4^SFW2SvPZ=SOgSKFnh1yajGN z$AZR!kW)UQJ)Cfnk>SN$7nBK!G^FryL=7*H`^2H{V<*#n5XXU>=4yBn>^|^W&b_HG zz>SvJ!)X%`?mKXSk>SN(XWZ@!aRe<~ZhoVIUP|oH1RZYZdIB;XCkx8_pi=iRXsux9 zkMGAB7(hAf5(5JR=n%WsmEf!vt?>Ogg92!b4a`6Ip1=8dy+`tK$Iic?6V6%{o9}|R zN(pa-#1XR(MjQ!)`zPr2J~)2(Tbe<(G{50+>3jvspPdh~7(6;}f&*a(=%k9?&=Ve= zp%*~)odd309^ybMJeZ|c1NqT?#aX`v@Px|uz?tzL?Q zG9auzMucy|c~Ja2fyNA2`!<1xc_tnLtpfsWG+gTP^#2Qi0LZZt;Pf93nh*ky=t5gZ zD8YWh@Bk=*d|M9*oM&F3rV)5vSHPnil7ex~n>+pR=seW?h#7oLbnAZ54z%V6e_(ms zqx0Tp{(R83E}!1q4W7+s86i!T00EEA&;uUb0UR%8I{o|a(^eD0ZHmgIFkBxSW;gHN`&2r zqz>jICG|hxr0&@ON$MKwAh9Xo2}(~E;PwqPGLhPM1k?K?NU$N&`-uF>f#CH1A=)t}7Q7D-IlTvg>Kssd2TcUQ#*I4fznF0em!k|3bkRDZPWkJHVr}6p}4FeQ)@5x<2sf^nHOG2RjT8 zwEl;*2RxF$cmDS1{NT}R0~)0VP3YP3x2^|8Nw2%ON9RM2&O;v1%@GGZnjd}eusnlp zbHtg_*Nu-Lnf{kz$@aaua;Xm%W0CXk|Xt|$9uj>KN<|iLObBnFF>pVR> z5BM-X_vw7F6Re`QRN%Gbgw9i-on_4jIeZuod4MKh0)BW{9xst;{;6N~*aLL^2fR5o zDDL&>W@>)GuU-RjN?4<;?SwOA&&(OgvkM2_R z4JrI+d*WJH!Q)c*LA}uf{H^_@*cLSOgh% z0uKTEbb=S#lDv;H<1c6}J6NwP=qCB+9?2(sAhW_g-4IK8uOhkk zf}H`>8vr#$kn*WK)LfLBjlrWEX@6wv7tqNiknOasf5Gim)e&@MPg0)dS7`M@_rf@(a_P#1J7BHqaj^Z6O4>mHx&nj218pB7Xpz-R zedP8c#OGM|h`#p)1r6B$xHcfZ+zaXFyeN+T_y5H`SI{^c%H~7sCT#PWADSy9m^?b4 zmhgLYGnDazw)}!bN{E5p+aT@^|6E2C8^qyARsHaxp3bpiKaW ze3QR{7IS-m78Ue*AMof6Z~!luSA9x&h2919(cytDX)cs%pwXZvUR0LdG5Ab)MWdWHs6;$N^#Fg%lTx_X9Qa$OgZ66m%06BJ4TqLqkSn^K1U$Qo6g+ytn{+@quscBE#Uvi^ z0d9E{UT1^Pg?I%XmH?k(0ojcOS%(T;y7t1k5wt3T^~(~_;u`4ke(>s1=&~~Ke!zJw zpkNPW@azWNhf^)_g7?y2(AWrK48jq`Lt)@`Z74fvZh)5Ofs1EIrx(&kfX|nLrk7sf zbmY7Sup|BPI`Sgekx&QntN=UkWePaUJ1{tQ7jiWJW9Dx$2Cao|&t+y{X#K|D@)UG9 z*FQ%7)<}@^x}7DugB5&0+vK17bbAZ9bUUkfbQdVRu=@kr8g}$0Xn_N)-gOq}u2%8v zY*7J~Ki$p>;FC(XkbDIY8&ph^Uu$!DT0d zXSX8ySWbdQ%78v_G;kJm0x>H{At4ZbDe6?hc-xkoQ+?tReQ zL_TY2JqrVT-Vryi^XFCqk8)`(G?H?9S* z|3XP!RcxRH>cHW+1AI{erE@-&Tj$jv+(S67XWRBzVYin(s?=_pmL@gv}y`>i?lZ)3w*DIaM^3`wT@Bu9&YZU{Rz3>9*#qkGtP0klC)4U|{9!$CXIydW7|473ptl)<}$K%&kPpvvY7 zXseGSzgUP0V!x4-0%)uxcLi*d(Lr!+bleqO(L>hYf_7&ecLkqEg1jqjAu}Vx%QfKb zXbubr2VTlY_SX+kUjbSg!;ZF)Sd8kYR-OO<|G%7-4_e>s*&V0=sw_aY1f;%j>6{B{ zUAc6&hJepb0ap$_o!~kvjsF^Ww)cfA8)!BeEC#I)S`WB%gLSxcgY|#ruLCRPZ%O&_ z|Nn%Sap1jKLEuXG4k%nc^VflU6`+8+?#M3|0}mvq3mo~yoD}%Qf)ord;dKlo&_Ih@ zK&v>w2SUMu6BdYbK}+BG1w%W)+xsGz7#Yx933WTvFVGqqe8nGZTm_VeA&r)oZr}g^ zcjVs&>7Rj)(bmno`@i|YU&juJ&`UEUzaEGB6C9aL+hzt&53U{jg1$3eOkreXfI0KmchH_faQ=sy{K7Tz_kWo5uJ7Q@ zaSwljhI#}%IH4ZN%5H^;_j450HS z8;^mSV;-#sT=-pXzU%~_d=4ti90Xop1sx>m0ZIK@pdlI1X@IX3z&q?faSBfSP!B`% z03@F|f;ZhAcU=LRVuED@&|W+KoP%)hg7;^F;uP+2#P&?k)vJ(+LU2>ur`to|rNN*7 z;FB$(4g&421+4-+NEZjOGcYosJE;86|Nk%US%UJWr@+gn;N2;K0x$ExV|IZ8FRy@h z` IHn7!IVdA8kogGEuEcYlCp%3Q+RNvk3JP<`9PYt~ z>^_~L8$3FFcX%Y9@aXhC;L*#geI2xV*7t=+ukQkoy$3ydeJ}WQ`aS@0E_xhy1z&gu zI^(U=bpo_4@tMD_9aQ^x90yYj;90$#gZ!GV4KJ!egZtf~Kj1y-Ql^uKUu?Cw`yV_m z3?6SmI{VH6ylZ?K69dD+cLL4NnD|?~KxwVpnZu_$;RooxDUZ%z4#*tb6Hs@wo3(Sg z2!oHc0)I;Z69a=Q|F$=f`;|fa3LL*3Vdrms1KJVW`h>sbF}StNq5@lS(gHqrrStg< zH;qsKL9MS=(4+{c3B+M|X&>kUrx!g3L0xsoL2vUxr}ldE+6v5ojL$I`-~A67ZrTM> z2|9}QrmNur(1!YMi!6p0pz~opK}|f*=D#c@yr3mt_tnAHlp2DXfSXqS{qNChTAc*i zWOc}+o3(K&c!{~;ffwpJpat2W5M^jRSz6+1_!cw=;?oIfF@pw%LH9~LoG!uucBDtQ z#fvQm{(<|@HK0Cp=kpgO5UcoGR)fZ#I-kDY3#mszXGpL1=yjIx=nU2XnF?AZ73~<~ z*?H8b^Mzw9d>wUnFy47LpYE(5AnnnPF=+aV6~3`Cl}Nu70_}C2-~qa29=xvc7b{Hu{3kW%22J zxAQ-2EwV?iEjK>{!;3WaPavHho%ca^@^v14(dzW#|I2dFdeAZn=rIY9`3Vmq!pWyI zTjQk_q@C~4T?d^X4to9K!LT)JsCRQd1yY$hjn}-H=rH@;A682%f)vSq?r80h}H~eLD|%bUuZg$A{Rmm3$Ml zGuWlmcL~ZUf=4&FKyc~k2X9zG6c3;=dymFnpj~PFExk+(3@*LJjGmpBJ(K@AHvg;V zZ|?!+`d${$dKU)J+yQi*CV1Sx`G7dNa|xjHxP5wSRQNrcpMUV_yzkQ)y5mL0kzfCP zx>j7Cc4AR=ox&#v1@cym`X!@j$k%0lc z73Rg;4WNeaK~P!LQUKENoq>UYg@L~{8N}&!-2g6cK*8qQ`2)OI2ek7I-urYF2zcQI zUP)7XfWf2la6}Y;>nU(4iPB2~@0jjQz2VV`dgP1?=-S!0rO_VUtWTiH0JOCcw64IT z^M_BT>kN-x6G)UCd|?Y(pu*q!3uHX#P^1qYy|o8C4!∾9q|T6i+W690c8t5WB;t zJ9LI;=W*~xD$nj(j+gBJ;p4ENiwSpt=4(8A>p{nUdVm%nUGv~~I^og$lHQHU7&HXZq~#JkOaLDv_HY4o3#>}-X}u&niC=N zjZpr~Nf3S^=vvm!UoM@WUAkSDfP4R!z`aJt<`W7p4hw+l#e4ffZhc`U`uzWkkA`>u z?*ntyMW4gQmBIBH&4Lif={>Y%U+mM zK>M(|&0idV=>qNcdzlSRuOM|3VCr^(IxiqsPlKrhpZnto&K{8Z#i!f0vJb8vbhRHy zeHu(XXpitqkS19EaQuG9r}Mq9p8+rVe*-?%_*x&N<#bH*?td51@Y*Af&U+r+7VynCu`g$XrcDs_ zJ;*%6OD~s#g9N_b+!ww-*R%7lN9TFa6dfc5HogIkXuDwDkNcv2->?6mb@`xN{obSV zpd}?p|NsBL6m-Y71lq(;1m?sK!hPML0-!Jim);(o_xYzDU_8)ziGThf z&I|n8LRU0D`onpl!*zv6uWJLS&VuwPUtC)bD&`M(v>qtw0}Y;l7_G2u&ffyskM0R8 z`9bT)AgAs0MlgCL|8D+WUtZ{eTs4C4HwI;IkIq)m-c1j(E65TyNO|hh8v?2#AARuc zy!hH1Uj9Q?p(9lR{H@^DIkfoS3+luoY5=fXUfkXdssz9~J;7t2K9H#v=!DRV*Ly&f zFL=6!`?gpK{ z0p4fpc&ruF(qQoD6&2bJS{CEFz@yhToSA_EbcR4TYi3_^WWL9vdn+iYp;cEUhY##X zPjDC2!}1uoBKrrg$W&B7D}unm-~*Z5dg%r_c4Lk9UFa=4kNBQLtCJgipy~vY|3T>= zT&IBcSfH)JL)}gRS%Fm24as3CY9RXzT5t3BnSqChSX4YZT@N(>W-Q6^?M_kQX#UN_ z-wL{u0#t4LcD{dc=^&`Qc+T$83F+-@0-XqP$+P*%Z~iHVd|UsQxPUq`{4L=1q2Oi? z=%`glGY7P2+pz)E%;^P{*WIjpyTPTzYgxxVpfc|DELi#E+xnKjMI6*8>8|ByKE(tc zx&Hs+>Q+d>ycb$9w}6g}0Ow9<`HGe&L8oDWju%0y79jPNM|bUk7v`>@HO>b?jy8ul z8nivy6YOZv=@bx0e*|rp13UU8s14K2%Fzuj_+E?g%QJx7*;)q?zX3`#-3H)WXggVC_JBt_;kMV0S$K_1nd9);@0>7 z{~_gX$x%?z!QUzZs#FfVlmwkO0cz*>fWz+PJ@Ao0r5vx@Ji1wX+984`A!YQ^E(muQ zgd5fY;jV^ok9UGS^3n@D_`tfO6C&FSk#%f`$bv=%J-S(=x*%Lxh+^&z2$v7kCjxb& zz|%&Z_g^rj|NH;quLjES1a!URE>MFM)GG)H_UMk6=ytd8>2^2p>0S(KcXa#ffZ7E< z-Tn$5-Q^shJ{6)t67XX7XHa_ttkMIv3I=Hk6D9pa_87sISvS7{pE};u0ZH*i%Am0o z&^}rL50G7u?FhK{*MZjEfg461-G&~W9~#bZcyu!Qbk|F~@W}f2zwsH!?ffm%qClnw zK!>@53P9@(K`Z(^K=%cQo_Jxi6f_JTdcp&Aw&B4N1CUo;Iv@IimKFbV3_PYP?bUon;x(Z-9sC(4w3Q7RJ-MOHXw-3DF+YHL6 zhrvCm)|ud8nz#I|po=p+x>*w;$@aAlr2YX-slGT1I)}IQK#2(W!2Rbhc;`df&EWOo zzTNc#zODaDFQ<9*+Ge*wl0~#4C;}}&%Zy9deLA;;qP5%g3?$s&fmVPUo(%Bmc0JJT zd*X%MM=XI39;bp7BcSmjNHMY-RCs{4cDGIjvB1R$NY$D247JB2efb%R<3or?f^M=Pbk}T`tP#x+hk))$^XO(Rgu3e{q!>_YfykbMa3{AyxS-7&9^I@p zphBY8RHYHN@p-Z&XiN$`9so%X;4@Mni@FgfBZ2O(kZ69+4qA@}I`(8Ps00Of0YLlH zza3^QtphjxLHpr7x>={Sf(jdp*Ahtm;oGIb9^I@dAp5()mvm@@hSWMkPrSIW5Y%b{ zb&gBKJs{1a5~fOQP_0i_?mSD z&QuH7yqBOu!6$?|f({G-kDqvgiZf8l6}A=wG%D-S?Fu>*6x0raZbd}yDuND`Y5vK~ z-(t%QI(z)AtKn@&@MY+r{gIxXHyxWFvh%mh0M)_ZF|uu-St@Ywm#~4hQ!?_m?q-2* zu+#$2F0%@QU1tCGe2Y>4|}pcxp@5{N+1Og*#<%-`b7%)ns7&EK+_ zm4N|eQsxrKhUCMbVd~T1Q`k#4KrRXZ&su>dFCbI&p2s0Hq`~aE!!!91bZi{dKmyOs z^|~&Ajh}<2m>?>_GZa3Z;D(_~XXpf%&e$p75$>6w>#tF_X*~wbT4Ono#(}}3^)~n% zsuoDFgU3Wb>CB_Mm;9p;Xu09j?H~Zs2Rc8d zwH?$$0UZ>y4aDeXRRjTTU`DFxas3w={xfK7X$Gk%u`!10C8D6A!zWeV2yI}#mE(|o|1Ubr`zoh^M>^0&zTgIr&G z9+aF>4@9nH1s#zdE8q+2O@fc+hV+$uI-k3AUc@*Q=%vnU(9n|u10-Bs4d1>z3Ocb0 zzW%|n^MXs~Mer#>;Au@4*n&0iY&# z)@V>jww^4J1C520NO&~=7AX;OH9YX`Fe87~f9X8PN z7jU`5!wfBV9y3A9ol}rBI=dcHDu%=QQ`HJId1*auEnLq4_}i!!O!<{(*uFw7k^?vKJaOC(sSf(Y~#3 zJvv)KTX6YX@LtjyyRES`hdE)Wi68lpQrIL9Hltg?33nJ(-rN;IaO_5Ubunb0u`%{l$te z&;CO%oN$3;La4L(z&pn@1QLg~@XgkpxKUXuy_X_2F>59 z_8)YT7f41PG|p8BO?NkcfYw;aL;B|)-K>#daf_F|zd-4+oAqHO$iEgZYoYv~Q2AUa ze`OU!J{H8s%->a)vE^^p-~a!=lm@#6oX-sZdtfbEZMK8b9{6xAXhMLFl0XxQ2k6E@ zCxMp@pz;E|UGHVh@BjZD!DGlT3qcnlcIPetrI}Vn(2R8qcp@8mC$S8Fs~Bisa(5ZW zOWt4q|G#)Ah0+~FT5k#(7zTIL&Or7XdVr31MQh47a!MG9Bxd2^Z$KNs)G_2lyl%x4Iqfc+`0f-TxeNo^&>r#mEJj{I^p#2JOI6zxP zx=UC1bbfaQ_wGD9+d%Q)(Z~r}5!QM0f9Zl33g19o+5ezTrll325hIi$wiHxkU`)Dz zZg*e7&fhu()KCVU3JzL;3TppC5)F7<@x}E;;L(v*(CIFo-L4EEFWB&u_`_Gpf^>uY zJ;L$7c$;0v@e>2GYKHU`_p1tlIo|Z@XTS1BUg~Jk10J-k)>~!Y< z8R>Ye4Lo=Tw)Eu<(7M109?i8YSomAOn+Th0SBUVpD1yfFT~{#jxBdiOuU@-?r$o!6 zoAop_)kDS{DmY$(MzKA*8DMkm;ImO*&jFpE2UV#68voj}7~%%dHK=`{*#VE_&!Clr z&A;pU+d;GO9=&1U%|p<%0%~|RK7w4aa?t~HQ3}poM5>TYL`OhXAZT2Z9()NpqRXS3b$7W4gKOtckM7VFp!WSoM&HgCpvxmI zK!?1%_zPMP+j;zj>H^SlbgaifPUtoD>x1>$?s7l<|H4BYG#yoaQ_W$ERo|y zQ`yu1;IXP_o%g@rkUR+vKWQxKs-9?ID4?|Bt(Zu5MuPINl1nLIG6Zd2};)bhiEgC6n&C z5DK(bV=lN4-|2e8quUv>yb*Lh4rps9=!W#d2oK8w3H}zyX1l!t|NsB*41MyVfg7@) z4^*tEfZW>M3pS<~Y@0`?ql8CyE6DZma%35(6zXmTdBvmK0=82a)Sraxxh*a5fXR9& zfKFibNIu^A3%qHv*ZuB)m+n@O|2?|FVX`lgmx190s2%Ll2@V0!x!oR6H$W^0g$v5= zNB&mu`5@hp=mpL5b@zf@1Kp(Ad{6+imko431lZ+};5q@iNBM!gNAnL>e(>4x9^I_j zr6LUAjqsoV+6wX|NNx8H(4^ywXpzUHv7Fe{eJ!= z6#_`(H;#~5YV>J3$L}{>CBZwrHH#q$Rgw>qEghSmGy8UaaP9mF8T^2Ze1JCGfO3oS zd(fsbq^h-GVdL7o7g8R60G2Rl?o5-~mmIflfR%qnqCMAq;{UW|GT{fJV1MInnAk@j2)Ygu()@(qk9T?a0#?S7(AckVO_+*-^vSeR=1M?cz6&rxCB~n<^vvF`UGkMcKZwXbc4!0 z4*_sLj+GI#tAexnA%DY9cK()cpcc(fZvGa~c(!Nq5$Isjf1l1$&U&?-P) z4^TLP>V|iq+6H_y!$Y6WPmbVv*D=7O^B#B>;erTfaYs%f;)z;pe^|<;AOR?rXJ7=2^7xE;Nu$PJ(_<>mmL3gM4;r*K1CkT zElc-b=okO}zt0hD`r+5BUtHjY)W4wi4rrVgbalXQkKWJ+;LX$B^(gbVAlLP;`UN`P z$J?X3^a1El6DQCKH_$FGcL`|b0o5l$;4P?&Y7lOQZ|AWKRF&tcW!wv<8tmnw^ z=ynC&*)gHhcZpA@?+TAj*AC>+K4EwOblFxZmq#~iIyisQLR0bP*Y-0S_{#)Cx3T;9TI*8wy$0TOsk{%?fZ734-RC zK{tqVfR1#Y&Ip>Axc6EvZ34)sjI^i!eY%Sad@Mhga6`koBo(y9#Z3aV7z`|Q9DEV_ zT(EKct)Q{C^e68XXkHu4l1a+!P@w@F|0`7Z@v2O z|NrBzpz}u=z}j0tCpa}f;BS7xYQx0ewh~+zK7X-o*028_y|(eDptaV=3=h0;ef$J; zd^c#p3ja2S4%dd}2mJgkhe0FbEc~rS2zx+XtqP78uF{`CD~v(oA}t{ZS&!}tg%^>t zK&y)0gYNbM`MTR70&T1NPsFM1qOx^7SR3jU?ZxTKwTQ&hVHE(7x;9( zH$33cD|$kih2cf?gD3xAegrLo0=Gv!8~=bu;Q7m9JsbZxf}*cg3+gL_IbdIHG=cfb zTk`Jzm!M;r5iJ^!i(n-Pe~S!QC+Ifu7oVs7`~Q*$(o_WPC+lrd0WD?#kKeVQ`1}9= z>pA@L4v=*a-~arFB!t$t;BFweU5=EM_*<|3`Tzghkp})2(ESgfJiuZK&rUyo{r~@R z3s@tl{45o4>HPoVODt$zz3YmXM$qx!-p~Ucov|x?Iv@LXe(~(Q4qAmT;nVpGl)uWC zf-)VXeDG+lJ;1=<0y-bev-6HeH%QC#7pk+tL2=C(78DK=cmKas0-FuaRq%5rnfY5m zR(f>XUQ7X9@%^8_1*8nLCFj|TKDi&DRrD*R;wYi>9yEA22{ep7!M8g_MZgzye48|AZXV);mzD5w zc~C)EvIA5ImTdBb7J#k)fBpXtvZTZc6ttX4PyZix1x=_iyaesg1E&+1z#s7V95{=B zE?9r*1*#<7*+E@Rhz@6vGka~r@);Rk@&tXdJ zY2Z+Jy$(9>0QNt4Lx4xGX#FivpT_ih8WRI37{YvdO_$d(F*t_$^y)^mGBP-Z`1Gn; z*)cH$dvwb-rGmU`{X%Nf{r?`_)}T@vvORJPd1C7{NzqkulVGWc0X9 zH3o(k22huPwl{e6iZ-f)4cjr7k>Q0XL<+X~!J}7HS%ZP$#XpEaFjM?hz&d0nGcvq* z43YBbd6bkLq@e=QTk3qe$=OQm3`T#(ea4WNL4d$S!Pl?jr% zjVfgWkxBze9YB?us04OhDoAQ6s+1Z;Dh?#o1(uSH21gIG2Xq9$Wb^(1Na6Jq6gHj5 zU;G6thO6QOtAcD0@#q!J2N~OW{Ka)tRWCN({|^g*nnZAA3~EMf1gnzeN)}-NkEnWd zTfbNfuAr@!LyobYoj)AoKt{(lKV*J61zP@s(>EwFgVz&+?p$tuW8u+Rx&lkvjlbmx zXimNJk7wsq!`m+=#)1|`x*qWD1YL2v19Zw*i!^8@U*~tv?t0Lw*&RNe?_Qjm4=Joc z`+t18eIa+tfcjaU-Hrl?s%SIlPAGQ%7SN?lp51{0{M(p7Jp@+%mX{zIwo*RNZb_eR zFAk4`uLYVPGq>I@)eWTS52S`*fc7>Ga+4f+_Off6%oZj~sWfF)%O$ zfL73e&bj$tC;@7axEh{(q5l=s#bOOe7GVIbeTNlI{H>sS+0fcIM?lRX)V>#}T=VHX zXLt!b-}FN9F=(4DcsUBM2Xvc$>nhNOk8j7=`CCAznSg2)aBaJ^3$%I$w7&wfMv1=_ zw2<%h)d`;6lAtU4e7ds~pk8~q7*Z)i#)Evpw>Flp0Qu|`cv*w*ju*#4^})9z><}*| zD0p-pF69JQDrZ6MX3%!v&SDPG{5*fF>i_@$L38viG9U)(R5NJs5wuvwqZ8D102P~{ z!(M0Jcm_J`6=J_wywOXaXqF07bC}=wx2d6@<{ZX6J8Z1I;mALmB__1og~ISG_y{3Wf=gw(<+s8=xsl z-yJXI|AVHQLG1{n$raG$=cOw^KJn>QT%CFJ*4_Z$FW>wI)LFXmB4^q!(5|l%eb5H%&ciSMNP^}+ZuxY+_v}34(Ru7e zG@sl0=x3qi(}wfKxdGy10Wqf zofRCQ`2p}b|A>VEhmpq5V0HRc$B^$OWc@%Wh6YKVP zP|AX3%Ti%bmG0AtIJOpijtO{aj41dBz0?P&vfy^9g8-;L--ukFcfy)8J2*iD+?`Jm zz47KZptHP8!2NuW&e9i#-#T5Nc=Uo!x_bsXp0D#)fMdvuZy@WsS;gZ~3yxAn)XuX! zyz>kn-vFoI`!7=8|NsB`(u;k6?;u}pf;dkN>Ofb+1E8`w1e|0#L5t}?CmtfZ&I2?D z(Cc~uY;NcU4~YB1Anq%VBiDUL-+|pHhv7bO`wY4N4_T}RNzULs!!KrL{R8!l!2QWu zaQNPTadq|m|In+qI*)FoWEEdB0&xD1Ene+y|RU+ zj0~WBw2upF(&}zd24R(fs402wVd;9JBok~Ic&Ze3^CLLNAD#f}YcYVT24?UP#RUSM z-6bjlp#8RsGXFuH1n#vxzWf*5)CY}ffut{I{`>F3zs*6xvH1b}OHXhy15Qt@E91bu z>5^{H>6-klji9?}L1)H*x^D2|k%=F?Jpj~gj*R~I-@}?UD^`Sozcm^$}oGTp)|5eY5|b4p-E;r91WVEfm= zgHoW_q~^ zyvAtMR9~_I#k^8CkXhjT0;=U=U*3F;w0;93{^IEC|Nmc>g5!#{F-C-;^OQ%g=?+!c z{`_h0p8S8o`0LJp$o$_fNQ>HZe-WsEU|Zk-=^uc%u{Xcrc%i=b{(r+u9=)c1XF!dA z+nPp3h8IFG!J8++f)0613@`q!fvOCF2+Dy3U#z+RA7(|)(3@) z`g(28fW&ve4Dmk!HhC{daPb;YB9Yw_j_7L`ECV^$bca1C-mPC0E(NK8H^Pk;gJoCP zGcmjfLzODO337yKI!Nj^SV}sJVIOELDFZ}+qXks5f(I8t3;a88y*T_DbYh6^lSoix zgBC47`+@we8^JkKH7G)a0jvS8eIFy}RHSYhl`Mt~5EFb}@%$wDRupI%jsMgRZ5n7jn!JJ}^sA`CvAkDv-oHy1+uUJ91AMv_?y z(R*ge|Nk$-F=QtdGBLbxzz}YSXqpF-RRYVhI!A#rmu&^eqF&kLZqNy<1}~QOBDx5k z7r>5fFJNQtm3Z9axO@e6T13sJ9L-OhCsCI6z_>H2N_6#sB{=Z9xqm ze$e_waGZg}n?d3kAaUdd5p=$>*S5X@l1Grb9UdrM4v%hD2T-}xZSbO^=l*}6Zr#oh zP{DHCv(uH~#n({K@Tn`q3igs*@HYRJYF-8g&>g}2EvtDM7(mNW6nP=H%-#jbbh9c& zf)=!^8i#}06tX^G!(3;8_Sb}qFn|&dXpgc-H>*@A$QoDBOhbPdn7QF~0KEPNFGI@* zjqi6?aCmgHo{0b}0hyx+G8ude1?x4C>D{u=gTYoFfEWWZ(H6qo;L&S3uZfZ2#oI;q z|9f`V!n^;zCg7a42GqkYTmg{-M`y@7aCG|TGcmk~fJ%UKi$||$1VqjiBxkb%lx$e9 z27`QQ@#1a?$c$3Zz=LHz6N4vc1orrg>8*eNdmd+(0iOr(|Aobp`~P=>lEOalfsVbR z+rNU20y_rkwE8Rr^^3p5MlWRd|NXyj0cbypF{%WM76Ze+g&+y3h4=r1hN-{rTLMZ+ zy`nq!{r&%f1*#lUQi__M`}=<%=#q&SuNR|Gy}K8Umi==@q@Y7aY8= z1(_ILWTHx~f=KNFN%<|f{~s078aF<96C7v1jf{(ByG1Jz0l zpvt-0{oQ|`&i^kyZ+Z3~v~LR(F}=3ibD0=?IxRf9S))NIqTArb#TAi`PZY@wm6rG;ln>a_2P8KWA*TnD69z|%Z7N8v79l6pb@%^^-0crx)G6A07u^*zvc{;{*-CxY#p-*5Y||v-0^vT5?K0y{6K+ zOblrgz^(>`%i~5+al`t?53Hi(IViEcZvyocYj=2bhb{p1edPaxt=Rw?c7j=D@sb9-RW7-Qfv7of!fi zodFV{b5#v5c{D22Lz;H?f(-s=52_ki zt9(Qm3=gC^f~u{3M?nVIs6Z9HSaV&|ez7vo|EnoaO z4Dyxl3{=r)U{PyV!%Mr^L3g#-fWpSLGnDVenZwY4fs4P`2~&J~7pRul*9B1=EAV1I zOfg*iMGr)=;elO(AcO5dY8^XWm0lFX)WXGIB*4`Qfz*O-d;ldol^5!D`&gO%DFp4`O?3Xp{m zgM6i4n1Lni5W+81KxV*Ifz}H`&EN*PEL_xW-8ma}v0ZYHggouFhgc#TcE(Qirp3r&W50kmHOB^KA3NbBI?}aH?#@^NN z_AXEbvu`0pPprWUX^4#BfnA^)bl*mhgkz_x(F-Ps%ecKo7z_`9*K&el&;;Z#DUib+ z9RRu9+VH?GX^>rNAiEqpUCmycgiC-LoclogLqIw$UTiq<_rKwRUHl;Bpj!_>qH>@G z@SyBB8LI2jKG1EZp!m1iB@42r>HsL*ZB)QKu;hz$u#g>+NGMo0>oOk^2E&uPfb?!NKnh+w0B`(bW%LGhaS`Jg{H^TZopm-UFY;{P{Ree5UOZg|Y7HU{ zS@XA6U`#N)tPf#;wP!&4pFxfVow?L)@v`?bXxQ6@f#Jn#KG0as@t1qQgG3l!+~xzd zBV8A~^!N_C-}=RA82`dIFn>3U9}DJtbhC1T%msUxPe_T5n}oT@Zv?*Y^XUN-K+;75-U8qS-(OYv*G1t(4y>a)~6tT zw`>{21V}u(Zh)Aei7=rKVS+Kp&Q8|}FAG2Y|Np}D#U04{Tkv=nXv`JVF$FCicSPIF z?9%Ca2Gn?x_JA~=xF6s74_f)!c^}j;&b)W5@_X{tY>$*0I2SUz!hlhB&6H-jN=YarR~vq>xDOH&bpg5#{)G{mTZS; zcyas2|NpO7!TYzMq0b%Vzy3RhL$|_%4FhEYkIrKrpzAk}y!dewJZ&cFfjZ8{-vVAR z0zS(dbPONDfiKH$z|sjQC@Mfl_il4gXnw$M!&D-B-1Q8|u{O;7EucHoz=;Cx9$4^w z35Eur^*&JWmGU2VJp*#p%fp~)71zN|iz99DpY3-txD0FfuTJu15x+N7$YRnjM6$Qz;SvE&Y28wTr#vCTNo# zXg!=qH&eIo9_T(h%M+z4Xfu}G7zN5<(0a7%KArD8IzuV}ZQrqo7XEj6p;|7^a;|I6Ep&6 zN>Eo4vJvh*0|P^M=pIncZa&KR;_jdS|6MKL)L%dg!7HFKgXSX|h&&BlPxGSM`zg4L zI{fG7e^3#DI-?9)gW%D8M8l)k_7DRoLm~`#d2#oX{}VjAtzJm%z6&beAmeyG|NsAY zHT>q&n;`JoHf@5(!593^59&QFkMV;~Qu671;ML6nIa?6q7ah1?O4MQgIL7!w6m&3u zH~Y6E3Z;8}t;+@Yd$qw4>#p$nfJb*J=rp_+fw@orzp#0PG6M%0&j*$NkTp(@oqs$! zuLpZ{UIwjjdcijlG*|_?4;9?i1dUl}gVIOy5e^UN*@>~p7j7WUe_}On-vqdMpn3pg z-fhr?GZE&6K=x4zcyzN$xPYopi`LsEpyOUVIzNFO*Lm+n|KI=rK_@&(c{Cpp@JRmc z)A&7uO51&M?1Qvy|O4vvtj&EU?R|KKV#T)?CG*8$LRZ$SZ| z!jIFVJ4m3}im^oD#TvhV|M|BCC^SF%(0q!iBR~OU7`QVIHqoQg^~H-B>p?9;*B2h$ z7O&4Co#g|X??S0>p%W$+owaK`I!hOT4wOX87~c+oGsdM-36E~p1Ut~sx@jQ~Y+C03 z70@b9CeUG`kQ~BXdINNxCg{HS?$|Xx-K7h_K?B+k>C^eC^WKYG(88JI!>tGS`#?Jb zJbPJ=`F4HxRNttB*3Lkc_Jfs{ za6>ICot!oSrt2oi58w*pMP$ZP#QF@7uxIm8ju**&_y2>NsGuRB&U+r6$2~g_yqJ3f zRN%R80B`yPZMbZ%UBk%V0y-lPEysg}l55v^beAshXg*?rlyP?~hTMlIVGl_s9Je6p zr1LOn^N&aK4{%a(2mrNzI6({Qnk^Vh9A7m0fR=b30?ny5Klspmf~&(x0i04m$F(3% zom4`#?XX9;>jIB%hSxV=1gr(6BkR{&U$ou31M)KJc}L*+ae>zVCC;9mUpzXmgMIG- zj^?&skc=P+N}Wg<;oYLUP;;>50}DHd|1@qw{MU^qA1v`k$_I?t^TC8QAooM_0d$-a zp8jF^8Oi;iRuRPg$3W{Ue>0Y#yI&8l`zvfA?$5YE*!@quklfFV-TfC-+v%9U>9@)T4!ciwwp{{xbY(96^1 z3-FewAFLt%cyNudKVm$Q;sHlG@>qow4`}5nxP2Q2*_r`cngN=yhb+?vtrjsn@Z!4Z z)Bhfgzd_poe7kd03iziS@M!!En!4qma){#se=F!rKaa-W;N|5lh2Y+6t%OG}=t|am zFMgJT3NZc_N$|XF=?QR~hzG1FOaRo9YWdFq+C>FkzsJts0yps^@F@ri2^Z z414~f5H!~XY0RaWfTr_mLA&x^a8-c@wZW_8{4apI`ff<81i?GPJMX_Zn)U1dzCh4? zPN(Yy(5dbvW}tKFcYz`b)P+$!2`=YuAZ<`M0cpZ0KnpU^G$v^MUF(yQqu|VsSjD{+ zw2FHJcoz@ItW5jA|Mw+wgDyll@_HsT-+FX|*MyabgUUBhLB|Ix{P|l!7tDg%Z3+fCI;pte2(I85HZxO*COtOKZN+H;uozqk@~AI*}-jPaD5IdPY`>aI9{yC0JZn-gEuXCbRK(o z1H23#(w>B=hqp*U4IR)DDC7jw`oGTJBl*8)=Qp3;)C)enI{%RRXKX&5&p|hRzgUHimfH&9w@i1kuWL3@(UgSIgKa}0%c*{?v4AeLx;20woc zbe<&W=pFu+!=O804>R(&&I0Z6`_04OauAe2x>MuqbE& z=QGfL&lk<0g}vRbu!H`<_ieg>4jlp=Ve1$Unz9L)2U^bt>UcoYoMSvF)q&#)e*Rc* z>J1mriIAWkvrp$igvytR$DsS)Ou<&a2A@CX(apNk0?dC|0N#Js&6;Tj;e!rK0gcYw zG>7m(r=LLfYlVQ8>U)5Dx}a--_H9U-3Bl2+rI-ZMzr?n zb$tO&kpe)9k2R8G)+GvM+m+%e3jxBQ<+^Ls{6Nd-DOP{OBM4Xv#Qx?J6(^*?_fD26;i zt+Lt!ukE4v4|Enje~TEX$Jx!QZzjU<&B2P1zZJBu*vIlQ|NH|j2TCG5I%5xbcHZ&q zb^8x$h=qD~9`o#u2lYCa-?ScwRVb$EX9=)BSV0CXx2Q)$0X=L0Ca zL;RK!9Hc;Z}kH&2Lq*=7c-8(g}4lS zkUFG&3i8@y_$C+D641piEG4}!L1h!D-R;rM3P~pn9@fqrC7?U|njgr&z6o+i=_lXT zCnaw^yG2x*AAvTuu$G9zjbh<%N&f%;|I2frvyrS_R5(gO4cN6NV0W>UUWX1Vm2CM5 zbyG2@?|bzMw7devKdfx(yawu2d33YpgLNBllq!O@(D8r^s+X5Q`%or;*x*JY=y(Uv zc&GJD(6tTV!pzn1rN3r)XXg575o5X^yq(!s03}i1@AIN{8%MeIO-_t;gw4v$S7$tqjff7?U zt3TMSp!Dqvs&g$L*MvcnUr8)lnm!KNjotbVRFr`ZfCJrty$e(+!V8F(26O>f=TR`j4 zk&+Vl0w|Pp?hmT_x>;k5K(S-R#NTR%Naq`lfYW(L7)Yo)^}x&T|3G8jkn$9sulQTJ zLGp;awE^O`ub>f`)+hWeZ$LYayP)9=$|r~6E`sHggD;PRjRvhNXWa-Y&bq<*gug`u z>^^2tUbza*M;i^nZe`(bg)Gqo=gE?d;Pl@CIzaCw$Wt#aUA*%@4O|{$q{V!&2}Y>t ze-kJzVoCqgu%~~}M9s^0prfdWO#cQTR~w;$!;P}K$|5NeUTL!WhtPiz40b94+ zdEKM=je?BIhT(y4#}pvvF?k$(#qZJiu=!EFW9L=yIXk^h;;J7&$5P@v z)5k;e2>4hZ@ImF^1ASan_&s{d1w27V0f7eMK<9_}bRLA)u`jsx|NoD2&jEicsD%q! zTMn&!V-F*O(4)Itz$5vXW9L^7%VYel_n7YfZ~O;t-}ZHaGt4K$Z!g5p-~I1#+yOLe z3t7VFdg4X06=-U|^n_2afAnh(! zfCXvGTJWyX;~t$CU&J22^WU@cz{^?S>;l?1+I&plC1?N_n!iBpAdV2w8YZ@vpyl0= z`!d)zJ^TOS;5pd(S^}K_`elzn$7VJk;P7ldz=4n}ebRZ$2h{Dk z{-S;lI4L4-e=lVN<-3!IUo1TftuImY6R4$x-Z%&Cs^@Rn0qTE&hCP12_^JN%KlV-D z{H>sK(qa3CThhRK?)miQUH~)6tw^7xd)#8NB_e>Ljm7CAv>Wyf_Fka1MPY;QvuBe60`p()D?8VA>w>x@GdN9 z#}IwNF&pTHYS2O6pc|?|mUdSPc(nd6k?`q!=F;gq=S93bXm;0k4)}2QSdz_gljb8Vqpe@ae4G06Q;{U(KFlcK*+GCg@qO@4)9Au&xKC_HN40|B3hw8c@SL|HmBEYzCkIqYGkz z&b9f@z`y`H|3?PYfCiuc1KN-3iGKbMNIm~H`1wDe19uug=l|G(&EWuTpKX4~?9u#_ z5z=a)^O-<)O`viSS%!m0}Q}-`9RvM&~t&B!Ie08^V|=8 z(DW=M|AJ3Ce)z%_GFFd#K9DH~NQ4|bjyDEYf|g3bv7mH9}A1Su~DrTdqlZYtPb z?B@i<+M}Nn1U`tVWCi~=PLJ-Xpdk(DSxl|9pl167kM05ikH$LiG1UAmATf{TpG^EM zC7^aW=qU8oOmK->pa9zLS_(Oix((b?1E2ft+5AI=zXf#F3go6|kPR=M>%9XVcne~C zKrUwoE%R@c2W>`$l>DIcULDmTK?yo{7SW&YW@S`?h#NxoSFzrN@)e0jMShojd0Nx!ghs zbUqE}d{Wf&&^$WtyL7(t=xhTON}&EZyQ*fQ12tLtF)~E9@ z$T?zA=dgjD!{E_517rngC#VnTRJcz*o$sPSd#+<(dx?8N9c4u88Zkc#I_LhIn*w7g zpGT*wz{!^_RgiXV7DK=b4M$K?0u2Bl)qkM%IpF!i&fgx5Z$Rr8k^2?Ulgi3eAiTOH2+{O zF>`46&r_1`@a;HwO7efHpGUX5LU({f^Did;7SO~ue>4^euG?X%*5Zq1TwMtfQOIe3;t%%Ik29+ZXBS4ufcWSPtQ(Q4iCs7 z;m~9BeLA0mYOY5NEDVr-4d^0z(3pg0CmX+}YeO3U`vd%%uAu5{fz$>@&^`5_?HnK) zw4;;Zg+}?m|Gu5296q31Upt?BB%c74ORk0|J)2K3c5h$+IVd?mB&>VG3kC)T&1+%c zO_ZRl<8 z&@HMjK^G3b$iDs;{UCOWe}DhKID8N_zr)irBr$t*?ggb*ENOa?A|y>u+5@V6Q4_P^ z1f1!3GN|fB#CXeXP^dNkVCHXOU}9hZrDgt>dPW8YP+k;;8T&w43(}r}_n(Q*Urut6{AILrG=DMr zc4E(8qQA+`Ur~iL&R>$3(DGM?CQ|-d?SVUg*W!ijm>P-nE$dOR^Y8 z{@QQ>BY)L?|NH+1$8PNT%d_*FW2j?@W9J{xY1p6zL|Ce?$5N2&b$Kf&dujM~*9v%c z`zw57WGWTr2i>dS_`?Hyp6|hL3``{-Ji03(?Xb_FiU_IxQU>wC^_K^{{yGn@zqW#8 zLG@Q2h=Ejpc}Re}3!rlj`P)JF3$>o)Z~YG{M6uUjpfV1<{)z@Qj6k(Bxc&kivW;jj z_;$N<_;em{{MHI;k}~nP1cPd<^*v23>Ne1svCwNhU@a*h$h9z_ z1{L%)SazUN1xu9AJ+!}rFk$eJr?}tzKR*=sPJ9B_)Iz(d& z)bv8G_eup2?X7#@_7=3-3-EwkZ~3C>93)$!%_(()!XCV4{5`lG2JMo74j$T|`v3on z-!7n0s^e(7K%@GgK@@Oz^%F7=;J=ld*%7fc19910qChp$!RZ#@m_S)x|I z$TcKrR1l+vtbkO0kopOSPPmGJ!g-luae z=>8WM$SpHI(5qy<^TD}U*%OoyyTKD|E|3PVPd8Zo%RErsdF2c!Z})-|so^)!nA)Px zfB(PG-HtLq1nHl>+AK;?M5xwMW1nu{1E37x+xY@~Hvwo#g5iJ1{h$j1{$GIPgCB^D16s!mT3-V0 zzjiT!IxEjQLsz_5VD#^QcjyZ6=;a~)mYtxq3t76#-?9e0WQzf`oq?UdWgh6rHSUrm z$8YW66vE#E>PKR8hEHec2JnvC{};Ml_xN=CZa{XVPv`$mR{@X%5w3f=vmU$|1d?8S zI8L+xgNJblUqvpU(dQ zSt>yu-Qc)>@w63mBkK_b!~bAMH~&!a>^$z<`2rM*4*XM(!-Mhvg_nCkhg87Fv$|Og zg+Q?cPfA82kffxv9%oW|egYE7{4GJCCUrOKJ3){U7B8zHMuYp?tc;={LAbfMgdygh zS_d%~ymi*66E%_c!cG1G9z9~+BLXtS;-vz3!VPr4<9|>Tya>q#9f%gX0hFFW`x6`+ z`oS>=%G>{69DDy4ltm%#utfD=5Y!z`Fn55?6+m|fE8HCg5O;im`fvugxeuNvPZS0@ z4eY;{6@Ng(HxTEE!ZPMT(18KYo6q#8JFV6n{|NkWN3VKj^;?d1o zD*!RO^*{-)2Wtfr0|Rvb0cgDiC~x)%K|-@;Ehsb@Jh~k~N5q$~cz{kf2WtQ=y@HfS z9^I_5U^g*%bT>4xfXssTPr&x|vMzlr%y1Z#&Y=8IWd06NXBcWfSU%aE!=w2CqsPGq ztjKPM>+cR%0PXkhED|^jR^QEf7a9lM4IV5E49DG}Q^)LJd1Nyn>gzdPI6A89=c zXuTd}F2g6eoCCDF$=B8J$!mq?A55h}(9B=L`C@I!v;Q8QpvwCQqp#(&5)Gfu#~ueC zvwAYeGITRH|6nXV2U6_We1!2uBUG)g<+IWop53(qFY-%3JM3#EJUd+lUL=7yovsql zoD2$1r1%4`X#n3nU=NxyVST~;31l;PozBUZ-#&tm5JXb%7z&yd`U9R7@=4C;@NIot z;%#{QwKB9F)clL7l+Ocn#!Bn|64n={tDpV%XgxO^kA3-S)ib2?&_g{tKZ3S< zK!!V^S8)1v9sxN_!lT=t!=szs160|8dhnpk1wMbXH=@C#)AfXhdo4M^quH9F zgcGvX&hh^>kLK47K9;XbG(DQD1sF;nf@Tv>e*6pGVF;4yd=4%by8{#)|6lj9d|i4S zblMl#XW(|vVG!4+^SR+SgqY+1hlutmI6d`>vOW}M*au3+FS7%mBOgHrmhW~~@aPuk zW@>)H*!+W$zn$d~C{tB&fMS;KrRKAjpuz-FeuIY~k=9Fq^n>ywbazwdb)RnK7w-1I z{)6tO=&lA$rGc&-Ydrwg=)v!D0yK#RT2J`@0V2PE>}LSSZHXGlG*D{L^60LRc=5;X z7v%hbSkS#~{4R%}`4BY12MHPnkHarhA0qD$0JXq8y0M$LhOl`7hhHk=Hct%XHg#|U z1WgsbEqKJw_i4;hkeKE?RrZx_f0 z@FmiagR8m&I6(LM^s-#=(R|=>@CTd643FLr2F4ec!76JRKqY}k=RI)th1+O zL)yDw|3G$#BKgR-^OK@l*q-^6x}=DgiA13FKhVR)`k?U?+sA z2!MkhBnIfDF^yBahDGpo>v@O-0n0K)ZGSWqi+{sI~;skfJd+CFICVc>Ekcn zME(5#`V4CM297`YcpqpW^bLnkcbR}sw;E_UQs%>#|2;aHJv)zruE_K0t_T1vcXjj8 zPT=tA{O)=153^_UA4X71rTNgS6Pq*$O zZV?7hMY9RiJa7KZQc~m7>n-8&otZ&_fuYpg7c^#m47|J&oR}rR?cbl#9=)QHAmd}e z*~c-~@Br9lFRkZ;B8S1J+gsxG;j{@py>$}MTiQYQ57bHcw*D_|_2{(?6=Y<1k*5JV z03LGr6~sTF!^uE(3c{9h6($BpbX%^@1K9#v|JCiwu*(;8-U4Wb$D`Nw@>OPr7t2=P z`R{m~1$5~c!%KB!^F4ZPZwoLo_;mW7c=18~2dKGz;-%t$Q0oy~Zi33kP-p?}(fJfo zCuo7D*jhmgjzGmMWYtjX{}N8{bA6 z`5&VPD1x)tU;U4TmJ%MF7ohb?HwW0*){`ZhJ(3+FV!?$7NE+Hc0qt~qz4@iZZ7lue zP)Eoy`JiR@pv~nT%|BU6(tLV7B|N?}f@9GW9E+gYEstJ5SbUT!gI3+ufev-3YYf)AxZ#r|*jw5o$mFyL7wW@#*$`;L+{-;$_4htvmxe!Y6YaeF{nKN z&dad1PN3b=0^RJ*KNw5mn}0Czx2l822fFJ)4HN#BK+s4MsM*Bd;>O6p@S^eV%m1Lp ztw(pUfM@41P>g|>upI=cLr(=Mte~@4kG@m@T>vEy>d(}3ys*bK!KXVR0Bj0q{|H7} zl7pDy*&8R}`JD|E)g>&R-Ek7&<#mRjr6-->OC;Qs9{&fOX4z}%^#gRM+i}AKFD|8k z3r5%0xBRWo7#JA9b)iSE=@$i1Nq7GRQ`pb{p3Q$)_*+2d?|Jrys7QEzXHfxL!s^)_ zq5`_biNEDHsMzSd@6l_TD#!>bQ&**Z2hDN{z&0p@w%Z`mOE-tB;agCV0v<~0&WLzv z56YhK{*XsEt05ccESk3--3&h68$jI^P)Ycr*c5ao#Ssr^OU{Si<-to9q;%1FAAA&! zN3ZER1tx|UE}=g$Tmgz-kIv(uwF$kZ5qH3@{ge9r|4T+Bb9!xe^Dr{JxT5^y|I2;g zPA@nebqj#peTly%|NsC0E+BWOf!qyBzui2bAPv3oVuA7x&~*5Xm!K8jFK1r|t-l79 zCy?UA;^l(Bu=^*$4PFaSJF4gJ|NpTboyT8ZUI`jNWB{i>@LINOkS@y?aI+cIzKQVY z4hMG+I(>I|bjJ&LblYBI5M^-b^qu0AlS9JbWVFs5D*Ap%sz8hXJxq;3Yb3NeG z9iRZd^u-ah{IdD2gKy_cPtBX22Y<48HXmf<@6ZIDp>O%or}G5ZDxc2K1-|_L=X_hg z`S5$3fE;hX;zhFS^Z!2Gp$mMveOGvPGC3Z10{0=o1q&PKFo^@MhTjZN`dGf^Zvh>f z=-c_ixAW|4O?dfb3_4bV7j#N|-*ZrP()@)#sz5G;yDRc0sGI<~D|7+qxM&3i2Cx%*3nW0}2L%$~{JxlpfngWu04$GQTl-tA z3@ApJ%>;FjAVz@h_I91Y-?ARGK_)qf<1>Gqvw%nE1%5H+*ZdPeH^?0a5$8Zh+#x~| z9Eyw=k26B5O~(hIpabu$kLFj5rJovVH!$$Gf>uko8h!(x z!s^?36s&6t$ac#c{4J}&>%2-=`1IO#++=0&?7YXnEf#c8_lDQ1{PGYlfrdkiXWRj8 z*lDc>r^;gvzLsD4Tk=4rbk~7bLB8_rW&;J~qn6wJEuj0UUMSpn`QM|r0CAs@M>jaI zN>_RG+Ol$ja$)I-7g7qKTv&SI^%PM2diI7fdUl@oJot>&SM$3^>m~j^@WsHLz6*SM zP0w8tX7K3@o#E5z+TqigyTYeC7jz3ygGc9OsQ*2>Z8QIZj`01oPXKfp)EXyHt~w4% zM?Revp3TPCx@G z!Kb@)g-_=x11cXuWgciu&Emf>Lt2{03yoQK z{zF#ofVWzC96$8`|NsBsW(nvlt((98{|EPIVh=<1w}AFPf%}7<-$BCw&2KEw<^fy3 z@ppj6rG1khxOAT8Zvma~<o`E?pn|S?eGN*LZeDl)J9dY0xEen3=setdsZIwLKR%t$L4$1`2cNTgGTXh7 z1>Hl`30|!}$>i>TSIabx`a2%It~)$Hmr8;PuU^*;P&ViobI{T*7VzZ+{H>Eg1#|Ne z3q-{ZDHy@^qi44-2k4M&(BYWiMNgnE1!y;zNArOO!;>DC7mBz&G%tXA$h{tnKAI0f zcMX6qw)^kVTe{=L;>ypUy`cOppnd@4XqFA2rbTxt=y=uxK8(*^&Ij%6i}t+x-xYK; z=wZihH;&c={C&2diWuf!k8azYKSBB7CpbTN^oqVZC(Ph+@FA-wGoNSkaYoP1voD_8 zfif{D6d?In!>2QW<3*z}C_w5s>UX~c-KFLD?KoqJm*>U*zODZ&>cNocMYFzPd0Cv;zJS=yvOq(T<=U91M;z;KhNl9^Do%H~#q# zJzw4fc0&b3{{pD~2{8ST%!$Q_yg&buhc}@8QIGC$1yIMnq0|wS)j@3;4sZje^>&Gd zN4L30cQClGr0tr){Ayxb4oJOfI%ko(Oc?LDON%r$30)wL7HVaRw7 z$bF}U8D0uN-3Q6?h9{u~f#J88-@byUtkA}?@X)18lgzJh0Wtbj-B?Gk0wP49W& zgOECJfLk%K(0-;zXYC2k4$1k~CV{ri-SFt;J@W#zrBBrLEr>F`_Y}0g-{M8u za}bSu4=ZeASkH8n0S9<|1$*?$Hh`|&MyqXKcyzM{{1j&J=#0Gpb~5NbdDj~t$3#LM z;|X_+J;X6P-hdqw2zAWOXSf{me;SHoklPP4#($*zV69AgYm#=d;=4K$?Xzz_{?DLKZ#@;|!yItcR>@tN;xcrqGpcstl| zaJ`Ss{LUW`*LZYZ2UYT&pA1iS9(x%CKK~PBebWqCaJnqrSdi0|R!wZQoppGBw z&W|FX`x;CkjfrAVQ?2=j2!G2=CdhpafuP$~dH7paf@Hc`yS{>qw|Ff9jtB6DjPIZp zPd94>*kTKxUfn1~P*eBai)D`BTMzbs0co)f_z0RG;ca{bO2(qUz&BtTym++k)qjs} zTjP(QBVj#yMVmlLsMqv>HzUIfHh0i92_h;U-L}GD&87wdObjpjbwFpSg8cFIg9yWm zhR?jm}*h6F{d;>Yx0(42X5AA!UL-9Y}b1`YEYo&=3wH-PSQ z?lrx}2O3~@jE#Mn?|L704-u$(f60Xy{{izs%{pkk2D%sg12{OrSD?fDOQ3Ueq2gzt z`*A8iL)7ho@-w0Q5>WZ>(akFP5h9-g<#R&$prIkq`6`v4Ao8Fi9zpy}C_e{e9wVX?&9bit5g-9pI^$bF$3h6g|e)A^5(Qg43`s9nO~(RmoWQKWSSsDb^< z_uqfefWcvp&ik&0C;7#k1)vQRaBs};8^2~N=x)3hfuK61^Y{zPAD}W4v_|p5zyJTi z+w0XpS?b^`{^m#Z9-UJk{QLjk@b-&~9-xcx_JS<&>22Kra$zs84mgpBeg#vedH4VS z_vnPkb?)5(a?a@oAk+7Pl)vcT0;<4|ypBTjA))6rdRQK-jRH;d#WdZ8_7p(}&>el@ z({%Sgr~m*pj=)w!7JD9hQSAE1|8(M#IxH)MZm-I zSj{qz?x|pBcP_mFzVP`1xUxOo`r+UI|DZ)t9^Fn7;0gL}C(tqw{uWVCG<16?7+wM| z2(fgG;BQd`iS_Pf`2YWZXXup|No{w)t<%;6rCA=`b3x{N^ny+F=yaCw=!V2$cPl6k zJ$m*?-2HF(4Low1*>Ly&i;#zq`VLvW zELgobSiMWb-Tz?cfwh={v?xAAYF~lOM^-NaQV$wZ1gmEQssH!@O}!1+d^525PwMaf zhhA@V{KfV9yZ=2_{{H{}e{sm1ALHY+CoyTKeet+}w|BFQrK<8uQa_e&2-(Z%w2orSOE z*AipTZa0N*3=JjsKvSe)=l_B_|0N=z?il|zv*u^~4h^7FWkE|NJ)4g?xLE$KKLKjz zyL2KiJWQJa(k%hf-5q+uH~F|%ugM|MpkahZcZI+=cK%X-k4`r5aBk~?5);qvIswma zGrwMz2A^(!aGx{XQ@fDE2XvzDt1x?OiTb}~3NA7^|CIwuJ-eg~SueZ3kv z{f3_KO#bfC$?^$i&DrBDppgrRPSETIsGaKAEogY4^-{@N$8N`n*URDcg{$Fz@Q!_0 z{|gi!;5l?Z$Q*hzXeS})OwlS3qnq6Wc5Iv!e``8O=->+;(0%hi*g)qoy9<0{;4c*h zRaT(hE!WGphd?VrK>b(HxWwVK3C%y)OJ2Uz-47lzfVa0m>o@+hlyHOW1RVtYzf}B% z5vbtpJPr!Ys@RuHj)M#W%~K&cq4bsq!uoTdWCc0Cz=pB(fJZm0#tRV!kalix;}eqp z_JPi5@aVNIV`pM`ksk>;vh3Y@xcdTpxXC)@16fh0fNoG zwb<=DxEGgwJ3(fG?ArihpxQSVB!u68bFtf(jA@@5IPMid$wnHq1`VFhN_h}|DuFB| zLF!+F$_{V?-J?66!{hs5aG@sz8j%6V9B54sI37Xg9;Jgum|^D1l!Sn4SRExH9AzJK(^ZP3tv^Iw({P(MnLe2dLYpx`9#@ zcs(&vdB@)hn)F4a0RC1;0|*fh{H-n^*L7DZyf`EVny@|!O&{SP|MVj~(ef8GA@hf& z#07MTphvIhrbD1$eF<6y)XTb17aXifOz>dUFoXr`FW2u#>q#B=f(mv}&FItl0^)e^ zI%3c6P>Gk4DD&En-!d?OD)i3ME1(09UVH>!AQgI|yYz}jx9^RYUqJnj=6VUH5~DH= zP!Z7WpwL_)!BnDLrU^>fFs?|M6qs9~@cQBeP!<5K|2I4U%P$Tb$OC-fv<9Bf1|5_c z0zL_)@y!eHL`I&1kG8%?=Xc~D$_c{*FFcNe7NE9*mYn;xzOCT%JouN{*D{ZTzgdrk zfx)BOS>af#_`m=E3p_iIf?U#Tn!*SgE!e8@@Be>QMuz|O9=41Op`j&F{OviQo=C6h zC4SKCAXouNPD!c6j=x=k6?A)?>Do`AaDm9R9w<=-DG(I&=oNKe1BwM!->(b|9{jF{ zJUUxJ7C_1k&~|mu6i`bw69a?ex8v;mttXin7>>6}{QD0&u8YAFTvj(elK;TK;L-R? z%7KA_zx5m|1A}LG7>8#!8+bYk)L`mXRd@y(@#g`};BRICB|^}ZEgqUTJr4e4d-1yR z&VSEt9u>$%PmG}S+G{(Nfr;V8!8TB1%$ozG8f=>30Z(l{k6zIZ1||lNgFl&HtOx70 zQ31<(?C_3kv$%FN*TnPtTc6Gs9tVHedvsp(=oK}EsOJVvG-e(YPzP<`ckM3Sjpm_9(N`u^FTY2Yy_f}9Cw0`4n?Fa8}aaQ=o zpupdn#0>JgiOPP^r1lGz+B^TddG#KMFn|_=fRB7?-V2Ix2A|%wpuSFtn@{&vkO27B z;}*~an@9IlkN{M{KF~gV&^+1B9MGa`m@j)pKmG^B^+Ce}FV0P+e zmWn%|iJlT6&{qHM380Prpq=KnU>~?5PlJ62rNPD{pd<{=Z;%mZSo_VR*R;R@WIrT5 z*)lS8RPeW)1MOO9R{-hkHQo3RMLsQ!zhxb$ytQRyC@=Tu6}_+$ob2v?0<8RIihy>s9rWnkYXIsq_KLEZFf!}|)yjqk zUewrq{}0g&n&5aD4{|8zURB42|2+IH+FQx z!xZ32kUI-x03x-DL$nzlc)?f(vMG$i(=tqfzr_VSW%wSf@5ME+tq4uu|A3OvLBj(t z&XnHy|55@RYoHiq0DA&_#TvAz=={UT@M2oio&PWELGybc_j>g9LQ{hEB}Aw-flTrP zhZ?Bf>opY?16cx3$HvC|Eo{I4{|6P1E-oIuq8iJ=>C_%nz#)pqmydq^N2;GN+*1Z} z4_gz+tL_5b4d9G+fWKur_^_?Dpt8i(@SA7nUFbNQXSXY8_~`>^0RSk&dvxywsR1Q! zh-Oe9)I;--XSb_@S1-#4k8Tlx7t1q1dqEC^va&~a!vqEf2Cr_L51!4(7+=%~{sPCD zXXg!%UeV9LL0*K%S$zq_SuWP#lRb)>UNXSK1CmET10*l4K^}zVcj%ER{H<5P9{B&_ zwg70qw+C`Y@Q?s4jBKq2)&9Mt0DE!f57>nu_Un}|>T1y@V8Ht`L%|DhL6gRi zO*S6AwtH7GGl1%PNLFeFt%ugNybl_<_hop&(QxPgYf(r&3fYMQTFmw0;&)K?3{inB z#_nag;9+^V=)PxnDR>P%xY__0xUnyfmx0EHK%Rlv@6q`bG)nQ~4rG+#MLBpp!~%4d z=F8~+C{xnl_UA6p#c&|^f(Jc3JHLXR30gbS`P-w{_T^7T2GIU6pKjIGdmuOSsJsZN z2lX>=^S7)AZCsRxhJvTc2;OTP*Uz{`0ce++62#TXpIL> zeSBqi{<~NgD-=h7)<=W#qD$vTaEam9Yx5P9x;%PC+kb-M%9rt{Z#UzMH-&fp`!H8a z_*(ug-3-o5$R$+nPez6pJL~TJe?1+VUqH>w9bBM`FAjrB?N-o<79ee)b~xDEVE0CQ z^x9hdWMpuJACy#52MSWiel>8L4R+R1^BW1|_Sp^4DI1_hp)h~j1@Nd3Xzv@ioml!7 zyg~GZB&fUATYCXC8TsPO^&kJi_WE?|THF<809)_TYkU0%BZFt>5zlU4h8I6-LD{aB z!SH}j=R=QPQO_TY4B$X{@vh*`|K@55CjOQspmnlsd0-ovL8~@EEmQuMUa;_VurS;q z{4Hf*;RdiUXtWCKKK_AthzYTO=CfIIBYo5Pl3fM`_FqIVwFW5m&>O2NY zub_n>R^Vw5$asxMcQJ=YcNm99=k*r{K*d8h(kYpx?x3amkW2|0Vg%J2-7Ko0g`xc1 zF#i>R^}pT+<2!J8bO&&}WCr(57(BWQI9@M$p;~$8zu~vnGoka#y{1!Eg65E)zUV1^ z0vg+_FaT%fKGfs9pzBLQK|4pFt7tsB&3(F^6g)bg`g9)f(EQ-|jiCWFAm%0D)9onW z(aq(l?ZM%3@F%lRcQ}V9WaW)V>wyYxkApv$JuMIU@H?OI=w|J`B@8VBoH#tXExdYJ zu6b&H04GWh%?qBOc2BRU#xiCG&>(Ao;ei(}d3XLtM4bfhrwsMzHNCO|;{G!wQ1`zK z0u@A1|3S__g!I9|g=3xoXhUK?sJ8R${0}-hUmLWsh~2aE3V78os5I340J5z0K%IfB z;Wt?Qvmdmn&Jk3zUCIOHqHqq+Zgvl_@*5!Kj+V!2Zi8A>rX|{p4EsSN+AlovKyBS8 zmBOGx0UUdwz^x@^d_tb0BxA zJ^L6yE$_~!phXL}FN5xhybmhhU*u3e(JSiu z1yruT;4=OW-ja4H_s;+3AOHDVJh>Pc8f?`ri+~!Ud)OHmjGv4Q%;vbV1bGl0k9t3kcmZfEWL19JcjsfjC@aW~$hZzN$+q+UKyy3`Zy)nS_qX&jrY8YmL zHs5>n^712_wE&A*G8ksvDgZ}f23jPZ{0I##!vinEu^99joXn5|Ya+y;0yKkKkPPC( zV$dlJgFGMxX`mTok7UqMeav85h+)wGe6ZIH&|7^ID1kSD~T1T=%9kPJGeiwL96!%n>{0^kyAJ7};E zRziVxB)D|W1s7D`a?$fKXok+CmzNV}D5!iXfS3x_*bUa`!g#@j@dnuJ$Dm;hu-PwG zo{`~&elbJ>c|YRqd7z?KHRY@b!wdf6JO9CT5y-YrDWE#yS?BQ= z68k_UxG}hg^Wt?T#0)>AJ&n)jF*Cfl1S)J>-r(qIZl8KD}GP^;BKao&T>*K=YHJ)6hZv zYp{Pnld8daV0Xay9-W6gJCD5ZExPmH$MQib4`|@+LIG$CN68To`$+*vIm$rUT+mGl z-KfE2^$z6FRLGiCaI53xufjV>;|0FmTR~gCKs8w_sMhvu-V0u+%-`w+i2z6_9nHA& zAKZilH49&qfBgUd#ieVYcD3x~3&IRwH6Go@FXm-{S~}nOTVI3Ms6Z-3pI+5#r$yjB z5v#e(3@=JS-K@^%;K+FqkqnEOx;;oS6PN+=BKI!jnDGT^wkW*w|79Au(aeChJas0x zxMj7wAk45!2`NT>=YZ}i;&=&KKmu8B)(we&Sc-j;e&@dnBoVqAUV5np9^nDEuOaF> zTfqr?FIXA4dVT5m^FQc*Qxy5RNb?Mcx)k{v8&1StNP!UzqOu zn+EbG#QhFfsypk*`IPS3s73k(_qt|4VMrm<&q%K*QY? zNuLz*c#sD)9--=Fk<@|4jV7SU|4l{sKLv~b?jp(eVv*mAB)<(T-z$1@CNl%L*$FzA z@XFR$E zz-zg{_w+#5a#>#F?*$#Tk`2WR%>yUZc8|VN0U%?JK3mZ1j z+x(w}za<|u89Zmg$lnSYUxy4eCxEjzE6W*Bi9TCcwUcQril(v69MA#H+(wTA$I?-kHEWw(O@+>Na< z;G3@g^S68k&l9qHz~*UL`CGt8tbpz)^YQ65J$aRZ!K3*nbBP;hi0$k(h?iKAz4RRH z6n74fZfjrAvD2V23z?UQzKBJ_o&T>Le0og-u7jph{=W!^nzH{KQot~QM-Z%iJ3qL9 zM?H4FK$!3?{?32L<|B+Rb3rTWjwnFR%ku5^m+%Emmw*n>^6hpP*a0dbJ-V$S2IRsF z@U%SO!|#8<@W6|8@pt~e-UbRs!~ZWBp{}q5y8^nO2ULl4fnCDk(Rr@5yKUV(M zaz+M*hNlYrE!yCjIuEeDtsss^ukEahpz%RS0kq}?XnYXN1|7r32^vZP%^&!7{`71< zD8b(f8i4ZXwN1Oo!0@8}1t_Xcz66~`0~@dE7VzkVo(aLq-}?IB|Njlo6iPfiy1~;2 zB_2NA9^g93j(8hl7p^wLIw2D?0f(BZCjWKd3LZFYeC&$hemW!DTTxJ$rN> z@@PIJQM$vU*Y?o`guA~yhr8SG((73u!{`~*nv-2R>+bvf?JAgokoi)GVfH~bU+@n{N z={aaOI>ZZzh+>Tc4IjJ&O>cN~vpzos$po`O(?Z?I5z_*?9{lAR@Zc@Pf8DGfk3v*~ z&b#vHW<7Nb!Uf$e=F!di`vipR4>pTc2g-E-9m=;p9pne3O1tz8>e*?BJy2|KW&8X8 z|H~(!U3{?d2XOz|qnp*|D5Sp+**Xt8^t|;+Ns?#x92Eo52G7PLAj-$`afyRZx2gU~ zVFsUGU4v(!eN4_8p51mHoi}|tUx5SLr`v(U@W6}DF(9{9gU5YdOnV8c+ogRhAD5nk z4p@LzIJht{fV##E$01$g4~ZZx4A8T<_*bWZ4G_h>%i0kSs^WGmPlpYGBd zou@r}-3-7>XI*!^_++d!Lf8Y)s4O4fi_-3}R@uHePDLB}Aj zbwYA&w}%1ffI*Mmo#1w9r|*In&M}bXp&p<+fIx#KosT>^CxD7YkR{DK444=g82MXj zz{7a1H@ZC}EInlSTNZ)uS3h7Kkip+t_5c5W7yfOj+d(=!dS`&zcOZ9rfcDgN-uFE2 z76BS^exVTxa=Gt??$QIEoqiFHmSq_w*Iiql@V8ii7c-Pz@aV3+u`>~5Rj=s8CyWd) zT<3lI|56Gp8+&7?8$_o331~Lu7-$HZb>64{-QE(G-ZCYI-M$B`y)#O;JMICsKwpA3 z(0g>p-tg$HE_m_R_t*b!*8|qh8T>7Q|NsAgc?>+42$j7Lmn}K;5_IDNV*Lzs%@Hfh zF<}Pq=w?KOM>p%SLl9o;ff6wf%fsM-9sVf?kk%`K(#wS-kQg`+kDOjg&Ow&yB6NYu zO>p}5?EC?mEeHWw3c3KjAC%ZZ_sFn@f-SW0=}wLSt(G}fXMjfadW#U0;7<7j-18A=Y z$dWyv1*fm4LdH|Ey6^oFP%wb5EZ=$%#Dcre6WM(`L6$?E_!L~CK<=l7yAPt^e>B*Y zASdnztAeC|s5@H@L&CBo4#S;W!0zl#Lrhk~#%n!0KY+qB)G-8fY?MbgtKAV$A*JBa z&B_9HFazkygb2{uL3zVVo|Z>_I-l`RIRpwe$eF9LFHOKs0o_AZ`vP%?M&<1uhJ9zevmM>i`k*cyxG`~=1l7SQ?|6n9Ry`~_S022LN)zy_b0 z*ZJL}x7YwQ{OQu2od8O>$DI>E#em0gXRuFSNCy7;@6wr_;M18L0Usd-FCjx(FA5nE z?fmUQ&^(XUOC^#oRI;!dI^o6YfM5S#KSf>N+0FWQA87pDf}w;RIIA3~ zw7gZK3AYb)K{N-b1ABN5NYzve&@OPe!qNwh-EI<&mTod7zM!(+wYx6Cw>vKawASCV z*R24wQyLO49^IuUJi2QSI39NchbFvmJ?;PNziVe*0>~iW&b$baVWk&+I-l(n05!XM zMIG;h7Jhwy@o5Ig0d5?Q&2AZtAU`np^e%un_(q8)tiJW^-J=33$6p-w08M1Ks6ZSH zQwYwxup<*e+p|&PAH1+zqBHc4T92F)8c)?;9+>j&M(1^-C~Z7PwJVO89G0A{_DKZ z{LDcW#QT21Me#xNa|Qku&^%b{w^C16!?%Vfza4hqZvh=|<+vAAa-9+{_WgMJKiZ}9Ib_~7_NCs_SN|dD zr}O5)m#mJRXPX}~IyOILZ2iXH;`;wT=(>-!pcX%<6%F223l0xZ+J~QQ3_U!OpY93)&}2mC{}*qky!`Lj_>2qG2J3WXC{+Me&KZaP|99+U0bQfa0rdkYset>r zpiWQ5Hqe1($6plqzy1IE8pM5`$6Y}!Vg|zlua6*=py2oixd|5EpmMliFQgn!hyazt zpeeor(2*vsG7~}5EfEEvI0mmvJ$V?azt>dq00RT4ef<<>(2FEF(D_85gM}tM22Y#> z!Ue*6K!-|s^oq_iVPJS+2^H^-{b6|Eq(`sm>-`K2FO}s$D>%XPQ=uNcraSkeo6iK* z)@y12G5@11%tCvZ`F$b`3@>g%#o^|6gUmlHi(-BxhWU%2+ImedJOaCaB3wWoX8t@Q z28I`vP;t2V+930jQO*Ck58eGvP;I@Y1rYNM;R5V1^UoPFFuah2io?x6y^n$6B{Qn| zGcnA6Bm)Z$0f_k*;R4UQq2Vv5&%p3vCsZ76em2Pb#WE=2V~JsY6I5HT>4t~k@F|1~ z?1!0Or^mqXA`&VNH=i41zB8)%H}|54j}lZ{uW10pd_lOte3~8?%xO(sE3)ar^CSTVkT4^ZoW6j{AN`1B{9rTf@VXOaPwd90i}Ob^LOq+4<9C|wq8>Mi1{C-AmPw!Y7aBNPYaa( zq2h4!yFun3mO=@iNDT8ALACXoUbqhqpNVh*d6@Zm8ldzK6^EOz4KhC&)%>5k(cSL^ z)z)iT05RVXF7Ukznm*^LgVH}#9B%&U-JtZ3YW_?N^B+mVf_!#!~L6v748!_3b!1*LzeINW@0konH2=HJ|f9zIG? zZM~)e5c37$0_`yK?PNgdUjpJ$xcRGhfzrPO!u{Za*)i0y^D1mxde$xm(E6_5pmyYo z9TMOFgO?cO-vM<1@4r|s@f~z@-2ak9k6zPT5JAHOFD6KUX1+lOs)AK>-eqKXQ3JKS z*Ho*EnZcu1^tV39BQH`w;>|}udpQgbM0@m_2H%A&SBibSVGq?*5|BvF3aOgF?-U&@V zb}XRu4;6=pPxnp+hL?xM@r94qPNeXeAr1{6^ShAnX%|NdpIx`Xf`$iP6o{jQ&&%74 z3@>7!miL-Ab%MjkS_0&e7cL-iYWV#3=rz@aTf!}lHGF3702zxMK99s; z!65)SD(@m(Kp!4HpmPs*LdD_Xlf8q1;pJj6MEH30np$F*-vrgxYr5e!IQ$FY0_-sJ z-+{`9NT@j6d~T5W&Pe8Crq5H`k-}d>3>yC1A))YsT?{Gwt!}}>|AQz>_-Ec?WO#8$ z6c!4rI>6yC%?k>s7e_$i$l-tcHY|Ov6vYhxwKrjwbcDJ@LX; z0(8_c=nQ?2&O4;;MS_`*LJZMi6{ zzuaqD(gEslKZSJQ1Ux!xU%Xi8{{*!43*sV>25&Lc@U%Qqdc&i;TEn9^^u(H89lfRp+dy-AQ28fr5P4Af0Z$tU;h7p z`FQ)2{~*h=92h_iZSWdZP@^1jXg|2n2A%!; znO~lvn|TFOsgq-OD1&k^ONpgNcd!EJ%(4iV?qUts)^DZpKHc6NKHb3rD_Ba6J-dAs zKpTmCIW?|eG1JO01;`Yu?Vr*(*m zLFvWU^P%JYpwpHGUOe0S|G%TR|iTz|Mv&BZl<^j=2jkxOC@pz-}$* z2A%j{D)~ADG(P9kn=aAq&cf*o-Ub62Xp#2lc9;0Z&Q$Wmvy(;T#p{WX_4c5PZk{$& z3o>*UbCg)Nek+kh9@~Jg7c=|@Qd1%UlJw}j5B6Q`%ViT`_X&W+T{_=G#p6DrEG`D8 z7tk^@$i6y{Zg+6Pl3u}H;(y%P0hBdBeV>y^{acS-e*=%+a1D>%as`j>dVv?K1He~J zgEW>N_c-os07}a!n!(|PbWZwG&^hTa6`jro5G$bJ4N8CDFa@t?y9PQY@2g`7=tP<3 zHx(Y8y%peV%v%fo|NoC%?3^$>(EMM4zx^n9jKcQCZqR=J63yn{3gxmMy`sC?Ss6NS zcqFqlc`#nE`~Ltj#OKj#yL&eS!;2Of(AM5o(5+RVE@A9?NS5>Uy7S+o*SEu`*R`ed zmQS~ZXLq>(sL!eL5j4WT7vv7m7QmJ*4A83~TZ+IlP^ldr$*wJ*`Rl+&dUWpvIXumi zKkp29gFEPOOOH<11>kNazoskbUL*ci&?U^^arNV_8$iJbI?lF)6TG$n)Ozsf2KyU) z@GZE=@acTN545}*depy1Z|DTjF?%oEoj-!gJ>*?L;I+lgM=HPx0lbg_vj5Ge^S?)L zFW4KsTS0C#y!1lD9~7kszv=z||No^tcus<$`L#mxT$7 zLzT}wtOGboKz9#-wu+X1Y^YaYDAnw|0m)SpJeq&1l(2zjnM+SJb1*d@W<2Ju!1#I( ztiJ7bmuWpvdI59*#tVbr|Np-}idvt*^CM(^{b#WIdQF$s2s6A`;PK?YXXg=6e$ib6 z$uF|*pdpj{KHVBGlx#kN&q&DHZvZ;-G5IxUOilDjJE&E{EBXg?Ok0A2MFA2s-i# z+@ygl&xt+!qVFeq`384?m`|_i{NMloJBEV#1mNlgT*23+x!}Iv<$>&pkciin|}QN4>>;+bbBCZWv@r)Uho-=om)XC)_8PI z1s(Q+Tq?fkcH>ZH;%~Xnz`)S##>42*`TK=-^soQNUBRcPbhiEhd8XT0!sB===$IFf zZ$U?~d2~C2%5(k}@V;Z{u`q=Z9+m|X{4G}CB6hC;_*j@HFT5Qf^M0UZ4*Nm#YTaAG zj_L)Q=+Ws0I_(AQzHYGl3~zgML!8}h@Zuln7^H638y?-g5G4@3oo*7{jy#>MSN{F~ z51QO?IgK&>fiY`Y8CEnZ2M8c(LaDf5=4Ti$flF{v*#Hc3$>qegisdxkT8b z^V$pLtDsYv!9$3k`IHyVk)SfaK)|D$57c(cH@pODR5LU`XDVgp4rKA@_5|(fDv|28 z^stT;D1F|1o~hFkBznwEfYGD%Wa+ccFpkzsrK`KcctAp}mr8_TCm@2t(eME1Yy<|- z{7I+lix(`An0xX1He|f@xEp8}1;guuD8&b?{S4Xf#IXXB*M2yG(msPncR&HC1S|9C zcCzRe0xhEm_5fc$f4v%{fMW&p;uYzJrwXM;5PLvdX+THEbb>E10L`bJ1J{R*&%oOw z8~;faFff!nXn3knas{;N=k+CzZr0<=zztB=!9{0 zq=m2H(aq%1S-RsJXe|qP-*x9959p#I(A7oFwFemZ`-E5-7>>K10To%UhTnX8Rb@{x zGJv%>vM?}!)17Cpy8vi2-wWeMKOwyZ*2W{?V@674LG=r`O$}OJ`S~hHo;3v`S@PVY z^Z1MZp!-%W5A(PDgDf_(he(zx`}FEA*$lFQ0eq_qXwqXdM86C~2}J*XnEqp+{RG{t z-w#7<2I((23egYR69&>>4AFlDq6DJ99;SZ+ME`n-B-s8L(-=YLIYZt5{)I6_e-A_n zL_hexSdjapAo|lGl3@Medm;Kk?H7>!pRa)Z?*dT*(f=Q0CP=>uM87;l60ASuD60O= z5dD7+fxQUPzaOUm9VGm&LnOiarJ?#k$rfaPF+~3sh!TkYdYJwl5dHlSNwEG4%OLiH z&O8F?H-_lXfhd9Kw}~L z>p%Yyq95k|%@F-}AW9(m_rvsyLG*8jNP_jN9D%r>2VBFwe^Ct4KLw%$qQ4%d{{eWR zGHX6W60HB@VTgXv?s%~OA^LqFN+9~}Vft4=^s7T8OVttW?|mTqJ$h}|9%f{C@%|Dx z3>YBFN*;sqz;BSbpfD(am~s06Gz=i+!9IRaozrVu1=7DBqJIZO2}J*Hn0_mW{>c!@ zQe~)qQ22ZF+IoTX=R@=tK$JlASHtwPK=gY0XrQ5X2Y6eIN9Qfj=I_N%Kzoeu zd4P_YJM!YG-IM=5of#S)orfL29c3?N^=*Ay8Uz|Da5m_6J>zlQSprn5bu#;OKJYm1 z4BE8C;M19G0Xnz?sSA-d!J|7!0DPGnxJ2xK_X~8k>lx6I65w;$J-@p$fTn*-mw?iU zednkDEeA?xcyzO#nGbRzXe^|(8`KVavk+1@+_3=_{jf0({+3K|55hs>WfHifz_0_f zBMiLi2HbUe3A&te2Po`cZuw0kJ?a^|A}Z0=elW z=sv0)3``6RFU!DUEDQ`UK|O^X3>*v$FO$Gx0t^f<`CgFFU02YaF^_#EsckU+0#J!pS)H%PqF^a)}-7}h=ot;gW- z=#~eai!2Im4^#`h$hQPFCm{nD??9C>WWQdwJI^t90mjw?C5(q(R=-DS^1{pmpD_=a zbNvcx@ScHK&};g-K$zjhGaK;G6)50~7eE3&*%~yxZsFJnJ`bdfEe$lfk_2hiF24^- zI}r+=-QfnuK|#mh(pkU)x=6sMGXbU1u3Z9(z90#g&Tr6mJ14l^4sEl8Mk5f(=jHha z|Np8!x&j~wvM2#`Pi;qV92qJ@|2Ab%`+ z18ScmyZ^jnm}lodko&JXhJe-qfI3gm@MTSF{Z?8DcH0Y&d(Zy6bXs_H9(L(WU;*_O zd^$4(JdQhnvmLZg1d6NU^B^AGZVB=zB9k010`VOrTsoh1S4ent2MB;dJy-(NrRppI zj}0M(dgT58|6hE04O(CgX`g|IKVLc_?f2|8Z7GJ1cY+3aUu?5_^53JmLV%$(6m2wD@-`N?qyq!xVW(QA78)&Ku5%s{73ImTnyjfAKB*q7WNu;y3T;2|iQAIyO` z@q#(1GYvjJ%9)A`(^^Ye?vpn?&+~|NrmW`nFWVqgPZA6vDl>QXl?-M(jC2n`fbE9dtJD;RT=pb>Gfa4tBO56cBU`cIIT@PXH# zcyxywfKLOv0p9cECE?Nhi_w99$}tbnmhsjDr4p}oVC@TsmT#cz2^~O#L!dRL0ScvW znmL$2LrBLQ6~NOfuNo>97)se7;oI#98V~yH(OW6-QsE`!{wL_TFn>!C*uDS>k8UUM z+>KJ&1gKe{p{g&(oD>+lon%@Mln5M#+22s5z)up+ zCjp=CbdGLu&+ZtNg2rE*P>E-DqEp;O=P5)}u}&JYy`5AbH+7l+@0RwwbdJO=HjIPRhXp4b2l z$R2a#7jsc@aO4+sQE_l>eOsanGE=~#J4oRhlR}9gh$rFEJ?REWV`qqpgiq)5PS-mx zn9BbC?{>WdmIlw=bT)xTRX{#{A*KgA9}!fa^E6sR{A36^x31eq#Q^M9&><@=nz^8A zH&enJed(Zy=ckFhRX@0@z*ifs$;MnOZQzFuOpj5!Kw^raq z{c}*B1?M}@&KQ+~m!JcUA?;eQ&p?6|pdbNz7TKRKmw|^(A>}_PK0sqi6`+xwPVgbj z9*`rMQ3jI?4|p60pW6!xUr@1NF#}RgX&B%6e;j-WGAQGM3Wes10tSyx@EN=OEtw!= zp$7(c-hZ*m18D$i34sBqsbIaR=Mr0j#CqWaP^WYe15kaS&H&`>V-MH>l#_%<_g?V% z(vY)>4R8Oy-~m667&P=W1LTNKM~UuMkaIu-S)lvfJ-WAoC7?$?Te=nSx13`D%`5P? z3WJ;gKg1Y$*y#({1+hO)Lf03<4nQU}p2Xh*-nRrDYpaa#u&j{a2j4Sqd9AbvG?oM! zH-8BlPzRS|u#=5r+<*Ol2`UL;RpcAM)I-Lr@&0Li6r~Tl#htzK#kdu%-jyr(U z$V)kJGuwdyW`52!$Ve7w_uflTWev9nJZ?4tG@ca&8qpUv1GPcGQ4Y=xpc1ANd}6al zZ-u}M7VSI#LE{~;@)wkTeoTd=pBDxot)S*i0jN@7iaq?o^f4%9L+iJ0@S<9Xdtv%P z#Rf+=yDcd3^S4}MVqhp&Y5t+W-`>r{zyLbWrum0Lc@gN6$UIgC#Kg}8TTt7czeSaq zfq}oBpNWCN7SsVKiLeE&7UXX^3l?EyU??^7=w{{L3_2)ZHuez%xT6BP4-7Kj(s}=d z^AT`g_01-5ceLdBYj$wFfW{$Xe|U5rKl#$}=ugo8M%IHMCB3q8P*d)M)q(qqpvvI) zVX!%KK#E!qlstdEA1v?D&AJjK)GM34g%NB!r2c~2e;A^#1*8b9uN|hZ5+u|s`)xH? zAAf5$s9^^ykKy{8A^Lqlib48cf)0WN_2*a}K|;N<+gqUewNdngGC#=O&Jg_~AjM$) zEFfi|^WHf@LcOy5o57(5*&_u{f6z0h@4sM%=)bcO8h$U2faZQc`Y(cndSwqUfa(X` z(1y?tYCnSPKYR!rZc9Ll!S=Vn^v{F{@wXO%@^!Cl$2LX=gnpR&n<4shAc{+#gL`yo z6Kp|epz^o4GJ;Zu0%*QU3uH<+>+KETv>>z@8Y-gTOvC^gf9Smb!Wd%S7LYQqd%l48 zM>PL%;BS2nTE^YYdI2QYE4y$L)QC%e|Nn=lgU<)S{#gT31J=I}Dcx;B~PXQ?g>o0-nw*(3G${NG0jRr};(*t!@l51(F;l6sC8o|pgs$EhAx{(#(L0dE|>`#3MeTBmpkCm7>{n0DH!l{Ht1kuq=an}c+T>2tmKImN4<1c>Lef-~f{KZ1`kN;oK zf!9C90-(!lU;Lf}UPaE|0@^+1(H)>*_|2nR$fNUO<3sSts*OJx8I+Vt;!)gI8V~BY zf&=;GuPHB)_Va_1@{4=_|G$g_SA-0<4B$cl)b97_X07W3H_!L1gH0r?RR*>4T^JZV z4!+{>X#T|5d9C>wrE{y4hb9a;~Rvc3qp z2TB;#3ZU*2H^|}O06z)Y{PptMzMr5WC1`yK(ho|XGx{L*bzs;BPA?a4sm& z`74iJNO)RkpvRvYDE~Fyf`(@|d-Ds0<_Gsnl0Y#5&50b~at4&gf6fFY>tmp%4ln3j zNZ2%&2*{^k7lRv*5dV6htez;n14{ECbthjYz5M$>Z30+5QvO0NFJ|;W+}oj!?q1L_ z&@V3Dgu2(G+g$<{uE_c$p!z*9^dAHHcOp!GC}>i!*EBFum;toY39_a3MUw`6bpSuq zp#N%6heQ;BZ+y;YWMJrK233*mR~Q%=nt!mD$2b3AEENUi!cU+xQz3_Z^S6S|8UzW- zf-WoSJpQ6p7PQa(KB${M3oLXWG{$}Z>wnO8m4`l^uN-4Q$AE!vdH3kG-ME^OA@*g# z>u>)(b}=%7iY*4l<`*0u{EH72uK<|~IxE7X^Y{y0n7PMZI3dhU2OT5_I@kNiiyDv> z;LF}$dUPHGk2=^EBrr2L#uy#|cTrz*z5a$&p6G(wl`H>)2Ju_1K?4Sz_g{cJBM{?s zLB>H$`ML_UAQSHD*p~-iefvKFOZUL&x_**LC?)(RjS!8yC3&rIt zVTIxhIZ&YpNxv}tpz?^L3z8mxs6dkey#5B4M~>H_=@FD`zOgqTTP6v!>XZs#Cu!8n=;{Z(BhyuXgyH-*g=8h z`Db^Cqgz+NLa0m@JOzL#uYY)S*IR(Do_qT3h(bxYNArIb{uT$Y6WGBA&9j0EVkOWu zKPKS%)}y-~wEm7G_GMH%YW;NxafUZ&D*PVEz>A>uJ+IGubhGYh2S?T~&{??PVb<3& zIKwZZ0}_57%INXs2G0LiVd3Y|`Sd$G1A_qra+FPofu;{nh?VVdD=TC$(+6n2!V@xI z@z8@=Q+nvpI%*$7-0s`_~{jp2SE1@bbo$lSUO#|@V6`m4L5y1@Eg<&fpD7ZIT-j`T|iU0 zy{0PRpoL1uU&ttfN?CUf&{9GE)^3od=6@{wtxcfW%Fg>QbU-7e;Z2~CO#YUMpz_vr z3#b9M1vG-uE6NMH(XbooL!c?M*O?V4Be<$srM*Bzj%8+s4WR z(Qo+tziaCg{uWTh23mpq;_vEL{~eFJf@eZJx>>)q2s1P@Fupj}0134GfB*k?yKVtp zxpAQRfrv+UC}_>52zaeJf2#^8j+&2XAm(lkPw?m!o%!Pb|CjFI?xzC-INn>@K=BS; zZ~U?i)Dec2_dcD^Uuc+q{15lYA?TGiEc~sYR*S>8V-ox=GN78Ny9ji{5PwS-0|Nu- zYR_9By`WQ`A^v=3cUhdgC8UiIykSEgs#h$!*{Q zCwd92?5mP^f>b}gIBgEPcH#i!+6n$vG0=G?P~9)BK^ZccKA?q`$3YE? zgK|&)dmMMr08MIm9CrY%;$-mY%#Z-BZ0wZq=_~-P2H^1N{D7K1O*?~x8D6x=J^BB7 z24wx3N3UsV2qucC0OLGo@4!n8l2%5{vUBt)`{NnBgP-$@d z#n+8LK^YXB_dR+|*+ADZcCzlDFT(KR)s=hyJ-TH-H-QSoXW+R^k6uw0@abySFZP@T z$y&pNb+3Z%S2UGh#K`bsAy|s_S2NgY(u+U|)Zm5o_Iv-MK@F+nu^yeQq4Px;Uan~P z3vWMx+zX1|OCFX#O87wS0S1reLkb?2KT5xVZp;D6?`W`NV1SPQg7~4}t9tjp0F~UJ zz7BYsIqR=RPy|T4@HzyVTyOrt%)oHG8Pr;Y45EXEkYVRffLhhyWvieWInXjd4v%iu zU5(&fHlT*p`UXfvJzpABQFC~-o-7G>?4AlTtnt@#W(J0Gi{2u}&I=zL`8RF_iIzU} zIQWRglX)u0R-aBKkIpEL56zwmEZ}7(@R~68F!(+k!vo+L2Aw6t09wZJBJR_FkIsXj zzBqKg54Il&*?m$7_whsB_g@O+J_GQc4^aK)*xd_qP3y@L56|vakXt%WfgI++c<41h zWFEt#`GA0j<%JS?A4`SOPam576j;DZK#<%BZVxs7{15V{LvJ8s=LwKM!M-n@>v8ZQ zizjn0$ZVfZMUT!%4u~1x0;Tx~WIs80GYF);3NjbnzdvF@{yp~6_dj(03Vet$C{n^a zJHJ75S@4TQG0=1^XckYt0TeX~pt+xPpU!Lv-`+JU5-gyzwTcBm0cb7?ISWC6g@M7d zw?~BoEcYICi{(KOaUzXB=ODizvqz_dXXhLhkg^xTqQ5{n;6--qr~ewo8k5BwYZKhJ$w z_UHz$|Mjta4!YgQ^@K+^_{2-l`sr@SI_M9d72Q-ky1{|!(dkyd)? z3Z5vy>xjUv0%Zda<_=Ic@aV4O_%8@f%wYLmuulokPl3*4Ko7=$3=9mG*Z5nnLFUC; zet^fyL9T~{U#GJK!u8Gw*E?6hlA|R!Rr0rh_L%r|gOeHPG*3|>&=F4%ry~+gcLyke zcy!JHQ>_jot}M-}xUJ>=@!0>KNu2 z?$N34(XHkf?-=J8>lhOq>(TiGGQSS05BT@7AN(QTe1h?C+JxTl{hdDy|2O`6@Pd({ zJgM_g=RuEN)3iKRhUQ202Ve3v9}48(&g18ie2IU%NEqX(&VvVEvNu1hZ$8N6k$e&) z#dxam7Y`2uL%pg;FYnuYRt69L{UU*Bt(Pi9JoxvY^5`|);l|D2(aY0m$0z1<5^ExuEX38;-?295=a$c276E z;kVv^`HjD%fkGO{%s=Sj=doQY>u4= z9Gf51yYX*hVRvCX1mYfi!S2Mr&4!)vSM#sHdR>oR+uI=!7lwmEOva;EWRg!W>#@sR z3?2s`F?sdcFj=#gvReDIl(2eqemFeAv$sTmxJde0b=OKja1w|b@KRPx)1i7Av--YoM zh_NwaFTsA}2l-8}-om5TRz4WXZ|WYsB0)aAyj>T;eq;9Pwc)a6 zFBPyZXDQ`&v3BPuW%ca!5#;gcJb^Zz*!+*LT)h#rgn^-49<*PKm2D36W}L{i`QuLU$0E7AGUqnCBQuP{UBKaXyf6CRz%UoNcw@_)jPU;qFAM^X>U4~_pp zdg?_ylK*@3vS#^$+C?lsJUZD74;;p(-UDdN}2d@7>XU>54 zEH%IJNb%@~?Em%XbUk5sz{Bzyf3q_9h?#$$o!>n>uNdC;+{*}FZO72?IvA7>nt#;u zw}Tc+d35s@lnXO-9_S5b5@C zRtElUrBnI0n-nm9;@?&}1~m+9;h($=oQU>!ph*&t0UlOQOZ!N>e*Y$ z=+Rp{(WCR!i>bVzqmfGmof~RY85l}x;puyaBDiaa(l6Zx@;UT`!C3H+0I0DGX+Jr3 z-tkC2+2)Xnw$S+=y{wiX6(C>VdVS5KmsP8omEk3*K!Ue@nTtPC$fs~%qDilXemOPc^qFXuq5xp2^W&1;|y zV!oY6pu_eOKHXLxoxUf)3v&Md4_0vL&K7a8%oYG0pw)Shzx6h#>uvd+zZrCIiEr{z zUq-gh^Dk6?{r~UT2_EB*b?jzqe!$-RgOR@lv_8ev@U5%i|JDN~^`6PcJvwjsbUt%z zKF;XaUDL+$KiI${`GO>c ztqt_)dl-?7;t>t|wj;P5$z~+xLWH=h2s<;Lawv-wzHypI%lIP>I?3 z6w>X44}N)I$$Y)8M>=cgfVR0hesf@9=Wlrq3c=n0j^nO7Kv~+OGjsuHB(R&or@MBA zPp9h!pU#KixbAd4;*spS!>99~Z?8^+V|Ojb|I4ihO4A&>T{(QZ5$b$8|8=?^aqPAL zOS^Zw?f}WQ9;i$6>8@SyS`ic;j@|Y!V|_ZmffdSmHXmp4wftUU4Kf-b`wt`wI&Bdp z6Z`|Uw@@uXtONHUA?9(XSo=BI#YLecHZ&m{Or=5&EabJ&8722^8)2=Fv#0KE^sk;SRUqY%>|Vy zo%eh?ANzEtLM+}7>XrEP+P*o(#o!3tRP+$yz2<-a|GOH#b?kQMap}xm(fokD({+Q3 z<%_yh=Wdtv0-&IQY-0M?>AIuyI7Aa@rM_oxxqz$TNf%4s6(y=JoxXFrYj=QDgZqA+ zr3*lc0dCsHxO$K@$)VUY5 zh1&6dsDf*Esz_%mXz#VFWvT#wYaE^?Xpw^{lFHgTqr{Zx(utA`{Tk`=H56fevS6v|6_CbzoNd-kcWFI@|%x=aL z9-Rk$EI;r!`~3g^zZ)D19-ZfXI$!y8euHlJ?{u923Z~BEj-3ZzoB>_^)D1ocz@zm* z317EB^CR}=UyP+JAfLE&`c84}_7!op^cCQ5jbLVAaPO7j@##&S05!`8bQ#QCP{6)e z1o9%nBxkTmy;c94|1*}G`6OR*?Yv=lsn%y8`v6>+r; z6(|veg~j<7A9}xlF1G;<%eI0X59-{Cg7O|H3?MG&Z)X7sfH(9zGM+L#*=xd$;sG(Z z2V6Q>Jem(Ox^%j6cvzl-c;MwR@V0f(dWLRr`h-~iq6}>Fk(Wh~r9Ytl5%@p@!`m-T ze+H)%{uWt~#h}!}-zxO)|NqX*&5zmnTi8M2kbK&w^Or}jNry|Pk_RYNG#?TNrya=FS~S?DS(oC^D!1sFTt}{WV%bI(s3siP~qd!StO9gf6a-*#qx0JB~U5o zYk9YH3)r)k2TSL8_ExgIxBv^Pgg^iPLz0`<|K^{J{O$fA0dRMtldT~I^{ZM-KC1@i(sNMk^R}u@lAGd(T^$Fmki(-} z#Llx*#KQ7m(fe+Q+#$x7pveW0edw9=MR4~Q(AAKjV$8Ag;LDaj|NnnG$im+$3W|%9 zC5QR9Ij}f(Fu&f_dVs$VbosSMZ|ww^ZcyyVw0m^^1C<=1m?EK=>dD^q{9CSPj)ByeWU%2yN>jC}_&_Vs6TOK=I&wv|#|NaLncqIFt@nqyt z={(;2ql&*BbooH9!~EtSlKk!G85kH`I$t<`KMGzY)v_GSf5*$fz{1e@jG=*n0qhb1 zhR)J6C7jLwGx=NIFoJFgb~b2!ui)5uG;IR7n7`%t{{pDLbgbL;OzVLXcE`rA3=fzY zKrZpIEIm-f>0|kyzX`O;x!ZMvOXo+;gC52@{%xrf1l zp_JVgbSg`EjZ5bXRghykUC+Gkhprz33xE`Nx}JGij%d&Jy6ja<*+_l`xgWH6tz`zNWdqR;ZdJZ)2aj@r+wUMn4jc^pE!Y2nob(c=zwso< zHdyqzo`GDy0Be4B`mTW3@6w&S0u+k-*+G*VGdvlOy#%e7MfAr(l8&86!Ogpu{0Muy z1zb8`Dqd{<$6e^6@e28RG7(OQCf5Wxl>-M-+k@R-qE$pQ)qg}?v*ch;_WvEt4D|J}7KKs8qj z&)@(5yM51e3$&gr;emLCzf~7hUtV-kd1B~4@6Ifne03DhF zO5dGF_k+^XOVIh|j-6-0J%X2;K(e4l6Cz#g230EpFk6oQ1;;Qn&_U&uOD9I4^S68j zIR+H)2X~+b{I_Eb{H>s?Dqb!^#G~QKmjxjA{=b0aeM^wbP*3H7=#pz$5R ze9-v9W^RUVmL1=3pr~hQ1zj+H*rQieax*t%`?WU9E)bs+#0S+mAU>%73mQ@SUd&;5 zpuwICe0o13`9sDRJUf4SbUu9nx;&}#m?Qr-#^!&F^|H2q85kJq_-sLg==@Vbj&6Rz z1fGfl?UQ5&^#MWEy=QMAqvl5+#&egSH@|08`~fMq`L}U_nx6+Bur)ul=RDzId9Cyf z=sY`+dpdtL|F17gZT$bAoq?gu6tW$bzilD|0|SUHz)%+1{Qn<+3+V2K=KufsTS3MC zF}D9ZK-PhVa$Fb~I)8ffx-lMn$<}=GKnGv*BYV(zLi4GHj)4D~9}Xit=+I#Y(FQG7 zJAZWkJorKgr18Xu=7;tjY@I)vPc|HU!PDW#)cnA{`9wp98>2_B8}sW`pmqdEee)yx zgD-eMT23`IpLhV))qJwSqt}h8!;i5;0A#i12gvyOF}8oN`*wiVO+fe{|H8%tK?T~& z)vq!3S9bpJ0quG};n8`~qw`bev6t?jK)Xvo%E9xOApPBDj-5Y!I*;>jGjnM92HHd` zTA3`&z`sqzs6)`BnSl}F%L$&HCtNzuflWH}azAM6G9oNM{sFlMtP~UlCg7<`XgsKc z4v_#y00Tpr6nNbxG&Xpf|NoObpqd9d?dAX@@(e#@d`V0- zzcKC;2zLzgN&XHR+yiYL((vdkJ>UvDwY(iPUee75IyVhmK!a`)^5|xbi3g2BOZaqa z`?kL2Zz%<@ZsM0`=sezhfYBrQf=9E>Wros^&BvKMk|CQoUMMnwF0woB(akC!4_b?0 z;oJHjrqi|cTb&#Dpoh*Q;A`K(1JSRgCir%nsCYIX;Q&o~J@|F|zYpUFAIsDeC6b`t z?IVxg07g$s5tWh~U^SMhCrUqn#$Z6JUo_8obc5DJm7eebwbna*4}e_?8jtkteCKNT zNzfOeVH9vU%-J_dVGY&NCZRykb z9(2F2C*$!K|C#>$_e{R#*~#wHt#jF-{$oDEsh1n!r*9`NX7JzEQMm+KCXPS#rx<_V8Z*8L!6C+mS)5r)^R zJ-S(^gKX%Oc)bjfMkj~#X}o19l_ta88npMcm(7Ma4QxxCIc>)JbGQhn?QTlD*XNrxrEW9 zvsK_X=-9OP9=)vwpmCJmUXI`Y{~vD!k)VCj$6I-R|NjqKsN>PuDgoLPle_C1XmQNC z8W9GcZq@Z5s`DMVY5)8MBMWFXhG7xk20Gzl4qE%E`tSCCaQt|5n;V`4RTUo1$Cx}i+4;AH{WCn!a;Xw}zDo0> zdXG+XkLF{Hmmf7BWCtDJ%6I{!sO3_{<8Ox?O2qbo{HuBG@-xsl1*mQTo7?=z{_-P; zYUC1Qf(K|bAR;;;^($mxpz|r{b{3@Ycl`l6x4HDYLr3j*@G-G3{xN{O?D_*91EowS z55I``3-SzP{JeQT=w@0Lk8byb5@CS4f46%A!VDz&Q2uS8i@cA-2}9OGdi070 z*MpWMK@Vu1{OR`p7w?O`ELdN_yaW2#^3e>G$q&FI01ACXy-9dt=~}b zpP}M2C~5I;WAo?@V>0}2c(UaHeODHIfto^Kdpu@%FdpaM=Jc=SK*baO zZ5Ke=E3R?TePW;- z1D0U&=yZKxc(UbErD5}xUwLYc;qqO?~j<6sQdAPJQqabhHoXcElDBMg|7&?v{g~`=vd*1wDET z7(t=yqaEep(|OCI`4yvQr;umoMo2beq< ze>rvrad>t%g7xoXbL@2DX+2QF;n>^=x@nuyr}F~J<}m)&V_;Vw5da@M0SPC=lZLl_ zdea!e@d)-?tIGfX|2_HlnW%X7x~MQ3o&<$9D2g0fzExVo*55WitM}=A;MshH@$xfp z`S;C(@slV2z7myxpmyd1kITKebh;k!>GVB;Tm;Mj6|JrU$H5g5 zsP6ITYz0@My{-#9I$J>%sZTf9Bv;M9uXW(#x$N8dy`vT6h8MBF zZ~u4X-zM(f>tf5`+gr})(s{7+Lc=fB(qpczPfAZ7Z~Xy2p9nNV0`dU=ws6Mdt#6=W zu7iYnnH%KB;e{mhgw3!Kr6#Q ztYfVl|NsA2@a(N)>@B+M0SO$3hJWGZt`7X$zIi5_Z1iC~XZQaZG@p5NyUu{uF8r+q zLJSNZjYmKM>(U8XMhTg~g{2Q@lfb8UE6D$zmdE*fL%^>0=)B?6y%rQ7KApco zN3Bla-^T3Ge3%g&d_JAuz`+L%J4H}S&hjp({RVDkxO9Wf@acRExyjB)^M`A%4#Ue7 z&~Om{zA{GseZQLD8+3kZerM49kCVSWSO7FOw-sa^JidBG_JgMJdTqiS`S+Q@)Rw*I z-U>Q9wDlXm>v4Wp$XN_v^5rGa5ia0h2JH-X+zBGPw}PUgdn%~W0!rLBxEL5*y1}dO zTwDM1x1Ip=w}PS()FyA;!NtG;8V_z=50;n;igPf3K3L){f6F0$1_toZScCurL+7>T zLmVE=TS1Ag6KshO|9&x_&P$HXj~PLQWT&bCC>4Ml0qWviO?%oRuCGdF&&Hp({xDCHG{}%wA)WZ0! zc`w*GF5O!}iLUwHe@D%4-&#RQk+GD!VJ|4v894I09J9R8d5z!qgXRUt&clwH-@3Pg zl(=+)b%FXX{#*CypKdkmc2bYHyv ze*1qnScywFM4o>eSV8kaM%R{0B{|JtA8_!u^l~vUKsW-WVOXpI84j@q+QNgmrk%uXD>*ZN9SCSPh2`7 z{X&Qfpcw#SsKE>Q@3;Rqzh*3c1U0i8qO%*Klkui&%YXisCN9t-bFj%Sppk*sj-BVB zwu0JI&9AX$t|Q-W|L5Pv+;X7wt|#c!DX@N5&7-c2f4jl4)_Q=ywTXj)!PW4|OD1ru z92E7S(}x^)f=CzSOaM;h3)vYMAejKvPi*6ars(%vSW|Sj7$`Nrbo&chAG0lt(Q!8@ zDf@JTv+K*4-=MKQaDImbhAPxc;BW$`1fR}tFaCYK{U2H^xb|i+zKjG-f`D@}B6CiI zIV6f3n?t(oI>8ye^?xOAGdM9aexD0U!jAmg!Wd!hIRiQe5bPX~D^a92{(|}dl%rcN za)JuGsi3HZ>IGdN4!SxTQq*H;F9JCkoXNrYKbMn%!J`{o-*jH<_2TI41r;*gHU=J@ z;0)IMQ=h-xi-&=s`H+AI;|XZ-&@BMZ{cAzF-=o(ycm+3uM|UqMDSGnnGlG}TohP9A zzw@NW_iv!Jg&v&;9Xmo9JS{&KKWw?g-;xC$ke>?5m!R?*lKFf(U%Pa+g2KhK^Ekge zL&sE5`R;+9x?bdb0i`S9mP@5~eL8=*bVIe=_vr>3=&JeGqw}yU<53StdBMQnvh)Wy z{G1qD4)C|k`0@Y0Z*LW&OXpIM{f3u(JO6lg-hVCW$iK}+h0(L~j*S9;Kj@rVkm_xm z3=F*| z>0(e$mL7;pZk&)+_c9iA9^>o__;b?ya8`E=U| zH2>G}nMK#N~c{4WC+{h(0v=maNd&(1%cr#(8s4FJdHcZ@qg zM~%AhJAH8N{N~-uVh#-~4~UB#`M0ryeFF3Rffp>z5BNdtZWf4ZUo?CI2OX+1G&M2c z4ma43y}?YN_CV_eW>9Sjj$e;%u*)1fufCl34b<}oHDWNbi2rwx6sY*YkTUuH|39Qs z0@b^5>gm(r@6j9LDGh8f5Ed1(gMBL5($dS@8B{OmTf z7!DHo_Wyr3_z-eP%LU>MP#Xr+ZUKefOJh(01P&K)h#Y2NV89F!pKh-1y&x}p^om}M zVr1}bJ?Yr_-?8(r55LQ)?x~=-acuq$zB)3e(TD$smo`$w#@w78{zQ6t7$MSXQ9jH?}A9+A)*lw_i zF1F;K#TB*d5XUtuai(Flpwmw7+_|L5Q4%;?jb%xI&) z-*@j9XkhIzve4;Y|Np;!4K9qT7_rraK9DLIk@#P({0f>c)aP$sgjIt_x0q+=rI%@6 z|Nr;tUJK23t_+}(c>xRPG-nqE25dp&@eWjezH;Q>=E?|Klh$&e^aiA91D;aQJi&OQ zS4P0I`8eatvfrRpRG=i`(pv#K7r3wN(|=f_3N-G4Vm_p)pzz}PTS(X!KYUpaT5Q+r z_aBtW`UF9V2vR^mBhUrb3Iq4UJUZusGOJ7HX?TADtNHD3q3yEnUa-@;!Mcxw6D??# z&4qs(xD;}Mq$7`Rh_Q?ZUn+stIdwyZXM4jqJUXX>I+-s)hp0kqg4DL)1`ed1=mT!* zf>JibcLpyw--6n>px}l!3!4uzzMO#F;7HISCU8dtl;8jV1)cVIiNEz5XzH|kFQgyx zpTG4PSmG^zOBpk?)%KYgTM|K}4Hy3HkOo}qXVBaegJb8}mxn>gXbck)Yl0UHUi2<#c~x^K_|qW#RE!t$Kqr3O0&{+92* z{{IJE8rFP_(ehB~o0rdj{r_)x$)$TOD78V$P>;?Vj-A(CI>C)~cxry_*?AOCp>*yQ zIN_Gwae*}Qq3IWNqU396dF;Y?5Y&fl2>|Wigr{g%!~ZWQfg8H}${1n2X8v|BW(Ees z|1YP5Lj=Rm3&E=b!5&2pQ3cS-jBarK@6-7kG=MVWGdxd&gBYCrA<5m&r}LX*^HIhZ z!mn=se_8nsnt-Q*6L2pi0iWb=ZG|P^)r`=3vm2DIu%*E?mrjP4m487i`d-cecQe45 z_+|UY|NlWYfnD%&F826p`2kN2FHgSz|KGLqC}c3=<-NE6|2OXi6(0iG~MW#)8h?2G0k0H2>4# zZ%<=qU;vMFf_F_{@#qy5naK^m0MsLyWfSxsun8XB;R)c$j$SA5e1=D-dje$spc1@q zvl%o`5S)NA!Eg+spyDxTe)YJE3S^Gw@&gaX51ySYh-<1r>oGjKs}nqWL3czsC%mwK z`v1QpOaq!yXuHd!+Zj4P6r9k_fTH;IGSK)0Wd4W|GzZ1M4NXC7+JqO@=ytr!0WC;_ z_h%vcnZWwDqw0SNIszQ#4)B~b=psePyyQ#ar{H=EcX;u4g7PEY@OpU;K9B3uou2^O z3jOBx?f<@=Ix3!>E-DJ1y)LYbpnbid)*QrbpoX7Er*pzf$bq#CFQT7-l9;$h_oNS? zeIuPNDjeWY0x9(D6j6BzT6vA=kK%T3C3qhQUiX3x25%~YNA62G@Y*K^=tLhh963C? zg+02RH9VM`K%?)?yTOx){4M)Hv&*3EZ_G`gL2tO%KyeQ?9OP=~U1E^&`-XY}CjPcM zP&1?-WJvQ*7XB8{`H{^(Irv-Ffr}j0`A*=OJnv-WnY+Tz=r$X`_NL zoAHAO<8g4TdURGNynOx#lziasVus{1CjRX~j0YbGa9;43;nB_Q(H*Se!8{Qq2)jWG z3%gkkc`!HP3BnGr@u2kqz57AaJTFonLbDp^BtekxU#5cBqapl>p5OU94gUQ9k2gKM zGuC_mX4Qp;IsjWziyVMmxW-v zAbjM-8KC}UsAK14&(2fO?Uaz^R*i2sI2jl^w?6p>>U6XFbhdr~brL#zUwi`}K><1M z2y{h<;ib;jKcG7vdczqR5Ae5iGBGf89tSN&xB#!0pp)C*nh!Es{w#gZzs&-)P}J4% zq~S@2mjC>nv7mh%@b%Zt&+9Kg2T!~n_hdZi(|N#=e_O?WPtXdtmj4wGJuW{7os@pa zm4Dl9kIvQ!-~a#j>gD10?5+y%WUlgXqlwM$qU1IK6`N*FTTumI!_0{q*=S}s*8Lgu%d zAJu~f5TFYXE_pCscjVs|4w^@Q3YtgnHL(J31$zEsHpth_zZpSc067=dqxm;ese1EX zjqm^eGndMFH17q)D?^EhM>p8r9^G?60v?^rp!QPpF-8~5t)NKeZw1{c+70%wwQBK%Bu?I^CmrFDR8U zl=Omz6F`pcZsh=7TE`4=R44OG(0&)s-g3s5k3rQfIF?>>Hy>cMYz5g~(q`ETa#ZPC z!vintKojJh7hd*(D&Xb=j4uy^HUP@sM44O%r+*LdT3^skK=|dg9^Gu+633jlSUftV zc7et_JS;Esw>W_!zWD$P|8@fp#>1YSaTaNgon;(p&Hq^W+d(G;c=QG^fj0VpL_GLi z4}tplTn)ci_*>+`nDSR6aTWIcLo1Xw&f>l8dJ?-%Pd*fW%hz69-0hNOpv z3PuLdTEUV!@NFL+n!jEwJbN3oC$RKM^bU|GAV=lF)+;wuFfx`tzJykewE+ApexMfoyg)Jn3q9U?0e|7l(iU|L@zKX5iWB zrtw-3KAr?h$)25c8or&W42G}?bg-q6^2eh)g2nNe8y9Fx6pv@8+)L0QWc>0BF5L<* z@BI4@zE;%{ys`V7W2kTEQO6M9&NGnfge`o!YXy+kG@LLzkk0AG8K3e>;DGY0u7s;Dt&S45eQ{i`YGT16e@zx@Yr2=9UAM3gC4z z7qPaPo`BMeXY)Zu$A-%P3>9A?<{|hlmWN9c9Ged?x>z3O?*Xmr^yxegaz$%BC^e#< z+NTS4@=H%`e-7}bn0p?*q7Onuz-N4V@FLD9b&QXF`Qt94zTw|?0CX7z2c${i(OdA} zr}INe2vYdJV=VG{%>(a0G#_AWuwW?t4m!9O#I9mwD81#;D_R@^Iwjneg_oJZ5VTrk zflH_BnisuyLH&Q<1uosLYdm^ct-Kf+Kt2N1vLIjef;P*5{q2G5ozf(bACU631OK*b zKE19xI{*1}{`BefJ>b*%-lx-bL1*Y1kK?WfzzL`cT)BbwdM|J_JlP$(rn~e2NIB?) z2NxBN7l}{>Aj@C(zeu`z8+xCrW4I&et|`#Q-Ls&rRgG_cfaYNL@_UfY?$A`Bj# zTX%f@|KISNPiO0fub=|ISK=GE@`9}71RX5l(ai{2qWKN9LHNa%o3}y3uN|{l85qDj zs|~+(9`8K-Lg&(L(4Dy+pxsvCtPBi>mkhsk-hUx_>GpqD!;_AkH^2+6!DA{uozD#a zzo@=>`@ctL>j%*IO7oBZ{4Gs#3=Ez3Uo1We8YBRVH(J!Y`nd78>Vswwy0;2^`~M$Q zF8FjOXn1zIadr_o^BRMw_;?D_6=94FFTyW_ zBGaQAY_2E2%TbR`FcWl8g^Eq{VbG|&gXN9-MK0Z7_kl+DL1VjnL22Z_$MIH>YeB1t z_**_ofu<2DBOC!FUi<3ww0-g4!pjjSmmY6a38!L4BuWa7y*)-U~{=9^G3($=9P-Cg9OI6%mHqRK@rl;0Xk~szejHc%kfrF zYX{V`^5|^!09C4%H%lcwdINY~#9RTL%XuB50@RK7=sd{3UEHHrhTo&toyntf?hKH6 zNK>n0sspGs)%=TTh-2-Y%b%Wbdu7(GWw;uQoNv}S=b3xuKY`XOgV&xSHHDxGDcUFfe#_UhruA1zE#-k_TiI z=w8|n9?i!X8|oknSP#I~Ve)Si@aU~z0#y+po0o#l)t7f+0G;*(+9d>Px53v*U*q2v z{;%ay#bZzljPa8r|29L1mT&x>pm71u=7ZqHu;BHDCqT6bVtwIvNB(Vv;N^u6LCXsn z|9NnJ;%@<+tm4u9Pmv$I$=;{)zDH*(C=^~;g6|vvvq8>+y0GOEe@8lKxw|~5sm0*a z>%oZXjE>6x|Nl?$>~#b;C|^(Y=r!#N2Hk?V_s7@&|6eFy0F_T*HfU+gLQc?t{aR3N ze0dZ!LfUI;i=_JNc~B1HZ&?6Zf!Gb!<H3b>d5K=UJ=mwh|$`*t4lfVNVt zTS4iYzv(VFXnuMx2e>i6_5)~S-?|l?O`A4@yx-jlDgu1E6B2wu2gW*ygKYzed2~l) z_%J^9w7kRL3~JbW^tKj&Oz8!uJKxTypo8^588^8VRJ{1~+RC(YGx&CXfz=WRA254# zwmtwU>E3z+Ozj03?9=(kr*kdHtQTQl!IxpRf|i^5bZ>?9HBS0;gJqAmf+7$!GIbnW zH-K2amS6ds=Q4oea49IjeY%%|jP&T73o2@TI$!&Co&`-A_j)sWboPSmu;JlvHwLZl zPG)KMVf+CqO*=t5RT#mIozI}wsYh=Fs6YUzZurH_-_i`41no~^VPI$g?Y>+MW-#%$ zwt_~{dLy`ex-($veJnp0^?P>S_2~vX$D23o7+Mz6a0DZUrS$kIvIRmY?~XK#OQ!PxI(? zW&&M&2x{7on_pxzkr>gq$V z)zwgS9-W^(ERwP4zHRHCZ~y=A0F^@?ou@rCFBo0|uUMM81JsV;Uw;Us0puT?z5$Q1 zZgXbD;+u&g#QMeqw7&zz&ds1$=x#j#YL|3}s3>$#1tr|>t)N=Qqq7y%MBv}vx&kE4 z_{yid^#q8e9ipO<*4YZGdHA=ruKM=>e+Re(u>8c|8xJuMQlZTSrF2ljhNN^*L&>MR z7gWpnbb_POxAU0?<6+R5Vc>Z7?YyFS!L#$X2jdUVgOAxfd#h4FjUr#h(;l6BFMv`2 z;|br+o1UFVUkiFRA9V0&KFr~3`I5ioBB<}zE$nG|rTDo=cPmJ#hvlK-+n{S^__t4m zxO6M1Xo41C-Mt{MIfnUk_JRrwpH6Ta=SAjc&>TIe1>(~UmT>HJl!$kX@aYE2zwXj% zg~TT~5c#(q@a>LKQGkZaH*h5LZ~MT%?Fj$+YtTSUzU0Yxm4DyV-Jp{5$xN(K=e{c!47Zj8p-Qe(b1f6ZR7TjLwZUu$Aqvj>lQ1)c}1q$d+ zXc*t|V7%ec`P=j0BR0?8>J*QIkJ)?~Pr*a@v~TBC&(513orlo^IR|VtF@fv>30_E8 zV+1nGC$vC@hAt?qBcfh+H~eBLH2|%oZm9mxQ1K0#rCu%p4RQ9GE^`ML7*Bi{84M4+ zIC0_s|CjGTgJ9b}dGy+PGJuK^k6zIRcM*mct3i?%L6VRp+`Sc)xLvyEf>Jj$($YG? zsRf#jK@JBeXHe<@9hIu!!}!8e+eJmg#qu71FXYx7XlrdMC~gv(YY6tJi)!D)4rWg zeLJsscK&)T;?WHj_h>%s0NP;aVfnix%d=ZV#l!MK@nav$OU3s%8-Myf66!*HxqZ{h4 ztq>2rLDV;{hHnwo&`Z#oPY+0q>CqjK-~q`f9^G?6*$UEp_TYDE1yxKQ{4QWa!7b{A zptS{{)nTB8K_1;65+2FL)e$!2()VPyo`<4Q`z`zhHzn zmRTHpx}6n3<4B+~rdNd9qt}O9!lzf}pa-;d-FX63hWPY~uz5i8hexl>iSAZV8qhr9 z!3dW1=(S;c&Fj&8NWv2|{=))Zg5<=~{D9wvsq{s6FG#T^xUpV)%cr}D12iysz@zh? zPv-?6NH5Ko@fb+(SsH)Nk=M!|-Ms>!lD(UgU(i9pqtgSlQQE-+v^dZ5IDgA!J_d$v z4~f>3^)EcS`Fu1#dRTf16y5P?t}tLIJ>1RZ(+%!C`Y@jKVLa&3>0$7CokuV0El);< zH2(a(pqNhM&j+{seS70Tt!U6_qi3&MLK=VmR8WToRNJ+JqSCY1ts;#-e`+j-5Wb15j7fR<~{1=XG&otJ$&*FsX}U4Bi-P@?8s&}bmP z=2Xx~D!=AZ&?u@$H`w_;oohjZu|A#8eLA;VfJRrlP2@p-0QDNWTOB}FL%TWMU_W?t zf`@rMy1^ds=xmLEs04Yyqq7w>_UqBzssPcK0g;n{@Ibvc(6A_o*DWI9(K+?Um;e7? zd^-YaEQ8sg#&Q@RXd?#L3!a_VeY(N^^XUeAxEt(8&+br(&yM{0z8oOZRldHP|h0@HZ!dn&+K+!7Uo3D%D>OA3GO@bYqo9xHN!N)UgXzoz3}b-{}*eHL666} z4X*VyKrQ+1r5nEg|KI#W&!_Vl|I~xcKVy1_THCr9N{r?Zzdk7j8`1b$5XK#oKXvQGn z8)U{noek7Y1@${Y^H;d{PkQvafeyrD^5|>@xtV{P+dq%Xj|@+GF#a<9-*TW*89crT z?&`w#0Uigb0`0#9jg^7o?eYWACY&h;K|3ltkMU1Az;TejwF5N#-8nS?6xf~jJ$k2t zT2Xm_jh}{W}2_HzPzq}1O+Ez$NLiV$s1O+31XBMb=4;}}=6CW=jTL^wc z@VCf7{2s~Q@)I=1)BGcpzf}r!sMOSqZ=i*O%=|4^K`WwvvGTV_fkNjvxCH`ACeVO5 z)(T2zjNruw-Qb~4OYm?Nf3G3P!QE3KW#R|l&fkumCw(AArAIfks=n^oc?;C*?fmT7 zdEm82!(NbK4E(Kcc^McQz?BCBf6D`21_mEXaN$)X;L#24<9J#g;cu>CWnl0G)lav^ zT%pVbmBpaN|6tx>pU$nIF-70bcfOrZT|3W!4r2ffnt?JoXcsDf3p*>QtIE#b{tlEV zdu@-Gf<_NTrh72{vitvtf7@Qr_>@QIy%%AJAh{7VXxZitt< z=YmE}U&b(j_N&7j<Mn*V610(YFjU1&&? z8ypa?w}QsxKmh}m0juep3JR2C;HsD5^^}IaAoCbXy7{*iFnaU`FoOy<@JQHVP#S+$ z4;}hC2HrM(fqz@ke~^Ws{k4yL7{7a5eg-qctJH!a~$v055vGWjk@&`I30Cx3D&}pb1%|8tJTRTCW3Fx>`H@JL* z<~^70wV;toP#Xi>5NHJzdLGR$1i{xCwS5O&P5^0mxOBo)f(ATa%7Itvf(wwByC9~6 zicP4oovomr{>z`Bd5-2c9Q@m-f~rmaZCgQg>Hn?Z4BZW`Uc2`~wDp3jHIMGzj_?2f zzqt71|NnSUaSQ5-f~%;P>p({agEo!7`~Wf(k%e1r|NQ?C&FCJThxl7`LA5-n+*1KD zKo@%Qw{(M!FmeD78nuG5mQUwgNJg6q%2zHOy`WU-(K!_qyDyYC-~RuZKi~K>e}1(< zcQ42%pZW8n6+AkfH9##+aC1elK)|OPY!<&@g@R8v#Jp~>d7T~-F8tddW*&FY02Or} z-C(o%1tSdj1qD32**%%V6+ZLVfoo__?Qji`PG-;$`z=s+{u^jsKj*MVr?UdTptHcs zXwXu6L~*)+2{b0n%HMJt-Qt&YcQ$ghzq=sjFX%CX@?gdrzp3MFgpnAun^SnoIA%{ovL4g+xdqHFC z-$9+MZy?s87w`6f=<6Pw$N5`U|N8&mqxskW5*Z)HSDuzvijIJ~m6k_}_qS)g|m2cPldEwdqF9~qZ`~9;%@<6j_uLQbKav{L=c+FKwjnt zui^CQ1b0tgf|k}3QT%X$9LRW~VK1m3z~TWZiTPX3fEohKEI(f6g5;T}g69)@w;F)G zc;BOQDk$Z@NZAXDp7#g9{kr?$Wmx$qJh~yR5>4=kBWV1MU$eIXq_MYvk$)Qlzh>_Q zaDxZ5)(1WGqxm?GN9SHp zaD(PsChhwF|K~|39Q94W4X&xe?TA1}|-G1?lN_XL(uh?En96 zksTh47hcW>xu^5`OCLzV0q&c(9spes2<@NW=5I{~wPGM6@SyB^96X>6V!gci1hi=f zRF8wW5L+2udVB%(EWizyms>#Vf;&II?0OB#0-s-Q0rxt<1AZ=@zndR3f{r`lXt~Yb z$_Q#9LFVqjsYm$5|Nkww`CGWbci&9~k8&{wNVs%Iv3U2oNGo{Qg6{xtfBhU3LHVqi zUzr%XxjegL8Td6>drU<@{bSaYuS^X5f~;+(A`HHu5r!^MncWE15c4s2CVhle%pj}&zMc#k%=Bpf?ZMyr{{tv2!Cgvd2NTk> z^yvooJ6|e12K5CQy4{&Pdc)aXHa!7FKB%Z*cscpg|Nk#0Z-q^;NUnxVuoP|rPq4hR zfK9MW*!%zg%UPfl)O>)+r}O*EBG7Jt&hIZlo$MEnwu0v0JrI-39>>8WIG_mkINk~x z+JQ1bgHKQ6h`xBo-?)9^0z>Zkwz?*c_XXsaeD<62$-9Tvy$c48Okj4O{`(+&$p zh8M1DZ~xyXz{tP=Il<%E*4zI*yF(c~S}%caXlVlNWANw>R`Bd}W$@{I>Cz1z7V_x^ zuRZYS3{U{CHwG_BfVAB`It2_bz0kk^|Nl#qr~m)&1iPTu_Pdb?!|OIsJ+e<9(nLLD zB*O6G_SGzs7CQifv=pqYQ$)gT37>u&$w^^qSm`D!}LNQA+|@`6Wi z9iIok+Xc_g>o2x%y8R!VMt6a73Umn4V~2ieaglybW|BuIYpRh5gIBMKy2p;pB>j}s zq|$VcUfTeWNu8|zMj{NJz3zPA1bong@%W4M6)2%`V+&?zcy@>34h_$4F^_JH&``Yh z|Nl#7P`TS3Edjm?!tlROcY*|HuOldCx+4@`)NTMR$AHu-pxXyLcEAP)J-$B%weX+= zgPowzgABDczhLy~TnifH_2^}B@amOO_v-agmjF#h^_m>?>0JtHsrYmr25r}a4(?fd zHrEO;l$d}>e8%v=i~E~y|99-IQDNE#UO8~Q6*RpC z%HyD$VLDqu$FjZHz3KLUNV4lS{jU!mrjIfOl{nyS;xF#3gCy+^(0VD4Ufw(UA`Hh^ z7#a9mPJyDZw}8>3`GAB+=R;7BLzMwkiD(}5Xnyp;!}3gts7K=)aEfm3QTYMd?d@TC zru22=qyM0spm_z9JJ~#%eMEjR`1F>j@Pm&6`RLjF?1M+IX|cWt1LzRH?3E~KnFmxT zc25O)1f-qaqZ6FDeL4-g_kw}|)aB|0A2H|C4fdepPS9jDcmWV-WD#_RPsD9d%kIbj z5-yMKUeF;Y9-WLH5Y;Z-y&zLu4Zr#H?ggDr=hK@Z;M#h!UgG6O76yj237*Zzz^hYy zEx+)$)H5(JxOTg8xV9cBedg6|^Vz5K-;1pEpoCU(4b)f$w=Q}!z!Z~5>w!|qmzzQN z8p$(&?n?InZN~=8jw_eAL0$ z@=IwOczg=#ZeP$vIZMI2^LusWOc)tF4?bh_WIX2CdBhjAUh5ugy_s(}8)%9|!?U|Y zMF4zSloZHvP?IWf^_%VelY@17R}xU%35H3r6)kH23>bp zBH+<$TXl$m;RO#Qv;{qzk2rvaKtMMHwTk}-)x~>3iNvQH94g?WBkzHF8ojv<9=)+A z;Nj8v&ZqOoYe5(vWQLFB=aLGK-T(uS&d>&r-T)7e&d?5z-hc#;&d>=Sy#W;-ouM;4 zdMAKK<2yqac=S#HWkQe6&=nrN6TqV+pp%|@CqRbYLw9)ePJoQNhaT|k7W?KT$Wb!g zquUB(*NfMi!KDq@t(KolJ3P7zz}LpM7J*N1YX?tZltr`W}*;o|azo z=-vx15TZab-Frd#;)NfW?Ro;~1SU`cg|>hLR3Ccu+NKyXGQ4=R<^TVef{6Z+PvQBeS$fMv@AGGsYO-5HR&39g+7J$h}g8!$3> zcAoI)JZN~}MJGshBY2~P1A|Ae?H>cM;YA?f>0n_O28IB`1CD{7pi_5kEuSzkya?Iy z|9@Qk%W{~!BivlW124=$T4TWWd30BByg0u0_Wzd+puJTSd^#V$3<6J7gU@I1=;T5) zGdw!MhoiixSPP0mNSV|P7D6tXKx2HMJlqK`eLXro6g)b?X_&>cvlO&;4zz3%!3qoFB(7#aKLLCpZ)&- z|79R(JxwD_Ppdzo7)3e(Rl#ffpJ$h|_ zC^0a+mY?9!?ablPU2Wje>umsP_)R$kDkd~rE|sW)mV|UZd*KDv3@R_H4Zz+5r2~-S z|D`w6Cirw$3xM>sti2BkWKj_w&^fYF9?iQuKxDZ_wj&i>$Tmh2dYS)zA*24`M>!GV+m92;e8?ysr7n{46!fe zx{&XhhneTGD-;SmI)8XveBq&Z!9(-7#|~pC@aX*IaqvBphvFd*#p9r%SIC4b=*-Gp z{7?YWvx^Z5Jowii@;Lay;xOd=<4}*z3!a_7JUUOgg4XUm1+^=JJzBq23cDKK_WXX! z^Y}qfo#`q0*{Aa!sN3Bk1{zZUEe5^f+j*hX*u(N3fAb|!Y1(-JRB3%8J&d98@ORM6A%KrxSp<_#aoTb`hK`J(2{ou9y4B0%x$!N2#ENApK}$Ier&C;3}{ zf<_Z8KNYchS{^96;?sE?6w#8`UY~^3N1*iO(JlIvOPIm%+snEIxBoLh&e(2#16r8Q zaTt`aNAYL~jE2By2#kinXb6mkz-S1JhQMeD4ABr!EmqJ~P%UOCDov`4ugFcz$;nS< zP*6}%2y^rabyX-%%}GCFUsDDx_(oChLIJfW(XQi%JxV zQd9FvQj1bk7@}htqV@FjVi}?t(lg6a^AwVD@{_X_^72a*N{drd7!r$$5-SyoGpkY+ zO7im+k}}hwLTN?$RjGLjDWyf3dFcuuQyCJA(vuZzZ50e5O7xN$@>0_iOESw+6%fWS zWag!$Rw$_Eq`(b?tIA2uOE1Y#&``}u(FB=Rnwy$e0#}xspOTrDnVJH(Gov&uEhm)$ zWOsa0B|}kaL26=2YKlTZYEf=!Nh*>rlk;BkGV}A0M2k|BON)vT&dbWr%wtH) zNh~QzMOFs&w?aw2LP1e}N@;Ql1C&NGt2ie!IaQ&!B(*>xIWZ3ud`YPaRjEb!3?Soj z3qambNGZxMP=Nau6sX9uC5hRoXtK$PdFmw!#i=C<(4fgrQz*_zEJ{sLK!j~^Vs1fB zszP3AZc=IyLO8J~9UOiPDmn_8#b859@)h#(^K|nva}>%Fb4pVgN{TAulk@Y+Qj1C$ zGV?M^G81z$t5V~W^9w2&O7i22K|~^m$N&+EMU@Pxg*o;N(XqA+X{ja284PKeMa3ly zIf=z345fLQ`FRW}nQ3XMMX7nosSKH*Bvzc73<`Aw$DYB)h9R+_AT=+Ap){{JBQp&Y zoT*@bW?nJKC8>$Y8S&s`!cdf2mReMt8V?d;NX;!MskCQE%gjqbm4+!(WGKonNi0c) zQi|ZD0U_g)Dis-$^K)`ilS>pCauW*_8H!UOoV3iGlGGwahV0bTg80ld25`_6$0wFB zq@?DgmZT!FGSe7}QnSEDloTcA6&K_er-IU5PGWK@Lvl`PVi7}HW=;-6W?phmX-cX+ zgN>~n12}0YG882i7w0E4)G*{`=7Df-Vg)G73PH}wEl3183!3&|X;6_NxiUEiYymi7 z$3qe}I2nU%g$N?0ZHA=c)Wo9X3>Xa!rNq2SdxpIHyi|LJl+1L7;?i7(l+@(>yyB7~ zP+~4hicc)6j4y^{r}(7AymSUsF$SpaDc0`r=w52pMSicqpxdxkZW)VLvdgFVAsV+kSNVdtpM4UnxcSE!;n;2 zl1fN9LJd42flL4ui&hG%RizBDf)~4JUSeiWF+?FO9Tp{~WL7AsrZDJw=B0tkvq}cP zL_fGW&=L|{<|veBrj%sB>lV+vlGOCnA`MMYAY`WJrKTw4G?wX~9S6p|Ej6Dt*x5VdD=eri#2DucUk0H{KD z_YH^-a}5gi^!H;(N=#8GPEO2INGwWMNXswEO)Rkjsfmv-$t{Ra&PgmTE=VlNh>vH8 zN8v##iCj?aQCyk?RtIvJGe`qNVop(NVoId~C^R6Ydx}DCeoARhDg#6xsH|5g$w*Zw z%Fi!R0PDu82_l1}r#Le&Jtws!KM$(ODX};+**^(XIx_e|YzRtC%gjp!RpL;~QosTV zaIFlbdD(gS<#`I3xw)w+nTaK-3aSMRnRywhMVTe3DGaK`psEX0nxiuN` z@)e3p3sQ@qqG|a>3JI#k>L?l@-h}A@6{VTU3eb{SAtkjWH5p_DRJ;JxddN#bh^rPW zWT#ewlAfxbRx!+>49@wv1&Kw8Nja$ucD4*QwhT$BCFQB9dG-v+If=OipacWULky6n zRA!!nYEC9Ml&7JZqL7nXmYP$nsQ{D7%U8%vEKbjhF9ug$u+$9BAH}JKrQq5$r8Kty z(hf_lNKQ>n0XeA{W)&nD7<6?NiW18eQZkDZi*t3MfI(H)$e>t(!6qX!B_%b_j=?6g zEZIsm1;j`$ODux1i&G(j$%#2RDTyVCRt!1{U{%Q(b__PE1$GQJA;IxZp`Jb=o_=<) z08z*N74$t*5WNG&SLFR}u) z9=RBx{zIi0l8Qj(qXMY8S5yhjMhuaTK~8WNqe@j+n8ll!=;mbRl~(Ac=an*)=H(`q zBxiuykvWMapnS-Xo>~&0lb@WJ6JM5C6rY(=0dgK#G^H{x5h18+$N-9JD}~ZLNJ>vp z0Q-hPO%KtWEiOq+&IYR}O3TSFSI|&R0hKzCd;nH%r2q{uxRb$thlX$pytD)*kYrFz z1xqoR&?+6&5DN*8cMJ7%4hRW?Wg&QKVMxx;Ey&DC)k}udna+;Et{^u7Xj==_!9icpU2>@1t zWK&8$LrQT;k(EMjX>kdt+$=5ubuhpMVQOA+X;CUD+b|TR7AKcNn8m3jr3LYcMd=7< zVS1r5Gc_lLAwE8-G&83pGmjylC^I(`)H7j7E-uL}QDjI?ttco`WJm@#ixe4>LFJ_) zsC8bX2#PugVFj))auf3^L1i?gb)8t0u87U%+{C<;#FG4?%J}@eoJxC!_@qqL6u3w8 zQY%W}oTQ@E#B2s%*ANeX7Y5fbM;``XM^8V75dQ!Mq}nwzH#IjuJ~OQ}FBzULij(sT zKv^h-0hZpTuSrcsliI2ptJ;>V3Aveknk@`Eh#O^Q*Z=z z0+D6ovr{XJAt}NWtNGcfmEd+lT7GF>ij{(@HmC$FN-YLgnW_b_BnfWOBYP6$LIz0w zOJz_6l@`Se&|;WDIk6}`9%KeXPHJLGd|qiTJSTw7S8&U$$Sci-*;bHWTmn`EW)zns z7L|aKO$n%!Eh>Q&$51xNU{JGz0g}nVOmH@h2Q|_`Zi>%LDQ18%V6F#O)kTSw4B6#L znI**xiMdIc>81Il;6`I&t^q@NQGQ;!0;s$$0Cj>CQu9C=DJaw_GTt@J)eq7HWkBLP z`#1&%BMZ3txgc|$9esR|`9ZEBp+SDgB2Mw>YMkPss$f|Zsg!_)6|4{k`CK74vltu$ z44%QRfgryYr52WEf(8q6GgCl)lXQmsqRezqmP=;HE(g)@1PL_=ToDv!&$fDhrWQ0;s8@kPm52Ah97;Al!){({l0? zQ&NlI1~U|7=H;cPfa?oTuQeH5XXm6=FzBVaLfawGJ};gN$%i!K7$7Z;qSVA3 z21vQ1ker`al9-uStdLillcNACaTyYmiWwZhY8*0i6VpK*U2tPF)t;dU+&4=Eb)p#p zJQ={_G~oVdYH~?pUV3RxVi7|@K8Q@oEX&OYg=T(!5kqonW)1_me9UJk0_7M6&_Du1 zNl|HDGDthfn#?><_Z!4w&~;!aEX`*~OUW!_(9&YaO-#?rEGY%`Sdxm37!pCvGKPYT z#Nt$j(sYm!AQnSGelfVvvxkoo*fZoN78PeC=78e_&H)7}DC{ypL>h=F0#_P2 zsTF#~`3!#f3dNurvNR{P2$Vn)%MvqlKy4yLSokL9OqC1N`<1-;?msAymU>5QMzyyDBvWVSs*OZi<4jKPeGM~J{! z4B$8cMKQ=(nR%t)^vnQqdU7%-HI=}{T%6qP6jVVSuwpI-B#wfHDyYeqo*Z9XQj}U; z4DxU)Ls5EaUV1V^a!!6RXaFy>C^Z>WH!`GT7Nvp0BoAb8erd5nkgIcO5U5jM%;4eg z>&oEc@9yFm1ZL|)*x-7lIJJbqC9{YDRHA047BhgxhvLCKVbA~!sLx%J9}g-vKxrO? zZ9&bo@)U-G@)U;T3{YQ(AvZfEvxuQ67etok^ndv$CNeroZ$@;3rpxA88k!&{fQNh(5Iwb`)bz|^$lx+~1TZf#2Qj>pT2Yc(gdzf~mEdjyITtkA4Qerf z`lX<{CNnQF2W~TiD|DPm8SYvJV?ASV#1~f(vo~oFlaI;Xrz?p=2mLLIvg-ZF(})B8oXAj z#UN-0X;P#zfP7U9>d)j>+A|~;Cue5HgIeK*uq6%!Hgkb3$;ByIU}(sH?e>rG{jBU(9Fpd%J6|OjE$fo#zs&PLo=`n zVO7i1VLCrXnA#qUeAw?5DXahFfHLo-`71Ha5ble#-^S}cQMX4#J$*BzKMfs%# zpgDk&#GIT;(C8|Nlbe~Bn^*y6rGm!B?IFcPd1eW0co|%5fXa|ch!l9J7QzH|1RyN1 zdT2`|IioZ$8#1CBpOl)GUz7^vB&L<57D3tN8L4>;V3qOZ8KA+!_{5z2yi|tx;#APs zK?$hF2bmKO%4q5NMWC>PC@ihM7jXfGy_XRTm)8+YzkDk zIJE#&Bto>7ULBkE1+&T)NA#~m1%G{*<9MI5^0%W!#6*P^3(22tunEMe5 zVXlW37vQESJea^C!=RyB3@S=gi}e`NQd3hPb2bXF5j{{9m{|hyD`ZwH5!516NX%0J z&8$FLRp7C`)QZ&PQc!CE+?ECPJM;3PvwZ2G89xT(;DC5MwTJ=i0@xTQWOTEjD6^6#zQ7f7z$ETvys_g$20gOR#h_OfCz93gQU-RP@#m(htAM2 zAd7)!MQ|wu&0ZxZmY}GI%8KxZ%=>=VM^>g49{2cklQBN<$s9sQhL zeOz4_T%A2UeZW+ZpF4vqXl@Ba`uRCJ`3Hr775Mx41-ZI~1|vAZt|1JrF0PI)KHdzj z5iYJ_AYO0?$TvZ*fefxL{=Oh0#Kj+^E-(~Cxkh*fhcLLhfxYkH9~|Q1AMVHC3Sx!& z1-UvpdoZ|qga`P02K)OlxO%z-`7*eA`UHcF^YjY{@^=q%4Gv~-_4Eq~0+FC`BUjI0 zXMaDC>R?c-+0`@H&(W8`)!Q}FH6j2slLlr7xq7)egMH%d8X4po=I;&ih>wv6C{TQi z{DLF>oEcnwj3IpEAdoA4Je?e!L86{cPL3`Nu0Eblt`V*f0bj=mut2c0AA_rpA2`^2 z{QUzMTzy?#JVSj$A_H6*Tz%abvDCP2&O?1 z;^*%Qif%uDh{OH-yi{5)26P z5ApX82m!H!1DwHB5SRqThM#|MB-kAxPM`$g=N|%z7C-+GaJ=~Whq(F%gn+FF^#ec} zLxNnL{li>?9GyVH<@8RNN{KXSOHXhsGnybgR5VJr$2*hgj=YO4}&X6pPP?= zID@NyxSwl~iz_IK0$f2UCIC6h1bBjC0_=7MS1^T?pTK-bTm?D$xw|sB2D$n=d$@yX z{}2e@Kg1PeFKFV{5tIpo+`K(OE(r1m1$?kaC^Wi2jt@aHJQ!kia1ba}2M76rVj?)i z5#-h2kRXU;h^MbBgDZ%1@ed7Qa1HVI_jUA(3~~h-9TE}Z1j?tO&OWY=ehjXme&8;b zYiO`*P%wCKA~PoyGC#oJT2z#m&)^E0bYO^f3U!ZFU{Ec#QcbZ^V6X-)YXSFG@`_7R z6H^$hz%?C69;7)hAGCnQKtaRL-!&-6KS&cSp;`>-?LfM_un~LMkZUT~wrEFCwo!oC z1{OjyiHpIp7___rR9m}&J6xbaZIG)#b}*12piPn3tRio~vU}aDcQq^YS6B*K2NH+X>1YzLg?80L69Y5@Gq^g2 zhIoMMd`EEE18OCJD=sHT7hgwb4}Y*+5U2=ub`0?K2elzU<);t0^mTC!a}5dtRo(t> zp}`EUZjkcPGawjT_c?;9Mn6|q7lwRBs_}^>V5<_7OTe9u6sR*`mO>VgAq%+~4@{!F(Ov6B& zssPHF;3WX?f>9v>)ZbEvjy`cQl;&k5=B0p!#^9P6k~52vLF4!e;6k?;M}mcB+)(K9 z2GClPEYSRYNn%N9F=&Mfs5}ELnaM2404*d*g!IT5bU@2RK;zl@MGBBb6nc57n(HsLLJusAl=7Vzg$$b?EN zc;*4r{bk5YEiM7AP6LhXlqBYr6ho6PLunpl*t{&U2-Hb|RFcR8SDEQ~`QSMO&^T>s z3b?QZONi1PV$}B3$0M%BYUVSlWiWq5_!;Zl~H7B3Jph7jL zf&nx-mzZ3VS`=K6nw$x$CO~U&VVvUpzA8bt(m{PMii6nln(%mUD4NM$Z)u-~2m60-J?so<2I9kei*BnU)V~BqZjgfJWysK+}uhaKpj_2U!j%C4h{} zNy#h%vy&2wA!epz7JK!O7FlF({HD*uyc%HQvS5$2G*2!3ESjW(We4e*SL$KA`RjsKNv_`dvJO zT%AK0LVN?j{W(wt79Z@v0H$3dAatl7g!Xe{C;=s;%)EStqLkD!FcF`dn3Z1yWoG8( z7cnH|WP_rgLA97uHK&w|A==F`#L*{K0lYB2nu|dhv^G=0$ihTHDLq-QC`k#l2uVQ! zQe-N?ganhua5QZfOlO(!>-+ zKWN$}C$T6!RRKDB2kTI=9T4Vrxt_i{bF0yG)%>5np_Ns$}uxfAq_MUlUW7I^x$@;E_AM=fB~_l z13E&Q2_3J5jwEIlgDVeA(V|q)3cS=5*jztofjVfKS0TSh0cun_c$hLh88nig30o)_ zUtFG=TELKzSe6~}V(paYu>V!)cw*{PM#3f;0p^AHhdBCR@co@YV=%!CzW!mZF7Ys)yK}r}aJ;W$5NJfEI48d( z9vsgZsfh*g(8vcBc=4bq@?r+CaB50w9tIzz6)InnpPPg%59UMUOY%z+b71DCf{LH? zR8ThzBnk>Rm`ECE6cHM#>B;fQ`K5U!pb*nVizoPw1CXN?K-1X@;K4}LVPtp&L!wpL z20G@Onqmc7WT;?kr@#;b4H1Trcwc{)P#;%@ka#yAf5#Apka);KZibNfAXj(ShyaF= zc*me1$4G{dcn`;54~T+LP+=19I>2e8hHwdhcv81K+DAgd|V?yMmUCe`ujQh zFoeYWd4kB0pir<~jy}O4IylnT$sZ){<{1Go%G1}?*PkIIKGe^})eWQ#)L{sT_k^t6 z0W~c$Q@|T*a`VelQ{qbt7$A%kP?Z2q3Jh*RuC9={gGMPl=)n;R+Rg%6z5?D0162oG zUl9+9IIud<%sw(76k{lSP+mnA$W1KDPECP|pvOI=O^h1*FfmAeiOsG9-gn z&s2d|JTv4Mlw{^+R;8wZTBMnX;S~m*%)BxNo#bQ&o#fmChJw;0hJvC@&`3LjLUd+c zSuBH%U#O3d9YZw8m$9H7MW8}0ML`2JIhvx$pb%XQ-dco^Vt^~sQAkcKNCed%DGUlq zpcTvBhnhKeqJszOl9#9r2a0(crRg+bdV--}ZQW%Os3yg~ypq79QR83*XNzJoT zO;IQ)DY8;6U?{RuO<}N6Ew%%X5acIi#e*U%9<)phG)Bh7VB_!P74PZi=5GbsRstHz zgTz64vR*Q16BDT80ZQHqA@QJrT3G0o<$^W~C4!b?6%{k&CMIWq7VdzSbb+S9pxqPD z+FFKGQ0ogc2Lcr=Ny=e>q|W%v6i^>JJvkm^frh4)0;H+~l}ur-E;!^suD~G`B^7--Z&SZo~)o~t6;zYUIggw91pHCKqW+cu#bNTbS)rE+|$o91e>^fkbiiHN4%S( zGpJpMViZ)$*D(T3qpzcnkH2%gkEgF^2;6pL!FbTHKFlnC9~WdfxCS(FupZC~tRm3N zI;g4w^>tG~MH9%I8eroml8V+`QMwV;%TXs5(yrWk=%^MLxvsi2*Zu(n;Q0%)$RsFEQ*J~Jggo&j9h zLJcZr2v1GS_Dw8c0GnQr2wDII+AEix3SGYdZsjqQr50tTRmQ`Xg@EQri$P0r@{%hd zz3TX)GSFU4dj`;Q7RWjj&~~BHl6)A)mLVq*)XIkO!5NalKOiKS0o1w)a(DG}cV>W4 z@vgxkp1z<^gr^2jv&hvCH0%}c;}{hg9~|!L8UPY>_V*2NbOu$r@z8lZR~LqK&|0y? zq7t}^K_aPnpa2K4K3{? zCqujtpOk3;T8nK6B8(WyQxmg6bI{N|o1lbRm8#(C7sgOs%TUdrWNQanehhB9LYFct zfrf~b&_zLl3`MEn1`#A@E5PUG8LIX4^lBMEa(bYp+r_CRsd;6f@lU7@(3n3+7QCV_ z6}E~8MkChwfG2684SGlGQK+Xr*VGm}2O|u8jx+E5X8U*o>j&VsPHZgnfzGWkjcF=yB;&_l} zu?jLkA^>GCDtPG(V(273rL=${QJbM$o1sV>Ko~5l%}@?f zqFup|Sb||+T5f(yD%85viV`pnzBLZI_B1Io539Iikh>dbF>nq;S_-I?OwPy$?;lD} zEde#K6d*+dgFYzM^+7wl^+5v;rNsCcduQU==mqO6NGt+vv;Zo>w7?4nSQDzA^dm&8+fy5C?5z|Bx;9vm}C*%nKzYSJOXAohXz4JK!cfJ5m1v9BIM!k`nEjh0w2fRKXmY?F2D&v##bHQyh@M3UCGY!nNWhhU~ECE{yj$tqlWGjMKP?VWp zlvz^Api*3tl9>ml@=Hq?RP4aa)S@B=aE=C%pj8&ZAuga9PEc*62ic65Sd?A{YLbA= zO$EgRs9*(;Cl_aDf_CQ?fQ~x=P0E0_z92ZZ3@SDZDtZhmpfOy~Vjcz+-Ao1*EpVv= z-Zxat0E%wVhM{5x(544)_<-7=V9zn+f%ZIu0t2+=6`V!NGjno4LwXD;`FSN^MqYkV zYAHDMz@ZSIm!AjTX3LP756;c02oYy+1_kv-VB;(bklIfXq!_{kE%l3sw79KuK@CAC zaQz4?P8C48J2gd-Au6>fUl)1?2Wa440bHgl!ng2&W&ywp?G+h9GE$-TfTqZitxr*8 z;4-LCHL$3vP+(9{H884RfLfPX47bTYEe%wWjR&<1tc6+q(z3<|ChknRwJ0<2@ipx_Id z0&rna01xfEFerdV=v`eH6hLJac%DEZ*vHe^6{IE1(Z|yTW=%$7u|iU6Y946J8Ps3{ z?XH2l0XjAeN^hWaj4TeVc@-Ia6N|IK`^0h*3yNU}PJjvoMc8z5Q7U-Y5#kwW3@C#7 z;F*H~fzHf4ozuo11G;yo;-wV<>3;1+?ldBeeoFxB)t91T?!85ab!=7~;y{ z;~5g-;~MYk=i=$;$Kd4Y4r7AW1j5*Ut|8(6LEbPfXkQv=0t~XR!X9$aN*-u}Di<_K z4w}OPkLuWi_5x&sX2C$kBxFx2B&hm7MDq^1^R!4Gzco;=m$Ml24*votv(0`fOoz_Y;Z@2dLo$4 zF0SASQ5V;E=P-n@e?UBlV+hd-%#QSQ^??SMPnaV# zvRvRScR0%v&T{tm3x>v+GhEOw#3Me)6`H1;9G$%pJjgr^*fuZ|8d_jBG-3I8LJbTK zfjI%rih#3R5KPxFglLefdj!Ob{(jD|R1oA2^|oV>dvLsCC`?5FXnx5ZqTD+?-Z2Qu z4)6~Sfpb85oE@P~0&xODgFPU6f&+YD65z}fAK(}awaLZR4Vt=LKucV~9(MHcbc9NS zDo_|3GTj7L0hwt6Gof>1V0JK)xHD)GH8j+~Y-p&t_=iA6UHn6!Vs1X30Z>5@6DkTi zMh@bB(7YJf0`SxrnB@kZ9Ro96gMvWA@(`siu5O-wuF%8*3Ln=9Xz02GNBTn4fELJs z@&knDW3WKX8nZ+QU z9q8}}&GzuCY4C*@AfT|U68w4a_$6%A30vg$}W3T}g&IKh!b__Pq z11A(!i}gX}t9N)jI6=hwhK4Y}I1Jw5pp+Ei=;;H_wcvCD+I-IdN=os;p1uJ-t`Ig@ z3Zxh!15R7Hpg9=OxQTO85rcD1CWBKEgHtkta}k4cGDA=*gL5K-YaWAh4uel7gQ|f^ zRjGoiu2!)EgQ^zje3leV$b=ARQV12tGB|-62n^ok;P4E{FD_vS0?ko57Ns-T+Cq<+ zu~J}Aw($&3EyP&iq@a-uT0aY#!O;Y%2lEubT~jWG8qh*DNW}#euY{gt;a^Z71hG5u~bvtoQ^Eeu9R38Eio7XgG75b23TRxp zI2Y9SPAo1?%>@lHm*mGoPKRLtSGk}Rf=d9jF|#NUG8F(?fD;d{nn44s$*J++K?=~; z=UmV^E8sEF%pA}<1<`(?xI|k_BHOR>d#ihv^;ATEdG&3(PwMYTvLhxE46R#0X>izh&6ZMwY1B!;BZL>L+{6c-kiFeE1xm4IeCDhe2KQc^1l7&0mg@=F*}i_$jSqcXcwuFl+A+KHonW0ydgsc+9 zI*4Xt3%G8G%KSV?e=ac(d`eGADrn<+UV3T@XrD?EXz?y+qcLb_3#d|I0C~|$0o>aL zZO{je(UpNEbU`fx@OqP+%%oxl-Mswbl9ZgxBnI7l24~Q@AD}_rf}&K=Y8CLw2N|j0 zBV<4$0>!C?@g)p4u(WFh@`@cpJow~Y5Idd$RFxMOsFs$h=9H=ygO@r(rf`c=bMwnm z6_iwqmB7x32dP(0VF2A$r_Z2otY@TWpw9pmjaMy>S1o1$DTyyFNJ%V71ubz;1s|PS z%m5mH069_>!c0v8y`Y=|npsW)9eJ9Y zSfLB*^@0u&%*oLO9jQ{Bk)M;oPypVE1d132&_82+qL!;8!Sphn|Sqv)eRf`#PixbOIbxTrn3yMLjLqVJ8LVN=l^hKCSg5Y@DW*#lal;2H$h1l`gAorXj*7c7gEdNLUFGW61uGr%qdMI)#v zhm8qX3!1K z(b08+EXmAF)&(_jLBk4Ai7K6<)SRMxh^i``y!>(oUC44G2HkM*E;L>6*?q+fx@iHP z&J4Pswb%^0{>BWtX?gj&X^F)py1AfoRX067CCM0CNST>Ki=BAr5?yG)VP=3V4k%p6GuUS1iST0l!NBpsl|xzJh)w0y+hO#|FB1|6Ucv&X_1$utyu zOrhl(*gPbA%#rO!)qyO7tOJ)f%}mXZY)8^zhST?^$TCPeKuerKkq&k(s;i)7HdqE( z2X3Du%OL46LG~Z29Y)ywVS?M|$TCQF7$f@+#SRp+kaQSf#ycc(%}fliyUGaJe<*es zBb$X}hapa%!)ibD&^1K%AF3V5W+B;OfYay3*i(s#C9-Q#?LamQVTXw&Zl7aMB_k6C}Q0>6sbI=|E?77wmhtE+`D5@RUQ@e>VPM;g%&|!qr=LX2(j^uL`*P^(}0DCEF zVu&11s5)?j6^h-cI&g%Q0ZyMAVE4JPB`%+vT4HyVu_dzI$gVQAK=vUbtc+2_QFNf> z10)^h$f1s^1KEejI*`Rtb>Q#^O09~j1KEd2c9akNW}4Uzqa zY6p%uH^Aw0l#&d|RX7`Lrl#0^ZiKTPXNnTH2s@0hwBsQ4xv2^EbY+CI4QGndVnMP4 zXB*Dc1bezNLTSRHgf5O&h7ry-oGD5fj^rwow18poc*@3$ahoenxfKtyRr$p5LE0P^J+i)h9*mJD`N^OT~2liZRV2oTUq3Xa9=P2bd zst)YA)&QkcLeT-*uMY3`A^997H>2vn5rZgc8dV4OQq%w?W>IvYq*1u5j4W}s;Y`f2 z#)pw5&NiG0O3Mq$4xDW`6O>eqqyxny6n|jv8yH#QY{QwLwAGO8KoLi^18c4|vc%bj zGeN1nknF(OhBHCQok%)xw&6_7u*SKOCC)aS35t7>?7-QEGr`{fFtS8xccFw8N-d0J z2TJP$RR`8QXk>}A4QGNZInFkm2}-$y0IZBCvssn5L%E%lg-=ONiUbdU#Zo^^kO&FQuZo{FZQ6!(^Zo^^kO&FP@ zgdvJQP+DF{cHnNqVed^CnWLD5Y6tcb&KzeO&KRXGLb%EdXB*BKMFvR+&NiH}CHAt! z3}+k882jkCkr~c5oUtYL)Q&opj2u?RDDFk_2hKK}u?6PJ*NaQGahmO#;gQZ6C+9Ho{()q%t3INNZ>C^3a(2TECqY6lLV<7~qjqqIMe z?7-QEGe&8DAnCx_hBL-KH(_Lol5bG_fl?wP>@daIhBHPfk&$%ZY{MDjXt$fEssnp!H^te8GseE2!N?S68_pO<>(vxz8_pP|E<*A-&NiGe zj@B#cI6R8aQF14e9XQ)?#yDE9s3XOwc3>~tO;K6~s5-EhyQVnXaHz9kNd7>nA5rbV z-g-5~*@iPlDVGp-nBZ)~8DpO@F*3o~hBHQKZ6n!%vkhmAqn&7iQdXk)9Hs0-vIA!u z&KUc=ff4G61*#p`%S67exn3iv`IaDES6e2lm3*jo%HW8{0>|+_mINNYWINETiEdx|Lu>0H?=Qx}Zj#i&B&NdwC zY%!A0QR+t&SE2Y2SqE~6pz6S$+Ko|a2~-_8e2!99qUyk&&y8`m;fzp9G9-VXlw&A% z;25nn#@U85!qMt8#@U85GRI!Rq2_;7S7EOQjd8Z&z-P5$8C65g1t@mlX!RN4Y{MDh zX!RN4Y{MDh7bfz#(W>JKBF<8VeOX%xv06#t>P z3Z>LX(t)!LXNb~{LehcaT4Xy=R|p{Mz~ys89DQe0yHV^wX?Y>+FvQu0GepS;NIFnV zLa_r!>0^je@}cTL_92oTINNZBC^-j72TJ}&u>++pLe_yRwHxB-4;tbehciUUYe;tB zY{MC%j6fjkKn@WUf1sF!qywdlLDhlmLu4Ju;wU<>uUs}V#98AQqO=E*>_Aydfno>t zl{H3&I9p_fD7h2K4wQBmiXG@>320*h3_~{<1moI6ilhN$bRJm)jx1n+ zGa=xZYcoJ;<0IRE(tJa55=wBRXh2Tqa1Dl*C@o`T4JeH_Bn>D{P-G1#p@F0UbUHn} z#e=K?rP@H!fHI(jtO0phDUy0D6)(g-&;gsqAi@Mhn1Tp15Md4?EI@=Mh%kg4#|b`< z)6fVk0@h^+)@BISX9(742-ax`)@lgWYXsJ71lDT=)@uaTYXsJ71lDT=)@uaTYXsJ7 z1lDT|)@uybYYf(F4AyH5)@uybYYf(F4AyH5)@uybYXa750@iB+)@uURYXa750@iB+ z)@uURYXa750@iB^)@usZYYNtD3f5~1)@usZYYNtD3f5~1)@usZYX;V92G(l^)@ugV zYX;V92G(l^)@ugVYX;V92G(m1)@u&dYYx_H4%TZ9)@u&dYYx_H4%TZ9)@u&dYXR14 z0oH2))@uRQYXR140oH2))@uRQYXR140oH2?)@upYYYEnC3D#=~)@upYYYEnC3D#=~ z)@upYYiI!0Y-j-1ZD;`2ZfF43Z)gBEz|a6}f}sJ}2txy~8HNU6LktZdrofUI#1v>E zGlZA|O=i$^22E(tlm<;|khEq9NolEhK7)IXb4G&hLDtK2uX^DkhEwBNsNY&)MyAvj)su*Xb4G=hL99#2uYHL zkThusNtA|=RA~rFmWGgYX$VP}hLDtL2uYfTkhEzCNt}j|)M*Gwo`#V0X$VQ6hL99$ z2uY%bkThxtNu-95RB8xGriPGoY6wZFhLDtM2uZ4jkhE$DNvwvD)M^Mxu7;5GY6wZN zhL99%2uZSrkTh!uNwkKLRBH%HwuX>&YY0iWhLDtN2uZqzkhE(ANxMdnv}*)OyGD?- zYXnKVMv$~?1WCI_khE(ANxMdnv}*)OyGDlKv}*)OyGD?-YXnKVMv$~?1WCI_khE(A zNxMdnv}*)OyGD?-YXnKVMv$~?1WCI_khE(ANxMdnv}*)OyGD?-YXnKVMv$~?1WCI_ zkhE(ANxMdnv}*)OyGD?-YXnKVMv$~?1WCI_khE(ANxMdnv}*)OyGD?-YXnKVMv$~? z1WCI_khE(ANxMdnv}*)OyGD?-YXnKVMv$~?1WCI_khE(ANxMdnv}*)OyGD?-YXnKV zMv$~?WM;xp3OdR%IRkVkodRe}IcO8M25e`z0_@ZYE6@SJIiQ1ZK@B?w4bX{fVC9;i zV@{M6K&QK=g6^w=-!%^rPpwDtH$bor!e zil!A8LtaWe=mIYV4KN8l_)rt15Og5F6~xrcG=zm<4axa=DGC}OG8434S0S~cphy#B zQc`|OrGiFDMrt1De2miKRIq4jPI0P&2AE9F0qy42WT;V4Rw&KONi8l$HX0L~FfRpk=mByRf$adfLO}yWLV^WyC4>U#$RP#LJaG3&@ zgc<_vFySx;DvQe?sI(zC1VHWu`7)<872;3OrFXcz36g{O0`512P*G}0Q6+AjB}J7O zTH#{g1ca^^ZU{$=B30N z7MCb!&}o)wnW;G`VE==YtOi^L%|D4nmC=T=3fhR+C`wH(10~yJ@FnzM zBS0~rYX`5Uz}HiuN`SJGf<_TEjO`&MIXs#mNzN9Ml2C#NBvVrZm4RCTYa^h!)zQkz zNdcr9QW`<>3L*?Z21Cnx&>d~b*n%)WDN8RcKVQQTl0|btX$GbT5?mm^Drmq@FGq6% z$i3PKf549O09P<*u?4dR47j;aX{a8kWNtx8CAb8}vRcQr&7IXA#V8Io>Mi$l=8zL2AmAm+e=1Y~?! zW=gC^4yXYGk%QY&0pVk)O+l!|kjq5K!Od}i8U)L)=#GIajDT2(TB@R}#;`IOo0Tv- zkyV4s;8=}xEb3LDPJ}5}0R>E6Nd|gKQ!&(0P%+X`0Nwoz>RXg#fEq=R!}K8G4)=_T znvQ}>f{ucUx{iX1Hn_IS$t(dCuj#231!#)()AIB66>RGi)YJ0w)xnBkg)vAqNEftF z2B#))VXL44Ir$k;WNCsWL3v$419bj;3g{9t@MY3y)`4vSSqHWk$vT*c@CGi}M5uK| zsSvloQko{jRA@4X#2qXELE)E^S%MyZhB^vRE5W5#NfGGqCKLnU;Rkjj#Lx<;v#={n zNXySp0Q&(PzEDLFw}EazQAh>3AE`<}b|a|vibZG!opF|$0&*0@N{A`o9&ABA=m5w3 zJa7{zwHQ>@g7raiHbNu#bUtvffy`FWNXyU3$u9>PiCZQ$2i)I<*amLyz{@a52*8}I z1qxS?jpzXjs&cdviz*?N8%TwM2G}6=)D#7%#h@UE2QNrNg^q$+QcgCqp8S%G)FQa$ z$SqcI=NT>oaVoU_1fQPVF%M5ohL^dh0 z2;O=GH%s$U%fS~3fNcS{O7nA4pdu(fhUizRQ~+i6yp(tdUjs#deojYrl0|l1F^xL1lPw38ej@61r~** zHZUJ_C|qV9I6|P|3qCUwNf;bYP}3m?YJ$4<8At{}MG+2ym;{dvUn?tTuqoi!h8OMd z_=Y4wcsT;@-@`)7$_f-xSXx6?R*);UVcYA3X-XltjCnF5i48-*zaj?B~)dz2y!C6B;VXr$%mBNq#h zktvYUg8bqVUC_yqrJ%tvG%H>GTo6Mkptu2#n1Mtgy<|wFB$kvEVe}Al5_6MM5;0r` zi#A<5aKj6f$k8*Gt{oOTp~fLw3pp@2F$Z3T6@$|+xW^411%tQ_*Zqpe`0d1T-d@nUf0AkE*i_qz;rQz`~G%170J7T3M+TCD0LEWZ}e|)I89r1nAl@ zO$KEJ29Qf3rQ6|a}i-w@7X@ofPL@@Z|DufhbF4)3MK?xy_ zqQ$}hSqe!Dia3fE(E1vLX$UQ#8Eu3(iWbmD1%wnr3uqA^LL60#F?NT6ZfnP`#mLMA zyB5%r2OL^JD`OB+2#108Fd)Q{9cF|pUQAGIN7iBpTJ?l54PguD3?PI!iWbz6LDFJ` z>_-$WpdE_{)1a5xL;Jp<19bCB;uDjKH9)lx;E!&>qU2PR z^QxmObQCIM8B}%k3=Ps54D=XMRkaO_Qy5Y*%Q90^QxuXa6$}_M5_8fRQp-~F;8*b# z<(KAx+u)$3OBO zSR_Cf7=kWi%ufT~r3h6HzflStU<^PT)?sr z0Y6BIgE*->9#YA~C#IyNrZ8wbFy!UuRizf?+cPBQFLMd8W8O16>`%MXyCrM7+Ufgf;RqSrxxX<=0MKihMZLfDtO?ckR%L|Fa%{h zxC}hegGwE^D6)D``3aXmC^t}0f{P+62jw=n1Y9|&w1JC4l|%0hDga+Rpk4wRTq;W~ zDpAPG%u&e9E6G;?`yF~fdvbmrSQ6B7M3K!&EG|~aF9Kb%S(=lo0KH!z1*)wy4{{T% z0=TLwFUrqLSAY*_L$7nogxoL*x=u4QITPj%P@+@FPlK8RwVnZV%70EKH^c?1#bACh zoTqH#404VYgR)IgYFcIuS6u^~ZY7s*|j$0RD68WVi#hEFop!=2~BWa*p2h~dyN{dq!lJZM36x40h z6%zAO6x8k18441UvlXD1MS?CXNyKGNyvGf&2`q)1W~KYnlXuhdXt^H?4r~K>*#}SpvP(15~U-?oM`y zs3>I!@Xcj_>MqW#N(J5Gkd%{}YYz^pc#xeCR%sqO+mIo(q9C;>6Eydlm=h1W_Zd|r zwJf!$vLpj^kqE322XQ*6L8Mv?ZVr{^WmYhxG;R`f$9D)SO^Gn3&S z1m&H~^gK{(FzD&&DI}(qq!uZlj3vMupWxYZ&@H^+gbiB6q{)z*n4KCAz83(rs0tFD zsA3GId7zsuV1cWUnGU-0H3eyD6etscuiggVcMeJ(ppqNB;z|KD-U_~p2OO7>tcoxy z59E&&@IWF1rd(Q1W`S;6PJRIccxC{*HVi3*F38mg*tKEGA@qTU7GoD1isq^7~y;7S(G1FwjI^B@C)a4saIkhm#ub|$icpml6; z8PMuCI43oy7)d2)wEH3t!1d6_wI z2~Zmz&H<0?!g+~#h|oszbY6Z51N362qWH`-1RJuP5Wxp8l|yhL!3fuh7SrIF4!G6O z)(e~ux&IU9QP4eoFm}9;r=M$lJX~cw=%Q+5zN??Jzl*1zdwe`YiKmOJUx=rhr)v;H ziJPYjLkak1%M$RdmL=dDEgk(r7)rnwT9)`YI=T8Vlz{F@b_Z+l@plYiC<$^5@$~m| z1j+b1x_kOL21PQIID0q-F_gfrzbtWrU42;+91;Yw+u7eQ#1&+8kgL0EL;&cXUxpHw zP+z}D2s1chV(kX#^?qc7+J(-LTkE(wnGb#irQfQ1*B4Z7$P6nJ0`G~mGOaQ`5e;CL`I5Qz;k z!`}xcfx?4E11RCZtZ+f$fDMDH0$+Rzb{WV;;A8-aB~N!h{~%YFct0P85@&y3UvP}N z`Z~GzJ40LpVKbCKXow~cSI~{NPz5j!$nNZTkOEM$^zjdO4Gw`teY{_&FGGosV{k}( zh`+b1AG}=yx)%}Da8rd;bMU*w@{>yva}-iC(=$szR~2UFfF^PiRFlDDPkE)eNvTDU z!5UE813Ib$Y5c(&R~e}lu&SjruOzi7H!~01l7`hU@M;HiRaH)ENh-MZ2RCaKiYxO< z5-UJ$bOWOZxLd(hYJmb|K0~!wL03Uls~FV#0WB*{OwQIQ$S=@jK(1GyBJiq5qoA}n z16>J32(AXj0ERN~gaqhLt9;Pyo>mH~1zd2!loTt~6i@>~L$yFtM?tli3%P*=n{a?M zkP39|a>`1Qa&+y=5{rr%5L{3r2HG5itR4i7_JK-MNK+6Y28vpEv4bfIEweBspoJH@ z1f*O>7X=sH2*-h@P8jlwQZn-riz*f16FZ=mFRVB%D*-El22??Q0cx0}a50qRXQ$>d zfYSh|<*Hh&puwP;qNkdo3nm$oON-*c!3+yn(2x$2DO?O1dHH#%nhcO+0cm2OaC8(( z^Wg0})ncSu;6RNME(TYS<)9P{ZjpdnLBS=U&KKzVDF_SP-N?*KE=o-V%~h4;g9dlG z7=lt0!9%i%3SeJwG5F<|gIZId>DK%-h0MHy(h@x`20zeL4OoRjW-&u>MrIo55;_J2 z1qBt=6a`xa2GCq!W}X71<8KY_4knhwr&eT^Fd#WyPfw2l)ZKz#Iti|=5#f$132sfp z;{@KWLt6o*3u$iY+Cloo3gCV*D2+j?c2MKYN+B;Fav>l97N%dt znnA^l0lB>o9$qPd-V9%!Sd;{nWsG!dc96fm6$(+Fx7f<-`0LNEi|9E7n_ z!3oun%P#`cNkyrN*oQu1LG z=vq!hM+M~5lzertAUN3|3qYoYK_W$|C8b3WlfVf8Y#6v*2Vte=Ks=h4nFAI86$oGk zxV!+f67wKI0(E^}ehFAOGff@Vn=b;{1ZldVih-MNs6vq7K+y?}2^2AKTMldwwBWG^ zbHI%_Fw51?1x&|7TW?Sfr1XPw5bZXQ0BT|fk1?l$)}bmfC_(b65`z-j!ewwm1NGpO zQx#wxU?m16*dP~(2^vL1mIGh+3)TmoUsZs1x|JA|z_SEMe8>vu#2h4{%-qCuNZE_f z2A+&Ta3Pg(Y6@b#gc5^N5~y$k-%OjDmz=7^pafM9N-ia-c_m5=N-3qexs{+D14<0) zdg>4@#W{(^8A=RFkh(cVp|~IstQ*G9$S=yQ%FhEe4N4M|kQ9Q3rxemsQ&W({k`s%H zG85BN6^g(~4oLB9mr@k zkc^d;5`&VJ6{t*ijR*(=wYiiSlwh;>x{&G@G>ieV2c%0wi9tyNv>-x>K}i#2suF`z zH3&n+Ku*`vN-RoOVo(CPP#2^LwOg;mpaf}dA;mN(#!50l8Y|9EFG|d1 zP;oG1D9JB~2Q~kSOL9xV91x=z&SC%;&hg;Vi~+O+1|-d(;$Xx8V#Mbcffhk!<}s)^ z7&E9in1HUx&P@cZa4Sv+-qKslV12hwmn^;r{vfLCzn1Kj$ z5MjaKU}(wUU<3+6BSTOu8i5E<%o&-0Sf((|P={qhV>cT#AdnposZJO`jFQY8hU|Dy z9m|j%4<0*#4HU&g>UxIkc<|s5DAuy$Q}Us4kqx@8IJq>HAv+#Y!!u;ZgDPkcKc^Th z3>n#pPX!HAz{Wx{)8b1KGjqWH1`qb6<%1GP5kp#hF6h2z2nC4(2)mde4P;dbOg=HM zGCsQ;)Lvsqi%%^C`PK|<96T6{Ay&ZFN3mY#Nc3T%-~>b!T<_Rh?psZgRvQdgRwaSC@w&WpqQZm94`>V9gHm)9E?E@ zFfo8ifE0joJvcQM#KV{n^#$>XAo;|c5{82KoPxxn)I1Oa4oR zm>4k>z^n!JLLiwKA_NK0f_TufFb2?V$HgEMz^cGGs~|qR9K>UQGQc#LhzD2MU?w=q zKng%(%Mb$)QCR>@s0Hx_MVYyoC7ETZ3?MPcvUms+bXPM&0XXwPnc%hp11RPo%^c9( z=#aFNT9FKzpaaW6(U$pnq$!^hNMttW=E#G-gm=?JO-i&E1- z1-T_dT0AI#z$pL{ziII(99U9zFf{-N7bqej5e{ah0zW~&I1{K;M8fFwoH`uL7IoTk`<|YXCAuu>We8B+j^MJA?I5&dl{n3O# zYY@7q)^fGd(Rc zCkJF?K}kkYYGO)!ab|jMVsSP@dTL2gYH?|1iiVLUl#>qO6lbP`=95bD74nlx5;OA@ zK-&@$lR?X_8HzL03ySiS!6u~T7iEJqD-@UH7ZjwXCFX>kNA}4 zWtKoE#6TfZTAY}k%8(2$c0l~pVo=zC_Uh-Sr6g8DWFRCc?m!ZtlwWM603ZG-N`*`X zL#BJ7X2V8D;F6#QBy5Qx$f6uj1;$XET2cgIrKgsp7v&}9#uq^sNP((Rh4iBQ(gN@Z z130_DGdftjSO=5@auX{+PA(|N&n9|G?TuT1<#`~D zAbrKDC8e1u44`H;IFsh&r)TEH7eV5*G&3c>h(X1kK}CfDl#dh{5|i?aN*Dr)@0{%aP)I$2oLoO337CHbz#U!EG_}f@s^YpGh}Dx*cW|kO%$%4!j7!46f%*kO$ zNd+zcVF*tI^@16oIolr0D9%g=<^R0IoYWM125=>nnGSXah!1iOXmqy}G$R077L!|G z&rkreBR#dGAibynEamT2xGeidq%<4_`3S~_&a;UgU6c2KB^Z~1M_IC^lc7>{ji#qx^ z2Khn-ef|CXL;U?bo#TTX!!g8A^gH?cLp%s^6^t8?Y+Q(=Cqr^ExL{2#1ydop#SEdI zE)4FTE(}GPDGaHZDGZRMGN5*US!PaZdMZPDQDR;R5#Qg+3@3rl*#G0vnW6L3tCz1<{~l8YB&(p?t71P|*nG z7r_LIK=A}h(lIuQ~sgU|q4f(;i&)?g0Wdjgk1XaF6d3KvGv06L2jE`!hjIy4b3jG_UD zr%{AaG=Ppbh8u;j0dyKFTo^@zfw_VbTn3>5bQCjO7*&HARt=!d7C1DRV$}e;t`vs` z6KoocK!=fH)nEp?%@ZyI_k$7WAXK<8vLDP)f&-xev||RV22;>!-EbL%2GD*PxG=H} zCOB*WohFZ61NPKv1Uifqs|N7(C2$$&z8lbqV+smkjy|ET3Poks@Ka=QCNS_}{K%$2 zHWz^J(S{2nd&~$Wzac^bv>O4t2GB9ba2bRK(1D|HVTcVS8AbW!d7ynWpw-MJsR}`m z?9Si-QOE$H^pY8J^UG2}Emm-O0b9%uDK7Nj;vhxH^H>|q=U%~*LM256#L0u+=l*E!mXsZ;wjFzD&F)t-Q7c36$+ZJc!7nOj! zROm7}piLU8IVlX#c56w#LV9Y6LMcQY+D;gVAZU>V%m&DW7sL+G?nVXGbSzRynd#Ui zz&j$5-GyWxSW`|4gHvL0Dnl{IYK9=Nw-`W&Kr!T{md6*Trlv5sftN6sq!vLf1`T|H zR>XjGgWneju*0ltYP$r&!7>;_r^Q32{?gT~JC(-d++ zGO5K3RtoxPdV;`5mOv8>czGn~aG{daBJjR?&~YXVi8-M0m`VjivI9*agQYa=;VuNV zfb&aXLlhAADHIf?f<|FL=R88PFgSZcNAbWzcy{2GDn;qg;Xm-269x@?MNJ0K=5biD z!eCqkI-~=l3bZ5z;%vRV)N+QjoW%5E_@ZvuGJL25AYE$M*ampvH)sX|I;af^7X_%( z86bv23Tc%(1{F01l>`PAbp{n}1{GUK2NfKU44}qgVo^LuA1JRCr>5oSq}Vg0fmYhb z!!`ieGvp=arl!OvCl-KDm|=h{;B$5ic4csl2yyjuadlzv4fP4}1TDy7aPy3Cb%8BA zVDR&YGr?BILpFbab_&LW1sFh66Hq32Vh_BF47{dV0h|ayX&+Qdm1m};>Vgs!WS9pY zUm!)0%_>ldJkY)e&@?}2`BPD9a%mB0;~N7wRTku=RzMENNQImnqF|$%XUBlB801y3 z7-De&+$L~e54^SwtbzfFpINK`9zq4@Y;b9h?p%;JAXy%~#1OQ747Oh-IlCw|O#xCU z>w_EsHU;Eo=nMf=4!X$!oY_DdR>6S*Ui1TZBB(0^Uc?Vxo(|sX50?w@5B7{ufR1W| zch4jF8{!v8Dq{dG^@1K00I~-x$55IFjxW%u2B7u;Xo*&8UP(r3ab_`iF%)<`MnP&~ z3H+o%xXsYwNf#VdkR@$!IZ%OyB7tmqB6#Z}sAxlRQ(_6YbVL_}7ET34skw=ulnP1% zpp~AWaMFc@6F8E<%PwI8h!Ye*3nD<39xRB^jfcx2b`HR^HFzt4LP}~uNrnP+Y_AM7 z=?yBbbfIJ5pz%iVW-H{;P|zk2aIk13m8OIC#6m}&70@IgWb*%)QSRdWzOJUlvt3FnwuK$oKsp{l3En+1X}cE>snC)nrp@(>w`;M7%mAPJTf7; zG=+f5$jp4u9E4|H3TV$yeh~x2WvMCg0h!4qpd}jx8JWopTJ{Xu;Qed%_6*wg5Eg^B zJ%fS*bc>R%mY!CzYO$&=h~#2OPt7f607q1OMrL|O4(Q-a=+e#j;?nf=)Z!9`l+2X) z%KXy!+|%aPka+Y_nm|)rF~I&@E=r4Q9y82bcUvBjKQioNg+EZV`iS1$5;w zWEdRegkoe7251iiK4c7T73#X;5Z6u30}Vzoq*jy^C8FwqZjggzGlU~Sr)+{U9zq1W zow}f20|O|dlz>*p=z_}yhM-WVNFPrp28Z<2-1vf`)SS|kRPaL23WgBhfOwE}d_a(^ zn`Z=rdulFZ)u{(O9l2ztMCOgyNGpc}-XTI^DqTcF^RSzKZT zS{1HZ>;_H4P;Pi)5olyfAvv)mH9fy5Gqo5j0rIbZKnU2>0LKsy&;$Tzu@q#TF{H&` zT#}NR#{luKg1%EgVF-404`T>UO$SZ=g1ayZX^Evd zC7^0ewSd7hCnq&M5p)az6-9(-3XOgaHnpn;~-)Zx_$Oe1)kg@OiX zCKKd@jKsW@oYW$Q;K<+*SKoLSS2xE{pAd#%Pxp9FcRw)g;^qTwkb=0NmGGYKs-+CB z5uRXm48dS$gJ$mwAag0XsbD&n0n*?~O##^k-K`07cnaK6kj{s$f@+EiXdiW1aY0dL zUP+olQEDn^b$x0IyqyMFB7)#Tr|^mxJoC~R44fDYDi{nR7z~n-_BDgnk0!$Q1cTfD zP&brkrj%qL3xM{OgAWX001rFBma~^y`AOZ1W% zRJFBoQW#XV^}tl3f@+e2YN~>&hn1?Ym1?kpY9xbduD)uDzG@|ds)11ogQ_P?rhoyg zia|A1S2Zq4SJfnvA=$YiqB4>pCDkL_Gbh(KxHL4ZJRGDEY`B3|3WI8-u4=BXY6=55 z_vB_4gWJwl3XqNAkbnV48+g?Sq}dIslp$RL$P5E?dKT_gh$;rqSy;BV3I@=1NqWf) zkaUW48Vw{!pb8W~`#g%_p#iQCVEdn;p^mH)uFx;k#|P4{N-csqxEvJz3b5K5DhP^r zxKMIp0jNHO4X%KWsZoHW#e&2X(6$l=kcwo`vJ!|R!6OujnR&&K;sj&?D5*lWM!~HD z_qLOZDho;&5>%|!8C0x6ZB}R-BriWtH!m{>*89uP(*-v%z^!~p8cIop9AUwLvMmc# zJ*TEXg90APkY+JtfuKThMt&*ih{^mCP_>a*!k`LCKYCgzh(Zt2qlJvGfd?VLts!uP zr-BNTlvLyq3`l<-)^7)Qtw7@&piqQqfrbpSP)w<+fk^~IOlh@hL@h&11%xtSh$&)- zDPf37V~8nZh)H6INo0sgWr#_(XNbvzmKOPG;Nc0#X-!F~&=d%2V?oDBVUY`7djtwr zkiCftkhOK-Wsb?9iDl6FL5kqBeiRu%eG_n^1G9=C%;MA%kT_VVI43hX6~Y4Ts83}m zPA)1I{SVsUb2CPPVSQFdlBXnTG}X<}YxVjcr%B!Z!|06fS6 zI>-pjNKP!sECCM~G8C65LL?z-6v3w*ffOl%k{DE#B3zjwLq=)^Lw<4zXd<%+G-IBU zT9BWaS5gd`$b|G$k|F&RP(B2mk;hPy9}iyXSCUv%0&XhXgSv!JR&jD-9z#x6X>kcd z5tvK{R|*U{px7&5D1uNasi1v+pmtsw=$r)zuedY~!~?aj6~PT`FqvDR2-U0z)eQt;? zI%WlyfkBBTGX-hr2OK@|pnicp1GG=*2O0{_$*f8RjlhBWuJNFShLBh(g$xKHL=-U< zrPwp5=(>Rp4*~^mQhrV`LuQH*s3u~_O$2YQiieK-=jAKprh+zJDyXX(suY8FVnSLk zpc1Pz8C0+%#yTNN!9|6#4QQ}lfkD{@qFe#K2s1M;v&0^S2haIXrEp_VPK1Cu1U3Md z2U^pbSqxf83MxQKlS`m30++T5umYa}c4l}y$X+W2(AFYNhNL3U_CTnK#h|tLnR$pY z1+dFe9D#aJ7Q~qh$@xV^r3EFB0t{q7Y`_qfm6NY$GhIliEcyoq$3x;@0 z(6Z42(8kr0e9*~B#ZY!UvgR07VB-v-K`Y*ri&IOWO9~-J0fPcB6)Xx{ zlZz}49z21nhp2>%$zT&g9PtBPqzJbUG_09gkqR*Y)MSd!O)W}KjV~xE!Vt?YPl1RP zC1w^wwLlx23_(uuA&~*D@d4m-zI7Br;vxI1L3=}Ulk#))lHnZ!(BL0xxo96kIV>v=p>#IUBO53AFGaB{eYx+yN>AO^bngLZCy(b2S-4o!sI<3mbys zA>)X!(dElI5aCCzMjkU@l?AqFuS+>=XT;8IXfU{CrI5(c^$C^*DFAi&iHd0Y@GT(Y z_5-w02wJq5nwpZDq6gY*1l~N&-~@^g(0l`Ev=q|$2IZX;&?!-%S~(G%`K&?LNr9## z%2E}e8ldU7IJE?%UO@vIl9~)bkj&=d>ga;B)f=iD(yRclB?MWToL`z(0v=jU%gHZC z69yG$MPPBL*>L|T6lY|n=A?kSSOpB=SrdlL+}zX@(D`2s`FW6q_n<-nv?!6GAhEa@ zQclF@=Ydvvr51n}D1+BSq6pbC6r~pA7nPt0ViU7vfDAjwgEA~AK+yTN43H6kc$;NChuWM~FZcMuLx8U?@+_PAx3}?WzJVYqW($D7=_YPc6X^1FhADMm$ViF}fni zdQ8Ynm@NY|H9|FIrZ7O#xI1XAFz9?W(EJFDPO%3K^f0)jf(K)uD#1f748EWuhM}aW z5>m{75^Y9Nejcc01zBy4^Q{ut8 z8Nk_zp`<(?a%M&`=vWNUG+0Fe__#m@=!gR71P!!u5L}+a29iO=5wv0ecT^DlsyxU< z8MK>OT9OUV@N43u?LM+g6Ca9*$p(~1CavfC~(RtOUz+VO@qmXWag$q z76Cw~i{XbYaYc#=`5N230c*g_OxZM0am^j1< zxhaX2s3IBprA4SBxu6CAkg-3ArsC9OR29XgNyVwj;FIdme5Vbb^R;J4&jouHJnaDG z=!2KIAPIw+C}9UzQ4T#}A~&(9I0LlW7;G$P=sY*EL;=!pWXLQ|DK3F^5J7$K%2d#7 z0;G_IjN5?AR@m4FVss@m#2G#!f)G`$Vo-$-#Dsu{V4$NWa5W5iss@%hDGUm#$*Our zDIm;HTmm}@6+G2pr2uYZFn~gu0Tj6Kk$zCP79089*Bj!0orH{Jd0#-2A+f42DY39*A-f z0Z9Z5pv23Nn+>)Q9)Hj%2d$a~i-8#FxgZi`Ut)1GSb2JGNq$-yNG&ucfn5U0R3Iie z8G%lz%u7kEv!UY&INU-!43hf;{kgVoRiAHWPEWv=x7pM4G_eH20u>YpC14&n){taD zJK-2Aa&zKKQY%X0p(8mUKB&n8Y9)aBYZ&5%rTHbP49P_~Y4Lff<)9@I49P`sW@%n# zS!z)+XtNSjGBXdffg98@2NikwptA@;Gh>k3Um#~)gN{4~i-&51$8A)LAu}1Opm8|R zBp74_9qv{z1KE)bdHK4KQVG0v0Xj~nkdv8Ilvo5gnNUGj0eqjTCd2#vdl^E5b-|-v z3~I_1su9+RQZ&D`q@c7U9yBxqjcE)K_>dob93M#usK^J8RDxGEAlw8x*|0RH1XMME z4mSW@B?Dbvla`s6S)7py>e8fuR!V_SIZiDCkBWguh!r%jwe}cNQj_x`i=?32JHVw0 zXx#*8DMT9Ruxrp651@gSymW+Qpy*l7UU!*gU@3IwXI-mTLw?RFh?Ix(B6z-Z#XB&HNeNw*_9#G&&Aa( z-q$hM8_GnL@NkWY2c5zOI^8V5F(|~-(I?*1FCa98!O<-<5E*dz#e;{MAxu!_0PPP>Oi4^n%*+F47SJdlD6&EMJRUq~4q76H zD#8Ful%V_zt0cg>z(4|E_EjGdlZl3bnw-bxCp{u32IlbyPtF+l}bgP9>dKC!eUKPNvC zwCER7r-IL~0nI^!r@xCBU`L6o7T7T;+xUV{wzL9qP{+4GBWop~^L;@BRL~_)(De}D zRRo|C2Xr1yiGr0Cs3i$<68!LGaMJ)Z-T+!PU6!fKeQ2?(7 z(uW+K0KIkqx>XFO(MYA($_k{N0q!xd%Me`9KplbyInE0-ogEL#8lL`s;5qI1AXgt( z$6(iZ7sn7+h)95sV~Cr7kS~!p3a8wLCwryxNc|vfXElMN@&HEH@r9cBPlh zprBBr5UrXL%Lx(%_0mB_kzNK^TtR`80lfO9v^cd`Apvrfk{$!N^#zIpP^c%O1T2Gs zf}H}S(+oMA+MWTjk~hD|9-f*Y+Ej}{Yhv=$OB6tjAn;0c&@D%xGYArk^YcK?Nlz__ zPcBML1Kn2xKI1kKbnq}N0V*Vb(teOks#tEsj-S zP*wm%RY_6~7lQ)mt{Vmgg=pUpC!bga1_cFWWrZMTAIIR}c;EOCCm#jS`FtRC3JM@4 zRtlimJP<$H*;h*oO^36ikB_61k1IqgM3r-hQ!M!8zqHI8(Aq6%a&atM0pw-sm~GAPOsivqyC2=G3HRE0zZ(1s}R zQOHm>XgNetDmbe1@@OzT>*BhD=3;lks6;;T7a6g^70`=QxMGx8sHQU8of_V%!V}QK&wG?K|_G0 zMIi5|Lc6}u1tBZV$?$&`4CsNG(bQ`5Ved@iu7O6xm^*W`{25lnQ9jLRZg1 z(m!Z+8yuzROL9QAfucF7G&84!p)6M~nV~o_H&sy)cHIFaau~pM1ho8tZuf^$P(je4 zFQ65{_Mj#b_{4pPPGoV|1qB!~kSh(qPK6o=Hw8rywBQVUh*?R#0_ezX1+cR~DIBZ} zR!@}VD(St?K~W76!=f0vuqQsi zG04$3m;t;*3$i90C2hiE1hjG<+^~W=njy?rA2Qwr?rDR@CBcVTpy~#7jlojj({51Z zV8=nGfi7}m0Fy?b<1kQFae{iT;9)AzVV#+I3JlPChYP%llR>o@Dh|smkR-{4a1|(| z^YXEp3e%gQTC9$w12hX=QiQ4l)p&&IdHJBlgejqaK%vE8lME^=L2WjW_X_O5Rkvy}sJ;cQhk!7^Ar=p6E-<)+ z`uavPfal>Dz_V}+saC26W+f>K46a~Cg#tsem8yXWNTk3@S65e8fuR5Y5cZ zC`5y{l?QvoGAJnIrdomOCI#^7V$gjg;Dcy&z$@87H4;P;e3}TP8G;am7IcW(i;F=a zHx*P!A*N9^REsr1Mt~|cm`>1L$;D7xA?rc87<6?NQuE3bK+Z{jzVz(n8C%6oK^r4 zNrj1kTYvt3@u2mcpk09}3_+d&3<|2odd9_8pgXVhw5lo?f}8>vf`S7Wf5TtL{9At>0BA;^Lu$dVz*(10Px(2ya>(1;<((3l~}(1an#(3HW|&4)ot!6!cv zbj25>gt7u(`NV|~hBn=ct+==t6jV)8pz;uAv6W3}9%$x2#SSK0Yz10Q2IVQ+s1|^_ z2nep8Rxw0C9~5NzpvcnCO)My8&;mCdKpS*&Q*-l+Div}Q3qW?3WIzH2I%b~JJkpbt3U(DkvMwl7F(m6k4u*vE$4U!8lO&JT_p1GqN`I?yS#1YAjh@)rCg z69(9JcF1aL1<*-J8Tt9y#n3YHI4_DQ{X@Z&6*%{5l(?<0_y>d(#1nffe2*g zfov^7Rs(8Lqbh>ff}#%`pYh<8okf+%x*<-E&qWr4h8(IOL}5yN0kTT)m>xLLF+?FX z0fsPm6bbA=h=;%?6oAgc1K%%-p&nAhfO-k&nm|b|72JP7mq95GF-!!VtOS~7Le~Y# zYZ!_l2^w|`7AP4ZIUCftfwo+bG{WcqVGE!^EeX&GSg=G29c2fdi3P685Pb!ZjFp0_ za!v&oLr!sOD(Gg7VlIYUP+kWgMy?0m1Q8D!nolibfbzh#5|j-Jb(lDKwxt-xD=sO5 z4vWKuKn{dS7v+JE5`@bYmlQGR6_*s1BqlNFrBvpD`FZ&zse0*orFx)tZ;Eba3Im82 z4|Y^eW?nYTFpw+a!8*WF453Jiq!Ba7;A?KU7?4Uj(1H@xVo*(`pjxaCs*Y1YSK~kh ztU!02s1|D&RH)`uXeva5=~%b|RK7M?7F`vZsDiz{JpM zNuXV>sd>rzB}IvO#SjuA2nq(!40OH%WE>rGfe>g&0=zo}GF+elKAyQaH6^te)ZYLv zV}~q$hVQrnFFFJ*x&%#?6+6(ncFlkQpko0*-IkQpH0a>~ z8d{)2TT`PbDIU~FF9kJvKm)VjNrVywEggtDtQ6=PPl(wdbHM{d5Y-Bx^Ki=)Y!%ds zOA?c_L4zvRTp*PQb)|WrH5RGhO~eX0perVA6+DAo1LK|iT_QEyT|?qQJPl1vT{}<< zEeEo!8Qku+1~pU^K2nRx&{WWcn5nA}<{R(o7X})Das+oK6|@x$6|_M? z2XYa}Js|%pq$$`cXnnMOq1s%}J^Rj4zSSZ5~#xRP72N1{}vcer|0!Tl|b%fk$0CgxxJz4fa;~8o#1IQfQ z_7)|@gM%oeG%XDgMzDCs8BQ?685l@1KRzijFCFSX_*@Mn&4bEN1&#b7$XX}pq=_a2 z1JdGfkRaqJ0MK?Sur_Oj+|0bp+|pdoy2cccvq4h{so+~HlJj#x+v`EO0n*M%ElN#c zfF6JVy`34{_6GNd!23pWQWP}cgCJlFG@p3n6gCKxWXvheDKCtG@6tEVsjYR5$wx>we2R`MkC^ZkRkx2Uzb8_Or z7aBl(M|8M=PhCsS&neA?T1ljRV11y_%*%&3l}LTybLrxdEF?)El7&R-0~KXp2jW)` zjb_j)%J?K$zaQR}2O9v6eMq>145dyzh*oG4EZ0EkvN%3J4dEh?zi^h9nDq)+| zfb`=ory=%%*9*jh&#Q#iW{_|oN*~mzkfmN$R`5|3D=XNr3Ut>C=oUiA5-3nmgJT4i z8$bgy*?FLYeL%vXQ3g=g2sBU%Iu6D$I0RgPK$`TRh7V}u6EuScYDj|&V_;waX^hWI z!4bm@;CXS-e0g4JE@Y@&3w&Nas2H+RP^~Ie&;pU5dI3Bw4%syWw$?Kbd|iWvCTvL! z*v9e{_^pqrdHJR3pzd^43Rr_`RSE;jP%-49Z0LR%P$iR{Sd>^&T$+?fKwU|Gey%at zI=K4_^2k?9ei3^8b(@LppAnN zbCMvA0abdS;3xs@DF&}ZfSlQq09iJm&Ok_=YOy-lKqP}8S8;+aR7}hRnUGKi3UAax)cq3ZCOrvOq6GL(SukAb+EpgQ5yLqnebe z0B@{-&YnlL4Afl*AD|2M2da4l-IbFAYI}kg|3P-kL)}#jHI4ysYc*)jyEF$p>Icek zP#?n7fqNX_F?sk_DRAt9rkaz%x7&g*;#JT{&n!#LQ$Ujg4VXZh2#~pN@GJuCj$cqZ z0L`@Lq?Y98L53zl`8ZD@6JlRdYDsx&Y97>m`Vc|Tjk%C>k|8e4%U6JK!C4QYrX(Y= zL?I&)bXj<2dS)J2A+kT9+YXU*sKUbqoyiUH3>!@vXV1*t_)OF*SV0!R+x26gbDGK38>1LB@s z@EQSB2e~^#;s>N6KRLOyNFk*ZbW%Kc&KMrzka=d%9_Rct1#rYEgH9+;1>YPD4g;{| z>Il2gBd8pFiZNRIvKXm-8tElhWcrJ0GF9O~)h6(SqwE$jNaEkhNlKWnI# z>Zz83QyQ2BN>Ul`PnhZKO7`}2q0W{l#O&fYVL3VP18W4!#Fi2p6auEY;W)IT;1Fb7i1Z|^- z1Yn9L0|O|uKwEm?E0e4g5>r4M7ZpGUj;N+6*npdo(~p8u6|^uAo~V;~ibRLW4sP`8g>SoQuJ2Yf!TXWEL#qL2TUa2b}`~K93#h z3rIT%bpHpayiYBRPX?XD0~tX9?RS8uW9;d?l!3v|-^Dc^bjFpH0+<=@;pzt}Enxjy z=tKdyECG2PtO%kWmb<}1KAyoL5VZy%We{_NT!TS_JfPS_GzY;)AwuNAr&b1Ap@a8fOuyY zS7#rnd!b8qK*c|3fLj4H(pm!AKMq>dpa-c}A$ynMg()cCCKjbDg3C8}p$OU3iqsp= z%u~or1C6OcHc~+CLn=?9R>7B!Sb=I&m>_f#9n_To51D{-2qMRTl!8r6EJ_C-xCHV5 zc*8e1i^5ESX}1C$>kmn43aTlPIVn&sW?;bW{sPb*f;>K6odiYB4O(L1B=T3R+GGI)MdZ4>-<2 znGKryLGyB;tO!bL$oWXMKmpp(fHzB^O*7R39e5W^LA5{|Qi2ez9-(vP?HjL2?%KCGH8(l#6INm0+JLVWnePsuuss{6A)#{{n(<^#2nBxoPugj zg@$T{rVc2uGi)KgM$f6xb%mf!f%zp01x5K~nJJ)gQVeyF0s++Wfo~6owI)HcAE5TK zYOy8*Vhawa1O**e2(C`ROB7)-pirKXUz`dG+VqkPQ1lo)TTlWjqajVG{5*w3a7zhve0y$ciUN3|8`OS+oeZo1T|op|6p@?_(g{|gpaB}* zs89fr;1%7Vfed)Q1D!#bnO6#4hY4LlqL2tW?7dh4GN}$#iANpS7HIH+mU)(-n+IjCHX~(>8ZA$NCXx4MVa8!n{vPl zZF3VV6~M(K==5gLG!dkAR0`THt%za{=++mIIiLswpJ@fs2U)=Y3c#ZLT(DNKoeG&H z3Q4J;;Q-JQ1%_hK=@trVYS6$0F*2)C73^#k3=ND-!0lF0<_GUg2lZeHh?1KMEw-_`18fm!qb%GNDCrI?4O)B(o~%p*@4!gM;xCvqD8)e? zgD@1yy{PKIsT!*~NSI=n1oAxtWG!g0ha>2wbjZTb0Dpg&>0@!5QbIhnV?B;&=Fanc{q^UK{z=-FD)lC8GPq7Ac7HZM@VSI~ea8ci-vx6GVW1tm~gPy!v>$H1UpT3iI# zItse?$_mUaO-_O^k}~tGz`}a)c|F)s#+3!Bkg*BG44^A?zY{oXLI(pu`$oY#tUx&; zA9Tq@9{e0dg=Eyzqd?vUttbHRv;x(UnZ*i;&`oBbOFlq{ih`_zk;Qe{vgD=6S6M_!f0ME}t#^K>Mfujm^{ksBK132(-tMd!>0iVGK zQ^tU@ssgmf333D$%y`hUh+=T<0_~BcKsKf;z)rOUS0SJhA2e*6nFCst1x|CY$kc;s zh=*wahdu*tb)W%R&~ceibxHXp8K5KyI$;Uy4sePEA9M;HID{&L-uGCn0KO0xd~zgs z_$v`q@1&#_6@w010qZJCElw>egQo*Xyumst$n(OW`ZXDp*+6>?;Nb{L?J7o~#l`~&$L#VOz*!s2e| zR*l?5$Ur2j9xUo12U22jJIDeo>OnK|@z_mgz~*19N}=TdXub<4ldfpWPhDZV_hC@(%2Ui5?0Sb1hn4yZ{4+1v$gN`V&F zgLdK)kzPQ}a`>V(P+bOEK3kyxT4z-O*&Lz+YWRbe1ym{|=jWzEmyLpQNFHb-DtzBA zsF@7fsHI@2X8}!tuz^vm=4yiKZ_o^FPHJK{WLX3#(7Q5G(m&Iu!UFdVLss1K@6b7CWS3jo{=A zISUtbHW_GCI+I%&)DMFAgoyZd2JZ#QFH(T)QG`SkR(;6z0J35RNH~M%WC=pI)ytk z53&!Kfq?Vvf>zl<)D@+c6jdT;J;6sU4UAVkIOG*jlq0DxD9QwF$bx!AfoOYh>my_zbfXthHiEYYf!9wI6yer~X(NG9 z10@o0L}02zHVdu{dNC5t&;cog1_;<#Eb7tCMNy7LJxVM?%!dX5$OgjhhKCnOIb>mf zaw2F{F|!y_+d+!hynOfoJ80+xT3tYg5kP}$pfjgHqxguCkkoX3ihfBG-C)khX*uoTAGsr%9!9O(2V@tRPX>h=(^Jc z)tnSqvS$FD8k?9@oS#!#lBxh!20AGfbdtZG0cd>76Le?^Xw;@WzbGd~0d$%-c-db{ zW)Zk6lBWPVu3QIHVx=k=sOEzMi{QGa^yK)m)S}F^O7K<<$jzysThddDQuC5iVQbz% zX5sHorYFbeB$lKWm&B)oCg;+ii`R&;AG{qRBQ>!A(nKO?4@f;kDacs_+F$9(@sPvF zh+JQlo(yUvfKEXNpV3H)J;k8gl#4-k0)urC^apg)23RpM;RM;w0aH%c-{65X$gyOg z%bZ~W0BJXXTX*nI38*!qpaC73292&J=78_S1hq6k{(#_6A0H#XP+!ox^!%hOaC1+u zpeP@d*!4>COA>RyN9e@o6@v#YKzeYGKR`#L;~}$DkV*M?(4~MdXM+6)GDATj$jRT| z2gO$K%|v>+sfnOr%=q+VkcA+%q}pe00uN5GeZG#7POkBxexbpxE*eOS=QR~THY(VH z8k=Rg@t|FJ;I-zu#vq%)$q=j`0ltUySH~E41=-AyEVtg)Wha@EU8B|THN)=QM zE%l7k6jY52KpbS!*g((7APws8G)!-&k>=|(h^N8zfUPPy=H-Cb6M`4osDey`_Cq1P z2GGPF_>j&baAg4+8c73PP@h?qS_Eoe!-{8UBeWzR)R}~-0Il{0t)~QyXe8#q*3}e% z=0V(@!L54mbOz)kLxqrd&a1_o&S z5?bWxqZ$J1E`ttVfeh{#RH#;fLK5V71_lObD)w|yC{9hygY>yT9VbwW8*;idWX2A( z7yy)!pw%&KlnS)*rx<*&b8=-o{FssWOe=+OC(yiIv4Vz^u3b2&kE&V>I)wu=YRbSs zx;g&3c9EK(wuG)7c<&m-1CYJ%Mc`>QWXFJZv4RSUM98%`i8-K^3dJSxd_hPbX!=;8 zBtJJP9+YCho0GwM3F!lcT_U7E4N3iAT@27Y`dHlwDGos^5pt6h3KG*(L0a(G16B{p z7k;iFl?1~9sy@o!*U1yEgOK?ke}p@M#%UmT0YFklVmfGj5NL^ooq_?_azf^m<|XIn zfG%>$Ov*`x7y|9x&BQZS{G#0H19>W5O zhC3-Bm9X5uQhYFzJfTV5E4xJQDJqNkFdd>EYChO#H1~t+k$8~z;R|DuQWaEFAT9>&=>%y2t)l{UHo$A8VQXID%Ut2* zo@z1V&JNJru7aU-3zaMMasZMe&fjtH?^B z7}xbe49=jNGC=(> zK@~=NY7t_E7kJ$Pcyk44b7fVjf*nYN0iQaE3Xo}_bzM0*`N>ua1^LCrprQq|Y6G;f z0B!+zd4rZ}RVk>K0Il~yi8MYbKczAr7Kor#Q+c3)cWC&6LJQn8f!IQlKF}!xkoE<_ z9#D2gvjbu>=y)FmaMc1*46dm_9s*5af>R)9crK?D*?xqRVXPDl)v6Rt1v`b}{Gt-j z#Y|O@HE$prijtrMrSYJ?6u89$TKNdCq7^hi;^5*Eq#QI3U6fc3DhCh5@`%529AJSQFeN0SSRm5K2w4QcY0+ zpGX2a79P^pOo8;iUzxW5uO_o#Q=R9Rr}NVSM~Ug5!NX{o;c_=W`QM=NLhhI(L6ZA7q8#^K@YL`un)} zJ9)V}hs67M`g(@MyE!_8jy?rh4O8dq=;Pz>43&2e@(&O3Kvo9#hrf>tUZs#lPLM`B z%EAyGg@PQ=^3Ovy8FDS30RXfo2AK;E|L4JNtd}c}ocy}g9#7Y5Lw}CdcfCM0ma1x8sVG9A_ z?Ivi49DA#YfuTG%u>g{NGOJRpKp8nR1>{puX$~&ipe}}H9!P->ZUR9sKhseFPwOUw z+Gz@qA*$q}#Nv$9V$ibp%o2r?qRjO4)FRO85Xg!mcW2N%Z7SFYuofq%4yDLI(41C& zGS!R&tqTPO0cZ%K1hj?^w0Hwl=s>R@0Q&)yexTz$xYXq)X5|+txI2T!EmD(9kfRM6 zldZ?AkMV#57qov1R9J_A z59t6+KFo|<$ANqasz1QHc;U@Pa193D^qZoft)N&*;iZmm^P?QSpd4RXt6{V)YA`YqN0kIb{pA0%5F;M{&2id8W zpxQPc)CbJKqRTlEyl*b0v_QetFH8qqin;oQ>6PTiXMpCPK?_6@6+o99gF?pDFATJx zArWjE*h0|tps9IfnML_|pviQ^hAPlGZQzwt;5t6H06LijTL1;^hA`mO4_X9_xReky zg33^o3OY9{MF;ExJRLFE@+i>pWD1}aKg9~5J2GHn|HTR#MvyT^Xww!lKY*$Wyp|4m zZ2{7XC1|)M=YX!_BqQV?@dQ0Q9O4;h0!NKfh`V4bb3kotP_GfOxDUJ)K$C$1rUF!* zL-c@UK+R^*;&g-t9{<9jJ7NX-;P@PIljNZTNw>kMJGz}x}uO<*}~1eE?E>**j@ zmV(j_R4=G+p95LHXQ-!V1nEVA*3ZDUYC_gagQ6BZCIl)~;LT)0=LBTt$Ae}FQ{(gU zA-D0uCkQ}e>A2??pjQZEY6Gv+v9iib1?|oTtu+9TA%oHrWQhS}Ng-$=$;t|}tQ6E( zMydD1Qxytw5WVADRxmI)`TN4=iSu+rL);K6A|cZy zdHH$8sd@0?lL7e%ELdIzr8wxs2m^TCAm~V@-29YO@PJrSW*(T0x`P}PB#@zS@RkV( zH?<@qKSc*zq(Y{!85r;s5zzDdpyq>18wLjG)es7x{X0eA0vo*e26RLY=&(W1;i_Pj zSj>eSH2|JM1|4VvO5q@nKvJ5gKRB2`i}m2%hU}yOtsH}uR-o~ilF}m3vDP`Isqn%b za{C|Xur?gw2cA<%2OXmgD(gWGEJ}(mEl5c$NsZ4d~XA&zfM?RFi4+{ z0_Y%e$bbdh!=QC$nHBMnt6SsqiM1B7UKqA53}m7LG?YOJDhRT0-W7D%VlgD8B&C9e zT{1x_8&qe3hF#$MD?o)mXy-lXcFz>hRy9Zwf>>D#sqa%$6g>Sw;S1Xr1D++ZQZN7) z_MpKu(3vmAi1G3Bd{gu(KFEL8%So0eET#t#Qu<9bTxQ4$6({pa_94(FQePON&!eKsTsB zs;1-&(8hYOHO0k{JOWzOt)Qe@tORNpfM^ErdgHRB(ll`Q1lk+O$j{3!1+`H?J_A_= zauH#z!$W9Oqa<&d! zwE}1w9;5|gKD3A>s1CIJ9XuYS558CnR6T+8fb0Mdpd~`ueK_nw*oV_U3?Uh*kQ}U# z2Jat0YBunwB5ZaVw1hOw7qoWeS{W-?MCGhU!WIGn*n0wf23c4R@*Cv<5er2153U_kdb zc&`)|4u6)QeGDHzfzhe<}#|CHy6+D)TJnI14VW`LeR|lSn#I6Pu;c#_G=7E9@RU5c2 z20JV<7q)Q`;v#7L6{Uhw1Y#EgH0~k(g)FUvqyhzPSkn?zW#*?TfVXTELkwd8t(QjZ z|4C8sgdWw9nV$!{{0HP{2GDx-#N^a?$bL~!2Le$KX66;=fev~vN-YMB=|RVNK^qn` zb5fz(r{MJlsHv(C8ZgxdpD(AMmze{xAkr}?42$jh!Qi#lE{P?HZlHUVVcCvB*~T+C zwGe!i3i!fP(8#fdYKo3(il#1B1DLSCq7Rmze{s1Y|QOGU_(GHNI@1j(&uTo+)q4pFd#h2xR;wvv6bS$e8D3ph#o2z3;Xpk#- z3w&A;=n#Hu&=wj{?*X*vIWI*4dIB~m@<8Kp`H7&5qd*HI3ySj7L5WO9Avv=sxilvc zwAQ4sG_weNYZho}J*YCvNG!@tE6o9|SO%@pz~7&M?jDW@ue1iQ?SfRQpc7vdK$SiC z5-U(M2vWZ(fR;LfT?VR#lvRtNcUOQKmY|#pS$hh~C7@;OAcZhCqQecT`(V?$;1(zN zl9Occ&FHbCnIRmdgaP9}UO~5R$9)zo)-I5Z}kV;u9d=WG_uGK;J zg_VHf2vqHX{D4C>asmObg~e$;EMibCiU$?*AdQf81zP7@1Uh^dt{Q$`L4F!!APaVT zMgquH>Y(vDb;!y%0{Rr78bFZ&I!7WA)XKweAAIF=P9`_VjUcU{?KVcBlNKPS;elq^ zKy__8_!KYjrh9OTg`5DCh&X`(R!)H1|FGMjt=aFI_8oJ=dAt)X} zw`XcVLJGW*J26F*ixZl-VaFY*rs%1HIu_uJpJJ^5;e*`=vH@j3A1?Dj%h5m$Hj+(e zU_d+f3RHHfmw?OzWw6u~_<4Lzkn{B5o`Fh3;}gV#3?_kl#n9m_&1zgbH1712PW2?+-HpCU_I0&#yE$wFtaX zAJ&fnIS$&kNXZ9n4*?yeoSvAQn+Wm>aq8j98HiI~Tv!Bc2@t0~u_Q4Ma#9G9>XY-K zCyNlNzBm(doE(wvPfX4SRZa{HM5@opPd9{Y1tZQqIr-^EpwK75e28*}&^*w*4Y-2^ z?wNot&jfe$L2VUq;!{^mR%gJX4s_9UVqPBTN(oSh5~2)A9cbPS++9$&Q3nr5soSYT zR%e2a%LZL!3JMaJ(t?~!(DD{g9#79KE`eTgnV$w-@1jtanOY8VAEpIQOh9hVB5k&cHSVK=yz}7*Z7= zOL{;iE0n5&+KnK`g8P4&;2Q=DGE=~ZG8=&MUT#)q3HbVH2JmgG;A_o6MuF~J2OHt# z83LL+%Y-H}g6r$Cu17aSS{@EwmyLUUIM`y$_2DL{>%)s6r|N)RUjW*|q5)Y94$`d& zRf@koh1H#w@WEZEKcV(O7S4lhgKQp1f!YBIe=_Vr4h{xiFV7Gw1-C@d^&X(02Mzjy z4oWG_$x%p2Ez3*>Efp+gU;v#ouK@C3L1v1EYEG#pXe>cNBiPg3*~7=h7Sy9C1+}Sj z6SG01G@xS!AjjgQfF|ryQj4I2c%Wzp)l?uw;CppJo?u{L@FhYYs7B1p0Ux!Zrx09{ z4<27p0QmrP7HxKFk)9rWd=Zp#l0glZ94iHv%wkYxO;Paj4ABL()IdYMun`OBLffJw z@YNgWSSVMZ=DC$7t@w%V`Xo@pHi#4S`O zrGc}Ux@xhy4roLT6f~s;pri>d@iI%mM>{Z-=E0YsSt%q#jJ0v1-# zP}MU`%PrQlQgDJQQ-xhlR}AXmf!BO8z=k(LWd_Isuvrk(kxXS^0GSI?Yo*`_+QSYy zUJzy)s9~o7-azc`3~z6N>Jyyq1{DCHb0?5o4l*Aq3|b3;a6BkYLDXV%K8pK`QgQnL zn*QK$ia~0?BI%%b&?rkSssyb|F4xontwsV( zZYP5}5a1OPkP-DvSb)Io&n!_;2v5u`Q7Fv=txEwJ3Gz3zJcQPgsl^JZVADa(1O*LH z`vSC^FEcM4-04HO52>tC2nJnK3NjB=_T+;v0tbyk7lV2wDj~iBAUEolKfM^#a|Ca72F=TY%mN?8P?E1uT#}MnR0Q9{W2IoA2@gMb zIR`P(H?abwI|;Nf7SzB2&AWjY87HNJ>;V<(;Ef27qEQ3dPq0!jGys_i%7f5wL@h@k zhWkMd0|#|16LWIF#zNPufXqhmwGQk&I7@$#{kqEwJ zHNFH~TZ7c$p0CB)9xyXEjE7x20&cg!?TK>rcSEy)Jo6DP4v>Dh`N;kNpBW1F0w@^4 z?jY44X6C5=AYDIJclx`z1-pj$yJ=`>X~4!tijpAL+bU>jf^KEi)C3)}2RZ^QJ`>Vv z0{N3v`%NtA6J2V+XY0c1a9 zZ!aiAlVv~BK2?x@sQ*DX3WLg}63|JRpzX8ZA`t9LLhD?xmw%>)r1%rmCI>fI>cwQH7K88i0yzW}>13vR zW27D`$Ul_02j&!zIi$vmF-hey)^LIJO~G3@ATA-x9VC^<*xUhHq7V;im&X@CoIzIo zYD`kOjLjXOQcOL1&7<+h)+iGr-G@OX9(;cc|OQahDP4>5zcCz~@?k zdQadp9Y7&Qmb*w#p9I_mx(psAxX3Cuj7U$n1l*Ncky(~lgzPf1!V7zP##iqVa2L9( zAoVG!^^OttbdS;Q0p~Mh7eUiB+3AP0b^v%)D)^py=-?$%gDANuH4W?aKfIBq3H&BECCuZIO9&& z4(1dx++k{oJ-(psfUfo^f^Sg9a0Ms`$g$UgqB$6p`Xw*kk`jwk;}MP`%RPkZ8_eo+Lq$6YO>6e^zlwVqsS`-gk%L|P=a`P2w zd;bVmyAEqw(zOGforG`-S?(ac9>wYwP&2PIGp8go4|Y&6 zY_@~EcCRt@@;`XfQ#@!BVL=Ie4u;%xWJG%Xg)6*@OA?c_L0hRIxsAMVG9tbH!sVXi zOtc9^a?+C#_40paa#>NV2lEAYAp)K1HR+}liraH3v039Hdy*`B;`BGfNNA1A?@>vip5jsdMw%uELz zT#aY|kd@yEmD?n{t037ZsVFfoIRierM2@=*36>(sD8jAU8a~LX0eTVK2`~Y&XGDJ;WtsxdVIqjhuEasAmG+ z+6HkAdF=p0(#PqrmI#_U3Yo>Q1w~K?krh7FD=#7CIH;(n#65({OU!;guJ9>Hge*2K zPA!Buh^+7-R8A7_9!UGP1hlP%eD~m(XC)^+L*k24_Yf)lxrV%Q(11{T zmNfU|7nDF+kRTV46+VQ@WzyUOKJx-}ta%Y+%K@kxOI~^=R6djDu7dpHlK8yRTu?BP z=N>}kGa2pyA6^c25jdF0a~Gjp$a4>&@|v`8 z%1KR3p(H(-SQ09)NplZqg9kh%kx>qqSQ09)Npla%R3cgK!Cr2Y*p3FL9z7JtkXN6X zSYR)=$#D-w@nk`$TqM4p2enusht;K$y)Vhcf>8NGqI-}NGCAqSoKU$#ynEma!pU+6 z_VNarUeM;rP+Icv`6b9z=+=px#B`9GKmkXV zyGSa(3B@INt7|dHU676dWbYYlWfM8>!?B(Skq<}>x74Dd%)B)4vK6x2gS}iQ-#sPZ zWuu8j@K_|PUuj}W?Q%ag4}2pk=>9TF(w8Zrb|tCt2fFMhzPKzAmZ->V&zTY`U&(S; zPAXznnap^^Uapd#zKTooixSgQL2*b{dZ%`|3L0I?iHEu>z9==hw5T|w)lH`mP(oSz z$AsGTKyn(q3Lq=qs9pY-<$}iZlCzPP7?9;IYS#lWcY#w9sP#%-IckEvyvOKg<0=tA z){_+;B$eNwEsvO8>*D16g4Fo3%;HRtE6DS|F-hqcyE{Oql7L)5PB<8olwPsh55E2} zKEEg)bQnCyA&}%iR(WhpQaZ)%o}$#W%)C_4$?1><3S@-~_H>D(9f#c=pn?|S0!V<6 z7`M-@;-)`08m$0FdQ>?CB0yIfXs^p_MvW_G3?fnCTvBGsvf8*+W{pGBGCyd~yzQ zLNBd=R+VJfZ%oSi0Z=TX*bd&EAFr2KQc|P?Iuf`PJp4sYd(zkvdpJPD8+o5KK39NZ zfvo&)Y>B=7LcIMDtHBiyS@A$x`v6Ni0EG)AA&_N1$>kkNO3>6%NX|`#SWi~`TaYxL z4Du_w{ovjWI2Oq9zXi$V9lHIX0v}S~kYzvi@(!B*5cAk@pM!l0PHyCdH}>)kPx%U3 zSBmYpbflsPd~q7WVPu5^$?1>?cYy*eH3h!2n;dtMw%!3`ArbCMfgI38mU~D}uf(}0 zGcPqI9(+#XkzCGV*bf~=Bd?ytajpy2@CVxr3vBZG5yk}9#h~<~U}w{Uwq=8s>mUa^lwfy0j?&=3lHq=QEc@T4tId+^mx#$H27K? zkaNfi5A5|d3GM)0WCXIEyz+^Jc}pDO0KN<)9=Yj4RybhqpOO#`V0VB6f-L)qA5X^- z4zP<;z)k=sOtRcTd_Nh7J3!Z=#DlIsfppf$Y*&zQUOWzW(>!UKDL!B&0}RChL%XJdm6FzS5z+L2} zX9DqvoT|x-M-t|(NC+?F))SfT!aiPxJHKHIDM)mYRWFdRZya~H!0J#<9fji5bojy< za?&*k=X4Y09&m|3N%&w-&&0+L*k&@q!HD4e7h-$}d_e?gbTlz12ee%Uw2uoZMxYCW zGpitzVC1#4j4X+7XA^J_cuyw0FG^;;X@uk4a;)`cUJhjR7<>5SQWh>Gl*9Pl0XpbD z9%;0Qtn$RjlBo2G#U?L8I40bC;aYZx_dWBhs5l>JF_{0@i?!cZ-vE^T=b)aR; zsObeN0f`_`fIyNjIrX3s3G--BYq7Woanl*n=reiw$sBvTfTZw&mi*vj93d;dAOS>9 ze33A3hBJI12TFo=?1DG?6y!rQ6+#`Y7K0tK=Jf(vC z4O!l*fG=Jlr^_LglWCcGnZ+51qe4OEfQI)K(iChJG(ap()tpjm1$`|ATU!O#NIa}` z%}FdSjyJ+F-$jx;5b+7|5?SuRKAwv`{2(C#v5d_4!m;05As{5k$S>4a19S&_NKt93 zGbos#Hj(2m9OG~(_5@evCgoFhUbzvD^NdmK@ypCX_6}L)BaU_TDE4^fm87PpB4#4V z2{#<$R4Dei<>V(K9WO+de{h_0ifT_{PBC&qAj?14>sy6TAAdi0aEc4|a13yb_jL^R zh9)<%{9}kcA0gS}=@;hc5W*d3+6OQxz6hb}yLXf-_w}_nZ!_jX? zx5qQgF^DpIu&;l>u*c6c#M99y-q|t0(b+R35^N_~{=$_mP{YsDCEhR8H{QuJBp7TJ zxB@4`K0_Sm4WawbEyzF0)emYFS@vLWcVpP&4s`oq@fGjv z;ppe?3h^L0{=;!^6~extP^ZXv*DzPVka%Yw$6%yrBPU-QTHr`0uw)YE8}I8H;^7ay z^W8JpH4x%C^6E!J9PK;>9QHZ8h59+eEF>p9&2gj`B>S8leSG3W96f!&jHFC>(NB(j zIMx{<`wwgl%s!Cc$g&4Vd4ldQ@9_BG03XK?&?)&KyFeM7Ec*zj6R^Kv_JQmo#~vK( zKj7i#=N}U9?C%@k>Er4W9~|Q7>>Uqk%Ym#TEB%||NFPB?{{B81p~0^4K8{h5@jm{J zE((ga3I-sH$nh8YItyRNNGI3$P`}V%R~HTNn5#mVqfe--rUH1_F)<~jNWm6#!FXA2 zd`?+nkw$8=j)JZ+$a=6p@#`q5i{6zh$}c>8U00 zAn!n8DYdv5a)hadW;D#RNttBpyi(cl3S%ZgI;p4=Edi^C52YP@IP)bs#b{es@6!e<04nVvZR~ItQ5r!l@M{sYQ7TnRz7& z&?o~3R(vvij1gKZL8s)QH3Mkyycp@yE4byLib6*LQjrnR0*e-q7O>ku?tx*ne1OYs zNT>RNj6rvnCMctWl3YC8fuKtm!HED=$l-S(l5Ut=5xNn{7aYH&reE}Pt8u3fP{CW2 zn3n=6#jr#ytoQ)C1GhQ(1*u?Tu$TZ%te~)mhC6)J02=T)Iq{%fZkb7?C8_bn1@W1A z#MKyJ8zI4s2r!U6B!?H;I6iKF;;WG%860Fk)Sqbeh8ozr`2~#UTac3qiGl)X2?s0MN))s}euJ3; zsh>b*fH1goILh5R%HkTHolIjO0jWo@Me zpowTb1D-8QcZQ3Yo!|3_8ASbZ|)MEi}uP=^=dSa zGeIu2R(5wxq%RuIk7{18cvB2RAbq9Pn8wxXYojyQW1WWAzP9dP&1xa7f@Pn0p$TtRSfF{{Mro@*Z_hZ2# zpo9yFL})!jVmu-r{|NR6nma%@;L_556QpSvu>H8h5mL#4Jd7(eLFov$eo%N}(FtuM zfMNoqAL@U!_7p5yk~311vk8X>wB!PrM`C;+PlFN&kK&BPf>dy&h{adnk_%)%?(m3* z7?6prCl5)S`1Rw_4h>U~ew^V6(GD8gfUuG(<1GX$2}zG~h0U4ibRO zB{5u)k9{K$u6Wv`;82C+SKQ$W8mYk&Bak2kB{Kr{<7`htLlt5_C=5UttzIe11=Ys! z$)MngFMyPM;6|B3aomO4q_Dv78Af} z1iyapQY$Q4p`9IQJ%Zc*q%<7;6(ajPNu{7=H|Px}cxMM{KgbUt9OM-56zb^{;_0W5 z1k$I05C9ht;6V{+%s^5BBpyI|K{zQ**A6;nQlybonx>=R=jjt4paBjAO$B=eT|)&c z1yHI34HZCzb-)7PvIh~`nmP(WA+Et88t4%TO{EZfNlbr+NYh>f(qD24_{e7*6(F=| zf|oDQd{UGIIVc)Dp-`*=84ZUA9Fmc6PcSerl;)*Y6r?7XfcqfDpg}d*m>QPh69xtb z2L;t)1&z!UD+SdQ9R<+hVJIs+J(bR>~nySU14nU29vO-#ZQEp<1 zl|po0N_<9YVoI#Ff}Wn9HJA@NXETA?e0qR16ZG{F3D15-aw1&A7&0k;*71j#npfEACR!GawhjNUp z6_OH*tYO})f|~%c53CKeVikOTr$TvVNrpmRz5>WrNZ>I*>_K)HBzDkU15pR}H^^Y9 z1Bi1CL_bIy=(ds)hsIUh0U19cQ<|*LxGkQ3K zg9{Y6ARot~_)G&VmtO=9I8AV5z)~d06o`9a;gShSh*(U?%u~Q&2FM>U{pA^%IgrE) zPG%?$fhA;+dbqzK8X(CE8r#U~VCI(Qm1O3C-A<&r5Df&)1qE4VNorB7LN(ZQaB5Jf z1*aL1J7M;xWhJq-#6F}-w?61&Ks01m-bOOk^ zDCJU8YIuPLCz$Fqic*V{OH&~UtSGg(Fcz9sLCyu2WUvg2;y$QB;A{>t0V$h< zn5g+277h@l;0Q=8N-suB@eo;vQ@}|X6pXn13044d8|dN-h}To|ii<$bhm^cH-3z%Z z1LR0hu>?_!R?dJtZ&+Ls3u-BX*hYCNpsD~P+(B|+bu~3$PvKJscCZdu8QAX%wqQ26 zZUh}~( z(#)dN6xijOaCd1!w1eX-r7|xuH!~TBiy#U?@dHa2aCfDEt_s2KE|7Y7{-{u}RmjWC zu~snDE6L1FEmo)o)vMrK3MmC3;R08WTN&8BnR%dTxa3rP4hGqe;oeOA?gbx#g~L#+ z<|X4dFFhweDKQ7Tf#~Le_tM2`q~kIXLw!zhYOIwNJSxCr0BXBKaCt^*QK|w&H>8~i*AB`^(EJ5Y zXOIz8y|m2KoD>CZTTp_8Iv?yVM8<@Kn3@_|ph4|Nc0ah>P*78Y1P#Ka;CO&%bclI1 zHN=`%Q-jSsSez@Qq$cMi7J=K(5R(yc3$ho(eUQl?aB2Z1phS37qPiDZA2>befmDOy zK?B49#d|EMjRh(p(Cq=MhbI&;1FRl7e38w^ZYrc)0QHkVeFFv1I5)(DdHL{?3}PZy z`_*te7^J?qv>>%eAv3QG+V{X_G)NuXonUW(V;E91fD%`%o}NOif<{hiUV2FeB+Vt} zq~^f_CNCvE33LmUf(G<@W4ODEK}|hSH%%c2)Hq7a0T;<2`{3!bTES4k)=t4lN5L3G zn?T!4u<*txw~JEKQj1dal2f_B=@)JeYI$mCtxy3s31lB;d5UBZ$TBSH9F(09$p~T} zdU=Oz3do+kk_?67g4EELnO?GA`XO`qtf|DpnJv<)sQsQ$mOJWr?GV>7AOkicG;g*@Epr4kXuaDMd1_cSo zJWTtGQqxl_3KYO2@(A;g?S;+_Ola}uED zKtlzZ%!zOhy1$_26odElkl-&XOpoQI#Dj7zxJCixWKbF?NiBkf3^)&h;ul#RNP~h# zNn&OWC|DtZQVdlI@;@womGtzKAw3*$>Z;Y#1BE2WG)OrHo^ONae}%OCoSgh}kdd(I z*kVZh!OYXs)6fDHv>cLT+kF zMt+Jy3h2@j#9TDUAdotAd%<}dUgcnS0Z1Q;{rO2*dT4GyH$O2aGZ8YZ1n#|n{15NC zfXqWLcOmNGJza2!g4Ds>3y}vI17^Wmoge|w1V5Ay)&>qQm_A7R7^Ey2G}jlaU<39e zxEe+69KyTFVEu6aLJV*=Qm|2Q294c;I)q5$ZZLat^HWM;0~}zBARR_P z7ox!z$xM(uA|4?YBS#}h9%dgz)&}Ama3o?{2vQHX53V6UDGSL?P`rWa`}~wj1r6Mm zgG&yOdEh&WQb08js6SJpfLs-Vn`&ZK$RPDt&4s%V zzqz;!2Ac~VcLt}Q)D(Mg>lYj$ppZkD3yUvTKNpOVE@X2+@d-|5;NSs8C$tZZ)ItWS zhx;F;pMug&0mm!MUQlrcDY3w3XMvpw$~3mc`MIgk3ItS_Ay*(M_J9lk)gg&G3Q4wx zIts~}u@Ph%h=GZq!y3Rfd453&IP7#3z;;3!qMxhl+w5 zXYsHKGFC?c&A9Axke=dL9R)39!?Mfck<0^ELQn(2^%qDFs6qm{8}2WV!(rhGUgKp5 z3f26A5+hq9xR)z+6smL-vdgU$3_(_AmxHX)QBX_D$wms-yp(vTbp=JKAj^v5^Gb6S zG?Md6^GZO2o4JX3DTyWdMU@H~1x2a4n(#^%T--3A>d(x}ECFS?%#zH+oXje4qYz{W zrdA|<`Ng2E1=ux$f>RgSN`yX;cR&sX4Mr6s2F4)HLUI>q2^=UA6*NF=#PahJbKq@) zVofA<(D=d9p#m9+uoo%95Nbh=fg1}_4~j2XIs@g)lBAqiD+S01T?uHF8Z@ba#y_p# zI*TEqpv)C(r2wK}1v0vM1>jD4tVT2}+Q11;50p?rZUF@hD0zay55xu~J3T#ci3%xK zK>jI!q;r@F;0Q)I1>_3`aQHyg!OX=P;K=5IA`}whAnQ?0#N`hyut#84#Oi=_6@&5+ z*h?UD5ZMG&I_9Osr$OBXaz9KX#19}I$N=zKM7TfT>Ot-UDFFqHf(FQJ1rQfS2QGJl z;<5m;U=AMQ;Otxg$zX{^>7eWi3OA@SL?S^;#|Rw=B^d5N8He@rj|U9}BZgtMwDK|$ z{d=dP{OnZFRB1sesM1f)FG~dt(I!P<@qJiYDqNMmV(CHNMrMa1T zrNt0M*3bySrYA+!X`pp^po3r_su+kUhcfd(r4ZC`czIQvo0yXWvNbtB4_;&; zZzq73TnK%o;Bqc0Go1)snC`-FAEK-z#Xf{CRQu3_EG@GluQV4DVg%xW0cW`9n9xmG2W3=HK(Ab-GGI11o}m!K6{@Ksz;10bz21_r;<+|;7XWTeJ8s8WT7 za7un|VrHI#u7Xl#abZ!35_mlrsBZ!8RivgUKn6h1*b4mWi<08=ld|HIbMo_2A%zU6x>iWZ zPc2peH8e63%Tg7TQ!>+`BZshhAC}3|5<$z(GV@CE6~G5ALHrLbM?q&fxWv2qh5EV% zIfnQLfeR@e1p_dG+6<};;PoQza6nsj2#$t$Lld-p+faLhB*l!?@kYPUZ^|8=)Rc2mBYEfp1LTMgG>Vu{;P^q5?YGp%Lt>r<|raolo z5LAAYCFW$pQY>iHQ31T$95g(yk(ZyR;27-e>8Z(p8sFd%J8*djI?@bo7y|R4C5KF9kJG6SGqliW75FA>LNVPs&P7E@41VpCE%k z-T{>eAhxn?}D8Mb_t}t3rqKTnK__} zD_;Rxx-c+ACzYnhDnQa4)HMnks>PZLi8-LoH`vc0gCORBCiN2YN-`5mQgOsFL|t-G zDo6=Ld2%XfNCVN<1}8j_nIH_BN(RL($d`IBJ3(PyP?VpMnUo20KxQ5!U1XO-0$ZUV zvA8%D)aF;nEd>t{AW8&~xj5>Vl6(b72@k9AL25ymDD@>prI6IZfU6yWYCgD_0hvyu zdPwYnHQ>*W1&PVo@uhhn3R=JttsY#uLdrYbIQ# zNoHB9g1Tz4I;dJx2gM$wp`xyutPV~)<*6wO`FS~&3W;eYpbleY0VwstsvCyf#2nCY zPil%nXo#Dxg+g*hVo_o;NTmk63Iz4(KpC`H2b}oxz>OxbfF=W|uLo{-C?u7prKJ{u zb3lLwNDHX?Rn18OzeetB!lJeBlJO$`%FsR>NQl77nl3A7sY6=%y zDU=r_7Qm!4^Arjai&FDSGE$3E!Am6)Q&JQX6^aWIlT)E_n*fS)*isjW^Pu+Smli`N z;o-%pwE}3c1>H!faiA^^4l}_m1h^@%;uKWZC#6DC2gKrn{DOGU@iLG^6b}yMcyLLU znV(n8z)(u5GWl<1!rj!=sWF{wq*6SyL)-0=oDg;oRgA*Jm z`6#HSfXYE=LWAgHU?@%nt*wSOYZQ_b^PoWhof84&#>70(np(MbO6dyV6Ua+m*%A?B-p}M6@bf? z%7J_yar1RYJI03r(VK}U&bfQp8k#G>?6PzeBv`W#(5 z&`lJ&b_Myxpj}Z=G0<{kuo%bzkTqthDGDH8LvF4>EEv=USGyo(45fLHauAmBzzuhB zg^8$;z=cdIXlV-r12mVx@+WA6IcS9pxR``w)nZWXo2yWqUs{x$ifHVB${Yp;hJwVR z;?yEYIyM4r*MKH zWu_JtgHk0Z$ADTIpc*Q%SRoNK0t}k?MPA4XS|toND#3wxgFsohxESF>xFHM-3<(aP zLNXK5Jt5k5kUm@*vD*f#Z$OylEP!)7DCdK9l;$DjYfv?%kdmJao)1z$ zWFH0waJvgU0)j^k$UywzW)F>328INCb%m_b;u7d8EKmVlsgMAweAPjD6*LT0Q~)m) z5<%TJSd{=T9dy8L3bZzfJ)}Jf>5rsk=A|e=izy|L;Yy%64ah3xq|~(hqErP}e>af3 zQNkf7v$zC%vBrR+4qC`#D*#c{L0y1N9jJl;t4&Q&hyg8zRmjauNy!0soj`@TjzS5z zPn7~H9TOFDLF=o*Z7`6dLFJ2<7O2WZDMaC;O9e%#X_*yZl?fnqkVYtt%42M{GB6|% z=RB}FDmafJH8&|WB_%Zlk&Lm0Is-$3jSY?KCzOoBkf26XG=bGoBODU6sp366^=~O! zO$|ePBo>uG+Z1Tc6>vXW&j#FBv4iyVL4yl9kcHi#JfE9i zlnUvC7$`tBL0=i5b ztS&V#Ex#x^H6FSuAJjEd0H4^Qr;uD)1nPJ~b|NdNrfBLY6r`qRBlw_!Xl(j3L9I~G znvoPP2GC}~#1aKpe;?!?1l;$TRjDcVAcvGe#*h+IQmhmpY)~M;nu?H)nuclts7nD- z&Hx&`Kpu=o^u)k*6sSE38rH+74oka}0iSyG78GH3fCfY1jXtn)4D)kAb#GECbfpb! zhJb+~9@6_PN-a(;DuWF$g2zmd`@9Sc&WWJ;^yCcilE#t@&|a{dQgE#Wnj447LwZ-B z5lu)-6xj@gcu*$>(Z~SzSYUw<>ExB-d8F0xN~myrR^^C0dSO=7*K_g;$ z>7e17{30|GYyw&OLF3op)-cib67Np1s~8x9Qd3HkL1iTP&;*5~N`<1*oK(=*1Go#+8WNqO9U;#C;+dD z1>2~m2Rh9pGbL3aw=}0DvmhrGd1qQmYHQ6@U!E7v8CPDZ2S-x|w+erJ$4u zE8n1VDxmQ{P;P@xJ%E>@flUOBhrsd}Brzuzqh&Vm7$Ctt6`-(%6-VWunFz4)(0LcI zx3H{d0rmc%1wYspaQ&E=m!DUe3mTe(7P_Dr$`Zst7TDl~%rte-ASftHgN~QWPlJrt zz>)xHkO{uw2h{#d%_$~P3)r4=@H{A5QxseWC4gor)xqPsNb{7z*_j0e;PjdbUT#@b znp9~7t38SpK$lg5wGZH!z_>}*JL2WoW$hh)Pj;?1!$;&2SdTu zz^5G{DiB2zc!LL|${@o&P;5gY7BrTq5LB8}smTCwe|$=6T6}J1UOedHd+^zTR-pZJ z;F&Xs3I*^+R>-`vhAMP096T=!GZHZ&1J!{P;0d4*2X~+_RDmXJp!Go_bg(%UwDJ`? zk(C7MX~DYyu#}HH#sV7DR>;ZZ21h>wTFgV;039cRITe(QK`vroV93qP%gim!MT9Y= zLQwz}OR(h`pn)%l=?o0Hi4`QN&q>TpN=bwd9VIG2vkzpLlK~d~piltS6Y-F+gIt|# z1#T0;r1Zc}fTVADfPjY!L9=?0@#)kQg@B^`WPM-o{ucevyd=;tD1-+|H<11-I8-sB zq9k7dISRla!(WxS$fdRCDKo1h$P(OhRNKozv%?1>t zrYPj(CxQp0Q`6Ewm0ejXWO^qv4?JH0+QA7aV<9epxEmA}3Z)QVLC37EL1TL!HBYQRSUfCdyG^TCMk1`VTKz;F0PZtHq z86K&i8P>!SkYgbu`{40!Py+`PpQ**gR#u^&E_%h~nI*{?P@jVX1`;k%^V}&n4|G8{ z*aaY`q$OtNq=J@VCW3=8IU_SC1=4h20FOz7=IlTv7U*;wa40Ewx+sABo5E0^8>a?u69vyOmy~BFr!p`k=j0cs5>mv#z>r!2Dl9?0HOS05(p)vvByey* z*TJM#q$VpAr9x&F6(DsX$X$qdfaD{vI+%gr{*;vhBo!xDCg)@(D?q%Q1_}d+VIUWP zlM|?siOpTmq6Ru7%i!)B65{FW>hI>_7#Z*680_j2@9g96>>VHE>gWTKfjFB1#0*AJ z5D?_=>>3;#?;H>cl8pCs0V#EN4G9Vjc64_oLM=!=#4==yv74Kmm4w1Jn3U|zXG^f`q2 zNm*D|n;{Vk(o3rS$Oqzr z^g}R;{on$FR`#Rk3us>o-J800p#A_f2ZG#4sz1^14aA);Kznsdi?L)Oc+vpbk6S

F zqyr&A`f=Nnlb;N+hMaoD+yGyBQIeRQildYOjo*OWMPm4wSrT1uf!Z5b(l1)Q1#$zt ze5(W<_5*fsQBr(rGPI@z9aE~2nyjeO!tQ|czF|>jU zNRZtm`rp(7E!~35fV&^s76Cf}n-3t)2FEk*@&X(P@uhi)W;SN!4=H*;cH=e&NB9$6 zen8v-ZqQ+gM)Yz7w>u!^3AO^%94S0Neo+8*yoyU87tSeY6@l~wIR*teM#ek)`vr%9 zYPtB3AVKDC_qj1arFb8Q4DpV zrVc1mK-(D*b8wN6utA9eP+k#ECQUI?T)lpC@Duad^O8QSNDJ{waHQo}7DnZ3~Jg9#I-Z7|Qq@z$&rlWw+ zh7?YS+judWy2*JZu(kxkeTYIC)Yt%>XOEFfVVa=fh&x?iub&_(8=O7C?!>J>2^72F z>&QSy@PVUN7gD%@+>1wFPJVJW7QKj!fnPtUUcjOqmY50p8@#I*GfN{KoD8xbT3=|gEyzp5xTxwNP_vn(~I5*#t0 z{VlLYph7`@Q3+@q8n(<4+(w10Ktooii$`6wn`4NhPpkrTr~)*E1zl*akeiwd+BOdw z>;rim+7O0#n*n5gKD056&wRv?Pa@O+P)(AWT%rSB*#}yv4EC2Jbfsou9(ce*p(F#e zauYNv240;HDJDREEl!Ky^`{o4B_@NmArvz(1SRIB zAd4!Lr4|)~215+>450H>si2jqDSD8B5$OCSY@z-D@U;p6hTn;q<~h|=4R%lf`%?~ zO2IzJ%tM&2kD{>{9zQU5!G?eH(?AOoK~q%_FQK~!NgeubF3^mJLUL(wNq(*Zc=V(Q zJR1cWZ-JQuI^6_xp$}*e26S%)$U+5hg@EKAm^#pu3Rn(2(yV~24QxMLBQzY~{(%mE zV+mo9EtvjCs7DDYh_yI<1sX>!D$Ym*k0ydw#3$w`fCrJmJF60*i9w+}1GFU^vfC7t zS&X2WECm!U>Ls8$9=xd$zV9RmY8V5!-pmADnFJY#1edhnZ9JfJ^I)TTpmloSFh?7) zg05)*uiOW1SAnfo2gj9aF?6XHXapU!4id6Y0J1VK1v2jl+C_j^qz4)o1h3mm0mlSn ztPHer0kR_@GY`5+0b(sUpwV|NWP*m{u&9I0s4J*|Zn^>;(+yfZms+F%A4a!^?Ii%4 zOISTv8AC>9aY;U8Lm+gmEW~jNkTB8L)6>(>Q-Gbr2M-cxynst1s0MJDrIhC8R>Bt_ zgV#qQg*zfBK+DuXW6KOs3o<|pXu*L73tmuC#u9*VVOe z3Sb8oD{} zgOLHYaRRwG0T~A?3-iFGi!NlY4QvS584RTbpqaAFVg>L zp~qAQY6-x*ydc$}eFZSfOg)( zRRyjuk?N_Ee1-DNlvG`iZqODLxFZqKtP3l7AoirBrX_;zF@z@@xI8F8z#av!Gy<6j zsZAhB0#tCOAoc)(Jqz5q7f_^tibO~`3))u#UIvA9>MF=cY)V1KGPoBd7G$L6 zrp7zxlopqy7R5Uir6y+EI_Kw=6y@hI;F1pjr7KYSz@b05AQ7~B$TzVl8*B|OcNL|k zl;))*=9MVqr51x02Z78@EP*fK25+_lnSe(cyy*zy!Ng)vPRU73PECQdWWd6i;7x64 z!2&WA++NPk1MOdgPlDOnUtTI?7ivf02d$$6xlth_zZ^*w#D9<#@eB+MIMhMpbrAU+RQQ4F zBlJas3c3nlpQ2Xyu(S%Qg$uwdAwi4jiWNZl66B^lh4RFrJkS&~XeDHNeo-YTEQ-}Z z^%J;~1)ZP@iVN_K7)7OdV70}mC8e2=?jdNutSV@K9H?YUQGiUMBdJS=smskQ26cWB z>pLLvl#*EtnwbKv|G+8_&y+aygZB~SCFa0$CpZwm>q)Si2fmsbi+a#19EEbw4yDq} zoDy*4fO2J|7pPGKsqpm_BJ)cXauX{RU}*!q4>~7Dp{TUDBpDR9pn03@u~wI+*|@W?OHb{GdC05Ai)tX7%Iyl z>#;!Ez{v-$Kmk&-L9K_kgP@b~x~jTAZQpTX`4a&pt`pO!#NiMS(9EFB@7NGVbxbX`)jtkT#MtC|uB}E}AH6yVs zGrx!dY#T@(lqBK%OTn8zK`RD8nJ@)Z=Ym!Sfk#R}7fI+TxK@BiNf;Q?LHqI)K&$e= zEDi7?P*5HQm!RpHdFeW!79yz5v{FdT1DgjbC&3GA<1;eTGjcN1GfEU7%T|yCG@vyt ziY^9*l+2X)%KXy!+*HtkWGFnWIw0$C+pU{KeDfuXVz9FZE@;0V(#fgX{ksh|Lr0S%#5CMG9?){_>e7Ad5s=A{;a z8i=4!gzjf8DN0SnVuE9E2xOleNFMCg_~d->rh4p(A!R3238Y)dpsNd7Ls0}tLj^^k z4Z)zK3KxX9f`I{2nA%o@!=(ni%MN5~jh>!fZM2Ra=zvtn`FCLNDu9ms16_KSnV+Wz z+I*^zl$w)Y4$fYQWr>+NpmYpT5852T05TtvxNWPmGD~WpsR!9~9Z-1=snu|*ffxb0 zp8%Q!6kufoZb!gWKs~Cf3%P9)sVcLDRh9}MH(=C^2x&-ZQVAa5gXTU3m}wwK!L)+A zI*`UK%xDH(U3kp_sf27n$D}HN>m#s%un{*%wE{{ta19`*>*|)J7A1j3mlVL$9r<~n z5lpZ^E~uXcDxzS40vSwztnV!@Ny!AQ9S7?N4;LyRQUPoX6w;Z}0l6bjA+-WjL+a{g zq~;VTK&meAh2XiV#h@BMM?p6O9M90+BSe%z*C0ASxg;?sRsq^osZ=ORP0lY$Q7BFY z-S-VX)j7sM2XuEG(j^(7q7LLe2Hivjg~Za5{NjR~OvnL~kkqUTzIjZyKtTg6Qw+XB z0d!80iW^w3t}|p^8)&3lAsKxB2|@t6p$W7~t`szAtx%a?T7(#D0a>h@0*-Y^sxD3i z9fg=wnhq+L!E2|B6*NGCDlV>0q3)oT3TQ?OWU+3lf;uRtCFZ55D=2^ts0Zyz1VtMp z^z{^iQ_E6|5_1%EQ`O-OJv{~g+{_Zx>JsD%1_oW%)QV`U%)D5zb70BF7AA-{>4D-N zPuc^Q1iEgp-mC&RAT=}1)#WvYXXnb6Lc)P9%v|99n{}1P)IBStuV$+7`g>;{Wfm9xPLAdh8(vnZ&fhf0@%dlBHE##U1^=$0uEDj2YpI}Ezz3XlQ` z+94_i4HJM|iI&xL!=u5=l5LG@tU%2`P@f4@R-~4|yHa3zYXt+_;>;XS-K(QuXq%gw zl3ALoqhMqUE&d?6g@Hl0A{w4#K<1PbWfmypr==-?j)Z~jWK>oJRWy)<0?H%>sYMxy z1;yy)1jtNX-K>%-QJ>Tb(BAR< zJcW{?#JpngmL%{@CS?703FL$w=-xWewR4F%RtmwM?yBIz3o^f^UINk#I*A8O9cac5 zQiY|afcADkGe&71vLMu5h;x=eahg~Hof-jk?^U&;4RkGIAqt`MOyEU84agA=s;a803K}W-rJyCps;Zjc zW@l<5bXWlC94Jipf%=08_k%|?bQN%oOXlY*fM!;}<${8SYE>!tY`0=fkWclriuLsL zK*lkEOi2Nq0DvRVPy}>`->JoEPQxN0H@V+4^d_Wi+MkSz| zfj}m~`n%u(Km{e$WL?!{CD2?3v^xM!K9KGLxB-r;J~Iy*A)u6!SB#_%9-p}dnK`Kn z>CoXng=EO^A9TVD5s#2`nVX-InN|rk(^{b{hSCquS0CiH1LTMgoZ3n21fUQP=h@`>}dH~rD>c@ln#gG*iAjN*6K0bK+D?1NS*A!Ci3h^~sd>je2iaFYC%zc zN@;ScjzVHdNn&yaNUlf$+^PbdMh)8YuLB;h1P!vo`peK0f*>)g2QCg6RP;e^0JXVF z^1(A*u!c5xc9;RNZv&!B0d(-Bf<}H3gaMr$&}3jpOacutbEUIK+C{D})?Fh{Wm6b&$3L4-cGCNx%u<^y3 z3}A1Anw6ks5pWkkM^^KTpc8})2z4sfcvK;!7xdHu;v=OMNcsnP1<@e^FV{d#PLOl3 zK(p^4{ooibN=1Yic-R-5@IXU#aN|Mq;Gj)LpwsRk>01FZj1O*JfzGA^6%5I#@vvf+ zfdN%NXlNgH@Dof8xTIsqNUeaG1qyZ8aad5}L9>70A`Cw6hGMQYcxei3gBNIUKtWwe zT_G>ONI_jmPft%t53)HQW~ByLP!qf<6MBv>Qv8DwBY0K|8Jn;BtQ7U-z8Yqi{>oCw%11JeuS%FCK zIiRJuS^yfvQwQB|09s@SiWXQ$xhOspbOab=Y!+$`*a`*E zL2YTE@eK{AFvuYgCqu@E(fkP=mjwGV80=PvVn{m%)Eol$njmF;ei3-r8OTUb;aLRP z*$=I+!0KQr9lTl6(?vlw1ssV;s=@PiaC1@ABX&2#bXFj1M79T^6x<*Hsn0=C3_b4% zH2+$XuK;!%wEiioRPc1MQc$gewPU~m4l2q)u1bV%VFTx+L{ON+J8DHq@sOov@#Trx zsig(+pz+fps2J$z#Z1V7wD{Ng6(z+NR~43~mZrvo4m5=ChJvgU#l1cdSzmquk~Z-A zOT7A^w!w6TK<0NLeu0$0AfJPBCFIx+=!!Z}8U$h7>cLApAm)I=8@vuLJ}W;n&q~1! zd|)`}ECx+beF1A*gHLHt0M)U23=oY_^&uWX{^9X1jva0)a`6?7p-q$nhSGLbSufjT%}sDsCoKw2+NcqD`wE)s;WMI&OoU+NK0N&68 z%>^Y^ss##p-~(Yr)38;hv zHPN6gY=uP70n4cspgG&*3{VLNayaCiHq^zl`e~U-sYS$_0}4fmS@3iQS;>*8ke6Bx zOI{k#R1^XZKzC5G1XV5tP%ncnsE#jAEdd{20%~k%sDXrZ6u<)UAQ6yq26Xk%lghza z4yGj_#3RVn(Iwu~&%-syGbBFP*~8TZteXKte@ZH-*$>(qm5Q$2Imp#9#5LZ}mZPBwiZ_rDB;G)c4)913L@_8$A?hWNGPq7F@X9TSu0&Xr zlxJinXDEQ$r0!upkZEfMgnsxrg7JwtImr4Ud$S={Drl${=qRWn&Qnr=YlF@_AvTa} z6s3aJ(Z%QI#UlhkOVWx;Q#HYd(;(^%Z~}@4Rb=r-;OoP(L76hQv?R3xrIG?Q^fgoq ztW(uXgnxfGIK!(ahHOI9l=wyAUOqasRvS>SOjgy7lV!$%vAsv zx8UPOU><>3#h|3^;bGdA?Z;eG{hOAiUDFC zY(xZdX9IZ2J7irjXo?+eEDNd;Y(Cifq*MhHP^JL44!|c7f|eQUX+c_E@IwqUKvQ$j zj1FJmYo!3{iGYlRtIN&I0~OvNPhnBUP+Xb>xs@D|0PiL#N(H4OkXt|)E?ER~11Q>6i^0`a z66pMUSdCninw|+-5eb>k$}cS`C@qNxtq+D2S=vYA7M^jYB_ke5Mmu9lR=zGjC!z2 zD^xQSK&z=zQ$RNmfbSnfl`Tdcw}fWj%wh#dHwx6C2OXOWN{8UBy7_r!@%aU*d7yPL z#jq9*c=!tz$oT~&8HvRip!JO<3W*9vy0EQHiQqvT&~b11d1avMX~3=ppRW$;w;?Be z@L@b)yFmpTB>OXf@^M;ePEI8}>8I!@sFpy6S0UX4u!-RGo0*zd5}%QpSOD4<4LY9? zvKA9`dIfCd7n(Zo6jyv|Sz>Z2xU&Qqt^wVV47ww+Kmn$WK^HP(fUp5HFbHxiq~nm1 zS^+v=8ZsmWy2JpS$KrDni?UNw;xqH0@}OIcA)OLclN1G2ixdUb0`Qob6^IX!1xXZx znwZ%91+o=7@CCL7Y5|hHU>||xAVy&IFX-@|WYD%*(D6qQb)I>dCGjEPxwq835|7lx z0xJd3Rcral&};^6SAp8CFjbJC1~~yV5CgiO3leZTpdmHr;h&i53ySh{!OgIuRIods z=7W6;?vH~9SwSmni;K}$!acbBjmy($ z`+=}~1w1ehUUCIZD3CH9i+4cn2ypm=HqasO)&v(;(5n})TY?^5*j)@(1wUgIau^jT zv_YW-s<%Nysi317@<8DY5`?A;SnY!piJ%ezd~PhF6~w?mP#tuDyPznwEE9C5BV-sH z)OdzF1GHQjG+G9-8ufrZP=Y1u8UzN6Fj4>=&j=1$u#J$~lYyb2D6PWFa*u z7!|;`Mt~X_Fe@0K(;}c$3y*?)@E%9xy?CG?2Kf@+G6ikM1b3(*{pq6AlA_GivQ$vF z7<%R?BnUyV1P%w7|Dfdrc0WO?TSVTl0xiqN^eCuEhj{=T*wAzbav>yeLH9Qqs(>!7 z!n}wB5%BQkyr8fFyOM#ywW0uWD-OuzNU;Uxg6@pTEKx|wOvzIR&qm=_4^5s}bTL5g zwF5UrkX8+Xf*E{C0^%|tNP2`U_yA>e*o;iEf(CdJOF=aSb}n&h3jCHG(E8hCPz|1( z37Wr9g&de_rCI^nZ;@=J3L4Rdco-Hhs>KRPsgT9-nI#I4SOT@eN=s6U;Kd$f-!-@} zKviD~x-%*Pd^UzUD0UcND1f_NppkLV>P7HCEMylj0|NsW zC?SEz0Ifi6U82fzkXsP-HK?(j3p&pn>I+a~4&+WyrUiKcbX5-Q=rZtOnaB|fif(Z6 ztbkleLTXpYKqDmV7?O)p)8e6>7|1ALN-69nE6^}{T0H0o?fA5!#N1R+ixoUq1FEV) zj)jc#g3}2kC4q}7%rcB%euu;bC`A=l7MG;vLPmQL^Oh;4p!GEh?#_A&ZlJ9Opv|qI zo)~!fGI)(A_|SI-2BOaa2A$ao+42ugOX%kSL#5zLAVA(LC;{av$Q>&1lYogm2N=md zq~Z&-FbK2*iTLx2LFRxW7d&hTszeayVuOoBP#Vq!pN$PJwi${`3sQ?9Wi)(?E4X3+ z=O<7ig+ydg67-l@NVNi9;1-`+2#RtSqzDG z)SM2z7XbCVUVrc*(V!KxCHbJ$s|s$Q86!|O2A%H{FKidzFT{6QOwK#Ne3f*Uk837Jd-#XZJ}P$;Iaua?F3;$3l7Lk7AU2_OBp?dVDO65O3<~V@Ddk%k6{kT#+*t}0?RDU zE7mBExFA0dbjO}OBz-|^0z*)+8zDJQ1KPp{9aOE!0B-lGCKsi`b!&hd1Dc?10mb0? zc|=zR8aWE!nQ+i{LLKPjEU2RiT9BR!+I$7Ml@jbJ@VGlD2Ea?DL6;(>rh(30u?PEG zK_ko;UQU97782s{ZGNE3qw>HyA!jIou5`#q1%**+5lSZpWLH6H33%^DVh%L#f;L!z zLL4%51@3mogHsV`6*H(G2$2A<4ax&AtFlr^$^o7C;82`VnO~ZbnhAjH8 zW#HuvB%Ojh22Y5vXaV~Uv@RQDQ(102sJMV8UsUzzEjDOufKTf$N{Rc@Ay7r62{$huTs~RB<}E;}GYPb4ClRz%24pkT2I%s?)D&xll+5Df z#3JxYIM5npQ1Qb6%9r362NgJwS_pKdHfZM!v~QD_1{#k5-Gh@4UJ3y<5TqVl<|C9A zrxt++S`d4MLGA!w!T`z>pw1Y0F*m5;1Mc?g8tLg7nt~L8#xqJviZYW*OH#qj$l~Js zBGAY*qy+|^w+4;efa-m4n+z@jDNB&1r$N;PSP67oxhOR^AG81k(v>IVTG%}X3ee#o zP`HA_2Yd}OxbF;gFSNcQIvhZ?8psRrpnU`JIf+TBIiRG3+Bg8+Pne$!Stg=~)pZ<0{}?Y9DNXjcGj1c7eERL~_7fEtmU;MxVWwlc*k6O`Q{#SSF-aDnz~ zDnQS|PylBavMhqS2V|duLUe$0tb(e6NlA*1LUeEdg6)dLc6NhtK$;jB7<>{-^O7?_ z!40ly{QcrV8}Xn!@1R4=;PS92u{Z-XF9$wx0lY&Cq$#O19dt5Aeo+b3JY8J{-$ams zpj-o)=mIs6z`KT^&Lx@x8L6wQ0K0I3vPjX@)rFep51!E}D$N7WH^0zHos)D*_C&H>FoMc}hUAt(7mmH?0z z9^mc**lyDFfo>-OC0DRka7ja&erQ=059z3aOd(A_sH#d$1+9Mu=><7}H2sibgM9r3 ziJpC^3Xn6!K;=OQD7^)Mu5kw|hKv`ggGScD$N%6^ z3+jRoT2jG}XO$^yxgE*oXG}8fU%z+#T#VGqFVY}#|=Ty;v#)eqdP}G zCo@UEII|=*9<;Pq-&oH`&wv3z^f3%4qyb$X%_?Lc;4~hh2&@wvBA_$TLBk;NX_-aECGnukiV};Vb8-v} zAL_x17=G0M2ZQ%e{s-uEzz181{0B!U{U1VKI1Hts>jWP_`46Cc127FTQbN}yi+z`(!;6=z_W0JVRC4X7In!c0)LAoU=2 zFldejbT22A2Ju1ac%bS)G{`tkC?7tkRD zumqXQ!0^L9(K$bPdHW^%%_kDNHM)-3|Axkc&Hm#0yZ)l!z6S$?3^d$DptL{&$o;%9 zw?gCm|NsBcbP6$@fq|g`&Vn*P{sLi;pFlz|ni<4_ng?Q{i^IYPMuXIVFif2ah{M3Z z0HdK?2AFyUjokcV(C)%y&@GV3i4Za;2fSWP(~3(2w4DUBhrAN9N>>hQ0L(m)o1sEr z3KZuc28;%=K^UCk7#JAZ8Pd`~e3*Vus0U&0frbqze83nKcE}jyFJydw1IJ8c3^k4c zMuY5vVUSz@fr$VAq2&St10x!MsbzTh6_o7Z=^n{_a3vsjfHIsl0|SFN0|NsnEuyQF zIs;J-^Dl&lh!2=NOdL|+XC~=`D>r>e9jC7cs)|x{GgI^%WN-bilDPFhfeV5+aNhb4 z!!WTQytn>?@CUwI|3O%R>(+l5{=j+bKL{Uy>JJjX_1{SR*8c!L2)2^A_5T4EDlQX; z@Iz&8{ZEp<^`BGv*8ho8xBg#~y!HP9Hw5cT-TE)U4`I)fgxJBsi=bilgXkMPxBi3h z2JTz`k#T|Kt^eC3Z~ZTjxb@#g65_85oVWfP@ZI{KFLUev0d5GE5WMyO00#sca6;%4 zg17#A2tn8k!ngi|^eG5K_#m|&g17!F@FDmhF%V|py!9U)gUkf!ZxFrp{{t7qtN`I# z|1(5x{g)7cs)t5c``ugr74F{pp9Q5sY(jVm5o&#jPy@1umiB|Z2x~`ogE$Nf450K5 zVs?QD1_lODodLp7E-tD;@rAr*(3Tx5pb8x3vJ3p0d^{Dj4Ex~@nM00(iAn+Ol}=_* zc_j5OI$4yDcUdmAKOA;i!xtpaBYsNG_qudaQ87;i14Cmi>rzWO#`2%GGuNm`gX9?) z7z94vRIHmBw^N;=A;#wE!v(Ro*Bv=H(`el#1_p)+a!2-vdA>hz^Y3;RT?U6mr>Y|( z!U`uRn47adS^(1D@KTd!rwOys_AhHi7#8fWNV%M+#Qh_FN5Mo}3kC*;IggcXqRwgy zbrcJy_Axw&ykxf9@opnq^E-v`cc3OH$OwT(&UpW|9jf9C0y-DIyT~aP#^ilaO@9h% zErR_EQUt=Fibn%lc1SZYFi0>kFo-cQFo-fRFo-ZPFbFd+FbFX)FbG01s2l}heg*~x zWX#9Fz<`WFbr3ELs&lbnkbBUvfuWJHiK&^ng=Jz=a!P7idPZhec1~_yenDYTaY<=e zc|~OvNRM#f?f(&hxBn-gVURew7>qw7@b-Tg2B`yKkXguBqwDs6i>}-MJ-TlHkLbGn zpQG#ce~GT!{||KE{(qtS_WuXnxBst3!V8etAn_mFxBqWI69b8Zu*;&`|7R?^{r|{9 z2n}MlK-nn^Z~tdmaQpw21rU16e25wlZ39&UQZKXc_WwT%ZvU5ongx;%xqbWpm)p1h z^W1^ZAU+6##6Y+NDh^^Ji-Y(vP`Np`Z~tF&=k|XPZ37hp$z#JMw{QOkVRSi=*&qy( zI|6kRx*8aN4gou0>L{fRp56X`;L+{>2cAOdN4NiLJch6rJiGnh;rZ?V9ZzomXLx%1 zKf@D>Fehui-_7{o@$89#3S zKl1JN|EzBi`U{i~5`$rw7>Ks`ar^(2Z@2$jeS^?TK0|1b7!1S2Ks4)*+y7I(-Tu%1 z4MO+-fzTi^7>0>~=tul_{_o|#^IwD$foJgF`Ckkb^MlfwP#ResAvOzC&wW0G*@W~A zC;43@`glD^e+BV7{{_SmG>EMse&@e|(w+Yr z(s%wFOG9W7yF(Si{vmbee}NK2jfFBq3?z?^Unt%Ae*vlvBnQ$bpnm6nfcl;P57Y(* zcc|a_U!i{IKZp9A|0>3J{%=pd^Z$)81kdui^FPAt&VMFfh#W}X#^la_5Ee1H^B;ug zJKp(U=XmG;9rHW?buI7w_p`k7f1~-G|2&p={_7;(`CsXE=l>rQ2tMm^=f8x%MpXUonB;ZN7K@_n1I%j`5xUFq~p?=RXK1 zINtd$=XmG;NryZCS2*1H-|ledf11Oc|Mm`d{@=B~^FQAH&i~JLcm7M--T7~6d*}am zn>+tk+uZqo#2A4cZ0`L3Ykuc{Rmh$Hxxsh-Zwb2d|4QJU|Av8g{s#vj{0#E9t3QM< z>38S9u=$<;kHaAR@1b}8pAEV5zcu{M|7+fN{_pm>^Z!c3o&Vco@BBB2x%2<4<(>ch zF?as6C*1k3XmjWP7gGqn?|$e1GWR?GQ{3`On~b=Rcp- zo&T)ycmAK?x%=k9+4p1c1OKs5K={|!8M|F7V=`+o<|-TxlkcmMl{5s$x!-u)jV zhKfOAEE0GBgK&-L-TxpyGER}c`~QnL1V53u``A{{O zb@zXdB&J(yWbXd&k-7W-jpW_`S0pgyL4JRudiTGJ+TH(KRH%ntRPX-(O`&-p{U8i7 z3)yYxd}8I0)!||Bjw&P^a-eP(A6y{j zAnSeM3K45`z574K`s?thuJcmJPRbN9c^dI$|-i)@ClYu4TUZ?g`f<_nTM zNDVTMS%3HcpS2KmAn}&9cj03ap!RQkJgCbL8mR{H@L%5C-v3`$@BKHqdhfs1)qDSiuHE~8;Of2qE3V%AZ*lG3{~K5D z{deDY<3GpMd;dRNy$25dl*}R&AA^pGiU)1!19={Fk4R=wd~!xgCTt-sNPRJq2#gOq zHxR0vu@LutF@LDR6TuOd?4rri-+Jpb=(jNR@miFNPytD`Zr=>mk-VyC5QXl+ZmI^UrUh0GY(^4P&?@N8~zb*B_|GLx%|I1Pz{Lf2$@INi}!T-3_2mixT zAN==AeemBc^}&C;)Cd2~QXl-+OMUQPE%m{Fxzq>$#Zn*q=SzL?pDp#l|9>eD{(nn( z@c&)Pga6M`9{j(T^5Flqln4LMr9Ak5Eak!feJKzAZ%cXbe_hIh|I1Py{GXTd;QzFg z2mkw09{g`hdGNn3<-z~5ln4LwQXc$IOL_1=F6F`hu#^Y?{ZbzMcT0Kj-!A3Bf3uVa z|MgNH{8vkP@Lw+F!GE!o2mkp}9{guZdGP;V@`L~1k{|qkm;B)Wv*ZW=?nvYD(fvA9xd6_US=*)MB82BP$Ff$l@tRIMp zunoL65F|tZ+xVvD=7R?UZT#|6QX#BNa43M;__QBYc=+Ey@!|gf#fSe36d(Sdp!o3r z2E~W}FDO3z&j4a8JcP#;HgiHiD+)l7h(1w)n4(~ij?QI}jy41n)+W#caiE52w>+X*-(B!An5FrmKt`Yn+(7I+&`3_Z|2wJX(#Lq?JC!_ImGV`)g?5oU$2!TU7v7jKQ z(gv2 z{}Q!F|5MZ+{Z~N_0j()Dv$mzQF-(~Mdi_d6_rQ-V-z3# zf1>>8{}Sa#|5KD7{Z~D!kN$5_eDps@@zMVX z$4CD?93TDP;rQr(h2x|D9gdIw&v1P7e}&_t|1TUL{r}r>j*tHT+kNBz3Fk-uKR7|~1gA&;8=M~fuW)(ve}>DW{|qjV{x5KT^nZiPqyINt z9{vB}^60;W>!bf5bs!AVkBqU2f#f}0AN_y2`^J9-7ldAO*GK!be(u8;l) zyFU8w?E2`xkNczlYuq3GmvMXaU&rmy|2giD{@b`c`tRfR=zomcqyIT>kN(%VJ^J4R zl5>0XUk0S!?a}`|Zjb(-aeMTi2gG)N^gqV^(SH_@diO{FYuq3G?{SC7f#gB>4pi+M zw@3f~fY|Pj{tNUy`mfOU=)XbVqyG+lkNyYrJ^G)}_vn8?-=qHxeUJW6=zH{kLEoeQ zA9^4CXXtzM|8d`=|0gCr`mfOs!61G^KSVrW!lVBOCP3IAaS&cH5tR=TL&gr1u*)k< zeDr_Co*Vxgpz;!v9{rD5@#udG7K}?Aq_$(v4Y(eVI%Gab9)z!~c=UhTo*Vyt_T2bC zXYHf^E-N7z#4lO%=>O~GkN(H3d-VUyx<~&*);|KP+p_-A|DH9E{$By%<&XYfSq>2g z=^+;LtbO$Vz^X_816Dlxudw>j{{t%?{cl+P=>LY*kN#_{dh~z7sz?7dRy_KDV&$X% zKUO~a-?1E`rf$Wf|1ujM{SR3F=s(8>2wn;0PleJTIT-%1{?UKSy*K_Zc=70e!gB~d z@$Aw63ojo1fAHeb{~s?N{h#sd(SMGYkN&TC`RMqr0jUqAZK^!m~NlZ=o5 z*RVeR@4^JZdl(=8-@^9z|60b!|4o=5|DVG6`2QT{$Nxd%Uzi{N-@@|v{}YzS|3#P} z7$god14M(c3+rRBnIJYY4uOiRutCfM=~=J1{=}@5c4`zbND5{|`7JSQyHO(I7b(zQp+$)P6`wEJ=)q ztZ|G7ogEG?+S8N4hXa8QDq>({`2YVyLqo%lhK7be4Gj$p3A`}n^=-Q)i+YEkhIG(NJte(mG`FsxArVSCp<{=cFA@&5&A_y8IoS>Cqp@qZY; zTn}NlH$DE()$;iNhh|hPjztWn=1arl|1hlH0%6~8ef+<=?eYHvG&~KBk1T(%C6f}LmydGY3tR>0)|MjBB1s$y zKo`ZuLk`1?Ps&dL9sLW|3pN)t7y;&i+dU{k(Dq|xaXH9zn0#?%G4v2B?XB^C7IxEFD%^3pq7E!%az4Q5eyYiD<~<7Ps_|p1l>gv4-PG` zOmR8*>?Dx6X~_P7gb&F7s0j=diJ3V$Nu}V`YhWY51Vla9-1wrza#;9)o8+K#`{F@{ zgU`<>ElJa5NXpNx0qcYK4s^79Y9eZn6)X)W0uDU=pK##m|AGTg|2G_X`hUWKr~elm zc=~_Cfv5is4m|zuaNz0xH+P@@m)&*azs@5F4PvuE*+(8f{Xgd+M9rRuPye&rho}M3 zR~|svAoV`?pZ+g_ssr&=9zOl=^yKOP$2)KQ_j(7Rg`o7Uw-Ej!D4qQF>Hh@`&;HL~ zc=mq+!?XV#4A1^IFg*KT!SL*V0mHNZ84S<C z)BhL#KmC8=|I_~m{y+V{3@g+Pybu|fBN6x|I_~(|DXO>`2Y03 z#Q&%N1^z$%&+-51e}?~0|Nr>+^#6x{PyfI8_w@gRe^3A4`1kbxg?~@~pZNFm|ABu` z|L^$s^#6u`Pyes@_w@gQe^39<`1kbxgnv)}cl>+$zv180{}un9{xA6V^nb>`r~ecF zJ^df?@9F=5e^38={CoP};osB$7XP09H~9DTzsA3({}ui{{V(zF>3@NLPyciLd-|W@ z-_!p;{yzQx;qTM`FaAFL|KRV_|2O_V{eR)_)Bh*_KK*~-@6-P~{yzP`;qTM`EB-$H zzu@oF|13fz{yzPm0aC;8?0*Qyv;Q?aZv3AEr9o^L zPKa0u=d=H7I3a4Da6bD#g$pA7hU?k?5N-$?q`rmw+5aQl5OpB_7w%{OSrnfAH`;OI zzX+7R0;RvmL&Tpz={=I5c!eizFat4a1?GZEl048sQOT*guw$GUz{}$iTn5-FcF01I zon&w=pq(fAV1wXm$62q z_k*tCfr%h)dWVS+M>8_8Ft9UlG4L`7FbFez3WF>GPj#;}87H^V-L0}O{4jxZc!IKgm=;S9rhhD!`r z7_KqgV7SF_o8b<_U4{n?j~SjZykvO8@Sfo#!xx6{48IuuGW=&?WMpP!Wn^dMVB}=v zX5?k$XB1=RXEbCqW;A8AWVB|q zV{~A2VRUEoV)SM7XAEQvVGLu8WQ=BvWlUg9VoYXCWlU$xWXxvFWh`JUW-MhaXRKtb zW~^nbXKZ3@VQgdUVC-V-VeDg^z&MF<3gdLfS&VZS=P@o|T*SD9aT((Z#?_4L7&kC( zV%);Gjd438O1$~_F(4y9KL$SrPe(BFV(|20@MiFYLI#E~20t)n@bhC}04WRuas40? zeheTnurNr=@8RtrW;I;n4UBJWMX3GVHRbUWmaX@VK!m5W_DusWDa1CWKLwxU@l~?V(ws` z#=MYu74tUc{mjRiZ!kY&W@J%fF<`M{@nMN#$!BR{>0_D8vWDdV%N3TlEdN;eSv6Um zS)*7BS$kOLv2I{JzgDxN^E9q9&F)kDQv}TooqAMma*+%JH>XJ?Iqg} zHYRo+c5!wkb`y4cb}#lA_AK^l_CEG`>>Jn*vtMU_#QvXMkVB2bjKiBFiKCLEn`17= zN{+1@2RP1iJmUDo@s~rCQ-#xn)0s1nGoCYtvx>8wa|-7|&UKu7IZt!m;C#;cjgyN@ zj!U1*jw^sGo-3EDg=+@aPOb-BU${89Ww;Hvy-_AG^YRNA(o;*oRUAVxjFFyN0zNPV zyw4aUjKo8cD=5mZs00}R-awd`15yiPrl*#GcKd-&l7-ic#aP7BQ%k_LC$b_`f&7A! zc#tY+jT#S{&;?lvJFF38E1aF4S^}B`hPVaFDkv=hRrH|4Wm0p}7z#>DAma}p7Sy>& z0+7oUlk-8t|B$nwiy0F0DogSq9EOtoqSW-%iUJ16P&Y$fYB~5=XE-Cf9DH6ILrQ4@ zL?WfM0Caj81LV>?h#16t2pg;%!puu82P@4>Ee9V1!cdT305S-K^B9WD6AKtX!BGUd zpP@LFp(MW`59IwkhQt)m5s%<&OJJwdFo1{Vb3qe$5N392WqE#43WNimkAduj2M0G) zS1$NaC@7~G$}3LI1K-^k4`P5%g#ldy4^9;f`AJ#upaD6p7}Vn_N=>aw1-mpaGbbM6 zW{^Z_Zf0I-F+>6yZ1K5?6=(vPd7umD^0QMR&7sV^vi$5+h;2EkiDjvvV<7X(8L~=q z3mB4$5_c{!=Y#ZV3?(m@v?gN;v4EKZG2$t*4ahX=@|1vyZsARGnSoeWl; zl350(LDMTBwW)<*ZXT4*DFJhHAbw1T@X{f?oD!&PA~ewQi@=H#i&E1d4A7lrAVU*D z9X-$yLJ(ol*@$o+r{Ef)s$oP&FuJB50mG9$qp+ zG(pQp2nSwDqH=zl5S@?`HU(-VQi%+a1`EK-Wh5bR z=?vjROn{Wp$Rg0P8CeKcUPHt{g*DV(ko!Sgw6Ytb4!Hz}iWHQ9Mlr$X=2oR5nE@%y zQ58YUbc7%*s=*~YHsMTIa6w8QNGT6d2oVA2W~jB0VhAD&K5Y*w4ley6!tgo(nG3B6 zkcB|?0fY~(6`;(5l6cg*0U-{qArM?hJ%Pk8%_)Jp1{A=cIs-{E9~S8#xzs`=g`ipl zp%BH49OTeWM>ahjSq5CkAdCRjGzeaP5t3ctS_dHqs&bHJ;WZGF5_mm?5QEl62mx@N zgy6zzCWHvMenN0TwG@JfQddEQp%D+MpO9RLA|4N~w;-B8A&XrBwDy81L#@Lw#SEeL z!KxZi?Ph>Q45kj=fJCm_AjV=!8OAd(FsMQMMJiShhF)<#gI+!ZgT;hr|1FzI!vX!z z{u}fYr{_oCv;P)-m}(#NBE$la*cM3a4?PGqAU7^RjnC|8V28|DGG4{cqjy?EnAu&;GlufA&9X-LwCFYoGm}wC34=jn&Wo zgVZ*xf{Yoa=0PqKg2Wy=2|xbQ@a7$l&y1(c41&<$-6dc$TY{TM>4iGj~E zXjtzJrdMz@gXup#dqDJo9;5FdTEp7M#EF5Sp|qU67)oz;Vqm!O=AHQ$CkBS%Q*ZW} zIWtViFxbgd?aUD6xNq~r1I`M^w!XC1U~|d&5SbWM?&s2R``Q09x1RlXK%-@EBg7=2 zav(8~S`db*&$#{U|CL+M{&(DZ_Fv^Tga)zyU=f4KyWD>E|HGYU|2N!0&;oa#{ak3> z@#5f2&m5n^z$`CFOr!H5q72}JMf5ZCl5hf8686e;Cc<@!~%SgXH5qA>tr85dP!-;y(<7 z^uXBU(mOmM=7G${hC$|bdP3X>vJZwq;vfv;+su3MzkcqE|H+*%{>yf}_+LBy#s8Vp zUi_b4{^GxF*^B>rvtImno%!N_SL2KS%Nkz%ublki|JO+`{?EyL@n13X#edC-Fa9r@ z@Zx`a>x=)6Eie9WnE2xVzWx{gvkPDRKV0zQe_r2<|DC-r{$Hzo@t>>q#s9rMFaEc5 zzxcm6<;8!V$FOy&V-<|&Azj^wL|9hKX{P%8t@n3Jji~l#9Ui`m2_#ajJ;(uAmi~k)-Fa9q{eDVK# z{)_)7^IrT{uX*ubEd0fPm)sZs8FF6y4^DgWKR@-wf0OJN{|{xo_`fIO#s3@OFaF18 zz4-qp^TmIegctv(#=rRAANJxuN7#%1ixXb_ZwYUzv0-sQaNg&bK=KmW(o6wQepflm8Nr5I+ zKt}f~imnBPp9#J`zL6)f2;{PfJjErT9T5w8iYr00svCL0-4}*~ zJfQQ=85l0|WP(?WKIDNcuKvganHy*1%>c=cbwh(7qY^{fBetzZ4Ov3~XcrPHhb{HCw|FEf4he~!tk{|+{<{%^K=^}pKm z)&C9?hGzuy#M&Muo*|KHlY`hU#^!nbrn$SFBN#Lhds`VVr8 zy~C^jO6ITr2WG$e9}q+z92NfR|Ggjxb_{>@e}34j|7y{%{vQZ^^`9*gB7Q97)&IG{ z5ck{sQq6eFzpA)gWR$u^40%y$*=y;NPYERAnn!vk4c#LbOxpvHg$x=Kz86# z1Csllj@_Q$X|Mh(Wxe|EoAv5{U=k*F!Xb`LEj}@j9k}E{a>+RCiO72OA9Nlk1S6Lk zm~7BtN?=j=VJ)y}On4CwJGuz26r>(;{)eNJvx}=6NDLW6MBP0+y}W&V{rm$0gMvds z!@?sXqi~-Wf-qBCAK5Hy>;y$6WffI5bq!4|Z5>@beS}^sYa3fTdk5SOh>nSk19kmS zj0J5zOG_Ixv%~&%YF5~BKOt*1}F_;lY&9|L6{Uh z)Km+y8-^JwU;Wo10S8pR`j3ovpz)E-s;GSRABNGzk@=LcJ1SrO2jLZ!um1l)^2dzI zSN~5`zWRTo^40$rQ1O7OSN|9Ezxr>`|LXq+CR0r? z`VYbr`d|HrVQl75A_lUbVb`nw0y`lXnGF*I(I0lc`u_l`2E@MrWgmdjATb!;u=Cab z1z5yk^5oFu*l&99)qjpdul{d12*G&=U;PJ(f$#$)Hi(Z8TO4}zU*Ql$uLlYG@R>i?Eoul}># zdG&wEtyll2Kxq)06x@63)&Gz?ul~2(f|x^!UTUZX*$=~9DzE>?O}RmJd`bEB|5?hY zW+y4X{;vfU`=s>x|1PE1|C^Lv|MyaQ{a;Aw_5WLnum3MneEmO55mg^P_Zca^{{Kti z_5VW(um5)`y#61g@cO@$0`dCsnN6(RBYB8@tK?t*FM_hIpfs^&P@;}W{`LP;aN)F-{CAruCU&+4yze)D>|0>zn|D9xC|L2l@{r{58>;JQ4UjI*$dHr8Y=Jo$i z(y#yTl79WaN&5AFFX`9+g`{8qza{nh|01c^|FfiC|2L9){r{Kb>;H!&U;poteEmO2 z5@J3j?j6-j{rrY2Or<1W|9>R$`u{44*Z+$oUjMg}c>SMA;`RSi;;;Wt5`X;JPvU;j@Mef?ic^!5KwBCr4N5_$c< zN#yl^FOk>(g+yNeza{+o|03bn|FeW&|2GnT{r{KH>;H#@UjOeBdi_60==Faoq1XQ( z3BLZnO7QjnBEi@Htps2HXA*q<|CGS%|C0n>|Bn)Q{a;Do_5WA=um5l2fBnCT|Mh<- z{@4Gx_+S6O#P|CDEWX$OllWf$*W!Eq{}b=)|GRi!|8L@b{ojlC^?xDW*Z*(vy#Bw4 z=k@b$oui|+9--+Y(e=d&K|1Yt>{y&TT_5URH z*Z;NHU;qEa_WJ)Ww%7lg*k1qlVtf5xi0$?NTdc4DFJgWDKa2JCe;DPCum8(I&20#N{l5Up#-;yE z2$~y0U;m#F{QCcdP^dUm|Aye#|Nl&S{eKM-M(2a%5+=R=zjpHL{~#KKL1Lt0Z03T@ z0GYRC@$3Hu(_jDhoBaC!+1aoEU!3#$|JymQ|BKFh{oiHY>;FsUz5ai9-s}H|=fD2% zH~sbhSqoqPe>VH|{{vHA|9>)xIQ(PQ>;H>qzy7~=(d++b7QFtyWa{hx7Smq;51fYT ze~_DKg|nu;{{MK|>;H$RzyAMc`s@D_X1xBNvXp-I$1QpN|L~I6|Nl&W{oilO>;Dbc zUjHw+_WJ(>C=FtR@B%dc1}Oi)wb%cTTz~yv<>u@E5;tG}_qh4`|CH;bVVj$;{~O$V z{XgZ#>;C~aU;h^XnQ;R`gV-P(gT@!Q1(8>|@%n$w{n!6_9=!hV^WgRW9uR&1^?x4{ z@Rd*`QH35;d}Ex zobSzlE50}XW%=IxXW)DD{|WD#|HpaX{I7WTdcZNr{e!_B1MP;%yl?);^S=47&HLv6 zcb+%@5A#6cr=RD||7e~!|J9-V&)g94{oHT;^%e4h=X2E<+sWtX$P`R~m3=088%oBy|2-~3zn`ftZ)8vvqIEgXL<8~G0U6(`7Ce#TeH0R&(8AZ|7B)~9LOwU@O%>06JsVw zO*ZqJ|K`kZ{xdVb`G212&Hvdp1%Kf1KgX|H%w*{>L*wd2uh;*D zf4%;H|L5!ftAD=!U;gv;f9IdC|MUNR{r~ol*Z-IQc>TZl$Ls(0KVJXm{_*<%_3y9$ zFaG}efByH^|E<5j{?GpX_5aJ?UjLu}?e+icZ?FHGe|!C(`P=LN=fA%GKl|(J|LI>} z|2O{n`v3ngum7L^g6Rg3J3x5)m)HN3zr6mh4^{K~^Xvb|KfnGz`7^4X_|LEZYkz+I z|NE!c{||qH$n}4E{XhEC>;LLd{^yUc|L_0!`hWLFh&;%A7!LpV`oA(%{QZa5|95|Q z{lERg>;J(YP}RzRc>VwN``7=szkmI|`8}!}%q)MXxb*wi|6jj*{eK??W%0y!um4XG zee?ga@SFcKqHq4Qh`#ynBl_mQiRhdE^VK0(eB+z{J~Q9^FP;46|E$Sx{yS`Z^FQn> zL~hQ;H~%+(ee=Kf`D!zC&%eF-&-4Aw{~a6O{Ac~~=0EGEH~*7=y!o%V z>CJ!JO>h2R`tjy}>;E_ZB^loSzr^tNf7PZp|K~8i{cp(h_P;3e+y8lNZ~xz8e)~U; z^)1*9ui4-J*W`HnKZfJ&|J$4pF+Q%h|2w$e{@=~@_WviYxBqRq-~O-Xe*6Cr_uKym zc;5bJ;eGqRh4<}$W4^clH}k#yU-s$E|39DJ{8#=AaW}|sjbGmUKk((v|Nmd!{Qvgs z&40J&Z~o8U^ya_Nn>YXaUcdQ&YSWwl+dyLKZ~lLK`R4!cS8x7*-Sp^`m4{!d5 ze0cMJ!G|~hUw?S>f9l6K|4+)k{l8u2?SBVZh~Ip-Ld-fO_4fZ7>9_y2WZwQiCi3=w zr0CoKabj=(KNNfW|F-zs|8Wv;{|8IH{eMvsqAzRfoBtX7Z~uSdfBRor;O+l80&o8x z5qSImqrlt$a)NLFZxwv||D)jB{~khb|91$z{U0d&_WyI?xBqiQ-u|B{^7g;P-#7o) z|9$iS(cd@!#s0nd@A>b||M&mi{6F6F=D$xb#7$m(Z~mX_d-Ff6AHoOu6@=TNZf2PP z5$~Gt=KqncZ~n_oeDj}i+nfKw+urJ`G0N6oBuDC zy!mglGOS z{eJWR$L}})x&FNQFZ1Wkf4x6%{yY46^FQd%oBt_)-uy57^X7lYABa0ZZX3)v@8p~R z3s1iJf8*qv|4OIc{7*gg=Kso5Z~nhM_2&QU({KLYJoDy%{Mk4Exz4@$zxCXk{~71s z{FlD)=KskHZ~m8GeDiV>+MEA%*WUc! zd+p8tKiA&;x4!=7|Exc6{&!w~^MB9vH~(#Jy!pT9#+(0{H{bk!dGpQxHGkgx-}mRu z{|kTK{D1W4&Hpcd-u(Y?>&<_?+i(7}{eAO)#chav(c9kqzjpi0f7Ls0{x{uu^MB=? zH~%ZPz4_04_s##nyAU?^Z3nw$wzPgw>)|CKlI6)|C^sc^nlE7 ze){JBrl)WIKYWT11Bv6q@z37;&)NCr|K^=<{?Fa@=Kt?WZ~ouf_2$3$?l=E6cfa|+ zddi#s_EX>dKRor#fBtE2{yR^5^Z&KhoBxM(-~6}Iee>UX_nZG$wcq^b)OqtiPUp>k z-`x6@X#D2?0^>LTbIsoT zZ!>@M|FFfI|IaPn{MWa7^FPt*&3|^gH~({N-~7L1`{w@)>o@=ZS-<&TVe{tyC!06_ zSJ=JzuVnw`zo-41|3~fL{C9MG^M9}7oBxqcZ~k9(dh@@~`OW{g&Tsxtb9wV$-u2D@ zDXwq+3%I@czsBv&{|9bw{)@Q3`S0rf=D)PZoBwSdZ~p)Dc=KP;6XI@cVde&vYliv} zq~@>ZoBvaHzxjX8=gohA-#7nFz25xa?DgiqoA;al-ac>sZ}ffhf0^H#|I49zcJ6-j z|1^{>=>O)whyR=Zwf=AZZ}NZh|L*QL|3CS^`Tu_RoBu`uZ~m7Cy!pQ);LZQ<0dM|W z1itxS8TjV^xxhF7`GVg3_X&FQzbEL;f5ts;{wD>$`M)su&HsDBZ~hDKfw+HT$eaJF zd*1vv-}C0b=bktJqoLv;HwT8k`JcPz&HvblH~;JRy!k(I&zt{?_q_T4YR{YhzxKTO z&$IW<|ErO2{x?Rx`7gKk&3}WvZ~lLXdhdpUUQE&dgh<@|mY44l=(J^oS?~Qr$ zUm^C*|J2ww|BuJM`L7lC=KtEbH~-b+-~12R`{sYz-Z%g6CcODyvG>jYuDx&mdnUg5 zzdY&9|2cc#{9m{C&40h-H~*iey!l_4`sV-p)HnY%)871#NQ3wR2Lo3N=Jx;?cvG=w|CjUTzj^MP|LwVN{$J01^Itvh&HvDSZ~mw6d-H!v-kblG z``-NjpZDf}O#Yky-TU7B-;n?2|I7S0|CApArlS|(G|5)VC z4pj^!j*eeK)yUMp`QKgt=KtyXH~)Pa-u%DV@aBJLAC{6D|{&HsI!Z~i~r|K|Vy&Nu%* z?|<{(p$lRL>w!1_mAl{k4?ghb|K$U3{y#nN=D*6pH~-BJzWEp$Q8fB6$4mU-;W|KCuy{;xOxJAS?SfARR6 z{~RaY{I@;v=0DHUH~+1dzWIOS*PH)um%jNgz3k2Z*ky12FIe{G|HEZ({wpni^FML< zoBxZJzxn@g`J4YrE8hHn_3O?5Z!6yXH(mMWfAPvU|Ns1Y^WS~doBw>j-~8uT{pNqr z>No$7t$y=gU=73#Eo|L1Go{7+m95zAZm=70S9H~+V-d-I=j{hR-)8{YiS z-SFnW!tXc#jefuRzi9fK|NEvx)WX6kVac2SQo@(ocvT>wmxb|MvHr{|cb?;9rQ?rN3|f`}}+J zzy9Bw|J(k(`OoAea;CTct)9L4f8g1h z|IeR6^n?87`r^(1mKSgSAAa%X|E^na{&U@a^S}7^oB!ADzxf|@|IPpH_uu@lx(!jk z>+YNX`|rK^e|Gts|27Zb{C9i!=6~+PH~*hMeDnYJ!#Dp~9zoQB%mrcYM{oXzJbLp# z`q7*J4<5bw|NPOL{~3?p{6F*f&3}m}Z~mt|dGmk$lQ;h(pT7CuEBN+*wZPl|EP`*r zVP4M%q1*W0{x9Hv`~MyP+y7l0Z~x13zWuMn_4fZ#uDAc^bHDws#PjyQIPcs4Q+Xlk zRhi%Z*I|D9e;f1L|M!{S{!d_e`@e(b?fYWKxx00H~%lSy!rpA<<0-<);IrqTi^Vj-}>hN#@09g z54XPgf3@|^|L3i5{{L)!^Pjuz&41apH~;n9-u!oLd-FfI?alwxwm1LF+ur=|Y z751XK59G$dh>iBX`JcKM(pGr3_sxIJeQ*Bf?tAlpBdBiO|K|T(P`Q8b&Hr-;-~6vU z^ya_L;Wz*9AAa+{_sE<7)<@s`uR8kX|IVXt{{J}o=D+!|H~-6yz4^cO*qi?X$KU+- zKK|x^+wnL5j~;*XpXJ1x|IQ~MVbXNs&HsZZ-u!1c`R2d<$v6KiPQLlS{p6ef?5E!R zcRKavf8(h){|}sc^Z);;H~;NUzxnTb`py4_({KJWoO$!V;mn)=x@X_~Uwih=|LAjX z{^y)~^S|!goBtEez4^cB+?)Sf&b|5n>D-(D5$E6h&p8jVZ}Ry!|7V?l^Z(`fH~-x( zy!oGd;m!X87vB6oe&Nl3(Tfl@$Z@mb;+y}87vKEfe(}x!yi0HX|GM<%KjY;$|7$Ko z)PA`9=D)<1H~#~!y!n6S%A5b!uD<#I@A{kn|F6CI-*ElS|GQV;{P(!==D*~PH~-6T zK=gpjcfa}Of7#79|CioGh=IiMVdYzI{+|+g^MBo~H~-hSz4^bt?ahDwjyM11JKp?v z?|Ab+zvIn+=FT_&+dJRH~({t-u!=N^ya^)@tgmh#&7=fn!fqpY5L~Bs@a?W3(emAw>5wBf2aAI|49~a z{=c?(^FP7z&Hp==Z~hlpz4^by>dpTfR&V}uTEF>!-}=peFPk_2581r=|I`NJZfs%3 zWebt3gVG>12W{W{w|0ECOK| zP7u9YoZkFD24#c#H$2X7{yRFq`CsPz=KoUXH~+Uezxn^f`OW`t&Tsx(y1e;cL93=<(+NM~^rEnLQ!mAUBJ8zWKl1=gogjpEv(!_`LbQ+Y^!o-g>_I|Hu2y|9sCk z|7ZHX`S0rc=6|X0oB!{8-u&O<_vXKX-<$tgesBJ-@qhFGyZ@X2@&RxDHwL`<|0Lke zf6c%*|GNX<{C^kt=6_+(oBywa-u(X@{N}$`$eaHQL*D#96!PZ(!;m-sc|+g)&klR@ zzbEX?|J7k{{tJb_`M)ya&41I#H~%+BzWM()^38vlD1=+@M7{ZM8~x^gZ1kJ|`=Sxz zAb)`RE+=CkV*0Uf{$GxL^ItFy(tmM|gNVmK>3>jqQv93$o8lpIATut-zxl6}@aBI} z!khnx65jm(o$%(rcjBA>vlHL^f1UW|ze>`Z|8_}l{zoLe`9Cq~&HuwmZ~iMJzxf}M z{N{g2@|*u_li&PzPkHmdCgsil*C}uQ>!d==PDy?9zby65|D&mI{=6`ki zoBuuO5c#X=Z~m)iy!pR1-;zW=M_NYK>h;Zz`{5G{}-Z)fyB}A+9HUW2SsoG z`xn3Y-(URZzd*^G|5Hoe{Ff|!^M7sWoBuaJSme$BS7mShca=lbAA-`Cp)}0gCrEsm ziZ}ngE8hI)seJQ)Ugewr6;*HkAEYTx`ft$p*~z4p!jg4#F#n`+X>oBz-2 z-u$nqfAhbi{>}eI^>6;~sekkTYWS6Bui^ON&0g)4g z(l9mn=ztw>{^#v@^S^Y*oBuUC-u&;|@#g=69dG_`+VST9ksWXTf8X)uf7i}8|F`di zm<=-P$<8k8E^hCnEB@a z#+h&a-=F#Bzv8Sn|5IkY`M-45oBz*dz4@;?`_2Ef*>CO{Fmu}^Ph9V zoBv@GA?iS8(*ie5dh>r_7sQTzU2py`zx4*|Jt3gu9YLEjK92QWMpFCXW(GuU}R(vW8h@u zWMpEHV&GxqVPs^GXHa8QV-#ReW>98SW@KW}WKdvKU}R#@W8h`vWn^S9VPI#}W^`b% zW>8{OVq{`)U=U)|Vq|1+W8h}gU}R+QWsqf*WprQ&VPIioVQgTCU{GOHVPs^8VUT2$ zWMpKBXOLr*V-#RWWe{c*W@Kc@WME}vWo!`0XHaESWn^S1Vvt~zU}R({We{K#U}R*d zVi0E(XJle%VBlg@XJlk(X5eS!XJlmPU=U*zV`O6JWe{Z)WprSe#30Wo&nUn!gMpcm znURrUJ_8#g8zUpbQU(J?14br>bqt1#hKx)M+Zl`)jTo62jxgvm>N7GioM6yl)M0E8 zILDyJsK>~}aD_paQI}DG;VuIcBNHP76MDEmW)Ni5M7pufw=}0Dvmhr`Avr%KwIDw; zucTNZu|%ObGcO$^n2}hNm|T)tq>z(Yl3D~lSs6LCGccs(7v(1Az_&{&Bq!$O<(DWV zr7ECrU`5pjFBMKb8%!$T}fxJo*)2yLKTev6J9afAn+nQ%ZAE zA-j8F_eeSW`vr$M`h{TE2NO+B%u_E>$W6>nRY=UqOe|JN%P&$W$w*bmE6q(xErNR< zRMx=sAk$8+?qIH~p9_q3402~+aP@O>1DzNO<}ffYIQzPQnZBM7b#8u+zMz83#UJ88 zXCKGlV9=4Cj!v#VFxu6H!Ob(o)fa3sb|R@LH8GnZHK#b00d#mzYF=?^Q7QxIG`fIe<4UzlZ^H8C8A}LuMXBImqau)RLk~hRigE!R2^mC1mXNZq?^Yno*T>YH=T|E8VV!~$Y7f%uFd!$CG77)&4&8NmQ-3YbM90d+7d3*@v?uxFTAn7{|2Le49N zuo=K!VguX8%*@Eh$i%|L$jrh!UR?hAsAR70mj74 z4Dvn$8w)e2=wf4IVPRlnU}a@vU}IosU%+2?`@-Rz`3LF)*<(F)=bR zFtTy5u(2?)F|n|L!xH2MMo^G~t7&!?Mo^S7v9Pi-v4BFC2^6#p;OJps1xE9(L ziHU`Y8C2YZf(YaXP%ttxGqW%-GcvI-FtdPyh?#*21Q{8a!RZd<7?3h>+5;Ja1v9XK zPflh4#TzJ@fkOcv2n=u?AisdZ9F)euW-^0Bm_e=qVJ1dK1{Ow8tTHj8L>c$N+f5rgDK*m7E zAS^JL5fg?mhBAgShB1bNVFY6YV)Ge$GUFvc*(GRA>nJYxc5BKTbRWX2T6 z6vkA>G{!W>bjA$EOvX&cEXFLxY{qQH9L5~RT*h3+JjQ&+JjMdXLdGJ-V#X52JjPNe zEMqKVEN84>tYEBUtYWNUtcJoGMi8uJ1i?B+WLVEw&)C4&z}U#x$k@!-1U`Mfg|U^f zjjlZGIrsG-Hbg@*vr_<*vHt<*v~kDaRTE+#z~Bm7$-AMW}Lz}g>fq5 zRK{tH(-@~S&S0FuIFoS}<7~#+jB^<0FwSM1%Q%m59^-t*`HTw~7ceelT*$bHaWVMB z`z4G^8J99HLxRg0L2w1*3dWUSxQcNV<7&p$jB6OzFs@}>%eanl9pie&4U8KZH!*Hv z+|0O{aSP)X#;xGmcL~E%1_lODwZ_803a;z98F&~37=##v8AKRF8N?XG86+6w7~~lg z7!(e|v0xX&Zg33& zsvSW06@be7GYn@Lt})zXc*%f0&vP)!F{(3aKvNPd6{Uhx4k#snQb9Fi4Pz~19XOsF z8J9C|1vNdO{^nrdWZ+@|`JR`7kAa^-fI$!~6eJm>&_Y6$K@DqYSb%*FI`$uQt3wb& zFhdAKI70+OEJGYaJVOFQ4nr4Q@R(sP!###a z409P4F|1=WW4Oq$j&TOVN`@KWI0eP#5r%6FUl}+UA@z*~gFZtV!y1OQ;9Da=_3l>2 z4Ggat?l3%KSjxDS@iqe}-EC#mV@PJ0!Y~``iZcwLxB%JR$SBWvfgzi*g0TjiH**;m zGC*K8<3Vr@w18m|!&-34(_qkK&|(1HivbF~xeTxzwiSHWgA~IIu)7%;H5p|X7#YO5D5M1~}WSq!TgUokK; zYyr1M_A%^d*vGJ!VJ+hp#$<+L3}+d>GVp>^NF$>Og9Sr8Lo&GS014qn#`Ewz089B6 z409QFGF)J&XI#YikRgcylYd<&9I4aCc`Gib&M7a)r=<@PBXMJ&W8G1fzb(ki%2y? z9%BVV1w$UAGeaI@GGiuV8e`oVhAzf-hA#|SjM|LZ42K!? z81)(T7;iCbWjxL>o8b(@Y=&D5+rcRXk{;2?tvKXBWse2J6^45Z%faQ}1BPed@(3cf zf)R8N3NHgE<7P%q#x)Fk8P+hYWqi+I0SysJhAj-Bcs|F_&CmpmlTQqb8C@BY7*>H( zzzW7&47V6AGt@G)Gqi(SOgRj<8J;jK1jtS<#<-qw9>aRZ*-(6u;Vr{8hM5dA z89?RoEryj0>lxQEtY=)xIGf=#SQkXEB4Yt#K4S$#3S%BPc0eppEL{VKH6J5CqX45I zV=v=uhJ}n<8P_ukGm0?IX6R(R%>WWnVlZI<@nGaphHDI~7&bFP=$Q;Uj9QFb3@!}p zj0TMCj5!Pk8E!K?1Gm@KGoEIc&9I4KGs8h>S#p=*1;bZ{M#dcs+Zfh?(=Vv}0Nt!I zn<0fEh2b8X zI{O$tGBh)O0Q>nI!vls@3|koXfX&*>aE;+E!)AuN3>U$9|!ir1f@nxhEm2x#)S-d&@x5<96F$oU%+^qp`D?Fu^)Ut%p}HXj58P~ zFwSJ02fjN-he3ydoe@InGR|Z$1c#vx!)XQ`hIR%WXo>)(1}g?wodv0}3K@DCU`9|Y2h_#^wPhe}7)b3?$2g7Anz54sluiya%x6e} zvTifHV2EVg%E-yU&j7k%Cz^39BOe2(#R_VlZe`?QJiuVaXbg_I+YCmG?2H>2*D!2m z+{>_vVFM#O<9f!O44RB;;1mim6BG*T8M_#j7>gL!Gx9MCGV+5{3n+~>I!KW&SmW z9tKH9DaNggl8m5K4e9~jVz>s5DM;!Bwd5=q&M`PM+Az9+TZf=qd^RvTF|K3W$Y{cl z&1k}q#!$luD%E-zW;4uYuwew1#h}t{E(53yYQk_09K)bkz6EEcGDLyX&uRuxo&>ee z%^BIj@xjT+&In4u?2NY|qdQoXsG{D9)J7@D-d#K|Bx!#m#JnY{rd@5Y~D|5Zu5Bg0S*v4MQ~J8U{{AP#t-j zfd`b27)=;JeTg2%RSYv3)-X(9>|yxIAj&wKaULT`*JN-Sp9KyXP>UVpXHXi3#9ss> zH=_k3s5}SN4(yDT3?SEvfn5kvwGhk#xeg=-N?o#yuu$d!_cB1@px%!d;{--AaElRn zfPsl2lfjz7nt_AC2Hak9WSqzt%23bf%IMCZ#U#VP#8Ano$eh3s4VHCflwmLhw}I|4 zyp% z(q}SfFl2IJFlDf02xWN01iDu%g*lGFlEIxJ5!~|PV&-N}Vn}940qaj>SjCveypK_s z5oF3LMsdb81~Ud{hL?;145GVEoPW!TRcz>vlu&a#)0opC=S#Eevi zNlcTOco`U2Kz%b+mR*dJ3~o$4%)QKAOsNd142KwRG2UkMWk_R?W=LV!!~$Y}WlUv| zVPRmfX9Br}i$R6G644jM=3^I(rSlSt4ScP_&`26o1G47?1B7$g~9Gi+x8$ zIm~9zV$o*#&M=#ygK0Gr%+%QowM=sv>X~F1O_^Ua%w~AYP|w86(9X1gp_6G5!*&*F z#xRx;#!jX^EPGjAF-bEtGRiW%V+v*LWSq+o$|A|IfWeY+5koWMYzAHiJH`o&vl*C} zf*4ttJ~7KM7chr2erJ{gw{d1LEMf>{oWT&nIG4ea(TxdIYBw<2F*Y&IW)NU*WL(LV z!n~R(jrl)QC8GrMY=#94t}Kffni;DYD;aZ`bD0+~X)^ON6f)~D7c(zlC}jqPBO5EI zE$hm1kg1x{m0=c(6|)sX17iw96XOhq6o!LLRgAM(QWz{4_AzZ|-oXrM>+fOS%M5DI z-ey|BAj7hVVHIN%!)L}vOi2u&9vdjd9c0pASqN@->|<V6b8UrG?oHR~b(;&SN;sC=XP(V)o_RJyJHsXBc?==UDGXXnix^CpZZfAZ zm^0mBc4lg0PGRU^ZeS8(6lQE=p3Ts~EY9e_B*|FCP|Z-m6wTts)XosXY|50v;J{?T zl+4o2l)})?;Kl@s4G_zT!I=r9wwa^dLKy)bxiXZTp7}tk{CcCSI<<(wKP;{ca~b|KxiT=aN-{9B zim{k5&t{NhnGNncfpi%&|6u{8H9rO+Rz}t&24>cI42u|Sm_c^wvdm&gVrXaJW#(i4 z&orBXpFxOKkU@l5lv$B!5rYx)Oa_pRGR(5fCd~58^BEMGEf{2&r?Jds;AAmlkYO=l zxW)o%;eo~xtQcm2`#p0RG+1Uc2s1k|Wiz-k*f4|28drw9EcaMuG59eUG5aw*W-(=c z%JPiGgV~e0oxz*ghuM|Ej~Uboab;;|@MACsheJEVJg^_q7#1;1VV=x9o8cJC0tQh2 z>0s$(>0+6{Yyp<%V&!J#VdZ6&Vklrf%F@knoMkmjJA*2V80$jj<1ArJn^f@hgp3U%pC6j3ugA~I|hDPRD49(1l-aQk8D}xgQsNMk8 z?-Q6^8D=ruX6|5~&A`9{8f|c8Xki=GhFO*gFjlT}bThX5Iky z4`}q@AoFa7Un~p2>E;qsIOAKe45&5))d!Xg6%0?oDe@>-zbvC1<0)nrhS>}|nPxN0 zW-wt;V%f(8qMtI)WME|B0QJF`MOZ=^W-x$U#tXhtQW9KW&thl?hYqMlRb@$In8hH- zAO-H>&tlMF;A8>C%4`NEuo@+n84R--K;n!na~Wnbu(0Sb%m&xPpq#G5;L6eoF5yfV z=7W2eA}p2+4lLp<{0uu7ZCG5vwU7yeCyO;RsDv|Tna!ZeqQ;`m62tRPki@)+#gkU(k;WI-#3j>Q2 z!*_-{=AR69%%505eN}64D&t_Sg^&KRGrnf7WDH=eW(4JUCk8fF(CAbXqX~l_IL;wC zoP+f%iyjLDiyBJ>!vt`duECVMOG|9G3t8kzE8jA>D+b z99{;2`2YX+fk&1mGCXAb|G$-`jisIC|9?;kSIHR50`VWHgoF6+GvojNUl}3#7PCO; z|NlWbegb0&%LHbKNE(A5!zPyh|F^K9kN+)X{{J6R9)UsuT8be0|9?;!^Z!3K|E**C|KEWL zWa|I_;w=CFyD_Vy`>fCk=H-dbGFb%}o&cXz>2jM?9R*?Vt82HGhG9t%6;0v1qCgP8RHKO_yWf~z!PaDbQEpi~TUl_y*lrVHl3V_+FbDhAc8kTMUw zJ^{Jv|NozG|3P9AViu%cVQ2jRKLlFZgTz09%>}X0u?$odvj0G-`2YWj3?Tpg|G$8x zlJWolYDQR2gVZONz|L|Nl2JLSh1Sb_;nX2BP{QBcu+4@KPE6|A*up2p>U0 z>JtPX#zHTdK;j(?|NnzpzUcKPNDhQSaSF;gpqvKDIiQ>dlKKBX1{{+Q84>;jl}w2G z1QMtJ|A#VwYH?6~0`e!MK7p73%Q+ApwpywWJeo5RW0vawf6(mTPR3o}kOh?;ps;ae zImC!wpMcB;)hD1@{QrMME#ATO|39q0gw^7p`UFy2KLeZlk`Z6nfJ}y9)cORL;vjOM zob&%bs;eL=4kV8)#dU$}w*UV%pft!;-x**z2NV;K6o-h3|Nq%RYk$EbV<1yOH8zCC zBxM*8wKz=nFw`a(A2~*0V*meJGQ!GsJ4Q%afVDqhYK)j6^$Cm*q7gXP0|Nl>g z*~c^s#)6lkAXOj?^5;sX|NmEm$EQFdAY2WO7Z3}Qb3iOqjOlhzE&l(%DKo4-0jUSo zCkvTx!fgkM;l`*j3R1_$`W;0tdW?eV6G;05xxNIY1z~1TeF8G$AtR_hX=IjRZf1tW zC`c3;-(vpEs12`OVKRuc024u_L8T}{1mSi@7Lco0z^wp~t2kL8r6|PhAXh=<2H+`wVcfaFqh7Eq}HQUOaT4lLW@r6?rjLh2Lb zS`Jj7z-l>2NVGC!EeFyCar^)Okopo5 zHDIEMQdEcG|9|BC3{!zT z&iVfzlu|%`hUkNpl$fr9$U{if&;W^nYFJo%%$&uD85A0(%$PX`q!xrB`5D9lVNgm5 zVnNimATe0W2b5A87!z4QF@e2?MRg6x&k)x@OaYM~*MMjUMo$Z{l!Dwogs23O^H@Ob zLl6su5h-OA3wGClR3R`dEj$E||02XexdW6IAbvi@3`(OQSwu=fu9rcjC`c9`{=|YB z4w!91NE(Htg%Tzf7T8DuA}xSi1+oL|DriapwR}KgFzm(z$sG_rt~3gfh4mFcJnU%! zRBCv#fO^dg42bd@RJKD_gn_~ZvLfvNe?e$UPXw0*T}+@AVbV~s|NjxL0?j}C{|_4F zg^bD&8!jMMg8H1U44|?d)E7ceDadI7SKr+&?;O=k5Yi)|9{lA$e=M`kScQ~)K$r#F<^CQc?7Dt zaIaDR{~s}82AcN(nTC#i7<}Poq09aM4_Y6FESk&!>a&B^IRF0-S~K?lKWHSqg9&rQ z3{po-Wtzq`ooNQs|Nn>{CCog~JO+#n=~04skTudE*8l%om_RiZgbgWkAvG091ihvL ziGeVrrjlWhMe)^5@Ju;!O$Aa*90v6$v6Zxh^1Cp&Wd^CKQW!wvLNeff%m4q`C~kwf z0@9>yE8Ol--7stc31jTw8*g{cx*1d?t*JxYiuwseD-$N2yM zB{OI|QJMig-TeQL-ok;H2P0uUN?dgWIq3!x8;Ep+s3WkaoB#hkSpNTqr5ngR2F!gB znsB=L|9>U}X1ams29c2P1hF6(TX;fbU?g&QBKIhv6pW!Swb|u^C>R(5URal z?F&ea&LFOQ8;t3VUgaCCo+ZD0Lyxi1^u`5lE934DK+@aD3^zo2!un2U}55``1kP3bV zY@=)-84yMvW&8ghG0OJ;KWU?E=&R{S9c2T#2Yr<7|9{L;Hjuji{}~z3M;0Ob`ypi% zHb28g+0gyGfI*#M5x71DnLIT8{Qo~Fp3%=V`2TG%ASfV|;l6WG8+MieuDO1R(XuE5bp0L?P>HK{DtVv}*!gj95PQl^dY* zH4!GvVVH}xB*7PI5Z%~A4I+nsED)v!H$C`6jntF|@hjYRse1> z;I|81mbjEgpD+WtZ8Xe4r@F%SkHbndP{@EVW{Cz8rFWQt>?9TAPG^v`1*+@jfYUFi ze zn1YSOTu%>DMM};{uDT zl8e+l4D!(ww7b1PVuNQCY&iNh9$My-HV!)c;ue(BaFx%azJ-Ji?h*aLoo^wo$KGog zZgC5nd&2Hp*xALPb6r890-1Y4tib|_p<~cF!RTVBd|WMDkSfGUEVyzPNEHafTn=Jm z;$HYYmms+*3?P>ykB5RpAsDe@0>THKCIDlh)5N$umx1~&M{aSVyNNhHF)jz0gex6@ zsHIO(cY(X@(Fh_PdsHaEz8ViKWAtN@hng?VfB(;E8gu)#6j3mexy$qoF zd(avSkXiUsFnPWJnG3-XUqINTlK6cAGR=Yk<_i!HHy-r`C~QXKVl+j8(g6aG<_l0* zjOL5cd;v-a2t1lEKw&YOFGlkPC>&0@DQs5k?8da|}zF zwlZfkKV}kQe8yzN$jd0tsK8jnT+L9;@SeGzQJK+_v6<10(T#C7^K51XMi6|!@QR^@ zF^%aX^8%(GGNU9*_y4y4X-t7EX-wXXj~Mb< z(wXit7BKZNP6I=GW+&#R|8Xq;85xIq?EoNTK{E4Z6MVje2Q~ux9|EHNg{n^i0_dkuPm?@2E zD`PuL7fZwcT9(aB%NZXqU1fQ|)Wp>G{}aP`#%89AjE;=|m>T}4|IPm^!=%c>!FZeT zA(Io6A(tf{r`FYcK_#KJjdAj zzx#j7|3?hZSspQ*X8g|3!0>_v6muZ_fRT@hpQ-!51vBs8t1O2Z+gLhTsu_6yRx>Ct zHvNCd*!2GegDK++1~bOG|GbPZSv(m%7^@ldncp*bGj3zt&e-?Afu)hflcD{;CG%1y zP9`oUZYCb4&i`plJb%-elo{_ZA7S)hInKD5ss4W&lPO~wlNnH zu~aaBW~gQS#!$_yz*x`3^LHUj&;N%1)eH^)Ef_ogH~+6@Xk_a7e~ihI=@?TH^8w~> z%#KXi%pQ!9jHZlUjAo23Og|ZT8Q(E@GB7Y#Gbl5bGx0K2GIjmm$y~uShv^C!H!1oKZ~6a<1$0B;Y-Uxa zYKDTp=UMJCi!xO+r2VaC@M28+8^)Z^bb;j{BP(MtvoVV)OCe(sV=)&nd|=NF%|s%z^KZk!{W%~$i%?Rz^uTum|2&x^?%R*I}EM=9lroCf6xE5OnVr6{_kP*XI#wO^FNr;o8=sXJM-T^bC@Dnru@%i z5@X6|a%7sz^ogPFfAfC@#^(PrOu8&-EEgE{SZo-4ne&qEN5K7n8-4R zNsRdd!$*chmRROQ7D?trmi~Vq7&kI@{a?nEz^ux&gK;ME1A-m1ey0S^8DSvRL!uDv6>;D5q9o*G(+*)V=nqz$z09A^S73{nxT>T%D(`H0EPzU7UpK=>CD@hL8o{tvg~38 z?XuX+tidpaWi#^;<{3;1j2wSoGJj%z$TW-PJ~QYfZzkq1%%D`WnR!0TcQ6ZN(oPnT z*iYsc%ymq!m>F0u|Ks?}@mHSZI7MECCD`{}r)xGEZYHXKZKs!KlKr?cW@h z#VjXS${0_v%w<{0!twVA3&-EX%#Rs(|ANBj2Fop$#|+n59y5UI$JH#+3>#RY88)$O z`?u}i3Fb1!a>h1h1;#Bb=a?`2+s?9sC7R(rOEk+K7Lc3D7^@lfvP84|V2Nh=%hQDhWkmSy?O@`WXu2Ktjw%;7}!|L86U9l{^j{A#0n~V zHZ#jH-(Wn)yzL(-WPUKVGe4{}2^g8)+`BP{Gi znfO^bSzA~FSgKk6GCl^ElyxliENP7Cj1?>&Sk^EKGM{Am$0!Ci-I3Xu`3RFBI6Vt8 zuV!8ib{EKPFbq<0is>Yi1X%r2#yn<0W=U`kf6VZZw8AHrR76Iu6g(5@@7Dk|OM~!)i zJSy1(4hxtVatae=f`lJL4iZKX)gWJjQU*ju44h&hY#0d&F_0>8CJ+l0TOjoy5e5bc zuzHZ|Kp0f#f?^D&6GB5&Lf8;;4RacV0Z(6`I0l8G3=;!G8UsugstARGq$H3Kf(7D% zFvtxc8kAN+?!avlNF}B%bzse)7yvWi1Spn37-SxVhDkxph-Lu!5o9JLWH^}DF|UK> z5SU5^25|-n2GAL)bqo-DR2UI*AlE7|fad)`p#TvFv0$aHE?5X;HwQCFA4skr8ru+i zK?-^qr!!7x1onP)ZMoE)W^bkj4JJ6@$VKq6VZN zhG8P0aAaVBq+(G0$iT3kc|9}8UC5XL90MSeAo?Mx7{Z3sDL1&AS@6G@+AWUgoMQr$X*Zz$%Et&VFptN6M^Is zkh;5IzcDayGIKJ6Vj6@&Ap_D6k_Uwhhz4QMNbOIiP0X9XDT#rB6-tBTP%$JnP{m@< zR71jmfdLc}2$dlFeHnZiKz@<~rv-Espg4wwDNLUa10>x*_z-=rQ2SIE-JmQ6202C$ zgs1|Mpl|`jf+!;*WI#59IAVM;RRtqOoxOrh=jNt zq!MO_ETb>OCUELxU|@sS9w7f$f$d>nP=cnEG=`1LzEB%sAptRK%xkJ zAbUX=A_^kA8K;6F%ngum1@TbTfl>=hBpjrXffF2-?ko%plb~*e*bb6}#9kT$B%Odn zAT=z=ZD|afz-=c`N=6PDP(3*vss9zu0I??vYC6OebW#kS0&2naJt$N`t_P`ul&K8R zumg#J%G5fB4#qlg*dfYPkh>t5fdLe|AhjTq7#Kip5fE=C3n-?m7-|_n_JBkn7*S7x z{A?}2b5H$!AlA6%vs=##|NENzm=g>k45_TY!ApgT`gzzCG z$ZQa1U}$9q#V!OxOhEDFc!qOATdz*fM|qkK=wmKU@VX+wG2KCxawPwJWMSE!-szm-PlNwUm)TTdwsy^ z0weW}UYa9p1E~dJ zR1uInec)jYk_Tak8$j->WsqeA@vzshsBr^wJt%HKCcrSrH83`!1b~TvYzJYGn?M*Q z4xvFJAPnJw)InIXMAi3@lmrSH7z?7Cfgv1R!h>83a#1-nCxLtmQ^5=s1Ife0aML~v zsNsOwCWNF>h-o0(A$CLfFmpkn400`^Oa-|VCJUl#8JL+7F2j{ZK`KEQk+WcV03iaB z2Zg6EIOae7f!GUj0Z7fKKOk7e%)kJmL9!qW(gQK67A_7F1L+0n1hGNtVY)zUV#5Wb z7oramCJ=XlTnLeYi9&dwQU$^SwMRfKkX;}egz<$7B;3OpKK&uqWe7JQSP0wRF@Qn_ zf+6yt@B_I58Q){L2j=2(86@;-!L<^^g`koZqy=K;e+DK-W=0lhc?UBMB#(-X8BL&S zP{pzF5Ge`4VqloS0&*#$>;<_7Tt0LrLZb+y@je9(`EX~LNzm?D{?n4+0tm|~gYnBtidz~Z2=0hxlp zAXkDgLIlJDiGVPO4Z$EcLRgfMpm>3p0E$fz3r2(3u$%&7W8(EtKOkg~-3T!ULLyYa zSh&Pt@(c`TF-%9uA+tXH0VO+D2GHq3pz{YIa-cKXA)(8|z`%fdt{wx!OR(8*nM4>w z8N}ctW+3&_5bX>M3@pr`J2z3!rvc42sWWIWFfbrS%s}%Va7{=I&|TR`Tr{Q;gE5MT z3Aki4WiVr4U;y2#&A?#E0CErJh?xVk12ahGCDU6b2n)p^1_lO*3Wz8uoI#j@!I=Sc zhZ{uHftlkkgaxWAKo~Up1rdX>AUv2V1_p>Yh(w5i+yM~*kr0e5i=Pd07f27fDv%g< z3{iOx?iL0H53o-_CV}M8-3$@~xe-J|LFR!(V3^pF38o$wZN!2|CkPfU)iCj5aJqqoHv5JY z!fcQmVQP?RkSic^AYUQNK-e(zFlmT9h=j-?vmhpdL>L%~z~KpDgGkUkJ46h|g783c z5DenO0qIvDbU;KwsShNE9mCYXWMQ@=#Ig5sKmg=Q zka`ds9mCASq!B71a_oOWW`Nirnt_4+F9?EEfoPB{2!r@A3=s#BFcAn15do193=t)k z1nEIn3lhVQVJcy=AU?7?k=Y)udupm5`K9D#FgVZ6!KrDy|h=gE}81WdS2VFHt z3_FIYgvl~6crqiq6PXQD3!@=&5E3Q^qZ|IiOhl()Dqw!s`UhiyXa)wYe;^1_1)@Q+ zAPnNeFhm?(6rvMCLR7%i6GwyepsNIlVaG6)Fj){E*+s}~kQ_3`CkJvr2*b=p&@dBV zBK!ZngNGH!#Qpz35Tpu3@BhcZ0KyUmg$1rnY zvLHUlT_75Sk=Y`AXyLwsfS^R zIJziACxnEkfT<^r2I)ap2@=DOVJcy=AU?8-kl7$PWQl=X7f!Ls40*H;k5K#ml#)620NC<|B z6GwyepsNIlVaG6)Fj)o$UT{AOCXSCr^ocN4f%;J(AH&Q=&@iQ&2HT2BHeW z0?9)75E3E^VIz|eaS#c?$Z~|)AU)`+Kw{W2OeIW~-r>dpZij$E28JQ^FT`CSHl&t? z@F67j8XTk!Bm>d|!4TENk{~_kYC&SyF-#>)mVto}r5ys3$3}x(iA@|N25N^ud;&8W zMuTJ_7$nm9A7lzD28kn7fJ}k#U?fO2jEzh~^npkSMwTPY2I)ap1ro!KVJcy=^bR*j z7=Xy_|5zBd|3i$jfoh6Re;}i5pc(_)C>zZ6=%Z{542V%S1_sb58yh3$$@$nv+0bh{ zQb*Z9ZbBbrV_?7>Wdo^WV89$%g!vide{6n+jk2Np`O_b1@C*mU+@a}bNIZY~gFc!% z{QZnRg8b>v$n!H|1bO(RZBQQ~T=+NVE=x*j5rKl~tS7#PsY21@FBn3*t|obV&Qu7}w|JUuYsN52_K zP)N`x{6MJ=WE%vJrawqH5F!!jZ={DG$p4sab?TM*3=G8fPtfCxmSt8ABLf4ZlxASy zgj$STO8>`bsl(cEsHOCte~?ldL_>^`1yhinLdpy(476MKa2agV6{K|!U;!LGvVVBi zdVuti(tqs3=Fi(A?P+i>?1@XN>z}4NO=AG!^yx7UNZy;SNjZLs>dk)es9nW2TDm7$HHouPxFlL6bgSde>;rZdcd zuB4jDFpFU}!%W6mjI$Z%FfL$N$gqe3v<47j+hT?#3`-f7G0bJ0$2gyH0pn_L8M=@W zG^zzrfsb6vu#RCp!v=Gi+hl3Rb+0VLO-x5jz-mGVEg54Ps)!dl>d&5hYG& zAH#lz0}KZl4lx{NIKpt0;TXel1_p)`3@4GapJG_VNNT7-v_nD-bgJn*hWQMzP=m-Z zFu+1>Il~Hul?MA;K-6?kXzT!cPZ|{OsAT~z9}lONKK*=r0$kpK zLK%cHTl&=K+aQ;1u)Yoc@_r!Wcoq}oy}7~VV?uE}{CteM69{{%hRpkr-(w$KaZJd^ z3{)7S7+O9CrRtFv$CUaQxy=PDt5J9Kp|{O(mDThZhx!g4LBzGz2>)0G@8%mxam)(pAmJHZC8k|Hv{Lnq5$9t_E}<+{53RDAUOq-15g7XY zW7K>M84IOgZ4Rv}j2CVh=Pf_6})Z?1#q1fg$Y+U1mrbrN<1*-9s^77%)Tfh2fC) zg&8z1%!jlu`l0z^!jR4v+$@lM!NW3?^93IZBwz3kXJZvt0#E{I8!jQ_~%NW2Y z!+exkoB0&;Y346XjEp5rD$Hk?&oXy0USPV&bcyLQlN{4crdv#RSk|ztWr<~BWMN|Q zXSvLBg(aOqmGL{{L8dp%q0GT7^H>5IGZ-=%{1`2nte8G9)iB#K*)e@(s$;&!tiybf zMU(j=vn$Id76I02EYq0tSY|NKWY%XfV41}%!y>{W#v;xl!7_(=E^`fw6w5s3`OFKL z7cwtmmScTgIFBKpp@4yj=_pen0}E3T zLoow06DyNCqc)=s;~&PuOoy1lncp&puq*nJ4}j9N=(X3DoiEJYE0@(8cdo@Ni4}MT1?tZI!wAudQ2%S zsVw?T226%bMoh*`*O-%X7;zy6z%`TB2lhU>qj|3CV>_diGl2+v~_ z<&@^S{`z|DVCC{`|lG zo1Opq@5wCJf9EsZW551;F_RQS4AYE%jtl|}*MA@UXZoL&;reg$e{aC*K{lb{sm!Q+ zblxS#>%W8k>9Y6yyZ&2?;p3m{zaRd2|3{f=BIA<(vly=b{>2dg52UA_@%r!bKi7Y2 zGq5v(_y~NE5yYPH{{&QgKitOOf3E))X8_4Uu-@ORa992Xi~Ik-{@dyAl|P|>tp3#f zDgJZ)Hv`zTj=zkI*MEQd!vW@9|D6g}J%_=FshsKh??WsPn5MEsv0ne}!hDYP`tR** zqU<0WPJ&JM1(P5?1WSPRg4ogw$Nw8}^D(?&`N~}Z)?v@ElgX0d`tNuDc>Z1bXZN4y z5BtC4|Kk6?X88BFfN2R>C)fY$zwQ1e{Jrse6+<=C_1};GUjO~(?~}hE6R-bPWGMT$ z>fZ)%814Lj{r9K;N{pWwZvA`0;PU_2e@2FX|54KnG7sEAWng4bXQ*VXVytFlU;y0= zT*6q+Sjt$&SizXf2)U`Rl~IjRjd3E=1SZhUnV>VfL70JID$^9EX-uD)zA|+)buoQm z>S1bQYG>+T>SPLMn$0u^Vm#bJK4w1VOojuD*-Y6?xlH+Jvdj#O%xnxC42leD3`>}n zFqt#>GN>_v?j49_U|>jO$Yx+*aANq%z`@AC-~`SSo}l}a;imgCMlkv@gfW^kS}=w& zMKD=1f^H?WWwc?mV+>`gW2$EgVQOLOXPVA5gUOzefx&?>kb#w97sFA8-3*r)wlkb& zILL5-0kj720>gfWeGEGpE;C$bxWRCkVF$x8hEoh@7>+RPWjM=lh2cEIIfmm57a0yQ zY-2ddaDrhg!yfQH8_15E4u&pJpf zFsxvh#W06q62oMMDd4?7i^2PSK)Y7fGxRd_Ge|LXGxRX@F)%Q^2Zxg$<0mFf#%v}A zaM*zE^AljyVT@)_W#nUKU;z0EGtptF9iGDa{kGqZrlA4M4$86mr} zKyeztc#V;P;XMNbgD>L;a9QTXC=3osMrHv9AqHmVcm{q3H}L7~pmXU3!Qsu!{E`V0 z?+{m{GZZp1FcdNrF;p@fWNc(&U}#`!0=t%hA&x1XDVZsgsg=o^;Wxt{1} zuv@?uL5bZ=3=E5zG8uO>Eo5R~$Y!izyv2B)F^J(FV<=-S<2}aHjC{aSY7Nu8iJ{oXi}|LX4cuB8)zaub3DZ zDi~Us@)@!i7K391q~j1{AyYF`2~!bM4)`?rJf;|?0W;()jjA;$i zDW>yGe9Tvw<}%Jf=*b2}pg17t=MRA2Udn8BBuY-Z1$wvNDS^$}vhZDli5! ziZL)SFfnp5D1dV!=wyoo20;dQux~RMelV3YK=kfrDrI6|h-G460G;Wd3LR}rV*-ud z&SspI1Gklf64l8J#~Ig>8a6($CTZA|x=7#MaiJz~;l0G+wN zl*y2Rjgf)j2ICz@28L$F7RH;54;W7|>M<%Y7&9_3s4^Ha=78__GGowSFkt}Q+@!;J zlR+622jEx%rA|KPi;Q6m3=G#9tGTTkIc*u7=#%M7_Kw!W;)DxjIoTVim95ZhN+mTmMNYoktu^Ig(-`PnRyl?1H(}! z28Jh0*O=xru4X#Uw1#O7(*>rhOnl61m~JzzVLHOJ1{`u(V7KKk@-YW6@G(R7Z>K&)cH@QLvU<1fZPjNcf)GD`GBAXK z?|a~5_GhYRY-D6$;AY@u2xe*myO4pQo3WRXfx(;M6(a*fA|nICBSr>>1jg%7Sx~HG zFuq`NV>rur4lD*SQ-V>RF$kQ-%9$oHPGOwJIFpfq0d&*CMy6#<3=G?u7#OxN?PM}w zU}ZF7Ugm47v>W85kI}8SXIXFx&-) z1?ZLw28KRH2Jo#t3=DCMkHI>U7#SGmF{OanyBI<1xsNbbfNccDDhTs2Zw0&j2-8x= zGfZch_?T}nEoEHFxR~)S<3mPM#_NpC%$!ULOd?FeOk7OjOxaA#%+YCFsxzP z$#|V<2_wkAAYJE}_?VY6-URz!6nxvXJQE`Cc{BAeGBA8#{K&|_u$%EDVIV0VFh z4a3)ePhe0KgtS9JB%d0HL|`XPCrt?Ni1-Il2(*U_7IioQk5F_Cy^U_3OWHsX){SFv>8dGiEWKWqF{Vu7CY^2;=qNb6Btc zR%a4n5CNNgh+zZcG{)<{O&Bj3T>rg`aRY}ja~{(Yrt7~?YMj&nnKD<=)9`?yxskmJ z$fa&fKf(G+p{;(93UsW>pv`#w_g}^^JZjMO(4YSs>N)|Ybp2YUQ*w}Sy#6~~9}+gk zOoBqu;Qo>Z(H6>`kz5G<|)ia8Jt z(1(^T4hG$t;Jm_E~{=Fx&$!#}v z(v&g-vF2-E|IN*C7pyy7pBvPdWa4JvV7~r40jd|I3Y0U`^}jL+F>f~o>5E|isl5Js ztCA=)ge9Q^Qa2Gyf?``A>}FNw>%Z3-)tWhJJ^3vxG8SWQkw^&!OkNEu zLd*~xUJ$#l|5jtZ{@b1zWQHSi8#oVM|Lw%QirI~M9rN|y5A?4{g)o9hZ?LZGzq=Sf zm`fMr_jN`-%-4T|*z1|z^FW{(uN^0d1xlNsa{c=6Bm91>eypcixEQ$@*E4~j2&)Kd zf`p9749OiLAa_MEflLcwp2K+kw=_6BHN?9Z?lE8g?I-<^d5=sNLoP!X!wu#)%%T!U3d(hYLLjjyrYI&*xLAW@Gm&YXkt(wf!xScN1|7zB#wFa> ze=lXZ{+o~K`tLY!*oZU5GlOzv4XYZ<_21dd+zf@x*MDn3!!%t#j~SF#uKx}On+M4` z*MF~N1KD+rc^5AzWFIlR@qy^;zbn9Ig5*Fhzy7Fvy9Fr&L)$H6=>OxJ&lgHstu4usz@gKYhy z+r^N~(9OWju$kcu11Nu;)VLz`gn0@$e!3VE7+0wMWZ1xX{r6-(kSIG=1G6!gY!sfh%lctd+#MBP<4t7(f>%X5FTQLf=T>t$F93C$$b6y zDdy|H|C&H_T>t$AoZ_zk_5iydCJLcD7(h0FQWAs@VO26;|IGvqzYVewnd`qnWfCY9 zLHPqD24aKK&m@NHzppWLF@SOsNDL$g!4N+|NKo42X7Gllmb1*~!Knq3IzS`{U;iyA z1c3q^kow??RJ#5}u+JXo3kv;_Fp=VBc*^(+?vuYJnhe|w3rs-y>k{+z-(8G5!K%Ah zKsE98-&QOOO#YhuHR)pHV}XR74Z{v5P)Y*X1#u;)6o9c*jdy}wXeN98H-zO34##(T zC!}HiPS?NAd<#@AfNLyMR#VnF%(t26FwbEIl|0-G@0rz@KQPZRzW)0Y^Y!0fnE!xX zbp7`~=Fg0>4A+12vHWLdfQBw8jey(^vY&o{3G3JBqa*_d=p$pF)F!w04sIXlB4RRR> zgHm!C<5i~XzvWrfS>#zjW`guVRDf6@5m>tsLF=%Apc|VHTQFM`TQXY;TNYb6TPa%u zTQ}Q8wi#^m*;cTvWn06xjcps-UbZ7_=h&{Z-D7*k_Kxir8ymX-yBxbbyE?lbyBWJJ zyB)h5yDxhPdklLrdlq{UdnJ1d`vms6?5o+gvhQL)%zljhIQwb#^X!+|Z?HdLzs~-S z{TusRc4iJX4si}e4h0Tl4hs$kFm&T^=kVh2<_O`4$T5Rs0mllC z^&Hzc_H!KIILUE}<1)uBj)xpCINo!7P)t!)eNC!|BTD!x_vO z#hJpH%~{G>!`aN)%Q=N}Hs>PFm7E(mw{z~}Jj!{V^E&4(&WD^YI6rcJ;{43{h4Uxp zA5La2HZEQ+UM_Ji2`))4DK2R)87^5aIWBoF1ujJ{B`#$y6)sgSH7<274K7VCEiP>? z9WGriJuZDN11>`@BQ9eu6E1TwwBWMfvIIjbE(o;dfn_(ruBTitx!!WUWbtDQeOR@Url7 z^78Tu@=EYZ@+$Hw@#^wg@H+AO^7`<`^2YFH^Oo?==bgv9jdv^W8Q#;pPk0~ke&zkl z%f`pcC&DMqr^2VrXTs;f7swaIm&}*LSISq<*U2}5Zx-KTzLk9I`L^;M;XBQDiSGvA zeZB{L5BZ+(J>`4B_mb}`-#5Phd<^`|{M`H^{L=g?{M!6R{FeL<{GR-Q{89YT{Bito z{0aOi{2BZ?{6+lb{5AY-{9XKg{FC^n@z3I)&%c;|Isa<@_57RpxAX7j-_L)P{}}%n z{%ib?`JeND;Qz$`jsG`4lK_VRkAQ#xqkyJ>k$|m$vw)L;pFo5_nn12Vi9oGDn?Rqy zG=aGSO9j>nY!TQka6;gMz%7B>0`~=O349RvDDYL_g8+x1fS|abyr71liJ+;VrJ#eL zi=c&IuwaN_xL|}}f?$?lwqSu^gRU+{_G3&A&np9DV&{uN{rViMvM5)u*JpkEG*f7U&=#RxLI;En3LOzTDs)chy3l>0=Rz-p zUJAVu`Xuy6=&#T}q5nb*!i>U9!py=f!ra1q!V<#D!aBmH!ZyOr!al-@!YRVp!bQTR z!j-}`!p*{M!tKIc!n1|v2+tK>CcHs-r|^E^lfvhPZwTKKek}Y}__OdIVO9}-5m6C& z5mga=5laytksy&6ku;Hhkx3#GMHY!H6Im^?USzY#LXi_9=S8lG+!c8s@=)Z7$UBku zBA-P5i2M~{7v&J;6y*}-73CA<7Znl}78MZ{7nKl|6qOQ{7L^f|6;%+`6*UvJ6?GGJ z7xfnP5)BcJ5sej16)hAk5-k#K5^WRh673V6BsxcQq3ANvRif)eH;HZ&-6gtD^pNN= z(Nm)5L@$Y66TKyRU-YTyC(+-cEMmN35@M2Kieg$~Mq=(_o?>BQ31XRIC1N#VZDPG* z)5YeAEf-rMwpwhn*lw|-Vi&}2i#-y1E%r(5x7Z)C|6=Uog5pBrqT;gR>f+kshT>-8 zX5xP0{^AkhQR0Q-HR8?UJ>pZumx^x|-y*(Me24f>@jc>u#rKIH6h9<>RQ#CuN%2$S zXT{HnUlhM2epUR2_-*lf;`hZLi9Z&9CH`9cy*OwHl?eho7I}MmL72$o!l_J5Oq2VV z=FXegKYN1fB!pb&g6{UN4g?>AHOp;&FVh?hVYtAIo|)5_BBP>Xe0=@<;}b%H0|JA> zBVyx{LcMC+6cQE@6%&_`l#-T_m6KOcR8m$^Ra4i{ z)Y8_`)zddHG%_|ZH8Z!cw6eCbwX=6{baHlaPfkfqOV7y6%FfBn%P%M_DlRE4E3c@m zs;;T6t8Zv*YHn$5n=&0 zR7lFnPtJzwK&383zxjVC`ptiZm^c3eVj%1WC=C)v#~Wha{C|NaZxH+De?jz{|4+BS z`G08ZoBwCGL1+*ggl}&}<%7h~amltf|6gr=0}dBt7b?OydN76+jFD87nh5q(a$<2R zSTH$1uOu_CG?gJGAIxW9NXgHGNTudvrh&y$bD)Y-ixZO}B4vp=5Jp8RRHP!a1S(RH zUj$;NWrFz(3~BjA5Ej%p28K+~#0p5PC^a!9KQE_}p(wSav6M?c9IKKT4!XQ1!7^D}O4`YM$O?G|zKgI3s ze-I7AC9ZG(@AP>4A4LChfBV17{q27tcL*OOcElCJe&_P`KL~^LAY+gkWIl`?;PUo= zeo|I^Nl{{1YEf}&JS?yo7#L8*i&6`65|dHn!9j;a?Aq}5|B8)o|IgX@_Wy*9Z~t!r z@i)BvKWD?+{}VR6#YkT}CcOKP56_tJ?mw~EU?Op97Z9lqo4pGrVcH=86?2E0`(Wa` z{~w@iY-WJOGN5`uY!GgM@+UxP1}LpC>D~Xl-|zlA{(kpg-1?)U$Xa3Qcb4}uL72dOjRe*d2khN&ND`V5*M zO3?WD+_!}5JxUr!pHKjA=t9ab_?Xa16v`^d#3Wp`V{}YxTzmp&lpTB(l_Wj4tU%&tS{r5jX;{E>siTD34B;Nnmka++9hd2ahNWT9cA^HBl zhvfVJ7LxD(OF*%J%=`Zfq!9Rq)cgMvq~HJ7ka_=qh1C218)V-9Pmp>4|AX}V|663= z|8GIUS7hJ+Pmz27|BBrE|NXM>|MSSd{~sd%{{Io#_x~dl-v9T2Vhe@$|3P?x!u$UX z3h)0bD7^o#sqp^)AI10oRg~WUKce{le~RM!|00U-|G!au|9_A2`~Pp0-~V5u{QiFr z6rWLk|Nn~m`~Ook-v8gC{{DXmh^_wq{}c81|Nm&c|Gz{Nf#+zy|DU4u{{IoJ_y5;u zzW?u{{r>+I&G-L(wBG+eVE_LA5BvB36YL;Z!|wh60=xJBU)a6>ui^0ie}lvO{{{B% z|F5ur|6j!a{r^Ay@Bfzsy#K!?;QjwM0q_4W34H%wC+PkEH9_zHtN6YDpX2xb{~W*f z|1HAa|Gyme{{OZx2zw@!28n}k4H_RLhK%D0$Rn%8#&!yO|Gy{W{ePCs_y27&-~TVk zeE+{E^ZoxfS?~Y55f3>3b|34H$*w3LfNF0RG z`5-Z5TvGJ@|D4+Q|F(jajVUItYIVq?QM8xUm#D+41MHh8N6V7=0OkF`Qsn&d|?L%aG5I!Vt|6%;3x5 z&fv^o&tT19!C=Z@#9+Xn%b?Am#h}5U#-Pfe!l1;U$e_R=&mhMj%OJ}j!ywHd#UKS< zMXO=*3o^vlsEXZJB1?%<6FHbFEU<0!QiZb&`7}z1~(!Asn1`aSgxF9h( z6?_*2D??~OL23~L7Xt$W8$$%xP;Rgq$6#kqPX^GsGZu#M{Gt@d9ZvfMI`xu)0n~|cVPIeYt-Emruk2%BaARNquSWu{%1dWpVDMmIV8~zqtP$$Hffq?N>Q2MX>z^o-BY&89+%MCr&302!x7YszHdfI4y9*2RBq;LR9sO zYLH;bBBCJNgun%kk1CL0!6Tv|Oh1PMwk$EC#3)Vwxbrt8{o|IWOa8}^Kj8h3p`QP7 zly5}$zZzz~|KBn5{r?Fw-~XR6^ZoydQ9K$3LpTjAnEC$yika{KZK`M!TbLk7QFv&u;BfF50LnR_y4cVhu}F2-v0;TC-dL`rv@&W z|NcKN>@xrTe{2|Lugd)Q|0gemxMRzL_y0jSWa0b&Abe)Q`~M&eGaKC;m^ig)kXt}F zX5st)V7v(8jwy@Y|F>EA{{Nqa@BhDnx(&q7S@iyY&7$}Jc^19@uL4rD=>7i-P|UFS z{eKWvSor=wHE_Vf_y2KWiG}a~W5Y0e85X|(ziKhW9R`cv{|DiO#qa-vaK@td|3MgL zHo7@5aca>Zw}7yV%!mIS(jWfckoxd{jpT>_J0w2*caiw;|A*Lz|30E0;Bx@?96tQN z?C{}#0~DWd`0#%(lnoO@r@x@dZ-Vk)Lg@t#AO4?>!;dxMKKv&IUr9n$-=2WVM>p#W zlKJ+DsA?aenT4(w8~+WOo)u_(WIY~%(zDfu7% zTS4)b{15+i@<05)0;NOpKl}&bp4t!p=hS}qf2Q`sf1BD5|8r_T{O76t@c&K!hyNx$ zAO3&o{_sDg?Zf{iJrKGD$_I%NgMGRn`jFLb>HP4&q~pW?l=ct*S=vARU$6**GoUnx z4`NdTBb#+((TD$zi$DBFHaB$fhyOnofB4U}#tKc#A?Ecx(%*^&?c>sEgFZ?odV|9dMw{4ZSo;lInu5C69>Ma3_dfB64* zDPauL*S!Lwf8xpy|C6C?j+Gz&A6O0%&p@(6Y{iHFTcK(|`cOurpN5?g%p!~Z5EKC)W{ zpytFQ$-lgTXm6m8O|mj1BF(QP<{;)*l91+Cl9A?DQjq3X(vjv@a**a%3XtYk3XtYk zijn45N(&J4D-~cvA@eJV#mSkO(D{{eg7Yh&xggLS5D0_TPJrfsKz;;?!!Tt2hXFiq z1X2gWAUTjakQ|5&!XUjMjLrt}(J@Fb41@H5Fh~td3`U1t{a$~|I(yM=<^}Bx4;UC? zU=l>q3!Z=YzvB6a{~Mlv_`l=%hyM-FKm4EY91))&^TiUF6QmgyG;k=8ZhqL+@BgAXoxxdw8{~clvfOW9p1{c94bs1W9R2^n z(FU>~6eXm(f0@>Nuzm)H0FZW)<2OvJnT4SNq!luiK&t&=qRpTr%)rjj(7;1R_^~NL z^n+YLj((6n1_l8LMTY$W|33Uz_)8jo%kYt8J*3)!Pdx)8!u~2Mx+UWeBpe+6e)w;U zWbUQ^5b+FVguU3@rwWz-&ID1nj_Konn3>qr!^HZa>T{Sr{&!&d`2PZu{{;Vh_&)(^ zKS+H7lx+f~`Jwdre;@wWBE{u}KOg?T`}5&H!@m#z6aIbp|Agt|e=cSOZec^Pk;ReO z=z2hM6;OQ>pfpH~7>sTfHS7l^dQiC!qCs^JHX2$ufY&2nlgFixTH@fs0c0^0rxoQ_ zrRK#KmlS2@rN`%FmZTOzS64$7pi$|mxy3pPsYONkMe!M#=@~hh=@}(D3MrW>@s;_d z@wusqc{&Qkm3bwJ74gNT>FKG(B{~X4rAd|f1tmHPSZ&i$$j!W z$H)I~#IFAbv0)g*2P?!u9EKQ_b{T`tKL~6$#f1Z8_>w`T(OQs-+6$|Ma;R#ym z1eWm#g|yK?WwNIqL>SZ;0C@+b092NH`hZqeF@VeKkRV5}22dI5=oAFj09rrh=?`Wy zfY@#UpcPyU;PqqPP|cj6bNWI-E3Fv7Ys^5&9b`VJe-j)D5tj$8(ei|72CZ!aMJY%P z9|HpeD0)C_eg+1H&>)ESKwH6rL;S(+0i9D95*z|%i-6XY`9nM-1Y&#mfR>gq2!hxU zCYT)(;t5(J#vlqZKg1uj?27?(LYF6K!59PN=Bxnf-CzO2re;O)3vE<|b>7@|0sns9L_@AO9;>LF{*~ z{`ence@ykq|9RC2GuA-eT3P<_|C`c}|INw}a@Wg0{s+kyBiVlgYClLkc-_bUch(Tb z#Hu64EMzqc*CXuqfwH5qxM}W&kN@j8K-4B~`1t=WRBhY(kN;KH62>q)=b!la-vA9L zpn-4vpZ-q}`1F5)z^DHg1U~)WAn@t`4uMbq0|Y+(KOpewKX}jpl2pMYBdEY&fQ%)8 z1eidD1`?kc+Hiv^V_*Rl9t@E31f-r7RA?|j$_o&m4YUZA0nvkE2X&$uKsWV(WEmJZ zI6|R36mWU|?Y2 z7l861-BAVsL8!sdfDjad@gcO3FocHrP*?=Uhgc{g3gbg86op^M1F=v{93~I3P#knX z7})FJPBDXoBupOS07=k=JYae7(q9HCX}CPt$I_r9*&y;@2gu06<-rb+m4oxa4v>?F z^T7^~SAg@u4p2~pMlfhAE&~IDq7s4+vQSAG!3SBWtb*W!EL2fN@Ie-;sv-Cw3)R#S ze2|6e8VEkf#~PYQd?p44O)Vro3j>3eHWHtMfk9gbi7&vwpreb#S72b!)kEStFfi!p zBk>y;81xO0_za8;28PIdCI&+zWIhXnkufr#gTdGYnJ>U#Vv5XHU@$d9<~uN$nIrQX z7|bn@`3#H}mMDBCODhyUi3@#)r~h}fKK(x<^XdN2#pInj;q8S+c^2;DX z3@)k3P!>on2nUzur9h1K&4;lhs=g5jwtc@TC;Mrjd5(5)yFBFPY(SW;R9WrNJZ zhWC4a`oG@$)BmO3pZ?GG{`7yM_ox5u-k<*0dVl&~?)~Zio6t}HpN4+=e=YRW|Kp*b z{_hF>^nYXMr~k`BKmDH{`ssgKNim=PH^zMWUl8-@ ze|*fR|9&x_{@ccU`fnKX>3`wGPyc%-efnQF>C^xGNuT~FO#1XcaMGv$PLn?UH=p$B zzsjpm|7Bl&`p@_3)Bpc3KmGsk^3(r^FF*ai^zzgH<1at`FL?9mf5w|n|HI#W`tSDU z(|^-9pZ=@7`Sf4-&8PqDZ$ABhyX5nKfu*1Se^~;-oJ&9dXF}q`#F6RWP_;0zQ&4^a zlD-=+KmYf5@%g{Si_iZxUVQ#9@#6FU2hTtM*LeQ(NI^-G=1KP0>!w_Nr7p(37-@pI=|FwU=f3Kb%d}lsLt6oZJ0fw2X z#Y&nWNzhLC)RNMI__W0ARL~d^R1iclf&hqtilMCqRKa1yON#sQzaV~KF+&o<{)WUa z{~6*T7};I#Drg51iZnw`elmFc5j?t;mzULu(D!cn8Ki@#=tO@p{9m`VH$%PIA0Yd z#g}A&PL_yIPRz*x4>rc9m*p@pJp2l6`J?(5o#$Ns_5boRRBVAoi~}l$t{$ZJP2<=9 zJuzYYjDLBv^_zJdz|bo;Xs^BB@nlNfRnix?6MiWqVeD;cs%^BA&9 za~Kj!(;13W3mEc~OBnL<%NSBplNmm+GcY`0XJB~4&cJYooq^#6I|IWPb_Rwg(0&ZM z`JdPs7(PSQyk}wnG8!0?fsf#DT90|Sf=Q}>RYfdQlrBnPq!qz+jQWEaRhkU9_> zT^%;{Fg4iJ!_0!w*wo;12gqDp?f{vG?rxBJm|4hdbanX5L=RsA+i&nnL;KU2K@B?nVfCoRoi~u}g50b(c{&<2OB!xHhS@4HGE8fs&!yo$W_(PuqZ|HO4 z4}C7Yq0fy!^g-k4^0M-B@^bQE0u&qaGGHc{0P+9-mt(MIh+?QWn z|7Vze`(NYx?Z2DXxBoKU-~M~~eEa{$^V|O(?{EKYg1-HK67cQ6O~AMRU;MxQ=L!7w ze~sU_|1v?}{__NV`~N5K+y5i}-~M0m{PsU5=-dAqziY#P8exE56_U>jZuKzs3LC|1%&xLErxC1b_Q~CivU`1A*WEX9Pg_2mHVNukio& zUo;fLKN<4v|305@|CfhA`1T>+{!a+__TRt{!Z!~2_Wy?OxBmf9^EL#3`wzn)^I>cd z4dR2s5`;HC{Pw@#Dt`Rn>bL*sn2;V~_p#&ow6o1{1Zf**wk+Q1>$|xX~JJ zQs&HX!Y@7d;A&?E+ldKJA|5(B^lYt=T`%eq@cz-YCsN)nldk%*o&V4Po?`=f0MsWU z1tS^^P+eR&&ozW7AS4e_HDDy-z(vSG1_(Z6<2ERa@L|wW5km3`x(d#))gcNR&YB8_ zmX^l4Mg~SE3X!GRnHiZy`3k;?CB>z=`6aM}1z~1_%vUhhGtx6w&;aSsH89jQv`{EY zEz2y<%+FIWHA+e{N=!CLG}Bbj_Vw}%QHZXvFpD=c(ap)sE3ME?&nu0EnT3re#e8fg z&qXs7-Ex>T!tF2-2#s*RrMY2>fw84wYFeU^k-2G_d7_zFQd*j^p{0R^c`^ey3>d&? zq`+r5K=W2BzyIf0@%{ga72p3mtoZ)FW5xIXGnRk<-*M{u|23z+|DOZJH=z6zP#Po$ z!yvUE^nd)fF!=EwM1!z|!H@qO20#A$|GEaIL2QtCgu##hJcd91%NRmv5ZlM_$A1>X zAOB5$T?5k~c8uYV|2Bp{{$DWu@&ADFkN+EtfBauy{Nw)w;~)PUjDP$uF#hpB!T87j z0OKG39gKhcH!%M3U%~jte*xnk{~3&b{QqF|L82$KfVf5qw8M`0BSskAc!pY<~Q2fwHIA{rGR{_~XB(iFaTPlq4>-#YyG|Ip#b z|Emr^{-1RC@qe$wkN+DTe*9nR@ZMHpZ|~e{rtc5*EO)5i~rC6E&f0MU-AF>zbEDA|CE%U|6Njk z{y&oZ^Z%BVpZ^QmfBs+4{PVv@>(BomT7UlE(DC!XLdVbl2^~NGfBba~EEmxB^Z$aj zpZ{O9{rq2+8(*AS5}%ux30icQm<%4Yf@EDVS(Y20oEe`|nhQFthk=0s#7`~;3xJQ= z3@%Ab&Q<`8eq|Pyq~;}8Le}CbXcQM%DX5mD=qMyX7_b3cu&D^bTA?Vlur#wMHANvi zwGy;ImrU;o!s{rV4L*Fb3y8-#Pv_#iQ4+(SSf zSuIv})vx~=lYaeQG5Od3jL8tT28^Br;lF^=Aa&UA3Ig)j^dO5BO#1bI&a_|u>!(97 zj18h;m}fdf4UCUY6Ou<)kIp|b?H9%vUCf4G|Eo9r`agHWumAZ_+_T}=e~28(m)!!w|P~g2izVjQSw;AZ6$Z$ZMGJFmN)k zF>o_*Ft9RkfzPkwWngAtVn8+x(xqXxGPAT0;9$}YVrCQ%0s|H>2_;O7jSLO+^>jg8 z?I5k7AYKqFh&zZeD2NY4$TJ58$pr-kae>5DK?Dj`7%Sgn@~HnPD;G4906*xL^STs!RnEA7m=3>@}`r46{JKW@q4F_`aZ7sC~%Ev(BK z_Os1q5MXg;_{8MIaFFR6Lm9I-V+qST#>XrP%nZ!UOd2faY>CWH%omuJu+3-EWt+&v z#O}rXjZKP$k&S`n0h=E4dFCCAi&>^KE@0ixoWa`5tih_yB+n+xw405Wsh;sG<7}2+ z3^r_GjOuI&jCWZNF^IFdF}z?6Wq8Wk$Z(l4g`t&|k>M<>B!fGvGJ^w)Im0^^U539b z3mERQ*fN$e++h%54Po+ODP>Gx%Ve@-y~1*bwSi>{gCsK(+hyiP#xtO0BC_ze#Za*MH%O@Okq0Dl*+IJ zEUU%R$n3`ap9N$_6q7jPdqy4xZI-oQ{{R1bnE(IxWC~>LW7K8&|9=k4WTtaWDGb}0 z8CgN8Z7_+KL?9}WSyD38M_&4nE(I($ufcI zG*cqO7Uq{wSv#;V{{L@a7H0g*^8dd&SpQqbXr^e!>5RM#|NpOJnZtCQDHohaFEQ|d zZ8v23|Njr;|Nrugn;7btzcK%2;bdOLAjG7{@|rP)$(G5Lu>)-WWrkj+6HIXo8=Qg<|NnWJe=`36uL5=fNc*7! zVOqm7o9P-;4#Q`tD_$^(fbHgG&1aEgRAl-8|1abJ|6iHyncNvW!8Sf)>SH>|6wk1U z*^$YUv5PT?#ftg=|9+-ZObHB|nTwdMS>Ch!|8D~}?>^%f=IIRo|Hm`MGR|ZaWcdGo z6U#iNn@sr(dzr16oEX~}|Nox~_R~!UDP~2+5{Cc(XE0PT{Qv)s$%5to|KH3)jQ{`Z zv&>|uV9;kWXMD@>|9=x-8Ifjoc2CV=8 zvoZev|B&(j{{xI=%t{QOS-hBn7#}fBV|dIsmt`O0|NjaM$61~;{Qn=wa)QB?`Tze~ zhDwHZWfe|NnO}9c7AUSjVivn#BD7|9uuyCR@h;|Nk&gVBu%% zWIDq1|NmO%BP|npN%<|DTZ+dBR|9c{~K85GTmUx1IsCaQ~Uq_Cam%-1{%CwZp zf}xXHh4ugcCWin2S1{VM3Nk%lC}K2VR%7L7Eoa)q_u z=KufSgX1NHnT1h~NsaLa^C{*^7D48-EZi)rOuCFUjQ{^Pu-s#4WZJ{@|Nl}@$;nW} zDgZWLf%X4?QRaVO{Sr*FOsb3(jKwS!EdT%4GVNgc|9>GU2L4B~-UHMB|I4v{V)(}J z|GzL(0c$bi|NnQG|NpOG+RWt5FbAwchV}pdzf2M=|Nq-TeGV$OjG3$%|Noa_?PK}P z)WLL^>Hq&V%uB&`f@J^y?`B9~{{NqwQ55W^hfJEx|Nn0T%PTVf|G%8!|9^KDRp$Ty zO_+n3|NsBYbbxs;gCUb8<5Q+6<{lO|mUgB?OfIae!7lj8bOucCW4_J!|34?AKkNVh zyeuXxI!q>vLCpXEx3eTM&SU)lKa623!(yg;ObZy2ng0KG2HX7qKP#gdiww(0rd)ip9!ol15_5XXfhcx)-nG7-@@|$ ze>2lQrvLw!Gyng8hEbYXk3pKniG`Qx|NjC;CdT~?xh$nj8<;#8W-_ZY=`+?cUSw%v z`TxI(X)n|N|I5HO{{NrGEY0+orJV65OBo9TV-3@GCVz$n%>Vy4GW`GlgDHpc|NnA^ z>nw##Um08&rZWHkpU51bsoTJ3SF8}}k1j}}YJB%r;3Sd9}|G$Z`0UYukEQ=VwGF^qLI>7S(e;l(IOEbeE z22rN}|4SJE|1V(q|G$!H3zHAST;`X|f-E7d35;_X#TnF@cd#sEy2JGUe-cv+^CE_0 zU^9|f|NqZs`TyUAWh2z4|Npg_FR<7!xiJ3!@5K85e<#EL|JxY#n9LX(82|t8WO>1C z&dkgl&XCEplF5dlm${iah?RxajrITk0}TKFe_{Op|31V2|Cbos8H^bOSYyEH?H>~Z z*mttb%NYLuPi6W4pO5AL|76DbU^~|^EMdCO^q480aW_%nww znX>%<&%uz$x{~ER(;;XKva)2b{{LUd{Qv(umfZ~h|DR&{|NkCiGII>m1CYBIHZ!hg z*~sw!zZk0*%m4q;tO;Nr7_s17wiB3 zwk%nUWemRR|Nl(p!_3cEGMH8{Su^x7|Nn2m zWWm_T`2T-5%m4p147Zpg7&@4bf_(`pB_1)bFl94tVB}!D!&1PM$LP#3g_()9nCbt2 zH-_oVpBQt%He6!4#gNSMkoo_AapwR3cQR}T$GacXUY7s=85#cnU&!*5`5MFj|7#fk z|4(PmVtvBm$(+dI#N@>&#_<3Dc9y-2HyGp@JeUF)<5=C8{1|7m*fPhn%w##qsKlrZ z($C-w4rfQ^e_)rzvi$%54s6H&|B9>{Oa_d`%>Vy4v;6-rz%0xf!cYtj-#&&jEdT$f zGRreR0=a|n|NkwFE=)d9ebZU|SpWYwW3ppxVZ6XNk;Ra~p7{fV1Cs|-UW{3ZNej%b zW#MCtVEzB!nt45g43i4u|NlJ9Dm@UDsEoc7! z{|i{`|9>{7Cyces!7RU6s+o;gez5%i|B7)P!~g#;7!#QO|1V?}V)*}mGgR&W|F4-Y zf=#`~`2W8-LoC>|rwsr9pJV+0p99QW!Jxr>j^+RV!;Js`tAf@3|G$;-|Nlzn=S<&N z%)zlD$@+{jn|VLu3l>ENCT1&^4Ghk#rOf~Te`49p@c;i`=5Xdmj0YM2|5s*+V*USL zfk}h$|NlVdYN#uUng9R)!1DjUKJ$NObCw5;2bur>KhF4*K@)771(O3~E8|(_$t+yV z`Ha;JXBhtfFJb!s-<@Fw^Z)-|tQQz;Sj1Tc7$unh|F?&l2ue>(;2hn>a2C`e1)HSB zWCSWxm|MZB_A!Jq>}E`3lm*LWGp%N_W9VmI#mLO~|Gx~g8j~J4MjBcE|2Jj+|34V4 z>i>TgCLKmyW>MC9mg}IBVg|Bg_z{{Mdr7LNw2(gBkYJ9mP5lMInaBLDv% z2lF&p|NlSF`2W8F!~g%U7~ENrJMy$GTfkkuS_QK2p(XLoUGqH;P|DTRS9ApxySPtxd+`3}GuEs4- zYndph{p?VhI`*;QG%W(B49sQ*f-3(1zl#>C97O2J!m1_@Dta2tM3`$RqjR99!%T@o z<7c4pVd^mHG@?~v>K*zb34_k}u$`aqp<6J6k%5wgnOPaQ8N?V~u;(-VWXfbpW!Gg0VlQNHVE@k`&z``r zoz;%PkiCh4joq8^HQPIeo$QktvRN-M&Su-qkj}Q1A&=38$(Z#IBRi`ylRld)(*#C- z<{9i0nXK5CF#lwWV$Nk-$<)Gni7AZj46_ugI`cGkCRS<2LoA|f@+@_%uUINsC$Q+V zCNS4BC$nr~Tg?*7Zq4$5{Q`?Q^D?F$)}PF?8Q!vlF}SlzF?X^XGkj$=Vz|q|!jR5- zgu#`OkwJ_XjWtq-Aou!w_7u@Qb!OY2Q%xK5( zkL42c43_^)nv9kVUsz@`_p$Ub`7vd)u4L?I{{O#|$&)FE6;vPdGg~q`GO)0oW1hzn z4jR#CUBx(`If!KrzHgZ^Mz%m4S!#8uK!i|Nku*%orS5morDOOk)aVDrQ~F zc!HUgS)b8{;TOv-<|!=Bte(u`4FCU6WsYX)Ve(_RB zMhr`tLs_OUg)n8Zu3$XOEXZul=)}OrdXsqpJYOwjj$)a_6vR}?x`FZke@SL%MmGjN z*6YkGz&-W~hBAhg%#kcJn8KJ!S=TY1WtM05Wb|YZVZF_~js;Y9x-*M1tY?m4navc* zRLi=F5j3{<|Nl#d|NrkXzhUrWt%ceY&+`AjD{C|BR>rpss?7e3J`7T<|Nn1cQD*jK z^k$G?-O3Ca3yxt@VDx3)%pAo$mnoX*|Nn=~9~llYNHKxh><^fez-D!_?qK}?KM~As zXWh>Dli@H!Bx44+jT6GWk3ooupXvYq{mkyHyO}DP{{KJ9{E9)A*`3jYL5TGq^BR_8 z4AM;h|1+?xW&Zzv789iJ{+&UX*_P3nfrIrf^CFg049ehmUd$ZFGMOousgZRH<7WmY zW*x>X#_udQm?yFvWRPIWWIV<^iTNHY=oX!F*7c0P8Sb-|fW|CY{{PotJjtNQ1ev*c zz^cS3&5*|W|34$+HKZ2CaRynYLPk*kp$_bJNE&>`3Yve3X3S!!XE@EE$|TL~%IMA@ zz|5q?xW&(|co@LNvDrfx1Qj>UA=<&2EX z+Kg5V-&p?tpTN?~aDqXe>Hq(U%%7RMn7o))Fz_;6VNqoEX7pkZV?EEj0jx`uX)5DJ z=3tgNOi@g!tjicdE%rMMlHfiVq;K$-0W{8(zyfOhx3X?y{Qv(6qafHlSD7-IcQWKM zr!wa=YBC2i`Y{Nz{QtiLZ0;A<|NlYrZVQ+|BVYgjvxCET4TB2fW9Bmq>P)W~U$OrG z-^Q52qRaY%v6pohqb_qeV*oe~_poR)hcfyz++^L$3>uS7V44Q%M=}5ZzmO@Osg2<& zIA5wU8ZrI<|AaY%1=Kg4$hwE||9?vrb< z|K~HsGX4KQ3!H*}G2LgeVtNENEt~l+3usm8P)^%!*qrD|Ns3AB20y> zpivG`iu(UQpLI3kMHYSL|NjHQ{ye~PoN5Etm<7>uv=5)qthX4P~m_hR*H&{XAj-VNplT7VklU6XLfoTrL|NpNtSTcb| z%t0=>!e9;-FJSr1=*?Qia13lBNap|lDn=e=Gsge_K{JfAp&{MJFo*d8Qz7$QR>+w6 z|Noa5jF~_qb^rfAVEG9S`+Y2+(XIdg3s`Fyy_pv?B{Kd0e~AS&F99(ZJnQh^l6fhs z2a5nxCd(NX6NbsG&lrz_MoCy!F=a6Q|9^zRl^Hbu_5Xhc^ILE%USO#NyA3pM2r}ms zn1|>KLi*bvng9PMGx)LGXS~i}%Vfm-juA3;aD>H?nS&t~90xg!%a~G_W`JFr&A5Rn zkLmyam&~`BoSAO3sDS1Wm|?BoLyQ3|pBSB(IT@a?USs_K{{z_8M_`?xxgGoE3si z`Tzd}V>$C}26v`!pjrbQ)^T9_|NnPm7GX#RhZrba_b})|b!=lQVbWy*&D#F|U(0B~ zAjA5T`7tYKB(oE&qMD_WIh3`Tsk|NkE`XtS(f z{r`V0Q#O+vSl9pm{}|;MUbB2)wujme8nG>9;bTZ(kY~BT`2YVpu(%Y<|NoDfHZv81 z&Hl);isAo%ErwQ>Z_JWlk^lddSQ;3sSRgZQcNnj-US>4|>je42nVE|rjsZ01{r~?m zh7GK>%=Szdn7%M>WXgx?{>-A!qQ)T0@`bq@G%5$zd7kzEe-0MVsQ>@}Oianlpjmau z*oG0y7pDLJ?U~sb7Q#adG!v@~nmcD&&y>ql%6yjIOA44PYB1~wNoN6y0# z&+z~MB8DrBFQMV^|GzQICZ+QfV7V59&@^X3%_w z2eTMM3d23dH%x25uA0EOjwy%f|NrewrA+NC?^zTW<}iF@He~q!{}=NQu$kp7TFfDg zH7u7HO<8ub{Qtk2DU+$1c^5eK{QnP{Uw+3N${f#_$H2!D#$do&%yOCqH12$cF_q;Y zQ$153D`al|F#`iM)E$_Au*NX_|F6Lu1h%1q*A{|5vf@U`Gk|8rxxwMe z%V@#+|9>;{Cf5J|gIRr;qZl(8{{L5C_G0|RB+B~#|9X}K%ug8hFjX;afcnFZnT;Wu z;Xi0}o{5D4G(P|eLsMo>mJo(ORs)vfEG?|UjEW4x3?|@klZS>XXnqf*@-kx?%m4qN z@!X4y`k*;*=2*rYhNFz!piy{c&>SyF)kDVpOtnn!nM_z7Fu+C|WEsVn9T@-r=Vk@X zHia=KF%~lDu`Xj?z%Ui;I~kT!%>Vx%VQOOf|G$rsi^Y!Bj0rRw2bwQyXa4`ciuEm6 z-T(j3LAj0vG6Qsr!Hwzve-;)I&{!jj5$i-o(3+P2{}UMV8G6Bf<^hKkXyh@S;Sf^; z6KIwM9egGrFu*^JiAObn3>pm9ro z<`~9oaH!a^fX2o_^30%Fd!`yD(8#YKV;5+ygSC}ehdGQ9G{>aFw3`Jq+6fw|-oq>j zH&q&(D*peU#Q1^fK0`gT4a+RX|Nl2Jq_enyMmoXa4>BEue=wLccd>+m?L7%L0kmS} z|9=)x`ONtL|0IU@j4I52i~=l@tf0|&V`k8d>i_>+n2)k_Fk7*7G9G6HjUO^Hbuivx z0*!2LWKd%I|NlFyD%741FfGC&2P*%W4l_PuvIWhtv%F;#gSu0J<^O-sS_LI$AI6!C z;;ak7vxEQtgVw5SVm4>F1#022{Qo~6>`IWUL2C#$vvM=QM$x4h=P|Z{?P+5M&C&j3 zie_zL2F)u%Ry9${9qT8S)eQgtFJVT^3>z?cvq&&IG5-J0%j(3moaH9V|NqR42Fxp% z#aN~@Rj?jp5n{Gs%wuL}y~w%{>_1SLEn;?OSq~1u$BZ?sVXOkoR*dSbtgJaK^FcGd z%=;Pt|6jnI#>~r5#`>4(B1UFpJlkLeGXb&wT#+!(Z$%#yW?`Tu_nrYx5K zjHel=u@!f3p1lKbfV86*M3C|Nj)`|Np;$?c`@DVus9Kf@XoZm`ykrg!C@|=+mq~^aT%WT%WjGtNUm_9Isv8-kN|38maj_DrD7KTXX z6h_c2+y|B{X3*RyC{|*b(-@C2wJ`nvFT?cz|3}tt21T$bCz#rp&akR8g4QdEf>+f1 z|38!A|9{Y&b2M`*cs<|1NMCK=>dM zG|K~`|Nno<%D@O(0rnp}PxJr32h$BE8+a}_2G;i+OoCQWLG=9p&&SjX4ksA@|Nm=D zPgy~8+X7(sYcVYWtv_Ix4CY-2>*rzm|Nju{|Nl!sv)f=1ZPx$)Wm!RMX1+6uGrfbl z{W{D4|9#-Nt7NzWcgg?%f>3#go!c2y!DfSadl~-!-v>4k#QXmrwpIYbgOJnU?)?f@ zxe`ns0h9m#Ut+2Qud4e0A2izq(SaaugH`n~>;Tgc@$+EUFf+kc1fGD(J%rK_RUmQ! z*qtwseDeSQB1X`vlRaRy=fEUntpi9sF1(O&8|(l7TUr1AUk=uRstz(U2b)Dl$Tfgx z{1JQ@3o!!)64?(n@f_TZyWpV(k_F*Fuzy{^zYbxC!{1JJ4}m>E4-!xq;(E=(7Mj>YOikQ`(l zAH*7L_$W>{gVv|PTpI#a)qyp1V5*SmOHdte|T2Fp;&8VJo95gB^=Li!=)h!vS_qhA)f}3>*wX4AHFY ztY!?S8O#{7nU=9fGYKPbv}FtdahZh_T`GwfoJVNe3IVRG1Ld4{zNDhx6V>I}9FS`6_Fdf;&ii2240QH(G> zwhW-Peh_h(7&`6102+5-U~p#eW%LBEK0&DWX4s12mH-COS}}w?x>>%}QkejSMm{WH2a#`RHb3GfZVDU|?jbWyoP@VgQX`Bg|-HkZ0&%@P+H^W!TFw zkpa{igQ%ItFcmB}mm!H^5t2HP9V-~FfaO4Jbi9^fH^VLlErz`eYv5`QF@Smw5OZPb z&oF>Sv{1!Bau*p`nC>yygXU%!o-nvDy=D*xv%fG1F??fK$?%V10o+`WdJyIU_eUXS z@iV%^;|wH6DwbkQU{ql=2HT0OSC7#fZm%h$G@K1mW5IX zqbu0{LdIOiN^rje;y0L?b&RTDc^Ds^Ze;}ZI}v)i7=@UoGoq#;ke;QCk_;;t4-s_x zT1L>0GlY2?7&YK}jxwgf*&s8K@hL_NxI14nf<_G)7(OrxgVld#^k?|NmH!^sA;!}2{itRup6cho$h9G1-o?`(+My=mkG26A64ICCeTa$suEQX3*MRggRMfNV$cq2F5mE#>{UpIS_5itOa*Bh!4W<%%FKIg!v#bLO6`s z3+$J8W)--3>CB*cCeq9S*^|edgA%qNF=Skh=KmUIbG+)2^@7;-%zSY5t>8I$(%lF$ z2ZlSC_2A~g#6Wa6GidgefnfqOW?eCx8Pq37wRZ#aNyfv>doav8!F&fCwhx$n;9>iL z88p*_svl%0GUjEeM=?u?WjBL3%TERw7SO&sh+btVTNON>2@yj!1DS2ivK;IVWHCbQ zFcwH%hpaA^B^vIoBohO5S=<;VvVg_}Q2nr&rGRM< z3usL;1H(y{Lb$ykb1$%fW|L6W-(msHZ!s{uWXXc7{me3rQJfVtn~ACxWCjQ;v3kMP zg7})OE5LjM);uN~R?zxah(1TwSK#pTWpx9~2eCRcC9sx){SVTY&sxhgjTJN!4^a;i z1L4`MDR4C)J}$hN^)SOGR?ui7s{Yfgpiyj8F_0POSV8mi5b>+5pqUd0`v$8p!vj_m zu$|9YpMu@|gB7&j0wVvH6|~n9!UmaxjM>;gvl$RMPBtE}USxTEY-u)sxO!DK7jPJX z)N8V>X0T+72fGKv2Vn;`(EJ3%9uOZJc4l*ho8iHx&J@bFo*{}2w5t`OuY&CjT)vhK zwBCe)p^GgV?1pJ<^BCr^fz~}h)WXbP%T@uFhw+i=oopU(^N__!Vee;SXE@4Miekrk zHa57qSJ^CTKSIaCc2WST( zVYh?K4dj?Y(9R5wIdC-{9H4zw3=DHPaVHJIU$9_=pp-)kiC8Ys zoDu^=9@i6wVy>Iu^i#nl2Ugd_1zLlIYF-DIE5k%CZm>F-`7^k(80K=>poqcb2+@nV zKzoQ#?EvXn#|2tR#K5qP3v_w_M1D6{C&K}*W`@&TpjBTC3>UfPF5b9p=#(?bv z`R5aFFPshHgD^KAXayley#QYrgD77w*j|tv49oL@&K-cLfr%m0s(gsHf<9juhJIwV z$ZQKf(7rW@xz2p3<7LR|VC+afgx})%DzMse zXoWHZ!!AD1>M@A@Fgp(LfmT2hf`@jcUgT=t`j}J2qbMk{$5+Tgv z=C=Ub4>DVTAGI$75)|!q`3?Hh_dP`|8=lmZt;WGLqpWU%tEH0 z@&9K0#1A?X1*(R>je$jAEhDeMf0VFN7WfV}4_PldTSEZ*Sgx4>=nN7D21|j@U^ATs zKx@|+7?K5!U^O#Cpo*bD0JJU&>Lx7l39`FXAR8W5(*#iKnneQ7z;=Pu!SF@_NIKsp z0NRzuz;Ilk4{rY%fqI530+2B*y=AS6%2#Fh!RFm4mH#p<53 zf{?rdQwyVS3gYiez7Vuycq0hfr-A7vm>Dqoqu^vlW+BjeItB(IA<*g|R6XKCp!L5D z401xC{oAN=Ff%lS!cpSMKnS$Pl!3up2y`+Hs-6g;DzINGg^q*cq)sT7p;-vE9_SFN z0n5S6N2ezUflkq2U|1#uIxz!c{(2$MIY$sSx_V^(76R(_31xx(azY5S(hy5o0i)_YqEMmy=*x2`l<5B$kQn-QXgD|A5{3i@)XJXR_65|(v)H@(H zIu;R`gkmnbJdCd*0$LRf@wcVO8Ae}`F2-mPN3h=#L^$DQq>6w}^@6C&5&@kw0%60< zA(k!?u?3rrtiDMEbOHon^ZG^XG4#UBnJgmAG*?6$XM8OeDZ(muP-GL>k5@#FGd>sb z!>R^k$9oYkrvDjx6toJFfnka$BHobI%oW`M*SAFU4dVvU7N%XI zpc61q-LOwI4XzGZKZyNU6torSmZ45Pe*X184fWEC${)$8blilHrk< zAj4}h&@M8FeV@g$8GeX?&JBd{L1qz)xx_*12yyEZ5$A-vNlH8t9=;&+mBptqXo#bZ z6@tX^VO??1x=aQJQ*qGBLWsRK;wdQRqU#S7Uj%mpx?GqzXjc-%9FSbR_;$t|anSig z3=ECppgmRyIgmUq+$j!eZ(@_5DGpj?$iOg9oCn1ni^V~!UJ>T65I14iBo11)2oXCj zeiubOHnXvboe_uRgRA1}7;cG!_D?{}!>0CuIB2IQLjEZd|BZMz!$3I_q?}RQgiU>zlqy4{R0m_d6ydQ&Z2Ad_bxJK| zTqrdcr#se3fmSO++>6Vs%~C;l!vveY9a5mZ=a}Xmk_u)#F9q5M0Fk>cg;-zmP%4FJ zd!9+9!_~f)x&vn;yXAuv>KHq-G-#g*#9m}|9MT6c!beEDk3muzv`>P8L0@_yqm?x1 z95Mz57irKgLrgP}%_EkbC0&Wt-TBg>^HfposE~$~<2}-#on5GM#M%c_w^kZ8KDS7R zFz%BEos&w~+{4n4x)Eg74e2t5yU;LwCJj2djj(=@J{W#2T>=mHZ_=QhF%bQnGOxkn zLNcJUKN%R*Wxg?J%iLnLmVxx?VftaTqf9$kJ&X^dgJlru3?@bl9U%i5AAqTil_>+8 z-zam6v0H|;wIDDvVDu~*$T$s*PfdEM4CstaNEm|5T`dFJZHeITl__96Dg)XLg%AU& zL&oQ2!Wpi}K;}$g;`e1Lz-1|n&marh)q~p%m^yTtQ?{EyP__}pERY%lS~f$JqEW>_W+7u~Incg+gc?IR(8;6>3^sC@Z8T(k$ZS`+9~gf2ku!vcWs2NB zhDQ9cJrRdl@pylKxUz1 z26@oA&?I9#nJWBnja^hO_IH7@}RSlv4<17Tl3^O zz<#Tjf5*@zuMLmi+47Ki6m<3I`~~u$vyu^ZEtR(eo3~xQjA5_58N&s6(7DnGd360C z{yTZl2{cG*0_cPWh&k>GaST2RxZ7o63c(Dq z3g7XDYo5XjczB@OS*&mwE?1!dIv)XI?>vQaxHw49a)n5SwF;Q)#r7-gL{SG)i;j;d z>|{8r06I4TV)iA4V+_|7KsyT|e0255{KpEA{{9OENSoxdLI}eTg)kKVGApv8@R9X{ z*nEojFyu8AL%{AfQ8Z$5R$OpdH-|41IX? zA)7Np5p+%ocE2xF^n|C6EsEPQ>_RpN#@?w2I=h;IVV~l2hEs~59kSTXhN&lpzN`q^ zfr~KbwW2pTjEK<-Q}a&|bjlRM4462vw2YD+-2X;Oh;(YHv;{8isDwHfL#)}@)Ojj_ z?h{~ONL4anY*YfBWP;o6^OQg*CS%GkR)UNpVly9IY?D$FIIfQ=fzGGEGz+Hwk`iKF zCrk{TzNM4}HVY*FQVDcUHE#1jYC!m%k~!8mWmPuDDh|?vjFpuC!{Y&29K_aC#_tA0 zWqSs9WzdNw3=GlApwl<7yEjdlgDAHYD^CZj>r@8a+<|J=6lKs^6R2Xdl>@=*L2f04 z*DBXBY*iLu*s1&%#lI(%L8sZGnoGzmko;L?(D^{9`mQL0PB=mp1F1#EFO)%Ndf-UdNT<1-Q}*wZ^m9jRDO0vsRX`_e6X!Ql z?Xy?;3b&6`z3A#)RUm7ZLsSA7B315VO+#fWv$2Y!n?(wLmWmV83KdJL`2&~Tn^ml7 zV#i(;(8=3`&hFX|e711~0PzBw*f!~dSsy`T2R5ieLkD+P;O4>0~1)bP~s^47|bmBNf%m+<9 zx*tMRK_~D*)S}B#%1=_=hvHUT<`t>B6QvHOzen{l)$=~gY+~uC(szT=4LGs*cpp)^4OCM5d`1=ST^U$%J+7oy< zYN~c?)EqnaFC9l9Cx;s>gMPGZ6CK2qF}tp*u)FHzfqk&b)RAnSTaF^^oelhk6s zWeU0aap_yBwhqHz=xX<7C-3>L+-3`Q<|BwW=gzTlI z{4+J|b6K>sb1<0wRShz)I~d$DRNU}OZ6YJPI_`BR1MLrSb!(E#b6s^ClJyL2Q0JNrH9&VlP;M@<_M@xw z*1&#V4!SyG`OzAm27IiCSho&Gbx9hayEd_>r#6k*qj7^{@8)n!3xml|-5Q8F&B5fZ zQMX_(D@Ma*G+aj0z-Ss6O#`E8U^ESkrh(y}1{RF=jfQ34aEnGW6Si~qD>E4?Gcz+8 zauV|r8FDi75*cz6vq3~&CPQu>LvChbK0{7ELo!H3K0{7oem+BHUUp($USdijLvkKN zK_)|HUS4)SLlr}MQDPoLaz4nE)Wjl?8AaI)m8n&k30a*OgoI3KJuF^?fVHNOZXlbX$to}ZV?keiy9lA4{FotRyk z$xx8WkegZra!!76Zem_#B13Xwb}mC^UT$JuW^zViYGNLU16Bd{MrK}eMq+kuB11Am zZem_aVrDW!Zfa^tYG!U?WokA>UP?h}UUErk zVo7E`$Vu55xv51Ag^7uv&`8Y42l)$ZSaL>wQDSi}$nxa;+@#FB%)Ip6#G-75oMeWA z)S_I5++>F2{Jgx>7N-^@7A2PC7cmqhgHlL#Vo4%6?SYbVCMYFl<`pLwWfp*9C^4rXv8W^i6bqSo znI)NtImkhsTapTLa#dnpVp3vNVo`BnX<|_-C{KW56&mFXnR&&PMVW~pH}9nTM_po??p` zl8O>D!I_K!B*>7HT2hi)#E=8Z07w}nGY=#SP2?%5@PJDOMSOBeYEdyb*QaDMWap(M zf{KU4yp+tm#B@;phZP-}c~EEPB<3?zWP;LONoHOt$k+KfDS7!tB_Pw1AhA$Vl$cjs zkY7}in3s~9SO5zPi2ERkogqEHBmDW12Hc*vp6|5Cnqs4 zHNUhtH?brmH8-&&GZ`MrAV(J$q$X!3<`gre7v*H;WrM;dBNr6)sk!+jnaQAZpPiTk z63EX<$t+0(C0md`z=4&LnwFTEQUp$g$r-7|#V{x13;yELf`XjX+|;}hhV0A|P}C)+ zfL6MzTo{?FST3nEr42lU@F`1bHDk_We zGfOg)lS_+=Gs{4-CHW=!3}wZj*aJDXJh3P-FFiT4B$J^yzX%kB`32xWg{O<6)a3kh zP?pNiV}QCUKPRO)KRpHH22jDBlUSJu@^VsQZYjulptOq=ESY)5rFkidd8x&zplYF_ z1e9I!K;AA%%q#(w7&-ansYNiq6j$bzBvvqFU3duDf)zBo7UX+@e4b=&ENls>QDFZk(lM{`gnR(cRLDew4@J}pFPAtw$%uCEkN`%$G$Qc!C6sSJU zOfG@cvLJ`#=cJUB7G;A&sW`E;D6u%B1f2eoq16eJBazFQlElo4(!{*1%)E4{(F`C@ zSvUNn#!-$}h@H&&*5AVJObb zOJT^&L-BVqLn$boff^b4rFkWpdFe&@DX^-Ep(-;kgCQj|kpWy0WoMM8B$g+F*%^s> znQ56t`5Bpc>6IY)L~v6sodIM*VqQr`B12MUN@g;+5CQwYA|*3DvxEUuTr+@@9>^&f znMH}|pqjlnGcO}CCy^mBB`24mqPVnzAw4G%RIG#YNO1|MjRYz>zzxTANTHHnoS2@< zkY1XXl?YM_YH<`~}lxKs=l1xak0m*a>ux4I*Y96RE zMs5&*imi;qEJ#{`MGI1y1#(aJJQGO|kxK`p+b zOmJCNoSFk}r-I@t5mXMQmSkk+7i1=b`UwRYsky01pn@eaJ=NCGP|tt?%rMe3gfI*c zB2Xz~n24SsBwawmGczx}v?#YUJ0laU6J!Fok}U-#ywns>ss#siF+3wBLKPY?X8C0jCDOA85N}K5! zGbERnfE62>=ov7S<|P&vXQt<+rhvsvp-zG6Gu1N!Wvt{PP}K`oVFFSC>NJ4t2bn;? zx2X)-8Q@wCmUqxf;*!+lj66^!!~iNg8PZFON*NHfEI6ez6eN}=gK}OeNE#B>NPU%@ z{B)51{Gyc9qST7yRB$UAWGkrcn3{Hua9#m5JweqW z11N()`=X%UNl6B{8OczPkypWxn3q@rZZKwKrWWO==TsJCfNGo6yyTqx;?$JHoPvx* za2Cu=E@sF>YU1XB`lKa^dFjQ844|HIUN*SX46bGq^HP$*%_4>ZP(A<`fGMfTnYrMW zK~gHH`GL*fp!Annlu=p&3c-v-P=grMvq=IMTHu(2)_U2X-b__uUJ^rQUQ$M4W_EEY zI0J*aD<#lAF;e+gQIHC9ZFXW_QYom*1nNG%S=YfD4=2q-C!?&xGNfXn`j(mYTbD=`mTVWTDwZ~+Bs>w)`jkcuQTFC(=mvm_N10LhgFMc~FA zXs9A5F`XedH6@J!G#bH>nU?};pn&^*AYr8bKye1RbCZ_>YPBbpK-+c23WN^wyM12mC>Dx1ngh{Is{7t)n2C`v6(&4V;s zK^`dvCCsG6;>=`legriX@MYf=22gha)YQlTmo^N=8Hr_(3L9SdASI#9JkU5&N+v^6 zMs_g+a=HfP!8~yO0_C{U5(Y$f0_+fo_fu0+KoX#&4lM=~i;^=EVf`mi>kB??!vJb@ zGr$^apuROIFc{F|B{L6UQ%YuDdQxIZF#{+h5Mk4SVMXd zIJtq;fb&!mXpDj(xu6JS9JCz7Y^)Vm=H!46LmERqsPCARUy#oLADseM-bkKm|r#X>kU~YpKM52&45<~w zr3?nh2vlYsXmlqhCl%V!2e}k9L{9Sp9Jmb)>WQT?z}r`_q5{;L0F7pXhvZ<7 ztOxCEAh|BN65LYDNQ7Al3-v^Xf;0w5nZbZ9bdbydxtk$3rxMhafaJH-g2dz!h~{F3 z+(g*eQDz>f3z*9Q?!*?CmXze@fg0H5peA%4sN)HXG?*hmbx%11B0&}BSAxO>TQdx- z1(fSE7>d*L${D~zV9D49E|3Nl!8r_^S>SU5kU{_&z*xE{=?u^|UP)qRS!QYpc%}oC zppe^Th=c%k7NlK(*VSnZNJVXCUP@^}PJSggA;UVZFq4uPQWA?Zz^(udDpqDDW~b(* z7nCL@XOyO9fIH`)Vh=h=k&>AR>7gX%fO><)40)i2IeZQST{H=ium8BMe zM|2_eJEQ{-nj$JHO3h2IgvDuMS#b$NesMZzED&eFz&r(Np+M6(xY$LMbH({-B`NtO zpr$rx;ttd^Doag4t9e1afl^Sa1`TwA#uiGmiWoqZ55zHq@>vo?dTADDYA6$2ID(=- zGY`}INWqj`itJg?Fd2BdAqmnDODw8nfQ}x6swh~mIlm+$wTJ;sBF%IZSLWn1R26`# zqSW+MaD57zwF9?|p#$k)Es!FP0WvO@m!Ag;Cs;?UB(o$Z6*No+9}R)^;9%qQ<)EQ# zSZ5$PrxY|wmQ<9Qm~D$}PG%m&fSkhXfJ93Y(~}bO z$`cu2g$6@DxQK()IH|d*D7GXQG30@&#AHzEpITg=k(vi`Z*F2i0k|UrZ|q=oBW70) z93)`-l0fY+hP-@m>PQ4lJSFF+q!#37=9Pd_1fpjL&sS;rMLDVIiOH3q_F^e$6caQ` z02;RkrD$-x=Yc0)KyEF~fy60j+#Wn?fZXL_NCojgIWe)gII%1dR2*QI7a;l4jLZ~< z5_sPoZ88UGx&>6MpiDL97gd7l>>N-E0as~A$uJ3QENE5}9BhbO11?iC62V~uaw19} z4U}AwNA1%YKz(@7$YNePBx>O43DoC=XWop&oHR(m4(dhZrI(g~0ubC?EM@>rx`K#I zP@qEx;z440pwbdt%)s(`8bf|*dJ(ua0!sAY_7^Cx!e-wPu?kCq@T69f2pX2h9EHqH z%*bNMO@t1>f}#x^)(oJ$1)D}GNz5r_0F{)`aZgY@fx5x4oSy=UOVGqO$j^|*J4VPQ zF@SVID;dy`Bhqj(I0n#@eF^s5kW*H|0Gq4IOG+$Z0JSk0KrK@6_%`w=O;KuABDlQ* zYQ2?~AVofCh?pTGH!qz5c?1G9GLcl2S`KcWBc?QA(^R0G3-KJ1Ntt=Dftcj1Y)AN0K2XfV**^0v6(ahU`Sxh($q8Vr6Dt zdU9e>N-+bdPl?^K9PGl-ffZ2Y7D0Fu6y2HmB@Bsqm5|y5 z?gECQth{uFa!`>Ds&>I6UueZPVr4;MQEDPYKh&mtusICK&16V-IU_f(fB_8#Fdvl9>eRccT<+Neme|rR5AInMu&0mdZ?sZcyEk zkG7lvv^JnLrvyF#f~d4I^D;8iGZ66vZ{rp-fchk$aS(7q!fgU_h@tl`ATbV(FQhaK z3dgkk97yK@RGQ}Jr9eqGEf{QC6;IArGu)j;(U~~0jcSg1tpn@d8j=uOi@sRMjFKh z)mRMBqPrwLC!GP-NdUVL7KjipfEpk0G4I5pN<_?qaww=s0Hp_{Q~=6Yspa5g5AL_Y zj6*3`%di(`Ic2EUVW@I?P%E<7am6729J0rt?c1DH`9E=S2IT#rnI2jr0IT;xi za4|CM=VD~oz|F|;pPP{(fQONxo`;daftQgXo{y0sK!}l{UWk#QL70)@zc3@i0})1s zdQnD(3!ri!(9=NH8+YmtbT_kYr?-FUiP|AkE0|Uz(BOfD9wUe;G!G z4YG_3_vIKF666^f*2^<81gJ7H^y@P+B$zNV{C8$#XmDd>_@B_f!9I_XVL=`v z!+#K+&&Y5;pOK-VmyzN9dPW9@&5R8HcQZ0<*u%*1{~RO3h4YLI|Iafr1YBZd*nf$U zq2V$k!~e^S3>$7SGW@^C$S~mnBg6j(j0^z}85#N?F)}bbW@I@3gpq;aDI>%E=Zp*w zUNAEJf5FI*@RE@s{|zIa|NrxWBZ?7B3NZZt zF92pi_@KL3`4N0ZK8E*<$m;nR>KPFH0AXf^^~%f$^$g4m{=!K7A50ALzaYzBLFR8b z$HegdHG;3OgNb4NIRxKfI}?Na4g{ZJITM5Zb|gLn6T|&wNc`W74F7+FOlDvJkp;gP z8UFtQu^@bgUyKa-$o!v-4F7*3$^T$v`2PdJZ}`s0@c%o4&+wg*p&p6f@Qsn-|2Kqu zz&A#QdL%x>H%113Wd3JHhW}p?>KQ&UGW`F9#Q(_1@c$!%zu*HS!~YKmzQG4ZhWSW* zh7XJk`pEouj12$ZA=ERxWn}ONr4I&({|nwQGVFhYB>$3;A^s&2{{!{%h1cnP~VG?XXs{R_}_!X z?_gy3--X04U}X5;j^IDYXJq)FkKi-pGcwFa;ydIqGR)6IlFw#j=+8#*FJv(?{Le!0 z3$hp)&Li<1vKSfik@yT5j12b3d>2NBdN+iA0~1DucoPJl!GMuLABjIfpON9eK0>}h zg^|Hu6~SjvVPvRRLEDl7#a4I z7#Y?h@foBT8T^s>3nUpC{!1eCGe|Nr#3S(+NH8+|mq3!2U}W$|=8H2j_=_Xt8^jnH z&Wj=V31W;4^+%Muz($2tEU--bLmMGcwc*Bjh&-F*5uY zLhu`e7#Y?h@fm~|8T^s>4+I$*{tF`12M97U)Fbg31Q{9pk@yz`7#aQxAk;SqFfyD+ z;xh;^GSnmSAMi6W{O3og-@wnva36_Zz|Y9A9*J+j&&ZIE#Ao1VWY9{1k>NiNg3rLi$l#B}Z{TKRSkH}+PvB-`s7K;E za5FN*Bk>uy85!)6_y@Qc8UAx2^fPcVGQ=bC7jQB%{O3f-D{wM0*dy^7I2jq_k@ycd z7#aR^Ak;T-Ffy!1;yZ9KGQ=bC88{dj?2-5l?2HWi*%A5~*cch=k@y9yj12o(5%LDC zj12imdyh{im>C)FGb70}GcwFa;s-D@GSnmS4VW1j z{E_$!%!~~BNc;y(j12#o5aumlVr00F#BX3?WSEb{zre`I@ShQ(egY#S!+9jW10y3t zKN6pTk&(e3iQmA$$nYQBvVqj+AhI5b{{ecI1gHT9w&gzq!~6dr9!MnvL%}}=hX4N% z{D6N94EacWgMSPR{z!arfU|^_6;%~Ul!0`V%lKdJ5hV@AN z1FIPr{;x*J7p!Jr*pI|FSk1tYkHlwK&A_0K#DB1gf#Lrug#LzA3=H>?_z9~R80wMu z467Iz;*t0dRx&XBUx}oDB?H5KB!0q528MbhzQIZchIk}C!%7AQeI)*a6$}jjS0I_U zf`Q>a65nA314BI$-(Up;gFOn3V_^8d3?c8Z zjDcZ35}#oy1A{#h|H2XmhW|?t>L)B=U^tJ&XIQ|%(2vabV_^6{AEEw$F9XAWUj(1Q zgn?l{GT)ei;XkM&32P4-F);i$La6^>$iVR55WzoS$iVO(iNC;*fnh%qe}W+c!+a#Z zfguA!KN6q8kbyxTiNC;rf#JUa!h8n<28Q`adXG;iIt&c)$b4-EhX2|K^$c1J4F9zd{02=1hX0xfK7%F$Lp>7zgE|Ale|3cX z0d)q3_egvObq0q0$b2;hhW}~^^$S!P82+mw_zkKI4D*rr45|za^+@~#6$Xa?DhTxs zDhv$qNPGqr1_pa%zA^*De`SPv1|t7zf(!%0e;I`O12PN@=aKjmWEdFsBk>z#7#RAI_zW@(4E{*`1JVo( z|D_S;HApis>__4=NHZ|hBk?y#F);j>La0}eVqjR0#AlFVV30@RKagZ#_%Df2-yq4r za36^uAj!Z`kHlw?WMJ?|;%|^(VE8YA(9a;jz_1>P-yqJw@LwDupCHb_P>;lS5NBYB zN8&4pGcedA@fpM!803-o3&a>0{)-{ZYY<~#n2*F~5Mf}bN8&FKW?=X)jHF(efnh!p zpFxO$p&pqp$iVPl5TSm700RSbI0jP73otOuhYZg^`1}kE{~^OOV15H10|Rt82h0Zz z&D2ANXTbahUIvE$ya@9dco`V#k@yWf3=IEykmPw780wMu4crV2|GAOmxfvMhk@yW< z3=IFdkmR`-80wMu4V(-N|2dK5IT;x0k@yQZ7#RL@Amj@;7#QXw@e?>081j+$4jc>& z@ko3I4h9B$B>n+*28RFa2=f})85s5>@dMZy80wMu4D1XH{>Xeb28RD^2>laS85sVv zBKQWZ3=I89d0`eAh8Bq_1OO$Xv(3(7cX;p>-Vt!~As&3=7vWFzjB(z_5261H<)o3=B8d zF)(~y$H4G)9RmaZdIko;^$ZN!>lqky*E2A)O1H;Gl3=G^G7#MgrFfgcZU|`VPz`)?V zfq}tw0|P_+1_p-24Gav`8yFaBH!v_v-@w2ya{~jz<_!!CTQ@K;oZrB}aB%|z!|M$U z3~x6uFtBfAVBp-yz@WU5fkAa61B3lW1_sBC3=Gj585m+WGBA{HWMHV=$iOgpBLlVqjRiiGktxCI*I+n-~}#Z(?A0x`~0| z|0V_o#?1^2(wi9=WH&P~m~Uoau-weR5WJazA#^hXL;hw4hQiGZ4BeX<7%z;JsD1H;`d3=H45Ffjbw z!oVQBm4QKYD+7c6Rt5&ctqcs_TNxO9w=yuKZ)IS}+{(bvyp@5Wbt?nI{H+WO3%4>b z?B2@2uy-p1!}YBU3^%tjFnr$1!0>e|0|Wmy1_r@x3=G=a7#MW7F)+AqV_@*y#=wxg zje#L`8v{fAHU@^qZ43;vw=pox-NwMMeH#PA&TR|~m$xx6T;0aN@O~Qu!^dq54BXop z7+K8-Z?`iru|9SjW5cQ7!#+`+)Wypw@}bteOZ z{7wc2#hnZc);k#(Y!t$L;p?&hKV~F7*_9OU|748f#LX0 z28NS685kb#WMFu@lY!y?P6h_XT?`D;yBHW`cQG)S?_yxE+{M5Uyo-S$bQc3d{w@ZF z!d(mu-MbhVdUr7}EZ@bzuyPjz!{J>F3`ch{Fx=n8!0>Pv1HDW4+F#eJq!#B_b@Q*-owDKcMk)@^*sy>H}^0weBQ&r@O2LZ1OHwI2En}y4BC4c z7vI`fgyD-14I2@28PDH3=FgPGBC{D%fPUGF9XBQy$lSO_cAbC z-OIr6elG*V$Gr>;-1`_9c=s_dsPAK7(A>ws;JlB4!F3-4L;OAlhQxgg4AuJ>7;5)1 zFihXaz%X+k1Hk0R{%e0}Kq-2N)P^4=^x_GBB7QWMHs7 z$iNVMkbxoeAOl1GK?a7xgA5Ga2N@W84>B+;Kghta@*o4l;e!keM-MVE+&{>`@bDl5 z!|#I(41W(YFo+*wV30h-z+ilcfx+|;1B3q|28O^x3=G+a7#MO7F)*|rVqoYz#K5rl z5Cg-~LktZ24>2$tJjB3o`w#=e-9rov-w!b`{5-_KAbgmCLG&;KgZ^O#2E)S)4Bm$s z7<>;iFr*)5V8}eoz|ee{fuZ#<1H=5o3=9hoGcfEv%)qesFayK&!wd{J4>K@)KFq-I z^)Lei{}BcT!6OU|+D8}|bdNAFxF2C)@I1o6kbH!JA@v9YL;Vp3hQ=cd46~0gFw8x| zz_9%Y1H;ZE3=Ef#Ffd#_!ocwU2m`~%BMc1OM;RD+k1{Z*A7x1HyI%o zY&^!maQYYn!`WjD49|}-FuXj*z`%T*fr0fn1B3i=1_s6B3=G!C85nGjGcbf7XJCjt z&cIN7oPnYAI0HlfaR!Eo#~Bz_A7@}#dz^vc_;Ch?lgAkt9v^35czT?H;s0?42F4Q% z4ALhU7-UZ{FqofUV6Z&Fzz}?bfg$t+14I4^28O~D3=G{T7#Mm_Ffc4X!N9Qc1Ovn2 z6ATPTPcSgtKf%E8@B{?Bm=|UlMD>sPckt4JjuWye2RfV z^b`Yw{wW3q!&3|l-lrHCd`~ejq@QA7$UMcs(0q!4q4g94!~9bW3=2;&Fzi0Xz_9le z1H<)G3=B6e<#?uT8vrjWH%stJ(u>CXx!_LzT43|$cFkC&&!0`Sw1H;GD3=G_77#MiZFfgc} zVPMca!@%HthJnHL3_83u;LGYkyXXBZf2&oD4dKf}N<^9%#S<}(ZoThA~soIk_B zaPbTS!|O8)3~$dcFtDFxVBkE z4A$ou7;MimFod6DV2C`&z)*aSfuZyq14I8g28M~}7#LQcV_;Z&j)CF$IR=K4=NK3s zpJQNndX9nN|2YN*#`6pe(&rf%WY04&n4f20usqMe5PY72A@n>0L;iUNhQjj<4Bh7$ z7<$h$Ff2dMz_9W>1H<9-3=BulGcepg&%p5TJOjh;^9&4s&oeNHUtnO6yuiR3okM-?7qmru=gSZ!}W^{3^y+_Fnqqq!0`1V0|Wmh1_r@P3=GnGz~FqDfx-1M14H~}28P7T3=Gwm85n9WGcZiQ%)l`7 zG6Tcr%M1)#FEcQlzs$gJ@iGI$>&pxbZ!a@2uwP+d;Jm`XpnQdaLG=m)gZ&i-2FEK5 z4AEB@7-Fw5FqB_mV5q#pz%cm=1H;rS3=He9FfeSq!oYC)3IoI0D+~j!AY_BpfgkNP~h`h?cP<)kvq4X*PL;qCkJIp*BKacuQM>TUuR(Gyw1R|7&;yc>VGh- zVPF7ZnKcXyAZ)RQfdPa=)-W)DaKRb|1`zI9!@vN-E7mYDfbfwu3=AOrU=0HU2>)5b zzyQJ$YZ(|o*kmmO0|*DKWnci|oV5%LAl$K*fdPbWS_TFX{;`&U z0fa@?F))Cz!8!&85cXNezyQJ->lhe7xMdv!0|+lz$G`x>d)6^9fbflV3=AOrWgP

LdIkm% z=Gnl&0Kys@7#KjnT5Zm z1_lt8+04KI!WNqu7(h5=GXnz%7i?x=0O6j^3=AN=Vlx8+2p`$ZzyQJzHZw4Q@Sn{L z3?MAAg@FNtO|~#FfN;PT1_lt$*}}j8!W~-}7(jT*76t|oKCp#>0fg^tVPF8^A6pn0 zKv-le0|N*fY-L~oVV|uG3?Q7bm4N|-TedPVfbfE?3=AN=XDb5(2;bPszyQKuwlXk) zu)sD31`yWS#=ro=9@`igKsaR^0|N**Y-3;m;W^tF7(jT(HU>3=ANAVLJl@2*26RzyQJ= zI~W*1SY-zT0|-0pU|;~@m>moZAY8G7fdPc4>|kI3;SD<&7(n>U4h9AgezAjr0fbq0 zGBAL!!cGPT5VqOLzyQJ#I~f>2xMU{-0|-yp$-n@@Yj!d)fbfZ(3=AOrWG4dy2s7+r zU;ts6T?`B$Y_W@h0fa+#F))B|!7c^{5boKD!W#P+7(m!%9|HpjC+uTj0O6W_3=AMVV;=(p2yfZPzyQJ*_AxMk@SA-M3?R(0 zpMe2{RrWJ5fUv`U1_lt0+0VcL!WH`&7(jT+eg*~*-mss60ff)&XJ7!~7yB6)K$ztK z0|N*v9AIDoVVeUC3?LkFfPn#oOAatFfbfI^3=AN=<^Tf&2%k8>zyQKe4lpo)FvCFx z1`w7x$iM)?76%y^Kse+e0|N*b9Asbs;huvG3?RJXAOiykA34at0KyLrGBAMfpMwkx zAS`i+fdPa~4lyu*aKIr31`y6U#J~W;9fuegKzPX^1_ls5aEO5cgzp?;U;yDChZq<@ zSmZDR0|*-&W?%qepTi6cAe?cSfdPbD4l^)-@Pfk(3?RJcFarY!-#E;`0K#7mGcbU# zz!3%p5Y{=uzyQJ?M;I7DIOPZf0|+-9VPF8^IY$^6KzPRy1_ltma)f~agg+c%U;tsB zqYMlntZ|fq0fb$SGBAK}!chhW5Ux4OzyQKCjxsQS@Rp+t3?O{rC<6lszd6dl0Ky!{ z7#KiU0fbF1Fff2{zy$^d5YD;4zyQJ>7Z?~oc*z9@1`s}Qfq?;p?_6MD0O21O7#KiU z0KzjaGcbVgmdgwbAbjC60|N-Zxy---!W>r^ z7(iI%3IhWOJ6vI40O6P`3=AM#afN{agr{6#U;yC_R~Q&T_{Dgy%uPq@m!0K#joGBAMfiK`3@ApGPi0|N*%Tw`DW zVVP?T3?OWAje!A#L#{C}fN;Sz1_luBxyHZ%!Yi&ZFo5upYYYq^{NNe`0|@`Q#=ro= z64x0RK-lCu0|N*LTxVba;hgIX3?STboq+*_LGvG=X_FO#komRK*BKaoL;EElIS>ZP zCkQeyEEi;80Ie%IhDDx1kbxmykbwcTZleaeE(4?&gqJcfFfemMur((G0|?u3GB7xB zGB9{@GBEgXGBEgYGBEgaGB7l8GB7lAGBE7tWMDYJ$-r=&lY!v`Cj-N2P6mcEATzia z7?`;j80@$h7#z457@DDY9~T3|0WJoHlTdt`i-F+`7Xt$mHv8sUIqqc zUIqqxUIqpSUIqp?UIqpaUIqp)UIqpqUIvCHUIvC{UIvB>ybKH%c^MdP@G>ym<7Hs@ z#LK|&nU{gVm=A(C^D!`hupK`GgFQb3Lp>B53NSE$u(bdKgN*3LcNqo-5LRBnz@V~%fk7RL8&)tdG_GJ^*s_9w;qVFu zhM<)U48bcI7@DDY%Sr}@tt%NAcCBP!*u9d0Vc$vyh6A9rMXMMX3|28P7_VYrFj>XG z;0wjCS1~Yv@ViwE4DVMlFnopL$Ez6_o~&kIc($5>;rVI?hL@`u7+$SrV0Z(?p!Jm? z%p}0b0K!cIj0_;WL4c8AlK>;bb^%6)9RiFDI)V`FD#*y-CdkOp1jU;L85y<;GBWHJ zWMnuX$jERGigkn-8T5o08H|J&8H|M(8BC%0fe<6ZBOyixCSgVfW?@DKdnk4kW@K;? zW@K;|W@PXXW@PXdW@PXcW@JbbW@JbfW@IoGVPr5DVPtR+VPtR=VPtTH;*BDV44Xt4 z8FoVPZV^U?JtB+@`=I!s2qOasZxCf<*eJ@#utSuQVYetF!#*fB5MyL85@Ter7Gq?v z5o2VqgW@$}j0_;WPK=RZy%;0IHYipTXJi0j9SKGTJqbnz3n(^}WMnXvWMnXxWMr_A zWMr^~Vh2e^1`u|VWMly0i;|2Cmn9h)?np8++?QlzcmlW!$TBiagW|7pj11r8 z7#W!5A=pHok-=1+k-<)$k-=V`k--s)1M?Xf+VdG1KIAhpe9UKLNV^EZxfdB3Kp0eB zqT?LUJT`PbyqSf8p_7GyVInI7!(LVfhW$`{kd=Yq5Gw=25mp9F!(}o zASVMuI41)`5+?&gGA9E=BNXr9WMBZ{eVhyoAbgOMf#C=z1H)M;zRtFB0|N-3;bCAn%frBMm4|`h8V>`* zBOV5Z#~{0T85kIO85pd285nGM85r!K*pZik!G)KB!550dc^Mc$IEj~mA(@wfp%IEt z@iH)g@OfSa1`xi)%fN7jmx19L6yN7%U;tr5J_ZI5HsNDnu;OE2aOY!S@Z)1(*a*d2 z_!t=W@G&r);A3Do$H%}R!Oy@T$1{)}Ll4f84;cRIJhGJ<3h6ZT{ zhDK=yhDFj03`?aM7*83u+IG7JoFq4 zDZ{`3TUW@Vz`y{)pmmHN6c`xZ>o72U1g#N;t}BJDKh-i|V9+;UV3=vZz%a{zfgyhx z14Gd=28NPl3=Fl)7#QY3*9CuA#=!7#83O~;3J7Lf!N35*+$$IuKv;DJ1B2QM1_m7{ zKC*&=;phqm2GF|ZkI=Qvp!LmaD;XGcS28fTuVi2dT*<)Du#$nHX(a>0W+>jal7V68 zN(P2KD;XH}u4G_%3dNeM7#Q?cF)$deVqh>@#lT>?ih;pw6$67a6#J}VU;yEoRSXOu zykQjs0|;+g#lWy-6$8WeRSXO}RxvQ_TgAYze-#76K`4H+ih<$nDh7scQ2cZ?0|N-Z zSk1ry!f#hIFo3Y!Zw3YshOLW-t)HLwpMhcie+GuXjErCm+BX2gWz38WRm_YGj9iQi z%v_8NtXzx?Y+Q^CJY0+n{9KF-7F>)BR$Pn>_E7wki;>|O7bAlTFC&9GFC)WhK1PN$ ze2ff#q5DqU_!$`j_!$|R_!${m`574)1t8c$fRVvXfRUj9ii-sp8A_mgVHyP(88!L;&gZ9@j2{JOM3o&_Fe3v9hYK?@fN+{HBSVfbBSV2OBSVQWBZGwq zBZIvNBZHF&BZG?wBZC_h$B8g9fba$pMg|bxEW*gJLxhoG7ZmRmVPpW|{UVGE2SgYd z4v8=_92Q|@ST72}n?xBIwu&+`>=9*T*elA&uwRss;eaS3!yQpZhP$GS48~%N3|3-{ z47N~gFUH8=AjZhB8j9D7F*1Pg1~Ep4tzwJ}+o4!ioRL9ZoRL9EoRL9QoRL9YoRL9W zoRL9af|0>of|0>ef|0>Wf|0>M5`wKI85wLO85!)L*jbX10feteGBRA3WMsG{$;fb9 zl9Ay76f;UOGH^*TG8juSGFV74GFVG7GT2EmGPpx=pcErRm=q&Jq!c4Vv=k#lmlPwz zG$}@g8B&Z4Go=_A3}hG?%w!lDEMyoNY-Jc3?4fv)3?svG8AgUxpgq$vj0~G(7#TLp zFfweFVPx1Q!^mJL%gA6R%gA5_#Wu2x47Re24EC~&46d?_4DL`oL6(tWqAVlBR4AS< z%g6x2pXC@CzQ{2$Fvv49Fv>GBn8`CTSjjUoI6$$JJR<`LJD4ysfUvs>BSWYOBg2O* zMusn0j0^_Zj0|Skj12zy5Zs^7$S^6Nk>Lpx&)vhwFb}j(^E@Mi?s-NAgY%3GZs!>p zQZGVq`b9>D%!`Z+c^4TOiY_uTR9|FdXu8PA(0Y-Pq5C2u!>Wsn3~MhkGB{mgWN-oP zAHBuMV0MdL(VNmhEgbQxy8r;!n1ENGR(il$guDhbU*6@Mh3PAj0_wP7#SoU zFfvF#U}R8yz{sHdfRRDv0V9Lj14afd=w4aSep!Quj0|QE85!0+g5Wog7#ZF_Vq|#p zgpuL>6Gny$FBloFyg0kj;K z8`8`IEgxn8El;m!U|;}k(^$*EzyQKBYzzz_%qPLX0K(h~3=AO5r@+9#ufV{dp}@eP zr@+9Fpa5C#4%%}B!l3<0zyC8ZfcAabn=mqf_RlWf!^lv4k&&SayziEeL7ssRb$>cP zWC1g%djMLh48kxsBh%nz&}r@V z01^WOLpd`8LlrXvLp?JCLklwlLl-jxLk|@9F*7hMWM*Jk%nVs4Y{<&M5XQ>D5Xs8G z(8bEY&85mx%GBCVnWnlOMT35`*z`zUj6R5x9%g(^Ck)447w9fe# zw66l{j~H+;FxYW0Fo4!agZd?L91IK~3|c>(#lgS;T36l2!N33u7f` zGBDibWMH@t?VmhD>Yp%kF)*-lF)(m(F);9RF)#>lF)#>oF)(OwF)(OxF)$c#F)$c$ zF)$c&F))~NF))~MF)&zgF)&y{`!t}w4QPA}U%w`ji-94Ai-92yiqp6l7|OU97(o3S z(3n~)7Xw2t7Xw2-7X!mYE(V6lTnr2=xEL5#aWOD#;9_9d#Kpj{nTvs8D;ER9PH0~U z)(--W!GXr#Kz*SLTnr2#`~cb?dd9`T@R5sw;U`kR2sA#&%FV#Q!_C0J&&|Lfz|FuQ z%+0`{!Og&+#m&HAz|Fv5#Ld89%+0`H%FV!F3GG9H`c25=dA{5X46y!F3^xNqEH?u~ zJhUH`#?8P`4(&@db2Bisax*Y=aWgRVaWgPX;AUW$#Ld7km79TKCN~4aEN%vdIZ!;0 zn}K0IHv_|BZU%-W+zbpWxEUB$aWgQi<7Qyk3GI`ij~jyeWf!;^7(f`*Hv{2k+zbrA zpoIqy4+8@q4+Db$4+Db`4+Db+4+Dc14+DcGw9f__XT;TCi{N2kh~i;jh=t+=X#XvZ zhk+rVhk>D-hk>Dohk>Dwhk;=N4+Fy_9tMULJPZu0co-Nq^Dr=MNW0qXC8#yMMg85pMVGBC{IWnkFI%fPUimw{n7F9X9~C_cc;z;F!O zCxrD2k^6(7@ljBJ@EI=y!+YpB=@(ER6xuJe=VM@q=3`)J+?PtRH!SkAdMP9|OZ3J_d&SpkkMw zfx(@hfx(lXfgy*VfdSNyMD8!{<7Z$v!_UBQj-P?y7N`IgU|={Zz`$@Eiq8r#Fo5s{ z0R{#SAqEC7AqECtAqIv3AqIvpAqIvBD2@_hV2BlBU`P;RVCWEHVCWKJVCWTMV3;7p zz_3Axfnk#n1H)D!28JC%3=I2(7#I#f@gX4whND6Z3@3yb7_JF1Fx(JgU=RTHFNGNx zM1>g`B!n3lqJ$Y3K>f}dVFrcL=yg7zs%GBC(VGBAMpsjzWqP`}hc zl7Rt)T_hP8awQoU3M3gAN+cN=8YCGQR!cH4Y>;GNI4Q}%a6yuR;g%!=!#znzA65>j z-wNxWc1kfYOpsz=m?_1;ut17|VXYJc19E@WN1A~lK$?M}P8!lL1&u%dk%sgutz{S( zJY^Udd}SCII%F6aK>Npb$uKbNm0@5w4()gT0__)*Wnd7MXJC+!XJC+(XJAl}XJBxZ zXJGJt1G9Fu2YxGc}Wa7~_p;kG;j!(Dj>hWGLe44>o~7{16eFnp6|VE6}WpeQgfq$n^j zq$w~k6e=(2Sn}Ol84gzfT?PhqDAv_wU;tsz{>yY-28MiH z28IG?pLv=t1H%Gc28Lz23=AuD85q{-GB9k=WnkE*%fPThmw{oQE(5~>T?U3@x(o~_ zbQu`V=`t`}&}Cq_rpv%^LzjW!o-P9esNWr{$G`yEA39Tyfnl~D1H)&~zEFJzhO7Dv z44{3bzd`#*4IukX9Ss;5ra}AXp#7<=hLC-$hK39beTEDSpna~74H+0f`(x#d7#I|c z7#Mn%Fff4j=N?xh9vM;~n9|J?#KL&{{{67Q3ss9WN=l?S>T>8(zaQ#06!>#`e40rxBFg*Cr!0_xp1H+5| z3=Hr7Gcf%8&%nUVz{tSMz{sG+z{sG%z{p_5z{p_3z{p_Bz{p_Fz{udsz{n85z{n8G zz{mhPSKt=|XoDCd0}~@713M!lgE1o`gE=E3Lmwj}1L&NBIgE@93!oTujsa*a19ZN@ z941Bv(76W}K<9ZeF*5vSVq^fFlc3DZ$e_#2$l%4y$N)N50W{9hz|6=n7kcKxVP-~# z6U>YZS3&0~urM;rWnpAkz{1F|l7*3B0}CU=Wfn$;8!U_rzgZX=K<7NDvobP(&VNW| zWdxrAQN_y0P{Yc|(8bEg(8J2eFo~6sVG1iF!&FvAhUu(~3=3Hq85XlLGHhgJWZ2Bg z$gq=@kzqG0Bf}ohc@b=k3})<%3=Zs!4593d3<>Ov4C(BQ450HUTG<&H+CgWKu`@Dk zVrOL71v-y{gOP!igOPy)in%x#8B94C8O%8t87w#$8El{!bhbq(2O~o`2P4Bg4n~IM z(DN`r=VW~1U}X5h!N~BHgOTAk2P17GBWJpWMnwc$;fbt z6LVZhn2V7?l#7u;oQsh`l8ceS6m6WygNuL=bo(OgN#qD zW3@c?B89?Vo{eX^F3CJ@t2tmiIK=Y!J@{A0i zbEiNUbRN}5=$TYALFZJdFf!z+FftUVFfx>=FfxG7w{lixWB{Fe^$B$Dl>ua2i@}AF z!3}h7Rt6)3MHV9i=$x&%EJlWeEJlXREJlXBEJlWXS&R$^vKSdoW-&5=&gpua1sML&&co(bdK2uMh2ygj0{Fl9I%m*A!s8bLnsudY-D6e-^j=SIydb%=-jkD zj0{|ta8jUO?fjpGHJXJj}GI;ZUd zBg0qF`E3^&8PqN^GH708WOxM{XS&45;ChLX0dyYR^URDi|33Cub(qA zynW8d@a{Py!-waL4F5pq3cg@uIP!v#;W%{slHnyIgZE2DhJcrh43RGx8RDSl6BfQ< zWZ3eCk%93oBZDpIJi~X449xEs8Cc&jGRVJUWKev^$e{F&kwFED)!#8PfUxE}Mh2sI zj0`647#YmpF)~;}vGqGf1`u|7$H)M}?(Y~GK-lvgBLfI~zhh(oVc&O*4F2yJ83Nxi zG6cP2WC(%c@OO+1ARPIQkpYCG-!U?PaO^uq1`v*a$H)M}iSHO0lHM^gq(E`{J4S}A zcZ>`tAj*(&ZJ4S|u?-&^t zzhh)r`i_xdb1uL*OSyhJ;Uy45^^=DL*qZT>r+%aOWE%!<%o63?IHRGW-FZYx$j#q3k;& zL-lt?hMV6R86JFRWO)6Zk>LXrGyGs=;QqnLAn=2c!Tkp#L%*-LhepSj!RsSO$CnuxM#q;K7>4@z@+ateqLDJbe3p-a zVRU?%fnjufnSo(+e0g+yd31bvbbNVqe0g+y8GN2KmByDr=W(kKlJRBG8pqM`Rz{TF(Ar}VUPq_#VbHp7IV!C~2A%i3g@b`%8wUf!aSjHC z%Nz{geet8~kQqkTA=6L#ck9ouy82F(3 zWI^{5P`VBov`OV-n2U@*{OV2IOU zU`WszxOK`wG+w9t2ek2Q0paz^`z333wAGclM9vGLa>Lwx*o@96mJkUIw= z40?{RP=5r&`2k6|0 zkuokj8+wKW=q!oBaE`?2xGeR~eLx?7#de+pspGDo^Wl-tb2ux=$Z$cBkpb7a4nuYP zHBy9;0d%$l2!qadhzFhLK*9MAvx9LQ^>IEU1M+zb zpSl99M`fafD4gTO~dhMbR#3?{O6)i)!%s#A?w^bdygwNk3V$*(6#ryoD1(ltF8ayHu=FP*!>XT*4C{U}GMvIO zzFG`j?+P1VZGx_Mo%#!Mp20N|$4meJ2c2s$aOW6+)~aH|OGn2~QSN~nJ?DV-=NycV zpHg;yE@KV=vlKQ&}vz%_pQ&xnD6!I*(zbR3m|ffncQ zj*g=a%z3<{xa3e%j8*z|g@5xr?lekAa~Vil^`~FihuT zV3^6rz%ZYWfngz*d&)p}m964qU|7w^z_6B&fng^f1H*1U-1nD_u3H^lx5^;Rz(DEw z0igS_8Dtq4hV%IWpmnP!v>6yqX)`eV(`H~`&>1}ISpDd#7m61W7laXOK-d~2kj+FuFKC;pEtBefT?j=JXca5WP{pxly&k+EvUq!x8tXYbY zp-qaB0d%j}P+PCcpuot0@18K&I#pus2cy}D$MaDCaxyS5axpM4b1^WmaxpM)aWOFPb1^Uoa4|3lb1^Vza4|4waWOC$ za4|3#aWOC$b1^WOaxpNNaWODha4|4gaxpO2K(QSc1A`M61A{vk1A_+_1A{jg1A{LY z14AGbM{+SR#Beb%#6fWy7Xw2n7Xw2h7Xw2x7Xw2p7Xw2t7sKd&d~ODY`P>W)i@6yX zmQd+DRAwFq238*Y_h*s2FCR26+RVei&^kIk%J7Akfq{{afx(K8fx(`SfgzfYfuWI) zfuV_yfuRM8N5@AQ7&ZtoFl-WHVAv|ez_3GzfnlEz1H%C*J|x7za8!ta;e-$a!!;oW zh8sc*3Ey=)O zAj!aBEy=*(0L3nn3=FxF3=9R53=Acb3=9pD3=FF!85lN5GBBK!WMH@;$-r<+l7Zo# zBm;xA6a#~t6azz?6azzo6azzz6az!O6az!26a&KqDF%j_QVa|Wq!<|1N-;2OkYZpU zXI<(683u;qG7JnCWEdDm%DCuGZ3c$D+6)Y^@zG1#3=D6y85rIVvT;&R3dc$H3>g>< z4H+2v3>g?Ekg#6$6_NY?*DYsY*sz>|VLOTArGHm2FfgoSU)BR$Pn>_FRk%?p%xv0bGm>5nPN6 z30#Z}^SKxq4sbCtJmX?yc+JJg@QsU+fq|Qm!IYbk!IGPiA(WeuA%dHcp@^Hjb*uk* z7#R}y7#ZsL7#VPlk6sX9WOyOK$nZgck>RHRBLjmVBZG+`BZHYBBZIRbBg0_d*KZ@t z$lxN($lxx_$lxK&$lxu^$lxo?$PfU<;lhjzARH^q$dD{d+_)%cZ+`;?`})zxMJ2@< z8Dzy78MMV284Sc389?W&E|6ek_$0x|02&JgVQk}}bEFs<<_++;=wKP&WXNY^a3L_R z`GyYTnhcj28Nx0zG9+APWGKAM$iQ%gks;&?BSY8~Mus_87#ZeWVPu$pg^^(q6feEP z$gu1RBg4uoj0|h8Ffy#W!pN}m3M0dADBgR8k>T(aMuwwT7#UcvGBU7VWn|#G%E-Wb zm61W@DkFo~RYnGxtBeeCR~Z>BuQD=NUu9&lyUNJmaFvn4;YdrG@+IZ%b?~DwTjA#1%WMl~V$;goXlaZm}CnLjj==ddQ z3==ed`RwP=-1puwgvTcba$NHF2pgCD$;H6H$j!jO%+0{S%FV#Q!_C0J&&|Lfz|FuQ z%+0`{!Og&+#m&HAz|Fv5#Ld89%+0`H%FV!F$<4rE!_C0p!p*?o&dtE!!Og(n&CS5z z%gw+r6xL}Dr*TO}UIqqS``)d185nGN85mr685rDn85lfx85q2H85sO|85lx%85ojz z85q)d85rt$85joo{Ls@&cKmAi?U|>*TU{F(G zU~o`jVDM65U`SA5U?|pRU?|gOV3?}SzyMmui9TL=agdHzx==V?sY~W~<<-&g%F%uH z42%r642%r+42%rE42%o`42%r142%p742%rF7#JBC7#SIu7#SJZ85tRj85tSO85tS+ z7#SHRFfuZbv(D3inUTSZnUNuYnUP`i9w|l!NiIf)(eX+~hAtsShF&2?hJGPNhPgtF z4D*E;8CD80GHeiHWOyaS$Uy1-`Qb8NN%1<(L9%WV-?-uf=z2-?aYe=rj0_BW7#Xtm zFftVEVPvS;!^qIEhrIpfqvMH;4A|C3j*ce|?06!>XGVrgXzL=sQ811OS`R7rlaWE; zCnJOUPeujD^5fjS0uC!lHmsvgX}NRxtUB1gKgh8>@3avVKBb< zn2zfmN5>UM#}&1B7#J*h7#Jv7?^w^nz|hFUz(CJ+kK~Lm`tdR_ghO#W(l}!&F9Sp6 z=y)T;eZJ9iI%#=M=TKh{SuexDfV>_O+j!%jA#mS3uJOiS!)(0KX^@XMt|fAPMuyq97#Zf@ zVq{o&i;-ddEk*{6`^QK3G1F}Q-z>Cya;!cvGB|uuJS7* zL-kiihQ(hQ8J2!!WVnDfe)pNe@jD6VxLnH+9hXZQ;^S|dI2ah7jE=uCOypu1`Qqt22#e|B6%1X5_lLGl6e>y(s&pc z@_85-K>Lh`;<#JF=(rohNIR$T%jo`Nvi2Vjm+`i}XzTkr6&V;NC^9fmGTt_r&TAZ~ zakeuA*7eO@#=tOt83V)jWef}q%NZE@mNPI+SkAxz8+Y4CU|%x&xZCdm-j^J|nt>q& zxNxtf82VGRSr;_D0y8?G}j9J@X^?$y!#$G~9lkAWfR9|J?k zKL&=he+{}>pu|1mHW{9|A!`NzOe_K$(#&p!r+|4_{MpMhcDe+Gs_{}~vL|7T!0 z^`C*^{C@_9OaB=duK#CXxb>fb;m&^sh6n!{7@qy7%|7LkFb>DS$;cqhiTnJ#7G`8%6=r1M5oToI7iMG- z5N2c$7G`A75N2f15@uvD5N2dB5@uvD7G`8H6=r0x6lP?=wLTBDhZux$?IXrFZgx_X zk%2*sk-{6-!U?*e88W%E*8|Ugq?Tk-_yFBg1(rj+^0H zw>B8ptEr-mkJT|VFtji;Fmy39F!VriA2S2PLS_br#mo#0>Z}Y5hO7(>VXO=ck*o|1 z*v{tzoy`Zr_|E5JVPjxmqtZEjpnb3)yoiH=VGVS=>>mdM0|O@mLpdh{LnS8zLp>)0 zLn9{xLo+7>Ln|i(Lk}kdLq8`2!vszShRK`^3@bPp7*=sIFl^vtVAur3+c+5*c5*T> z?BQf!IKs(5(mf_4X&u{08%Ja0VPGJ%FV>icfx(o7b!_;?)0*hKj*W?oeX_{w*yuH$ z_KBBa^gKTy28IYIjuK*Eh!tXBNDyLR=n!IH=n`UJ=oMmMm>@*E{j%ueXdlEF7#PGE z7DaMMs)@TA8iJP z0Br__$U$~qpY;H(M^BljSFg~U>M90Uvkk+YPU}R+Y%gD&kz{JQf zhY4}-Gy^jugB&v>g90-ngEBKC18hHR12ZGTTxLdw`OJ(AhnX1}PB1evTxDitU|?Zn zn9IV*uz-b;VI>QB=kCRGFf!0{T&teId3yESj0_Asj0_%l&dF;KU}QKbz{o)8oV*4> zMh4J$6=g!EqNX_bv>J@s!c^LqxA1+V_Ex;ot{G zhVvg787_WcWVruq|q5vH~G5yTQVE&nrp$0mRGWjzj z!-CI@3`agQG93HN$Z+a2Bg2Ewj0_*3<0^Jv7#SR(*y#%+!}l+Y3_rgxGW>y#x7dDV zWN`S($lweecS--s$nYB^1|4tl|HjDB@Qsn-DAM|*p)_s++ut|P<0sN=3=DE?3=F*N z3=I723=CfE3=F>P3=A9D85j<*Gcf#OXJ8<7&jD!c1cXP&Pat<6(EHwl(eV?^bx5P* zCy?{TXt@t?bo_*YAq+Zp0vbaZ9Y0}U7#%-hU}%tMVAvwhz_3l8f#HZe1H& z3=G%g85nNMGceqhXJB|Q&%p3Wo`K3JeTc3JeT|3JeS- z3JeT=3JeSr6c`xhC@?TAP+(vf9Y0}Um}$Vk@ZW%efz^OaX%zz?Fk4Iv;Jgs{AB3g8#y|DGCF=Ty8eWL;RGMU zh~LLGy8eWLp+TB~;j=UY!yjn|26Gt(25T7x22U9V245KlhM}rV#V{;bjUCy@IcN7tVWjr;LN$4^Mxzcaf2WN@A{{htxC5~ZA(fuV|-fq@$Pckqpy zFhlq4P-EO=bbk&5Lo*ixLn{{pLoXKtLq8V-)z7(k&&9y-5sF90Nk+#>M#o98kCWV` z;GF3T0t^g)1Q-|?1Q{4SgcumSgculng%}tDghtnwtdd}0*dW2c@Ku6=fkATctS?z5 z&A_lunt@@bGy}r{0^=nYWEdDe$uKYswtYIZ7$-TU&cJX6iq8?TZ|9>91H(@p1_o7K z1_lFN28L8!28MiH28IG%28McF28L<63=9i&85ox7GBB*rWnfsR%fPTfmw{oME(603 zT?U4Ix(o~lbQu_q=`t{!&}Cpar^~=_L6?Eynl1yw4P6F?d%6q^4|EwA3vjEGvHWQ)ybyhBCVE8o%_UqhV#lXP0nt_3BH3I|ZY6b?r)eH=R zs~H%?Rx>attY%j0#VE>o6bEQYuozQRH2{q22q2@RV(fe#RFfxG8^&PJJX+AJAXn$a2F!;d8 zF!=)`!-5Zt4C_8HGHm?7$UtoWJ@X?YL%~NzhQY9Z1aw{pY~RTLuZ#?g-xwJLzA-Wg zePd)0`Nqf~2E`KJ7#ToV>Kh{i2+Mq9WRUyD$e{3zkwNtvBZI~_Mh5L~j10O^Z19bd z!T1{^gXuR$28SWOALTuX{eM*=&hH?l|1ZzRz@W&+z!1mAz>q-VJ`_;@-;$Go!G@E8 z!H<)HA%K&CA(WGWA%c^Ep=k8nj$t`2P{_@|(8SHa(9F%i(8|rg(8bNb(8tZdFoBza zVG=h3!&GhthMC+9470cy80J9nJZ=Vt`P>W)i@6yXmT)sLtl(x~SjEl2u#TI7VJ9~O z!#-{XhC|#849B<`7*23AFr4CMU^vUoz;FSIuX8gnfbcVJ28LhU3=AXr{0AA?Bro!*u%rXaD<0} z;TR7C!wDV+hEqHY3}<;57_Ra#FkItdV7Ldx4|o_D9`i6TJmXg z9|qujO>*Y#S4uK4Y>;GNI4Q}%a6yuR;ie=5!#zm`25Bh<201AP26-v+``fU2_KO5B7j-a5w z9fIS$&U_sPhC&?%hFTp4h6Wu5hF3V&0Z_aDZ9wI90J!?!&PEIj0a*Ishq0^&U|7n) zpuLQN!C@H#1GauR!*T`&n zz!15LfgxrU14H~O#Q6^lHy9XT^Y2+yntvbdClAcInfB20G9|Ix14C*57-#=>g!F6S z{m36o46?rl$9nD^(EejSGXp~jGXp~@k?Xk6F*7h+U}j)wV_{(EU}0borb54xn~i}% zl#PJ_w6+_BLFWp>=69{w7#JMz%=6~5GcYuuojZuHzgfV^z%X3}P`JazU8f`CL051_l=%1_n1C1_lov1_m!41_oaq28K``28J-` zy{3ss_nHo-`xlV=lXkoe49>g^3~sy(3?94;3|_np4CwQ>iM)_=1oL?r7@Bw)7@Bz* z7+QH57^d+uFwEj*VA#mZz_6K@fnhf<1H)b@KETVsaEzCM;S>~~=Vf5H!pp#L4T^8@ zGBDidWndTz=Le$qBeVD!7z+6r81T*8p66#^xCre>Dhe<#C<`z!s0%PKXbLbeXbCVd z=m;<{7zr>imL<%r4ED*q)=N;{DGB7+4XJB|K&cN_NoPpt|I0FNN z1Oo$~1OtPB1OtPl1OtPD1Or341Or2Z1OvlLGS`Wd)87R3BTvaPFo61zv*j2V7RWI$ z{FGy0V322E5S3?OkdS9!kd^R}aFu6Z@Q`O<@Res^2#{xB2$yGIh=k&3c?Jd$ zj+JL%0O5Ff28LRB%FYo?#&M1yZ2lJ3uY9k-z`&r$z~Be%SGEx7SI&Xu=hKM9(* zeXY*G@Ijq{K}wr}K|z~=K^aGXGDnAjp+tv)p`4EWNd`Rz25~(G1{pmD23ZRGl{$tD z42Fgb41IGOx9{XPbU!934M(|(^U1H)li1_lN>28N;9&wCB+=lMYUdCky%-fbN7 zhp>L$MjH3?j;S*+AoufxvGnigH9t5M`g3AP{kYNo8zX}n10#b510#bK10#bC10#bi z10#by10#bk10zEK10zE$10zEN10%yP21W)3Mn(oEMn(p9Mn(o>Mn(p6Mn(qExnp$i zzi}}#Fmo|7uyQdnuyHXm@Nh9Q2y-zqh;lJ9h;uPANOCbU7;`Z)Sa2~iSaC5j*mE&5 zxN|Ww1aL7jM1bz6Lz{2I)h}bX!pIPEg^?lb3M0duD~t^Dt}rspzrx6{2#S|pVPsf# zg^^+96-I_NR~Q-AU14O{d4-W-Hx%!^Lc4RwPhMwaICq_q0d$VmVD692f%d=5p#86K zW(I~>X3G0vznK{r7+4VVZ?OK@R~80_A7u2)7P2xhEM{e3fc4Lg;OU?7pv}{P=IB5e zv=0+DPZxn>Kc+uBVxEpr|BRabva_5F4A-If4krV{T}}pu`7>u|X7>v0Y7)-et7%aIN7;Ly17zTP?ZYwtf!*&AuE>Gp_7&ZwpFl-fK zVAvtVz_3q?_4`Bv|C}9SMMCd+G*#6GJu%48he%=E~ z28REVkn@+a2WdYpM1g@J9E#%=7#Oh4-+}J`+6Y|_`U={gvsPqauvKJW@J8#`UBJ<= z6IWwkkW^z}s8wTNXi#Hdm##F0 z7(nk&hOJ`+^^cf285mgc?3)9vW2B^?w1<;{VIL<0!x2sfhU1(J3@11l7*2CCFc8yU zV&Y<80AX6~nzE_x+9KQ4@qzxz;FSn z-&1DHz))?>z;M@?f#HEM1H(UK1_lNb$hj~KehdtQr9brNF9QR^KL!T${*c>01_sZ6 z3=Bd47#KqSF)*b4V_?Ym$H0*NkAb1!9|J?lKL&=fe+*Q+&*uMsPXfXdW82cmt{_`>X z{|`C<9liI#z%U8g|Bxrp|L}wMKa$Y)L6N#X?m9CA!!2e8hOcP-kWLl`h8`9Mh9fKt z498g*7*4P-Fq~##U^oL^M~6IbW5~+D5XQ>D5Xs8G5YNhhala_&d`x2IYe0Px5C-*0 zKp4~~0by+Yl3X?hh5|MQ24eds8`v2bM*Am(_gRhhPZ${Rou4_{KVe{ChM-DgGFc^&kc&-n(O%K^>ljLzpk&If4_XJ8oW{R}q+1_loW1_oc~ zKBxi(28I#^28KT9`IYOT^C*v@^C+PH1?XH2*t)pSiVO@4N(>Ail^7Tplo=SRl^Gan zl^Gaj;plI?g7!D2sxmMvP-S5FuFAl`pa$uGfaY5Ysnp*{S7%@-!*T8)&WOU-SDf>O74LfqqF5 zv~Pl|e-ihffg$lf1H-=m3=D_pug-o&O9B z5B@VSJp0eU@ZvuM!@K_s3_t%fFpTz7=zsnKwthW%=lqY(pFr;Z8=XJF ze!l-`|75g(0$OVZ!b5Sr*=YX+^Zdfm{s{xaX#Zrie=_MW1H`sA|NmSJ|Ne6`{Qu9*@b5nl!~g$04FCS~GW`F~ z%Ydz24x34^fVR)SGBPmyVq{Im-xvxI`1&LE{gK~{iE%A>bL6|`4||i_!t=M`4||Y`4|`)`4||Q_!t;kptzln zfuVzsfuReEd-)g`KzIrt1H*Ja28Nk@3=H%6=(Bz)6YU(fsn9#LVE1UPD%0F7^h?q@R7W>RKgsDh4btEezAIH)i%c&RWjB&aYjppR?6M;h0bQe$Aqr^mRq0Rw|MbgUY- zFM!zb>iLEY3{)GhhOL)D+b@7V?kq>bJ;nI;2@JM&-5=<<^I&M#jkfQwuP+&G-x1y? z3|jLJ!lUcnQTGXtu6w8MIlhB!-TP?!jsf-FmLb@_TRqyoLpdjPw0+0G@c$nKGyZ2_ zpk!Ua-$B^EQy3k;Ls>rzYTs=@I_KpuE9N2VgX}zgLgQ|$M%!hyZiU6wsJBs?BZl#*v-knaFmmQ;TR_a!%0pChEtpj4Cgr+7_MzyQJ~ zTnr2#Y|h2N0K!&W3=Gy>3=FnV?99c$;Ks$k;K{|n;Kjwj;K#+l5WvO25X8m65W&U3 z5DUfeTnr4UTnr55Tnr2iTnr2?P~6AGzyQLNxEL5fcqJDD0|;;AVqgH_EnEx?AiRr< zfnhfn1H&;WKE=hr0K(_E7#PlTF)&=@Vqmz>#lY}{i-F-O7X!m5E(V4lTnr2h+z`yd z&A1b zil=ciFwEd)V3-ZXbGaE9KzIQ+1H&S228N~F3=GS;85mY`Gcc^>W?2qS3&j(87#Ki!B@Y7w2yfwGU;yD=JPZuGc^DXuLh(r+1_ls5$HTyI zg@=LRIu8TG9UcaT`%wIZhk@ZK4+FyoDE`93!0;dB2VMpSUS0+UK`3_RWnchdPhJKF z5DwsFUxbGce2-W?=Xx%)sznn1SJ+FayJXVFre|VhjxP#TXcV ziZL+!7h_-$6K7zM6K7yB7iVCw7iVAy5ochC7iVC|h2lbS1_lr=5ochi7iVC&C(gid zUz~yAl{f>#dvOMaU*Zf5|HT;?q$C&^LnN$R!cB2te0S5_$I-?@E;^6 z$-p2l$-tl^$-tm5$-rPE$-rPQ$-v+!$-v+&$-s~&$-s~=$-q!5$-q!A$-uBil7V5p zBm=`KNd|`Vk_-&DB^em*N-{9WNHH+TN-;3RLvgJX14Eq@14EY-14F+Q1H&vS28Q`k z3=Hd}7#P+|F)*B$Vqo|$#lYYz&A{L<&A?C(#b2Zu7=BALFj&YiFj&bjFnGx@F!;zY zFm%c=F!akXFzl9LVAvzWz;Hr_f#JLi1H*3_28RDK3=CrO3=HD(3=DGe3=Hz}3=D4a z3=Hn_3=Dqq3=IDA3=9!a93{`d0Kzfy3=AL~C(pnD!gcZt4E6F13|pc2s5}D$2w#zB zV7MyJz;FkOKgcsMe3WNk_zK1UhJy+W z4CfUX7(Oa6F#K0wVCYd~VCYw5U{F_KV6azVVDMI9V2D>?U?|aMU?|mQV3-EQUvwB4 ze&{eTsOdtmhAsnxjxGa(o-PA}zAghphAsm`o-PAJp)LbMoh}2zbX^99`ML}Y%b|F^ zE&~GyZ`WmD0O9?*3=ANAT$h0XgwN|TFo5uNT?PgazOT!`0K##43=H*p3=FfN_=_F` z!+$*nhHLr^4Da+MtU^u^ofk9^(1B3lC28JKY7#RL9V_-PFoPpu|at4M= zP<&-M0|N-(TF$`maXABn?g|D5{S^!hRx217>{l=_RIFfNs9(XraBKww!`T%K47XM= zFx+3kz!0*Mfgx@s14Hdf28Q~T3=HR>_|{4WhPx{n82&@C`6>nm`&A4KeybQ5{8uqB zM6F_Ah+f6OaCj91!>v^e4BtU_DRG2K01H=2(3=F?kGcf#L&A_naIs?P{>kJIXuQM>5y3WAx=Q;z! z{~rttdA}GK@_#Wf-1^19@c$PB1N(0V2BF^!3=+Q?7-W7kFqlKJ?QaGK5Vrr#zyQKd zzZn=n*!4F90|+1f&A@Q!Hv_|jzYGi$|1vO~_{+d>?k@wwg})38@BcC|Nd04AkpIWP z5DdlX{}>oRIOiV&L;gPohEgd0`;UR)-#-Qh2GAJ@{}~we|7T!0_@9B{#D4~clm8hQ zF8pU;xcHxe;l_UkhMWHx81DXOV7ULEf#Eq6zyHs`@Z&!N!$0UaA`b&20|=`#FfxF! zH3K692-`6*GJvoj10#b!10zEm10zE{10%z421bVe42%rSjEoFyjEoE>jEoFsjEoHZ zP&}8Bkzqa~Bf~;QMuzi@j12!685!!C7#Zd=F*3|&Vr00;#K>@;iIL$C6C=ZaCPoGo zW<~}bW<~~YW<~~oW=4i;W=4j3W=4j2P<(`$k>NNqBf~XjMuz_&F&0LK`7DeKt5_Hr z*0V4&Tw!5kxX!}J@P~zw;Xmly2UbP~eO5+>6jnxtJXS`AYAEhzWn=*1$*hbFAUutg zkpYAku`)7%@FrG91`yuG%E$o1ds!J7{h!J31S!Ip!O!H$EGAqE$;e>G$;jZq$;eR8$;hyS zlaXOJCnLiJPDX}{oQw=CToBC8#mKLcpV=j!+JhOhE05o41f3-88rAA z8T9!X8KU?Z8S?oV8M^ox8P@YNGMwROWVp}I$nc$?k>Ni-BZHp+BSWA7BSV=0BSW14 zBg0_qUW}0;SB#ONUW}1pmlz|%elbRdQ(}w^|HT*?q{SH- zWW*U6bi^4M^u-w&+{GCg{);m**hnxk%$Hzf_$QFgQYAZ zgEbV}$ucs4u!k%ogTE{zLzFBdL%b{_LmCuk$}%#5aK9`g0|-x&Wn=*1nX-%w^JN(s zR>?9l+?Qiy_$kN8@L!IRK~Nrot>qaRY~>jlqU0GF*2^<8Y?NnY*e}n>@JXJL;h#Js z!z^V+hX2Zp4EZV$T&lvzP_M$s;G)XN(67(P@L8Xc;lDm3LzoF8!+&Q+26s0`hX3h| z43=4p4E9-!4DnE$mBq-Ao5jemABs<9F*2ObVq|!i#mMkJi;>}579+#|EJg;mY(@tE zY(|DCC{D^|WB}ocY(|EfY(|C&*^CVKd5jFR^B5Wa=P@#P=QA?+@sMg|bJy2{7^!uD4g89>Hr&fRO=&wI47t=s#d&$a}!Z(D#6mVZsAOhW`&38FU{qGUz{KWUzb4$YB4Fk-_UB zBZKclMuvcgj12vc7#Y?-Vr1C=h>_vfBSwaQj~E#k9y2nWf5OP{>j@*n{pXAf&!PCu zb4CUbe*c`20fhfQXJi23qc0d4j=f-Hxc-8X;r|Op2A`LV4E`?}8KPb?GQ_@QWJq|) z$WZWxkzwl_Mh1qrj0|>f85#b+Wn^G^2f+&O7#ToV`5hwz2&=whWKes@$e;nm#_t#z zK-l6PBLfIqy<=nmVVif1436&@8JyoSGPu2CWblAuuXl_LAnfywkpYAQ-Z3(OaPT`u z1`rN?$H)-&j*%e(ilg2!GJtT*J4OZ&j(f+*0Ky6H7#Tn~`5hwz2&cYdWJr6*$dC=i z#qSsyK)B)^BLfK6zGGwn;re%s3?SU~j*$U`=e%QNSn!UKVF?tkddJ8B!h7B^GQ5As z$nfbMBg6mqj0`#-7#Z|GFfvT}z{oKF10%!w4~z^OJ}@#IfZ_`u7#TqL+XqI5{~s6` z)_r7Tc>0l%f%y|71OF#R2AfZe4ECQG89YBRGWdUDWC;4i$PoXDks<99Bg6ksj0`uv zF*4l##>nvY8zaN}Z;T9ozcDiW|HjBr{+*Gb>N_LDt?!Hs_rEhTy!p<^@cug^!^iK8 z4FA6~GVuIhWZ?h7$l&pVk-`55BSX{=Muzwwj0_z=7#aG1Ffy$B!N{=w2P4C#AB+tD ze=stH{9(`PVE6}JN6f0mz`(A?z#yc?z#yW=z|gA3 zz%W6Lfq_+>fq_Gvfk8-}fk6a{#nc%XKv-6tfdPaS)fpH-SVNtG0fdd!85m5|85mrk z*j=500fc?j85ls=Po04QgoD)?7(&$<7{Z}AS)G9)U7dkpsyYM1bae)Xg;2afoq+*_ z_p387fUt=s1B0n10|Toz0|UD@1B0|S1A~k<14955hiWr0fUto90|N-#8Za<`@N^>v z1`wWU#J~W;4AAt?`;n1>|05%VJ{0GCWMnA($jDIlk&&VPBO^l}6i@uf$S~_8Bg0x~ zeqn^>7pYH-3?QukiID+>jXp6lSfS;kU!NHn7``wv*nVYXaQn*0;Qx)0p#hq2O1?8P z)PHAWxJp7k0p$;#pNtGvKN%Tpeljw+{$ylu{|QO&41X9I{{Dw9*nmz}fQF+%OUpr6 zi-Cawgh4|FmJAFGyb2KfSb>27gh6Njf$+1Bj12!jGBW)B%*gQnGb6)>pNtHfe=;&C zFz_+dg9aj@W`igV(6Rn%3=Fbr3=BV^m`k03fmfY@q4hH(7$5q~$Z+H{Bg1hhKJ}TA z;ml`72B$BK49;H|8Qi`wG6Z~KWJvqM$WZZxk)Z~P8^16zG=E`aX#K*-(Ef#yp&yDT zeqm$);Ze*928$sV_*Q`S85ClApA*< zf#I_n1H)G+{-wsi0K$LO7#KhpR91j6DBiiDWdW!>0OffQ2IYAWM$h-K{0_?FAPmam zAdD+tvwUD=0O9i=7#TnqJ%7T|EhvA2Feq<=Feq<=FerbTePU#=facSHPmBzKpBNb! zJ~J{Xd}d_O{mjT<`k9fz{4*m%&1Xi2y3dRZlRq;uEcndG07|pxKQl61{>;em;4>q` zhtG@*U!eHMXGR9QFN_QhPz*}ff4(p>{DnvH8zaM? zZ;T8NzB4ks{?5qo0g6Fs7^9r{$;eRfi;C6KV_$APmaa=hYY(E<*8TX#Rc)&EFrO z`T9FrzGhNqU;trI-UeY%djM3f^Q$v3fH0_S0K)WWAEeN+eE=$BKp0fUfN%kUb^&s^ z!vt*;pqD$Kb^&sEqxhMTK?PdAO#95pF#R(l!_3c&46{EoGR%XPFP}d%GJO5a$ngC$ zBg0>$^28IZJjwsc$WZW=k)aq`wzPj`WB}o=uZ#@6(7F)0J_MCDOTRKQtbpQ;Ul|!T zePv|W1I35FGBODH8o18@>Njj)U|`tDz`(E#igzjDidhDG1_m$&t>pz_SvCd+(E8jfYzzz_47yi@ ziJgJrCls4=Fff3yB?kio2-|WnFxYW0Fr;uYFr;!aFn9?tFn9|vFeC{>aJn!9LxwN| zL!KA}n~F0qn29qmFiSu%rvw872)jr!Ft|!GFszVbU|221zz`+Pzz{9Xzz`?Rzz{FZ zz)&mAz)&a6z+f%Iz+fZ8z)&Z{z)%ljD=;wFDljm(L;H_hS#ehI0$+!c-TJ%hVXw3450PzAk6olfdPc& z|1&UvFzB2;5Dw#FWC-VCWC-PFWQgQvWN71OWa#8)WN;T?WbhDRWY{Ob$Z$}Ak-<@r zk-=Gzk>RKyBf~L4MuxLcd{2;(;l3avgM|Jup zkC6d{=kH-;0O5{Xj0_+QON-cOQ2O4^z`y{)?aT}eAe<@8z)&d6z;H_vg0bm?iGlRD zN-!|ANiZ--C_=EFA_D^m&o*FSm;>tU!4zYmLFJnR9|MC69|OYyKFGc7TO}D7wo5WF z?1JL0s~8xztzux<3B|itF)-`_&CNoN=w!%bU|`4sT_eWGz@X2_z~IRQ!5K^p3?Mw0 ziGcxxH!(3VfH3IH4G<1vVPF8^2o?qg5KfY1U;yE1vJ4C$yhN6P0fbk`GBAL!t{ejc z2%nZ?U;yDl1qKEX_E2PC@Kj`AsL_F7r7MgK%Fugv!>=$hbX{R&=)S_puzQ)K9ca4!D{u(30q-%@}ldmx{NZp5Ep9hQ#z7H4~GN2eam^m027(78?!pOi- z%m%^b{0s~rT*=SC0K$vK85ov`GcbVmljnoVLS+U9EoD%jkdJ{8t-p55Bv|oQc75I}?M$b|wbd9ZU=gJD3<2o?~LzaE^)L!E4AtFkZsU z3<1K-4C}#TZXmr73>tyMb$=a51*ks%q|d@@!8lx)kpYA^ zh%hpM@Lmx{1`u8^%E$o129k^nAe?%UkpYDBE;2F{UBo^v1N9z*5CdWz0&HCXefN*^ zG5q__&+z|0Kf}NO0u1Q)41n4P35pC1`HBn-+f*1B&Z{sm7<^=8@chWg5b%+aA@d_6 z1E~Go`4JSeFkc~PQ2Pp06oK$A1_lNY2HlIcgNcFR022cPXnii|e4!^y3=E*Ng+Lf| zCjkim5nx~dVI5fphAdeIh6*U2Ez7{LUlvlffXbJ81qKEXo}j?MFh_xbp+J#=pFR0|N+iNiZ;gu(JdM0|+mdVqgGaGZ_X3 z5U!SCU;trO&{@O=3=D<_3=F0Q3=DHYY1e>(;ScnjV$lT*3?R(2jDZ1!&#z=)0O4mV z85lsgU=;%c2;W`BzyQLZS1~Yr0g3%*U?}*{z|hFf$k4>j$Pgh6nkK3=i`e86HEi%|k{8+lPz{E-x7w++Jc2r^C>;HgbD=1p@;E2(M>g zU;yDQ3=9k)3<|>?43K;EK=)Y$Ff%Z~?i}3gabJl7(zH17z&{nbax#HgYK#WVc7mFU+8|TJzNY7AbggKfdPd7 zaxpOc2kp_~hTLWC%gw+5!l1MT!e_Y|7(m#Dhk*fveR&}Jx%coeFo5t`9tH*ww&rDE zu;FE3@P*=2ybKH=?9Ru);KRqj;0MLK_!t;K_yivV!x=sX1_^!!21$Mf22&_D=VxF5 zVM~4n1`xL6XJD}BXJBaJXJBaIXJBaKXJBXttxttwa{&eh5VjOxV6YNkU`Q5VU`P>Q zV8|3;V8|6>3G z;o~w$CsuJe14GAh28J%A^6$tB1_ls*u!4c%;|c}_?Uf7+dMgQxL3wW}By_OD`KIJAm^;Tsf3BbBGws~H&HtY%<%yPAOkbp8tngYI?J z|Hr^!2dZQLGcY(nF{sP|VOah9_&);!2tQzAWB_4MnT)MGe#*tj@QjO*L5Y`h9-VShE{$?1~&l+E)Za30O6eij10R37#WNO85v9j85xS9 z_<$fI0|=iIWMnu4TDv5~$Y3VK$na8#k>M4nZzIgeU?a@P;0wiR!i)?#!i)?B!i)?h z!i)?~A`t8*!pH!^heQ||4vR1{>=$KZI3UW%U@r#2+r$_dwu><`Xp2Lzr352`l>{S$ ztt2CZog^cJGZa6NWMlwg6DdXp5O$YhWB}orQj82BY%jye0K!hPj0_;`BFo6&D$B?) z9g5ve7#TuM7#TifF*1C~Vq`GLW@IqSW@PBkXJnY4&&cp0pON7sh+fag@OeEW!`JnU z48PYiGW=c7$nbAHBLl;EMh4yUj0^_n85!KpGcu%KWMs&^$jFcjZRb>9WMpW%$jH!o zk&&VMA|u19i;N6wFCywmgNKX^W)B$|);)sYH;)(@-alewxbT9J;o1vCJ>l_^k--aE zUx+X;Ft8agFt8giFen-@FlZVuFjyEcFo4eIM{oBs{A6Ir{l&mg@QZ=r<}U_@C;5zE z%uv9{@V%XpfuVzu;c5>f14Az(14l0-L%~KyhToe&^%4_t?cN_u46?sKEmmd*T5Fd*7Bpnb`>>YJmi3=GGiSb&XzL5hum0aX8h>Yhk828MX({Y9WVjIOaUFx+8d zV0g&J!0?2Pf#EqD1H%jG8G@kujRe^l7(f_w->N-30|TsH660WC5a(cEkmg`uQ08D@ zP~~7?Q0HJ^(BxoX(BWWUxWd7}a35Mfz2snE_`t!y0J@*mij#rCnv;RSj+24Ghm(Q9 zkCTDHpOb+hl#_uWoRfheiIagLnUjG5c26s)t$qaUzST3Fh;wHiaWXJG=44=CZ$v>%bg z&A^Zhy`QuR+NU_g&A@Psn}Oj3Hv_{dZU%-k+zbq$J_ZOg@Gvm2fch6a3=A$j3=D2O z3=AGT3=Cd83=BRz3=E+>3=CmB3=By;3=GLU3=EAt3=GXY3=G)z$DZL~V1V^k9`P_R zJmz6w_zcAiybKJ?&_0X{F9U-cF9U-IF9U-YF9U-Qv`+)-*Cg>WFeLLbFf{TqFf>E^ zI9GTX7_LF_4QPMo6E6e9XI=&dLp}&Lfu3vU%g4X~!W;P*7(jRn9|OZqKFB>ad-xa_ z&O&h^KLbNEKLbNA^h~*#{0t0x_!$_q1sE921Q-}Bpx9b~fx%9IfgwzQfgw_Wfgw(S zfgu4j4hOB*)1mcxp#TFzi2wsb6PEgYt^fmrkT?T_us8#QkvIc`u{Z-mkT?TFus8!l zkvIcGu{Z<6HgN`q6XFaEuyK}^5)2F=tRTt2pe@P3U?9oBU?IuCATGtgAT7nf5GuvM z5GTdJkSN8#P$I>^uwROS;eZqa!x)+LUj0|h|7#SD@7#WxZ7#S=C z7#Umz7#WHM7#T_g7#SJ_7#W%b7#TJQFf!~AU}QK1#SDUs3`~NI4C;c63`T;C46cHV z3~qvq3=M*e3{8TJ44VZR8TJb@GMp1+WH>L#$e<&{$Y3JG$Y2h|c0!B{AnYi_$N<9k zg%}xL2r)7+2s1J;L;LbB!i)^=!i)?a!i)^w!i)?)(7rvWf1f1G$dD||$Y3hM$lxf# z$lxr($lwa?^B)v}^!2xjGBWHCWn|bV%E)j>l#$`CC?kV`7$bw77$buN6t5OzWY{Xk z$RI1u$e;yUw=2QOU?Bk+BQTX@WH6UxWU!EAWU!WGWU!HBWN?6DCrL&I5WXnM$Z%bf zk>QpkBg1`3MusO)%m`X@E5*oQD#gfPDaFWOEyc)SC&kDRD8j5J}KNP#aWMlwgQpP1<^)u+2 za?lVgXuXXi0|SE_0|P@M0|P@E0|SG=e+CB0{|pR@{}~w6{xdK*{%2rt1MU5QX=Y$x zXhZ71USMWmxWvrBa21L_Ff%ZGWM*La0=+L$Oo4#`gpCv!7)%rx7#yHDQGtOWMS+2# zR)K+`PJw};7kUrV1qB9%I|>X8ptCAL_^AQ|!!rd2hSv%V4DS^f7?>0xm|c;90fe~} z85o2W85l&NSW=OJK~|B0K?RC66d4#a6&V(Fp3Ne7Zn*8E<^EEMFxi3iVO^Qq48+1(oXl(#!O#leP)&k_J zF)-wT*50TyFdS27V0fm^!0=w3fuUKGfnkOw1H%nX28P?33=DrX85sU*GB70mgW%+U z3=AL)x`!2nZT>SbfH16|!*GR>Ap|=9J?9D|!@Mhu4D+urGAx4PrB@gkmR(_FSb2q! zVa*jrhILmM8FpS_WY`VGd#^Au9KOQHaP$fz1M5{r2KK9r3|vH85ta|GBUVaWn^%JVy~-=3;|ae8G^1dGAzBu$gtuX zBg27fj0}gaF*4k`#>jBz8Y9E6Ym5wkt}!x*TxVnuyUxg9a-EUE>^dWZ-*rZYfa{D5 zdDj^k3a&FUbX;d-=(^6xu;Mx+!>a3y42P~WG906?j*&tB9V3I{J4ObjcZ>`wP^|urkpYA?-!U>6y<=oBdB@0L{*IBs5{j+gF*1O# z(>q265O#mZ$N<8g?-&_C*!vwL0|@)RV`T7u$H)-)j*%hg9V0^s6o`m z9Q}@w0fb}UF*1N~{5wVl5Ker@$dL4oks$?&)88>NWW8f#$a%-eQ1p(Gq2wJSL-{*K zhRS!03^nf<8S0?8;TC#A7&He3!l1cP5C)xb1j3**jX)T5 zrV$8Zn>XcRXJFug;vdlYQv>LHX&eUw0|>+BO{1Xa9CPq9Fn};GKLdjhKVm*L5p5pz zwHO1#TQLR(*nH|0aR!EK;tUM8pqNR5fq_+mfq{d-{Aw(g`Bi%o=2so{7#Kj*5hdNt@l?kFn}=nylVh--Zcbm-j(M+ z0|N+y=3YTq>OTX6G;|IYc^)?9KLY~@&u3<20O1SFj0_+g&cVn4!t$Jq3?K}ful>Nq z$ncemk->_ak-?sukzpn`Bf}hS?DM$3B+lca&)@orFfv4mFfv3#=W&lxFps-XijiRv zbUxQvhLNEViqYqF3se{xN>s4V?^;6Vc0qHz)6wR4+ix*4blpPDZ-|@+VS&~?fUYnE zVRZ%u1`r0V>i}WU+6@qvP+(w?S72bURA6ARQea?k(t}_g0|o|u0|o|J0|o|p0|o}i ze+&$ud+(V3GcbTK`+o)o5Kj8fz>tjAZh+VhK6Zmamw^F{*D^3LfN&Qp0|N-NNiZ;g zFle2KpaKJfxE=)mHeg@?VNe|d!o2?(7(h7nKLY~@!^{TJ;!v|ec7V(T;eD(O3?R$^ z8e9>9*a5Rg6uJflv<{_Ofq?;pyA>E1Kv+nLfdPbJ?vT=BU;tq&Jq8AAJq88`D2~-* zU;tqm0|o{V2CYc};ROZ^3?OXykAcDH9|J=K6odQ#!XQ6@@LE1b1`r0h9~66_IXTc; zXb>MAgXY&|*ccc<7`9$TOM!s_bRJQf0s})PblnQboC{AF8Gb$iu@I(!<|{$%RsnfN z1|g*OYNR|w9cX^IfR&Mn}j+L824%85ur-Ch$Q5Pz-W^10N&9Njd7es;l#~{hbz$VGazzM}Xl8g+(l8g+Zl8g*ul8g)zl8g-K{T0xMo(yo?N%ykH&R_1+G7j105#5c~(w^(G*FFbwKHB*-!{q{=cf zq{}igWXLiyWMSzi&5&heSRl*Duu>Lb9)koUgS7+_A3B~3G8-fs04*Oud>96~7c|EP z!ie!pm@FpE4ib`OWMGqJWZ;lxWZ;x#WZ=fr?*sMo0%RE(BBAaC#Sds+4}_7&QU7-# z#!*35z%a;t8(0__F0(K)++bm3_{{?H2}~A}-Wj0vN2~}VL!t<(JSct(WEdIxvGi9F zrXW}#_c6#YGH}Q+GH}Tt`n#?&j0^!Xj0`z4nC3IQWMuGu$;c4!l93_uB_l)JOGbux z=y)^8euf*24BfXF8D`&NWSD=8kzwI2Muzp!dITijz{AL}iHDKl01qR>Cmu$IUp$Nq z|9MdDfw>Sgf8HR($j~Ol$j|}BT|$fuy+Vu({X&ckbA=cg=0n#N!&eSQhTj~F4F5SG=7UKWMg})GFpB}CoCa1)2fgW_X> z1S7*I2}XwhPz$43^NjFZ6LV z&|Fx6Fe3v9gT~T87_@ExG@gb&KL)ZI>?&4926bpX2@*rbVE^r5WXRgX$WX9{k)dV} zBSXU;Muv_(j0_X@Ffz>C!^kja4`e+bNFONtE@Uw>yv>5lbAi?Zg2Z7MByYgV$dJs+ z$dC`kFgXwnl5Y@WWY{Uj$Z$Z6k>Mnk^l(9dk>P~^Bf|#)MuwjPU>|_%3()u^X#FF| z92f?rKZblp1~2H?7i`=MG~WhN1Jd2V$;dFD6U2g~j|H5J4BI&w8TN28GMwjRWVpo1 z$nYO34{{%9d=xZKX(q_X;EtBQK=KY83=GlGz8t7O2eJo-!R`@YWB~O8f&>^DN(C4h z>Y*5<2BiOhGy}tDX$FQr(hLm$r9q+y43Y_aHqW43c*M^;NhT86vnD8RDVxAoCKq7#ZrJ`3a;Jgu&`L7#TvL zeW7@0{s+l{Fvx!op!3fMp!3ZiRx>dC1U2XxAmIxdH$S_Qf#JeR28Np}85r)ZWMH@t zTGS0K&lW(}-7;h_GFU*{V<59Z7-atiXuolTJR<`LgT!GNB+tOXz@W>)zyRx4gXBQ| zVK9Kqzk>KM3|7z0$Y9FN$Y2TWzro}{G)TSyIQb;U@^!R=KAPDTbx zPDTcMCLUphy^LP8<-dw=0N!%H6RS~j{$T&LHtSv1`q~`!!Sr5v>{g) zy2cr_&KV{LqCxVYc@ogv2xvX@P0&Ii=>9y0r3?((p!E$49~GB~S3!V{(* zY@Rd&gO4-=Lx417{W(ky8x3yXW0|KB=3-jF)~D8$$tx&85s^UGcufDW@Na^3~?WrT*1Jg1C0-uTR`D$pv%CJuFJrX zugkztpv%Be55*ugp!PFp&?_D^@I~afKS&=8gTk*tl7V5hBm=_+Nd|_Kk_-$NpzE^l zNis0p2Q46lDTd~M(7l51LFa+$Ffe@9VPN>F!@%$#WIr_i8KCooa#9Qo^3Z$(_MZj= z!++3*S|szp?&n}+VC7(B;DBN-4n_u34n_uZ4n_tG4n_tWD7NQdWB_3#?cn^>z{1Ed zmxYmG0ShC;N@#l-WM2RaBSSru57PsR{|078hPlwOA<*~`Ob#0jNuG=h+zgBiybO#C zY7C4F8VrmKRt$^`HVljmwhW96_6&>+z6^{E0St@`u?&n14GfG7zrZybq`e*>$-s~+ z$-qz`$-q#87M`H;he48oK~9o^0eQX^wBE`=l7Rt)LHj8Dq544SAwishAxE5nAy1rv zp#W(f7vz4Bza60SyD+|jI0J(TXdnX?KhSkv^5P5(APiE63(JBem>C%IL2Ch__eFx% zRfHm~r+}@y1FZ)G&HsYdbzPESV7MZ~!0%0y?*LA_hDM0f!9~2lE zK$GNpCYk;*Fo5=NgVsIi{$pVH%g6}Epfyb(Y%R>l0K&M|+2C4VgS^iM z6n+dWj12zJbOYiWFf%fELGvjn{V*^yGAJ`MGUzfhGU!9aLBRyVVEF|M3_VL27$z)X zU^un}B#Il0GB7aUTJH^8mkL_D1H#DbcdS9-fwpcPef`cO=sHr^x+G9)Bx-#+o^?8) z^!JL1fdRCPoz;+mLEn&pVSyn7!+y{`Xjr@nT4le`fPvwc0RzKd0|tiw1`G@z3>g^y z8!|9lFk)c%XT-q3V9dY}Zp^@t_Md?v|33pm;eQ5(x&Ij$KHyqMwSkd=VFM$B!bV00 zrHzaXp-`N%k&z*NBPhlY4gr-fjs^@2)1d2m=Nm9EFm7OEkl)D2U9#? zr9l{>odKkuL4tvSQG$Vi1&TpqeUcIk36X#3=I+t467s<7!t%78FJ9tyWsK_ zx{mUJI0M5=aR!DD;tUKw#TghLNHQ?|hvsXTm7w&qK#YOml^6rVJ23`^A7T(0kgpoV z7#QY2`4CY^dki!VSue)Gut9=>;j07#!v-lvhW*g~A1J;S2s1Ez6=q=gANC-19LmoRQ(# zb4G?2&lwqBKWAik`<#*C-E&5U56>AH{yhhUJSdQ`V^I2L5M*HZFUY_E+xK8-$iUDC z$`3{i401*c3<*XI40RxSB?ChZsGSVG-*3Zp28LtT85mAqXJGh!9kO?2-+u;%L;o2V zj{j$1IQ5@_;rxFFhD-k$7_R?kV7T?4f#D9?I5_D13)uPh#|0P|K=`Zx0|N+O5MW^V z1>FPiUx0yOf(!%0E*S=fy)q08`$6q8T?PhKT?PhqDAv_wU;trcpMug4Xp_u*0S1N# zD;XI6tz=+GSjE6l589BxzyR7x$iTqQz~Ii$z~ITxz>ovIHxqVGCTLyLK7IyHF7Poh z+~i|mxWmW5a335opc0P(RJ?=l9R=+J1Km4{>_5=_1#G=nD=!1XG+qXVS-cDk8+jQR zHuEwt?B-=)*bBu6co`UuLDzDF)^mgQz+hV+_KcT-;XN+{18AMt7hVR2hk}d@U(ouQ zFgJkP7rYD%JiH7He7p<{0=x_iLc9zN=OFa;+zbqs&^-v~ z>n(kudtJi085m-?85m-@85rWB>n_u{85qhz8|IK40Llii^`5O<3=F+o3=I8T3=9*w z7#JpVF)*y)VqjRs#lWzEi-BPi7X!m)E(V6JTnr35xgdKZ(AS58_DNjeVqgH_2heq* z&$t*EK5{WI{DkhGK(ZcGbimiCvT`vnaB(p(@N+RR2yihl2y-zoXmBwwXmK$x7;rH# z7;!N$7;}++Zw_poE4KS{%0LAqvV+jrpzvwnWMF9KWMF9JWMJswWMJs$WMG)U$-pp~ zlYwCcCj-MOP6mbzoD2+`pm-Z61H(>E1_sdH67+St=aAOv-r;0mxXa1Fa38u}_ZcSx z!#~hwaU?f@+y9&l3<1#fz@T-&X`BoU^_&b0pnU|Ob&Cw3vmvD+^$>_`U}s?12rf7n z7(nd{P$A3<-Lvn-&cNWy&cNW$&cKks!N8CO?!Y2hh{go1kpMMvSlAdC*w`2txY-yO zc%kd3L34s~YzzzvYzz$cYzz#JYzz!uYzz!xYzz$fYzz#A&~?=J*ccf8voSCPurn~! zvokOha4<0RaWF8z&JO_X-+2gK7yX}ufg#{G1H+-;3=Ee+=MMj6U~u@$z|jAffnm~L z28QE*85qt(G3b8U|9=@63jQ%Ll>B30DEr62@aG=`LjoToLmeL@e18JN=(-s2x|k2| z7#TjIt&agEH_(19(AxM5tPBjVSQ!}JvobJzVP#;DCE*@n|KDf{2g(JdKSNdqhA>vh z{xHz|crPmhLq976gYa(#25}tvpxQy#W`GlM3v`c}J}U!5gA4;hhYSOQwk!n0_ASEJ z13N5(tOM5j$G`yE|6%~$M+jTb2s0Z*gW9(R%nS_0%nS^r%nS_W%nS^my^*!d3=H*9 z4BF=g!fnh93?SUW%)rpa%)rnC#eK{S3=5eV7#1@#Fg#>tU;wR4{Ljq5peD<}pe4(| z5G%{TkSNQ*kOtjn3EEo;!VK~Z45IQ33=;AT46^bJ3<~lL46gDF3?A|f48HOV3<2^C z4B_$&43SVAEziIJ!m;uU3?LjY&%jVC&%n?i&%m%no`GSTJOjfKc?O1K@(c`@T1aD#z?;Tr=3!w&`q2GIUg z*uGQ-Sq27GS;&5_80a4OR9OawY*_||a#;q3N?8VmeV~B`IR=LRa=7=UYAG@>Xe%-> z7(ub0A_D^mgZ9^UC^9f4=rAzU>o71VEoWe8U(UeLy_|vJ)N%%f3(FZ8E-q(axD3Tt zmoqTjT+YA%+Q0gLIRk^iY6ga=)sX$GDXSS6(pE$EurmB+U|{q5 z72EzPhWm^Ra`zb-RPQq~Xx)c|D`-6mC}d&hqJYjs0iA~e>IQ(iU^|h{I02n)0>YrP zO+a`j69dD2CI*J5ObiS!nHU(}FflOvXJTL|VTNGPS~d^{?a>5b(3&<72A$;s!l1Qm zAPic|2Ew2-KtLF_e-?J$3+#Ls*t#`)J_ZI5zRJ(QaD$(L;kN(;qpwc`tw&>qu1N!} zOS>$?zyQJzWf&Mh_@xX3!y6d}hIcXy44-8f7{1CdFo5><{gPo|0AU6N1_o{g1_sc& z6VUoy(0UWteeyAsF2Tz0o@mG1HCgIb`Aw-Z4L;7))s;G6HYK>V3=>nz;M8jf#I4fqx7PlK&VO43O5*rTt@I0Ij9XhTi1~y3-SMmWjfD1_o>B zzQJhd`X|udK@f)RAAInif#KPI28I{^85rLEXJGjGpMe2%cN7C7BLfp7BLh1lBZDy` zBZE03BZEC7Bf|tnMus_zj0_hT85#aCGBP}5Vr2Nu#K^E<4S84Muy9m7#SX1Vr2LXD!(o>GK5`bWJtKo$WU>akzp{e4@O?kTlj{NVappv z2FACH47P6>89?WDYJXs4F!;d8F!=)`!vfG5wjUT7Hhy4a*#Ci%;UM%}z>6Ok8NPmC zWMF`v*$F$}33MhP=zK1LPmB!KpBNb&J~1+Qd}3sPoy(Q*iIE`{G`{s2an2s-d_B;a zRDZrPGBA8+WGMU2$WZ;Ak>TcdMh5ir_85LJGI0N3WDxkl$l(5iks;s*BSYj5MuvnR zj128R7#Sw~U}RYPgOOpw4@QQKKNuMpeljuy|6*iF_{GSO`-_qMbNPNVGEDl-$S~zM zBg3iRj0_)sGcx@A%?Lg_1ay7~wsSi{WiAL?FhKT(gZ77m_JD&hZ2vc?F9X7$J{1Uq z`gkA=>YIWvXfHPiN@r+QSXPpgq|j4BLMV+fNM|dk5i5;tUKR44P*IVbC6F z5QgoK{sf&jhRyG=tzcjPVIAna5NK~P2*dUhgZ2=EFl@i@Tj+c(X#NR=(f8@X=BYvZ zbwSt|x?dNxM;C-mg%}w?7_>JRgh6W&Kp3_U7qtHtghBgnK^S@eEocueXzdILgZAHo zFl_%VXwNMOgZA8lusd{}7HH2c2!rmuCg&Ofcj4$3_BO$B^v_+2)_gM#n>4b1fW=m zoq<6g+P_;0?E`}PfuQ-+SL_T7U!e1<|JWHAL^&83q@Y-ZgMk5rH8>a;Ko~Z!4qE3B zfway6)?bA6-xfg6TmbE1wS?|r1?^+Cc2*CGB6}^Le32X^{Jc4 z>{svQWMBZ{{hSO82e9me1@*B(7`cD_kduJ{)W81A3E30N%*DV!?sx-eKdl3f`*`!Y z7#NDU7#K>p7#Kif3m^>IOAErJj<4+HVqiD`-Fu6?{}wd10>Ys2m4{pm49MdvpfMIE zZUzQsZUzQY$CGTi85ls=ft!H=gwgl$#vqL+C2}(`z{Zn6V{0Hxt?{+}+zbpLe2|-g z0o(py&=?yC!^YPbc^DX&c^DX235+w^@-Q%fup@LoF}88VL>>kPB$0*^ifj0X7aC#>>DE!OOsq$jiV08xL-R?pr2y9Qy(<1H(mL1_sc+=6k#h4Cv$5 zprZ#3_!tO3=AOL!Oy_Z!_U9~ntwRT&%kgT zX&wSR{~*A?pd-M*Ut&S7#QpY7#P9@7#N~JXQT))FeC~vFcb(dFq8@~FfOk@}sOl26r=WN2(Yk|hskmmzI>$E_9cMt~k-9eaO|6LYxju?a7z>af) z8h~613=E)sKA`hp^%WQx;z8$_LC;StfsP}<&No9IPrx-!fIdF(PKSZv6ViGoZ1bk* z>$DoEG>^>y-4BFooe1)H1?YSi&|V>X(0(fDx(Cqs1Zdp_Y`q3-ei}4B0UDP8t;Yb( zQ-j7Qkk_q%)@g#)1A@j|^Oi9%6hm>{GRQe_pmm<_moYGWg01%?V!VxU1p@=~3I+z& z6$}jQD;OBKRxmK|tYBbJfu7-@y@G)OHr@eS4+vVXco=$qD`>sqrxgqg|3K^HRx&WC zLeE%ogP!RC>KlR9M1tnoL1#N`f}ZcNbtMDCu9XZ7yH_$W>|4pe09wBa8bg7tUwr~S z%MCQY4I1FoSjE7gzlwpuU=;&{@hS!elT{21p!Jq0oyuU2ekFKpmp$|eJ!AUCQrB+8Q}X&kk*ZdLf6m3*4bm-Zv$PQ zk8S^wGA|*cWY{CZ$gmHJL1*NE@Da3qWuSdx>qHqDHi$AZY=oYl zvs)B$h7RZ)or9u`47WuY89@87jKmljtU+gjL(kL!ovY)BwoePTUJML*j~01f>t#tshC9%6e;z{5{b2yDiIiew;Fe-! zFoK@_V#4tidYgA5}B@;*w~zD&^hK_I+QhLHh;x5zLufG`7=eWnJoj0|p24BJ(0#L@{kNaw7#Y4o_u(?hGcv&TZJR>R8M2pWWB`r3 zf-vY@c+fs>&>kHSMqcNHZ@&e6pS1xagT4tPgQE!}gPRE>0|RW|C3Ig9wta=j`?z8I z&_H|8Kp3=7Pd}TH0dy`sG5hu4`;Vdf#{!_|CQXK(*9h8^3p#5TzCIeqIfwYxA%oT* zqpu@IUylsmXH3LCJlI}5(E0lK=E+i^b7ipkGSC^4xaP}1^Zbs`xqi@m|FD=pyUEC4 zev6U8>J}qI?kz@!l3R=nWw#g^nr|^OwBCa3KSrOAhpiKV?Uy%)p0A9)UmkSMz}iQQ z44{4YuOBfod_dcO4>||o^%F*h576@v2(BMS+W&g~1tSA!|Fko74>h)Z)EM)EqwAYc z*EfA&WFU8*bR^A>f>u9My59r5?HRiNr~D{+XSD0km%rghA)Ag3brWb{;Ee|7aw1A1`SAA?W<@QydHouyu$` zoD2-0b6G(cc8<6sCj)~A^el1Ed@*QWQ#jiBte`VmLF+z27<5i62p{BRU;wQH101I0$R(I6~La!_Hv` zo$(67$mhI**8YRm@`EsFJwFIv;$>h!Ue^!0;{t@y&wB-(=MFl{9dy zI?o-nA3=h^dG4TdVC(o97#h&db4NcH_89bhcU=Jn1_J>G1|zg{-ff}h#73Z<6N`K< zEa+_5RsjZvHs~3#pmX3sXTyRp?EH7oIkBKM3%JgSh26WdU7UeouQ&t4F(^hqFPtMBz&ansWj|81vU$hKzUM}eTdf0inuygBS=jMXelz=ek>|795 zUBSSh23=zUT5AGYV*=VA4qAT>I>#Qg1|5V!=jVd{-dcuovw-UArgiFqlI3%Ojt!3p!)BW)%Yi2!qbn1z~LG>w?b6 zKe&p40fgVIVqka+J*xn;2IlE%1_ls*v6_JagkkGpKxgHHFzjA6(Ed@-x?$M*HuQa@ zWzh3faGlSKyw4l7&gLof{1WtYdvTqg&nUpi0K%a2d_ik;KxgQKFzj64dI3g;Mgc~K z%>s-J+XNUHKx=hC=j(&ci~wQK`4zD9eYFJ{8FZoRcwp!5gU-=t6l7%BCdkOJPmqz} zB=r1!&{@AAtS`jKUbF$lvs!`GT4hi&hmGGp5+fZ&p%FtkpYB3cL9O$W)Vh)9U_bjyP$Y4 z^nRfIB8&_NK;7O*d)WquvvzYVJi{m6@%_M0G(Y0 z!m#s+r^+%ifbewa{Rg0PioeJ)!p|u-gP!*WI-3}TL2I=@*ujL60fgOg+?N15#~5^P z0_gl=*!gO6Vdod4-ID;i3krl`_a(sYg~GL;+vyS`g9~U~=q*MDvs;V|*0&fLa&9p) zltOXKEk*_q#yFpf$nz6m`wT$mtzo;5;ms39hWAfU?_~hp#{gfah;*-`AoR>a&^mF@ z9cLg6+IIuO==Yt0>Q&Gkk)SoxpnD}@=kz5gFff4bRRi6D2Ewp%4z$J>ghBHrAPl<~ z4Ym%q7`o0DbWhrUe$Y-R%oTR*%nS^mt>&=vok9Bm;u#niKp1q+GxC0btqcqdAPl-^ z2!ug<13(zt{s7RuRmY(BIl=Y`fY!Hz@H-|31`q}v_5@n%UIyK_QO(T2fV^)5v{wVy zdcLpB3=H3y85kN_7#KkP7SR1g*w*)f?lVeYWnk!FCB9#Syw2|vD+7Z7biWj6pHwCr z14AAg1H)xD1_sdDzB_CT44{4v=za-M|K<;LuM}v%lmI&e1E_xk+OGv$#|OIi2y~|v z2!r}KAPhSX2ee)fbS@F{I=yxd28K@Pek)Kv2iCuV?IX*F-i1W3{cRsP85sURF{sZ2 z!k~T+CF}8E_cnpn<>BiuVcY))y7Ph_`ybyU?SBOIwa8hY2kM`J`eVrJ@{s#w$m{b! z_iTXH=jC%VFcd=ZK<I2epA24XG9_ap$RwCEyf%=o6^?9JaBU$^Mv8>ZW z-^)W&Bi4eOk57ZY0VNhQbxgQEzrw8hX zBCpc}-9rLerw3Y#4%*)i>W>ESF)&2(F))y_J`dY^JXk*#+qyi^o_|>XR)L>^K@)ms z8R+gZb1e6kp`Q-`S|<;>zYO`D09Zd4v}xE=fPo=EfPn$jKPBdTgMnOE2kSq>?zIJ- zW6>|nz<|EKj!}exAxDgXAzzGv0d!tRqZk9jEHMTK(0aR9$me}P*W7{D+ky5CfY#Z8 z?rT9`X9v5#1+?A{bYI(baRvqu2Cc0F-Q5N|Zv@nCfZZ>RzOD}2Iy&@oh}_W5FT%B6 z4tDMnq4U&0cQAr5sDHi}dVdV)+#pat9kvcGQksDQxnB-CPY-tPn1c)h18f}|=pH%P zeo^H0Y@qWkko(`@{bsV%U#GT5o`GQ>6dyv`pLs@}f#Cw$KFtU63=D7N85ofFY5tLC zV6cbYV-cdjzyQLaJ2^oZbSEbW!`7{V#skprvjClwMCcw1(7nmX_gH}Tgn}^WJ_`^A z?W?rJa(@MAZzTxB_E&<=8GE9`!0;Nn4vs+=`}rZr>)=3VmVw4CsBxYPY}|tt={_^i zJ+rWTJ1q16fyQ1y_Y{G~T|oB+g6;_vU(UcFzZ|k36?9i1G5b+L_ZWf3 zU_cnO{;e2#uMucG=E4dF2GII9(74R^6$}i&q4@6#1_sc$4D4LM1n4<4pmQ2Q`-5QX z++gRofY!Hx?l%IhXG31U20GWJY!w4T71DW$cULhmfX;&i-DmU(I@UtU`ZUn#OMi1}zfSr)`9uI}rPafg$A&1B2~f28IB%^9MlZ4*dMfzyRw< z!N!Y>|1mI_{9|D7{l~!I|Br#85Q>ZcF))B|`9B5*5U%{kzyQM4{}>oRxb`0d0|?hc z&o4l}7YDSj*#18Q0|txr~F60d{UO`nomH z`IMrZj0~`IJz?wB_Hi;Y><67YOUC(;pm9aey0scEMh4Ki%yYOH89?jTj&m_GoP>@y zGCOiN4+pG>!>7hu2<^k--Ie9xrIU8E7mM zboMg{gT^zDAdO>!)|%ZCWMsGl#mMJ9!^SZ|_m&Z}o@|8>BLiqX8EC&FY#kYBoD+1< z8L8(vgU%krw{8qHHVVS9^<(Jcq@eX=ULuSP0V0eHkzhx=T$lw4w z{~UUcDrnu-OX%6>gw}1L-*W&O3&plR3wAFXXl>SGr1e>#d)Q#(prEx_pz+SRQj82B z3}1JJwB8DKKO1PR73jSBNEt?kB3$R+V_9E?>;5*-I4Gg@R#7*g&aZ`?TMJr8^+BJJ0d(#$XdM-3OciwhETMH&==Wj3)=|Ok ztp%;4GRtOUaDd)B4m!(2XD1g>bfyQt@K<}YL zzUKh>zF2y#qrx|iOw4_|@bTl3de0cC(`F=$;D=spzCIxNtAG{mmIg58r0T7QMS?rQY>D9F8PuyYkCUN?j^zcGu6fdSX~ zL7=$;5C+W=fH1l91fYHXgysoAa|QU$bwZvmAT&>aKK>6H_Xq9k2aWr~&P9Wb|AXcL zVEg((`}yCqF);jMV_-m^2LR0l;M(7Rik*Q0w!a^FegHHtfN!5aXubfnzaQ6p0c?Li z3nv2uXn#LwUq1+g_VR-;Y(IY?Cj$d$KR>DGA z$F)BmG|mpf#E!Fr_QiwnU8M6vLHpi8=Z1a)-SLfO936STJ7^3YghAuzpndJ2adgnW zcG&nivE$~Tad6mvbw$+z{kLFgpYv%v_~C;;pfYO z&amZYU~oX&hYs6!4jRYSg6<;+?Ij0|XNRKgCkO2*PZeNbNE2XS$V1y-4%$x+!h?PM zyFr+Nfzt7A&^~j}csFQ&IcU5a-@bCt7&i!m#<@Wl`5bP1`@_-C;YT0G28~~X_IrcI zuS2957(ipxAj~SwzyR8}?Fzj&qFI`OVSzLQ185)idT9oRUC{m5pz&#Cr28Su z_GP1wOM~`lb3ylMgT|*p`?O)>(=96*7(n~8LF3aP3>u$??ZbY*l7ZnD^t^GXN4B8isKHkhMz{mjF2aUe(xmkdbVZ8t&18lq*wyzm9 zz6`>kJKsPUG|mj#*9;nC2H|EwMuts-j0^__85uz1&7d)65XLsntWDy+W!N|~Xx}oa zCW6*dpX#X&1oEWxG zSRcA47&J}{8XpGj0|t!|gD~t~Oyu!kZ3#vO(0K5DBFBS4`*=b7bwSusl92&~k@x9d zkYr>4jRAu&XdD=X(f8?s_UM8zXgnB%Vf%7HW5OVeZCqGShLHg@CJe%`@nAyxYq9OC z?S$^31&!~*_RoU$&4Mrs(*9Xv=v{W8eX_)k=Mvf%3meCUjo*UCZ9)5AVdJ)h#%n?Q zT|pRmzbkCK7Bpr%(Brg&`JC1R*BBWNU1Mapb&ZkX&NW7cU)LBJ{#;{Z5V_9CAa2=n}J~t6wl*kV3^O%z_6H` zfnf3aKAM4Hbba*b`e1#J!fFapsY}E*jT*=-))FhekiQb99|EBZE3C zBLnPw&XF*l%*@5ez{l>WSm(Y>0D0Oc=PBwXGVsf zLW~Tf>zo-G+{76f7)IAQGepWVGGH73?vrI?7+vSg$N(ERA6@6n$gu7TBg4)sj10S> zc<&WPhQn7F8IE3IWMI9@$iRM;k%8+fBLnYMMh20qj0|E|85v}*GBU_rWn{3t%E(}S zm65^jDkFo#RYnGvtBee8Q0#S;ks;tJBSX+tMuw%=7#UVvV`QMkIQ+Tmj12#;GcquY zu5)HkddJA10>$d@7#ToV^Bp6D(K|*4lXr{^=IJH2CM0Acrcj0_;` z`HqnRguUM}GJvq}J4OcocZ>{y?-&_^-Z3(SKymmxMg|a$e8 z$G>A_0O7=Uj0{Qd7#UKaIQ<gYfA3X9k8I9tMU!9tMU9JPZtzco-N~ z@Gvl};$dLe%)`L2m4|_0Cl3PyXzeoy52p3cp!>QgS^tdhp03gL&kPKr!VC-&!VC;i z!VCz^U_QH`#DW?-13z`!uN{+WTn)PR8j{X7oPJyf(BZysI$%)l_Z{u%dq9-#4S z^zmtI>zV0s?#AdkW<~}Z4n_uh4n_vhy-?IRUt@F~Gb00N4KoOju486o7+uHA$dE3} z$dDn+$dDz=$S}H&nUUe|dPatS>lqmsHZU?!^WL7(b-x3_Xkt41J6Y46_&+80IiCFsx)` zU|7S*z_62%fng6L1H)cM28R7me1wsKL4k>ZL5Ych!I+7G!HS82A%uy6A&iNEA)JYU zArgwCnHU&im>3umm>3umnHU(7p*WR^fgz2Ffgyv5fgy*9fgvA?3z--gikKJ}N};%x ziGcxx8<-dvK)8vCfuWg+fuWs=fuVYpafyiIh6H^ z3=GYR3=A!b3=G>;7#LovFff45r7X~4U?|dIU?|pMU?|mLU?|gJV5rk!V0a8YuacPk z!Ju;-bC)qNG%RCan7s^gZlnHk1_q<$3=H|p85k;;GcdF-XJ7!G{!-X}F8Fy*FBus?`$jN#c5hDW_gRUwBVKYVs1`r07cOY!d$iM)?wu}r6AZ*Xb zzyQLIj0_AQ?99l(0K%?}3=AOb&d9(3!k&x_3|@>33_eio$H>3{!U2p73?LlD$iM)? zA&d+RARNZXzyQJ#j0_AQ9L31M0Kzeh3=AL~$H>3{!U>EF3?Q7u$iM)?DU1vZAe_d? zzyQJ-j0_AQoW;n%0Kz$p3=AL)I?@Y-3m6$dTfi8K7#YC0gpq*(gv%Hi7(lp!k%6I- zk%6Haifb7e7(lq5k%0k(8yOiGniv@vTA;X%k%6I|k%6I;k%6HbT0cx=WMG)g$iOg# zk%3_vBLl+>Xnir4k%3`8BLl+%Mh1pOP`reZfdPb zGBPl1W@KR43dP$Q85njz>m5+t1FCP1GBPk6XJlYF!N|aHijjfgG$RAUStvfw$iM)? z7a18CK=?8v0|N+OWn^FgVbIht2;XF6U;yFUj0_AQe2IW0|N+yuJ{AtSBwk{ApC}rfdPcyF*1O*U@?4TWMKHj$iVOgioY>3F#KR-VE6^a ze;64UK=>ac0|N*%Ffo9tdIlyY1~6t}VqgGaHYNrJ5awWFU;tq*CI$u&=3!!B0AW5R z1_lroU}9hZVId|41`rluVqgGaF(w8E5SCzKU;tq$CI$u&mSJLG0AV>M1_lrY)!iTr zs=q;4g^7Uygw>cB7(iHqiGcxxwU`(fKv;)~fdPc|m>3v9*no+F0fdd17#KhpRR3Eu zF)-LNF)-MH$`>ehW@2D)V`5C#A_yaQo!$)QYhA&9%2hiOWKbaXAenHz2`Ya3#2~eEG!oUE+DJ%>OAe_d+ zzyQJ-EDQ`FoW;Vx0Kz#e3=ANg$HKq>!UZf03?N*@!oUE+B`gdKAY8`6zyQJ(EDQ`F zT*bn`0Kzpa3=AM#$HKq>!VN483?K|@&wy|b3j+fP_pvZAfbaws1_ltG#KOP;!c$ln z7(jR$3j+fP&tPF-0O46I3=AMVhlPOwgy*p^Fo5s^76t|oUc|z{0K!XH7#Ki!84Cjg z2(MsaU;yD&EDQ`FyoQB=0fg7FFff4d1{MYe5Z=VXzyQKqSQr>UcpD1?0|@V6VPF8^ zT`UX?AiRf#fdPc~u`n=z@BtPEhJ!2&42PlkC<_Av2p?x*U;yEhEDQ`Fe42%U0ff)8 zFff4d1r`Pd5Wd91zyQKmSQr>U_!VPF8^TPzF=Abf{~fdPc?u`n=z@BI80|N-ZU}0bY;a4mS3?Tf5g@FNt-?1<-fba(v1_luR#KOP; z!e3Yz7(n{+F))B|oE!rK2q(xfFo1B990LOg zr^qodfN+`|0|N+W$T2X0aF!ec0|@8HF))B|o*V-M2p7mPFo1B890LOgm&h?NfN+@{ z0|N+G$T2X0aFrYb0|?j1F))B|og4!L2sg+vFo1BA90LOgx5zOtfN+}}0|N+m$T2X0 zaF-kd0|@uXF))B|pBw`N2v3k>U;yDsatsV0JVlOy0fcACF)*O_zd(JkMRE)bAiPA5 zfdPb<$uTg1@CrEw1`u8)$G`x>YvdRhKzN-T0|N+ekYiu~;Z1T33?RHkj)4J$x5+Uu zfbb4E1_lt`CC9)3!h7Tx7(jTR90LOgACO~U0O3P&3=ANAM2>+0gpbKFFo5t0IR*w0 zJ|)M%0K#YF7#KkKoE!rK2w#w6U;yDuatsV0d_|6d0feu~F))De4LJq|5WXeHzyQK` zZ{!#lK=_>; z0|N+ukYiu~;ZJf53?TePj)4J$zsWH$fbb7F1_luRCC9)3!hhr#7(n=+90LOgbI3C= z@XIqWNXRoV$jUP?Xvi}#=*u%OSb*+gkY`}gzBtBtUVJ4g*7q4g*6v z6ldx%Fo1Bj4g&)S=jt#p!1~FczA~tv48ov(a)S;7LlYFY=rAyVaGMST0|0kPFo1BM4g&)SPtajt0O3hG3=AMVMTda_gs15+Fo5t39R>yvo~6UU0K#*0 z7#Ki!o(=;82rtlKU;yDoIt&aTyhMkA0fd+7Fff4d3LORp5MHIjzyQK)bQl;wc%2Rd z0|;->VPF8^O*#w=AiPC~fdPcK=`b*W@D3dY1`yt*!@vN-dvq8WKzN@H0|N*j&|zQz z;X^tM3?O_&hk*fvkLfTlfba<&1_ls5rNh7g!e?|C7(n=(4g&)SU(jJ-0O3nI3=ANA zMTda_gsyvzNN#!0K#{47#KkKo(=;82tUwaU;yDqIt&aT47y(fgx~5g zFo5tU9R>yv28~aEu+uUI1`u{x#=ro=Zp#=LK-gm$0|N+qEn{E+VV`9T3?S^cjDZ1! z1C}u`fN;<<1_lrgS;oKs!ePr87(h5;83O|dM=fJu0O6Qr3=AL~w~T=SgcFuAFo1B< zG6n_^PFcpl0K#d@7#Kh}V;KVj2xl#0U;yEqWef};3>r@X;ihE_3?SUHjDZ1!+m0;ltGb^0gROy85lrVm63q~ zgw+`t7(iH)k%0k(wHX;0KvZNF*1O$2O|RmXzb0Kk%0k(eHj@T zK-iy=fdPaA85tNrIGB-v0fa*t85lq~oRNV6gd-Ul7(h6hk%0k(V;LD3KscU}fdPaQ z85tNrIGK@w0fbW-85lq~osoe7gfkf#7(h6ikpXmc6GJW|0~qHsGBAK}AtM6=2p2Ol zFo19=BLf2nmoqXjfN&Kf0|N-xFfuTJa2+E9LjxlNLo*b&GBPlLa0ep;0|FkC76t|op3cI+0Kzj_7#Ki!HVXp-2+w68WVPF8^^(+hwAiR-fbcOE1_ls5 z!NR}*!lzgm7(n<83j+fPpJQQQIM2esa1n|xvoJ7#@KqKD1`xi^!oUE+H(3}MK=?Kb z0|N-(Wno|d;rlEM3?TfFg@FNtAG0tpfbdfm1_ls*&ceU|!Y^4E7(n(|Fo5t^76t|o{?5X{0Kz|67#KkKHwyy;2>)eaU;yF&EDQ`F z%*e{X0K&|y3=AO5%F4h1!tAUJ3?R(O%D@1^+^h@?Ak53kzyQMhtPBhwEXc~h0K&qo z3=AMF%F4h1!s4t93?MAY%D@1^(yR;&AS}zuzyQMXtPBhwtjNm10K&?w3=ANw%F4h1 z!s@IH3?Qt@%D@1^+N=x=Ags&EzyQMftPBhw44W56AEyJ&X@f9mP8)>~ahYAj~PpzyQMBatsV0%qz#h0K)uo3=AMFD96A6!oqS43?M8D znirR2U=W95NjU}v5SEr>U;trRIR*w0mX~8-0AWQr1_lsTmSbQ5VO2Q>1`t-4V_*Pb zO*sYz5Z0DsU;trVIR*w0)|X>o0AWKp1_lr|mSbQ5VN*E<1`sxvV_*PbOF0Gx5Vn?M zU;trTIR*w0wwGgI0AWWt1_lszmSbQ5VOKc@1`u|aV_*PbPdNq#5cZa1U;trXIR*w0 z_LpN|0O3G61_lrgmSbQ5;ZQjS1`rOHV_*Q`NI3=u5RR5(U;yD*IR*w0j+bL#0O3SA z1_lsLmSbQ5;Z!*W1`tk{V_*Q`OgRPy5YCokU;yDIR*w0?w4a=0O5&p3=AMVS&o4Lgr`Es=@!Z{Fo5u4IR*w0 zUMk1H0K&`V7#Ki!r5pnT2(Ol7U;yE@atsV0yk3rh0faZoF))DeW;q515Z)@szyQMA zbi;AiQ6WfdPaM$}up2@L@Ry1`s|f$G`x>$K@CpK=`B_ z0|N-3mSbQ5;j?lK3?O`7j)4J$FUm16fbeBG1_ltmD#yS8!q?>(7(n=@90LOg->fFcio$Fw{cF z;o9XH7$(RwFie+cU|1l}z_47Nfnfu5Ty7h5Y!2Ift)MYFo72YaHkFf0|0tS zFo5tx9R>yvo~*;b0K!vs7#Ki!x()*a2+!1EU;yFSIt&aTJXeQ-0fgu4Fff4dLLCMM z5MHdqzyQKabr={xc)1P(0|>9wVPF8^)jA9eAiP$GfdPcq>o72Y@J1a51`yt?!@vN- zTXh&1KzO?j0|N-})L~!%;oUk63?RH$hk*fv_vA z4g&)SpVVPs0O8X*3=ANAR)>KBgwN|RFo5ty9R>yvzO2K*0K!*w7#KkKx()*a2;bCU zU;yFUIt&aTd{>8o0fg`CFff4dLmdVN5C*Ls0^v703=AL)T0;cFp9$Q5>$r@80fe2G zF))Cz>oNug5O!b2zyQLY%NQ6y*n1fR0|@&rV_*Pb|78peARM@ifdPbrmoYGaaOg4y z1`rNk#=ro=k;@nuKsb6C0|N-hE@NN-;rL|?3?Q7ijDZ1!lb10tfN<(E1_lsLU&g=y z!kNn$7(h6C83O|dgVsEOaN{xt1`uvu#=ro=t;-k~K)8Jw0|N+mE@NN-;qGM&3?SUQ zjDZ1!`PLV5Vl>;zyQMb%NZCz*l{@n0|+}WXJ7zf*X0ZhAnd-JfdPa)moqScu=jEX1`zgL z&cFb|{>vE{KsazY0|N*LgVu5_XJ810;_&4R3?Ll2oPhy^qn9%z6YyfNV$1`uAkoPhy^ zw=QR30O9S+85lr#=W+%H5Z=9;r+`Q7(n>oas~zvKD?ZP0fbL1XJ7!~ zQ_yvE7nd_IfbjL@3=AL)T1yAQptW=$OlUnF?4AM*=sLO^EQ}1lSr{3nvobO)WMyPn z%*x2Hk(H5QGblZdsrD64)8ECeBxnbI3U5u06OP9A&-%vK97+>329v% zWOR;!p%}DQm4Shwih+RvG&TpqqvLa<<8z=fI?&i02!qDvKo~SO2g0DSIS>Yo&4Dnz z#^*q5;y`0_pfz!zu{qG1xWO_m_W`;lZggC3bX*QJCI`ZxF*y(hjmd#9XiN@-L1S_t z3>uRIVbGWy2!qDtKo~S82g0B+IS?Klmm3|I8y%N}jLA_lE_XqIf#H_`1H)hFzLe2% zy3ujE(Q!J+7~SYN9cklqpmlPv@i@?0IS|G*E(cmW2g1aT&wu>YVbB;I2!qDxKo~Se2g0B+IuHhp(Sa~%j1GiBV{{-4 z8lwYY&=?&EgU0AU7&Jx)!k{ra5C)CWfiP%{4unBtbRY~GqXS{k7##?M#^^v8G)4!) zpfNfS2942yFldYpgh69;APgF#17Xk@9SDQQ=s*}WMhC*6F**u>YVbB;I2!qDxKo~Se2g0B+IuHhp(Sa~%j1GiBV{{-48lwYY&=?&EgU0AU7&Jx) z!k{ra5C)CWfiP%{4unBtbRY~GqXS{k7##?M#^^v8G)4!)pfNfS2942yFldYpgh69; zAPgF#17Xk@9SDQQ=sm|7_>(fgh6{$K^U}06@)>1R6&^7eX5}SsUUoV z#`{u1`%ys{v=X@7_|2kgh6{xK^V066of&0PeB;8_Y{Oddrv_) zVubELMLzdubl)jt&*^a3ciJJ(z|b$xz%WCefnmNp1H%gFKGYr1{ii2z>^uE2y5Dqk zzbSOD>F9n_$X?UY{icw;rlb2!A$v^+a=$6;95`C;D+LXIfiUO{Ep-M41`yU`U|;}Y zD+UGz5RPMDU;yC+1_lNYUctb?0K#h-7#Ki!Jp%&+2ybCvU;yFm3=9lA7#J8ffX-)R zW?(2`W?(2~W?-m-;udBGhE`?4WQE{(Rt5$Tp2*6;u$PsAVLucf zWMyDD#LB>Mgq4BeC@TZQaVY-6%D@1^3~USxtZWPn0&ENnQfv$iGEnTm#=ro=-fRpE z@oWqX1yFpAje+4V8w10AHU@?lYzz#q*ccezvN165vqP{TI|Bm<8?ZAlc(F4uEMsS2 z*uc)f@S2^0;VU}>!!IcQ%g(?6!eSf@47wZ)43QiR4AC463>{EBfrEizA_oJ*3=Rf{ z`5X)kCpj1xm^c|2tf1J2lYs$*9XS~oJUAH`e4#jylYt?elYt?LlYt?blYyZSiW@l@ z7(jRrCj$crALL|UIKs)ma2ARmaWXJG=44>_2gQtB3=B+M3=B3|XdLE(V4@P<)V!f#E0@1H*AH28I({3=C(X z_z@Qa!(%Q6hF@F^4F9d0fgc?m$H&015sJ6)F)-}mV_-N2#V7a}7|!uA zFi7w-Fi7$ z1_ons28JMU28Lj928JSW28LpB28J!-3=CVv85p*UGcfEGXJ9x6#V5rX7%q!5FkFY? zyW$KCAj~bnz`!rTz~BtUtr83jZ4wL&E1_6Hl7T@7_223 z7{sL*7$l?^7^I;%Op1X4gd?OF7~-TD7!sg3Ns561gj1y$7;>Z-7>cDB7;2;#80w*T zxfBBf2yc*LU^pkmz`!8Qz`!icz+eK!X3`7{R?-X%Hc;#&&AQksF`Efl|(W?=Xz&A^}| z!@yuH!@yuB!@yuJ!@y7>!@y80!@zJshJoRd3C{|m^z@WR5fx&$x z14H0S28M=}3=B;x85lN0@wSx=3_DjcFzi{$z_52E1H*YJe!7x@;n_+C2F+Cr40@{= z7z|f2Fc__3U@%?9zyP|}+IbZN0|@)9VqgH_f>jI*AY8MGfdPa!tYTmQ;Z3U;7`Cip zVA#Hjfnmog28MmB7#Q}iVqiE3#dlXRFo5uzRSXPoS1~YrUd6!hWfcR%Hzs6H3LKTY6ga?Ee`UK$!180|N+4{byhRVY~kf3?S_ApMe2{3;r`O zfbhKk3=H%CGcY`c;-CK+7=Hf;?e%A5_{+%1@PG+|%a|D%s+buW8rT^bTG<&H+SwTy zHn1}?Y+`3**u~Dsz{thOfPT+0KNlkd`n|?axfmHh_ZO@1GBSYfA%@*M{FjfB;XfZE zgBw31LjXS`LlZwELn}Wc1ET;0TL>^RxCt;a6hLvY03$<*03$=a03$=A03*X@0Y-*x z0*nkh1sEB22{1D3h2ld3j0_-rR)CQKgh7XTFbOg;s0%VOXbUnj=n672mfD| z8^jnHwu&(_Y=>f5aYhDtaYhCuaYhDJaYhDpaYhDhaYhDx2}TBU2}TA>=zYP~l8g*C zl8g*?Q0y$p$N<7uBpDg5OENOtl4NAKEy>960E!u<7#X;v7#WPE7#S?27#Xak7#ZxO z7#ZB5I8cg_Axw&qAySHwAzF%&p-YO9VVV>p!we}#hM7`~3Gqs47M_i z4E9hwNrsVOxeO!2Dj7zG4Kj=jn`9UnHp?(FY?WbT*e1isU?|JTU?$7RU8oXyDKpAW(P z`HT$n^BEZ)xuj?5Zey>N|+c0+zBg4Esj0_9*FfuIO13AQ3_dFwm z!FfgoxATk)=@%IpGA}YR6klXyXu8PA(0Y-Pq5C2u!>Wsn3~MhkGB{mgWN-l;I6~^Z zuMZd**d8!4a6DjSka)nzApL-mLGb}2gYpAL29*bl3~CP;8MGcSG8jC7+=I~nfRO=& z4IVNw*gj-rSoa8m-#lVuc>joz;q?3wIFhS1BcV%W^0L^8B&fNgb zVS>)y0QK)`p=a(An$Lutw+lKS12m@yI)?&umMm!hKkOXO1Xc!y4kFIS2emy(IUk=v zmVsfvECU1Rj89Rd^Z!8mj6wT~VdwtA_7~$j{|~m`7`BcP*ZRdX@(c{f>lSZA_Z7cE z+gA))uZXLCMCd*_Nks+*Sw#j06(|OsAqc`6iVO@O3_4FxSCN51Uy*^qM3I5P5{hjU z85ryp85mp@85lej85lroB|#W;-XLgSGw7^A(7tBSd4sTX_Meb>p8j0udHSIJh~3K> z82X^+=Y#h8fzI9n?en|5oPhy^uR_nw2eqp}`}{!ds$a_)7z|c3Fhs3pV2FXXEeM^< z1>64z8b_hYIr{97HbOIwb^`32FW7!U(0N~={e+tR~Q+VU14Ncd4-W-&6S~l?>6Z0CeHhe4BYn_8RYIWGN|5XWYD^g zC^s3P`zsATGBS96WMl~V$jFfSk&&U`BO^m6=+JbG(vN|mi-Cbb8;Wfh7#QrJV^*MX zs~QFd1`w`eU|;~@H4F?4AiR-*fdPcCGcYiK@OK6V1`r0F6LblBj|b>359D*XzcDi~ zu(2^PaIi5jh$%p@kpcsQi2?(I0~EU`Fff2{kOBh(2q!}OKUE4040Q?&3|$Hg41Ed= z450qb9R&u4hfw@ffq~(f0t3Tq1qO!qWZWMK%Hx`f3=BGo3=FV*Zm7t>V64c%V4=vs z0Ltf}{OzsCzyQJ%6d4$nD>5*wRAgXSr^vvtL6L!BBj`R2MFxiLiVO^U6d4$9D>5+L zh2kfQ3=B^d85q7OGBEsCVqoAX z5Wb_#!0<85s7cGB6xeWneg_%D`}3m4V@uDg(o5RR)Ih zstgR5RT&r_LGcq+1_ls*uFAmhMwNl#hbjZZe^mwsRy76&HZ=wY2Pk$@V_*Q`1T_YR zWHkncTr~!Ud^HA!1L_P6|3L$snhXs8wHO!-v>6y&v>6!OwHX+Ev>6yQe?xHMKL&=h ze+P|W?GfdPbN{xdMh{byjXfnreK0)%7!GcbT~+F)}E=V;q_H!oOo=`1lUAC=^l9 zurn|)C_wQ71_lNYZV+Q&0AY{>mjVNWJ`~3*Fff2Hg8>5r7=zAcWME*>RDfWRsUXue z6c`vl7{up*nhml8WHtzc%m!hY`5?6*Gw|61G7B39jmLwAE$iT2(k%8f?A_Kz(MFxh8iVO^wq4=sI1H)%U1_lOY1_pLz z1_mBw1_pU$1_mW%1_ljf1_o_q28L>728LQ?28LP63=CV885nLu%VISZ1_lQe1_mz` z28KD%b88q>85p*yGBE5=Wneg<%D`|)m4V^ADgy(98UsU~8UsUt8UsVRIs?NLbq0q0 zpz>6Mf#JUfr1I6*W?*pDW?*pBW?=BuW?(4RW?(4OW?-1A&A>2Sn}OlKHUq;`9R`M1 zIt&Z}dJGJKdJGH=dJGIR^%xjt>oG8V22DKaGca7$XJGiC&%p3opMinJ0D^@K7#M^N z7#I|w*vx=|!Q6m>!Onnz!QOy@VS*t8!$d;{hG~Wj4D$^c7!DXRFg!M7U|=v}V30Fn zV9+vRU~o5LUqsK7_?U~Fqo}iU@%|7z+ef*<*OJNDpxTuIQ(T`@c+xea2|^P{$*hJ|CfQ`$$tob z@t=VKgx~&WV0ibRf#DBmtm!`kgE=E3gFPc7LnR|4Lnk96Lk}Y(Lmwj}!vsb~hB=Ik z3=5$60wW{CA4W!oat=m@3Jykw6I>8%FV4sS!dK-P8Scn4GCY)LWcVo0$Y7Jr$Y7t% z$lwaabM`PYfN;QhMux+n3vVtkGJFLcym^t4LG2hLnqp3|SW$8FDT%GBjUg zWN5j_$k20UC` zMut1z7#ZGtV`TX7jgjFG=+d3Y-0AWy@6NJwxGBBK1WMH@i#a9#= z7(f`-&cxQf+^o#N0BTP@1hp}t?MP4?5`^g1I02>V}WWB}p(>x>K_+fIr2Y_S4j+U;bNC<(n!5*K(A+%;gW3upe29sG;V2UW z!zCsLhWktm3{ROD7+y0mFuaB0_e=~7|3P;yLg)8k^ZKxPZ&K%zK=;DW0kxTyGcbrP zXJAl(&a-qv=U1XvGcbT~7IZ!VHeUd0gM%<=j30zyS_=M z)zu&js;fa5R9AyAsICTKP+bkept>4_L3K3xVE4D85kHqU04u~W?*0d;c5m31`xL5XJ7zf8-4}`5S}f@zyQKh3JeS&ET_Q0 z0K%>c3=AM#tH8hj!o3O%3?K{|Ck0_HWd;Ti)>LL-0O1UE1_lt$QfFWQ;T&}a1`y6u zXJ7!~0(Axk5H3<@U;yC~bp{3yKB~^Z0K(7I85ltLg*pQR2)|NiU;yDa>I@7Z{7#*L z0fd`185lsgRg-}MgxfV47(lpFlYs$*yEPdYK)6?vfdPd3H5nK{c%mi)0|-ynWMBZ{ zshSK7AUs`@fdPbXXfiN>@GVUS1`z(E$-n@@N_q?oAgrRtzyQK(dJGI8tf9xi0K!gs z3=AL~s>i?p!r^)h3?Lk-$G`x>(RvIFAk1OFzyQKr1`G@!%wxd70K$9*3=AMFV8Flt z!XgF?3?M9Kz`y{)5(W$mAS`9TzyQLs1`G@!Z2y;m0ffc>F))Cz=|2Vr5H|nEzyQLQ z{}>oR*!mv>0|?vxV_*Pb`+p1!Anf>$fdPb_|1mItu=_s-1`v+?$G`x>(f=42Ksfdv z0|N+i{AXYQVe9`43?Ll+pMe2{i5MkFff4dLIwr~5MB;hqQtO`fq?!QT3=ANAfuDil3O@tGO@0Q3Tl@?RUIGjZ{sIgPzo9rmn1LZf zn1LZr41!;aF)+LpV_+~9XJ9ZBXJEJ@&cJX@oPptnI0M5iaRvqk2?hpM2?hps2?ho( z2?hoiNd^X2Nd^WvDFz04DF%iGQVa~sq!<`hNHH+1m11Csl4f8?kY-@0m1bb5lV)J} zBhA3@Uz&lzT84qaUWS38PKJS@UWS3;fD8k}aTx}N%TNrOUlLbfU{HXrr!xTcF%%dW ztQ8m->=YOn92FQCoD~=t+!YuY0u>k-f}uE6fq@}Tfq~(t4gM<~|=`k>H=rJ&GLouHo1A~|z1A~Mf1B0X<1A{aa%jq#N$m=mMXz4L9 z=;<*q80axDSn4q_*yu4Z*y}McI6|?r9s`5F9s@&=9s@&&9s>iT0RscG0Rw|A6#q70 zU;yENOBfjbFJWNdUBetbF))Der)3Nb-$Co}RxmJ>uV7#}w}OG;{0at! zA1fFbeyw0&_yfgyD;XH{S28ffL-E0t3=C&iGBDg*$-r=bB?CjuDh7u5RSXRGRxvQ# zU&X-iVHE?z$5jjruUA8`z&{2Cv40EsKxcy^b@chTX;Pa1xAppAW zEaV>pL-;=ihWLLB44^q8*!)n|KL&>Ee+&$a{}~vV|1&VKLf4~l{byhRVV?gC3?K|z zo5l}an40fbZjGccrr=8YH`8JHLu8Rj!X@C9Z@1`y6? zWn=*1a1KTW5SHg;WB_4%PDTb04&Y*Bh~Q#msE6VYT#O9gxEL8MxfvPkxfvN|ax*f_ z;bvqArMi!d_yi!d@o zi7+xmi!d_8Lh&&XMg|Z*D9XriU6hf*QH+tnS&We(L5z_hM~snSCluR=GcwqTGcs69 zK(LD>BZHeHBf}#owwGdLaFb$Wm?g!?Fh`1!VV)Et!y+ljB~_f#j0}!4j0~*c3=G^13=FHG z7_?p%gryZ27-SR}804YYQh|X1gqidh7(kdskAVS%IrSJAK$u65fdPbN^cWaGSV510 z0fa&I2Nwea1E>xGVbEG!5SCS7U;tq&1qKEXX4Ye10AW@=1_lu3(qmu%VO~831`w9j zV_*PbMLh-v5C)kG!#<$-D=3a-U|;~@S_TFN5Vq!LU;trTeg*~*o+HM<0K#qx3=AL) zn)3!>(4032b1E}1fG}w87=*Qy85lq~Q=NeUgtOHd7(h5zoq+*_^VJy`K)6tyfdPbz z)fpH-xKy2i0fdjKGcbVgb9Dv=5Pqr7zyQLp)fpH-_^mnv0|>uYXJ7!~7EJ~Q5N^|C zU;yC`O$G)K?$Tsn0O1}@1_luB(_~-(;R%`y3?Mv7lYs$*r)V-TfbcX;1_ltGp~=7i z!Z$S;7(n>8CIbTq|J7t*0AXc41_lsT)ni})VRbzQ1`yWNV_*Q`Fg*qa5RTAeU;yDL zJq894j?rUa0AWr81_lu3Heg@?VO|3U1`y^qU|;}YK?4Q`5EcckZ8l(F5Qkz(0|o{V zmNsBu0AV=;1_pW1e92!12D`ru3=;n!*z6wz0|;CEV_*PbtA7j(AZ+uGfdPc={xL9s zu){wF1`u}o$G`x>F8>%9K-l9S0|N+0{bOJN;h2963?Ll$kAVS%IsY>-fUxa<1_lt0 z{m;Mv!U_Kw7(h7rKLY~@!_pcyT9|=>0aSH?a2G2B0|@V9Wnchd1`!4Z5N4BLU;tqO z1qKFD1qKFjJqVW4V_*PbD?J7VYdr=A2Plr!V_*Pb83P6e5H>JiU;yC-1`G@!Z1|6X z!RQ|YLj)8j|6^bPVc!1?3?RIgkC6d{LGEQ^U|@)cVteR1kPrn11`sy>$G~9nkAcDW z9|MCws4e-Qfx#YBzJoMEu?GVK!zKm>hRqBN3_GEC4+8_kJ_ZJcFPsbvKRFo~intjV z%DEXBK5#QIeBx$csNi8>sN-Q^h~Q;lh~s5oDBxvasNiK_(BfxcFy?1q$P{K^s1ash z_#n=}@DtQ_kz`=FCCR{0pa8)o3JeUD3JeSl3JeUL3JeSZiVO_#iVO^$P@JH`z%W~d zf#H=31H*q628J?q28PM%3=DsDAb64?1H)891_lKq1_n(d1_lo!1_pm428KW*28MVe z28ISB28K=}28NAB3=I2?7#IvzFff>|0Nq8%$Y9LK$WY42$WXz^$k4^e$k5Hm$ncPf zk>NKJBZC4nBZD$CBSQoSBSSm~BSR$zBSSq0Bg1kIMuznqj10dy7#aR^Ffxd7GBQYW zGBWJpWMtUO$;fbklab*(CnLipPDY0RoQw<(T#O7JT#O90T#O8LT#O8JxfmJdb1^c! z=3-=c52_=%85!ca85t_L85!!i85ve`Gcv5_W@Pxq!^rTThmj$HkCCB{kC8!^pOHb0 zpOGPupOGPipON7xKO@6weny5M0Y-*Y0Y-+0f{YAb1Q{8uKy{QjBf~2RMutxkj0{mS zj0`z4j0^|l85yp~GcrVHGcqJ*Gcq*fF)~ccV`MmRiIL&*B}Rq^mlzp7Ut(lPxXj2< zahZ|f_zOmc^Dh_~3g0j?tbW7Du=Wij!}>Rj3>)7tGHiLn$iVoPkwNz@BZK~1Mh08Z zg?1kq8F+B4i-IOE(6%XtcVY|-AH*0KK&Lq0bmpFD%+lQbR%hI}4GetE{j!0;X^-=snF%`;vGhWES- z3;}!$43T^c3>Wwq7;f@0FepItlY;;QgC}TRfdB);OaVmxf`#h?aR!E$;)whvAi=;O zDZ#+tCdt6yFUi1g0h<3Bq!<`Fr5G3{NHH+Xlwx2AkY-?rlxASqAkDzAQ<{OnL56|B zQ-*;dK!$-KQU;P&L3tKieuc#&D9;kguejow)O@V4jDbOO86tha^7Vxk3=B7+lMI|I z85l0CWMH_tl7ZpFN(P3XD;XF9RxvO{u3}*Lu$qD4=V}H9f&UB)lAyLSBcwcVAW$CQ zN`DJj7#UWw419TEz{|*B$xB?hkuSi=@Iio);imv2gP9;BgS{Xl!v#S`hMR(j^5laM zBg0Q2Muq?pMutccMurO_j0`tL7#RY@7#SkP7#R+TF*2MKV`MOZmOBrij3Qo2JQddE5*RDe~|10zChys z-viM7zS!2EgZAIT_T7T^+JZ1_zpWN@e=TS~?JNTZ2GD+45QgoSowtkuWuGj)_rHSn zy@D{Y`(8nNT|pSM*A;{b?RSOkbA|11CA6OvwvQFIe-*U16ok?Dmkzdlq@cZ{AUwKn zbadY+J@<`*_Kbosu6?7(`$Z?^Gcr7ZV%UCAhVzUJ*!F=|570hP(B4lF2JQbe!?OSL z%@fT1pI)HxVl4YSSs54@I-uv|?2}?(0O7j|3=9tx7#JQYFfcp;jp;zoFTm`5GcbVW z0+~4(7(m#XlYs$*?Kl}295@*mJUJN{d^i~x{5TmH{5csInm8F4nmHL5_Hi;W9N=VN zIL^tyaDtP8;WQ@$!x>HnhU-ww%*DU}!ggE?3=Uij49!rykBfof02c$pNhm(e#lUa| zbOsGK0|PTR1A`qDJ8&~FfUr9^1A_-Q1A{j=1A`AY14B3z@8f1**w4+taFCmU;Se_i z!!d3Kh7;Tj45zpm7|w7rFkFXXMji$RW*!CxM;-2qy8H$;B85o#(85rz%85kUR85rDn85lfx z85q2H85n$c85qK$xQUm6p_!L~;XE$`!$n>Oh8w&L4EK2%7(VebFnk8-=VxHB=VxH3 zhhl931_m7g1_nbYwh&-o0AXtZ1_m1e28J*J28M6}28JX728I*?28MJ228LV#28Lz< z28I>^28MP428JF128Mnpo+ZG*Fh_uaK~x-qO~e@(KzN%t0|N-}6K7yJD$c-gT%3X7 zgg66(vLpk8nj`~*rX&M{wj=|Cfg}Tip(F!?u_Ob7g(L%mq!a^#loSI)C=`cFF))B| zq7(xI2q#N1Fr-K^Fyu-xFce8KFtA8Nu&Fcy0|;A#<}#%j7;L2(7#yV;7@VaU7+j;n2rrXnU|25Az_1F6pGz|^fbc7628K7%3=Hp}_>(jP!)Iv*1{E0w25lJz z1``q-WOT`L(FcCTb$*te2_;Q(kZaTNoD!72s@<5dg{CaV}2 ze4)5{6$1kZ*REn<0O8l5ImA^A4DVJkFuY&I!0;7{AFpO$c(R&-;n`{ihUcpp7+$Vs zV0g8ff#D4lGYBv;fH0E)BLfIG2{1B%@CE@!hD`#D4BG`58FmOTGUy0Gu&W>=gPR~D zLlYEl7Gz}DD#*yNUyzaEfFL8oIVjcAyheI0mTNAj0~odj11>$a=0K!g^j0_-rQIe72vLqwJ9Z5!p`;v?d zPoUURije_?!=)G*BBU4@rbDs53?l;w+sQC8fbdEgMg|bxD8tAA!dqk*89=y8mXV=P zmXTqyEF;4dSw@CwQ2bSnk>Q&hBLlNM1e?e+GMLIUGT6y8GT6&AGB`qUU_K*5dp;w> zhkQnckNJ!YsTUa;(k?PG*Ycs z&r1W<+n{sNK=pGZ(z$5p^)&K1X`r*wkn3sC`Dn=FAfP%MbS@gGzQ%Sg8tD8p&{ziu z6EofctIuKQoPo|b1J&cObIp*?F9VHRz|JiL)#0FX%Ru!s^7&+-IvZ41!_Fgv)x)6k z#*oJuu$?aks*^$Iiy@CM5E@Sa)!)eD3CQPf5j&m$s{cWCKkPg$t`?{r02)I8VbC}N`gvKPHUX?H02(s@VM5~up!Nc+od6m;0JRff?E>WUuLgR& z0M<6ackUFdy#hLK3N%Il!pP$UpmU{Q?H1(or9f>MQ2PbcZh@UI1!}*5&X@wVUvQl# z1v^Iy)P8}TBL!;55Yv7^KW7Tmo&lXL1v*m-ghA~X(D_lI_6q3yC{TL^`P?W_dj)n* z)OImO2GDs>p!1(V?GP&oMh5iu2k0Cq&>2vmwg(7<+8&^Dpg`>p*f~(3GoWDY59D*8 zKEe*&HR1ZtDO&V2%%`2;)f3Dh#UHYNs!(fg+u z7_1o?7;K@~o{@n8gdG_f7(m#Wk%0k(T^UF3pPI2Vqdx1cX6b zzd`saBLf2ngN_gZ;hT&M3?O`)k%0k(?=dnkfbauG1_ls*#7O@AQ=nxoUlM z1_lsTU}9hZVI?L81`t+ZVqgGa(A`rYtii;<0K!^K3=ANw!^FS$3?OX4#J~W; zMobJ~Y{kUDV9mt9V9Uh7U3v97<676 z2!rmP0%6d(Z6I9F%)kJ`pu49)nAH2HKxZXgf!;xNgPDQh78KuMW?%r}d&~?BApC%t zfdPacF*7iL@DpYR1`vM6%)kJ`FPIq^K=>6i0|N-ZVP;?e;djgo3?K};g9?N}=f#2W z=si@U_fU=AL&d-Vx`PUYwOAP#Kv;*BfdPc|SQ!{V7n3?_063}#SlA;-V~ z!d7w&3?K};g9?N}cTj;a=ng6n2Himg!k{~-Kp1of6$pdwpaNmg9aJFfBgeo1!k{~- zKp1of6$pdwpaNmg9aJC;x`PUYNAICxU>LoJYWUnk1-fr)w>$#_=)S4b@(c_&?0KdJijXr7?U2qf z1)XIII=2*r8FUyJ^mP~*5}-Iqhk+qQhk+p-iZgW>7(h5%hk*fvb3uFMbQl450ff7B7#KjfM~8s{g!^yvo}K=^3?O_=hk*fvPv|f( zfbc0D1_ls5qr<=e!sm1t7(n=f4g&)SU(#V<0O2b-3=ANAO^1O2gm36DFo5ta9R>yv zzN5py0K)fl7#KkKfer%$2!rmb0^!%tGicxHFff4dCmjX`5Ox5qSzpG$-~`1k%NQ6y z*ligD0|K-gtD0|N-VEoWc=VUOhu3?S^aoPhy^eU>vYfUw_k z1_lrgSkAxz!a>U!7(h5=IRgU-gYK#V;fUo73?Lk}oPhy^W0o^8fNIRgU-r!8k-0O5?~3=ANgwVZ(ggmacNFo1C0as~zvu3XN*0K(PF85lsg zb~yt>-Eszo1}JV?&cFb|Ez21gK)7u=0|N+y&N&9*-sKDoAUpwj=JBNE3=AMVZ8-x2 z2+vr~zyQLtmNPJb@SNog3?MvjIRgU-FIdjN0K$uwGcbVglI08xAiQij0|N+y?y3Ue zRm&L|)-7jX*sz>|Vasv`hHX&1V>tr@2=7|XzyQK~mNPJb@V?~?3?O`9IRgU-A6m}9 z0K!L>GcX)q&cJXIib3ZygYdQG3=ANAV>tr@2!CD9zyQLE{}~vpK>M0l7#Y-A7#TLO zFfv?bVPq&^Wn`#gWn`#fWn}1LWn}1KWn`Gd%E&N_X;CJ#uY|}M(7#I#GaG9^$H`yg)58~)oqA>b+_L(Wx3hSsZ$3=6I@GVHv{$Z+Kh}` zjgg`A8Y9DsYm5vBt}!w^y2i-x>l!12%ymWvlk1EOVb>WM@~$&7Ot{X-u;Mx+!zn0c zc*)412wDe(H2(|Q-+7dgfdPb1FfuTJ@M%T{1`q}vaR}`D_dfg=`EAm)RH?u0ruUHU@_GYzz#)*ccf8urVvVf zz>vkkz)--!z|hXYz|hITz|hCRz_5UWf#C!P0|N^u1A`?e1A{FT2XHblfN%sS14ANc zKOH9nLjxxRLn|i(Lk}kdLq8`2!vszShRK`^3@bPp7*=sIFl^vtVAur3+c+5*c5*T> z?1kcUoD2*ge20^P;Vvfw!+lN$hKHOC3?Dcd7(Q|`F#LgHRxSnxE-nTJel7+E0WJmx zVJ-#+4K4--EiMKI11<&zBQ6F8V=e{;Q!WMuGcE=O3oZr*OD+b6NG=A37%m2eI4CaS zVqhrYVqj?HVqoayVqoa!Vqloa#lSF`i-BPU7X!m8E(V4TTnr4GxEL5Vb1^V%q z7}jw!Fzn=JV7LIqtUL@1JUk2xd^`*c0z3>1LOcu%8axaPT09I4mOKm$won|w!@v;5 z!@v*=#R)tN42e7p3=L4+%EQ3W!^6PP$HTxdfro)%5)T8z3LXZARXhv~n|T-*w(>AA z?Bro!*bBvXc^DY(@h~tv;9+2R$iu+!k%xid6X*^yUIqppUIqp}UIqpMUIqpsUIqp$ zUIqqRDE8xJU;yC|UIvCRUIvDEUIvClUIvCLUIvDGUIvC%UIvC~ybKJpco`Tr@-i@N z=4D{m&C9^B7m5$?GB6wi-9g63z+k|~z+lA3z+lYBz~I2gz~IWqz|hFYz|h3Uz|aE4 zZF~$2U3?4-J$wudi}@HBmO}AzJ_d#jd<+bm_!t;A^D!{&h2jHz3=Bv37#QyGF)-W* zT`R%Qz`(%Iz~I2oz~Ii$z~ITxz>vewz|g_Zz|aGd6JTJ_5@2AkhvEPM28K`p28JjB z28LJx28Ki^P8DEaNE2XS$P-{-C=g&^C>3B}XcS;z=!0SgK?Vj7AqEC7AqECtAqIv3 zAqIvpAqIvBD2@_hV2BlBU`P;RVCWEHVCWKJVCWTMV3;7pz_3Axfnk#n1H)D!28JC% z3=I2(7#I#f@gX4whND6Z3@3yb7_JF1Fx(JgU=RS^M<&d`AS%qjAR)}a5GBmO&>+mf z&@aruz$n7NkR!&xkT1r-P%p;7&?v^hFiVVqVSyL}!z(cchL2(l3_rve7#PGE7zD)` z805tn7!1W37#zeI7y`u^7!t%87;?lJ81lp!7z)H07#hSG7&ePDFx-J+1qlWQC(!vI z5)2F#5)2Ft5)2G25)2IO5)2G0Bp4W0LGcC&28OQ^3=9mC3=DFT3=9F13=FxTeY%ni z3?-5b3=NVD467v>7&b^UFr1WRU|^79U=WjHU{H`^UfgxR&fuTW{fnl011H%Gc28Lz2 z3=AuD85q{-GB9k=WnkE*%fPThmw{oQE(5~>T?U3@x(o~_bQu`V=`t`}&}Cq_rpv%^ zLzjW!o-P9en*jvd7%(t^u%iJ3!!!d1hWSvu(13yAmjMIAe<)@(WMI%YWMD8fWMJqs zWMEie$iT4Qkb&WYAp^sI&^f;*3=I2y85kJ+7#KtrFffQMU|{H3!oYB02?N9TC6GfO zxtB382rOe@kYC2YptX#FL3;u#$nnZ6yOk!b%2)nw1O;Eh`xqHmzh}c(9Uz;mJw{hUY687~ZdB zVEDC?f#DzMz{XV!3>u(whF38#IIUt}a9PE`;Ju20Az>8*L;flThQd`03}ver7^d&c z445!0;P%kmOGWhTLBa3qlfX-Fx&yPV;LA3 zxEUB3co`TO)EF2UG#D5etQZ&>Y#10BY#A6C>=_std>I%S0vH$>Vi_128WM~iBf|-1Muzhsc@{>7xh#wf46KX{>a2_m2CR$>$*hbF3~Y=HX6%d%4(yB! zq3nzd3G9pv>FkUQ3>=IMtQ?FC98k=~!N_3B!N_3F!N_32!N_0(#r7PG451v13<(^J z3}qaQ3=JHN4D&b`86I#jGJN7-Wcb3t$nceek%57ekwKJ`kwJlzk-?Iak)eT;kzqS0 zBf~yUMuz>Ij0_B15G=sO$RNzc$RNta$RN(e$RNqZ$Y9FF$dJIr$WX(@$k4#W$S{YC zk>LOrBg1hnMuwAIj0{gedbt@HOt~2u96)E$a5FL_a5FL#aWgVBa5FMY2r@E& zFoO^ygP;&2gRl@IgSHSOgS`+VgM$zwLxT__Lz@sILkARh2{AJC3NbSD3o$ax6=GzV zFT}{OLWq%JgAgObJt0O0R$)d49$`iXeqlxi0bxc4VPQrF4PizGEn!9m17Su6BVk4c zW6*kCVMYc^VMYd9C=L*2WB}n|R5k>}g5k>|t5k`i15k`hY5k`gv z5k`jfB8&`2L>L*4iZC)9hvEiNMuv5wj0`tK85wSiGBPlTF*4|jF*3M7af28m!zwXG zh8C>Ey2j}UxJZ=O_Gs;6N-5x85x8n85u++85zVR z85txb85#5?85!)M*in*^0fZMwGBPZeWMo(+$;fa)l9Ayd6hD?^WB_3X&>25cj11gT zj0{Fnj0{##93aKW0Kzd+j0~Mpj0|(3c!Lxp!w--i8Ab*U8Ab*!8Ab*@8Ab*NC@zv= zWayV+WMGhGWMGqJWZ;lxWZ;x#WZ;%%WH69rWN?Gx1X)IgR9QxbbXi7*3|U5oELlc| zPFY5V8BqK{j*;P$93umhJOs1IGcpLsGcpLtGcp*I z3={Mj89wMUGB6l0GU%HyGB}zrGPs#AGBCI>GPt=hGB9K?GFW6WGB{*0GQ?#uG8AMn zGVIG@WVn#U$nZ9ck%1wbkwHJ3ks&#ok)b@Bk)bx5k)c1Ek%1wfk-;mUks$zz844H~ zzPB?nFmy07Tc@SKt1*>gsQ7ta|PUO#7Kc>A1@;oWmah7Zpf z8U8(IWMFu~$Z+HZBLl3qG zV`A8Fj)~y`=)mqDOboKWK#L)m8N7s<83Kfv8P+Q^BX|E9+(CDMK<{}w#>BvI5$V3S zH%tr+ApDMrfdPa;_j!Xb=)N})hTYo@x?>xJpRzG9JY!>E_=0v%wiE{g0|={dFff3y z1_uKJ2!rm!24UF!)}Z^5K^S%)GU$Fc5Qg0g47&#ybQdoO!|uV=!E&!H=$0| znT6di3%W}dgjo$B_sOE)BRkiCfv9_Ak?)NK-FGIwoPj|edRHvy&REcWu^^jrCq@W%ffVTspduZFJs24nJQ*1nyrI~ak%0k({TUe;Ksb<*fdPbr85tNr zIFylr0ffUD85lq~l97P{grgZ57(h6dk%0k(;~5zkKsb?+fdPb*85tNrIF*rs0ff^T z85lq~laYY|gh5pW2L61_luBfK)jQ&?<*v5+ef`Pi16a0O6U83=Fdw85rh4@j^xh z1`uA%$iM)?OBop$KzIcs0|N-JVq{=g&B(y87K%4OsxXEvj0|ABjgf%?gm*GBFo5p2 z+{?(o0J`7u7$XA%2%ltRU;yDWj0_AQe2$TU0fa$Uqku5zick=~0vU>CxW>o;#y1!l z7(nl#zh}gh5pp2!n=pLHIQz0|N+y zj&K6u_lyjnt56s~SCxS9S4IW~5dO)?zyQLaqfbEiFC*x#Vg`o)j1bJo#J~W;%uEan zAk50dzyQMRObiSl%*n*S0K(i%3=AO5%f!F{!u(7O3?MAX#J~W;!b}VdAS}wnzyQMH zObiSlEXl;c0K(Et3=AMF%f!F{!tzWE3?Qt?#J~W;%1jIlAgs#7zyQMPObiSltjWZ{ z0K(c#3=ANw%f!F{!um`M3?OXC#J~W;#!L(hmP`x`Hc)KO#K7Rd#K7PL#qLZD3?S^u z#J~W;-b@S(AneP;zyQMjObiULdrQ|dF)$P|Lon!$QV<5+Q3}G<%nS^mdrBuTGcbVg z8fFHDbIc43pnLx=Lht>%&dk7Y6N+y$GcbVgU1kOb5WdgMzyQJznHd;B_%SmB0|-B5 zW?%r}=gbTYApDYgiBc%7(lq3g@FNtD_IyAK)9NPfdPbTSr`~VxSoZ90fa$!vVw3o3j+fP z_p&fBfN(zx0|N+81f8+N!oV;Yil?$LFo5uM76t|op2@<%0K&6b7#Ki!E(-$#2+wC> zU;yETEDQ`FyqJZ70fd*bFff4daux;#5MIf`zyQLlSr`~Vcr6P90|>8YVPF8^jVufd zAiSA{fdPcKvM?}!@OBmk1`yuK!oUE+yIB|*KzJ_;0|N-}XJKFf;X^D83?O`jg@FNt zkFhW?fba|*7(n76yikP<)w%fdPcCvM?}!@O2gj1`xi< z!oUE+w^{T0|N-(XJKFf;fE{?3?TfNg@FNtpRzD8fbeq`1_ls*$-=+@!mn8v z7(nj3?0K&gn7#KkKFAD<$ z2>)kcU;tr8Rt5$TW@cqz0AW^E1_lsjXJudjVNO;C1`y_EWnchdURDMM5awrPU;tr3 zRt5$T7G`B&0AW#91_lroXJudjVM$g71`w8JWnchdSyl!H5SC|UU;tr7Rt5$TR%T^j z0AW>D1_lsTXJudjVNF&B1`yU}WnchdT~-DL5C+{148pK`fiDO!F#Hl=VE8M*zyP}c z_lGb8!(Y(&t_%Z1hYSM)=$>C~Sq6q|Sq6r3Sq6qmSq6q#vJ4E2auCcc$G`x>ta1zt zAj~euzyQLWatsV0%q_>j0K&X-3=AO5FUPqH+ujAS^D&zyQLM zatsV0EG@^t0K&3z3=AMFFUPs&WhrAgnIOzyQLUatsV0tS!gD z0K&R*3=ANwFUPrg97nAZ#wjzyQLQatsV0Y%RyY0K&F%3=AM_ zFUPu5t_vAnY#3zyQLYatsV0>@CN@0K&d<3=AObFUPp>hliARI2ozyQLLatsV094*Jd0K&0y3=AL~FUP zsd5YqAe=78zyQLTatsV0oGr(|0K&O)3=ANgFUPrE&}mAY3lT zzyQLPatsV0TrJ1I0K&C$3=AM#FUPt#S+uAlxp;zyQLXatsV0 z+%3nz0K&a;3=AOLFUP%jFmtKzOAb0|N-JmSbQ5;k9xM3?RH-j)4J$H_9atsV0d|r-$0faBgF))DeWjO{05WXtMzyQM6&*c~xK=`E`0|N-ZmSbQ5;kR-O3?Teo zj)4J$KguyMfbeHI1_luRD#yS8!r$c>7(n=^90LOg|CVE50O7xK3=AOrAC!OP85jiQ z85ltKdV}usR+ndBFpy_pFqdawaFAzU0Nw8myVpBGo`E4L1oJ5}Fz_ofFbG4jz9QmoZuI-PZ50_9+|cgl2HnXG!Uj4F4DmV)42e*j zs>8sLro+IH0mWH53=ANgqr<=e!i72v3?N*r!@y9Y!@y9c!@y9j!@$r8#mzbl3?SU9 z!@vN-?K%t$Al#|LzyQMCIt&aT+^fUD0K)w`3=AMVQHOy6geU7TFo5t>9R>yvp02~d z0KzkM7#Ki!whjXW2+!4FU;yFyIt&aTyikXM0fZOpFff4dQXK{c5MHjszyQK4br={x zc(o1#0|>9xVPF8^^*Rg;AiPnBfdPa!>o72Y@KzlL1`yt^!@vN-J9QWsKzO$f0|N-} z)nQ-&;r%)c3?O_^hk*fv59=^6fbdZr1_ls5uEW3p!Y6eY7(n>64g&)SpVeVt0O9jG z3=ANAQHOy6gfHtbFo5t?9R>yvzOKW-0KzwQ7#KkKwhjXW2;bFVU;yF!It&aT{7{F1 z0fZmxFff4bSAV0!zyQMUbQl;w__GcJ0|+zdGBBv>GBBt^v92xy0|+}VV_*Pb=Vc5G zAndw~fdPcwmoYGau;(%c1`zgM#=ro=zRMUGK-hm70|N*LE@NN-;oxNq3?Ll3jDZ1! z!r|H3LJ!Y6gak)eH;;s~H&fgXT+rGcd6IW?&Hh&A=cI zn(O?}z!3GHfkA_Xk-?vZk>LglBg1bNMuzFEj0_7|85tI{GBRvrWn|dQ%E+*jm62gL zDJBSY9VMuz-rj0|1Z7#Wsc zV`MmVjgjHjHAaRz*BBWdUSnkVbB&QfFbOPX4e@R{H`-H1YBoi2))k8 zP;i}*q2oFuL)UdihW_h}46Cj)G90?j$Z+I3Bg4t-j0~VV%Rv}4*ur_Ak%9X@BZJ(1 zMh4aUj0{@$85xvbGBP-W23SA?lTh5xfY^VFK2CXnfq~%~0|Ubir1477coAq%Bxt+{ zv?mgITmiI)4m6$s+B=6lo&efI2g0B|bRdjvAKgM`28PAZzCUOW8>oNX#lpY<>es;b z>A?Coxc2Ly_j?uyGcbG=W?(??|4fi!VAv(Yz_3?_fnh(M{tyGG|02)8AR*7dAS=(n z0BSdZ+DRVr3=F>V3=FXLQlvZs0|-aUGcbT~tULn)2*)F}pJ44I(0W5`?Ih6p!wd2Z z4435@7_LG02Rwl85BMa{!0<($f#I7x0|RJ%BKkf7P`e4#Rw8wO0H|Gs-k!2oWMBa8 z5%5%GVDN)t&|U#hdkVB)0Ms4=t@j7j!=QEMp!yfIwj5vm3tD#$s?R`cxIy&{Xl*sD z`~;PQ-O%z6wEh=Vo`BZUqL(M2@&mM%mYnhfw*J-;T8=P4%MsW*Tv&NRXgw~W@&>kE z7gp|o*6o7I9niX6P`LwIw;OVWks%DaR(IYNMuz!U7#S8p@zN`d49l)CGOWD9$gt)L zBf~m8qwB{Csv6V*$nHU%d&C7wxCD6PatXu-k&4I=_ zL1hvMgUTcjCbwLI&GW&^Cv5A0@vZ-b%?nbx4j6r2kpa3c7&NyC!l1cD5C+XHf-o`b zg+cR=gw_j#<|i9Q*9$X@t`{D9>xDt{>C{>;44apy_qt(1?IF+_fx)n@7`;74t98b( z^$^JGjcK{g7_`;`geh5XTr0!C&;T8uM{l1JT89i8&j+pN7_9A8T$^c~X+RjXo(8nm8+kpAjR6A#Y`r&VT@7f>H*CH4A2QZ^ z!`6BKg|74F!LrU9)IJBT^#-la0j{{u9E!q4#cKV$>& zU(iA;kPsR^%*4P@!OXx=$;`mez|6qV%*?>h4aL383=AN=h?#)_gbi337(h6jm4P9G zm4Ts~m4Ts$m4RUb6rW&aU^vgp!0?)tf#Dr11H)HV28REv3=Dki5bVv)z~IBqz_5v( zfnh&81H*5228KWE3=Dc43=H}l3=H;A9K*rD5X-^95D&%K91INk91INoP&|o)fnhoa z149cZ1ov_>F!XUUFihlRV3@?oz_1dEH*zvCfbeEc28OMi3=F$C85nkRGB6zFWMDYP z$-r=ulY!wBCj-NIP6mc+oD2*%I2jmjb22d8gW@Ng3=B^>85sU^GB7Z3F)*+|F*g?j z10NRygCG|JgAf-3gC-OkaxpM~un89f0|=XQF))Cz6&C}8H5UVeEfhO*F)+AsF)(;? zF)(;>F);XXF)##hF)##iF)&1MF)+kJaXc3TLn;>oLpc`%LjxBBLkkr5aWOD}@FXq< z1`uA!#lQf<8@U)5KzIum0|N-};$mRf&BefQ42n;2F))DeIW7i<^IQxJ7r7W1?sG9P zJmF$sc*@1V@QI6o;Rooz3ectJ+zbpXP|VBCz`)1Nz#z!Yz#zoUz@Q1mhTIGcAZ)_T zzyQKl+zbrX+zbq^+zbqE+zbq!+zbp}+zbqU+zbpM+zbp6+zbrS+zbqHP@KZez>vz# zz)-=>z|hFez|aE4-P{Zez1$286QOt-Hv_{AZU%T}3UIvB~UIvC#UIvB+C~o0pU;yFiybKI8 zc^McsLGd151_lt`$IHO5pO=B*I4=XkNnQqq)4U7}=Xe4Ay)M40e1B3^9BR3=Mn?49!s7%E!O}!rgof3?RIOkAVS% zm+>($fbc#(28R873=Bu1_&6T}0|=kzV_*Q`TYL-*xA_Y$O>N>?Ii(93>eT zoFy3;@+27;@+BD>LnQ%)<`lite0e9I3>xza9)yu;kG0L!(B-R1{o;^23aWv zhIlBhm11D1lVV`#l44-!mttU;CB?unUy6ZYofHGZdMO5m^HK~9|D_lhe5Dx}{G}Nf z>Y@0HGy}tLX$A%h83qO`83qO~83qO)83u+<83u-a83u;kG7JoRWEdDu$S^RRmtkP| zEyKX@UxtA}OrC*3T%LhJPM(25UY>!$O`d_lU7mr#Po9CnU!H*>0*a&L85lq~MxKEI zgyZBH7(lpAo`IoWo`GR26d#pmU;yDO@(c`Du1_KNQbZU|^W9z`$@&fq~(?0t3TG1qO!y3JeTAiVO_>iVO_uDhv$v zDhv$XDhv$qDhv!I+6)Y(+6)ZSp!kap1H%s;1_m`<2-eVLV9?QJV9?WLV9?iPV93yA zV93*DU?|jOV5rk&V3@AUz%XBzfnhlmuh(T@0O9Sr3=AN=UzdRagpcboFo5uRT?Pga zzOKu_0K)fm85lq~PLF}1UXOuc78HNcV_^8N$G~t+pMl}MJ_ExaeFldA`V0&X1`s^m zfPrC#0RsbrAp--8Ap?T}6!#l4Fo5tALk5QTh71hyMiAV)gn^-d2?N9NB@7JbmoPBs zEMs7>U&g@jV;KX(|78per-H z1H+Q*3=He9GcX*#&cJZ$Is?O>>kJJ4uQM>@{bFFq|HZ&?>lXvV|6dFY?7tZpgnlzH zNc?7CkonEPU=GE$pmP^~GcedgvD0q`1`u}r&A8zxFySu)!^FP~3@83F zFr53#z;NL&1H=2j3=C5L7#QULF)#!}ar!?71`y8q$H0*PkAa~SivRv&VEFfsfq?C%v*ccfZOc)s%%orIN`k{C(BO}9nMn;B(jEoHD85tS=F)}jLGchvE zWnyHQ&&0@Zk%^JvJ`*FuA0|eI|4fVwD$I-wI?Rj=-pq^){>+RF)y#|x^~{V6^Pu<$ zGb6)sW=4i<%!~~GL1HY74D(qS8CJ0{GOTA|WVph@$Z(y7k>L*uBg20dMg|R5Mh1OW zMurqtMut3AMuuuA?q+3V0O853j0_+=jg^rBgcq?gGJx;QgOS0SgOS0OgOS0GgOMQ&isy4MGA!d@WZ1yL$Z(&7k>N8Gf8$_e_{G7< zAj8SXAjiqbV8zMEV8_YG;K0eqP|wN8u!ED4VK*lu!v#)8hKrnx3@ls_%+AHgz|F9_!$}W`576a_!$}U`576y_!$}2^D{D>;b&yH z&(Fy4ou856KR+Xbp8z96pa3I7nE)e0od6@lVF5;lGXjhZ=L8rT&I>RyycA$$crU=n z@JoP^;lBVQgQ*|{dk8Wz_zN;JlnXL4)C)2)Jb>b_f{YCR1sNHHgdo^Sh>@XQh>@Wk ziaUiE89=yCh>-z==Ls<~fbc3IMuzo5j0~@Z7#ZFRF*5uTVr2L)#K^!R48gp@j0}9j zj0}Rpj0{4;j0~DkY$(jg0Kz81j0_-bCCtbG!mh%M3~s`V44%S_3|_*F41U6l4F1B5 z41vOo3}M2I3=zVN3^Brt3@O5l45`A547tLL4Ee&045h-14F5rLB8&_%B8&`4B8&|6 zB8&_tL>L*)i!d_W0`Wx|8McWsGHe%RWVk2F$nam3k-=4rk-=Y#ks(Tqks)4;ks()% zk)d9Ukztn@Bg1|%Mut;jj12$97#XC+85v~685wlM85#7&85!Kg85#bIGcwpnFfz=S zU}X3#!N~AWf{}q;l97Q!l97Q+l97R1l953Kip3=v89>-fl92&~EhQNltRxv3+$9+q z{3RI~q9hp^=1Vd%tdL}6SSiWKa6^)j;ie=b!&6B{hX0a`3?5R94E|D#42z{08P-cN zGW?WcWcV+|$iOAd$nam9k%3bNg3V-ghLOQvhLIsxhLIs(hLK@{3?sut8AgT` zP`q7+k>S4#BLllE1arwUGJvqTEF*)ZEF*(86x+!%GJvp$EF*)zEF(jdEF(j_EF(i2 z6lcmZGJtTuEF%L5Pm*P10O6Ukj12Q-85vf|GBVtkV`TU#$H?$sj*&r79)hjq85wNl z85yGF85!2gGcs(HXJptf&&cpeo{{07JR`#_Wk!bo%8U&8DiB<%!pKms!pPvF%E-{K z&&cpupON9eJ|jbz2_wUQXGR8hH%5m4>5L4PS&R(!S&R(vP@I*;$dH@G$gm%ZPh~MO zoX=upc$dY<@IH%?;ae6X!~ZNs2DfZR2LEhEhA1db%4TE$;ficVhMH_fh6&k>4EA}9 z472kX8UE)nGI-}RGWg{)GIZoKGW6v$GAzhvWVoNt$nZ3uk>PzlBg3bBMuz|Sj0`{8 z85#b!GcsK3VPyEm_8vxtC3_ed{-0xH&^yn_pnsl`!TmfVga3I(h9l=08UCMVWcYT0 zk>URZMh5kZj0_qV85v$*WMue%k&(ge5+lR@ON!pN}r3M0dkD~t@wuP`#KxWdS=7K(RW zVPpW|Jy#eRK={ZNMg|aOyUNG_!rWIG8F;QTGKfO4>{Uhv5VpF?$N<9jR~Z>V*!3zS z0|>icWn}QY%E%B1#mlZSGAzHw$Z+O5Bg5J2j0`=u7#U{WVq{nV#T#xhGW@^C$RK~8 zkwN7?BZKyRMuz|Q85!6gK(OQkMh2+|j0{RptoneF0fe<5Ff!;rU}VU9z{t?|fRSOs z14f4b4;UGAA2KrNKV)REd&tOO|B#Wv>meh9??Xn0fQO6>{f`(K)<0ro*#C%;;nyQZ zhJT<-P98HdoPWZ|@aqX9!~N%s49}tX&2vTu5PtuhkpYDNKWAhB;iE4Y8IHYRWVrr< zk>URfMh2gkj12xS85yEpGBU)zWMoKq$;eRfhLK_G8%73(w~P#SZy6c>zhz`#c?ZD? z?-&_CSos|z0|=|WV`NZ!$H<@o#m4U#89>TfJjs0AZVVj0}$N7#W=3F*3Nl zV`T7vVy}0M3?S_Dj*$U`1Ku$*fN=0TMg|ZLeaFZU_KuMu0*a&FF*1N~%sWN~5RQAt z$N<6#?-&_CIQbnT0|=+SV`NBs$H*S=$90O9&~j0_;$^^TDN zgy+0tWLWTykzolGuX@MG0K$9TF*3Y=$H?&M9V5g4_lyiW9~c?*KQJ;(`M}69{{th# z`VWi@8$K{H9Dw2r9~c=x_}d3YhW{TJ8PI4g_8TL^`)`a4f4?y@{Qt(tQ2w2f zq3Sy$!>#X(4EMh?GQ9cD$ngFztg#2P;i2udNkoSv`A^#U6L+vj{hWcNO z44uCi8Tx-QGVFumW4{;~&i-O#xbusV;r=g1hL^t>8Q%Y5Wcc}uk>UR@Muy41A^7xf zMuzvl85w^4W@PyPpON9gGA4%q%a|CfwlguK` z`2U@WLGBk5!~g$G4Bo=b4F1B*3>&~_$M7*QG4L_SGw?AqFz_+_XW(P_z{tn&|34qY zzyJIU|Nrwd{QED!@Eu z43D6gPlAB~gt-+M82A+!7_<}^81xhv7!nj17*Z4%7}69N81g}V+kXrU|Nk*C{QS?r z@cTal!(IVKFg`25$N<6yCX5XBCX5UV_AoLm-owaHe36l%>LMcpBLg28D=_de)Pn|? z(8jhw+!LVVa~K#HKPaq=0p7g@)Iq`y|IN8XdE0APSh9&2aSKj!g+KYd~_Uq zbR2wi9DH;foVw%Spt=i$N5{kIGainuod9YdjE;|wj*pW(KK^5Hj*o-J#>p8M2epew z$Hhm-#r=ojxHzo82O1wA9Ty)R7au9(;;?az(eZKoBj4K2(J3|-6&3_VcX$IQS0J3j{bycp2A z3|*`Y485!j4E?MO3=>%y7>=`|-qZGlm4N{??#>GxWA}pIvj)0j?EpIi!!LFQhQI6# z47wZ)3Fgarzk?3=GX=oQtrBlY!v~Cj-NAP6mb( zoD2-7q4%j>=VV|2;X6q8sy*gpV0gyK!0?Zgfq{{Wfq|Kefq~q6)oi#J7(m#Li-Ez3 zi-EzNi-Ey|i-EzLi-EzHi-92!iqY?1OXFf-DC1&aXyjsGXeQ$xwmn=73`e;b7>;u> zFr4IKU^vaiz;G6NCmZZuw#Qry49~b27(PPpX8X^@z`)4Oz`)GSz(DG`3pU&g3@+RZ z4DQ?v3?AGJ4Bp%f48Gh9458c%4B^}i49NGlC37<{q;WGalyfsMG*S8fwtd_T42QTG z7>;o>Fr46KU^vCiz;G6NryJ;Qx9i*t3?TfBn}OjMHv?$F7T$Z_Y2pn&%?k_PUQV>dw3Waj_@!r9OGeN zIKjifaEgb4;VcgW!&M#zhHE?w49NGwJ?3Fxc*euP@E&?U+-DvJ1_mtm!@2M>Fu3tD zFnI7XFnIAYF!=K_Fo5odOXg)@NQ2%B*T~Dj&`iSpaHn_~7(n%3=E%m85q9sGB7amF)F)-NkF)&1vc#j zoa19)xWLE2a1-r5Id`Oc>f#D241H(Cf28LUZ?IjFH z1sE8PL-APw1_lrYop&{m=Q_j+GceSE&J`ABV3;Y)z<_?f1A_AY59y9WJ565K~7%o8Xmjj*a06MRgn&*$f z&SgbDXY8H*f?^H~3ZCUlYJkqZ?V7)lfv82S_#7$zt%Fw9Y4U|68Qz;Hl;f#HGz z1H%Ue1_lO228M1$28IcW3=C>23=9q`3=Cc>3=9b>3=GBE3=C!33=C7X85pK(L(c2` zse}EzPULeJ3UnD5>Zx?E-UD3*hFCoYh6X(bhM9T{472qZ7(VMUFfiydFkIDVVECZV z!0=n2fq}t*fx#Z>9EO=V&Rv*b$iVOzde5Gm5d(vQ5#(OI2}>9ljzRC&1KpzsI$z=Y zG6n_)=y{13u$-3&I^PU*euB;l1_px_3=Edg`}4|IFfcT%U|=}9f`Q@O3I>LoD;O9a ztYBaWUdg}^54|U^VI>2@S?HMvH&-$++*^sbAI}VWKc4R@28MuD3=EO07#L!Z?zj6! z;`s&H&~qB!u4Z8Pu$qD4C+NIJT=(1EU_iOwjseU01;pNOcL;jFT|d&jcIW>xFn}=V zemlv33=9hY7#M>7F))OH?za2Kz>x8efg$@J=Dl~IwGbf8NaXni5B@VSJp0eU@ZvuM z!@K{GbrgR=Yp@x}y9W<+*$WdRBLh1lBZDy`BZE03BSRk}Bf|tnMus_zj0_8)_yQv% z!(T>5h6c2I^ByoUGW>?#pQjAHKhFzvFCH@^Llx4!dGnbO_vT#%T`U8=H*Wz8Bg0Ch zd#GXO-=Uv}kWb)#YC`AXG2pn5k6Py;ghTJ=Th77AupY}jeZM&v8KgNG8RVh&^x1PV zGJr7bzP>%2j11>F85u5dGBPl8F*2}nF*2}mF*5MrxVO)Oi;=;Ki;=;ei;=;Di;*FK zi;*D$dY|8X=skYVxEL8;b1^b}L%PS$5_*qc1oR%i3g|t4Gr1WV=5RAItmI~7SP#0` z2YRm``uPdJco-Sfc^MfDco`Wic^MfJ_!t@L_z?I0t>$B7Sc`Q3-(Nn+-G2uBj0}HriNaVeKE1~!Ly%J(%_#ni{@KcD90d%1e zvoPuR{8dWC)ODWQdeyWWaV`V4o}_!vtAI zhKaI_43nYv1}>0gWLPQ7$N;)O@P{1a(kj@!fmZU240iI243YAP`vVWiGctUXXJq&< z54lH>L4}baPlb`8K!uT^Lx`AN0>>WN6Q4Wavk_ zf9y#Mux-Z85tNZ zFfx1vT?}=RkwNVuBZKBeMut}x85tNZF*3MbVq`dQiIL&*B}Rq^mlzp7Ut(lnxXj29 zcA1eO;W8sb#bwAPQiJteRM0u5=dLp{bl+lRn0h=0k*Q22(CVappv2FACH47Q+)w?^-i1fL`E;Tj0~xt7#TnpoL&FM$Z+Qy zBg30-j0_*XF*5x5#>l|%ospsJJ0nB&cSeSr-x(Pmd}m~M{hg8F0~9m-U}WI_!N?%+ zgOS1g2O~qk4@QQ_AB+qMKNuO>e=ssk_`%4q_6H-wh98U!8-GA9O$+|T$dK@hksSH{MuwlDi`W>LD7t?WW8E<$AH#dl;0y!i zc^lyKIY3(?q3fwZW5vjLKcrjApv=I)pvu6&pvAxdI>s8*qgWXj;#nCOI$0SQx>y+)_CfIhRt5$TKFrF%0K&&u85ltLGb;lF zXndNJje&uSje&uOje&ueje$WLie=dt806U)7_!(H7;@Pd7_LAu13Lo)XgvEnI|IW{ zcEq?fY`i*!lYt?XlYyZCivMylFn};<3>Snya4|4|Flamwgj;wR7(f^_Mh3$Ed<+aA z90eUGW8r6D5aMTG5P@PVeg+0xeg=kCD89hYz;K11f#D`}Jj+Xffx%yZf#Ek4CkQhz zWC$}bfX0hJI8Tg$0fc9ZLB@|>i!m^~6=Ps96=z@ojT>DNXJEJ{&cJX(oPpsMbUcVl zf`I`vuHz~R8LyFtj>{~QVqjPS9iNGkW?)E=W?-m=j>~|?WByA+#$)Vd7#Qkg7#Qkh z7#I%7Fff3|VJ^!sFo3Xt0t17(0t17A0t17y0t17q0s}*!0s}*^0s}*w0s}*>0s}*x z0s})YbbN$EnSp^@nSnu5nSnt|nSmigoq?fLoq^$~Is?Nobq0oK>I@9;)fpI?H5nLY zXfiO|&}3k^t;xXfN0Wi!uO&T&|_fm z*JEG^(u0g=Fd8s0FdHy1a2PN!2pTXjh!`+1$Qv*)7(lVD0RsaFFEC(W0O8*T3=AOr zZwUj#|0N6zyvrCE_?Iy-6hm>{G6n_^{lH_f#Jsr28LfN z7#RLQvEE7s27Tyw1ZYg+AapzeG!AipC1kuIeiZ}5y;Teh_g676d|1W6@NpFb!|T-$ zZ1X}h8Hz#uc@WNm_Ul3Ycjo^L46Oed7`Q_sU;yFx{|pSNp#D4~ zBLk>k4(d09@C9Z@1`r1IgFzV7-vnV$e-ea2eMu08^#kj<7#TqL1GN7K>i5}mGcv&X zd7wTT2!}%ZWo`V744{6QJG39RTY!;aj{qaXJ^@CCg93~U4uXsf&Vq~#C4!6$rGktM zM+F%fP6#qGoQ2}sf{Y9xd>7jPvJhfquoYrt0QIFn*jt2=!C!=tAquHK1M1Tp6JcZk z;e(=#4A(^&863qJ8Jv;&Ejz^+89>-ZoRPs!oRI<4HvwT6Xg}kTBqIX|+eR@>BLk@Y?kvy9;16w|gWBk@cKJtr zMg~xO9MsOvhqkFf?P~LEMh5F_Mg|uso}S0Z0BS!!%4cK%;rV+Q89=!G7Nng9YtMk{ z0a*P2+M5F6qhl7(y^;(J43=2#!2lgE0K%X%=s_5C20aLqdk(!TGXnz%)B8O74Xg|d zds!J6_CxVORtAPctPBiCSQ!|OLgz%$=S4rUGB60RF)&E6F)%2wF))O)F)&23F)(DZ zF)-w@F)&+-#=vlgje+4I8w0}&HU@^bYzz#4*ccf8L$Lrm1A{%vM7(zK27?L>|7}7Wy81gw87(nOMlQS>77t6ft z8R*>XIq2LhuKC%IoD2+qpqSEmT5R*PKG3;Y&>Stc`Pot~^5Ed z4+ZnHwpiw8eYhDI!tl(`=5sSJ6hbjQ=4sF1n5TVD#5}DnmU&tq66R?eco-O(c^DX4 ziJY(9i)Fs{42AQxR=f-hw!91sF1)Dowm!TJ41Q1yn!gR_WnhTsWnh5KF5A=ul)}*rvk3@KOabpfDKj6#&g|{|B8xrpLelyI+9afPq2LfPq2N zfPn#a&wzyi1A`6H{5CD`8Gy}ygYFk7S;oLny^MhYbkD&1Weg1D+%Leof`Ng31p|XR zbbh=TIzN6GI!6wgC%*ulC;zm9f#LfK28Q2I{C5QdgVst027{Fh3_&Xy7!r`?&o`}P zVA!&ffnh(=JUZxpfqyF*7#LPDFkqWUPgupk0J~3M-zo-%15kVjX?`7cU%>lS3=E%E zF)(~3alRdNKO*vd0k4RecmGLv-d*E21B2FY1_om1-#0?%-);XgFa-Q%U_hRS2hG3# z{);)!F7Tg$LGnKX1HJDJaA0I)D8Vvs&cMvbAdhFhd;!vY`FUnWhKtOM4CKt4kA!;! zh?y@>;9_K`;bLTH;9_K$1Dzi~&c(=Zl8cey3DW$y19W~o0Xje40G%Iaz%d^Vx=#Rk zKD>dCkzpktBLiq2d=1h(I0HW;gA6}pE?k|TkpVOx?h2g`Z-mZ=A3>WBcNJh{NE2XW z$QNK_D1^?7HwZ8??10XVgXYJv&5IjB=f&*>85vxV=EsW!85uxx1C*Lo~$Z$}Q zk>Q9SBf~jCMuuC0j0|_6m_dkoK+baCg?LVe9&iPU@%~0&^KXZa5Q0La3f;=z5vJkJwrAl zgMKz61MI#9*!(@Adl#_H+ds@_WOxk4gJu4H-X2B<5FTmwFo5Rm|6gZh0NsZyhjb4z zrStT#`x}tw=|OinfadAfLg(pUKVoF~@Q9HCG+z&zrw85V@Zkv~11aO?s+iy$jIRNk&z+bBO^oRM@EK%kBkhRAE`GVjXr09%xA(fe*l|5 zrqzA6pi3yId7o`F3+g@FpnX#yoWRP!&;i{yMd|zjwt0j5(0PMbSmq7T_hEg7?!|)b z#{%ui0?iwM_GN+Yu?6kN!Zlw2+K2TJI!{22c>r?uXCaUOgZ65HFs1VVpuJikjBP%E z(0(mS<^xFCuLYYAp!a?)dd~;o+P6i_d;q2Uwn&{1*n?$0fZF@FKyv`p9{&gJfdPc=u*?gz@G~&9 zq0I{%<7Z$1VbJ`*P?`?_?GKBG?hot7vOkQ_{lCcb0KZ%)Fv zKWIPMB^d^WD>U3!wnv_UVILG9l4oFm?K3+g&%kg&o`C^*zu5zM28K6i`_2ByGcedI zFfceMFffEbF=)>j2-hnxFn};@-x+Mb8NKcg#y8&oS%-mvL6`78Hqafy^;F!)hHIQ( zAI~^HXdl}w0|o|qjQ1BUV_*P{_t!$l`#+L7-VYk*2knUiVTTnA46yNjMCo7D^qMD3>=pmBYMe+&%#(EWA# z{}>pI|1mI_{9|D7{l~!Ik7a)y`nW%A-JRoq28O8r3=FisHyAel5868i!r1oDf%edi z&Id3ugmN%4Bycb?lyNXJG(h*$J>Xzu_{71;@P&hs;VTCt0|O@`gD58>g93CP9c=&H zK2Ao4{hW*p3|yq|p9Afo!#6(w+DFI0&B$QN&B#Ej`2o;AIrRB~0OErA^8&?a^8%pxfRloZ3}*<;3xMVX$e9lqEc@z^=L6!9<^u@L z0~|n`2LR0hU>pAjjs0UA_lNDbLm&6IqHx^bnZS5IXsjQ3oF6p4588tV!U0l@3^So) z{GhRZeB=C}F@9=}?^C)D57#)p69wb=4kpCy!^1U>588+K1-cK}aJt0E-~!r* zcZHE*u?UxPW7S-{?F6o#qMP`_vFK1fct( zL02%s_7}J@Fff4T1=65Ox|tXl92poGq8Jz$koOhb1IdFnFEBDNfR1_qVHQRP1`uXr zWB?tlzyNBRfiP$(1qkynGJuv$Fz_)lfH7#xJ_v)h(u1%FBLirPo&mHK9fTzq85lrV zijjc!YFjiq?0BxmaP-A2OV+}?I1`yU_WMBYc9YzKQ z5Y}U4U;tqQ$P_Ju5hDW_gQjRf*o={Z0fa3X85ls=nvsD4gl!oa7(m#bk%0k(9T^!I zK-ig)fdPbF85tNr*qxDq0ffC685ls=hmnB+g#8#97(h6Hk%0k(gBTeYKsbbvfdPcW z7#SEqID(OZ0feI%85lq~hLM2*gyR?)7(h6Ik%0k(lNcEoKsbewfdPcm7#SEqID?Ua z0fa$S4G8BjGBAKJXiGN;7cep~fN&8b0|N+`FfuTJa2X>50|-|zGB8v!GB8v_aV;YQ z0|+-VGB7kTGBC72aT_B8Lpvh_Lnk8xLpLJ>Lmwjp!$d{~hRKW!3{w~x7^X2YFw9_N zV3@WMEhc#cLQD7(jR(BLl;FMh1qB zj0_B$85tP1Lh*J+28JDs3=Dgq_y{8d0|*~yWMBZ{Q;ZA@AbggQfdPa;TfjjWwB;Lw zL0h^(_$ng<0|rx83=AOrkCA}^ zgc(40)-W+JFhMa369WSXvoSF+fG`IW0|N+iF)=WJFb@+00|@gmF))Cz022cP2n#VW zFo3WK69WSXi!m`UfUpD;0|N+4F)=WJunZFe0|?78F))Cz0uuuR2rDr$Fo3WM69WSX zt1&S!fUpJ=0|N+aF)=WJunrRg0|@IeF))Cz0TTlQ2pcgmFo3WX69a=a69a=S69a=C zs62sUXC?*)Hzo!K4=DCxVqgGaA0`F{5cXqYU;tszek2esVrF0f;WB0h1`r0FwFts( z%nS@5+=1oX#eQZ6hKWe$FRo^0U^oxOmzWtCt}rt&+<@X+%nS@5e21BV0fg@{GcbVg z17-#W5PrnWzyQKem>C#A_!%<;0|>uhW?%r}SIi6yApC}zfdPcyF*7iL@E2wV1`z(v z%)kJ`KbaXAelasJ{AFff&}U&_NPyxb76t|oPGMnS0O2$i1_lt$U}0bY;Vc#g1`y6+ zVPF8^JQfB95H4V0U;yDF76t|oE@5F{0O2wg1_ltWU}0bY;VKpe1`w`cVPF8^Iu-^7 z5N=>$U;yDR76t|o?qOkI0O39s1_ltGz{0=)!jo7S7(jRm3j+fPPh(+V0O1)d3=AMV zi-my!gy*m@Fo5tp76t|oUckb@0K$t{7#Ki!2@3-Q2rpw{U;yD2EDQ`Fyo!Z^0fg7E zFff4dIu-^75Z=JTzyQLVSQr>Ucnb>y0|;+pVPF8^9V`qCAiRr(fdPc~urM%y@IDp> z1`s~L!oYBlg@NHP6dz?_U;yFcEDQ`Fe3FHM0fbMpFff4dSr!Hc5Wc{|zyQLRSQr>U z_zDXH0|;MZVPF8^8!QYAAbg93fdPc?urM%y@I4j=1`vM0!oUE+k60KOK==s@0|N*@ zV_{$b;TJ3n3?Tf9g@FNt->@(+fbcsO1_luRz{0=)!k<_e7(n<73j+fPe`8@_0O21j z3=AOri-my!g#WNGFo5ts76t|oW&oWX%F4jN1jQ_@3=AO5#>&6|!W^s&3?R(K%D@1^ zJgf{1Ak4?gzyQJmpgnf13=Be0EW*mb0K#Id3=AMF!OFk@!cwdZ3?MAS%D@1^a;yvt zAgsX3zyQKZtPBhwtisB`0K#gl3=ANw!OFk@!dk2h3?Qt-%D@1^daMi#AZ*CWz!1iY zdtV9cJU`^~>GsPofcFJ}_69J?F))BIiyQ+32(!sCFn}64Fo3Xz90LOgYsoP%fUu4n0|N-_$uTg1uz?%{0|*<*F))Cz zi5vq12%E_$uTg1aDf~H0|*z%F))B|i5vq12$#t*Fo1A{90LOgSIIFjfN+f*0|N-x$uTg1 zaDyBJ0|+Q{)&JKzN=U0|N*zkYiu~;YD%`3?RHjj)4J$m&q|Ofba@A1_lsbCC9)3!fWIh z7(jTP90LOgZ;)eP0O3t?3=AN=MUH_1gty5tFo5t5IR*w0-X+Jt0K$9Z7#Ki!pBw`N z2p^DRU;yDmatsV0d_<0c0fdjqF))De2{{G^5I!ZxzyQK$cjOotK=_^<0|N*@kYiu~;YV@|3?TeO zj)4J$pUE*Wfba`B1_ls*CC9)3!f)gl7(n=)90LOge~@Ef0O3z^3=AOrMUH_1gulr# zFo5t6IR*w0{w2r20K$Ld7#KkKpBw`N2y@6YF!0MWFu=~8)R1Rj(3fXmumH``$ulr` z$TKkb$}=!TLUFV_0|N-h$}=#4aJ)PN0|;lxGce@KGcfFsXJFVZ&%kg(o`K=CJOjfG zc?O2t@(c_wp!0w~J|0&^1_sc4UcMp&Lo*bE_VJvD?&Hzd zVPHsr;v^jgh7=tJhIA;-)L~!%;cOiS1`y5#oz0-bz)%Fmr8*1@AY7-zz|f$>z|aK6 zEjkPgAl#It&aT+@-_70Kz>w3=AOLr^CPi!V`2D7(jTE4g&)SPtjpu0O4sm z3=AMVLx+I@glFk6Fo5tJ9R>yvo~OgW0KyA&7#Ki!kq!d`2rtoLU;yD|It&aTyh4Y8 z0fblSFff4d8XX1(5MHOlzyQJyvzNf>$0KyM+ z7#KkKkq!d`2*1{0U;yE_It&aT{7Hv_0fa&4a)PkaG6n_^c3H;20K#s|7#KjpIRgU-?^@2l0K$8gGcbVgzU2%IAbems0|N*jTF$@#!bg@f zFdSdbz;F_ZLFe0o@U`U(3?O`CIRgU-e_hVN0K%~SV4%S)b)<7h3GJJLor?)NCvm?7 zBLnChy?D@o%N0fj$t#QuCRZ34e6KJvWL#lnXuQJ6Fb9g~U14OHe}$1@5fm@I!pN}f z3M0eHD~t?lt}rsJyTZt@^$H`yg)58~)oqA>b+_L(Wx3hSsZ$ z3=6I@GVHv{$Z+Kh}`jgg`A8Y9DsYm5w_aqmaa z@opLDICmIye0u_PT>I2@Mg|ZDtq)gx$;g0f{WE9?k&A(WffI7%Is@p4W)N;=U|;~@ z1q=)fAlx9vzyQJ^1zZXY3>pdy44MiI4Ej(UufV_n!k}}J!5CyP6obw~QG^_!%m6x1 z3wDlH0`%;xI_Q~MqvvKp&deG;H*56VtkH9`Am=cTo|`pz&&`4s?+iylW7P}{44`rx zR9B4N!vnd42iG}I1HG>UbbjOLJvf3l#PrG=^Ggt3N|t_{N4mvbeXk>k)dD@BSXy|Muvtxj0_!n7#Sw) zVPu%Ohmm2<9!7@6dl(r;@8cQ0k4NbpBZCSQtG{Dp0AbB{j0{Ha7#U37F*2CHV`Q*| zV(WK|3?S_Ej*$U`-QO`XfUxH~Mg|b}e#giF!oKeq8T{WdG6cS3WC(i4$Pfa>;qMq3 zKsfRpBLfIWzhh(o;n;VK3?Ll;j*$U`6W=j1B)wx~NP*(?cZ>{K?-&_!-Z3&1y<=o3 zdB@05{*IBM@*N{X%{xYhIw)><$H>t6j*+4J9V5f+cZ>`R-!U>Qe#gkL^c^F^%6E(m ztKUJ^@sHleGkEXgfsGr(==n^L{SH--V^l#$sWO1>QUGDl+#v|xXJBCX#=yYv19XoM z0|V%KOfUvrSqZ|dj0~WwDH+%q8Ne8{8%72O z5Vm7vU;tqUMg|5Dc4A~;0AUwK1_lszV`N|eVGl+I22Vx?25%_#Wn^FgVSh#j1`rNp zWMBZ{U`7T85DsNzU;yE8Mg|5Dj$~wD0O4px1_lt0Wn^Fg;dn*{1`tkUWMBZ{WJU%C z5Kd)eU;yECMg|5D&SYd@0O4##2GEgt47rR9U<|sV4ulIC85lsgn2~`2gi9G27(lq3 zk%0k(s~8y=K)8mHfdPc;7#SEE7#SFvp}3WifdPa&7#SEqxQCH}p_h??VG8TWMEj$$iT1`iZ?JaFo5tD zMg|5D-p0tl0Kz*N85njkGBE6AWMJ6O$iQ$6icc~!Fo5tGMg|5DKF7$w0K%Xv??4!| zl@5fjK(4Z5xW>o;#y1!l7(f_wRU8Q4VPs&q3ptJsbR-?<+BYzM%*en1!cQ3)7(nJ-F))BICldn$2y-(rFn};G69WSX^D{9pfUqDF z0|N*PGchoLuqYD)0|<*VF))CzBohMz2um|DFo3Wu69WSX%QG=BfUqJH0|N*vGchoL zuqqP+0|=`#F))CzCKCe#2x~JjFo3Ww69WSX>oYMhfUqGG0|N*fGchn&GBGgNK(Rd& z1A_w-1A`M3yE8E`fUqYM0|N+qGchoLurCt>0|@&wF)&PKVqloc#K5qFiGkq&69dCR zCI*HFObiT9m>_qwxH2;^6hd(^GXnz%gXX?KxQdy9p_Z9}VFDDdVP;@B$IQTRfti8f zA~OTSRb~c;>&y%cH=+18GXnz%-(_ZC0O9-03=AOrkePu2gda0AFo5t=W(Ecje$LFm z0KzYs85ltLH8TSP2)|`!U;yFw%nS^lnHd3j+fPr?W6HfN&-Y0|N+WvoJ7#a4ri20|@7{Fff2{AqxWo2p6+3Fo19= z3j+fPm$NW1fN&)X0|N+GvoJ7#a4ic10|?i%Fff2{BMSoq2zRqEFo19`3j+fP_p>lC zfbc{X1_ltG%)-C`!c$oo7(jSB3j+fP&tzd>0O8pz3=AMVmxX}=gy*v`Fo5tv76t|o zUd+P40K!XI7#Ki!IST^=2(M&eU;yFOEDQ`Fyq1N50fg7HFff4dMivGJ5Z=tfzyQKq zSr`~VcsmON0|@VAVPF8^-7E|YAiS4_fdPc~voJ7#@F5lk1`s~N!oUE+$5 z{BjHoAS@`yzyQL+atsV0EGoyq0K(#O3=AMFDaXJ7!qRdK3?M8k$G`x>@^TCeAgn0I zzyQL^atsV0tSZOA0K)2W3=ANwDaXJ7!rF2S3?Qs4$G`x>`f>~mAZ#edzyQL=atsV0 zY%0gV0K(>S3=AM_DaXJ7!q##O3?OVP$G`x>_HqmiAnYi|zyQL|atsV0>?+5=0K)Ea z3=AObDaXJ7!rpQW3?S?)$G`x>{&EZqARH*izyQL*atsV094g1a0K(yN3=AL~DaXJ7 z!qIXJ3?LjU$G`x>@p23dAe<=2zyQL@atsV0oGQn_0K(~V3=ANgDaXJ7!r5{R3?Q5< z$G`x>`Em>lAY3TNzyQL^>Pdh zAlxX&zyQL{atsV0+$zVw0K)BZ3=AOLDaXJ7!rgKV3?SSq$G`x>{c;QpAUsiyfdPak z%P}y3@KiYlhPiSK4D+FQp&SDP2rrgnU;yEzatsV0yj+ff0fbk|F))DeYB>f55MC?C zzyQMQ`{fuI zK=_~>0|N*jmSbQ5;iGa43?O`5j)4J$Ps%YcfbeNK1_ls5E62b9!sq1}7(n=<90LOg zUzTHF0O6~03=ANAU57#KkKp&SDP2tSr%U;yE# zatsV0{9KNK0fb-5F))DeYdHo65PmDizyQMU|3Udzo`FF?o`FGBo`FF@o`FGKo`JzYo`Jz!o`JzZ z9x~4do8L>2XJAN|XJ9ChXJCNM=e5f-FienVV3;n?z_37`fnm8k1H%TSdA{w?Gtoe2 zqamM*b{y?owCnN=44`w-o}-$iTp_$iN^B z#rld23?OWx$iM)?mWm7vAZ(+^z+kJ$z~H9Hz~HIKz~BeP1&Ry|^@M$^XaJLQv0|@u(Fff2{zYYTf2v5{uU;yFCIt&aT zJXME*0feXPFff4dOdSRW5T32WzyQK?br={xc)kt;0|+nFVPF8^#X1ZOAiPwEfdPb< z>o72Y@Jby91`uAY!@vN-YjqeHKzO|l0|N+e)L~!%;mtY>3?RH!hk*fvx9c!4fbdQo z1_lt`t;4_o!h3ZX7(jTx4g&)SAJk!B0O7+r3=ANAREL29gpcbmFo5t$9R>yvKCQ#R z0K#W=7#KkKybc2c2w&7;U;yFEIt&aTd{u{m0fevXFff4dO&taX5WcO$zyQK`br={x z_`VJU0|-CVVPF8^$2trQpnGcG=rAyV@H-s_1`r0FVF$vv&arb`#=ro=&dV4WK-hH| z0|N-VFJoW;Vb5g@3?S^ijDZ1!eU~vXfUy5E1_lrgT*klv!okZJ7(h6583O|dhc9Db z0O81G3=AL~y^MhYgkzU6Fo1CUG6n_^PF%*o0K&=37#Kh}br}N#2&XS&U;yFFWef}; zoV|>J0fcjxF))B|<1z*Y5N=+^zyQLn%NQ6yxP2J|0|<96V_*Q`?qv)NAl$o*fdPd3 zmoYGa@Wf>d3?Mvt83O|dPhG~q0K(IkF))De%w-G=AUt~+1H;^93=GQ4Ay{=e0|N-F zFK1u?Va??X3?Qt%oPhy^b(b?RfUy2@1_s0B3=GClY`UC*0ffz$GcbU#<#GlF5Vl^< zzyQLw%NZCz*nT+!0|+}VXJ7zf=j99xAndxFfdPcwmoqScu;+3H1`zgM&cFb|zRMXH zK-hmd0|N*LE@xl>;o#*A3?Ll3oPhy^!np~#c~FQDk!d5 z&cFb|^~)I;K)7)^0|N**FK1u?;nw903?SUToPhy^dzLdWfN8N&cFb|>z6YyfbiDk3=AN=eK`XI2=83ZzyQL#moqSc@ZRMN3?RIJIRgU-A6(AB z0K$itGcbVgiRBCoAbe^$0|N+OT+YA%!k3pbFo5vY?2HTtco-Qz@h~zRkYHrEFTu!=kjKbSpU21`b%l|^_zEL~ zAJX|k=~oyTnyxT1%)Y|Nu^WXQhC$k29`kzxK-MuuHi85u5LWn_2<+M{uekwNJiBZKudMuxC! zj12kL7#X^*F)}PgJ3r_l+WA4!Xy*roUPnDYs2}b8pp(!ugh1yAfd+3l?=v!R-)Ce% zzE{BD0V6~114ag=my8U~purmk28I)$F%RhaS54|Ux0dzk&I|BnhI|Bpy`RTvd z85lrkri0E)H{f7ku!G*S3OY9(b}u;c`RSm0Rwr;UFihlNU;v$;PR@O)A8-UTY-TAwvJX$fq}t5fq@}Tfq@}mgs!V)G+s(t7Y(IU}OkjU}T78U}R`uU}X5kzzCkmXJTYzU}t1xFlJhgW@|z z1|{g4TF}~B(3)Bh9$i<<$guwdBg4TDj11>LFfv^Hz{v0wv=HqhBg5K{j112{GBPlI zVq_5b#K>U%iIKtK6C;DiCq{;VPmBzKpBNbuJ~1++eu6AoyZ()l;m$WkhBx0B89sbt zWcUL*wD&tBL)mvmhU)K(3^%_sGCcUs$ng3*Bf|$MX86I#!2N@fLEr}?gZmFghJYW8 z43R$=84`XlGPM6-WSH=Skzwr*MurVP7#TK#4gmhi$PoOCks;w1BSY>lMuvi4j0`ou z7#SLVF*0=gVq}=`i;-dPFGhy_zZe;g{$gY}_iN~^tA(wv1)aA8J6}A3je!Al&*ld< z28N$(3=9X@85mBoGccraGBD(GGB7;jWMFvD$-t1t#lVoy#lY~4i-7@jKVup<0|V&3 z#Anfk6Oz&l>37G=E73h6|Dm3^yei7#gG) z7&@gG7$!(DFwB%Q`~Fx*_hz`(GQfq`=+1H*-t3=B6{GBA8t$-wY)B?CjiDh7tgRSXOtRzvnf!tNtl zz{1F|l7*4MfR~ZMk{5B$`v(C=hMxkA3}%9i44`{jE(kI*+!SPF_#ni{@KXqJe>v=a z@&GYLhDfCLj)6EM1L$6n2NH}7p!>rEBpDeZLG2V7Mh4J*+ySzT43S9pV8iaYPRL?p z$joA7IFQB2a54)~pTh1fhTSg=yGIyye=zL+-w(eT8Gil-9TE>q4GiF;twB6_1_p+D z1_p-tAPyeP0X-iIbVd~DY$y;0o$~?0pfjOB77~-I~fQx~Fl6!RbaxpL*Bf3sC%ki-F-W7X!mjE(V4_Tnr41+zbrN+zbq?+zbpn+{Dil*D1>5q%oCmAW?;Ag#n-tR7(keThk=2Ihk=2Qhk-$W zhk-$ehk-$Zhk-$hhk?P8hk?PChk?O`hk?P3hk?O^hk?P1hk?O|hk+rKhk+rChk+r2 zhk+rAhk+p$iW7Jk7?ODy7#esO7@Bz)7+QH47>Jo4+Kc6$+%r533|Dy=7_RX!Fx=%~ zV7SM_!0>>Ff#ER^1H(ri28Pc(ki+(Pco`V@coFBSSn)D2*kUcZ zAwYf`Oqzf`Oqyf`MU`1Ovkc z2?mC*5)2Fsk_-%Tk_-$Ak_-&mk_-$6k_-$Mk_-$1k_-&Fk_-$5k_-$bp!S+11H)=b z28Ioi3=AhF85kI(7#O6b7#I|!7#QND7#I?z7#K>V7#Kiz*@EzXDF%iEQVa}dq!<{^ zNii@mNHZ`POEWN-N;5DxOEWOIN;5F{NHZ`rNHZ|3lxAR9BhA3DUYdbnmox*zQ)vc< z=h6%eAEg->K=<96$uKbZ$}lka%P=rR$uKa~$}liAK-X!bpHKf%hJoRY3ps!X z$p)Eu=VW&%GBAM7$9@St9~-oO5OkI@Xx$*_ z3}t-l1`Tu>7}9ka7(jR5f^Y*J?!VQz_yx!fpawj z1K(-}2Eo+~3}UMp7!+1BFsQ9&V9;2Nn0G^8&-Mzmo^1^S!{X}<3>&U9FdVziz;OCH z1Hql{9|B%oo5VNXP5S$fnnc&28Kib85oZLXJ9z> zpMl~0e+Gt2{}~vr|7T#h^`C*^&VNu(iIIVufsuiifssLtfssLjfsw(Afsw(6fsw(M zfsw(Uff4Jx8ti^s^m}b7z0Y<73nRm2r1gQIO}FZ-j0^^>j10-Fj0}X%XC}0s5Oiso z89O6`13M!_C_5uV0y`r^I&_U8w)KUe3(iGO!9WGVlm9GVlvCG6)DWG6)MZGH3`h zGH3}iG8hOmG8hRnG9aHfV=K(a;3CY(;4aL_;33S&;4RF^;3Le)5CFyD!i)?c94pMo zkPO-&F2cy*D8k6#EW*g(D#FO%F2cwFx~DcCX~&dukg*85y>UGBWHC zWn|cgc0aA17$XDdj#?0g-BSyiC)+B<$N;*d7K9nZ85yL+85v~785y+185tbJ85v;n zWERkQGSIr({}PN0Y?6!&oKVao$;coq$;coo$;cok$;cof$;eRj#>~dqQd-{qbwtXGZeeYGBSYX(-LGE8B%2#8Pa7L88T!U8M0&<8Tw=y879aw zGE9_ZWSA_=$S_TokzocDKagW&_=aO1%|V`#VFMI{E;*bD+UT#s$N)N*26^7>19aX@ z--MCD(S(t~4RnE_3nPOYXhVJmBZEa2BZEU0BSTykBLnPS+6!5X3~!%c9EIBy@cP8_uE z8+MNVAu8V=3tIP$yxtphX(8JKMh1=tj0_SF7#XA=Ffu4UU}R8!z{sHTfRRD%0V9Lf z14ae|=(_O!2aF6L4BGUs^N^9j{2?QQ?L$Te(A}>f44VI1`-qX@z#~S6*N+$(K=WR& zpD;2!c+SZ1>^URDi|33Cub(qAynW8d@a{Py!-waL4F5m}1-xKnI0CvL5xVZ&{Usv< z2z$R|WB}pO`(GjF#^Amufr;V%GA0Iw~wlguv?qFh2*uliG@EjAvhI32| z4_-4dF#KR*ko^U^Jd&BgOPHAHrD!oZZo!ocLUjDg96fq})4nSmjMfq?~NXE*}`3l}p3LnM@TWME*~#{|BojOjiD z1JhDw1{PtcyFfGp5*y}Tkhl{w14D;A0~3cl1ItWi28K>~1}07@yGx#di3`f^mS|S{WCSEAJPo9B^56bSBXJF!ovKgRs1Cl+AP_afN`}P?BwII2J6)M(>Ove(HoFy%qn>*X1k@}cYmD7^s5o`jJ> zEk?3G1uC`#$sMUsv871vNrQ?lLvmL-RBSnt`*z7Quz=>XKr|>1?2%_+n#c^v4{gj4 zIS>t!1Brw3%tU4eHV_Tc2V;ZeH$wGoMlu6bR-A&`0ir?b&d4(`O^2%OgxUe3L2@8* zklE9b?0~UB^4p>M4kMWXD~mw+9L5Ia^O?*HEFiOBVjwoGtOBWpu|aAVBFYS~9+(_R z&o8L^K{Ut>f8-gMRzls;4|P9?2FZcML3&mqxgW*`$)AMk`;26U8v_Fi=#Fj>4Z5=% zL}xNEFo0-JD4hePeIPU&NIg^y8%PgS9atQy7Ay`@52_1FAawvs2$V+VyRb5_l(8}} zfM_=;oeHH*p>#Hswq|8u@Pn!c(J=M7PJ*BV;35^E18H7RZ2F)Zh|Ar_4iGeW4 z-5_xmsQ5-^1_n@A?gZ5{3=9mQ{p}zf+tI|2gC?LE7#Kk6K=lJCZb9Z;LK6qYGpI%d zouvah3mc{$WCut+XkR?Y{G-ea49Mm@f|>&phncehbe4`h0|QJPW)5gyJzEz<8h)^J1QG+ChYnH)5(DW4xo@*P0|RIb9hR;@>W)G6g2Z6z z4$CtzoRNo^4~wH~P<02H85qEE%D}+z1S$qf7ceo^HVkT^(81R9qhF;E@`iHRbKf$}X# z477I_7^5^IuY zVCa%(U|>cPYnEqV=$2<-U_laVk!N7&k!N6FMG|Y3XJF`+XJBAM5^IxZVCa))U|>fQ z1D%o44?SN46jmVjfzHgBAB3R zj}`I^42ej37s@j*tdwV9NJ0`@B+tOGN}hos8A)uhJOjgOc?O0QB(Wv(3=C`J85mNL z#Fol4FszklU`Rs}TPDxIunv082+S>@Gey=z&m94YfzrVyXj&_Q>II2`&KCitjT$7e zPf&HBvV|R5W*dMMgA_7A&Sqp(U|?{B@qg1;l~k zRH&FMlnL zhKe0V5_?D{6 zAznenPC>X}@->`*4AwEIHE6o2Av5D65~Nq#}9Q2ACeeo8xKgG0FoGJN&qAVnt}kC1;U{1FCZ}y zBz2%IEg&&5Br(wT6Ofn$k{D>q2}lgI1qEal2!qa>1&PTZsRNxo3lakjS%cJoFz6gw zkeC9JI?zxxNK6Sy40Jv%NK6Gu40Kj4NK6e$40LWSNK6As40MJqNK6Y!40N6?NK6Mw z3^WuD64OHx1D$UR5;H;)1D$mX5(5pDgZu!(ptEm5VrEF{K}&^fyx zF)t)B(0RKcF&`u`(Am2nF+U_R&^f#yu>d47(3!j-u^=Qd(D}R|u@EFN&{@48u`nbt z(7C-Ju?QqF&>6lUu_z=l(0RTfu^1#V(AmBqu{b0#&^f;#u>>TsWN7|KLJ|X={|i!= zf+Pky3m7Dph9m|$7Z@a#fg}bxCm1A_g(L<#GZ-Y6gCqtzI~XJenhF7>6%YoUBMcHN zKvD-fQy3&xgd_$!Ul=4-f+PkyYZxR}h9m|$cNipAi6jO(gBT=MjU)y-lNclh8jl6J z1B5|m6obT^K@C@s00ZRAVvtx9l3vi+#UQa3Br(uA#vrkFBr(vr#vrk7Br(t##~`tZ zNMfL~jzMCetr1Xb89-+rgT!Vashb6jH(Mn4fzCz-sZ&4_1D%l!5?g?z7j#}SNNf?3 z80hR|kk}F=G0-{6AhG30VxaSsL1Jr=#6agNgT&S&iGj{o28nG(5(AyL3=-RlBnCQv z86>s?NepxrGe`_{-2p5NKxZ?9#J(e`1D(~(w19!(2qOc-QK&fR%w~|-aYhD)6HqbG z`OP4)Q;ZA@r=en?vz$TZorUs2_JGcH28o?V5(Ay_3=+GDBnCS386*p!NMfKfqCsM}k;Fh}MuWuqki_moVrjbBm&yd7GM;L*`KvPSgFacrES=1o0S4iqWTc|){Z;-@5XHbzhLwfzGi8iGjB8fE6(?fX}lAiTy%S2RhptB=!eM z41CVD0t3T8Br(vL*C2K9%@GWc^RGc-Oi1|ybQU&9j0H)I9du^40s{jZk{Bmci~~sw zbY3<{FBg&+=SpNMfM#zd>RKNMfM#z(Hb0 zNMfL~!9ilyNMfLK!a-tnIX#6jxZkiizF5V6)Qjz3xgGblHX*rX9#m`tk{IYreNegw?bU*% z7|_}JAh9CIR61A~bWR>ftPDx48Z>^Tz`*bqNvsAc_76!6bT&Uo?|&pQ(6}^6tPM$Q zEmUs@k{D>L8lo&@=r(dbdHI~_@E2Qvc$vjPLd4Cws>U!dddATiMV7HCcobpG%z zs2#JI85ll5_3wt-F&oMU*}Dg-ZVod81L&R>kl0?Ry17W|_CdwwA&KpWip@t7I{-Cr z0W$-`HK;gfY#ua520HKXBUJ1#R2}I2!$VN9BT(~}K=~lIfX3@VVXzcQ>=;zj$}IB{Ktq8g#7c6ja?RBz32uVyltF&OpU_ki^bH#rlxM zK=(s{+}w{Ob{(qjJdzmb&IpjY8%ScHyCXniw~)j@_eg-m?jVVQ?vwzD-9r)s-7f(W zdw?Vcx@!U?_6SJ~bngU6>=ne{y*fS(C(0vpju@^{Upt~tRVy}?IK=)LD#NHr@ zf$psUiM>M-`veVxpGab$yDdQKKxbrv;t_;F_gjF(z9Xpv-FE>J`-LQCz{0=)5))tn z>4IQGsF)y88bj3yBdIfisuKa-WdYhd!oa{_3RNeHq|OW~CWa(t z4iyte60?AcNg#fQo4#iFrcBG?B!-pl;S;VPI&3y4f45P8&&`4^&JCNz4~2 zri&!z2Nlyp67z?O=_82+K*bo4!~&sWj7VZZP%$PXv0$heGm=;cREz~lEEFoniX;{W z6=OpZ3x|raBZ);o#W;|}BB5fONMcb?F)k#rXs8%Bl2{B>j0Z_97AnSzBo+r1<3kby z-BAO|tNch}pgU_oVhKoM$X-HzA`)xpC8AxKF zyKX>YSx91_dv8EuIY?rlJ8(c^c}QZQ`*1*F1xR9`yKz8bMMz?xdvZWxB}ihRJ99u{ zWk_P6`*T2I6-Z*ByL3QeRY+o>dv!o!HArHhJ9a=~bx2~M`*uKL4M<|3yLUihp#AKi zat?$+_wazkdXUtC?&JZ9^&yFY?&krCO+XR@-PHpUn}j3=y0-@;HU&uxbcYW}Y#Ndn z=sq8i*bF2w(A_>Du~|rBpnHBmVsnthKzIIt#O5K1f$skSi7h}91KkA#5?h2M2D%pr zB(?-e40J~jNNgFB80fwrkk|?&G0@#XAhA_QVxW73Kw@i<#6WinfyCA!iGl7H0*P%v z5(C{e1QOeXBnG;72qd-zNepxc5lCzsk{IYdB9Pb)Br(w4L?E$UNMfLSia=s}kiEIFcCXz9W#>NhC4Q-A5p? z(@0{VyO2O)XOYA}cO!ws4j_qv?n(lQT|g28-I)XuyM!bLx<3gdb_Gccbe9rH>>837 z=w2m|*bO8x&>c%4v0F%Dp!=3UVt0_lKzA>J#O@)9f$m`fi9J9P1Kr645_^Os2D+aK zB=!VJ>^Zbde1;?jy0;0W?gf$<=nf~4*efJ4(0xuIu{TI!pu3$wV(*Z|K=(X>#6BR2 zf$n?)iG4y61Ks}w68nNA2D%FhB=!wS40JCPNbCoa80d~Dkk~IIG0=TcAhAD4V&J=@ zKx1=AVxW7ZKtsM>6X;GUkQft^80dZ}kQfV+80fAkkQf`180g+9kQfJ&80Zcv zkQf(|80bDKkQfh=80c;)kQg7580elVkeC3Hm@q4(jVXjA2D-lrq)r4$40M+jNK6b# z40Nv*NK67r40Oj8NK6Vz40PWWNK6Jv40QJuNK6h%40I0`NK64q40I?usWnf^)fvU4XQU_kUrNF>|yyh|ws?H8cT|QLI9!abKD&~MB zRtObyL=r24ia8;P6+^|Gk;Fjj#z67mf+SW7Rp*K%23|*|z`y`nHwyDxIaHlHlDZ10 zmqMU603)*^G6bEfQkhm zi8VsS0+GbPYx5Ks7(ja+VE%1}stZO^*8&v_K@w|)iiIMHwL!(gkix1eIPki>37#bzUk-GPeDK@z(Q6`PABb`L5x4@vAkRBS$y*aN88 z0wl4AP_czbVvnF=i;%<~L&X*&i9LaeEkP1{3Kd(5B=!s{whT$^IaF*plGqEV*a{@E zmr${lNMf&`VylqEUPHxJBZ<9%imgEsdkYm?izN0ADz*+u>^)R$J(Ac5sMrQ1v5!!( zjYwjjpkkYl#6CmCHY16Bfr@QG68j1j+lnOi4Jx(`N$fjRY&(+J52)AY$H^x5lL(lRICX} zY%^4>8A)slRICL_Y%5f(6-jIxRICk2Y&%q}9Z75lRICF@Y$sH#6G?0rRICe0Y&TS_ z8%b;rRICR{Y%f%-7fEa%RICq4Y(G@2A4%*0RBQs0*g>e+L?p38P_ao!Vuzt(laa)Z zK*gpYi5-QCO+^wr1{IrzBz7DsHXTXq1XOGWlGsV8*i0m`Q&6#4NMfguYip@n5I|mh;ha`3$DmEWU>;hD50g~87sMtazu}e^~MMz?op<;`X#I8WamLQ2; zg^Ddj61xT!TZSZd9V)gQN$dtxYz30oO{myPB(Ymiu~kT7x1nOIk;Lvm#nvE+-Gz#+ zMH0IQ6n~}txK*hEoi9LmiZAB7$ z1{K?eB=#ICwjD|A1ypPYlGsbA*iIy|S5UECNMf&{V!M&V-ay6nAc?(&itR-bdj}QU zha~nMDh9q&4O%aJfQo_c3Wf?Xe1wYq6o!c~FnofF{X!D^3>Ev0B=!X=_6JGqD^v`0 z7ctDlN?B0bk%6HWX)d)EDwd2ipWFu(JBFkVe19=$4K8%w4#-TgZ=ze367#orp=&oas7zdIV=-y+H7#ETl=niC%7!Q&d=sskS7$1@t=x$_?m;jO( z=$>Sdm=KZ}=+0!2m=>BAom>7~6=q_cDm;{m-=w4-zm=uy2=#FKOm<*B_=)Pr; zm>iNA=QB8=&ojvm!ZC=x%3_m;sU)=$>bgm=Tf~=+0-5mBJrm>H57=q_lG zm<5s;=w4`$m=%&3=#FTRm<^H`=)P!>m>rTB=ZH9=&osym-fD=x%C|SOAh3=$>kj zSP+sJ=+0`8SO}6B=>BSuSQwHR=q_uJSOk(7=w54(SQL^N=#FcUSPYUF=)P-^SR9fV z=DR(CL}S?o!%g^ z79=sy{oWw4HY737UEd(F4kR(qz26|QE+jF~9pE6b9waf)ec&LmJ|r>F-QXax2}oj~ zd%{6tlaRzf_lASSrXY!d?hOZtEkF_j-60MVTZAMAx=$P=wggEGbhkK2Y#EXm=$>(q z*a{>u(4FHTu~kT7p!>%`Vr!7ZKzEUY#MU8+f$k*-iETg<1Km*$65E6%2D+~tB(?=f zY&$f)Y(o+Q-D3_?w*yHGbf-B;Y!{N)UZ~zZNMie;V*8N94noBaAc=wQKnIz32uTcd zA38|v2$C4+Zgh~?F(k2*Q1eb8iJgXuok9`=-JcH9dj?7DJXGB|Br(vv>L7I&kigtAa%Ep#6b76gT(G2iGl8F2Z`N7 z5(C}a4ibBSBnG;}9VGS$NepzKJ4oyak{IZ2caYdKBr(uE?;x=kNMfKn-$7!pkiiGj{u1=%Z$BnCQz6(pvCBnH|m3=-2s5(DiO z28n4QiGlVCgT%Cv#6Ww6L1H>cVxYakATeDeG0O7p<*YI#6bJGLH3?P5-WwOJB=h(1{J%7BvuX; zyNx7P0Tug!BvuI(`-vo01r>XRBvuU-dyOOp+FK5C-!CMwTBy3;NMakHVmpw;HbTXA zB8gpqirqjGy9gD#i6r&_D)s_N>>*U_C6d@vsMs4MF+W8}8D<1s+X*Ve3ZP=3Gmb%g z5H5s@B_gRSf{G;}i4{Y|l99wppkgUVVx>^AR3x!7s8|}3SUFTI9Z9SLDwcsHRtXi$ zL=vllie({*RYS$Hk;H1CVmU}+wNSBKB(XZESRRsCJya|oNvs7b){G=}K?M@dp!1?Z z;R(VQp<>%X=SPDC7#J8XLB)0;iCu<@?L-p00u|eZBz6@lwi`+88dPi#lGt^q*j^;D z8&I)*NMbjkV*8QAZb8KkAc@_EiXB7}y8{(Fgd}zsDs~u2>>gC?2$I-+sMt{?u?JAG zV@P5Tp<>68#2!J#P9TXrhKij;5_LB*Jm#EhY0%t&G;P%#!HF;l1*E0UNQRE!Nt z%p5AljwEIQ72`k>vxJIqB8gc+#ki2ftf6AuNMbfnF&-o_Tc{W>l9(M-j1Ni79xBF< zB<27W6F?Gkgo+6wi8(>VgpkCXp<=>FVlGfI5hO8JsF)~{m>X0~3`xu#DkhF3<^dIx zKoawWib*1gc|pabki@*9V$w)rK2R|kBr#v8m@JZ*A5=^ZNz5NACXXZ*02Na}5(|Wi zDI$plLB*7i#Dbw>%1B}%P%#xGu~4X(Dw0?jR7?#?EF3DPjwBWV71KZxi-d}4B8f#o z#k7#bqM>5iNMbQiF&!kaSg4pTl2{y6Ob;~No+q=KoUC*6+49_ zb`~mj21)EZRO}p**hQ$=1thV{P_au$VppMJSCGW6L&dHkiQR;X-9Qq%4HdhEBz6}n zb_Yr9K2+=;lGsD2*aIZ7$563HNMdiGVxap*piM^x(7hv|_QqQzb)Y*)Kw_Z#NMPz1 zbRlh!1p;sp21cmZLL@OJsMsPTF=nXPVk9vZsMr!DF;=M9QY0}psMsa{XY9uipsMs1LF$Eab|f(gsMro9F-fS{ zP9!lYsMszfF=?pSZX_`osMsDPFSsMv8NFfl9(q{%mYcxdl_Vpo!2r3h7RZ&EMKTPA0&1DP%%Fwu|TL;0FqcR zR4fQdEEFmhf+Q9W6$?WWi-d|rAc;jo#iEeJVxeL&NMi9&u{b2LM5tH-l2|fSED1?0 z6)Kj3B$f^pOG6UNgo$%O@)e0K@yt|6`O`6HWMl~ z14(Q)RBRTKnDTN+8dpME3!w@XQ$Z3_hl;5oiD^Q`G?2u!p<-G{V!BW<9V9V*sF)s- zm@!n$2uaKoDrSNtW)2lILlU!uidi6uSwqFFki=}EVm3%(_E0f9Br!**m;;iSGgQn8 zNz4^0=7J>V4i$4l67z(Lc_4{-L&dz1#C)M*K1gEzP%%Fwu|TL;0FqcRR4fQdEEFmh zf+Q9W6$?WWi-d|rAc;jo#iEeJVxeL&NMi9&u{b2LM5tH-l2|fSED1?06)Kj3B$f^p zOG6UNgoYLdBLKi7khUEkhDp2^Cv`B(@bQ zwgpLSJ5+2NlGskD*bXGI-B7VzNMd`TVtbIp_Cv+?A&DJ?iXA`_I}8;&gd}zXDs~)6 z>=ab&B$C)gsMrN0vFlK=Ye-@@p<*|X#J)krz9NYQuZEP_n~}so_o{)~_n>>$U@a4; z{}6RbphG92g3eGeWh5~dsF(_pm@8CF6-mquDyD`c<_;B8M-uaZifJH;c|yfBk;J^9 zVp>RI-cT`ZBrzYTm=2PdFH}qyNz4x_riUcv4;9l#5(|Ke86b%TLd6V`#Dbt=Mo418 zP%&d9u@I=336fYSRLm4fEDS1Uh9nja6*ET?i-3w*Ac;jn#VnD;qM%|{NMaf+jNr2! z7?2JL)r5*MB8h21#h8%9w4q|mNMbrrF%~2-U8oo)fVkS^A9waeSs2DGjm>E=z4@t}%D#ni_W&srwKoYZriU}f# zSwY2wki@K^V!}vbHc&AUBr#j4m?)B%9aKyVNz5K9CXOWL02Px!5_5!#Ng|0kLB*ty z#GIjG(nw-1P%#-KF;}RVERvWTR7?&@%pEEwk0j;+6;nVG^Mr~iB8hoH#gvf5yrE*s zNMb%vF%={+U#OTWl9(SugoHdJgg zlGq)n*cK$QyHK&MNMiS(V%w0!?nA}4BZ)nLitRuWdk7WVi6r(2Dz*zr>@ieqH@bqp8>rY3 zB(b+pv7<<0@1SDGki_0Y#f~G1eSnIcKoa{16+4L}_6aI>3Q6oURO~d8*cYhS86>f< zP_eT}V&9-*=a9s{L&eS`iT!|zT|g512^G7DB=!p`b_q%BH&hIC|0pc&g6|+lGt3RSQ(PoJg8VXlGuEx zSOt>U0;pIelGsA1SQV1kVyIXRlGqZcSS^y+Qm9xRlGrk+SUr;1a;R7XlGqBUSR<0y zN~l;9lGrM!STmB?YN%KXlGqxkSSym)TBukXlGr+^SUZx~dZ<_jlGp~QSSOO$MyOa9 zlGtXbSPzoe7N}S+lGs+LSRazuHmF!XlGt{r*aRf89Z<1}NMbvoVv~@>c0iJgRsbs~wKf{Jw^iJgXubt8$Lfr|AYiJgUt^&*L#gNpSbiJgav^&^R0 zfQn5(61xZ$n}{TK2`V-TN$fIIY%-GA6{y%0B(bYdv8hO6*Pvq4ki@P-#ik>P-GGYC zKoYwN6`P49b_*&t3rXxYRBSeq*d3_Y93-*3P_em4V)vk8^N_^uL&fGJi9LXdEkF`` z2o+n1B=!g@wg^e=F;r|ZlGqcd*b*eMr%@`$uHImpHsMs1LvA0mMwMb&`pknKg#NI>2)+331fQoHE68i`h+lVCg z2`aV;N$h|GB=0Xkx&+`LRBR!V*deIcA|$cHP_e~GVn?82OOV8lLdBLMi5-KAEkhDJ z4i#IDBz6KSwgO4)BvfoAlGrJz*eWEk(@?S1NMdK8Vr!7Z&O*i3B8i=YimgKuI}a6G zk0f>hDz*Vh>>^ZbBa+x9sMsbXvCB}g%}8QbpkiB)#I8ccwjzmLgNkiK61xr++m0l5 z11h!yN$e(6Y$uY~EvVQoB(d92vE4{wcc5Z>ki_mn#r7hJ-GhqlLlOhs4-IM~?MD(z z$b+Om2c!e_6QN>`NMcD)F()LkWT==kl2{5<%mqm-6)NV6B$fshb3+nKhl;r)iDf{= zJdngPp<1KnQ@N`LW4VoEO|>5l<)fIPH~t_&4p zL=sbhiZLOHsY1n=k;K%XVk}5v>QFIOBry%B7#ot9CRB_aNlXhW#(^ZJ4He@=64QZ- zaUqH6LdCd|#PpzIJV;{tP%&O4F$1U=ACj0MRE!@<%m^wbfFx!N6%#}fGl7Z;A&Hqn z#e|W>%%EZ-NMhztF;OHj3#gbFl9(k_OdLtf3MwXnBxVg2lSC4;fr?2XiP=KMq>;qz zpkgveV)jrmStKzBsF)m*m?Kn79!bmzDyD!W<_r~6L=pqti3Uo$pnE!@$rOVE-HXQP zz`+2z#}Ot8x)%*32D&E=CI-3}4I~D-Ck-YBx)%*32D&E=CI-3}4I~D-Ck-YBx)%*3 z2D&E=CI-3}4I~D-Ck-YBx)%*32D&E=CI-3}4I~D-Ck-YBx)%*32D&E=CI-3}4I~D- zCk-YBx)%*32D&E=CI-3}4I~D-Ck-YBx)%*32D&E=CI-3}4I~D-Ck-YBx)%*32D&E= zCI-3}4I~D-Ck-YBx)%*32D&E=CI-3}4I~D-Ck-YBx)%*32D&E=CI-3}4I~D-Ck-YB zx)%*32D&E=CI-3}4I~D-Ck-YBx)%*32D&E=CI-3}4I~D-Ck-YBI`f*5fs+Ar4mL~- zbXOWk9q8^fm>B4;G>{nR?lhPf=&m%780hXam>B4;G>{nR?lhPf=&m%780hXam>B4; zG>{nR?lhPf=&m%780hXam>B4;G>{nR?lhPf=&m%780hXam>B4;G>{nR?lhPf=&m%7 z80hXam>B4;G>{nR?lhPf=&m%780hXam>B4;G>{nR?lhPf=&m%780hXam>B4;G>{nR z?lhPf=&m%780hXam>B4;G>{nR?lhPf=&m%780hXam>B4;G>{nR?lhPf=&m%780hXa zm>B4;G>{nR?lhPf=&m%780hXam>B4;G>{nR?lhPf=&m%780hXam>B4;G>{nR?lhPf z=&m%780hXam>B4;G>{nR?lhPf=&m%780hXam>B4;G>{nR?lhPf=x$c722KW0UI1aR zI3wtcA`S-7-DzMx=q^2|80hXam>6jI3}hbCumc0=t~8Js=9a280bDV5Fdm=_osoxK=-ME_#h0rKMf=Xx=#(n2Vv0tX&^DseQF>+2!rlV z1Brp|Qv>lq7<7LcNDOqJ8i)_Vp!?H6VxarfKztAe-Jb>$1Kpu5C+|!1`-3^rv~DKFzEg?kQnGbH4qkFz8M-kQnHWH4q@dbf*o755k~()<9y-NOz8a?pXtgf$m)csR3coT{j>x(A_s6J_v*EUIU4N z?qUP+K^S!Z4M+@h9}b8Q!l3(aKw_Z#a6o(z2HnvH5(C}Y2I7M-=pHVR80cOu5Fdm= z_vC=YK=J2Vv0tZXhwxeQzK>2!rm)0f~X`%>nU27<4BNNDOpG z4u}uJpnGjVVxW6&KztAe-G2iT1Ko!M;)5{gZa9z_=&m>rAA~`7*nq@9ciMpXAPl;% z1|$Z$zXrqyVbFawATiMWH6T6+gYJt1iGl8q1Mxu^bYC1u40L}Sh!4V``{F=ip!?%M zd=LiRYXcGk-E#xtgD~h0Igl9WPB{=CghBV(fW$!e+<^EX47yhiBnG-?4#Wpx(7iSw zG0;6XAU+6#?wSLMf$p9I@j)1LuMJ2Hbk7Zl55k~(Z9rn6du~8{5C+{z2NDC_Q3v9K zFz8M?kQnHWIuIX(L3iDN#6Wl7fcPK`x~C2#2D-Nn#0O!}J#`>4(7kmaJ_v*Eq;ovL z!2r6W4#Wpx&>eN24xK1spnK{P4{$Jm?yUo<0b$U+b(s#GC}NlzPmFo5o|1E~RF z&|P+&4xK1sp!@7VZUNnI2T}vVp!@7VVxar&KztAe-Dd|91Kn>2;)5{gK0A;Y=zcp8 zAA~{o*@47B_uGN^APl_B`F2Hjl;5(C|32jYY92Sx^lMGTw_ zp#ByQ^xhHBeRdlUa4>-Gw*#pG;ZKYV3_BeuWV zy@nt$&^?DBJ_v*E!UKtc?#2W0K^Sxw9!Tsrl6j!J@IYdqyYWD3Kp1ov9!LyyHy(%& z#-O{I95@(2cjJNipf)B{j2US^7w9fLkY3Q;crbOKyYN6_pu6#4VxYV5Kw_Y~@nB-0 zyYN6_pu6#4VxYV5Kw_Y~@nB-0yYN6_pu6#4VxYV5Kw_Y~@nB-0yYN6_pu6#4VxYV5 zKw_Y~@nB-0yYN6_pu6#4VxYV5Kw_Y~@nB-0yYN6_pu6#4VxYV5Kw_Y~@nB-0yYN6_ zpu6#4VxW69L1LhLHeq6*`|&_xp!@P*Vxar+Kw_Z#@?c`1`|&_xp!@P*Vxar+Kw_Z# z@?c`1`|&_xp!@P*Vxar+Kw_Z#@?c`1`|&_xp!@P*Vxar+Kw_Z#@?c`1`|&_xp!@P* zVxaweATiMXKA0Hj&ODG9=ng%Y80c zHx(oXxG;V+Zx18}x_=KQ2D)z# zBnG;F4<-h>Zx18}x_=KQ2D)z#BnG;F4<-h>AL}9mC&Nx?eg=ty?k5AO1Kn2!;)5{g zeln04=)N)#AA~{olYzuQ_mzS8APl;<2qXr&#|Xp+VbHx}ATiKAWFS5WgYF#ziGl7R z1Mxu^bnh5Q40I0}h!4V`d&fXxpnJ$bd=LiRHw6*{-9H85gD~j6DUcZG{wWY2ghBUB zfy6-fPl5O#Jb{^k;WpI29Lx+1jLZxSpnJ?f>Ol9Jfz*I7=pHkW80cOz5Fdm=_n3ji zK=+z~_#h0r#|$I}y4MWE2Vu}XW*{-py=EXj2!rl11Brp|H3RWM7<7*rNDOqZ8Hf+U zpnJ?fVxW7?KztAe-D3t4LyjZRJ!T*=(7k3LH6RSS#|$I}y4MWE2Vu}XW*{--@f^@S zW*{-py=EXaAPl<43?v4+*9^o5VbDEhATiLrW*|NYgYGc{iGl7l1Mxu^bdMQG40Nv< zh!4V`d(1#$pnJ_gd=LiRV+Ilf-D?KogD~hGGmseQUNaCMghBV1fy6-fnt}Kr47$e* zBnG9%V0y6`HAR{LOa(cPQ%)lVY z$jN{lmsgn?7!(;f8Ib)3x))B9k&^*AOhI>`f$RX?i3Tzsgh6+pfy6*}qJj7z47vji zBnG+@4a5gw&>d(XG0>f8AU+6#?mz>Hf$l^D@j)1L2O3BWbSD~!55k~3&_H6KJJCRV z5C+|W1`-3^i3Z|>Fz606kQnGrG!P$zL3f~m#6WkVf%qT{x&sX)2D%ds#0O!}9cUmi z(4A-?J_v*E$1Kpa}mS`W6-@O4jc@iyRg7~1_lPu-B%!Wpu4bOVxYUPKw_Y~uwY`KyRSfEpu4bO zVxYUPKw_Y~uwY`KyRSfEpu4bOVxYUPKw_Y~uwY`KyRSfEpu4bOVxYUPKw_Y~uwY`K zyRSfEpu4bOVxYUPKw_Y~uwY`KyRSfEpu4bOVxYUPKw_Y~uwY`KyRSfEpu4bOVxYUP zKw_Y~uwY`KyRSfEpu4bOVxYV0Kw_Y~>|kP`yX!z=pu6l~VxYV0Kw_Y~>|kP`yX!z= zpu6l~VxYV0Kw_Y~>|kP`yX!z=pu6l~VxYV0Kw_Y~>|kP`yX!z=pu6l~VxYV0Kw_Y~ z>|kP`yX!z=pu6l~VxYV0Kw_Y~>|kP`yX!z=pu6l~VxYV0Kw_Y~>|kP`yX!z=pu6l~ zVxYV0Kw_Y~>|kP`yX!z=pu6l~VxYV0Kw_Y~>|kP`yX!z=pu6l~VxYV0Kw_Y~>|kP` zyX!z=pu6l~VxYV0Kw_Y~>|kP`yX!z=pu6l~VxYV0Kw_Y~>|kP`yX!z=pu6l~VxYV0 zKw_Y~>|kP`yX!z=pu6l~VxYV0Kw_Y~>|kP`yX!z=pu6l~VxYV0Kw_Y~>|kP`yX!z= zpu6l~VxYV0Kw_Y~>|kP`yX!z=pu6l~VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~ z*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$ zVxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFy zyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU% zKw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQs zpu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~ z*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$ zVxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFy zyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxYU%Kw_Y~*kEFyyVpQspu5;$VxarZ zKw_Z#&tPJp``AEYp!?ZiVxarjKw_Z#* zj0zkKpnGm$VxW6%Kw_YKZeU`ddu>2spnGm$VxW6%Kw_YKZeU`ddu>2spnGm$VxW6% zKw_YKZeU^!G7JovjGPR}V;PMy3=D;goD9h07NEQ9D;YT%kjDT(chWa9axx(I?Ll|a zcQSG^AouM-chpZr69e51Ka-J@0lAM2x?_AHBPRoLUl(+K(Mm>62GE&CFgJtlb_9hV z=&nbY80c?zsYq zf$qJ6iGl990*Qg{y@H8>?zsYqf$qJ6iGl990*Qg{y@H8>?zsYqf$qJ6iGl990*Qg{ zy@H8>?zsYqf$qJ6iGl990*Qg{y@H8>?zsYqf$qJ6iGl990*Qg{y@H8>?zsYqf$qJ6 ziGl990*Qg{y@H8>?zsYqf$qJ6iGl990*Qg{y@H8>?zsYqf$qJ6iGl990*Qg{y@H8> z?zsYqf$qJ6iGl990*Qg{y@H8>?zsYqf$qJ6iGl990*Qg{y@H8>?zsYqf$qJ6iGl99 z0*Qg{y@H8NlVf1m#K_42+5=+^^ zav$gpE|8rd47zg*BnG;J3&aOu(4AW#G0+`cAU+6#?%V>2f$rb}@j)1L=N3o|bO#rR z55k~3w?JZ`JGel65C+}31rh_@!3E-jFzC)LkQnF=E)XAtL3eI}#6Wj&f%qT{x^oL8 z2D*a_#0O!}om(I=&>dVLJ_v*E+yaS#?%)FPK^S!B7Dx2f$rb}@j)1L=N3o|bO#rR55k~3w?JZ`JGel65C+}31rh_@!3E-j zFzC)LkQnF=E)XAtL3eI}#6Wj&f%qT{x^oL82D*a_#0O!}om(I=&>dVLJ_v*E+yaS# z?%)FPLHL#&q^)urDGWe&Zh_R@MG^zuxdjpf-N6OY2f`1adO>$^f%qT{x^oMp4s-_> zh!4V`JGVe$pgXugd=LiRxdjpf-N6OogD~jMEs)qtBzr-3Zh^!=cW{B!fH3IJEsz-K z4lWQMgh6+1fy6*}aDn(B47zg*BnG;J3&aOu(4AW#G0+`cAU+6#?%V>2f$rb}@j)1L z=N3o|bO#rR55k~3w?JZ`JGel65C+}31rh_@!3E-jFzC)LkQnF=E)XAtL3eI}#6Wj& zf%qT{x^oL82D*a_#0O!}om(I=&>dVLJ_v*E+yaS#?%)FPK^S!B7Dx%D+=*}&W80Zcz5Fdm=cW!~iKzDF~_#h0ra|2f$rb}@j)1L z=N3o|bO#rR55k~3w?JZ`JGel65C+}31rh_@!3E-jFzC)LkQnF=E)XAtL3eI}#6Wj& zf%qT{x^oL82D*a_#0O!}om(I=&>dVLJ_v*E+yaS#?%)FPK^S!B7DxccZwkPo9B6ilrOHef{zb3{EWFDDIm83cnUk22i;HbMr({__c5{ zfXWS+*d$Q+wQw?k$_<#k( z+{fCD;=Z|{@MG;pao;>p__1}PxNklv{Mfot+_wM}er=o#p!@-I^FmPgwQ(|l@&`<8 z5h(oHI2l0s117c@6n<@-450i06I%juUmGU_D1X4jmV&~sjgtYCKVV|ZK;hTM$pFe9 zFtO#J@N4H}0Ob#u*a}eiv3H}mZzU-F*t=2Ow+a+~?A<8tTMY_7_HGpStpT}@y&J`S zYeC`1-i_kEb)fL$=tgnhdQkXrbfdU$6Da&TI2k~9^1I){DmOs)+kw=8Fz7xzkQnHG zI}jg)LH7ZI#6WHV@j-aEJfy7$x*rh42jM;P3=B-1-6-zcC(pp3$%(oi{g6BZgHb0Z z1L%H0kUKzn4}-$Klam3ob{Zyj1QZ6HoD87#<1n#fpfKQsr~~-}r1!Wy1H){nUXU0_ z?Fp#+Kz9{_)POMPZbFbhKz9{__#h0rn-C-hatnwL!l1heL1Li03PF4jJ_Cwh&TbU< zU6N;D_zd+MxUa^{z;Icffq|O~;$M&$s6M(T&%mGr6$7~sWZrdo1_ooO7)TvR9CU9W z$X?Jrf*>^@47xWEBnG-i5X1*z&^?JDG0?q{JJOhI_7o-ja z*}=ff!0=d}fgu@54CKBipft_}S(gi|YoCF_8LAHCHjsJGLE#J)1DOXB2i;)^vKMrx zAxI4fgYGZ{iGl7k1o1)m6*N9TcQbG?TQUk)EJ0(G4pgSf(d=LiR6$ugpxdp@rVbEQXATiM0ksv+@ z|B+{4@Z#=9ai5wZB+r1{3{nHaT2L|M^DVTYV#sGFfbM$)*#Wx$5u^`1c`y}e+2PC7ep!*&{VxapUL3|Jf-S-F* z1Ks}!;)5{gzDJN4=>A6#AA~{oJ%YqQ_dkO8APl{}IFoVbFb#ATiMWk03q> zgYJ6-iGl8a1o1%_bl)RL40Qh^h!4V``yN4Jp!**|d=LiR_XrXL-Tw&UgD~j6N01ok z{zniWghBT`g2X`gKZ5um47%?TBnGwAU+6#?t27@f$o0<@j)1L z-y=v2bpIoW55l1P9zkND`yWAk5C+}%2oeL`{|MrPFzCKVkQnIxM-U%`LH9j^#6b5y zg7_c|y6+Jr2D<+d#0O!}eUBh9(EX1fJ_v*EdjyGr?tcXFK^S!3BS;K%|09SG!l3&e zL1Li$A3=N&2Hp1v5(C};2;ze<=)Omg80h{-5Fdm=_dSBdK=(g__#h0r?-3*hy8jWx z2Vu~Ck03G7{f{6%7=!L>a^PS9-Tw&YGcYiK?t28O1Ks}!69e7%2oeL`{|FNU-S-F* z1Ks}!6Jvpz2fF_eCI-6i5u^@u|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^ zObm42BS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hc zbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Obm42 zBS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL z40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Obm42BS;K% z|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^ zObm42BS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hc zbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Obm42 zBS;K%|07Hcbl)RL40Qh^Obm42BS;K%|07Hcbl)RL40Qh^Oe_hS2eYAL;~?>5s93Em zhzG$bFfk-`pgSNz=7H{ngs5U*0Nnuz5(C`{2@?a|0SOWV-3bX3%Y~X3h-6+KRICt5 zEFUTsfFxD`6$?TV1KlYJvIBI-B+L%bosu9i&>fR7u{x+;dnCQ}P%#H2G0@$UAibcw zC}Db=pz1((QNqMPcTa-Uf$pM&iM2u1f$pM&iGl8(1gQhvMF|rF-8~5s1KmXl69e5n z2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s z1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{ zMF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl z69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF z-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n z2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s z1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{ zMF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl z69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF-8~5s1KmXl69e5n2@(U{MF|rF z-K_@_1KqU;69e6?2NDC_wFeUe-K_@_1KqU;69e6?2NDC_wFeUe-K_@_1KqU;69e6? z2NFYGmj=3949#J80fw|kQnIxJ(w8izCDl_=>9#J80fw|kQnIxJ(w8izCDl_ z=>9#JSTEEqsYvZu&>egrb)Y->VCq13@PWiYck;o+K=cFm=0zqP+I|E^2 zpgRIVVxT(%VPc>=0zqP+I|E^2pgRIVVxT(%VPc>=0zqP+I|E^2pgRIVVxT(%VPc>= z0zqP+I|E^2p!*p?VxapPVPZ$2{%At-+cBtEA5vZb-7g5z3%YL*rWbU-AV>^!-ylp3 zbiW`-40PWhObm3tAV>^!-ylp3biW`-40PWhObm3tAV>^!-ylq^U^VFeKn{il!Y~mA zhC-;=LL{*wsMsPTv0|v$VkEH=sMr!Du~MkmQY5i5sMs(TsMtOvv3{u7ek8F8P_Y9@ViTca2a&`kLB$RsiA{!z z9YzwH0u?)gBsLW)b`(i$8dU5UlGt>p*l{GW8BnnkNMbXgVkeQrW>85Ta;VsKB(W7xu^UKYE1_aHk;GO(#cm;qt%i!-MiN^C6}y8Z zwiYUO7fEa#RO}v-*m|hgeI&6BP_YL{VjH1i50S(+LB$>+iEW08Jw_7S0u_6LB(@bQ z_7q8M8&vEWlGt{r*mESY9Z<0sNMbvoVlR=zc0t8nA&KpVioHe>+XEGQgCw>WD)tsh zY#&tY9g^67sMvcXF^1m^3`O0X44^anK^RnvF#cv>m;@CA-7NqTWBSd&un8&#JA0q` zHv_|Es2E5uNG;261_tIHgn1yftiKr;jCvqv$ z|F8(iEl@Gg{#TG*QIK1pVz52bV!s&}F7z`+2zixB5pU62^)E?$@z=B5p zU62^)E?$@z=B5pU62^)E?$@z=B5pU62^)E?$@z=B5pU62^)E?$@z=Ognzg2X^~@xsJFckhD4KzH%N#6WlNg2X^~ z@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N z#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJF zckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlN zg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4 zKzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~ z@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N z#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJF zckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlN zg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4 zKzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~ z@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N z#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJF zckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlN zg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4 zKzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~ z@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N z#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJF zckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlN zg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4 zKzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~ z@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N z#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJF zckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlN zg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4 zKzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~ z@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N z#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJF zckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlN zg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4 zKzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~ z@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N z#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJF zckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlN zg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4 zKzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~ z@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N z#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJF zckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4KzH%N#6WlN zg2X^~@xsJFckhD4KzH%N#6WlNg2X^~@xsJFckhD4Kx5!AF#|>h1||m%29Ov#bRRQJ z4xQ$3K!-d|oK74Nh#`lrmcyaNX@Mg?xS;|QqN-n1g9J+!5e4BU1TJuVRDlEw9uWm$ z`Z*jp7+|o23C1FYZed!$xPSo_J~9A_tw4whED%`0@W@~R14w*<09YO*Ca{2UkqIeq z0RyV)M+T%pkSkDi{2yTOk7B@x7cem+0TyOvRyH;^c8cw!o&l5wKlNNPI8DMExr~gA zgVWW-yNZzi2+0#~)8JG&-2F#ts3VnDL@`MK=5jk*c3k^`NUS zM==A#Xc&ylFaRyD9Y_r7o>78X7#JAPF)3-8AE`qK(#Oop#lXbKz`z4qmjb%emX`s{ zmqAj8!bHBv97STpaF9X(6oMnh-$Z#-B=XDu2O(enYeQ)e8-|l2zxdXJP(O>>=4MkP|C>A2N8yY6ppfp?D zm;W*eU;bCbe)-Rs@a2DT+?W5;;=cTki2L&2EdgN$$bQ3wFaLiEi%9SFUb1x|3S`||37lR{J)U<<^O~1FaHH{zWnbj`|^KU<(L2B zRbT!esf6%BVj!GZhRWxz`trZM`pf^8+AsfgYrp(oRrBS4e9f2t0<~ZMo76z?{hBZT zPe9oqF{hd@{}sBw{Lk+G^54Dt%YTucFaLYGzx>zf{__7u*O&j!U0>jN*1*un*u>P# z+`=+3DLEw-w44+rU8BpVXJlq&=j7()7Zes1mz0*3S5#J^Xh7pcItGD{00Px925b;X zRt5$JMFs|jE6fZGYgic=DlE+6%}jK2GV@9+bkp-n8I;3$**P2eRn@uE8Qqn`d3nJc zeh5bp%n^ogM8O>KbjC{MN`8H2etkxMLq=9cW>#iKRz^lGbbxED=RBDiWyvAfPBZy&Mzs=2-n3gDb3Hw%C2o{jwEJkuFc5K?j9J7Bo-L# z&dAB0oSTm%mYbiIjLfX8j1!p|jcu8pF|}J?7Ca2M8)1?% zGb1xd3nwcx<9>EY#Ypx>!~N_>*$=X(t8-7T=TuF1S5;R|uiVdG&B(6F$j%NXRT!{Eoel~QArQg9 zz@VX2w!ECWtC^vWM|~{yqc{jU+SBhmNZVU-T9 z%qvN(2rf-ePc1HSW!5hS^W%#l0{Y4MMXB+r6(u0IFsF*J@)xBRmSz^ELfy{jSd?0v zT$-wonWuom7wpWA46e-P2|=YvmF}sz#p(*>sYR&@dHE#@Ir)hxsVRCOvsqO@<(mjA zXF*~~27?GItF0~A|J+51nZ>ChteoYEMS0-xf|%!=faY0sh4RE=WK%(53sGyEfb3}u zg$xkCK-4-WpauY@Y7tgppZvrWaQK7nqXykI4Z24fbSE+B-e1sNy`cMRL3j0n?uP~4 zQ4G3g6?B&==pIne9iO24HbHl3g6??)-QftjhY)mkAn3k7&>elCd-Xtf;eqbC1KnW< zx`PaKZy4yVFVLO?&|PGp`@aMEJtLobVkEOM$=qo z)2WQ62vv-%%-pQJ%&e^JtlS{C32L%3GBP?|vNujnE5c zaf3@?Mn-0KM#e;OPEBS_R&{Z8@$^b|c6MP!W?@A}VOd6Dc}8JHMp3vXPDXZcu?n)4 zfk9G{osp4Uwo)2oCkV$g3X6&|t1>f+vd63Pb2D-?BK!uokCTxxQJx!YpS-#}sI-?) zuawqjSNCOB_hnS~WK{QNRQF}n4rJC2X4DQus`j9^vok|4Z3Nk`sL9O8$ga6i6=XjM z*D^}W%1TB`GU~F|8j1=t3Ny08oi7aaGb_jq>b&aem6pZqmc@+ra1|gc7#P`kEqOs^ zfv_&4vZ|`-WK%|ac3p0EP~poCSIrDH4^$xrh!i>Ujjht{6-2JSK zjH>FU>F%og*&WT(D`ky^Wlb4njTz-FndPk+-gMxt(RGl$0O4=Xh-p{SNpVQHio1HNg zZYk(u0!T6e_lZGF%Th+maz^V~Ve5KE>t;slRz~Y~M(b`yTev1gMo^=Mm6aWot-$Rv zkUk|4!N9JL>!$%|5V@H=JZrDW!%gUVN4 z@6@8aRL~wL5mxr#)DlpA!CnlaMOZ~$^Gb75ixQJ^Qo&`eU}9-WKB#O4m$$Br@;1pi ziN(cMP~+@C=CNlMC4p#dPz9k}oLUl}n_7~QpAw&#lbKiyDtkfta`RJ4b5gA!c7ye? z78HQ(;4di3EK4kb*CXmSP_+oRfYtMs4=4a;Z8jR1IHFD{Rc_*^hQNVPId0|MnOql<#>K((Msh?K6STPW@C66W_kCr@{d^%S0Z1VYd$&1OC z6D6-EUr(02nS47{@^13|bjgRwk258oCO^-Xe3|?@SMqK0`+Uid$)5`)zb1b#mi(Fg zyHxUT^8a#4riNsu#!5-1revn(YDuP+WTw_yNv5`BruKSCrjBH$&PGY5u4Ja}W=W== zWTxI$Nv6JJrv7$GrU}VR6FViDCM7dX?v`YllFT%aNv0XeOfx4+GR;b6 znmt*PX-+cJ+^LdG^OBk7PnTp`kj%7jrXomt@+I%(QW(B-5s3rp>D*nYJV|ZCxwLv@Mxw z`+7;H9mz~PH%cjMlZ5=by0k#c{Oh?#uFf$!t+r`Lq zg6$A9(+RdCj7(?P&M-5bVLQjjbb;*}Gt&jO8;nd>*d8!5U158~$aI746*JQfwl|DS zci6r#Gu>hP#>n)5?H@DK11<(erYBq+%uG+XxEPsUa0xLpz2FjIWO~CT!_4%COOBE0 z1D6^z(+4gMMy4-Z2Fy%fxQrN?esEbcGyUMQWn}up<;KkPhs%SJje#qWnT>%fn30Wz zD~6ekg)5Gcje{$TnT>-hhmlQyYX&o$0M{%=HhDfHW;S^~6Gk>oz8YpWO};utHbcIR z%xs2yn;F?`gqWDwY=l@C*<6GSnAu!}j2PJhg({iZ0)?s>*^eQy*-FJWF|(D5ZDC|0=pGqc@RGi2maF!EyNQZVvizq>tGuJt%EJm(NPQ}bzmz+u&xvn|YF>_sWYGCBL z<zmUxX0C5eHyF8oIXz_N`sMVPk?Wt+8)mM5PVX4` zn4G>d^D#O7WaMLWV`AoGb7NuT<8tF==HqhXXXN8^lVIlKbCY7^6LM2#<`Z&LW#kic z(_`inb2DJ%lXA0U=96->X5^D|b7AI_b8}UI7c{_@$aLypBGc)^ ziA-mXCNiBpp2&3WWFph~(}_$M&L%QlJfFyP>0%<&<;#goSFR>9UA>;jbnRv$)Aiel zOgHW(GTpqN$aL#rBGc{1iA;B%CNkZ9uFiC~QjnWnQkGfQmDxF!*}tDTdM9)0b>{r9 z%#}=?%*{+Qn5Q!>XWq?pfcYrX1?KZi511b^ePRB{^pE*B8wWE}BbyL2Q#+dyGgA+n z4wztMngFlXIT_ip0C2C8k-eVj^h!|W4#MvlnNBdBWID;uX2Z|QG=clQxh^wOzY5X2 zfd&R6BQqo8UQO=!q)a0N#!9BCZ0^EL)8O_hGO{x=bJ~i6j0Ry%My7jA_nGc9O=0t3 zn!?I7ja!qQ71;vp-JQMKU<(WxE171p1qw6GLbd?XG-6<6=JbZ!W6sF*faxLAL#7#Q zK}<7PnPzdDi=xFw25o0COT()Rorg=oz^N8s&(_^MNY%xr8SefRb+k@!F zpxC1iw#S&Ul4&7ZsxZ?cBJ6p>^pxo-(*m|MrUk4_i_q;sbUje)F$CLV!dS_)lr3MF zX&DjrJY#y!^qgr4TLIG&R;Fd>_VB|^K(WUdY>z2pCDTf_N@1o|a8-(o;La6jP7y7B zUNF66ddakct%_*{E7K};dj#Popx9#yw#SUIl4&hlvoO;-xGLQCykdII^qOf6TMN?~ zR;G36_8>aGDE63x?J;MpWZKBqE6lWs2z%Zzy=8jKw1KUUX#*?MCUkocqZ%moSc2`b zV60@?$~Ik?X&VvtykmOL^qy%8+YF{HtW4X`?GcBYfMSm|*d9y9N~WD`3x%0>!Byc7 zw+~DonLaY@U|YnrgOzC)x;>I`6Hx521=(W^DhT$ntrlk52UmsLo=;4lnLab^VOztr zhm~m`x;@fx6Hx522is%FSjlvdZL2WTA-F2s_IzRb%Jh}#0NXaE1FTGk(Cv|hn}A}E zBiJ5Ld2p0%zcAA=xGLQCd}I2~^quJl+X1E{tW3wy?U9F@fMSm`*d9=MaFXq$Fw-fx zD%|$`VEW1Qlj#K8DW(&wOsCN8L5#k6hVfxGTm+1oAJ*Eq+OqbB@QH7g;Vvi@- z9#DC3mF>AO(>1s%-1huq`p@*A=?dEmrYo#W*U;@j^n_9D@dn!iDi3b5eH3Q8Mc5uT z1~x`EP(R@l(+yUpTj=&^!c9Q2#}{l5s64pK_FI_g9$Xbp|FAK!F|&a>Ab*(durl34 zw?`Xp0*XEUV0%F2!9y-qVWvlLRk-b8VPj=uWqQEH#`J)d=@Gg;i0MKUdjdiBn1ITI zr(FEPOwWk0hmDP$jh*QUmjKffR;Fj@_UOY+K(QwnY!9eBc*!Lx%=8Mb3b%ha*f`lZ znO<;7F}+}AdWCL}A>0HMdqTnXfXainT*|^s@8GI%+r!1i&Bo32hD(L%4J*?-bbE~9 zCZO084z>qW9(?4|6=wPbSB2Xi9yVS!UZxLRdQ2Z!nLeT0gBZ|9wnvanfYGyF&|Nj% zQX2{HZPa$)+x%JhpnS{lWEOSmDZ_KP9x z7h|qu`pe}j%=DMbkCEvwmk)^WVr2RU*9y0PITrgx*hJYxnf`G3GyP#@`iE}6HQW$X z`y~*x+voUf-GO{spg@cGtMm8q6R=E9}vDh!pCc!4b#=sTD#=y$Pgl<1# zr!P(qMlu4H57N)u*dDT6+|R3vaz8!hn1C; zlYxOv9yD0UtU6a4lo&v`n2}A2O`1)bjfE?NjfItsjk{Q$pBHJ80x=W9%ghMsRWU;n zgc74?y|cR{o3c8a%I-*TRxn|dWK&gVQ%m0+4d$CNnzE{*Q3E0xK}0Ph8xL1Ii0A zjf0hqkNdB`q9!AvZjO0wyvzTBM*=37ESA{E3jH2_N*sIwWS?@kAc7=lHNQeW@R1oMr+d}FYRY_Nzi zSi~gt?e1JK-vrDzO?|&RAIygabs?Ao3u+zaN;W}0Jz+LMK7B?uL9Tg>Y(iY~LBtY9 zHes&iAYu)OSi#69!nFxRYz7hgLBwuGHc_slAmS8=IL62(#&rQiTm%u9LBtIZafOjh zoa-KlxDO&;fQToIY!Y1WK*W0x@exFP0}-DX*(ACCfQY}0Y?6FzAcBdJO^S~PMDT(L zX%HdK$R^FF2qM%#gc2j0AfGPC3v(FR5UoH^HUrHJv4aS3oP#DnQ5o!r!~j|^2}uf! zjEs;(0m=?+>Wqwx;EVxbfw;3FDMnnF&5X^Q&4SI6&5F&M&4$gE&5n`zI@=#6cwd|? zn2}A3O`A=dO@PmUO@Nh6mYXg3b$BOZCp_Ue!&#k>9KTJ%t zi@`Bx&M3*|0*>}lFdvkTRMU5tgE^o?B+2FqmaYVem_bsK8(5?oECNbNpj_t2T*;=u zS0T)%z*ou0rod;x$fn3=2_ozm*_8MkL4*^CZ~+mXAi|ZAO_|RhM1+8d07f=E3I4=EcZd%cg!9lv6>N=@=uMJ(~lY1DiZw6`MROn>shs zv1(ISMpt+cBe5WX&B-kY3T$6S&w5vPNj5)qHviqV;IJ}clw=D?{kXdx%!A~xz|_yX z8^L@~4g-axFLNcE7T;Q7HZ8t&jBHwbO^j^Xe9a)DgON>#uNy@4fQYFeVj?4(F5her zF$Y8}1rZBD+SY)G21YhS+XxmepfCYpP@RoPfspblh%K0rIhbirEy(vE{FjlOi+oTn!dXo z%rS=)R-IrDGzE5pIgk_>nfi5iFNkjrN`Ig*3S+KhGvfOv%x1**pOMXoZ#yHKG2adl zv6qp}gzo@|I0_;TGP0TSodyvXK*SkFHZ#6!AmTQNxX#FC&i4>RJOdGr7}+fN-hha= zAmST{_yjWkFNoO6$YuriD>N)2nH@rcivduWf|^3$B!)&n!@7~5n=Ohhnk|McmMxBv zxt>k)C@7#onCUnpTL@byTPT~M5CfYbE1MNJ)A5Oh!HmIhi#_42U`TRf$Xv;0E2JaLW-Fx2$Yv|V z!N_JO#0et!7}@NF1VMxlh!6o0k|08qk{s2nCQfZ4kl6$mRrh9yEl&84s4) zpzQ&sPEh^>*N@R`X`uRXFT8$aYG7oGXG>s9V6zd@W3yppbK+)d2u7(Pz2SC1QyjF0 z%w+Vek9U`3%Ti~{-aQrUOHczLN1ZKq_jEAVlu?o`FZKKGnP46?4bBF0Kxr^tHC;6w z6eyX@m29p;rNV5kLS>9>u0m#vY;Hp4Ai{=`&0WZzkmpB0xkeh=>H~NMU625z1s_^A*YinO6cLOc>ex;XZ+f7P$5Rg%>+JxcvmG9Kh)a zl0Wm=qCrhuP&1QFy^))pt$?kNt%#91m+9|(PznNJrge;L>1-Kn8Eh^>uRAM$#I2NF+ zsG7ceF_;6Y1ys{_F9mZz=}eNXBK7C)P!6KlDkz}g|i>wEWfMQ2AefLH%2U?)qLYy=RA@4Ym;oZDFtUXS%>xmOLBxDUws4`9AYvVeSjET| zA+!ZVYy}YqLBw80wn(AlAmR*&IKjvkC3FcyTm}(WLBuT(agC8JTId0YcnBgMgNPR( z;t3;LjLqZa(76TJ(>W$LkY&C4P zY;|n)Yz=IUY)x#Ll6vQ~&PX3+6)--UM~FiRrudgGE3I50rE|nJd|n#VUo_ zlEtbR*^tIU~ zt7c1LWy|JfdNt7=xxNX6I{{kX@Ip$8nb79VEOoZoyAOiH(~MD)ZBFX{-G{+EP?nWs zo14niu=^-j0F-S(!9A0?k}XecoiJOT*m_2`Jh5g*wtTS`5YfrVRv^{`B6>l@G!QX~ zk*!c{4v3fwB9?)OMIdc!K|~`XTQS^$$YBHu8Bj`xgbO${!1c{Mw)vp;&E9&D_d)nC zBinSg8EiAya>X{V<+8FBqqlDmRWG!*fwpfJLEATr)!CNpJ`VPwC8(%8$s3=PX=nf~ z9#2DfkOaFlm8o&}S%?TI!K$Y3J`dr6602(Z?u!r}D5-)%Y7uiKTbbB@VYV_U21d3r zu^o(TGMh(b#a2n7jQaFqlmz#$B-(V<*WdW&LP#bRK>wxYCeLgAJ}(;KvXvxd>Lexti2 z+gf$Db-OP^!U^1-yb581>I~KN-Pa*JNa9o#XJl)Z5&{w8AVQdttwl-}L@0p>IYzctDGd;z2_lR@gdQVXo0J8Jumus8 zjBM>v&WvmwQZ69ElaZ}c%7>AyOUf5S1TnI8OND}nFc1*|B4R;ABuHHfBU`UjCL>#) zR36Bb5=ORusY(#56y(ST5W&vKHW41)(Ch<=Wl%u_ifL9*R~KH`KnFQM{aR2L3L4>{ z&TTKKMF*-Y*wh=@nc1S5`ZXD${VZ@ZWiwMh+ZHx(Sro;#m2Df_cD5ai%=_7{F)aWk z3=n2BV`N*!wwi4M|qS6sc}Twy9D*AYvjT+cc>uAYvwnn99gDU1~mvSO6kcf{3MzY%`?RgNQ94 zVgn=FOsQQUVn2x3&B!)O>L`df1tN}tjK2sXIvLsKz`cx!A86!2V+vHvF(5?+JZ7L` zko>rx?Eu?Bw#lIUsCyX{+#t+!gpqA0+b*_UY?Gy~uuW!Vo5Rg?q#GqaM#Ak!&5uVI zJ?nS6OR^nRXFIn0BRHsxKzZnRDpSku&k#PO)H{*N)VljCLX0}=m0#BWBn#d545f(=CQg9vU$wk2|+AVLa6h%vG)l~Vu_iXcJ@M5r;cEt4|< z5r!bb7DQMwvMrZ$1`#eG!WTq%GP13Z3kDG(AR+-o#4xhWmrDmZ_ZA}?%B(pjv>^vd z0U!*@qUac$9>AqCf`BFk(6|$%E<~^zMFrW;v7KkTz;==C65D0AD{NO8nUAyGXIcYF zAt20V%*b|#?J(P6ws~?{Z1Y&zR&lc#U-qwMtc9nIXgI4Dk}(B^B|$B@8_^+<>b|rY11Q7+OyXE`f{|^#Ts4Sj01-8eY#Zd-Ktwl)XlG>GC^r#A zOal><7}++-%>fZ}LBui;v51jvv)mdGu@OY91sT5sL=-TxZH0Rrkv*aL5=w!i1Cl?% zu>dB(F~c+!RA@rW#5-(v+3vC32jx$b`=C$+kwkNxp+99C@>Ht4YW$M|@)BzEIWTt28Y|qnoGj&45 zAld0fDpT)nrY?vOC_72Ay-a25+s)Js5dxKqpqT0bb4_6J*bCu;;!%?ARVq{eZl*qn z5F{>Nr!r00&D0MO0>z~y+nZFTiMyF5K!iZ?2{LvfgbT|4Anqgx7vx+JcQS+vap~Js zrb)Y*ra**1E(NKW3gLoWDarOOm1**BrfFay=xF%+RHiArnWjU8K&}O8ngQX0TnggO zgm59Q{GiVEF?~1FEQlD)nX@5WkTWIOK7rZ~OmiSYpw{r`RHmuBndU+SAddZ#$~0{^ z(>#a}$gz@aUm>ACA0h^Far$ni1z;X{z!j9dA2C<5?NCz?X4|2r$jG)s?l2?UPB~EN zEq9WUZI|2`5OEenTmuo87}<8q-2oAILBxF!@dQLXU}W1P_Xh=m z#BWBny-F+~f`O53pAr{{;0F=hjBNXrL_vfUh!A6BJD{WhA{0S{7Kl(|WIL#203r-Q zgcXP|V`Mv|rh-?s%&d7F5 zsSrdIfrx4lQO?MAT&WR6w1J2wMz#}5Js_eNL`(w_lNi}fD$M~Ab3w#15V44n?Ud3Q z5U~+NtYu_7t+X9P>;Vxw7}?G!9Rd-DLBvrIaSB8nV`Mw4bOA(M1rZk++0H55W@J0B zbO%H{WMsRb^aMma1rhH+#4AR&i%MTW#8(jU4@CT8WV@us0wP#J1Urb}0TCRGZ0FR3 z8QCtYNq|@)jBGp91)vm?N?7dyTAvAO z*n#G*pe;N|F~tBbn4ld;SRKJM6V#Ri5fE8;4FWF85Cm8j%muT+1egmZz=lFta09?% zka4VUY~R^_u&FodYqR}i`^EN~?GM{uwtsB@xfr+@xtO?^xmdVZx!Abaxj48uxwyEv zxp=sE8JU@W2|Z`K0xBv&m`|9I?E%|Ewufxn)s)z_v$9>~<`ZUP z)9SpCWxL58E{-zaoCr4pWxkaQG~dl-?JmhBqRu6{n`t2={~Ll@ zu}q5~98kF=$t4CJJ7Zc55d#-aT;i!r(|0p1fe3-hCP^*{aAC9*B4o-a$t4LESOyU= zW0d5QI(a<(xGAe7m-NY#=_f%9nUm^VvgztvvLKG!Np&vybagIy5J%ypI+tR)I+r4d zqjXZ8OF3PgOBuvbIjPR2ny${J3gW1pROeDpSLad(aWqaIPgm#C1TnQvo=jKg(l%vH z-_5if;sS7S$fX1E%nFDYxIE<21&`t|t%Qhy%0o#mJ&4#Uuo!q6K$1%zBDNYL1}eiP zxge9AOlu%wkN`7;s9OsWg9MlnL~I>I3=(3-sZ29=Gp&aRflG8QlT@aeyO}mXgg})~ z`fjF;5FW_=ph{vBgbQ*yh`SlWg}B-@m1)*)rY&G0@PMf#msu*)?A=UTAwm#0o2N3( z+0C>KA_Q@=MJm(W-AvmdLJ${QrZUaj&9nm|1aYucD%1SkOgkY$5C>a>BY77@$PAo# zc0)KY_wIpkVeZ`v;ey-?a{fLr*Ai5lOLEzyGA-E6v>ze_a%=i-rUMWj#F@5`*gFUj zgSgWUB6bKO263o8MC>p`4B}D;h}aQ`7$|Hdxf~&4M92N9XhL6kw9?y1h@mA;z^Jf34@0CBo^D$|nP zOcx-^KrT=B6y_3Uu4KDokY4N#&BK$x^0Eh?$5rK?s-?XAZL=1?C0};s}BA$`$yH+NM z$N~|?AR?cU?T1z+h^PV)%^;$lk?o;Y7bDwGt$q-zo0098)>IHN3q(v~Wc#hP07NVW z5epgF{%EZR5ovVX2N~J^X`KcUXF$YN5OI-_?Z4J-5OD`Y zJOvRC8Mzp=UW14?AmS^C_{hk`sP!8}{9)u`)MEt^jEr1Ndfbd$%z8W^LXeS*MNb4o zNP-AaMlM!8c@UujA`}?8*z~kOgg%JSX5?bmGX)V=Ai|81i$l)=L^y&7FA(7dGCq)z zi&HNQ#0p~M;?j!&5wRd59z>*ohy+G1ZoMoJkqshpK|~RV$YbQ<(W?Lvl^~)TL^Obi z8b&T&y*3ch4k9{1L?4LgV&vk}n*t)Hf{5uLVh)Iy!N|q0w+KWm1`$g^#3~T6jFC$~ zZv%+f2qHFvh#eqe3nQ1H-aZg<7)0!6VkxR-* z0z^oH2x$UR`BUFSV^!nGnfP!0&3xcTE39BGd32y zr3`H=gD9++l^x!~M(Dw9F5E7NE)W;Q0(ldHK_U?CAmcb07?>7=#snY(sf?gSWQwee zZ0aNtjgq2VK3u+Beq8=s0bGGxL0rLHAzY!5wl>&goCKm_uHGmq$`-{H#ud&L!4=6B z#TCsJ!xhUFcN^3dfXqIFori;9S`AW%J`xF5+{n+(70;ExmB^LEl}v=A!1In^0@9&a z3ko36Tn<+XS1MQtLLfW^@kOJpC080(I#&i)CRY|$HdhW;E>|8`K34%(Ay*MsF;@v! zDOVX+IadW&C07+!HCGK+Ems{^Jy!!)BO^1HlU^U+TTq_@gyj}8atU$?aS5^AHu7M* z&B`UmEw_-Xn~j;RjghSlo`RF%EVedC$0D}S5!A70Vf3t@=`P9Ds?OE6n+ZJ0V`Kms z1-k@p92gofs&loQvV&S+;JFPWLqmkf6^I%mh=?Rt2c+!^p7<~_G=>RxLWHkDRD&8X zAmhLjB1VRwh6||m(ZXEGrD(KTm`l-U4I`JLQ2-;Cl2IUt2xH_@Hi`rhaUdcAL_{%i zsTie!h-?s%3nJ1Pxm1mcK|}?Jr~(lsj9h9)4IrWsL^Okl4iM1=B3c-^)Qu*9h>0L# zGKiP~BBn5MX&B7|5sN{@e2{}yfe1fFE-iRqA{7jvOaj7?ECVJ%Tu{D2OKb4dz_cEc zUIcl$y12TzdboPI`ndWTnU}LoWtsqrTo7hsW#nq&YUXO@QZQP}rNGLi#m&aL(lwD0 z(OE;BDv=0@TXud?P~1*p^sImCF3B}noomW&rW=sJhcvvwGfzf_ptc|=CT>CGKK(8u&`>(p^i-y0l3X*u!r)mdBO^$6@E$}Bqzyh3 z67Aq=D*@ z3rZ@Jm@Bz-&BBGbbj>0dxpa-TGIHq|Z37Xz8M*Y0_JN4QAYwlwmx0kq5OEGfoMPlM zG`a#Ju7ZerAmSDymyyvEMlNHcry$}LBbSNMTM+S%k;~NRJ0q8w(GL*umyyfdi~&Tj zf(S-NE(PexJw`5D zGYb%53nDB*I$RjJjLf_kx$MpSK`d`ZE?u)QkOwz2av>JqB2pbFg@G_=&;(R!BUdS) z(j3HxPmF;FIKTv?R05Sn5H2`Hg3GNrY*WCJOj{vIlarNeF4sKpFbLOtt_55R*}w}D zqqr7vE#_Ln$o!crg$X_+%+|`tHGyj)*F-KIvq&x-RxU?wwpOOjWaM=f>F~S*T~{F} zsSHZ1%i&APxt23ma=Dl#33IuaB{Oolm?eUUct$S7YDQ21uyfvrjBk{}$2US5xt4M* z<66e$Y?i|1%*y4;9V&`4zL5#H9CdtS6{BbUS9eLS)#_Ypb~8PJq%{jhNv^f(T#C?v zh;_)L4C|3c88#q~GHg`m+5{R}*bEw4*aA-K;7LCtBT%6VTEqpz>ARVpfo+1%Gk|9V zjf^3^!mZ#5UZxiiC7}ESO8BdoE4e(ZIEA@9thgAtJj`+!xjfBsK|~QFmzP;7h$sUQ z6(FJtMAU$YYDO+^vnCMH3?f=VL_3J+1Q8vKTs~&~AYuZDm;@rGfQV@zVk#q-uh|?B zF&9M42N4TF#9|P!h>^?BY$b?T1tQjfh;<-h1Bh79$mMUgjgc$BY&(e9!^jnAwx5wJ z$m|FsSFqVhMy?REbBtV}W|tYc!pv?ka)q1S1?hOq$Q5Ds0>pa4$Q5b!4n%wg5$_qf zqRf7Rh+iP$4H2dbM5Ckz{t$h$koQQ9#rImFxz!Tt`%G>xmI$y zTXA!_vvS37vt4IeS$>!CF5Gj7B{+8><-VYzDkv`tL2|U+qWDF{NL8)nY>3|4b5Mc%)j6m9KL4+V9R|?$4u;>7lSs)A^*##Fk zP@<8OmFoo8Nzgi&qrIST0O9|PTnD)haUJ4{vvS~yW93TW{vU|4>M|E@0m?cUt}~E* zB3x%d^^m79*BRzYu5>FOVXky5Uq-HUD-RIi2_n2fgc~DQ2HYfwQ^D&TLB%5@>OK*! zQ(ULHPIIMM`EjMOa%G_J6Um1ggR)PA>jI-^eXhGC*F|-%OS_rgKq3NCBZDXSjf_Dx z9H{<#2ayBS$RI9w!r#akR2zf1AHcHki7oIPw~+~`-~dJ61?EbwY^xcs~03upJL?a_t zp;b4Cm;fSrKqgNI5h09R7z>>sl@FW*1tSBvp^S|Huf5>9%yot9D%Ulx>x|6RY#P@= z5f8#ldl|XTah>Nn&y{60iz|zjtC*W+lLYS+}&XSR<%xV!MSGm<<5V3-htHNqEh}Zxk z)-ZBaT5SUn+d;%m5U~$L>|*4qvN{4HPJ)P|j9k@L=Rw2;5OEVkTxH~{vAPc;o`8r4 zj9j%=uRz3m5b>IktIp~xi1^0HRcFTnA{ZFC>g~8d1UHD_1rb6Zf{&4_!A=51NP-Ae z5TVG()o7;;A`C!;4kK5YojJ%e3mCbY;n4@lbD(}Ky#0(wLZI>jT$DqESUH&vgGyRZ z=43hwVu9N;pgk?0VLWJY3t9wp94rRve?H=R%$3G=f$IsI4cAkyXI#&@UNAC0=F(w0 z14?cn%$C5&b%X0B*G;ZcJ1eeIR<34lwuFz-(;273U5ZHX(;-DKuedCz=zR?>ao(tN zy#-~(*UXh%ZFX+LTy1vlj9hJYP9VY=M7V+o2S%=TxS0^&vvPu6&B&}e6TUAkpONb& z*DJ19T&;E1>leFAa(z_i`m~z~yhz2!6jT#@PGwrV zo9Q1Up}|r-c*%;9DJaFOrtfBBfXISUyCl~a&{n(MY>W^wP?DGA`U;+QW@CbgLDKy< zh!`_O43zLeMzMgouo+{n56qQZU3S}qxw`DOGjes=1u$}T+XaG%Fh;H(yGRfb1tO9` zL_8x`uU#gH$O92sj9h(oB_N^_M3gde_1o2hhz1bR1R~l&L^C7T1iM}k(FYs$f(|;=JsSuLDG;t@fxhmV(!mus05GuJX!t`*$gqM&1_;rbfkEVzB36ZiN8)tS1} zE4fxXaS3y+cH(B_TJ6Nk$h8Kp8n=D?d;)v|T&tY;xK^=ptwFaBQMI7jC!)^On_kJa z-bqxLYrT^gBiDK-2}Z6BMA#?9C(I|zwa!VBYaJ`s26X#c;U=KkC$7%apI*te*-1f| zYqOIgBiCjpWk#+oaMif|C(0+rC&snONrh_@E7ulu`w*1}s(n)GOcT>9xwboL3v+FE z(qZJ2qyk<=TO6A7URTs(rHROq0_qxpq6533KgsGH2x4 z?PSTwwTB4%r1@m{WVm)YS#j-R<=TU8A7Xhes(lLTOjFY#avgT^5#~DVj+#m z?)X#WQ{q$NI^-0Sg2)cd!a1&7NQ&VS}nO@0t+$mg`>$p<{BiC`KC`PUmaMif& zQ{hwPQ{_756wP&vmFon$eTWs+sP<{9GtEw~S~ar;k;Pn%Dh z>zq>|*Ev?M3+VPug`0qCpT0WN{Paq$%T5)-T$i0H8M!VyRWov3fvd)CpDv#spB~pG zry8zHtXx;n?L#yOQSCEQXIhwE$#vbSS(xj(Qwt;4b*DB)t{X(yXTWF3XUKKUsh#T@ zE7uKl`)0yTK()_QooR7;CD(1IK4GrgPW_Brx1A<3a@~Qe#_d02J`+9@u3Ju%xNfm> z-9fi+HrxbM`z+L%mZn#7-FKQP%yr*s79-bvr#XyV58$eC+h@jS&S%bb&uK2#Jyxy< z==RNpn}BMcwK~)C^h&PBPD_Nj9y={%AjZ%Jl@@ zzWHzyQ0=o*XIhzF$@Sc6y)f5vrwxo;&z&|ga=n17#%-SspDmv)*E6ThT+dj!UZC5z z5N-mheU9o(tJ5pFUOVj)=6db4o003a(_TidH*nRs?X%}|;B(-5<+P9M6)V>pbo&;= zO+dBJMV)DFdL`F;r=!AL@12e@a=mvt!N~Oit{S&}PJGUM&Rp-DPIA3t<@$hb-%_{< zsP?(5Gp$dryy(Ju1~C7U(oGC?AJrJ z&r6+YV|pdmcc{ei2-?LTimA3h(hUrw*Mez9`>LAP%;+yqqn0@Rtd zrdM+Pcls#I_220eBiDbYFN}N)aMif&^W*d9^XK~K^p)!$D<1>8eQV(+pxPI#&a^$f zl8@Qxk1!vz(_cnDW~cv*d@OL)xa|w%3*rmnV{&8QV`AlFLAP%`+yqqn!qk~|rdRT@ zyRi%NvAc0F^0B*dG4gT1RpYiVgfEmYl#k7gn~#l^j|1Jljc^lC?Tb`r+MQm>$L%I0 z%*X8}%*e;>Cd$ai16PgPzHq(>z6d@pH!(ggRz4nd`!>T(K(#MMooR1+B_F?=tS}$H zn;at_zncOhp8#AnZu_G6qWPlv_}mov_*nS_(CtGk`A4-cUY%)wdL^H*n}#r-u$v|$ zpRk)YBcBKn_QmqW@x}28x#{o;vGR$a+qWHV0;+vU>P!dIEBVCTjD`8c-Aowy#NEso z`6S?~ar-ZUFOe^iPt47nPmGmM0^Poya1&7NOI2q&oL$S3XQ$jB!H zSB=}gWWE%>6h0|8Cq5}wJ{ffTcEe3TwJ$@R>1cW-pS+u=FrU1e7bBm%n-3$O0$eq2 z`_lN*`O^91+A;NshZlR2P%5LF|d@69&xb4g2 z%i_!8Q*w*oQ)1;)LAP%|+yrF%_A+wDCuJHiRtk#?i^5gF5Aw=`UKqs4%o!-m4C*j4 zGBVmT^5yX5^5qIj3UZ3_+bgpQBOSte5N-%F=zv;K*OZx&aX)|hVfMYuAiE41E2VXX zrS%!5wHf8jnGq)rfjtI2kh2hKZxNK90=lSxfq_8-N>?+1PPbrSD2B@Om4HStm_^UZ zGIK+^#2Xp;^7#t*3M6eMIW_q=Hgo49jSU=zJCc`~5q!S|$ZPw#L5^evIns!+Qr}-# zKaf%1m(ehi8F3aA)RE;-dn=%HC6tD_W3nvh0w|E@%NhAf`O5gpbmMh7?fJ_+xowf$ zaTM7dpgS4BmpFjj!MU3qzO_489f^r zJzE(O2T?#=2cGqUgij6BUA0iU4oZXF$<$~GUfRRV$jGezTpJd>dl~tv_^SD;ojaX5 zz4`YRiUuNGpm7}TVnxU;5{#f5C?GE81i9D*?&84d!htgx1E(?uFJ=y&%^13pIdmms z=xWB$^^D;NQ$W{Tu)|$^0UE!JP zXGEN1c@l1sJhF2+K@rUja;_<3W$Z!W*u#vm`x)a;Gb0vSK!Ot8Jz#e*GK)6K!a^&R zk*}Grg|8+0Vl-zWf2ujRE>irShFi}IzWIz162D;Uc|q2jF;=GE7fyf3n0}Wr^CdH4 zmJeb*11|fU;r6F9^0o4{@wKJCPvy+!Pq##||12K+`9b!ZGgcP<6)ybGSooW#2rZTXy~{OPCxa2}5X1VIk4V63cW>J_eL>SL^C z>S3&9n#7D4sDiiwl#+3|V3z_@jdPsCf4__}|Z!^=9X3l>iIN}$(+_ilib&4=yr7gR z3fjhRXuw!GlWDE+Or~{=Gnv*f&Su)cJez4F<7}q&jB}Z`GS6k&#yFR03*&sI-OPx( z8SGThWH&1-s3@HPjW<|%H4(~(#V4%Xg5@`G`bH3p%(_gojG5WNMH3@aBO_lQUq4^} zbf&%2Ik)pOHO>`pL@FDu!ab)5Emhf>85wtrgMDKNFBkSQ9TVQmbck_3({bkgOvf4b zGo4`E&vc3rQFACV!b*fGQ1`A!WPR!R@XOh18TlshP3D`to9XOs&V&55=KQKiH#A*` zJ4X~+6M?S$*bmNpl3+I(F;*UDx+;8}=^Ep4rYnpmnQk#7ax6F`L173=f3R|XI@CQg zpfotB7@0*^%EQY0ZbrVTeAD=*9c8+El=C!ycPL7MkJz}w3oVbp6%TLvVNOsP%Dz_` z>@Z`-%8N`-g)cHaW4y@pgz+-d3+BsAFBva0J!ibi^qv{9ECB3C&;%ODkqitBv!U*q z1EoQCz=5RZLHS_!f(b@u#n+lJM;~V7o5?qeZ`OIHkLNk>@*gf03}-|f)_fZtkmAgs zTUi(xSwZKj%YvP1!dUs3>6h?pxEgTVVIkB$MrKZ5QCLxF$;daKZvo$ehfKd8a=zxb zltyVdAUuWKaM&vkw#AgO@-rKY@K;n@7#Nly>hNr(?M!pq% zEBRJ3HL}SwHF7ew@b~(nB*DjU(~*aju7KpwlBCGO{5u9Tx*5 zGb_V&(EJ=LrzfNUW@Kb^X5`xfHeQ_T5u120n|QyoFgrIRH>pvqK;$U=$@eH8pb4FH9Z@BrcjC@G1WjfzBH2V`S4owuG6L0kmA55iOi{u=()qWYgj6XVY-LPwg_Ya{9sp%AJvK7uW(_zWHpro@~1D?&2W#BUu1- zKe){YiU4Hwzb~8Cm(W;rSw(k#9d+3Eu&>2%+6<5&moulcNfzG?q1`)c9Y={NWpyY+uzQb%Cd`H+)#q`)xJ=s!w zA@&6#PLe{k?*znu8Df!app&tpKtv298)B6hLHmw_?aL60Wy^46%V@=GA1FN(i1o99 z&X($DWGg@pMP^n8&~g{_^n8+S2Hz>R05zPn$NVa>TWp{soo+F*RiQbb;W;F^p_D6U z*cS4gWvddq%~oa4R@DwMKNNA$61w|arL@^VXAx;LvLWVLq3#E*!$f!gIkwe&=h<4N zbl6%Q*;*$;%nwI&HPOwVF13gabSTauMmEIU4%B?6i4YH<4oy$+{Jv1?1smu%mlup|h{*tm1>m*V=pMMlc9`!n+d`?AYzuAK7Dl>) z=kKEtXPTg!zewr_8|Y}5AB=2^;Eup!{uQwKi==+CEwW`>MA-bravb2ZW;htx5R(fK z^B+Tk2c=%R3O0VR94FgiN4CY#^oitr^zdIQr_2UAqDGmK4KbGhF&=VG33_>Z4Q#of?0dn|A^4)-xAIs#7*+7Thn1Bc~MmEGPGX(SVb+CQQCgeOL8{*CvsQI9MH0b%`9@|5{ z`)s@9F0k$LWZRVrF+U!0jsm**d*t4-F|zHEd&|g%Se^heAGAaey?lKDHhz!XJGMRc zYH6L60c?vfFm{KX*F;BK*gwxLnrG7ThIWGN-Y>4F; zQ1d~j-=c^AGqCw5lqRs9@Mk;GNYMQ!l|cFHq|$swHpDn3)cl25!sj{I{F6!x*iL%0 zoops({spDyY@nlHo-?u`mRms0#}+;>z~*02dck%fnC${I|KdrX7nQ!VfsU2=&d7!s zU&CYmOR)JDm42{Y^k=)6P0;-h)S}oxhYCb7vLTim;4%Ldmk{4;wg+m_Y!3q29^^vI zPeyEqM9*K}wQ|@%8`EhvE3vr$J=pxeTKn1l`m_Corhh!<|I<3h2HKl{ zj*$&R_OBLFJ|h{AUOxZVy2l3E=6{co4KbbrF`fZx zK1%WP5p4c{t@~{MecAqliXU!9ZrtW`F=)MG105Ogj*$y78xJ)fwC@-__&mM8FAcB94T!`C?q2_~jB%z!C8EihI)_*QWZ!X4CNc$I$`5b!A zY@qW8oEf;Hg}3o*3_ zv49D*eHz^ZU%}>!>OJHVb>mqa+1 z1hoFb<9kNJsK@@$|@ZSss< zhmu^%781$kt+#QJaaR0<1xS5>Jl4hJI^IXF2q`Qi1Qhs?ngFXh=J>-5J>%Hu4+fF zYN+|eh}|v7?w1r|PGwqO$yI0dgAKG5=qDo=;y7kdM+48eo)8n*qB^U8Ty?%&bxR@R zdPo*Q;~6|kD=EYZ?$>ZN*h#a2b`Qyb2suWs2IL^aJFX(oe%? zA7s3htH&;e4Yb)LhLNiW*%oG21|}@!h7cRqdm(nN9=lks9%rr|Xt`95*oy)654_(m z#U}(F3>88f48=a4E5yO3EyT$t#V5=rRm&!|6H;!xM+_Gu$BSw@C{94dUY*r%v^ZgA zWnjQEt|P?7byJ9&tIp~VS6w+*-9kvdW?GFs;u#niIvE%k64@CTGC3F+PI53X7;-W& z%;aQX09A9DTnr2sxfmEMxfvK1ax*Y+@-Q$I@-Q&mO!qyPg$qW}ZLO92LkKtTqEoq`Muib4zwONAI1RD~HBmI^a4sERN! zY!hK%*dofn@I{<~AxV;fAw`OT;i5DH!xb3@25~tChS>@X430_+3@*wH3>#G#7|yCO zFgR*3Fr;ZQFg(;|VBj-kV3=yiz>sFkz~Eue!0_3TfuYoifx*s|fx*X(f#IGT1B0gr z1H*1F1_nQG1_n1@28Oe~3=Cy{3=DGq3=D1l3=H4=85q(67#OYvFfh0UGB9ilWMEJW zVqlmS#K6E7%)n3<%)sz0n1LZIgn{8$2m^yzC^$5;l2X>kk;a`6ld7vdQh>Ju0k{v|Ll)Fm=7{7YnDXiH*X;7ev;c#+J&P?f^K zz?aIva5$BLK{JhkVPYBs!_PDZhQ4$LhM(yS46`yA82B<77;-Zi7|v!gFqmaAFig#2 zVEC5Bzz~|vz_2Zwfk7>Yfniz>0|Q$w14C*q1H;i=1_sqU28Px=28L&O3=D4h3=GTi z85md#7#PwD7#OYi=;TFtlIt%iZ2t%iZ&X$=E|Yb^uA(pm-vzB&em zx;h4idvy#9w)G4QbL$xxK5{ZJxU;e{y0R+UWagEm7Ud=8SmkDAmc%F9v9k*C@G~$l zz-SRxW@mP0As!J{PG2w25C#!e!PLCOq@2_gdj=6!+2s7Z;*$83)U?bzkOCj-;cpt~8$ao)rM;C}%eLw$@ zcxQj#08bxRm-yfiM`!Q&V9zL51_p?{Vwi8dv!jnsymxqfaDb0v2vl4XT|7Q1vji#! z*AwFC=>yUX6^HAAi6iL&$@#j5c=)@-heQUr#yh)(`Z+`OsfYQ-Bg=UPy9UDD7ZmCg z8SfhA>K794?Bf_54Ar9@?BNJ9#xcOr*)t?E-r2*^&)pU3Cy1PzkE45hu!pA`%ukX~ z@gV;wS3jsZ$`CP6mw3NW-*_j_kYI=zx=?XH&k#>XpLl1eJ@Bv=h02FH2BC`u`TK{! z#S}gL!W?}(UE-nYU7+?t_4_&od&AYr7A3_eyCvonr#hp=t1wtRCqJS{M&e0Fo*$Nz5yWPfkqENQIm0 zh+9p3YFq^LBx z1YIx0w-Ecmai5rzlbM&64^yWKGA}=`q$ocpKCLJ*H#NQl9yZ{#Qy zIhZ%0;Q?|ZSRBcX&|m?VhnZk=V45KIC>ABbf)1h;Y8H}sNo4^jBp~WFLF&N;Gc;|2 z0}vtyiX(8emgd3BI8Znjrxs-<=70hdqE4_VDZV%(u^<&{7bt&$`5+}wG43!&pHOHy zBnpwtOhJ~9cgoMtftbhY=>m@@kh@DVic%9(V37e)BVU#a$rc%jc_}%F{H_fRpxn%2 zP;C%jl$uzap9j&S3`!5sG!ma(o>-I)5eJ2TGAJ#;f)eUxP<$3A=NF{Lmt_`bCS~Si zmQ=#h3n*^Na^p)9p=N->C9xzwH!~UJDTukCa7fEcN-Y8jLCplI19=>j#$o9ci z1>zQ2uta8Fab7$)hT(RD#gh|Dk~88b2b2l=l!uQV6tUvaRyq|B0HkY^xjKxsNT zKP5FDOPW>&tA`bMpiBfzcw1t(8Na_=FG82no>Opox)fYk969_wy6G3RkEYsDR7OtV&IR znJJr`oR|mkOkREpqU;5`0hF&mc_$u}ou^3utr{x#L7pLZ>FfcHPuo}YhWqf*S2_%Qc zCsoF0rZ9-Gg6ca+6lJ6)XN$1H(^ElWNd|)mE2vxm%co@)6_><=>Y==R1`$?KP`=9q zCCFs39Z)_f!oYlxzT$$M#FF^@B1j%9jxS&kVbxDdEG_|=9iLcGkdv930x2mAK<*R< z7c%(;CB-7FreHR>!UM%=W>RTMYJ71)d}bcRK7FWsK?x|kBqxI_h)hu6h_K2-$SGp9Ga=&G+nEqKMM#?tshtTCM{Q?9 z#4y{L5OLh?Oo%+Ro#+W^XQGHf+nEqC%yuS39I7AM&V-18@*8S96Cw^O3zOYI?Mw(C zRE8(R+nEqCQ2t4Vw=*GPpz=Q%-p+)Gf%084yqyUVL$otRSVbMcu?}i(}9gCeZr2!0C49!V%4Qd^6#N<*6Z5aq=ptg;Y3 ztfdN1E7rka!Y> zv^(JOCJGG)NIXK)4@zGH-cE+Jjq`@!zTZw^=;O1yD{J3Jz+g2k!n zxv6<2#n7}wxQ`^l>Ws%t;QFT$Y#-QNgv|r11*au$P_0=k!paS<-$hsj<4f~Oi&Ik! zL1Q3Lwh@B}D}QEkJg9vND-Tfoj?rHeVMPr?bOm7h!EVKG4p<#Hp9+J@f`XEw_!1FT z@yxRL;?$D(yhKo>L*f*7-%y0r6ea9XI*y<=KB&AA1eFuG%>cUt>|REA{sgs+O7rqE z^U~uXoda;&gEK!bITaLkpzs3sghf~dVcv(vH)=l>RQ`b*4WM>ieqJ%cE>v}3aael7 znjcv6^T2KpElw;;jW0>fEr65-g5`-tAa@pn%F&e6q|$T|R&g*5ZsZn&(mZE*VkW5k zlLa?>Kpra2$j^ba;rPo^i<0t-Q$gxva}z6|?L2rM<1R=nElw3-F?M}md0hTS5_e_hEz8eLQP2X1g&@e{_<|Bp8n134Vbft7t=|A5<_ zAYqs{;PEKJDh}zXLaHoKegMZAsB;B!7$_fs#so!JMG*rP@G=1Zn3f2uB`BP64tjyZ z3hX}o=780~!Wdj%@PbMwP}dsn4-_>pwZzh3Gx2ps9Hpiebx6lInr zmZX9jqQxcgMX712MX8`_7}RdbO-#WqPm3imy`V7|P?m()0~=cv zVbulc!<0bDU)c46(-EvLhovJ}x`NR{(6SSW{>qII`--IQt1yzdI1*bLi7k)BRz_m0 zL)kF*kV?bcPc9Af2TVVy_QTY}>KvFk=rl|nI8RH%`+qt4dFkNz0M{9Upz*An)I`uY z6+eibUjWX>VDX~VVo+NN%r3|Wvw1;kvdh7FKor6Ts{*HQ5Fea~MOYORbCWXDOY=*M z-@x=rMwgpF-MkoS@utDsn)4klT>>f?z&GpE%e(FiB8fs-Ofi_$tE64;{4yxm`3ZC$k_vIlnXy zG*=+PDp{Odlvw~7j03eN1(Wm3Qb7|jAU78z8$r6{;06{rETlnww9LH39Pl8O2rDOO zxRF7Gl@~JB2v)-h8k%GfVHF1FA&@6USS7)1$jBHd4nY0?#9R?pK~Px)Zb*u-ih{<= ziXpvIkXyw;aybxRfceNn$_yf`;suFCppjjW(I9zf-w?tDg;!=VxGM!7$^*Fv+!g_~ z`9NiKVo@fjJqC&|BzwTcG$jcnzGk7RGwE~nX;vscDe9RTng$9pj3g;#kWrN1oibYuE^Gi!oi{i_mt^~K~)pHZ` zQW8t@iz?&u^KvS|F#z(nAgGN1Y8QjTq$Iy2F$dfs2kU{1gMtQ(A#Ddx`v??3sN?I< z_7R2zIRAj_Yf$?LRT|c?_@s$h&WNz`gT`g^ld?eW6HQ7iPL0n=OiBgKjf${xgP9_% zl4#?={Gicp&`>g{-UPLV;Esg29n_`)y8&i3189r}HbDjxM7SAKJy;G_exR2tu<{C4 zp1}Cv@`D}f7igLUO*eqUS3Nx^KM6E(1)ft$1o#o=QupyUS1A36DnDWEAOQ2P(m zJ_4ne@}k6o0+65xD<^1Lk3oc$J+ZU`RzHE-d0_v-+IbKTN?Q!tn*jF&Q0MNTZ84k* zz+nN7TTojJr!q);3#qOG>%+qTTFk)kwHcZgU||bxJ8^?&SVUO4!80c!to)GnC%Em- z51knSr4wOLj~P4@0vekF%|(OCB2d7Iuqx)|#}}ohq^89~JHMdt1Dlr$Hb)-bN`Mt^ zBCO(wvI?w58tO^NTq7h+fyUjT!qCtaVO0jz|0sfBKZC;xRPQ58K~f!99+s}a>4hI; zT0uz>$X}e`fffw=K&2#jEEL&3h#=TJK3F;c&3}ML6rlZDNC^oVf5SG>3f2pDD=vMi zDVfEfqAxzPEU^gE`3INVnlSOy3M3g3R=9f5ED(}x_YI4n;hg)zFg2rG9fr~naRWd(H$L1iIm;0xTX z0u{O8Zsctim7~JaQ(&DxH^F zQ4*h71{n|rje{f>BqnE;RD#M$P&FK1ke{Cekp-noVOaf{0`VhgZUO8hkQYJW2X`Y# z0HOvm=Pts^>j0j7hqZ~p`J6K?GcN_&4@aGk2hAHmOa{$UL(2$w`sRkr(}Vii!mua#!^Z{WCq+X1RmK-n2K zas%}XTpmoPnpD(ZU?$U$7jw^$Tm?qUy)8P5{LXieLkf z8+WMsLE!~mH-MrKZT$d>9H^ax(u4pdVKld6Sx^CHbFc&1uT@9l2QaO2VjHH(E1QG z7R;Vh3Lg99O-h50iwMRirNx6aim-Bmrq!Wk6Rx!lyvfOMy_}%F2&nBJpPURa15*Cs zTmK*kE8;-yf9TqX%oNZ#8fYOC#1xnxKy$W`WDi*@AqsBI!_>g~P9Voa?1kq+P`euH z4^aIMHUp&{4N(tWLjfKk2bJ}L@yVGG(^2FhLoP_>VXm`)sK>X~f;Tx69&UnQ2Z0(s z5PgvT2V@-vC&)Wcy9lkx5X>(~ElSKw0rg2`<6#_#4`5-4Z{3D8G;O5BgBsQ%tkTJe z;N=}KzIr^00;s_vtm^S73Zdcv1MHCb+#ZV_g%|@&#fw&n|zJQ_xv93gfl^ZMomS@xlj~ggt<|#nK z12lvHUN8#Io6tHMq!xt1VggWiGP=X{f(*npzY5X^!mfzzxDaP@Mj~`Rh|v<5q-GT)U^6~!#j!~v+C0aEA6=!q-`>bqiH&;`D`fSpnTQ->DU;G_lW6oBNx;RnqNU^YB`C?lH-t`k7& zT^XV2S;I&nC$%g!r&tqPwu8p4Bg70;wXp6U$O)h^g`m=;$}nF@U&T43vLIE2RoF8( zH#H?Qu>>@K8w_3I4C*Tfyqp_PFl zr!ArImr9qm_YSMk@ouoK^;gHLVN`8(J9{jfWxYNqO z@Sv4};YTY2!=F|L2AMVn28A{T2A4Jl29GudhKx1_hMYDAhK@D{hMqPChB<8v3=7&A z7JS2`FNZgem(Jm_Fxc+$bZ@S}r) z;ZFwxgFq((gGeU>gH9&{gFz<)gG(m^gGVO=Lrf!Kb7`AjWFdXS*U^vmqz;LINf#E?X1H+F_28KVK3=BM73=9HY3=A4w z3=BG53=9rk3=A$^3=9!n3=A<{3=A1v3=BD43=B103=9oj3=A{67#QYsF)(cCVqn

N3x)~Tmx)~TGx)~UBx)~S@x)~Tex)~UJx)~T! zx)~TUx)~T6x)~T+x)~T|bTcr_>1JTq(9OWGrJI4_L^lJ&nQjJ#2i*(|U%D9>IC>Zu z6nYpKYgGw(0 zgGDa`gHJC5LryOPLq#tGLr*UQ!-QT2h6TM03`=?$7!LF@FdXS+V7SrCz;LIRf#FLp z1H+GA1_qu!1_psX1_q5j1_qrz1_qZt1_qBl28M(_28NVA28N1028NnG28Jnp3=A{+ z7#P;{F)(cCV_-PY$G~u;kAdMv9|OakJ_d##eGCkL`WP5^`WYAm`WYA$`WYBh`WYB3 z`WYB(`WYB}`WYAk`WYBf`WYB9`WYBX`WYB1`WYBH`WYB{`WYDJ^fNFl=x1Qq(9giI zrJsS}NIwI^iGBu#EBy=%Px=`cUi33CeCTIj_|eb6@TZ@Ffn@>%1J48o27w6-3qPSfuUzI1H+Wb z3=BIaGcX*O%)oGBG6Tbf$qWp4CNnU+n9RWNWikW9kI4)S5>pr$ET%9pI80$+NSMOF zkTHdUp=1gJL(3EfhK?x=3`?dkFdUh}z;I>?1H+3c3=AKpFfe?X!ocun3Il_{R0al# zsSFG%QyCZxrZO;?Ol4qjnaaQrGL?ZLW-0?i&Qu15lBo;~HB%WFTBb5E^h{-7m@<`t zVaZemh7D607-P1 zV7M@if#J$D28Jio7#O}xV_^6LGIu%ygUECS2ASy$3@XzZ7<8sHFc?f{UqS7fuUpu14GLU z28Ny)3=DH-Ffc5c!N9O)1_Q&E84L`2W-u@un8CnsV+I4mhZzhEKS1WsWMGh)$-tm8 zlYv2JCIf@XOa=y5@%w%AQnaRMAGLwNJXC?zf$xH@@mYEC;6J|0n zESSl_uw*6!!-km*3na#kkWi|uDk=YCkPe6L-Ffho>VPMdh!@yuNhk?Om z4g*8L90rD%ISdRXa~K#}<}ffUn8U!ZW)1_xhB*ujXXY?4yqLql@MaDJ1It_n28Fo{ z3>tG87#!v@FnG*mU85nBjGBC8vWnk!-%fK*U zE(61qxeN?*<}xrWn9IPhVlD&2nz;-NTjnw_?3l~Ia9}P2!;!fR3}@ytFkG0+z;I(O z1H*&43=A*kGBA9Y%fRqsE&~I@JO&1ic?=8!^B5Q;<}olR%wu5Cn8(0iFpq)3Vjcs7 z!#oBCk9iCX0rMCbBIYqLB+O%A$e72#P%w{yp<*5bL&H1C+0IST$#_n@L)az z!-x3{3=9hx7X8{AlivDi$*^G%RLd=vd6a(6g9Sr3?%mOBom@EM;JrvXp^g z%~A%2BTE?=&MakMc(Rm%;m=YA29ae93_8mg7#x-{Fhne4V2D}9z>u?yfuUv@14GL) z28Joi7#QX(V_;aajDcazG6se%%NQ8;EMs6evW$V@%rXXsJIfdt-YjEaU|7z;z_Xlz zL1Z}tgT!(M294zm3>M277#x-}Fhne8V2D}Hz>u+=fuUqM14GSn28NF13=9*NGce3p z&cLu>IRnFr$F1uGaBN>(s1)U04&Xj#F)(6NGnVZsUq zh8Zgu80M^CVA!yNfnmoA28KN=7#J?BU|_hhf`Q@A3I>KRD;OC5tYBbZSjoU3vXX&8 zW+elI!b%1Pla&k%HY*tz99A+gM66_BNLb0hkg}42p2{sH|dO&{@U6V6cjT!DAHzL%=EqhLBYZ3>m8!7z$P~FqEufVCY!Iz%XGI1H+V6 z3=9iaF)*xH#lWy;6$8VbRSXPARxvP~SjE8bU=;(yi&YE^Z&oodFsx=^;8@MTz_Xfx zL1i@qgU)IO27}cM3@)n~7<^VUFa)e-U`Scbz>u?=fuUeE14GMd28N#13=9)iGcYV! z&A_l`H3P$j)eHbMSk1t2WiIq`7;M%sFa)e&V2D`5z!0;BfuUdx14G3c28Nn73=9+2Ffc4w!@#g)4FkiDH4F>~ z)-W)fS;N3^V+{ktgEb5cPu4In{8_`mz_FHrL0~NdgUnh628Fc@3^r>S7(CW8FodjS zU`ScZz>u+)fuUk814GAJ28JnX85m})WnfsbmVsf-S_XzAYZ(|$tYu)hv6g}1$yx@6 z7i$?9eyn9+__LOQL1Y~RgTy)p29tFR3=ZoU7<|?-Fa)e)V2D}Az>ulhebtYctcSkJ&9v7UiJW<3Lg!FmP;oAnF~4(k~h zLe?`dB&=s(NLkOoP_dqYplqk$HZU-VY+zuJ*ucObvw?v@VFLq$#s&rkoec~OAsZMNA~rBE#B5+- z=-9x((6fPoVao;vh8-Ii7%psJV7Re?f#Jah28Jga7#LVKGBEILWMB~4$iN`6k%2*B zBLjoVMg|6(jSLJ98yOf}HZm|2Y-C_4*~q}qvyp*e!bS#$6&o2C)@)>8IJ1#~;lf4+ zhASHx7;bE2V7Rl9f#JzU28I_K85rJdWMKHRk%8gIMg|6fO$-bon-~~uHZd?bY+_(= z*~Gx$v5A4fXA=WMz$ONUkWCB>5t|qoVm2`_By3_}NZG`|kga7q zJlMp*@MIGM!;4J}3~x3uFmP;UVBp!zz#y=hfk9(41B1?H1_qPO3=9^V85kTkGcdSp zW?+ce%)k({nSr5YGXq1%W(I~en;95(Y-V6Mu$h73%w`6L8=Dyzo@{1dc(a*-;m2kM z28J!5)9M)*A{~RAKu3Iou6e0ogNT8SoB^%vW?*4pxWLN5P+?&fZ)T#KlbKgqp_`sp z${@+E9M8!t>MqHh-k7VZ&YSM8s?MLz=q@QJDV**rE2^q44ib_C5z-(+Hr-uPUOAqV zRkTvMl9`d2*`HB0m{~QHQ8S!bGm=p=oKZWLSv#IlJC;#BpV7RO*}R(3yq3|tlF_=E z*}9d{x|z|oo7uLP(YBk>eloNDR7U&BjE=LJ9p^GS&SrF7%p34k#%jmw65phs8$Y@qpV@pOxQ_z7o?81@oqr$xz z^))qJH@mWWa(l~i3o{Bcvck<5hIoV#bZ+~8c1i0<_C`+SYUaxQ?A46Axs1B$AW|Q$ zoLN5`B!CEEMn+apoPg3AC<5d_1Oo#DBd6j_(2YW1r<Xvs$X>>ayyKR_gN$Gcq$G z^g|D}XJ%w&W`y6R#3?Gw4Yv|}em)~Jr=>91Fh)j3bw+zfM|N>`R&H)}ZdPWb%ab_a zx{$*Ses2;3gEG{8Do`4FEI$K`mVkOh0ZI!Squ%NS(+}0oz{t$GQy6r$GRSSq`81qe zT?I`ASw*>>)mfF19ER`?GczMANHHiB_OgPmPBCJvlyw(I+_?ktFe5XkIo!XhjNZP! z(w@?+^4zMNDE{Te>R$#123TRg7&4g|7!EQcpYI}X10Je` zo$q4Dz`)Mz4;q^Uoy)?&&g#$U%FLUVnUazN+9T%5EDd4nXXX~<7nOkI*_i`D`w^U7 znbkq-F5}B`!E;6W$?>4|HK4sghA85hd63!N%=|nCS7vP#Iq1Adkt?$*ia2Oy7_^QP z;x^>-W%!Fy3rjPL!24?;`wt=Gzo_TSh=BG$mV)=$6r~oIg0?<^$9_LEg2rftVZ-6Y zBCLui>!B0#O2Fz|8I6lli<3)JL8HiMA;!)e4BB6yq6i&FcSSn?2J9BN-H?4kpf!9D zabCDvL|A!|#+P~hld@7l$7O)#HhuCFQ(TLR@{43x7#I{-7#LJo7#J*A7#M6=7#Lhw z7#KWQ7#KoW7#LDm7#K2G7#MO`7#Ipz7#KQO7#NnYFfi<4VPLqz!oYBYg@NG-3j@Ok z76yhNEDQ{PSQr?1SV8`0U{GLXU{GOYV9;P?U@&22VDMmNVDMpOV8~!)V8~%*U?>6A z6|4*lEvyU-9jput6IdA-X0S3a%wc67mpN&XawCE z!O6|d>0Dac^RGg8C|u75!Wv$GBUHW^Fa0SLTQ+}P%Z-_Ge6T5O?6I4arl|d zKu}oNS=X7>ox9kZ6FH0#H3BpAjv7z_rOB+xs;;Qcn_lT_$?j{(=xfU8YtHCv$%wdg zfRhni8$&HrR%B;nWEamBg@s)tqpZBVx3xE`KX;@mFE=BiAY_M^U7-33q@J0R5#;Si z1_p+MpmWq185sUDB9~XHNVyLZ%68y68Gc^~4>n(_2tQv6B5nsN(?Ib7T5Da5e$Esm zKXO9ldDDtgQ>#Gb9i)8VEzU13N(S*oSUC%d@{=KD0xPyNANWD*$nzoPk#=%^QK~X% zwGKHB1Z)8<-dvb}%t8 z9ARQ$IKjlgaD|D1;SLi6!viJ;hA*H79W!eF0+|I0eo+1brGpua3=9e&v(ejkko?71 z32Ldq1D}yu6E&+bbAr+%qhKUFpLv4wnKm<{F}tTAC*gdS$jh3@&#um2Day{SE6J=Y z$!H9>j+2p{ot1%skzLpmUcZ?$g7TL-$b55tkoiasf+So`(28KwKw5yItyLp*8;EjZKpz>D`_1pnQMH{f3 z6-*eMcEM|EAZu&Vpy>~JoehYc25Q!Wk^va6U}Rue!^ps}fsujX1S12(6-EYz8;lGL zZx|UEzA!Q{`~hV&CI$u$CI$u`CI$u(P`U!^gb>L6hXPQ?0kr;*fq_AZfq@}~m4V>} z8_m4uovVYi+EWX-9a=zJ7Xm)D?1{F z8Cl~Q4O5vB(aLDZ)Xj*vkBO6!m6;pt2v9m_SDX%SrM)(TePG<*M&y8Zed!iz*s=BheBFH_e z>Wb-=p4sf7OPNELgRhHR${4#|P)WY1# z)XLb()DB`Zw!_07;a+x-qd}Mzy%kZJ?AX z0V0qvC>eveu;dFWLqYrnPytz9Mp=GFd0An3Sw?wzMnz?2MO8*cO-4m!Mpa8@b+})_ z7lna3GOX<2)Gi4!gn@wp-9A%LX~S&Dw9iwO9aJPSGBQo&TA{9~DQhpwsm{MTQrsG; zibHfqxFNUIF*9R$-V*G2X3&zn;woI;hv#i{_h9%R+JIO9r9E>QJ@Xm8YlXdQ8NKTn zeVdtmTN!;j8GV}>17|WL?!F<_{|9{${^wg^uBquc-;*;K-T#Qn9=HGP!Tx6jE$@W; zzqB}m#Q2ALmth7pp)7#X<%b!|k1|$X7OuR^Sb3GP`X+PrZN}>RjMX<8>pwF$;*5U< zX#5jO2PgeuZ7Zg^LMyCoZOea_b2jqt&J_1XN(YE;8aJeI1x^Qv3=9k}85kHc85tNf znHU&knHd;lSr`~pS&`d3x`=uMwj{eUFB#JA;SB*Ft_JISFv>#f4u~*B4R;_YONp?G z27^w%0(0Q%rJ?G;?JYGo9E|QVT(K6L)b&W?G2|t0cJX0$o@Isec$%p?VR< zLhR!#C@lt^LB*b$2R4J%#s+2|)O=98ik;b+!Ie2YIWbSYM4>pfL?Kb3Br`WPzqCXl zGfg2cKM%5ZRUxxj0eYS&$UXc}H6XSyT#*PXcM)h`E2td@G8aUd55W~j6kif>kkiy2mFolhQVF4Qh z!x}aQhAnIi3_I8u81}F+FdSfGU^v0Xz;K3*f#C*pd=8rAz!Y-*dj?!0F))CXsWL#^ zXu*!B{$;wx$jo#Np0*j8t})GKL>7S5!61tm83i-p?Yu~EJCA7&(=|r6DeRHrpr#nY z6gUgsfXc>q_PcKOfhhPZAbJ6pV-W^kjLX(ktkq_i}f zR6d&&E1LrM;$+@nq_!M8H#0LM+u4@)W^7FRwjs(e^j z`LN)A!A9Br{Ef2E%D$F!KmTFD{hW=Qd)cMI;gXq`SrVU@U(Q>(pS@9XKl^^c{k%Il zk=W2_okRV(*$%OXS*i_(jcf|CK7RT%g{o?~EOfcaMh$`^;yQczkJO2fhdy?%w2 z|IpxO;Do9#fL1sSP@1iwl9{ccoRO`envt!ck&&&To{_DgnUSrblaZ~VmyxZZpOLL$ zG9z2VR7SRjnT%`=vl-bM<}$;{S%k&&(IE;C!#T}HOgN^&jL&ahBC$4Y>m1Q8Mpm8%0?Fw#J&F6CZt}4n19=K*Z z$~Qq>QJKox#SyP{78(P{PK*(89*R(80#Q(1TQ8-(h25c*4fO@P>_n z;R_oB!yh&V1{QV(1|D_>1`&1!1{rn+1{HP&1`Sw&1WM#c7`c9zfEF&Gq6Cy*5}^Hb z9OI)H<2SNMMKZK|4H_p!AHR`jW|Sv-{02Pm#}69#6J=+Y6=#+eXOtCYloe%^6=y`u zRB$qaN)XT;qJrRYKiNWQP@Vzda8O;&EDf?VT$Z1kksHa8$m4ygm}5GiU}9uuH3U~d zAhUECg+)b0c|qekx}XU+#OxSKoeNS5&5jJ9w)Is81_nixF&L!t?2ExCh}(&<@}i#c z2ya6}gduHO-je+I;!4o@Tq3NzkSP=JxFhy4K1g0d=*eMZU?^Z@U?^c^VCZ0EV3@+l zzyKPf1C7t@U}Ru8!pOjIhmnEd0jzFkKpo!$r7=*LfW~$e86e~Jp!A6&eL%*~KO==V z{_*p#%#2K%h#NqM4D2NeawZCMCyMeWiu0?cyC+Hts!LX?va`plGq*c3Z;ogFSjx;a zVKy_<^!*^r$h7(>Gt=s$j7*#0B`atY5HwH93~LEWTQV{-vRm#qheRSHV<$NMd<46# zQ(GKI0s=P#L33yZjFp;_!rE{PU{Tkh+!1u#wBF_(2%jRJ6O0E#qVhIhw7S|?UC)Qz3Ahjh$<9X1%mPq zvue4!YUS2s;jQV6+cTMWA{org4l1NT?Q2D5Mn-1dKuGJ4k&)4zQCnAcbN*)5o!sv7 zoXF$+h$<7F@0l4Hce6`_H(tbpE0XvE#(K`ZoS>LAVysjxul!ss{JEO(YcuoLcEz9F z%s=}Xem)Q_ycxuX?9+nQ78mMW!hmnVF_+Wn`KPH&>An;T)KIR>Iwr&1h_D z$~0j&(*#zgsodGhC{E&s8-g4(d-=h8kmJ)pht@(Hx9IIGX!3$}0~iFL9Rvv|&9wfd zFw;i3@v!W`0BfJY%mbxC5N2fNd@Zlc4jH05E2Lm}6(PC}d$^xXFS%j)GM7XQvkBrRIRj zes3@fHa@{951TiFh=a%HxxvHnBCOotGC+itKdmUgDmBj@)Q({%=|o1n@)t4J+UaA0o-1M&GiPbLdNwAp!2=R^Sq#O5zrhjXj}v| z#|vs-!Nx^k?W-Tqu@O)kON5PqK?1FvWxxg*CjqsweApNmBB0|WpfM6q`a{Ra?IRsf z`;7rI{sHQbyTE8CEeJXEP8M6_u2hWR>MkHswZM*n-jm1GU&d)8kMdC?4kA3m(`;@&U;43<&!` z^OYbwVeW>}u(r?(sDP;^qp2#RsXC*%sjwxH?r*Y$x&JKN2U&S}Q*%>ROLX^RRIFh4 ztE+n+WdZc@nGXv`bbmpc_~3b6kbe(A z1u7kxEA1I8of#{=87tixD?J%oqlH`J8C#PXThoyyt-zgiZczUm)Y@iX5Cs{66pm0X zgBX;-$ZX7X2r)-7lk0@Cs%m9+C2J@5=0tJiiGNPeAPy&}_sq!7$henP9N|R+#>)C| z)Y2SbK4&m|-prU$UsV-xg&rua8;cXwZ3ef~PckqtG(yX8M`i|wg(z#3kowJuMMa5~ zpuRD;BZvhq;}~IM*kB<$&>7K?tfC0oiwVs(pt72`7#wY|vYu5CDyPW6&I~%UnHRJP z9()GxH%~~}=*r3uRRdZVWe6@WU0D(4fcn@Fz07&wGPM$-544^qF)syd7HHyzg@u8E zgN1k89=VoP011P`?^Pqhn~$Fo41aB*y_QZzP~}x~_00 zQgOo$%ip-nWn|`LYLL|g?G>x_W!U@s=I+qAX8w4iLUs?d(EDg#lg2{;`spknE-hO#~t zwBomtnbDrTQXVwt0FQCR$RVh&04mr(>&PIBTlm@8`Pmr}7xRJ!Ll_v@c`bRt>KGXr zbs4#Nd70Ij8AaK3xk2mGkQyRz^O!;N`J9R3-0I?$>W1u=!OWJyjP`IBfLaom>tzIm zg(V9m8SUB4!OJC(*7G8pyO&Y80CX1vh=A6+uyJu%lt7a?ydO~k6=;Ccg7U(MCb%La zJ3mw-hB?ffH)Ub{hrMhalG4)riu|m?+`;B3od=Za7P8O=)Q4vl2e~o6G!I09oC@nF z3q$RLItT7f(E28j6e!JsXiZPl&OgkZFmpg^K$wx4^SUC;o!hw#6qS|Lz13N@(cOtC z{7^bOtdbxHLfvVIG#-Gm2FkFO=Nh_k%t4M2qL4Jbtb-_LYT!L4<{Y0n}dx)yW1d3=AeLkhQg-_(Cq9IG~dS zpt&P21_p)}ZU%-2e0cgF>5R;XTb~)znbtERaUpZB*w#O7NM~eQLfir<&`Q=sesft)8isnXQwlhncO9X)-h0WTsinY%`e_ zGP5mYS^*{)*_OZ)J-C(!?}7jg0HR=UIoHc{s~1*)GED*1`sqyTz#+pl#nv3uI!6ru zq84_FC7`203qZ$j#OI}!#}_kJ9u*co4!0RJ2m%}T0L}Yob3%qY7)=??EiDg=9%enx zZ7PYIa39^W(-CdZe1Jx>|@XOSPg`YK}tGhc>nHvuR(mh6CXyFnr-SA) zR5^Ji-10oj=D|$>w}on9T*Q z2VxroD8DBog=c1VHk;E~HYZj#7xeH%G=Wj<6E{WoUjgXe$<&h6qGHBMHqV>FY+e|) zg6%Dak8PVW=H}BcbbF!8<13$r1%7AP{Z zgTmDo7LV$Tg~i2ezAxE)S=s!#)lrvZBSy7Q?32c@4|GmgYHB>#zTmIIY$3?rM6<87 zyqqoQJ6jMdTL`*+h*?k+`(&-r{RciV8g_RKV3j1+t}(dZHMnqvbvhB zjH!vOjFqi|TOTz6DZ;g)SS+uPZgEm(UP>ltxR9-ZsY93zd9foXToXZEY;e$OGS=4D zv(+tve1 z*2&7&jqX2H?Di>JqWceWSqtP0OU6pJex_-{Y!l#`;r13fgFVT}$f(cQ+TPCA$26U- zkCkl#y1j_Sz$oFW>WE=4Xt7~RJbX-@v65{H(_CRTlqn%_sSnOCjovW(%^5qpyV)i) z&10L)$~KkT95use!kvy{zq&cP{i$V%Iq{I&1Q;vXW-%=hW}6My3-LCnd?<8;*=xwy z+uzSNlW8g2Ojfqp+=i$HAfjeKu~*X*-Cm@!(5jwx~ zkcELEkd=YqAS(ldAsYk3LN*2lNp=Q?PId-{pX>|_g&YhF4>=eZ0y!BNPI59Zcyci? z9OPnPaO6gw7eZcN3u-^cgPSCfevD`cNCbSK8+?ofw(b=n1yKvxe+ato4bmP2jiYda z+H9b^nZQ9Q!YYl@&=Fzfg;bp2z79XM#s=v_-s8v(uIEHpc_H-=SS=^0ZUD_UA4EfWVoMT` zejzI?Jb1zG2kqYkkJqyDL)*)+{v0HXAadN`aDuQ=!wMpX9A3O7iACw)zM%-KID`$p z=oaKIX(+!0ygXWjl|LmlEwMBQ-p53QHN;#*ctiM*Fo&=a;SS+L!XCng+?fcjGhyk2 z6%hvzHHdhC@KNIeB8G?$2pX_wc*4!V@PeCx zfrW>GL4=2aL4t>Y!GMQ>!Gec@!G(u`!H0)|A%us4A%%y5p@4^hp@xTnp@WBkVFC{W z!yFz4h9x`<3|n{@7!L3-Fr49GV7SA>!0>{Hf#Cyakd&8!L4=oqL4}ur!G@QC!GV{7 z!Go89A%vHKA%d5IA%&NLA%mBJp@5fxp@f%#p@x@%p@ElyVFE7$!xUZyh6TI~3~P89 z820coFr49KV7S4{z;K6`f#C%&1H&6$28JKJ3=DsG85mgj7#KJ}XQJ~lFi7w*Fevab zFsSe`FqrT$Fj(+0Fu3qBFnI7WFof_iFhuY%Fl6vCFyw&x?tBakHGB*VEqn|N9efN7 zGx!)7=I}8vY~W*H*uuxaaD1#5wiLhIWf<_SG#Vp3iBr|AaQZ<>MRW(_VT{T&l zQ#DzX8?-@6oR_h(l%2hln{m25^K@s%gQd&|D;e*vX1>3k@#8_}j|d|_vS~B2iNN`w zo;swX4%;mS+P7zT)DTv#PX&!{YO?8q-8WTJ5=ZBpm635Tqj+L*Nj&)Kp5j!-O8EL* z*f0mUH*gZf>w6qTXN zFPOU63M8eaOD#)TE4hoqS&fXyL2=QNj8faLSVt@UB`bPj7 zp@)|WA4QHg*!pW?{54Y=;V(W7U48w7%MY?1MfVrVkOv~(*lj^qSj1@-kvVSufFW@P4Uc89HFu?4O1xxe>5>tk+PMIr`25^ebt?FADZ zg%h1c6J5m<-6az}r4zkn6Mf|q{S^}fl@o(i)q^XUT930c^*y2*5fndu?ZZDyu7OplnEelWdcX5(P`045mO5dCP-6ar$L4YVo& zl#l(HTKr)dc{ih_we?3ft&gm1!rZ$xWkCxlc;S9WZkFxklm?{-aM*!Pcwnq#YC9{; zgxEBQXnzK)!i?8v3=I!wYCX@?%E{EukJkT28O(s_0Oc!gZMZ$ihpsbLGWFdRX6lDK z4q;z1Qhz@(I-05XK2t9zQ$Msgg6Rntuw zQ`IY(b}{t`g9t{ZT}+)IqFa$^4^tmAh+t&e!_*HVCNeS|Msf!;Co?l>GXgl@d0H|u zf^aTq(M5(QQcy?F3fZr*(R_zLGhdjAICLiEG{i&y2*5d=_V)BZGKZ>lmQkT z10Lew3JL5tXiJ;1lIaoCJz*xy(hS@`P1J^j3?rjCV|isI(?h2FObl+)HelWdd`oYQci(eOYpcDHzhidv^_WkUQt^3(k(@%DT zuq)$IkdS)&es=ZtrN>p%U743Ici+!`d_Vi~rK;)b?XHYqetM;HB^xKxXJHV*$i~U^ ziII(q=?gQ6U}WQF`o_%0&Ga3_`T-(-9c1HX`VC_J0TKT|-2aSh+-!^>)>lS09yTUs zHXb%+5Q_~&u!9KBgKRu(Tp$)Vh~NPcd>}DaFu};i%O=Fk#>*xQVu^tWaS$PSkd2p3 z3dE8I5i%e`4kRWDCK%cH*c6%B_}G*f*@O@w%Ekw0qlkm{4YGoF41qU^LzXEqgZ2hM zb{BzItjw&e%*-y3WX=$1$;fDL$;jBP$js;rrF#{b89~_9k`YYzE3$%VMqNGNrJ!XQ zpu&kQopEyZRHi*l$C&o`G940TOJ`~bT+CQ3i74NTp=*+55ogH!WME)8$;iO4l8J$# zk(q&kk%fWbAPWP7A}a&KM9^F#8v{cj8w0~bHU@@Tb_Rx*>f!IgO>i4`G5sj09r0Y-D! zx?)T6T=0*`#(0D>|D!3N`9?xOTPXp5g+NxkRoPPN!(7j}!GpC9`=Upjhr=}J_ zhYBIZqzJ2QD(F0^_>%k_(6uk1xpfg%aj-f_HORmKTGs~JBL<$(hxq}+ZGxaNDDXY- zkg*4tTOs!=Ld1x1w<>1a8)hdXY)>4>YoK+1oS-Hr1Ll2}(EBYRZ5q%x6;hK5G#(@l z=0l|!L|A!YUImSzAzA?7a1?~q(xCN&&>9qE2J)Sm=y$my&Ip3|8{$p~8|pSl`wlub z1{H%k2%-++MyN8VI*1rl8B`3}?TV?1$rij&vqVw+1QA2{3&KYqheP-e zB9H1vh#113U*W|DC~UYv&Mp>VW!4p8WsQynha-D*tSv~6Gb=wc58`%4dGMAG&@pPT z2>8m)zyP|3S%j4vEF{9poG8M|o|B&p)(eU^(E1P?TW~&MwXp@8&1wgw!DkDA)?1b) zLGI`Hz{|k!1v);&!^glNz{kL#!NoZx3*xWUiB@Pwa%;R8Pd!yk}Y0t^fi0t^f?0t^f) z0t^fq0t^fm0t^f`0t^g30t^fR0t^fZ0t^f(0t^f#0t^fl0t^f-0t^f@1Q;0R2rw|L z5ny20Ai%(|M}UFhfB*x-836`{3jz!bcLW$19tbcnd=Ow@_yQVG5oBQC5oBNx5oBPH z5M*Fb5M*G`5M*F55M*F55oBQS5M*HR5oBNp5M*G85M*G85oBOU5oBP<5oBN}5oBPf z5oBO!5oBQKfepey%XAQhJpKjR?+6kDt$_yZPm2JZ5r^k|Aa~`;<&4aTE(hcC^NdI{ zxXegw&~kllP#wd_C|U_WQ!Eu!IWhiS&d6pZnJNrgNDohqxQ4~RCsM(d%cu)Om%hC9 zWd5Jd{6CwK>GnisrrT2)neM?&0*!t_&gumDjgeio9p0Z!2CYh2es(z{(>?ZNSwT>< z0{fbj-Hf6snMLu%pzEXZ7!R{^b22sx?`JRH%`6TPPtM6NPUUp3+|LeOP7WG61=$C~ z(BUokx;NN(7ifq5_4!XUdWDgRDjhpdui^{4pLv~x~GF^>a3|afZ&a{#(LsVS+u;XFYo7~S^ z#nYJ)-9f~N88`Hp0A|o3pRBSVzaw@UgU6N7?ML@FXuUGXJrU6HqxXrzh=EH*Ms{5O zU}WaJuMS&Bx05SDQCazI@>|xA=&`5FEf zHVA{(t%7K%^Wf`=VdGsKphV2Tz`)edEzE>66ARMCzyMlX24dkdA2d$cEe~5){F6^Y zRbBmm?|)XNM)buYDC1p_^(4%UjK>f2gLjqe=ReE~I$B{r_kPZuoKW9^ZdQh-Kad+h z80uX3zJGLg!N$QrYC#z0f0#bVC=+De9Y`LwK8ES`Oh%^Lvl*FgFJ@%AJ)e>3_CiLc zJKKes?(Ak{y0f2=>CRzBraQ+OneM_fBIuk$=*|aL2J~|WVCNE`yANz9cwSwf>8GnY zFQiM(bWupc(Ab#i_DQDOtW0;gA6JVfBdy8hhTF-^%m`V<%gM-ikbNggc6A3GjeA}n zl**@Y zpnL4V`_mA)jsaA^!s=>HPzr$5(Qvhb;0yCWt3X9qIl=8b5ms(+{Vl@Eo&vWEbeBBF zxdd=?LHCh^_VpL%7nLwT_MUNqj_iQh1-4g&l^b+BVlimng$VdQ^ODq}Jdpc%!g48^SAHZj?!pcPkmaM;_V>Y8Wb4&GGOIBOdfszS}iwY zEiYrerZ95ZN$mNjhU%P<{0}+*v{t*8wUM~2~o z8QI*~!WoeTAp1{X2Tw9G8s3DDE3X8%XW1f|8QG??uap;MMyit#RSYBvGlJ)Nk&j@2 ztojBY*dePfo$j6}FAC-;s>`QW3bM1SiZa_PG6(B2XIe7XyE3;2Gq(pbw)-=-2Qsz? zGtP`;UYO3jFr9H>GULKj#)avOh^0KBvH&!31RC;T2elemSwZLff-oa{I8zgRfzM_} zUVeV&Y-YyA?3>M1K?lqu3JCbYm7I)>iJIbx+LDR7(uw-AiH7otqKaUb8msH3yC<3| zCz`7!TB;{nYbM%iC)(>KI_f7n8z#CMtGiZiEM>nqmHFdlW~OBqnVHtVXJ*>L)CQV9 z=mis?>4R<%(E}oS8JSKnO<-oa!8D(l={3_*W~OgUTbP;tG3{bzV`DnN%qGEfo|#RF z=@v7a4$}iL!N`U<;~v%9pa1}2NQ(yI_j0D=rQkLqBO@bIFQclu`f{eH%Ng19*_nDB zbwQicP};s=rJ%!&6TM9nb7%@`OQEXWHw)*fx$I!a>`Zl-Fb zx}-2-bpw`jdcz|lRi#x~HPO$bKxu)&%~OxBbW{~~hSyP;=k!L$#@egfvpS=n(~Er) zQ$4gY)KEAak9mp7$-&0Ktl{Y9VV|s2u0-q+6wF037JNRjB`d@ujEttBd9+OXOx9d( zQ`AN4*e4~AS2lVIH=~;eIw=ccqAF)F#E16b27G_$B>|(TVsI9MOTK1A@87tFD^!3D8r}LO0XQG%eRx)j5Y7j;`K?m$= z@cf-Ke2=UlXk9JSdZuQk^{h;r(ARlloxfvN53OX{$$js>oceg%cduJ!p38pzrCs>(I zqpuIeIxokpTFG>iX`wLFEhK|MWBjP+Ms@f0GTmTW#B_s|=@vKId>>+B2q}#)?&Sr! z+YCI1xejv<6V2WI6DKmgX4=T~nw9Aty1TKiCkDCuJJU8{rXP6SJ$dR>rf*E!nZB_y z{Xlm&qF_aKw`wKRf2KXcYz%nKoj!9W(?6!YO#fKf7|_kdu@0CY6dvY`m24bLCxzJ% z1wJGJqJ_uoxpUdrn9i`Vv9fWZhX>YmzRaro+0)b0E7>HOE(xplS z8X7QGvK6wa2(uNzT>-WLly2eU$-0a?i;LOv+0@zcS=oxv!^aw~6UBUSu=$3Jm25R^ z#=>m1a8=mM-#vFOTNRrbTNNu?ExP%L{lF;ZOM=ZeVyt9qXLAx}L)(Xk=Kj6=_p`OK zxw5sgvUQ-FkJze&V!kxkd}GE+wn=P(!YJp0vV-dtN2KsMc=#~e1hx>i37~^G(aKRr zxX+QzXJBAh2wKC>$iNT_>W4BhFo4eX0Il7B$jrcC$il$T2|c4pla+y?k(GhrCUhNt zCmRF9OEv}uM|K8=h0wM9pn2Ji91IMcoD2+^oD2+KIT;uNxfmE$axpM4g63$s85j<7 zGcYLfFfcUoFfcsiVPJ4XnYTqcLm{s;H?=4edWJT?AA|=QZ{qjND@jcUZAunlg`AxP z?z1w=L;J^2rQo?J?xNJh9D5N~P7uu?!YT+l7cf1w$R0Frmw_r^D;|HQ&K_Wf+;B=_p;{~rGWg;SqwT| z6m(8#etafmo-{r)4>Cv0U6optZ!f~ipPZVRlag5mQZEb+$;6WUA`w>cl+?WZ+{`=> z54!dozHc0S43-_l+%%A%A%}*RrGng(mzthfl3A8&4-RWqNVtN=3L$(*_(Ir-Fb2(0 zL&W%@p$oN>6%pPLc|@2)`JgZchc|=|2|Eazxeh|JCxXHd!bS~8h!`X+L2M9qW#!BV zg(HLw2}=kY5}r^t_zn*U8+0}#BwQhUNZ3Ny$l=SKUy_kp1RifKgZmF2<`DH*!kraz z9|%Yugk6#19K?rVS5{$oJb=VpS%u+o0a{a!JbwyWPwxO-OAneyO@OYYFMzJ22d$x> z!pFd{fRBM;1#}Jl9zF(!D|`$LH~1JBKy#^I_!t;|fF_oZ=2AiPs5<-%3?}>x3^x1> z3@-c(3<3NM3=z(9DhRql1v~@aDnCz8I?Tl>em^zu+)-iR1S&VF( znWi#>2oP&Bh?oK*rZTd9WSY**_K|5OBimQdSqER47K2%gTwY9TnYsL#c7q8jIk`BiBPVMP{xqY?{n`tZW7#!ibSikIjmiPmj%pk)DkUU;VN0Exug$29G^nW!U5v}k$;img z&3KrTo13v-P*u`d-8J2PH*{2?QCL;o{kXbky1VMhlj-1PnCYIG`s&{M*+H}}J7^W= ze*XP}`#E8QJ)X8QJ)<8QJ&}8QJ)2nc4Uo8QJ(-8QJ(d z8QJ)&8QBEjSrUAvC}@oxJ3IJzc6RVmXjWEUFaq_0SRo!%gHRa$RfmeBpF0q$$;ues z$<7)X9jnR87_Z34n5f9esIJM#m<**EnWwT%T)h%9bIi_W!)IXc=*Y&_59-qiaIV_86z{NJG}o79v5R1UCbuR z$|i}vj~x53C1l72)H+sKFU*GMYQt<`WadO37Xj^$SKi8|%*v+DjkaDM(W6CbzA}PN z{^M6K1fK%9pB;2}!Nx{GRmo!Y(sXyon2a%aUdtNn8wLi@9VZ|rXk8MB2F;^@XxMxZ zG?{_#PXvjB?oR~KY*9xU*`f|IvPJD@WQ#h?$QFHDm@WD?BU|)cMz-kt2ic7zGneF4)Mu@$-b`D{_|*`iq4Qn{HryXBJ^5rc||VOn9x$_{2$c1Fg%;2|Fq z#!9v&zlGTl>w7?P!pO{N4Ucb4@ILItObu*{S=p8ocYp`D;0M(bm29h+TG>GaBikyb zW)RT=B3c>QR>Q*tekmcOd=f`qI|SN;y^^VoZ6zz)YVK5NlsgF#t$zW+{v#DEyapb zlT$OxQsXnzD%n0U%@Jn%#59kQ4dv7qX#R)gZ$@U`M#DyEu^PzOKXD@4N2d8~A6eNx za|f!j3nLZ2h-gGUQWvNF-Ddsc11?74Hf%9u`am9cVFp}QAR-Xfm~wpSEXCR;F8a_wR|C(N}M z)oQeJ(&sN+$hDK{BG*nLrf2uxehTsVB|W?^o*J7Fw;{;u47EEn7NKIy#}$~fr$4Y z;sc2Ibdc*9(-#oyGl&4QzJpjlK*UcF@f)P%FNpOAM1WXq42)dI*qA^BD@g1WBNxhv zQmml$bnL9Gyqw@#nG;HZYHCnggPkh`YmbD31Q{3@BA_&==H0Bw46cD;G)Rn*c{W?X zURaBY=@aAPrAxW?vvF|kXXQH1&Gc!jburSVnuxgrW61qtjJ*7ejCE;(<`|yvPrOWU1XDF z1hE*oF2QZ$1Wj!-Ffi=bWM*V!=Zyqyy#V{lpK<5z-CP&gWVtS|a$Vx~mjs;|&y1K$ zfS13Z{aT7(kC-r4ay?>G7Up^iHy)PFLHXGe?hjMOgNF}uJ!DhkddSN46n%Ua>wE&^ zUS+Tyri_(bU)i*Uxsb=_F~`G>9zV|Yg-ws^3o94K_&knz1y!*5W{j15Y;2~&e28WT z*blIBijkQ!P!u+XZOeG_^l3g;HVZyhRz6N{ThxQK5RD$>avXH0(r$IIUFM9Hdo{r< z3ur0DzyKNx0!2KoatgF(9wZOy>w{=MeKu!d5W&c2z~;itXMqTMJ`*-~6ahxi4j|Cv z4g&)N%s(*uKxTn3BeNva0z+8A%hX}zarXRqK0P*XK0Q`G3+~0Qz2#wopE6Rz6$w za7CF1LDWyWx|o*67pImmR`NNrB?|L7Awq_codISqXpI`k383>(%wgMEycuuazRl;r zmc-}4%IC!Gt%-7v7|J{eWbPPL-ROg3(vq=~&y6iZn9mc%I#BvY95+V#ruOjd>Mfj6Ti;7Y~1CyY0`SVNjN~a6$0cEo?m{d{0GgVkT%kCqMMQdXU+8#*Cri#?Jhh!IjxOx3suK zAt_Y>d=6HM0%-S$LZSkAsU8D^EAv-KfP-&dtSCq=$^_k&n3$sjzTK%LBUK?OH6yVs zGrve7H?dM7IU_MI9lRhjt+WKRG_x$V2z1X=u|j^D0_awIMFq#4;(P_rI40=!s8ogA z#Joy{OwbAHV1r9C^Yauki;GKBi}k>Ml}tslmBE#n*-C^JvSt*q{**Zhu}1`Q7nBGq zp>vEC!Tv3RZ}11j9XEJuIp|*R#1hb*mFQ=^AkrBm-Et>`(i()#TMSEYpEN<|gM-30 z5_A$|W?H2}Vu?adYGQGT0_e^xND^1bFH%SVrzc2(mB1jvDvrbl#UW>IepxERH&56e zEPjYq@OZv5L~SYfbfL_&%+wUn`9Zk_C6%DQ9>h(EbPwTU-cb$`2VqxMQIxa~5(8mZ zR#+Zj&riyNjX6W|0aU&Oloudu#2zA7W>IAuNXoHNW&oulW(8MfMo|2L)*5D}fa8`I zbRJS^F__J)4KV|Y7FL|lyoq`*8Ei}#v}Xr-uMTLR z4rnYGG!85v$iM&^0|xEUu@Pioa1mr+2*I*1r$LZ`p+k^?VS*q7!vaADhAn~&3?~E` z7;XqMFuW0DVE7`)!0<L&3h%hjm5Mf}rAi}_KMTCLjjR*t74-p0i4p9aM9#IAc1yKeD6;TET3sD9J8&L)Z zA5jK|08s{p6j26-98m^_0?@d*C<8--C<8-_C<8-}C+?nF!X@V7_u;nH#5=A$;>OQ&`r-PWdMy=voo_o*O#(ZiZe2cGo4{% zQ(`&`T8{XRkxdC+t1~jP^0IO>FfuA;g0?(^+svMz#xx_-M{!0r4R%j{{2QMbq2~dC zu4aXu5v-al&aav*DF_~DPnH!`O_mo2jjgMyE2lSdswS&St0t?n zMB+@R#TnTY*qPRa+Jn|*BG#oMcQ6tKl~vUR(?QEWF0iwygAP(rXL`j5VllF5z~cmR zAv)MXW3YX~`S81Q;~Di04cU~K-h#HwYp}=5gYPIn438pPx1SfZ{YKq#C!=zDa(r<~ zVo?cbnl-g3FEIzY4+nP6F0OkuVf##AG;DkkMkhcA9zlBzKn`|Q7IsxQ<7%RZ1^5C)~xE!K*VQDH`=>0A>`&CQ)nomt(voBer_FE&6KuZ5`RWMm}d zWnA{d{D)4%{0XB2po|PC?Hexa8_nn&&*+=X=$p=ne5NQX2;j00|`FA72zf<@c zoLybLGrd{;(fy0)$iWZe1&x3+3#TW?Lyq@jtjsJIMqG0N?w5eZr{VV=tAp0-rdOu3 zW}~k+L=3bdx7GKuil!&WL(dCjtZZyYStJVXfiW_3ddkDHf;OYKuWx-PXq_n9`d#en zWB0O4gVSYEYH@LVI;e{?ak?<_#j)(5{)Q)fKcp(7e_&w$%zoC%=<7xi%TcN28V`jUcZ@jJGY}M%6UsDW2=b18@FJ3 zay+>0##niBuQ2*zL`eV86Mm+QKIlB;=Y8b%#4i6huQb?@`JsE za=9}D1AHGK)Ao~$OxsU0GVQo7%!G2I9%SE`0ob>oab*6P@}Og0K!z8C&Pit4ev@fC zE7MNyU}a9^VO;FPsLF>qL9XGKgt{g^BQ>!A-up+m2Xxm4$V#T0j~SV6K4oOO`I3?8 z=4(c#Tfb4yr2!q_!Op;73{uR%z<_Y4=w*FYR!|+o$hep>IW?8(=3l0ptW3ALi;a1a zFNi`JJ%x8?L5>szm3}#iC8@B;eB zsYRJ-mGQ~>xdn;IpuS3cQEFOh5$NdCVo*_S32`Qa6_kd}w?Mh@{fe-Ci!lGdXb$N3 zwE~o8`pq<7nCUm@jF8_^ash?pkfSi859Ep10i=*g3i=n zmS(yW2`|GpC|Ts@=QI6cTFLZ_lj#rt?sR@{q}!Dd!@S(kF-7oH2zV43w5pDcX^Su$ z7m|CxvYzOj)_kZC`gAS;_F`uafZ($jQLa z$jQL)5QMoH7(Q~s`c_DL*wT|h{YrOdNT1L@DJwO(B)A|kITfmwQQRgsKczG$)ymx& z+=t`_x3ff8<%*P(j5IO8| z4Ut2QZ;)6HHv>ZfHv>ZnH{@=b9&QGPIou2k3%D5=HgGdA?BHf#IK$1ra07bg?+0!M zhCk4Ae|ezi{_5~R&i##mp7jel=XVAV1H%d)28J~}3=Btj7#MEwK+gDm0zK#V3l9SW z2QLGI3@-zN0`#n33tq^1zo4^zeV}Lk#z4>d&EaKWsNjX1^V`D9z|aFd?{@|-1H%gF zdA~b&85oZ6GBBLrg`D^M0Ccbe(iy+7vwdy&7#Kiv6cKz33^9BR3?-ocHuNlCP#MN3 z&1^06mw{oCJOhKmrE~u+{xUE;cyjK4!e0i44^PhhH(+37V19b;{~H!Y2C=8-{#&pz zGH5pGWa|@_rJn~ks;~Xx&JQaj11||&i#L4&B&1R?A(7I2S$c9Abn1Z z3>%-F`@h4LkzwDnbN_QZ7#U7KJNG}vlab;1vvdCoycijNJUjP4#FvqQ^ZB{|Cwv(h z#Gjx09}&#RQ1<-Xf0qzOhH4NU%E-|9{M`Qup^OZZo}c^wAe50|%ky*pVr+7#Rd#o%{bGhmk@0)w%x;xr_`2ug?9S zkju!>_v+k#g?vVa8L!U$Uy#qp@Cw8)U}X6B>fHZ=0!9Xz*XRBx6f!dCzdrYWLm?wW z`|ET6Es7W!mcKstU!$0j;pppg|5p?!> zka#&G!|yle{$HqLWZ-*y?!QP2BZKhUbN?5#F)}E=J@@}Y2P1>t+jIXFIvE+P-=6z_ zpp%gy`0cs>GF^-e*>BJN&*))fD0qABzs*cWhSIm^{`bseWT<+3?tji4Mur)0&;9S1 z%g8YI?YaL~<}xxYdVB8wjd_d=Ti>4h?=YW{VHZe#5hKH?x99$=EMa80^7h>Slx2(z zZ{ME#zh?y_!#|L^m5dC0@6P?7vx<>H?%lcnXEri27`{9Af6Z1#2A6l|{(soU$l&+x z-2WNd85t7ao%?@hJ0nBMyL0~)b}%xuzdQH;!VX4;S?|vMx46K_u;|^n{}PuN8MeMV z_y5XOMuuJQ&i!||&d6}+-MRk@ZZI;Oe|PS`&22`8>mYk>Gcw$HckX|{eMW{aAp7q# zGBCV9_y5a%Mg|@b{hE=1`@^~aGH)3fHhwtwKjAGS!?q9S{x5mU$Z-6_x&I>X7#YGo zp8GHIo{{1C$8-M;-ZL_&emeI*;5{Ql;HPu{*L-ATi2HQz|C^7D4B4N~{h#xRks<2y zx&J(07#Wg3pZj0&m60Li^SS>K-xwJteLna9!Z${SjUf5&j0`6~pZmY(J0ru-&*%Op z{9$BZ{&McW&R<3b-Y@6=*ZgH<5dU)S|AD`Z42oaQ{r~fqkwN>*x&M3qF)~wM`gNcbD`pdch0ZdE`*j-2WYHObiRYocmwG$;7bo%ent&beI@6eL44kf-V!o4Ul zE2unRV$lD3?!Si_6GPe8bN@|jnHXBWp8H>8%fyiV?cDz}woDAuzn%O4#Eyw!&bM>_ z4eXg17JfVTzr>!2VcEBH|M%E4F|7UuDnFPQHheqx|A7M&!~bvR{_8k0F|d3;_rJrD zi9zD~x&Jeqm>3MdpZg!<%*0^*{oH>6HztOX@8|xnaARU%`*H674>u+TwIApHx41Jg z#Qiw;zsG}#q5j9Y|93o?7YsagP0g5{5to4M-UUk+F$4X`vfyF?EZD`|ASyAhFibR{f`J?VtDcE-2W>f zObp+Co%?SS#>DXZ*SY^aVN47Rzt8=@5XQv7`up7f3E@l(T))r#e-O^Z!2kQ)f13y< z29e+A{<9=7F(~~$_n#w$i6Pa&>`+J2w=A5g%=FyZ&P|2f@E3@?74 z`+udIiQ(t(bN}b`GcoY|IrqO}5)*^Xdi{%2fZVi5Uv?*EAkObi&iyaB!o)BcB!88OVeY?k z|3j`ZF>LvF?!V4WCWb@*&i(&$lZoNXzjOaRZZR=j{CDpEj9W|$w?OvaW@5Pi@7(`4 zkC_-){-685E~R|DG>Q3=96B`~T+~6T`ay=l*}OW@gy)|J?rw z8)k-6|Ihsoabae-_W#`fIWEi$_x_*zU*W;b@aq4$|4+P_8NU5L_g}-CnSqJn{QnXk zW(FgM^Z!@)Ff#-(od5sDhnXRq;rxFaUuK3FhV%bb{FoUs7|#Fy;m6ES$8i4tkzi(q zW`^_s8$y^FIvCFXmkDKN=w&$nzaW&EVG_gn|16Qr45t{*|M!VxW;oAq{(ny-GsAU| zzDQ<<`wZv*b3`#Syka>2|4lSA!+VDF|NkU1GyDdbpTx|-&UpU6M=mpiBIEi02a1^) z^cc_oXDMN3uwgv^e?ti~gD2zp|39jj8NwOQ|JSKuW=Lf`|DU0rnIVhu{QnE>%nVhG z=l@Tb!pzXkc>e#LDa;I08PEUsna<2`fbsnQp6SdCM?v}*GBf;RJpcd5B4!3*rt|-M zmNGNQGM)c_WGOR)I@9_849l1q44KaV_gKcv;L3FVzso9ShG3@i|4*!8W=Lc@|9{5@ zW`+``^Zx_(F*9^Bo&P`OC^N%+rt|+3jx#gtVmkldVP(-|F8MO%rFh4|35RsY?kx?TUb~aHn5!ke}a{T;W*3r|94nf7@o15|3879h2aa! z`TsXKSs1uk&;PICVPOzuJ^%j;9}9yN>-qmj_*od_S{{|@*hIo*;Gz&vI>-qnC^jR2cS5xr!+!q% zA14+D3-ecV|XLfFs$m+@p_NCNRaSr|&#&;Rf7WMODxKmY%XCkw*__VfR9yjU3K zv7i6H!;6Js4g2~3OT1YacCnxTZ{fqjAi#0{{~13P22qal|3CP%FudeA|6d@Og@J?f z{C}P(76vKK^Z%#Bu`tMUp8u~9&%)rudH(;66c&ak&h!6GGFcenInVzu$z)+j;XMEU zODzjSA?Nx37IiEPb)4t_e`sJ~n8tbjzegJj!z#}6|If6sFl^yG|NloH3&S4H^Z#r5 zSs0Fh*u`on&o&RsMoQ0v5>-_%< z8(0{+xz7KO+04Q)o9q04ooy@(>$uMUuh_=Iu!HOT{}7!Glr|9@r&3&SO@^Z#r1 zurRy?so%@Oz{-98zsi0V1_|!-|8E>;VNe3`PqHv*bD#hJ1E_Ij2|{a=6d` z&p5-vP|AJ&|CTc>47J?n|FfKBVOYw2{{M!vEDW2u&;LJhj)h?__xb-Rmsl8Xa-aWS zbCZSP5%>B3C3jdDo^zl7|Kc$V!yE4N|7Uz=Vfe*;{=dL?76uNU^Z!G>voMJ9od3Vz zI}3vX&-wo^ey}j;^PK;0^OJ?amgoHco}VlXPCV!T7yMyi2;e#YU*|6iLk`dR|8xGb zFf@bIv9dBu;V{qn|98Y#8E%5iRbgfL&2#>L zi54pZ2k-g+C$v}@#CXsDPtay%P~koQ|A#g!gAwof{~5Zh4CcJ&|KHJNWeDay|6jp~ zl_8P${C^W;R)&1u^Z$E{Ss7}1&;JiGWo2mRJ^%lY87spC-t+(0n6om>}%j;stXLHZq88NTzL|KH)n%D}+~O82Y` zl6>d?Gq|!csPmowpX0{L;KXVw|1aai%8(0^_hDry<2(O< zi7zWd3*Y(w3;bCbrt_Wu?-9Vtu!ZmZe~~~|hP`~}|4#{KWw-${KbV!_8Q=N;DIu&3 zU--`d{}IB@^ZyG9Ss8u`p8r3mh?Rj?==^`1GFAq8 zq4WQjl(91C3Z4J|q>PopTIl?LiE>s3PoeYw-;}d5L<^n&f1-kwAyer5e}_s|hH?N==}dLRjdrth0g!4sAFYVDRln-ojO*A-9qR8^VG94oCTR*&&qIL==^_^23CeA zLg)WCG_f+g6FUDtriGQ^56HY$Rt7HN^Zz|MSQ$iw&;S3>$;u!neEz>q7b}Ch@cI8G zU91cS!sq|noB+mbj_{YFdAaVYG&OZi*3liu5&jE=`p8tOY#Fsq(|II%Jh6j@8 z|1< z0~i{~88Hh7Sto|6gHXWGGNP|NjpIBZGp{`TshMj0_6O=l@4A zGBP|+KL5Xkk&(ec<^2C8jEoEns^|Y-U}R)CpnCrQACSE2`Tr73j0_EG=l^>!F)~b0 zJO4k1iIL%f+WG$lOpFX4)X)E40ut9a|NjCLBSV4a`Tu{I7#RYz&i~h7W@IqXKL6i_ znUTRk=luT(%!~{Vbk6_Z!_3IAK==Ir7a+dw`Tu{I85tDx&i@x+VPx2#fBwG@3nPPr z!TJ9cEQ|~j4A1{x!@|grV08Zf0TxCE1(Wmtc~}`4E|{MGAHmAV&|rT4{}NV41_#UY z|1YpIGALM||F6Kt$gsfX{Qnv@Mur00^Z(bdF){?$o&SG>jgjGi{rUeA?2HTw4(I>t zuro4Da5(=zfSr-S!0G(|26je<1J39FzW~v$=l_RrFfv^5IsbnS2P1=n-}(O+I2aiY z_?`dHz{$uU5P1H-3nwGPhQRaxGeC6E`Tq+z85tIYod17;laaw8^89}uE=C51==1+g zxEL80#Gn6Pz{SXrkZ}J03@%272?^)_ui;{3_>ge^{{b#W27$!$|F3W{GAJaT|NjCc zo_PMh1UDl?L(=*G0o;rX0?Ft9w{SBuBqX2zKZBc*At2@a{|DTR3=dMy{}^KgF?>v{~vf585(lV|7YQ4WVn!X{=Wn-BSS&{`TqgD zj0^?^=l?hGGBQjkKL7s+NWS>||0leR3=C!G|MT!MG8`y7|KEm>k>Nqv`TsF|j0_Fs z=l^%`fi4q2|Nj6VBg2O(P&p<(v<{}mv5?)m>Kgc%toEI9xFhA<<8!lLv4 zSwt8a3>KgNZy>_RaAEQJ|0yDj3?CMs|6d`($l$R2{Qo5)j0_E{&i}sx5?_1%KZ__M zgTSWq|4l?085B03|6d@=$WXBP{QoJUj0^@_&;LIn%E)kF>-qn0L>US8t|L-Ht$nap-`Tq&xj0^&M&;Oqw&d89k_x%42;*1Opd(Zzr zBF@OLVDI_=H^dnk3ihA>&mqCckZ|Dqe;Wx#27!a;|7S=rG8{N~{{IvSMuvt%=l>s( zU}TtZh(2@v zzk(DaL&Mqg|3jo083N9q|KB3T$Z+BO`Tr}V7#RvKod17EijiT#h4cUaNHH>exN!cz zfHWh6!^QLeEug% zZ;@kUPLK$iVR7{C^gCMh1fq=l`q7GcqWAJpVsHo{?e0=kxzt zB9dv3XBW^%oqMkC^9l6FkkquqsYkcf#t&g1Vu)M0M-lt zTND`?9Fv0i2e;zGH1_r+i{}r?t84~<2{14G$WH{h|;eUn}BZETVh5s|O zK=sgt|3|bK847|f{QscE$j}gc;lF}5BZEN5h5tU z@C*NMXfrY#h`#WjLx+(;A?Ct=6CFl|1+f?Yr|2*;e2Bg9ze0zRVM6?c|4Vcj85$BU z{C}Xs$Y79o;lF||BZEWIh5tUfj0_8sFZ{0n@l!7R@6lysXh^;Ae+!78e&PQUkbKsK z|0a5j3;{V8{wL@$G91Xg@PC3HBZEW9h5rZi7#S4GFZ}=?HB$}Fk)mV*nZ*v5+g>2 zgdG?DUoc{1n6T@@{~tz-3>)@d_^)Bi$Z+Anh5r%8j0_77UHHEO#6NN2{|{qEhJ^DM z{(G1(GBjMf@PCF0Bg2Ag7yhp?VPyDl{lfn{CX5UYH!l2VFlA&2xN+gXh$*OiyYSz} zl#xN;=7s+;rl4}|!v86zpz`d(|0AZ13ehJue5{{Jy&WSH>j!haPDMh1oN7ygG>FfurNzwkf9 zf{~%%--Z7(EEpLW{$KdN$AXdJ!v72ZUsy0QJota%{~wSzQVol96Ep%f#lkzs?t#s3p*7#R)-T>QTTBrb6A{|*~Qh6e%{|DUm8WcVO(@&5xGMg|3;i~l8T z85taeFaCG2Wn?fAx%fZFmXRSqySUEO5X0-@%!Y;eh+a{|U~F3=iBd{%>$*WMJ^P_TEC{{$KLo@NyZFDwjgjF%*v0=#+!z@c!Y}^c z;l{`i5PtFh4UoF2=3zr%x(fg$1I{}mpL3<3!k|L^f& zWN=8h`2U6ns64&+{|!hy`Qm>GPeulXNte#s3C= zp!WX7|1N%v3<8}O|3~;SG8A-P{9gg$cU}D715)30@&5upMuvdyi~qOyF)}1{U;KXp zB;I}T{|7%t28N!C|0Vnx83KAP{&(YI!IcLXppJeYLx{{xWv$rt}~1Tr!ROu6{qB9M{c!IX>t6F~eK7ynNPWMnXy zdGY_AKt=|KSr`Am2xMf~Fze!fi6BM>f!P=T+XOK(6wJQ(KOu;b;lu2U|2shZIT!zL z2x4S-Fz4d`8$pZ=33D(0X9#9wP?&e|zfLeCgTsQ0|0{wS873^a_PCNPf}9|12Sl3;~NS{+9@0WMEi)@qbDPs9$pNe@h4>gTvyB|7U>2mt6dR z0>oc(@&AhuMuvnX7yq+_GBP|^a`C@JC?i9|(u@C7LKztXmRPINPhFh{|u3g3>P+E{BIG-$l$Q$;{Os5f6K-H3nCdA9&Ek%|4byP{=WEM zB8riLVb{g~F;R>R1-mZ(?}=h$XxM%6|DGsDhJZa6|33lA@4fh+Bbt%n!`_Sk4Wbzt z3ie(6pAgN+uwehi{}ZAa85#~;{J$oeks;vV#s7Dr85tOkU;NJ#!^rU9_{IMgF^mig zPF(z-62r(a;pD~t6Ji({5>8$GzbA%~;lt^R|KEVroxS*9CYF)m!nuq86Ji+|9$dKi ze?lxHL&L?3{~v(FFJ1gE5XZ<$Ho6s z5*Qgiytw%POadcA!OM&Pe}Lp)Ui>eU$jH#}`r`kLL`H@SuP^@Z0rB5m{J$rWks;vy z#s6;-85tZtT>LMS#K@5F@#24YU_;>ODjATXzgMSzQ??`53C}6ns{|kr~x%A&5g^^)` z=%xP?QWzNyh+g`?B!!WoLFdx{FDZ-+1*Vt&o1`)_Y%sg@KLJFWU-~~Gm62hB#ijp8 zQW+TnEHC~4k;=%>V0G!gMj9hSf%T>T5owGJ4mOwmccd{gFxXxCeHmpLMh1r!m;N(k zF){?Ky!78B3)CLH^gkhsk)dGqrT81ZXd7yPLm;T%2F)~c}aOrHnTQMh1tk zm;QgqV`O;n_tJlde9(y+m;V=lXx_{J59Bj4JP^J7|3f|_!w0F${~Zb#85|TZ|DRC6 z$Z$dB^8XVBj0_BFm;bXAGBPM=T>fuR$jGoj`||&WLPmxUc9;KOC}d=K;BomsLlGlG zf%oPA5k-s)2YfI8?gKe zn2{l1>gE3uC7|-_@_&yKMuvpNm;c9!*d!PCqCWy%>D0-j#}Z&1$2FyZOt{~_g!3=5uK{+|KjKfC;YK{+FX z!t=}jFO)Mfe0YBOzeoimgTl+p|7|K583JBj{vT7p$YAj5^8YCy@z;(i@zd$V`gM!4B{|>c`3=^cU z{LiQb^{=n|p8=xPuKd4H%gB(Re&zq4T1Ex~ttKGX=m|XdvQpd<3U~%RDggQos z2KOufKh!ZYeDJ#RU!@*2?t0~aL_H(JgupBRr_?htTnM@H|3W<@14G1>{~QgB3&BS{WH8 zOuO=bNh@gl^UD7nAa&EP{C@)CPrve?rw!Dex$@tpjgg^X)|LMmZHx>P=3e>V)5gef zVD6Rwd)gQoKFquF|4ADogTnkP|5@4@85S(K^53AHkwIYLmH!d#j0_VNUin|s4jM1L z@_z|PeDRh47up#a0v2ES{{bYw_{x8Q4p6?n^53F^kwIX|mH!DHp!Ug?{|z0C3>%hQ z`M;!tkzvBpEB`-$=w(;_+jKHAIIOzzzn~M;{UIaOHnZFC#<1fh+%)^n%7=ul(Q9%gC_dz?J_`dKno$ z9JunIr;m}r;NX@2CVh+y0*9{rPw8W1a5!}3e+P(v_{#q+ApYSi|4;NWGF&)(<^LCu z_>n9BW%?Nz7>-`~@6it$x4rT|rk{}^;pmnB1^tW+4JWVspV80Au;J8|{|7+oPG9-| zpr4W9!s#pjStc+t6r8#8-(UhG!-O+e{<}^q(v|-qlNcEcE?@ayF^Q3(;qsOLGbS-IY`A>o|BgwF3=?i&`Tqi>{_d6k5|bGj zF5JEH-(oT&1H-*5|051%zf5Li*l_>Ke~~GS3&}bf4~$*28Rb%{+CQ)WMFuB<^KYZ{KG5% z&rD%tXn1tx{|}J-<17DFKpP&OT=^d`6;z*G`Cl@XkwM_;mH!K-GBP+kz4HISR7Qpi zPp|y{08;nt%71}rj0_IXuKYKc#>mj{?8^UuX^ad9o?ZE00OCKt@_))SMurD3uKYhT z4b*PC^8d>;MurP7ulyI8&d8wf>dJqc>5L2xude)$nGUM=ul%n8iNC(`f5mi0hJ@Ew z{-2o+s#mW3|1h1ALEz1m|1vWe864hR`EN6WkwM|@mH#<27#R}YUisfMgOQ=&-If14 zW-u~bcz5OhgBgqr2i{-#&oh&ef#LI&|1mQe87_Rj@_)@tMh1s3SN>m_394_d{QohN zks;yhmH!H}7#R${UHR`ai;>~Nw=4e(W-&4Ze82L435fo2<^P#kj0_KcT>1ZH79+!i zpI82?%w}Ym@cYXDklBn34}M?y-!PkzVZom(|2Kg6|F8UiFq@IVfbr^ofjNu}10w%J##?y%hmsP<}flGkiPo=&m2aE4Ki2%Ys_V2_#k)nf5cqS z_{r7(E9NpXTu`|B|HE9+`0v&K3iB8l0+g=)51GfvutDkS|B88x36U}RWeaP|L$1&j;~ zhFAY@S-{BPV0iWal?9-2oU8x8EMR2VV0iVv$U;Vj3x-$!Yb<1BU@*G+-(w*ogMrc2 z|0xR@861qR{%=^w$dF)i_5X&2j0_V@uKqs*Qg3$k{~wTgi>v>27BMnxu(GJFWX`d?xtBg2A-tN&wGGBP}fy!yXmB_o4E z)YbnhK;qF?|6c*|W3K+^SjET?5Oejv!74_EhS;nBBUUjoY>2)3zhV_=yy)uxEvpzA z6ymP_KLL`DyZZmfDn^C_aaaED_84{AN{?Ay$$WV}U^?%J8 z(0uaM{}Vv+$yfjH0m&y{{eNK%BZEQ8)&GA$;we}E%dBN&IFNGnzr$M4{PNZR32PY{ z6jHDLZ&=I7;E;Ot|AMuQ3<0TE|8H5#$S@)G>i-KM^{H3?e^|@Nz>s$JzrZ?128Fb% z{|(kLG8m*?{qM4lks%=M>i>v!j0_EFSN~V6V`N~+y83?wNId)M|1;}A^VL`XKUfDE z|GN7B%Q{Ae1KC&qi>zm4_>g_|zsY(=28W!h|6|sJ=CQB-Z&=UBz>s_O|BCgD3=?v% z{=cxEkwGEv>i-|>85soful`rrz{v0+|LXsM4WRbi)&CV67#SuMT>am(fsx@t;nn|J zK;lJL|3BEk$e>Vs^}oPIMuvjotN%?lGBQjkx%xk2BO}9u(yRaHY-D8EP!X`$B59L??*KA^BXsEdQf5|4$INH_!S2i&+FjQUr z&#;-1VM5i_|2mr)84Rkg{*T$r$grUL>i>?-j0_GnSO0I>%*en{d-eYlkbLdc|35(L zYp?$2*}}-cP zBg2L6tN(4bGcqvrUj1LNosnTf@74cXwu9QUSO5Rm&d4CpfAzo34n_us30MD@fau9r z|F77=$Z%lt)&FmHFftTOz4~8aCnE#Hw5$I;b}}*~OuPEOWG5rTg=ts+FWAY*;4uB_ z|1&!o88%G6`v1pHMh1l$SO2T*Vq|ETarM8)F3`By)&B*%7#RZQUH!iRBtGxz{{y=i z88*zn`v1c&Mh1q3SN|*QW@IQ>boIZ_ZbpU!i?9B#*$wKKU;V#kHzUJ^VKQPj0^&MuKq9B%gB(h|LXrGdqLwuSO4GG3u>=j{r?7} z?%>t`68jh#7!F8t-I><5h>UHyMxKO;lHnXCU_>}O=yaOUcNkpqkj zAI@C;Z*hQ;VZynq|1%DN+Fw`y&o}^TUtRsb=Kv#v!Nsfp-+r<3_5Xr{j0^_XuKvGpkddL_#?}8Uhd|>^SN|IvVq{>rd-Z?9Aw~v; zdsqMWfanKT|L*~bKfLYaC`|`0)7Z|B%C=e)ZM=6^B9n=d1tc90s*} zuKqu9n3192>DB*V4uje~SN}^KVPp_^cJ;r_5k`iBXIK9x9083}UH#v3gpuLFv#b9X z90B#4ul_#(QupHO|2Ib%8792A`d{KGBSXW>tN(3|g4#V-|0f(}WZ3ZP>i-Ex85ta2 zU;TgJD5#xt_5YKjj0^^EuKwpa#>g9p|C!P;&wf`oU z7#RvAuKiEA#K_TT>HP~DkFn|=C%JHu7cJLUi&X`jgf&t>)L;hYoPUm*Z${R zV`NyMb?yI@Ym5vNbgunBa*dI}K=<1J4pfFKjS*69ewTp zj_ZsJ3P#udzq!uHFu~~Be~}xE3>%EE{kH+pCfELF++bvIFu(Tyzzs%*1j}pxf81bX zcwl|)zs60_xbe0BJ~u(@2e19FxCv?}U;Dq}Ca7I}?f-?Fp!v{i|Nnr*?XUf}xW&k@ zz~S2ej9ZKh1&-JLPq@X%;NW!a{~i$E>DvE0Aindp{{pue84O&m{g1f~nn%6%f68q} zh7Io5{=d1+$WY*U?Z3huMurB@YyVB|fYyCn`=4@$k%7VY+W(F_pmy-J|8wpzG8Fh; z`@iQ7Bf|yXYyThIVPu%#ckMsNUC=z~wf{PI85uVCU;7_&myy9C;M)I&yP$c|Yya2W zWn?f2y!QXXT}Flpf!F?j0jUqX_Fv*2BSS#Ywf{Ev7#TJMUHhMKkCEX)@U{Ol?t#YD zuKhm&;>TS3&vBoT;X>lI{{{CM89t<6`@iQtBZENRwf`ay7#TL?UHfnI0JM(q+W(vf zj0^|zul?_Nz{ns_aP9vVka)qh|92iRGCU}__MhP)BLhRxwf_bW85uqlUHc#NkdeWm z_}c%Dhl~sX#n=ANdC17Hq4?VWBM%uFE|gsR|K}ki!-Udn|8*XL)*)W|AM%KiVM5up z{|%2o?XYYAS3Cl>yRQAe@dz}3dF?;PV@8ICs%!r(9)srduKmw=%*e1|^0ogRApZ1g z|K~hrWMG(a?f-_yj0^%ZuKhpq7}UPF_W#CXMh1r&*Z%)_%*YThPlP93|$F=_+PZ${%%((VH<_ROih8frX7l7nvUi&}i2_wUVnb-br0Ey4M z_W#HeMurbFul;}Xgpq+^*0ui(PZ=2$W?lO)^At3WcJ05*Q$~h>+1LJ8JO#}sT>HP` zDI>#!IoJN5c*@8iFz?#`A5R$>F3i97U*j1gL&1V;|3jXE#?`LHxUlHjf1T%y3>y|-`ycb1k-=ffwf_ar85tHV zx%R*1IU|Ge(rf>>JZEGuSbFXMiRYkkwQK*sJO|DDUHh-{f{`I$`L+K(FBlmXEWh@@ zmRTEPk95H=ezd514Qq> z_J0G2-gE8$9gzHy?Ocng~6yY~OUTSkV4{n!3Kcncbj zyY}DW9V3IofouPL-htNlT>GE!j*)@k;I;oH??Cf^*Zxm=$H*|@;I;oN-Z3(KIC$;< znRko~3Wu)!|L~5HA>q)q|2gkL>w&KQ?|IM2z;O85{~hlc83K-6`~T%VBg2Cu*Z#|V zU}QLO^xA)m4~z^8j$Qj7@_~`z!?A1sYd$bCG#tP7f6WI*28I*Y{@?h($Z+A(wf`(1 zLE~N5{wsV0jdxx9Z}X9nA>hij{}CS<875r2_P^sJBZI^BYyXdY1hwO?{pa|^$Z+7s zwf`EQ7#Tj?xc1-U6C*>x&1?U2K7rbI*Zv;>(YLStfANWtLE+A|{{o*u<6hVPJA4L> zdtLh<@|lq#;lZ{4Js|#rYyY==W@PyA@Y??ypF#5?*Z%8#0k!Y0{rC9-8rQn^Kj#Z0 zL&MW+|2shRi);UPd|_lb@Z#G48($b17+zlc{{y7%<+cA3Ul|z;USIp~@f9@QbnX9) zuZ#>I-d+2D1SJ0c+W#jY{`+hH8NPw$JFfj#_{PZa;KQ~5Hs2T-4t%`!zu+4q!-tR8 z{!jSE$e{4)+W!sT7#RXSUHkt6B>(B!f0gfy3=ckC`|t1_G;Ve6f6RAA28GYp{#Sfw zWN`R=?f;bTj0_(>U;BUKJE)y^?f(~$_?K({MSg(hHLv|Q_`%4q;LElDK0g>4E_}K6 zKjQ}@1H;#A|66`AG6;OT_J7R}Mh1oN*Z$uC@qb+V&+?OzA>qfh|0+Kj87BO=_TS+r zBSXQ@YyT5|GBRxVb?tx4Pez6hzpnjX@{^H4;rF%w2SDmsum6AWlaZl;_4@xGAa$(Q z|4aM=t$Vuu-{BW%-P85|A-_QFqwD`OelapkV7vZ*!Y@XK18mp-Z~4W@aDnam{}aC$ z89uOG|NjJ}j{W-oAHNtG61cAa*Z9rIpum0of5>l8d*}N9jNgn53%IZU@A(Z{|8)KT zj^B(72|U;T-}ueQz`%R`Kf@nJh6lXY|C@klzU%)R{(#m&UH^aO44GHejJ{(sJ2Mg|7a>;G^3Wn>5tz5ZY1A0xv7(d+*${xLFa5WD_A;U6Qz2l4Cw zd;WpegI@oC2SiI>|IhNDk)c8U`hS!Ej0_Bl*Z)WSXJmMwbp8K||BMU)%Gdv2_|M32 zK;`;>4hAL$0k!M@Ef|;>0@SbnuV7$eDA2wB{{RCMLxbt{{~s8b7!=H||CeB7Vpw2y z{l5bv69a?!_5Uf1ObiO<*Z)_5_?FlI&tPO?D6qW#{|F-!!v@Ri|DS+ptLy(2n3xz2 zSY7{b!o;LbtFflavUH>n@%ETZLc>TWvD-*+q;OqZ$ zSeY0cLazVsVP#?{2)X`$4J#9aLfG~He?aOYuK!nIV`6BCy#C*Vjfvqw^!5J*Y)lLZ zvDg1kVPj%A5PSXq1vVyzf~4#Je}ML#Ctd$9!Op~RAnE#l6Luzsg5>M}6WEy;9wcA? z-^0$tkdSiy{|=CN%Ju(e*qIm>q+I|1hMkGwLdy03JRD3638~lrD{wF|97w(X--CmR zVM6-#{{>;DBfnHUyiUH@;u z$;5CV>-v8mP9}zg-0T0Ra56Cz30VJP${r?3{CI*JQ>;J!SGBG&hUH>n^#l%pM zcm2Nw7ZbySyzBpCxR@9&6kY#60mLu5{(lJ<69Yr>_5VA#m>3j_um8Wn#l+xHeEt6q zkiO#U|0TGY7(NtV|8K+1#86Oj{eJ?8Uvm9_3pW$Pfzs>$*Kjj2JSe^X{{S}=Lqgg0 z|1Y?i7#hm1|L5RgVpvdi{l5ke6T^YB>;FA?m>3?EUH_lK!^BWfe*OOx9wvqh<=6l3 z;bCIzX2~3!-mT1|6_QW7!Fik|6jn% z#BibV`u`SQCWZ%<*ZCs_XyH@G>zJR9*l70VH2_{l5Yq69Yr_ z_5U_}Obi>Uum4ZrV`31fx&FV0kBOn6=KB8)d`t`pwb%b&;bUTWP;D`0nHWAaUH`v#Guf6{r?96 zCWe64>;DA=nHVOtUjJ_($i#4<_4@w+K_&);FrHm>2{) zuK%9`lJB_we-B8$-zsA!b}VWUDyA=5oThz&~^R4j0h7$LHG6l4kAnpAG)vq&k-E{|tz~==%Q;l1vN*i?06{kz!)Fu;}`K z3n?ZBgT>eX$4D_TBrLi9zXe1uz5aiN6cdBOvg`lPNHH-mEWiH$gA^0PgB92RD@Zdj zFs!`(-$a^;;lj%6|6`;GG%nHVOly8eHSG!uis>g)fnNHZ~P zSbhEfA895AgEiOxtH>}hFs!})-$#at;lkSM|4U?;7!=lD|362DiQ&Wg>;DhPFflZ2 zxc>iz3=_kK4cGs3$TBfJ*l_*7hAb0YF)(bp z{(plk6NAB~>;EsvGBGIZy8d56j)@^)&-MQfa!d>#_FVs;BFDt=VDI(+J#tJ81^cf5 z-y+Av;IRMt{~K~l3i$ zA`=6{&FlZ)C^9h!+`RsuL5Yc>;nwy421-l}5AI(7pPyA#L)2S`u_}NCWZsA zuK#aQW@5PT>iYi~AoY?|50XQc<}oAe*qOH28TD-|C^{V zF$BE7{y#;9iQ&Wh>;F4I;vcU6U!%gr!0_ez|2ry73>Us#|IeYy#8AL-&y^{FhN3keZ~Tu?V`2#4 zzVSatjftUw`^NtUH714w+&BJD0jcA@@qdLH69WU!jsJT<>UnPbzX4LubL0OHH714v z-W&fV)R`DI@ZR`uqt3*@z<1++j5-s;0=^sn8`PN?4)ERhKSiC1!9d`~|05v2z>WVO z)R`C_2;BHDpuxnzAb8`yiUt$I0l^#p12mWz8ia2AuhC#)a1g%ne+5WhJ|^+Dr@|6mR_h1EQ5~{MXT8Vo*@N@!v;>iNQhj#{U`}PutDR-e-~XQ1_sR= z|5J3C7(Qs<_`gP%iNQeU#{VEXqsPR+U~uFA0X-%L2ZI~`uYmZ5H~#+s(MC7^Yv?mE95BA|KSZC2;e*MI z{~h{F3<;(;{_oIdVlXhf@&5%#+~UT683QJU0{a{PeGHfw7#wc=FEC(YSm1Kw{{j%- z`^NtVAimFy|00G=3nHU~4-}rA~%EaK%a^ru3DHDT0>y7^tOhNVijsJU0nHU3i$-}t}AjENy(@{RuoK=PAs{J&zx#2_%` z#{VB6`6)O4^O!R+6im7C-^84W!C>l*|1suF3=gK>_+J1LpLXMai#ZcR!?YX!XP7fF zY?yZA{~B{928QW3{$DU>VsMy#K&@ku5e-TS2h70p={P(eBVlY^6<9~uBsQ$e1zr>P>L1591{|hWZ z_2iBJ2P~Nw7A(5)|B59O!-qvT{{H}pFTU|##)^sIz~USK9jurbHY~aEKgWuR!C>i) z{}Zg37z&o&_`ku5iQ&W28~-0zF);)zyYc^z6%)gPWjFpSSTivQEWh#J!52+xbfe^hKa#p)s6opHlX_T#{VTYObiC=Zv4Ljl3#b@ zKZ7k3!+{Mq{)d3*jW_;h*fKGE*m&dr99t%agv~epzp!Ou*s$fse;Yd{h6USh{List zVmPq<#{VUDObiot-1xu4j)~#J&Kv((?3ow}cHQ_NV9&&GVb_iSJ@!lt4SR0Q0aj!X;&CvW^ef1zeaIE?mFy-@t{5A>hW1|1K^}3&E{OS0;vp+c*BVxH2&; zxO3zG3|COSeB=Kb5dYzg|4&?*7$!Wr@!!CWiNWCAjsGXym>3e?-}o=#&cu-L;l}?E zcP54lUvB(g;?Be{;p>h6XWW?>0>0h&{{|8N9`N7%FXIWSmu~*I@nm9f5V-k2z>|q#fzZwW6`o8C3c@%4&+%kpU=X?a z|AZ$K!vm3<|KE6m>YbbaMZB081jKIsxA9_PFc7=>KgNrR;epuA{~caT3um z#1J5R^FM<(6GMR9&Hox8TK?w$0Bb;Z~nLO1@+%={?G7bVwhlg^M8jg6GMRQ z&Hp!inHUb(-u(Z@mx4#M-~9gpL`U5Gui($ba3SL6e+Pdi27{=Z|0jUx=$rp<_%ksiMBn`X1tcGR^S?m= z6GK7l&Ho(%Obj1lZ~i|Lz{J21ck};^044^9xSRjK1TZlK#NGVQ5y-@FA^zrnpFk!C zh2)$6=L9k_Oh~=?|3x4ZLqO)u{}w?^3>&g;{_hB4VhG5&`Ts@`6T^d?oBvsYLH*&I z|5bvS7!2}m{?7&^c!K>W6w|3xC17$&sc{I3zo z#BiYP=6{b!Q2+4e|CmT7h7WBw{})6uF)*~>{NEDE#9+{V^Z$%UCI*N0oB!8DGBGr? z-~4|7q`&><|0|J93=7(C{(k{7r~T&tKarq*-+A-@ohT*-ht8Y-e?)=$mpA{5L^Clo zbl&`L5)JBS-uxdD&BP$kb@P8kG!sKY*UkSkqL~;rbl?1cBASVTq4(zhFCc#J&Hpkn zObi8mH~%}tFfk1c z#GC&GVwo5=OuYHuAQsfmy!k&MmWd%?(#`)3An{2z|8Iz8Vz@Br=Kl+^Obh~(Z~p%h z3#wOd{uhY@^+Rv|*N9_cSTOnKf15Za28Ss(|L4RpF-(|p^M6Ae6T^imH~%jIiBG-x z|3n-U!+~ix|9^=C^-pj9mx*U$XqbNUze7Bz9=-WLB%X<3!}Oc~3*tfb<<0*yK;pA* z{y!1V#IRu2&Hr~m^0RLK{}9i_@L|@?{|X6A3=Oky{`W~>VpuTy=Kq`oCI*2yH~&va zU}7+sbMya_1WWo+Ks)hZQ&f-$`O(*s${Ef1YF}hK5x)|63$8F&M1A`9C3< ziQ&Q8oBwAdGcjyfck};&WF`iN^*8@NNM>RX*l_c|N(vK0z=oUuT~e4B7&hMgUy{Pa zaA4ET{|i!>7!)?&{C@&OZ@KyZO9~UigDp4ztE4h9JlJ;ge@H45L&5f&|7$?}?Kl4~ zNM&MR*m3j!9uR-W&Hpb_nHVnYy!l@y4OB1Q{O^#)#2~Qy=Kqv5Q2+Dh|Bf^!h6np@ z{y&h$#9*-h=Km*YObiZ(Z~hlaXJUA8^ydGNbS4IcV>ka-q%$#GICk^@0ucYi&Hr!G znHUUC-2Bgw!NgE-;^u#i3?_yLCvN@^$Y5f)aPsE=h72YKg;O{GFUVkG_;Bjx{|gyR z3=OAm{{I1zKYjDRL?#mh!`YkvZ8Dh{8qVJQpOVSM@Zj9d{~ei33?I(j{68m?i9z7} z&Ho!RnHUt#-~4|hlZnCL{LTM2GMN}0&fon12BiPO&Hpl4Obi7VZvJ=3Vq$o3;pYF0 zEG7nli#Pw*WHB*ZxOnsbk}M{M1D9|9zmdhn&~WAEe~xS>hJdR#|661;F(h2O`9C9@ ziJ{>7&Hrn%LG|y={}-~E7#eQe{LhfX#PHz8&HpMnp!)UZ|9~7Oh7Y%H{_g;Z-@f_( zKn|#0z4`w`4ikgH-JAava+w$=+`akVBbSNc!`++z3vxmI-<$uZfW+_J{J$fYi6P3Km-TYsX2dbBE{$G&C#IWJ<&Hp#@ zm>3$K-2Bgz&%_Y$^yYtud?tnsPjCLu$!B7i@a*RQCHYJYAD-R(e-s(!i$^#GYXg(4!pSee?kEh!-W?&|1T+EVi0(F^Z%IwCWeNW zH~;?useg6zzd|7s!-7{g|9ccNF(|yg`M&_fe|_`+j6x=c4R3D#KT^oVAn@+y{||*s z3=QvY{+B6YVwmvm=6{1CCWa61ZvKxbVqy?@fAfDu5fekhhnxS`6frRre7yPpK@k(f zf{!=wy6{}rW73>$vm{J*D^i9zAd&HoQT;(u=b=P6@iSn%iOe}yt8h7Esj{tqc*Vo>;Z z^M6Ab6NACOoByYjF)<|kyZL`h856^We>eX>0I6fV^JQOU$`f$!G;9hIQ*fLs4xR5CFz2;KTGP{qVhAav`$MHOfq;MV_yDkcU7(Ods} zs+brqh~4^spo)pXK>XJK7a(!TTmNOMnHUlzZ~b?vW@6YNdFy{cH4{UC)UE$Bs+kxH zq;CD+QO(34AbsoqgK8!Q1DRX@1!|ZW9As|&SE*rQ2#~q;-=c;DCiyzZ_4A8MEwHt62^FHpqw{r9P5VsOyA^*^DOi6KGn*8h@PCWZ-mxBhp4>%Tx96GMQ(t^X=@Obi7ExBgqyF)@5Fxb;7wj)}p*@Yer^ zIwpn$!(0Cs)G;wUFue8u1W4ZS*8e+oObh}>xBmYDsWZCuU#6akfx-CJf1i3L1_9$+ z{}bw&7z~VW{coseVsJ3N^?yn|6GMRUt^X_PnHUm`Z~fl`;+x$1|D>LYp}^$U{~z^C z3cT;9z>|zefXT-s#r=j0Pr#3#PaJcQi0DJTSfWe-22U>8<}8 z8kiV1nBDq+r-6x~!2H&Kjz%Vi3Ff!{Ycw)3Y%ss|-=mR<;ez?C{~3);3?IyI{qJaG zVi2&n^?yzy6N7=pt^XSunHT~rZv8(3Qg3nV{|k_Mi(CIWnwS^@EN}g{Xadb&-TI%> z#Kcfwee3@O5a0UN{|!w{3>WNf{eJ-xcf9pqqM3=o!THvIlV&D{0_R)*13-M2TmKuH znHUsYZ~b4<%*2r3dh7q5W+sLYuDAX_X=Y*waJ%)NqlJlKf!nSB1}#hs0`9l|N3<|8 z6u95|-_XLu5a4m^|C$yi1_RGq{~v(FJ#YR0)564X!1LCBl~yK(2cEb7TeLDU1bE&0 zpU}$0Fv08A|B_ZFh6L|h|Ch8fF(~-n`hTXCiQ$9qt^Yqj>ill~muUlyi`@F})5gT$ z;D76XNgETxf}mUf*R(M)JP5k=|3VuRgF^7F|6kge7&Zjo`Y+MW#J~`G>wic)6T^kj zTmNg?nHUy?-TJ?zor%F9;@1BQ?Mw_CB5wWv)6T@;5P9prNe2_dg{WKqQ#zO!6k=}u zU(f++$KU#Yrvo%UcI!V&C#W5N>%U4T6GKDXt^X07ObiL}xBl03GBF4w-1@(ylZjzM z!ma;jI+++05^w$g(8;E2*c;2o54|+iJVYmK&>0x3}$iMYprI(4p zAph2Xi(V#%g#26oV|tkw8uD-bujplBIFNtq|BPNxzv0&ZBOv*LTmN75GBHdjxb>f< zkBQ+x!L9!)eM}4rg}46u^f5666yEw@(8t73P;~46iayXh+pYgs`att*xBh?W1I?@5 z`Y+PY#L!T3>%RktF1__Xqo0Z4LfNhVd-|Ce1j=vyzthje5Kw;W{~wTi`K|vl6POqZ zDsKG`n83uKP*U}hss<3Crn^sNT|H^f5`;U_|&ccS0;ew!*2b50a90W>p#at zCWe5jTmN+?GBHf3y7k{%Ye&CWZs;xBkzV1ZwZ!`hQ>&sGWc7|BFdX3>!Lb{pXm>#Guf5>%Yll zCWZxFxBe$gW@2dQzV&|%h~Itd|AEO&3>Ug@{eLi-iQz!ct^Wd3m>2~5ZvA(e!o=Xv zck6$|6eb3P$+!M@OkrZ!Fy+?&9aESX4otuG|HTw0hJ@L-{)%YTPP&@b5 z|B9)gcJ8hJOQte02+X_n|H@P*h7SvF{b!lR#2~Qr)_;>}Obi=V-TI$0jfufw?XCY) zrZF)zth@F9z%(X?1M6=6e*@yLzx7{cIunDzhFkxArZX`VY`FEmU^-~N%K!`tLH6iJ{>5t^WlxnHU;Q-1@&{CKH3e$y@)=%w%Gi zaPrpwFEg1K7*5^#FENXW!QjlT{|>X57&e@_^*?786T^iwxBmBl#LwRPzhf2?L&4cw z|8LA%YKkCI*8`xBffK293+y`kyhIiJ{=~t^YG-Gch<^x%L0ZY$k>WS8o0P z0ODW0^D?biR2IiU96t^W(=fW}>J{ogW&iNWCJt^arCfW}>J z{pXp>#NcrI)_;q+ObiKkZ~f1h%fujX@7Dh*Ao~8T{|DwWF&Nyx_5aFTCWZ|UZ~bSP z$HZ{p;jRA?^OzVmJh}BhU>*}g!P8s+E9NmV7(Bc6e*sAR*{%Oa=7HL4xBmZ_2Wqd~ z`Y$t|i9zAzt^Y3bnHV;_y!Ah4J`;n(>s$X9%x7X~cysIjnfXi%2A^*I{{!NGzV+W= z0TaW9&$s@&EMQ___;Txi&H^R|gD5dA|C$9%3=Lmy{Xeq+G@f(ozsy1= zh67)3{dZW%#31nP*8da`|J$wqJqwu_629O1zhfa2gTvoj|6eR*Vkr23>%YVzCWZt5 zZ~eDf#KhphaQlD8A|{3njJN;KS;WMUz;yfnfkjLV2F$nrzW~WI-~Rt+5feiI%kBR< zil zECscLZvQt~%EZvXd;5RFQYMBAytn_CEM;Oa;Jf{Q%2FnV3H-PJA6Ux7@ImnQf1YKa zd5zouZI&@HERenZzh@Z}1B2Y{|67(ZF(}C0{(of|6N7==?f)-8@^ZKTODtz%c%XRu zzsGVWh6PHu|5q$$V%VU3`~MPhI_xS(kh6a<{|6NuwF>Elo{Xb3wWZvQt}!^E(`>h}MXHB1Z+*0=vpS;NGjU~~KbfigU{{%EgP5^4*1^wzXe45-Twb%0~14l|Ly-g8<`ju_}~6-u#t&jL*VWI z2^*OhK7`!}qA9MS^!X_pLgSgxOBQ`NHY)H8Mf5j%y z_}lIOH$dXaxBtJ{#Kho`eEUDcW+n!Q)Z70JHZw6aq}~1>vl+B*<@Wz6o0%92GH?Gs z0HU*R|9=A#&%OO$VG9#OL*DKGAzPRj9^~KtU$cdYfuZ2`{|Q@|7(Nu-{(k}_UwHff z8xX(n_J4`3Obh}=xBu&G1=XLo|7UCk)t|TjcWh;1a45U|e+TIN{)*fGUx4H*ZvPkA z#>DWU;`V=yZJ_$`_J0o$zv}k?l5I>32WoHsU$TvfpIqe&qK5 zj-5;lALiWtzhfs8L&DtK|6lB6Vz@B(_J4_8pmCnt|2=jwF)WyO`+o_DKmYdsIlGt` z8s^{rzh@T{!-EC4|Gxmy3vd6o*v-W7VA1XWDZ7~%CM>@FzhgHO!-d7S|F75$niskK z|Hf`6hJ=;3|BLKlVo+Fj`~Q+XObib;-Twb&4--Sd=G*^O_A)UrY`Oj4XD?`e;`aZF zy-W-VTW|kgvX_ZLVB78g7xpqS7;L}&Utu2;L%@#P|9$o`F%;~${Xb_P6T^WWxBpMr z$HXA8^Y;HO`3Qm zzWsm60nm8P?f-W`^2cuf=Qzm3AaMNlf0Khu3=Ai4|4%u{#IWJy?f(-Fg2rub|KD?v ziQ&Mh+y7sH)SbEgU*-@KL%_M)|9wF8#oPZ|4uRGW-2T7e5EFyJ<=g*n90HBA-2VUP z5EDbfmD~SS4l^-axOV%0!eJ%`f$O*bw;X0-SaALJ{|zAe#_j)i4l^-4xOw|O&k-hu z3%73nw>iSZpm68*|C}RC3;}m<|DSV&iJ{=$?f++vfW}R3|NnD@iDANn+y8Zrg6h-T z|6`7V)(71F-*J?QA>j4x|67hSF(kac{r|*KCWeC7xBuTc%EYkX_3i(EjxsT9czyf7 zz%eF<3$Jhg_c+GH(D3&5|B7Rvaf{pkR~%zvc<}D_|2@Y*^B=eWzc|Lk!0_Sre~IHv z3==-w{_k*{iQ&Pg+y8TpGchE5zWsj&Nc{8d|2vK|F&y}O`~Mw~_}AP2bxwfl)7$?Y zPB1Yve7pTW=L8dj!}r_&r-10+xBu@s!Nf3u;m-dLCzu!n81MWSILXA2zi3dIK#x?Abscm zhBKgf`8)rQoMB>kAbscmlQW?H=bis1XF=;A@B9xr3#wP{{LeVc#9&~4=YPjpQ2lb} z|D3a+e(9b6d(JX3EHJ3)~?)*2o#KbTmVMt&|Kk#<|8?iT z$z>)6gX}y13obJ;EXcm|f68Shh7Z|y{%^U=#GsIS=ReC8CWe6AJO3rFFflyHz4PA% z#LvI;f5H_eh6Uw!{vQDGEAIS%bA^dvLiL^hHdmP#4piUyA9Iz7A)w~Y|DLN%3=Fk* z{_g>a*WUU62E=c;^Izr~6T^h&JO4|rf!5vK`QLF3G_QW=|B7p%b$56EpST8^pSbh? z2Z-Ns=RePNCWe5HJO34~GchD|-1%>Eorz&W$DRKn*O?eTblmyhaGi;vp!3fE71x;< z7`pEKzi^$2!J+HU|34u4t~>uVZZI(v^xpX&a)XKCK<}OZ6*rg|8YbNNzv2cH!-I); z{$IGk#NaUL&i_9k`6+k)``lz=_%Q9x|C*bi`SUyfm)r!^7kB<&0Ey4K^Izr`6GOwi zJO49of!2%N`M={96GOuCJO5wYVqy?jbLYRrZ6*eTwRis8+y?bG?)>k#&BX9w`?l3Vp?7Q=S&mAU)hJAPb-?_uYaA4n^|9|cAJA90_Fq2bt_{}uN^FSyUd@Zs2<|9kE;F(@3r^Z&wq zCWZ~i@BDuP;-9$lpW^`&L%@kU|1};kF*uyO^FQPP6GOtuJO2wFfXeqf|7Sd4VpwqM z&i^A1m>2|3-}(OqB!BwOe~E`o3<78F{C9cC#E@|2&i?`s|LmRra~?7=Y&d)8{}GV* z`8)qVJOs^m-}$fc2sF=q=YIf*zIx|>%_AlTgX?$xuXqINFWvcn;Sm$VhFf?3GdyNu z*l_#Ke}l(N3<_WG{7-ny#IWGoo&OU+;@|K5-}9J>VZzTl|9PG;F>LsG=fA=eCWeAv zcm4-FVPbIjedmA56DEcU|L^>t1CkfK`~M6`T=?$)KTnt#1Vrxs*Lljs5Fm2*f51~F zh6^Hh|JOVPtyjAHf6Y@Sh6xgP|KE7Z#2_Gb_dmxoPox;eqDe|0`ZGF*Io1{eR&V6GMXb-Tyy8>U8e@*Lcmu@Id$O|A5y_ z3?Fpw{!e)g8gIS(zv49$gMr@N|1(~L);rz(zvDF%LxJAi|2JMUF>KJg`~SylCWZ@o zcmGSgVPg28clW==8zu$^qr3lO-Y_u)7~TC}@P>(@!07J(mN%ez_PhUQykTNcFuwbL z4@jNy-TxQffW}4d{{QfXi9x{R?thuLp!(zP|CqN-3;|Ym|F3xqS}%Y1|ChI*{>R<_ z9PgMICRpG7FY}Ix;eqwt{|4`v7z}Lg{&#uD#Ngm?_kYPdCWZiqyZ<}hF)=ha-u*x4 z9TUR_$GiVGfb==t{r}({6N7^D-Ty4_nHVNG-~Dg!o{1sB6$?th0*Obi>s?*7mC1X?d}_y3enpmD{!{||uZ zxV!&#&SxfufcU%r9X>NLBqZGZU-6lV;XuOO|2>~U4$hvd8edA=|)7^K|&ukeM5K_Tt#|9~${3=HXa|5torVh~8b`@iQ46T^k*1 z#7pk}7x>D=Frnn`e}k_~3>!-B{&)Gx#L!TB_kRXRy!7t>8jyJD-TxE5GBG@;xcmRi zSI~Id-TxoHg4Ubg{jcziiJ_qS?*D*qObh{acmFqhV`4baaQFX?Z=iYpyZ_I8V`5O~ zx%*${I}^i)p1c1&zB4f>^xplS@tuhwp!e?oj_*ti4ZU~&ulUZyu%Y+v{}bPt7#{TA z{r}=SXngGMf1V#q3<-UA|110e&3oVdZ}NkQp`q{Ye~%wb3={h9{*U>=#IT_6?*D=x zObi?P?*4E2!NhQ&@9zH@KbROU^xgfx<_Boq_1*smelRh7=)3#>$`2+6hW@+%U;JQV z5a_@A|IZI528I5+{{?JcmHqr$;7as|L*@IKbaT~^xyq|<0lith5oz$ z-~41^c+h|MKf^C3h7bLB|BL)$VqlnX_rJz3CI*2CcmLb`0IJ{_dm;TCWZqO?*5nf&BSnF!rlKmzd`E(?*4c9&BX9w!rlKNznK^qCf@y@ z@tcW3VB+2XHNQdY&+q=9@SBOjVB+2XOMWvkI840zf5&eohJcB8|DXBI#E>xY?*9kB znHUNt-u?gOH)uV<-Txeam>4EZy!&6~4->@|THW!KAzYJ^nH=e3*3if6iYf zhJeX;|4;b~S|5M+|DL~~^?!H&KlsbU&@kohe~y1l3>&82{crM*iGg9--Tx8)m>3+U z-Thzj547&@?*AG8m>2}6-~E5&AEjv!-lzc|4T41Gc1^Q_rD7RGsA@WcmEeKFf%kP zxch$&12aRx!n^-ZFfcPDEV}#u3j;Glz~a0A6&RTr9G2Yu@59K*17>Chhs}5Y^RO^87;L%w--3miL1F9N|0yiY3CMr z-TlwO$;^;&{_cMhPG*LH3wQq~a56JET)g|ghm)DX;L_dyJ2;sc6fWQW|Adp7LEy^W z{{mdh3=CKA{wYEVy;|zY8}r!-U&+{}*sGGc??}`+p8MGeg1MyZ=vcGczRIyZiqOH#0-P{k#7a zc$gU+9^C!!!^6yA@bK>c3La(#g-3V)FX3Tk5O{p|{{r?tcwl zW`+k(@BRtUS@^^&+qDj7z5CxmfSKXI zx4Zvy1eh5%e82mDh5$3ef**JP9}!??nDF!N{|^Gp3=O~T{+AJCW+?c5_rHfAGeg3k zyZ=iBnHd89-u=HokeR{Z-`)Rb1eqBO{@?xoLy(z4f#KeN6(ME@0mgg(1B93v7?|$; zuMuKq_`r1U{|X^yh6l{|{$CMdX1Ks|?>~buGs6Mad;fKWnHe^)-TNOQ%*?QW{oel; zVP=L29QXcj5N2j*;Jo+$jxaMr0oT3%93spN3EcPon}{$o1n}JZpCH1_;J|zDe~$<= zg8|>Y|2ssO85H>M{eL3D%pf3e@4tX3GXsO*z5h0%%nTm{@BPmZWoCFFbnpKZQD%k< z!uS3k5M^dKAad{j8&PJ44Wjq{ONcQuED*c*-$jg>VS@O*{{>>q3=IB}3@BLR0XJ&Aax%b~koSDHu_TK*rab^YuxqJVYh%++?$lv>a zL7bU^LE+y2KjO>`9~AEW*N|Xlc%XRie~1J#!v&>#{~IKj84f7l`@cqlnPG#CwR-uurY$;>c8?cRR_NoIxy^?UzgB$*isH17THkYr{^(7gA5izG8cfY!bL4Gcf4i`@ctunc;)}z5g$ym>C`z z-1{#g&CGDY@ZNt1X=a84M)&^bNHa5RFuwPHhBPz70+W0Hk4Q5!OfbFo|ARC$Lxb79 z|1vVn3& z{m)QfW_aLt@Bb79W`+y?_x>MHU}iWFaPR*c1!jf~f%pDPC^9oF2)g&*MUk0dLh!x+ z1&YiJ4I%gb&rxJ%C63d;eopm>CLE?)~pjVP;53 zz4w2M3Nu4M+P(h|RG1kY((nD}QDtT@$hi04LY0|8A@kn<6jf#hfvkJ~C#W(rFl68R zzekms;Y0Sl|1VUT86M=^`!Ax#%y1$1-hT%*W`+ZK_x|UoF*9t)zxRKJ8Z*O!f_wju zs4+84D7^RogBmkKL(#qeGV06>1;zLNd#E!rB$V9yU!u;;5KwyW{{nSp28XhH|Ies1 zGZ>WL`~O3onL(lA-hUMhW(I-Ed;bG8m>C$V?)|UPU}pGGb?^TQ4Q7T1)%X5i(O_n{ zP;>7;gC;Y>f!cfjbu^h79@O3Y9|5B4@BMGlWM&X(y!U?th;F*~{|<<5zW1L)iC+n@BLTMW@cE>bML>8 zHZ#M4-h2Nmw3!(m^xgZvM4Op`VZy!t7qpof3?|D5M5>lhw1nJXXr9B1Wdp8zebmtAz}Kx z{}XhX849M~`@ck&nW16&z5hFOnHeTbzxV%)E;GY|>G%FW&}C-WF#X>DFS^VO2d3Zq z&!NZ6aAEqr|1x^a3=gK?`){Df%DL_xc8q&pP6C7jC=nT^qCnp%((a8M4y@Az>ItUJ@lCwF3h<1KSrOK;lYf1{|oe) z89vOo_rFD-nSo*Ez5g@xnHdCT-uu5spP4~n=Dq(1^qCn9X5RaMMW30$VdlO6FZ7ui z0%qR(|3{yhAz|jd{{jZg3C3S z-TVK>fSEyI*1i7>hRh5Gv+n&DF=S?Nn04>Jh9NUUz^r@!Z48+i5@y}|A7IGLP%!J> z{}e-JhK5=9{#O_>GfbFu?|+XWGsA*e_x>+1WM)!t@hRh5HX5IUL!jPHa!mNA$ z?-(*OJeYOw{|7^6h7Ysu{bw;^W?-0o@4ti*GlRhFd;fKem>Cpi-}~=i#LQqY``-T$ zBW4DN+4ufu7%?*h%)a-(#)z3AVfMZM6O5P{3TEH?zr=`{p<(vD|2vGB879oW_y3F$ zGsA+}_x?XHVrJMd``-UAM$8NcX5ahIVa&{MVfMZMGRDjd4`$!{Z(z*K@L~47|1QSN z3=DJb{f{taW)PTj?|+UlGlRmMd;c4ZnHdb`-1|Spn3=(0&b|LDjF}k%=G^D+Ax%c11gqh*M zoO}O0Oqdxi%(?eJ#)O&S!JK>l3rv_9KFqoIzr}=^fnn~w|1(UO83g9u`@hD7nL%Oh zz5fSHm>CS_-ur*Wgqgu%?!EsnOqdx0=HC1N$Ap<7VeY;E0;bFi1#|EHS21N~XqbEN zzlA9?!-To_{`;6RGc1^U?|*_RGsA|t_x_idGBX^Qd+&dTDKo=`x%d9hF=b|WF!$d7 z4W`TtALicsf5eoTfnnag|2IsT83g9t`~Sw2nL%ORz5fhm%nSze?)?`rV`gxeckjQ3 z88bt`ynFv`%$OMx=H2@rV8+Z)Fz?>~6f4zEaF~DZe}*|TL%{rd|7*;d84~8-`#-^)nW13* zz5h$hnHd`9-}}GA9Mtc)_y3GJGsA-U_x?XHXJ*(i|K9&E=FAKS=HL6zVZqFBVg9}U zG8W7X59Z(dZ(za9@L~SF|1K8H3=9kI{g1FCQf-1|Sp zf|wzk($*!-fU-{+n1bGaOiO@4ts7GsA@i_x{INGBZ3_aPNPCB{Rc^1^529STZv( zEWG!Bh9xtDz`}d~*H|($C@j49|9~YkgTcak|F2jwGdL`~_y2_@Gef|_d;kAfGBYGB zy!T(g3e>N<_g}?|nW16fz5fNSVP+6mb?^TR8)k+8!~6dY9GDpzjPL(XaA0P5V0{07hXXT%g30~= za~zl%4w&5kf5L&8!NK(Y{|_K_ruYAgI5IOFFuniZ!jYNbg6aMLK90-`1!njE=QuJm z2$7We=Ea0Ioh?*Hd;VrEFNy#HUpiJ9Sm<^BI2PRtA!Ebsr1 zabjj*u)6=hz=@eb!0P`07AIx~1FQT0XE-r46jaB#T)U&Do&p~3O~{{k0KJMI4e9WKla2b}KzKjXs8@WAQ*{|7G2 z3=Gcq|9^2|W=L?p|6jzFnW4e?{(l2kW(EhB`~M?cnHdaR@BeRcWoA%tyZ?WKD>H+D z`~ClST$vddJnsMJaARip;Bo)Ii5oM+1JC>a6Wo{?E_mJl-{Z#2aKQWi{~d133>$pz z|9|4f%&@@s{(k{?W`+rV_y60tGcz>!-~XTC&dg8{aR2`lcV>o!!2ACXxHB_21mFLE z1w@D5|IgyV%&;N!{(lV*W`=^W`~O2cm>Ckn@Bg0w;z!*7f5d~C;X}mz|1Uh485$z* z|CjJ&W=M#-|3AT#nSmkp{{IpXKlc9r4o_x=1F`r2&+%ktFo?VVe}gA8gFyWK{|`Kw z89v0{|1aRh%utYc|G$G5GsB0(`~O2g{G|K;OT3sF7?SV*pW(&KFd^ms|21CB3y7vD6 zHNMOY4Yl|G9{|bM-v9r=mzhDK?*4xUKV}Aj`uqQF{FoUU>hJ$g0P!2{|8D`&jraeb z@ndFK(0Kp9h(9yKg{J%eZTy)T7Bt`gpX1NW(9m-K{~Qp%_5S}8{>%&q+V1~<;m^$Q zq5b}UkpO0f2OanSy96*ZZ0NlIza)T}fuZaE{{;ce3<6#E|8EIkW=QC||Nlw=Gebbn z{r?Ps%nTQL?*G>bWM&BHz5hQVkeNZC@BaUeKxPJm3HSdW2n4my?*D%i$jmTd^8Nn| zLCg#nCg1-r62#1~VaomgK0%;%)BXPwfhlTc=ch7I@scZ4!C7;L)#{|Jb`>Hhy4q09^yw%q?O z5ys5Wu=W0boiJvG30v>~cL-xhn&~WJff1PkB$;BfN( z|3Bf(3*bT)zLGAsRHka{s?cG&4iNmHYoaqL~>MT)F>0Cz_c-;p+YW zbE26U46fh*&l1DT&~W|!e~B2-c+36&Ix)-)1vl>h4~SuA_;BO?|C$(P27#OR|IdkG zW^lN9|NkD4x|{d^-vRM&-T%)K%giw0*8Tq)vCIq#ckcfWiDhQ^aQFWI1`z+={r^*9 znHdf|xc~nOi2v;Ve~mb1hJa`H|NF!-GZ;L-|Gy!QnZe=t{r^+qm>CM5-~YcNj+vq1 z`ThTU;+Pp2Uf%!z1|4W_y6m}gT`I%|91e)6u|9>N%nStT`{r?gP%nS?O-~aEDz|64W{r&$D3Cs)= zKHUF5BY~OW!H4_**Ca4AeE4wx|A7Q%hK7&#|G!CKW>ENa|35<_Geg0r`~Ni(nHdgz zy8k~Q5j0+N|9?p$GsA+<_y2b!GBY@Qx&MDoA~VB=FZchSNMvS6_;LTgOcFE0g&+6- z8zeC^Jos_{ze^G`gTc@H|09x^861Az|DTh@%&_3+{r?Rh{@?rmcO)@0eE5I=zeF-K z0|Uc@|2oOc3=bF{{0~TGW)NU{@V_USnc;%qga3PynHdy>9{j(M%*+rV^x*%8WM+m2 zp$Gp3Qb6M-5B{s9Ff%X+KlpEv!pxu`{NTS&3NwR)@Pq#eDa;H3!VmtJq%boi2tWAW zk;2SSApGF}oD^n;2H^+)H>5B#Ob~wX|40fm!vf(4|8Jx)GaL|p@c&H;XdLFje}+_M zh6lnA{)?nCGkg$!@Lwa9nSnv%!GD`nW(EO~2mb?7nHdyB9{f*9WoFnQ^5B0@Dl@|c zkq7_RfW$=~{6CY*%+MhE;Qt4Zxafob0%^<)A4DJgH%Mb6VjL&Hi$j=za)*Bp+V-s{|g{-nFs&hfW&1U{AWmKW>AoQ@LwaHnZZH!!GDi* zW`+&25B}$X#N{6RpOVhZU?BJ4|B7^Gh6QpD{$EIEW=N2K@c$1;Ug5!ijSOan289Rz zJu;XX926h?F9GotAN-$^0UG~#@P7k{uk_&mnG9wI2IU9;|70*T7$`sZFOkX2prG>L zze^@FgMjLT{{@-M3=C=y{?Ex|X854?;QtAby!wOxPcoSq4AdX||B=be5TO3xKTj4j z!v^&S|8=sM89t~#`0ta&%wVAL;D1gQGs6PS2mhyJF*7{SeDHro7Bho__JjW?vX~hP zv>*I`k;Tj~LHoh~KOlYD5B|$!Gc!!kdGOyOo0*}(;KBcjY|wboga0$KLE}UZ{-4NZ zW)Lub@c%_NGlPTigZ~^kpmC!I|4nj0?Vtz$6LOdt5=^{zv39GZ=V3_}>5$_kQqyN;QtShcT@L#2znPEZxgZ~!g z%nS~N5B|r1#0ww%uPJ9{SXlVr|AcZ-JLkdwCFRTv21O74Unpm0xKQ-qKSu>K!-tXw z|6MAW877oH_&=k9nc+d%gZ~FW;$;v1U#VbbNGN~s|3?L=J@nu|PbD*hK*fXq4wcLd z3Kb9jhg32%I8;6OKc|wJp`h!*|1*`$3=_H@{C`l%%&?*B!T&Fn%nT2@9{iW6VrE#- z{oub#6*EIZ&x8L3Rm=342mddC=t~d&KdE76Fu45S|Bo7Gh7Fe={O73!)w>V= zE7USGI9z$~-=vnA;lPy#{}VvsS0DT@sbyw(aP`6e86fd%5B{I2WoAgY{^0)?ko?UD z{|)Mx85nLo_#acp%+PS_!T$+$%nSmzAN=1?$IRex`@#Psb<7M4Za?^cqmG&3z?}#G zW$Kw30`5Ne?^DmrkZ||G|AcyGh6nc^{GU+I%ph?8!T&Aw%nS_=9{hh(&&*)(=)r%J z24;qWM-TodG=Szm9{gX@z|3&q@q_Q~U{=WdpKY8$8krdso;~=#2E>2%;QtK}|M`ReJWb3D51v2x@6g1|(D35H z|BNP3J^tYT6p;AK2mg;WF*7W9_2B=PCT0eO*AM=4G&3^f49^&$Kc#9AJ3(pP`MJ;R55s{|Rl(3OWK(kKCnOh{{|$_`S8C)2Qz~M z*TerV9n1^`+z(KZkN$MiBYDA+yx-_y&?@WJun|2@6T3=M7%|9|OaW_S?r@V`zUGebk* z!~ZdT%nTcX9{%s?V`eA_e)xY+A87pk;r|PL%nSx05C1dtGcy!~Jp8ZG&&;qOU}l&Q|M35p3Cs)^5+43n znaIq*ko54s&qUC8{=@$@6G7$i!~YW|g2we9{y#90nL!}q;r|aHe#XQ9GLx7YCS*MP zZ!n3OVL`^j|1Oi583HmN{?7pMGavq+Fo~JrK<2~$8zwO`Fl0Uae_;|cgG1KC{~snX zGZbV!{4X$>nPEZJ!~X`8nHfH0J^UXqnVCT#`{DnB$;=E6*$@9un9R&DA^YL~9g~?E z9%MiK{{Y0#dH7#s3NyonoQMB4rhv-rhyO#SFf%Ne`0)RRDa;HTCO!QB2SiVK_+Mix zGlRp_hyQ)1GBYfg_V9njRM0r|!~aXBg2s;@{y#AlH2(DPKf^R;hJd9H|LaU+W>DDl z@PEuSW`=^}5C2b@#>|j#?&1Ff)0i0?&OiMBVHz{TgYysn%S>lxxNza&|BUI(3<(z> z{$B#3Z#?{eWjZs1z`ck6d1f#(YCoT9{sPF#mpcO^63AHS)h1-^#2NoAO7e+%WP(b2jP$Yo6Kfr2#9#}KV~*F14I0y z|2?yr83d9a{oga2nc+j)qyKMagX+yk|0U)yGfe1s^xtC+sDJzDe+h{0dGvn;i0*y# z|H2$*h6lZm{xi&FW^m|x^j~K#GsA_xNB?8yGBXJDKlmL8#F`t>?!Mex)Z-CUVfBgT)d}fA#^^gBcEMR6h zu>SFXn+41a7uG-iAFzO#;lcXH|5Fw)GbC(y{C~m%W(I+ckNw^5g#k zik z%nS?%AO9~|!pxv>=<)vrOF-)x9{)eHgqfk?@Zhb?2Ao0_W|KC{3%y8h$Cq#KmMPx43y3v|F2jETDS1{|BPkK z3=QWW|6j9=nPJ2E$N$eP1NF}z|9`NInZe+~D^@Tw2wZ>s{|rdojmQ80tYBu?aO3fRnU%~8 z0kzX1xN!gR{}d4Y;PL+{tC$%W9zOoRVihxk!o$b^Ppo2QIPm20{~xQE84R92{;#l_ znPJ1z$Nzm+Gcy!Cd;Gs*H8aD5XOI8SSzElXe0cmnVI4C=z{kh`Th=i%Z20u}{}vGa`SJe; z>zEl9e0}_1W<6*f#pC}r>zNrG7@z#lS=!fHZn6XNIdy}VmZ#FVB z1V}vj&#(!!ZsEy)kxk4D8zi3m*Vx3&a6#h9f16Fr3?C$({14c~%%C9o-85T%B`F{tbU-HR+hRw_j z3er#h>uhFbNRWQ=KVUO6Lxc2_|2dnP84P5e{GYO!nZZH+$^QeJnHdhqKl%R#B(Lz~ zzrYq|h62SW{~fk4GfYr?@;_kC#Up8S8Y z1=J6I@?T^tGlPNZlm8}LnHd69pZpKm%FIxp`s9DfR%V6?s!#q;*~-jtK=sN0EnArx zKBzwVe`PDEo$}=Wm#xeU4r)*Sb8KT~IH30AzsWXch6`#>{(Ec#wO^k6kJ-k|z@Yx* zf5kRXKl;i4Iop^S3e=zc-vLsu{^b81khtcP|2*44{pTnDO}2y9T|D_8v7MQrK z3Xr(glmBzJGczz~Kl#6BJ2OLq_LKh?K=Rs8{y*8y%+R3y`D){}Yfp(oA`D-vgrUpZtHbiguy-OLOM4p08u>;{eRKlxv<8`REv z@_)u|&^Z5-|7UhHGXyw4`Tt`#GXsOmlm9Avm>C${pZxdO!_08N{mK85J(KKZY+pP4}*?#cg{{mcv-;-36(+0V=n5dY-=iv7$C3JFjCUjV5~ zeDePfh)#O)U*iBXgF(uZ{~-sM85mNZ{BJnG%&;N#$^R7~@w6xZFB|}k$3OZ11;kH( z@?YX0GsA)OC;x2@GBYG(Jo%q;kePuY^U41n5S{hp|Bi#q3--W(X*F@;~A*GsA;|C;vMRgZj%){%<(U%)n6ePyVwUVP*&@e)3=E2s1-M@ss}!N0=Ed6hHZ&bA*|Jq2$T`2}hV297>-2-*AMP z;Xuig|5rfrB~SjpIKs?e(D>xP$Wdm735`$wI~-+ZP-uGcKjkPh14Gx7|67hSGi;dj z{Qq$r)c$z#U*!Zd zL&3Ty|1C~1Gbn6$@;?Q{-|*yr#|dVJ2OFRK-*AGNAz{;#{}({~O;7&6IRRSt_~bvw zNoIzC%}@TToMdKD*z)AR%Sq5W$S403PBJqTYCs|5rfr zJD&Xi0@AnR$$ybk%nS@WpZs??#mul^=ac^_rB;{Ir$P1elmAOjGc#Pc z^yL4J)1dM5C;!i!W@Zq${N(=|kp9b0{_~sxji*2PuW*K$q2cnA{~l*Rm%nTRqKKUPT9yI>` ziSY{~ykS`u|V<%Uob)D0uwjzXynZ^5lQX1yKL~ z$^Qixm>D)ad-DIx1!jg1&!7DNaeC3qJ^4T33NyokUr+vT0g3;9^8d;eW`+lUp8Qw2 z%FM9g@00&NSD6_O{C)C2;VLtOz`rN|Tdp!QEco~2|C+1J3=RxW|KGXF%n-o%^gquv zW`+dDr~ehMF*9sndivkz8Z$!x+tdFut}!z-us!|1;~F!=1-7UEpIigA6Q2HOxz5a> z!1wfjz;$MZ2YgTe*IZ|2DByqkf5Uaq`o^dKuUuzlFc5h9{|iW7;OT#f8_Wy>f=~bJ z++b#45PJH*;09QzXD2PA( zUvQI|p+NlU|CXD~3>UuE6QrO1@43aya6tO${{^?086L15` zHfSB>)Bh2-LG6I2|EGZXickMv0P&Tc{^z*^8V`T^KjIEE!vy80|CihWjfX$||KSd3 z9OCJJmb=Uh4^*E1*SO2fz@Yl{zYU01d-^}+E;ECI+SC6PcbORq)SmvI1LCVc{eR#t zGs6Xqr~f(bF*5{cKK*ZSkC`Ds>*@c5d&~?Aw4VO&xW~+JLF?)N4fmKC6ilD~XSmPI zP+zruaceErk^F87%k7MMN#-*BIq;egrG|5NUR=Ix*U-vLr*{`CKY`^*dmmQVj1 zJOGVfJpCW>05snH^nb+z&^-Lp|8pLI)Hm~R%nTD8p8lWkh?!x7!_)sO9x*dq zaD4jz%p+z72j{2%A3Orp&rknHn4|%nS=Wp8j9+1T;_o^#1{nxaZUV51ueHG)KLc;Nf=|CXoB3^uNF}W`+fUPybsyV`fkYe)>P-8K_#6SJN=LKkd z=IQ?nFPIrF#6SK2;RQ2;L&DSlDleHCJ|sN-AM%o!;X>lm|1B?>83K}?{-5y@G*0vM z{}~WJ>*@bLAb!r%|1PhX89wAZ{a^8lnc+e1)BkH;F*79OJ^g>@6*I$y{HOmVUNbWk z6g>U!@|u}Jpy=uUir35x7mA+#U-B9>fB*FVj@Qf#3yPoqfAgA|VM6KC{|s-K85Wd2 z{V(!{nc+a`)BhT8K;zs`{|CHbX82I{^nbw{W(I@mr~encVP+_(e)|6aNWS{%|0^JU z)ldJwc*D%Fq5A3nKW~^B9BQ8aS9#0KkWlmVzr|Z-h6goI|0ldM# zgvO`;PrPGhc+mLt|BrXf3;|6~|I55*W=Lpy`rqI^GsA?Yr~iH4GczzWKmFhEo|)l7 z^V9zu-ZL{8v^@QP=RGsShnA=R89p#GOlW=jU*iKa!-v+V|06yyGX%6f{oer+Z+rTG z#Rq1F3vEyTpZLJcV9@^b|C3@fh%nSzIPygq9WM-Jq{q+BY zkIW1TJx~Ad_{hv~pzrDbFCUp1KJ-8RukwkRp<(LN|1qCH>o}kOulWQTuX_4_%_q=$ z#HatCd}3y}u;l4~mCwu!4$GhZkNM2ZaA5h<{~e#185&kR{lDQeGsA?{PyfFF(d(c7 zm-qsj=YRS?;0rUugw0R?cYI-H*s$a2{{vq@?T4rT-+W>Hm(e%nT3qKmEVsD>K7~{ZId&`O3_|aNz0x2Va>P91cAF|K%$)L&1Tk|2e)f zGc+7{`d{W7GsA)dPyZWy1C2*K{U7p;nZe=U)BhzP{-LM;7kp!8cyQ?H|1;m189p3- z`v1>2(E5O<{{_A?GXxxY`rqU`GsA)-Pyfe!XJ*)NCjIKK(!C2Q$NjlTZI|`N7Pf zaO&y*J3m0<98dpq{A6YbIP>(s35Y)T^ncAyW(I?cPyg@v32L`I{m<}=nPI|%r~gfU zF*AI4`1F6wFJ^`dPoMsu@r#)u;rY}5XMQm=6ufx)|Hm(827y;k|111vW?=a8^#6q4 z%nSuzpZ?$To0(z5zo-Ad{AOk_V0iZ5)C%91{MYfooD|87+4q@bf5jNU|?ZL(0lfO2?Gnm0{v(I zuYlwYp8e-wWMN3KdiLLek%i%d)wBO0j4TWR*3bSIFtRW>*gX3`hmnP0gUz%5dl*?5 z3~ZnMzr)DFFv0QJe*q>Ih6Rq#{;M#tFkEna_TPbth2ewav;QGXEDQ=x&;A!Mu`o0^ zJ^Md}iG^W;)3g68KlR%)%hx`RsoQ zGYi83&u9PVFtadR2z>Vc0y7K4hrnn5pD?p97z920|AU!@AtCtLe+?EEhKAs0|6N#E z7#;*a`=7$X!k`fH?Eegqc=)sbCs|G~n-5D@+BzX~f0!-eE$|3g?=7#LEX z{V!oLbh2cZWv;SLISr`OTpZ)*C%EDlf`s}|18w*1~>a+hQY%B~7sn7lg zu(2>4NPYG{hmD2dLF%*rJ!~ut3(}tb-@(Shup#Z)|1%)@v}gYxu(2>0q(A#Fz|O)D zkpAqy4m%4&L;AD-KI|+E3>nY<*RZoNIAlEgzXl|q`RxB4b{2*O+0Xv-aIi2O$b0tR zhJ%GcAphC_01g(0fc$6wQ#e={67rw@ui#)|C@6ULe+35%!-j%q|4(qRFfbH8`~QT4 zg+Zb4*?$&J7KR6f&;ILhvM>Y`J^LTQ$->}J{Oo@RCkw-d;%EO?aI!EMls^0agOi0p zp#0f?4K5ajfbwVmUAR~n8p@yjPvK%=xKRG=e+L%}gF?l#|7*Bd7#37K`+tRtg+ZY5 z*?$&p7KRCx&;A>5voHu$J^LTQ&B72+_3VEIHw!~T^|Sv=xLFt;R6qNF1SDSb?Ee#x z`ub=8C3sjEE;Ky*AHc)HaG>Sc|2aG?3<<5z{$Jr?VPI%`_MeBBg<(P4v;QuD^0WU-_*fVUCO`XshL44zVal`r0{kot6Q(@-ufos5aA3-_{}%i#3?HUE`yav2 z!k{qq+5a4V76yl@&;B>?voJJFefEC}KMTWxY0v&Y;b&n8nDOkthyV*i!0c!LT?AMd z1m-^bUn0Q5&@lJe{{;dp3=if$`+r1$h2g@yXa7Hd`179qXAxv!V3_~xzl0zQL&5xK z|6M@*1<(Fxfat}~{_hZEVMti~?Ee)(7KRIppZ)&;;xBvlUqOh4L1Fo`{{bL+#k2o4 zLM#jqRy_N^LWqT7!s=)L8H8CF64pHXZy?OV@L=t;{{_M<3<2w&{htF8U-#_)24NP4 z3G1Hyzah-RuwmV^|38FT7!=k&`!6EG!r-v}*?$ue7KVlm&;BQfurM6h@a%ts2n$2P z#%KRGh_EnB*!b-K6%iJO3!9$(XAxy#xUluve-lv_h6mf8{ZA2PVNlrq?0=6a3q!z; zXaDzzvM@C4eD?o|C<{Zuo@f6>#8?;}?0NRzL5ziA!NF($3&dC$7!E!AKSzv(A>q)o z{|Cfa7#fZ}`~O3Xh2g`oXa5z%Sr`OPJp1n<&ce`e^4b3$aTbOPC!hUaBhJF`;pDUb zXT(_;98Nv^|3jRGVZzyG|2-sF7$%&1_P;=ag+bx`v;Q+BSQs{3efIx^1Pg<~wP*jo zNU$&n+<*38Lz0Ez!To3deI!{J6dpeN-yq4taNyyy{|6*l7#2Kw_Wz3{3&Vz|&;F}O zu`n!n@$7$y6br+Im(Tt;NU<;^yngoof)opb!<%RSe@L+~7`%P<-$j~*q2S%K{}s|K z3<4jX{a+!?!jSOk+5aojEDQ!;pZ#Z%VPOdP_Uylj3=6}BZ_ob6fcQV2{qF(se?0rY z1H}LN?EecH7KR5upZyn+WnoD8_3XccEDOVg-_QOR$g(g9{CW0&4v7Ev+5Z!=EDR3+ zp8aQ$V_``6|Lnhk91FvT|Ihxr$gwamFh2jEBFDmTfbseN334n93QW)cFOg$mn85n{ z{}qrp+w=b%@+=Gn?9czp$g?nP;C=o-K%Rx+g4px_4e~4u0pid9Z;)qUn4tIkzl;J4 zLxTSE{}Bo-3`Feo@b|3628g~7o2`Tq?HEDR0K&;Q?0U|~4m{QUnP1r~+? zm*@W#6j>M^xIF)FqR7I);QIW(hawAuf$Q`C86ev2`TrS;EDR2A&;PGcWMODx99&qD6%jpxIh2TqQt_m!2S7u9VHfq2ky`R`zWz6TnKvpe}WPV14Hcd{|A&< z7zARU|G%Qd!cY+V{6C8_3xh)3^ZypgEDQ#5&;R=DD6=qph63?CAn z|DU14!Vr-7{Qn6R7KRIn&;Ne_@spnamr!M4C`fw#Uq_XNK_U71{}>QI`T73>RZ#u# z{Qm+~7KRI{&;Q?01(o~H|G!aXVPHsm{+~gOg~1^0`F{~L76ym3=l?a-SQrA*p8vN| zV_`^0d;UK_4OBlo|DU4-qmX>MRTsvY-D~&|qO`$a(%hL4$=sA@}+JDH<#c26@l_AJAZ7c#!w}{|gNk27$uo z|Nm&PFeH>d|F5IT!VpmL{C|Qb3&VoS=l|zuvM@ZTdj9`}CJTc>-ShtpS}Y6~8lV3+ z(PCi`Xny`bMT>=DLhJMYOF-gn&;LKrVqr*l_x!(rHVXs8=jZ<&v{@J?{D1zxKpT{P zpZ}i%;xoMXe?psup@8wl|1a7s3=bGz{8!LnVPIf-@!v#;g~5R7#s3f;7KQ~(FaEda zurMevzxclfB+mTe{{bBq1_$OB|F7t1@t;MPg<*rxi~lCNEDRTfUi=TyWnnlV z{NjHLh%fx&{|sFgh6lng{;$zxVfY~Y;{O3%76t~97yqy5vM>mUy!ih@mxVz=+N5P9)mMUREygUE~j7J4iU4x%sq`+&qnU;NL}V_|q8`r`itJr)K5 zu^0b0=&>*~h`soKLl2a{Ui|+9qQzhQ*U)ESSRnc0e}X;>!vU!m|EK7)FkFy+@&ATC z3qygzi~lSJEDReIUi_CZU||SQeDPn$fQ8|J;*0+g1}qE?N-zHR7_cyWP{|Yk}27!nd z|5uo?Fc?I>_0t*%fgQ^$*7g(?`OlW-Z|AGYzgTsOs z{~0V<7$%&0@!!Cbg+bxWi~k9hEDRgYzWCo`$->ZZ{>A?TmMjbh&cFD7#gc{L!TA^e zUs$p*d^rE&{~t>h28IhS{tH;KFbG_D@n6M?g+bxMi~kl@EDQ!0Ui|m5VqtK&@Zx`h z6$?Yag%|%ztXLQlF1+~PVa395;KGal8?0CuE?ju=|A-X}!-ESi{@<`-Vfb+2#s4=T z^De&l&tT2M@ZjQ$|2ozz3<8&4{P(eDVOVhK#s3m(7KRI#Ui_b8&BE~E(u@CFK=PMg z{J&z&!r*ZE#s4qXEDQygU;G!bVPTkX`Ne+|8x{tKD=+@X*sw4>xbotE0f>M7#s3{P zEDQnHU;IB~!@`ho{l)(WHY^MquD|#%W6Q!IaO1^)8(S8JfSWJ=_t>&9INW{l|Aj3J z1H*$C|0V2L7#beD`0rxJ!ocwG#s3037KVa{FaA%lV`2F4@WuZFb}S4R9=-Vg#*T$S z;qieZM3OB`7kE-=0PzW~H%e)<1|BMUUaw{x5N2VJP5v`G1KM3&R7Rm;cW=u`qm4e)(U9j0+2cfcDG(H7+a+2HG$GPjF#jn4tag{}vY(h6ma&|K9+K>%9E`2PCfZ z^1p&B3&R1Om;YT{Sr|U(y!@Zx%EBO^`|^K{D+@z{?#urRKzzNI|4+EGFfi!9{Qt$3 zg<*sK%l|TNEDQ?_UjFxRV_{%0eEGk`jfEk>@a6vnZY&HN3}5~~01`KP`Tv0%3xk5u z%l|*zSQs3PUjFBCXJJS%dih_$orQtH9@J!20EX7cUlu3)V0HcX+Wd9I$!$ z|B4q2!vmX_|G$95ZD0P^@n&IoVEgjFgEtEUgWb#jA>J$u26iw1mw2-<2spg_f5e-G zLBZkW{~I82hnN4~c(X7BIKKQZ;sfgczWg8H!@_XD>E-_#A5eSh<^Kgfpmx;D|3`dS z7#=vk{Qts-g@M84<^MlEEDQ-QFaN9fvM?-gd->nTmxY1B{pJ4xUlxV}_m}^t__8oO z@Ot_G2#D|f^8XuOP`UZ?zl0wP!-k-j|6Tk*<>kx&5q>NT3c)Y`SAh7TFaNLbV_`@L zd-?x~9}B~Qu$TWi{8<<-guVPP*fEB02T&= z_?Q3p1h6m^B)g`wfg%l{H#EDRIAy!@{d z#=@}S%gg@`VJr*+Utj)D31eXh`1di9|IdKrf4uz95YED2@ayG& zgK!pxhTkv$r-ZXGT=@I)|CDeRh6n#%{yz}T!tmkW%l}uxSr{1pzx@9Kq>k~`f0+mt zh6#+X{u@NFFl=Cb^*i?4n7KRV(um1mtU}13JeD$9vl7*pw^VNTyNEU_-oUi^nM6xhE;C%Hz zB$9(&1yAaU+j|93>PFeLE4`u_tY&-?1X zMidLf2i{lz1EN?M76`ohUjgC^zWTo+iiIIS=+*x{Q7jAvLa+Ych+<(-5PtQaCz^$! z!RFO}n`jmW2HRKvb3lCCSN|78voIX6ef57!G$`M``hOytg+amY)&Dmjal2RlMPgVO z8th;FcZgwOaBzI}zaa)RKK1JVju;jO0jF30Z^VGcr(XSk6T`w_;PmQ0Lo5qJfYYo0 z3b8B<51d~84~S)9nBem2e+`Isef57wEDOU1*H`~<#Ii6PaDDavO)RK?^Xk7y91BB$ z`>X#BaV!iU++Y3Ah+|<`;PLAJnm87Q4IZ!lABbaNxZv^X|D8A%1_rNJ|83$~7&dsl z`X3O_!f?Us)&HD$7KRUAul{#{#JykrKLQf>dG-HBJPQMZ@2mem;#n9Bd|&Ed-;xL#XM6R32}oVgtN#~3 zbnvVHe-c?30zzN?w@6}PC2S;XuTz|1*+U7z|=x{XYQ`kA3z34u~K3>OW61 zsGNB9Um=-=VM5%i|0c;S3>V^F{SQfIVNi&F^}ivRg&`o})&C92EDQpPum0aj29+bP z{3&VocSN~;F zSr`P;U;Xz;WnpN@c=f*oL}$JFzb2K1!6EzA|0}613=48z{pU$zVKB&j_1`Crh2cZ) ztN$fwpz*a={}+J7i(mb}kjBE`Q1eXsrpWU??g^uPMwlgYv`q5swYHJL072l`+AKaVHfY3xmRxSN~hGSQrwfy!yW+i-o~q&a3|yK=k}q{~5AD<4dpp zD`c}UESUf5ze6?)gTlgB|0}Xt7%nV)^?yk=3&V#+ul`>EsayQ&|DS9Y27x87{+r~m zFgPrE_1`0hg<->zSN{ugSQsuWdG&un4huuU>R0~{fW%k7`u`w@g@IwstN#qSEDQl_ zUj5g|Wnoyb=GA|nTo#50YhL}&$z@>>So`XKPc92X!rE8=x8$-gG^~B~|3oee!-lo5 z{@($qTl?z&hg=p0g>|p~i{!B|G^~5|-v&f)c=bOgkA>mEhFAZmw2UR}`@@T)6$}|CJ&Z28Fw?{__;GFf`nI_1~eG zg@NJztN$6rEDRIwzxqF+n1$iM{a62&6tgfmJb3m0NHGh;h6k_ye<=plN3Z@Xl&~-a zJbd-vqy*Fse)T`4goPpD@vHw6N>~^g9>4m(q=bcG!Q)r|cYx#{zxscsgoVN2$*ccg zKDP>_uc=PK29gz6D zSN{ddK>hVs|4qtR7#iNa`X5rp!Z6{(tN&BVSQr+3c=dlp8K{1H_5Vg03&V#mum1Ct zvoJ7xef3|V98_Pu`tMQB!XWVN)&Gie76ylJul~;fiT`-@|42Ct!+{^K{=WdJ|M}`a zPX!A@!0%W8Z7Nt89{hgwzo3GJ!QkJk|8pup_0_BYCqVN5U;Tek!NQ=x@cO?%C8)l7 z{okRIg@J+X_5X}Y7KR1fum8`eWMTNg{rdj_kht{g{~sz@7zCtW|7WRUVNj5M{a>Pr zg`q(D^?!#d7KQ`Tum5LMu`o=KfBk<3h_CSa|B)&dh7XFb|GxpzO0WORRD=4}umAg0 zgWB7#|0h(lFig;T{lBD|g<*l#>;E0qEDQ!ZumA6;W?@LsdHw%RH4DQB-PiwlYFHQ) z^j`lr0MUl8|0mS2Fl;b>{eMCY3&RA<*Z&XHurNHZeEt7L4GTkp_3Qr{wJZz^tY824 zsAXX=uzCGIqn3q1!0z?`DYYyN1$M9h@2F*Am|*w%{}~Y9{`G%>I#4_F_5Xl67KR3g z*Z*tkSQsWay#7C-4%E(k{r?C^-0}7Q7j-NQ2OMAj7pMo-XRrUO)Uz-YIKBSwQxBS7 zdHp}9o`u1{<@NtL^(+huuCM=JsApj~;QsnQM*|DP0k7BpEkLyI>;EYYEDRrfU;poD zU||sOfBk<4NId%We}P68hJe`D|1BC>7!Jg}{-4sw!cdU#`u~(h7KRH6umA69WMNQ9 zeEt7PBMZZX z5Wo2Ke}!fih6%;5|9dpEFgz%J{lB1@g~6cY_5T^oEDQ%qUjIMQ%)(Gm`uhJ55MB2A zzfKFNTz>sOqJ@Paq5Sp#iWU|IhRWCfH?*)YI8?v>{{SRk|N6f`D+|Mi`q%#*T3Hwv z8eaboX=Py$Xn6fUqm_kWL(}X38(LWy9yGoFf2Ea$!J+x}{|~J!3=Pe%|4X#7Fa)%{ z{-4pt!my#^_5Ud#y7Tq_Cv7YY0$s2F^R%-tB=o%gZ`01g@Sykg|BQAP28O=Z|7+S= z7#jLs|6kG0!f>JQ_5TYX@&4EUKeV$j81%pXFVF!h=U@M~=wM-BnDF|4Mh6Q+z=YTT zCv>ndY?%D||A7t`h6nRr|Nj8u&wu@2qmzY!VZrPF0i7%i3zoh9-vHvTc>RA*CkunY zir4=ibh0octa$yOrHh4O!iv}bHM&?B4y<_n-=~X(;lqm8{|mZU7!+2%{y(LQg`r^O z>;HQ|@+)8ef6~Rm;IR7jf01q$hJv-P|2u%_EwBGqbh9vQ*z)@Sf^HUu16yAI-_p&( z@L|jA|5v(M7!0<({;$!)!mwc5>;FDIEDQxZU;nS^VPSCC_4@yg9u|g#-LL=u>0x1b zu>19Yjb0Xp4SQbyPw8c0NZ9-O|BPN127!IA|DWh(VJO)5`u`V@{Jz)!W%^hc4(xyZ zKckO@LEyma|5N%{7&aVu{r^NC3&VqBum4N*voLHp{`$WUh(7iD|D1jn28Oe*|DWgw zmEW)b|L6ym+pqr{OkiPnaP9T~gb6GR3^!i??*Y+wUjN@QfrTO9&g=hAK>P=<|BFmy zVR-Q1_5Xm0EDR10U;nR}2pUg#{eQ(o7KRH?UjM%`k%fWb_3QsElUNuoyng*(ViF5O z!28$#Jtna*9C-iwe-4QL@cRFhNh}N-KED2cU=j-h!>8B(A53Cl`0)Ale~HPU_WtYt z4wFIc`q%$cCbKXoe0}|Y!ekbP3146T-vgq*z5f4VG7H0n@2~%hOkrX8@Z5+{9gj172f>60iqS({O6bj z8vlIrUt<;vLxbX*{~ohg7$zva`Cl@Ng~37j&Hoj%SQr>o-u%BYi-qBV%A5ZjvsoAx zsJ{7cF`I=ULF3K;jM*#<8?@g1p8*oree?eYNL=sDf1Wuk36`y1b6FS^OyB$unajf9 zVEX2N$y^qO1Ez2O&zQ@?@WK4e{|j?L<@=leEb~|x4p_bUZ!!>MH^5*}7 zc`OV9wr~D#na9EqVE5+#lX)x*3+&(g7nsk&@WA2Ce+v-p_~w7ge9-v7oBu07wDX() zALfI~={NsP7O*fJa((l^VF3%n1=lzKrz~J$FmQYG{{V>ge)Ips0v3h_?>GMi7P2sW z@P6}O1w{M2`R}ukg<*s5oBuTnSr`uZz4^alAq#_p|C|387J}OQZ~ikZVqw@2@aDhG zA{K@Pfp7k&EMj3u2zv8>0Z2Uf&HoD^I^oU#KZ{rxE~LHrudx_3PyOb9$YK_T1sQMt zw=4$DJG}Y7WHAfFhm1G>Pb_9(P{@4q|HWb!hJwsD|2dYhFc@UL`ERgvEMZ|-koV^QpCzFA>o@;(ma;HR$ba+SVJQp4 zhWt1GLzc2IEGT^Qzh^0E-ulh|1xr~N42s_TKeCjCfuZ=#|2IoP^Ve_wb1VbZ7jOO> zEMsB#Q2ge<%Q6-Qg_1Y_BbKo+1eCn_pR|Au8O3>!+`{GS3+SMuin3XrNo$_fYepL`F~*r3&V!$H~&AZU}5-B{pLT< zN)`r&nm7LyR&sv`M(1s-|*)D zla(wC35{?53#?*cXlQ)%Ut<+$ochgwn^i0f3mV`24_L**u%YqI|CCjr`I|TYD^{^E zJZOCLzh@N-!-vK<{}-%cVGw9~^MA`K76yZ+H~&wpVqpkqdh`FzDi(%>rZ@jTfb=)L z`OmVNh2cZfoBt}SLH(UK|2zlC`7f{$ z)DL{~-)18VL&Kyu|6?|?Fg%$2=6}mZ7KRU#-~6Akk%fU_%A5adHiG(tZ~kA|$ilE; z%A5Z`HiFhKy!o%NiG`tH+ME9&n^+h&OndXcViOC4z>GKlS8QTom@wnb{|g}T8E^hS z*~G$NF!RlSp3N)_A7;M!Z?Kt#VZy98|4TNrFeuD^^MB4}76ymeZ~pJt%)(GG`_2C| zn^_nR%zpF#1BgH8&3~0GEDQ{D-~12Q!onah@6G>)Ei4QM^WOZQvxS9W!n`;Ck8ELK zSTOI+{~KFC{nI!9S+=q;G|YeVUt%i@!-fTK{<~~tVGvmK=6}Uj&^m}W{}*g!VPIJD z=KqtBb{2*WtKa;8u$_fLV9lHVJUc+^ zC*J%w*}=kaV9lHV5j$8I0@l9yU$cXSfnnX7|4VkTFnn15=KqTwEDQ@ay!kJ%lZ8QG zH;dHM>|C8n(are`Oa7!-O4g{&VbRVfe7)&3~QUEDQlV z-~12Q&BDO2>&^d?-7E|jcD?z(U^fdx!R|NzPk`k2y!roSHw%Nn-Z%dh_OLK~*!$+c z&mI;Ahl6ka&)LJm5OCz4<@q2n)l3r*Hn>Il{ug@Z!yXj-xCL2VT7S zZ*r7{VZ*C8|6`7_Fa*4P^S|XN3q!%%H~*J_CJzW<17pUpWplsInKi1@cGUElH)841wY>WUviv~H_~oMd4T;C%c4$VnCk2JW~2 zMNY9WY~X(T-{BOfJ^S{5$0-(u1AK4)&pE}yV8H+O|AA913>Wy{{(o_bh2ep~+y4Tm zSr`}u-~Kl^4Qju>{hx4}h2enE+y4!xSr`n2-~L~6nuQ@j`0f8Ar&$;-h`jy(1*Bf| z?SGLoEDQyrZ~xnzVPTjc_4a?u85V{BxwrqXoB_?pz5TCpmWAPf_S^pi?f)wvzU|xpFD`(_9p3)`bAg4S!S3yUm5VG4 zAMD=#_qhlfAAkG52E=!M`+vg|`(NM^3&VndxBqQGbl}_n4VPFL zHUz%?Kjji=ocQhk6_-HkFyH<^afyXtLeSg)Z!Uq>U%vgXbD4#~A>{43~&GMxB^;_`S$;pE1-2aZ~tptWnuV``u4xgRnYpIxBnBavM?;j zc>BNSDhmTc=G*@pK;oHi|6jPu!Vr-8_WzTsEDQ~qZ~ynscf`EUOpxX!|0Q1JHuo9iqL z9}3?7m$<>gu%Ynnf0r993o?#2Uvm?*e)H}B z3pZI97L>pJ|KTPJ!-R^r{}pbrFf>%Y{U30Ph2cTv+y5oESQr$l-u~~n#loh1px zw^$eqs^9*p9>4FS*OYP|)}G{|u1)gtz}s++|^yFyZb0H+NYW zE=+j)U*H}KL&2oC|4r_J#>L{q6rX_gEMv%z69&&OH_egSl`2 zbKGZPSTOhPf0O$x3<~q!{!ak$=e_+u;XVt)g?VrPZ@ACGU@-sf|10-d7&gp*`=8+f zXg$Z<{~8Zi7#J45{U7syg+XD_+y4y@SQr8pzx}`D0Skk{%D4ZoJYZqiup_P@?! z76yfVZ~w z`+v$)76yS2Z~yOk%EG|#@$LUFPgxioKEC}g@C>w$>+S!5XQ1(jxBnZSu`meye*1p| zi2wWT{~I9wpSS-xp0hAa`1AI^!E;bK|Mq{xa~6h%zi{Rqy^AykcRv zp!n{8#48pC2BmlZD_*fM7%08_KjRe(LxR$~|2tlR#u?uIzwwHN;egV+|36-_FnmyY z_g~^Q3xk64yZ;uiSr`gb-~G>c&B73%{qFya*DMSP+VB3a0f}qB`+wjy3&R5KcmE%} zW?^X1dH0{=4GY5qop=9r-hjr3-~A7G16o({?tjS}&^W`p|0~|GFibFd_x}!vZ}jf} zpEoQF3C8dKtGs1lIAHwlf5=-Fh6~2;{%5>pVK6X#_kY4$(D?1U{|DZ(Fl=yo_x}b+ zo%6f@Z$Rpt-~DHJ$HGwH^6tOLI~E29*LVLN-ht*L-~CT{$HEZc_U`|Lcc66y@BVKA z(Vp-AKY7Q(VBq=gKg)X-h6K-d|5e_zFf8zV_uu6`3&R87cmE6CgT{Z~{cm~C!ocA7 z?*EMUEDQpE@BXiO&%&VK_wN6J_bdzse((NYc@J9O_3r`fv6c8Qy?tjlm7KVVZcmH>MWMTLa_U`|kkDz(IcmH`lu`noP zzx(gu zh2cTXngly=Nk({K)OY_2zOyh0On>+Pz;_mghUxGAzxmF> zuwcf!|1v*V7$(eo_uu6QsC;|(zvKsKJo(-Kjvp)x4GZ7>-|+*~pL+M7<0lKlgQf5O z$NXerSg`ut|202Z7z#GO`+w&rs62Z2pW_z`1H-m={|$bD%B6SzLw>O^T-f&Rf5k5r zh6CH*{a^5lg+XD*yZ;A%u`n3yc=!LxFVH&hcmKcq0+n0u{;T|EVF=j$?tjQ{P=Dp! z|BT-(3=?+0`(N{$g<-?)cmF5+2K7_k{XYOwcl6!=7r$8;J{*1b{|`vrv3LI^{;)7K z9Dn!U;SURg!-;qQdqDKbcmEIkVPQCM^41-fiv&^NBm`BXgKrkf5~4K28FZl{%`rq!eDUr-TxCH`E&37zxm6;@ZkKr{}TT| z>+RnCH~7cGFyX?x|1SSn7z8f9`ycU-g~8y`yZ;mZu`ncDe)s>tKNf}sSKj@90}{XX z?!Ux;76yeI@BVxIXJJ@y^WFc7|11m+x8MC=0iy4``+wy>sN8+`pM`;y!QlS8{}K$W z3=Q|+{nue&We9li?tcseD}%zLcmF#WSQ!!?z5Bn0ft7*b@w@+57+4u5Jbw3|g^`sZ z;orOeCXB2M4{|rV}h6B>?|F2y{{I1xy!8A3R~T6tK1jd+ z|ALW~K|tpH|38eZ3<@&u{|hj&GC0V*|8Ky=%FrP5{(lG)E5ibr_y04PSQ$3Ry#HUr z#L93$=KcQ(OsotKWZwT@0#Yyg{{IOkR)zrC_y6xOu`(pczW@J$iIt&1_WgerW>$s< z+4uh?m{}P%$iDw?!OY6QAou=%3^OZ(f!zE54a}?z0dnvEPhngYx_TPe6Q?_y0NASQ#2r-v2jYV`X@t^8SAa8!Ll@>ihpKY^)3ks_*~L zU}I%ip!)v*4mMVX5329~-(h2A5Kw>rpM#y1p+Nope+zb2h65V!|7WnXG6-nB|38DB zm0^R{`~L^nSs56#-~WHZ&dM-B`~80r4pxQ+o%jD8I9M4r=)C`*z`@Fpp!@!R14vx= z{r?3ZaozX-w{WmBJkWjr{{)Dy_x}GE4pxQ(dhh>paI!Ky(0l)1hLe>+LI3@K15Q>3 z2gCROV?cbP_x~qwvNBvSdjEe1Co2Pk@%#TbK=Q`#|Nr4+Wtd?6{=W(rE5ifh_y0Y( zSQ!jV-v2M)Vr6JBdH;U~7c0XB)A#?6aIrE3n7{x3fs2))z~cRX8E#gF28;Lq4Y*ku z7%boaj{xzl-v4jlW@QMle*b?7H!H&i>-YapaI-Reuzmmk2RAFj1iSbDWq4Q_80_Ew zci>@VNU(qZKZA#rVS&T@{}Xsv83Y{P|K9_mo!URH(&F7N+u;bmp`;PU?e30_tP2G{rh?|}HO@Ba(% zu`&d>zyBY=$I2k!`TlmEl0(`~NNi ztPBM~@BilrurfRddjEfh04sw)*!%xS1Xvju!r%Yr5M*Uo5b^%Mi6AROLDc*IDT1sF z2cq8pZxLi=xDfOH{~AG728P)8|1Su#GC0J&|Nldfm7yW-{eKA|RtACi_y28#SQ#7= z-v4hAVr7_+@c#cAAy$S53Ge^k5MpI$NPPcaM3|MqAnE;o2Vqu*hNSoZQ-oO=E+oDG z-y_V*@FDsA|0BYz3=>k{|NkP)%J3ld{eKY=R)zy<@Basgures5zyDt&!pb0!`TqX~ z5mtr|neYGK5MgBq$a?>uMU<7{LH7IqCZeni4tekYmx!`5Ovroxe~Kt8LqY!g{|7`_ z84l#X|NlaimElAF`~N&*tPBhV@Bb@^u`+BZc>mu+jFn+Q$@~8uVyp}XrSJc55MyPS zQ2PG=ACP?M`~L#stPBgv-v4(HXJrVeeE+{doRwii<@^70#90{*RKEYeL7bK0LFN1Z z7sOc^7^>d?e*%)PdjFqCf|a46=KX&Q308&$weSC@NU$<6)W82fL4uWGL;d^zXF&X> z_y7M$ureq#z5g#G$;$Ac>HU8nNmd4i=J)>-Bv~00n&1B~kz{3XXny~{Lz0ytq51v) zIg+dl4bAWWZ;)hVIMDL`{|!l2h7GOn|8q#OGF)hV|6fLmmEl9{`~L<~tPBEe@Bh0< zu`(F6z5gEpqTAp9Z;@hUSkV6d{|YHq28GV||F1}~G92i9|DQpcmBFC<{eKH-R)&J^ z_x~fLSs4~|zyDt$&C2kg`~CkJAb!vL|4*b@85nxs{}+&9Wq8p0{=b6^E5nE0_y0p= zSQ$3-z5hP}#P5Iqe~Sz&L&Ajj|8K~!GEA88{{IgdR)zx;-v5`7Wo0m!`2N3+EGt96 z#P|OlWLX&sCcgh4BFoCqF!BBW3|Ur&2@~J{uaRYCSTOPZ{|U0J3%-o|WOkl=uH*ft6vxwD&7u|NldQmEpkj_y2hmSs5NofB#=Wk(GgA#{2&! zimVI@Gv5FAP-JD;FysCI0!3Da4>R8XZvlzVeE)w1NPOn||5p@Q87|Cx|Njd}e&+lC z97?PV1+(7&H&9|_STO7T{}3fs28G%0|5qrnG6>9l|9=UHKllCr9ZIYW26Ny4KcmFT z;4t_7{})QE3;}cB|7THVW!NzH{eJ^xRtAH4@Bh0fvobWyd;dQ|nU%p|{`>ze%B&0t z^WXoUq0Gv#VE+662b5VE9xQnO{{u*T;rss*Dy$3*3*Y~@P+?`5u<-qV9~D*xhDGoH zmw?0afHJJeVi1XjQQzXT+|`u+a{Ao*1i8fMV*zQVcq-xd(>GO zF06b1|AIOzgTwmw|384l*T4TSpux(Zu;KlG6Ae}dhYj!l2WYS|By4#9zd(bPVZ(;^ z|64Rz83H!G|GzJl27a(;z-v3w7Vr2-}@&3Pw7AwPq z9q<2pXt6RF?0o-!iWV!whF$OfKLOEu-v1ZSW@RYY|Ng&&HY>x2{qO%*XtOc|9C-hK zjy5ZU!J+s6PiV6;BpiPKUqpwMA>qjT{~9{13>%KT|8Jwi%3yHx{r?;tR)z&f-~XSZ z!^+Tb?EU{UI;;#6j=lf?07M^u|Nn~)D+9xc_x~kySs5Hoy#H^Z%gXTK)cgM(ApYt1 z|JUfUGBlid|NoCJE5nAf@BjPgu`&ppd;h;ckCh?e-24Ai^jH}b&cFYEM30rB;Qagl zFZ5U$9-M#wUqqjk!QsOD|2F!p3=1y2|DU4I%D`~({r?_)R)&I$@BeSnXJvSB@%{fh z`m78Am)`$pF<@mVxcvUVh5;)>!j<>`BMev>E?jy4zrlc&VZ+t;|CboBGALYo|No2u zE5n3q@Be=>U}X@v{{Fv=AuGd#>+k=&7_u@5+<5;#2gJYm{{I3)R)!5X-~ZoY$jT6K z>;3;HApWiQ|9=>=G9=u7|KG-lmEpqO_y0?bSQ!r7d;fn0h<@n%?h6yXfhEMPR*O;&} zJoxnf{{$0O28Pe?|1U9NWia^s{{IdWR)z_m-~Yd3!pd;q^ZWmQOjsE{e1895z?7B2 z;LH2}CZ?2@&E7tpD|-)P+s#DbN9f%n7z2^Opj7kEGXUt___uz>Hw{}Ui}{2%^5v0!CT5cu$) z!IG8Xfxw6VGM20i3j{y>x3FYoND%t)Kg5!i!9e)K{{l-^h7ZCY{`Xk2G8_>3@PCCR zE5iiQ5C4yV)QNrg|G<)!K|%b(|34se#6SF(uwrFcAo1b9i4`kDg5-z)0amOG3Q`~b z=UA~aOpyNYe})yPzwzP!6)RQ-2AL24Us$m+1ju~&FJjHgpdkC+V#CT{p!MNDk1Z?10__j~9c)<{4rqV)A7abO@Id>+{|sAJ1_qrE|7&bn84Pqj z{GVXU%8;P*;r|klxbBDlJ8W4Q1av?AKV!?vprHHV{{xVI-4Fi->{uBb^gjG|uw!NT zp!eZ_h#e~fgZ_vA8Frv{_lN&AAlm4||21~33J647Q z;}8FJ>{%HSOg{XNv1esCVDjOA1Bf>L@PCaxD}#gChyNGsSs5-^eE84cz{=2I`Qg8b z11rM;n-Bj}99S71*nIe3;lRqEVEf_!5|F&@hyPa`SQ!%RKK%dVz{)Ve?!$i_M^=Uf zb|3ybID*>SAO06OvN9ZS`0#&;BdDGI;r|gwR)!6ZAO62_WMxQj`tV=EiIri2(}({S zPOJbabjgKaQX0mffFl3fXj#fTR^nyhyN1JtPBaRAO7n&vodUO{qWz%nUz7n z?Zf{9XI6#>?jQcQfW$pM{9oVRe}*e714F=v|2te+84LnG{J-JK z%8(H7;r|a;R)z@yAO1_Yu`*l;`0(Gtjg`S6?8E;aH&%uN;UE6*0P!O}{C@(XBR~8X zac5;ni23l}#hsO*Am+pW2zOS74KW}7*SNDXG$efZf5x4a;X}fQ|3BPW85~kR{15P8 zWl%`_@V~)>mElABhyNEmSQ!j5KK%dV!OBpO@!`LQCo98(j1T`kJXskYWPbQx;R$MA zfB3(^la)as=fnRCo~#T8IUoK%@nmJVkn`cch!-ovgPaflHN03E4&;9LAK=Bxz>xRh ze~A|>gF@bi{~cbe3=8r;{NLck%HWXy;r|_we8GqREZ(dP2MRv?H}Ga{C@*d-}T|YjSr}O_~Cz#4=cll$shjj@nK~! znD*iS7avvzf$1OqEBLZ91kCvGKfsrjL1E^H{|&yZ3=?L4_vsm0`ic5C3=gu`*m(_~HKzKUM~TMIZkE z@MC3YSoGn)fxL@LwX7m0`o(5C2U{SW_n!dMv?9(?$(6UNGr@ZiILpD60c<}JU z{{>;J3=WS!{J#>$%AoM%!+(ZwRtAOVAO1&#vobV1|M0&doRwk2^AGRH5v&Xs-hB995y8sv;LV5sJrS%71#dt6UlGB| zFyZZo|9c`>84TWi`2PgNfA`@(Pb4ct!lw`aEh1SN1U`TGUlPg6pz!&_|Bgsj28Yid z{?Ca7)u$i+9{|aJ`SAZiBrC&%uOI#!M6oh7{QU60Ac~b?!Osu>TcTJQ4*dM^e+G!p z{PF*bC{Q`^@xMbfsGRutKO~x!p&|6+|0U6^3>(5e{=X8<$`BC#@&BJ_R)&P|kN*W? zSQ!e!KmJ#VVP*Ib{_($03@d{|)W`odF{}&^qCWm#6T`}|A^PM0A0U3h$Nv_wtPBN7 zAOCm6vN8zdef%#H2kOs${9h2q${X{~r=r84h%R{Lhla%5b6k<9~@HRtABdkN+K#SQ!F(KK{>00`(_9 z{-2V>%CMmKaS{4@hBUn6UKY{|zau3K&_`e{XmBHc2$NyK- zSs5N2|M;IJgOx$y#K-?S8LSKmCqDiU$zWyJaN^_t3Xu58kN;O>urfS2{qg^c3|5AK zGavtpWU?|aoc;LUC6kq*;q1r%C7G-Y56*u4KO>Ws;lPED|6gRXG6Y=w_@5_>l|kUr z$Nx52tPBh{KK{?iVr3|}@$vs05dY@K{}-}Y86MpJ`2SB9C|`d3Z3{wLk=rL zz>AOn*W|D=eE9b9|D7CGh6_JF{ujw*WeE8F@qb7zE5nCBAOCmcvNAaQ{rG=FE-S-? zzaRhK$OVn>e*Djq$I7sP;nRPYJXVGT#!vq%@>m%Zm_GeqlgG;Nfa%l!2YIXv8<;=+ z7s+R3Sit(}ze7GN!v@w*|3mUw86L2H`d0m+Me`Y%ufYBzrRZ&Sp|@Ids_|C}OLh62e?|MwKJGJKHy z^#4T>D?@_Rr~e|wtPB&RKK-{S28|nk`kztE%5Xs8)BhR8tPBb&pZ=dHW@TW|`1GHn zgq1-+^HSjZgm#N>~{jG(P=zDFL3=~fD}#dGr~flR>hwPS-%$!0cm4GLK`AT41^rL|MaoziKInh? zuTjRzU|{g+e?%E8LxI7k|21W-3HnWHR)z$_PyY?dSs5l6e){iH z&dRXC@YDZf z!SvJrgbG%M2D4B9XH>8<7?^+h{{Y0d`1GHrl9l0t)u;anm8=X8tUmoOsbpnfu>SOa zN+m192m4R|k5sZU7&v_T|D=+Y!NK{{f0-&)h6d+P{~fAW87??~`kzw8%HZJg>Hmx> zQ2X!G|20*t3PpD>PxZwKf ze+fw5_0#_j5Z~?7|1BWC+o%6mKHiy$yw|7y47IEb2EL#E>(sI`2n2lk zA5qK7;1KZXe?=`TLqWi&|1)Y?85RV5`oE)=mEl9cr~eOXLF2Wb{xj6EG9(0k`ma#O z%1{va>Ay)GD+5FDr~fG+e(RA~ILO=bF z0MTKe{!gf9Wq1(w>Hm^?P(AbM{{;{~{L}wG^{fmHk)QqtG_W#Ui2U?FrGb@UL*l3Z zQyM_yv!DL&X<%hYNc!~uP6I1LL-MEp9F43D3~8VKn>4aA7^HprAJPaKm;Lm=q>+{3 zLE5MPQyN(rHl%<0e*`3+{^|dXMplM^j8FgnG_o=@WPJKB)5OZKq5RYTkS11!go;o9 z7c{XlC{%s=f1-(%VM5iX{~wxI84RjF{g-KGWq45i>Ay!aD?>rer~d`btPC4!KK*ZL zW@S*Q{q%oDGb=+t?Wg~HnnB~KpZ-5+W@TWg`}Ciqg_R+o{?mVx7SOorr~ef#tPBV0 zKmG4%VPz0#`1F5E3oC;{0o7;(DUj4gbr4Q4LzU!ujycAxX|AyuME5m`lPycf|Ss4QQKmDK6$;#j`>C^u+ouKj2PyboESQ!>f{`B9Yiy+!rhWRqr;C+AVfv^4FSj9|0aE)allXi8$kS(pZ>4tV`WHK`RV_OK30Z;m7o6K0rA&< z`p?kM$}nN=r~eB5tPCI4e){jx&&r^%?$iH_epZHrb)WusfaKSG`o97szTwmVEB&kt z0UJL3{{j-<@aezI1XhLv8$SKFnZU}xu<_IXlnJa11{**9Z<)Z#@L=Po|9d8|G6-z? z^#9HTR)z_iKK`foFZl|f+Nr~d&{SQ!-defpm=g_R*;->3gAQ&<@o z_J8`n1*C5Or~hxJurf?I@aezAR8|IqBcJ|zOa--PKK)Oa%F1xz$fy4$Q&|}jj(+;z zF_o2p;n=7DbEdK~JUI60{|1n{sCLI6t|IJiZh65)*{g;`> z%D`~?)Bg|iyOlM_Cxbx}%43PYtPyaVeXJy!M z=hOcq(^(lD?tc1z10;X<)BiUh`MaO~3(NqugFgLtn8C`x@bJ_Bj2WQz&!_)2GguiK z9)9{iVFoM1g@>R1Zve?Z`t<(@Nc_>K{|`Xok3RkX1JeKO(|?tjtPB%=fBGLXla)b$ z`Sbq;Ae!y-{|hr&85XdA{?9TCH175Jzs)SrIL+t(IkQ0HDxd!^m<5`*{QUpTELMgI zCZGQ^%m&q$pZ`nD292|P{%=?sAR>274)MEn^iW zkWP?(7X}7~isxtl3xEWm7^FXjfq_9m{M`Q|ATdWifi@;*UN+|*=4O_1E*^FcM{WiN z1|0?lh86|}h7;oF{#!FKFfh1+)Oql-dG<5+vGlU`ur;$YFJc6#_W-E}xoHan1H%o; zbN{75=EBsw@vw71-F$_B{1>Ra7+k+IFB?=p$PXfn5cBmx@(c_NATbR_28J(^=l+B2 z011P{Y#13BK1iPX4>kwtmjFfvhCh<${)d1R!Tjvl%p4E$feW`Ei1OkN20IoMMh%P% z3_4Qh{ujg52k^2v^)S0MvoL`bJ92~LVg(}uLyOe8|MehsU_ZmclF1WfrVls7ofjAx z816`&`_Bnd2X)gEkbk7k{l5zmgXwkZW%lY}X=Y_=1!;HZt^hj;93LV~3=AF8=l*X4 zsfYQ&1r#5yy{xW1Y_84hOfx~c9J#^jU6>dcBxHzFZ@|F7P{PE(utMhC|2B~MaQE~v zyY{lU_OQA(voVE(O!wgSg}4c%X9W`j1B>jr|9v1mFgH0N>q!IYafRtIVPIgm!^FUl zAbalrbVgXZaz;&8!r*k}!p#&3(F;vKBFqd7JD!~VFATDahfScFy^X1dt(UcrrJos; zUQL)87*@!g`+or>4|6{_T{9Je407Qv0#SaT^s2$YzyP{R)kFT=e^5GS$O5HrZ(cU1 zUS{_m7T0FhN*;C&m&3=-oCU}81ZD@U|I7VlA@|6I76oWbsgLx#$^|BRq?=L?E&XI?gN{_zGCXr9gNOnZ6QIlMuUe(pR2I4nC@85mqt z&;6eUG6(EVkX!ngJ$hNd;a&?0Ojk&_Zvj=^s^|XS0I7wgKc{|X*FF~4URHNdk;$|N z8m}AJi|9@+lRf)1B+E(;3HOJnS59+)Qpfm z3=G%q<2K8NgMp#IfH<=BkF{{F$x6CA$~IA5S!i>4Allf#HYAx&JlD=J|r^J5Y9Q zW@q{fvfGV25Jb6igHs(SzCdM)11AH+>w8FHgk(0ztqGhA3^Hct{+|QICoH|VfYPr^ zGb^~ta^r?ncaGek^fiH#fnkr?x&PNe>S1Zqv6-1E9b|a`Hxt+qj@&j33=DfX85j!8 z&;3sWxf@o_!0SX%VmuDg;>q z6faPCg3{C$ZU%-7SG2kxmZq4ZL0Vk7y&&a~0|NuY6K)2E9j@p8yMfx*FgxJk;?m5{ zGz+B1jhm?sL_2XOfG7`crX~>W$gKb>hjBQ?Y-VKwSF%prAUh;@85oWP;IU&dvK>y`;E?lzwADj+85lG|&;8#83M-iVV0N^D z+~f$ZZ)zI42g-X43=9)^85r(_p8Fq&B(?-(Uf8++vPfb(co`T>!p{9? zg^Gc~@eD5mgF)E2|EED>uy}^I3tW5HKvC@ivfmpVUw?QR7%qgJ`#%As9_CI+`QZbq zp<+QwJ-ET`I4^F0aD0L4H4{Dt295A@|GPo@;P$}U;-GRT7^KsaI}EG^+<(g8V_;|r zKldM$cR<=ebPXQ^!-4Q~|6hUxf}m{+ME&RkGQgvU{&#`Q0sF&)mkriNa0Qv-2`@)Lar=djf#F2Nx&MBk`~WXEQR)v!?sev7y3E7Q z;R?3?Jh<#L;AddC6Ls$Y6_8$--@$D=A82K<5@ew>EUzZ;GcfeTp8FpLN^dCYA$=)O zlz??W`*{=i85s7&o%_EM*%bl|3`bJW{kH_!82~i{)IU518LK!U zz`*b%_1u3gkY7;4Z2`ndkg@&G8ja|9U}K4hHxUyPg< zQ0!g-vfG23X(EXB2e|>1-DLA z$zbbzxr0E~fhu`W{oo@dU7cogrqmfXssA`5i(G3?@bA{)3Jag~SVJ3>78sMlxj1_^(4gnDchCh|({yT&8L(2{o5e5c}D#SP!sGVvd!oc8Cb?*OtP@aZ` z5ptderw&(e`J5uc!0@B?-2Yb~GhulIQZIo$;oZ#6bO7WDXKrwtXo?5}!;ZRh{~h6e zhV`FeW$a6kYIp7uuvft4@(B?JhAZ{Zx)0_aq&`w7NQWzT8b}Ao{Xaw)7)lz>{qID! z1E~$cbQh$-4eWjuQ3i$^jpzPzBCCbwC2-5hgB#oz_U49^MIoXL3_F_6{f`9s7v>g7 z95{eX1+_6jaa$wG!0@5z+`ridGoYE33EZl40yf(T;QfzaZ;FavL)z z*e-axwnvPC;X>!R{~Yi%1uAPHc^ce!VcrbR(x8E3P#o?NV_?|ObMAi=+H$fABH|1TKl;x7p9~6Qa2SEg!d_-K z(4YgfDGts4L7?;m$~PY33=Ap#&~YYc-4G+rz);YC?!Q0WKd9r6OjAIXdV|wghd2Yn zlu76Q+as$*@(Xh{IIO^9;GlTlA-GrK{;*0qNX)HzZD>u}}LhWpkWMH^~BnFDF8IlYPPZpf}e;lL^W+$Y~bb}9)feRlO za9jR_Bm+as!gK!*p{Va+c5h|@2fHUXxS|V$4Q(azuycUyVUS{AkXdx@e;X*CVfMiL zhM;62362O*{Q`2offNHn&Ej+ac|i6+^SO%@14G5)bN^LAWeO~y0-$8BMcc9>c zjw_Xb)Gvkh1;BO&@v?=06hQh#Q=}LeRxCvgqZLvN3|o-IKyKe7#lUc2>AC+$k=+h% zi^Hu2H?2XL22}RFkz!y-SbpyRdyw0~_PT@1TiCcG$el|-&T!)fSCXJIMnRf^L1x9d z|Lfp-V097Pj%lDW0HoGOnt@>f5o$qhuaIV7P+5uA4h5H~9?h(fX#{U@*M|Yp=UpMq zz_4ZIx&PdtFb2CFR3;&fJKh61+?AUN+%NLxW&+nV9^9bx`$U?7Vg4EH<0c@tu*fhl zWUR*Q2g1iR!6P$}MhPeln8+|NoLGJCzaS_~7$9|?hYSP5mDT6|iy_B_J7}(tsUPGr zP?-&~t3ZZ<;mn$I|1Ch}5K>x!#er)xJM%AaLF5iD7Z=DdFx=U2?*C_yT`+%x^A=>{ z%7Z%xWIVW>1I6(L83u+m8_)g!fvn!OnHk*na^?m%-n?NHbiAHLmVu#S)4BiGko7n= zGlO%C2R9SAY;)oUPvOD*VIj-FptAYg|1-$`1-lDulPfpVcaXb4Ll)pNF+-Mt;mDSA z|7(%$K+Nla+dVz93=9fe&;6f*tOjgm3dAfXClKuhojwGQ_a2aCVCdO;?!Pizk2fzH zxK@IU@jZ}bV3@NNF+Tw+OTWl6Fx=RB?muYE47n{F0W#g6I{=iPLG`|j90LQxwsZfT zkkcHr&VUTFUI3R3(1A2i(17Q#LgW}2BzBzpZwz-6r2QTWGT({Y8)QBxE!4;{Fc|DO z_aC&S8SW0Jer69)`v=?^V^#qt1s6!4W{n&JgTUT%|KGyH+>MtF#XX@=_dxo3cjOot zF6=w^za7~f&~X89q3FsDp5y^_v_O3z9(e`^gZvDnHXFl=_3>OYU=kB0wfCPC42A@Oc{m&90CzdmzuikaPIle=X3Y7uZZUUbX;8 zy$|lz%>suosObuBM++!0Fyx#>Yfr-6kPC`Ie{OJcgtYA)6c`v}PM!Pz2-$zowlTQE z_2LF=0$Bj^V}Sw#!<|#-{-1!W2en%u^*GpA_^2Jkj|&tS7-~+VwWS@KnZX&^3F5~i z3JeT8PNUB!!N#N9o7o^eUT`}TocCf)YMxOvXo%fx+weS;$xcXbb~7CId1nLy>{Ohi=LS{c&^hZ9iVO@-Elp{owE4WXep~S$Tas|202i0HT_DK;aMT7j@qr|`vaOK>88PMVdm>*E`p947m zfeL$2J+w!Ofx+SKx&NTB2RR!Qw-=Nc7<}%Y`)>ylfSKXc%M6*5P6k;8&Z|F^7#LFS zp8Kx{QU`6v@F+7dG~7M+pAXqzQ2Qa}oe|i6P<{oCBibl4FeKbR_g@iNJ-Gb=p66|5 zXF3XsQy17cG`NZ50~sr*P-b8Vd3f%BD#(7AJ6)TZ!QCitZm?2NIs}b7Em3A*U^{yD zKd5cZ07_TPZA@VQgWUTNQMQBP@q#h~!=8s|eHU;Yk_B>$H#ZZcascW7qs+iy@CecW z2i2bfDhv!dkIwz?Ma~=Gc0YKmi3#j5FK(uDAk&;6?R^&&28NEuXn7P-=Yq?X3>5~3 zBahGhZ$UN}(nfUcWd(;W(=m{lE|4@fLxq7s<>|Tq>yg6;uHFsY9b^J8ig4%lgSKVQ zs4y@rczW(XX#EbnJ^{xExUB{nD*q}4`^HF7BV0Zx?qXfsPKX}|KhKHR4RG;RkGB7B-Kwh^18nc4T^|&{)foC7w zxFI>t4LW!Z$`?yi85mZ)IQKsQ)R_aD>jiGNdiJq^6PiymJF^rwIBA2|b6rtoU^wyl z+<$RU*g-MKeQ#757%qIqz6Jv%&!fh`An*mZyp9?JLjWFmA2kMs33%jl)EF2p;F0eE z+5Z){{cAw>lDvLBE98<72YICD3sGcfS{AgmS?pLf(57#93Mt`mIW>)b%{f7BTmHsFz$(O_UWfJfd& zgMr}!9{Csz28IVXs7==?-(6T0!TftPDJbA##;0Zj&mIX}<+ z2W4gWI5>1}Tt}0EVZ%@4aSdNyHt=+-Gq($Ly-I*41H+x4Xk*t%V_r;4Ao&#JmKse4 zhJs(`{)5T}NO|SU%N7Zd2ZhBPO$LSuzo28p&^l@Z$oyZ>u{c=&3EqwX_19Uzbri_I zpt9qECIiEn-{=1GgUUFVddM7~YY(eOGaJ)3P^k+l62bMNfEEM8nm>p!5s(=wS_}+3 z{+#>25EQ;JGu$ENRx=wDc%;{vy9VrVkopiU1_q12(7q8&J-qA&m-Wo)U{|_>=RsSv z7#ME+L)ZygJ2^v(f#J!&bN?eG85rR40IiE%d)Poj#`8c9_u$S3QLfy@Aj+2;Ixfe| z4mRJDn|U(0EdrW01NWCcXfZIn5kLPQRIbCr9J=-sl$Hdv85sVEpZ_0^9A0h^zj`;b zF++L)&fqZ@8*KIhFMBSC#xSh@q(H?F;`kPd?Z*con!4ksvHOSBmnB4p3Q%V$u% z-l5IFkRp2?X^bg^mn|L~q@Yj-$ITjT28Ic;=l^d8i$MB!2ecU&Y~;@W&x4AA{B=c} zfnkQ+`TvVSV&L$Pgs!`VtRexmpFr{SN1K5`LH_*zSh!z(VC~@LpwM)MkM2R*;yOAE z3;_z~|MMcNcWq{70@teE;J6IXVPLRPJpZ2;WH&V5r06g(SSX(V9|+eM#LEU*$O3W- zcs{d3hk>C)>HL3CmlG1-5#V)tpgg%mhk>C&={#hv6XqXiemJ1Rz)+)f{y%7aE<~Rv z>NqGrI0iu30UU-OKE6< z|1*Q!0aFXff8d4?sJC$w*`ToMXZ8a1*+CsjrmY~8LESy@m_~vg1H&B6^Z%2O)r0#nF3qe=ZXmUO+)PVB zG*}NP{Z7$iV7Q@m{=W-ck2fq`UIQrvc@*T9J)p+B&iVgWL1W-xe?r{i+Q$O+Cul4w z3L4~~y!}RxfnkIG`TxA^#vfx*P^{D07zNs#d%`(pGN7zzx}|DT3p2B<6n&pAM+KU~4Vx0guv^=>Xnb;HD>;=!=9?@rDm|=YW|5CVKP&k15R^XXOFW4+4cxcK4 z#sgJZ;IzeJz`(#^avri?6>PUNFB@VF5_shusDc3b$-sbt;f)De`G`>a0~9}?PAsUL zi!oqeP%t|WSziksCoC{vU|3^z{=W%4OhEY+l#ZKOnZOGfA#-js3>X-Wn4kZD0Im)r zJeZ@w;qL+-Cp=-mzz|}2{(l5=T0p9InO}kH0dP40s(XJJFfd%&eikzJ59(7Ptv3Mq zQ^JseA;sqW|3%35BkH_%kUv2Q7L-<83>g?+*q;BN3s(zEE3mE&xPbvmw&1={i6H}n zhW+{fHJ~vWaCp0+%v&+v1bYm;h6L0$SYpV)P~m$1|2KBxtImy zS5Ti9w3frbh=E~^|M~x3aJTp%sRxxT(?QB%i^tr!nZS9=hns04xH1Ekw)9>==R4zd?qUV_x$Fk)bsl63w* z3*29x;64+qY;b92XAT4hnVuMm7U74w(ru!xO131G4jn2?K*lg)jF)$SLp8tOy6y`8@Ag6ID zuxmic0NnP@F=Jq;+jRCnXge8r91E$;1%+de83V(IzVrX};N>D(`zaHe!JuQFd(0RZ z95x}%YoVEU$BcpD!j$v>TanE}E;FXEf7d4(f#Jcz^N@Zmv<*4I zoPpuZ!t?)qKw%1wGo&?A;5lb6$V{#yWbEyLIRgXF;`9G~LFopp9+o~m!08iY&l7V7 z28+e#|AU5ALCV1C-<*NLWbt{VeMZnWA9(A73wUT5|>3gDhrq8uk8#tx8bAz`(`9Rm<+_7L_Fj#&5 zzXXaN$lkj3Ak$&(UrPoCjWy^02f^z!(0l->od#i$|KCA& zg43ZhFB?+>$Ov#8g5o^Kih-eF`}zO(k<~!@C5T2Ycwz_Ark-O3njb{;lR;)|uwr1a z*>V1V3`(4W=M15X!tBES`m|Em>gAz+iLiJY-Eb%uL992B-s75Ap)200-ssGu8|Y z500Jx&j$)$==|dYYX*ip$Ic_IA9P0PA2VGAncxL(L-W`$FkCo({=W(+tl)O_Gke4P zcHr$%E}&s(P+Zu6)So#2Uk6z|bd1Igyru}UtO`_rgVg7M)Stww{tn1BpacW*&m55Y zQ;7TnN{1V47#QxHg4V}{pr!<(JOb6D7i<_9cut@H{}vPma6f?a2`Ie4Qw*R6GRXWt zAoEY3hwobki3!*;Fq}aXQ?X@WIB^N-Qvnow}!bBF9b@#6-sQircg0P`U8W(#Z?79|=(TEV$d8dD*~=T;U^ko*>nr`LrH81_pz3=l`oCm#v_%0`Gb9;)bmy2G1*d z!27}AIgb-|3=Gw)kjf|KHYQN`Kd@t9;JE;8E5Y0c8-DaGsavF!UO$$NFL74&MPY-(rhLp?a|6d0A6IMPuHZy~*@Z@F!@3VD- z)C(o{3=9%i&O_R<&^2Hk_6!UnR}gs@l*Z=RGcX9CiEXfFVBkR#1J%Jt>=_t1uAKjG zfb2#`=v<;dEQx^w5n4mKfa{b$_6!URSI_^KMAHY^4(-Ox1RVtg)hQYd3=Chcp8x*= zV9HFz5RD|0T%k!Ql@MejkYM+_;&*Q{vv-;O#9wFbX_d32F{7fXsU1z`$_f z#`*s#gv)vphhF#RD4u zjtmSEw^8G|!;yhO1W62(rsg;@FbLc}|9>?o%wcwb@&kA$nGd|N11eijI5IFyxqTjK zZ5wC|0yM4yD)zu@bUnGjtpp!%-2ZT7Uo$ZYU#RM0wJkb}LsL4AG|CkBQe zch3Kpf%hXoeP2jB3OwNB#m#gXq}-Pq+}CpFX4(ki`g2!u_lK@TQf(IsjxtXB*C7|P4;23h`hHTgL zVql0^cJ@EWU+8UoP?!riGceqFeEvV^`bv0P45?4U1WocF zwKmQS3<)pJ{|8-(Mo4XjGXn$5+w=eLAcr9ibEh~nFzonn9IZy$l~*7#MoKo&WC#wHuUoSX>zxPJDy* zVPN5c6gSN4!TnB3tHAE^M3Hxa%7fQ~g5^Q^6_N%(`ct6t;PnV#c~t!^PY#sKbPLi#^(P=7CR zV_>LYxd1sE0jwWXwt@O*(6#8`PK`4-Jzj8QV0goF;lCn041?ir1&twnaARQj!*b#O zMvy$y0+45YKod=%bim`zz_5Vz!ha4>xdRSg5BT~*$aG#1IATHZ2?}EycLs(A&I|t+ zfXsrq3qE%0(aa8RfO&z-+YEOGhA*5KAoFxEweWU4xL^h~(ZF*iQ`{LCEVwQ}&I^I7 z1(;N>5hK~!*Lgo@deNN^!CQv+W@nB$B!F}O>8K@qI=>_+* z;L|=a;D~~bkv#EWVEDmv0kU@htUdyqub9B=njz!09G(meDZCf{vw_M+uo_S~1{vD{ zcm5#rh@h?sc&yCAlYzm7{{m#)BTPMHypajqU~oe0uLFfwh9?69i@=5d+93ZTg=Z)a zI|rz&>hNS>5D~Zl+205q-^1p*f! zdx_y^cYyms9?h(v9YKh5XE?kV7_JCh_+JQeA51N{Jp*1a=5_ek8SvU(11|;!9YOr+ zKz2uXF)*|UUic3>BMEEWI29DnZs2`^EnW-^GlVYuzY4M&mfpc-m2WdExQFWj&O>Xw z7#ISCFZ}-tQU?xmFX%o)4Ccr!4Bh+Tlpslwa{TPyYzQr3aWmjG`D2CsQYX_mE(sfVSP z8I%Tcyg}z-T|ioQ4ce#N%v=gh13lgh3<2U7;Cm}T<}L7MVDJ%#rW^3SSIGG_pft0` zn}H!g{K9`jPM}?z0U2NU;|)5$>H>Vc0F<``d>9zs zNM87#13KsmrXSI#Z)Ruy2CfW2V-6rcIruOzq|ZGIIbR2qN0I6@ka-C{3=BL<7ykbM zxd$9)sN)aJ?%9x+R4+jKiePtw z)?)QD2SCOuKuhB4z$SZfGlA+)P~Gyzhk-#r{lfowpfmy21FENBc^uTP1P>2*aYJ%2 z*i9fmsQ5B4RA^j)%(uY&08XDC&8*;#xGOi)Tu_RFtRV{VWnjpka~85c0u(0DGyqC# z1-=XnJ(?H(gZifMd;!j9kn<2gd1s0*1H%eUw0Z?nSAaH$fXC%P2@~YD1HKFlGFlh@ zDk1b?28IZo3y?MySdBNhd<7jT21+9-ehds9Iv4(f`uGq(L()BHjs+y&;>W(oiFiYU^t<3;XiEr8sv{1ehdspbT0fq080B{J7H}C$U0T<1g$$acm)k8Okemh zFoft{_4UfzQtpB_<$~-s@n>M*(7W(I06EN^ z`kA47r9la43Me&z5)epzia!H`hW>^Bk)XpG!087*wg`(P<}cvH3fc2A#h-y8!sG(l zUPVwkh0Z5I7G{8w0JuGR#Giq|!t}!bJmkIw>^voRQ0>Ju1LPhLZYFSP3TnTA^4cGN z28IHQ3;(N-!vt2Q>wwoAd-Sk+HnTB-$H^dbv}*zw7%XR=g_KvI ze1$Xy4T`rj0SpWQR?u_^E-NE>+1z>9IgUa4B5wj17#gfDK<1yIeG!I028JFqF_Az9 zh8bvL8i5Q9OOV7s_Spn7Fl?~8069MgoCZU9*}yXpkbP`1feZ{EtS-G7Vlx667^c`Xunpv~K5e8Cs zC6Iw(2NCN21Tru@AfOK9Pn94B1`gW`|BXQYfZ6NV%p3)+w_Ji47&L65ZEmPPBZ3$h zTx>7=_Xg>Kisb|`Ff`a+`0oT21C@adK@1FgY%idml>#mg!Hs8k$POKMZt&u0XV?); z;AH{ew00nffx*TO+O~ta4XhtrV|c=r2ZGYtn;-^;1$GzyXM^e@m|9QJ7)diL^JH)a z1Z7$9dNhe(28JgN7yh3Ixs~YvsFCaiO5mXIH3?>5nBjQgzZFOhW)7q*acO2v0>=Z$ zzL;PJh7FF;HXU3YxJ?e}xPTUhL&K&cn1SJl;|0k2H|ScKIl&AJ7aXDC1=kPVhnx$x z2HYk)63oEx!|?)SOan=sYY&S{Gb`i(J5V|FCYXUi!0E#OXUOhG?ytam|ByX>G9e5M z7o092%{{oo))9h__kh(YE+GsI70ws_YonDvu6-=9Ihm*6(1orYC;_Q=y8xM&gSi)6 zpMuH<@ZNrK*#-*31tAO!IqnxA>sL|Kg2uHTgNik%kObDesay_#9T;Tsdiz;M9l!hcV=KS1>! zc)SUGasw!Q8$kB?T=@SKuEq=8c3|2EN#CG&T@uE?u*3HP>iT1F9)}DZdvk-w1Ht1N zp!(`c7z2Za-vyL;oflyY3?_aT{&Rusfwqz85p!C zBaPjl)jb~J3=C8JEB7uA&jaz@R?~sqRH;=Y!IiM+5_dNWcZi zxrNxw0xt`N)Z--)3=AJ9o`tmMK=nA1S)lly62ZVQBjCdSU!XJyHp>Hg=1Fibt7i|J zTQfUz8h9?&8|=0t5ey8gCZ7EdK9CsAJW&3862ZXW5e&`4-k@*;)tlgQp&WX=6Sy7A z6Uo5P5Pac3sDFXn?gN$Rpzzm;WMG&OeBnR%TwrkcLfVC(ZFnGgpGXFV1;H0E`s<(* zUO{O+Cz65TLhuE&y=h=~sJ}NMl7Zn3%&lNMyutk+kldO`1_pzW3mEI5L2@S| z85m5k$br({lSl>zi;xTOwW%QWKOz|zNb^)mZh53Uh28N!n z3y^sSa9V=I8B-o8#36H1EYS=MFTyVTZwIyKVQQd#Uf&+JW_HLD7EnQd( z_Ya;#Gcf#!ya1W&f%y;C=L2uYfGpJTgiOGJ>ori=$;2=)Oo+PhzW@|BFnyr$|13z@ zfyU?@Vi*_#`jGN6a~l(=Jcx*4U^o(W0kXCMrq`*D*$Z?|DrnmYG{Qh?TVfa(G@>v3 z2hRz@)q>YvfCu#4n%SA&K*xeN#4s@M#9a8_ha6Xk`U!m27svyk{CFpZfnjg&SxA`= zDi@H-Y*4xI2juqH3;)~T4fO+;5xHIn#9%p+K%fRp<@dD($J+NDS zc-f%sUnb~?7$}X3#4#}JNV@R925u*)yafBnqnQ;v#pl5dF0ml_$0d$|fg}0Ce^rp5 zz;1-qW8mlm^@l%!N)J#)1}b|>KXFyMuLQTmLDNLw@`WLRfniU<1<1TH zOg-3-knOmjF%eLlX(TW(v~*$511<>+3>k$N{xc!xBXIfR3EKw+*@oc=+1p!^z`)>9 zd;xO463k9W{|Pj{1)j!rfovWJWo2+4T#>-Qz}s~ea{fLjFGI)FKz=@wz`!u0_`-j8 zWIsd8Z%CGcZnc1(Bk?7Hfni66VUjvVNK_vAd zAoZ0O{$E2@kDAAs_e0f#(pgI)1H+H%3;(}@(itp0fX6@}-9)C-pak#14QiKcNMv9* zQ*+^eDSVE~8Mdw+;rO-SAzE-8gWUflk%2*?@xuRASi;8(RKG!YQh)**q+TS6fni3| zh5wU~)g!rw88Qt9N^;=(&?Sk1p|S(1{e@P}rX(>iylB4gzY*j=SbT%_je)ySF5r`3 zL3K$_5(7hU2T~eihSViXk{B2)TA*WhVEv%IAV~9n;GKYO;I`m}BnAcvWHXT50`l93 zBnE~(Ef@Y@LiQU{o0qu;oIgNC71(bI$qWn^+p(`%28}5@Br`Dhv_bo_V7Gzd1AI0& zH1fbZ65ZkZAQ&L)W-F2z7);uU(FZPXK}VE;%Z?4n3=A?I7yj2Fhb1g-Ku2AG234W! zO7A2yFcfq^#|2<>PLQ!%uqsg6V@P3O=;^rdA9Qa7Wc@Dcycg3SP}+mct?HyOFkEj# zs!x&H?V$F8PYMHrKo@j;3KkZw&CK8>FwpX>AccX!rt8B0MWDO^PwSxa3^uk2KFA2v z#RSi@El6Qt*wX`zdldDakhS$plR*vyx6MHDdm)8^A*S~N-en{-=S{58V9;sSFHn zCSE|>n+0y$K=Lc7c7&c03W|>jsSFG`lc4^EnGabb3$9E-4%!UeyR#>ifk9yMh5z4i zxupk-y8*H%{^Cm_vaFf^-JXd%lje((L&V~QrGcIA_ zh!jsu;B&GdYgky)85lTQ&i=OrZlp6Xv>dS|f&33kSKu-XeC#w6_=s#L$ew9XodnXe zB7=e9$fXPa_ao~;jMab}WKP`Rfh=&n1WJ#0G8h;FE~CwjLEQyCK?J;@8I*uQ>UlCj z=g(aD58i_bcNZwkz-1FC>w%kQu(H4=lYv3tDzsk(R`1FSKX)3u#Kw&qJg(==4c@1j zlgYra;pzpXI}Si~1-L8#TL9YB4&6!(US;M3+35jt9yr~s$z)(KxDFi;2Bk{|28IKf z3=BEfFZ?$L#S_>KUa&D*@X|a`W&^d~USu*blr|#mm4WtQKxu^~i-95I267(*wGIH6 z-(HaRwm}vH1JBJ1|7}70;K24F&!K|$3*O)Wr7Tb+fZ{D7i-AGr8MHkLQxB^9!3zdG zxFL;hA8sb_>1v+fygMZebl%DZ$a%-Gw1-?rUuOh2&Oq}A2eKF#=DfV{KLAulz|^Ab zBLU}8Z*C@VR6BArZ2>tCRK$VHM22hzhBdD*{I`Pd5psu)HTi<~`GO)He2W6~ehq_c z1_p-)XkI}pD?n)|Ae(_<&c_S?vq6&_F!vypJIqVLMJy-@f!h}i*$fQ7>d!*XibXRI zG-k3On}K1E@kPkmD`;77*i;f#Hh7#s6Z+esSt&_Js6XK`{uP zlLj?JL1Dfkmw_Rr4tv;u^6-gV28Jb07ysKKw*`>mkm(>O*+bgMUve23bn4DR?#V%m zKakr*@)#IqxL*AK9iAs({dxGg7T>_}2F(*Lc?=BVINSz`x0E~v1`nT$kbR}FumrcU z5XlwX$a3L^-9!P-n{)CQ7!LSe{O<@)N09S6VS9K3n%SAatwk3|`Z<%wz_7UXEMzSz zn!iBqcmpyo@Z$dqXkiXJdlD4r;B&29xS6}a9)zq7Q^{vwhzPm(Ulr~Sc)1O3lYvfM z5dk-~oWOmMkbDLP*V?m?JsW850EKT!J_CbA#Kr%$$mtQ%{{>BIfk$H8xS7s?3OSJa zCHV{t9g!FRdn3m!YWOijPDb+r+kYjWfkCnscYgl@GB4)h|6|DJA*B`OiD1uzs$Osz zrBcAaaJl9zVUXOs3k05%Pwu0`>g4{0wZqOnXdEm963kn$+-n3l&54w{P z;$F}k8h9)Ylvcpgfj-_Jv`=N0H9#3cH z20H*WKmoG9rHFyyL)F>;L7=uBT6zHaXGswQgT>s7|L?*50}DrR_5;OnE7*Ey9A7D7 zV0f|g;(q}wX#!mTKnh}b`erF+U^rBTy=(>9uTspwuwvE4|K51gfF#%fkom2UVg`n` zD(vYSR1TGZ%-eABe-|iSfWrsv98;!Kpu*anoB0UXR8YKv`a^3#mqc#4_+JrJZh*Jo zAjSfr$q76m!yde{Oo@9f3@&p->pz~KjRAFN&gB?!nSP!I4q zO;1V~7;ap<_`enIcSLwY!j1Vq)P8WU5LV~Plrk{5S0bIeh~_VwQU(Trn-~B4!p+5W zhc4J)$k=~QDFcJS?Ti0sgW?b7ZfL%Mx&v~+q&K9$FsGD(VZoh?|0^)fhi5#douGJg z;|4GCb42Wk1BLsYQU-y$Gve9*fDKf4_?hvZPs!0<=!(*JZ&*#%D9 z9?0vA{a|%?MmYn6i~gnmKSAoi{c+TFuuL})6#*!$XOuHAh!|Y@Ujo|505%trwvh77 zT^>->L)$(l${83Im!JI)8m~a#*93C=3y}SRmmv3VLg!xplru0)2)qPYzXt7F2vjgI z+zGt&{~{=k!S=eNo;C9lTy%rFmEbsYs9<0yFUOtt6Dk-OazZcte*hZS0Go&0Uj&_^ zlq3T32B z28NQ{OGxK9gYN2p%o~Bbu3(jrb%r683=B7NFG1EfK*Kttl7Zn0npjOG1H*;fOaDRH z1LR#$JWZ%%U^tU|2{O+C-3PFwl7Znw?j_W9D`yH{?KOP>_MrdP@}p!;8F2 zko_4j`!6nF9MqqOw>(wF09(loL^TFGH{kUU6#R0f)Q&G*pFr^S0Rxm$+=GMU;_Jxm! zfR2L%rPUSH3=APfm;P5H`x(5})CE%ZdqQsf1F5}I&A_mt=n`Z+E)_Jr>dea)0=j1S z7*hrhY%`tHG0^x4Lk$B%P4Okvxh=>X0pw;EcW%g*9B*#e$!_4WHqf9HD6KfuFfinl zUP3yj*NvAAvdI8E#tw2%N(}?UkJ3w!Gx{+6>dFln9rOb4O`1@{!0@N+66zTdpl|_a zGRQuVEj0`bJIXJijx&SQfLCleK^+_A_km}U{kWMRizq>H z%Tdd~P*QmbX-%RhFB=m$llj6gQvh!#hMYHMQOm%PQg!LSA*e3LFc&&Z2;JBUD%UbV z=2u_(uK_Ao!RZ8)H{j`w7u-y6fnE~n%MDri<<1Q`LE0O#re;ko14BaHCCFWo43N3^ z1GNkcd+IO!7hyv>Cljr2r~xjroxo$gA8HvG*0f%N?=bKGV~v|jq34RSwo6eBcMf$#YBKE_lJPFA2L$Zp4&euFuXvM`~Jf#FZbCCIva z1_lOD{ZvxNz_6q9(tk}**!e(B0^il>47oJe13b9j200$k3AW}4JSGZX9}^AEO5kzT zBXtZ6GrBJQ-wW!WgX03a#%DgLX7S*LT%+X3&3q0V${yUz;a~=6j1m<0EcFZw68)F{ z{{XoMrXNzCfMeVfvicZQtbp^bNj(F@iwT$hgYG1Ux2urqC}w4_@t|fqxU5X6XJE*f zdAyXwy$Ckb88IFW-fInMhkgOMXXYi;`&%LY?E;0EH#gHH z5Di*f1Tt5pfq~)1tV{oMLGC~|7kqrIFSsx6)4;%>Fz?d;6y$yyw0#R{p1lL7L{PYc z(o{_Y14F{HOaK32hC6sf&Ii6<0kYu%bcidcJlWE~z@V|>66zVPp!^SBI_1L61fDX5 z?4@|nz`zi*^3wmK@Gt@OpZl2IdRaVsSlyf1m?0bcKz;?eNuZH|;m_(z|L21iih{!& zlux1Oym>;79S4t9d2loB0Rh7?ks{x4A&$kyjcS7&=Z|`d@(J7I0Yu zT3-QP3+>6x1ipV7G*|)B!_fpf&*ako3)uDafxHTLkOyRJ#HNXXA>sU`{|Dh=3ks_~ z=0MOIFVI{xI8VEBL-twvL(cT`gy^kkVqo}k@zQ@o6#J0wvjHDh@5;>tKJn9y8$5yJ z#mxYUqb*Gg3_q@1`mc|o7rc&=SpghSUeNO(oS~cly})ZH-ZU{Ve7Jt;e-5au1cy6l zeK>eMzAt!>>}HTJy`golBe?IV(9FP~bMMlBJ5VDHtOwDDg7n!ShnM*xhQ%xbRt*Y%@LK7PW(I~SuP*)XN3P#NX&QWZ0c2cZO)~=n z!|O|secCWHvmoUlC|{guW?)cwjogj`l_}tO_ibi{Y-$4)VxV^Bk7fpjme+{(A*e0D z)55?o;q|5emB`@=UY8F_HsGTIUAZ9_<9S2Q-SC4Rmf{PpTYOp=7%sd+ZC@s|Ffg2X zcj-T<>ksl8$ekrE3=B8kUHZ?AVGn3X3tD$V>$e3h3=DfdUivQrD%;WXBV^E@xeXkY zkhZ~v76yhjUoZX729+r=_29A@vM&sr_?@^JK=;r7X<=aa@a@w7m!LR;sYS_$;Di3$ zxFL(w2KQq=v@$T{{J#V_XArCga>fAc=uq&n5h0K?EYrroV8C$s z|8`JW2v+M4A1n0(&*Nxwg4_)%mqBUDr;UN(0M}*6`e|t2C83Rh;SSg3|7M`b2bm7yHUXEO_A3%old&VIBpFnr2DTF(#d8-V;F($2tegZnakpBO03YP5sy z(Y_4X9}V*dIB$T`EO^H^DEb&c`a{|o7%X@${|60EfxHb8%V=j{FyXljZ+C&jYT6kX z4A9g~XlG#1;kgVsXAQd7Zb>@>g9guK$hm}IKLvx57dSo-K-I^9ECS0x%3!x%7B}!r zJ$N1(QhvN?XJAO+x%_`EC@sR&g6nI z(!sz`!FTz8DM${QZzDPw7@qK5hV0LU*#&J2fO~?_iBM3&1cgNhNWH*i$hqv$H3)M+ zi^2sjL-y6UL)(d>M4Pg5qcW=P%bp>^QKyAGb9SjU> z1TQ0%53n&G$dDRnIS%;dE^kQMQ|M%1cq4TAzcnb#;PDPx2LYWs+yF|0kb7%=IvE%k zL@xiALoU~l%6yPN3pyDX{)i#+2qd$1kYuwE(JK8`*x?9!>C| zpAUG>=R_w11B=9E$a;I2I~|*u6QJv+Uvx4sh)7&UI!6gM)&VNp!TX-UbrHx;kuC;? z49UxoeN;$hfloH_=LT=S1C=*6T?`BxBrikOqJhx)>Nrq%Qw|4N61cFaXuFpl}AKVo2W;dWO%IE(Qh*>C2F_62NA9 z@v?zWIr9UD#g#4wh6w4)Nc$DNc-f#cB_KC_>0)50kiHC={{-s?e)H4a;>(D%#*_ps=^gzR|;4#J}Jq!%R$!GtA z@(TLcCTL#dNDl+U4aLjFgK$0f$hN+wl_EPB=C?osJRa|o1vG1K_7?NAh#;? zGBCtwUWVLBh$o&p5^PM2=7U=0f;D7wv}-nwi0=*bTBsA9TPT$S$7=3=9*D5a|Kr&V&gJ3_V7d|AUSiM5H%x zUkzNOfy!Et-i`?j3`>j<`2bWW%$dNzu)ydt(*99US_SuKT$)+IL&+fR;C&1yCNMA@ zF+#2rkkx{A=t0JgKTKd?xPze%?4CqWi48Ik6dw{385q78U54xvfrSyY{Q~XxflnL+ z`5lx#JSH+QEHSmbe{vX-bFRj zznK*>G7B1C0>zQeBnE~JrkCM;IgpscBnE~(rk5e-L_yaihD>5$cwu_^zc_MUf$lS6 zW@G_pY>*pkCNVHPu)O?VAKtd{06lMpsPK^L19B*zW&;f=ZwIP!k7-ra9Mw)*D228I_lm;ZC2jH^KQK!I1dLffW$CNnTxutRQlfYLlTErUnG zoVh`z9;B>(F`0qkiyfj22HE{*G6MsHJ;H8~n7|YUhCg@Gw0+d=E2geeRRZ|p83?MV)TpT`EuXAMyKqaZ_2>R0fR*k*Pn z=p+XNs4vREuwe=VLy!Gs$QcG;^&TkmlT6@)B3!w_%|S=Vc-fOF3=AF)(0&a#?p#ss zL1UQ;kq4h)2$qM8AA>><Y~UFxNPnzmDg(m<2ju!7oR`fToIN1pzf&0)J~&+de+k~M zf$f8Kh0aeiH-HBup!=H6Ol4qL;BomsJ1E_N!^Ro9mKD;s0j-NL0c(J)1N<|UfuX_c zGSc0_p#D9?evtcRrZF%~@VX4S69eqWFu40b^_k5y28IPF@{n)?<$;K43=CVmF8^nP z=WUQ%KzRVv-vDMsFLy>Kn*F8z}BgrZX_?@V<<+ z58R8F4O}~Wa)Yb@`+qtE!x8Vx|F?q-2fH7%&k$^uH>_L*H9|pZTc$HGMEDS=cEfZA zhBrj2y)&JGp~06pb2(-(Fo^gORtxt33bFfe5JBd0Uyd?j=&VaW^zh67{q*& znG6gX0nj=R<{sB(X3)?CD11U@GB9`qT!!o$MUrQNj)#NFy^5I(3{L_sL*_8RYCv@# zD1S7wLe}&+LlzlB*WIs}$-p2I1PxEHdi-H|R5PbQ+DY99RHWVmm!Q+J+W-&1I1S9wD zLE!*)H@Fu7vh&I;28I>Emyy=w!1@;8a>t1qd}kx%TnmQTpz{`x^RhE98+g+OWbLoQ zYzBru!I%GE1i1<3erP+;8#D&W1f3dzrk#M<3=C^RF8?Vy>7&e4nhOD~*MPlL7w z&S4G%!<eFr-8wx3M7M%mgkCAp70#%wb?S5Oo={h97Jeq8-K*25PkVg2!iA z<}xr?L|^`oI2#UXRxe16Gk8ym##{!5C()Px&jH0N%%7<3NAUO=Xv`#JE(1eE4AgC~ z@&nwzVsZkl!Z>{F40x?CbjTUpf9aUZz_29d^8b$@^I>j1TtntJKxd7B%9k4;_r_j^oS^|T4{}y;Gb>Xv$YY+cyW~OYIp#4iq{LnR{~fu$ zhQ}jlg*#+#ASfb1>DXc(1A|GzWypFnxcT6@G@l+;pJq1jNsW;4sFZmO3=s*)bqgpR zgVH?I%^=sfawmbx0gzj!%wu49k#PCHJ#rdF-ow5goI*iG6u6yqWF7;gE52pmq{WJ$y_Ha}A&21iiERY5ysI>k8(%}IvOKcV}FidE?jCKYtct4vPc=HrU{W_3(NP9PD z0jOTZp7%lV(zAep!Jz3f()kpixq5It4{9`mPuc{<3#je6V*vxhL4PE(pktOGe_UC> zz;L7KGUP4>aQuSI0lN#HAi!fP?vV2cSQaucbTnT^I$zqCmkkj{;3C-rR%t-@R$DA& zVEEE}8M2-dY)1h6EDg}m6)3O9EM#CXXu13!<;;6{nZX1anuoN1LH4&G+P|RkZN@?d zhL)Dg{|_SPN6@~xBcSkf2cM6;XCVW_AwQ&b0L+m6@>dozFi5mrMqMk0@DKEqT*$pW z42u{Ta@sDVo;3}cYXpyOK+a)SS;WAQ>xUH9%xz2{H`**>U^vi*90oqTY>;*!C`p0y zX2K!{hCgkWk=9s(>T7U00c{9^$MC@FL1|#ZA_j(-_RIfYfbu>#TmyO8ocfqO!Rs|V zn%S5)GJ{e#=)8bEix?Obx)J>{P!b2n{~`tkjqc0;`$6LmusnvGXM4eU7L=60Ze&@^ zz|hfu8TITGaCr@04(`DXDL%k;56E7V#S9D_6A#S9EC6VS%ZT$`Ce>s~?fI~FrAq)b3A7a;8} z(3$BV`5TKF7)mBU+fv{$6No(MKva;sek^8Sm@)y{zk;@1c$P3QESP}Y76R>OZDt1P z0p&TJB@7H3CP3%tVBrd#qx4w9z;I;3Wyo3G;CKTcc?1sMlqC!dJ3!%uT&^I^i!mF5 z;{zPNAbX}PVPIG>2|D%_4x0A^AH4`RYr_%-hCP!m{|B#e0=vNt>HbOoW_IQhxM85Q z@L&l8!> z3=z{VL(Ut6mIoe785l~YUH%^iN(``d%dXALpaaI-4<7^HQIoTjfkDgrEMy%RXw@?G zJoA>N3=A`-UH-2JO7k!~p>0gaoWUhXrib>2wt&>nybM{347*Md(oSXqH*MXx{dw3q zz~>x-;`+%_28JIq5%~lp_G2jn1Iw(-@bg7MVm!+j7#L<@bPmez4a*o9dgfgIe+v|D zFuy~}Do~jZHX1Zg08+bV83TjE+{$sc4D&p(?|}l9Qw7)s_}hMYYPGY?!wFoE}+f*JrIHwG+c zVDMRR`M*7~y-vN%Zs0qepMl~Lyx##7-Zje^7!npj>u%`S>4fDB3^fap>mpd+1#*QD zX#Ebze>;{lFnn2f`Tuofdr-m|e2yl3O!LKZ28Jbz5pxUbVUx}3r3}2RA{{Ib> zE@A$Kj`u>gk9k1u#rA=$C-GRxz>wj77P3YIl((Vn5l|SUtYlzVu^g>_frm4=ItG`0 zAb(9*$-tnq;xg*lTcCO$ye=Hlj@q)4fuUo?WysoonAtUN;8=q; z9^}}}3_5=sRJUze#lRr3<}&2&W|%uc18>kW>k3pJv|SE9=j7PT4DQxD!B=yG6CNnc zSynSJWURUTKM53GF!Lal0;o6v`%z;x1H+azmr>8cb8Th@_ez~1YejrO7d5TD{C_60 zIgZWD;DX768$9w08uJ5{Cl#w17)sV&hMWTjvlEuSz^8}1gU=FNu$qBE(-nHoHd49* zrQ1EL85kVaA<``!nGY!sz(#}o3sNVtmVrTH6LemRsT0%yapPt41Ftsn z29NMM9RsC9o3#uK3Y)Q~Q&75!S8`xCLFoJZGwii3=CP$NMXy| z#srGn8EY9BLN+7f7E~s!Su=z6NtO&UK!Sx^L+-Xpr^afx03av}-tYu(m*bE)# zgtbW^{skS~?F?!lfYyDotYcu9vH9}<&7gDu+nWZi<00KXP^}Fve4QbMy9YPuP<6f3{ry4{FZ9^FKJ9LG~Si3R{r6KkFD6 z6t-SQJ$oLO2f;U(LH10jtY={Ou@!Yr%wjzQ!dWW;JgQ_KtcK!tY={8*@iF^q<_nL28NDpm;YZt z4sURM;?v9ux$O)b-k>!4U_Aqa&UWl&B`A$DY=FpTBAW#n9D|#ovVno20*4tOJ6xdh z;PaD`LD>a5SK|Y@ODJUn1H+8%mmznh!qNw{yaxHP1u73)F9|AhW^7Y!=aJn5?dN>iz`*bVk9$NmLgZoY z0l86QBLl;e?T9`f$R3-G3=AJ|xC4}5V?dWo?YR8E7Syf>``Zg;u9BG*yjvE0wi_re zdNwjJ1nj>2-w)oV^X6q^mH@Y_0=OabxEnSyFx2dUh9$JVKeCa5p<@qfU+%_628Jnn zEx%cyJM;bWFn;C3R&ye*p;71JT$id71ry{!toX0^y25vipiZO7X z_{e4khK_^C^*CsJ6*QLwayod`m=mNfg!FO0Y-V8KID{OxUf?rjJ)2oTJGj8-PDpHF zU@$p!`M(0PJHhsY%mlZx9l4pBKu!j`12pdKvxR{{;qYbDdr{zez(b9$+)UtxELaaH zk2GvyV6ZuI`Ttq0{)CQGLpS|`%7qPE7#O^4kjA`_+SzBeFfbfAf;?XWnsWu8HxC~F zb>;@G0*1_6{n*05@a4#5$XPMqGzm%Hpf)BbJxFY2U|>0V`9I3t0LbS`fd=`YV;?SC z85k^%Lg)Fx?V4=(`rU-B3=BC(FaJkbZwISmz(Ze|*GN#qSx3`!R>wlOfYoVbj7-kTF-4Gef_(i3t%9IT!^v5kR2 zZ^FR95V3=S!R7R2$bI!-cYx9}s7wNt zU*N^j-jMrfT_7EMS4cm4!VU(8S_{nl4f5NX9SjT)PNVfRA#F!+#K zp9k&n0*4LSIVa%xK}T+88SvQ?pzatr9dqntU|4eL^8aI?atNjm6mQ^Fb#Bn(TOoIH zo9tv@@VI>WzZXa?*l&<924`pJylKQv28NQ$&@nf#8aMdb8Bje?0hM<~GXoq?F5KWX zgP<~X!A=H-IhQa0e*sqq%IC=A=iq$i1iN_`RJUK*$-v-ajx?5qvu!z+iFZ zGSWRHusR5NyQ?EN$bN-g3=BP2E<^UogZ%-DM^IZ8T8Hk1Q~^xTJOlDu$Swwkj;ohZ z?=6PpbMRrUpf)}zjn(X8U|45{6xYyxCCH2!yFm9%U;e)W+20T|CV*^&nQ>qj14Ati zGw$qSU`V(|*c~jp85n%9m;p*p3cDE?&Rn~Uv|kFPtq!i4JYeTEf>+%^!YyJq14GO8 z%m05OkEI~`vdnY9tvV-eCh-1QFYua-p4|)#0kQ)|+C6 z8z{amfZTiQ^8Y2s^)}Kt3$qp2Vn=Rp7a1}Rz_N#d!Q;+l)Vo6=VGUkJ2di^*_AoGP zxN{llZazr52j^xN$XZ}fynxbJ#2yBQCwGXe7h3i(FlgK*PVI(03=BC$s=WhpFA-`% zWedk%28J(pq4hm-{s-@NfwcQ{_A)RS+`Ifg71W-GsezO~%!S}!h1BICdl?ui9$rR0 zrx4x_0*?mya)VD%a0HKcwd`eJSn(M9Tn?x%T(XyeVaMaksQ0_0-Zux{B?}rG1*yLR zQvc*KW-stq zKlorK@c28ZJj>Y6z;NW_<^KL(O0G`0i!)2m2A+E%N4u+!zV!x`6u*AqN;3X8gPS-v!w&aC(B) z8UH{&aO7rs0HPu1+IJjaVA#TV1+~B71hc0Fq|loivc49yRA=3l_qgMf-N@Ob1OkbdSXNPANuyG z4+F;qL>_eO11Rim4l*!2V7`Ld4gmYp1H5Ssw4nrKPRcctG8Y8?tZH z30yBOIRx7OdIho<2^>C;P`3 z|2V|JFoov|WGotNCM0gbyGo#E)yo`aVA#NO1@)W^XkG-*Au^|eg98*Xpz!lK%)p?) zcLj1j3)oChTMc@41Z0v7vius_4zD@Pz>vUy1!+7N;sz!UP{2XXw_I?Tfng5+mH*)N z@nADyVFg-73?8<2;|6!}A!qkpILyFcBXH&a9^|lvkHx~y0AK>2o&s_+!x09CGXhtT z_V;*z$AQ3oELTXK?gnX&g43SC5e5bx!7GsUoM87LwFejKp_H}V+FNwwj5z#h!DB*-v+K8w4NW7 zU%)4Nz;0`T92x@MU-{w)14D|~mH#^U^?=i-$WaD{42diMW9Q zPf)sZIm*B=L+T3Ben!xGBh)+wOCtqG85nw`ul)ZC&yOIrFtb6ozkmxzkaBQ%FF4A; z5F>j9>27S0dbru(Jyf7d1~iU;<|qS$fZUb;9B_Ao)FPV=KDor58gBf4tT#VGyy`@t~tiQ;GlSgVEYr~z8l9F7)liJyYJ6228IoaxZMXb zN8vaF!x;kRxEyC-;84PC4yetZah!ocMd=F0coV38XgSWnV4-vc={`|NIORe2ZZA2` zz!0Hy1?i4NSQ!AiFB7~-6A#ez-!qdXY9C~U|`sxas{dX0JGD*nH9Xo z#tptf7*ytzoM2#(P$f=1C=QmKU|^_Fy#hI>5auVxW@hjbXy{#-Cr&UhY*D>}G{%ML z22h>-;RFMNj2fm{-~mE!NI?fuCvlR2Aw=y8WPc^tPDq`@1WlKqaYB$^98NMYtWmr2 zzYjTloWNs_V4r(%gKHE}(FHDB3QjUG@Tgxwz3&#%hk%?<;R;{&4_3e6Bm=`7^(+4? z;N=CVtOJb;La$b0`Uol-!DSIBEnPUt!0<)`Go69l3zGkEl7Zom2JW_qz$pd>9?dKN z&w|=+Fn`0&M1eLFmBG^%kh4`CPBAd7(YXRSuMwsmHogh2`JG@x6X1p5pu`7ik5-&w zUpz(g6 z(+mt7%&x%qzk$ROPBSp9F}niaOAHb#InBVZ0!>}VX$FQRXkv3tGcYVLyMnTwaKmW^ zhB;{Jj+|y-m|=DWvaSr;x4Chefnf@o-Z!Ti7$zX;1*HduGYkwpX3#b?*nj@KY=IDe zf#em=K8??9DzI0NyY9w-oC`oS|gka6~eGYkxS%#hQgKQ9}2_6Q>1aE5{53?BOz zoMB+NgF_xvHXJy^!0^WG%74(&8}PAhQ2A7k@WYcc3=9$GS0MZ3!ES`)WmukIIm^J1 zfk$5DECWM@`4x<_H9+lmP#C$KWnk#Qqd(;=1H%kF`diL2Fs#5K5Ax%ZvkVM7%&#Er ziGaAD3FHB2e4jYWz`$a01?7C1JD^DwBr%X%Kb&P?_+yS7-w?Av*T{m>rocG{1|Bp$ zD(67=IbhcVGSlT81A~MGZuyjR3=A3;$l>n=-+u|Rv*jEEgM|fZ`kir(fx!e#Y|S|a z1_Ly)1LqhRbkM}EKP#C^|nuoq72y*`jq`ks(o`GS4#g+fK)PUS-aGrtT zjl~tnzC`GJvdeh}h94GJkoJE2z{h$);gfQnfq}#F%KsT4$AHtH7ksTa$jp}W3=AEX zS5Wp<&p6M(FvSuPCZIZL4aj|#S0HDkfXxB5OCfVU;OiZrW6xL4GcZJ0T|t`rje)xd zWZ#$b3=A1oS0L-Bpy`L>0s}({nwZQ528ISCF;IPHaDjoL$Lb2?E@rqJVEt=w<>&`1 zc|qzEE-*0gSQDon6jl>J=38HZtW$%T@7T;-%)`zBlHYKFfnkp|a#{nO?E=Z`pm@G; zfq~(SHF8|Q!w5X44sz3%3k(c5tgrmv35pN+xDj|P1b*q)Oi--~ZFj0%WMIg!xq`Gm z0CIjg(p?>8AQyn@i-3y^40mjh6INz|F476CCq)W^UWb`FUZnUZ^&6Q zdoD9D2smE(UjT0#IwP%x2krLO0gq3B20cLjd2^Y8A;1YaZy?GkkbiitFfb%IUHK0> zuNLG4kRF9A3=BO^SN#!3VBb+y5B2T7#M!I zK=T9G&9M0`rgn&FkaLgzTw!2nlEIuu0l7=!Dg#4{EAki>(l`gGn+`rH3X-l|t}-xi zxIxEg!1)TK7Su+Ev`Ime_Z=XMy&z|Mlw4(CSmA~!??G|jag~8#i`$j|U*O@4ysrT? zDGgqb28v2>p5Fm-pF3JV!WndTG2}QR&;SA`%pP22V36^^uMT8C$2A6qEgo0?dn2bM zq;|D`Gdt6EkRPCD4Om=bV7TIW<^OKDdm&{P z!=Ph9OwORP6Xb@TYYYqoF>*{zQSvR@4pQQ)<=ka-!I>kJGZe39!>FJ86~ zP#{3|4%>h-svmZFkbN=N85jioh_|ojIs=1)KX&s#d1=jc28I9}@}RgrbDe=9!T$>C zS!=MqSOqAQA$j)8bq0nL{#UTB#{-!oaswjYgB-UobHMc%WNgyr1_OgZz?J_`K;a3? zXRvuD@Bk?jbmj=M*DU7-1H*^FEC0VEn+qzV!P~N3z+=4=ZZI&M3AzH=w+f3RaJmN1 zbAz@&fY(6mxWT}1QvzvE8q(bHl^YBU7QxVR4CXG!W@d1f^#<>a0r#!{++bh`2)^>a z8`(YJH17l6+v3v94n9o;G(HYW!#Xz^7&ZhWkM~2;Jh;2+1}S?2ZZa_33BH1QW)bW> zOGn7+Tu|DmxXHl45_0ALJLIr~*F~VR+Z&wJL5UYs9<8{^z;Gn=%KwRQw}RTxkTFkC zafCb;a^)rigGJaC$of!N7(&Mwz?)TEA#VM1lY!wu*p>h4AU7bX1D(777?jMR?FN-w z3=Bo$NcA8ztU+h5Iox7kI1_#a$G%}uh63+M^5kX$&lS1A#;QT-x#kuF!-U8ykh6o3 z;t4eW0vhL?bBlptLnMx|W{{`B_Xm4$GeOTI0Hxgvw-^|7qOL&J>BG!~rCn%y0i^E7 zEe3{?s4M?vL4Jp+gU!)`2ZJDUj0(3I7;>Vo{QmJ) zA?eEhC}h8a+TI{HL)*dzcNiGnps4Wz&liC6fIByM<^p6O$o`l+3=9g%$n95neGM)} zytu*Z7(vRxbz09I28Mv-D@f`Eo`h0MQ zfk7q(xlIK(6P#r{xgi@?yChC;iI*6Ckr-X#-TIg2&VgD{-HJ!6o;~|2v?(1M?TGEe@{Rm>s~U5V&%K^Nz=T28J*BS5Wu< zxHdCG&OUbsuR+MU&%jVnaOJ-|D6XJm2MzZb7-|Zxpq|6x*vt%?paa!83+^*8tSP{p z`vhkoe@HogNp2JFcz`(Ghh_G6ae!FM%5 z&M0RB9~11w4Q@Sx7BGO)Sj|HQ28U8;-v^clp!3U6ZQvU$Km|Hzes9e~1_p+*EB{$R z_bb5E!`lp?{;L|e&EUn&)C052jG(2Kp2;e^p8Mg%OZ$rw@ps-!=h=D<;QSq+Qw&w+_2`&%>=$t z7_=!7RBqmQ#K6FU!(4Fv|A>L%OD}qUh0Z^K+oO;=K;bb1Lr&k7{|7*M7F-U1?tSWG z_JE$3IuR67uH4{L+d%dPJZ50{(|6^+A4omSy>Qx+g`6i03>zjQ#;8H@(C~zTVa>!VsAmN`HZ#Y9!qtl#Ji-l12P>X1Fg%%v<_Ab! z47$)9)X)Tv^muZ^t6Fdy|G^UmhBK3{K<<=-g(Ivz7zwciyl&SWTK+v{V2GJ~<$oTs z-yNHo!MmE>A$vPOY24x|1H+QZSCG!l2!i%!!N-(%LuTeI~5 zd|C{o-XENoeV#EeG_1Swe<$30e_l4`nV_q*!0WYgo-r^eY`F5@3{?I=$DJFVF);XS zL5zce(#e!(3=AGyP{-9)JY!&RK@tPywLKvBZMpJa7Vdw4_}P*mbM8RpL2Qr`5dGm9 z1B1;L#JD<0jO954g9VzH#B&A)lP#$8b~?`)7!0-`#%(})9iF3_2TB_uQ1b|#{Rh(D z@SK6+%$6(gy9PjFQ=T(0+&~fo<&zc985o{yL0+%q0X|m@+^2Qo2Jij`>Amorf#J`V zE0A+Ip!-vvJZE6|vE|BtNl+kw%P>e80Wz221w=h!Ejy@e0F{Ft&8(%6v<7NdX}n-y zP}zC~=}a9^9S2^A0$PX!ZpeGU+RzLP;Jg>}f`Q?})+>;+H^Au!v@Z};?!fyk;JIB; z{RWE99+3KNSCG!sapq-%PM?F)@0u4333=AT>t{|NO>A}keUQXk~4cgiWN(V77 z85k6HU4h(-fE4avPrE?(p+o0vI$km`leRVbh^6L`hIFlYA_ z$UY>vJK%8!Drdn{3ZOMdp!DYOih;pr4|L24>ei4~3=AjsK;sdb7BXHjFo^6$9><6G z!@%3}5jXrm_BqaY#lVoh_sV}z)Pa&M$iHh|F)$?Tg|>ygq5DkX^C6%aA{Wr6WN_NM z@rr?A%3kQ$Ak4o`eav3HEYL;G;3g8t+u-_^<23_=%DyX*JM+Nmoq5@OK>47Vl?i-? z6=W@D=dq#V5RUmO%+uyBF4`Jhu5@N@%8j}>ni7(xzRK|RYF9F9!jdK}bf z1(gX4-Y_uiIdlbb7Cv|%Fk-$BWX^#%3=DS;LDK}xUdLu;@WMC`$aot_-HSI23?hf2 z^)=itkhxRvl2hoKPl2}#3^j+LbA2#%;Pxh>tpwiv=nZKvIJ{+Gcyk!K1{S6so+g>P zKqV+Bd@|lLFr*y0@_!a`Si;N&_a~Vek@MkN72@*LeJcW9A)9n%>*7Lg0u;Lyk%fma_q|gtH|*MRnM#rE)_i>V|7lD z^AF!KFoc{yURMfPCkkHFul%<{b_00*G-RDPvpm=x;5-USk89pBFbJHw^4|@IddNrvWRKPjkXq)msOyA4 z<04-{AqLsc@du>l^p*b%$mT)XPfTy1kpaqkD(@K>UYx#ydX_QBEby&OF5q*cJl-=f zTsec*2WLW^v&nhSz))}&d5#BEheFaIcqu$|d~3>k1_qCF&~hD?rV(lCKGbR8Hr0Xm z3=A^op=$@B>o~7~^q)to#~}Ja<740<0Z^cV=4BZ^Ffcr4I*WQ%0`&X{nGXyM3(jM< zxgqUE*B&b@{-+;K_`AOa>HwDIXXZDlS|>y-xG;6Fz{QMt&I!o; zB_9|VR$M?1f5@Fq-pwrF{RT%qFfh!xh*p+B{0kaS1D^uo3E5=`N}}L?(~l1f46B*W zBJDNz2A}!o(Zk}?%nGT4WIi%5T)21za$X2D9UFXPV0d%!3S>VoRLtcg14G6o==vb& zxK6}J28NbP(0)+`sICItl?_RIpgdCXk%3{$r7MtgVxedB^n7GscyI}MJvgMD208f& zGS9u?BLjoXWvH9rX#>385WK1i6y8@pGB9XdzJhwc4Y=$8?MQ&keg62!z+lC67BZgz zFSnYRLE$a(iGg7~(^*KF3$p{-76hdklTQo`XPM3--H8i1>kXtg;1dJGn@i9=6<~AW z^*neisNfR=1J7mTeytxb8+csal^a~}dw`oy44|>wIiDC994=q^?~j~6k@}(F{*xzc zX(_nz1zraUD(`Q6Vqgfl0xdtmegNJ33U2DSaDyr>Xu4zg%)qec$`#amcO09ULH?Ba z%)roa6?r{0BtAgqTYP3xJri9s{vmb z82&uF@*m~CE?7MeX$UcML#s8AnGIhV7>@rx^Zz}lT>uV4Q2Kz@2|Vl^ptQE+D+9xg z=U4v!#-ausz8;Xa$eFJU3>#itK|O~DTAzXU%0SyVU%oOhaJ;qi@J1eIR`-x(Ozd_bOqhu90s zbs%|z?+grkaL9wojDYV93}-$d?-_&W2eo%{zB4d<_;BU_M`ZURr48?9c4jVc&_mW2 z%=ym1aNzS5q&n}Mn!NBnN@0tJLJ3`RH8q}Vv`N6<& z;m4K#mGE>8X;VTI4|vE8)J_3~`-&e73@Sgd`vny4Cw?$6xcr2U)56k~Bcwii@`Hil z#ZTn6D?E>Z%SM);3=AE=(AMEW>j#CO3=DIAU4h*1j$|&Vtg`vZz`*hM3}jCS$bZaj zOdz+0{A6J8_%i6Yym0lr}D6K zfb8A!lYwE^pEHnoB&fZhJagtJ14F`Z=vXk4KJbD5u8{M_KKx{0nEU4phJ&fymW!yFuPF~1lX7GRMBm1z~f7#NoPz5?013$qVe zR)NQUq31y?_{G4$`sWN}?YXIe;61VxUV9u%Z9`i=oBDO zoc#I2z%YUPD(W3{kS&ssK|E;tUga+X!wK%IkU9e@X7QJS;Ruo#$UL9F3=9XjucFp% z&^|Tvm{V|gmHcI3_`!V@>0TXY=-46T{uof5JL4|{0}BtrPEh(<^Ou2vf#)hD?}GDp z5IBxN>Q6w`8$taKD&Oz?1>G-u^}hAy2<4~1H;7cXCV82KxGut8i@b~28NXX3=9!MSO4Dylnb3vCRJ9Gyolk7GPjxIR6dFFGwx{r6~gjMur^Gt7zvlpzLwZ2b<@{4IYzB zU|?kE#9Y2|- z<5*0yKt&a#e^9{4$PgoW^?v|z8xXn8#T)<*K2YNulm`|tGBTupJp-A~0i`XZ_yDDY z10eIHucD4~f&2PQ;PHP@`45V>7mSPyCNfw5n}FutkkSEk4+CiNfHv4-FGycaf{BsA zMd9lIYEZg?g^x!wGvt&y$hv16CPsz@iqLe8WF~ms10-#wgUy7dg&ZbEh8171r!A0Q zdYBj)43w|_&jICkn0c@?*i{?DJ!FMBj zaD!)*LFED{UBrO&t6hbxgMfvhPaiYr=nUqK;E(|+1=qhF%!~}vJ|nf2!ROlbF@xN_ zgqe|Hh0fLg+{o)bVEqR0x@abFPX{#k0Sd<}%!~{jCRdU6>_X~#(0U;7TsL%`{2$Q4 z-=)#j_ zMur8ZSN~rIg&!wx%Zwbni(00EMD=H07^3xSQ#14SX_nNHw-famIs)?{V~wg z8#vAEVP$0K{)kjIfYVGbGsv79tc(mIR#*QgA%{KO9Pqd_I9xz}Wnp7v2*6?vsQgi2 zV`Q+gMr%VM#ft+QBZH6iRmd4EF!zE_6@;vPNMK`Rh_SxB>5#+%ZF8+*V`TVX2W|gA#}f{)F*5wIyZZkZvOhuQ8-UFR zEms52@4aASWVqsR^?xmLxeIBVFs}nEg{(&sU}t2|alQ(<`wiw^$gnB6J~LovWbkpm zin?YQd}<~GcwJ)vJ0nAm^Hs=NFj$^<>S6Y2W`XV90WY=jgd7JBn&txQ>tJVONO8IP zUlbHhFnzE*4jngQ1H03Qn+bd-oi{hAZF2zR9`~#N-9Y|=>4UZ{Ak#{%pfL32W?l$h zhXE>2zOXYgWO!cv-vZJD^CR+o9Pwa_KvfX9&8EV^$Z*2@>i^py^)Ne}`k6iYSU?9B zGfxF8hm2VSa4<5|_@Sk7XnFvprveT}hBbayk=C<%!1o)2+%|!OkztSDRmeR9aJyh- zJLoVf@H8T5Nj^9}4sb9sEPQtcvL6$a7m?atptA4*2P1<_09t#+tB<*vg$aDn1}K4m z@+Jo-Bg2!xtN*h==?G>osJ??9^#L+Vhm(=PAo%M41mtk=0`0kB&ISj8JEZOm;bdgU z2)+8h3fU~se9=u%R5*d>iz+x78IFWqMLk~>RHlM1k!4^2_iN^GGBR9yi&S4Sw=sd- zv4xY7;YHZh|BFF&In1r#I-l7Xyfq(M-`?S5WGINfim`7QbYKoB-~ZucWN3)K3Mmg^ z=>R$oEy2ae&=P(1{}SZ<2rfTdn^__E;egXFsH}0}Vr1Zmxr*h!J;=zY3uH(ioR$i> z7#VzG(CQr2bj}3Zi#&&mkzqm1Rrr}*p!BnWi;-bY3|e{Q*vt&-(}CnKa4|BhiMje8 z6i)CyjAJu1s4@eU^&hwx8TQ0nh3xr&mLV+Mj0_gBSCQ78xbd=q3uRw!@QeX;ZI})> zBSS&#)&D1u;}x3MAXyaB*A3xjWRQrz3Rxoniyuf?11`5qxEUEd;-URjaJc(|`*EOj zIDwmy!6zQM9s`Z3gVrIqfTpFu`nPa1GH4_q=b=Ej{tMiU3^ob4^@GCb3&?$m(0Uha zKfHYaHeZB?ks%`y(|w>YHQ-@n$Vt5Ve;Ozc!1RLS58S8pZf1vsK?DyYgUV~{aZ&%1Ds5QVB03gGI(wNPiJpw{`F`GMHpsg|7nxxo-|H zBZET*ay)p#_sxUk_dw-A;R#9WUMTW+pz_KftHEvyh0BA&@eeN}LqNt=)U$U$Wgd7% z4rIPjfsc`44FNSSe2fennYhgXrJD>sMuwEkt4RA4;CnK`C*y(&bWr}Bz{kkIlLal4 zp!stNA0vZA)>X(oYOwqSTf>bkoh`Ld2ISY<)9B#9_6fOa6b@o9vV|TsQibtiz@gT8LnhqMLPQnk_X+J zS-=a;Kpg{+oeTIG8F;dBr-1`dd0c7W0Umi!cryq<%tu~VCL+Mdz>$6Re+H?q5)v-2j!32gOkkXeUj7Vs10#NfRUjh2ilK>r5E^k54aHUhV<0j z!E=Tzf{YA1a;{?RiwD`KAjrtDC+8~C9Vzg1yAYJ}K=JM($jIQ4i#8VH+RO~z9PbX9 zp9aMz$h-nUMuwW)tB|wo;BJGAe}R_!fz(U^xhMB3@?=qlul7MNQh z^&zB(?ga@WP-g&?2BruxGFTK}MVdeH0$snt!_EQOle9&Mk-?+*Dr8*-IDA0!mmp8L zgV!Nn5n^PBz@z_*5F_gxWYWYEAP|3#RQ!J-7W|3pL> z86xoLHxXfE$iSf=lzu}*7#TWBpyReM_qjGR!*-*9;VIQUIRo?+b(l3u)Q-~{Cc z4+l_Mxgf^KP*Zjl>5M=xXj|Ts8@wUW3$7eI?!X|<$grmD>i_A;@yrCC5`gz_RKyt> zG|I33uLG%pm0#fU6EZCVP8KeZ_F#ZGBSTI3Rml1O;BW!Wkwez0xHLn06>jj;O&P%J z*IL9G8Ge*sMcuy#Hs1$)jx6}7Zg<%7D2SdN;*1O}6;~l=*ud-o>w%Q%;AQjP+~5Ow zK;IsoxWYDN0&7KYkMusg_#D@VW5ABg)WN@gy`u`wu zyg>V7;NfRz`|*hcBg2d8tN+)5)WO0E++St_AIkxXXpnh4l8g)mHCK_&+61k!2KBv~ zS((85f+2fQO(Yo^G-|K@N3;_`aSUn=K-%{qP}a_9 zUm4!k@Ze4Ed?t^ILGHOB&B!pN71{=d`OCkVxfaxn@#F@_)gNg_h6k-zk?tFShBLU- z@CJ`lDabG~)U;hiT8{{_3%XzvI`-}&!^m)>4Y@xKQUe~Ogu5q0hLJ&}9lyVNWEdF| z+M)eCn42MkouFYlu$wo?Ff!~RpyrAUBZEZ8)&Ge5l|k+SUtI%t&kq?!h7ba3WMml` zCg4#6Dl;5p85z!WT>Y;P${S!e!}5|H6{SMa`c7CAkRxtU*q!yc4$!EyNqbh+7_tN*p(W0^s`Y~b;HrY|5Jpv4xTJg1__ z$iOiVd7VixENy^q0Rx4Nhaw|G%e<@qAA{lu9N*3`v*v)z0#%S8bp?uy3_kO({%=H9 z2Z_rBkUCIYg6y23$jGo|{#B%N-=XOOymbsx2kud1WJp+W_5U-tS_K7DqQuD1vG^*|`Ocv6Ch*=;mu6PT zL9U>(W{naf!-2)9ZIc5^j0}4gUqw3a+L@OPF%AMg#vT-=Aa}n}Vq_3la`itODBZyF z5wyJso-1SSV*!O6OudXUBg2PPSO3?6#&%)qk>|-CfD;&a9u?Ha^HFAGa9DTszaz4G z@YpzHJv?ZA??rIXIB_$9R|>d;`(`c5j0_PQk^3MZKY-?yn7}*oK<)vB(;8()h6@DL zf&6(znUTR`)7AgKK1;KfBg$g6XlWkZ3yTj8uB#n6Vu(&s~f^M;fw7oB=Ff#CL zN7Ox_@OYxa$iT53Z9Efs%?%UyY#Q*qI!L{UDkFo(j;sIULGcJn-^lUq0uDZKyo18R zMU|1EVmG1=1m&X$RYr!A-BFHoNVJeLC6 z8FB@d9zkZV0jb|}73myVNIWrtH!!+@>+%b#j0`$^p?wqR+`ilB{OW%1=w1?TVnWYG1CP>W!HAaS* z0|B78f$ovm0?zxOtO>5iJ=7T)o}9W0*((ckr++guB+Wz0>l}4PhJ@2-V>FO) zQ1A)@P@0&a&dAVn`s)8($o4|>F62xY=6ztBp=&k|s53IioWF{6cLr!(EyA6U!ClCC z4sX;M84g^$`hS5S0|O*~BF1k0z;Rw72nthBbb#VaMuU;T;4yUFBs47)8eGc3g?a*LkPS7-=r}A?EI^Zy z;SQQuiY6n&k0)0l`{|(SDl{1xRGvcXM5tJgCL@ExQ^dR=C~Ys$WMr^;3Uv!OUHO6M zdO`K-9;kYKkiWrliSY9;K=OAq85sheUi~i*Dqmpr0Ce6Al(+tX#(?^9C zBZJEGtN+uG-R1>Jw~)FRvJ(c>ZUWUUE3_CHQeIsB-wO9DsH_By&49)=z-O+2^CHO2 zSF{)zPP~B5=YYe-4<0U{IR65b7X_IG9XH|7W@NbX0=e%6xjV?UhXr(&0(edibXg?G zEhgHG3>hzpQ=6d8$nb|qwLRL53=>`vHW%c_9onGzb>uY*kUOwJttF5fZ)h_zq`W51 zEEXL`h99r7n+38HgW?V>?*-{2gU_mhl(ScK7#UW)MV^nwRP#fJk%8qMa@`XMZPP>cZi4KR z(Pd;XAfU!UmysccfSMFtMuv`e$ZcvbUN+bmKJ;v)4qZluCGW06&eMgK2Xk~883Nv4 zg`5=y72BZ8$k6j1IxhlEyGL{x8CJZ%`u{X2Ou%{2gO@E7)b2t|?}0K0s66?g%gEsK z0a}iM)k5~}g5rrskC7qa1M*s8AMm}@8B9JBRtu^NQuG)Z zI6htdZvx8e;5hT)g^VA9wr7KP{kn5A?FW}RAU96YV`Px{4DCOH-53il^FU^8&|_rK z`F!>N6Xdontc?wB+(HJ7Ky#lU^$+wI8Qy%o`u`U^Y*6b*@X=h(+)OK>dq4&B85#C` zLtew_3Qk|3?OP!84D=Zp&V0N2Ujo^F$a;E6BOlai1K-r_1#XWefXw@G6>`5dG!9Gj z85t^mLi;-mki85Y`iu-meqM##@dNfVybl2G7lPVhps?AX&&Y7~IMTWr=zb_rxpqdM zk)hxhv>yQ-Yki>4$nfXaRmlBbOrFpJ95mAmX)iMvFf#c3Mzjq<=7<i@^c;R3B|n8m;?7ElrduP-VwU}TUw zeg?8;6trd!x^5L@&jbTT2AhA-Iw=>$x#0DF8w?m3V*XwI58mej+b0C^4!9k0!GMvW z<{xyeGBkfYF<@jk@$c&YT6p>cjn_l+hj%j@g_L7_UM0PC>_9cNj7p!U+#v0I24hBsGaT3c*RU}#Fo5j`wNt_S^TC}k z&>>N7te{>PWQ^9pn2|w-{~FR=SDB|xrduHQyFyQ5g|x|j7&9`oNMHNk2GRp9gLps%wCpv=+DKSfK>AwH*%`>% zJ`)p0h78$jsO$4UZ9-_76Jo;1P$7E_vYrO!f2ceto=Twd1)z9^*#qeZfyboWAqUTR zaYOSOC`?zFFfweBz4o6GInJZ=U$5Db*hJxm!HN|e#; zgZK$-94J$Q)D@UAGVrKg`~Mei9w@zm&4Wz*LG#xPQ$~g-YS;dM1EmS@`9F|040z_n zjk}WT*kK-a4u5Xu0yZ9Y4#>KvGp39T8+5Pz{|it5==VV^1Q*1h{0IuuKcVX+%j0`2N*O1Qf_T^<`0?9(^tsQ2J3`bnA zLDn`y>(w)6j0_K4ul?r-r7Nh|12aa3JFeFtdnTb`U(6U8UZAPtFlS_V;(86Te*~&d z#+;Gig4;F7IwNRZVqnh5@W$=h|BIk7gM|Tj-W{?Q0DP(#bp3UVIU_^s0i^xmNNdwU zuA%Px0sGYp+^~d=2fJ7>GTiXH2DyL6AL?Rg-49tR?#|5wQVb2l5(`F#3jb^W zUxMN(7ES$LSdk7Hr&?ga$Y2w2?SBcVEQPrl*4_hm6q&#W%!3M3Q21T2U}WeCx%PiP z=+FUJIRRGh0U5YqIt@yr;4}@Y^B61{8U93G`|kt_ZS(0Bc%U@vW68+C5CcswV7noGGSJ#|P??lt$;coOa}9OB6)5dP*Byb2Qf9Bg2fCYyUw*b)X;vnYF``kzq>AHPrbuP`?{II|n(}`VPpx*lY0h z0ig2dgC!#aPwX|Mbu{qu2fX4P)XoH{ldxiBFp0hPe+$S$uwR^E=LJGfmWAX)2P;N~ zGqKko`vjow4Y6Wm$cVcJnd5+pWmqvXJc+vo*)s(dtFdBaco28(zY@p}XuD>D6(hr+ zxNHA?L1Hj_LH+`*?}X~xV#Uay5q}M`M+aKxoUmeK2#LRjwD%Zvb|fU9fWq~K6(d7S zJZiZ9v0`M{5P$8zA;>PM*#g##40q7PRIC{pI1;Ww&ia9>v#@4la7jS4$v}4aSTiyd zpot||GcwFcxCWU|fsVbFSTi!5NVtY{t~}ztTktp>(`Hbj0}aoE^Y{{LMh1(dYmoC_ zm?}XT#t+;m1#N0@JA4ehW0<*(3FL+g){G21$=4uj7ol!_0@9y+4YHSw0kTi&hczQZ zO7gY;&Y*G(9L}KguMl@gGlzl8ephZL#C{u)`35$O3^i%jAam;zgZlBXwipxmZgNn;1j;upHjE4z8P_2DFET;i3*=>k?im8v zxx|K%VMWF@$XO21bg~0ve#SM_y>yPyy>!rhICpFq89rp7X6V`|a2uY%mXX0H z^BU?HG~%uhaQLg(GBQ+TUPHYn6|zsVnU!e^D6T-w4zPIvwu}rmS=TVm-~k_y=K@({ zTVl(|FeB?4WbGWR4+B2w7*ggwZ|D0epP8H#c~5^x zv14R7kbMpHemtbJDZo8>H*WB*P*A+Z*fBB)-03<){cAnRnIY4w90BSTFNqAUfO&0-H)FOD!9Bqm|c$k2kM7gSg1*fTOL$hr34 z897bE`$tURr8Tf|hX{K{h9kMx{%=OES0HCO!}}F|;Mx{4Hs4{-$PiL+?Y|PpY*;;n zXy3XtvxA2qLCr{Tn%n_WUw932&o?ZMAk>3KA!dO}KTv!7i9I93i^6OFPlL<`hcD>- zynbe%J{HejR-YcwT?@!}%!Bfzgaadk)s8ceJ+WwY9VmP(92gl=imyS=M}UT{j{_q^ zKnb+|gT_&U10w^&jx+zCgAxGPZdh7|r1b^|Mh2gfYpDC~Anj&I$>YHdxmDbW8$5Qf z!GV!s`i?V@b-^HaLHo&|a~94xFftUBUi+#X!0BL0y6p@JhLLr&SX{~thRg2UMp>5Mhd31^Ez`5)B0WdO|q2RJe^ z=u}+$4_aCPnPUOvB~YK+6}mv43EVn%hZd}$`W6(P9gd6)B9+%5>usQA=p08zh6|O~ zAoo?l!VcX2f_8two6eoV>yb}5GBT{*jO$>!iO77-^#h7=rTf%2<~6C;B}HMG0|n*}+u0er5pBjlW+2q#7cRb(@m+n7M@ zvjQhZ2Ak?@|JQ@U6Q&m&N8oJX+04!y1I`xE^C%WLF)}>bhU71#HW$de15S(#b84>r z=LeYw&NqSJF-wnT7RXi2PTWj|pcrz5q@NE?j11F}&4Z>NP~7o2GcqL9Ui%+{+}4EV zDe%xD^Et57{2&)2fb$|KuedlfGITUvL)y#Z$;(y_veX+q2AJZ^$Z(<&Q9pvldn%k6 z8ICj}mw7SpagQm^j0`s#ul=6}s++-n0=3b=V-g;)L^K0pJUG6NfXv@|2D0A}lqZnF z2o(2EoEaH3TCe@z3koA}n0xWEA+>Rt7l5}0gUu3fVPrVH6?=Gt(y4(9Bg33F)bi8C zg^^(fnplJjBg2%oYmob$q4iXb3nN3xR_OkFu)iR4S)lf2hYKTvOZzp*92wY+AV0&_ zfMkJ+G6v8cHyd0S8DiS6{jUQxhGFxHNPSS~073@1Q+(#^In3i!T+lMQH#gHEG$B`R zrVU(&eUJ+XUv8#yG*uqlOwnjUKHN-UXhNRc%#)cwVyJGQ8li^{=wry;3VzL4PGP(sxH87n;q_q3{R$@jeoc^GB8ZN2H8^!twSET zGcx>{at-w!5lH0YS0;8GV{MuNgL!-J9G%G7KBLCpb>7LZtt2O|T+^lSeEKxq!zFPY%M$Y3+$ z+W%F^WgocC1COsT?*^B^?%d23U`a__6hg4UVfcD;dGBQNWx%Ph|D3QbR0<<203^{ zybm{&f?Sm1!_D*pBb65O|P=Vo34W`OPk0=cWllab-bhBJ_JTR`qYD#t-# zzQ&W0Az}G7EN6?t#x}qW0#FkaoaXL$GBU7jJOgQeqnQUfU-yqEBZI?=Yml>p;N$Dy zdIr8w7;-$TJ2$w$03K;S5AF+Ccrh}tti1L=3tm^cL-#$y_A}fE4|0RbBaq)Rycii~ zZ8!tzv!l5MRIYV+F*2yEz4m_xC~?5jKWu$4xS;X?ua(>2#mKN{?X~~l`*_gRfwv++ z&Ir2U#mEq{?%IDo(3v@~IE1hH0v&g>7##MF+|19x1MIGl_MU(@BZJPiYyUHm+wDm8 z3-e8Ix&ycOKyl*W&B&0m*OP<~6W@0EI(=HzUKT^=BYs=V;*o zGH-%6Bg2{_*Z$ie+Ye29o;_@?&FqlV+(D5HGVg#lBg5?V*xTtK`3K&N40Db_$0=ap z<=D&&Is*bE&)~zzu;&DAR@a7n59c1Fe$nfIWHOM&_U^4^3bEM4M zz+nTP2LZJcV|*AH6iy=dzrA_cn4lB&(DJFlhmoP?rpsN9C$=fngaX#f>F;PKQPUq*(2 zGuQqxnNTgU2Q0c|b&%fG07aa~(W>j0_5wul)xdGYFXrgRg-<2r9uql@G|zCVq?z zKQ3SUpAGki7qkrmKC;z~8+4E&p_r{L1v+q!3O?}40mo{ z`@aHI?t%M*png<8vtJ(zWPF*q7F@1?#-l;`E5VHA?mjeYlntwrYtq{P-;PdL*|BLWA0HqyJe-`3hCh!^n$evjrP(}Xc8ssb< zaC||>W1!=nIZ%0QYa7A+E6Bx@aKFw8U}X5U8oOUXX=YCVBSXRaYmoE9pkojh0vH+2 zyuSt+AAq*qo&+#5ym)`@zdgv0V0S^rJ$jHF);oATCys$DHlt$rWmEZ#d zoVl6rvq3Te(>DkWjt_@GMurq*HzKtqK=F|f$jIRH_uBsmP{IbshdVEuQ$MpeD7`={ z2-vI(C_W|xGBVU~T*n%QpfYd+R6ZQ;7f9cm$rIc(1J})00vQ>0a9oGXWr6*RSnuG{ z%mz6f&y|}Aw5A1QCrc0`LkH(|$k-ZKeIUGT3-W^sR6Yth4M58yH^>nug5Z)LdWJwq z5Fe34j0`ilu0zI-z+nO!BLS7spz%iVVrFoe3Ci0Gf*2VTRw12N49(jh zxjjLQ3<2ENA@g&|(D5GV`0$M&Mursb>qzs5kh%gqBL+PS`A-ld!=05#eO=}@CeS#5 zNH8PA4DRdyCxZM7b06wmbI`eFrX`@H0BgVb1T!*BT#4jXq`VG_yPRM~h6g;?kz`Zv-j zhVS}+FXZ+)yj=wg0akw|gfKE}T7f$)G=R(#y#7B4xxIr_{((n5Jt6(&H6e@) zB{<9ix$R5{Bf|pW>;JdG-G-P~fvlZ|v=m@v^Pdn#2BQ_Y+hQ`Ij0^(e*Z;?Y!V4)K zxWev>2Mzy$PuYZ=9p@9u$iTef3}kE@tt%WGz=X$W4&F%^<(c2xDX@k-m=FE<}vA zgZsp=csvru$Z&ZX(s}4eWiZIBCt-{X95UDcXM(~V?k-Te2dy1G3JP#=KNX}_Ae@oG zNA~*veJFka)dkQoSMZW4$T=i7;fxGb%aFnX$zD)+#Dp_49FV>KA9VKtWGoocR)F81 z0~&+@k4Srf*U5H11eJwL@+YwXkLfR$;0dduUUeuVF$VKNdzN9gy!}C zpdmw$aUk=5L@+XhXkLf3OJVxJVGSNXMv)IDY&N(3)3S}j0{T1<{^bC zIQ~KY(?-;t;P{VXWKhvYi+`lKOjz4UA)1ll^djtT1)1#-&BzdgWHxBNEhL(eAwv5) z>ews7Z16mxBRBYpR&ZMvw6>}vnvvm(_I1b{voEMDgtdu4Wz<9-b`EFI=nLpv+-7KX z3_jfjYyh+`eI}Zbp+V<5A;{)e! zguXkmj0_G~V+xWyYGJG(){@(yp=Yr!9l!rlmW%%4L zxa$a-^8lr}8jyNpM7abC_X+Wg3~!9DL)L%6!UVK#m4}@Js@{qmf zpiPRPcr!_0WSC)c9c`WfHdhCpDsY2N6@dGrDG7`WC$Ot`Z)OFncZR74**_(Lk>Q8Q z_5aey;SF8m4+?`VP;Dn=w0iQgLDL>6?0+OM zGPsythqTq9Wd%V1*Jo1DG!RPHHnN21!mV# z&-`=hWrmzb4<4ceE$s!@#WxZ`=b>MRtO%S})`20-OgKxTpS4#X_*sD?A-%*>KxMurOO>+p5IAagsC85vrvp?x7FeV{Qa zke^m0Gcqi(zK*hva8EKL!v*W>|2sh84A$d;I%ZNoHg)u)Y4j6y&x* zXdA<+hZ(%Hz=IpqJOig4krYOT4qN255yTJRB@G_j;Mxx4W}6g7h6lFSA!}WjU=WN)%bTG5^CpFn!NCE|U-0|`F7QEJO7QwBiBv|0DGt~Fw}RXT4qMP34rm`H84<1^ zb6rvy8Gblk|KAB$3%WNDRPIB^NWrIxK-PH`q%tzZIA8z27Kd799Iqy{FGyu% zxZ`piY0tkiFIyofPe9K1H~=!w^*ZWVtw>?W%nCLSzLxYuDkH-jx9dpzn?PkJtPBBn z@xWtmp!6b>#>n8{ejRE49yF&4K9>UAYX!BxL1nN@8Y9CA_v`;xA@?1T-S7eI25)Z2 zX`i6sGH^Pp0h#Z09kRa%7XQ%tA9Ac1WNp)uG)9IOUf2J-g3>K4E@~k48OWVS(ij;e zys!U9*&6~g2b^eKz~fqP(ijJW9&2~es4#R({H+(>6+Q1QPG*-r{n3oTp0 z8w#DdAsu=b$h;><1|!23|Lgz%gWL=AKXkkRGB&>uWISlN033G~8H@}qf!C4l&jq!0 zK=}h)bAZzus60%_U}Sg`cpb9m3uZ24O#u^VT|B64ZpmO|un5AeOF({Jkip1c6LcNv zyemjq1m2Jo$qi12pacu*cb&;#WcUzt{r_v^bOKp(2^n8&W(SXWIde0C*G7We$B@a$ zuqGHSe}URl;6oif!DpbUWHK^ngy2`>k;%xgB;-2M9#_!5Fz|tYDJ{ulWRQrsjJOxI|q4&xSnj1C2lM6*0^S;AtPwxD9B}*^f*{29=oW|ED9n1u1=k(}+7aGb7j` z?%d4AU!7J8miOEx1zMdEd&vz|b66`;J-%*q5#;ojWf z-lHSrp4Tnej0_Sl@4!z@r6 zCMSoHAs`iXte_!>k-;Yw+D3r3>89i`GDM^z;t-^FMGhlF2%6X)sCgiHP?Uk<<^t5b zoge{NlLQhr;BgmkZqV%#pjl@~Kb9evk>O72b)>m$S6((I@FifNq8uCsD!Ggd8fnlz zJuD2Ez&qldxWVBG*;DD0%g9iWb{(>|12+Gi%gE4^b{+L>SBQJSqq(4h5>$3|e$Q-EgQk@R%dR={7^ z=5@##W0*fcWgWO9;s!es9emR_NWDxRBZENJ_5WPRZi1$BaBInxn+ZH!0liPkCy$Zg zL)P{GOvvgXeQt1T9#naN%KMT$Muyw{NO>4C3tJ-Cog3%G3v zYVVljGcv5mz5f3dD2>6~2(cf$^WP7&FqDU#!xgdh5mNr=GcqLPk){vi-zE8s3=;X* zQP)Oc#B(~R7z4Leu7KQ^e;sm1J{eJ?oe-QUv zfE9w&=@c+BI1o?=svANI7#S)GaECWYO+^7C!f{yz%Y9!MPk zc8~{j4JpVk0Y#wmys!ViiL4e{W6cH5hH^{`E|6lT%b8S@XiMC{!lk=(1<={F7!(gBSS^`_5VG{ZiL1!sNNJQ zW@LC#4jn%L$A>2`8#uNg_cECjGcxFPBi1~F?vVql>dQVa73QhSx@C#c=!2A)T~Qo_g}QFHx2%GfkGUx3>-uH4{+ z2-zdcP|C;(q{zC$3RaAc7ZMJ2I-kl%E)l0_B!f*DP(_w_anP;gWF!NkaZD9N*NhC>aIif zM}o(7{Nd|&K<<1}%E&OI4%)v0yTb=A4@x5}We|Dr+I6rzC{2OmA9U?KIL&I5F)}QH znE@TYu_4Yd6aGG{{>BLhzZel=G>{=udOY8NQ&{U~E(P-(pWe>1XsAbmyHV(Qr-$Ai?W zlru8yXhbW=;r?u91GmlnA#L-3az=(XjmTxWJ8a)H_!d~u*gq(bRFpF^JZZZAA0=&o z(-`FJSy1B>RNgHpXJpW6fyN!QeY~Zdk-?(nI?BH86XlEyCN0mg^Y%Q$ckqI1_tA`eYInj0`TV*Z+qin+J9uIOTb8L%X)1@NubNWT-r&!G5TP{GLX zrWM*JgQZPSx&gPeAnPWMR4_7Fv|ay?vL?={huOWE1zdl6aD$JE1gGN<6^slyZHTc~ zP@ZF{WMrslyZ)a8IiJGUG=aM1;3J^jA)Puea2aD!$;c4Wj^-{%ngEwwuywT{f2CA1 zGR$a4j9Y{9WJM(-!<6>xNcSLm^Rhv*3%E}_qmq$fNju>%1@+~RR5CKWXul4*pAi;D zi1liq#qRUK{Rik>L~h(nm$-P?IY4O)?Efl8hK{c5|HVM-reOM!%N+3W;+~+rO+4%z zki2S9#mG?7i@S{nN*6Izj0_ukum7KjoQ9xn0VePOgEKd%fC1%)jw(h5mA>o$9YNy} zFgJkH8xz=eP`&|$+lDGe2A>Jgc~Y1<=z46BITxVvLCAK($9N%!P=NgWql%HCWy1CU z*O1kL=Mo{+C}iojJ2w+}bO3VJflf6egTch>kUQ$3dC{Sok-=voBF%!_5K_&^kTLQ4 z|9Qw}L)uH=5(reEg3@+PH6z1=iO6dzAY)sQEmn}TzZX<9GRRCqTT1{57x2b>P@M}3 zmlM^D3`-_mhpbzMg^O!5GpH>Jvg<`PBg2tN$a8w|G9Em>2ui0sHH-`oCLz`YfZ|Z0 zhLPdUr0f4dd(Gi)2{y)2iXq`14vkb+o_;51d5+8HH-`|reFV`3yL3DTLRKg1&?5X#!o=%WNH~1 z3}!&b%3-zu0$Z8S& z{0wkD_2dS(kwNJMl28TJMnaxng$Z%&a zezQU8K%vB-S1DWSi&&aT20iq2F z5{sy3WZ1F*QAdNsa_SiwHXx}3#aTl=Bg2{n*Z;5LgPq9>*_-bP-ka~)!{*=2&YZ&s ziegYGfaip^)H5<@tiO)B4~$t3ydeSf2Ffuf3 zypDA4C2VfYn;U!)c9{;WRTbdZMQ?+!O_Ubpt1?!4siT8GBOx!y8gcb z6!PHshnCOav#MOU{h{mGTpAe}IyPPZZv|HenL`JymjJ~_N+Tn~icQcu0&I>iFPk4E zN;sLA3_P3B@(^^66(s)v zDlZIon=AZI2v8Zz&;-#BK4TAVH@NMFIL{KilGq(Q4{OlG$gpNJB5pu-xHK^`tk`@V z>mDgk+@(O}Ve2nJViiq{3`>yw0ut+KVq{o=BnAqb1x<_$b2eXx+^Ya{AEZnNkBo!b zFd)4rniv^UwxGt}ohC+xf-Tn}=k|cZ-4&XD!JS`_R&bk;rJ0do#+K`l^GBfRL86(F zVapci`Vr_p5}js7h7Vhi8>UY0U?ZJjky(PoCSa{R!@SinQaUa)mY zpm>mJWn>W8jy5g|R}VhX2UJCa+v^^!j0`T@um9hNT(3LzGJE#01U0iVdw}b8XGnj& zq?M83#t!6hLr6LS4ZMTOwJEKP3_o^U|1XE!9*4GjAal*kN5STKa5H@cm2A-YfHSR( z3=ei+|33%RUV`Nncs~ZTH$xMw4b)}?^~L_QGBO10yZ-+e$j!_v!Dr1y@Unr=S&?XC zWMDY}Ewf-|LDxi?v@tSB9JmfS(-tNNp2ze9EqDN}YVQI$3)YTGX=7yAaR54p3sVnm zM}eCJ(7R-N+87xM4qk`s%ZARMENEk7m~-&@{}$vpgY_ZGAY~{heVhQf_Yida5N-!_ zT?5ptH*Jgz4u`J)_d+%cHpUO`DMIGsMcNq|G7dqhIjgWUL_osl8u2!20<@+L)a(BZJ7%>yZ1NVg7*R zS8(AAJ;)T~1@O2;M+YOrmZQ-165z52ey#<0_dF=0f%4>r4n_u_jf#oDNN&{8UekN$qfjjspyf!9Ko#b>3Jm>bHi;-c?1+=*V za2|zBDh6?TgZ$7xm{`2Ez0+(`b+@P@Z=w@U{ zxr8q)!2`F>=wS)c+tSU*P;r@by`c1Xpqr7Q=gM`|^Ah3xNze)d$ehQEZbpVJSD^E4 ziJ&m^;)RVjfyy0@9!7>MSFS_OJOPg(gT@D7YkI+{&zn0A+SL>>quunz|JQC z7tx@i7Tk~i)5pl*a36W^1f(4X8ioa>3z>e1{B2OYfzy#Ec<(lR{~l;y8+`OPq)hbb zXJq(rAKHfotB39V0H2EhiZ*chRnpJMAo1Y(e?jE92#3#Cf=}xPMI0!PE$C-t;CYDF z{&DMJ2Ak*v=@%a9XJn{&h!|f6x&1~zBSXo<>yUe3!ES-~Av~H{!E5w9xtTydh1B63 z6Brr3AejNOTV?_y!-t2^{dr(BVCO73bAy`Iptgs@1V)BG50S$Vvi}4W*D(_q85kZx z$0WgPaiC`&9fO=VR5O8*LE#ZvT?+2-`oZpM29@OCI&Z}UMg|vjwct@bH}L2_$Sr3k zFftT8g7)LUXEPw&@?rubLkmm}>=#h|(##B64FpOv91|HCraXeSA7S#awjsCxatF65 z3??!%oOyKpzdAfkK++6&W)XUpR>(v~h8vHr|Ca^DFU%~&c)Uw9JGdhC;b!WFWHjh} zTF*pAh69h$+yGAd;J%3ycOax(1%>U7iHrMr9HsgT+(metno((D`zv^&l^J zaD(a)pGk}i0?)4hcSZI$qMSPbQt8MI-q{1r3m|tkOk!jR%|TiVgtWgBB)?!1BLmNK zv~}^W&CHR|v6lmr7#Vb)WA3eh?PYl|iIKtQ`E|&-TQIk~HZz0Devq3PCNna`Jcq8y zft8_fH$#VmA=}15MKn17noMS7kaz*zTLjaC+|L3RRgg7d36mKa=Da}d-+(7yuYu(;VW@Hd}iJYHdg7Bba)}W@d2kxIoT{1*OH7DU1v+UZbr; zg!Xwr_j7<-AJDPh4O18y-n_XEx%UEQCOD5Uf!DivaD$h7fSMKHxOy;!k)h@-avuQZ zXJ{P_8pMN+-|$RjWZ3W)+OCF~4ceyzZ4>HDWn{SU_WJ*6?69#~cV0H+^YW*IPkI9T z9~2)kQyCe0GSB=6-_HfAqmX7gK;cs}m61W=D_YwP>=$tP3~uj&)Ge9H$l&o6I!^>k zZ(w!cbxWXW4RC#SW-22?!&hkE0o=xO=4At&5e+S0-b`g=Sn&1w|17k!3%q2+6TYMX z9BvZR7#W^?h3++ig#~!t2Rc9Y9h940z-@PzX^adO->;+In+}aXmu5DmDIld@kg<<~ zX^afZGqC4(P`aKljgjHZcf{BaC>)neV`RAT9h!$>X9z*({6OjQ$TUWV7vHZ#&Xb3Q z4|qHRvg{i)AOSw5)eUlY$(L!23@d(IN4lFAG*1Ppf1!Q@k9YcWGl3hGkaZ#&(?R$1 zT!)`k4zkx~IwQk_pV$9?0Ij)(g%Qem`i|fP0g6bF`kd*E3=95U|6c{*!R^ z&dA`xb^~>e5*EMi&1_8IMGfxUpuVii3`T|>Y&Rf#T4CnG`-v{iY~bdj3vA3CTuXuS zb<7M#h7W8vkk-d}L)Ra>aD#)`1zeng+teL17#UdDZ$Qo~fQ1cgoCkbFgA-&8v^!+Z zXU7ai1{01O|1X2eBCvW-)V)vj;N|Y%umOeriy4dzPq=RUmjJ~TSUuWW9LR;(aP<;1 z85yqd-S|Hn`CKM=84sFLcLaAzLG3h<`5rSF8C*ne{O^Rj2Xy8RB(5Oq@1?=&L5)vP z*i_79WLP40CI5x?<&8z_&%{0WX% zPe_*@oWNYci{3%*W|+mu5F>E|bzcj(Yymf}oS_%hg2M&WCN!AE$Z$vE2FCtWSg8xj z!y&U68GcCI_zxTJ2i3C~vltn^NZdeOdkjfKkn@KNL4|}nH+VA98oJ>=K}GHc>OK`n9}>JA+l8B{4%B)Bxv^w6Bf|~38~>xx z+z1W=C&+oMGiHO%@3`@QDe{?A;4%%oq{gM09eR_vD>t(mIH|jW+h7-FGcxq(-1xr? zWHv1RA?upFKqF+J)hyt+^56!~T!7reGKZ0YL-z(`Umz^ZK>c{|x^PH&p)m(^Uce31 zHOR3cjPl8?p=!x`wx74kN=Ay&I4_BVcX- zr$hKQ1MoQEhB=H3Hu^VE*Dt}^qTs{>xdZUV97cvI`ZqA@I>>DykhK+m=79E--}tW% z%Cj&#!Rr8+Ey0=912Vs_GMACzh2agz_y9~D*lpl;xfeHdpBSjF3Yg2tU}JOxvR5Cb z7F^gt!m$7<9|ejZm^|1laG$^fxs5+(E+a#M(G83>9iTPRpmKT7Tt&L5yrI{6SVT%(t(*8P?d5jD%%x*yT zoWs%-*v(-7gNih88SXQWk-@?I24q|W<~ML33N(}oPTk&+8Ch3wxmGiek>P^*4b=6^ zaP{*+2@2$7aC>CMJVu5RiyQyvg2D~v2IMpaUJBv~Hunn1y%sl6*RzA&3$E0BAe9ef ze1l;=BZG|PjsLwMb75`BRy@h9%B7;A=iW`RC69Mur8>H~v3IHUlxw1}bCsf<5TL%>*9O_J*wSG+D^V z5aD(MGCvD*yJIsmxcG77W|{`u|F)2k;e*?a|KPnyFm;f$0^Ys=n)3mbzby+H89Ll= zpzg79ZDt1V#&w6(g)0^^GCXm=fp&%!sLkpNUgW+Pz-1*9c&`CyvI|tt z2Y}4;x&gUk3Z@R)7XbC;z~Sh{%>+)wu>F6F7#U`G-}nzc8ycnuxh(`fx5f*6X26C; zp!=?F{9lILE`!u>;EK_^nVq==TpzlF>!JsX7#VbeZv6KKrFU2yfYXUTs5)$BXLF*MtAf%dG(T!AW@JbSzJWT<4lb))npr^;D$qV;z+y&*p5Plu z<3k?2Y@opksC>a~M zn11ATDbpH|f52lEp!(>+Vnzn9=rfSBG|>8>ptQ%Zgpna9`dL^#RhMHJt+X%L|$gP(dw5!hj*jdok zOKqS7@IYzbXDK7Yh1eUYcUnWn?p>N$!S%ZjHxqc;16;O&+|aO;k%1@v#(%{5!5-i} zL`>lN407i6lBJ9cGvaSR_Q~gh#$;e)7>IEKP`W*{6tsW!2K;;sP#8W~%E(}oa07L1 zGqfIJ>HtNcJ2w+(kthQL_%2C-WsD3mi8oODobd55Ch$TkS8nKyu1=7?n9DLoh9Ai{ zAalL2a0llNP`wXs{CIGKO9{yNG$qRz8D^wlZzF-+JOwHbzW)ejo-6d;CUJ8Mr z!63V!_Z%xM2klS2@&6&HEP$Pn4r&{3hupyE4qo?o7<}G^&vHfvfwUWtHQliFub^=X z56E5VIm;Ot6w;9035!Q2(Cj66oO{A@MuwQQ8)#?ifY%-{fmT?8^7NMFj0`i<(DE#3 zKQr`^Eb542d^n+Rsq)@pt>2PUSTC8!=L;c|6|}|exSZ0q+bteWia0W7b)Pj z94KxARx&cUhn<0(hlplBsQp;5l97R@{08b?I&fZbX=Vk_eL(WajFpTGF6Gd)3Ueo@ zjR9RtwgV~;>tlo5dS)dfgG2cZ$a%;xJ&-aO+%$28?eJxQoNe@HB_l&a`Hlb9$o&U+ zT>@(UYy^7_HpZc|ijiSL)eY41Jt2K~=)5O*WET`|;5K{ADncTeMIEac8CYs={MUe|2hjKlsC@$-wtyas0#UnV6(a*j?T!C;KzS18Ped67-jWQ; z^q?~N!74_EJ+)}{61e_{j14xkLw0m}L6%X2^M=T3Mh1&Iv^pBPUK13~CQx~lHA#?i z-lLfnJS^Z3-EIgrFJ(1oe-*Sn0dp_3&IhH5meq_5E9!3iN6a%i!}bgXfkFtBxIlHq zn$?U93H3LS&boBwWdje>xPeO{Q2M*DnvtQW{s!dSOxQd==*~N6+3;aCBg3Bh8>nlC z9h;e%6~W7g89;0MMAk4e%nCjOIlm8-hMC)#K>1K-4I{&bh8vKxuwZQ|r+#LyJ{H$r z)*w)JU@C^TeIwR@_E+72oTUKsGdP{QHM4@pRsF%|&Ni%JWXNf}0a=R=QwOV`qQONx zxNcvuhLK@Q(9hQ~o?AZI{<{D3s}4vNDcYZw`x zblmt4+JXpKGX)w02IXtFURKBfsm#jY)DJo9Rbwq9gGtv7$Qn_YJ6$33hoG?WSj))Z z(uLgT^o6Z80*{XRK+_jUZOK|jhKjBmkb6F0W{VrI`$nd7?24w93 zOf9$#4>^FqAKK*i1RpF2S?h5HWPbMz$a*lC9?<@8=$zS?wTuiix}o(Hl02xH3JN=s zb&L!vx^F5TbEP18lXZ*?JG#-*vuiUmXd?p1eLHwV1TqY z8rCr~==9w9zX>@nL;MHsPy2I&Hwr<{O@x+PTR`^rK*zXX?t|z7hqWVQDgzXR;I#8( z9V3H9?+w&5eIe?>C9XGQVG~$AsLT*q&&Y71_s0L_$Zi7nkzIROL1W|4y>DR6(6yHy z>lqnb`mpxH!R;03iga-L1cgz>dPasNeK-DJN3jFc4hFTEz`Z%Jdq8TJtY>71=)dtF zRJP}vS04+PgvKHxP4 zpu9O{10#dSq#OUGaMbtAkd<@bJ`PCzkqwLt7E_2f|H}qOh8a_C{I5YaA71Z)#`X=s zIUm*rP}#`H@M0QTTtV`yPctjiBv1r6a)Xag1E;r;jf@O4rW3EeWg{bl#|+}sgW_Pz zMn;AoGj9CzE3kd(>#c)Ktq$DH1uL4Bg2uIHy~@~Q1T2of4Opl$HxP} zeQc3Uj0_U9(B_6v(hyh=IL(2=-(?dcL&q%W*Z{0-hO`U7dm*9oi%g)VFsPqWvWb!5 z#Vo}907$H36C=ZuSvTP4(SpS0Y+_`1fFuU;`-V-740mST_`ep}?_jrqSH!r&CZWK+ zE$BSLlTC~a5wnTc1FDlHHZw9@nT@|*0;zM@%*Y@!2fsQ{7-ei`WJsBFouo{AWVWAJ8^3crJ_SA1HBwnkC@$ z?y`lE!D9hhI})jV&YTZ!QiJm=Xxy!23nN3s;v4_(Ah-39)k6+)b>fCiLPE!2)@)&9 zU|5RQSA*n3?`Bp=-v;FVD_a;DB$nRzzXLRGfF5>`M!o>pMXr#!7M87y3@cXMfSg?f zRu9_ShO`F;G=U60*U6U~vTxM`oKI}FGBR9PedB)vD4f9hKx-!ZncYF-4UjejWGS6D zWbQj>Du&r{LpBekT$%|kmq268p!~6CDkl04-AnZ-Q_FkM~{J#>h~!{l@<$Y-&M^5mrOo z&a?tTgUS?^?V$Y_Xnuf{UyyNY@G@u*=>2VwwSE@c85vY|-S{7jY>#&jb2AI%lxp_CVX+;Cmh*YQQBn?C>k--kU$$85u6@ zxdGX?1?{&B>|kWLv*!lnUSY5upfn90e*mw$G}yt&aM~Sn-6g19=(B^7Az|+g$oW@j zdO_(hX9pug!QLDH%|QK4Sbjmt_uyO!uUF>mU}R`GaO3|AP#DA1Bd0B-b^xf3JF^3{ zzvBk#S^P-qnZT_>$epY|b}%w*IdlWEeiZ6=o}G*g2M!^(d%dCeN_0c?`7SQatjtW{gbwQ~N9<%|C^>TD|5;F82CD`2XF>f7SoebIHYf#xJPUGr z$4*8Dk>fZ1F9j{a0;>nD*N5H{1iloWxk`eEodeWA+p?39VaEL%kTC{Oc@K@xGdmd> z7Tmw_UlK{|!A?eoHTQ2o`f^Zze%Z;$u;Ts=$XT*ryZm|CKm*KBd68X=3@7g2_z$Yz zAbHvgWgnQyE=GnMc;rKNF*3ZsBVV$Mk>Lj(`6;^?88{x`wtvem(E3^AbcX7_E4vsO zG#=bQIujjL{tHxI4HQmb|0CoqYG@NwA9$Z+Pt4W#qn zLGcF8FW_UIK#h1%lxFN^Wcc#n2G;Z4TXr)t{CEJ3H*h)+2Jhbi>07Xyk>Sq+Xqp7e zLGB3#$?e(A$RO|#yO}q3Gct%g#55B$j__qSBZI_4=z1QonUFQC;KK=^?GK4Pj0`Cc zZ~UJPO6xE+@VW>zHq;7E?;!ty%=Fm9$Z+Kma+>nuWdkpY^#tGH4$l937#Ti1y7501 z9`2AexZsYSFJuRXE4UW`8K0W7hmpbHF{XO(h8a&x^=I}lG8AA@kIVc&dl(ruU{R0F zd{Da3*~`fA;qeW~Ij!Jy0|__q5R5A~c#{C=a9dEih}a8SUwh;KWVm19=>jtM|ESp z`2!E|x@eDmj0`2uZ~R{Z_b()Dn7~UEA!C|3pv{plZXoTGhN#JbuCMIb$H<`Y0y?J) z^DDTG3|-H_^cGZPf{IuM(7u^H`xqGtUfuZ51*%VA>S69{W@Cn&c$8L|k>3o=d`&JDSb4$Ae1h`OUt;V>RJse5pPYhqV! zFfRZ?c|fQDZg6?v4LuvsmmAz24**>Y=fl9j(6OJ9q2%L@{|Dgifs7xyH?uHHKyw=8 zLUT86@Vu-GHxsxRa^z+LUye38K=7In$iO`)O&A!$;w~yHelqQz*t`oYj=aZ23~CL1j%Dh4lpt}*yB#;EC(4GIDXzh zIyVGVuY=l`kmetFS`xZ`)!-l_!=InXW5bBL15^$MK;=E)`M`^p&9RvoTt-0qU?m3` z88m*~_>W5sC~wX<$jA`#>jvbk8E`mz@v?zuWFhgp;~*nL$}i}=Bv>BQPJ@*T;NGt* z_;4L)-|59cMusiFZa~JE!Rg%%I>rnhvj-I+;I_ZOAx4Ir-#7l(!`m&OatnH&DfB24 zP#FhG3pR%s84mot@jngOui(BoxR`MVZ?J;4DKZW*GO+x+fi!;V1wR7;6mA`d7#T$V zLF**2e?azv&v0S_t{kK<+;Ps{!3v0xI7?Q~97+2X9;g&p&|5;5&yH z88-aCfwTt(VkT(+C%8QfO{Xk}85t}XZX(4$C@jJ2Rv>E=H-L&A$XaKE!;B0%jKryp zIn2nQz(iOrs87&wn2|w*`6gt{3miWvWjDxk;IbZ?%|THBj;{lU85#bt+(d2jIzjUz z6ZjMic)#w=VMc}m)|;q%so`}Acoq#*orC-I5=R&ruCU(x{|dR@L2j#;feR)0c&5h@ zMusWuHz8|(U~%Kr%k0s^0=kP1yp#pj)-5^0$RNRS6ZL#PxI4hN5rEwRN@EL-Ffzn& z-26WUp2k3N)647)E|@W4@hRkznPT@ykOIn z8=C+9xxw4u!D$ebcU_J#GGqwf#8?vy&SUP7brc!L7#UiGZ~pH>i$_;TI|e)g42nol zoKHE%$nZk=ChGVmaz73{{tmfM;lMFQhCL!T{~IHxQ+S+%I{e^l12P(%u0I@OWH=*w z^Zy&TJ0N2{@cVlqCzFHALr|HcaGa5$N9^W*M-=nX#)iPVr66~j1RQ5%SR;P(zY1JE z;too$9=2w7Ch$NK_zYK&`3)fT5;y+~!_|Y*H_~~YOyHUf?*0wO85!nC67T*8#~B%7 zq;CEP-^BvYmuT)k3(6J{_Y0h0WQdU_&i$acasa89x%rdP`wFR=jH|-_kfH&GKCy=J>v-3ssvtBFyjOx!xYt<@G}lUV<~G+FfvR~ zz4;$x6)5^Z_2hvQj0`=hH<891+`#oMXdfI%&w~?;40Djo0kw6%oM2>_p?VW*UrgX6 zBZH3l8OYr%;BpvpJ|QTsbWSodG^pPEzXlXnU^%q405#xD43DdrlZ*@u>No$hA*+Xn z4P;o>gPW-pG|LHcYtKnWh6n05A#2Q_<75j?GBU_$+=QIv1Y1)A8S?~{tDqTDSJ1_9 zAora)$;eQk0nO_$_rcYI2lzct$*M%Fp9|;t9HK!OE4rt%}uLX)s z*uEa5{c3YgF*01xzKPUkaN}hI&xkw2`;-SxF*4lIzWIL^D2&1B50rnvbJCzjK{GqE zH#ky2jRKIJA5JkcB$}Rq+#841=K;lmz-dMX9o?IdwM5W3P&v)WP@#JhGA0K0Kd5d7 zwGTaeSRs7`aGZm}G~hHN1CQQK$b2SDEx1j@1YQ^bDp)}3Do!&pEYZ99|1Z4n;=#)X zo%d#b#taTmP@T5mG$TWe(arx}C}Y{6c|y>b(-rXkA`fmRaK#217Y6z9%4tT18RpP5 z!vtOg5XQ>}x_Az<4(ZEjMus2eH<89HApI~VM^I*UXHd(7#VV`ZX(@v0U09z z*Co(3K3mQ(GR&~LiPU~}=4Au#!}bUFMX#Iz-RA_2Ls*({Y-TP5c@KJyz>hPG3@p|+ z|CfN$9!!mEGc!2hdqT=9nX`-x3D!6NXT#GLq-+77BH+o*bPZ&lD`b7H$5}>(B{nx9 z`{ZHfA-9)igG0>&c7`Y@ZfnjmGBnuV{Lc>xV{CdJf|ITnH+1a@sL#9MEF(jVw6etdY@z~wE+IYx#QS47zg z$_p~*7#R{=Z^GB5gUT3#bBqi*uF&)ib2D_F2^>dm+~D;Kp!O0dohO`QWccHX7FUkV z%;3_zY8AQCGZ5U{uMdmysgM$~E+o9-Iw zZkckPk)gv6Q4fIf^osM03`hL1y9E?}C(bi6eDS;a|0w8^NLaapyf;--6qH&)MFe9<+S|4o6S;_&Z3?7N|Uk z4GKpPec~b`!<9UQpFv`GE;2Ga$h!$?%RtTkaFLPWO&(hL3Qp6I`*j2^F*3;H-$YuU z?#{~w-q8tJTVw#0mj_u4cAGo=92ro!1>lhf#X|v99%ZdRd|Vl{_5#uq0(DwJ<}J9y z$e^Q#y}kyuO%7ZFoda?c^{!y2K4y2&coeAl58lG>#SJp+%_T;L7rIDhv9&Svu=cX_ zF+=)jJeL_63JPwbj$uN~0H(Ejkn=JuE;BNGDY*GR1C*XX^(E;1+smN)Y@zuY zoCp2DJieTf_>=pP*(6xICV5nUP^h%}vN04AlHJml+vc zbTQ3OVPIf50ad??2WGx2FB?2uK^Mz|R~LA5LobB$h71?_a5Jp}+3Us)yPJ*aB#7_N z%>>?n>cPz{2QIo`@nLXQFC^d3dDas%YgfGdm)cRFtV7XpO~IDH`c(~$mgBDhQh z4dQ~-H(X(4IMaRezakd{1L``wKxq4|jUD75P{9w1!wpv$8Ip96+73u%CrJLn6-I_N zQ*R=zeRBo(2MVC;5l&g#k9Mf+it@(wtBOt5k9l1esdL3688D?oC&8srEF@f|hxXQ?& zGyNvgK1Qfs@X(G6SnrXmj12i$^xnD3$dEw5UWRLo3@%voN?c=PXqkQ!X>1SF*J);k z?Dm1U+2$G}gQPZ6euBC=%Ld8r;2?(1hiP1AWSBDZ=Kpk%d%$@c6ds^d*3azG z2RdKh2Ry3K37tc^aGjAMX7NqbHQnGj6v)yrPzn1D9CR+=GLhj1BSXF>k~@*Y4HQob zHy9awmO;Y}oS(gT*+2ub(6yKjHy9aWmfif{j2wo@YtcZnPT=d9Ap5rpZZIN z*z=&FNCr?Fj^QRF!=05k|92yoSIFwkz{Qm(H`5MKoPfH-;Phs3laawu1N%CEP$ebCZ$5U@cmn0N2g_;IYazHyIfc*53U8 z9`4paUN$G#I5lY1j10Ix2r8>VZny)oZzJj$%7>eb3^E&ULhdYqw#!&FtRAh$}~Vq{R+c=JDa9~!uC?gl@n3zQ};ZZR^LY`h7%rweIc40z3o8+a1;@G`#-1Mxq23L8`)fc&)OHX{SaPP940lt3$vUCqRfAHrnBg2OaH~)k0Uj~Px z8)WYx^mJKJ_$b_CWO#G&=6`eK_8GjN!~7I%zXzmW>vNBhAxjy1_<+)P&OJtk2e)tj zuL0#nSXhJ8Efctg03{kwn`g>BMh1&JH&NH9Izq>0p!-O7++$=&xpVXXDNtSkyB%~l zF(lra*_bYZ3Tu#gpmOlZJw^tOdx&uikiUN1V`LDyck};dWc}c}-y6K28hqo62jqM` zmHVLeQa9miDnV(%;yxq8lKVH2));}(4J6-z{15?^uLAiM=04EALGa-lkTWW3?lUql zJh+KEcInZ~%mh9G5VG%N!F@)CnupN-A(A<;I}{GwXJnZ3@FwcLVbFbiAa^{t&&aUn z;Z4*%uHY~SFZTuKQI-dc3@;wugxuEvw!;fLHwkYSvn6G84@1dMBN7rxtb27 z1l(^4c)-Ze^9WJrfb^w2U}Wfcbn`#T{XC$s055@ntgY*Kz{qgq(arzz@H`E=2LZbN zfcY0>KnGf1ZF#`Ru;a^$Z+Bba+?HxwxV}4D-(Fd3#ii% zO7jU185v@pqJ_U>Gvxe6cW%(p<=}a#j)#m4El+Pk&W{1R6_lPpV@dG!g5U-;r~v{h zYj!+jWH5P#78mfbe(=r|XYeI((01C3hl~s%&u*fgIRlxWb#G<`8|?)fn+L_2#3M$A zmS;C1XQ;y51B$Z-NE!!)lg%SWh7ZqfV(b$F&Aov99`lHif#Er(-=SA1g8dGPi z3>wdGLiXi??TQ5Vn?doq;1TG2KWLi?7XObJ89bgt+nfxLv+YhiVq`e-{3c`{8Q2U+ zoWb@sgWUV(5hH`Z3+(O%#VgNa(E6jB|G|5GVP=5mKtWS2;30O<@IAPFZ}FIs;mHfk zv<32a$YVx^7cXu?&QySz18EyTmXEtZ#+PdzGcq*1yb0Np0aFJqgCNTcAs2T+)|#() z%*b%%<<0*Epfm|?Z^8CBgH}&@9zJ#kv=zM>JdzHIzZ;Jk8AM*)gq(E_GaD3tE|B;G z`S;IbMh1shHz9lWk=6KuN>4X#aN`VmMuWx^MusD=py>^!7F>=%hf$$pL?ClRo-i`J zKsVQ^m)Q-n767^qiUC~qG(2Hs$axJddtl~5&!1ody909H)`};L3{PI){J#`bUc=PE z(>vr?bWo!n)TY1kgpncR?M>9Pw~^X$%rW3f-J2WfTt`s6@jPW@nDF5yWZgT=4wzfO zElbG#f+kNH8CHC}`Ts8{E@0{)ZUMC^!FP3n#+5-~k?@p}q2|-g{|2CP4W<@3j={Ub zAZyBdo-#5te7T8wh8WC#aH#_68*h2a$nfIZP00Fjn3*W;j3h_|Li7F;kbA%1MBPgQ zO^@K|0S|6iw;o&;i9BOusQ7X7e+pijFDl7;I03qC~*Uw zgM&;;sDO1q&r~RR#>l`SeCt0qvU=#+f6$N}xG~@f*$1=W86(3R;amT2BCCb;FTsl% zL9J+2u;Gw3h8LbOGQ5^L0~upQYg2*BlMl}r8EQmtLC(W~h7ZegMura2TmKJ$;uBWh zquRj)9!B(pv~#y-$_bx3;y zWDqEQUw8>xziP;FEyz4A$S=?|X!44YVTZ-7|MNj&VDq43lHdU_A8v55?F~8K738;+SBwlA zme4#0QxBf`gUl(k5RhL&K>i3+-V)6{ur~6OSBwlEc`8zQ~9A@!R#9fuNfIqtZyNmGXnLKD+4e54zLJnC1&vAhAW6c{z z1_!%akTxb*pBpb5c#pmekb?TkCn7_&<= zE4bAJIWu9)TSkTz_P74uLbeC8GB5ykyf!F&@4RJXNN_+`2i~R-37PCjhpbJ9p25iT zj*&sY@z#IPv2T!lKcKZ2Ap4tHA;q*O_zp0WcZ>`jPPZWA7SJ}i$2&%b7N=V%`>A5y zF)~bWx&_%^0FGZ!A05*E1cgTp0r@!u)0a9A&R&&Uwtb_+764jnhz@}7|)!wnkNuy6$($PZnw zbOkEE7?eK1btvdeDQG-`7hX7WgTe@WU(g3ehBt1v{)>S82v!RjV*;t;%0#o2Kw?O+A96m5IobkN%Um96Itj!ADmkA!c^x|fE0xDX3xWR{3d2vHl8@WSw zXMplJsBJOf10%y6pIfNwh+*b|$E94jK_eHSe&e1Gj11|5NavKWwlVdv^fH6u<;Dj_ z1{U92kaL}&aq#8?BZGnOEy!31RE*&xBSVhwEy$g1P%)8@j0`J$Z^75$f%1~ZM@EJx zzPJ7}f!cTAFn2>c`y1Nmf|?QWk&)p@AfoOBxhdx(Bg28fTmSVybpljf!$(GjJ3+S~ zYuupq>y(d-3_pTyLB;}Lb|Lj&Acqk;f=|%^rK2Mt_XgiW-TRHUmg&VuMh20PTd4DS zuyr{8kj*Hdh7TwXL_RSxM1k8VmoT-kv0(5mzYuj(J~1*#gx~rfi>wZ`KNfmc zJ4hH5o_j#%h2Mg#qk+yfT=>Mu5EFjuzZ%Fru=EUR@4|-k!2Ql2pBNcZBA|5-OdZIN z;Pr)`+@S4{pfXwEGb6*9h+F@`XQjf_A@x<(LC@9k_{_*q5_#)CXm1f@JP9-(+{_GF z^#|#<<$Pvjco2CDvX&iY7R>+PgBx97o7%u_;W?if83LkiLHc>%@bZDx<&eW)ydj4Q zgW~MOXGR8*=v$CJ9uBpWpl5r1`OL`hBAT$dpmeYBg^^)R%&q@9$l-~y-Yf{5@ImcQ zP#e{$u0fSQ$h{R`7#XI--9nvDMLOFYGTjEbLu$zvMur>lxBkZ= zyTPf4*}IvA*&S*-$gO9-Ffs@v-ugcUuFe&{rjltbsPJ*&X1WZie?V^i^M#S2A?eot zv!Db8iw{Uz0Wa|bjVFNAseEN*&`7@Z-w1AQG;Dknd`=l?Ed$6;K3^Fb98zxmuSPBl zk@GG1Y!t{DwH03(8K$J)`u`ekrZX>Favw8j*-A4Ta~IfK?vV2dmV9Moh{(M4|0l9q zaGwv}1%})&=*Z0kb~v;ja_1`}gF^PL|3^Un1E&elm?FduP(RxZ6eJ$d=BOj2Z!7SP zkzr5vt^biAJ<#@@$~Q&^j+|Tn!Rwg8%Sl1$upe}n8F-uiB9daMojBlXzRnUGQnmXnPSm;33 z?Hu{W$Pkf#>;FQKnc#b7kmlygdDuC;K`W#o>vleTV`R9Ke+z!cASm6id}n0fD7f_> zG+YU9_aMa^^8&DaplAk{9VXuy8BP@5`hN*zADY`B7ehntN{#u>$k0%Pr~^QD6?|u8 zs42Sje+#@G0hO2FHP^6nGMUxE)_H>0Y%ciD$S{HH%zsc_3*Ms%9^r$GIqdn)$nc@; z)_-N>bp+772|lNTxgNZz$c>xX4s0ZJ58IdTj0`X8ZXxZ(@Zx0yZv%4!w>d<9Ffv5c z--3+CLdRD%elRkm)ZhAl9NEvHG8w$A2;yI#AB+qF4XACQgddCyJPo%XYwZ~rz^NW$;0v`D_zZe-F;E)HUjWfR(89q$C z1v&c>>^@gsHt?DvAMkzwP?&!B#mJyD4KY3f5@Y$z$Y3$;7JU5!NKE24Xnof$l>H|< zzZn?}rrkoBcXId*F%NkzD&#jKg9e(qjNgn5DrjOgzZn@6(8MPEW@L~-6I=3|kwF4Y zY{zd#1`#x|Grt)b1kl7D{AOg}K@TtO4#`3p&Z$mS{hWn?&mrq1LqBf|+aF^|8D z3`fw!V*WzXJFD+rMushDVr%|F@)xps2mXTAJEF$NmA{M( zE70`5_{+$!1WoMEUr2sNHc#LmBf}gtbt?ZD8D^k~S^Q&Un1Uwe^N*2X0-9LDKSqWg zG_jI@j0_!UVjce&8CuZ9=KN!1Xh0L&@Q;z922Je9KSqWMG_f217#T{?#NPa4WGFxr zWBAX=kb@>B@}H3*15HfhKO;j5nwZUhMur45v4H=K3^8b8DgPN6BGAMt{xdR!po#VT zXJiOK6I<|~k--N|Y|DQ}1`jl`6aN_*T+qbs{AXlvKok4$pOL`^O^k(siNOL*OoD-l z!DQ+!$h~RMHh>NT6WD!j@HT)q^o~wn@D>$NTRDJ%2^>G*zFQ%mKpT@YWW6BlZdPbJ zu!4aJoW4=ifhr0|=pC+5I~Oo8fy;+5xSfzO67Wze^lbVg3{2qi7Uf(Ka2*ETOAKy1 zfaRwP?BEiVSP%`}%(pjsheg)NMHjGRR3#Q+Ktlfv* zw*}q529l3qWMVjgLmuRw8b&6D2h)+;VX$#i@Lp`_6anO}j1`Pb3@$TnLH3n_>o(N& z<4oXjQ^=amD~wDGH)ddW7s%c(j7$taW)SZGfz&E6F){3!Nt{|ACMJf4S;VQWU}9o$ znN6J9B}_~V9CL_Mdx43G;S7;#|1dEzOqffYxf;w&3?cJ~Qyap}#2_)BIJFJTObmC3 zRJ(?miDAJ4;>^9l%*2qgkT|t0EKCdD&ou)VPj&5SWTQ-2R0@KnKi_z&0%9=ctE7u8Ei}pOV$!+?h!U7 zhKzN@sr|sl#GtdDIJGkDObj20RO`Xc#IR)papsn=GciMj_-rLkZ4Cz#gTOZ8)UM!QVz@%2+AADP3^TS9 zXD$OL6GO}n;?(MJGBGIZBu;GvClkXHBGtBVGBK>!MVz@CIGGr7b`z)e4kr_X!5-q& za&R#*d?8Y;2^SN?j=jX0o501yP_vIXwLM%+3=aE=Q@ewUiGk$+acZA%F)^GVQmp_t z6GP8I;>@+-W?~39M4Z|TZYBni!^Ekb!p+2RgGjXpxS1H{93jr!H{47N2}g-jE5XCW zpmK~jwJtnN3@?aOTfoD_u;w^%=FZ_^VkkI4oZ1sSObjL`iBtQ9hl$|_k!lrqnHct* zBF@w9A}ABdx4jU;S7;#|L`&~OgKlJxf*;-3?b)< zQyap^#2|5jIJFIYObmC3RJ(?ciDAJ-;>^9l$Hb6wi8!?^{7eiQmx)trz|X|+hDfzB z{7eiRt`KK#2R{=-$yMUiZsBKQu((E?+6Vkh41b7J%Ok+VaNs&|=2{3aF|^zuPHl<+ z6NAT1;?zzMU}E68MV#6_0!$1Sh*bMRfQezsZQ{%o5oBVBxI>&;2SFwVnY+ZP%@Jf` zctE7u8G=js; zB2MiBAtnZ!$Hb{UBgDkO@Ps(EKZKYVju5Ff9d?8Y;i6|4pj(5bFn;^=>Q1hNRwLPLt3=SWNQ@cZy ziGk%KacZB4GBKPWQmud(6GP7@;>@)XV`2#SOq|*bF(w9)FT|;xBF4mUgGjXp#F!Z7 zd?n7@H)2c-3EzlQDBl_CeBw9RG+@dqIMU;S7;# z|41+~O!!Znxf+s83?U4+iCT*lBFV%c!AP9i21zD{J4C8oBgw?DfQdMBZ%8sRq%aew zmPLw*L4$=jwFXj53~z{38zaTUuz{60b33G%7)scPQ@cfqiNS)MIJFO?m>B*Lsg_5Y ziQxbTapqb`GcmMq5~nsrnu)=Ki#W9tq?s6axQSD{N1BP@0+DK8NHZ}^;UUgk5g8_i z2wvjUI><0F$nX)THb;hu;Q^6qXUH%yEa4~4+#@nf3>gB%sr?|s#GoTcoLU)KCWa40 zs`Zd%V%Q=?oVg{kObivm#Hn2%%fw(KLY&$&vP=vNqQt5FAzV#Jvn zAjibuBTk&!8aXBg0SV&Nu8?D5xI(1bD{@Q>GbD*KmqDJ1Ax4TgwL0=l3<}c3sg00l zVt7KN+7@{xh7~fznY%%ri6KXpIJI}=nHUV@h*Qg3)%}``w5K$#g z?G!~Oh8skxJ)p?MFh`9zbKfX3F(jxHr&dCVi9tn!IJGWHObjoGR9m3L#IQz_ICJMH zF)5z_h*Qg=%EX{yN}O5)RVIcvM5>KZWn$Q1Mx41Fs!R+e=ESMpqRPZzVL_bQ z2dYdAe~47eqsGK=z>+v~E!3D8TC9juo1(_V;9*Ui+6ih*3_Lc(sokT-#BhN~wJ+3| z7^c_~XRe4k6GMa@acUjZnHXg3iBp@S&cyJ5NVPN6nHZKh5NGZYbtZ-kN8;3eP-kM$ zaUxEwj0O|K2O`yaXfQEsaVE~(5)CGX3K!zkF3@0NuyG|$?HLUw1_n3c)c(+5VmLyi zS`|$uh7Nb)%ni_FV({@GPHl}Q6N7*!acWm+GBI2sQtcH@CWaYa#F@*W#l#TfO`KXC zEhYv9AL7(TXfZK7AyRFN78An?U*gQ&pvA-V(1CEjdULgXs;J! ze-e1Vm^U}mGUz@+8yzNwhS1wY?K#ZQVPXggyZv7sw1*A6eihT)T~KqU=rA!vgcE1( z0Uag=oe08eL3?N3=rA!bMBav+?*ns#3us?7=zJ&eX|L|wO#8tb1VQR$beR|gqHg~$ zKz1{R`rlynptZ6-x=aiK(Zu<&LYIjlB!)P5FVSUU(1^YL-vqRO2$#E=_k$1f0J-~$ zE)#=A{B5MO@qG~YltRvDbcbz(1i70K#P9}9?20}U!wWRA z7y3*LPte5v=rb`qKob)%U}Cs~CZ=M*#Bc*m%))?);R>3Vj{y_I1vIe)115$uXksM> zObjQ`#5xR^7>=Nc%`sqNIDjU$!GMWj51QB!115$YXks@Em>9O8iM=skV%UHt#$d?A zuqN|1%HA&#Lnek5Xkr?MObkoV^x7CQF)Tn63ovA2n1d#kV#vfW15K>LkcnYR=53Tc zSUrYJ3=`1QEihza=s^?PV#vhMfhKmskcpuMP3(>#6GH=<*at%@3^8b8ON^Kp zBGANk7%?$~poyI^VqyqD6MJC9#NdM__Qi;a!2?ZF`xg9e(|3S%Y)6*RFu#*p#^xs14A z%)}srrtXO`6N3br*bieS1`#wd9up=80W>iM6D9^8G%*tsCI${PF%J_a1{O527*K_U zCRSj=#PBBrwOng4VPg1!CN{%_iQx;H*cuZih7V|B2TYh4-k^zHF=1kOfhP9Cgo)t^ zn%Ex`CWZ%SVgja240q7PR7{x|ZlH--m@+Y3K@;;aWn#F1CYE5z#Bc^pti+Uw;RKpk zhba@o5j3$mrc4Y6(8M;FGBNBy6FXwc#IOTR?1m{5!xl8LH>OMs8_>iU%$OL~poxi? zF)^$_6VotbVpxJEW@E<0umDXgz>JAu4w_hs856?{G_eXZCWa|!Vm)R|3=`1A7ML+H z^q`4tF=JxrKodJ*#>CKqCU(b+iJ<{a?1LE-Lk*f3i#ZcR1)7+IITJ$(nwX9`6GH)- zn1eYJLk^l)h&dBO2AWugITJ$)npllF6GH-;*aUMXh8Q%lCFV>F5olsN%$XQM(8SJ| zGcg39i9Il9V(>u|`(n<-;DIK_VZp@Uf+i+o!NlNzCT3v4#9)Ia=3>FbV1XtUVZp>; zf+m(@!Ng#ICe~oV#Gr#FHpPO8K?6-}g#{CX3Yyp+3nm5yG_ea7Objw;VoxlX7$nfd zepoOuh@gq_STZpPpouA1GBNO=iJ4e3F>s)Xc~~+ru%L;>STZp%potY&GBNx~M=Sp< znHYYciOsNNV)%k4w#Jf);RBl30ZS%^H)vv4ESVTypozV(WMX)NCicgYiQxg7n1B@% z!yPm+6)Pr&8)#w{R!j_6(8PSKm>4dgi6vMuF`PjYE3sl?IDsbCVa3F71Wjy?6%)e& zG_egcM4*Z7uwh~dK@&S;!^9APCicLFiNOa= z?28Q(g9n-zhb3!0dWEfa$Sk{GBDXJE_3V3U3ua?Uik&j;JH3qEMV8+<4i0|Nu- z+{hSPNcf|iqXjxM1$<7XGdFm{u@5)+#HlcD$oVuAY$4^BDrmnm^o+12wvh4_S!{dngrKK{`I ze4YkKje{MeJ%^$OdNI8t^v_@`P?_`m>4!4J`Fj~6m*^{^xPcKxu#$2 zm>6bc--e%&3UU^>|8LL4ups;P|H&W$*tssC_yQmP>jpW!(vdrehn<4~WR8tJ6GIHL z9n5V^pmXU$?3oyTWZ#C|iNlly^)Mt&6xcH{6EPPyG^mCWaF^xBnM`+?4_~F6|f(J4Z4Pn?M^AD4boG85qvkGchRS-u`dbj&znV z_`F)sF*7dB?98Izb7ow*!6&dgax))-@|nPwv$}FKYeEH>ouCZ34CESBS8nE=XflwK zAziuQ^j^@hQm))g;LF%uxtUX88ty?QpfvLm@NG3nI>AQ)Bk`fv*uzYMyJZs0#N$vC zp;npz8kpcv+V-{2gvon+dlYv_f^Ij-S z0n~NyFlA1F$-q3=2z4h^E8NHj5OMI?->%$n|3eOlLJDFpn1Rru`iAfcg_2 z(J)st!&D#`{Ahv21a%GcMqPyU@R*0jAF~6xZ5c2Dm$^%W~z0UDVDr4JvV75z6?%0bwv5hSD(8OJVK;A5jT9`vFuAh&VGbNPN8g zUlmji!Sbk6KQs7DOjqzdD$FauI=#3-`O^iY{_|~&yA^zTSbUpVK?jgQ%Jv**CWe5| zxBnZ0@-g(R&IV^DhMLc}|IY)7fy-Do*tyQ&quE`!YeB^g_}sBI&P)s+KHvUd3s(y( zAHk<#fR5k;pW%JQnTf&U%Wb4P@IZH*_b~f3vm}8G1C`r9oS7I>P}IQBAE;m?=b|0jYpz|LYr zoUs8qb`*43!CBCGQ=mGs!G(z-=j(0A*>Yh2gWS>2?AONvDzuu}nf8I=%nN)VBlPT$ zEiOz99^Y>NpAE7DrU!P09Oxo6XuWyIg^A(7x7+{wLF%AlA6%FiY`))ypIr-zKNeRe z28-{v|0jUd!OVl4c@91^8I&$S;i2Qo#8B}4HvBG9keGuj6GP7T+mQ3-p>~A0GBI>~ zzYV!#8Y-6I%EZv}{WkngQcyinn+~dl`An@b%|3r|xVd)fn?g`{vygRN;3<*Dw4*)mSEFgE)Xt*&ku>8FJzZ}^v$ejo7&8(0!rG4C(7!rQo{+|R= z0}DsUk!Emv3f!0&*8IGUdUqH2Y-5N$6Wo{>&iuUnUk{%5f_d4Pfq^i13nAou^i4LPp{X18NAb2#*T&KGV>3{QR|`ww&{p%chlu-iawJ05o? z27y1f|AWtYgqh*g%k0&|(#*=V2Ba2rL@Ky_Vd2iikhl9Z%->}KxrCg&IXV<;IrXCX`sQKiNR?1X-HZ@G6$5l=D0I4eE54CVh1!GZE$B| zc=Pu*6LIK5*KB z+ge} zh+1oZz=MfFhmkn7Z#2{&h*MkP#l&!h2(_Smu*8drVFu@& z|Cd1d33_JZ4lgE#6z)6!8Q|pv=xkHanTqiHlE4$Xpt2iOp1$y6Vld&o^FJM)rXlA> zx-_#efv&CrjG{ffX`I~nP=h6#2~_V=l=_kT3A`( z*vt$$@!k!5FKdi96GPl~q%wlJjR{oem3T8ToZ!3jpA+OCus!hd0W=Yv2r3}Fxgl4M zfGh;rx568=9{$e%Vz_;vdKcW01eaf+cFP%WCI$w9JE&(6gX;tEIau!8;M&ZYJDrD} z!-au?;g2^HLxRAa|5rd}g3qsV<7ETY{w~K7z#R+ldC&fkqvD~IJ9i)#sORAi?YV*C z$Hj+<;fKJT|C2y*0WFgve3%$ogzrG=RH#^v4->-$;X9Br2`bj$!^9vXatCs+5j1Y6 z_%Jb4h(O&13tPy&10LKppwRK*21l+xW6qQtBJ;={ynL-fx7dQkYo%m;@P z4e>kw8$jU%t#2%RnHZ*s-+|PJU^6^<*`UpNP<%!BGBJD+ zzw;l|6@#1y?Fqhz7;@*YEBKt%8eb-c1c^KUyFu=NhQ|b7CWbqbcOZ2K^bE8mzDx{1 zr0)E`4zeF?7v!9K$YH;bJAhC4GBNzyf|}MqY5IXL6T=+oJCM6}koAIZ)O3g5UEvB& zuRMNC49C#S0G$!9;>X00A#(?Ee+VqSBHDBdK{4XO%`^!_`$1yHkvj&&gPiA`;>W~r zL-x-9*&u&{-QdZ~#st0#(F-;R0t&MpKPH9%`8)q_fYib40rkI^gUs^a2DxQ}9}@$Q z;+_A8kRa+I$-6PC-bW49eRpK=y0h z`9B|&$6#Rtt&_nPyK^%ufIaE~J~#M=KNCaP=F^b2JE&a&9sdBOi7)<43_o=4{NIb5 zo}Buay?R-^z?UCR1^EPWr-ecQ6N50aIcWFNI0P^;WWC@-0%^0l1Try57~c8cf^I(eUSe-hfZSsQEoYdLK!NJU%Lcv@%8lEZhn>Uq z7y~HXDFiVw^cdgye+uO8e2_9{UbaH8d;t$=@F^5r9e}D?u=;=?CI%goJOA$^tFPf< z=Wsg4~*c#BjkBT`lM$8uw!$ zv(A9z&F=hH0-FUs%-D^W4P=(nu?(I^WkCV@HiF#b_&Q_&@#Uzn2906@(#S65Ay4b zU?zqT%R5MSp!$OE9svbC$ow6_ObjiScmBTw`4wIs!0$B%Used}tbo)$2?njdzVp8X z6eqAW!{iM~SkO!FL69)dE2Cpco5KsQEs90td3Gjki0>#@T;>>Nys zLHUlkjR|}>`Qc-b^Up(>7=F0i`F{Xx#szS40FQ$QK#gMp-8AZcjA;Q_3Ov5+e++VV z`i4*@h8lO$^@7GW-h?tSFnHbhzXx>gI&5r)sSp&jaA*11D0ZUKw=aD(zi z=rJZpqmXF=sN{ttVx|HR8I+ydsQ=VbdB!eb&arz!1T}z;Gapi9sju z&VNRbpWyibd^ZFWxcGI3%?m&VgPpmdWgK{H!;>4_4D#RxU)|-7xIO_q&L9)c#PA>( zk#0bBxj{G+15e1E|I#4;!R&KwW(KEX4{oM>P-uE`gKyCSwFN-)1S#Q648K<++zv_} zpf*4a$o!By|1W~ff~M68;YbJcu6-X8WX{~vq2tp<@N<9kznpZFzpYHtB?pL22m_#=0q?te2BX9 ze<8?BSlol^Ves&!Gvr1*Us%{Nfd{C~63N8ifhJ}V z$;99if9Jm`^# z{?CWEEz$e3%xvJC;mpkdYD;X1WMcS{cIST~vU;a}W>>^L-^?vwdz`o-+1nqU!2g0m z#TC-l`V+~-V32+1zaG>NpfC}LVq);gz5}`c5jx(g62-(&k$vaCKXSZ5E@<(9U04HZ zEBQn*F)YZr^B-~V6ttWM_XYg9L20xgiitrd_YUL^AXxr^v}3`OdQRL-(7eNx4{AMv z(&CaRCWaTecmB5^hbu%6vn@DaT)CMIzzh#=re>%QA@gkyqL>(L3ZZR3?Dm1@U;Vft zHwA;@Q6!p);YZ<}|DZWF_DbH+Zrl4nrUV_i-9eUla{GdG zLFN<=L^CnWDMOS|pg6n|&BSn`><;|Ca!_0FMKlvb+w#-@LGEM#mkp4yW>B5a62ru> zqU_Fp4rF&b^)b8mvh=WmE{Xw{&;Hz?c8Ng@6GPc@q_PaDKLC;sh+$&LDZc}`Ulo=I zz%!-{;PR#*hKa#?IbysMRNjE}b;K|+gp}WboTUxc=gG?kju{VdnX)2=iGdqUAIR+o zVwf0W%J2Ml0)-n`A80HEyk7x)39bjXCpfS`Velq~iQ)XR(~xih)yqhIB92%lhLrL< z|C5o;acyP>CrWonZ`Ow!GOlhC%fzsPNVN&EObl;`Pz%Z%J+Vv-1{KI-Jdm@_!Pf@) z!Y*nB2MV~o4a#!|Vwo6fD(;}(xdBP5VIYr#%zYBe#Lz*4xu7&85y!-ErQ#0cen{vz zgiah2gF+>4yFhKifH)=woyt4^>yg6|;vVot(Qc3%2SH6!2GE^04RK5iHI;Y%GlR-- zSh{y@W(HSVZrspX8eF@2LMjMX$o*s9+)O>7+~5PrNdq&~efFPlHe;gI`^8=&&~AhTfhfz5IT z=eGs%Obj(Ocm8)H%Y*Ogft(9}AfAcgO%1ev3Udp1=FknpEpOtP7z}Em{bX?W$Qjz@ za{;%rc@mfy5^C@K??WyJn84$nPTWl3c?)p51LZr51SWaZL$b(?Dps-I# zU}DHgp9YByNR&dGZ#?2fDE^)oMVYj9-Fa$6#FziTR zVtCSY=YKqCauOD9NOi48Gdt5VkSkocnWuqGaOGwKhl@Wqb1qDv7o-C0PEg$QBr-94 zXvdwtL3zm_k%{3?`OlEvK_U~wo{l^JOOV6a34He!Xxs_pP4LZm&d{>yLLw6bPuHFQcF5{MV`yM^ zd2vG~a3J?Q{YhkEQ0Tq`sS}`iLLiBW!KWMHR?t|1N)i);NB5ooKj3}_ja`5{XfBWj zbRf8H_eo-6Q0TdXIxp+m%nV+<;|&>o_T~ncX5jmtL4IyXVq)m&xdXXV2eFS z%zj8&2hKDu+~5HwZ*Exm0q$1%fiFe|nOT#}#PFdX(WV87O-N>9(3yY;e^6dqlFY=Q zG2sqm9vfy4xLpD2tAZ~f1`YXu`z#ldnHYK|-1$Ep8cv}2dy>q=ATjaIe}9k|Ouu6@ zGq?%w!VRt`Km>3)gr~~B_lN2U~jET@TBFsF<++r-K&H?!&B87>eWg@~IAhDbj zCI*2?2r-b~8d8`T=1jWtKM&1q#i00dfea>tDhp8FTa&`X@Ld@`43*}2E9KoC6$RmV)~u`b3yKg)p3Zj4s?b68E}c@ z$jw{_X1IdKy62>V?$fyQe>HOYb^_n6=?ZC>?E;08BR3Pc1LeuhbQ;75muDcq-$`X+ z_&pc5-~WKzKL_DYP}~Znf$q<^1G#&YX)!cYfE)1OGzMxvnxru?bj-c;Uk6^sK<5b@?#_RZeGof9ceR32 zCZx^$B@J|6z#YhX9cY|$q%$#WS$7A%CJ+?oGU-eV2iD#BFATLCBxaD##Bc^p%q5+P z;l{c<|3TOAfs}&OMWiz^Tv>MqW&d7IIupYMG_eM#dB|&sr=&A6oLGm57m#@?(wP{J zpo#5)x=$2jDbybqu$cD*i+Mk=n8%X=@h>})c?ua!413VrY?8smuw&gF_?|gX+2N4^ z3BN{=URap`x%U&?cmmC1g5stigNZ?A{hj}^$m*bDp&v1m6dfUVs9(uoV(3_pT;3tf0NL>cIP6)i)1n} z>{yQ|>p^`7jZ7wnE$i<<)>y#uFm%4s1**OVU_Zzem;qWUMPB+<3B>7(Q%;wpC$nfYfK;b!9qGdGLB8aJU74!yeo^cjN}o z^8{ouG1zQFF3&OT0=csyi;1CS8>%~dvX~eeu*m5-n}{*c4OV6*oQ>>a{bu zObiVN5cL&E&x2ehhMoh^bXEsVOW+nCWGsUrkBQ;Tfjf}(ny~PItc3tiN4ju>hWH`( zr0V1`F*qE&^ZyB`9RpK~JohdF9&`j1^F5Yom1RVJW~06JhDu8=aDrGSYc;@qA8jUe}clO1FX4Roh2 zxbpVk2Co^^DPUsQKKb;2DNy(!jh}(q<{kx13`@@6`M(ro2Fy=L_oRb|Jp8$t)`23_ zi5py>)D$o=C|tbr{}aeOm>y7H72Gii0FOy5C}3jvbMemqCXl%>w>dU5r-00H=Vm$w zqMacAI8(sHkZ}19WZwnMJa9kBrc z2{I_>2#HspLMDa@SMK~@gDalSf4tlF$Re}C}d)|a|G41~GM5k4jd9(@L>vngU?aJYR3a?dhM9i+|Y3yK!dB3FOD}|zoLkV zAq9&ZNbQj#CWeYTcmDqZnFVtPIG#M3S-~@V&fvD=8<6>Tk=rJa@l_`9kSgR}c7b9h zhBI)j5OM#`{|}&kA55JKsGke%_JPL-y|^J0oIc#lF5qwp)BdhU&wVff` zK|q7IpmO~~2@}Jgr+5AzLsshvQ`^kW1m4Ey$_>u{rA!P9p56IB39i-$wl@P@EP8Q+ zC#XSA1+RVaDFxldt>5Fh$mw1XHye~OG3dO$^S>9a-x)gR z3W_>#tbn>X;J!di856^V*T{V}P`v_PqvGDo3R)BdSu@a5#>8;q^_~A-$Ywe=GgtDk zbAaa0my|IvME0JB?7INfJIrlNpt#&q#>DX8^_~AA$oT{|Z{^X<2H83S3BMO*ObklB zNc#cN#(_A>LH9pE$F!jHo-*Z33<~e={EvdW%afN49OX{j;4BEOKV8b17$V+5=RLt; z3fq?hPE4R>0O0V*DQ9AM@D4gw4^szkyE7$#S~8&Wc}h7GLrV{mf6?5!rJRX@<2|DP z2r6Swlru4~yhrq>Ky!+B%9$7#-rxCu899BSj2|_CV%7t?-U3uygVV7{1rx)H4|o1A zM%ITkwhn5T%?Ig(uGw>`U}DhtbO+KdfR1@ZR4_4^e7f_0H?kQhc25VH;Ko!#4c-%6P|3uw=Nq&=4(r=FHZy}qie15l zq}$77 zC0~?sDWQsqf#(-=tO6Q_B~?reoWJhC_wRthu%n8Jf#ug7$R1a47ZiisiO*B!_{U9ei{+G=M|fcU`%9>G($uzCkHZuzE)iQ&MnJO4q~1VP3H zA$@YDE|5M~Zl)(78osTV2|ViQ$_<`x(x_%)Sn>yX4Krvx40x%g7i0#~i5ncZ~-gGjoH-gS{Yr+5l27a2I8q_DBsA z!wMuZQ25-aVPe=KaQD9&JWu-bvO)WIAR$ni`%}Zja6sTLWUUq0ZrtNY8nsLeA%euI z4XI^fctNDvhFT_u8lk(8b}%@PxkKwy&>AN25(ZGy1zaw#sbymLAawUXs91-$k0TLb z&b%I6FoMf*P(5;|mWjc$4XMsU3;RE{ObiO5cOm<%z;=VmPL#PtaLxdA=s|I%Q^&;c zK=khaSb3!VYB+)7p`{LV z{_@@b;Je`A>X6#S;E4r4aGPvH9TP*0>D~VaL1j`6w7h4k;{h++g|3$bXEJD?>_Ht9 z!ymJ||J6VP&M>o~V-}FE`6jrdL189P&%~hIiapFgNz|a8iQ!H#BK?8%xYRQ-ya>Jv zS!WHi1De)AdQzbB6F}hrEdwj+nHW++?xM^s^wcvk6olOU4_*rZRkxrXbROqj$a)H> z*p_-Gh94n!|1*HX04jE(o{8Z}=-vOIb)Fz=K=$6LXJRl2y9?Pb3|04`o{3>j*xmnu zAVp9ymIfw<7h!iH^Ci%I$r24r3@qVyA>)j0&~SEaW(Jopj^IHdkHgTmr%MB9ed1ln z8XV|ak%$H+hAH89{~ra}0}B&S-LV~1szKIf)if|MI7Hn2e-Wexmi`d)dEosd{_q|) zq|DsVz{Kz-;x1&rG*}NTzku4Gkj=lKvi?Q`6GKYmUC5plnEjAG1}I}~0~N9EkOd{a z(2f*1-+CO4vkCF?auqgVF)aZpe5&Gi1QY5j+gswh3uX47e=> z8G~bJVq%yRd-p#$ZNkj}uO);mS_G{yD1yWp$ZZBqObmZw@50xrgUSV$CMJd-v3DW+ zsbFRx_Z^w7zy%X%jRL4_E@=X-r@V`_X33404LmpQ&F#X&&H<|9XEZS}gv8(dp9b<9 zEDoG{nccv9alzxH#s2uuIXOblNV@BTLh#SzR;5Ocsy5{OG7Yr7N}--YbyhUqVbq#00tN@-zY zkVv@;*?$0&hlLMleIfW%0?63Fgcc@-oRqu&E0O&G={JBgAGk(zg|wyjv@kIoNP*@( z4`{eMHZy}4U$}u!;yHW_9OU4pG`Ri!p@oToC-v_CJ;>%m)2bJEoCBP;+_=FrPLTa; zDy>WmGg6Vu9C$qjIZf9M(l_>LWnvIWyZgTk*=+C_2-wx2MWf(A0p*#BRwjm&w7dVW z!PR=g#umUsMsD1YMev}`G)Vo5Rwf3K^t=DJg484B2iG1Jmu6OQlhdD@3EX4^x7lvA zg3hbD`@a;V9$JRH0l6>ZE@Zq4w3h)S*9JO&^6vjTAU51w=-71+TQfV;N>EYh%^eJO zI=EgpX#<@Hd-wlNkRDiky7n=Hv*r|#a%b?^ZA=>zLqQfaJix^qWV{VLOy!0cJOTNy zqm7B-NY>r|ui^8bp!1=jXKr|d9Kw7VTv59~!g@y=6GKbEUC5XL*bSik0$%qIZd*7* zj?V$R_emQQ!-|5t|JT9Y3qNC{735k_g9S8>$kWcmU{H7$vK}04CafgsfCUufeRoPZYI#o5U4yo($2)tQ39fb52?aIup_|R1=_~_eUd7%2HX!q0_Jhj+aJGhQ9`)d6Y5}>z z1yaV%>0n|wP2C zkg*AvUlHR);28*a=wfhCnmN$Dx4^p5g#CqriEiql<~* zOC2=5!Tbsy!*_3HWjX>%6`-sEo`>4f#l$eF@-$=&1}Uk5!r(#|6T_eSyZ==|aSb;I z)JJj$btgTW*_nAjJyMX`KV3`=42^gH3nHt9_zA2SG|u&lhn)iycN*PH3||`W{?|iR zi#jgF1m2G30+}0#0I6@f`#%G&-h-D7rXJGqaAySh3ffQU=w@OtX}SB~53U}u2L!B~ z30xt8no!`hv7?)bA*A*0ewfyT!Rkoj$Q|Nll-56%Bz^O+~ZoC7vr zqKAorrQ`1ZY*7Cm7LJfPN?6!1w}N$efY*L{^e{2Fblv^$#D>&2g!Z#Qr8l@xcI9S< z^tRl$Wc{p+@LlmPcIY0glTB)SV($+w1q(l0=x{`ottSLByWK9 zx%4tI+?am%{~LJNdh)U%`JD+|Jv(y4j|_vxNe#%pnRg-cATamA`~zu>fDfGkC45kN zT?0}->n>!R5vCsArvZ;OgSzVAu)5L9#2_;JE@a;>TrD_%dxA0oD20HlY7cJko0@FDSakRQLD0S_Se=GaCV|^&j@-=cOg!uykaMcQ?MFm` z4~lP-ekO(+%kKV{M0O)`e1rQkuH4L1z!?OdeslVn7!Its`yX`n6@2{03Eal_0&frl zh13d2x&np8oPH*Tgq6grKhw{|z_9A>|5eED0*3{3X(iKUP$YuOTu?jaPd^hw!y0J2 zADSiwCNMGZtiAjH2XZ<jp_%3nnlz=xn+BzX=p)u=qtOBiccxyK+PJCxD#A z0E(j<6POrUcHI3R30hbQ(}x^K;K5yIZswcdLkQvdMqnZn!Y;J8Wg-*9jw5#=YrIk0?5@46K9IUN6OxWV?b;_3nHV&V-i6E!!u;ge z%nUxt(;2e<8#FG#Gl_}8;V5+c32d$_c%C5!x_(Ay5)(tf(YycCKyHD_JM}Sp^s>12 zuzEMML5`{e_dg;gF)>Uz3T>Z5`yV-zm>4b`MIG~Mn8d_z=O}cH5UOs~}57!-~n^n%KR3zL`_e2(4y-vx3b%&+h>yr7%#pyBvu5);FQ zV|V{A!%T~?Lp`9Uh(P**I+K|g3{KtsF9OP6VE=>KZ{YDv=F{L@;SN6QA!ITWgT@)? zxD2eliJXU+z_VvA+)NHU>>S{Mf%A@_b_~+^ENBdC&SWMAhO>A7AA#pBSbu~GJk#L@ z*%s&t8(#u9V_hNbj~kPj7^a-N3pwWm77pODz!kbC39@tsl<+}mgkuV5{SLG)g82=S zF2QFuf*Ky6{BAIXiDAu!yO8rI;O0Wx-{5t0F5FDu6(W!|X$e!97r3_uP~<|1&l4;m;3rGYC` zm>49k-9yp6~WAIlF)_?Q zcR!N(Ay9cx+#%}+4fBA)sbm@x!;0&7|9iv364ZBxj_pCZOW=O{oM}u97p~uhtak*v z6BM4{{)`7`AQq$)GzNQQ8WY2h>&S5fQU|VsAdLW@W_HNlFIVuuHK^?PF^!3#nD0QvoXB^mE@4Uz82G&7@pj``#%!2kOGzuQ0p<~FmRdR$j$r+ zdJrje|3b-hCWc2jry*;}(egbg{Z5(A#PH(J-T(Z^`5xvDmu5D|X~^#2`PT!}nHZMm zoQCW(0GWkos(|}d52iCQtoeKQ|4(GIp#6AeAFu<#eSXk50?!O4hKB!l|2Ki+1?DHm zW@d1$2R-x8UF9;8kK+YOoH29J3{+nH--FfnXky7#{qv_S!^1`^NUb(Ww`2D1v-LoVD* zKR_mf90GF3lNn4599;MQ+rr0|Kz%Dv+ZMcwhPeo=%LCje5tzxuAj5y}|9Kvyehf-k zbC3mOHmKYLwKE)MGBNCtzW3h=w8$9dCV2Y8&Sls&$ zJ|7k4Cb-$)vot|NUSP8sW-&4BvAFmDEwb70J_WcycZ5uAdxGZ@3}!JgIA)!Otj7YS zH|Q`ADE;`%Vq!?Jya(B<3bPk9=hFx-`XKwiXE8D8WFgH(Ft;&*%88CyOblBr@BL>$ zi(B|Pu*^2lSYiOT?{>^$VrX%=_kRs?oTBDG$Z=jy+|1{|I=#U0`(YLn!yngs|0g4d zJ4$@b2iGN_00Oy7VKx&(j?caSI=o2f0bGxQo423{&H!tG*1G{9^^y1fmm#-1;pT&S zoUZWn12Vs1HWS01GKDgiO4Bgxd$^zhW?*_>IoA3Q+ zM|KZ94}e!{fV$P-dWK~#6T^-z_fY4+z~Sh~4c;>B1Zh+0%w=Lw*m@83d<)2&5M*<* z2RC@Y7uIfxnajkmVC%jA50TrK;I!k~%LmFpU066R*Wg&QM17h|+klCQZ9hA;q%w=L=*>ewdJOJhvPe_*m zJRaZ%S*t2BkBMQ)o_mmU8R6!G+q&RF0kppcWUj+JCWbeA?)~3@oS$IkLi_9QKo0SM zgkixvCWf5D_x>|sY0E*BGtUL5Q0O??f_Y2~KF9CSvSo|QZe_*--Qtk~N4~v-3#PH3KI7|eJqgn z4!8vk_9i$lJekkLaO1;0$XO0Bcf<3tcQYH(xUIkfCI+65_x^W+!Vj(%sV(K*%nn(p z2ywH+0w#u>kN42lc!1lyF3qf|U`K$$I%5G7L(9i||I?Af1Jb|P2nsb1*g-we^@B4O zFfknYbnibCa$gHxj=D6ngU9+^xtS%w;Rr4tLH1l&z{D`;%f0_m$ms3;%s|RH{ zNd32viQ&xmd;c>)ho8Xw8w2W#K$BMkFUWbI>Hs`WX0VWnfrsJ2|8hRq{#CSiJ-`N1 z@6OExK4}M({XiiJ?rY>MWMT;5djL5b1=`nWSjfZ>!}kE?Jm)D3nHVzo9zfc3P<1O7 zGBKp^JwVxGx@RF1LjsaIP%^#%H7^uoE6hKjI@lW=72tgYUluYk%;0+fIST_x4XB3# zY8#6z0-aC$;6H4yJxEMr5fj4^z6X#wduTh>W)Ty^1HK24u?es_Uhp+mpngIOR35xv z1dDtPR35QL3swJ|MNAAI_#Qy|j#%{XS;WM^!2bZUP69Q*fc<%A5fg&|{{zVR>R|l| zylj4uZ~%qXpG8az2K*0@&MSxXvyl6*3X7Q-YWN>O<{F@JVX~Nsp#n(^R5o}lW@0Ge ze*ifn7Vef_W{(~gk7ibID;AvQK=zg_W@0$O{{S+M3w9T1Eg`r<22~y4y)iQuGckk+ zJb>&`hN%I?Bj~VV=v>&I#Y_wn1Rfx@nVrGoHIU;5JYgp-K+jWx^v6FeW@7jwfQVaA zJh3bRo!|QaX-zo99MCR8kl$36FfnilKKQ=|IZeUq(nv^phxY9QmM}5&2tGhvlLD=; zA)|ZX`Wn<#2m7;O326P>1EjT_ps;`rutCFn3CMjy4|FVRMVTbSoNZp347qmzMy0%7QDH8*W$bMaWVnh7OSjsB<%p&CK9E$}ZfHS>X`a z(G=hv0nXf@&OOw>QT|zX%EVA2h8AAXejpQQQz~>Vh`=%?hBIOhAZy0J_IN?pBlI>@RF~RqTfcjqtmN7A`k$CX`DJZOv)PvhWkOm?X_<&+h$Yv@~fPn1zv5bi! zMe@P_TOfU4w}aLufX1Z> zgYrzoawdirnFs%cK=mEWd~hG$4Lk$|tI$DeTb461RLDN~&jVKrDhDC`Q;%jgrq!Sv z<^h=#->{sCAx7@Oe^-#Zp?U7eawdiuau5FhhwFFdWrNq1-p%aHkPCA_9ZHaWUzRg5 zWGFoNe;@7_H(oa6b`1F19LO3Dg%wN;GRhDB`y!hS&ikM^1}g;Dy`XgHvx14iLFEDJ zJ{(Y)1>P+KIb*tD1rtMk4AOW7a~l(=4C+|H#PCJs0c2d9X&GoS4=4~oOAEmHY{d#D zhCrA;Xdd0Of{CF)^}+u@WVb=u6yQVPoVX!(K|NW)#2^pT3n~Yo>)$|O!LX8vVUF4Z z$Q}}SJb}^yXgmXal@Tb|!1K;JE14J`MxXu<+LOWnG6&lC1=WupE14L!Xgq-APiXxZ zvyzG7fX0LWa-g^Zn+@_3r2YZvse#Iah7LeVK;bZ9B@@FLjR%mklE8YLdD)<4K1k1o zl}rqGG*HX$BP*F0ZfHC}I=jr3mkm5Y7YrUFda{y%?JPGki!|4mYdliv-8mP*#WDV80Kg_fRCMm@=nSs zCWaYW5B|>pc@k_sBu~2{w^zZdDjmUn^eL;D7&x?{bqGv7v<`u0>7}470m^HjFgdb{ ziQ$L#1NfRmP+GjPiizQi_5;*5uV*texb}gbckpKw6N7=y1FY+IL1xIThRAP6b~k8$ zD!2r4;s%v#4y&0M&geY&e*{?#6L|5B2W+1S$gGUjObjKu5B|3ys{`c?@X{j4Inq6= znHV1EK7jOxVg3f$2QEq><5L?}GcnlcJ@_An5*MKMsz0Q`%5(}8G~jk8C_Oz`&BTzS z|KLC3el}1!*USt$triqF3~QJedh{RsUw~{LyzBr?NJ2NxLhCkzHB1bD44`EVtQ>@^ z2X#EaC!jiVgQr@&xS0*X#Ui+j0EJh<8YYH4Mh_rodBgnZ)XVJN!{XfxJun;;r!&?t zF+4Fst0J+EL!T$xw;R*^faC-6s@3nujhKZrV7-1I3-#^wc zF|-&z_^${m17Yq!?kC8D-3>}&;I^d3S|)~{;n>%OgUs_-%fygk`T*&SEKnK;k5xkl zJHeY~!0jH8UnWr40t)Lp zYnd1hSUy0SuLHRW(w_v64?*`1v8-ca;IM+$`LM8X0=Hd3i*LX&392_i<)y(oCWaWR z2iVpjf+_^?WGtxM1;tIwIwpn>Ru3R&JHgTlZ11KMWE`|%9TS6%^#jQKG0bl0z9si& zHYV^v)^3pVN!EbOvw^mEVQL}$V{l*Y%sM890^0}wCxX&4%sy}(4I4{41IioVb~q>w z{;XqScwmPpt3YA`>zNqt*gZhmo20UyiQ$Ib1IW59n7!aS(5IOdlGj1O1MX`FtY>0~ zu_vq+6rVNgnHV0}Klr}^Iqiboi|EFKSN%ZGwOO;CiJ>_Zdm04A&6)K~3=R$tAnR~p z?u7UAU7Fdzr*lEp+5TA1#1P`}0J44(o7!YhP(kKBRW>j&R5(0<%pb$m!ut52v#J@u zb+pe0CWZ+Ph;kU@ri2Yl3_Te3!1RJw>VnG#P+8Tpfr(**!-M~z^@s3zBXIEp*}uJJ z0~5mohX;^731D}C&Y=UhbK!A%VFMF`jpGBzei~@Lda{9u;e;dhdj+D4n}(WMas0dhj27{twt)uHgAPCh&wT zWSv09Mkay_u9C^8n%-`K@Oc~nX!?H;fwPF$Qo0ydT8Gie5kbt zHxu|YO&{>NvqwPgcX@!c{s_{4W10;y5S)R%xS4i?xUSGu^UykwVG|QWjT`npHYklM zY+_>QaeMGT1vEYlb_c}W;P!POs6Ed7A3EXz&VvD)m>A9kKKNe%8h?SQM=n>_!iy;I zdhCWxObk4s(D;I>2e;v%X#?DjapGojhqRkO@wH_W6GKJlga7Y95dhNzD)YgY!Z<@0 zkwWfRd9aCz!6ppqKWN|a%O)m+I9rj>k^xp7>C?M^`c1YlF>pjb_+Jki zAOeRU=q@F2TK4Q^_3UBuX=Z1h4!&~{G%O1)7c;gnF@&Tbm-CSH3_XhzbX*@O1i^W1 z3dsDl2Po%Qtk}ZDAd>a~GG_|yC-2$9#GsIdI-Yi63loD*+5`ArCQzCFWD666M;amx zfW&@mVPZ&0gN_|R&Ewh1#L$q2XkUQTDQsn8=t+A3IlmRE&SWbS!;Ca&8yzazv%fdU4kZp~IEh7Dd$YdMn{&Q%!gU^w51)m`RN|OQGK=-9TfQ)Uy?)n7} ze|d3(mL$0!gVaA2+n5-pWIXuK2P!9EZi3ePpegQ&kSqpv|B`K>^T(0fC$KSnaBJQJ zGT8;mj~BKvF`UVM0NLLG3lC73*LqWwRyn@HMxR{JWxJV z+0MkEk&C^b0FrkhAfE!22Q3wV)NAhWGk`()vt>IIgGKHG$h;3MERf>|yxPYFJpa03 zI}^j1Jm`26*ng1o??C39+0MiukpBR3*AvVf_*^a%ct#768g97Aw8nnlxhuN)}1>6hs0AF+gY0F6L1nnZ8olFdCaOj`2lZjzN!2{HDTV3IM zFv0chft^eYcM2Z-?}g`Wckp?d;QARlp%x6TT_E+^hn-9eHbu}eJ6IZl)EVH`3aHKi zxm{uxXg|vX)VoDpo0-8UjXFcx<2JjP7(Nt1%SLb<`ohN*KxV{1p6zDjaq*G00Rr_}>K&fAq08 z`1Mxceq_OJ(0S)*?FDGN1JqWSu$zftPvwLE9-w|HEX*Klgux3A+?&~%XM*F?n;WvO z+!Z|Ecw#pb!|0R*#0q&!K#<9SI;_lE}t-<42ptAbUZYG8UH4l)^(ge+ALBaxj z=?rw7O=S-g!;hK=|8qcQgX7tqmkoB`E_kI4q6p6pkw)9|AE$i!P+9Ak{^7o5V-6GmDLOOFfrVzd+`4rC=G$_hVPRDkBYc( zGl3@{KpH@Py0C|dp{M@A|2RRFOUM2>KrU#Jw$G~<%)PawRafO`Y z0BSeo>}6tbXnOEp85E9SzeCQ=g)AO$gB=_Jt}Q`{5bXcGObj;7(76Dx9*nh;;I2Gq zzz0;WU)amUz|(>}x915R3-kext$hHQ*Ye>12~c=~%?p9d8G(1gxx)H8psi)#_PN47 zCWbpL5B?{>-3)49faA*tyn2cWyg$$fHr@jYw~&2I3><9_{%3*gfQ1L7pAH@z0>uF+ zJZknaF$A&y{cfdLHF>1(ky8B0X#ne zYCeP2-T|54{s6LG1Ev;YK1eaRHUTLHr3a4vObl1rAN>CdPdBc-Y|J&_wFMwGpt3_} zKNG`-t_MixMS$W0G*0geT8_vB?y5k~L5w@bCAc~K=Uij%#b6~T)_Ryii1oHA#)x;_6mc;AC^8KHwSgz%m1A){WImpByF&DQQP@a5okcpvX?t}lcFvATzk^r&~6cz%9 zm>B-deefUUUNl%)54O`8nl2#m;c$qFVa>b;kb7%j?sEd~!({>wp}0ZLddxV)#Go=C zIp0Fl54f8TF{|eg6T^b}46^xqK(TUrvvEZ8b~eAVI~HKMGsK-z96dw=LZk48!QepFv;Qt}y z@I<(w50n-`16!c5PdUuQP_g8}|5eCpVg3Tw{qEp2(F3x7Dd9A+0{P$5NhME=7F>9Ee;JGg7Fg|EgF?3wf<|t@C7j#VwOfAwpe#}uOh6^j8ZCmKN zrh=nP40l#M_|J%(b|G~m6S%$L1(|jZKw8iU^23UwOblCAqUAGae;G7K4DKRA&ttoC zl!-xO6}0|^_I+L)WnySq_29oSN*MxF(!tNwGSZY3&89Lw`Dz>S(%{c#zEVr2aYi@$gG2gC#;-@x)pMQn=?3Xy*S3i zz_K1Xt^qUCwV4^*>G1%cy9OS65;zVzpB|B>K<-gF&cqrW^;I zU;hAd<`2vaCh+=2Q1u3O=Z@n{3{Tc0`lldwo;l9M@L>Ie|M8%;>tKD(sQXaC%U)f; z<=2nnObjA>(Ap=EwvkISD|lQ5+)n_xN96<)gU23dn;m8@s2>Dg9P0^gr+A!TV%W0h z!T$%y>$j25rn&)6VW4IzxF1w;f{Ed+4bt7TNMoCzdT7Q8CI*)y5B{$JU8(@H6X`sB z=6T>{)Sx5-ZtI;m!NhRn40MbOrXH#6W)=bM`i87+{&Iqe;l$Yo{}n-PDp;C<&AWgX zDKUQsyB4}m9aI4*E(h{RjcDy5P@gvC6cfXW#}6R)K7zyBo0komN5LHe z4{qqVH@Hy-sy4y>?>VQK7!;m9fZT-+_KP16AZNM5S*#p!wq`-ASAUGnS$FqXn>T#Nh zVas#0xhuzJW^ijCTCV1tW@32o`~l=l0GN9qZTZ)rmQl0cg?%B!A-! z6NAaS2avTou&{=%fd!?FA5eMlU6n9-$Uad}-xJ()1+|Gm?om0*#IWPt1IT_Fuv*C6 z1!Nx(BF<5+ffV#FBxvYu@2M2iV z0Z9FlvrG&UpB_N&Vg;LxTCOu&gVlqI6mXyY%2_6c6`vpcpATvffz^Y?Ig#dPKvPbK zz^5vL^?>}yagK>WgyrG?Z}4)+pO=mK8fYIpD1^azMCTk6!w0s9kaeQaHju+PCI%k% zhmiReuw9UN0PPC_S)Xu@i9v?_A$&d^Bvx{ci9v$>A^iRrkXQ%Ee)fkbYo6zvV`30M zQU{9H4N&{QW9b2)`3X=T5i~ggxg+5M)IP90cy0nJ?{W<6hY#nN78 zV=oPOFEc2sfWtT70uw_G*F*UEoS?Loa)F7VgX2w`{n;#2~}{5NQksG=2zf$70<5a_0gQ!v-SNa$IC$aN!}& zT$77T3^#~S3##7}E;2FX@IFLs%R$O~@LnNMWd|yoJ1#OYNSK_4gd3<1g|1Nqh2N5k zObjbf%z*Ztp=B&+J>rRrObqXhk>-k__g+4@$i(o5_u>B#P~w2DCH``eiQ$^@X~_I4 zxIXp)$2G_rUA_O1)7sg}m zGN`!>mzfxRgotym&SfSB1!3aUMqFlM_#*rea<(cs95MX{nxF-x>6Xh(3_C;~BDEJW z)joo{cf(~ShC8AU|6Akn+c~J(JC~UlK8O*gmg5Q&1B(Q4YE7;%F-S-f7Y+$mm>Awj z5*KehSC|++ND-%Y#}y`qFVe)h;mH*yh7&S`)q?6;fvZdmb7UVP-Gku6%LeXyg62`c z3ryU(nZ3cC2~gZQTxDX=ktb|6NNvtlCI$ut;?&N#%EWL*fpD4tx%tRdCWar14&-3Km>6~_KZLC91=sP;ypa88BUY{_*dh6>e(khQ=}utT_^qd(Akf5vqth9{~IA!m6) z?t*fKO|F9Ce8+Vr1{Jl3|1ZJI0kk&ZEN~qUYI1`6+b^y&G4SYNj}uTm#c_j)VT=01 z{}+(M05(PmzDU;*yq4DB1`|V!#>4-x_6Ep5E;pDMA~YVNuG@10$0z8B2JjqN#tkNh z77etvj#DqQFX+%naPQ9>JdQBo1{1>@jfel|gZu@HH>AF~M>9Lq2T)@gy5IT$$URyQ z(auT$^;JE<=bV7j{yva;N67w(4>yMnZyauxqG8W?6%nG~c z9VVMrnUU#H?25QUJ++!5;wBTr z7yXC-<&no{kn%4Rcs2~;ZjoC|44<{JyBlPd$t@;^6J`$~cjUm_1@0F^$4J3@GhM** zMhUl=7-GyHLe4sds|C&1xiqtaTXxQ{jZomjOF`*r$}J{_9p(>_<`n#R*_gnCSMc<_ z;}#QxiN!<6m;=~c#NG;!88@Kvi{R#iaaESpu4^H9^6N8A&!~chn)q>;L z4KnQup6qnthP2_`xtYLAt9`&_M93W`h84CCA!`VsWp>6LCWa@r4b83fN0 zfy)R`eDvI5Vom1+KpkCBIrrfX6T=+)hyOQ$!Yvcje}v5+f)g!h2nIZ!C~=pG!NlR=|I;9KFgpjTJs zmxuqaBl`dg=Lm>6Q*9zxEq zg2gLj92Gq4?gqQF8`@V=xX;93hHMVBUj{PE<~|d{0us#1xzEJ#MGYw|kj(11&&2SA z1haPBXJXid#Vk-hx^kb1LBk!jj(%~Ui9yBvA!J=9*x!DTabIw=!v&mgc^)t^Y;b=F z-@^vVFA5Ks81}e7{QnQ0Ui@HZbnF0?VxaW|AUi!CFfmN=KyQe16~jR7sLGmUrPi|vY?6q6t5x=nHVIzAO7cr z+Xvg%3Th63cayqtGl5Q4hU96NhfEAVydT2Pk^+TC#6uFKEx6nuAsQoc*Mle687-_8Iaq- zW_a?lL3Y-Hf(@M4eI79}49&A42v)LhFNyM@$SV;n1`JHV-nU z0iIuU=LWYK=R9I!2nc_Ox`xKFnHij9-MMo?B^4;VjywXbuYdR-<*q4|{esM$;1U!% zU-9J;6T?a6(~$E8(ZUOqPDCCvG5m;lh_s&)Ql2M*61*!n_%;MkxY|5sVsMCj2wA(6 z1g%TJn=K$~>0=%Cs7ZAZxZ~*9TwV0o$-W;!2{VGq;t(cVX)%~6T^}iwE7w1H*oNR>U&Um@Zbp( z0~fM6P``oP^XCZ@gF!5D?$LP4#BfFtDU6WZ12W6wDHFq#*oXgH;9(6fTfhq%-MOtJPCI*JMhySJFIBr%VhH35fnWNZpO6Obj7tVsD-@F$5$a`aU3a49}Pte9**1o-r|aBs_%grv<6g zc*exwf+PkCTbpN03=Rno|AVdrVgQ#@kh=syauHDV;Pxq4&I3Hg2+FS|&zKl86425V zbS;BRGaLBu2N!N8@F+MapDlUD#PB2GA=Yz1K;|8J#>Bvp`0)Q}P?*5V5@`MhPvTt)8aYk{tal}2Kx_` zmO=ea#NIt{?tqqM8PAy*rX)W^-P?<3PlC+_h4X~xp!+o*LiXiB-Mi#D6N5&|!~dYM zeaQX+FZekoptN`7ITM3L%ESM`ApgVN0-A4z_Q$|AHKcF%;W-n7v^4FcKKzezmnPg#;F(=e^8ma~J>vxvgGt&$)H9;t zb(&W*JM#u`5e-^v2@2mCFPIoqG9Lc-1GR}^euBoSYY&@mGdr_9cyT6l59^5+Objkr z5C0?X(*VT>sGsTI%*wPA6#w9Q3RHG{dBMc+BkLj3Tsr*RG4R3%kV23fWL`2cBxFDQ z-+&yhP&YvK+d?)8gC;*f>Bi?J6T^m_hmgI2;B@26%LZP0?adA9mx0o9!AmBFKRFNo zXMi$2Obxg%l>}a=GT|i?gHP_m{~gHkuFyM8T)CM*D@{OgzT+hm!g@d=qi1(aTDUNbQWlp(jNAZ;Kf@MH^Q|KftzObmO<5M?na4Q+YN z#IU36;eTUzc=&_&n}T|WpfcjhYbJ&pWzaMRKj$1gN9NJY3XTjn@MTnvptFY|W1t*w zm>5LLAN~j5kplN4xPJ~FrSanicX>hC6C5TMZzvQ{x?8L1AWZyy)59Oh6!ANdO+62dqK{R+wg{oVNK=3|Hm=T zoAUy1J@jj4XO0H9jvcu{=hr@X!^Ggz@bJGLa$1ItYcg|ziyZj*$>3o~FW7~j;O-zO zO2KJd<1G_|Nz+5rGlL-IBKU3%aA^lUb`ew_fZ`$MEfYgQ6MDXb#RKeqA8^+Ll+?lD zI^iu7gHAIvoZ#^Q-izC#CWemAhmiI@RP4t)CWe;I zhw%A$P`>4P&%`jH6L}0AbO$M@4ryj(g04^mew z#8A=o@V`BL4Zc5kPZszN13&Pd>3nb!b%M;7w7h3x=;(WhbWWKUFB>Q`L*2UMJrl!< zK7?CA;kDyE6T_B1L?0g{cIG`3!v-WVke?pBXJS~>2c2suf%Z|rb&?Nw^wu=DU zIw;NF`M|`mVZuYSb)=v+8u)nkW_HMq4QJ%JAc2oe3^o&?`Ogy?UXU?&@K~NRcR3F` z_-Y8q8Kw>&nHYK|Lc<8=7N=fjAMkl5ko&DuJ~A=9mV zObj}c5#bMNyNi5cV$hfjZEuEx!XOOXb_a#2!6zmLo5>F$`vPHpfrJmZdh>>K27SO6 z`7uE1mXuFS3>A|fLe6l7=|PGwZ`kG`Xt^=v6BC2P6tub-tR6h1>jl2l3ObH(;1d&r z&lI%21gOpjSK*MgzfV3fF}#?9Jf8q6M<8nwz(px^ohQ#{CWeHm(D4Rvy$KI5@XCL8 zZm+|hXTY~Yfy-)}&rA#xh*S?s*Eye=7!FK@_Vr) zAmcP^J~J^eOoOiF0EZ*oeW0V+!Rrt&d}d;>nf4HJrXko2xEk=5K2SRP@|lUDW7>+&2w9H@^CNg3(G9$0x0#)30Vr>QDtOQuRgSMr3`gcZ z{NE2cPa0+yyv++*Fed}H#D$yrDwqMC>vs6c#2~X6x+V^+&zqMm2-Hi2r2T}iObj}U zAO8OU3OkrP;B9Zv%6;(l3g9*@$Q={DGBLba{P2G_vY+AZ0JXirjYBtXNS_wmMzvvJ zU^wxWiNR&r!~fGkjef8@K=W3RI0e@@7T_Akott?A*!dpZ%qyS_@HxvI--cT$W3kF`WDoVcKF7`aA)(w|J5M>!R&?i0U?JFf*LoV`XuKY6NAB) zhmbSgFx9RHg&HUfrhH>!II-p7eo0IfxmQ1VAYX+?Jd3gNZ@m6ryedwHG%0 zU}BI#6FUNO|EY)njlen~WAZnCFfq8CdI&kE9@>t2^Mi>Y;nYKvGjth#GBL!Qg0?lF zb&AMOCWeet4fYi49WMYUo{qX-4ko#d~f$Igx4op98Ch#FkpfKFQd-Eu@8PSF}ykR@IUwrUa0@R{A6PIapoapz5>NQ$bxuK zUX}R8#2|9^A!H3UygY!F`Jh$SkZ^YR#l&E97BQv>Y9oaFVq&m3`|y7@$UktsJl0g@r#LJ0uN&Dpcy(&3zA#%i-{rP>_dz*7C`CYz%M3-n6rpD z1@)`1K-EWp><9Y~vX{7+lUh{J#!VmcaZBFS9`P2V_wt$f(IW{v_g7RSyWDWw9b`JbzVz9Z0Hm(RB0r%ntFPHb{1|KjEQv2pN6T^gy z50Uo#Li`NAQ<+&DT;_l(6p&hpKTHfFmmmKBj9ex__iQk40xJcVYoPdX`NPC;lM88V z96II?s+SV}Ffp9D^6>vP|cCh$ow?%d4bU_(8*nO1MO#VF@`? z!K0Ve1AO>B^B?d%2;h1c6#f!_nHWNzp_TDa|1*J4RCWXRza9QEG4wot`2Rk^v;pMJp51VTS+*?NJ;67T$FVkmg~@c%rJ`7nRO`~W`U#sxe^!t#%a;l;a$ z|DS*sb-~O;jK?!;fn&ypo0$zf;_AfBycaCu&CRR{X81$q>wNw(G2G@j4cU7HnpcC5 zErSP*!SMm|L&-lThKwH%|EGZ51+x#)X4nM^GEkofRA(;u$HcJa=fnRtAh*H%fLfn1 zdx4$h0qJ47b2EU_-Hm@t3|p8U{jWl{12&H83n_qn;7dfn&3jL7CP?`Q8aI;o&&2SB z`O$wP_No`c)w5t12e-H?njXQIpA}kyuf`(PQ{&yC`=|WFf;h@JVNbXx;8U|r&V1cI~G7?11L=PFfcPr;Cb}_EXYr=bOcTta4-D_ zInIllsS`xIbAvlmAnoA(+aCsI1_gmf|NG$MG@vkr-E{zNkwLF;^aHp1bQqZ#8blub z|Af4T&Ix))HFQ7=Y@s(dvnV)CdUJ#Pn8L`+;34zqKMRUGL3K80s2e;O;m@SW&$7A0BQm;WFHm0)6KNKt(RU*`#`Yjv2I84^?W}{K z0{H=!j-hR6H&9213B1}9JnsamXCE*zGfZMZ%6~|6eV{U!fti`1N9)o5R*>B=^T1dHa?XUAnc;=@BgotZEG{7JHE<>XRU)A9j$vkIV9vxFB%n z2JbKN0T1*;?o4{a%*X|f-*SB-ytl_3^yzv{eOg9Rw2swM3C8_ObCjf1{P+9 zIaZJU=Y!NTIe^Ro4My;=bGRP^$uD4GW_V-u2(rcuTvkA(-Hw67;Q$LWgOBy2{}IS} z7#hZ)Uh6H8Wj@?Y;3b#PGpfI^Ff&xxKZ5T`1C>b}tjr80_KzTIXu?6xfRssK|FbeP zbl5-oFAQ=c%>S&+3{&hMLGGRauWf>;2jz(nR%V73_KzUvAi?4W(sKf*W008@tjr8g z>{0Vq4=Xdn10*p}ST0~?X1HVj2yzEF%q-X$x^9pP3{Gvo|0U+@``CTz?M z7A}we7s1o2CwQF#m!W$B$s9u@G4rEn;Y1e8D!iZ{pW}8^9Hrm z!Fv^hAt$vkF9e@23NFPUeU2?`%nUz#AHmlXfx`0y8#4oo-=qKFI}@Sfj(6CY84Ua$ z{Z|3G6PCA~`k6yPcL{^a3T9?-h=3vmlm>X%nHdcHA7QL#0Hs3>c4h_>|3^q?W%+{V z+(1|7faE>cnHfs_A3^r?!|Vc=2@p4Duro98GeFObfx54TotdG*|Iz|N5Fa@^)2|UI!H4dd=&*KK4)++Gnm9f;{w`$U&F!7 z@ZjGm$R0TcNI(1l2Q$Otf2SaE1~xO0mkl~s0E*KG9Lx+n@sBY2jv%=|9Lx*?@sA+; zK4JSvp!r*ZlbJyz{t;x&Nff9&fb1&==`-PEX3&U#1X+7sj*tU|O8_S`gHQY;$h;ER zJ<#$B8U_VW`7NMugM~A49Sp7%9Km()98PA22l0q<3KT9IIGGvl#6S8E8s-BT0jd*^ za56L8h<^lGvjMXcoc18&Z_sPWKv@plHv7WK%pj2f%|Bo_M1YEJ@IC?oE@lRqgh!Bj ze!yn=^0I*r@PMXS11@F;orFh_HI!hzpg2VIcOY}^-rTVHg#<2UhMELKz66C|2^TYi z-``V^@)v9dVr|d_E@pvs4tgnHg%*9zphCK+~ZKH#5VI zv`3ILQlVlV+{_G5(h%i2C|+W?nHe6WJ^IguR{ps5u|NhSJ(}4ecZRuu+etm#%nS$8 zA3@G5NCc%TFZft8DBRY7%u9a+*$c(w4pIP4l%RBXf}5E^Bm;Z81NCQLK;^fB5)CYz zAp20k*S>)Q2vpw)@Gvv1$#?{rKLE!+Wc(gH?%>A_9=igm1^Lg0hne9+23kE2>mz{= zK5*j(-)iIondi*mVP@En`3SN;2J8k8UN&&U9&(0A4-Yc~L)IhIbtFiA6i{%1hc=+= zIQQ@{Gl=|#mIt8zCQ{oDA8`5wH?3?jLYQ18qI=RxrH2JqZS4lgrXMB7DpY5qZ!y7c3kgW`j3Cf)s+n#DE(E9{qPf&exE%10VQiz730QNPGAXA2UNi@gvkb zvf+9ly$P@r+@Rw((7Rhr_?a0hN*?`xf@~LZ84f z$6#P!0G%0n2Vwl64Q_DUf&5z{$jtDg z`4QyY2k07r4nbyyk``z^12Z3z4!}hyC~!e}bAuo=!L7U&yh{@_ZU(9= zZU{0nNPas7xz`*NI?(ZSko{i-nHe%#5p@+vj6;Z-A*B`C|ADrxWQ3R*8d@Ly2bDMQ z@(MH-16?~{BgD)w0Z9+YoB$zahBd8^Am>Ox!!t#QnPEpObi4=Jj;Ih~W_Z&2=)XL2 zctY|Xc<=^P)^7);D(F1x3L$0&zpqICK`ZM|2r)BkX?yg49kO}waVpPdc4j$n<_DEs zApiUjVrDSufR3kt(8L~;Z-k-+sri!d|8jh;u4`6h6jy7RKZ zR6*N~D}=!GsA=4 zN09vsV0$5MbZKS*r(ZX2$X%(R`b|TGnL(xR5$c>hXq*Q;%HRwRBOeiFh6#O-{{IK% zS+IHTNcS9oLKJe&4=62z>W>-`W`_FD*y9wGhUbVdGdN6q1X*Xr6ajDVfaG?FFf+7F zgoZCuEL;v0w^u}%8E#B`^uG!24p6@bG#3u-S26R08-=j6z#_`bU@_&<|Gl8H0-P2= z;Q$^71gAyNC?|N{*d5ZZG7)8FI5FkX|37f`ZoF(xz098AISI(jF=%`PRBk4SGBeDX z`UvT~64bqYkW+~rxj|)mk0>*P!8B<94jg`{YMEDqlduOjtkDR~r$RL zxHR&HPq~1LJ$G*Kf=|$R5y;OWV$2K~vmX6Vhua5h=YW%yBR6<#5VF3tL5!JU%`8OO z4=UrPh%qy)n1$T8^x$O!pEUgo5(K3vp(KBXb}9{|V0%?!0VZ_0W66m}9|t0#ql1)JsS( zGfY|V=sz3Ce7GCHc>>a&0&T2c53&JrKAndIGegP3N07BkaP_eEC1_LtvL2>Df|;Rb zA#_XzrVi{5cvb_S$OEGeg6Aw0!8;%nZ(j z-jKcoD2!R8m>Ev2fAk-5UJg>-25rlN<{)&Wm>CXic=SIT6c^arWU#p}CeSgdpq7~% zs62wU%s~0BK#G~+%|^6-l4CP-G!HumNPdD8GlR?~-1%|?R36kOgSSZ_?IiG?0T1wu z7bLCSkz!_W*!1YXKaO@f^Br)K2MuX~$3A$ZnHl)ro`Q_?g4~T%j)KBTN1B~sVd}tn0d_w; z^BQn`dP3@*HPXxs5B5CzUk^{SuyPf=a^0O9yb9C}Jg$2~nwi05@1y_sLF0K~vmxyp z&psB&+8mE&c4lV89X+75$Roqd@Zjj9|K~vF!_pb#x>a!62KBQHWSALxj-i!1kaggo z^S8j`10LLvi_<}A929OTGRzD!jzjx6U~?gDaqxY(uH4`bGUyDe9vNnag|AOR&V>Vo zKXV%s$j&7)%nUz{Kl*VJOQRpFskke#A>a%)oK}(f^~Md;>NcRG#-U`+&!RKpi5;B7KnApgb@|mYHF} zE2MBhONU!znHf4RJVM>;1jz%CV?3aHCGN;FGdNs)1UbtBY%grz4D7U0@MsFiTJX3a zj~p|D{;N}v^--YkhxQpjaiAf`%<$ymqyOOg5NsC653n_8pmmJUmH@cR1G)1oMvj@` z!=*=%Jp zw;Npd`SP+cflg&}J_hoKhaxk>lt+*Lqm1i=%W`O+gK0i^u^Xt5TmmxxF?8+}+8^#v zWM(LN{OEroyu9+{WkYViD1+-NaQX!0#~q5y3|pQ(`mc?go*`u-xF_hu%>-Ro3|VIg zviFT5GsA}GkN)R?$}H#}8wMq22A&s>{?~)*AaJ;#^*JC*QJrB+CqU`aM2VRp;@zYF z3dn16klk7cUTX}lGeGK7l$aSjzCS{`Qyi3+!08w~$zBL*M*4B*fC31#FLH_!GsBGU zkN#VUGcZ8*6@%1+`zx@r7<}@fD>vi-0(ZppBojDmdU7+b06W2hn>ihv{XDsuAqP-< za5I;HS9-ZZ)|fLWGc)AyJ^p_l6eckLgZtHBr-64%`NLQLf*1aPk}kMRu~BAbVBmlJ ze*1R?u7_9!zmEKqt3S;q+;5`~Ochd|e4HUtnL$JO@&9H}7(m@6p~B3tMENn~d?jc$Ef`X z$7bdN9(E3pe>SKvGptd03|W^7v%|HSnaK&1dLVPHS5%l8Zm2x|555x*I==Qog_%J_ z_3{4-kVPb${o+n|+Upf<39DrmjSa8Bb_pgD>*rCeIU}E(c?K~w|o^ol1%&Rzo_jrNIix;ZQ3@KKR zQO{n0v~M8&InQQx$ju|5o);t>Wz?7%9#}nww8x<7!a$9g;SQ2pKiPhu(j>zE+X`?`gZy_6?Kx$jmm>D>%A4BF-!QlZ)H{kRRUYG}&O@y@R zH>fc)$XGvy%wxdSg8l8$!|K({RtQR8Zrq^DDna4&K#iFp$NDka_&Tf~>(Rp&*vt-Y zu|eni1k{-s?pQyDuNw!Mp`y;r@Wc8sWE={dhd|>eeaxPqeX7lD;C(gVt+eMLb2uUD z%nTYfk5SLEMU*L^B?I8{qeh*XA;9J_LG0ha03aH13=}+6?JBY8#a&sH=u+)xE%me2QFtp@%BfZnZdyJF=X5bS`P_mFf-WL zK8Dn>a69^$!Fv}W6Qq#Uwb1kQ95k32_Show8YsL%G?*EF*gi&`D}b!G1#i3qwYI=_ z-MT>bVYFy4GwiT?jIo^;uG~zZjv_QI?$Kao_+bASGPeR1 zyP(0$@W%cz>tDL+6MXkhXyl)hy$u#9!+Kj0f)zs_AgYgf+jNq50X02 zxRQw`GXsaiW5{~8Fi<-LGJg&-H$an_K?lu@6isFZ4J0!_>MAsu8B`ol^Hz^0GlPP| zWB6U8ps-v3H4j`i!{Y;-H<-YuwC~xCTOhSf+jOVkHcfsvn(NL#G{!Nyb9S3 zzDO8cn?TkYaA+|zs5n0U4@y6vWCL=ej21J4gCn$lftI5NTFeYNj*n5#2ZrQp@PG_x zk^^K$gcdWy5y!{>H-ZcUyBl;)GsNBC`6=iff(=^C3^7j7ax57XmeBLMgCOU5FVJFU zn1e$eR30DDVrIDG^!Wb~kUijb87ObU^0zB^4K-vxJ@lGTH}F+-knDP%0lZe2MVpx+ z!}&2}Z7tXg*myB~ObUGIh$n1oIH>4?ngA+WU9_1QBwQZy_3@t8?|MP&_Z!kT`^GTmT*N0hpgs{aKR?iBX5jI7{NEEab_BKubbdHw>o z3Y#AT70=*yd4mo!!yo_0kadq>y{PS8rmrABLdM6}=rA(~1U~-n32!6A!Wq`a2KPao zxgp24g8PafKRwZ5X3z+E{C^g*KIE_lFO&6#?3;0htcQ}&WoDQXj_fXYIKT#Hn7~VQ zJR$4NJ#?8FmP9=MUknO2us>jRI<(0OT~+M@Te1f^feBpMg7#2%=rS`riFypVqZzCp zv~CCzPmp#6~BJ)+CZ@FM#0|8CHLJ4`Rqx@1s0^a^aYK)pq2%gg)cH4f-3mSf1EdtZ z&x}Q%nPJCOM4bU@2TJHOGaR}480pL%&{+VG{av7P*+QS0;mXy=kag-{w}8?IxO@Yz zuJq(~IqU@S26#LnL!X&J$^Z=OZ1r; zGOj&_pIHmCe}_IZL&`O1o`Z!kQk;Wk+w{OW8xrR)^qCo2u0Q@S3%}C^WIs4xL)w3! zN*O#b3|Y4zVZh8#@)X+shnWxFu?A^}SwQ9Ag8T!MM{ZAo%sT?gyYAq%Y#9d33?|PI zZGDixY7Cee44$FZw-XGQ8FbLZmKZQIXrSrcVZh9wf~M|_0W*WbGt@fufdMmv%rj_O zgx2X_444@*o;`-ljYGva44D~Ho;`+)*+a!-44D}=JbV1#8RSQ3AIQLvnc>Z|$4F-# zyMy}&ptIaTX+OY_nL*|`wCxAZTaZ2(^teFqICF_1GlR!-Xxaj+@!(|x4faFp*eQn0 z3=z*CL)P|y~;5lX++r60ubbK5*&pa?>W;pZwG16Qm z=)6<&uF5KXD1h@hKjGnD2Ayw@A$#Cq?m-S)@Xa#t3zV26!7&7> zFYg#LGfepL`2S5%`i1F*mfPTYBghbu7dN;a=mBmRf#-ism>Dd7KK|bhj~me4pa?gD zchR_VGl3`Se7PYPwR%H#bAt4Tm@qSR{CfO<3UYl5wHH#CF+(P-oVl667bQADXS97F z^Bhx5m>FLDh4$HC?nd@=GpMJ-01nRsCd>>m{~kl;`oU^J=RiZ;3SPm*oB$3HQ2Q8E zZhkOfX4u2<(4a||P_X%+K_rm*4W`Ttdjy~S-_M3R*5wCsk53O9 z=sY7gunx!=(gssz1|NwhC~G^8m@+eXNIXF)&u*A9Gq^}RL8(XHm@+dsNIXGVKh0nU zF;5GWMquSQ=!{Khn^M7ynIT5v31m(TS_Yb!F*9UHJb~=(0_*YQWdqlGj^Mec5Hn_m z84^z*<9%RxQ2B*a*Z4NGgS&U$+%ce-1l6}4X3PvvB%VOl*~0WVHZy}d%b;>~g&8x0 zh~yKbwJNT>&|5_8#88x0!f5lK;|--Gc(jk zK0zHH0F5VsM=4yv`yEuwnHhdaK0)fsK+AOSt}@7d^&aNT3{#|_?nf#MKm{?VeV1X* z%y2~N3FI7Iu-iawSJ0fGM>A_7*I}nKPG`X2^o1rNxdFF^L=F#}xwTQD;`kbd%C37+pk zeKv5s!5Y}FK_$5hq!kY;qQPw&7Yk;F8!}J+ZvdqsSel2N#R+MNL)UBMSTHjr$UcGW z`$KXgX!R?ojP9{uW@wOo@*g%H2+AJ|ESMQ;WS{(x0=WsM2R?5Dn&p8Xkpr&pE?6)# ztdV>2zZBUm;IS9i9#+q0Hpm2-8#rG7STHj%$UlMXSB04kxwio1B(UEUESVW};P(7Vu#mulm>j`A71uT7l*N(b3!-gb4=RtwoH^GXT;f>Z4$l38QwUF@(_hwe` z{Ej;}sKX1Lzc^sU%)q1l1TuCFR}UT!1P|atx*hKDwg;%*{$j<(Ri z^JL(|J6yTJqbs0d8l0{)teF|EXg~S?36u_CdXVR-wu0gYGVd8;&CIYu=gEI2QKT{* zd441V96sQ_5XjFh*31kYj!*taA@3_iGMm{Q+#7?d-(t1`BH-pk4 zih57*+Q?>hCh&4NP#p=1Ul$u@h8>fh{O?CrkDPA74F$-35Ct~O3^G%m{67v-3rl}s zx4`RDW(%EBNc(>vbzM9U zI|pc7&%lnEVb8QDko!DfX1RmR0&f?DpN$=1$IPHI{RyQ14BpEEx}zIZ+cSXsKoxe( z3?|c`K=$x~(*eXD&?O+Cx_kyyUI-K@FnQ1gy3jVr4yZgR{lV7(fgA~yzhTGB;4=LQ z(tRk9doV#tK<59jV`d1M{sgif7R`K+KPBuT@=HMWgZ&uy`6VlohP#dGbftg{?>?i-_GICuW8Zi=QCvd4-&V1U?WJ zHvi+q%%HR631lBQEd4t%GgK^rmUG~6g^ZCDf@0PSJS7QkTh%x*Gi+G$1hTIj=2l4i z3p|hu%4483v&4y+L1O6>)b&%a^~m5sST}CiF#+HSLr=)O(jAcb%bq~`_b~Ip?GBe_ zR`5m;M{e+{A~)EeDr9V4#F?2vV)>K*oyhe!a(xCJR{*7V2WMsm>0_rL_xGTsOHi6j zaAszR+4JQ8PUJKR&Oh*BWbiU2P$vddo=k9NW_Yvj34AUUB(}tvnc>I2Cy;%r(0XHs zGcyCreuNk(ot$xIW)Rr_1od13BzH55gEq`S=5~KLGc%|hcmnS;g7ovaFf%9|c=CT0 zD4l`h4XKa9GyxQQ;5I+V-xe;+3`-6`>lv6@X!#5>D*`IN6vHgPW>&~X39wn9vbM#A znL*>=lmDI|wXm^NaDK^zkD-Fn;~E!chJb@l{)5IC;AK8o9e7F;TwYypVP?oV_~ie8 zQ2PQF=O}HXG;kpRYP*2a7K1A@gU#V5|Fc1Rm0O z{tu~FK`XsL`)NVxX@e^>1J9`^{~3|j#>61Cy_0xB@dWZ7xSoCB%FG~f

E8GnzX= z@x8D2bj zg1R06e6xi+cuf~5E$nb(W?*^x1Zka!7cUz)^Lv5SfZTh>jhR8==@Zm_HI9h0WI#58 z)UmiTGekUn0vRKPxd)uCAd@t(ys6_38n1@-v7zk@2X|(Mm}gHQ^&MER2QM3VQ3+&T zHNl;kq378X_?0-w+Za*u`w zGeZd;HK20J$Ag)n;W?^b6Fit1dY(V|?~h_X_+&D$KS1H%;=#f_kn9q;CjX*8o1M0+jGUX5R2%W?*?q*h~gbW`>@Zgv|uy6&+7z zhJaVd@dgSfa9`7-ht;Q<4SWhKqz;MjWM*g~LM zH+{sDnL*<96ZoChpr8iD#~n{*28GwqG8$TMeDGvu(0PsMH-Y@c;>FBh@%qXC$)J1< zD>ISm4M@=snHMtfVrF=6F^C_V6d4U%*!<{!z{=Y$X8@#;;+PVZD|8e7HngJ?+KwVyN z+xdnUGsBd32s=UUc;m&)u;3l)*eQcIGsB#BPvC1VK;bRo&CIak9dg+M>6?Jopn>E~ zyqOtJyo085u-idpHK;U!)U6>bn0PtYi5Bgm4(i)-0)^*VEOO_ za!vzmeigD#1H2&A_3*JXpuPcv4>N2!T!-5Y_{)6vx1cxCc-aw6RP}sfkVP@Fy;mLn9co;+E!TX-Q zA?GB5(us&KGsB4wh<-IluZAx(!;ueYW5Cexgq3Cz3=9kbzRV0VSlkDyyK{V*85}-7 z`Tqjhet2CAZjicigX=ke@EwzLe3=>U?Li7FqbqGlR`H zfE@C`A)0Sb=?{>%)2zCHOL zgPaZ!<262@QVXPxBY>H~|`5z89&y$x8 zoMt__LC3^^@^MH2GegJEC#dJqz;@g-K<4c#0+<=D{CtA6-W}A}0JUQwb zF5vT|Rs=9Ji2Qx>AN5`wXxq~X6tRxreb*NPm>FvRKKUPt+@6Q-+w^E=W6l7Z=>%5$ zCxDq@1JhH;`5>?~3Z5%~oR0(^ZilW5)d*x}NMU&jnS+7m0h>T(h6yZBF~-V3OB6x* zJtmNuVFAn2|3^S!3Ns&GcY#*r`~bTKl=(p6))UCg;K2SA_3RbUetVGjTp{;qZU|&% zu-S>|zr*g+JQ2vuP{RHc(hrB(1v_*dTKB&RWMeH+bWR7wlX*NZM}*VrGcpcnUeU3+!%RUN-RAmoDIA{y}Cg31Vib;CT99k%fT) z((i+fUwZbi`Zu#NKLf9phLUndS+ZUGspJy&< z*)Q<)|3i4#qt45K=2$#Hn=;Rx2d_;)Dq_K9HctpMgMr}F|KC968aOT>Ybn8V(cp<4 z*wS`LINF3TGcX80{eK@+;lTXk4a&pNc?D*9@Ky^@2ND#IIU&pp8{D7%KLs)$rXJci z_vm2*4gUQB`3BU62jz!3AfP9oi?6`?K<(|4P-X@X->3hZklg|v=LdIV&i-_!pWL5Tq7H{|&y1#Y;zLFx2MC^N&wtmK=}hH zA%NsX!k8IubV19y2v8ml1D_8DaxTcw5_1!O-vXw zgF^RH_}n2#T|pQ#gG~2R$hbdLT}v1eSp&(sGk9z(}r9S-^|Xm2oyTdJ3s`& znHm1{JpJzhR}ZSM!Q(cr;IpDZsTADha02h`bO>i=km-B+|249Dco`2`g;xSjh@i1d zkb4TknHlc%KSf=$ggn=`3#=TpTm_tN7lbo2_)K~F|32J&P}v8{V?p5iuA14I&Vif{ zO1L2NFM!-X_33|APG zVR-PExj_Uo!DAGp~Zg$GegKc)Ou-61T#axJk)e|AcC2}XWrBQpe{E% z*bAt6$m;$?Ff$~enI{m*%n*ZQ9w<+%L^3mE%zKJ-o+o5Ho5>l}dV3=um zIEI&%pcd{~P%L|MgSVYS@_|PbGlR&Ir~e(%>;SK;f-L%il%8&odaWXgnZab))BoW0 ze=s*8)nHfsfK1JE5(i6?h(6AQTet?#Z3!<4B?x2Zn ziDqW7Scj_aL^LzQ6g06r(aa1V);<021&T*#oApC9GlR~Cr~g4q0U&KDNPP*qZVcoX zff!~6n+;DPdkUd$P>Eq?$k^}{GM5V#vxs44XxZ=-GDZs(^NC?**s$R#%3OOw3^T); z4NoC!S)uAmVwf2?HX`Bpb7Gho3N}9duZtX?u(5d$@a_es zH=va030dCZ%FVO|#04D{3o`Rg3^PN*=BJRgJJ9iq4>8OPU)EucUx3;YJh99S1)HBj z_7-M>>OIJrrV)^>lAxjlJa1(Z%giui^V9!pK<aDuD_jEQAtP}uhL zzY8e*Vd{K9WjClO25qI-(P_Ru5;63>ZVwo9wwm*f;{eaDI z1J}i%^u8ySnPI~Ar;syt!E&hWJtpvS85j8E7AS3hh-GHr+41y$lqS;J5m=ey1`bo^ z1>lJeNWNBxV`i{<_!Mo=8Myw0bky9M*`d?P;5AGEam)-oM5+gQ6XfrfIA(?$51&Hj z(4c8#MjSH(%OgbJ0#pvKiDPCEcmz$Guz4crT1BVB$G~xOA&!|r=h4&u^FfBg@-8@T zAUjb&ZBbAg>_;3k!;(i&A$Qkc3p?;xUT)xawMslQgT>>g|F^>95j55TiAPA$2A&c1 z;AVOON`4;POyDzQ!0kOy(>NubnPJD1r;xj$!AE6->SS2E1yr7bxBYu@g9gdK3;)i6 z=Wgc2GcyQ0#jI1ZpldVt#4|G(JVmV!FT^u5=pc!K%AzOn%nTY&q3u*ym_X0S1*Hj= z1c-buD9pfN0c!U{=a=1^*}%oTH#hjw7f{%lBrr2{Jbn6q8FF~Q$FabjJ#hO4G*_RH zz|6q&{3&F932Zi~pAVYX0=E~y^_wdFVTKZTsf3^ogLCpaiAmTpVFb96`4oL&l<4Br!8QdHwXi5Gc(-)5o49W`+-Mo5If%vI1DVDLDECpd03 zl9?H%yoHvv;Pe8iH(`A>@K8SVe9(|&W(J9OPyg=*`4grV+(w3+dkQ&8#vN>KLozeN z8Y0w!^6{EvW(J4%(DDzqrpgU`1S)vW<4iI$L&E!~@U=mp_CYde+pUO z3yxp#l>p$fEF*=P;mP}_kaHj^TbOUx1C{Ok?gWIJ& zZ0^nM%n{%^+mRbO01sL811c9~QkfY9K0p00h^!af{(!IDKP<| zUW*Ir3p#?W0(GW9=GUY$Gbns}`acKM&V;!Q>Ssv30$IEZT3ZE*%QdOY3<-Ax72ipr?Z|n|P`8RqQ9O&E~$bC1`nHj$PM=P(O zVGgai!2NlK3}%KJhG$57@1f-yc;BrPH~2zbXrE0dgPGv~eDMr1HEurNPEU55kNALs^KM7$Q1PhGf~z?sMy;`a#|%nWB(p8em168GSJmGD(V zpf=Tx3}%KD)@T32;BG<7YfRuJWbV*=bwJSp-s}A#gPEa+?HOdv8EoDP5^vt1T^Qg! z82;efYh4Z>I|HgaVOP zmOkKP%uL|!HmKnbDhFCJnHeNFp8d~5E(eg>LkF1~kM29z%MP$;@EE{|vIf9i|@aXYj@^SLoeM;Pxsg&5C3(GyLFx_FoYcwlMX` zX%<}OJ99G?f+EnL8{`L%EM|r;0?)9l8HZ(A@ZoHrpDzcavLWG|E=SN-#3NBk= z>Y4Atd;tp26<-X0R1DZ1&@o{IowQE>iB z$Yy3ZBliqxtq&}{fKNg2;Le1!S3qIdlMULB^6bA7y#4^S!@*;ZpbjHwxlm_L4~sGed;xGsyYXu=D}j1qhuxjmTkUcsw7WAGFRCRIe1|Ff*)CeFo`cgZ29G zvVpTIWc})d9A<_)s?Yv|+a6$fNO=TW7Y-WU-jKu0@CM`uP#D4Fk@u*=PJm(pPtCY; zLyp!11pzq!e#l{Fu+ex1*^2_!59#BB7h(Ewr+{JuRDMe2GBdPjJo~>7l!m}Qt52Oxk9%zj$s7!2Tg&fe~1YYZ%k;}|5Me`YC{t%`P)RBX( z(eKD*X4sY$BSZ6lE;B=h;j{lgKw$t*v&dy1XozSvIFKuAdi_L$Nbst;bKfgp3SJO#`Q3ii(+YsbOnfYNd^Gpt|$ z*=10`%-~~>+bsbF%nUj9&;Dy8hd1JF>iGj+eD+SC9FYKS8j>SXTK5?K_4|2zk0%isl zhi6FVXFv5G=w1{bGi|3Ooz@H6gE%5GDzvEJNFpFxS*l^a%|LC%8OQOL}Y;`;1= zJjh)r;mC9hq#o4A0QvJlAv41qH)vh~yB~69qGvM;6L>xzI`73%#LV!;?b&|={@=L$Y&Qlyxfp(6Cz|77H_g{~n1jn;viKTgnF9iW?G zL75d~UqCT4!{|iB33sVPmKWL^Kyi^-HR>4rh z%;W(JSMXOKArnEgok59G#*5@v>! z#Ap96BfAk%H-PW50F|d8^Olq_Gf1T1H}6CVGlNMAaprv~VP<%dhTA-lUnNSJ8CcS> zhV@2JLIYKDi;4nIR?b+5dh}7}bF0j{L!OFzDP! z@5A6RSkO`}aNDA!oSET7-ZS{QdmuM-lruA2$wRmSBsQm!64Om0ck96DpV)bV{E6uVjL)^+M?bfeLzX-x-wuK;`X$3TB3yvS+AsGsxxp zA&}{g+>p62Pw>9~FBQxT92L(XYgNF0aOGtKcgH-r9iivYOH?v5s8l?|I`;sozb&Bh zoN#x7#vmbcLg4z3=_bfxcWx%|=^*~xkhP`$pf(*S{3|M%8NO6L`wyGD0QtSAl9}N{ z<+J}8ps)pJ0Z5(b2|5b|ygrKA5L~&rK<4T9R5CLd)ILK!-^B$q4hqQ<;Cc#iRR=ij zeW+w+xKsP=Kgb=RqzXz?ELF@5H)@glWRSKHbPNr2ls~x7u2aR#z)%Mr`v8XL;6>h`K?zVg`%=x!z|sEfeQF&BJJ925BDAW&8Z z*DEzO%nS^Z2%Ed4hM7TQ(zE}J{77@w;QlAfgbx{AP;OGc&x{ z`0PIeay%lNxf^UIxP1ijmrFe}!;US_AZJiv^OrkVJ*dh8ySb#EnL%Rvv;UXi`2dPC8T1%_Kw+_=ftg{? zfoK13Ag6EGUGd=j;tHONywSkSkkNe#vi1}-Hv%2M1ex)rftexV;IscTkn zKoX5l6^y&O%<3`-6@Lp=uzlGh+BqoL>Z8ZE2dKKnltRKLQ?O@tkwMksiJq6atA4Um3NMg`^5H%-h88;+ypYjC(j z@&~AKc?P5bI^QMJ%*@bm>e>H)AbVhLLn;TDmVgwygWHrI&CCoTXR*c)cn>Ye{+woJ zhJ>@v{>y;E2Ig)g`(2vZ!L>cey`V9VInB%r0q36mUjm9KnEjABG}r?B>EMw@A&CCpK9Z2(nNb9>nas8#4nPJ7PXaD;^?tqyKt4qL_D?`?^$h3g&A9?ma z2U#7suLwE{aT>@%aJdTdn@0;XL&)7{|5t(3!u$qrCxJqCCrCZG-2-w%MGG^-m3#Qd z$w2BBv@kR9+()aU5#wp_w&{r$W(Je{&;DnD;tFOzIBcPLirE)j0D&qpkhwovm>EhQ z61HEVm6>79L&ElZv@$bXdHC#qH@qH&mA%k53e!rE|H0(~D7-3KnHfx8KKq}AobDlQ z3fSQkUfiJ0BXoXXMJqEy$;)R*=Z-?!V6NbOWZ)JqsCfsjU#_$=Gt7AT?Ef0%@nvvW zfakP8(}^d*4JJoOzn!IxnL*+M{&pBB%yim7`$3-w%nWW^dT@hF0g$?oHfDy5 z56@8de1q2MfkMC^q7D=WHEqlc6Fy)aF95H+@rEtrhmIMpX=7&i@ZlNS+4Q~4?%+!} z!C~OT4L$?F6MPQgoi=8Mf{)Ms|3?mEPwq;W`+x&o?+}a1vO4U`8TGWnc=~wXaDCQ=Lv8;z?WTvCmpq4X=i5e`10((2`DYY@+Ukmfuc_eoR&ciX^{FO?aT}j-=6({gWO&L+XGAcWhm;u zv@{{T1cCAjsJ>9?U}jkH3$@K>(ZS5H1_qxF zW`+g7p8cPK>~3&*0UBEZ_eMRqnXZCTfj2kg!cs?WaD&7fe$GFrZ7`*Snc>GDtYs-E zXu<1ZcXTi_u>5@n*_&An8gGHDi36p-D;>-X9)HpLf$+QqT9FTF`~K-*W=Qz^?Egt* z_d@Ft$bKYd$kCh7_K{8}GlN_6Dae{_P@4j&Tm`iYd^(vK9{hjyKMvVEYx-_#w{RxT@ zkRN)wm>DjxJx43!z-vFi$r6-5K;sHqx|kV$usz2*M+}m`(#6cc!H!)XWY3o_W(EoN z=NMyX;P7_i&H#1jKw%}*&CC$M{``L$a+t!>Gq|DZ&JA9<3oS=|x|ta!us=tdhlBam zqnQ=dNr#qWCEd&nJJ_E?<}#4tz#TNsWaHa363%4>N;}+;hkpPq<&eX##vm8K}HC(!|ImI+e>9`^vXUS@_I0_KGDGBZ@*F$WaZ6}`+1EppFM$5bG024yICoGj=C zooD(Sbxsx%Coavbpc!6BoSf)oX1F5v{C@*V7=y+m!Py#=q-?-R3VN61k6va56@};j z)j;I{EX<&7KxW7h#o&H8s2)@4V`k7$dj9__D86Co54k>K0`HV|gPo^~$P=Ij=Sd!R4$$QRXV0An-w%&eT6=(&dO4kSI_GpA zy5I|xj(GZ+85p#lqn^R!*vt$*9n}M}r^BG1nZZZv`TwKH;RdxAyf+B4WeXezptPUR z&&=>f2Q4o`=i)#+7Qu%xxWfld!BeuJ$Oo(ZYI#2vL|?3FW8%i&Ca0m_d!21LyX>Y$bM{CID*SCPiXn;2%hW)xs_)EGs6bG z=aBn9VPOhZ>(a~$4FuTKkT>GQV(`3@#{^~u7yak|mx1CMrWcx?z%%>S=8 zheFH2nhDGd2lSsq&i#Rhl$P4GdD+5u(+Gip&LxACP z)OIgqtqHh^8~{DI7S!*pn8?gfV)*?3bWnJ~;su=l!L3mbZYFRO7;?D_G`!YKWM+6^ z`24>jC?CS~K+_(i9)QedgE|7BJalIwGsBiDr29OPasbE;e9h-m>Dc^xB-+t8zwO`@K`_p?}L(` zAZgsYnT`26*fhx4=9)>M`>LM*XF*nr(`^G@^zQ|-|h7PCa|HVLSAz}e*h1*fWsUVM?0o4Gkghp{$CwSUho1f zAAv5!1Qo=fKFkY{`iSR{xe;i7`ZI-@VMFBe|7FNwhMb;w!M$WqHw)Yr(V5E3z!3W! za^@e{eUR}r$Q@;nbDRREGBfzZKL7s(Ib5OTAmj!gS8%(!Vk$F(O5AhQvw%SRDZpnN z_`o}0pnSY!Dl@~2xaW{Hli;<8Zjh<*W03K%BU70fB;ud{e+dsaP3}l%nTff&mny+usX;-Zm=R}NWa-* z8Z(1S;&aH^7f5QrEduBT&7gV>lzvL4F*9@|K1Z9&2cN&~(##4gZ6N7q!8B%uGl|dt z|3wZ@q&R|1DM7}c&rD-xSdjGmzZr5kAjT5Gr__MP)<9+7k7>*dTaux5E7-lL>v)-< z@c?O?Le4eRna<2mQi?RDj8vY2>Kvcx%nS`F&oS2NfqTC0;N4i@zH7;JW`-Fl&~{M@ zqVEa{n+emI8TO<+M?L4pv6&g{ct39N#zI&)?wQWappg0;b#4-&7P_txvKQ*bbY_N@ z)aUT|W>CET0l7EzIodj2@Mtk8n80TsDa>GI=qW`-M8(EI^Y4=Y2!4MxZu$DWzY4Bv`Q{RfqY;4_h-a~z=Z?#4`J2A1mQ z@U{(mkgE@19->Sgu|5w0OmxzPw5>OQi z-iJ~#o0;KB)ARqwLH>cYJE3t5Zt}WtGesTtgxv}f1R8FFMlU#R?wHNYpjL=^HXLXk z@XBmvhKOeJ%@&!%%y6Rs(`-;*&|nTT!Bh5%YGbpq}%MB!X&?o{Z&+E)(W-w@f{+|!I zeu1``K+9FYE705^YjYyzGBb#DK>Ic@vyjI~n7}@9f$UI&^x=EvGBZr*c>aGsC{4ih zAg4LVC5oWpAKd2K19ETY^Z!`S1qXFrHi2@JCwQS7D2=|E%gk`0^EqT+9oT%(nZ)4s zBxHNAD>rzNA*lZVQZF-)nIWO;`Ts4*?QQV5GQ3IY3{KV1HN-yim>E9wJpb>Etlp`g z*%vgf1#Xi;`UarF1e8u|<}ot}^gsXq5TqV0kAeHr%&Fj{b4t$u$%-}QWIqG?Mp!=mk7PxbRw*-JPDX2b| zna|A7FbUf3@(0z^(DVXQ>jSD^A4QHgrygdHW)|?RNM77bplf)* zZLWg(%nUx0pJSb81rLWhLe?_Pn9s~`WHNLt4i+|!&CKA|5%iAAJ@c6vK1_c8-vhbK z0mlz?dXNdc4UfPn9adjytv^L@u0N)VgWNl%k1Zfm+{sIHP&$js0(=lTEr$ax)Ey*1bt7jE#;58e<8S}uhwWM<%)_Z(yGsY^2p zc!VE%5*{d-LB_upg3doev`s+nov{#f{tpZ|A6 zb}zV}1z8Ko^b(Y4oxo=)ep$%O(6Qh->bXPEx`*itNFAg-EwhN3VZp-Z|39OoYj8W= zyO|X-=m+uyD6e=dVrD2=^c?A|Hqg3FNZA6uU&NgoTyGUDVrJ;iLaGO#dsad7M?H&} z83YzThny7wyF&{euaMnTF5DG7>>OA|V8FvB&S3vtS;Wk6V)1jNyTU-}9PAcwe)Qvp zoUQU_5iF_OS8>mL|Xlq(R(b zu!Nam&g$p?w}H|GOdUASg6A4RolS681+>r=bK$_Qsrb$q`R#?i+khAXj|JQK;g7$NO=C7JrA$Lnb z)~9+bWo9s0{~U6*1uVaU=8acD%2d$YUCvTwhMnoBAoF9O1|4%76DY5@EM;ccvHtmg zZ)E>~!_*Ue#|kJ=VXFr~VY+20GsBGy&;Nf!UKaw+>w%y!Wj@6N2~?2U2TPe5*6e-$ zUmSUy1i4)WuJIsqeLTyU85SIV4mk${7EWMu-5}=@f=4kSdk`&_F*AHQ{2X=v0ko|G zUPsG>8V4E6m>EQlK8KtY3JxF8-Mx^o0o4~BP;q?imE(g!^fZ}n@GG+#aquBeL zAo(-Pm>CR?B9E8(gV&V7<`>^AV`fM=`W$s`AG$sbGUo~zn-N*g%<$vr^Z(AE_yD^V z<<3-aD1ZiqKyGzd&deZl{Q3Vw*wuoobXXrDXE`&&ffLXFKL({Gu(_}`B9N=K{hQe# zE5FiPfY$o__z3m&?5H%H)?h3vKxL^e{1J9Y~ki9|Bvqf4~Ff&-3d5&~e8l;^CUJL~-8&<4fW=J`MHdgK4 z!`#fm1U^;=G*$&V6X62L{Ik%p74W$gkn?9idHKx>W(I?^&;Kughd(G@!DfKxmqG1b zP(N8@B{Rc{vxxa9keJ3wW`-qap?wEvxY(>@W;lQ*7O;|;;SQQu%1UO2A829~E14NY z&OL|h2Zoy0vyz#?;T)$fu{Ea$bCp+pt!%Yl9}PcIkdQkrFZb? zkUKYcd=7fXG0!SyhJ^FaA?LS4&-zhV#mpdlKxbz%jUj=9}94HT5S%f;SuMB+>BtRACtubuGk9Eo{vULO4%B<#^uV*0nIYi%bNE@1pm0!F z%go?&{W;1VdnRik`jPJn^jOQx;Bx&r~Ynd4`u0!(&bPxH9wag4lu0MyIg$N5v@ToVD z^${HFm>G^-fBqlko*2-4ga;&yLFrCs9Ww*N4cunGbXHKW~jkq1}F@-tYc=_aRW6@POM{Q*m48fUxlXEJL{Mk4%~PSIrACTo`LkC z+pA4U4wyRdoR)7hX!$>=UTRs-%y8q@bIATmm>NjA2kzB?`dA=; zuUXH`U~v06$~mJ4)-yBc+(use;?K(lnSKL@_k;D!3^uo)BkiH^=Vb#OrU6YC3>%mk zd~QGgkJzv8&&vj0Wd|8YRoKAH5Oe!E(w$rWylm-+G~uv;nV|-c{)7$83_Z7>Bb_|~ zx}O`OACzw!HZU{HxeYBNVCfPZ=Dwh|EV$ths@p+jV*<#Up6u`yto6c53%SM*@R!-1S*e6GhX0!HfW(c$bTW5m>GWD!5l{g zjkAK{ykrwI1IJzH+z>3iJM}Vq_OO7)6~HYMP?`s+U9gFnA?EJ$|J&hV4Z4#WJ_Z3E zuLSkyL2A!zVrKY2q}m^wm>F8`5jGc;?^HH3Gf3Qj4%tfrEsHHSGc$dDInEk8l^at>4;iw*8gBr(!MGXx-sfy|q*g_*(U5p+%(HUF6gLB~hIVeJLI zpA~c)DCCTcJ6o6;HavO`IqM6o2GW1>X=Y&pk0(OUyJp$S%pmdjIplmgxH@?_8Yy;gV2d%rHeZ>vim>K3gfBxSQZZ4$k0T07ELdJ)$Y-46P@%;IJ@O|{& zp!P2$%|bWTf%kVEKIRN{Eo7Ym$9850mlx0fw}H%s#T8_&BIs^8@cw3yn?dnvvYnY> z#f#_v`H|xlGN$DNUYQ43X8}&DAU~#TXJ+Vl`TReK4LR#22;3eAg;T?J(EW4Ik@msC z>NLod45-fo3X2unnHi3}M3h0Ge7t8nGsA(G&;K6;xfwQx2x@Ota~%T><$HrCL=PVW z>3^}EnIYvBqU`|E|7SZhL&B@)ko~7{Kld?vgVrK}CbXdAexUg|jUCJkDX*VH?ooiL zh4v-EH>S97Gc5*X6jyF0(CjV9Z!tTV8791W{@)KdoS=Fj+hN?mYhhY;Ff;6U`~3eb zkUwDQ4QXBt-0Xs`zud5cnL+2>bJX+q+(2`F;Gr^)W_IuqiQv@$ptyRlgPCE^JG60h zgnH1>8u(&UkOolMDX^27AwA^OfABp4pcH~MPYDV$gPqI_Yu-c4PFOgA%V|i_37)(4 zfb0*6*~!eH7lK%;-;7pH*X(3wVE6!S&w$4&oO#(2A?LY*+&*U~GlRhg=o$l;mntfyzVko5C(; z2Az-3kcKeZC%nT40tl%SKI~#<`12WB zZ-CcQ!SY+=Vb?P*;J^p96D4*tGpKxdj(R^Kct*(sd{G=ojm>UmhJ-KAk`}x|8GHlh2;TQUI8E2;|$){x?wjn z!@EGF@)o)%0A$9Q-OLOO-=XCmIK4pa0@nlH;QKZ}>b~q|X6X3-{C@!`zroZ&?&pH9 zHwCGa*~83m;rsLdWhm;vDcl)+PzH4Fz-13JgT@c&JS@ySP&ouXLmlDAoIT782Yx*N ze*oD$kh)$_Tsni@2TCVX_AoO<{Cxi35)>9-^FV8}AY<;ZvgRO2i#ufQ>&PBvhKyg& z|9^#>3##YA^|yaBD-(E!3aBs!nf+l8GlR|V=l>_7s0E)n;o8IM*~|u6cMGoPLFyIu zGBd3CjW&h`ncHOocTSwR!K0m^$`h0a1NJgA*!+18IX4dGc5nd(*+X5hmzlu_hde0E zC+uZri1`DZn}MYRr(R~C9u}WwRwi&OA5eG zmt{XQ!wZHNsB5_(Z543Z@dMYRkTn_x`5kB{nu%DU1 z&+imutO-kf(f~4#@QHqKEWnI>VgXgm>JHnzxdAp@&ni$P}u=#AAlxG zVe>p7v;G`lW>~=S0%<*vD=!;TUX?k>%&>vu1=x~{bQi=4%Co`j=wYZpxjEzzGXn?T3#9Woq4y<$n=6js`GAT;%nT`fFaF1Z@;umm z-q3ah6L_=`WX_yJ%nS?oaQht;hX)QZGwk8R9)2MC2Zxv$&hWiJns)@9Z-S_w84g3_ z5%)lV`Z|!hh6&Pa0GB5khnX2v_+R{g1#&Me9-wVh(9#+3R$_n1Ja))oW`-C1FaFyh zhZVH!gB%Ct1>OT%bC{WdLGT6SP6L>k&^jL+zwlE6nc6|+6{w90$}3wy<_kj0E0{iL zodjO-2?muH0!Nq`?g+hr zto4Sq5gnoHk6plPo(_Zdi-7do9ARb<5Pkt^D?`(Bz!7E!8Q~X@aci*KP{+Ospz`MM za14WwSAy)HaDWNE5Fq>lQno_JWiA|HW{43+ z_z9%$$q{CT2sE)DN0=Ex(8PF-Ld=7m$puP-3P+h4e1u;ht)&39Ex>ELK-WQo>r9uU z%nTL6xbr#4oQ$K)3`c}tK=wz0!v)eOg)}0(!Tq2fko_Vr{$B@$4bwtUgn99@`GMM` zQ9Nt{ZLs^sK<4c@%FMtb`r>~&NG;erP(L2r!v$qSu)FSn%oBZqbk8M74SZMztcKwj zGs7AbHIQ|(kX|}uu3zOCGXsa%3)Jxdc-{{KB~5p3@Zf+Oc;9`rgY=943?O%b%N(?Q63i`NpyO$UWI^!&~P$C(-KD7^S@gzP8q+7XXt zR^|s_y`V*HpuF|wI5Wcsr5BJht-)yqv|bjp*UA&podl2jLC%|!IKj-&qWl6f*9Q(O z&>g9uxpL-Gu%Vuivd-ZIGlP%ni~niFfXajRcEZO-p=D-04?71a&96DZ%YQH|Q!pP+q@qf|-Fw;{{|q z3R)&TIl;`pp@G(BfSyAKDoCz%;+G+#jGJD_D!%1LI12qZC3zoOzKGee2yi~l&z$pPgM2XHt;>*p0G znHipFy@0IC0EeF!FB@nO7CL@>;v_S}7p)inXCtRka61oFJ%f8qpy~sh=f9j}X2{Tf zfieF8^#-`DDRGLKp+)-zWUd8mYywoTTAX5L*rNRcbq_vtJ`v=u3*8oj& zfzuBp&$#xofG2jCZNV#tK|^Zbxz`SmdILnc4YFg-DQ1QP1}`A{^kHrQ=Nty`y#Ah3 z%nTOJi17~4SqPvsaOD&;!wV#{Kymlt6f?sUgBSn1k;4bn76Z3Q+`ws+=QL>l<_n}f z1CTNrv~?e}_Fd;RGed#li~qNf&4AX|OyGsB&XA3AZrtEQ0YQZu$nKQW%nTAnFOcTg zKw$wMD+W#3gX5&*G&6&W(F@4=4d8o|-FVr+XO0AeM=wD6cg<;Lh6JM*khMmzFh#6M zj02|^cgUWT8>g8WSWI60j|QDb15Pi_DCfyDXM?Zi1to28d~=*(X87iK3epxp>!*O? zLgNfGgNQXWU4zZ@;$`zjw4*%EFf*uFzxb~KD#yU`kg#KZ4R#fHOa~N(1!tHUbnIUI z_XM?#V19tq4Uk2@pyN$oca8=?%m<~X6=#?kTXnTLenvAot!l z!_1)XcnZ>2Lh}zOEPtF~W_aT80&=ev%slWoo)6?IS@5x)kaY+uXPFr?9AEt33@YQm zYTbC*d?0N^W)5&V28SbPd^g}MGs6Q1q_dZx<1?UinFEq@egWAZ3>{xdt`7cX@%jmj}|<0^fWI>T7|* z=F3@Th7+#P{sPQA=sXoDtVPa2TpYzNNf9#O*5H#*V?$0>S%)sLJ;y-A}7cvKc z+AoDJbO%+{;QTn_JTt>iJES$mNaN5T^LCtPW+(}K@&5v7aS2j*1j6@P2!JyvCtPG^ z_>=kqayALL4)X%f{eZ%y<{~qLK-!D{KFDPzG+dzV*I!_>p#8Zu7nvCz+aT&Y#08 za*3ItBkKjy8W2}rHt=y<&fK6Y+(6;#afz8>Nfuf;2C83OK)KQxT)*aAVrKY|g*@H@ zsUtwmW>CEMTw-Qm$bJDiUkTbGbm&u+7KXjJ-Eco zAd?O41H;S&xeHp}fzl4kWoCwm>=*x&kj;gp9Z=&5+)4%6uXCB1VL|qb|3=8_9GjUz z2L^%c^0~~+a3CAnUO~1C>IYE$P;i-<;ZHWS4q$Qub#%as^FVp3=Q1;cLCy=L^BB

OHE2KN!DVI!o?K+V!PifK`XS&@0EGd^ z6=sHzT(mwcA`C$1UV!(U8C+pzn3MYgY0d-GmO;7?7Br&<+As$lhf27@%Fz}Ui^QEoF~xR2X64<0_>(ESC|=ol)m^M z0$PvyfJ?hv=&sAmyh58pr zb54QaHL~#j&sAoIgnH!ki=o$i(Ys?HU8lY`em>sY&A|FVn*frYT$))S3&=oezTp}(gH0oJya{X;Bt5~-!g6V5F9-P!lt$NFV`eC5e1Z2Y zBv5!?xyH;eqY>KIgvR-cYs?Hw8qwk$)_#B#wpAc|K>1kYIy1wKM&xjYj77l4UqEH3 z#dT%|k){{_43acLqs+j-V8Ot^Fy}fm!-c*VkbQ1JprQh8yn+e5!PAwSX&nzchZlHL6lkwC zC?DOp&dgvk;RWhGLvXrraNf)!E=L|VZnqKkUf9U_Nl@RW`;Er(8@gM zp&%gVgW}NT1~bEn2`~O9gX%_b{SMmO0ctydn+~AHxf>I-Em&}anSp0A?yv=wvr}#` zGk8pX@gEe<@UZ|;V;JhrEjO4MA|}6p-`4;NzY{l@8B!)g>lSF7-?_oe&@lPM|6X|B zO@NLugDWpr@K!QtKIgc}%JGa$F#fvUHL``@3J4bl_>=k-4~nHd76LF*!z zTOFI3!JFi~A?t+{ZZR{|OoPs&f#cShmkn~60;stL?z_9(VrGz-jymQNaf_KjWIEJc zFtb4(fyPY*RGyf1eM@dJGpv}798T~$476SlWewnkTg(hLGl*0B=N2==1tQgI+-7D- znMs_vA-9p}mDix^88#vVS);V(HZ#M7*)RS-0>vj- zEoe>$lwKgici_X4ognSb8@HJmLgqlr8<<+?o{lfKnHe&$$brgOfji6$HFKct1(-f? zcJbtPgCs|AoLk&sW;inE1!Nr-G++AMVP;^M3vEL{?Mk@A%n)jH3No$$GY_i1<_

Y; z${l8g6?0$w|9~7$OyIg5ez+jy95cxIiY#}T88YU*fSknxvlH4s1zYXT%>-`7!s@@f z%nTayk=vAzIug9`5jrOqaTl~7_XXsR5oj5cbC;Q6!hGl$6x<&0It5TW6I{=M>Ypih znHhe}fAPN<+5Mn)CMf)!xxsbAj=RhZAq!so7X!87VP-+fcksqLZ*F&xYEQ@!j~?96 zX-#mS_RC#n28)F+{#%3ESTMcNxh$7vHb?~l-OH?SkD0+|$&3Hjklg|<&p=KF_m-Vu zR}F#6w19ie41bnD$I4-5Ll!W4aD#VQdBV>V1NpV#9y7z7r7!+Z0GSV4?+I$3gKJ|* zd@i}i%)qgXI5R*`HTPMDC*(y z0^Vi~n(qeX4}<&63^prYK=wJq{Rf_{bBArD1MM-1xX;XxrjOX?3>upR)#(NInHlb^ zeDVJ*B%af8n2b3O)HD<$)QnSo*L3)J(rwBnSo`)i~kQn@d^$n==ne3YhXRW=bF|$U}m_m;l=;cDB+IQmpB2k336W0ng`4b z1)E+Vt!swlJJ_K}VE;d0W|*_-1=1Nz5H;XgFIPyN_T>RH!;Vca{!c-+7qnLwe8iYD zcz#;qAv1%?7EHUq>xQ9s{ntJWT34psZkT99>keOl4ju-#+LE}x}a08_eNL$LSht0d0o%t^ z8bmF)vW0FL1vLOb`OW1KGsBL3FCb?iXI4^WO2Hn5# z;{Rpjcz5b&MvUh{E*1v$lRLNGGJXv`ZXfLb$IJ{XPQLhW z08$HfBWUaq)W&FLg`AKBxrdPF2{XfnQ!oBs1%(s3I`F~g9^k!CCQq0dGETqvFM`dy ziJ%bm1J7s2JYi-?IP(Jaz7Tl2aBpSxlm_-ZWoAgY_5yW%wG-0%ZSaUV#QqmgnHgHH zzxdAqk28onJ(^jVrh=l(2{Laa@Qj%u=f;cw)hPBu${)!2Ud$W8PVj(~r4G-S8TQ=2y(M0>=sSPc^+q;F*AHuN7T8ni`zkNc=3#xq2=|9|J9Mbd7cLS)4 z`UhOBg34@Ao{@OY%y8u+dfJ8fD;s1tbYHr|bI^SOX!EX+{V(7g11eiUe#&^x%&_It zi~sGQ`8b&U$YWHWz}7o*GwXuA2AUWJm4yqQGc)k~dhuTdG=2ut2WlUI^S2YY>^SnA znStZqi~peOz~OTXD1N&PHWL)Spmg))IWvO?4K<|JIc)`r@hT|pDS*VC~241(|0vR8wc)`r@ zg!3g@*?=0ppm19NvY+cEWZf0mt)M*WM){w z^YVWqC@#Ti9<;^@5+*^QMTX3e!9fCQAA!6vm&^R{Kr-0NOy!^i&RHuU71W5;AKY%BwnBntcptAbN8)k+Ilb1+)R6y#%{Wq6p z)dCJ3N|Mm?2m5LDoKryk%ynFnft~7d=FsOEU|&Ob4A4 z4N6lsZYwm&s%1O3pn(H;z8yeGs6S(m;W8%c>>WFfy~=7KvNQ=Jo0(R%)nsv^8Z~>8x|IC z@U#S)L0$n)?4UVmP`|O}9q2yym+-Y(Ah8MWm>JgCBg8=Axa1u(!wUPCNNbHeplf3w z=Y|}4$IP(9{^kEG$n93>96b}bo`kG9e)Eo*p}^rK>Rvm@+R|E3A_3L60`Hj_);PTU z&kIi@(6N7T?+DTlHF?j>FvIaB>N*Qh{}Fr{2xJXp#Cv9j7N?j04mif$a>&soIV5PD>rV)wZq{24howCAoseyL|U^18VdvY22w^pc+bpm z#`Ptn?*oey$Xa1=-zOAWmvDSwW-xJki8S{F%0u9FuHX%IZjgic!S;gU$>IYuLyFr= zlsR~x56lb+ZZH1_p|~Ghr-N5Vfyxk2x+?j=%rL|K<^Kd;*d4$AyljwjU_Ek1)v@2PxbX7~~I5_KIvr2Yn9z5r@d zd3)>jGc-f%lP2pkZ0EN*E zka-a=|NjN~4Q3uZFM-;t#^AgMiV#pbIPsC0K_m(-kAQB5fUbdj@sXK9CF&*8UI%Yp zHqb(Fs659fW(Jd}myq*_VCe)jrw8qCYkXp62#I?6-v+rIic~*B+F+2m>5xy%3>k5V zJPeA1j8CBTBB)|DpO_gE(9})%#LN(bCbr}gGeZQL*bb0;(8SJsVrB?H6MOK9nZXB5 z?8_%+29LOx|3ODegQ5U5kHYbpnIRHg^cAkFvm# z0X+*n)za|s-@IH6&n1II@W`-$AFaQ65n+t2>F+Bje7Ss;{ z*2RYH)e)_ zhL``>fzk@t4WPOh)c0#n41?U5rEsj zpz;{hj)?fq%&?{DCFCqMuv;MW$>4+nq+u=4<2a-&ryKfv*J55 zLrC+>|Da|%$a^5MJ>Qub0-9e!_V&T*zwgWpf10870JJ~(42v|92 z+y_)X3H)Sckm-K;|37lyBN9|TKum{}X71p!$L1$9!-u|?|JjhuhOVRYfsEBNf(?hB zkDc?Anc>2Om;d{a+sELwQ1ErNkc$9ZAa0-Y6Exrd@_!?8-_aZ77C(?<(wfl#6Evg8*tgU9@rXzPc;b(U8Tt9LUSXn_Dvkv@WX6V`Z z5^{eROg*G80SY80@Rla%`8sd@Ff$bFdilQuIbFii_CHYmfVB5T{xUP1*!>do96Rs< z{}446f0-Fr_Pj*e*9_eY1l@uM%1beSnHd81yo8(`3=40_*f6;A2Nmw1FlqVA%pkEB zxnJtV3z-{%+^f0dFEc~LUPRds(zD|)GegMUm#F(%!3X_7#wc$<<;_894Q4m2tbt_0 zv*3tSrxKW2t6`(L80!SeaX%)oE}(XIyN zgM@#~3_J&3Le9Q{=FyUW%nT9-kjp{P_zL)bO89x!5v<_uA9$>7$vilZ<8GlAL_ zFt<52Gc$i-hA4v87ia!4GbEgZ_Q9a*PagbZW_WWF+V^9s01X5?gBD<`FfcIu`Nzyq zaO&m%C!q2YoOV25^&&x@B0(trYa z6}+cPfPsZUh99wx6|`;vWQPU=3xmr!=vXT>Y;71=7&e@H3E6`RS<4I$+Xx002A1|fOVMsXt z5^_!h*i2B}4<4gn0tG&(uDAel|Am+TkAm_zvlb&Lggs%g3To|u4#Z%9>>vBXz`}6g zB6N-blm?*bNQ9Av;l;(5kbAzMVj7Gr3@(>mLiTe)&p@_eWMSBF>E(X~kX_*P;{#cb z3vT2Ea)ZkrUr0MA6nqN@WSp#ok%eK#<(L08;QHYEdBDp*+@MEnfzBfa`DqDA{gs#h z&5_kRf$zQcY-VNp11h;d^$tkw1x6NzHCJE$?|`cXttSJOpRo1T1&p9f14`F_7+Dwu zuD^ursRFwnZG9eL?iRgcUZ(RWS50rj$m{}MmJcOn< zm|DoV4|r83s7#u`%)+qd;Y*}5sy$(6AcIR^P(}sC#SUf`29-xIA$NDd%MtKBg3vWi ziSTj+r2Yjn3q#AJm;cX5!N%M`{sP4X^nQBg8Q`&5P-6n5UV?>%LFMnu|MhV7-l%;! zS+H_Y5(W1cJy=*6O2l9NKL&~qxZl9-a(7s4?*hj*SPM8#YFJnp1f*X52QAwNML8(n zPheqT;E{TTQkE@YVPW7v6WhVU!oY&2_Y4aQ1B28n`1)m#c@LoG!R!FlonN5liGnNz zyVVoE*9;U-BCHVmQ0}b-kL5wm76h4V!OFs*BJ~P><_1X2hn0oFKA__+xnJ3Cle7)+#Ip{{uW+sOo8H48F-4J!*nfz&IMKHvdX7KR)&u`8@B z3>j!*FIZU^Qjo+z;qZr*g&{%e71Ew!$ebAHW?qn+WY{3~Ai@V+m! zr3R^EIoMekmPo%snqzS0WrLp60`jK@I}5`W=~s|D7-9YdjroJ>6li_u!_LC+K>8KZ zx^+mO7^FXgorU3x^efc42hcn|cr42m+}7@4XJIgqc?H>{2eZSmnHjXr8x%fk*jX4H z@W`KGXJH7Cd4<#_^oO563Tk`2fy#sXhv2XPmEW*=GRRGep4`yI{ZKzCaIi4gvm>=- zpnXM98DYc0!tg-m73BUwxOuQV4?bQQJopVOQ*t<17#w6@LCzzA`47G)1iIE4l5D_j z`#Bse3cR5~;4`;8Alo#-;}It~SQw_rzJi>u0d@;$PN9d{x0!{h4LXMX zhJ%GcLGBgW{t;yJK(oP+^dP~>!r&tJ>VF`pjDW361rHFpf&2azoGc72a<3r!wc&1q zg(Y}S){8qHRMSH8Kn5oZ!xp($@bkez@ma&k!f-(D734evm>tmg2Bn!foGc6vrsE*1s@g;)RGL1x43M;h~IRsk32pl%FUy$=@)LxAF||Ngkt ztAW*nk^{J1U&F=1P@wb*X?zIo9!N70dN1q}E*6FtO0WKd?g)bK2Z7wH44#{E=LW3` zgv@tc;9_CmQGSKAKMj%&+?!b-*R(>-{K3V-P@?<_b&WV;ehysGgC_ey@ub4d!eF5S z&6lunfYjUIezyxZ3xkKstN*J(@dSc2Ex-Wfjk0xGv! zpz?|!d1%{Y1~&`C7nN6#xn=11;~H)j1_9Mq|3Q0v5a9s5zsseW4RT5lq|bPRn}uPE z>MN8pi{EgwFlYq9u@`xO|&xEv6&fkd^sq8?BQWyP|$q!-wN3r&>it02SV2)J>X$su+e<=-v><% z_+Uss@R5Vy@`Hnyg&{@r7391Nn427%nZe`6(6df-cv%=GXud*Pe+;P)!K=T$AcOxP z|Ap|fFzg_p4wQFmcv%=8XukUI1j;WkJCVkNASE(nE@lNU3j>SxD@fZLrWPrj!AG@1 z?*hBR%fb+$^Xk7evbo?j`=B-~c+n-O840eN8TeQjd~{!-%;Spiu`qb(zJi=b54Ovd zm(3e=9t!w$DNxjd^REpb3&R54SCDn{V0DQ63m(0Ou8~dQV`2EA_X;xC3R4HF`@q|b zA>%0>d@Kx0^pWcZP#yvwy9;(JsJ>al$HMSH|J8qMQ?_h@E?E=&f+dkH@a1Bb~g$X+v;I@rD|ci6@a zNO`t^pM}B4}rvf$v}O=4JxleFU--6uveBEDR22Xyp+o ze8HP$AalV90xS$~%n<1dq_0GPh2e$SE66+z*iVpr1Wpdn{WCKJSQu2y5&A%7)fxd7 z1_dNBkh>2EurSD&zxw|Y6vwc%g;Ym@{qK%&IB1R47XcQA8|JV6M}guArUy1Q2Ix+R~765!3_(=eZ4nEDUF?UP0zW58R`mqE*kKY}a_3D&Rv^B{)0g+avj)qe|6UIwcNon;B?kAjA6 zo7o}jcAUWN;w3^X3@87bg!C2A#OUVSzG3p<@B=UIhnLwCL|7PPyk9}i%Ydnac1~W{6RA>)V>L#EDU#iUtyd#=+evrZlk+$Loyv`FWDYZ76t~tSO2Gj%mnuzK>Lco zX)TBAu>Tnk(4eRvH@JuC!tHk0{fsY21f2hVh_W!G_`QOhkq-_V(0CARoC~~@5fqHz zvP4CUh2e!CTHHe7q!QG~1^LfIjD4org_8|4KqGj52n zFiZ(V>+6B@xFa_x?0$%`FdPYd^&fn9vLC1%1pAy7b80G}M`u`Z&-H5Uud@hq0Hxu|Y zbC4!bSWXdVVTcHMg>=psJbi=nI;gM#<>x)(EDQpnXnjy{d&8xf6`ZZyxc#B)$zF)F zFt~)i`rnM~4(R+PWHkrVd{A(MM(03vq=WZ3UPX$9AtL_O z|7D=G0CNx2-;m}KbPp5sJoXSN7KR&%uaMThfXYnpd_Cme0%(y3a$kcK3jF$FR3&WhGSCBLGV17ZW zbHV40LgPV3nuWn3gN^s`{l;A<;dPuV{n54e?9|Fo>u(W~Pmjj<9 z?gB1*N~BpBGSbk}8*DuxG&4fe1GET)q;XK&bAvPs!=1EO|6P#d0?8icMc|YN@-8@i zJdkE#_>+OV-NqmTk>81&_91!8qnQ<)7F=O_$U$LmAj87YlL<8s+MjTdVPTk&i5SlY zsf&;PwY| zogiGue&rK#EDT!;UO~K>$+cqrk!-P=YASL1GCCEDSs)uTb`Qlt9gc-M(nP7 zl)OT^XETtO4SGHh$ov9D7KSq=uaM5(4Me${Z-OEV!&Lj}!?)MKM|COS~C5sXZLq#cSTuLahFqD*{#-)xD z3qwIEYFs)fu`uM6BIfZxaTx+N4;GgocV{TEFtn6H$I!w4@#z2T*2#*^d-&9m*^WDP^ya z&QSG*#~Ud8Rw%PDw3NO2?}n@&G93*b$33CU!myf7mErD!;Z37kaHKIc~3%xh2cmUqOJth%Q`A73>V5?LDnlfgZfNa-g;l$c_*d76yxQXulh}_9#Pzg(0OJ8o%&5sE66TnFXACLG@{m3JXI)`76kt zV6YnaIZwgOtW4nDRiHi+C_HwkurORH$K6J}0hI^e;{_eVd85L@@SyzF|0+;mfa3tv z=LPjSAafO(cnI@g(?e!OT{b59T#A?dhkL|&H)XH zfa~ZORThQ?6|erk0oA)O`;gjdkjW0ndb$o(7KW56)VwuEm4zVzNenc`utAlDA*KpC zuLCm^I#+u}m4zVyiySCyUx3_O^$K$4A$Y6+;wP787VxP&?%=B(AoZPy8Vf^3)hqZ~ zCs3SfsIf3Sse<S0x1Ngp+9OY3=Xx>bPo$l=>AQRn`P7?@~}1cAU7MRvoP4yzCzj? z4PP?|o>BruJ}A5+)L9r>YG3`Y2DusR26vS8Gfd#7HRMjH7IhYe8+FjIfw=>GGACpX zU3CJEZkh?lG zSr}5V$br(_5=|C{j25)9e8~74=tKueGl?eg%%4#NgLWYxnnakxc}kF9S*V^6xR#1SQz%SLDxV) z+gMw)SQvh^y@KqOf~6}a#M+H3S}Y76?a*=sEbjyEmw+y21?7h?S}Y71?XMvB%ER2| z1f55BZ)O9yt#PTIUs8XM08jfD!NhEYia1PFtl_-+b_`c zW23{uu%R0|j}J2wvbPw1M+qprQgm1tEP9}AUf3Df;8|11{VFXwEDRAnul`>Eg%{W_ zpuQWp9)V^o@OZQbH)PohI6d#sVPW{v^9r(F9l9R(j1CLKg5FpEt3l?##-Jhl8zAFO z;K3a?ZcuX^d{`>9jA7AbVR+FCZF@n*By?FAMEaoZL1-N6=&~?4^u0n_n~AnwmI-p% zCCJYax-1O!kC5g9koGx%@>GQ`3&WJYSN}_q;{!780_uZ;?~m}{W&%&vg9dXzX>yG& z3xmZYq`4jF`~oO`Pw28R9O-}c|0CQy(AWW}ZQ}{rn+CZA5jvLsMVEzP#>7|uw}Hxf zc)Y>JO&}|CA-jv+!DHzvdMpeYQ(pZq1%)e9B&Y!J;bjAjEJM~&yXdhntb2%X7ii5m zD4)gXu`m=&c?H>14ztI#nHjt$1UgpOpvS_nX3DGo_u=kFO~*JHcV)1wP#t)ck-fKLXcz0s1TqduBk}2XOVUHVt@= z&6OM6l7*Z-*`UwD@Mp#=$emAc^LtcaU;D6I#Z|7_cxf%zpKM z5pp^K&$$FbCuz5W3Jq}m4NCJq1}qGR?w^FL-37HjkkULTJ>(d$FeJ=<1vxVmoQ#}# z+2XiBb5h{77N9tuV8FuAGZ#9y2X;58O$ogZ$rZe*jtRP?4cy;9V8FrhS9 z(3+nI1}qFU^IrW|0i`c^nSd0&p!fsFhbuQ|7l+eXr*lr{!Q)H;XvTrtJqCs>3^DUx z{SN_!D^i$&XFuE^XJUmIvM|h;kJ;V=uW*F!C$2DLVK_4X)&H#^bHM(DuS*3VRO$vf zWDFcGps-tE$ifh^0Mkt9`UY@+lN zUf&KX>p=F-Fk)fYf?XZB_yEmQfz%xUxevQKaM=kOFa?F*3nLZ=mqoAs%Yo7XIJ`Z1 z*_gl+g5WR)r9B>F76ymKul~P<#|b3ux%RPmKodOpCS90cY>ZhL7?xo53wXr?sGk9{ zJH?oV!DGoQ$Xp}XZb&|ZG~T?y`{z51Sr}NBLh~zX_(59U&^e?H#w-jzIMjhBdZByW zZWyyLOj!yox6sT3SM~1D{f{Or3~z9#0}q`;&$`qwVPSAthTS}HWd*%^J-~#8Va~Ew z|Lfu5?2Ov)0Z;6?al_6>1hto1OjsCREJutg)8&QxS7Dm5JK+?DllVVxP24JT%PpO67(Di&&N+3MvoM70gRXUj*5Px^Sr`iTAv2h#&7`@ua}khu~TEDT@vLC3dX zb2HF6IFPv(7Ay>kH%`L$x`5iJJ{Bwt4*QY&x8Uu7;JPWpf`!3l|0~GeLvR@gx({!1S4BD}K-=~lmMjcg4!-)I1pKaPyG+3SP~iF!QkaOhK ze|ym0R;l8?^6WV8z1VbNbc)B{H4~_F-T9!X2MsKN(%l3r7KS@lvAY+P#x_{7Fw8ms z>OXkCnrS1bF9J?vAh|PEEDR18u*CZkb@s!XR@MyM1e{ zSr{%{#ct*aYZiu*YuM$UShFxlT*ofQV8g<&2Zx-D4GTlU4ea_XY*-jrZesUChz$$F zj+@x^71*#a#N5KJug8XkLEtuazpt=iVK{oc)sVc@urDF^C@2iUSOthxW{e<~<{fb%n`4GC+5Gl6eJ1r;Qqv|eM& z!tmk2tN$^eGzrVgka8H@E}3J?!f^A_Nyr!!DDOfSp@GWZ9kwhCA`cOJ4MBFFv1MTp zcnGckVdjC`JK!A(9*|Kr$b9(^TNVbBhp+yhh1(4pa{=!u23=G#50ocCWezA`so1eF z+;|8b4}zHs9n*BMV_~@S5IR@DR1C@kuAo6j(0ZvDI~E3qN3Z@jg7Q90pKCKSvnaTL zaN}l92QwVGAuVAK$T>yeHWbK@bL?0cCOn1CH$nTX8|+vZc%I=Ni@0FN!m#%uqJ04x zivYC;Uf8iPggkro|2-&PU~WNa4+w+Z;>r!V`54qG0L77lJqrWR3+P()D3JF+dtrFk zIgUZvhYt2E3_dSj{a*p9^I_(~+E*^kY|s;}FxpoY_ACs_NbYP#YhTTgFOp_%-dK0(~-jgX-u98eCLcGHxu}* z3&NR9dSPMZ1fH*B z0=Es_AP4M%4#EYg|Kh;Hu;Trz|AnBm4?AlMG%m%%&f$z0#s<&zfzqLhBMZZi_pkmh z2dRg;&BBp|Vaf;8eab$LEDRGqKUY?_Yse%Bs51hx zYl0&SL(XS}xuAB=5=Rz>jL&FmeZcve3A|DtruU2^3&VrYhj|!b~ZTP ze4v+af$ZyWW??A#16}h8-oFFe>j@s&bmoqSA29-MU+!>bVOa79ZT&2y?qC9MUi5(6 zW%uTt|VgAOw%A3%EekgZu=F0uZg@!om>o7rK81 zTJBr8urTyuF#}Y_gt)LUbo_nwe+Q_H0h^6d9yb<-39PRnYoDS0xC?G940BjtL(UKfn*~aH;Pw}2%`Ui`2`U&sWz8Qq7KQ}2 z*GT7dBBd3myA|A77SEDQ-;uaVBC zKsEo52Ma?1*K4G+RUvgv5f3{Ds2r2=WMP=V_4+j2aU6X;#tFsg+W9VQ5J&okBt`#gMcV<__^}3feQi; zZqTMikUa@rEDSoLum7J1*#mPIyxk452D}9ZoW?+LKEaEHq3_s9$hZ2GIP>9WNG!4-&8cJA>?osfCoG&;elRP=!A? zlPAct?%d$z*q+=>;0}{FH)LI#8@x3PX@8h_voO4ne*OP4C=Oxfg4^bKrZx#j# zdE{^hm2u!X6zI7akhxh?qZ2iU!^qc0)jf4(dX8OpDb*6_m4g9DvJ1F6#^d|4P;lwU*UC86bF zjxP(t1m)L|HG{D5gRYkV&kaKN0Zj2_VR)hZ8ueTZ@V+kBW>zL}(1FMIKyE(Z%fb+& z@*1*+9?485a7E(*u4q8%;Ds;fJc-vx>(xR1SooOgOh_7pq;C;F7KRSh*Z-42@c}av z9G2j7O`N!yz%)G1y7;j$oKSm>dTx(vGx*#dkQ-C{SQu`oz5ag$**xf2av{iK=-op- zek=?P8m}RH-C_2kmPzme5>zJb@nc~K(1fNhXgavy$HK5i^YwpW(BV$-I0UyPU<0au z!6#RFK+c$8@MmGLIfQ+k1}M!d__Hw7*uDP08MM$HY#ylZ0xDNw#$5%E8-U7HP#y~K zXJPnx5c~Kg$h-o77KS%2um2ms`-7mo3%#EMGR1QZ6eOT>0Ms^G08;Pv`hO)zJ=lJT zdgODMnLdGZxN?J2x+mmp;T!&-{kE?m=l_Aj(g%FTKH?4yrmdhJ706920W1tJJdxW0 zo?x{QJ3M>Xn%S9I!M=oy>6!$vF#Pa(je4E~tQ_zJpZfzT%wXp~1h6p7@O}+BClKrw zkRKrV3ba@dRNi$2urQoDfM}z@+Nq#=cu4>Y!wK)#|KEbr4=fCj`eID?K>l~+h8(F4 zxpVDC01HEl?`z0eH)wW(_F{ni{U?Bh;ehXJ$Qm4&8bo>nHGsfnGbo{h)awMYFbMdg z)n!oi;HYEX4ZbS{lsQ3ZAtsQ8VM7pd`^K4<4SbpxWUYQpAPd8Rpx0Q>vjXX#6Uf5w zAm}yHns{ekHl(?qJ%KC?AA(*(?ihu+A9PPB4?71a-`xSZH~2MV4G2u03ED*fueyfx z;aP%M7$Snv>J#uDJ#TP54k|x1f>;PuQ=o|vD10iR)&Ix8=I1vB(|7%bO6s!jA?x0q%`{3=xGr=qj4cV_D zW6xm!pp^0bpj-m-3@B~=2xeiJu@|YFLTaai+$RwN+OPKd|3XkW!t6%Mb09S~AuJ3A zd9NYsd0_Uz+cl7NAqgQY3^94H|Fvrv$A(4q4L(SsMu&tbq1? z&xEotD3rd2oW};U6C5@WrA*-PhWPtOC}=;fRV9ptVMi%i zpC3Ge<;4wN^bWm?)F+IE;X~=`|7D>55;)Bu&hG>rPjwCwJm9=k5yrxxxEp&v2^4-a z!dMtos$WCSzk<0BI-!VpvQ8nTW9rVg_D!V7kJB*-3*a2AFt zBzr((lc0JnA)JMQrxq<8K-(%c;VcXSwXgqcf+mB(;RU+82bA`}eKyc2nG@_HIZ*wx z2Bf~_^?wymc?DMQ$;$@sOMy;6NIkU|}ffcnz7`4CfPQV}iAD<3O7+!3*TPx&65gyFv~=_U2B8i$`&T_HIB9+6CE@ z62Zd2(fJzb+$_l1L?F3_2o?sL&ey2tE<(p%=0vbC1a!Ve-OumX%nWM#?TBDuNa=hH zS*s6SFL5SWA;KU6cpKgg{VX)|a z{XY^^*230WfcAI%<6-CUKuk!02jE>G?YkY3EDR|`929K>gq+kt_@n zy|4fO0hKi{^AYV9P{Ofh0>vKE;zw6*@Pc~qGU@YGfHR{+uxS!(Q z%*x~lb^s_$Q=(WHe)L1*(Fc^4eBkHbfzowL6bl2#1ZZ6db02&kHFF{(4?BlD*d>rM zaZ3~nL&n6{NcYJh#yY^E%PauW0v;!S5XHifGYPq`1{p&ESFCEDSA^ zUjP3EiUU|ahqfC)(|A$fV%Y^g5&-g-O*9Kbz?9ej<=}Aux(5zm%$fNb>1=aYIl}}VBL#)?k{A|-A2VM=&hP{8A8>~6y#%G7BQY!t8na$Q?pgzv zi;(svy#M0a%nn)V2{{|)3&^}JCn0wrp(Sn5ytPOy3&V=pum8^ig%Qj=Xnuhl&%i7P zP7dzy1z^k?U;)T{X-F&!1IPT=DCaC@#Ii7mAc=w8T@%Z~pfLaS{~MsiIWT*W+E~mE zU_-&}J5V^RiDhB;JAGx5Lr~@;wc= z!Br8c>jbXvGvZhn^tNJO8x9JK4v=|2U;kGEB4e!2&^8Ui&i9)TU}!_DLbN)UeBOyFJuk4^IDyEDR|^Z~nJ{(iJTIqlWc5u=m^{ds}uSvM?MGdGmh)D4j6HgX)na z(7GE?n!l3B!eAl#1~PUG9q)XR$imCw#Z=v*zM4>cT1937*9yn*d>eLPKiG^ zWW|CDcwXj35(|UaMx^*c$}6CJ$C1p!kRtO2b<7p1EQZVkxPs4tGD&7(xFG{gJ23ad z)6N}`i}0qMl4KT!85@w?0!=%h`fx%r3qy|FoB!OPx(8-9Qn?CByIYc37$Owk{NDpo z1CBS;KC62(JF^71`1R*zf~Hx>k*0p!pnBp9$o(pB{%=JNQ*gNe@AERR21l4Xd?o~x zu5?mZ7!uUqK<2if>B=F6g&{}%4P=cPv|SjI!opCY{swhk4W4!&g(;}atw~{Fn4ta! z>C6LAx&hDCx-_#wI<}znwIqdwVTJme|JumzMeYMbHqwLV^+E2u0#dK}20ot-5_^%t z!mvg24az*_pA;5`4VrHt^(ic@;qCkxf}+kH&ELS zygC=86g($=A(e%}YaLQO3r$;~aD0=>!oZ;O2FqGsXcfz>2aa{v7?DgG3j^~yq;!f@ zhJxbHCXI!`Ko`wjkhMZ@K$!qkwt>o-lr$EGlWURO1YO4nGNU1lg&{`o&3_?K+`_^Z zYzA{a*fG#^oL8i=FoYPq`F|NXY$1(07jE!QA4hQBypYDiz+?F4e<*TU1Wwx?@J=;k z#gz|Y6+c+NCpRen38b?y=$O7i+FR_!%T^5XjT<*;hcPJsnWVEYRG7Z`zXiD-1KZ&V zx1$G~|Gc=FwZIHF?h23@kUKw1(pebxtvLzVLxxs2f!r`9orU3s!<+x$bNazy62QyG zbO2-ksK^DMqqrlTg<*>0oBwl>%K+${3bQsig>3>JnTE^q!z!p#DW+rZm2pk~4mu!+!n>`XFP7+$!)`F{sw0Id9h=SR>e zD|nX*xZMgWZ&ET?7-o39K|N0#9A5D9267yN8{EaHew9PLB4g+_{9zTmr7KSVSZ;;l(z|VmIZP5nz>tixm7z6^|{O3c-x1ex^ z_!~6A0B+QJa)UhsYU5AHWMTNW3VWUd`E^4k3&WWJgkM2<=tw3D!-;@5sN>_{`8vo- z0Z^g=#lxFS76yjEH~)E&{RnAe!^b7S$AGzUGl3`np>0@|EEa|vL2v%sBl`oc4-z_% zy*X~&p!01)vRD{i1i$%z33TZSIP76_X7IJEPr+g7%FSF4W_WTl`+yms<~_K-Fe8hF z;m=BF+XO9-fZ}&Y77Ig4%$xr+;As{kzGT2ALhr|Yk;TGrC7y7dB#_O*@FxBZ(m6fI zX)Xg?)`Rk>MK%iqOTrsSpA?o}Kw~!0`#?Z$jLBwUFi3cVI{$(kZlDB!G$!1W&B9QS z@aF$slAla+W#FO=$THG=vIr z+mCD(29sp;x(b#*pmEv?_Aa>JqmjeHuqF8o>bgv1zku=+q{;-(kw@gPFtDV&ft>LT za|nBBnls&2_;VbI8X^ZyP!+`_>3OM8OnnLL`=nCCKqVh&VSJ;-HY zxKr@ve;_EI!2FBUu4RVZ$-(ppRKNIfGwlJ@au*s*zZ3YrW{+l8 z=mJgX{DV&(3xh)mTAu+aK0(PHbf^fZk5rMz!my+S>TkHYV1GjnV*;--c7b^tTpz5- zV_{$@ee-`3JnjPF_ojmPOjvE&ND++2Z{s8d^5N?>;*X&@lPHL!-vv0|6hX2 zHF(&A?;!+j_XVYB@Tr|n+{|3yvIJKD<+CuXD1Y-`9;6TKcF;LhkbCIBA>zReYi@(X zFeRUbVMfK9|4Q&U2t({GI}c7h;P3{ew+Z%!i$Onx_zxjU+?iSR(0LT-wKsu1_vj(M$ANec{Te{!;uLq?enBSrOP4HYc z(_4@(XKqLv%ZD4%IS0EF6n_>4EDT?I-~68fvKOWwc^?5d8M$+Vo4n95%A5ighJ^k% zkTs0paD$hv?#-+@pd<^9=P3m&3>^g2f!wgCfQ4a0|C|5dJzX&Kz-0`0#J~q~kEshc zmj5LCz15IbT<9CUD~bR1ARgsYW3SL&&5zNNZGK>$Abz z+r8240=X}ykcHs^iFzg!vM}UKCe5BBg)9s|CKDeHpt|BmAq&HlDR2J2MvgzkI1@9Z z@`Ri@p;E-c5HStWW(1YR7DX%!A=BPq+*JiSxCdl@L=g)^%CtBC5$9u~+?NhsX9o&g zP#SJ2Vqy3(4LLu7(gj*wG#Qi}J-ERO_n`T3PZ0~lgXz%n29^e)WjXW^1uzA&2hc_C8U3fd0=2_jgm;Hsqy$?14Ovr_QOv?%GV2ZMJTpwaH>Ua-#ViaZv)=rd1Eo`#`6%wW333m( zO#pKLiDDLplsUw^=SMLM!;(3~xd#-V8YL_YPv*S&uMct$EZ-o~3)5zhYrG-jk|8B5 z43!H`LhkhgwcU`$T0rg9k`fk%6Z766-A@BqchAfQE@eT{1ui$|l&~-ynE&QKBeI?F z`wF0{q36h)C}Ck(vhWRLE)(WH_`C)aJiUSZ@}-1@L1Ga!-N4j>!xqsl2h~%ca8)Q} zVW?U3=D!d;UBKG1usgdUlfj@huyR33Cz4FlTT z7RY@I%2^nAcD#Y_aR7;JDQ97j*nw~#NbE#83xf!n*qw3~27w)KAZw|ie)|A5PY{$w zpkgc)5c5FhfP_J`LVDC~Fx-!B4E=TO1IAhY8Qd~OJozeAwrb%Qj* z!wNKJ3u)R_K<{&`sbFDf*zpEw{Xe9=4x0D_nKP$?g<-;uH>hie;NxE4E;G1pK2pKL z@MFiD|Ia}7fy+wx{tBftP`e%6H}h|1g$~d``!W*MEDR-k-u&+c84PnTQrX7@UVP{UZd1BcvoPG) z^9JcWZ%Dc8*~bD-f1oxvxZUCb-CXR&4Q@l!RI@NV*o)i;_u^&C1|?KCZt&*JKyGmR zC4d{Uk7rFa3q$uz)HDL}*O6+_c_MHAJA&#cuv=BL1DP*{&g00`u`paX`3Ci#M(Em2aBgvj?8k7a zV_}Fmg<7vh)UhyxoI=b&g3@VD9ScLksW-USEP>a@dV}lD8FefSBB!B#0;eBu_#Mrl z^tA&jFAvY3K5%(ZnREjx-vXD1)GbWVnM;tGKXoh&4X58g_RoRsfT{s^=^$%J73x_S z-kg5(zZKma@Ij@J^Lt(DSr{VDpv@y?LDDA3-zoJh3>9b4#=@L>n7x}>z&3e8mLY-L zyc6nK7}j7{3*O)4162!(vpw}J3=hsg!w6c3T>!cF3}TKBWdDXl+RF zCIrYlM@$0?!+}e0Ap416W`PH4Ao4X0EDRTL$b;&>ISnif4=%kyTC3;G%LWbwPspWK z(0eM5G_WvmT*htBlLi(BiOX-0_W6SDnuEj-C>&WDSr{xXBhoLZe3EEnVKBM;=6?sg zOhsO|0V>f~f(mNzyc@_2k46@TDOaHVDQF&yX=Gs#pMseOLFGk7BMZZoD{mlY3c$h! zyrIt%atDVOH}upi$bDZRJJvL^Fa%shwc|h|3&YXLn0A2F-)UrFn1H7KLn8~ravbV; znn35vpqj7H#KO>tMLnp@wP|8u5V-c{|1VJ9V1gC8uFcHQG{6)NIUqQY+Xuq%fs_{| zO)LyIu0hAeq4jM?6AOdM^*5;d3!vcvE^9m>7oUOB=$0lHhK}oR{?~!*g@qk-?hCT< z#EsjRhn)lD#s^I-40o=-`9B{y9${+1yPmwbnI?jw(w{pRM7cuNS4cFoFf5*gG{z2{ zM+JqeNiz$B#!cwF6a%Dx@6pV{kaF|Q|4Z<-ys&;BY;N^BIHQ5iegUQJie}LHEpL$a zc6#u#f!ns;&8$q2&AXsHwxF4XA?M*6)b+8TL40Vq9cX4@sCoDX={_~Y8e(s7z4sHG z&_Ut$rkRDI;1P7p4=vo7b->O8&)I?Om1tpMIP&BTg*L`G^)42A8MMvI#7Y&=1OA6;OG^`7>ziSHbJ}UAaLsE}$@9(Za&; z0V==uw6HKdc#7OVfUg|{-;4lq$AcCY2A^kdknR(NtUU&u1r16c46Q5-G0)!oSLcU~ zx5DBr3_9TI&kjl!{@l!cUPzP~|QGwR062A)#~cZYppt7SlGf}xFtf#=5?r2P~ywcuq|UfkdTb06>-l{#%K z3=@95LAqPpjhD>>R5yUtf|544T@%vA!tmqA8_2yu(6!kaZ7d8bKcQs{I6Xktl7dHB zy&&a6Pa6wE!Ou7UH9=tt)wiIHg`wvswEqOx2ePx76|~9^l$VaQu`ulT`R0E(NFSOS z$N?};;CYibZ7d8Qe!lr1019XD`Lq7KY{+B3Qs8C7;Qoq4I}3xzZ?rj8Sh)ci)&sA% zaA;>?=;}kX$(oVMiI{d427}*-{x`_21??;hI=|l_-QxjibAX%uKHzN&44}JZX0)>~ zg#3Q0n{#_=DC4c5G$_{29*vLhAq8Feq?TA0;Ox44i<(9f8HSNv4fnm z4mzeABp=hk!f*kPd`$-ngTP3NdACLSUko|b%|A6dgc#AduKxKnW z7YjoG!&}Jx9^iZh?=OQYDR2uIbfyw0u06U~7@puUE2E2rL4}bxv!-;hFzjH&?k`2Jud`Y4};cLfmdgM+jyY9nNBwg!>%r* zavYl1LFRaLvoMq}zeOrXLG=M>{~EX_@5~LJ7<2)z9WCi*VfexP7Go?0WXFVV7KT4K zZL&z8mNZ*NW76ua*Ofx}s+>>q=1`C$Akhv?^8Q9=473jV& za68ML8#FEl-DUwESCi>sVK~6@7BYteFGoOSFKCT5xa9Wc4h0n?-r)8Ys9q1~VPWuL zeTzDu?byr=-g@TE4esx_af43ahm=(fJuD1sSl|ACh}_?Rl~v%0NakShH~{o)?F~IF z3^^QcA#=bmzkt?VfJaK4z-Odi>0x1z>4e4;v@iRjhlSw^2h=a%v<#|$Kz?avg$xZi zg5yS@mxbX~$I1WT^--X?3#2&K=>?sC^7j8ZQ24{lKrWNlgTeyRCyeN2VOWi94qBaG z(aXYch4bzIcgW>CXsriiJ|5I`0N3RUdRZ9eaKA;}-|yJW4Bq?U0$<_^9;Z0d%fev5 z^A>Uj0?d6(uvRT(4B^k#qW37#M`#{@;ci zez3TPo*w}|*BIKbo72a_P}hzW7f9@t{r!$gF}1EDSZGZ~xDR`wP?mptzkefra6V=-dBW z;Oao>3z}cSiQj`8+-7owv>i`OU}0zxdka~2104&wGl7L6vK3Jdfa2uC1Qv!fVsHNk zfXs!eW0}apV2z{>RGv#rWMTLs_V#}dD1XB81GvltUu^~Mo5RkCbeYJ)z}kwG4$$&? z%0w0h3yHUoGsIzLf$}=!mSA|Ft7jq$Lxa>?)cua&lV}{l<=UEwEDRH*-oo#51Eqrl z6ImE~q~8922Orx3g;OZD*QP+om9k%b{b?k(y#4A@*(aJ!ym5(`6y+}r<4}cWbAaisku`n#aVGc;%XA%p;2D!J8b<*JTW8A^#sezU|f#h>0u`pb~p&u0H zJ(E}%9>}4EIjC$0ALr){@27*z+A)cR!9@YLpKeTIVF*!pi@LVkv6(pyRERl3+Swp; z7$&nYizO z{;<_ROwJ%-U+7Uy;4-LV3JZgY@>`^PHJy3cz~e}c+@L1$X$pn99Pi2+dqjx@4Hf!XTr9R)@msWDm$$F5tN!=t+a11z;e37SmW5mZ-e_ z&j^~o0mnOR+{Cq)6?z8DRY)u|LpH=g+GYjQSQu(F-a__#K+{;uG!}*x8gG&I`Xk1Q zKD4lss2kkF` zmVIEee8J~=q(bk~$(YW?!a%E>Ji#%w%DhWBe9r?iRMb2Rsi68t9(`O2%H?keyVZ z&;W&<#Y`54B_?nGGr+^n3+XHdkT&?yLEyRGjF~J9CFXDc2cxyGA$yb|Gn8P9Tp(ux z%mA5h`}Y4n_+CIz zy8kkhg@MEQ?SJsyP~fx*I>Hp>OLuP2m=DM-iCHWRAdF*top?FNvfsWEKm9hs)dlj!0q|vsf5fT;4*~enQVft(nEbaKPm)e7yxoImpZ@ zvsf5jxFGU7NNmL{7KSG-Zy{rkQ1|Sa#ln!_`WC()4dk~Avsf5%T#?(LUc79eOb9X@ z+7J0Mi-n=X_3eK)(GSr{_h-~RVTZVN)^#2`lvL-u|9 z%w}Pj;PDo+RvPNYgxM?%Z#>@q2Sp>u381o~WHt-K3lHSBy9X~Dv?UGl>y+6n3=*Eu zb|7>vX~k^Nd0ub-7l9060(X4lK$|r|eg7k~Sr}$`Lfhvlpf*4}ND4fT`Cv8+!x_)F z|F3}3DYy?0s-HpQ63l;KBmSWD%rOUaUe??Hw?LIGSRHzK%3J~t6i;pj(DrhRIV=n& zNpJrbg62D5=M{s?GtkfwxI%M=&0sN2h8!*dJ~YIGn^}O3hn)j7&;X5(mN_g88JTY( zXJmuz_T*(l+VjYq40b7~>j@s0*fNKO!6N7F{|TV@0ILVBcR(uRz)LmVxtYMlDrAku zi#aR|Q*z&8Sx*TW69whizo0DO%gqEnDAN(LMnhpP3qwu*+y7q53=HtIreXJ2_<|-_ zm?hXi`WzwoHefCb!<>ht!Ht?lUj^J?~kTA$xn|Uk@3ueBB>^lMp zLdRM{=CLrmnECeq3b=p#dD&oN=it5@S}`mCbmQ!L@_V~L&P1l zAtO&9c@Qpy$~y!>! zm1h8*c>vPPz`(%8z`!6}1_?g~sCb z^z$+>Ft|hIAGkpDgUp3tZ1EclRlfl050DxVo&e>;^x~pH@rFwdBre$q@$ZJ~px9wx zFt`Yz9WFpK*JGE zzlFFL#t(P};a|{#xT8S^LKnP&h<|turPU$g3%)`4F#Qw0qw*c(AnIT=OdT$oK?kB9 zmprB7y3q6$08L*E(DZ9SX8N7r3~}#++Yo8l)eDKSJdX@I%Bm_(Nz=-2lQ2Z4mPrpz;^|Ao8Hn4urX(@(z3uagdu} z7*wvo*f83F5u)w@1B8Z&!)TraNPV<{7b0H(RhRG&5{@u+xM)J<*D`2*j7vWuaZs4z zQ&Z3l39kWV2NM;0Rj1faQylU;vw=4p%5BoFN`)I zp#Oj?M4y2-gx&xRH<*5OdO|QnT>_fF6MV3XI~YO4(anMJ6`YK+O*z;C^)T(D|#N?r(sa0}2}uR)Cs+K@Wd?5(*y! zNl>er0ldruWViJUh<`R5!!#FUFGvkCc7>|{a2%o@qy~gP9EI?a)na24a-ZaUh^=|$PL0!`2;73_=T$w8l)f8;_F%jaUTOz ze!?<{JV-yNWvC3*@8Ad#XQ+hGAh&_~r`k~Y1_y|EK`w*_=?Aq)ETHlS>>=U@Tp|7g zxgFGkakvhNKL)6LgC#^A$bFy`?FH38!5boe07)JcWBxFCFNi!t9F%5YU;wc~VDg?I z9>`P#2E{vq2Vq4*)qh}zxbs6cgf_5)=nuF8p&_aO%JjdA@dmyLCjB( z1g&mC=$v4O%16kcve3g{z7(2%p~_(V=@U`Kq0$T!)FCG&fzm%nECbr#Quv5zKPX&5 zYLIcwQHc8=K-C9)f#_TC0YW3I#l|KSKCMvm8=&SYe1n)fflB5p9)q|ao7;#HBjkRD z_mFT`NQ8v*gaimpjM*SHgv>W6MKuprJ~327#3w9*&@i)L|EZ zP;rwQPg;ZrH>7Vg}_z{AjyN$8a#a*g2*=?%Rzu_=K9#sEdhRPf4fXFu- zLdb*a{~J*G4_hJf7cM|(kpDsT|2>%e7O41TC=IRupFrggY=(#nAej%UF<(LD12#eA zHz4^BRHJ=>$_s3S$S*+hAE;*f29w_ak)LoLLWA4~Dmnka-yK>!I=n(;)I6kmR))7#QY3@| z1S%ge1tK4SBo8`|a1~TOVKPKM0ZCqufq`KIRK8#mMBV@?eDxU^7`8#>8zw^J3y}1K z&SlyIm7g#HBJY5t-;jZU;Sf}QK|e&k0ZBh-z4QsF{DwY=d;pSuV+IC>b5QvMy%6~X zBze$&lq*pA3q26|2}tIH_ORW8%0K9a$QK~#H)CL6cmS3E&;^liK$16SU|@I#m1ls; zPe76fojdXdDlgCp(Z2vm-jacV;S*F|p#v(9YX$~}e^7ac zHi-NIBze#ouPoqQObiSGtq}PONb4u$R{A_k78h8*a4L{$b`rjAjwBFFfi;nLn;FU!*8hkgE)w|0Frzf0|NsSBc%NK5DSr4K$1^qU|`^c$}>Ra4UptP z=jaMR5}`1_n8(yg?L1J^@KSn}LBr6)Nu#36U>A zlFtF{2ZPE7L_p*lkmPe27#NJ9@(JM(`3Xq!p#6+iQ2Bx|i2MR1`Fzk8E~tD%C`5h( zl6(OJ1A_-tenJRD{s5AEAp--0KU97}Fhu?Wl00Z{UKmtsLkd*>LI6ab;S`i+U|=X^U|`6G%0KXjhzlUemoYFf6hY-b_(9|qkmSo5 z7#J#{@(fUU10?whQ2P-oFW?K&?|>v<$-uzS4wYB%fyf6S$yb5OH>kXUH$*-GNxqta zfnh3C-oXnZUw|ZE!@$5W2Pz-n36XC=lCNc8U|0;5Pw;@qPe78dV_;xd1(h#whsZBL zlCNiAVAu$iZ*YUiZ$Of70F_@*`3bHN`2$GujSLJ7`=Rm+Tp;onkmQ>f7#NO05f?y`Zv&N2 zQ27t`5P61ui2hMK0|UcLs5}EyUI9se2Ll7c2dKP&9YntYl6)rv1H*Tyyn-!6-T_Iz z3)H@Y${W}~paGRfa^C__{}n1fK^-Fh07-r! z0|Uc+sQdyos63MSix?OfmO7wM zzkz{)fdeW(K>{Lw07-r$0|Ns;RDOXtME(MjJm{_?F{u0oF^K#FB>Bw@3=FbR`2(U5 z`433)ptG)2pz;?)Ao2`np)>;n!&U|c25qSP17WE6enj~WI#zny`B z!4fLZ0F_rjk_X+#>;RP)5QOMAK$71HS|1FRR}g^63m~~~7Xt%>A5`9eA0n@SB)^-1 zfguzs@4yF6w%1SEOT zoqvT;`35eCyaST|4lpn3@f4X3{d$4Nb)B@<7ZHL0Vat43rO-O85kJ0L**41A@T)C;d=_yzk|vf zFhJxVAn8BNz`$@6D(~_^KpI~MofUl4?36e z7F53A4@6!8N&Y+o1H(h8e8X>uyaAH@1yKJDDnH>DM7{yZe-{}T7~VtW7yN|CPe78t z#K6Gt4JyCk2Sk1Wl04|{;=fS&1K%O?8<6C$FfcH%ut3VE3*R8}2ax2iGB7Z3L**ZQ zg~(q(lE22lz#s&b|L_GO{{Tt;Is*fPBvhUOCVvDHPoVMf8=x_8sJy^ui2e^q`foBY zFsMW26+S`a8O|Z}-vW(qLFElTLgWRIg?7#ISf@(phw@(D=t4?yErQ27b3A@T)C z@(&pp7~-Mw3tmCw8<6B5F)%QsLFG5Rgvd`ol7Gy=z>o`-Kkxz~zX2)ypD-{mltAS# zJcr0HK+^w|fq|hKD*xaaM1BL3Jm~(TCaC;}rx5uANb=7a7#KRC@(fV<3rO-W7#J8P zK;;FVK=eOAl7Gp-z%U&uukaWm{{cz<6=-}PDsS)zBF}&{zXm!>Xem_Q;UPrc0V)5z z0gXRFEx(9*}DsONZA}@d> z|C@nK$X`J6KMNxRLkLvV0a*hkVjrW(NGJKzo3SYM_xZMp#~!VK^Gy9ynbRqHAKEZ6d{kiequuv zMBV^N9(n!5fl8>nIzm74`iTn_5P60jP#To>LH#G_`hW-J5b=h`5E>K$$m=IQltIKN zAju=IpJ0H>E8K#p1L;RzKOs;G74L@9pt>K_zk=GYPy!JTa6q^pv|x@1gP!c0lAoX2LKw`yDtzt3ntU1fVobEsS2;4x066V0gd- zRmTpYVf%*A#n(XBa|-Z6)WOWzX9o2bE2{W)sQ3eMRB@QT$543zW{CWRZJ<>u3=9XD zAbglQTr?=maLIwhUqQ{+oDA{jPbi<$9O7PKC@lx2)u6Nil(vG>u24DvN=HEHcqp9( zrHi3-EtGD9(*00+29#a|rPn~|El_$Nls*onFF@&AQ2HU1egUQbLTNq=h<_BIv^JDB zh0^v=+5<`lKz?Hu7c8CPZcsW5O6NoAW+*)uN^gPEd!h6(D191AUxd=vp!6Lm{SZn&gVL{|^am*Y6-xht z(*L0}i#5dETu@p7N{d5j87Qp;rPZOd4wN>8(q>TF9ZJVS=_Dwf2Bq_$bP<#;gVI${ zx(Q0RLFqmyJqb!rhteyc^iC*!21?(B(l4R(KPb&(1M#Oals16UErt;BiBNhTlwJm< zH$v&XQ2H2@z67OjLFs2u`ZJVfFoKxN38l@T_E|w`J1D&hTK+ph`EF3!3rhPz=^!W_ z2Bo8*bR3jUg3^Le`_iENEGR7t70-k6i=cEFl&*r(bx^tqO1DAjE-2jxr6)n@X;6AL zlwJ&_S3~LbPrF2}-9!=@Ka21f?fI=_)8a14_?@(kr0! zW+=TEN*{;P7oqfaCx}08L-`M(^m8cv7D|7H(*K~esS89OGc+7_LHAejK>31DS{zC% zKxs`VZ49Mtq4aI2J5E7qSE#rrln#c{2~hfxGsON>C_lgi!Y_vMYoK%^lfAB$RVJIyJrPZOd0hBg}(soeV4NCh!=}29Oc`SMmIut4%3#HSbbRLv0h0={s zx)VxIh0=?l^l~V@0ZOld(g&dQWhi|fO5cal@1gW>D9z#kao2iidg6rgd7-o*loo~3 zQczkIN*h9Hd8q%)pnOLt-3CpszEFMyl#YSY2~au(O6Nf70w`Sqr7NIx3zVJGJ_)5SLFv0t`W2LZ2c7P)V)e#bof>2rl zO3Op(4(NUwZ7AOaO4~qbM=0$Br9+`~0+h~$(xp(k5lZ(!>1j}UA(UPTrME!oy-@ln zl%A#uaqk5v-!TKizX9bxfYSC65b>{2J}b0*V5o=WtG(F}`4>?6FHrh7lxBgd=ZDf# zP+Ag7Ye8u%DD4TQeW7#^ln#T^QBXP#N+&_-h)jq(@}T^;T%)1Y)7l&*r(tx&oTN>72(3!wCRD7^zpABEBvp!5SMeFsXP zuYkn&8z}!Hl>P&yj}}AZnW5zfFO-&m(#lZU07_dxX-6pS4W)yibR?8cg3_5#dJeRn zafR{|7eed>_1TbdQ5z(_H{1s8PC%S5;Q-|aKxt$>$ZSIW!=QeM`3esp<}=)Z&!rYL&Y^AG|26s@gwdKi2DmTAmSIoAT&rnXnYX1 zKWl*$M7#jWeW39{*#4{nNr=1xl00a95Vk+7KmsD)fD}HU{Z;V&S>h1+2}tsw@j>|h zEK!L30wj6R_#kY5)&>!X{0A-w4RSwde-&(eF+mtAt^uV%YaH zq#v}u3bsG1KoBAxpbw!z@}LoC*#4{n0f_j46bKEH2hB9X_Gbm~L&Za&H0W$J(E3;C z{sIL)i1>pb2o2H?8c~Do&-%av5ifxH4-|i(5h+<{{B2-|$bW#QLr~fSja(T(2nbJ8dU$klMsGClwNuQ!cV^qp|9M6&@*mA=(rmYS`@0@5vqRjafrAY zRQ(&Mx~YVHQ8{Gpu?`6mY<^nIv3+n{`RsC*5SpMC(M?$IF# ztpTN_k3smk`yurAeGvN7V+dUWrG1`2__EM&+jIoNKYJ8HKZWYIhw@pV^bV+bta~Bq zz8{9r#d{z$Ka^eoO|RFX>I$HAAxuA19_BAnY2>^CVoz`a?P_FT_yDCrV#qkB5t6@Q z^qwt{_C#VFL_7;hr$FgkC=D~C1j>i$(~U&c2Q#M(st%?PMql^~+SSLvzzUlD1g(Gj z2jRo^t2;pXu>I-c22GHBQVdlf^h0y{@5cje{)n`D}!}h;# zfbu1w@*kjlX((TS0krE7wC@U5g27CN&;d|+*#7zoC|?<>{|1z=2)-?cfgynrVxBAm zXtyW>!wo1O<{t?rh&&fme*_x81IlNI%I|>kVd{TC`OHvxU8w(Id;?~P`7rkuK>5tz z(?1y)RzUf%`1k?kb1{HwF9wDP7KnbBeH~CfAJo1ZP(I9j1y+c9nEf7T{0=n!0Vp44 zJ_8%7eg`yu1sZ4^2K)Zk$7!r6O z^aUvGU=HC!QU!uM3+)%fL>^>gR|k_Pm43hvY2ky~4;c_Y#lRqdBo9i# z22lA2yCL!ixFGsLZCj8T_E32Rs65C_7{=DV@Q11|*b6Zarj}S5Gu{?{=+*)Rtp4{|dMgTfughS3XGLh9Rs*%0+0H6Y9Y<-^qBqCsnd zaLIwh`Jm^af!H9dungkf1BDP8B!&-z!UdmvQUk=l3w%JQ3otMQKkFFtKKS`$iNuz-knL1`^0J;fX%{@N2lAA{1pP}&+w zb3*AE9uRfGP+Aa5zx9TQS3v0{UJ$+slxFdT@MV1o5qP2}&;vh46ns)z5^cD@!PSBOD@M0i{1e{h6uXR9H{vsP<_WuAnF34G!K;CZwwJHfYOps`WZAoY=+Y8Q1@6t z`75FM!w^buf#wfKDBTIoAG%Qb1vGysLFrr2{LlcU#h~$~0Oj9;=7YIVIt@x2Lum#m zeHNN8^r7@8Xug;XrTwAwQE0xH0Huwf^bTmg$b`~TQ2HP=UsOYBX(-(a%_n!D`CvPg zu7lD#Q2G}%KXgKA7bwjHrSC!WM<$e>3e6v?Q2Hx0fAB$R4`@DVf`-#WX!_q41&P0z zP`)RWUIZ2Y3C$PNp|mNKJ`OeKJ2XGkL+L7LKJkR|+oAcw14`!yiibLG7!8 z(rHjS2uj;QX)P$t52b%cLfroxN?(T3`=Rt|C_NoYH$&-sC>;%@??BUe1(bG&iW@^| zc__^drSC$^mxoZA6{>FsG+#JD>A%qYumMUZLTN52eI1$~mOyFrda%G0bZQU-gMk@@ z{s5&9m_zszEFg4(C4_dcg3t->5Zb^ILVtkL2b>`M3C<8Y!39DqxI*X$Pgix64>$}fo9VSGaE zm;2E9C75~`ec%ej9vB}NO~`yH(55LYngbT$cQ;H6F8v0piPJAS1=4;Eh*1L@sQ{y+ zA^ZtY8Z3#0AmqRHPDuPTK+OTQjX_ud%Ew|PiVz|54;+QK6Q=HSFT_5B9T0Jbhfo@{ zcN4Tfst+Q6VLL?p156!g>>qSK1ysHODxYv3q7Gy}s1KnDmEW)pB7R{Pga$bp)W5KS z$_GH@8JpzhN^(T;U#s2AL0}2Yga-)yp!4^fpz;?s zLc}j1$%E#HqM-5xPS)PV2?C?8oZHZ~|- zViSjnb?gV7I>x}TUwh+{sJi7U?A@3!w1>iw6Zm zh^59ia392MAvQ zN-wa7@}cwtI|x4kN;^R52euIL1yH&HN-IF=1vU`*1ZxQG0Hqb6GzXOaUP=^aLo~0Hq6{bb~oWT>zAJfYJs~S^!EvFoUQ&0HqtCbO4mL zfYJ(3`hh7#{Rt?&0ZLDR(g{#n0ZKDK=@%vteHWl~1C$Pc(h5+T0ZP9xhN_3s8=&+A zC|v=iGoW+;ls16U0#N#g5yYGqQ2GLtUI3*NptJ*&R)EqRQ2K)*ME?aSy#Y#3fYJp} zIsi&rKxqXi%>boe7(mT|(i@=k1Snkqr30X}0hCsN(hN}gg+A0AD7^tnPk_<|P}%`X zD?sT5dJugHP}%@W3qa`~x)AvXQ2GFrUI3*VpmYY54uH}QP}%@WD?n)mDE&YOV(tMb zy#Pu#KzIe{ZP6CO2g{O1SsDDN;jxM)GI*g1*%ZK5`=yr3!xXlXlVV)AO;b45QWeR{1BRf z4@&bw=mR_uS^-Ksa6|b}S^!Fa;DU%JKxqajy?_%U-oOE&9iTJ=ls>=?5m#V^&<|K3 z^a2>o4B;n0X$L6X@DFsVDg(oV-w^r)ly3M1;VVGt1>Yh3hKCS3;Rb|mI0vB@9D&db zJ0Wz!8VLPhK9rsWp%YpmbVE6WcF2U#2O^=gCxmXWfY1)=5Sl>@LO)=F&ptJ&%7J$+WQ2K*7)P5*^0ZJc$(i@=k0w_HJN;g31 z0w|pTr30X}1C%y^(h5*o07^4J=?`L1`=Rs&D187*Z-CMZp!5VN-2kNvpmYM14uH}Q zP}%@WD?n)hD9r$+KZru@hte0I^Z_Wn0ZK1`(y;n<0+inXr3;{R0+bGb(hgAC07@%B zX#ptB0Hr^OK-~eQFF@%7PzyMpmYF~c7W0bP+9>>3qWZGDE&bg zYCn{QwPP+o`3Io%1}MD%N>6~&4N$rON+&?+04VJMr46980+bej(hN}ggAmjmQ2GLt zJ^-aRKSUr58Zy z2~fHLN*6%s1SlNzyM zpmYF~c7W0bP+9>>3qWZGDE)ySYCn{|0HqH==?zeN0hFEqr5m7h0hCUF(g9G~0ZJP{ zX$2@P0HqnA^annu{ZRS>ls*8ZH$dqHPSUr58Zy2~fHLN*6%s1SlN{lW0HqV4bO4lgfYJs~S^-K6Kxqaj{ecT= zKa{=zr4K;q4N!Ukl%4>k8=!Onlum%s0Z`fjN*h3F1t={5r5T{~2TrK{Q2GLtJ^-aR zKSUr58Zy2~fHL zN*6%s1SlNzyMpmYF~ zc7W0bP+9>>3qWZGDE)yAYCn{|0HqH==?zeN0hFEqr5m7h0hCUF(g9G~0ZJP{X$2@P z0HqnA^aoa`{ZRS>ls*8ZH$dqHP?~`Sq8>J0h)%=Sm3l$f#el}RL24ZKgKjHeU|<0) z$^i*L`JgdkkQ&gqBnZQ#Ve|qn$b18g25H5HH$c@na6{B%Qv(u%xi1vzKFF*P0|T+{ z1Gy1o4y`cEeI8KvfyRhIb`k47Sh#`o&;rBUmjHDiDDFV^km^2|J7Mt(qd{h2!^Fn# zQRw~A338y@Ef^T)fF=PL7#Lvt8XmAg#4A9XCqUS{*Rvg10TDj~bw6Jb#QhEnA>sv4@pn-3AIyV@hd|Bogzj5ym<_UkSYjZ^0>u_!FqVnxNtdMze(Dkw}PRTyP9D`^3N?piJ8OTSEE&C)E54N2zPRgCE2{^`Ve> zYJl#O0nPn@Z~&AK@g*jypb1%TNyzx=;@Z z|AvDQI^iW`9XyN=GZ#i1Oo8mL*ccB92atUr{9rOf+yN>d0HqV4Gy{|_m;h0yFcCsG z%!1Gtpz;@><}85nH$Z8FIS_R)ci^H8K0)T?*sBM|ebDTQ%Xth6?2z=o2O55$Vh0p{ z3>*+~1t={5txqRF`3E>5@(e#A{#yX$PxuPqKllQn8=&F|Q2ns*OJIWN2iXO~AV=nb z4k?GuwS)K-X#7?*{$w=%Tr~c2C?7O83^H#Iln=>`AQ4DG1<6ee3@WJ*cfod>UAO_d zb%=oh7TcgXa*!_2U1K2n22>uh%Z7mgCja%{f6#Rg3^Sk+04>HCI6#N+F)%Q|imwx( zOOe3$3V}>xVAuybgdKX;8b}1T%NF8F28N78NWO&{%fJD(7}hR;7SjyS>WpE5Jc&_=jZz#PH{&Fv%G2g!X1b-({Z`~y)9xNyGAO+bN*{yL*P!$>DE$pe zvoS(qNDNA=L1{B6?FOa8pmZ9PE`!o-Pq`Wlpe2Bp72X*MRP{ZLvB zN}EAxHz*wjrPH8v8I*2=($k>yGAO+bN*{yL*P!$>DE$pevoS;Mhtg_L+6+p&LFq6k zod%`LpmZCQo(83tLFsK!`WTeH2Bn`t>2FY)jRk5ylvab%W>DGsLrQ4wN zG$_3cN^gVG$Ds5zDE$mde}mF&tWf)*v>KE)gVJtLIt)suLFqCm-3FznLFr{sdK;8J z2Boh->1R;-8TKTgVJeGx(rIULFs8wdKr}72BnWd>1$B>8I=A8rP(;3_Cskk zC~XF%-Jo78*%b@f&D18h{UxU)mp!7E=&Bh6}A4;o1X)`G82BpKG zbQ+W{gVJqKdK#2o2Bo(_>0?m(8kBwprN2RGHZG|BP+AR2n?Y$eC>;i+)1Y)2lx~C4 z)1dS+D7_6zAA{1@p!72+{S8X9aYOBg(rQrJ3`)B}=`bjr2BpiObQ_eO2Bnul>1|N@ z7?i#SrJq6RZ%~?z2Wmf*R)f-JP}&Vjhe7EyC|w4n+o1F`D7_3yZ-dgup!78;{R~Qf zgVJogQ2U{@8k9DJ(r!>X3`(a#=`twY2BoJ#>19xQ81j}U8I;}zrH?`BYf$P>#*#w~WLuoZAZ3d;?pmZ3NPJ_~AP`V9D zPlM9Sp!7BGbrr_rNf|f8k8=B(rr+B8kAlJrME%p zV^I1Ulzs-Kzd>m>A*lUOS`A8@L1{NA9R{V-pmZ6OZiCX(p!6~*y$wnqgVNWaG#eEf9*5J|=_XF1G;J$B+W2uCJ3CghtN0eA@WaP@}Mh+VMc?Uk_HCfK=Lqg z@Q{Wv7<>kagU!7F^%qDH2!qBPK}S4DgH2(8o@RmAw++?=x*xd^5*`9j8YT{-4WQyM z8YT{-1EBIS8YT{-3!w5a8YT{M9}I)9DTYZv!>s|w`6!?}H(*M!(J(V%G`bo{t&9)_ zg%yIwzyRC#4xl2QKxVr$Fn~uzU}itBCf;n2u}Kxkrkj|+Ovh&S^+%MLZDxRMHYjm}OoO?* zJrXn> zvg6~EQqwa**U5s%6G8XVBb!l%W=0NnGg9+XAmewS8Cqohrtzq5$UxU$T%MX*5FZaV z0CXk~=-x@RIJHJIBMXNaFpq%Z4s^dbvOCIuqPn93*^G?D;tV2^9LQYIz2V5_mOX%E zYFHR|A)8y2T3DJ{lnU})Nl_&@0-@>6&a-TcRI2i z*B+tT(Sd9S+y_XeqXm)~TAoLb+ob2H<~JdmpOc@Mf*b*cCSaFCixYT;2e}))oSKVf zZUd&dxE&48nUH*eUQT7zKt|DF>81wR?EIvx)Z`L)ibTrzh9-~zhno&^w=-IPakvQ? zk%yUGglu*}Vo`A_EYn*!7#V<5V1*{gTtiE6VyV!CxY-fS+yFFl3$U0A%E!1(g_!Gx zX72VJ$P56?y=BPe7MB!d=B2~K0$+sy3Jdi7S-yq@vq1q3P1(@&0WY+%nZ122_00A` z3zPpskhw^r!oTzhToWb9d|g;U1-2j=QvDc0(hj&X2HAn0 z#(nA_=kvh)P=XS#mAOgzIq-Nz3VK+ff|AD3&5md!(QH$&%h971Tqc62zD_M5Np!qZ79%|T5!sgG^JV^5ZIhPR;vY@y`PeU7C zquNI>4Z)KrDDlElC@3}!4WX4fI64gxO-*pvqUV_vzftWa5TA&gLA8PQeKZOZ2qoegV~90{NO8 zYZ)xkOpH^Kl9J3!%`FWrjSbUMEE1EGOpOgpQ#(~J|%(=3ur^-@xkO4C8<$&@YX zAcJ0UMsZ0|Nn#R%US57ls$P0tsa{fPW=@K3W(otC2kLn+=%rNV6<6j$=#nCcOj&AC zab|uV3MamZL9Zw^ClRCp$|}eyVbIIW%Pe8gE66F)OV2N1&?`x;C}Ge`%goDU&@0MM zNi0cZ(1Z3f^^y{cQyKJ9Gvd>V5_41IGg68WJO;gzq~cU<1IOh1v-AKs-2Hax(L>L19BF2KAIdYfPZSKMVy> z28@Q3L9@hC!>VKyHBPhpnrD z(GH-?pBWe!K=y*hOknz9>uW%}-a%%=^uyNaz-ZXI9GHC|Ghl2GZNUH@!-KmYw(bQ+ ze}Hs{z~dqy^)P#2G^i~4hva|Qx*8b$0BRw~{U8i;KgcW)4uSd&W*%&v4~&Mb^8xu0 zq#mXp=6_K817xlfNRoj8zHSJ%eh9YC2&5m>lR?*?0bR2NTh{~`0RkBY(t%h%1rh;a zkX;}ehLh3sD?mdEMjwE#pM|N11}ALTlL0hX0tzCS{STn?R4^K*9;P4Wei&VjX8#AM zei&^OgqniU&8tPz4_ikDqah<5Fxw&N5W!<$Xol*C#UDcfbYK@s|JjRJu?EryX=#I4 z5ZsNXA6ECmXi(TdR6yp@==!%aFff4D_(4(|0|QJSj7C=v - * @date Wed May 18 00:21:44 JST 1994 - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - */ -#include "ruby/internal/assume.h" -#include "ruby/internal/attr/cold.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/dllexport.h" -#include "ruby/backward/2/assume.h" - -/* RUBY_NDEBUG is very simple: after everything described below are done, - * define it with either NDEBUG is undefined (=0) or defined (=1). It is truly - * subordinate. - * - * RUBY_DEBUG versus NDEBUG is complicated. Assertions shall be: - * - * | -UNDEBUG | -DNDEBUG - * ---------------+----------+--------- - * -URUBY_DEBUG | (*1) | disabled - * -DRUBY_DEBUG=0 | disabled | disabled - * -DRUBY_DEBUG=1 | enabled | (*2) - * -DRUBY_DEBUG | enabled | (*2) - * - * where: - * - * - (*1): Assertions shall be silently disabled, no warnings, in favour of - * commit 21991e6ca59274e41a472b5256bd3245f6596c90. - * - * - (*2): Compile-time warnings shall be issued. - */ - -/** @cond INTERNAL_MACRO */ - -/* - * Pro tip: `!!RUBY_DEBUG-1` expands to... - * - * - `!!(-1)` (== `!0` == `1`) when RUBY_DEBUG is defined to be empty, - * - `(!!0)-1` (== `0-1` == `-1`) when RUBY_DEBUG is defined as 0, and - * - `(!!n)-1` (== `1-1` == `0`) when RUBY_DEBUG is defined as something else. - */ -#if ! defined(RUBY_DEBUG) -# define RBIMPL_RUBY_DEBUG 0 -#elif !!RUBY_DEBUG-1 < 0 -# define RBIMPL_RUBY_DEBUG 0 -#else -# define RBIMPL_RUBY_DEBUG 1 -#endif - -/* - * ISO/IEC 9899 (all past versions) says that "If NDEBUG is defined as a macro - * name at the point in the source file where is included, ..." - * which means we must not take its defined value into account. - */ -#if defined(NDEBUG) -# define RBIMPL_NDEBUG 1 -#else -# define RBIMPL_NDEBUG 0 -#endif - -/** @endcond */ - -/* Here we go... */ -#undef RUBY_DEBUG -#undef RUBY_NDEBUG -#undef NDEBUG -#if defined(__DOXYGEN__) -# /** Define this macro when you want assertions. */ -# define RUBY_DEBUG 0 -# /** Define this macro when you don't want assertions. */ -# define NDEBUG -# /** This macro is basically the same as #NDEBUG */ -# define RUBY_NDEBUG 1 - -#elif (RBIMPL_NDEBUG == 1) && (RBIMPL_RUBY_DEBUG == 0) -# /* Assertions disabled as per request, no conflicts. */ -# define RUBY_DEBUG 0 -# define RUBY_NDEBUG 1 -# define NDEBUG - -#elif (RBIMPL_NDEBUG == 0) && (RBIMPL_RUBY_DEBUG == 1) -# /* Assertions enabled as per request, no conflicts. */ -# define RUBY_DEBUG 1 -# define RUBY_NDEBUG 0 -# /* keep NDEBUG undefined */ - -#elif (RBIMPL_NDEBUG == 0) && (RBIMPL_RUBY_DEBUG == 0) -# /* The (*1) situation in above diagram. */ -# define RUBY_DEBUG 0 -# define RUBY_NDEBUG 1 -# define NDEBUG - -#elif (RBIMPL_NDEBUG == 1) && (RBIMPL_RUBY_DEBUG == 1) -# /* The (*2) situation in above diagram. */ -# define RUBY_DEBUG 1 -# define RUBY_NDEBUG 0 -# /* keep NDEBUG undefined */ - -# if defined(_MSC_VER) -# pragma message("NDEBUG is ignored because RUBY_DEBUG>0.") -# elif defined(__GNUC__) -# pragma GCC warning "NDEBUG is ignored because RUBY_DEBUG>0." -# else -# error NDEBUG is ignored because RUBY_DEBUG>0. -# endif -#endif -#undef RBIMPL_NDEBUG -#undef RBIMPL_RUBY_DEBUG - -/** @cond INTERNAL_MACRO */ -#define RBIMPL_ASSERT_NOTHING RBIMPL_CAST((void)0) - -RBIMPL_SYMBOL_EXPORT_BEGIN() -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_COLD() -void rb_assert_failure(const char *file, int line, const char *name, const char *expr); -RBIMPL_SYMBOL_EXPORT_END() - -#ifdef RUBY_FUNCTION_NAME_STRING -# define RBIMPL_ASSERT_FUNC RUBY_FUNCTION_NAME_STRING -#else -# define RBIMPL_ASSERT_FUNC RBIMPL_CAST((const char *)0) -#endif - -/** @endcond */ - -/** - * Prints the given message, and terminates the entire process abnormally. - * - * @param mesg The message to display. - */ -#define RUBY_ASSERT_FAIL(mesg) \ - rb_assert_failure(__FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg) - -/** - * Asserts that the expression is truthy. If not aborts with the message. - * - * @param expr What supposedly evaluates to true. - * @param mesg The message to display on failure. - */ -#define RUBY_ASSERT_MESG(expr, mesg) \ - (RB_LIKELY(expr) ? RBIMPL_ASSERT_NOTHING : RUBY_ASSERT_FAIL(mesg)) - -/** - * A variant of #RUBY_ASSERT that does not interface with #RUBY_DEBUG. - * - * @copydetails #RUBY_ASSERT - */ -#define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG((expr), #expr) - -/** - * Asserts that the given expression is truthy if and only if #RUBY_DEBUG is truthy. - * - * @param expr What supposedly evaluates to true. - */ -#if RUBY_DEBUG -# define RUBY_ASSERT(expr) RUBY_ASSERT_MESG((expr), #expr) -#else -# define RUBY_ASSERT(expr) RBIMPL_ASSERT_NOTHING -#endif - -/** - * A variant of #RUBY_ASSERT that interfaces with #NDEBUG instead of - * #RUBY_DEBUG. This almost resembles `assert` C standard macro, except minor - * implementation details. - * - * @copydetails #RUBY_ASSERT - */ -/* Currently `RUBY_DEBUG == ! defined(NDEBUG)` is always true. There is no - * difference any longer between this one and `RUBY_ASSERT`. */ -#if defined(NDEBUG) -# define RUBY_ASSERT_NDEBUG(expr) RBIMPL_ASSERT_NOTHING -#else -# define RUBY_ASSERT_NDEBUG(expr) RUBY_ASSERT_MESG((expr), #expr) -#endif - -/** - * @copydoc #RUBY_ASSERT_WHEN - * @param mesg The message to display on failure. - */ -#if RUBY_DEBUG -# define RUBY_ASSERT_MESG_WHEN(cond, expr, mesg) RUBY_ASSERT_MESG((expr), (mesg)) -#else -# define RUBY_ASSERT_MESG_WHEN(cond, expr, mesg) \ - ((cond) ? RUBY_ASSERT_MESG((expr), (mesg)) : RBIMPL_ASSERT_NOTHING) -#endif - -/** - * A variant of #RUBY_ASSERT that asserts when either #RUBY_DEBUG or `cond` - * parameter is truthy. - * - * @param cond Extra condition that shall hold for assertion to take effect. - * @param expr What supposedly evaluates to true. - */ -#define RUBY_ASSERT_WHEN(cond, expr) RUBY_ASSERT_MESG_WHEN((cond), (expr), #expr) - -/** - * This is either #RUBY_ASSERT or #RBIMPL_ASSUME, depending on #RUBY_DEBUG. - * - * @copydetails #RUBY_ASSERT - */ -#if RUBY_DEBUG -# define RBIMPL_ASSERT_OR_ASSUME(expr) RUBY_ASSERT_ALWAYS(expr) -#elif RBIMPL_COMPILER_BEFORE(Clang, 7, 0, 0) -# /* See commit 67d259c5dccd31fe49d417fec169977712ffdf10 */ -# define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING -#elif defined(RUBY_ASSERT_NOASSUME) -# /* See commit d300a734414ef6de7e8eb563b7cc4389c455ed08 */ -# define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING -#elif ! defined(RBIMPL_HAVE___ASSUME) -# define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING -#else -# define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSUME(expr) -#endif - -#endif /* RUBY_ASSERT_H */ diff --git a/libs/libruby/ruby/atomic.h b/libs/libruby/ruby/atomic.h deleted file mode 100644 index 3eb80fb..0000000 --- a/libs/libruby/ruby/atomic.h +++ /dev/null @@ -1,890 +0,0 @@ -#ifndef RUBY_ATOMIC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_ATOMIC_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Atomic operations - * - * Basically, if we could assume either C11 or C++11, these macros are just - * redundant. Sadly we cannot. We have to do them ourselves. - */ - -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include /* size_t */ -#endif - -#ifdef HAVE_SYS_TYPES_H -# include /* ssize_t */ -#endif - -#if RBIMPL_COMPILER_SINCE(MSVC, 13, 0, 0) -# pragma intrinsic(_InterlockedOr) -#elif defined(__sun) && defined(HAVE_ATOMIC_H) -# include -#endif - -#include "ruby/assert.h" -#include "ruby/backward/2/limits.h" -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/noalias.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/value.h" -#include "ruby/internal/static_assert.h" -#include "ruby/internal/stdbool.h" - -/* - * Asserts that your environment supports more than one atomic types. These - * days systems tend to have such property (C11 was a standard of decades ago, - * right?) but we still support older ones. - */ -#if defined(__DOXYGEN__) || defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_SYNC_BUILTINS) -# define RUBY_ATOMIC_GENERIC_MACRO 1 -#endif - -/** - * Type that is eligible for atomic operations. Depending on your host - * platform you might have more than one such type, but we choose one of them - * anyways. - */ -#if defined(__DOXYGEN__) -using rb_atomic_t = std::atomic; -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) -typedef unsigned int rb_atomic_t; -#elif defined(HAVE_GCC_SYNC_BUILTINS) -typedef unsigned int rb_atomic_t; -#elif defined(_WIN32) -typedef LONG rb_atomic_t; -#elif defined(__sun) && defined(HAVE_ATOMIC_H) -typedef unsigned int rb_atomic_t; -#else -# error No atomic operation found -#endif - -/** - * Atomically replaces the value pointed by `var` with the result of addition - * of `val` to the old value of `var`. - * - * @param var A variable of ::rb_atomic_t. - * @param val Value to add. - * @return What was stored in `var` before the addition. - * @post `var` holds `var + val`. - */ -#define RUBY_ATOMIC_FETCH_ADD(var, val) rbimpl_atomic_fetch_add(&(var), (val)) - -/** - * Atomically replaces the value pointed by `var` with the result of - * subtraction of `val` to the old value of `var`. - * - * @param var A variable of ::rb_atomic_t. - * @param val Value to subtract. - * @return What was stored in `var` before the subtraction. - * @post `var` holds `var - val`. - */ -#define RUBY_ATOMIC_FETCH_SUB(var, val) rbimpl_atomic_fetch_sub(&(var), (val)) - -/** - * Atomically replaces the value pointed by `var` with the result of - * bitwise OR between `val` and the old value of `var`. - * - * @param var A variable of ::rb_atomic_t. - * @param val Value to mix. - * @return void - * @post `var` holds `var | val`. - * @note For portability, this macro can return void. - */ -#define RUBY_ATOMIC_OR(var, val) rbimpl_atomic_or(&(var), (val)) - -/** - * Atomically replaces the value pointed by `var` with `val`. This is just an - * assignment, but you can additionally know the previous value. - * - * @param var A variable of ::rb_atomic_t. - * @param val Value to set. - * @return What was stored in `var` before the assignment. - * @post `var` holds `val`. - */ -#define RUBY_ATOMIC_EXCHANGE(var, val) rbimpl_atomic_exchange(&(var), (val)) - -/** - * Atomic compare-and-swap. This stores `val` to `var` if and only if the - * assignment changes the value of `var` from `oldval` to `newval`. You can - * detect whether the assignment happened or not using the return value. - * - * @param var A variable of ::rb_atomic_t. - * @param oldval Expected value of `var` before the assignment. - * @param newval What you want to store at `var`. - * @retval oldval Successful assignment (`var` is now `newval`). - * @retval otherwise Something else is at `var`; not updated. - */ -#define RUBY_ATOMIC_CAS(var, oldval, newval) \ - rbimpl_atomic_cas(&(var), (oldval), (newval)) - -/** - * Identical to #RUBY_ATOMIC_EXCHANGE, except for the return type. - * - * @param var A variable of ::rb_atomic_t. - * @param val Value to set. - * @return void - * @post `var` holds `val`. - */ -#define RUBY_ATOMIC_SET(var, val) rbimpl_atomic_set(&(var), (val)) - -/** - * Identical to #RUBY_ATOMIC_FETCH_ADD, except for the return type. - * - * @param var A variable of ::rb_atomic_t. - * @param val Value to add. - * @return void - * @post `var` holds `var + val`. - */ -#define RUBY_ATOMIC_ADD(var, val) rbimpl_atomic_add(&(var), (val)) - -/** - * Identical to #RUBY_ATOMIC_FETCH_SUB, except for the return type. - * - * @param var A variable of ::rb_atomic_t. - * @param val Value to subtract. - * @return void - * @post `var` holds `var - val`. - */ -#define RUBY_ATOMIC_SUB(var, val) rbimpl_atomic_sub(&(var), (val)) - -/** - * Atomically increments the value pointed by `var`. - * - * @param var A variable of ::rb_atomic_t. - * @return void - * @post `var` holds `var + 1`. - */ -#define RUBY_ATOMIC_INC(var) rbimpl_atomic_inc(&(var)) - -/** - * Atomically decrements the value pointed by `var`. - * - * @param var A variable of ::rb_atomic_t. - * @return void - * @post `var` holds `var - 1`. - */ -#define RUBY_ATOMIC_DEC(var) rbimpl_atomic_dec(&(var)) - -/** - * Identical to #RUBY_ATOMIC_INC, except it expects its argument is `size_t`. - * There are cases where ::rb_atomic_t is 32bit while `size_t` is 64bit. This - * should be used for size related operations to support such platforms. - * - * @param var A variable of `size_t`. - * @return void - * @post `var` holds `var + 1`. - */ -#define RUBY_ATOMIC_SIZE_INC(var) rbimpl_atomic_size_inc(&(var)) - -/** - * Identical to #RUBY_ATOMIC_DEC, except it expects its argument is `size_t`. - * There are cases where ::rb_atomic_t is 32bit while `size_t` is 64bit. This - * should be used for size related operations to support such platforms. - * - * @param var A variable of `size_t`. - * @return void - * @post `var` holds `var - 1`. - */ -#define RUBY_ATOMIC_SIZE_DEC(var) rbimpl_atomic_size_dec(&(var)) - -/** - * Identical to #RUBY_ATOMIC_EXCHANGE, except it expects its arguments are - * `size_t`. There are cases where ::rb_atomic_t is 32bit while `size_t` is - * 64bit. This should be used for size related operations to support such - * platforms. - * - * @param var A variable of `size_t`. - * @param val Value to set. - * @return What was stored in `var` before the assignment. - * @post `var` holds `val`. - */ -#define RUBY_ATOMIC_SIZE_EXCHANGE(var, val) \ - rbimpl_atomic_size_exchange(&(var), (val)) - -/** - * Identical to #RUBY_ATOMIC_CAS, except it expects its arguments are `size_t`. - * There are cases where ::rb_atomic_t is 32bit while `size_t` is 64bit. This - * should be used for size related operations to support such platforms. - * - * @param var A variable of `size_t`. - * @param oldval Expected value of `var` before the assignment. - * @param newval What you want to store at `var`. - * @retval oldval Successful assignment (`var` is now `newval`). - * @retval otherwise Something else is at `var`; not updated. - */ -#define RUBY_ATOMIC_SIZE_CAS(var, oldval, newval) \ - rbimpl_atomic_size_cas(&(var), (oldval), (newval)) - -/** - * Identical to #RUBY_ATOMIC_ADD, except it expects its arguments are `size_t`. - * There are cases where ::rb_atomic_t is 32bit while `size_t` is 64bit. This - * should be used for size related operations to support such platforms. - * - * @param var A variable of `size_t`. - * @param val Value to add. - * @return void - * @post `var` holds `var + val`. - */ -#define RUBY_ATOMIC_SIZE_ADD(var, val) rbimpl_atomic_size_add(&(var), (val)) - -/** - * Identical to #RUBY_ATOMIC_SUB, except it expects its arguments are `size_t`. - * There are cases where ::rb_atomic_t is 32bit while `size_t` is 64bit. This - * should be used for size related operations to support such platforms. - * - * @param var A variable of `size_t`. - * @param val Value to subtract. - * @return void - * @post `var` holds `var - val`. - */ -#define RUBY_ATOMIC_SIZE_SUB(var, val) rbimpl_atomic_size_sub(&(var), (val)) - -/** - * Identical to #RUBY_ATOMIC_EXCHANGE, except it expects its arguments are - * `void*`. There are cases where ::rb_atomic_t is 32bit while `void*` is - * 64bit. This should be used for pointer related operations to support such - * platforms. - * - * @param var A variable of `void *`. - * @param val Value to set. - * @return What was stored in `var` before the assignment. - * @post `var` holds `val`. - * - * @internal - * - * :FIXME: this `(void*)` cast is evil! However `void*` is incompatible with - * some pointers, most notably function pointers. - */ -#define RUBY_ATOMIC_PTR_EXCHANGE(var, val) \ - RBIMPL_CAST(rbimpl_atomic_ptr_exchange((void **)&(var), (void *)val)) - -/** - * Identical to #RUBY_ATOMIC_CAS, except it expects its arguments are `void*`. - * There are cases where ::rb_atomic_t is 32bit while `void*` is 64bit. This - * should be used for size related operations to support such platforms. - * - * @param var A variable of `void*`. - * @param oldval Expected value of `var` before the assignment. - * @param newval What you want to store at `var`. - * @retval oldval Successful assignment (`var` is now `newval`). - * @retval otherwise Something else is at `var`; not updated. - */ -#define RUBY_ATOMIC_PTR_CAS(var, oldval, newval) \ - RBIMPL_CAST(rbimpl_atomic_ptr_cas((void **)&(var), (oldval), (newval))) - -/** - * Identical to #RUBY_ATOMIC_EXCHANGE, except it expects its arguments are - * ::VALUE. There are cases where ::rb_atomic_t is 32bit while ::VALUE is - * 64bit. This should be used for pointer related operations to support such - * platforms. - * - * @param var A variable of ::VALUE. - * @param val Value to set. - * @return What was stored in `var` before the assignment. - * @post `var` holds `val`. - */ -#define RUBY_ATOMIC_VALUE_EXCHANGE(var, val) \ - rbimpl_atomic_value_exchange(&(var), (val)) - -/** - * Identical to #RUBY_ATOMIC_CAS, except it expects its arguments are ::VALUE. - * There are cases where ::rb_atomic_t is 32bit while ::VALUE is 64bit. This - * should be used for size related operations to support such platforms. - * - * @param var A variable of `void*`. - * @param oldval Expected value of `var` before the assignment. - * @param newval What you want to store at `var`. - * @retval oldval Successful assignment (`var` is now `newval`). - * @retval otherwise Something else is at `var`; not updated. - */ -#define RUBY_ATOMIC_VALUE_CAS(var, oldval, newval) \ - rbimpl_atomic_value_cas(&(var), (oldval), (newval)) - -/** @cond INTERNAL_MACRO */ -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline rb_atomic_t -rbimpl_atomic_fetch_add(volatile rb_atomic_t *ptr, rb_atomic_t val) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - return __atomic_fetch_add(ptr, val, __ATOMIC_SEQ_CST); - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - return __sync_fetch_and_add(ptr, val); - -#elif defined(_WIN32) - return InterlockedExchangeAdd(ptr, val); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - /* - * `atomic_add_int_nv` takes its second argument as `int`! Meanwhile our - * `rb_atomic_t` is unsigned. We cannot pass `val` as-is. We have to - * manually check integer overflow. - */ - RBIMPL_ASSERT_OR_ASSUME(val <= INT_MAX); - return atomic_add_int_nv(ptr, val) - val; - -#else -# error Unsupported platform. -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void -rbimpl_atomic_add(volatile rb_atomic_t *ptr, rb_atomic_t val) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - /* - * GCC on amd64 is smart enough to detect this `__atomic_add_fetch`'s - * return value is not used, then compiles it into single `LOCK ADD` - * instruction. - */ - __atomic_add_fetch(ptr, val, __ATOMIC_SEQ_CST); - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - __sync_add_and_fetch(ptr, val); - -#elif defined(_WIN32) - /* - * `InterlockedExchangeAdd` is `LOCK XADD`. It seems there also is - * `_InterlockedAdd` intrinsic in ARM Windows but not for x86? Sticking to - * `InterlockedExchangeAdd` for better portability. - */ - InterlockedExchangeAdd(ptr, val); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - /* Ditto for `atomic_add_int_nv`. */ - RBIMPL_ASSERT_OR_ASSUME(val <= INT_MAX); - atomic_add_int(ptr, val); - -#else -# error Unsupported platform. -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void -rbimpl_atomic_size_add(volatile size_t *ptr, size_t val) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - __atomic_add_fetch(ptr, val, __ATOMIC_SEQ_CST); - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - __sync_add_and_fetch(ptr, val); - -#elif defined(_WIN32) && defined(_M_AMD64) - /* Ditto for `InterlockeExchangedAdd`. */ - InterlockedExchangeAdd64(ptr, val); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx)) - /* Ditto for `atomic_add_int_nv`. */ - RBIMPL_ASSERT_OR_ASSUME(val <= LONG_MAX); - atomic_add_long(ptr, val); - -#else - RBIMPL_STATIC_ASSERT(size_of_rb_atomic_t, sizeof *ptr == sizeof(rb_atomic_t)); - - volatile rb_atomic_t *const tmp = RBIMPL_CAST((volatile rb_atomic_t *)ptr); - rbimpl_atomic_add(tmp, val); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void -rbimpl_atomic_inc(volatile rb_atomic_t *ptr) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_SYNC_BUILTINS) - rbimpl_atomic_add(ptr, 1); - -#elif defined(_WIN32) - InterlockedIncrement(ptr); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - atomic_inc_uint(ptr); - -#else - rbimpl_atomic_add(ptr, 1); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void -rbimpl_atomic_size_inc(volatile size_t *ptr) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_SYNC_BUILTINS) - rbimpl_atomic_size_add(ptr, 1); - -#elif defined(_WIN32) && defined(_M_AMD64) - InterlockedIncrement64(ptr); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx)) - atomic_inc_ulong(ptr); - -#else - rbimpl_atomic_size_add(ptr, 1); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline rb_atomic_t -rbimpl_atomic_fetch_sub(volatile rb_atomic_t *ptr, rb_atomic_t val) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - return __atomic_fetch_sub(ptr, val, __ATOMIC_SEQ_CST); - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - return __sync_fetch_and_sub(ptr, val); - -#elif defined(_WIN32) - /* rb_atomic_t is signed here! Safe to do `-val`. */ - return InterlockedExchangeAdd(ptr, -val); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - /* Ditto for `rbimpl_atomic_fetch_add`. */ - const signed neg = -1; - RBIMPL_ASSERT_OR_ASSUME(val <= INT_MAX); - return atomic_add_int_nv(ptr, neg * val) + val; - -#else -# error Unsupported platform. -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void -rbimpl_atomic_sub(volatile rb_atomic_t *ptr, rb_atomic_t val) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - __atomic_sub_fetch(ptr, val, __ATOMIC_SEQ_CST); - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - __sync_sub_and_fetch(ptr, val); - -#elif defined(_WIN32) - InterlockedExchangeAdd(ptr, -val); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - const signed neg = -1; - RBIMPL_ASSERT_OR_ASSUME(val <= INT_MAX); - atomic_add_int(ptr, neg * val); - -#else -# error Unsupported platform. -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void -rbimpl_atomic_size_sub(volatile size_t *ptr, size_t val) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - __atomic_sub_fetch(ptr, val, __ATOMIC_SEQ_CST); - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - __sync_sub_and_fetch(ptr, val); - -#elif defined(_WIN32) && defined(_M_AMD64) - const ssize_t neg = -1; - InterlockedExchangeAdd64(ptr, neg * val); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx)) - const signed neg = -1; - RBIMPL_ASSERT_OR_ASSUME(val <= LONG_MAX); - atomic_add_long(ptr, neg * val); - -#else - RBIMPL_STATIC_ASSERT(size_of_rb_atomic_t, sizeof *ptr == sizeof(rb_atomic_t)); - - volatile rb_atomic_t *const tmp = RBIMPL_CAST((volatile rb_atomic_t *)ptr); - rbimpl_atomic_sub(tmp, val); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void -rbimpl_atomic_dec(volatile rb_atomic_t *ptr) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_SYNC_BUILTINS) - rbimpl_atomic_sub(ptr, 1); - -#elif defined(_WIN32) - InterlockedDecrement(ptr); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - atomic_dec_uint(ptr); - -#else - rbimpl_atomic_sub(ptr, 1); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void -rbimpl_atomic_size_dec(volatile size_t *ptr) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_SYNC_BUILTINS) - rbimpl_atomic_size_sub(ptr, 1); - -#elif defined(_WIN32) && defined(_M_AMD64) - InterlockedDecrement64(ptr); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx)) - atomic_dec_ulong(ptr); - -#else - rbimpl_atomic_size_sub(ptr, 1); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void -rbimpl_atomic_or(volatile rb_atomic_t *ptr, rb_atomic_t val) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - __atomic_or_fetch(ptr, val, __ATOMIC_SEQ_CST); - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - __sync_or_and_fetch(ptr, val); - -#elif RBIMPL_COMPILER_SINCE(MSVC, 13, 0, 0) - _InterlockedOr(ptr, val); - -#elif defined(_WIN32) && defined(__GNUC__) - /* This was for old MinGW. Maybe not needed any longer? */ - __asm__( - "lock\n\t" - "orl\t%1, %0" - : "=m"(ptr) - : "Ir"(val)); - -#elif defined(_WIN32) && defined(_M_IX86) - __asm mov eax, ptr; - __asm mov ecx, val; - __asm lock or [eax], ecx; - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - atomic_or_uint(ptr, val); - -#else -# error Unsupported platform. -#endif -} - -/* Nobody uses this but for theoretical backwards compatibility... */ -#if RBIMPL_COMPILER_BEFORE(MSVC, 13, 0, 0) -static inline rb_atomic_t -rb_w32_atomic_or(volatile rb_atomic_t *var, rb_atomic_t val) -{ - return rbimpl_atomic_or(var, val); -} -#endif - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline rb_atomic_t -rbimpl_atomic_exchange(volatile rb_atomic_t *ptr, rb_atomic_t val) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - return __atomic_exchange_n(ptr, val, __ATOMIC_SEQ_CST); - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - return __sync_lock_test_and_set(ptr, val); - -#elif defined(_WIN32) - return InterlockedExchange(ptr, val); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - return atomic_swap_uint(ptr, val); - -#else -# error Unsupported platform. -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline size_t -rbimpl_atomic_size_exchange(volatile size_t *ptr, size_t val) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - return __atomic_exchange_n(ptr, val, __ATOMIC_SEQ_CST); - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - return __sync_lock_test_and_set(ptr, val); - -#elif defined(_WIN32) && defined(_M_AMD64) - return InterlockedExchange64(ptr, val); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx)) - return atomic_swap_ulong(ptr, val); - -#else - RBIMPL_STATIC_ASSERT(size_of_size_t, sizeof *ptr == sizeof(rb_atomic_t)); - - volatile rb_atomic_t *const tmp = RBIMPL_CAST((volatile rb_atomic_t *)ptr); - const rb_atomic_t ret = rbimpl_atomic_exchange(tmp, val); - return RBIMPL_CAST((size_t)ret); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void * -rbimpl_atomic_ptr_exchange(void *volatile *ptr, const void *val) -{ -#if 0 - -#elif defined(InterlockedExchangePointer) - /* const_cast */ - PVOID *pptr = RBIMPL_CAST((PVOID *)ptr); - PVOID pval = RBIMPL_CAST((PVOID)val); - return InterlockedExchangePointer(pptr, pval); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - return atomic_swap_ptr(ptr, RBIMPL_CAST((void *)val)); - -#else - RBIMPL_STATIC_ASSERT(sizeof_voidp, sizeof *ptr == sizeof(size_t)); - - const size_t sval = RBIMPL_CAST((size_t)val); - volatile size_t *const sptr = RBIMPL_CAST((volatile size_t *)ptr); - const size_t sret = rbimpl_atomic_size_exchange(sptr, sval); - return RBIMPL_CAST((void *)sret); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline VALUE -rbimpl_atomic_value_exchange(volatile VALUE *ptr, VALUE val) -{ - RBIMPL_STATIC_ASSERT(sizeof_value, sizeof *ptr == sizeof(size_t)); - - const size_t sval = RBIMPL_CAST((size_t)val); - volatile size_t *const sptr = RBIMPL_CAST((volatile size_t *)ptr); - const size_t sret = rbimpl_atomic_size_exchange(sptr, sval); - return RBIMPL_CAST((VALUE)sret); -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void -rbimpl_atomic_set(volatile rb_atomic_t *ptr, rb_atomic_t val) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - __atomic_store_n(ptr, val, __ATOMIC_SEQ_CST); - -#else - /* Maybe std::atomic::store can be faster? */ - rbimpl_atomic_exchange(ptr, val); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline rb_atomic_t -rbimpl_atomic_cas(volatile rb_atomic_t *ptr, rb_atomic_t oldval, rb_atomic_t newval) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - __atomic_compare_exchange_n( - ptr, &oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); - return oldval; - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - return __sync_val_compare_and_swap(ptr, oldval, newval); - -#elif RBIMPL_COMPILER_SINCE(MSVC, 13, 0, 0) - return InterlockedCompareExchange(ptr, newval, oldval); - -#elif defined(_WIN32) - PVOID *pptr = RBIMPL_CAST((PVOID *)ptr); - PVOID pold = RBIMPL_CAST((PVOID)oldval); - PVOID pnew = RBIMPL_CAST((PVOID)newval); - PVOID pret = InterlockedCompareExchange(pptr, pnew, pold); - return RBIMPL_CAST((rb_atomic_t)pret); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - return atomic_cas_uint(ptr, oldval, newval); - -#else -# error Unsupported platform. -#endif -} - -/* Nobody uses this but for theoretical backwards compatibility... */ -#if RBIMPL_COMPILER_BEFORE(MSVC, 13, 0, 0) -static inline rb_atomic_t -rb_w32_atomic_cas(volatile rb_atomic_t *var, rb_atomic_t oldval, rb_atomic_t newval) -{ - return rbimpl_atomic_cas(var, oldval, newval); -} -#endif - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline size_t -rbimpl_atomic_size_cas(volatile size_t *ptr, size_t oldval, size_t newval) -{ -#if 0 - -#elif defined(HAVE_GCC_ATOMIC_BUILTINS) - __atomic_compare_exchange_n( - ptr, &oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); - return oldval; - -#elif defined(HAVE_GCC_SYNC_BUILTINS) - return __sync_val_compare_and_swap(ptr, oldval, newval); - -#elif defined(_WIN32) && defined(_M_AMD64) - return InterlockedCompareExchange64(ptr, newval, oldval); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx)) - return atomic_cas_ulong(ptr, oldval, newval); - -#else - RBIMPL_STATIC_ASSERT(size_of_size_t, sizeof *ptr == sizeof(rb_atomic_t)); - - volatile rb_atomic_t *tmp = RBIMPL_CAST((volatile rb_atomic_t *)ptr); - return rbimpl_atomic_cas(tmp, oldval, newval); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline void * -rbimpl_atomic_ptr_cas(void **ptr, const void *oldval, const void *newval) -{ -#if 0 - -#elif defined(InterlockedExchangePointer) - /* ... Can we say that InterlockedCompareExchangePtr surly exists when - * InterlockedExchangePointer is defined? Seems so but...?*/ - PVOID *pptr = RBIMPL_CAST((PVOID *)ptr); - PVOID pold = RBIMPL_CAST((PVOID)oldval); - PVOID pnew = RBIMPL_CAST((PVOID)newval); - return InterlockedCompareExchangePointer(pptr, pnew, pold); - -#elif defined(__sun) && defined(HAVE_ATOMIC_H) - void *pold = RBIMPL_CAST((void *)oldval); - void *pnew = RBIMPL_CAST((void *)newval); - return atomic_cas_ptr(ptr, pold, pnew); - - -#else - RBIMPL_STATIC_ASSERT(sizeof_voidp, sizeof *ptr == sizeof(size_t)); - - const size_t snew = RBIMPL_CAST((size_t)newval); - const size_t sold = RBIMPL_CAST((size_t)oldval); - volatile size_t *const sptr = RBIMPL_CAST((volatile size_t *)ptr); - const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew); - return RBIMPL_CAST((void *)sret); - -#endif -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -static inline VALUE -rbimpl_atomic_value_cas(volatile VALUE *ptr, VALUE oldval, VALUE newval) -{ - RBIMPL_STATIC_ASSERT(sizeof_value, sizeof *ptr == sizeof(size_t)); - - const size_t snew = RBIMPL_CAST((size_t)newval); - const size_t sold = RBIMPL_CAST((size_t)oldval); - volatile size_t *const sptr = RBIMPL_CAST((volatile size_t *)ptr); - const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew); - return RBIMPL_CAST((VALUE)sret); -} -/** @endcond */ -#endif /* RUBY_ATOMIC_H */ diff --git a/libs/libruby/ruby/backward.h b/libs/libruby/ruby/backward.h deleted file mode 100644 index f804c2c..0000000 --- a/libs/libruby/ruby/backward.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef RUBY_RUBY_BACKWARD_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_RUBY_BACKWARD_H 1 -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ -#include "ruby/internal/value.h" -#include "ruby/internal/interpreter.h" -#include "ruby/backward/2/attributes.h" - -#define RBIMPL_ATTR_DEPRECATED_SINCE(ver) RBIMPL_ATTR_DEPRECATED(("since " #ver)) -#define RBIMPL_ATTR_DEPRECATED_INTERNAL(ver) RBIMPL_ATTR_DEPRECATED(("since "#ver", also internal")) -#define RBIMPL_ATTR_DEPRECATED_INTERNAL_ONLY() RBIMPL_ATTR_DEPRECATED(("only for internal use")) - -RBIMPL_ATTR_DEPRECATED_INTERNAL_ONLY() void rb_clear_constant_cache(void); - -/* from version.c */ -#if defined(RUBY_SHOW_COPYRIGHT_TO_DIE) && !!(RUBY_SHOW_COPYRIGHT_TO_DIE+0) -# error RUBY_SHOW_COPYRIGHT_TO_DIE is deprecated -#endif - -#endif /* RUBY_RUBY_BACKWARD_H */ diff --git a/libs/libruby/ruby/backward/2/assume.h b/libs/libruby/ruby/backward/2/assume.h deleted file mode 100644 index d148710..0000000 --- a/libs/libruby/ruby/backward/2/assume.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef RUBY_BACKWARD2_ASSUME_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_ASSUME_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #ASSUME / #RB_LIKELY / #UNREACHABLE - */ -#include "ruby/internal/config.h" -#include "ruby/internal/assume.h" -#include "ruby/internal/has/builtin.h" - -#define ASSUME RBIMPL_ASSUME /**< @old{RBIMPL_ASSUME} */ -#define UNREACHABLE RBIMPL_UNREACHABLE() /**< @old{RBIMPL_UNREACHABLE} */ -#define UNREACHABLE_RETURN RBIMPL_UNREACHABLE_RETURN /**< @old{RBIMPL_UNREACHABLE_RETURN} */ - -/* likely */ -#if RBIMPL_HAS_BUILTIN(__builtin_expect) -/** - * Asserts that the given Boolean expression likely holds. - * - * @param x An expression that likely holds. - * - * @note Consider this macro carefully. It has been here since when CPUs were - * like babies, but contemporary processors are beasts. They are - * smarter than mare mortals like us today. Their branch predictions - * highly expectedly outperform your use of this macro. - */ -# define RB_LIKELY(x) (__builtin_expect(!!(x), 1)) - -/** - * Asserts that the given Boolean expression likely doesn't hold. - * - * @param x An expression that likely doesn't hold. - */ -# define RB_UNLIKELY(x) (__builtin_expect(!!(x), 0)) -#else -# define RB_LIKELY(x) (x) -# define RB_UNLIKELY(x) (x) -#endif - -#endif /* RUBY_BACKWARD2_ASSUME_H */ diff --git a/libs/libruby/ruby/backward/2/attributes.h b/libs/libruby/ruby/backward/2/attributes.h deleted file mode 100644 index 73acfc9..0000000 --- a/libs/libruby/ruby/backward/2/attributes.h +++ /dev/null @@ -1,165 +0,0 @@ -#ifndef RUBY_BACKWARD2_ATTRIBUTES_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_ATTRIBUTES_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Various attribute-related macros. - * - * ### Q&A ### - * - * - Q: Why are the macros defined in this header file so inconsistent in - * style? - * - * - A: Don't know. Don't blame me. Backward compatibility is the key here. - * I'm just preserving what they have been. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/attr/alloc_size.h" -#include "ruby/internal/attr/cold.h" -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/deprecated.h" -#include "ruby/internal/attr/error.h" -#include "ruby/internal/attr/forceinline.h" -#include "ruby/internal/attr/format.h" -#include "ruby/internal/attr/maybe_unused.h" -#include "ruby/internal/attr/noinline.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/attr/restrict.h" -#include "ruby/internal/attr/returns_nonnull.h" -#include "ruby/internal/attr/warning.h" -#include "ruby/internal/has/attribute.h" - -/* function attributes */ -#undef CONSTFUNC -#define CONSTFUNC(x) RBIMPL_ATTR_CONST() x - -#undef PUREFUNC -#define PUREFUNC(x) RBIMPL_ATTR_PURE() x - -#undef DEPRECATED -#define DEPRECATED(x) RBIMPL_ATTR_DEPRECATED(("")) x - -#undef DEPRECATED_BY -#define DEPRECATED_BY(n,x) RBIMPL_ATTR_DEPRECATED(("by: " # n)) x - -#undef DEPRECATED_TYPE -#if defined(__GNUC__) -# define DEPRECATED_TYPE(mesg, decl) \ - _Pragma("message \"DEPRECATED_TYPE is deprecated\""); \ - decl RBIMPL_ATTR_DEPRECATED(mseg) -#elif defined(_MSC_VER) -# pragma deprecated(DEPRECATED_TYPE) -# define DEPRECATED_TYPE(mesg, decl) \ - __pragma(message(__FILE__"("STRINGIZE(__LINE__)"): warning: " \ - "DEPRECATED_TYPE is deprecated")) \ - decl RBIMPL_ATTR_DEPRECATED(mseg) -#else -# define DEPRECATED_TYPE(mesg, decl) \ - <-<-"DEPRECATED_TYPE is deprecated"->-> -#endif - -#undef RUBY_CXX_DEPRECATED -#define RUBY_CXX_DEPRECATED(mseg) RBIMPL_ATTR_DEPRECATED((mseg)) - -#undef NOINLINE -#define NOINLINE(x) RBIMPL_ATTR_NOINLINE() x - -#ifndef MJIT_HEADER -# undef ALWAYS_INLINE -# define ALWAYS_INLINE(x) RBIMPL_ATTR_FORCEINLINE() x -#endif - -#undef ERRORFUNC -#define ERRORFUNC(mesg, x) RBIMPL_ATTR_ERROR(mesg) x -#if RBIMPL_HAS_ATTRIBUTE(error) -# define HAVE_ATTRIBUTE_ERRORFUNC 1 -#endif - -#undef WARNINGFUNC -#define WARNINGFUNC(mesg, x) RBIMPL_ATTR_WARNING(mesg) x -#if RBIMPL_HAS_ATTRIBUTE(warning) -# define HAVE_ATTRIBUTE_WARNINGFUNC 1 -#endif - -/* - cold attribute for code layout improvements - RUBY_FUNC_ATTRIBUTE not used because MSVC does not like nested func macros - */ -#undef COLDFUNC -#define COLDFUNC RBIMPL_ATTR_COLD() - -#define PRINTF_ARGS(decl, string_index, first_to_check) \ - RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, (string_index), (first_to_check)) \ - decl - -#undef RUBY_ATTR_ALLOC_SIZE -#define RUBY_ATTR_ALLOC_SIZE RBIMPL_ATTR_ALLOC_SIZE - -#undef RUBY_ATTR_MALLOC -#define RUBY_ATTR_MALLOC RBIMPL_ATTR_RESTRICT() - -#undef RUBY_ATTR_RETURNS_NONNULL -#define RUBY_ATTR_RETURNS_NONNULL RBIMPL_ATTR_RETURNS_NONNULL() - -#ifndef FUNC_MINIMIZED -#define FUNC_MINIMIZED(x) x -#endif - -#ifndef FUNC_UNOPTIMIZED -#define FUNC_UNOPTIMIZED(x) x -#endif - -#ifndef RUBY_ALIAS_FUNCTION_TYPE -#define RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args) \ - FUNC_MINIMIZED(type prot) {return (type)name args;} -#endif - -#ifndef RUBY_ALIAS_FUNCTION_VOID -#define RUBY_ALIAS_FUNCTION_VOID(prot, name, args) \ - FUNC_MINIMIZED(void prot) {name args;} -#endif - -#ifndef RUBY_ALIAS_FUNCTION -#define RUBY_ALIAS_FUNCTION(prot, name, args) \ - RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args) -#endif - -#undef RUBY_FUNC_NONNULL -#define RUBY_FUNC_NONNULL(n, x) RBIMPL_ATTR_NONNULL(n) x - -#undef NORETURN -#define NORETURN(x) RBIMPL_ATTR_NORETURN() x -#define NORETURN_STYLE_NEW - -#ifndef PACKED_STRUCT -# define PACKED_STRUCT(x) x -#endif - -#ifndef PACKED_STRUCT_UNALIGNED -# if UNALIGNED_WORD_ACCESS -# define PACKED_STRUCT_UNALIGNED(x) PACKED_STRUCT(x) -# else -# define PACKED_STRUCT_UNALIGNED(x) x -# endif -#endif - -#undef RB_UNUSED_VAR -#define RB_UNUSED_VAR(x) x RBIMPL_ATTR_MAYBE_UNUSED() - -#endif /* RUBY_BACKWARD2_ATTRIBUTES_H */ diff --git a/libs/libruby/ruby/backward/2/bool.h b/libs/libruby/ruby/backward/2/bool.h deleted file mode 100644 index f2fa390..0000000 --- a/libs/libruby/ruby/backward/2/bool.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef RUBY_BACKWARD2_BOOL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_BOOL_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines old TRUE / FALSE - */ -#include "ruby/internal/stdbool.h" - -#ifndef FALSE -# define FALSE false -#elif FALSE -# error FALSE must be false -#endif - -#ifndef TRUE -# define TRUE true -#elif ! TRUE -# error TRUE must be true -#endif - -#endif /* RUBY_BACKWARD2_BOOL_H */ diff --git a/libs/libruby/ruby/backward/2/gcc_version_since.h b/libs/libruby/ruby/backward/2/gcc_version_since.h deleted file mode 100644 index 00cc40c..0000000 --- a/libs/libruby/ruby/backward/2/gcc_version_since.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef RUBY_BACKWARD2_GCC_VERSION_SINCE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_GCC_VERSION_SINCE_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines old GCC_VERSION_SINCE - */ -#include "ruby/internal/compiler_since.h" - -#ifndef GCC_VERSION_SINCE -#define GCC_VERSION_SINCE(x, y, z) RBIMPL_COMPILER_SINCE(GCC, (x), (y), (z)) -#endif - -#ifndef GCC_VERSION_BEFORE -#define GCC_VERSION_BEFORE(x, y, z) \ - (RBIMPL_COMPILER_BEFORE(GCC, (x), (y), (z)) || \ - (RBIMPL_COMPILER_IS(GCC) && \ - ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && \ - ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && \ - (RBIMPL_COMPILER_VERSION_PATCH == (z)))))) -#endif - -#endif /* RUBY_BACKWARD2_GCC_VERSION_SINCE_H */ diff --git a/libs/libruby/ruby/backward/2/inttypes.h b/libs/libruby/ruby/backward/2/inttypes.h deleted file mode 100644 index 4546087..0000000 --- a/libs/libruby/ruby/backward/2/inttypes.h +++ /dev/null @@ -1,131 +0,0 @@ -#ifndef RUBY_BACKWARD2_INTTYPES_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_INTTYPES_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief C99 shim for `` - */ -#include "ruby/internal/config.h" /* PRI_LL_PREFIX etc. are here */ - -#ifdef HAVE_INTTYPES_H -# include -#endif - -#include "ruby/internal/value.h" /* PRI_VALUE_PREFIX is here. */ - -#ifndef PRI_INT_PREFIX -# define PRI_INT_PREFIX "" -#endif - -#ifndef PRI_LONG_PREFIX -# define PRI_LONG_PREFIX "l" -#endif - -#ifndef PRI_SHORT_PREFIX -# define PRI_SHORT_PREFIX "h" -#endif - -#ifdef PRI_64_PREFIX -# /* Take that. */ -#elif SIZEOF_LONG == 8 -# define PRI_64_PREFIX PRI_LONG_PREFIX -#elif SIZEOF_LONG_LONG == 8 -# define PRI_64_PREFIX PRI_LL_PREFIX -#endif - -#ifndef PRIdPTR -# define PRIdPTR PRI_PTR_PREFIX"d" -# define PRIiPTR PRI_PTR_PREFIX"i" -# define PRIoPTR PRI_PTR_PREFIX"o" -# define PRIuPTR PRI_PTR_PREFIX"u" -# define PRIxPTR PRI_PTR_PREFIX"x" -# define PRIXPTR PRI_PTR_PREFIX"X" -#endif - -#ifndef RUBY_PRI_VALUE_MARK -# define RUBY_PRI_VALUE_MARK "\v" -#endif - -#if defined PRIdPTR && !defined PRI_VALUE_PREFIX -# define PRIdVALUE PRIdPTR -# define PRIoVALUE PRIoPTR -# define PRIuVALUE PRIuPTR -# define PRIxVALUE PRIxPTR -# define PRIXVALUE PRIXPTR -# define PRIsVALUE PRIiPTR"" RUBY_PRI_VALUE_MARK -#else -# define PRIdVALUE PRI_VALUE_PREFIX"d" -# define PRIoVALUE PRI_VALUE_PREFIX"o" -# define PRIuVALUE PRI_VALUE_PREFIX"u" -# define PRIxVALUE PRI_VALUE_PREFIX"x" -# define PRIXVALUE PRI_VALUE_PREFIX"X" -# define PRIsVALUE PRI_VALUE_PREFIX"i" RUBY_PRI_VALUE_MARK -#endif - -#ifndef PRI_VALUE_PREFIX -# define PRI_VALUE_PREFIX "" -#endif - -#ifdef PRI_TIMET_PREFIX -# /* Take that. */ -#elif SIZEOF_TIME_T == SIZEOF_INT -# define PRI_TIMET_PREFIX -#elif SIZEOF_TIME_T == SIZEOF_LONG -# define PRI_TIMET_PREFIX "l" -#elif SIZEOF_TIME_T == SIZEOF_LONG_LONG -# define PRI_TIMET_PREFIX PRI_LL_PREFIX -#endif - -#ifdef PRI_PTRDIFF_PREFIX -# /* Take that. */ -#elif SIZEOF_PTRDIFF_T == SIZEOF_INT -# define PRI_PTRDIFF_PREFIX "" -#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG -# define PRI_PTRDIFF_PREFIX "l" -#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG -# define PRI_PTRDIFF_PREFIX PRI_LL_PREFIX -#endif - -#ifndef PRIdPTRDIFF -# define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d" -# define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i" -# define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o" -# define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u" -# define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x" -# define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X" -#endif - -#ifdef PRI_SIZE_PREFIX -# /* Take that. */ -#elif SIZEOF_SIZE_T == SIZEOF_INT -# define PRI_SIZE_PREFIX "" -#elif SIZEOF_SIZE_T == SIZEOF_LONG -# define PRI_SIZE_PREFIX "l" -#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG -# define PRI_SIZE_PREFIX PRI_LL_PREFIX -#endif - -#ifndef PRIdSIZE -# define PRIdSIZE PRI_SIZE_PREFIX"d" -# define PRIiSIZE PRI_SIZE_PREFIX"i" -# define PRIoSIZE PRI_SIZE_PREFIX"o" -# define PRIuSIZE PRI_SIZE_PREFIX"u" -# define PRIxSIZE PRI_SIZE_PREFIX"x" -# define PRIXSIZE PRI_SIZE_PREFIX"X" -#endif - -#endif /* RUBY_BACKWARD2_INTTYPES_H */ diff --git a/libs/libruby/ruby/backward/2/limits.h b/libs/libruby/ruby/backward/2/limits.h deleted file mode 100644 index 6f7021e..0000000 --- a/libs/libruby/ruby/backward/2/limits.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef RUBY_BACKWARD2_LIMITS_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_LIMITS_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Historical shim for ``. - * - * The macros in this header file are obsolescent. Does anyone really need our - * own definition of `CHAR_BIT` today? - */ -#include "ruby/internal/config.h" - -#ifdef HAVE_LIMITS_H -# include -#endif - -#include "ruby/backward/2/long_long.h" - -#ifndef LONG_MAX -# /* assuming 32bit(2's complement) long */ -# define LONG_MAX 2147483647L -#endif - -#ifndef LONG_MIN -# define LONG_MIN (-LONG_MAX-1) -#endif - -#ifndef CHAR_BIT -# define CHAR_BIT 8 -#endif - -#ifdef LLONG_MAX -# /* Take that. */ -#elif defined(LONG_LONG_MAX) -# define LLONG_MAX LONG_LONG_MAX -#elif defined(_I64_MAX) -# define LLONG_MAX _I64_MAX -#else -# /* assuming 64bit(2's complement) long long */ -# define LLONG_MAX 9223372036854775807LL -#endif - -#ifdef LLONG_MIN -# /* Take that. */ -#elif defined(LONG_LONG_MIN) -# define LLONG_MIN LONG_LONG_MIN -#elif defined(_I64_MAX) -# define LLONG_MIN _I64_MIN -#else -# define LLONG_MIN (-LLONG_MAX-1) -#endif - -#ifdef SIZE_MAX -# /* Take that. */ -#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG -# define SIZE_MAX ULLONG_MAX -# define SIZE_MIN ULLONG_MIN -#elif SIZEOF_SIZE_T == SIZEOF_LONG -# define SIZE_MAX ULONG_MAX -# define SIZE_MIN ULONG_MIN -#elif SIZEOF_SIZE_T == SIZEOF_INT -# define SIZE_MAX UINT_MAX -# define SIZE_MIN UINT_MIN -#else -# define SIZE_MAX USHRT_MAX -# define SIZE_MIN USHRT_MIN -#endif - -#ifdef SSIZE_MAX -# /* Take that. */ -#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG -# define SSIZE_MAX LLONG_MAX -# define SSIZE_MIN LLONG_MIN -#elif SIZEOF_SIZE_T == SIZEOF_LONG -# define SSIZE_MAX LONG_MAX -# define SSIZE_MIN LONG_MIN -#elif SIZEOF_SIZE_T == SIZEOF_INT -# define SSIZE_MAX INT_MAX -# define SSIZE_MIN INT_MIN -#else -# define SSIZE_MAX SHRT_MAX -# define SSIZE_MIN SHRT_MIN -#endif - -#endif /* RUBY_BACKWARD2_LIMITS_H */ diff --git a/libs/libruby/ruby/backward/2/long_long.h b/libs/libruby/ruby/backward/2/long_long.h deleted file mode 100644 index 8e6b274..0000000 --- a/libs/libruby/ruby/backward/2/long_long.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef RUBY_BACKWARD2_LONG_LONG_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_LONG_LONG_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines old #LONG_LONG - * - * No known compiler that can compile today's ruby lacks long long. - * Historically MSVC was one of such compiler, but it implemented long long a - * while ago (some time back in 2013). The macros are for backwards - * compatibility only. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/has/warning.h" -#include "ruby/internal/warning_push.h" - -#if defined(__DOXYGEN__) -# /** @cond INTERNAL_MACRO */ -# define HAVE_LONG_LONG 1 -# define HAVE_TRUE_LONG_LONG 1 -# /** @endcond */ -# /** @deprecated Just use `long long` directly. */ -# define LONG_LONG long long. - -#elif RBIMPL_HAS_WARNING("-Wc++11-long-long") -# define HAVE_TRUE_LONG_LONG 1 -# define LONG_LONG \ - RBIMPL_WARNING_PUSH() \ - RBIMPL_WARNING_IGNORED(-Wc++11-long-long) \ - long long \ - RBIMPL_WARNING_POP() - -#elif RBIMPL_HAS_WARNING("-Wlong-long") -# define HAVE_TRUE_LONG_LONG 1 -# define LONG_LONG \ - RBIMPL_WARNING_PUSH() \ - RBIMPL_WARNING_IGNORED(-Wlong-long) \ - long long \ - RBIMPL_WARNING_POP() - -#elif defined(HAVE_LONG_LONG) -# define HAVE_TRUE_LONG_LONG 1 -# define LONG_LONG long long - -#elif SIZEOF___INT64 > 0 -# define HAVE_LONG_LONG 1 -# define LONG_LONG __int64 -# undef SIZEOF_LONG_LONG -# define SIZEOF_LONG_LONG SIZEOF___INT64 - -#else -# error Hello! Ruby developers believe this message must not happen. -# error If you encounter this message, can you file a bug report? -# error Remember to attach a detailed description of your environment. -# error Thank you! -#endif - -#endif /* RBIMPL_BACKWARD2_LONG_LONG_H */ diff --git a/libs/libruby/ruby/backward/2/r_cast.h b/libs/libruby/ruby/backward/2/r_cast.h deleted file mode 100644 index 3d0f40f..0000000 --- a/libs/libruby/ruby/backward/2/r_cast.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef RUBY_BACKWARD2_R_CAST_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_R_CAST_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines old R_CAST - * - * Nobody is actively using this macro. - */ -#define R_CAST(st) (struct st*) -#define RMOVED(obj) (R_CAST(RMoved)(obj)) - -#if defined(__GNUC__) -# warning R_CAST and RMOVED are deprecated -#elif defined(_MSC_VER) -# pragma message("warning: R_CAST and RMOVED are deprecated") -#endif -#endif /* RUBY_BACKWARD2_R_CAST_H */ diff --git a/libs/libruby/ruby/backward/2/rmodule.h b/libs/libruby/ruby/backward/2/rmodule.h deleted file mode 100644 index 53b3783..0000000 --- a/libs/libruby/ruby/backward/2/rmodule.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef RUBY_BACKWARD2_RMODULE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_RMODULE_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Orphan macros. - * - * These macros seems broken since at least 2011. Nobody (except ruby itself - * who is implementing the internals) could have used those macros for a while. - * Kept public as-is here to keep some theoretical backwards compatibility. - */ -#define RMODULE_IV_TBL(m) RCLASS_IV_TBL(m) -#define RMODULE_CONST_TBL(m) RCLASS_CONST_TBL(m) -#define RMODULE_M_TBL(m) RCLASS_M_TBL(m) -#define RMODULE_SUPER(m) RCLASS_SUPER(m) - -#if defined(__GNUC__) -# warning RMODULE_* macros are deprecated -#elif defined(_MSC_VER) -# pragma message("warning: RMODULE_* macros are deprecated") -#endif -#endif /* RUBY_BACKWARD2_RMODULE_H */ diff --git a/libs/libruby/ruby/backward/2/stdalign.h b/libs/libruby/ruby/backward/2/stdalign.h deleted file mode 100644 index 8b491bf..0000000 --- a/libs/libruby/ruby/backward/2/stdalign.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef RUBY_BACKWARD2_STDALIGN_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_STDALIGN_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RUBY_ALIGNAS / #RUBY_ALIGNOF - */ -#include "ruby/internal/stdalign.h" - -#undef RUBY_ALIGNAS -#undef RUBY_ALIGNOF -#define RUBY_ALIGNAS RBIMPL_ALIGNAS /**< @copydoc RBIMPL_ALIGNAS */ -#define RUBY_ALIGNOF RBIMPL_ALIGNOF /**< @copydoc RBIMPL_ALIGNOF */ - -#endif /* RUBY_BACKWARD2_STDALIGN_H */ diff --git a/libs/libruby/ruby/backward/2/stdarg.h b/libs/libruby/ruby/backward/2/stdarg.h deleted file mode 100644 index 08659fe..0000000 --- a/libs/libruby/ruby/backward/2/stdarg.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef RUBY_BACKWARD2_STDARG_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_BACKWARD2_STDARG_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines old #_ - * - * Nobody should ever use these macros any longer. No known compilers lack - * prototypes today. It's 21st century. Just forget them. - */ - -#undef _ -/** - * @deprecated Nobody practically needs this macro any longer. - * @brief This was a transition path from K&R to ANSI. - */ -#ifdef HAVE_PROTOTYPES -# define _(args) args -#else -# define _(args) () -#endif - -#undef __ -/** - * @deprecated Nobody practically needs this macro any longer. - * @brief This was a transition path from K&R to ANSI. - */ -#ifdef HAVE_STDARG_PROTOTYPES -# define __(args) args -#else -# define __(args) () -#endif - -/** - * Functions declared using this macro take arbitrary arguments, including - * void. - * - * ```CXX - * void func(ANYARGS); - * ``` - * - * This was a necessary evil when there was no such thing like function - * overloading. But it is the 21st century today. People generally need not - * use this. Just use a granular typed function. - * - * @see ruby::backward::cxxanyargs - */ -#ifdef __cplusplus -#define ANYARGS ... -#else -#define ANYARGS -#endif - -#endif /* RUBY_BACKWARD2_STDARG_H */ diff --git a/libs/libruby/ruby/backward/cxxanyargs.hpp b/libs/libruby/ruby/backward/cxxanyargs.hpp deleted file mode 100644 index 2414b7a..0000000 --- a/libs/libruby/ruby/backward/cxxanyargs.hpp +++ /dev/null @@ -1,700 +0,0 @@ -#ifndef RUBY_BACKWARD_CXXANYARGS_HPP //-*-C++-*-vi:ft=cpp -#define RUBY_BACKWARD_CXXANYARGS_HPP -/// @file -/// @author @shyouhei -/// @copyright This file is a part of the programming language Ruby. -/// Permission is hereby granted, to either redistribute and/or -/// modify this file, provided that the conditions mentioned in the -/// file COPYING are met. Consult the file for details. -/// @note DO NOT MODERNISE THIS FILE! As the file name implies it is -/// meant to be a backwards compatibility shim. Please stick to -/// C++ 98 and never use newer features, like `constexpr`. -/// @brief Provides old prototypes for C++ programs. -#include "ruby/internal/config.h" -#include "ruby/internal/intern/class.h" -#include "ruby/internal/intern/cont.h" -#include "ruby/internal/intern/hash.h" -#include "ruby/internal/intern/proc.h" -#include "ruby/internal/intern/thread.h" -#include "ruby/internal/intern/variable.h" -#include "ruby/internal/intern/vm.h" -#include "ruby/internal/iterator.h" -#include "ruby/internal/method.h" -#include "ruby/internal/value.h" -#include "ruby/internal/variable.h" -#include "ruby/backward/2/stdarg.h" -#include "ruby/st.h" - -extern "C++" { - -#ifdef HAVE_NULLPTR -#include -#endif - -/// @brief The main namespace. -/// @note The name "ruby" might already be taken, but that must not be a -/// problem because namespaces are allowed to reopen. -namespace ruby { - -/// Backwards compatibility layer. -namespace backward { - -/// Provides ANYARGS deprecation warnings. In C, ANYARGS means there is no -/// function prototype. Literally anything, even including nothing, can be a -/// valid ANYARGS. So passing a correctly prototyped function pointer to an -/// ANYARGS-ed function parameter is valid, at the same time passing an -/// ANYARGS-ed function pointer to a granular typed function parameter is also -/// valid. However on the other hand in C++, ANYARGS doesn't actually mean any -/// number of arguments. C++'s ANYARGS means _variadic_ number of arguments. -/// This is incompatible with ordinal, correct function prototypes. -/// -/// Luckily, function prototypes being distinct each other means they can be -/// overloaded. We can provide a compatibility layer for older Ruby APIs which -/// used to have ANYARGS. This namespace includes such attempts. -namespace cxxanyargs { - -typedef VALUE type(ANYARGS); ///< ANYARGS-ed function type. -typedef void void_type(ANYARGS); ///< ANYARGS-ed function type, void variant. -typedef int int_type(ANYARGS); ///< ANYARGS-ed function type, int variant. -typedef VALUE onearg_type(VALUE); ///< Single-argumented function type. - -/// @name Hooking global variables -/// @{ - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Define a function-backended global variable. -/// @param[in] q Name of the variable. -/// @param[in] w Getter function. -/// @param[in] e Setter function. -/// @note Both functions can be nullptr. -/// @see rb_define_hooked_variable() -/// @deprecated Use granular typed overload instead. -inline void -rb_define_virtual_variable(const char *q, type *w, void_type *e) -{ - rb_gvar_getter_t *r = reinterpret_cast(w); - rb_gvar_setter_t *t = reinterpret_cast(e); - ::rb_define_virtual_variable(q, r, t); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -inline void -rb_define_virtual_variable(const char *q, rb_gvar_getter_t *w, void_type *e) -{ - rb_gvar_setter_t *t = reinterpret_cast(e); - ::rb_define_virtual_variable(q, w, t); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -inline void -rb_define_virtual_variable(const char *q, type *w, rb_gvar_setter_t *e) -{ - rb_gvar_getter_t *r = reinterpret_cast(w); - ::rb_define_virtual_variable(q, r, e); -} - -#ifdef HAVE_NULLPTR -inline void -rb_define_virtual_variable(const char *q, rb_gvar_getter_t *w, std::nullptr_t e) -{ - ::rb_define_virtual_variable(q, w, e); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -inline void -rb_define_virtual_variable(const char *q, type *w, std::nullptr_t e) -{ - rb_gvar_getter_t *r = reinterpret_cast(w); - ::rb_define_virtual_variable(q, r, e); -} - -inline void -rb_define_virtual_variable(const char *q, std::nullptr_t w, rb_gvar_setter_t *e) -{ - ::rb_define_virtual_variable(q, w, e); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -inline void -rb_define_virtual_variable(const char *q, std::nullptr_t w, void_type *e) -{ - rb_gvar_setter_t *r = reinterpret_cast(e); - ::rb_define_virtual_variable(q, w, r); -} -#endif - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Define a function-backended global variable. -/// @param[in] q Name of the variable. -/// @param[in] w Variable storage. -/// @param[in] e Getter function. -/// @param[in] r Setter function. -/// @note Both functions can be nullptr. -/// @see rb_define_virtual_variable() -/// @deprecated Use granular typed overload instead. -inline void -rb_define_hooked_variable(const char *q, VALUE *w, type *e, void_type *r) -{ - rb_gvar_getter_t *t = reinterpret_cast(e); - rb_gvar_setter_t *y = reinterpret_cast(r); - ::rb_define_hooked_variable(q, w, t, y); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -inline void -rb_define_hooked_variable(const char *q, VALUE *w, rb_gvar_getter_t *e, void_type *r) -{ - rb_gvar_setter_t *y = reinterpret_cast(r); - ::rb_define_hooked_variable(q, w, e, y); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -inline void -rb_define_hooked_variable(const char *q, VALUE *w, type *e, rb_gvar_setter_t *r) -{ - rb_gvar_getter_t *t = reinterpret_cast(e); - ::rb_define_hooked_variable(q, w, t, r); -} - -#ifdef HAVE_NULLPTR -inline void -rb_define_hooked_variable(const char *q, VALUE *w, rb_gvar_getter_t *e, std::nullptr_t r) -{ - ::rb_define_hooked_variable(q, w, e, r); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -inline void -rb_define_hooked_variable(const char *q, VALUE *w, type *e, std::nullptr_t r) -{ - rb_gvar_getter_t *y = reinterpret_cast(e); - ::rb_define_hooked_variable(q, w, y, r); -} - -inline void -rb_define_hooked_variable(const char *q, VALUE *w, std::nullptr_t e, rb_gvar_setter_t *r) -{ - ::rb_define_hooked_variable(q, w, e, r); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -inline void -rb_define_hooked_variable(const char *q, VALUE *w, std::nullptr_t e, void_type *r) -{ - rb_gvar_setter_t *y = reinterpret_cast(r); - ::rb_define_hooked_variable(q, w, e, y); -} -#endif - -/// @} -/// @name Exceptions and tag jumps -/// @{ - -// RUBY_CXX_DEPRECATED("by rb_block_call since 1.9") -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Old way to implement iterators. -/// @param[in] q A function that can yield. -/// @param[in] w Passed to `q`. -/// @param[in] e What is to be yielded. -/// @param[in] r Passed to `e`. -/// @return The return value of `q`. -/// @note `e` can be nullptr. -/// @deprecated This function is obsoleted since long before 2.x era. Do not -/// use it any longer. rb_block_call() is provided instead. -inline VALUE -rb_iterate(onearg_type *q, VALUE w, type *e, VALUE r) -{ - rb_block_call_func_t t = reinterpret_cast(e); - return backward::rb_iterate_deprecated(q, w, t, r); -} - -#ifdef HAVE_NULLPTR -RUBY_CXX_DEPRECATED("by rb_block_call since 1.9") -inline VALUE -rb_iterate(onearg_type *q, VALUE w, std::nullptr_t e, VALUE r) -{ - return backward::rb_iterate_deprecated(q, w, e, r); -} -#endif - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Call a method with a block. -/// @param[in] q The self. -/// @param[in] w The method. -/// @param[in] e The # of elems of `r` -/// @param[in] r The arguments. -/// @param[in] t What is to be yielded. -/// @param[in] y Passed to `t` -/// @return Return value of `q#w(*r,&t)` -/// @note 't' can be nullptr. -/// @deprecated Use granular typed overload instead. -inline VALUE -rb_block_call(VALUE q, ID w, int e, const VALUE *r, type *t, VALUE y) -{ - rb_block_call_func_t u = reinterpret_cast(t); - return ::rb_block_call(q, w, e, r, u, y); -} - -#ifdef HAVE_NULLPTR -inline VALUE -rb_block_call(VALUE q, ID w, int e, const VALUE *r, std::nullptr_t t, VALUE y) -{ - return ::rb_block_call(q, w, e, r, t, y); -} -#endif - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief An equivalent of `rescue` clause. -/// @param[in] q A function that can raise. -/// @param[in] w Passed to `q`. -/// @param[in] e A function that cleans-up. -/// @param[in] r Passed to `e`. -/// @return The return value of `q` if no exception occurs, or the return -/// value of `e` if otherwise. -/// @note `e` can be nullptr. -/// @see rb_ensure() -/// @see rb_rescue2() -/// @see rb_protect() -/// @deprecated Use granular typed overload instead. -inline VALUE -rb_rescue(type *q, VALUE w, type *e, VALUE r) -{ - typedef VALUE func1_t(VALUE); - typedef VALUE func2_t(VALUE, VALUE); - func1_t *t = reinterpret_cast(q); - func2_t *y = reinterpret_cast(e); - return ::rb_rescue(t, w, y, r); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief An equivalent of `rescue` clause. -/// @param[in] q A function that can raise. -/// @param[in] w Passed to `q`. -/// @param[in] e A function that cleans-up. -/// @param[in] r Passed to `e`. -/// @param[in] ... 0-terminated list of subclass of @ref rb_eException. -/// @return The return value of `q` if no exception occurs, or the return -/// value of `e` if otherwise. -/// @note `e` can be nullptr. -/// @see rb_ensure() -/// @see rb_rescue() -/// @see rb_protect() -/// @deprecated Use granular typed overload instead. -inline VALUE -rb_rescue2(type *q, VALUE w, type *e, VALUE r, ...) -{ - typedef VALUE func1_t(VALUE); - typedef VALUE func2_t(VALUE, VALUE); - func1_t *t = reinterpret_cast(q); - func2_t *y = reinterpret_cast(e); - va_list ap; - va_start(ap, r); - VALUE ret = ::rb_vrescue2(t, w, y, r, ap); - va_end(ap); - return ret; -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief An equivalent of `ensure` clause. -/// @param[in] q A function that can raise. -/// @param[in] w Passed to `q`. -/// @param[in] e A function that ensures. -/// @param[in] r Passed to `e`. -/// @return The return value of `q`. -/// @note It makes no sense to pass nullptr to `e`. -/// @see rb_rescue() -/// @see rb_rescue2() -/// @see rb_protect() -/// @deprecated Use granular typed overload instead. -inline VALUE -rb_ensure(type *q, VALUE w, type *e, VALUE r) -{ - typedef VALUE func1_t(VALUE); - func1_t *t = reinterpret_cast(q); - func1_t *y = reinterpret_cast(e); - return ::rb_ensure(t, w, y, r); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief An equivalent of `Kernel#catch`. -/// @param[in] q The "tag" string. -/// @param[in] w A function that can throw. -/// @param[in] e Passed to `w`. -/// @return What was thrown. -/// @note `q` can be a nullptr but makes no sense to pass nullptr to`w`. -/// @see rb_block_call() -/// @see rb_protect() -/// @see rb_rb_catch_obj() -/// @see rb_rescue() -/// @deprecated Use granular typed overload instead. -inline VALUE -rb_catch(const char *q, type *w, VALUE e) -{ - rb_block_call_func_t r = reinterpret_cast(w); - return ::rb_catch(q, r, e); -} - -#ifdef HAVE_NULLPTR -inline VALUE -rb_catch(const char *q, std::nullptr_t w, VALUE e) -{ - return ::rb_catch(q, w, e); -} -#endif - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief An equivalent of `Kernel#catch`. -/// @param[in] q The "tag" object. -/// @param[in] w A function that can throw. -/// @param[in] e Passed to `w`. -/// @return What was thrown. -/// @note It makes no sense to pass nullptr to`w`. -/// @see rb_block_call() -/// @see rb_protect() -/// @see rb_rb_catch_obj() -/// @see rb_rescue() -/// @deprecated Use granular typed overload instead. -inline VALUE -rb_catch_obj(VALUE q, type *w, VALUE e) -{ - rb_block_call_func_t r = reinterpret_cast(w); - return ::rb_catch_obj(q, r, e); -} - -/// @} -/// @name Procs, Fibers and Threads -/// @{ - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Creates a rb_cFiber instance. -/// @param[in] q The fiber body. -/// @param[in] w Passed to `q`. -/// @return What was allocated. -/// @note It makes no sense to pass nullptr to`q`. -/// @see rb_proc_new() -/// @see rb_thread_create() -/// @deprecated Use granular typed overload instead. -inline VALUE -rb_fiber_new(type *q, VALUE w) -{ - rb_block_call_func_t e = reinterpret_cast(q); - return ::rb_fiber_new(e, w); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Creates a @ref rb_cProc instance. -/// @param[in] q The proc body. -/// @param[in] w Passed to `q`. -/// @return What was allocated. -/// @note It makes no sense to pass nullptr to`q`. -/// @see rb_fiber_new() -/// @see rb_thread_create() -/// @deprecated Use granular typed overload instead. -inline VALUE -rb_proc_new(type *q, VALUE w) -{ - rb_block_call_func_t e = reinterpret_cast(q); - return ::rb_proc_new(e, w); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Creates a @ref rb_cThread instance. -/// @param[in] q The thread body. -/// @param[in] w Passed to `q`. -/// @return What was allocated. -/// @note It makes no sense to pass nullptr to`q`. -/// @see rb_proc_new() -/// @see rb_fiber_new() -/// @deprecated Use granular typed overload instead. -inline VALUE -rb_thread_create(type *q, void *w) -{ - typedef VALUE ptr_t(void*); - ptr_t *e = reinterpret_cast(q); - return ::rb_thread_create(e, w); -} - -/// @} -/// @name Hash and st_table -/// @{ - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Iteration over the given table. -/// @param[in] q A table to scan. -/// @param[in] w A function to iterate. -/// @param[in] e Passed to `w`. -/// @retval 0 Always returns 0. -/// @note It makes no sense to pass nullptr to`w`. -/// @see st_foreach_check() -/// @see rb_hash_foreach() -/// @deprecated Use granular typed overload instead. -inline int -st_foreach(st_table *q, int_type *w, st_data_t e) -{ - st_foreach_callback_func *r = - reinterpret_cast(w); - return ::st_foreach(q, r, e); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Iteration over the given table. -/// @param[in] q A table to scan. -/// @param[in] w A function to iterate. -/// @param[in] e Passed to `w`. -/// @retval 0 Successful end of iteration. -/// @retval 1 Element removed during traversing. -/// @note It makes no sense to pass nullptr to`w`. -/// @see st_foreach() -/// @deprecated Use granular typed overload instead. -inline int -st_foreach_check(st_table *q, int_type *w, st_data_t e, st_data_t) -{ - st_foreach_check_callback_func *t = - reinterpret_cast(w); - return ::st_foreach_check(q, t, e, 0); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Iteration over the given table. -/// @param[in] q A table to scan. -/// @param[in] w A function to iterate. -/// @param[in] e Passed to `w`. -/// @note It makes no sense to pass nullptr to`w`. -/// @see st_foreach_check() -/// @deprecated Use granular typed overload instead. -inline void -st_foreach_safe(st_table *q, int_type *w, st_data_t e) -{ - st_foreach_callback_func *r = - reinterpret_cast(w); - ::st_foreach_safe(q, r, e); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Iteration over the given hash. -/// @param[in] q A hash to scan. -/// @param[in] w A function to iterate. -/// @param[in] e Passed to `w`. -/// @note It makes no sense to pass nullptr to`w`. -/// @see st_foreach() -/// @deprecated Use granular typed overload instead. -inline void -rb_hash_foreach(VALUE q, int_type *w, VALUE e) -{ - st_foreach_callback_func *r = - reinterpret_cast(w); - ::rb_hash_foreach(q, r, e); -} - -RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated") -/// @brief Iteration over each instance variable of the object. -/// @param[in] q An object. -/// @param[in] w A function to iterate. -/// @param[in] e Passed to `w`. -/// @note It makes no sense to pass nullptr to`w`. -/// @see st_foreach() -/// @deprecated Use granular typed overload instead. -inline void -rb_ivar_foreach(VALUE q, int_type *w, VALUE e) -{ - st_foreach_callback_func *r = - reinterpret_cast(w); - ::rb_ivar_foreach(q, r, e); -} - -/// @} - -/// Driver for *_define_method. ::rb_define_method function for instance takes -/// a pointer to ANYARGS-ed functions, which in fact varies 18 different -/// prototypes. We still need to preserve ANYARGS for storages but why not -/// check the consistencies if possible. In C++ a function has its own -/// prototype, which is a compile-time constant (static type) by nature. We -/// can list up all the possible input types and provide warnings for other -/// cases. This is such attempt. -namespace define_method { - -/// Type of ::rb_f_notimplement(). -typedef VALUE notimpl_type(int, const VALUE *, VALUE, VALUE); - -/// @brief Template metaprogramming to generate function prototypes. -/// @tparam T Type of method id (`ID` or `const char*` in practice). -/// @tparam F Definition driver e.g. ::rb_define_method. -template -struct driver { - - /// @brief Defines a method - /// @tparam N Arity of the function. - /// @tparam U The function in question - template - struct engine { - - /* :TODO: Following deprecation attribute renders tons of warnings (one - * per every method definitions), which is annoying. Of course - * annoyance is the core feature of deprecation warnings... But that - * could be too much, especially when the warnings happen inside of - * machine-generated programs. And SWIG is known to do such thing. - * The new (granular) API was introduced in API version 2.7. As of - * this writing the version is 2.8. Let's warn this later, some time - * during 3.x. Hopefully codes in old (ANYARGS-ed) format should be - * less than now. */ -#if (RUBY_API_VERSION_MAJOR * 100 + RUBY_API_VERSION_MINOR) >= 301 - RUBY_CXX_DEPRECATED("use of ANYARGS is deprecated") -#endif - /// @copydoc define(VALUE klass, T mid, U func) - /// @deprecated Pass correctly typed function instead. - static inline void - define(VALUE klass, T mid, type func) - { - F(klass, mid, func, N); - } - - /// @brief Defines klass#mid as func, whose arity is N. - /// @param[in] klass Where the method lives. - /// @param[in] mid Name of the method to define. - /// @param[in] func Function that implements klass#mid. - static inline void - define(VALUE klass, T mid, U func) - { - F(klass, mid, reinterpret_cast(func), N); - } - - /// @copydoc define(VALUE klass, T mid, U func) - static inline void - define(VALUE klass, T mid, notimpl_type func) - { - F(klass, mid, reinterpret_cast(func), N); - } - }; - - /// @cond INTERNAL_MACRO - template struct specific : public engine {}; - template struct specific<15, b> : public engine<15, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific<14, b> : public engine<14, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific<13, b> : public engine<13, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific<12, b> : public engine<12, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific<11, b> : public engine<11, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific<10, b> : public engine<10, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 9, b> : public engine< 9, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 8, b> : public engine< 8, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 7, b> : public engine< 7, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 6, b> : public engine< 6, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 5, b> : public engine< 5, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 4, b> : public engine< 4, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 3, b> : public engine< 3, VALUE(*)(VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 2, b> : public engine< 2, VALUE(*)(VALUE, VALUE, VALUE)> {}; - template struct specific< 1, b> : public engine< 1, VALUE(*)(VALUE, VALUE)> {}; - template struct specific< 0, b> : public engine< 0, VALUE(*)(VALUE)> {}; - template struct specific<-1, b> : public engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)> { - using engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)>::define; - static inline void define(VALUE c, T m, VALUE(*f)(int argc, const VALUE *argv, VALUE self)) { F(c, m, reinterpret_cast(f), -1); } - }; - template struct specific<-2, b> : public engine<-2, VALUE(*)(VALUE, VALUE)> {}; - /// @endcond -}; - -/* We could perhaps merge this struct into the one above using variadic - * template parameters if we could assume C++11, but sadly we cannot. */ -/// @copydoc ruby::backward::cxxanyargs::define_method::driver -template -struct driver0 { - - /// @brief Defines a method - /// @tparam N Arity of the function. - /// @tparam U The function in question - template - struct engine { - RUBY_CXX_DEPRECATED("use of ANYARGS is deprecated") - /// @copydoc define(T mid, U func) - /// @deprecated Pass correctly typed function instead. - static inline void - define(T mid, type func) - { - F(mid, func, N); - } - - /// @brief Defines Kernel#mid as func, whose arity is N. - /// @param[in] mid Name of the method to define. - /// @param[in] func Function that implements klass#mid. - static inline void - define(T mid, U func) - { - F(mid, reinterpret_cast(func), N); - } - - /// @copydoc define(T mid, U func) - /// @deprecated Pass correctly typed function instead. - static inline void - define(T mid, notimpl_type func) - { - F(mid, reinterpret_cast(func), N); - } - }; - - /// @cond INTERNAL_MACRO - template struct specific : public engine {}; - template struct specific<15, b> : public engine<15, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific<14, b> : public engine<14, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific<13, b> : public engine<13, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific<12, b> : public engine<12, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific<11, b> : public engine<11, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific<10, b> : public engine<10, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 9, b> : public engine< 9, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 8, b> : public engine< 8, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 7, b> : public engine< 7, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 6, b> : public engine< 6, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 5, b> : public engine< 5, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 4, b> : public engine< 4, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 3, b> : public engine< 3, VALUE(*)(VALUE, VALUE, VALUE, VALUE)> {}; - template struct specific< 2, b> : public engine< 2, VALUE(*)(VALUE, VALUE, VALUE)> {}; - template struct specific< 1, b> : public engine< 1, VALUE(*)(VALUE, VALUE)> {}; - template struct specific< 0, b> : public engine< 0, VALUE(*)(VALUE)> {}; - template struct specific<-1, b> : public engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)> { - using engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)>::define; - static inline void define(T m, VALUE(*f)(int argc, const VALUE *argv, VALUE self)) { F(m, reinterpret_cast(f), -1); } - }; - template struct specific<-2, b> : public engine<-2, VALUE(*)(VALUE, VALUE)> {}; - /// @endcond -}; - -struct rb_define_method : public driver {}; ///< Dispatches appropriate driver for ::rb_define_method. -struct rb_define_method_id : public driver {}; ///< Dispatches appropriate driver for ::rb_define_method_id. -struct rb_define_private_method : public driver {}; ///< Dispatches appropriate driver for ::rb_define_private_method. -struct rb_define_protected_method : public driver {}; ///< Dispatches appropriate driver for ::rb_define_protected_method. -struct rb_define_singleton_method : public driver {}; ///< Dispatches appropriate driver for ::rb_define_singleton_method. -struct rb_define_module_function : public driver {}; ///< Dispatches appropriate driver for ::rb_define_module_function. -struct rb_define_global_function : public driver0 {}; ///< Dispatches appropriate driver for ::rb_define_global_function. - -/// @brief Defines klass\#mid. -/// @param klass Where the method lives. -/// @copydetails #rb_define_global_function(mid, func, arity) -#define rb_define_method(klass, mid, func, arity) ::ruby::backward::cxxanyargs::define_method::rb_define_method::specific::define(klass, mid, func) - -/// @copydoc #rb_define_method(klass, mid, func, arity) -#define rb_define_method_id(klass, mid, func, arity) ::ruby::backward::cxxanyargs::define_method::rb_define_method_id::specific::define(klass, mid, func) - -/// @brief Defines klass\#mid and makes it private. -/// @copydetails #rb_define_method(klass, mid, func, arity) -#define rb_define_private_method(klass, mid, func, arity) ::ruby::backward::cxxanyargs::define_method::rb_define_private_method::specific::define(klass, mid, func) - -/// @brief Defines klass\#mid and makes it protected. -/// @copydetails #rb_define_method -#define rb_define_protected_method(klass, mid, func, arity) ::ruby::backward::cxxanyargs::define_method::rb_define_protected_method::specific::define(klass, mid, func) - -/// @brief Defines klass.mid.(klass, mid, func, arity) -/// @copydetails #rb_define_method -#define rb_define_singleton_method(klass, mid, func, arity) ::ruby::backward::cxxanyargs::define_method::rb_define_singleton_method::specific::define(klass, mid, func) - -/// @brief Defines klass\#mid and makes it a module function. -/// @copydetails #rb_define_method(klass, mid, func, arity) -#define rb_define_module_function(klass, mid, func, arity) ::ruby::backward::cxxanyargs::define_method::rb_define_module_function::specific::define(klass, mid, func) - -/// @brief Defines ::rb_mKernel \#mid. -/// @param mid Name of the defining method. -/// @param func Implementation of \#mid. -/// @param arity Arity of \#mid. -#define rb_define_global_function(mid, func, arity) ::ruby::backward::cxxanyargs::define_method::rb_define_global_function::specific::define(mid, func) - -}}}}} - -using namespace ruby::backward::cxxanyargs; -#endif // RUBY_BACKWARD_CXXANYARGS_HPP diff --git a/libs/libruby/ruby/config.h b/libs/libruby/ruby/config.h deleted file mode 100644 index f70b065..0000000 --- a/libs/libruby/ruby/config.h +++ /dev/null @@ -1,505 +0,0 @@ -#ifndef INCLUDE_RUBY_CONFIG_H -#define INCLUDE_RUBY_CONFIG_H 1 -/* confdefs.h */ -#define HAVE_STDIO_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRING_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_UNISTD_H 1 -#define HAVE_WCHAR_H 1 -#define STDC_HEADERS 1 -#define _ALL_SOURCE 1 -#define _DARWIN_C_SOURCE 1 -#define _GNU_SOURCE 1 -#define _HPUX_ALT_XOPEN_SOCKET_API 1 -#define _NETBSD_SOURCE 1 -#define _OPENBSD_SOURCE 1 -#define _POSIX_PTHREAD_SEMANTICS 1 -#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 -#define __STDC_WANT_IEC_60559_BFP_EXT__ 1 -#define __STDC_WANT_IEC_60559_DFP_EXT__ 1 -#define __STDC_WANT_IEC_60559_EXT__ 1 -#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 -#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 -#define __STDC_WANT_LIB_EXT2__ 1 -#define __STDC_WANT_MATH_SPEC_FUNCS__ 1 -#define _TANDEM_SOURCE 1 -#define __EXTENSIONS__ 1 -#define RUBY_SYMBOL_EXPORT_BEGIN _Pragma("GCC visibility push(default)") -#define RUBY_SYMBOL_EXPORT_END _Pragma("GCC visibility pop") -#define HAVE_STMT_AND_DECL_IN_EXPR 1 -#define HAVE_PTHREAD_H 1 -#define _REENTRANT 1 -#define _THREAD_SAFE 1 -#define HAVE_LIBPTHREAD 1 -#define THREAD_IMPL_H "thread_pthread.h" -#define THREAD_IMPL_SRC "thread_pthread.c" -#define HAVE_LIBCRYPT 1 -#define HAVE_LIBDL 1 -#define HAVE_DIRENT_H 1 -#define HAVE__BOOL 1 -#define HAVE_STDBOOL_H 1 -#define HAVE_SYS_WAIT_H 1 -#define HAVE_GRP_H 1 -#define HAVE_FCNTL_H 1 -#define HAVE_FLOAT_H 1 -#define HAVE_LANGINFO_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_LOCALE_H 1 -#define HAVE_MALLOC_H 1 -#define HAVE_PWD_H 1 -#define HAVE_SANITIZER_ASAN_INTERFACE_H 1 -#define HAVE_STDALIGN_H 1 -#define HAVE_STDIO_H 1 -#define HAVE_SYS_EVENTFD_H 1 -#define HAVE_SYS_FCNTL_H 1 -#define HAVE_SYS_FILE_H 1 -#define HAVE_SYS_IOCTL_H 1 -#define HAVE_SYS_PARAM_H 1 -#define HAVE_SYS_PRCTL_H 1 -#define HAVE_SYS_RANDOM_H 1 -#define HAVE_SYS_RESOURCE_H 1 -#define HAVE_SYS_SELECT_H 1 -#define HAVE_SYS_SENDFILE_H 1 -#define HAVE_SYS_SOCKET_H 1 -#define HAVE_SYS_SYSCALL_H 1 -#define HAVE_SYS_SYSMACROS_H 1 -#define HAVE_SYS_TIME_H 1 -#define HAVE_SYS_TIMES_H 1 -#define HAVE_SYS_UIO_H 1 -#define HAVE_SYSCALL_H 1 -#define HAVE_TIME_H 1 -#define HAVE_UCONTEXT_H 1 -#define HAVE_UTIME_H 1 -#define HAVE_SYS_EPOLL_H 1 -#define HAVE_STDCKDINT_H 1 -#define HAVE_STDATOMIC_H 1 -#define HAVE_X86INTRIN_H 1 -#if defined(__x86_64__) -#define HAVE_X86INTRIN_H 1 -#endif -#define HAVE_GMP_H 1 -#define HAVE_LIBGMP 1 -#define HAVE_TYPEOF 1 -#define restrict __restrict__ -#define HAVE_LONG_LONG 1 -#define HAVE_OFF_T 1 -#define SIZEOF_INT 4 -#define SIZEOF_SHORT 2 -#define SIZEOF_LONG 8 -#define SIZEOF_LONG_LONG 8 -#define SIZEOF___INT64 0 -#define SIZEOF___INT128 16 -#define SIZEOF_OFF_T 8 -#define SIZEOF_VOIDP 8 -#define SIZEOF_FLOAT 4 -#define SIZEOF_DOUBLE 8 -#define SIZEOF_TIME_T 8 -#define SIZEOF_CLOCK_T 8 -#define RBIMPL_ATTR_PACKED_STRUCT_BEGIN() -#define RBIMPL_ATTR_PACKED_STRUCT_END() __attribute__((packed)) -#define USE_UNALIGNED_MEMBER_ACCESS 1 -#define PRI_LL_PREFIX "ll" -#define HAVE_PID_T 1 -#define rb_pid_t pid_t -#define SIGNEDNESS_OF_PID_T -1 -#define PIDT2NUM(v) INT2NUM(v) -#define NUM2PIDT(v) NUM2INT(v) -#define PRI_PIDT_PREFIX PRI_INT_PREFIX -#define HAVE_UID_T 1 -#define rb_uid_t uid_t -#define SIGNEDNESS_OF_UID_T +1 -#define UIDT2NUM(v) UINT2NUM(v) -#define NUM2UIDT(v) NUM2UINT(v) -#define PRI_UIDT_PREFIX PRI_INT_PREFIX -#define HAVE_GID_T 1 -#define rb_gid_t gid_t -#define SIGNEDNESS_OF_GID_T +1 -#define GIDT2NUM(v) UINT2NUM(v) -#define NUM2GIDT(v) NUM2UINT(v) -#define PRI_GIDT_PREFIX PRI_INT_PREFIX -#define HAVE_TIME_T 1 -#define rb_time_t time_t -#define SIGNEDNESS_OF_TIME_T -1 -#define TIMET2NUM(v) LONG2NUM(v) -#define NUM2TIMET(v) NUM2LONG(v) -#define PRI_TIMET_PREFIX PRI_LONG_PREFIX -#define HAVE_DEV_T 1 -#define rb_dev_t dev_t -#define SIGNEDNESS_OF_DEV_T +1 -#define DEVT2NUM(v) ULONG2NUM(v) -#define NUM2DEVT(v) NUM2ULONG(v) -#define PRI_DEVT_PREFIX PRI_LONG_PREFIX -#define HAVE_MODE_T 1 -#define rb_mode_t mode_t -#define SIGNEDNESS_OF_MODE_T +1 -#define MODET2NUM(v) UINT2NUM(v) -#define NUM2MODET(v) NUM2UINT(v) -#define PRI_MODET_PREFIX PRI_INT_PREFIX -#define HAVE_RLIM_T 1 -#define rb_rlim_t rlim_t -#define SIGNEDNESS_OF_RLIM_T +1 -#define RLIM2NUM(v) ULONG2NUM(v) -#define NUM2RLIM(v) NUM2ULONG(v) -#define PRI_RLIM_PREFIX PRI_LONG_PREFIX -#define HAVE_OFF_T 1 -#define rb_off_t off_t -#define SIGNEDNESS_OF_OFF_T -1 -#define OFFT2NUM(v) LONG2NUM(v) -#define NUM2OFFT(v) NUM2LONG(v) -#define PRI_OFFT_PREFIX PRI_LONG_PREFIX -#define HAVE_CLOCKID_T 1 -#define rb_clockid_t clockid_t -#define SIGNEDNESS_OF_CLOCKID_T -1 -#define CLOCKID2NUM(v) INT2NUM(v) -#define NUM2CLOCKID(v) NUM2INT(v) -#define PRI_CLOCKID_PREFIX PRI_INT_PREFIX -#define HAVE_VA_ARGS_MACRO 1 -#define HAVE__ALIGNOF 1 -#define CONSTFUNC(x) __attribute__((__const__)) x -#define PUREFUNC(x) __attribute__((__pure__)) x -#define NORETURN(x) __attribute__((__noreturn__)) x -#define DEPRECATED(x) __attribute__((__deprecated__)) x -#define DEPRECATED_BY(n, x) __attribute__((__deprecated__("by " #n))) x -#define NOINLINE(x) __attribute__((__noinline__)) x -#define ALWAYS_INLINE(x) __attribute__((__always_inline__)) x -#define NO_SANITIZE(san, x) __attribute__((__no_sanitize__(san))) x -#define NO_SANITIZE_ADDRESS(x) __attribute__((__no_sanitize_address__)) x -#define NO_ADDRESS_SAFETY_ANALYSIS(x) \ - __attribute__((__no_address_safety_analysis__)) x -#define WARN_UNUSED_RESULT(x) __attribute__((__warn_unused_result__)) x -#define MAYBE_UNUSED(x) __attribute__((__unused__)) x -#define ERRORFUNC(mesg, x) __attribute__((__error__ mesg)) x -#define WARNINGFUNC(mesg, x) __attribute__((__warning__ mesg)) x -#define WEAK(x) __attribute__((__weak__)) x -#define HAVE_FUNC_WEAK 1 -#define RUBY_CXX_DEPRECATED(msg) __attribute__((__deprecated__(msg))) -#define HAVE_NULLPTR 1 -#define FUNC_UNOPTIMIZED(x) __attribute__((__optimize__("O0"))) x -#define FUNC_MINIMIZED(x) \ - __attribute__((__optimize__("-Os", "-fomit-frame-pointer"))) x -#define HAVE_ATTRIBUTE_FUNCTION_ALIAS 1 -#define RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args) \ - type prot __attribute__((alias(#name))); -#define RUBY_ALIAS_FUNCTION_VOID(prot, name, args) \ - RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args) -#define HAVE_GCC_ATOMIC_BUILTINS 1 -#define HAVE_GCC_SYNC_BUILTINS 1 -#define HAVE___BUILTIN_UNREACHABLE 1 -#define RUBY_FUNC_EXPORTED __attribute__((__visibility__("default"))) extern -#define RUBY_FUNC_NONNULL(n, x) __attribute__((__nonnull__(n))) x -#define RUBY_FUNCTION_NAME_STRING __func__ -#define ENUM_OVER_INT 1 -#define HAVE_DECL_SYS_NERR 0 -#define HAVE_DECL_GETENV 1 -#define SIZEOF_SIZE_T 8 -#define SIZEOF_PTRDIFF_T 8 -#define SIZEOF_DEV_T 8 -#define PRI_SIZE_PREFIX "z" -#define PRI_PTRDIFF_PREFIX "t" -#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 -#define HAVE_STRUCT_STAT_ST_BLOCKS 1 -#define HAVE_STRUCT_STAT_ST_RDEV 1 -#define SIZEOF_STRUCT_STAT_ST_SIZE SIZEOF_OFF_T -#define SIZEOF_STRUCT_STAT_ST_BLOCKS SIZEOF_OFF_T -#define SIZEOF_STRUCT_STAT_ST_INO SIZEOF_LONG -#define SIZEOF_STRUCT_STAT_ST_DEV SIZEOF_DEV_T -#define SIZEOF_STRUCT_STAT_ST_RDEV SIZEOF_DEV_T -#define HAVE_STRUCT_STAT_ST_ATIM 1 -#define HAVE_STRUCT_STAT_ST_MTIM 1 -#define HAVE_STRUCT_STAT_ST_CTIM 1 -#define HAVE_STRUCT_STATX_STX_BTIME 1 -#define HAVE_STRUCT_TIMEVAL 1 -#define SIZEOF_STRUCT_TIMEVAL_TV_SEC SIZEOF_TIME_T -#define HAVE_STRUCT_TIMESPEC 1 -#define HAVE_STRUCT_TIMEZONE 1 -#define HAVE_RB_FD_INIT 1 -#define HAVE_INT8_T 1 -#define SIZEOF_INT8_T 1 -#define HAVE_UINT8_T 1 -#define SIZEOF_UINT8_T 1 -#define HAVE_INT16_T 1 -#define SIZEOF_INT16_T 2 -#define HAVE_UINT16_T 1 -#define SIZEOF_UINT16_T 2 -#define HAVE_INT32_T 1 -#define SIZEOF_INT32_T 4 -#define HAVE_UINT32_T 1 -#define SIZEOF_UINT32_T 4 -#define HAVE_INT64_T 1 -#define SIZEOF_INT64_T 8 -#define HAVE_UINT64_T 1 -#define SIZEOF_UINT64_T 8 -#define HAVE_INT128_T 1 -#define int128_t __int128 -#define SIZEOF_INT128_T SIZEOF___INT128 -#define HAVE_UINT128_T 1 -#define uint128_t unsigned __int128 -#define SIZEOF_UINT128_T SIZEOF___INT128 -#define HAVE_INTPTR_T 1 -#define SIZEOF_INTPTR_T 8 -#define HAVE_UINTPTR_T 1 -#define SIZEOF_UINTPTR_T 8 -#define HAVE_SSIZE_T 1 -#define SIZEOF_SSIZE_T 8 -#define STACK_END_ADDRESS __libc_stack_end -#define GETGROUPS_T gid_t -#define HAVE_ALLOCA_H 1 -#define HAVE_ALLOCA 1 -#define HAVE_DUP 1 -#define HAVE_DUP2 1 -#define HAVE_ACOSH 1 -#define HAVE_CBRT 1 -#define HAVE_CRYPT 1 -#define HAVE_ERF 1 -#define HAVE_EXPLICIT_BZERO 1 -#define HAVE_FFS 1 -#define HAVE_FLOCK 1 -#define HAVE_HYPOT 1 -#define HAVE_LGAMMA_R 1 -#define HAVE_MEMMOVE 1 -#define HAVE_NAN 1 -#define HAVE_NEXTAFTER 1 -#define HAVE_STRCHR 1 -#define HAVE_STRERROR 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRSTR 1 -#define HAVE_TGAMMA 1 -#define HAVE_ISFINITE 1 -#define SPT_TYPE SPT_REUSEARGV -#define HAVE_SIGNBIT 1 -#define HAVE_FORK 1 -#define HAVE_VFORK 1 -#define HAVE_WORKING_VFORK 1 -#define HAVE_WORKING_FORK 1 -#define HAVE__LONGJMP 1 -#define HAVE_ARC4RANDOM_BUF 1 -#define HAVE_ATAN2L 1 -#define HAVE_ATAN2F 1 -#define HAVE_DECL_ATOMIC_SIGNAL_FENCE 1 -#define HAVE_CHMOD 1 -#define HAVE_CHOWN 1 -#define HAVE_CHROOT 1 -#define HAVE_CLOCK_GETTIME 1 -#define HAVE_COPY_FILE_RANGE 1 -#define HAVE_COSH 1 -#define HAVE_CRYPT_R 1 -#define HAVE_DIRFD 1 -#define HAVE_DL_ITERATE_PHDR 1 -#define HAVE_DLOPEN 1 -#define HAVE_DLADDR 1 -#define HAVE_DUP3 1 -#define HAVE_EACCESS 1 -#define HAVE_ENDGRENT 1 -#define HAVE_EVENTFD 1 -#define HAVE_EXECL 1 -#define HAVE_EXECLE 1 -#define HAVE_EXECV 1 -#define HAVE_EXECVE 1 -#define HAVE_FCHDIR 1 -#define HAVE_FCHMOD 1 -#define HAVE_FCHOWN 1 -#define HAVE_FCNTL 1 -#define HAVE_FDATASYNC 1 -#define HAVE_FDOPENDIR 1 -#define HAVE_FMOD 1 -#define HAVE_FSTATAT 1 -#define HAVE_FSYNC 1 -#define HAVE_FTRUNCATE 1 -#define HAVE_FTRUNCATE64 1 -#define HAVE_GETCWD 1 -#define HAVE_GETEGID 1 -#define HAVE_GETENTROPY 1 -#define HAVE_GETEUID 1 -#define HAVE_GETGID 1 -#define HAVE_GETGRNAM 1 -#define HAVE_GETGRNAM_R 1 -#define HAVE_GETGROUPS 1 -#define HAVE_GETLOGIN 1 -#define HAVE_GETLOGIN_R 1 -#define HAVE_GETPGID 1 -#define HAVE_GETPGRP 1 -#define HAVE_GETPPID 1 -#define HAVE_GETPRIORITY 1 -#define HAVE_GETPWNAM 1 -#define HAVE_GETPWNAM_R 1 -#define HAVE_GETPWUID 1 -#define HAVE_GETPWUID_R 1 -#define HAVE_GETRANDOM 1 -#define HAVE_GETRESGID 1 -#define HAVE_GETRESUID 1 -#define HAVE_GETRLIMIT 1 -#define HAVE_GETSID 1 -#define HAVE_GETTIMEOFDAY 1 -#define HAVE_GETUID 1 -#define HAVE_GMTIME_R 1 -#define HAVE_INITGROUPS 1 -#define HAVE_IOCTL 1 -#define HAVE_KILL 1 -#define HAVE_KILLPG 1 -#define HAVE_LCHMOD 1 -#define HAVE_LCHOWN 1 -#define HAVE_LINK 1 -#define HAVE_LLABS 1 -#define HAVE_LOCKF 1 -#define HAVE_LOG2 1 -#define HAVE_LSTAT 1 -#define HAVE_LUTIMES 1 -#define HAVE_MALLOC_USABLE_SIZE 1 -#define HAVE_MALLOC_TRIM 1 -#define HAVE_MBLEN 1 -#define HAVE_MEMALIGN 1 -#define HAVE_WRITEV 1 -#define HAVE_MEMRCHR 1 -#define HAVE_MEMMEM 1 -#define HAVE_MKFIFO 1 -#define HAVE_MKNOD 1 -#define HAVE_MKTIME 1 -#define HAVE_MMAP 1 -#define HAVE_MREMAP 1 -#define HAVE_OPENAT 1 -#define HAVE_PCLOSE 1 -#define HAVE_PIPE 1 -#define HAVE_PIPE2 1 -#define HAVE_POLL 1 -#define HAVE_POPEN 1 -#define HAVE_POSIX_FADVISE 1 -#define HAVE_POSIX_MADVISE 1 -#define HAVE_POSIX_MEMALIGN 1 -#define HAVE_PPOLL 1 -#define HAVE_PREAD 1 -#define HAVE_PWRITE 1 -#define HAVE_QSORT_R 1 -#define HAVE_READLINK 1 -#define HAVE_REALPATH 1 -#define HAVE_ROUND 1 -#define HAVE_SCHED_GETAFFINITY 1 -#define HAVE_SEEKDIR 1 -#define HAVE_SENDFILE 1 -#define HAVE_SETEGID 1 -#define HAVE_SETENV 1 -#define HAVE_SETEUID 1 -#define HAVE_SETGID 1 -#define HAVE_SETGROUPS 1 -#define HAVE_SETPGID 1 -#define HAVE_SETPGRP 1 -#define HAVE_SETREGID 1 -#define HAVE_SETRESGID 1 -#define HAVE_SETRESUID 1 -#define HAVE_SETREUID 1 -#define HAVE_SETRLIMIT 1 -#define HAVE_SETSID 1 -#define HAVE_SETUID 1 -#define HAVE_SHUTDOWN 1 -#define HAVE_SIGACTION 1 -#define HAVE_SIGALTSTACK 1 -#define HAVE_SIGPROCMASK 1 -#define HAVE_SINH 1 -#define HAVE_SNPRINTF 1 -#define HAVE_SYMLINK 1 -#define HAVE_SYSCALL 1 -#define HAVE_SYSCONF 1 -#define HAVE_SYSTEM 1 -#define HAVE_TANH 1 -#define HAVE_TELLDIR 1 -#define HAVE_TIMEGM 1 -#define HAVE_TIMES 1 -#define HAVE_TRUNCATE 1 -#define HAVE_TRUNCATE64 1 -#define HAVE_TZSET 1 -#define HAVE_UMASK 1 -#define HAVE_UNSETENV 1 -#define HAVE_UTIMENSAT 1 -#define HAVE_UTIMES 1 -#define HAVE_WAIT4 1 -#define HAVE_WAITPID 1 -#define HAVE_STATX 1 -#define HAVE_CRYPT_H 1 -#define HAVE_STRUCT_CRYPT_DATA_INITIALIZED 1 -#define HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN 1 -#define HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED 1 -#define HAVE_BUILTIN___BUILTIN_BSWAP16 1 -#define HAVE_BUILTIN___BUILTIN_BSWAP32 1 -#define HAVE_BUILTIN___BUILTIN_BSWAP64 1 -#define HAVE_BUILTIN___BUILTIN_POPCOUNT 1 -#define HAVE_BUILTIN___BUILTIN_POPCOUNTLL 1 -#define HAVE_BUILTIN___BUILTIN_CLZ 1 -#define HAVE_BUILTIN___BUILTIN_CLZL 1 -#define HAVE_BUILTIN___BUILTIN_CLZLL 1 -#define HAVE_BUILTIN___BUILTIN_CTZ 1 -#define HAVE_BUILTIN___BUILTIN_CTZLL 1 -#define HAVE_BUILTIN___BUILTIN_CONSTANT_P 1 -#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR 1 -#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P 1 -#define HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P 1 -#define HAVE_BUILTIN___BUILTIN_TRAP 1 -#define HAVE_BUILTIN___BUILTIN_EXPECT 1 -#define HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW 1 -#define HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW_P 1 -#define USE___BUILTIN_ADD_OVERFLOW_LONG_LONG 1 -#define HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW 1 -#define HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW_P 1 -#define USE___BUILTIN_SUB_OVERFLOW_LONG_LONG 1 -#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW 1 -#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW_P 1 -#define USE___BUILTIN_MUL_OVERFLOW_LONG_LONG 1 -#define HAVE_GNU_QSORT_R 1 -#define ATAN2_INF_C99 1 -#define HAVE_CLOCK_GETRES 1 -#define HAVE_LIBRT 1 -#define HAVE_LIBRT 1 -#define HAVE_TIMER_CREATE 1 -#define HAVE_TIMER_SETTIME 1 -#define HAVE_STRUCT_TM_TM_ZONE 1 -#define HAVE_TM_ZONE 1 -#define HAVE_STRUCT_TM_TM_GMTOFF 1 -#define HAVE_DAYLIGHT 1 -#define NEGATIVE_TIME_T 1 -#define POSIX_SIGNAL 1 -#define HAVE_SIG_T 1 -#define RSHIFT(x, y) ((x) >> (int)(y)) -#define USE_COPY_FILE_RANGE 1 -#define HAVE__SC_CLK_TCK 1 -#define STACK_GROW_DIRECTION -1 -#define COROUTINE_H "coroutine/amd64/Context.h" -#define HAVE_SCHED_YIELD 1 -#define HAVE_PTHREAD_ATTR_SETINHERITSCHED 1 -#define HAVE_PTHREAD_ATTR_GETSTACK 1 -#define HAVE_PTHREAD_ATTR_GETGUARDSIZE 1 -#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1 -#define HAVE_PTHREAD_SETNAME_NP 1 -#define HAVE_PTHREAD_SIGMASK 1 -#define HAVE_PTHREAD_GETATTR_NP 1 -#define SET_CURRENT_THREAD_NAME(name) pthread_setname_np(pthread_self(), name) -#define SET_ANOTHER_THREAD_NAME(thid, name) pthread_setname_np(thid, name) -#define RB_THREAD_LOCAL_SPECIFIER _Thread_local -#define DEFINE_MCONTEXT_PTR(mc, uc) mcontext_t *mc = &(uc)->uc_mcontext -#define HAVE_GETCONTEXT 1 -#define HAVE_SETCONTEXT 1 -#define HAVE_SYS_USER_H 1 -#define HAVE_CONST_PAGE_SIZE 0 -#define IOCTL_REQ_TYPE unsigned long -#define NUM2IOCTLREQ(num) NUM2ULONG(num) -#define USE_ELF 1 -#define HAVE_ELF_H 1 -#define HAVE_LIBZ 1 -#define HAVE_BACKTRACE 1 -#define DLEXT_MAXLEN 3 -#define DLEXT ".so" -#define SOEXT ".so" -#define LIBDIR_BASENAME "lib" -#define HAVE__SETJMP 1 -#define RUBY_SETJMP(env) _setjmp((env)) -#define RUBY_LONGJMP(env, val) _longjmp((env), val) -#define RUBY_JMP_BUF jmp_buf -#define USE_MODULAR_GC 0 -#define USE_YJIT 1 -#define USE_RJIT 1 -#define RUBY_PLATFORM "x86_64-linux" -#define RB_DEFAULT_PARSER RB_DEFAULT_PARSER_PRISM -#endif /* INCLUDE_RUBY_CONFIG_H */ diff --git a/libs/libruby/ruby/debug.h b/libs/libruby/ruby/debug.h deleted file mode 100644 index f95acdb..0000000 --- a/libs/libruby/ruby/debug.h +++ /dev/null @@ -1,667 +0,0 @@ -#ifndef RB_DEBUG_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RB_DEBUG_H 1 -/** - * @file - * @author $Author: ko1 $ - * @date Tue Nov 20 20:35:08 2012 - * @copyright Copyright (C) 2012 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/returns_nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/event.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* Note: This file contains experimental APIs. */ -/* APIs can be replaced at Ruby 2.0.1 or later */ - -/** - * @name Frame-profiling APIs - * - * @{ - */ - -RBIMPL_ATTR_NONNULL((3)) -/** - * Queries mysterious "frame"s of the given range. - * - * The returned values are opaque backtrace pointers, which you are allowed to - * issue a very limited set of operations listed below. Don't call arbitrary - * ruby methods. - * - * @param[in] start Start position (0 means the topmost). - * @param[in] limit Number objects of `buff`. - * @param[out] buff Return buffer. - * @param[out] lines Return buffer. - * @return Number of objects filled into `buff`. - * @post `buff` is filled with backtrace pointers. - * @post `lines` is filled with `__LINE__` of each backtraces. - * - * @internal - * - * @shyouhei doesn't like this abuse of ::VALUE. It should have been - * `const struct rb_callable_method_entry_struct *`. - */ -int rb_profile_frames(int start, int limit, VALUE *buff, int *lines); - -/** - * Queries the path of the passed backtrace. - * - * @param[in] frame What rb_profile_frames() returned. - * @retval RUBY_Qnil The frame is implemented in C etc. - * @retval otherwise Where `frame` is running. - */ -VALUE rb_profile_frame_path(VALUE frame); - -/** - * Identical to rb_profile_frame_path(), except it tries to expand the - * returning path. In case the path is `require`-d from something else - * rb_profile_frame_path() can return relative paths. This one tries to avoid - * that. - * - * @param[in] frame What rb_profile_frames() returned. - * @retval "" The frame is in C. - * @retval RUBY_Qnil Can't infer real path (inside of `eval` etc.). - * @retval otherwise Where `frame` is running. - */ -VALUE rb_profile_frame_absolute_path(VALUE frame); - -/** - * Queries human-readable "label" string. This is `"
"` for the toplevel, - * `""` for evaluated ones, method name for methods, class name for - * classes. - * - * @param[in] frame What rb_profile_frames() returned. - * @retval RUBY_Qnil Can't infer the label (C etc.). - * @retval "
" The frame is global toplevel. - * @retval "" The frame is dynamic. - * @retval otherwise Label of the frame. - */ -VALUE rb_profile_frame_label(VALUE frame); - -/** - * Identical to rb_profile_frame_label(), except it does not "qualify" the - * result. Consider the following backtrace: - * - * ```ruby - * def bar - * caller_locations - * end - * - * def foo - * [1].map { bar }.first - * end - * - * obj = foo.first - * obj.label # => "block in foo" - * obj.base_label # => "foo" - * ``` - * - * @param[in] frame What rb_profile_frames() returned. - * @retval RUBY_Qnil Can't infer the label (C etc.). - * @retval "
" The frame is global toplevel. - * @retval "" The frame is dynamic. - * @retval otherwise Base label of the frame. - */ -VALUE rb_profile_frame_base_label(VALUE frame); - -/** - * Identical to rb_profile_frame_label(), except it returns a qualified result. - * - * @param[in] frame What rb_profile_frames() returned. - * @retval RUBY_Qnil Can't infer the label (C etc.). - * @retval "
" The frame is global toplevel. - * @retval "" The frame is dynamic. - * @retval otherwise Qualified label of the frame. - * - * @internal - * - * As of writing there is no way to obtain this return value from a Ruby - * script. This may change in future (it took 8 years and still no progress, - * though). - */ -VALUE rb_profile_frame_full_label(VALUE frame); - -/** - * Queries the first line of the method of the passed frame pointer. Can be - * handy when for instance a debugger want to display the frame in question. - * - * @param[in] frame What rb_profile_frames() returned. - * @retval RUBY_Qnil Can't infer the line (C etc.). - * @retval otherwise Line number of the method in question. - */ -VALUE rb_profile_frame_first_lineno(VALUE frame); - -/** - * Queries the class path of the method that the passed frame represents. - * - * @param[in] frame What rb_profile_frames() returned. - * @retval RUBY_Qnil Can't infer the class (global toplevel etc.). - * @retval otherwise Class path as in rb_class_path(). - */ -VALUE rb_profile_frame_classpath(VALUE frame); - -/** - * Queries if the method of the passed frame is a singleton class. - * - * @param[in] frame What rb_profile_frames() returned. - * @retval RUBY_Qtrue It is a singleton method. - * @retval RUBY_Qfalse Otherwise (normal method/non-method). - */ -VALUE rb_profile_frame_singleton_method_p(VALUE frame); - -/** - * Queries the name of the method of the passed frame. - * - * @param[in] frame What rb_profile_frames() returned. - * @retval RUBY_Qnil The frame in question is not a method. - * @retval otherwise Name of the method of the frame. - */ -VALUE rb_profile_frame_method_name(VALUE frame); - -/** - * Identical to rb_profile_frame_method_name(), except it "qualifies" the - * return value with its defining class. - * - * @param[in] frame What rb_profile_frames() returned. - * @retval RUBY_Qnil The frame in question is not a method. - * @retval otherwise Qualified name of the method of the frame. - */ -VALUE rb_profile_frame_qualified_method_name(VALUE frame); - -/** @} */ - -/** - * @name Debug inspector APIs - * - * @{ - */ - -/** Opaque struct representing a debug inspector. */ -typedef struct rb_debug_inspector_struct rb_debug_inspector_t; - -/** - * Type of the callback function passed to rb_debug_inspector_open(). - * Inspection shall happen only inside of them. The passed pointers gets - * invalidated once after the callback returns. - * - * @param[in] dc A debug context. - * @param[in,out] data What was passed to rb_debug_inspector_open(). - * @return What would be the return value of rb_debug_inspector_open(). - */ -typedef VALUE (*rb_debug_inspector_func_t)(const rb_debug_inspector_t *dc, void *data); - -/** - * Prepares, executes, then cleans up a debug session. - * - * @param[in] func A callback to run inside of a debug session. - * @param[in,out] data Passed as-is to `func`. - * @return What was returned from `func`. - */ -VALUE rb_debug_inspector_open(rb_debug_inspector_func_t func, void *data); - -/** - * Queries the backtrace object of the context. This is as if you call - * `caller_locations` at the point of debugger. - * - * @param[in] dc A debug context. - * @return An array of `Thread::Backtrace::Location` which represents the - * current point of execution at `dc`. - - */ -VALUE rb_debug_inspector_backtrace_locations(const rb_debug_inspector_t *dc); - -/** - * Queries the current receiver of the passed context's upper frame. - * - * @param[in] dc A debug context. - * @param[in] index Index of the frame from top to bottom. - * @exception rb_eArgError `index` out of range. - * @return The current receiver at `index`-th frame. - */ -VALUE rb_debug_inspector_frame_self_get(const rb_debug_inspector_t *dc, long index); - -/** - * Queries the current class of the passed context's upper frame. - * - * @param[in] dc A debug context. - * @param[in] index Index of the frame from top to bottom. - * @exception rb_eArgError `index` out of range. - * @return The current class at `index`-th frame. - */ -VALUE rb_debug_inspector_frame_class_get(const rb_debug_inspector_t *dc, long index); - -/** - * Queries the binding of the passed context's upper frame. - * - * @param[in] dc A debug context. - * @param[in] index Index of the frame from top to bottom. - * @exception rb_eArgError `index` out of range. - * @return The binding at `index`-th frame. - */ -VALUE rb_debug_inspector_frame_binding_get(const rb_debug_inspector_t *dc, long index); - -/** - * Queries the instruction sequence of the passed context's upper frame. - * - * @param[in] dc A debug context. - * @param[in] index Index of the frame from top to bottom. - * @exception rb_eArgError `index` out of range. - * @retval RUBY_Qnil `index`-th frame is not in Ruby (C etc.). - * @retval otherwise An instance of `RubyVM::InstructionSequence` which - * represents the instruction sequence at `index`-th - * frame. - */ -VALUE rb_debug_inspector_frame_iseq_get(const rb_debug_inspector_t *dc, long index); - -/** - * Queries the depth of the passed context's upper frame. - * - * Note that the depth is not same as the frame index because debug_inspector - * skips some special frames but the depth counts all frames. - * - * @param[in] dc A debug context. - * @param[in] index Index of the frame from top to bottom. - * @exception rb_eArgError `index` out of range. - * @retval The depth at `index`-th frame in Integer. - */ -VALUE rb_debug_inspector_frame_depth(const rb_debug_inspector_t *dc, long index); - -// A macro to recognize `rb_debug_inspector_frame_depth()` is available or not -#define RB_DEBUG_INSPECTOR_FRAME_DEPTH(dc, index) rb_debug_inspector_frame_depth(dc, index) - -/** - * Return current frmae depth. - * - * @retval The depth of the current frame in Integer. - */ -VALUE rb_debug_inspector_current_depth(void); - -/** @} */ - -/** - * @name Old style set_trace_func APIs - * - * @{ - */ - -/* duplicated def of include/ruby/ruby.h */ -#include "ruby/internal/event.h" - -/** - * Identical to rb_remove_event_hook(), except it additionally takes the data - * argument. This extra argument is the same as that of rb_add_event_hook(), - * and this function removes the hook which matches both arguments at once. - * - * @param[in] func A callback. - * @param[in] data What to be passed to `func`. - * @return Number of deleted event hooks. - * @note As multiple events can share the same `func` it is quite - * possible for the return value to become more than one. - */ -int rb_remove_event_hook_with_data(rb_event_hook_func_t func, VALUE data); - -/** - * Identical to rb_add_event_hook(), except its effect is limited to the passed - * thread. Other threads are not affected by this. - * - * @param[in] thval An instance of ::rb_cThread. - * @param[in] func A callback. - * @param[in] events A set of events that `func` should run. - * @param[in] data Passed as-is to `func`. - * @exception rb_eTypeError `thval` is not a thread. - */ -void rb_thread_add_event_hook(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); - -/** - * Identical to rb_remove_event_hook(), except it additionally takes a thread - * argument. This extra argument is the same as that of - * rb_thread_add_event_hook(), and this function removes the hook which matches - * both arguments at once. - * - * @param[in] thval An instance of ::rb_cThread. - * @param[in] func A callback. - * @exception rb_eTypeError `thval` is not a thread. - * @return Number of deleted event hooks. - * @note As multiple events can share the same `func` it is quite - * possible for the return value to become more than one. - */ -int rb_thread_remove_event_hook(VALUE thval, rb_event_hook_func_t func); - -/** - * Identical to rb_thread_remove_event_hook(), except it additionally takes the - * data argument. It can also be seen as a routine identical to - * rb_remove_event_hook_with_data(), except it additionally takes the thread. - * This function deletes hooks that satisfy all three criteria. - * - * @param[in] thval An instance of ::rb_cThread. - * @param[in] func A callback. - * @param[in] data What to be passed to `func`. - * @exception rb_eTypeError `thval` is not a thread. - * @return Number of deleted event hooks. - * @note As multiple events can share the same `func` it is quite - * possible for the return value to become more than one. - */ -int rb_thread_remove_event_hook_with_data(VALUE thval, rb_event_hook_func_t func, VALUE data); - -/** @} */ - -/** - * @name TracePoint APIs - * - * @{ - */ - -/** - * Creates a tracepoint by registering a callback function for one or more - * tracepoint events. Once the tracepoint is created, you can use - * rb_tracepoint_enable to enable the tracepoint. - * - * @param[in] target_thread_not_supported_yet Meant for picking the - * thread in which the tracepoint is to be created. - * However, current implementation ignore this - * parameter, tracepoint is created for all threads. - * Simply specify Qnil. - * @param[in] events Event(s) to listen to. - * @param[in] func A callback function. - * @param[in,out] data Void pointer that will be passed to the callback - * function. - * - * When the callback function is called, it will be passed 2 parameters: - * 1. `VALUE tpval` - the TracePoint object from which trace args can be - * extracted. - * 1. `void *data` - A void pointer which helps to share scope with the - * callback function. - * - * It is important to note that you cannot register callbacks for normal events - * and internal events simultaneously because they are different purpose. You - * can use any Ruby APIs (calling methods and so on) on normal event hooks. - * However, in internal events, you can not use any Ruby APIs (even object - * creations). This is why we can't specify internal events by TracePoint - * directly. Limitations are MRI version specific. - * - * Example: - * - * ```CXX - * rb_tracepoint_new( - * Qnil, - * RUBY_INTERNAL_EVENT_NEWOBJ | RUBY_INTERNAL_EVENT_FREEOBJ, - * obj_event_i, - * data); - * ``` - * - * In this example, a callback function `obj_event_i` will be registered for - * internal events #RUBY_INTERNAL_EVENT_NEWOBJ and - * #RUBY_INTERNAL_EVENT_FREEOBJ. - */ -VALUE rb_tracepoint_new(VALUE target_thread_not_supported_yet, rb_event_flag_t events, void (*func)(VALUE, void *), void *data); - -/** - * Starts (enables) trace(s) defined by the passed object. A TracePoint object - * does not immediately take effect on creation. You have to explicitly call - * this API. - * - * @param[in] tpval An instance of TracePoint. - * @exception rb_eArgError A trace is already running. - * @return Undefined value. Forget this. It should have returned `void`. - * @post Trace(s) defined by `tpval` start. - */ -VALUE rb_tracepoint_enable(VALUE tpval); - -/** - * Stops (disables) an already running instance of TracePoint. - * - * @param[in] tpval An instance of TracePoint. - * @return Undefined value. Forget this. It should have returned `void`. - * @post Trace(s) defined by `tpval` stop. - */ -VALUE rb_tracepoint_disable(VALUE tpval); - -/** - * Queries if the passed TracePoint is up and running. - * - * @param[in] tpval An instance of TracePoint. - * @retval RUBY_Qtrue It is. - * @retval RUBY_Qfalse It isn't. - */ -VALUE rb_tracepoint_enabled_p(VALUE tpval); - -/** - * Type that represents a specific trace event. Roughly resembles the - * tracepoint object that is passed to the block of `TracePoint.new`: - * - * ```ruby - * TracePoint.new(*events) do |obj| - * ... # ^^^^^ Resembles this object. - * end - * ``` - */ -typedef struct rb_trace_arg_struct rb_trace_arg_t; - -RBIMPL_ATTR_RETURNS_NONNULL() -/** - * Queries the current event of the passed tracepoint. - * - * @param[in] tpval An instance of TracePoint. - * @exception rb_eRuntimeError `tpval` is disabled. - * @return The current event. - * - * @internal - * - * `tpval` is a fake. There is only one instance of ::rb_trace_arg_t at one - * time. This function just returns that global variable. - */ -rb_trace_arg_t *rb_tracearg_from_tracepoint(VALUE tpval); - -RBIMPL_ATTR_NONNULL(()) -/** - * Queries the event of the passed trace. - * - * @param[in] trace_arg A trace instance. - * @return Its event. - */ -rb_event_flag_t rb_tracearg_event_flag(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_tracearg_event_flag(), except it returns the name of the - * event in Ruby's symbol. - * - * @param[in] trace_arg A trace instance. - * @return Its event, in Ruby level Symbol object. - */ -VALUE rb_tracearg_event(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Queries the line of the point where the trace is at. - * - * @param[in] trace_arg A trace instance. - * @retval 0 The trace is not at Ruby frame. - * @return otherwise Its line number. - */ -VALUE rb_tracearg_lineno(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Queries the file name of the point where the trace is at. - * - * @param[in] trace_arg A trace instance. - * @retval RUBY_Qnil The trace is not at Ruby frame. - * @retval otherwise Its path. - */ -VALUE rb_tracearg_path(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Queries the method name of the point where the trace is at. - * - * @param[in] trace_arg A trace instance. - * @retval RUBY_Qnil There is no method. - * @retval otherwise Its method name, in Ruby level Symbol. - */ -VALUE rb_tracearg_method_id(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_tracearg_method_id(), except it returns callee id like - * rb_frame_callee(). - * - * @param[in] trace_arg A trace instance. - * @retval RUBY_Qnil There is no method. - * @retval otherwise Its method name, in Ruby level Symbol. - */ -VALUE rb_tracearg_callee_id(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Queries the class that defines the method that the passed trace is at. This - * can be different from the class of rb_tracearg_self()'s return value because - * of inheritance(s). - * - * @param[in] trace_arg A trace instance. - * @retval RUBY_Qnil There is no method. - * @retval otherwise Its method's class. - */ -VALUE rb_tracearg_defined_class(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Creates a binding object of the point where the trace is at. - * - * @param[in] trace_arg A trace instance. - * @retval RUBY_Qnil The point has no binding. - * @retval otherwise Its binding. - * - * @internal - * - * @shyouhei has no idea on which situation shall this function return - * ::RUBY_Qnil. - */ -VALUE rb_tracearg_binding(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Queries the receiver of the point trace is at. - * - * @param[in] trace_arg A trace instance. - * @return Its receiver. - */ -VALUE rb_tracearg_self(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Queries the return value that the trace represents. - * - * @param[in] trace_arg A trace instance. - * @exception rb_eRuntimeError The tracing event is not return-related. - * @return The return value. - */ -VALUE rb_tracearg_return_value(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Queries the raised exception that the trace represents. - * - * @param[in] trace_arg A trace instance. - * @exception rb_eRuntimeError The tracing event is not exception-related. - * @return The raised exception. - */ -VALUE rb_tracearg_raised_exception(rb_trace_arg_t *trace_arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Queries the allocated/deallocated object that the trace represents. - * - * @param[in] trace_arg A trace instance. - * @exception rb_eRuntimeError The tracing event is not GC-related. - * @return The allocated/deallocated object. - */ -VALUE rb_tracearg_object(rb_trace_arg_t *trace_arg); - - -/** @} */ - -/** - * @name Postponed Job API - * - * @{ - */ - -/* - * Postponed Job API - * rb_postponed_job_register and rb_postponed_job_register_one are - * async-signal-safe and used via SIGPROF by the "stackprof" RubyGem - */ - -/** - * Type of postponed jobs. - * - * @param[in,out] arg What was passed to rb_postponed_job_register(). - */ -typedef void (*rb_postponed_job_func_t)(void *arg); - -/** - * Registers a postponed job. - * - * There are situations when running a ruby program is not possible. For - * instance when a program is in a signal handler; for another instance when - * the GC is busy. On such situations however, there might be needs to do - * something. We cannot but defer such operations until we are 100% sure it is - * safe to execute them. This mechanism is called postponed jobs. This - * function registers a new one. The registered job would eventually gets - * executed. - * - * @param[in] flags (Unused) reserved for future extensions. - * @param[in] func Job body. - * @param[in,out] data Passed as-is to `func`. - * @retval 0 Postponed job buffer is full. Failed. - * @retval otherwise Opaque return value. - * @post The passed job is postponed. - */ -int rb_postponed_job_register(unsigned int flags, rb_postponed_job_func_t func, void *data); - -/** - * Identical to rb_postponed_job_register_one(), except it additionally checks - * for duplicated registration. In case the passed job is already in the - * postponed job buffer this function does nothing. - * - * @param[in] flags (Unused) reserved for future extensions. - * @param[in] func Job body. - * @param[in,out] data Passed as-is to `func`. - * @retval 0 Postponed job buffer is full. Failed. - * @retval otherwise Opaque return value. - */ -int rb_postponed_job_register_one(unsigned int flags, rb_postponed_job_func_t func, void *data); - -/** @} */ - -/** - * @cond INTERNAL_MACRO - * - * Anything after this are intentionally left undocumented, to honour the - * comment below. - */ - -/* undocumented advanced tracing APIs */ - -typedef enum { - RUBY_EVENT_HOOK_FLAG_SAFE = 0x01, - RUBY_EVENT_HOOK_FLAG_DELETED = 0x02, - RUBY_EVENT_HOOK_FLAG_RAW_ARG = 0x04 -} rb_event_hook_flag_t; - -void rb_add_event_hook2(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag); -void rb_thread_add_event_hook2(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag); - -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_DEBUG_H */ diff --git a/libs/libruby/ruby/defines.h b/libs/libruby/ruby/defines.h deleted file mode 100644 index 84acc70..0000000 --- a/libs/libruby/ruby/defines.h +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef RUBY_DEFINES_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_DEFINES_H 1 -/** - * @file - * @author $Author$ - * @date Wed May 18 00:21:44 JST 1994 - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ - -#include "ruby/internal/config.h" - -/* AC_INCLUDES_DEFAULT */ -#include - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#ifdef HAVE_SYS_STAT_H -#include -#endif - -#ifdef STDC_HEADERS -#include -#include -#else -#ifdef HAVE_STDLIB_H -#include -#endif -#endif - -#ifdef HAVE_STRING_H -#if !defined STDC_HEADERS && defined HAVE_MEMORY_H -#include -#endif -#include -#endif - -#ifdef HAVE_STRINGS_H -#include -#endif - -#ifdef HAVE_INTTYPES_H -#include -#endif - -#ifdef HAVE_STDINT_H -#include -#endif - -#ifdef HAVE_STDALIGN_H -#include -#endif - -#ifdef HAVE_UNISTD_H -#include -#endif - -#ifdef HAVE_SYS_SELECT_H -#include -#endif - -#ifdef RUBY_USE_SETJMPEX -#include -#endif - -#include "ruby/backward/2/assume.h" -#include "ruby/backward/2/attributes.h" -#include "ruby/backward/2/bool.h" -#include "ruby/backward/2/long_long.h" -#include "ruby/backward/2/stdalign.h" -#include "ruby/backward/2/stdarg.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/dosish.h" -#include "ruby/internal/xmalloc.h" -#include "ruby/missing.h" - -/** - * Asserts that the compilation unit includes Ruby's CAPI. This has been here - * since the very beginning (at least since version 0.49). - */ -#define RUBY - -#ifdef __GNUC__ -#/** This is expanded to nothing for non-GCC compilers. */ -#define RB_GNUC_EXTENSION __extension__ -#/** This is expanded to the passed token for non-GCC compilers. */ -#define RB_GNUC_EXTENSION_BLOCK(x) __extension__({ x; }) -#else -#define RB_GNUC_EXTENSION -#define RB_GNUC_EXTENSION_BLOCK(x) (x) -#endif - -/** @cond INTERNAL_MACRO */ - -/* :FIXME: Can someone tell us why is this macro defined here? @shyouhei - * thinks this is a truly internal macro but cannot move around because he - * doesn't understand the reason of this arrangement. */ -#ifndef RUBY_MBCHAR_MAXSIZE -#define RUBY_MBCHAR_MAXSIZE INT_MAX -#/* MB_CUR_MAX will not work well in C locale */ -#endif - -#if defined(__sparc) -RBIMPL_SYMBOL_EXPORT_BEGIN() -void rb_sparc_flush_register_windows(void); -RBIMPL_SYMBOL_EXPORT_END() -#define FLUSH_REGISTER_WINDOWS rb_sparc_flush_register_windows() -#else -#define FLUSH_REGISTER_WINDOWS ((void)0) -#endif -/** @endcond */ -#endif /* RUBY_DEFINES_H */ diff --git a/libs/libruby/ruby/digest.h b/libs/libruby/ruby/digest.h deleted file mode 100644 index 8a4c5b7..0000000 --- a/libs/libruby/ruby/digest.h +++ /dev/null @@ -1,72 +0,0 @@ -/************************************************ - - digest.h - header file for ruby digest modules - - $Author$ - created at: Fri May 25 08:54:56 JST 2001 - - - Copyright (C) 2001-2006 Akinori MUSHA - - $RoughId: digest.h,v 1.3 2001/07/13 15:38:27 knu Exp $ - $Id$ - -************************************************/ - -#include "ruby.h" - -#define RUBY_DIGEST_API_VERSION 3 - -typedef int (*rb_digest_hash_init_func_t)(void *); -typedef void (*rb_digest_hash_update_func_t)(void *, unsigned char *, size_t); -typedef int (*rb_digest_hash_finish_func_t)(void *, unsigned char *); - -typedef struct { - int api_version; - size_t digest_len; - size_t block_len; - size_t ctx_size; - rb_digest_hash_init_func_t init_func; - rb_digest_hash_update_func_t update_func; - rb_digest_hash_finish_func_t finish_func; -} rb_digest_metadata_t; - -#define DEFINE_UPDATE_FUNC_FOR_UINT(name) \ -void \ -rb_digest_##name##_update(void *ctx, unsigned char *ptr, size_t size) \ -{ \ - const unsigned int stride = 16384; \ - \ - for (; size > stride; size -= stride, ptr += stride) { \ - name##_Update(ctx, ptr, stride); \ - } \ - if (size > 0) name##_Update(ctx, ptr, size); \ -} - -#define DEFINE_FINISH_FUNC_FROM_FINAL(name) \ -int \ -rb_digest_##name##_finish(void *ctx, unsigned char *ptr) \ -{ \ - return name##_Final(ptr, ctx); \ -} - -static inline VALUE -rb_digest_namespace(void) -{ - rb_require("digest"); - return rb_path2class("Digest"); -} - -static inline ID -rb_id_metadata(void) -{ - return rb_intern_const("metadata"); -} - -static inline VALUE -rb_digest_make_metadata(const rb_digest_metadata_t *meta) -{ -#undef RUBY_UNTYPED_DATA_WARNING -#define RUBY_UNTYPED_DATA_WARNING 0 - return rb_obj_freeze(Data_Wrap_Struct(0, 0, 0, (void *)meta)); -} diff --git a/libs/libruby/ruby/encoding.h b/libs/libruby/ruby/encoding.h deleted file mode 100644 index 1256393..0000000 --- a/libs/libruby/ruby/encoding.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef RUBY_ENCODING_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_ENCODING_H 1 -/** - * @file - * @author $Author: matz $ - * @date Thu May 24 11:49:41 JST 2007 - * @copyright Copyright (C) 2007 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @brief Encoding relates APIs. - * - * These APIs are mainly for implementing encodings themselves. Encodings are - * built on top of Ruby's core CAPIs. Though not prohibited, there can be - * relatively less rooms for things in this header file be useful when writing - * an extension library. - */ -#include "ruby/ruby.h" - -#include "ruby/internal/encoding/coderange.h" -#include "ruby/internal/encoding/ctype.h" -#include "ruby/internal/encoding/encoding.h" -#include "ruby/internal/encoding/pathname.h" -#include "ruby/internal/encoding/re.h" -#include "ruby/internal/encoding/sprintf.h" -#include "ruby/internal/encoding/string.h" -#include "ruby/internal/encoding/symbol.h" -#include "ruby/internal/encoding/transcode.h" - -#endif /* RUBY_ENCODING_H */ diff --git a/libs/libruby/ruby/fiber/scheduler.h b/libs/libruby/ruby/fiber/scheduler.h deleted file mode 100644 index 250b39b..0000000 --- a/libs/libruby/ruby/fiber/scheduler.h +++ /dev/null @@ -1,374 +0,0 @@ -#ifndef RUBY_FIBER_SCHEDULER_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_FIBER_SCHEDULER_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @brief Scheduler APIs. - */ -#include "ruby/internal/config.h" - -#include - -#ifdef STDC_HEADERS -#include /* size_t */ -#endif - -#include "ruby/ruby.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/arithmetic.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -#define RUBY_FIBER_SCHEDULER_VERSION 2 - -struct timeval; - -/** - * Wrap a `ssize_t` and `int errno` into a single `VALUE`. This interface should - * be used to safely capture results from system calls like `read` and `write`. - * - * You should use `rb_fiber_scheduler_io_result_apply` to unpack the result of - * this value and update `int errno`. - * - * You should not directly try to interpret the result value as it is considered - * an opaque representation. However, the general representation is an integer - * in the range of `[-int errno, size_t size]`. Linux generally restricts the - * result of system calls like `read` and `write` to `<= 2^31` which means this - * will typically fit within a single FIXNUM. - * - * @param[in] result The result of the system call. - * @param[in] error The value of `errno`. - * @return A `VALUE` which contains the result and/or errno. - */ -static inline VALUE -rb_fiber_scheduler_io_result(ssize_t result, int error) -{ - if (result == -1) { - return RB_INT2NUM(-error); - } - else { - return RB_SIZE2NUM(result); - } -} - -/** - * Apply an io result to the local thread, returning the value of the original - * system call that created it and updating `int errno`. - * - * You should not directly try to interpret the result value as it is considered - * an opaque representation. - * - * @param[in] result The `VALUE` which contains an errno and/or result size. - * @post Updates `int errno` with the value if negative. - * @return The original result of the system call. - */ -static inline ssize_t -rb_fiber_scheduler_io_result_apply(VALUE result) -{ - if (RB_FIXNUM_P(result) && RB_NUM2INT(result) < 0) { - errno = -RB_NUM2INT(result); - return -1; - } - else { - return RB_NUM2SIZE(result); - } -} - -/** - * Queries the current scheduler of the current thread that is calling this - * function. - * - * @retval RUBY_Qnil No scheduler has been set so far to this thread (which - * is the default). - * @retval otherwise The scheduler that was last set for the current thread - * with rb_fiber_scheduler_set(). - */ -VALUE rb_fiber_scheduler_get(void); - -/** - * Destructively assigns the passed scheduler to that of the current thread - * that is calling this function. If the scheduler is set, non-blocking fibers - * (created by `Fiber.new` with `blocking: false`, or by `Fiber.schedule`) call - * that scheduler's hook methods on potentially blocking operations, and the - * current thread will call scheduler's `#close` method on finalisation - * (allowing the scheduler to properly manage all non-finished fibers). - * `scheduler` can be an object of any class corresponding to - * `Fiber::SchedulerInterface`. Its implementation is up to the user. - * - * @param[in] scheduler The scheduler to set. - * @exception rb_eArgError `scheduler` does not conform the interface. - * @post Current thread's scheduler is `scheduler`. - */ -VALUE rb_fiber_scheduler_set(VALUE scheduler); - -/** - * Identical to rb_fiber_scheduler_get(), except it also returns ::RUBY_Qnil in - * case of a blocking fiber. As blocking fibers do not participate schedulers' - * scheduling this function can be handy. - * - * @retval RUBY_Qnil No scheduler is in effect. - * @retval otherwise The scheduler that is in effect, if any. - */ -VALUE rb_fiber_scheduler_current(void); - -/** - * Identical to rb_fiber_scheduler_current(), except it queries for that of the - * passed thread instead of the implicit current one. - * - * @param[in] thread Target thread. - * @exception rb_eTypeError `thread` is not a thread. - * @retval RUBY_Qnil No scheduler is in effect in `thread`. - * @retval otherwise The scheduler that is in effect in `thread`. - */ -VALUE rb_fiber_scheduler_current_for_thread(VALUE thread); - -/** - * Converts the passed timeout to an expression that rb_fiber_scheduler_block() - * etc. expects. - * - * @param[in] timeout A duration (can be `NULL`). - * @retval RUBY_Qnil No timeout (blocks indefinitely). - * @retval otherwise A timeout object. - */ -VALUE rb_fiber_scheduler_make_timeout(struct timeval *timeout); - -/** - * Closes the passed scheduler object. This expects the scheduler to wait for - * all fibers. Thus the scheduler's main loop tends to start here. - * - * @param[in] scheduler Target scheduler. - * @return What `scheduler.close` returns. - */ -VALUE rb_fiber_scheduler_close(VALUE scheduler); - -/** - * Non-blocking `sleep`. Depending on scheduler implementation, this for - * instance switches to another fiber etc. - * - * @param[in] scheduler Target scheduler. - * @param[in] duration Passed as-is to `scheduler.kernel_sleep`. - * @return What `scheduler.kernel_sleep` returns. - */ -VALUE rb_fiber_scheduler_kernel_sleep(VALUE scheduler, VALUE duration); - -/** - * Identical to rb_fiber_scheduler_kernel_sleep(), except it can pass multiple - * arguments. - * - * @param[in] scheduler Target scheduler. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Passed as-is to `scheduler.kernel_sleep` - * @return What `scheduler.kernel_sleep` returns. - */ -VALUE rb_fiber_scheduler_kernel_sleepv(VALUE scheduler, int argc, VALUE * argv); - -/* Description TBW */ -#if 0 -VALUE rb_fiber_scheduler_timeout_after(VALUE scheduler, VALUE timeout, VALUE exception, VALUE message); -VALUE rb_fiber_scheduler_timeout_afterv(VALUE scheduler, int argc, VALUE * argv); -int rb_fiber_scheduler_supports_process_wait(VALUE scheduler); -#endif - -/** - * Non-blocking `waitpid`. Depending on scheduler implementation, this for - * instance switches to another fiber etc. - * - * @param[in] scheduler Target scheduler. - * @param[in] pid Process ID to wait. - * @param[in] flags Wait flags, e.g. `WUNTRACED`. - * @return What `scheduler.process_wait` returns. - */ -VALUE rb_fiber_scheduler_process_wait(VALUE scheduler, rb_pid_t pid, int flags); - -/** - * Non-blocking wait for the passed "blocker", which is for instance - * `Thread.join` or `Mutex.lock`. Depending on scheduler implementation, this - * for instance switches to another fiber etc. - * - * @param[in] scheduler Target scheduler. - * @param[in] blocker What blocks the current fiber. - * @param[in] timeout Numeric timeout. - * @return What `scheduler.block` returns. - */ -VALUE rb_fiber_scheduler_block(VALUE scheduler, VALUE blocker, VALUE timeout); - -/** - * Wakes up a fiber previously blocked using rb_fiber_scheduler_block(). - * - * @param[in] scheduler Target scheduler. - * @param[in] blocker What was awaited for. - * @param[in] fiber What to unblock. - * @return What `scheduler.unblock` returns. - */ -VALUE rb_fiber_scheduler_unblock(VALUE scheduler, VALUE blocker, VALUE fiber); - -/** - * Non-blocking version of rb_io_wait(). Depending on scheduler - * implementation, this for instance switches to another fiber etc. - * - * The "events" here is a Ruby level integer, which is an OR-ed value of - * `IO::READABLE`, `IO::WRITABLE`, and `IO::PRIORITY`. - * - * @param[in] scheduler Target scheduler. - * @param[in] io An io object to wait. - * @param[in] events An integer set of interests. - * @param[in] timeout Numeric timeout. - * @return What `scheduler.io_wait` returns. - */ -VALUE rb_fiber_scheduler_io_wait(VALUE scheduler, VALUE io, VALUE events, VALUE timeout); - -/** - * Non-blocking wait until the passed IO is ready for reading. This is a - * special case of rb_fiber_scheduler_io_wait(), where the interest is - * `IO::READABLE` and timeout is never. - * - * @param[in] scheduler Target scheduler. - * @param[in] io An io object to wait. - * @return What `scheduler.io_wait` returns. - */ -VALUE rb_fiber_scheduler_io_wait_readable(VALUE scheduler, VALUE io); - -/** - * Non-blocking wait until the passed IO is ready for writing. This is a - * special case of rb_fiber_scheduler_io_wait(), where the interest is - * `IO::WRITABLE` and timeout is never. - * - * @param[in] scheduler Target scheduler. - * @param[in] io An io object to wait. - * @return What `scheduler.io_wait` returns. - */ -VALUE rb_fiber_scheduler_io_wait_writable(VALUE scheduler, VALUE io); - -/** - * Non-blocking version of `IO.select`. - * - * It's possible that this will be emulated using a thread, so you should not - * rely on it for high performance. - * - * @param[in] scheduler Target scheduler. - * @param[in] readables An array of readable objects. - * @param[in] writables An array of writable objects. - * @param[in] exceptables An array of objects that might encounter exceptional conditions. - * @param[in] timeout Numeric timeout or nil. - * @return What `scheduler.io_select` returns, normally a 3-tuple of arrays of ready objects. - */ -VALUE rb_fiber_scheduler_io_select(VALUE scheduler, VALUE readables, VALUE writables, VALUE exceptables, VALUE timeout); - -/** - * Non-blocking version of `IO.select`, `argv` variant. - */ -VALUE rb_fiber_scheduler_io_selectv(VALUE scheduler, int argc, VALUE *argv); - -/** - * Non-blocking read from the passed IO. - * - * @param[in] scheduler Target scheduler. - * @param[out] io An io object to read from. - * @param[out] buffer Return buffer. - * @param[in] length Requested number of bytes to read. - * @param[in] offset The offset in the buffer to read to. - * @retval RUBY_Qundef `scheduler` doesn't have `#io_read`. - * @return otherwise What `scheduler.io_read` returns `[-errno, size]`. - */ -VALUE rb_fiber_scheduler_io_read(VALUE scheduler, VALUE io, VALUE buffer, size_t length, size_t offset); - -/** - * Non-blocking write to the passed IO. - * - * @param[in] scheduler Target scheduler. - * @param[out] io An io object to write to. - * @param[in] buffer What to write. - * @param[in] length Number of bytes to write. - * @param[in] offset The offset in the buffer to write from. - * @retval RUBY_Qundef `scheduler` doesn't have `#io_write`. - * @return otherwise What `scheduler.io_write` returns `[-errno, size]`. - */ -VALUE rb_fiber_scheduler_io_write(VALUE scheduler, VALUE io, VALUE buffer, size_t length, size_t offset); - -/** - * Non-blocking read from the passed IO at the specified offset. - * - * @param[in] scheduler Target scheduler. - * @param[out] io An io object to read from. - * @param[in] from The offset in the given IO to read the data from. - * @param[out] buffer The buffer to read the data to. - * @param[in] length Requested number of bytes to read. - * @param[in] offset The offset in the buffer to read to. - * @retval RUBY_Qundef `scheduler` doesn't have `#io_read`. - * @return otherwise What `scheduler.io_read` returns. - */ -VALUE rb_fiber_scheduler_io_pread(VALUE scheduler, VALUE io, rb_off_t from, VALUE buffer, size_t length, size_t offset); - -/** - * Non-blocking write to the passed IO at the specified offset. - * - * @param[in] scheduler Target scheduler. - * @param[out] io An io object to write to. - * @param[in] from The offset in the given IO to write the data to. - * @param[in] buffer The buffer to write the data from. - * @param[in] length Number of bytes to write. - * @param[in] offset The offset in the buffer to write from. - * @retval RUBY_Qundef `scheduler` doesn't have `#io_write`. - * @return otherwise What `scheduler.io_write` returns. - */ -VALUE rb_fiber_scheduler_io_pwrite(VALUE scheduler, VALUE io, rb_off_t from, VALUE buffer, size_t length, size_t offset); - -/** - * Non-blocking read from the passed IO using a native buffer. - * - * @param[in] scheduler Target scheduler. - * @param[out] io An io object to read from. - * @param[out] buffer Return buffer. - * @param[in] size Size of the return buffer. - * @param[in] length Requested number of bytes to read. - * @retval RUBY_Qundef `scheduler` doesn't have `#io_read`. - * @return otherwise What `scheduler.io_read` returns. - */ -VALUE rb_fiber_scheduler_io_read_memory(VALUE scheduler, VALUE io, void *buffer, size_t size, size_t length); - -/** - * Non-blocking write to the passed IO using a native buffer. - * - * @param[in] scheduler Target scheduler. - * @param[out] io An io object to write to. - * @param[in] buffer What to write. - * @param[in] size Size of the buffer. - * @param[in] length Number of bytes to write. - * @retval RUBY_Qundef `scheduler` doesn't have `#io_write`. - * @return otherwise What `scheduler.io_write` returns. - */ -VALUE rb_fiber_scheduler_io_write_memory(VALUE scheduler, VALUE io, const void *buffer, size_t size, size_t length); - -/** - * Non-blocking close the given IO. - * - * @param[in] scheduler Target scheduler. - * @param[in] io An io object to close. - * @retval RUBY_Qundef `scheduler` doesn't have `#io_close`. - * @return otherwise What `scheduler.io_close` returns. - */ -VALUE rb_fiber_scheduler_io_close(VALUE scheduler, VALUE io); - -/** - * Non-blocking DNS lookup. - * - * @param[in] scheduler Target scheduler. - * @param[in] hostname A host name to query. - * @retval RUBY_Qundef `scheduler` doesn't have `#address_resolve`. - * @return otherwise What `scheduler.address_resolve` returns. - */ -VALUE rb_fiber_scheduler_address_resolve(VALUE scheduler, VALUE hostname); - -/** - * Create and schedule a non-blocking fiber. - * - */ -VALUE rb_fiber_scheduler_fiber(VALUE scheduler, int argc, VALUE *argv, int kw_splat); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_FIBER_SCHEDULER_H */ diff --git a/libs/libruby/ruby/intern.h b/libs/libruby/ruby/intern.h deleted file mode 100644 index 2480e2e..0000000 --- a/libs/libruby/ruby/intern.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef RUBY_INTERN_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_INTERN_H 1 -/** - * @file - * @author $Author$ - * @date Thu Jun 10 14:22:17 JST 1993 - * @copyright Copyright (C) 1993-2007 Yukihiro Matsumoto - * @copyright Copyright (C) 2000 Network Applied Communication Laboratory, Inc. - * @copyright Copyright (C) 2000 Information-technology Promotion Agency, Japan - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ -#include "ruby/internal/config.h" -#include "ruby/defines.h" - -#include - -#include "ruby/st.h" - -/* - * Functions and variables that are used by more than one source file of - * the kernel. - */ - -#include "ruby/internal/intern/array.h" -#include "ruby/internal/intern/bignum.h" -#include "ruby/internal/intern/class.h" -#include "ruby/internal/intern/compar.h" -#include "ruby/internal/intern/complex.h" -#include "ruby/internal/intern/cont.h" -#include "ruby/internal/intern/dir.h" -#include "ruby/internal/intern/enum.h" -#include "ruby/internal/intern/enumerator.h" -#include "ruby/internal/intern/error.h" -#include "ruby/internal/intern/eval.h" -#include "ruby/internal/intern/file.h" -#include "ruby/internal/intern/gc.h" -#include "ruby/internal/intern/hash.h" -#include "ruby/internal/intern/io.h" -#include "ruby/internal/intern/load.h" -#include "ruby/internal/intern/marshal.h" -#include "ruby/internal/intern/numeric.h" -#include "ruby/internal/intern/object.h" -#include "ruby/internal/intern/parse.h" -#include "ruby/internal/intern/proc.h" -#include "ruby/internal/intern/process.h" -#include "ruby/internal/intern/random.h" -#include "ruby/internal/intern/range.h" -#include "ruby/internal/intern/rational.h" -#include "ruby/internal/intern/re.h" -#include "ruby/internal/intern/ruby.h" -#include "ruby/internal/intern/select.h" -#include "ruby/internal/intern/signal.h" -#include "ruby/internal/intern/sprintf.h" -#include "ruby/internal/intern/string.h" -#include "ruby/internal/intern/struct.h" -#include "ruby/internal/intern/thread.h" -#include "ruby/internal/intern/time.h" -#include "ruby/internal/intern/variable.h" -#include "ruby/internal/intern/vm.h" - -#endif /* RUBY_INTERN_H */ diff --git a/libs/libruby/ruby/internal/abi.h b/libs/libruby/ruby/internal/abi.h deleted file mode 100644 index 44111a0..0000000 --- a/libs/libruby/ruby/internal/abi.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef RUBY_ABI_H -#define RUBY_ABI_H - -#ifdef RUBY_ABI_VERSION /* should match the definition in config.h */ - -/* This number represents Ruby's ABI version. - * - * In development Ruby, it should be bumped every time an ABI incompatible - * change is introduced. This will force other developers to rebuild extension - * gems. - * - * The following cases are considered as ABI incompatible changes: - * - Changing any data structures. - * - Changing macros or inline functions causing a change in behavior. - * - Deprecating or removing function declarations. - * - * The following cases are NOT considered as ABI incompatible changes: - * - Any changes that does not involve the header files in the `include` - * directory. - * - Adding macros, inline functions, or function declarations. - * - Backwards compatible refactors. - * - Editing comments. - * - * In released versions of Ruby, this number is not defined since teeny - * versions of Ruby should guarantee ABI compatibility. - */ -#define RUBY_ABI_VERSION 3 - -/* Windows does not support weak symbols so ruby_abi_version will not exist - * in the shared library. */ -#if defined(HAVE_FUNC_WEAK) && !defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) -# define RUBY_DLN_CHECK_ABI -#endif -#endif /* RUBY_ABI_VERSION */ - -#ifdef RUBY_DLN_CHECK_ABI - -# ifdef __cplusplus -extern "C" { -# endif - -RUBY_FUNC_EXPORTED unsigned long long __attribute__((weak)) -ruby_abi_version(void) -{ -# ifdef RUBY_ABI_VERSION - return RUBY_ABI_VERSION; -# else - return 0; -# endif -} - -# ifdef __cplusplus -} -# endif - -#endif - -#endif diff --git a/libs/libruby/ruby/internal/anyargs.h b/libs/libruby/ruby/internal/anyargs.h deleted file mode 100644 index e3e1b61..0000000 --- a/libs/libruby/ruby/internal/anyargs.h +++ /dev/null @@ -1,376 +0,0 @@ -#ifndef RBIMPL_ANYARGS_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ANYARGS_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Function overloads to issue warnings around #ANYARGS. - * - * For instance ::rb_define_method takes a pointer to #ANYARGS -ed functions, - * which in fact varies 18 different prototypes. We still need to preserve - * #ANYARGS for storages but why not check the consistencies if possible. With - * those complex macro overlays defined in this header file, use of a function - * pointer gets checked against the corresponding arity argument. - * - * ### Q&A ### - * - * - Q: Where did the magic number "18" came from in the description above? - * - * - A: Count the case branch of `vm_method.c:call_cfunc_invoker_func()`. Note - * also that the 18 branches has lasted for at least 25 years. See also - * commit 200e0ee2fd3c1c006c528874a88f684447215524. - * - * - Q: What is this `__weakref__` thing? - * - * - A: That is a kind of function overloading mechanism that GCC provides. In - * this case for instance `rb_define_method_00` is an alias of - * ::rb_define_method, with a strong type. - * - * - Q: What is this `__transparent_union__` thing? - * - * A: That is another kind of function overloading mechanism that GCC - * provides. In this case the attributed function pointer is either - * `VALUE(*)(int,VALUE*,VALUE)` or `VALUE(*)(int,const VALUE*,VALUE)`. - * - * This is better than `void*` or #ANYARGS because we can reject all other - * possibilities than the two. - * - * - Q: What does this #rb_define_method macro mean? - * - * - A: It selects appropriate alias of the ::rb_define_method function, - * depending on the last (arity) argument. - * - * - Q: Why the special case for ::rb_f_notimplement ? - * - * - A: Function pointer to ::rb_f_notimplement is special cased in - * `vm_method.c:rb_add_method_cfunc()`. That should be handled by the - * `__builtin_choose_expr` chain inside of #rb_define_method macro - * expansion. In order to do so, comparison like - * `(func == rb_f_notimplement)` is inappropriate for - * `__builtin_choose_expr`'s expression (which must be a compile-time - * integer constant but the address of ::rb_f_notimplement is not fixed - * until the linker). Instead we are using - * `__builtin_types_compatible_p`, and in doing so we need to distinguish - * ::rb_f_notimplement from others, by type. - */ -#include "ruby/internal/attr/maybe_unused.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/weakref.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/config.h" -#include "ruby/internal/has/attribute.h" -#include "ruby/internal/intern/class.h" -#include "ruby/internal/intern/vm.h" -#include "ruby/internal/method.h" -#include "ruby/internal/value.h" -#include "ruby/backward/2/stdarg.h" - -#if defined(__cplusplus) -# include "ruby/backward/cxxanyargs.hpp" - -#elif defined(_WIN32) || defined(__CYGWIN__) -# /* Skip due to [Bug #16134] */ - -#elif ! RBIMPL_HAS_ATTRIBUTE(transparent_union) -# /* :TODO: improve here, please find a way to support. */ - -#elif ! defined(HAVE_VA_ARGS_MACRO) -# /* :TODO: improve here, please find a way to support. */ - -#else -# /** @cond INTERNAL_MACRO */ -# if ! defined(HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P) -# define RBIMPL_CFUNC_IS_rb_f_notimplement(f) 0 -# else -# define RBIMPL_CFUNC_IS_rb_f_notimplement(f) \ - __builtin_types_compatible_p( \ - __typeof__(f), \ - __typeof__(rb_f_notimplement)) -# endif - -# if ! defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P) -# define RBIMPL_ANYARGS_DISPATCH(expr, truthy, falsy) (falsy) -# else -# define RBIMPL_ANYARGS_DISPATCH(expr, truthy, falsy) \ - __builtin_choose_expr( \ - __builtin_choose_expr( \ - __builtin_constant_p(expr), \ - (expr), 0), \ - (truthy), (falsy)) -# endif - -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_singleton_method_m2, rb_define_singleton_method_m3) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_singleton_method_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m2(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_singleton_method_00, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m1(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_singleton_method_01, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_00(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_singleton_method_02, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_01(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_singleton_method_03, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_02(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_singleton_method_04, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_03(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_singleton_method_05, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_04(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_singleton_method_06, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_05(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_singleton_method_07, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_06(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_singleton_method_08, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_07(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_singleton_method_09, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_08(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_singleton_method_10, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_09(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_singleton_method_11, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_10(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_singleton_method_12, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_11(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_singleton_method_13, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_12(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_singleton_method_14, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_13(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_singleton_method_15, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_14(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_protected_method_m2, rb_define_protected_method_m3) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_protected_method_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m2(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_protected_method_00, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m1(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_protected_method_01, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_00(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_protected_method_02, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_01(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_protected_method_03, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_02(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_protected_method_04, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_03(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_protected_method_05, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_04(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_protected_method_06, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_05(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_protected_method_07, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_06(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_protected_method_08, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_07(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_protected_method_09, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_08(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_protected_method_10, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_09(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_protected_method_11, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_10(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_protected_method_12, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_11(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_protected_method_13, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_12(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_protected_method_14, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_13(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_protected_method_15, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_14(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_private_method_m2, rb_define_private_method_m3) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_private_method_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m2(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_private_method_00, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m1(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_private_method_01, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_00(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_private_method_02, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_01(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_private_method_03, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_02(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_private_method_04, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_03(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_private_method_05, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_04(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_private_method_06, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_05(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_private_method_07, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_06(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_private_method_08, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_07(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_private_method_09, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_08(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_private_method_10, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_09(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_private_method_11, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_10(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_private_method_12, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_11(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_private_method_13, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_12(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_private_method_14, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_13(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_private_method_15, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_14(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_module_function_m2, rb_define_module_function_m3) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_module_function_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m2(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_module_function_00, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m1(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_module_function_01, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_00(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_module_function_02, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_01(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_module_function_03, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_02(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_module_function_04, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_03(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_module_function_05, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_04(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_module_function_06, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_05(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_module_function_07, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_06(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_module_function_08, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_07(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_module_function_09, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_08(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_module_function_10, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_09(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_module_function_11, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_10(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_module_function_12, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_11(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_module_function_13, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_12(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_module_function_14, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_13(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_module_function_15, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_14(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_global_function_m2, rb_define_global_function_m3) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_global_function_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m2(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_global_function_00, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m1(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_global_function_01, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_00(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_global_function_02, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_01(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_global_function_03, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_02(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_global_function_04, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_03(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_global_function_05, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_04(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_global_function_06, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_05(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_global_function_07, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_06(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_global_function_08, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_07(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_global_function_09, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_08(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_global_function_10, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_09(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_global_function_11, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_10(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_global_function_12, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_11(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_global_function_13, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_12(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_global_function_14, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_13(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_global_function_15, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_14(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_method_id_m2, rb_define_method_id_m3) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_method_id_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m2(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_method_id_00, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m1(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_method_id_01, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_00(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_method_id_02, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_01(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_method_id_03, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_02(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_method_id_04, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_03(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_method_id_05, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_04(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_method_id_06, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_05(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_method_id_07, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_06(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_method_id_08, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_07(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_method_id_09, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_08(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_method_id_10, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_09(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_method_id_11, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_10(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_method_id_12, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_11(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_method_id_13, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_12(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_method_id_14, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_13(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_method_id_15, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_14(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_method_m2, rb_define_method_m3) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_method_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_method_m2(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_00(n) RBIMPL_ANYARGS_DISPATCH((n) == 0, rb_define_method_00, RBIMPL_ANYARGS_DISPATCH_rb_define_method_m1(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_01(n) RBIMPL_ANYARGS_DISPATCH((n) == 1, rb_define_method_01, RBIMPL_ANYARGS_DISPATCH_rb_define_method_00(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_02(n) RBIMPL_ANYARGS_DISPATCH((n) == 2, rb_define_method_02, RBIMPL_ANYARGS_DISPATCH_rb_define_method_01(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_03(n) RBIMPL_ANYARGS_DISPATCH((n) == 3, rb_define_method_03, RBIMPL_ANYARGS_DISPATCH_rb_define_method_02(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_04(n) RBIMPL_ANYARGS_DISPATCH((n) == 4, rb_define_method_04, RBIMPL_ANYARGS_DISPATCH_rb_define_method_03(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_05(n) RBIMPL_ANYARGS_DISPATCH((n) == 5, rb_define_method_05, RBIMPL_ANYARGS_DISPATCH_rb_define_method_04(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_06(n) RBIMPL_ANYARGS_DISPATCH((n) == 6, rb_define_method_06, RBIMPL_ANYARGS_DISPATCH_rb_define_method_05(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_07(n) RBIMPL_ANYARGS_DISPATCH((n) == 7, rb_define_method_07, RBIMPL_ANYARGS_DISPATCH_rb_define_method_06(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_08(n) RBIMPL_ANYARGS_DISPATCH((n) == 8, rb_define_method_08, RBIMPL_ANYARGS_DISPATCH_rb_define_method_07(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_09(n) RBIMPL_ANYARGS_DISPATCH((n) == 9, rb_define_method_09, RBIMPL_ANYARGS_DISPATCH_rb_define_method_08(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_method_10, RBIMPL_ANYARGS_DISPATCH_rb_define_method_09(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_method_11, RBIMPL_ANYARGS_DISPATCH_rb_define_method_10(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_method_12, RBIMPL_ANYARGS_DISPATCH_rb_define_method_11(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_method_13, RBIMPL_ANYARGS_DISPATCH_rb_define_method_12(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_method_14, RBIMPL_ANYARGS_DISPATCH_rb_define_method_13(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_method_15, RBIMPL_ANYARGS_DISPATCH_rb_define_method_14(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method(n, f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_singleton_method_notimpl, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_15(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method(n, f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_protected_method_notimpl, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_15(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method(n, f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_private_method_notimpl, RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_15(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function(n, f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_module_function_notimpl, RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_15(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function(n, f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_global_function_notimpl, RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_15(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id(n, f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_method_id_notimpl, RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_15(n)) -# define RBIMPL_ANYARGS_DISPATCH_rb_define_method(n, f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_method_notimpl, RBIMPL_ANYARGS_DISPATCH_rb_define_method_15(n)) -# define RBIMPL_ANYARGS_ATTRSET(sym) RBIMPL_ATTR_MAYBE_UNUSED() RBIMPL_ATTR_NONNULL(()) RBIMPL_ATTR_WEAKREF(sym) -# define RBIMPL_ANYARGS_DECL(sym, ...) \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _notimpl(__VA_ARGS__, VALUE(*)(int, const VALUE *, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _m3(__VA_ARGS__, VALUE(*)(ANYARGS), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _m2(__VA_ARGS__, VALUE(*)(VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _m1(__VA_ARGS__, VALUE(*)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _00(__VA_ARGS__, VALUE(*)(VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _01(__VA_ARGS__, VALUE(*)(VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _02(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _03(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _04(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _05(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _06(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _07(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _08(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _09(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _10(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _11(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _12(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _13(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _14(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \ -RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _15(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); -RBIMPL_ANYARGS_DECL(rb_define_singleton_method, VALUE, const char *) -RBIMPL_ANYARGS_DECL(rb_define_protected_method, VALUE, const char *) -RBIMPL_ANYARGS_DECL(rb_define_private_method, VALUE, const char *) -RBIMPL_ANYARGS_DECL(rb_define_module_function, VALUE, const char *) -RBIMPL_ANYARGS_DECL(rb_define_global_function, const char *) -RBIMPL_ANYARGS_DECL(rb_define_method_id, VALUE, ID) -RBIMPL_ANYARGS_DECL(rb_define_method, VALUE, const char *) -/** @endcond */ - -/** - * @brief Defines klass\#mid. - * @see ::rb_define_method - * @param klass Where the method lives. - * @param mid Name of the defining method. - * @param func Implementation of klass\#mid. - * @param arity Arity of klass\#mid. - */ -#define rb_define_method(klass, mid, func, arity) RBIMPL_ANYARGS_DISPATCH_rb_define_method((arity), (func))((klass), (mid), (func), (arity)) - -/** - * @brief Defines klass\#mid. - * @see ::rb_define_method_id - * @param klass Where the method lives. - * @param mid Name of the defining method. - * @param func Implementation of klass\#mid. - * @param arity Arity of klass\#mid. - */ -#define rb_define_method_id(klass, mid, func, arity) RBIMPL_ANYARGS_DISPATCH_rb_define_method_id((arity), (func))((klass), (mid), (func), (arity)) - -/** - * @brief Defines obj.mid. - * @see ::rb_define_singleton_method - * @param obj Where the method lives. - * @param mid Name of the defining method. - * @param func Implementation of obj.mid. - * @param arity Arity of obj.mid. - */ -#define rb_define_singleton_method(obj, mid, func, arity) RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method((arity), (func))((obj), (mid), (func), (arity)) - -/** - * @brief Defines klass\#mid and make it protected. - * @see ::rb_define_protected_method - * @param klass Where the method lives. - * @param mid Name of the defining method. - * @param func Implementation of klass\#mid. - * @param arity Arity of klass\#mid. - */ -#define rb_define_protected_method(klass, mid, func, arity) RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method((arity), (func))((klass), (mid), (func), (arity)) - -/** - * @brief Defines klass\#mid and make it private. - * @see ::rb_define_private_method - * @param klass Where the method lives. - * @param mid Name of the defining method. - * @param func Implementation of klass\#mid. - * @param arity Arity of klass\#mid. - */ -#define rb_define_private_method(klass, mid, func, arity) RBIMPL_ANYARGS_DISPATCH_rb_define_private_method((arity), (func))((klass), (mid), (func), (arity)) - -/** - * @brief Defines mod\#mid and make it a module function. - * @see ::rb_define_module_function - * @param mod Where the method lives. - * @param mid Name of the defining method. - * @param func Implementation of mod\#mid. - * @param arity Arity of mod\#mid. - */ -#define rb_define_module_function(mod, mid, func, arity) RBIMPL_ANYARGS_DISPATCH_rb_define_module_function((arity), (func))((mod), (mid), (func), (arity)) - -/** - * @brief Defines ::rb_mKerbel \#mid. - * @see ::rb_define_global_function - * @param mid Name of the defining method. - * @param func Implementation of ::rb_mKernel \#mid. - * @param arity Arity of ::rb_mKernel \#mid. - */ -#define rb_define_global_function(mid, func, arity) RBIMPL_ANYARGS_DISPATCH_rb_define_global_function((arity), (func))((mid), (func), (arity)) - -#endif /* __cplusplus */ - -/** - * This macro is to properly cast a function parameter of *_define_method - * family. It has been around since 1.x era so you can maximise backwards - * compatibility by using it. - * - * ```CXX - * rb_define_method(klass, "method", RUBY_METHOD_FUNC(func), arity); - * ``` - * - * @param func A pointer to a function that implements a method. - */ -#if ! defined(RUBY_DEVEL) -# define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func)) - -#elif ! RUBY_DEVEL -# define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func)) - -#elif ! defined(rb_define_method) -# define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func)) - -#else -# define RUBY_METHOD_FUNC(func) (func) - -#endif - -#endif /* RBIMPL_ANYARGS_H */ diff --git a/libs/libruby/ruby/internal/arithmetic.h b/libs/libruby/ruby/internal/arithmetic.h deleted file mode 100644 index 7ebb4a8..0000000 --- a/libs/libruby/ruby/internal/arithmetic.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Conversion between C's arithmetic types and Ruby's numeric - * types. - */ -#include "ruby/internal/arithmetic/char.h" -#include "ruby/internal/arithmetic/double.h" -#include "ruby/internal/arithmetic/fixnum.h" -#include "ruby/internal/arithmetic/gid_t.h" -#include "ruby/internal/arithmetic/int.h" -#include "ruby/internal/arithmetic/intptr_t.h" -#include "ruby/internal/arithmetic/long.h" -#include "ruby/internal/arithmetic/long_long.h" -#include "ruby/internal/arithmetic/mode_t.h" -#include "ruby/internal/arithmetic/off_t.h" -#include "ruby/internal/arithmetic/pid_t.h" -#include "ruby/internal/arithmetic/short.h" -#include "ruby/internal/arithmetic/size_t.h" -#include "ruby/internal/arithmetic/st_data_t.h" -#include "ruby/internal/arithmetic/uid_t.h" -#endif /* RBIMPL_ARITHMETIC_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/char.h b/libs/libruby/ruby/internal/arithmetic/char.h deleted file mode 100644 index 920fdc0..0000000 --- a/libs/libruby/ruby/internal/arithmetic/char.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_CHAR_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_CHAR_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `char` and Ruby's. - */ -#include "ruby/internal/arithmetic/int.h" /* NUM2INT is here, but */ -#include "ruby/internal/arithmetic/long.h" /* INT2FIX is here.*/ -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/constexpr.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/core/rstring.h" -#include "ruby/internal/value_type.h" - -#define RB_NUM2CHR rb_num2char_inline /**< @alias{rb_num2char_inline} */ -#define NUM2CHR RB_NUM2CHR /**< @old{RB_NUM2CHR} */ -#define CHR2FIX RB_CHR2FIX /**< @old{RB_CHR2FIX} */ - -/** @cond INTERNAL_MACRO */ -#define RB_CHR2FIX RB_CHR2FIX -/** @endcond */ - -RBIMPL_ATTR_CONST_UNLESS_DEBUG() -RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Converts a C's `unsigned char` into an instance of ::rb_cInteger. - * - * @param[in] c Arbitrary `unsigned char` value. - * @return An instance of ::rb_cInteger. - * - * @internal - * - * Nobody explicitly states this but in Ruby, a char means an unsigned integer - * value of range 0..255. This is a general principle. AFAIK there is no - * single line of code where char is signed. - */ -static inline VALUE -RB_CHR2FIX(unsigned char c) -{ - return RB_INT2FIX(c); -} - -/** - * Converts an instance of ::rb_cNumeric into C's `char`. At the same time it - * accepts a String of more than one character, and returns its first byte. In - * the early days there was a Ruby level "character" literal `?c`, which - * roughly worked this way. - * - * @param[in] x Either a string or a numeric. - * @exception rb_eTypeError `x` is not a numeric. - * @exception rb_eRangeError `x` is out of range of `unsigned int`. - * @return The passed value converted into C's `char`. - */ -static inline char -rb_num2char_inline(VALUE x) -{ - if (RB_TYPE_P(x, RUBY_T_STRING) && (RSTRING_LEN(x)>=1)) - return RSTRING_PTR(x)[0]; - else - return RBIMPL_CAST((char)RB_NUM2INT(x)); -} - -#endif /* RBIMPL_ARITHMETIC_CHAR_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/double.h b/libs/libruby/ruby/internal/arithmetic/double.h deleted file mode 100644 index 229de47..0000000 --- a/libs/libruby/ruby/internal/arithmetic/double.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_DOUBLE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_DOUBLE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `double` and Ruby's. - */ -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -#define NUM2DBL rb_num2dbl /**< @old{rb_num2dbl} */ -#define RFLOAT_VALUE rb_float_value /**< @old{rb_float_value} */ -#define DBL2NUM rb_float_new /**< @old{rb_float_new} */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * Converts an instance of ::rb_cNumeric into C's `double`. - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @return The passed value converted into C's `double`. - */ -double rb_num2dbl(VALUE num); - -RBIMPL_ATTR_PURE() -/** - * Extracts its double value from an instance of ::rb_cFloat. - * - * @param[in] num An instance of ::rb_cFloat. - * @pre Must not pass anything other than a Fixnum. - * @return The passed value converted into C's `double`. - */ -double rb_float_value(VALUE num); - -/** - * Converts a C's `double` into an instance of ::rb_cFloat. - * - * @param[in] d Arbitrary `double` value. - * @return An instance of ::rb_cFloat. - */ -VALUE rb_float_new(double d); - -/** - * Identical to rb_float_new(), except it does not generate Flonums. - * - * @param[in] d Arbitrary `double` value. - * @return An instance of ::rb_cFloat. - * - * @internal - * - * @shyouhei has no idea why it is here. - */ -VALUE rb_float_new_in_heap(double d); -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_ARITHMETIC_DOUBLE_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/fixnum.h b/libs/libruby/ruby/internal/arithmetic/fixnum.h deleted file mode 100644 index c8927ac..0000000 --- a/libs/libruby/ruby/internal/arithmetic/fixnum.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_FIXNUM_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_FIXNUM_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Handling of integers formerly known as Fixnums. - */ -#include "ruby/backward/2/limits.h" - -#define FIXABLE RB_FIXABLE /**< @old{RB_FIXABLE} */ -#define FIXNUM_MAX RUBY_FIXNUM_MAX /**< @old{RUBY_FIXNUM_MAX} */ -#define FIXNUM_MIN RUBY_FIXNUM_MIN /**< @old{RUBY_FIXNUM_MIN} */ -#define NEGFIXABLE RB_NEGFIXABLE /**< @old{RB_NEGFIXABLE} */ -#define POSFIXABLE RB_POSFIXABLE /**< @old{RB_POSFIXABLE} */ - -/** - * Checks if the passed value is in range of fixnum, assuming it is a positive - * number. Can sometimes be useful for C's unsigned integer types. - * - * @internal - * - * FIXABLE can be applied to anything, from double to intmax_t. The problem is - * double. On a 64bit system RUBY_FIXNUM_MAX is 4,611,686,018,427,387,903, - * which is not representable by a double. The nearest value that a double can - * represent is 4,611,686,018,427,387,904, which is not fixable. The - * seemingly-strange "< FIXNUM_MAX + 1" expression below is due to this. - */ -#define RB_POSFIXABLE(_) ((_) < RUBY_FIXNUM_MAX + 1) - -/** - * Checks if the passed value is in range of fixnum, assuming it is a negative - * number. This is an implementation of #RB_FIXABLE. Rarely used stand alone. - */ -#define RB_NEGFIXABLE(_) ((_) >= RUBY_FIXNUM_MIN) - -/** Checks if the passed value is in range of fixnum */ -#define RB_FIXABLE(_) (RB_POSFIXABLE(_) && RB_NEGFIXABLE(_)) - -/** Maximum possible value that a fixnum can represent. */ -#define RUBY_FIXNUM_MAX (LONG_MAX / 2) - -/** Minimum possible value that a fixnum can represent. */ -#define RUBY_FIXNUM_MIN (LONG_MIN / 2) - -#endif /* RBIMPL_ARITHMETIC_FIXNUM_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/gid_t.h b/libs/libruby/ruby/internal/arithmetic/gid_t.h deleted file mode 100644 index 361220b..0000000 --- a/libs/libruby/ruby/internal/arithmetic/gid_t.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_GID_T_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_GID_T_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `gid_t` and Ruby's. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/arithmetic/long.h" - -/** Converts a C's `gid_t` into an instance of ::rb_cInteger. */ -#ifndef GIDT2NUM -# define GIDT2NUM RB_LONG2NUM -#endif - -/** Converts an instance of ::rb_cNumeric into C's `gid_t`. */ -#ifndef NUM2GIDT -# define NUM2GIDT RB_NUM2LONG -#endif - -/** A rb_sprintf() format prefix to be used for a `gid_t` parameter. */ -#ifndef PRI_GIDT_PREFIX -# define PRI_GIDT_PREFIX PRI_LONG_PREFIX -#endif - -#endif /* RBIMPL_ARITHMETIC_GID_T_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/int.h b/libs/libruby/ruby/internal/arithmetic/int.h deleted file mode 100644 index 6bd8ec2..0000000 --- a/libs/libruby/ruby/internal/arithmetic/int.h +++ /dev/null @@ -1,264 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_INT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_INT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `int` and Ruby's. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/arithmetic/fixnum.h" -#include "ruby/internal/arithmetic/intptr_t.h" -#include "ruby/internal/arithmetic/long.h" -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/constexpr.h" -#include "ruby/internal/compiler_is.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/special_consts.h" -#include "ruby/internal/value.h" -#include "ruby/internal/warning_push.h" -#include "ruby/assert.h" - -#define RB_INT2NUM rb_int2num_inline /**< @alias{rb_int2num_inline} */ -#define RB_NUM2INT rb_num2int_inline /**< @alias{rb_num2int_inline} */ -#define RB_UINT2NUM rb_uint2num_inline /**< @alias{rb_uint2num_inline} */ - -#define FIX2INT RB_FIX2INT /**< @old{RB_FIX2INT} */ -#define FIX2UINT RB_FIX2UINT /**< @old{RB_FIX2UINT} */ -#define INT2NUM RB_INT2NUM /**< @old{RB_INT2NUM} */ -#define NUM2INT RB_NUM2INT /**< @old{RB_NUM2INT} */ -#define NUM2UINT RB_NUM2UINT /**< @old{RB_NUM2UINT} */ -#define UINT2NUM RB_UINT2NUM /**< @old{RB_UINT2NUM} */ - -/** @cond INTERNAL_MACRO */ -#define RB_FIX2INT RB_FIX2INT -#define RB_NUM2UINT RB_NUM2UINT -#define RB_FIX2UINT RB_FIX2UINT -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Converts an instance of ::rb_cNumeric into C's `long`. - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `int`. - * @return The passed value converted into C's `long`. - * - * @internal - * - * Yes, the API is really strange. It returns `long`, but raises when the - * value is out of `int`. This seems to be due to the fact that Matz favoured - * K&R before, and his machine at that moment was an ILP32 architecture. - */ -long rb_num2int(VALUE num); - -/** - * Identical to rb_num2int(). - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `int`. - * @return The passed value converted into C's `long`. - * - * @internal - * - * This function seems to be a complete waste of disk space. @shyouhei has no - * idea why this is a different thing from rb_num2short(). - */ -long rb_fix2int(VALUE num); - -/** - * Converts an instance of ::rb_cNumeric into C's `unsigned long`. - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `unsigned int`. - * @return The passed value converted into C's `unsigned long`. - * - * @internal - * - * Yes, the API is really strange. It returns `unsigned long`, but raises when - * the value is out of `unsigned int`. This seems to be due to the fact that - * Matz favoured K&R before, and his machine at that moment was an ILP32 - * architecture. - */ -unsigned long rb_num2uint(VALUE num); - -/** - * Identical to rb_num2uint(). - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `unsigned int`. - * @return The passed value converted into C's `unsigned long`. - * - * @internal - * - * This function seems to be a complete waste of disk space. @shyouhei has no - * idea why this is a different thing from rb_num2short(). - */ -unsigned long rb_fix2uint(VALUE num); -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_ARTIFICIAL() -/** - * Converts a Fixnum into C's `int`. - * - * @param[in] x Some Fixnum. - * @pre Must not pass anything other than a Fixnum. - * @return The passed value converted into C's `int`. - */ -static inline int -RB_FIX2INT(VALUE x) -{ - /* "FIX2INT raises a TypeError if passed nil", says rubyspec. Not sure if - * that is a desired behaviour but just preserve backwards compatilibily. - */ -#if 0 - RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x)); -#endif - long ret; - - if /* constexpr */ (sizeof(int) < sizeof(long)) { - ret = rb_fix2int(x); - } - else { - ret = RB_FIX2LONG(x); - } - - return RBIMPL_CAST((int)ret); -} - -/** - * Converts an instance of ::rb_cNumeric into C's `int`. - * - * @param[in] x Something numeric. - * @exception rb_eTypeError `x` is not a numeric. - * @exception rb_eRangeError `x` is out of range of `int`. - * @return The passed value converted into C's `int`. - */ -static inline int -rb_num2int_inline(VALUE x) -{ - long ret; - - if /* constexpr */ (sizeof(int) == sizeof(long)) { - ret = RB_NUM2LONG(x); - } - else if (RB_FIXNUM_P(x)) { - ret = rb_fix2int(x); - } - else { - ret = rb_num2int(x); - } - - return RBIMPL_CAST((int)ret); -} - -/** - * Converts an instance of ::rb_cNumeric into C's `unsigned int`. - * - * @param[in] x Something numeric. - * @exception rb_eTypeError `x` is not a numeric. - * @exception rb_eRangeError `x` is out of range of `unsigned int`. - * @return The passed value converted into C's `unsigned int`. - */ -RBIMPL_ATTR_ARTIFICIAL() -static inline unsigned int -RB_NUM2UINT(VALUE x) -{ - unsigned long ret; - - if /* constexpr */ (sizeof(int) < sizeof(long)) { - ret = rb_num2uint(x); - } - else { - ret = RB_NUM2ULONG(x); - } - - return RBIMPL_CAST((unsigned int)ret); -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * Converts a Fixnum into C's `int`. - * - * @param[in] x Some Fixnum. - * @pre Must not pass anything other than a Fixnum. - * @return The passed value converted into C's `int`. - */ -static inline unsigned int -RB_FIX2UINT(VALUE x) -{ -#if 0 /* Ditto for RB_FIX2INT. */ - RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x)); -#endif - unsigned long ret; - - if /* constexpr */ (sizeof(int) < sizeof(long)) { - ret = rb_fix2uint(x); - } - else { - ret = RB_FIX2ULONG(x); - } - - return RBIMPL_CAST((unsigned int)ret); -} - -RBIMPL_WARNING_PUSH() -#if RBIMPL_COMPILER_IS(GCC) -RBIMPL_WARNING_IGNORED(-Wtype-limits) /* We can ignore them here. */ -#elif RBIMPL_HAS_WARNING("-Wtautological-constant-out-of-range-compare") -RBIMPL_WARNING_IGNORED(-Wtautological-constant-out-of-range-compare) -#endif - -/** - * Converts a C's `int` into an instance of ::rb_cInteger. - * - * @param[in] v Arbitrary `int` value. - * @return An instance of ::rb_cInteger. - */ -static inline VALUE -rb_int2num_inline(int v) -{ - if (RB_FIXABLE(v)) - return RB_INT2FIX(v); - else - return rb_int2big(v); -} - -/** - * Converts a C's `unsigned int` into an instance of ::rb_cInteger. - * - * @param[in] v Arbitrary `unsigned int` value. - * @return An instance of ::rb_cInteger. - */ -static inline VALUE -rb_uint2num_inline(unsigned int v) -{ - if (RB_POSFIXABLE(v)) - return RB_LONG2FIX(v); - else - return rb_uint2big(v); -} - -RBIMPL_WARNING_POP() - -#endif /* RBIMPL_ARITHMETIC_INT_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/intptr_t.h b/libs/libruby/ruby/internal/arithmetic/intptr_t.h deleted file mode 100644 index a354f44..0000000 --- a/libs/libruby/ruby/internal/arithmetic/intptr_t.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_INTPTR_T_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_INTPTR_T_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `intptr_t` and Ruby's. - */ -#include "ruby/internal/config.h" - -#ifdef HAVE_STDINT_H -# include -#endif - -#include "ruby/internal/value.h" -#include "ruby/internal/dllexport.h" - -#define rb_int_new rb_int2inum /**< @alias{rb_int2inum} */ -#define rb_uint_new rb_uint2inum /**< @alias{rb_uint2inum} */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Converts a C's `intptr_t` into an instance of ::rb_cInteger. - * - * @param[in] i Arbitrary `intptr_t` value. - * @return An instance of ::rb_cInteger. - * @note This function always allocates Bignums, even if the given number - * is small enough to fit into a Fixnum. - */ -VALUE rb_int2big(intptr_t i); - -/** - * Converts a C's `intptr_t` into an instance of ::rb_cInteger. - * - * @param[in] i Arbitrary `intptr_t` value. - * @return An instance of ::rb_cInteger. - */ -VALUE rb_int2inum(intptr_t i); - -/** - * Converts a C's `intptr_t` into an instance of ::rb_cInteger. - * - * @param[in] i Arbitrary `intptr_t` value. - * @return An instance of ::rb_cInteger. - * @note This function always allocates Bignums, even if the given number - * is small enough to fit into a Fixnum. - */ -VALUE rb_uint2big(uintptr_t i); - -/** - * Converts a C's `uintptr_t` into an instance of ::rb_cInteger. - * - * @param[in] i Arbitrary `uintptr_t` value. - * @return An instance of ::rb_cInteger. - */ -VALUE rb_uint2inum(uintptr_t i); -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_ARITHMETIC_INTPTR_T_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/long.h b/libs/libruby/ruby/internal/arithmetic/long.h deleted file mode 100644 index 6b8fd8f..0000000 --- a/libs/libruby/ruby/internal/arithmetic/long.h +++ /dev/null @@ -1,356 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_LONG_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_LONG_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `long` and Ruby's. - * - * ### Q&A ### - * - * - Q: Why are INT2FIX etc. here, not in `int.h`? - * - * - A: Because they are in fact handling `long`. It seems someone did not - * understand the difference of `int` and `long` when they designed those - * macros. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/arithmetic/fixnum.h" /* FIXABLE */ -#include "ruby/internal/arithmetic/intptr_t.h" /* rb_int2big etc.*/ -#include "ruby/internal/assume.h" -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/cold.h" -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/constexpr.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/special_consts.h" /* FIXNUM_FLAG */ -#include "ruby/internal/value.h" -#include "ruby/assert.h" - -#define FIX2LONG RB_FIX2LONG /**< @old{RB_FIX2LONG} */ -#define FIX2ULONG RB_FIX2ULONG /**< @old{RB_FIX2ULONG} */ -#define INT2FIX RB_INT2FIX /**< @old{RB_INT2FIX} */ -#define LONG2FIX RB_INT2FIX /**< @old{RB_INT2FIX} */ -#define LONG2NUM RB_LONG2NUM /**< @old{RB_LONG2NUM} */ -#define NUM2LONG RB_NUM2LONG /**< @old{RB_NUM2LONG} */ -#define NUM2ULONG RB_NUM2ULONG /**< @old{RB_NUM2ULONG} */ -#define RB_FIX2LONG rb_fix2long /**< @alias{rb_fix2long} */ -#define RB_FIX2ULONG rb_fix2ulong /**< @alias{rb_fix2ulong} */ -#define RB_LONG2FIX RB_INT2FIX /**< @alias{RB_INT2FIX} */ -#define RB_LONG2NUM rb_long2num_inline /**< @alias{rb_long2num_inline} */ -#define RB_NUM2LONG rb_num2long_inline /**< @alias{rb_num2long_inline} */ -#define RB_NUM2ULONG rb_num2ulong_inline /**< @alias{rb_num2ulong_inline} */ -#define RB_ULONG2NUM rb_ulong2num_inline /**< @alias{rb_ulong2num_inline} */ -#define ULONG2NUM RB_ULONG2NUM /**< @old{RB_ULONG2NUM} */ -#define rb_fix_new RB_INT2FIX /**< @alias{RB_INT2FIX} */ -#define rb_long2int rb_long2int_inline /**< @alias{rb_long2int_inline} */ - -/** @cond INTERNAL_MACRO */ -#define RB_INT2FIX RB_INT2FIX -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_COLD() -/** - * This is an utility function to raise an ::rb_eRangeError. - * - * @param[in] num A signed value about to overflow. - * @exception rb_eRangeError `num` is out of range of `int`. - */ -void rb_out_of_int(SIGNED_VALUE num); - -/** - * Converts an instance of ::rb_cNumeric into C's `long`. - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `long`. - * @return The passed value converted into C's `long`. - */ -long rb_num2long(VALUE num); - -/** - * Converts an instance of ::rb_cNumeric into C's `unsigned long`. - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `unsigned long`. - * @return The passed value converted into C's `unsigned long`. - */ -unsigned long rb_num2ulong(VALUE num); -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_CONST_UNLESS_DEBUG() -RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Converts a C's `long` into an instance of ::rb_cInteger. - * - * @param[in] i Arbitrary `long` value. - * @return An instance of ::rb_cInteger. - */ -static inline VALUE -RB_INT2FIX(long i) -{ - RBIMPL_ASSERT_OR_ASSUME(RB_FIXABLE(i)); - - /* :NOTE: VALUE can be wider than long. As j being unsigned, 2j+1 is fully - * defined. Also it can be compiled into a single LEA instruction. */ - const unsigned long j = i; - const unsigned long k = (j << 1) + RUBY_FIXNUM_FLAG; - const long l = k; - const SIGNED_VALUE m = l; /* Sign extend */ - const VALUE n = m; - - RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(n)); - return n; -} - -/** - * Checks if `int` can hold the given integer. - * - * @param[in] n Arbitrary `long` value. - * @exception rb_eRangeError `n` is out of range of `int`. - * @return Identical value of type `int` - */ -static inline int -rb_long2int_inline(long n) -{ - int i = RBIMPL_CAST((int)n); - - if /* constexpr */ (sizeof(long) <= sizeof(int)) { - RBIMPL_ASSUME(i == n); - } - - if (i != n) - rb_out_of_int(n); - - return i; -} - -RBIMPL_ATTR_CONST_UNLESS_DEBUG() -RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14) -/** - * @private - * - * This is an implementation detail of rb_fix2long(). People don't use it - * directly. - * - * @param[in] x A Fixnum. - * @return Identical value of type `long` - * @pre Must not pass anything other than a Fixnum. - */ -static inline long -rbimpl_fix2long_by_idiv(VALUE x) -{ - RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x)); - - /* :NOTE: VALUE can be wider than long. (x-1)/2 never overflows because - * RB_FIXNUM_P(x) holds. Also it has no portability issue like y>>1 - * below. */ - const SIGNED_VALUE y = x - RUBY_FIXNUM_FLAG; - const SIGNED_VALUE z = y / 2; - const long w = RBIMPL_CAST((long)z); - - RBIMPL_ASSERT_OR_ASSUME(RB_FIXABLE(w)); - return w; -} - -RBIMPL_ATTR_CONST_UNLESS_DEBUG() -RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14) -/** - * @private - * - * This is an implementation detail of rb_fix2long(). People don't use it - * directly. - * - * @param[in] x A Fixnum. - * @return Identical value of type `long` - * @pre Must not pass anything other than a Fixnum. - */ -static inline long -rbimpl_fix2long_by_shift(VALUE x) -{ - RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x)); - - /* :NOTE: VALUE can be wider than long. If right shift is arithmetic, this - * is noticeably faster than above. */ - const SIGNED_VALUE y = x; - const SIGNED_VALUE z = y >> 1; - const long w = RBIMPL_CAST((long)z); - - RBIMPL_ASSERT_OR_ASSUME(RB_FIXABLE(w)); - return w; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -/** - * @private - * - * This is an implementation detail of rb_fix2long(). People don't use it - * directly. - * - * @retval true This C compiler's right shift operator is arithmetic. - * @retval false This C compiler's right shift operator is logical. - */ -static inline bool -rbimpl_right_shift_is_arithmetic_p(void) -{ - return (-1 >> 1) == -1; -} - -RBIMPL_ATTR_CONST_UNLESS_DEBUG() -RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14) -/** - * Converts a Fixnum into C's `long`. - * - * @param[in] x Some Fixnum. - * @pre Must not pass anything other than a Fixnum. - * @return The passed value converted into C's `long`. - */ -static inline long -rb_fix2long(VALUE x) -{ - if /* constexpr */ (rbimpl_right_shift_is_arithmetic_p()) { - return rbimpl_fix2long_by_shift(x); - } - else { - return rbimpl_fix2long_by_idiv(x); - } -} - -RBIMPL_ATTR_CONST_UNLESS_DEBUG() -RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14) -/** - * Converts a Fixnum into C's `unsigned long`. - * - * @param[in] x Some Fixnum. - * @pre Must not pass anything other than a Fixnum. - * @return The passed value converted into C's `unsigned long`. - * @note Negative fixnums will be converted into large unsigned longs. - */ -static inline unsigned long -rb_fix2ulong(VALUE x) -{ - RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x)); - return rb_fix2long(x); -} - -/** - * Converts an instance of ::rb_cNumeric into C's `long`. - * - * @param[in] x Something numeric. - * @exception rb_eTypeError `x` is not a numeric. - * @exception rb_eRangeError `x` is out of range of `long`. - * @return The passed value converted into C's `long`. - */ -static inline long -rb_num2long_inline(VALUE x) -{ - if (RB_FIXNUM_P(x)) - return RB_FIX2LONG(x); - else - return rb_num2long(x); -} - -/** - * Converts an instance of ::rb_cNumeric into C's `unsigned long`. - * - * @param[in] x Something numeric. - * @exception rb_eTypeError `x` is not a numeric. - * @exception rb_eRangeError `x` is out of range of `unsigned long`. - * @return The passed value converted into C's `unsigned long`. - * - * @internal - * - * This (negative fixnum would become a large unsigned long while negative - * bignum is an exception) has been THE behaviour of NUM2ULONG since the - * beginning. It is strange, but we can no longer change how it works at this - * moment. We have to get by with it. - * - * @see https://bugs.ruby-lang.org/issues/9089 - */ -static inline unsigned long -rb_num2ulong_inline(VALUE x) -{ - if (RB_FIXNUM_P(x)) - return RB_FIX2ULONG(x); - else - return rb_num2ulong(x); -} - -/** - * Converts a C's `long` into an instance of ::rb_cInteger. - * - * @param[in] v Arbitrary `long` value. - * @return An instance of ::rb_cInteger. - */ -static inline VALUE -rb_long2num_inline(long v) -{ - if (RB_FIXABLE(v)) - return RB_LONG2FIX(v); - else - return rb_int2big(v); -} - -/** - * Converts a C's `unsigned long` into an instance of ::rb_cInteger. - * - * @param[in] v Arbitrary `unsigned long` value. - * @return An instance of ::rb_cInteger. - */ -static inline VALUE -rb_ulong2num_inline(unsigned long v) -{ - if (RB_POSFIXABLE(v)) - return RB_LONG2FIX(v); - else - return rb_uint2big(v); -} - -/** - * @cond INTERNAL_MACRO - * - * Following overload is necessary because sometimes INT2FIX is used as a enum - * value (e.g. `enum { FOO = INT2FIX(0) };`). THIS IS NG in theory because a - * VALUE does not fit into an enum (which must be a signed int). But we cannot - * break existing codes. - */ -#if RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 -# /* C++ can write constexpr as enum values. */ - -#elif ! defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P) -# undef INT2FIX -# define INT2FIX(i) (RBIMPL_CAST((VALUE)(i)) << 1 | RUBY_FIXNUM_FLAG) - -#else -# undef INT2FIX -# define INT2FIX(i) \ - __builtin_choose_expr( \ - __builtin_constant_p(i), \ - RBIMPL_CAST((VALUE)(i)) << 1 | RUBY_FIXNUM_FLAG, \ - RB_INT2FIX(i)) -#endif -/** @endcond */ - -#endif /* RBIMPL_ARITHMETIC_LONG_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/long_long.h b/libs/libruby/ruby/internal/arithmetic/long_long.h deleted file mode 100644 index 65dec87..0000000 --- a/libs/libruby/ruby/internal/arithmetic/long_long.h +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_LONG_LONG_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_LONG_LONG_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `long long` and Ruby's. - */ -#include "ruby/internal/value.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/special_consts.h" -#include "ruby/backward/2/long_long.h" - -#define RB_LL2NUM rb_ll2num_inline /**< @alias{rb_ll2num_inline} */ -#define RB_ULL2NUM rb_ull2num_inline /**< @alias{rb_ull2num_inline} */ -#define LL2NUM RB_LL2NUM /**< @old{RB_LL2NUM} */ -#define ULL2NUM RB_ULL2NUM /**< @old{RB_ULL2NUM} */ -#define RB_NUM2LL rb_num2ll_inline /**< @alias{rb_num2ll_inline} */ -#define RB_NUM2ULL rb_num2ull_inline /**< @alias{rb_num2ull_inline} */ -#define NUM2LL RB_NUM2LL /**< @old{RB_NUM2LL} */ -#define NUM2ULL RB_NUM2ULL /**< @old{RB_NUM2ULL} */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * Converts a C's `long long` into an instance of ::rb_cInteger. - * - * @param[in] num Arbitrary `long long` value. - * @return An instance of ::rb_cInteger. - */ -VALUE rb_ll2inum(LONG_LONG num); - -/** - * Converts a C's `unsigned long long` into an instance of ::rb_cInteger. - * - * @param[in] num Arbitrary `unsigned long long` value. - * @return An instance of ::rb_cInteger. - */ -VALUE rb_ull2inum(unsigned LONG_LONG num); - -/** - * Converts an instance of ::rb_cNumeric into C's `long long`. - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `long long`. - * @return The passed value converted into C's `long long`. - */ -LONG_LONG rb_num2ll(VALUE num); - -/** - * Converts an instance of ::rb_cNumeric into C's `unsigned long long`. - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `unsigned long long`. - * @return The passed value converted into C's `unsigned long long`. - */ -unsigned LONG_LONG rb_num2ull(VALUE num); -RBIMPL_SYMBOL_EXPORT_END() - -/** - * Converts a C's `long long` into an instance of ::rb_cInteger. - * - * @param[in] n Arbitrary `long long` value. - * @return An instance of ::rb_cInteger - */ -static inline VALUE -rb_ll2num_inline(LONG_LONG n) -{ - if (FIXABLE(n)) return LONG2FIX((long)n); - return rb_ll2inum(n); -} - -/** - * Converts a C's `unsigned long long` into an instance of ::rb_cInteger. - * - * @param[in] n Arbitrary `unsigned long long` value. - * @return An instance of ::rb_cInteger - */ -static inline VALUE -rb_ull2num_inline(unsigned LONG_LONG n) -{ - if (POSFIXABLE(n)) return LONG2FIX((long)n); - return rb_ull2inum(n); -} - -/** - * Converts an instance of ::rb_cNumeric into C's `long long`. - * - * @param[in] x Something numeric. - * @exception rb_eTypeError `x` is not a numeric. - * @exception rb_eRangeError `x` is out of range of `long long`. - * @return The passed value converted into C's `long long`. - */ -static inline LONG_LONG -rb_num2ll_inline(VALUE x) -{ - if (RB_FIXNUM_P(x)) - return RB_FIX2LONG(x); - else - return rb_num2ll(x); -} - -/** - * Converts an instance of ::rb_cNumeric into C's `unsigned long long`. - * - * @param[in] x Something numeric. - * @exception rb_eTypeError `x` is not a numeric. - * @exception rb_eRangeError `x` is out of range of `unsigned long long`. - * @return The passed value converted into C's `unsigned long long`. - */ -static inline unsigned LONG_LONG -rb_num2ull_inline(VALUE x) -{ - if (RB_FIXNUM_P(x)) - return RB_FIX2LONG(x); - else - return rb_num2ull(x); -} - -#endif /* RBIMPL_ARITHMETIC_LONG_LONG_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/mode_t.h b/libs/libruby/ruby/internal/arithmetic/mode_t.h deleted file mode 100644 index 5b7ad35..0000000 --- a/libs/libruby/ruby/internal/arithmetic/mode_t.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_MODE_T_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_MODE_T_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `mode_t` and Ruby's. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/arithmetic/int.h" - -/** Converts a C's `mode_t` into an instance of ::rb_cInteger. */ -#ifndef NUM2MODET -# define NUM2MODET RB_NUM2INT -#endif - -/** Converts an instance of ::rb_cNumeric into C's `mode_t`. */ -#ifndef MODET2NUM -# define MODET2NUM RB_INT2NUM -#endif - -/** A rb_sprintf() format prefix to be used for a `mode_t` parameter. */ -#ifndef PRI_MODET_PREFIX -# define PRI_MODET_PREFIX PRI_INT_PREFIX -#endif - -#endif /* RBIMPL_ARITHMETIC_MODE_T_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/off_t.h b/libs/libruby/ruby/internal/arithmetic/off_t.h deleted file mode 100644 index 0ec9362..0000000 --- a/libs/libruby/ruby/internal/arithmetic/off_t.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_OFF_T_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_OFF_T_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `off_t` and Ruby's. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/arithmetic/int.h" -#include "ruby/internal/arithmetic/long.h" -#include "ruby/internal/arithmetic/long_long.h" -#include "ruby/backward/2/long_long.h" - -/** Converts a C's `off_t` into an instance of ::rb_cInteger. */ -#ifdef OFFT2NUM -# /* take that. */ -#elif SIZEOF_OFF_T == SIZEOF_LONG_LONG -# define OFFT2NUM RB_LL2NUM -#elif SIZEOF_OFF_T == SIZEOF_LONG -# define OFFT2NUM RB_LONG2NUM -#else -# define OFFT2NUM RB_INT2NUM -#endif - -/** Converts an instance of ::rb_cNumeric into C's `off_t`. */ -#ifdef NUM2OFFT -# /* take that. */ -#elif SIZEOF_OFF_T == SIZEOF_LONG_LONG -# define NUM2OFFT RB_NUM2LL -#elif SIZEOF_OFF_T == SIZEOF_LONG -# define NUM2OFFT RB_NUM2LONG -#else -# define NUM2OFFT RB_NUM2INT -#endif - -/** A rb_sprintf() format prefix to be used for an `off_t` parameter. */ -#ifdef PRI_OFFT_PREFIX -# /* take that. */ -#elif SIZEOF_OFF_T == SIZEOF_LONG_LONG -# define PRI_OFFT_PREFIX PRI_LL_PREFIX -#elif SIZEOF_OFF_T == SIZEOF_LONG -# define PRI_OFFT_PREFIX PRI_LONG_PREFIX -#else -# define PRI_OFFT_PREFIX PRI_INT_PREFIX -#endif - -#endif /* RBIMPL_ARITHMETIC_OFF_T_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/pid_t.h b/libs/libruby/ruby/internal/arithmetic/pid_t.h deleted file mode 100644 index df9704e..0000000 --- a/libs/libruby/ruby/internal/arithmetic/pid_t.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_PID_T_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_PID_T_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `pid_t` and Ruby's. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/arithmetic/long.h" - -/** Converts a C's `pid_t` into an instance of ::rb_cInteger. */ -#ifndef PIDT2NUM -# define PIDT2NUM RB_LONG2NUM -#endif - -/** Converts an instance of ::rb_cNumeric into C's `pid_t`. */ -#ifndef NUM2PIDT -# define NUM2PIDT RB_NUM2LONG -#endif - -/** A rb_sprintf() format prefix to be used for a `pid_t` parameter. */ -#ifndef PRI_PIDT_PREFIX -# define PRI_PIDT_PREFIX PRI_LONG_PREFIX -#endif - -#endif /* RBIMPL_ARITHMETIC_PID_T_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/short.h b/libs/libruby/ruby/internal/arithmetic/short.h deleted file mode 100644 index 7a324d9..0000000 --- a/libs/libruby/ruby/internal/arithmetic/short.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_SHORT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_SHORT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `short` and Ruby's. - * - * Shyouhei wonders: why there is no SHORT2NUM, given there are both - * #USHORT2NUM and #CHR2FIX? - */ -#include "ruby/internal/value.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/special_consts.h" - -#define RB_NUM2SHORT rb_num2short_inline /**< @alias{rb_num2short_inline} */ -#define RB_NUM2USHORT rb_num2ushort /**< @alias{rb_num2ushort} */ -#define NUM2SHORT RB_NUM2SHORT /**< @old{RB_NUM2SHORT} */ -#define NUM2USHORT RB_NUM2USHORT /**< @old{RB_NUM2USHORT} */ -#define USHORT2NUM RB_INT2FIX /**< @old{RB_INT2FIX} */ -#define RB_FIX2SHORT rb_fix2short /**< @alias{rb_fix2ushort} */ -#define FIX2SHORT RB_FIX2SHORT /**< @old{RB_FIX2SHORT} */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Converts an instance of ::rb_cNumeric into C's `short`. - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `short`. - * @return The passed value converted into C's `short`. - */ -short rb_num2short(VALUE num); - -/** - * Converts an instance of ::rb_cNumeric into C's `unsigned short`. - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `unsigned short`. - * @return The passed value converted into C's `unsigned short`. - */ -unsigned short rb_num2ushort(VALUE num); - -/** - * Identical to rb_num2short(). - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `short`. - * @return The passed value converted into C's `short`. - * - * @internal - * - * This function seems to be a complete waste of disk space. @shyouhei has no - * idea why this is a different thing from rb_num2short(). - */ -short rb_fix2short(VALUE num); - -/** - * Identical to rb_num2ushort(). - * - * @param[in] num Something numeric. - * @exception rb_eTypeError `num` is not a numeric. - * @exception rb_eRangeError `num` is out of range of `unsigned short`. - * @return The passed value converted into C's `unsigned short`. - * - * @internal - * - * This function seems to be a complete waste of disk space. @shyouhei has no - * idea why this is a different thing from rb_num2ushort(). - */ -unsigned short rb_fix2ushort(VALUE num); -RBIMPL_SYMBOL_EXPORT_END() - -/** - * Identical to rb_num2short(). - * - * @param[in] x Something numeric. - * @exception rb_eTypeError `x` is not a numeric. - * @exception rb_eRangeError `x` is out of range of `short`. - * @return The passed value converted into C's `short`. - * - * @internal - * - * This function seems to be a complete waste of time. @shyouhei has no idea - * why this is a different thing from rb_num2short(). - */ -static inline short -rb_num2short_inline(VALUE x) -{ - if (RB_FIXNUM_P(x)) - return rb_fix2short(x); - else - return rb_num2short(x); -} - -#endif /* RBIMPL_ARITHMETIC_SHORT_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/size_t.h b/libs/libruby/ruby/internal/arithmetic/size_t.h deleted file mode 100644 index 1082160..0000000 --- a/libs/libruby/ruby/internal/arithmetic/size_t.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_SIZE_T_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_SIZE_T_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `size_t` and Ruby's. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/arithmetic/int.h" -#include "ruby/internal/arithmetic/long.h" -#include "ruby/internal/arithmetic/long_long.h" -#include "ruby/backward/2/long_long.h" - -#if defined(__DOXYGEN__) -# /** Converts a C's `size_t` into an instance of ::rb_cInteger. */ -# define RB_SIZE2NUM RB_ULONG2NUM -# /** Converts a C's `ssize_t` into an instance of ::rb_cInteger. */ -# define RB_SSIZE2NUM RB_LONG2NUM -#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG -# define RB_SIZE2NUM RB_ULL2NUM -# define RB_SSIZE2NUM RB_LL2NUM -#elif SIZEOF_SIZE_T == SIZEOF_LONG -# define RB_SIZE2NUM RB_ULONG2NUM -# define RB_SSIZE2NUM RB_LONG2NUM -#else -# define RB_SIZE2NUM RB_UINT2NUM -# define RB_SSIZE2NUM RB_INT2NUM -#endif - -#if defined(__DOXYGEN__) -# /** Converts an instance of ::rb_cInteger into C's `size_t`. */ -# define RB_NUM2SIZE RB_NUM2ULONG -# /** Converts an instance of ::rb_cInteger into C's `ssize_t`. */ -# define RB_NUM2SSIZE RB_NUM2LONG -#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG -# define RB_NUM2SIZE RB_NUM2ULL -# define RB_NUM2SSIZE RB_NUM2LL -#elif SIZEOF_SIZE_T == SIZEOF_LONG -# define RB_NUM2SIZE RB_NUM2ULONG -# define RB_NUM2SSIZE RB_NUM2LONG -#else -# define RB_NUM2SIZE RB_NUM2UINT -# define RB_NUM2SSIZE RB_NUM2INT -#endif - -#define NUM2SIZET RB_NUM2SIZE /**< @old{RB_NUM2SIZE} */ -#define SIZET2NUM RB_SIZE2NUM /**< @old{RB_SIZE2NUM} */ -#define NUM2SSIZET RB_NUM2SSIZE /**< @old{RB_NUM2SSIZE} */ -#define SSIZET2NUM RB_SSIZE2NUM /**< @old{RB_SSIZE2NUM} */ - -#endif /* RBIMPL_ARITHMETIC_SIZE_T_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/st_data_t.h b/libs/libruby/ruby/internal/arithmetic/st_data_t.h deleted file mode 100644 index 3bff4ff..0000000 --- a/libs/libruby/ruby/internal/arithmetic/st_data_t.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef RBIMPL_ARITHMERIC_ST_DATA_T_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMERIC_ST_DATA_T_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `st_data_t` and Ruby's. - */ -#include "ruby/internal/arithmetic/fixnum.h" -#include "ruby/internal/arithmetic/long.h" -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/constexpr.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/value.h" -#include "ruby/assert.h" -#include "ruby/st.h" - -#define ST2FIX RB_ST2FIX /**< @old{RB_ST2FIX} */ -/** @cond INTERNAL_MACRO */ -#define RB_ST2FIX RB_ST2FIX -/** @endcond */ - -RBIMPL_ATTR_CONST_UNLESS_DEBUG() -RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Converts a C's `st_data_t` into an instance of ::rb_cInteger. - * - * @param[in] i The data in question. - * @return A converted result - * @warning THIS CONVERSION LOSES DATA! Be warned. - * @see https://bugs.ruby-lang.org/issues/13877 - * @see https://bugs.ruby-lang.org/issues/14218 - * - * @internal - * - * This is needed because of hash functions. Hash functions return - * `st_data_t`, which could theoretically be bigger than Fixnums. However - * allocating Bignums for them every time we calculate hash values is just too - * heavy. To avoid penalty we need to ignore some upper bit(s) and stick to - * Fixnums. This function is used for that purpose. - */ -static inline VALUE -RB_ST2FIX(st_data_t i) -{ - SIGNED_VALUE x = i; - - if (x >= 0) { - x &= RUBY_FIXNUM_MAX; - } - else { - x |= RUBY_FIXNUM_MIN; - } - - RBIMPL_ASSERT_OR_ASSUME(RB_FIXABLE(x)); - unsigned long y = RBIMPL_CAST((unsigned long)x); - return RB_LONG2FIX(y); -} - -#endif /* RBIMPL_ARITHMETIC_ST_DATA_T_H */ diff --git a/libs/libruby/ruby/internal/arithmetic/uid_t.h b/libs/libruby/ruby/internal/arithmetic/uid_t.h deleted file mode 100644 index 12cde2a..0000000 --- a/libs/libruby/ruby/internal/arithmetic/uid_t.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef RBIMPL_ARITHMETIC_UID_T_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ARITHMETIC_UID_T_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Arithmetic conversion between C's `uid_t` and Ruby's. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/arithmetic/long.h" - -/** Converts a C's `uid_t` into an instance of ::rb_cInteger. */ -#ifndef UIDT2NUM -# define UIDT2NUM RB_LONG2NUM -#endif - -/** Converts an instance of ::rb_cNumeric into C's `uid_t`. */ -#ifndef NUM2UIDT -# define NUM2UIDT RB_NUM2LONG -#endif - -/** A rb_sprintf() format prefix to be used for a `uid_t` parameter. */ -#ifndef PRI_UIDT_PREFIX -# define PRI_UIDT_PREFIX PRI_LONG_PREFIX -#endif - -#endif /* RBIMPL_ARITHMETIC_UID_T_H */ diff --git a/libs/libruby/ruby/internal/assume.h b/libs/libruby/ruby/internal/assume.h deleted file mode 100644 index 4c183e8..0000000 --- a/libs/libruby/ruby/internal/assume.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef RBIMPL_ASSUME_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ASSUME_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ASSUME / #RBIMPL_UNREACHABLE. - * - * These macros must be defined at once because: - * - * - #RBIMPL_ASSUME could fallback to #RBIMPL_UNREACHABLE. - * - #RBIMPL_UNREACHABLE could fallback to #RBIMPL_ASSUME. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/has/builtin.h" -#include "ruby/internal/warning_push.h" - -/** @cond INTERNAL_MACRO */ -#if defined(HAVE___ASSUME) -# define RBIMPL_HAVE___ASSUME -#endif -/** @endcond */ - -/** Wraps (or simulates) `__builtin_unreachable`. */ -#if RBIMPL_HAS_BUILTIN(__builtin_unreachable) -# define RBIMPL_UNREACHABLE_RETURN(_) __builtin_unreachable() - -#elif defined(RBIMPL_HAVE___ASSUME) -# define RBIMPL_UNREACHABLE_RETURN(_) return (__assume(0), (_)) - -#else -# define RBIMPL_UNREACHABLE_RETURN(_) return (_) -#endif - -/** Wraps (or simulates) `__builtin_unreachable`. */ -#if RBIMPL_HAS_BUILTIN(__builtin_unreachable) -# define RBIMPL_UNREACHABLE __builtin_unreachable - -#elif defined(RBIMPL_HAVE___ASSUME) -# define RBIMPL_UNREACHABLE() __assume(0) -#endif - -/** Wraps (or simulates) `__assume`. */ -#if RBIMPL_COMPILER_SINCE(Intel, 13, 0, 0) -# /* icc warnings are false positives. Ignore them. */ -# /* "warning #2261: __assume expression with side effects discarded" */ -# define RBIMPL_ASSUME(expr) \ - RBIMPL_WARNING_PUSH() \ - RBIMPL_WARNING_IGNORED(2261) \ - __assume(expr) \ - RBIMPL_WARNING_POP() - -#elif defined(RBIMPL_HAVE___ASSUME) -# define RBIMPL_ASSUME __assume - -#elif RBIMPL_HAS_BUILTIN(__builtin_assume) -# define RBIMPL_ASSUME __builtin_assume - -#elif ! defined(RBIMPL_UNREACHABLE) -# define RBIMPL_ASSUME(_) RBIMPL_CAST((void)(_)) - -#else -# define RBIMPL_ASSUME(_) \ - (RB_LIKELY(!!(_)) ? RBIMPL_CAST((void)0) : RBIMPL_UNREACHABLE()) -#endif - -#if ! defined(RBIMPL_UNREACHABLE) -# define RBIMPL_UNREACHABLE() RBIMPL_ASSUME(0) -#endif - -#endif /* RBIMPL_ASSUME_H */ diff --git a/libs/libruby/ruby/internal/attr/alloc_size.h b/libs/libruby/ruby/internal/attr/alloc_size.h deleted file mode 100644 index 954a201..0000000 --- a/libs/libruby/ruby/internal/attr/alloc_size.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef RBIMPL_ATTR_ALLOC_SIZE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_ALLOC_SIZE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_ALLOC_SIZE. - */ -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((alloc_size))` */ -#if RBIMPL_HAS_ATTRIBUTE(alloc_size) -# define RBIMPL_ATTR_ALLOC_SIZE(tuple) __attribute__((__alloc_size__ tuple)) -#else -# define RBIMPL_ATTR_ALLOC_SIZE(tuple) /* void */ -#endif - -#endif /* RBIMPL_ATTR_ALLOC_SIZE_H */ diff --git a/libs/libruby/ruby/internal/attr/artificial.h b/libs/libruby/ruby/internal/attr/artificial.h deleted file mode 100644 index ef5f36a..0000000 --- a/libs/libruby/ruby/internal/attr/artificial.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef RBIMPL_ATTR_ARTIFICIAL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_ARTIFICIAL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_ARTIFICIAL. - * - * ### Q&A ### - * - * - Q: What is this attribute? I don't get what GCC manual is talking about. - * - * - A: In short it is an attribute to manipulate GDB backtraces. The - * attribute makes the best sense when it comes with - * __attribute__((always_inline)). When a function annotated with this - * attribute gets inlined, and when you somehow look at a backtrace which - * includes such inlined call site, then the backtrace shows the caller - * and not the callee. This is handy for instance when an identical - * function is inlined more than once in a single big function. On such - * case it gets vital to know where the inlining happened in the callee. - * See also https://stackoverflow.com/a/21936099 - */ -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((artificial))` */ -#if RBIMPL_HAS_ATTRIBUTE(artificial) -# define RBIMPL_ATTR_ARTIFICIAL() __attribute__((__artificial__)) -#else -# define RBIMPL_ATTR_ARTIFICIAL() /* void */ -#endif - -#endif /* RBIMPL_ATTR_ARTIFICIAL_H */ diff --git a/libs/libruby/ruby/internal/attr/cold.h b/libs/libruby/ruby/internal/attr/cold.h deleted file mode 100644 index c68b3ae..0000000 --- a/libs/libruby/ruby/internal/attr/cold.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef RBIMPL_ATTR_COLD_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_COLD_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_COLD. - */ -#include "ruby/internal/compiler_is.h" -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((cold))` */ -#if RBIMPL_COMPILER_IS(SunPro) -# /* Recent SunPro has __has_attribute, and is broken. */ -# /* It reports it has attribute cold, reality isn't (warnings issued). */ -# define RBIMPL_ATTR_COLD() /* void */ -#elif RBIMPL_HAS_ATTRIBUTE(cold) -# define RBIMPL_ATTR_COLD() __attribute__((__cold__)) -#else -# define RBIMPL_ATTR_COLD() /* void */ -#endif - -#endif /* RBIMPL_ATTR_COLD_H */ diff --git a/libs/libruby/ruby/internal/attr/const.h b/libs/libruby/ruby/internal/attr/const.h deleted file mode 100644 index e66aa17..0000000 --- a/libs/libruby/ruby/internal/attr/const.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef RBIMPL_ATTR_CONST_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_CONST_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_CONST. - */ -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/has/attribute.h" -#include "ruby/internal/has/declspec_attribute.h" - -/** Wraps (or simulates) `__attribute__((const))` */ -#if RBIMPL_HAS_ATTRIBUTE(const) -# define RBIMPL_ATTR_CONST() __attribute__((__const__)) -#elif RBIMPL_HAS_DECLSPEC_ATTRIBUTE(noalias) -# /* If a function can be a const, that is also a noalias. */ -# define RBIMPL_ATTR_CONST() __declspec(noalias) -#elif RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0) -# define RBIMPL_ATTR_CONST() _Pragma("no_side_effect") -#else -# define RBIMPL_ATTR_CONST() /* void */ -#endif - -/** Enables #RBIMPL_ATTR_CONST if and only if. ! #RUBY_DEBUG. */ -#if !defined(RUBY_DEBUG) || !RUBY_DEBUG -# define RBIMPL_ATTR_CONST_UNLESS_DEBUG() RBIMPL_ATTR_CONST() -#else -# define RBIMPL_ATTR_CONST_UNLESS_DEBUG() /* void */ -#endif - -#endif /* RBIMPL_ATTR_CONST_H */ diff --git a/libs/libruby/ruby/internal/attr/constexpr.h b/libs/libruby/ruby/internal/attr/constexpr.h deleted file mode 100644 index abc4f23..0000000 --- a/libs/libruby/ruby/internal/attr/constexpr.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef RBIMPL_ATTR_CONSTEXPR_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_CONSTEXPR_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief #RBIMPL_ATTR_CONSTEXPR. - */ -#include "ruby/internal/has/feature.h" -#include "ruby/internal/compiler_is.h" - -/** @cond INTERNAL_MACRO */ -#if ! defined(__cplusplus) -# /* Makes no sense. */ -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 0 -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0 - -#elif defined(__cpp_constexpr) -# /* https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations */ -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 (__cpp_constexpr >= 200704L) -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 (__cpp_constexpr >= 201304L) - -#elif RBIMPL_COMPILER_SINCE(MSVC, 19, 0, 0) -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 RBIMPL_COMPILER_SINCE(MSVC, 19, 00, 00) -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 RBIMPL_COMPILER_SINCE(MSVC, 19, 11, 00) - -#elif RBIMPL_COMPILER_SINCE(SunPro, 5, 13, 0) -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 (__cplusplus >= 201103L) -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 (__cplusplus >= 201402L) - -#elif RBIMPL_COMPILER_SINCE(GCC, 4, 9, 0) -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 (__cplusplus >= 201103L) -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 (__cplusplus >= 201402L) - -#elif RBIMPL_HAS_FEATURE(cxx_relaxed_constexpr) -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 1 -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 1 - -#elif RBIMPL_HAS_FEATURE(cxx_constexpr) -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 1 -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0 - -#else -# /* :FIXME: icpc must have constexpr but don't know how to detect. */ -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 0 -# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0 -#endif -/** @endcond */ - -/** Wraps (or simulates) C++11 `constexpr`. */ -#if RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 -# define RBIMPL_ATTR_CONSTEXPR(_) constexpr - -#elif RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 -# define RBIMPL_ATTR_CONSTEXPR(_) RBIMPL_ATTR_CONSTEXPR_ ## _ -# define RBIMPL_ATTR_CONSTEXPR_CXX11 constexpr -# define RBIMPL_ATTR_CONSTEXPR_CXX14 /* void */ - -#else -# define RBIMPL_ATTR_CONSTEXPR(_) /* void */ -#endif - -/** Enables #RBIMPL_ATTR_CONSTEXPR if and only if. ! #RUBY_DEBUG. */ -#if !RUBY_DEBUG -# define RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(_) RBIMPL_ATTR_CONSTEXPR(_) -#else -# define RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(_) /* void */ -#endif - -#endif /* RBIMPL_ATTR_CONSTEXPR_H */ diff --git a/libs/libruby/ruby/internal/attr/deprecated.h b/libs/libruby/ruby/internal/attr/deprecated.h deleted file mode 100644 index e1bbdbd..0000000 --- a/libs/libruby/ruby/internal/attr/deprecated.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef RBIMPL_ATTR_DEPRECATED_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_DEPRECATED_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_DEPRECATED. - */ -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/has/attribute.h" -#include "ruby/internal/has/c_attribute.h" -#include "ruby/internal/has/cpp_attribute.h" -#include "ruby/internal/has/declspec_attribute.h" -#include "ruby/internal/has/extension.h" - -/** Wraps (or simulates) `[[deprecated]]` */ -#if defined(__COVERITY__) -/* Coverity Scan emulates gcc but seems not to support this attribute correctly */ -# define RBIMPL_ATTR_DEPRECATED(msg) - -#elif RBIMPL_HAS_EXTENSION(attribute_deprecated_with_message) -# define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg)) - -#elif defined(__cplusplus) && RBIMPL_COMPILER_SINCE(GCC, 10, 1, 0) && RBIMPL_COMPILER_BEFORE(GCC, 10, 3, 0) -# /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95302 */ -# define RBIMPL_ATTR_DEPRECATED(msg) /* disable until they fix this bug */ - -#elif RBIMPL_COMPILER_SINCE(GCC, 4, 5, 0) -# define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg)) - -#elif RBIMPL_COMPILER_SINCE(Intel, 13, 0, 0) -# define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg)) - -#elif RBIMPL_HAS_ATTRIBUTE(deprecated) /* but not with message. */ -# define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__)) - -#elif RBIMPL_COMPILER_SINCE(MSVC, 14, 0, 0) -# define RBIMPL_ATTR_DEPRECATED(msg) __declspec(deprecated msg) - -#elif RBIMPL_HAS_DECLSPEC_ATTRIBUTE(deprecated) -# define RBIMPL_ATTR_DEPRECATED(msg) __declspec(deprecated) - -#elif RBIMPL_HAS_CPP_ATTRIBUTE(deprecated) -# define RBIMPL_ATTR_DEPRECATED(msg) [[deprecated msg]] - -#elif RBIMPL_HAS_C_ATTRIBUTE(deprecated) -# define RBIMPL_ATTR_DEPRECATED(msg) [[deprecated msg]] - -#else -# define RBIMPL_ATTR_DEPRECATED(msg) /* void */ -#endif - -/** This is when a function is used internally (for backwards compatibility - * etc.), but extension libraries must consider it deprecated. */ -#if defined(RUBY_EXPORT) -# define RBIMPL_ATTR_DEPRECATED_EXT(msg) /* void */ -#else -# define RBIMPL_ATTR_DEPRECATED_EXT(msg) RBIMPL_ATTR_DEPRECATED(msg) -#endif - -#endif /* RBIMPL_ATTR_DEPRECATED_H */ diff --git a/libs/libruby/ruby/internal/attr/diagnose_if.h b/libs/libruby/ruby/internal/attr/diagnose_if.h deleted file mode 100644 index cadc6ce..0000000 --- a/libs/libruby/ruby/internal/attr/diagnose_if.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef RBIMPL_ATTR_DIAGNOSE_IF_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_DIAGNOSE_IF_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_DIAGNOSE_IF. - */ -#include "ruby/internal/has/attribute.h" -#include "ruby/internal/warning_push.h" - -/** Wraps (or simulates) `__attribute__((diagnose_if))` */ -#if RBIMPL_COMPILER_BEFORE(Clang, 5, 0, 0) -# /* https://bugs.llvm.org/show_bug.cgi?id=34319 */ -# define RBIMPL_ATTR_DIAGNOSE_IF(_, __, ___) /* void */ - -#elif RBIMPL_HAS_ATTRIBUTE(diagnose_if) -# define RBIMPL_ATTR_DIAGNOSE_IF(_, __, ___) \ - RBIMPL_WARNING_PUSH() \ - RBIMPL_WARNING_IGNORED(-Wgcc-compat) \ - __attribute__((__diagnose_if__(_, __, ___))) \ - RBIMPL_WARNING_POP() - -#else -# define RBIMPL_ATTR_DIAGNOSE_IF(_, __, ___) /* void */ -#endif - -#endif /* RBIMPL_ATTR_DIAGNOSE_IF_H */ diff --git a/libs/libruby/ruby/internal/attr/enum_extensibility.h b/libs/libruby/ruby/internal/attr/enum_extensibility.h deleted file mode 100644 index eb0d5b6..0000000 --- a/libs/libruby/ruby/internal/attr/enum_extensibility.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef RBIMPL_ATTR_ENUM_EXTENSIBILITY_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_ENUM_EXTENSIBILITY_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief #RBIMPL_ATTR_ENUM_EXTENSIBILITY. - */ -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((enum_extensibility))` */ -#if RBIMPL_HAS_ATTRIBUTE(enum_extensibility) -# define RBIMPL_ATTR_ENUM_EXTENSIBILITY(_) __attribute__((__enum_extensibility__(_))) -#else -# define RBIMPL_ATTR_ENUM_EXTENSIBILITY(_) /* void */ -#endif - -#endif /* RBIMPL_ATTR_ENUM_EXTENSIBILITY_H */ diff --git a/libs/libruby/ruby/internal/attr/error.h b/libs/libruby/ruby/internal/attr/error.h deleted file mode 100644 index 2ed388a..0000000 --- a/libs/libruby/ruby/internal/attr/error.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef RBIMPL_ATTR_ERROR_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_ERROR_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_ERROR. - */ -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((error))` */ -#if RBIMPL_HAS_ATTRIBUTE(error) -# define RBIMPL_ATTR_ERROR(msg) __attribute__((__error__ msg)) -#else -# define RBIMPL_ATTR_ERROR(msg) /* void */ -#endif - -#endif /* RBIMPL_ATTR_ERROR_H */ diff --git a/libs/libruby/ruby/internal/attr/flag_enum.h b/libs/libruby/ruby/internal/attr/flag_enum.h deleted file mode 100644 index 3053d75..0000000 --- a/libs/libruby/ruby/internal/attr/flag_enum.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef RBIMPL_ATTR_FLAG_ENUM_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_FLAG_ENUM_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_FLAG_ENUM. - * @see https://clang.llvm.org/docs/AttributeReference.html#flag_enum - */ -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((flag_enum)` */ -#if RBIMPL_HAS_ATTRIBUTE(flag_enum) -# define RBIMPL_ATTR_FLAG_ENUM() __attribute__((__flag_enum__)) -#else -# define RBIMPL_ATTR_FLAG_ENUM() /* void */ -#endif - -#endif /* RBIMPLATTR_FLAG_ENUM_H */ diff --git a/libs/libruby/ruby/internal/attr/forceinline.h b/libs/libruby/ruby/internal/attr/forceinline.h deleted file mode 100644 index b7daafe..0000000 --- a/libs/libruby/ruby/internal/attr/forceinline.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef RBIMPL_ATTR_FORCEINLINE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_FORCEINLINE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_FORCEINLINE. - */ -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/has/attribute.h" - -/** - * Wraps (or simulates) `__forceinline`. MSVC complains on declarations like - * `static inline __forceinline void foo()`. It seems MSVC's `inline` and - * `__forceinline` are mutually exclusive. We have to mimic that behaviour for - * non-MSVC compilers. - */ -#if RBIMPL_COMPILER_SINCE(MSVC, 12, 0, 0) -# define RBIMPL_ATTR_FORCEINLINE() __forceinline -#elif RBIMPL_HAS_ATTRIBUTE(always_inline) -# define RBIMPL_ATTR_FORCEINLINE() __attribute__((__always_inline__)) inline -#else -# define RBIMPL_ATTR_FORCEINLINE() inline -#endif - -#endif /* RBIMPL_ATTR_FORCEINLINE_H */ diff --git a/libs/libruby/ruby/internal/attr/format.h b/libs/libruby/ruby/internal/attr/format.h deleted file mode 100644 index b3488ee..0000000 --- a/libs/libruby/ruby/internal/attr/format.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef RBIMPL_ATTR_FORMAT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_FORMAT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_FORMAT. - */ -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((format))` */ -#if RBIMPL_HAS_ATTRIBUTE(format) -# define RBIMPL_ATTR_FORMAT(x, y, z) __attribute__((__format__(x, y, z))) -#else -# define RBIMPL_ATTR_FORMAT(x, y, z) /* void */ -#endif - -#if defined(__MINGW_PRINTF_FORMAT) -# define RBIMPL_PRINTF_FORMAT __MINGW_PRINTF_FORMAT -#else -# define RBIMPL_PRINTF_FORMAT __printf__ -#endif - -#endif /* RBIMPL_ATTR_FORMAT_H */ diff --git a/libs/libruby/ruby/internal/attr/maybe_unused.h b/libs/libruby/ruby/internal/attr/maybe_unused.h deleted file mode 100644 index 3ee8be4..0000000 --- a/libs/libruby/ruby/internal/attr/maybe_unused.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef RBIMPL_ATTR_MAYBE_UNUSED_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_MAYBE_UNUSED_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_MAYBE_UNUSED. - */ -#include "ruby/internal/has/attribute.h" -#include "ruby/internal/has/c_attribute.h" -#include "ruby/internal/has/cpp_attribute.h" - -/** Wraps (or simulates) `[[maybe_unused]]` */ -#if RBIMPL_HAS_CPP_ATTRIBUTE(maybe_unused) -# define RBIMPL_ATTR_MAYBE_UNUSED() [[maybe_unused]] -#elif RBIMPL_HAS_C_ATTRIBUTE(maybe_unused) -# define RBIMPL_ATTR_MAYBE_UNUSED() [[maybe_unused]] -#elif RBIMPL_HAS_ATTRIBUTE(unused) -# define RBIMPL_ATTR_MAYBE_UNUSED() __attribute__((__unused__)) -#else -# define RBIMPL_ATTR_MAYBE_UNUSED() /* void */ -#endif - -#endif /* RBIMPL_ATTR_MAYBE_UNUSED */ diff --git a/libs/libruby/ruby/internal/attr/noalias.h b/libs/libruby/ruby/internal/attr/noalias.h deleted file mode 100644 index 0790ef6..0000000 --- a/libs/libruby/ruby/internal/attr/noalias.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef RBIMPL_ATTR_NOALIAS_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_NOALIAS_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_NOALIAS. - * - * ### Q&A ### - * - * - Q: There are seemingly similar attributes named #RBIMPL_ATTR_CONST, - * #RBIMPL_ATTR_PURE, and #RBIMPL_ATTR_NOALIAS. What are the difference? - * - * - A: Allowed operations are different. - * - * - #RBIMPL_ATTR_CONST ... Functions attributed by this are not allowed to - * read/write _any_ pointers at all (there are exceptional situations - * when reading a pointer is possible but forget that; they are too - * exceptional to be useful). Just remember that everything pointer- - * related are NG. - * - * - #RBIMPL_ATTR_PURE ... Functions attributed by this can read any - * nonvolatile pointers, but no writes are allowed at all. The ability - * to read _any_ nonvolatile pointers makes it possible to mark ::VALUE- - * taking functions as being pure, as long as they are read-only. - * - * - #RBIMPL_ATTR_NOALIAS ... Can both read/write, but only through - * pointers passed to the function as parameters. This is a typical - * situation when you create a C++ non-static member function which only - * concerns `this`. No global variables are allowed to read/write. So - * this is not a super-set of being pure. If you want to read something, - * that has to be passed to the function as a pointer. ::VALUE -taking - * functions thus cannot be attributed as such. - */ -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/has/declspec_attribute.h" - -/** Wraps (or simulates) `__declspec((noalias))` */ -#if RBIMPL_COMPILER_BEFORE(Clang, 12, 0, 0) -# /* -# * `::llvm::Attribute::ArgMemOnly` was buggy before. Maybe because nobody -# * actually seriously used it. It seems they somehow mitigated the situation -# * in LLVM 12. Still not found the exact changeset which fiexed the -# * attribute, though. -# * -# * :FIXME: others (armclang, xlclang, ...) can also be affected? -# */ -# define RBIMPL_ATTR_NOALIAS() /* void */ -#elif RBIMPL_HAS_DECLSPEC_ATTRIBUTE(noalias) -# define RBIMPL_ATTR_NOALIAS() __declspec(noalias) -#else -# define RBIMPL_ATTR_NOALIAS() /* void */ -#endif - -#endif /* RBIMPL_ATTR_NOALIAS_H */ diff --git a/libs/libruby/ruby/internal/attr/nodiscard.h b/libs/libruby/ruby/internal/attr/nodiscard.h deleted file mode 100644 index c3ae118..0000000 --- a/libs/libruby/ruby/internal/attr/nodiscard.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef RBIMPL_ATTR_NODISCARD_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_NODISCARD_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_NODISCARD. - */ -#include "ruby/internal/has/attribute.h" -#include "ruby/internal/has/c_attribute.h" -#include "ruby/internal/has/cpp_attribute.h" - -/** - * Wraps (or simulates) `[[nodiscard]]`. In C++ (at least since C++20) a - * nodiscard attribute can have a message why the result shall not be ignored. - * However GCC attribute and SAL annotation cannot take them. - */ -#if RBIMPL_HAS_CPP_ATTRIBUTE(nodiscard) -# define RBIMPL_ATTR_NODISCARD() [[nodiscard]] -#elif RBIMPL_HAS_C_ATTRIBUTE(nodiscard) -# define RBIMPL_ATTR_NODISCARD() [[nodiscard]] -#elif RBIMPL_HAS_ATTRIBUTE(warn_unused_result) -# define RBIMPL_ATTR_NODISCARD() __attribute__((__warn_unused_result__)) -#elif defined(_Check_return_) -# /* Take SAL definition. */ -# define RBIMPL_ATTR_NODISCARD() _Check_return_ -#else -# define RBIMPL_ATTR_NODISCARD() /* void */ -#endif - -#endif /* RBIMPL_ATTR_NODISCARD_H */ diff --git a/libs/libruby/ruby/internal/attr/noexcept.h b/libs/libruby/ruby/internal/attr/noexcept.h deleted file mode 100644 index ea3001d..0000000 --- a/libs/libruby/ruby/internal/attr/noexcept.h +++ /dev/null @@ -1,91 +0,0 @@ -#ifndef RBIMPL_ATTR_NOEXCEPT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_NOEXCEPT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_NOEXCEPT. - * - * This isn't actually an attribute in C++ but who cares... - * - * Mainly due to aesthetic reasons, this one is rarely used in the project. - * But can be handy on occasions, especially when a function's noexcept-ness - * depends on its calling functions. - * - * ### Q&A ### - * - * - Q: Can a function that raises Ruby exceptions be attributed `noexcept`? - * - * - A: Yes. `noexcept` is about C++ exceptions, not Ruby's. They don't - * interface each other. You can safely attribute a function that raises - * Ruby exceptions as `noexcept`. - * - * - Q: How, then, can I assert that a function I wrote doesn't raise any Ruby - * exceptions? - * - * - A: `__attribute__((__leaf__))` is for that purpose. A function attributed - * as leaf can still throw C++ exceptions, but not Ruby's. Note however, - * that it's extremely difficult -- if not impossible -- to assert that a - * function doesn't raise any Ruby exceptions at all. Use of that - * attribute is not recommended; mere mortals can't properly use that by - * hand. - * - * - Q: Does it make sense to attribute an inline function `noexcept`? - * - * - A: I thought so before. But no, I don't think they are useful any longer. - * - * - When an inline function attributed `noexcept` actually doesn't throw - * any exceptions at all: these days I don't see any difference in - * generated assembly by adding/removing this attribute. C++ compilers - * get smarter and smarter. Today they can infer if it actually throws - * or not without any annotations by humans (correct me if I'm wrong). - * - * - When an inline function attributed `noexcepr` actually _does_ throw an - * exception: they have to call `std::terminate` then (C++ standard - * mandates so). This means exception handling routines are actually - * enforced, not omitted. This doesn't impact runtime performance (The - * Itanium C++ ABI has zero-cost exception handling), but does impact on - * generated binary size. This is bad. - */ -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/has/feature.h" - -/** Wraps (or simulates) C++11 `noexcept` */ -#if ! defined(__cplusplus) -# /* Doesn't make sense. */ -# define RBIMPL_ATTR_NOEXCEPT(_) /* void */ - -#elif RBIMPL_HAS_FEATURE(cxx_noexcept) -# define RBIMPL_ATTR_NOEXCEPT(_) noexcept(noexcept(_)) - -#elif defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__ -# define RBIMPL_ATTR_NOEXCEPT(_) noexcept(noexcept(_)) - -#elif defined(__INTEL_CXX11_MODE__) -# define RBIMPL_ATTR_NOEXCEPT(_) noexcept(noexcept(_)) - -#elif RBIMPL_COMPILER_SINCE(MSVC, 19, 0, 0) -# define RBIMPL_ATTR_NOEXCEPT(_) noexcept(noexcept(_)) - -#elif __cplusplus >= 201103L -# define RBIMPL_ATTR_NOEXCEPT(_) noexcept(noexcept(_)) - -#else -# define RBIMPL_ATTR_NOEXCEPT(_) /* void */ -#endif - -#endif /* RBIMPL_ATTR_NOEXCEPT_H */ diff --git a/libs/libruby/ruby/internal/attr/noinline.h b/libs/libruby/ruby/internal/attr/noinline.h deleted file mode 100644 index b7605a0..0000000 --- a/libs/libruby/ruby/internal/attr/noinline.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef RBIMPL_ATTR_NOINLINE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_NOINLINE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_NOINLINE. - */ -#include "ruby/internal/has/attribute.h" -#include "ruby/internal/has/declspec_attribute.h" - -/** Wraps (or simulates) `__declspec(noinline)` */ -#if RBIMPL_HAS_DECLSPEC_ATTRIBUTE(noinline) -# define RBIMPL_ATTR_NOINLINE() __declspec(noinline) -#elif RBIMPL_HAS_ATTRIBUTE(noinline) -# define RBIMPL_ATTR_NOINLINE() __attribute__((__noinline__)) -#else -# define RBIMPL_ATTR_NOINLINE() /* void */ -#endif - -#endif /* RBIMPL_ATTR_NOINLINE_H */ diff --git a/libs/libruby/ruby/internal/attr/nonnull.h b/libs/libruby/ruby/internal/attr/nonnull.h deleted file mode 100644 index 778d5be..0000000 --- a/libs/libruby/ruby/internal/attr/nonnull.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef RBIMPL_ATTR_NONNULL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_NONNULL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_NONNULL. - */ -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((nonnull))` */ -#if RBIMPL_HAS_ATTRIBUTE(nonnull) -# define RBIMPL_ATTR_NONNULL(list) __attribute__((__nonnull__ list)) -# define RBIMPL_NONNULL_ARG(arg) RBIMPL_ASSERT_NOTHING -#else -# define RBIMPL_ATTR_NONNULL(list) /* void */ -# define RBIMPL_NONNULL_ARG(arg) RUBY_ASSERT(arg) -#endif - -#endif /* RBIMPL_ATTR_NONNULL_H */ diff --git a/libs/libruby/ruby/internal/attr/noreturn.h b/libs/libruby/ruby/internal/attr/noreturn.h deleted file mode 100644 index 5839212..0000000 --- a/libs/libruby/ruby/internal/attr/noreturn.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef RBIMPL_ATTR_NORETURN_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_NORETURN_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_NORETURN. - */ -#include "ruby/internal/has/attribute.h" -#include "ruby/internal/has/cpp_attribute.h" -#include "ruby/internal/has/declspec_attribute.h" - -/** Wraps (or simulates) `[[noreturn]]` */ -#if RBIMPL_HAS_DECLSPEC_ATTRIBUTE(noreturn) -# define RBIMPL_ATTR_NORETURN() __declspec(noreturn) - -#elif RBIMPL_HAS_ATTRIBUTE(noreturn) -# define RBIMPL_ATTR_NORETURN() __attribute__((__noreturn__)) - -#elif RBIMPL_HAS_CPP_ATTRIBUTE(noreturn) -# define RBIMPL_ATTR_NORETURN() [[noreturn]] - -#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112) -# define RBIMPL_ATTR_NORETURN() _Noreturn - -#elif defined(_Noreturn) -# /* glibc has this macro. */ -# define RBIMPL_ATTR_NORETURN() _Noreturn - -#else -# define RBIMPL_ATTR_NORETURN() /* void */ -#endif - -#endif /* RBIMPL_ATTR_NORETURN_H */ diff --git a/libs/libruby/ruby/internal/attr/pure.h b/libs/libruby/ruby/internal/attr/pure.h deleted file mode 100644 index 015711b..0000000 --- a/libs/libruby/ruby/internal/attr/pure.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef RBIMPL_ATTR_PURE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_PURE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_PURE. - */ -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/has/attribute.h" -#include "ruby/assert.h" - -/** Wraps (or simulates) `__attribute__((pure))` */ -#if RBIMPL_HAS_ATTRIBUTE(pure) -# define RBIMPL_ATTR_PURE() __attribute__((__pure__)) -#elif RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0) -# define RBIMPL_ATTR_PURE() _Pragma("does_not_write_global_data") -#else -# define RBIMPL_ATTR_PURE() /* void */ -#endif - -/** Enables #RBIMPL_ATTR_PURE if and only if. ! #RUBY_DEBUG. */ -#if !RUBY_DEBUG -# define RBIMPL_ATTR_PURE_UNLESS_DEBUG() RBIMPL_ATTR_PURE() -#else -# define RBIMPL_ATTR_PURE_UNLESS_DEBUG() /* void */ -#endif - -#endif /* RBIMPL_ATTR_PURE_H */ diff --git a/libs/libruby/ruby/internal/attr/restrict.h b/libs/libruby/ruby/internal/attr/restrict.h deleted file mode 100644 index e391041..0000000 --- a/libs/libruby/ruby/internal/attr/restrict.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef RBIMPL_ATTR_RESTRICT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_RESTRICT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_RESTRICT. - */ -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/has/attribute.h" - -/* :FIXME: config.h includes conflicting `#define restrict`. MSVC can be - * detected using `RBIMPL_COMPILER_SINCE()`, but Clang & family cannot use - * `__has_declspec_attribute()` which involves macro substitution. */ - -/** Wraps (or simulates) `__declspec(restrict)` */ -#if RBIMPL_COMPILER_SINCE(MSVC, 14, 0, 0) -# define RBIMPL_ATTR_RESTRICT() __declspec(re ## strict) - -#elif RBIMPL_HAS_ATTRIBUTE(malloc) -# define RBIMPL_ATTR_RESTRICT() __attribute__((__malloc__)) - -#elif RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0) -# define RBIMPL_ATTR_RESTRICT() _Pragma("returns_new_memory") - -#else -# define RBIMPL_ATTR_RESTRICT() /* void */ -#endif - -#endif /* RBIMPL_ATTR_RESTRICT_H */ diff --git a/libs/libruby/ruby/internal/attr/returns_nonnull.h b/libs/libruby/ruby/internal/attr/returns_nonnull.h deleted file mode 100644 index 5d6f1d1..0000000 --- a/libs/libruby/ruby/internal/attr/returns_nonnull.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef RBIMPL_ATTR_RETURNS_NONNULL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_RETURNS_NONNULL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_RETURNS_NONNULL. - */ -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((returns_nonnull))` */ -#if defined(_Ret_nonnull_) -# /* Take SAL definition. */ -# define RBIMPL_ATTR_RETURNS_NONNULL() _Ret_nonnull_ - -#elif RBIMPL_HAS_ATTRIBUTE(returns_nonnull) -# define RBIMPL_ATTR_RETURNS_NONNULL() __attribute__((__returns_nonnull__)) - -#else -# define RBIMPL_ATTR_RETURNS_NONNULL() /* void */ -#endif - -#endif /* RBIMPL_ATTR_RETURNS_NONNULL_H */ diff --git a/libs/libruby/ruby/internal/attr/warning.h b/libs/libruby/ruby/internal/attr/warning.h deleted file mode 100644 index e5ced26..0000000 --- a/libs/libruby/ruby/internal/attr/warning.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef RBIMPL_ATTR_WARNING_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_WARNING_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_WARNING. - */ -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((warning))` */ -#if RBIMPL_HAS_ATTRIBUTE(warning) -# define RBIMPL_ATTR_WARNING(msg) __attribute__((__warning__ msg)) -#else -# define RBIMPL_ATTR_WARNING(msg) /* void */ -#endif - -#endif /* RBIMPL_ATTR_WARNING_H */ diff --git a/libs/libruby/ruby/internal/attr/weakref.h b/libs/libruby/ruby/internal/attr/weakref.h deleted file mode 100644 index f118bb6..0000000 --- a/libs/libruby/ruby/internal/attr/weakref.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef RBIMPL_ATTR_WEAKREF_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ATTR_WEAKREF_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ATTR_WEAKREF. - */ -#include "ruby/internal/has/attribute.h" - -/** Wraps (or simulates) `__attribute__((weakref))` */ -#if RBIMPL_HAS_ATTRIBUTE(weakref) -# define RBIMPL_ATTR_WEAKREF(sym) __attribute__((__weakref__(# sym))) -#else -# define RBIMPL_ATTR_WEAKREF(sym) /* void */ -#endif - -#endif /* RBIMPL_ATTR_WEAKREF_H */ diff --git a/libs/libruby/ruby/internal/cast.h b/libs/libruby/ruby/internal/cast.h deleted file mode 100644 index a31fddb..0000000 --- a/libs/libruby/ruby/internal/cast.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef RBIMPL_CAST_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_CAST_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines RBIMPL_CAST. - * - * This casting macro makes sense only inside of other macros that are part of - * public headers. They could be used from C++, and C-style casts could issue - * warnings. Ruby internals are pure C so they should not bother. - */ -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/has/warning.h" -#include "ruby/internal/warning_push.h" - -#if ! defined(__cplusplus) -# define RBIMPL_CAST(expr) (expr) - -#elif RBIMPL_COMPILER_SINCE(GCC, 4, 6, 0) -# /* g++ has -Wold-style-cast since 1997 or so, but its _Pragma is broken. */ -# /* See https://gcc.godbolt.org/z/XWhU6J */ -# define RBIMPL_CAST(expr) (expr) -# pragma GCC diagnostic ignored "-Wold-style-cast" - -#elif RBIMPL_HAS_WARNING("-Wold-style-cast") -# define RBIMPL_CAST(expr) \ - RBIMPL_WARNING_PUSH() \ - RBIMPL_WARNING_IGNORED(-Wold-style-cast) \ - (expr) \ - RBIMPL_WARNING_POP() - -#else -# define RBIMPL_CAST(expr) (expr) -#endif - -#endif /* RBIMPL_CAST_H */ diff --git a/libs/libruby/ruby/internal/compiler_is.h b/libs/libruby/ruby/internal/compiler_is.h deleted file mode 100644 index 7070b03..0000000 --- a/libs/libruby/ruby/internal/compiler_is.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef RBIMPL_COMPILER_IS_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_COMPILER_IS_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_COMPILER_IS. - */ - -/** - * @brief Checks if the compiler is of given brand. - * @param cc Compiler brand, like `MSVC`. - * @retval true It is. - * @retval false It isn't. - */ -#define RBIMPL_COMPILER_IS(cc) RBIMPL_COMPILER_IS_ ## cc - -#include "ruby/internal/compiler_is/apple.h" -#include "ruby/internal/compiler_is/clang.h" -#include "ruby/internal/compiler_is/gcc.h" -#include "ruby/internal/compiler_is/intel.h" -#include "ruby/internal/compiler_is/msvc.h" -#include "ruby/internal/compiler_is/sunpro.h" -/* :TODO: Other possible compilers to support: - * - * - IBM XL: recent XL are clang-backended so some tweaks like we do for - * Apple's might be needed. - * - * - ARM's armclang: ditto, it can be clang-backended. */ - -#endif /* RBIMPL_COMPILER_IS_H */ diff --git a/libs/libruby/ruby/internal/compiler_is/apple.h b/libs/libruby/ruby/internal/compiler_is/apple.h deleted file mode 100644 index a81f1f2..0000000 --- a/libs/libruby/ruby/internal/compiler_is/apple.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef RBIMPL_COMPILER_IS_APPLE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_COMPILER_IS_APPLE_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines RBIMPL_COMPILER_IS_Apple. - * - * Apple ships clang. Problem is, its `__clang_major__` etc. are not the - * upstream LLVM version, but XCode's. We have to think Apple's is distinct - * from LLVM's, when it comes to compiler detection business in this header - * file. - */ -#if ! defined(__clang__) -# define RBIMPL_COMPILER_IS_Apple 0 - -#elif ! defined(__apple_build_version__) -# define RBIMPL_COMPILER_IS_Apple 0 - -#else -# define RBIMPL_COMPILER_IS_Apple 1 -# define RBIMPL_COMPILER_VERSION_MAJOR __clang_major__ -# define RBIMPL_COMPILER_VERSION_MINOR __clang_minor__ -# define RBIMPL_COMPILER_VERSION_PATCH __clang_patchlevel__ -#endif - -#endif /* RBIMPL_COMPILER_IS_APPLE_H */ diff --git a/libs/libruby/ruby/internal/compiler_is/clang.h b/libs/libruby/ruby/internal/compiler_is/clang.h deleted file mode 100644 index 169ff78..0000000 --- a/libs/libruby/ruby/internal/compiler_is/clang.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef RBIMPL_COMPILER_IS_CLANG_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_COMPILER_IS_CLANG_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines RBIMPL_COMPILER_IS_Clang. - */ -#include "ruby/internal/compiler_is/apple.h" - -#if ! defined(__clang__) -# define RBIMPL_COMPILER_IS_Clang 0 - -#elif RBIMPL_COMPILER_IS(Apple) -# define RBIMPL_COMPILER_IS_Clang 0 - -#else -# define RBIMPL_COMPILER_IS_Clang 1 -# define RBIMPL_COMPILER_VERSION_MAJOR __clang_major__ -# define RBIMPL_COMPILER_VERSION_MINOR __clang_minor__ -# define RBIMPL_COMPILER_VERSION_PATCH __clang_patchlevel__ -#endif - -#endif /* RBIMPL_COMPILER_IS_CLANG_H */ diff --git a/libs/libruby/ruby/internal/compiler_is/gcc.h b/libs/libruby/ruby/internal/compiler_is/gcc.h deleted file mode 100644 index accc80e..0000000 --- a/libs/libruby/ruby/internal/compiler_is/gcc.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef RBIMPL_COMPILER_IS_GCC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_COMPILER_IS_GCC_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines RBIMPL_COMPILER_IS_GCC. - */ -#include "ruby/internal/compiler_is/apple.h" -#include "ruby/internal/compiler_is/clang.h" -#include "ruby/internal/compiler_is/intel.h" - -#if ! defined(__GNUC__) -# define RBIMPL_COMPILER_IS_GCC 0 - -#elif RBIMPL_COMPILER_IS(Apple) -# define RBIMPL_COMPILER_IS_GCC 0 - -#elif RBIMPL_COMPILER_IS(Clang) -# define RBIMPL_COMPILER_IS_GCC 0 - -#elif RBIMPL_COMPILER_IS(Intel) -# define RBIMPL_COMPILER_IS_GCC 0 - -#else -# define RBIMPL_COMPILER_IS_GCC 1 -# define RBIMPL_COMPILER_VERSION_MAJOR __GNUC__ -# define RBIMPL_COMPILER_VERSION_MINOR __GNUC_MINOR__ -# define RBIMPL_COMPILER_VERSION_PATCH __GNUC_PATCHLEVEL__ -#endif - -#endif /* RBIMPL_COMPILER_IS_GCC_H */ diff --git a/libs/libruby/ruby/internal/compiler_is/intel.h b/libs/libruby/ruby/internal/compiler_is/intel.h deleted file mode 100644 index 377946a..0000000 --- a/libs/libruby/ruby/internal/compiler_is/intel.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef RBIMPL_COMPILER_IS_INTEL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_COMPILER_IS_INTEL_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines RBIMPL_COMPILER_IS_Intel. - */ -#if ! defined(__INTEL_COMPILER) -# define RBIMPL_COMPILER_IS_Intel 0 - -#elif ! defined(__INTEL_COMPILER_UPDATE) -# define RBIMPL_COMPILER_IS_Intel 1 -# /* __INTEL_COMPILER = XXYZ */ -# define RBIMPL_COMPILER_VERSION_MAJOR (__INTEL_COMPILER / 100) -# define RBIMPL_COMPILER_VERSION_MINOR (__INTEL_COMPILER % 100 / 10) -# define RBIMPL_COMPILER_VERSION_PATCH (__INTEL_COMPILER % 10) - -#else -# define RBIMPL_COMPILER_IS_Intel 1 -# /* __INTEL_COMPILER = XXYZ */ -# define RBIMPL_COMPILER_VERSION_MAJOR (__INTEL_COMPILER / 100) -# define RBIMPL_COMPILER_VERSION_MINOR (__INTEL_COMPILER % 100 / 10) -# define RBIMPL_COMPILER_VERSION_PATCH __INTEL_COMPILER_UPDATE -#endif - -#endif /* RBIMPL_COMPILER_IS_INTEL_H */ diff --git a/libs/libruby/ruby/internal/compiler_is/msvc.h b/libs/libruby/ruby/internal/compiler_is/msvc.h deleted file mode 100644 index 8a864ea..0000000 --- a/libs/libruby/ruby/internal/compiler_is/msvc.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef RBIMPL_COMPILER_IS_MSVC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_COMPILER_IS_MSVC_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines RBIMPL_COMPILER_IS_MSVC. - */ -#include "ruby/internal/compiler_is/clang.h" -#include "ruby/internal/compiler_is/intel.h" - -#if ! defined(_MSC_VER) -# define RBIMPL_COMPILER_IS_MSVC 0 - -#elif RBIMPL_COMPILER_IS(Clang) -# define RBIMPL_COMPILER_IS_MSVC 0 - -#elif RBIMPL_COMPILER_IS(Intel) -# define RBIMPL_COMPILER_IS_MSVC 0 - -#elif _MSC_VER >= 1400 -# define RBIMPL_COMPILER_IS_MSVC 1 -# /* _MSC_FULL_VER = XXYYZZZZZ */ -# define RBIMPL_COMPILER_VERSION_MAJOR (_MSC_FULL_VER / 10000000) -# define RBIMPL_COMPILER_VERSION_MINOR (_MSC_FULL_VER % 10000000 / 100000) -# define RBIMPL_COMPILER_VERSION_PATCH (_MSC_FULL_VER % 100000) - -#elif defined(_MSC_FULL_VER) -# define RBIMPL_COMPILER_IS_MSVC 1 -# /* _MSC_FULL_VER = XXYYZZZZ */ -# define RBIMPL_COMPILER_VERSION_MAJOR (_MSC_FULL_VER / 1000000) -# define RBIMPL_COMPILER_VERSION_MINOR (_MSC_FULL_VER % 1000000 / 10000) -# define RBIMPL_COMPILER_VERSION_PATCH (_MSC_FULL_VER % 10000) - -#else -# define RBIMPL_COMPILER_IS_MSVC 1 -# /* _MSC_VER = XXYY */ -# define RBIMPL_COMPILER_VERSION_MAJOR (_MSC_VER / 100) -# define RBIMPL_COMPILER_VERSION_MINOR (_MSC_VER % 100) -# define RBIMPL_COMPILER_VERSION_PATCH 0 -#endif - -#endif /* RBIMPL_COMPILER_IS_MSVC_H */ diff --git a/libs/libruby/ruby/internal/compiler_is/sunpro.h b/libs/libruby/ruby/internal/compiler_is/sunpro.h deleted file mode 100644 index c11c845..0000000 --- a/libs/libruby/ruby/internal/compiler_is/sunpro.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef RBIMPL_COMPILER_IS_SUNPRO_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_COMPILER_IS_SUNPRO_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines RBIMPL_COMPILER_IS_SunPro. - */ -#if ! (defined(__SUNPRO_C) || defined(__SUNPRO_CC)) -# define RBIMPL_COMPILER_IS_SunPro 0 - -#elif defined(__SUNPRO_C) && __SUNPRO_C >= 0x5100 -# define RBIMPL_COMPILER_IS_SunPro 1 -# /* __SUNPRO_C = 0xXYYZ */ -# define RBIMPL_COMPILER_VERSION_MAJOR (__SUNPRO_C >> 12) -# define RBIMPL_COMPILER_VERSION_MINOR ((__SUNPRO_C >> 8 & 0xF) * 10 + (__SUNPRO_C >> 4 & 0xF)) -# define RBIMPL_COMPILER_VERSION_PATCH (__SUNPRO_C & 0xF) - -#elif defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5100 -# define RBIMPL_COMPILER_IS_SunPro 1 -# /* __SUNPRO_CC = 0xXYYZ */ -# define RBIMPL_COMPILER_VERSION_MAJOR (__SUNPRO_CC >> 12) -# define RBIMPL_COMPILER_VERSION_MINOR ((__SUNPRO_CC >> 8 & 0xF) * 10 + (__SUNPRO_CC >> 4 & 0xF)) -# define RBIMPL_COMPILER_VERSION_PATCH (__SUNPRO_CC & 0xF) - -#elif defined(__SUNPRO_C) -# define RBIMPL_COMPILER_IS_SunPro 1 -# /* __SUNPRO_C = 0xXYZ */ -# define RBIMPL_COMPILER_VERSION_MAJOR (__SUNPRO_C >> 8) -# define RBIMPL_COMPILER_VERSION_MINOR (__SUNPRO_C >> 4 & 0xF) -# define RBIMPL_COMPILER_VERSION_PATCH (__SUNPRO_C & 0xF) - -#else -# define RBIMPL_COMPILER_IS_SunPro 1 -# /* __SUNPRO_CC = 0xXYZ */ -# define RBIMPL_COMPILER_VERSION_MAJOR (__SUNPRO_CC >> 8) -# define RBIMPL_COMPILER_VERSION_MINOR (__SUNPRO_CC >> 4 & 0xF) -# define RBIMPL_COMPILER_VERSION_PATCH (__SUNPRO_CC & 0xF) -#endif - -#endif /* RBIMPL_COMPILER_IS_SUNPRO_H */ diff --git a/libs/libruby/ruby/internal/compiler_since.h b/libs/libruby/ruby/internal/compiler_since.h deleted file mode 100644 index 1929032..0000000 --- a/libs/libruby/ruby/internal/compiler_since.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef RBIMPL_COMPILER_SINCE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_COMPILER_SINCE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_COMPILER_SINCE. - */ -#include "ruby/internal/compiler_is.h" - -/** - * @brief Checks if the compiler is of given brand and is newer than or equal - * to the passed version. - * @param cc Compiler brand, like `MSVC`. - * @param x Major version. - * @param y Minor version. - * @param z Patchlevel. - * @retval true cc >= x.y.z. - * @retval false otherwise. - */ -#define RBIMPL_COMPILER_SINCE(cc, x, y, z) \ - (RBIMPL_COMPILER_IS(cc) && \ - ((RBIMPL_COMPILER_VERSION_MAJOR > (x)) || \ - ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && \ - ((RBIMPL_COMPILER_VERSION_MINOR > (y)) || \ - ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && \ - (RBIMPL_COMPILER_VERSION_PATCH >= (z))))))) - -/** - * @brief Checks if the compiler is of given brand and is older than the - * passed version. - * @param cc Compiler brand, like `MSVC`. - * @param x Major version. - * @param y Minor version. - * @param z Patchlevel. - * @retval true cc < x.y.z. - * @retval false otherwise. - */ -#define RBIMPL_COMPILER_BEFORE(cc, x, y, z) \ - (RBIMPL_COMPILER_IS(cc) && \ - ((RBIMPL_COMPILER_VERSION_MAJOR < (x)) || \ - ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && \ - ((RBIMPL_COMPILER_VERSION_MINOR < (y)) || \ - ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && \ - (RBIMPL_COMPILER_VERSION_PATCH < (z))))))) - -#endif /* RBIMPL_COMPILER_SINCE_H */ diff --git a/libs/libruby/ruby/internal/config.h b/libs/libruby/ruby/internal/config.h deleted file mode 100644 index 99d0fef..0000000 --- a/libs/libruby/ruby/internal/config.h +++ /dev/null @@ -1,155 +0,0 @@ -#ifndef RBIMPL_CONFIG_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_CONFIG_H -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Thin wrapper to ruby/config.h - */ -#include "ruby/config.h" - -#ifdef RUBY_EXTCONF_H -#include RUBY_EXTCONF_H -#endif - -#include "ruby/internal/compiler_since.h" - -#undef HAVE_PROTOTYPES -#define HAVE_PROTOTYPES 1 - -#undef HAVE_STDARG_PROTOTYPES -#define HAVE_STDARG_PROTOTYPES 1 - -#undef TOKEN_PASTE -#define TOKEN_PASTE(x, y) x##y - -#if defined(__cplusplus) -#/* __builtin_choose_expr and __builtin_types_compatible aren't available -# * on C++. See https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html */ -#undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P -#undef HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P - -/* HAVE_VA_ARGS_MACRO is for C. C++ situations might be different. */ -#undef HAVE_VA_ARGS_MACRO -#if __cplusplus >= 201103L -#define HAVE_VA_ARGS_MACRO -#elif defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__ -#define HAVE_VA_ARGS_MACRO -#elif defined(__INTEL_CXX11_MODE__) -#define HAVE_VA_ARGS_MACRO -#elif RBIMPL_COMPILER_SINCE(MSVC, 16, 0, 0) -#define HAVE_VA_ARGS_MACRO -#else -#/* NG, not known. */ -#endif -#endif - -#if RBIMPL_COMPILER_BEFORE(GCC, 4, 9, 0) -#/* See https://bugs.ruby-lang.org/issues/14221 */ -#undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P -#endif - -#if RBIMPL_COMPILER_BEFORE(GCC, 5, 0, 0) -#/* GCC 4.9.2 reportedly has this feature and is broken. The function is not -# * officially documented below. Seems we should not use it. -# * https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Other-Builtins.html */ -#undef HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN -#endif - -#if defined(__SUNPRO_CC) -#/* Oracle Developer Studio 12.5: GCC compatibility guide says it supports -# * statement expressions. But to our knowledge they support the extension -# * only for C and not for C++. Prove me wrong. Am happy to support them if -# * there is a way. */ -#undef HAVE_STMT_AND_DECL_IN_EXPR -#endif - -#ifndef STRINGIZE0 -#define STRINGIZE(expr) STRINGIZE0(expr) -#define STRINGIZE0(expr) #expr -#endif - -#ifdef AC_APPLE_UNIVERSAL_BUILD -#undef WORDS_BIGENDIAN -#ifdef __BIG_ENDIAN__ -#define WORDS_BIGENDIAN -#endif -#endif - -#ifndef DLEXT_MAXLEN -#define DLEXT_MAXLEN 4 -#endif - -#ifndef RUBY_PLATFORM -#define RUBY_PLATFORM "unknown-unknown" -#endif - -#ifdef UNALIGNED_WORD_ACCESS -#/* Take that. */ -#elif defined(__i386) -#define UNALIGNED_WORD_ACCESS 1 -#elif defined(__i386__) -#define UNALIGNED_WORD_ACCESS 1 -#elif defined(_M_IX86) -#define UNALIGNED_WORD_ACCESS 1 -#elif defined(__x86_64) -#define UNALIGNED_WORD_ACCESS 1 -#elif defined(__x86_64__) -#define UNALIGNED_WORD_ACCESS 1 -#elif defined(_M_AMD64) -#define UNALIGNED_WORD_ACCESS 1 -#elif defined(__powerpc64__) -#define UNALIGNED_WORD_ACCESS 1 -#elif defined(__POWERPC__) // __POWERPC__ is defined for ppc and ppc64 on Darwin -#define UNALIGNED_WORD_ACCESS 1 -#elif defined(__aarch64__) -#define UNALIGNED_WORD_ACCESS 1 -#elif defined(__mc68020__) -#define UNALIGNED_WORD_ACCESS 1 -#else -#define UNALIGNED_WORD_ACCESS 0 -#endif - -/* Detection of __VA_OPT__ */ -#if !defined(HAVE_VA_ARGS_MACRO) -#undef HAVE___VA_OPT__ - -#elif defined(__cplusplus) -#if __cplusplus > 201703L -#define HAVE___VA_OPT__ -#else -#undef HAVE___VA_OPT__ -#endif -#else -#/* Idea taken from: https://stackoverflow.com/a/48045656 */ -#define RBIMPL_TEST3(q, w, e, ...) e -#define RBIMPL_TEST2(...) RBIMPL_TEST3(__VA_OPT__(, ), 1, 0, 0) -#define RBIMPL_TEST1() RBIMPL_TEST2("ruby") -#if RBIMPL_TEST1() -#define HAVE___VA_OPT__ -#else -#undef HAVE___VA_OPT__ -#endif -#undef RBIMPL_TEST1 -#undef RBIMPL_TEST2 -#undef RBIMPL_TEST3 -#endif /* HAVE_VA_ARGS_MACRO */ - -#ifndef USE_RVARGC -#define USE_RVARGC 1 -#endif - -#endif /* RBIMPL_CONFIG_H */ diff --git a/libs/libruby/ruby/internal/constant_p.h b/libs/libruby/ruby/internal/constant_p.h deleted file mode 100644 index 92d69cb..0000000 --- a/libs/libruby/ruby/internal/constant_p.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef RBIMPL_CONSTANT_P_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_CONSTANT_P_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_CONSTANT_P. - * - * Note that __builtin_constant_p can be applicable inside of inline functions, - * according to GCC manual. Clang lacks that feature, though. - * - * @see https://bugs.llvm.org/show_bug.cgi?id=4898 - * @see https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html - */ -#include "ruby/internal/has/builtin.h" - -/** Wraps (or simulates) `__builtin_constant_p` */ -#if RBIMPL_HAS_BUILTIN(__builtin_constant_p) -# define RBIMPL_CONSTANT_P(expr) __builtin_constant_p(expr) -#else -# define RBIMPL_CONSTANT_P(expr) 0 -#endif - -#endif /* RBIMPL_CONSTANT_P_H */ diff --git a/libs/libruby/ruby/internal/core.h b/libs/libruby/ruby/internal/core.h deleted file mode 100644 index 3f4561c..0000000 --- a/libs/libruby/ruby/internal/core.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef RBIMPL_CORE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_CORE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Core data structures, definitions and manipulations. - */ -#include "ruby/internal/core/rarray.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/core/rbignum.h" -#include "ruby/internal/core/rclass.h" -#include "ruby/internal/core/rdata.h" -#include "ruby/internal/core/rfile.h" -#include "ruby/internal/core/rhash.h" -#include "ruby/internal/core/robject.h" -#include "ruby/internal/core/rregexp.h" -#include "ruby/internal/core/rstring.h" -#include "ruby/internal/core/rstruct.h" -#include "ruby/internal/core/rtypeddata.h" -#endif /* RBIMPL_CORE_H */ diff --git a/libs/libruby/ruby/internal/core/rarray.h b/libs/libruby/ruby/internal/core/rarray.h deleted file mode 100644 index c3bb40b..0000000 --- a/libs/libruby/ruby/internal/core/rarray.h +++ /dev/null @@ -1,585 +0,0 @@ -#ifndef RBIMPL_RARRAY_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RARRAY_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines struct ::RArray. - */ -#include "ruby/internal/arithmetic/long.h" -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/constexpr.h" -#include "ruby/internal/attr/maybe_unused.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/fl_type.h" -#include "ruby/internal/rgengc.h" -#include "ruby/internal/stdbool.h" -#include "ruby/internal/value.h" -#include "ruby/internal/value_type.h" -#include "ruby/assert.h" - -/** - * @private - * @warning Do not touch this macro. - * @warning It is an implementation detail. - * @warning The value of this macro must match for ruby itself and all - * extension libraries, otherwise serious memory corruption shall - * occur. - */ -#ifndef USE_TRANSIENT_HEAP -# define USE_TRANSIENT_HEAP 1 -#endif - -/** - * Convenient casting macro. - * - * @param obj An object, which is in fact an ::RArray. - * @return The passed object casted to ::RArray. - */ -#define RARRAY(obj) RBIMPL_CAST((struct RArray *)(obj)) -/** @cond INTERNAL_MACRO */ -#define RARRAY_EMBED_FLAG RARRAY_EMBED_FLAG -#define RARRAY_EMBED_LEN_MASK RARRAY_EMBED_LEN_MASK -#define RARRAY_EMBED_LEN_MAX RARRAY_EMBED_LEN_MAX -#define RARRAY_EMBED_LEN_SHIFT RARRAY_EMBED_LEN_SHIFT -#if USE_TRANSIENT_HEAP -# define RARRAY_TRANSIENT_FLAG RARRAY_TRANSIENT_FLAG -#else -# define RARRAY_TRANSIENT_FLAG 0 -#endif -/** @endcond */ -#define RARRAY_LEN rb_array_len /**< @alias{rb_array_len} */ -#define RARRAY_CONST_PTR rb_array_const_ptr /**< @alias{rb_array_const_ptr} */ -#define RARRAY_CONST_PTR_TRANSIENT rb_array_const_ptr_transient /**< @alias{rb_array_const_ptr_transient} */ - -/** @cond INTERNAL_MACRO */ -#if defined(__fcc__) || defined(__fcc_version) || \ - defined(__FCC__) || defined(__FCC_VERSION) -/* workaround for old version of Fujitsu C Compiler (fcc) */ -# define FIX_CONST_VALUE_PTR(x) ((const VALUE *)(x)) -#else -# define FIX_CONST_VALUE_PTR(x) (x) -#endif - -#define RARRAY_EMBED_LEN RARRAY_EMBED_LEN -#define RARRAY_LENINT RARRAY_LENINT -#define RARRAY_TRANSIENT_P RARRAY_TRANSIENT_P -#define RARRAY_ASET RARRAY_ASET -#define RARRAY_PTR RARRAY_PTR -/** @endcond */ - -/** - * @private - * - * Bits that you can set to ::RBasic::flags. - * - * @warning These enums are not the only bits we use for arrays. - * - * @internal - * - * Unlike strings, flag usages for arrays are scattered across the entire - * source codes. @shyouhei doesn't know the complete list. But what is listed - * here is at least incomplete. - */ -enum ruby_rarray_flags { - /** - * This flag has something to do with memory footprint. If the array is - * "small" enough, ruby tries to be creative to abuse padding bits of - * struct ::RArray for storing its contents. This flag denotes that - * situation. - * - * @warning This bit has to be considered read-only. Setting/clearing - * this bit without corresponding fix up must cause immediate - * SEGV. Also, internal structures of an array change - * dynamically and transparently throughout of its lifetime. - * Don't assume it being persistent. - * - * @internal - * - * 3rd parties must not be aware that there even is more than one way to - * store array elements. It was a bad idea to expose this to them. - */ - RARRAY_EMBED_FLAG = RUBY_FL_USER1, - - /* RUBY_FL_USER2 is for ELTS_SHARED */ - - /** - * When an array employs embedded strategy (see ::RARRAY_EMBED_FLAG), these - * bits are used to store the number of elements actually filled into - * ::RArray::ary. - * - * @internal - * - * 3rd parties must not be aware that there even is more than one way to - * store array elements. It was a bad idea to expose this to them. - */ -#if USE_RVARGC - RARRAY_EMBED_LEN_MASK = RUBY_FL_USER9 | RUBY_FL_USER8 | RUBY_FL_USER7 | RUBY_FL_USER6 | - RUBY_FL_USER5 | RUBY_FL_USER4 | RUBY_FL_USER3 -#else - RARRAY_EMBED_LEN_MASK = RUBY_FL_USER4 | RUBY_FL_USER3 -#endif - -#if USE_TRANSIENT_HEAP - , - - /** - * This flag has something to do with an array's "transiency". A transient - * array is an array of young generation (of generational GC), who stores - * its elements inside of dedicated memory pages called a transient heap. - * Not every young generation share that storage scheme, but elder - * generations must no join. - * - * @internal - * - * 3rd parties must not be aware that there even is more than one way to - * store array elements. It was a bad idea to expose this to them. - */ - RARRAY_TRANSIENT_FLAG = RUBY_FL_USER13 -#endif -}; - -/** - * This is an enum because GDB wants it (rather than a macro). People need not - * bother. - */ -enum ruby_rarray_consts { - /** Where ::RARRAY_EMBED_LEN_MASK resides. */ - RARRAY_EMBED_LEN_SHIFT = RUBY_FL_USHIFT + 3 - -#if !USE_RVARGC - , - - /** Max possible number elements that can be embedded. */ - RARRAY_EMBED_LEN_MAX = RBIMPL_EMBED_LEN_MAX_OF(VALUE) -#endif -}; - -/** Ruby's array. */ -struct RArray { - - /** Basic part, including flags and class. */ - struct RBasic basic; - - /** Array's specific fields. */ - union { - - /** - * Arrays that use separated memory region for elements use this - * pattern. - */ - struct { - - /** Number of elements of the array. */ - long len; - - /** Auxiliary info. */ - union { - - /** - * Capacity of `*ptr`. A continuous memory region of at least - * `capa` elements is expected to exist at `*ptr`. This can be - * bigger than `len`. - */ - long capa; - - /** - * Parent of the array. Nowadays arrays can share their - * backend memory regions each other, constructing gigantic - * nest of objects. This situation is called "shared", and - * this is the field to control such properties. - */ -#if defined(__clang__) /* <- clang++ is sane */ || \ - !defined(__cplusplus) /* <- C99 is sane */ || \ - (__cplusplus > 199711L) /* <- C++11 is sane */ - const -#endif - VALUE shared_root; - } aux; - - /** - * Pointer to the C array that holds the elements of the array. In - * the old days each array had dedicated memory regions. That is - * no longer true today, but there still are arrays of such - * properties. This field could be used to point such things. - */ - const VALUE *ptr; - } heap; - - /** - * Embedded elements. When an array is short enough, it uses this area - * to store its elements. In this case the length is encoded into the - * flags. - */ -#if USE_RVARGC - /* This is a length 1 array because: - * 1. GCC has a bug that does not optimize C flexible array members - * (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102452) - * 2. Zero length arrays are not supported by all compilers - */ - const VALUE ary[1]; -#else - const VALUE ary[RARRAY_EMBED_LEN_MAX]; -#endif - } as; -}; - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * @private - * - * Declares a section of code where raw pointers are used. This is an - * implementation detail of #RARRAY_PTR_USE. People don't use it directly. - * - * @param[in] ary An object of ::RArray. - * @return `ary`'s backend C array. - */ -VALUE *rb_ary_ptr_use_start(VALUE ary); - -/** - * @private - * - * Declares an end of a section formerly started by rb_ary_ptr_use_start(). - * This is an implementation detail of #RARRAY_PTR_USE. People don't use it - * directly. - * - * @param[in] a An object of ::RArray. - */ -void rb_ary_ptr_use_end(VALUE a); - -#if USE_TRANSIENT_HEAP -/** - * Destructively converts an array of transient backend into ordinal one. - * - * @param[out] a An object of ::RArray. - * @pre `a` must be a transient array. - * @post `a` gets out of transient heap, destructively. - */ -void rb_ary_detransient(VALUE a); -#endif -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries the length of the array. - * - * @param[in] ary Array in question. - * @return Its number of elements. - * @pre `ary` must be an instance of ::RArray, and must has its - * ::RARRAY_EMBED_FLAG flag set. - * - * @internal - * - * This was a macro before. It was inevitable to be public, since macros are - * global constructs. But should it be forever? Now that it is a function, - * @shyouhei thinks it could just be eliminated, hidden into implementation - * details. - */ -static inline long -RARRAY_EMBED_LEN(VALUE ary) -{ - RBIMPL_ASSERT_TYPE(ary, RUBY_T_ARRAY); - RBIMPL_ASSERT_OR_ASSUME(RB_FL_ANY_RAW(ary, RARRAY_EMBED_FLAG)); - - VALUE f = RBASIC(ary)->flags; - f &= RARRAY_EMBED_LEN_MASK; - f >>= RARRAY_EMBED_LEN_SHIFT; - return RBIMPL_CAST((long)f); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -/** - * Queries the length of the array. - * - * @param[in] a Array in question. - * @return Its number of elements. - * @pre `a` must be an instance of ::RArray. - */ -static inline long -rb_array_len(VALUE a) -{ - RBIMPL_ASSERT_TYPE(a, RUBY_T_ARRAY); - - if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) { - return RARRAY_EMBED_LEN(a); - } - else { - return RARRAY(a)->as.heap.len; - } -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * Identical to rb_array_len(), except it differs for the return type. - * - * @param[in] ary Array in question. - * @exception rb_eRangeError Too long. - * @return Its number of elements. - * @pre `ary` must be an instance of ::RArray. - * - * @internal - * - * This API seems redundant but has actual usages. - */ -static inline int -RARRAY_LENINT(VALUE ary) -{ - return rb_long2int(RARRAY_LEN(ary)); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries if the array is a transient array. - * - * @param[in] ary Array in question. - * @retval true Yes it is. - * @retval false No it isn't. - * @pre `ary` must be an instance of ::RArray. - * - * @internal - * - * @shyouhei doesn't understand the benefit of this function called from - * extension libraries. - */ -static inline bool -RARRAY_TRANSIENT_P(VALUE ary) -{ - RBIMPL_ASSERT_TYPE(ary, RUBY_T_ARRAY); - -#if USE_TRANSIENT_HEAP - return RB_FL_ANY_RAW(ary, RARRAY_TRANSIENT_FLAG); -#else - return false; -#endif -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -/** - * @private - * - * This is an implementation detail of RARRAY_PTR(). People do not use it - * directly. - * - * @param[in] a An object of ::RArray. - * @return Its backend storage. - */ -static inline const VALUE * -rb_array_const_ptr_transient(VALUE a) -{ - RBIMPL_ASSERT_TYPE(a, RUBY_T_ARRAY); - - if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) { - return FIX_CONST_VALUE_PTR(RARRAY(a)->as.ary); - } - else { - return FIX_CONST_VALUE_PTR(RARRAY(a)->as.heap.ptr); - } -} - -#if ! USE_TRANSIENT_HEAP -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -#endif -/** - * @private - * - * This is an implementation detail of RARRAY_PTR(). People do not use it - * directly. - * - * @param[in] a An object of ::RArray. - * @return Its backend storage. - * @post `a` is not a transient array. - */ -static inline const VALUE * -rb_array_const_ptr(VALUE a) -{ - RBIMPL_ASSERT_TYPE(a, RUBY_T_ARRAY); - -#if USE_TRANSIENT_HEAP - if (RARRAY_TRANSIENT_P(a)) { - rb_ary_detransient(a); - } -#endif - return rb_array_const_ptr_transient(a); -} - -/** - * @private - * - * This is an implementation detail of #RARRAY_PTR_USE. People do not use it - * directly. - * - * @param[in] a An object of ::RArray. - * @param[in] allow_transient Whether `a` can be transient or not. - * @return Its backend storage. - * @post `a` is not a transient array unless `allow_transient`. - */ -static inline VALUE * -rb_array_ptr_use_start(VALUE a, - RBIMPL_ATTR_MAYBE_UNUSED() - int allow_transient) -{ - RBIMPL_ASSERT_TYPE(a, RUBY_T_ARRAY); - -#if USE_TRANSIENT_HEAP - if (!allow_transient) { - if (RARRAY_TRANSIENT_P(a)) { - rb_ary_detransient(a); - } - } -#endif - - return rb_ary_ptr_use_start(a); -} - -/** - * @private - * - * This is an implementation detail of #RARRAY_PTR_USE. People do not use it - * directly. - * - * @param[in] a An object of ::RArray. - * @param[in] allow_transient Whether `a` can be transient or not. - */ -static inline void -rb_array_ptr_use_end(VALUE a, - RBIMPL_ATTR_MAYBE_UNUSED() - int allow_transient) -{ - RBIMPL_ASSERT_TYPE(a, RUBY_T_ARRAY); - rb_ary_ptr_use_end(a); -} - -/** - * @private - * - * This is an implementation detail of #RARRAY_PTR_USE. People do not use it - * directly. - */ -#define RBIMPL_RARRAY_STMT(flag, ary, var, expr) do { \ - RBIMPL_ASSERT_TYPE((ary), RUBY_T_ARRAY); \ - const VALUE rbimpl_ary = (ary); \ - VALUE *var = rb_array_ptr_use_start(rbimpl_ary, (flag)); \ - expr; \ - rb_array_ptr_use_end(rbimpl_ary, (flag)); \ -} while (0) - -/** - * @private - * - * This is an implementation detail of #RARRAY_PTR_USE. People do not use it - * directly. - */ -#define RARRAY_PTR_USE_END(a) rb_array_ptr_use_end(a, 0) - -/** - * Declares a section of code where raw pointers are used. In case you need to - * touch the raw C array instead of polite CAPIs, then that operation shall be - * wrapped using this macro. - * - * ```CXX - * const auto ary = rb_eval_string("[...]"); - * const auto len = RARRAY_LENINT(ary); - * const auto symwrite = rb_intern("write"); - * - * RARRAY_PTR_USE(ary, ptr, { - * rb_funcallv(rb_stdout, symwrite, len, ptr); - * }); - * ``` - * - * @param ary An object of ::RArray. - * @param ptr_name A variable name which points the C array in `expr`. - * @param expr The expression that touches `ptr_name`. - * - * @internal - * - * For historical reasons use of this macro is not enforced. There are - * extension libraries in the wild which call RARRAY_PTR() without it. We want - * them use it... Maybe some transition path can be implemented later. - */ -#define RARRAY_PTR_USE(ary, ptr_name, expr) \ - RBIMPL_RARRAY_STMT(0, ary, ptr_name, expr) - -/** - * Identical to #RARRAY_PTR_USE, except the pointer can be a transient one. - * - * @param ary An object of ::RArray. - * @param ptr_name A variable name which points the C array in `expr`. - * @param expr The expression that touches `ptr_name`. - */ -#define RARRAY_PTR_USE_TRANSIENT(ary, ptr_name, expr) \ - RBIMPL_RARRAY_STMT(1, ary, ptr_name, expr) - -/** - * Wild use of a C pointer. This function accesses the backend storage - * directly. This is slower than #RARRAY_PTR_USE_TRANSIENT. It exercises - * extra manoeuvres to protect our generational GC. Use of this function is - * considered archaic. Use a modern way instead. - * - * @param[in] ary An object of ::RArray. - * @return The backend C array. - * - * @internal - * - * That said... there are extension libraries in the wild who uses it. We - * cannot but continue supporting. - */ -static inline VALUE * -RARRAY_PTR(VALUE ary) -{ - RBIMPL_ASSERT_TYPE(ary, RUBY_T_ARRAY); - - VALUE tmp = RB_OBJ_WB_UNPROTECT_FOR(ARRAY, ary); - return RBIMPL_CAST((VALUE *)RARRAY_CONST_PTR(tmp)); -} - -/** - * Assigns an object in an array. - * - * @param[out] ary Destination array object. - * @param[in] i Index of `ary`. - * @param[in] v Arbitrary ruby object. - * @pre `ary` must be an instance of ::RArray. - * @pre `ary`'s length must be longer than or equal to `i`. - * @pre `i` must be greater than or equal to zero. - * @post `ary`'s `i`th element is set to `v`. - */ -static inline void -RARRAY_ASET(VALUE ary, long i, VALUE v) -{ - RARRAY_PTR_USE_TRANSIENT(ary, ptr, - RB_OBJ_WRITE(ary, &ptr[i], v)); -} - -/** - * @deprecated - * - * :FIXME: we want to convert RARRAY_AREF into an inline function (to add rooms - * for more sanity checks). However there were situations where the address of - * this macro is taken i.e. &RARRAY_AREF(...). They cannot be possible if this - * is not a macro. Such usages are abuse, and we eliminated them internally. - * However we are afraid of similar things to remain in the wild. This macro - * remains as it is due to that. If we could warn such usages we can set a - * transition path, but currently no way is found to do so. - */ -#define RARRAY_AREF(a, i) RARRAY_CONST_PTR_TRANSIENT(a)[i] - -#endif /* RBIMPL_RARRAY_H */ diff --git a/libs/libruby/ruby/internal/core/rbasic.h b/libs/libruby/ruby/internal/core/rbasic.h deleted file mode 100644 index 4617f74..0000000 --- a/libs/libruby/ruby/internal/core/rbasic.h +++ /dev/null @@ -1,158 +0,0 @@ -#ifndef RBIMPL_RBASIC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RBASIC_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines struct ::RBasic. - */ -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/constexpr.h" -#include "ruby/internal/attr/forceinline.h" -#include "ruby/internal/attr/noalias.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/special_consts.h" -#include "ruby/internal/value.h" -#include "ruby/assert.h" - -/** - * Convenient casting macro. - * - * @param obj Arbitrary Ruby object. - * @return The passed object casted to ::RBasic. - */ -#define RBASIC(obj) RBIMPL_CAST((struct RBasic *)(obj)) -/** @cond INTERNAL_MACRO */ -#define RBASIC_CLASS RBASIC_CLASS -#define RBIMPL_RVALUE_EMBED_LEN_MAX 3 -#define RVALUE_EMBED_LEN_MAX RVALUE_EMBED_LEN_MAX -#define RBIMPL_EMBED_LEN_MAX_OF(T) \ - RBIMPL_CAST((int)(sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]) / (sizeof(T)))) -/** @endcond */ - -/** - * This is an enum because GDB wants it (rather than a macro). People need not - * bother. - */ -enum ruby_rvalue_flags { - /** Max possible number of objects that can be embedded. */ - RVALUE_EMBED_LEN_MAX = RBIMPL_RVALUE_EMBED_LEN_MAX -}; - -/** - * Ruby's object's, base components. Every single ruby objects have them in - * common. - */ -struct -RUBY_ALIGNAS(SIZEOF_VALUE) -RBasic { - - /** - * Per-object flags. Each ruby objects have their own characteristics - * apart from their classes. For instance whether an object is frozen or - * not is not controlled by its class. This is where such properties are - * stored. - * - * @see enum ::ruby_fl_type - * - * @note This is ::VALUE rather than an enum for alignment purpose. Back - * in the 1990s there were no such thing like `_Alignas` in C. - */ - VALUE flags; - - /** - * Class of an object. Every object has its class. Also, everything is an - * object in Ruby. This means classes are also objects. Classes have - * their own classes, classes of classes have their classes, too ... and - * it recursively continues forever. - * - * Also note the `const` qualifier. In ruby an object cannot "change" its - * class. - */ - const VALUE klass; - -#ifdef __cplusplus - public: - RBIMPL_ATTR_CONSTEXPR(CXX11) - RBIMPL_ATTR_ARTIFICIAL() - RBIMPL_ATTR_FORCEINLINE() - RBIMPL_ATTR_NOALIAS() - /** - * We need to define this explicit constructor because the field `klass` is - * const-qualified above, which effectively defines the implicit default - * constructor as "deleted" (as of C++11) -- No way but to define one by - * ourselves. - */ - RBasic() : - flags(RBIMPL_VALUE_NULL), - klass(RBIMPL_VALUE_NULL) - { - } -#endif -}; - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * Make the object invisible from Ruby code. - * - * It is useful to let Ruby's GC manage your internal data structure -- The - * object keeps being managed by GC, but `ObjectSpace.each_object` never yields - * the object. - * - * Note that the object also lose a way to call a method on it. - * - * @param[out] obj A Ruby object. - * @return The passed object. - * @post The object is destructively modified to be invisible. - * @see rb_obj_reveal - */ -VALUE rb_obj_hide(VALUE obj); - -/** - * Make a hidden object visible again. - * - * It is the caller's responsibility to pass the right `klass` which `obj` - * originally used to belong to. - * - * @param[out] obj A Ruby object. - * @param[in] klass Class of `obj`. - * @return Passed `obj`. - * @pre `obj` was previously hidden. - * @post `obj`'s class is `klass`. - * @see rb_obj_hide - */ -VALUE rb_obj_reveal(VALUE obj, VALUE klass); /* do not use this API to change klass information */ -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries the class of an object. - * - * @param[in] obj An object. - * @return Its class. - */ -static inline VALUE -RBASIC_CLASS(VALUE obj) -{ - RBIMPL_ASSERT_OR_ASSUME(! RB_SPECIAL_CONST_P(obj)); - return RBASIC(obj)->klass; -} - -#endif /* RBIMPL_RBASIC_H */ diff --git a/libs/libruby/ruby/internal/core/rbignum.h b/libs/libruby/ruby/internal/core/rbignum.h deleted file mode 100644 index 1d31743..0000000 --- a/libs/libruby/ruby/internal/core/rbignum.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef RBIMPL_RBIGNUM_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RBIGNUM_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines to manipulate struct RBignum. - * @note The struct RBignum itself is opaque. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/value_type.h" -#include "ruby/internal/stdbool.h" - -#define RBIGNUM_SIGN rb_big_sign /**< @alias{rb_big_sign} */ - -/** @cond INTERNAL_MACRO */ -#define RBIGNUM_POSITIVE_P RBIGNUM_POSITIVE_P -#define RBIGNUM_NEGATIVE_P RBIGNUM_NEGATIVE_P -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * The "sign" of a bignum. - * - * @param[in] num An object of RBignum. - * @retval 1 It is greater than or equal to zero. - * @retval 0 It is less than zero. - * - * @internal - * - * Implementation wise, unlike fixnums (which are 2's complement), bignums are - * signed magnitude system. Theoretically it could be possible to have - * negative zero instances. But in reality there is no way to create such - * thing. Nobody ever needed that kind of insanity. - */ -int rb_big_sign(VALUE num); -RBIMPL_SYMBOL_EXPORT_END() - -/** - * Checks if the bignum is positive. - * @param[in] b An object of RBignum. - * @retval false `b` is less than zero. - * @retval true Otherwise. - */ -static inline bool -RBIGNUM_POSITIVE_P(VALUE b) -{ - RBIMPL_ASSERT_TYPE(b, RUBY_T_BIGNUM); - return RBIGNUM_SIGN(b); -} - -/** - * Checks if the bignum is negative. - * @param[in] b An object of RBignum. - * @retval true `b` is less than zero. - * @retval false Otherwise. - */ -static inline bool -RBIGNUM_NEGATIVE_P(VALUE b) -{ - RBIMPL_ASSERT_TYPE(b, RUBY_T_BIGNUM); - return ! RBIGNUM_POSITIVE_P(b); -} - -#endif /* RBIMPL_RBIGNUM_H */ diff --git a/libs/libruby/ruby/internal/core/rclass.h b/libs/libruby/ruby/internal/core/rclass.h deleted file mode 100644 index b0b6bfc..0000000 --- a/libs/libruby/ruby/internal/core/rclass.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef RBIMPL_RCLASS_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RCLASS_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines to manipulate struct RClass. - * @note The struct RClass itself is opaque. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/cast.h" - -/** @cond INTERNAL_MACRO */ -#define RMODULE_IS_REFINEMENT RMODULE_IS_REFINEMENT -/** @endcond */ - -/** - * Convenient casting macro. - * - * @param obj An object, which is in fact an RClass. - * @return The passed object casted to RClass. - */ -#define RCLASS(obj) RBIMPL_CAST((struct RClass *)(obj)) - -/** @alias{RCLASS} */ -#define RMODULE RCLASS - -/** @alias{rb_class_get_superclass} */ -#define RCLASS_SUPER rb_class_get_superclass - -/** - * @private - * - * Bits that you can set to ::RBasic::flags. - * - * @internal - * - * Why is it here, given RClass itself is not? - */ -enum ruby_rmodule_flags { - /** - * This flag has something to do with refinements. A module created using - * rb_mod_refine() has this flag set. This is the bit which controls - * difference between normal inclusion versus refinements. - */ - RMODULE_IS_REFINEMENT = RUBY_FL_USER3 -}; - -struct RClass; /* Opaque, declared here for RCLASS() macro. */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * Returns the superclass of a class. - * @param[in] klass An object of RClass. - * @retval RUBY_Qfalse `klass` has no super class. - * @retval otherwise Raw superclass of `klass` - * @see rb_class_superclass - * - * ### Q&A ### - * - * - Q: How can a class have no super class? - * - * - A: `klass` could be a module. Or it could be ::rb_cBasicObject. - * - * - Q: What do you mean by "raw" superclass? - * - * - A: This is a really good question. The answer is that this function - * returns something different from what you would normally expect. On - * occasions ruby inserts hidden classes in a hierarchy of class - * inheritance behind-the-scene. Such classes are called "iclass"es and - * distinguished using ::RUBY_T_ICLASS in C level. They are truly - * transparent from Ruby level but can be accessed from C, by using this - * API. - */ -VALUE rb_class_get_superclass(VALUE klass); -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_RCLASS_H */ diff --git a/libs/libruby/ruby/internal/core/rdata.h b/libs/libruby/ruby/internal/core/rdata.h deleted file mode 100644 index 43ab3c0..0000000 --- a/libs/libruby/ruby/internal/core/rdata.h +++ /dev/null @@ -1,386 +0,0 @@ -#ifndef RBIMPL_RDATA_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RDATA_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines struct ::RData. - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#include "ruby/internal/attr/deprecated.h" -#include "ruby/internal/attr/warning.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/fl_type.h" -#include "ruby/internal/value.h" -#include "ruby/internal/value_type.h" -#include "ruby/defines.h" - -/** @cond INTERNAL_MACRO */ -#ifdef RUBY_UNTYPED_DATA_WARNING -# /* Take that. */ -#elif defined(RUBY_EXPORT) -# define RUBY_UNTYPED_DATA_WARNING 1 -#else -# define RUBY_UNTYPED_DATA_WARNING 0 -#endif - -#define RBIMPL_DATA_FUNC(f) RBIMPL_CAST((void (*)(void *))(f)) -#define RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() \ - RBIMPL_ATTR_WARNING(("untyped Data is unsafe; use TypedData instead")) \ - RBIMPL_ATTR_DEPRECATED(("by TypedData")) - -#define RBIMPL_MACRO_SELECT(x, y) x ## y -#define RUBY_MACRO_SELECT(x, y) RBIMPL_MACRO_SELECT(x, y) -/** @endcond */ - -/** - * Convenient casting macro. - * - * @param obj An object, which is in fact an ::RData. - * @return The passed object casted to ::RData. - */ -#define RDATA(obj) RBIMPL_CAST((struct RData *)(obj)) - -/** - * Convenient getter macro. - * - * @param obj An object, which is in fact an ::RData. - * @return The passed object's ::RData::data field. - */ -#define DATA_PTR(obj) RDATA(obj)->data - -/** - * This is a value you can set to ::RData::dfree. Setting this means the data - * was allocated using ::ruby_xmalloc() (or variants), and shall be freed using - * ::ruby_xfree(). - * - * @warning Do not use this if you want to use system malloc, because the - * system and Ruby might or might not share the same malloc - * implementation. - */ -#define RUBY_DEFAULT_FREE RBIMPL_DATA_FUNC(-1) - -/** - * This is a value you can set to ::RData::dfree. Setting this means the data - * is managed by someone else, like, statically allocated. Of course you are - * on your own then. - */ -#define RUBY_NEVER_FREE RBIMPL_DATA_FUNC(0) - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define RUBY_UNTYPED_DATA_FUNC(f) f RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() - -/* -#define RUBY_DATA_FUNC(func) ((void (*)(void*))(func)) -*/ - -/** - * This is the type of callbacks registered to ::RData. The argument is the - * `data` field. - */ -typedef void (*RUBY_DATA_FUNC)(void*); - -/** - * @deprecated - * - * Old "untyped" user data. It has roughly the same usage as struct - * ::RTypedData, but lacked several features such as support for compaction GC. - * Use of this struct is not recommended any longer. If it is dead necessary, - * please inform the core devs about your usage. - * - * @internal - * - * @shyouhei tried to add RBIMPL_ATTR_DEPRECATED for this type but that yielded - * too many warnings in the core. Maybe we want to retry later... Just add - * deprecated document for now. - */ -struct RData { - - /** Basic part, including flags and class. */ - struct RBasic basic; - - /** - * This function is called when the object is experiencing GC marks. If it - * contains references to other Ruby objects, you need to mark them also. - * Otherwise GC will smash your data. - * - * @see rb_gc_mark() - * @warning This is called during GC runs. Object allocations are - * impossible at that moment (that is why GC runs). - */ - RUBY_DATA_FUNC dmark; - - /** - * This function is called when the object is no longer used. You need to - * do whatever necessary to avoid memory leaks. - * - * @warning This is called during GC runs. Object allocations are - * impossible at that moment (that is why GC runs). - */ - RUBY_DATA_FUNC dfree; - - /** Pointer to the actual C level struct that you want to wrap. */ - void *data; -}; - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * This is the primitive way to wrap an existing C struct into ::RData. - * - * @param[in] klass Ruby level class of the returning object. - * @param[in] datap Pointer to the target C struct. - * @param[in] dmark Mark function. - * @param[in] dfree Free function. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return An allocated object that wraps `datap`. - */ -VALUE rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree); - -/** - * Identical to rb_data_object_wrap(), except it allocates a new data region - * internally instead of taking an existing one. The allocation is done using - * ruby_calloc(). Hence it makes no sense to pass anything other than - * ::RUBY_DEFAULT_FREE to the last argument. - * - * @param[in] klass Ruby level class of the returning object. - * @param[in] size Requested size of memory to allocate. - * @param[in] dmark Mark function. - * @param[in] dfree Free function. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return An allocated object that wraps a new `size` byte region. - */ -VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree); - -/** - * @private - * Documented in include/ruby/internal/globals.h - */ -RUBY_EXTERN VALUE rb_cObject; -RBIMPL_SYMBOL_EXPORT_END() - -/** - * Converts sval, a pointer to your struct, into a Ruby object. - * - * @param klass A ruby level class. - * @param mark Mark function. - * @param free Free function. - * @param sval A pointer to your struct. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return A created Ruby object. - */ -#define Data_Wrap_Struct(klass, mark, free, sval) \ - rb_data_object_wrap( \ - (klass), \ - (sval), \ - RBIMPL_DATA_FUNC(mark), \ - RBIMPL_DATA_FUNC(free)) - -/** - * @private - * - * This is an implementation detail of #Data_Make_Struct. People don't use it - * directly. - * - * @param result Variable name of created Ruby object. - * @param klass Ruby level class of the object. - * @param type Type name of the C struct. - * @param size Size of the C struct. - * @param mark Mark function. - * @param free Free function. - * @param sval Variable name of created C struct. - */ -#define Data_Make_Struct0(result, klass, type, size, mark, free, sval) \ - VALUE result = rb_data_object_zalloc( \ - (klass), \ - (size), \ - RBIMPL_DATA_FUNC(mark), \ - RBIMPL_DATA_FUNC(free)); \ - (sval) = RBIMPL_CAST((type *)DATA_PTR(result)); \ - RBIMPL_CAST(/*suppress unused variable warnings*/(void)(sval)) - -/** - * Identical to #Data_Wrap_Struct, except it allocates a new data region - * internally instead of taking an existing one. The allocation is done using - * ruby_calloc(). Hence it makes no sense to pass anything other than - * ::RUBY_DEFAULT_FREE to the `free` argument. - * - * @param klass Ruby level class of the returning object. - * @param type Type name of the C struct. - * @param mark Mark function. - * @param free Free function. - * @param sval Variable name of created C struct. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return A created Ruby object. - */ -#ifdef HAVE_STMT_AND_DECL_IN_EXPR -#define Data_Make_Struct(klass, type, mark, free, sval) \ - RB_GNUC_EXTENSION({ \ - Data_Make_Struct0( \ - data_struct_obj, \ - klass, \ - type, \ - sizeof(type), \ - mark, \ - free, \ - sval); \ - data_struct_obj; \ - }) -#else -#define Data_Make_Struct(klass, type, mark, free, sval) \ - rb_data_object_make( \ - (klass), \ - RBIMPL_DATA_FUNC(mark), \ - RBIMPL_DATA_FUNC(free), \ - RBIMPL_CAST((void **)&(sval)), \ - sizeof(type)) -#endif - -/** - * Obtains a C struct from inside of a wrapper Ruby object. - * - * @param obj An instance of ::RData. - * @param type Type name of the C struct. - * @param sval Variable name of obtained C struct. - * @return Unwrapped C struct that `obj` holds. - */ -#define Data_Get_Struct(obj, type, sval) \ - ((sval) = RBIMPL_CAST((type*)rb_data_object_get(obj))) - -RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() -/** - * @private - * - * This is an implementation detail of rb_data_object_wrap(). People don't use - * it directly. - * - * @param[in] klass Ruby level class of the returning object. - * @param[in] ptr Pointer to the target C struct. - * @param[in] mark Mark function. - * @param[in] free Free function. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return An allocated object that wraps `datap`. - */ -static inline VALUE -rb_data_object_wrap_warning(VALUE klass, void *ptr, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free) -{ - return rb_data_object_wrap(klass, ptr, mark, free); -} - -/** - * @private - * - * This is an implementation detail of #Data_Get_Struct. People don't use it - * directly. - * - * @param[in] obj An instance of ::RData. - * @return Unwrapped C struct that `obj` holds. - */ -static inline void * -rb_data_object_get(VALUE obj) -{ - Check_Type(obj, RUBY_T_DATA); - return DATA_PTR(obj); -} - -RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() -/** - * @private - * - * This is an implementation detail of #Data_Get_Struct. People don't use it - * directly. - * - * @param[in] obj An instance of ::RData. - * @return Unwrapped C struct that `obj` holds. - */ -static inline void * -rb_data_object_get_warning(VALUE obj) -{ - return rb_data_object_get(obj); -} - -#if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P) -# define rb_data_object_wrap_warning(klass, ptr, mark, free) \ - RB_GNUC_EXTENSION( \ - __builtin_choose_expr( \ - __builtin_constant_p(klass) && !(klass), \ - rb_data_object_wrap(klass, ptr, mark, free), \ - (rb_data_object_wrap_warning)(klass, ptr, mark, free))) -#endif - -/** - * This is an implementation detail of #Data_Make_Struct. People don't use it - * directly. - * - * @param[in] klass Ruby level class of the returning object. - * @param[in] mark_func Mark function. - * @param[in] free_func Free function. - * @param[in] datap Variable of created C struct. - * @param[in] size Requested size of allocation. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return A created Ruby object. - * @post `*datap` holds the created C struct. - */ -static inline VALUE -rb_data_object_make(VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size) -{ - Data_Make_Struct0(result, klass, void, size, mark_func, free_func, *datap); - return result; -} - -RBIMPL_ATTR_DEPRECATED(("by: rb_data_object_wrap")) -/** @deprecated This function was renamed to rb_data_object_wrap(). */ -static inline VALUE -rb_data_object_alloc(VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree) -{ - return rb_data_object_wrap(klass, data, dmark, dfree); -} - -/** @cond INTERNAL_MACRO */ -#define rb_data_object_wrap_0 rb_data_object_wrap -#define rb_data_object_wrap_1 rb_data_object_wrap_warning -#define rb_data_object_wrap_2 rb_data_object_wrap_ /* Used here vvvv */ -#define rb_data_object_wrap RUBY_MACRO_SELECT(rb_data_object_wrap_2, RUBY_UNTYPED_DATA_WARNING) -#define rb_data_object_get_0 rb_data_object_get -#define rb_data_object_get_1 rb_data_object_get_warning -#define rb_data_object_get_2 rb_data_object_get_ /* Used here vvvv */ -#define rb_data_object_get RUBY_MACRO_SELECT(rb_data_object_get_2, RUBY_UNTYPED_DATA_WARNING) -#define rb_data_object_make_0 rb_data_object_make -#define rb_data_object_make_1 rb_data_object_make_warning -#define rb_data_object_make_2 rb_data_object_make_ /* Used here vvvv */ -#define rb_data_object_make RUBY_MACRO_SELECT(rb_data_object_make_2, RUBY_UNTYPED_DATA_WARNING) -/** @endcond */ -#endif /* RBIMPL_RDATA_H */ diff --git a/libs/libruby/ruby/internal/core/rfile.h b/libs/libruby/ruby/internal/core/rfile.h deleted file mode 100644 index f8dddde..0000000 --- a/libs/libruby/ruby/internal/core/rfile.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef RBIMPL_RFILE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RFILE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines struct ::RFile. - */ -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/cast.h" - -/* rb_io_t is in ruby/io.h. The header file has historically not been included - * into ruby/ruby.h. We follow that tradition. */ -struct rb_io_t; - -/** - * Ruby's File and IO. Ruby's IO are not just file descriptors. They have - * buffers. They also have encodings. Various information are controlled - * using this struct. - */ -struct RFile { - - /** Basic part, including flags and class. */ - struct RBasic basic; - - /** IO's specific fields. */ - struct rb_io_t *fptr; -}; - -/** - * Convenient casting macro. - * - * @param obj An object, which is in fact an ::RFile. - * @return The passed object casted to ::RFile. - */ -#define RFILE(obj) RBIMPL_CAST((struct RFile *)(obj)) -#endif /* RBIMPL_RFILE_H */ diff --git a/libs/libruby/ruby/internal/core/rhash.h b/libs/libruby/ruby/internal/core/rhash.h deleted file mode 100644 index 61d2c15..0000000 --- a/libs/libruby/ruby/internal/core/rhash.h +++ /dev/null @@ -1,144 +0,0 @@ -#ifndef RBIMPL_RHASH_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RHASH_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines to manipulate struct RHash. - * @note The struct RHash itself is opaque. - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#if !defined RUBY_EXPORT && !defined RUBY_NO_OLD_COMPATIBILITY -# include "ruby/backward.h" -#endif - -/** - * Retrieves the internal table. - * - * @param[in] h An instance of RHash. - * @pre `h` must be of ::RUBY_T_HASH. - * @return A struct st_table which has the contents of this hash. - * @note Nowadays as Ruby evolved over ages, RHash has multiple backend - * storage engines. `h`'s backend is not guaranteed to be a - * st_table. This function creates one when necessary. - */ -#define RHASH_TBL(h) rb_hash_tbl(h, __FILE__, __LINE__) - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - * - * @internal - * - * Declaration of rb_hash_iter_lev() is at include/ruby/backward.h. - */ -#define RHASH_ITER_LEV(h) rb_hash_iter_lev(h) - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - * - * @internal - * - * Declaration of rb_hash_ifnone() is at include/ruby/backward.h. - */ -#define RHASH_IFNONE(h) rb_hash_ifnone(h) - -/** - * Queries the size of the hash. Size here means the number of keys that the - * hash stores. - * - * @param[in] h An instance of RHash. - * @pre `h` must be of ::RUBY_T_HASH. - * @return The size of the hash. - */ -#define RHASH_SIZE(h) rb_hash_size_num(h) - -/** - * Checks if the hash is empty. - * - * @param[in] h An instance of RHash. - * @pre `h` must be of ::RUBY_T_HASH. - * @retval true It is. - * @retval false It isn't. - */ -#define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0) - -/** - * Destructively updates the default value of the hash. - * - * @param[out] h An instance of RHash. - * @param[in] ifnone Arbitrary default value. - * @pre `h` must be of ::RUBY_T_HASH. - * - * @internal - * - * But why you can set this, given rb_hash_ifnone() doesn't exist? - */ -#define RHASH_SET_IFNONE(h, ifnone) rb_hash_set_ifnone((VALUE)h, ifnone) - -struct st_table; /* in ruby/st.h */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * This is the implementation detail of #RHASH_SIZE. People don't call this - * directly. - * - * @param[in] hash An instance of RHash. - * @pre `hash` must be of ::RUBY_T_HASH. - * @return The size of the hash. - */ -size_t rb_hash_size_num(VALUE hash); - -/** - * This is the implementation detail of #RHASH_TBL. People don't call this - * directly. - * - * @param[in] hash An instance of RHash. - * @param[in] file The `__FILE__`. - * @param[in] line The `__LINE__`. - * @pre `hash` must be of ::RUBY_T_HASH. - * @return Table that has the contents of the hash. - */ -struct st_table *rb_hash_tbl(VALUE hash, const char *file, int line); - -/** - * This is the implementation detail of #RHASH_SET_IFNONE. People don't call - * this directly. - * - * @param[out] hash An instance of RHash. - * @param[in] ifnone Arbitrary default value. - * @pre `hash` must be of ::RUBY_T_HASH. - */ -VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone); -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_RHASH_H */ diff --git a/libs/libruby/ruby/internal/core/rmatch.h b/libs/libruby/ruby/internal/core/rmatch.h deleted file mode 100644 index 2d2fd89..0000000 --- a/libs/libruby/ruby/internal/core/rmatch.h +++ /dev/null @@ -1,146 +0,0 @@ -#ifndef RBIMPL_RMATCH_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RMATCH_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines struct ::RMatch. - */ -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/value.h" -#include "ruby/internal/value_type.h" -#include "ruby/assert.h" - -/** - * Convenient casting macro. - * - * @param obj An object, which is in fact an ::RMatch. - * @return The passed object casted to ::RMatch. - */ -#define RMATCH(obj) RBIMPL_CAST((struct RMatch *)(obj)) -/** @cond INTERNAL_MACRO */ -#define RMATCH_REGS RMATCH_REGS -/** @endcond */ - -struct re_patter_buffer; /* a.k.a. OnigRegexType, defined in onigmo.h */ -struct re_registers; /* Also in onigmo.h */ - -/** - * @old{re_pattern_buffer} - * - * @internal - * - * @shyouhei wonders: is anyone actively using this typedef ...? - */ -typedef struct re_pattern_buffer Regexp; - -/** - * Represents the region of a capture group. This is basically for caching - * purpose. re_registers have similar concepts (`beg` and `end`) but they are - * in `ptrdiff_t*`. In order for us to implement `MatchData#offset` that info - * has to be converted to offset integers. This is the struct to hold such - * things. - * - * @internal - * - * But why on earth it has to be visible from extension libraries? - */ -struct rmatch_offset { - long beg; /**< Beginning of a group. */ - long end; /**< End of a group. */ -}; - -/** Represents a match. */ -struct rmatch { - /** - * "Registers" of a match. This is a quasi-opaque struct that holds - * execution result of a match. Roughly resembles `&~`. - */ - struct re_registers regs; - - /** Capture group offsets, in C array. */ - struct rmatch_offset *char_offset; - - /** Number of ::rmatch_offset that ::rmatch::char_offset holds. */ - int char_offset_num_allocated; -}; - -/** - * Regular expression execution context. When a regular expression "matches" - * to a string, it generates capture groups etc. This struct holds that info. - * Visible from Ruby as an instance of `MatchData`. - * - * @note There is no way for extension libraries to manually generate this - * struct except by actually exercising the match operation of a regular - * expression. - */ -struct RMatch { - - /** Basic part, including flags and class. */ - struct RBasic basic; - - /** - * The target string that the match was made against. - */ - VALUE str; - - /** - * The result of this match. - */ - struct rmatch *rmatch; - - /** - * The expression of this match. - */ - VALUE regexp; /* RRegexp */ -}; - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries the raw ::re_registers. - * - * @param[in] match A match object - * @pre `match` must be of ::RMatch. - * @return Its execution result. - * @note Good. So you are aware of the fact that it could return NULL. - * Yes. It actually does. This is a really bizarre thing. The - * situation is about `String#gsub` and its family. They take - * strings as arguments, like `"foo".sub("bar", "baz")`. On such - * situations, in order to optimise memory allocations, these - * methods do not involve regular expressions at all. They just - * sequentially scan the receiver. Okay. The story begins here. - * Even when they do not kick our regexp engine, there must be - * backref objects e.g. `$&`. But how? You know what? Ruby fakes - * them. It allocates an empty ::RMatch and behaves as if there - * were execution contexts. In reality there weren't. No - * ::re_registers are allocated then. There is no way for this - * function but to return NULL for those fake ::RMatch. This is - * the reason for the nullability of this function. - */ -static inline struct re_registers * -RMATCH_REGS(VALUE match) -{ - RBIMPL_ASSERT_TYPE(match, RUBY_T_MATCH); - RBIMPL_ASSERT_OR_ASSUME(RMATCH(match)->rmatch != NULL); - return &RMATCH(match)->rmatch->regs; -} - -#endif /* RBIMPL_RMATCH_H */ diff --git a/libs/libruby/ruby/internal/core/robject.h b/libs/libruby/ruby/internal/core/robject.h deleted file mode 100644 index b1c2e1b..0000000 --- a/libs/libruby/ruby/internal/core/robject.h +++ /dev/null @@ -1,176 +0,0 @@ -#ifndef RBIMPL_ROBJECT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ROBJECT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines struct ::RObject. - */ -#include "ruby/internal/config.h" - -#ifdef HAVE_STDINT_H -# include -#endif - -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/deprecated.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/fl_type.h" -#include "ruby/internal/value.h" -#include "ruby/internal/value_type.h" - -/** - * Convenient casting macro. - * - * @param obj An object, which is in fact an ::RObject. - * @return The passed object casted to ::RObject. - */ -#define ROBJECT(obj) RBIMPL_CAST((struct RObject *)(obj)) -/** @cond INTERNAL_MACRO */ -#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX -#define ROBJECT_EMBED ROBJECT_EMBED -#define ROBJECT_IV_CAPACITY ROBJECT_IV_CAPACITY -#define ROBJECT_IVPTR ROBJECT_IVPTR -/** @endcond */ - -/** - * @private - * - * Bits that you can set to ::RBasic::flags. - */ -enum ruby_robject_flags { - /** - * This flag has something to do with memory footprint. If the object is - * "small" enough, ruby tries to be creative to abuse padding bits of - * struct ::RObject for storing instance variables. This flag denotes that - * situation. - * - * @warning This bit has to be considered read-only. Setting/clearing - * this bit without corresponding fix up must cause immediate - * SEGV. Also, internal structures of an object change - * dynamically and transparently throughout of its lifetime. - * Don't assume it being persistent. - * - * @internal - * - * 3rd parties must not be aware that there even is more than one way to - * store instance variables. Might better be hidden. - */ - ROBJECT_EMBED = RUBY_FL_USER1 -}; - -#if !USE_RVARGC -/** - * This is an enum because GDB wants it (rather than a macro). People need not - * bother. - */ -enum ruby_robject_consts { - /** Max possible number of instance variables that can be embedded. */ - ROBJECT_EMBED_LEN_MAX = RBIMPL_EMBED_LEN_MAX_OF(VALUE) -}; -#endif - -struct st_table; - -/** - * Ruby's ordinal objects. Unless otherwise special cased, all predefined and - * user-defined classes share this struct to hold their instances. - */ -struct RObject { - - /** Basic part, including flags and class. */ - struct RBasic basic; - - /** Object's specific fields. */ - union { - - /** - * Object that use separated memory region for instance variables use - * this pattern. - */ - struct { - /** Pointer to a C array that holds instance variables. */ - VALUE *ivptr; - - /** - * This is a table that holds instance variable name to index - * mapping. Used when accessing instance variables using names. - * - * @internal - * - * This is a shortcut for `RCLASS_IV_INDEX_TBL(rb_obj_class(obj))`. - */ - struct rb_id_table *iv_index_tbl; - } heap; - -#if USE_RVARGC - /* Embedded instance variables. When an object is small enough, it - * uses this area to store the instance variables. - * - * This is a length 1 array because: - * 1. GCC has a bug that does not optimize C flexible array members - * (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102452) - * 2. Zero length arrays are not supported by all compilers - */ - VALUE ary[1]; -#else - /** - * Embedded instance variables. When an object is small enough, it - * uses this area to store the instance variables. - */ - VALUE ary[ROBJECT_EMBED_LEN_MAX]; -#endif - } as; -}; - -/* Offsets for YJIT */ -#ifndef __cplusplus -static const int32_t ROBJECT_OFFSET_AS_HEAP_IVPTR = offsetof(struct RObject, as.heap.ivptr); -static const int32_t ROBJECT_OFFSET_AS_HEAP_IV_INDEX_TBL = offsetof(struct RObject, as.heap.iv_index_tbl); -static const int32_t ROBJECT_OFFSET_AS_ARY = offsetof(struct RObject, as.ary); -#endif - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries the instance variables. - * - * @param[in] obj Object in question. - * @return Its instance variables, in C array. - * @pre `obj` must be an instance of ::RObject. - * - * @internal - * - * @shyouhei finds no reason for this to be visible from extension libraries. - */ -static inline VALUE * -ROBJECT_IVPTR(VALUE obj) -{ - RBIMPL_ASSERT_TYPE(obj, RUBY_T_OBJECT); - - struct RObject *const ptr = ROBJECT(obj); - - if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) { - return ptr->as.ary; - } - else { - return ptr->as.heap.ivptr; - } -} - -#endif /* RBIMPL_ROBJECT_H */ diff --git a/libs/libruby/ruby/internal/core/rregexp.h b/libs/libruby/ruby/internal/core/rregexp.h deleted file mode 100644 index cf54a39..0000000 --- a/libs/libruby/ruby/internal/core/rregexp.h +++ /dev/null @@ -1,168 +0,0 @@ -#ifndef RBIMPL_RREGEXP_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RREGEXP_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines struct ::RRegexp. - */ -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/core/rstring.h" -#include "ruby/internal/value.h" -#include "ruby/internal/value_type.h" - -/** - * Convenient casting macro. - * - * @param obj An object, which is in fact an ::RRegexp. - * @return The passed object casted to ::RRegexp. - */ -#define RREGEXP(obj) RBIMPL_CAST((struct RRegexp *)(obj)) - -/** - * Convenient accessor macro. - * - * @param obj An object, which is in fact an ::RRegexp. - * @return The passed object's pattern buffer. - */ -#define RREGEXP_PTR(obj) (RREGEXP(obj)->ptr) -/** @cond INTERNAL_MACRO */ -#define RREGEXP_SRC RREGEXP_SRC -#define RREGEXP_SRC_PTR RREGEXP_SRC_PTR -#define RREGEXP_SRC_LEN RREGEXP_SRC_LEN -#define RREGEXP_SRC_END RREGEXP_SRC_END -/** @endcond */ - -struct re_patter_buffer; /* a.k.a. OnigRegexType, defined in onigmo.h */ - -/** - * Ruby's regular expression. A regexp is compiled into its own intermediate - * representation. This one holds that info. Regexp "match" operation then - * executes that IR. - */ -struct RRegexp { - - /** Basic part, including flags and class. */ - struct RBasic basic; - - /** - * The pattern buffer. This is a quasi-opaque struct that holds compiled - * intermediate representation of the regular expression. - * - * @note Compilation of a regexp could be delayed until actual match. - */ - struct re_pattern_buffer *ptr; - - /** Source code of this expression. */ - const VALUE src; - - /** - * Reference count. A regexp match can take extraordinarily long time to - * run. Ruby's regular expression is heavily extended and not a regular - * language any longer; runs in NP-time in practice. Now, Ruby also has - * threads and GVL. In order to prevent long GVL lockup, our regexp engine - * can release it on occasions. This means that multiple threads can touch - * a regular expressions at once. That itself is okay. But their cleanup - * phase shall wait for all the concurrent runs, to prevent use-after-free - * situation. This field is used to count such threads that are executing - * this particular pattern buffer. - * - * @warning Of course, touching this field from extension libraries causes - * catastrophic effects. Just leave it. - */ - unsigned long usecnt; -}; - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Convenient getter function. - * - * @param[in] rexp The regular expression in question. - * @return The source code of the regular expression. - * @pre `rexp` must be of ::RRegexp. - */ -static inline VALUE -RREGEXP_SRC(VALUE rexp) -{ - RBIMPL_ASSERT_TYPE(rexp, RUBY_T_REGEXP); - VALUE ret = RREGEXP(rexp)->src; - RBIMPL_ASSERT_TYPE(ret, RUBY_T_STRING); - return ret; -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Convenient getter function. - * - * @param[in] rexp The regular expression in question. - * @return The source code of the regular expression, in C's string. - * @pre `rexp` must be of ::RRegexp. - * - * @internal - * - * It seems nobody uses this function in the wild. Subject to hide? - */ -static inline char * -RREGEXP_SRC_PTR(VALUE rexp) -{ - return RSTRING_PTR(RREGEXP_SRC(rexp)); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Convenient getter function. - * - * @param[in] rexp The regular expression in question. - * @return The length of the source code of the regular expression. - * @pre `rexp` must be of ::RRegexp. - * - * @internal - * - * It seems nobody uses this function in the wild. Subject to hide? - */ -static inline long -RREGEXP_SRC_LEN(VALUE rexp) -{ - return RSTRING_LEN(RREGEXP_SRC(rexp)); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Convenient getter function. - * - * @param[in] rexp The regular expression in question. - * @return The end of the source code of the regular expression. - * @pre `rexp` must be of ::RRegexp. - * - * @internal - * - * It seems nobody uses this function in the wild. Subject to hide? - */ -static inline char * -RREGEXP_SRC_END(VALUE rexp) -{ - return RSTRING_END(RREGEXP_SRC(rexp)); -} - -#endif /* RBIMPL_RREGEXP_H */ diff --git a/libs/libruby/ruby/internal/core/rstring.h b/libs/libruby/ruby/internal/core/rstring.h deleted file mode 100644 index e394ab7..0000000 --- a/libs/libruby/ruby/internal/core/rstring.h +++ /dev/null @@ -1,578 +0,0 @@ -#ifndef RBIMPL_RSTRING_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RSTRING_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines struct ::RString. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/arithmetic/long.h" -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/fl_type.h" -#include "ruby/internal/value_type.h" -#include "ruby/internal/warning_push.h" -#include "ruby/assert.h" - -/** - * Convenient casting macro. - * - * @param obj An object, which is in fact an ::RString. - * @return The passed object casted to ::RString. - */ -#define RSTRING(obj) RBIMPL_CAST((struct RString *)(obj)) - -/** @cond INTERNAL_MACRO */ -#define RSTRING_NOEMBED RSTRING_NOEMBED -#if !USE_RVARGC -#define RSTRING_EMBED_LEN_MASK RSTRING_EMBED_LEN_MASK -#define RSTRING_EMBED_LEN_SHIFT RSTRING_EMBED_LEN_SHIFT -#define RSTRING_EMBED_LEN_MAX RSTRING_EMBED_LEN_MAX -#endif -#define RSTRING_FSTR RSTRING_FSTR -#define RSTRING_EMBED_LEN RSTRING_EMBED_LEN -#define RSTRING_LEN RSTRING_LEN -#define RSTRING_LENINT RSTRING_LENINT -#define RSTRING_PTR RSTRING_PTR -#define RSTRING_END RSTRING_END -/** @endcond */ - -/** - * @name Conversion of Ruby strings into C's - * - * @{ - */ - -/** - * Ensures that the parameter object is a String. This is done by calling its - * `to_str` method. - * - * @param[in,out] v Arbitrary Ruby object. - * @exception rb_eTypeError No implicit conversion defined. - * @post `v` is a String. - */ -#define StringValue(v) rb_string_value(&(v)) - -/** - * Identical to #StringValue, except it returns a `char*`. - * - * @param[in,out] v Arbitrary Ruby object. - * @exception rb_eTypeError No implicit conversion defined. - * @return Converted Ruby string's backend C string. - * @post `v` is a String. - */ -#define StringValuePtr(v) rb_string_value_ptr(&(v)) - -/** - * Identical to #StringValuePtr, except it additionally checks for the contents - * for viability as a C string. Ruby can accept wider range of contents as - * strings, compared to C. This function is to check that. - * - * @param[in,out] v Arbitrary Ruby object. - * @exception rb_eTypeError No implicit conversion defined. - * @exception rb_eArgError String is not C-compatible. - * @return Converted Ruby string's backend C string. - * @post `v` is a String. - */ -#define StringValueCStr(v) rb_string_value_cstr(&(v)) - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define SafeStringValue(v) StringValue(v) - -/** - * Identical to #StringValue, except it additionally converts the string's - * encoding to default external encoding. Ruby has a concept called encodings. - * A string can have different encoding than the environment expects. Someone - * has to make sure its contents be converted to something suitable. This is - * that routine. Call it when necessary. - * - * @param[in,out] v Arbitrary Ruby object. - * @exception rb_eTypeError No implicit conversion defined. - * @return Converted Ruby string's backend C string. - * @post `v` is a String. - * - * @internal - * - * Not sure but it seems this macro does not raise on encoding - * incompatibilities? Doesn't sound right to @shyouhei. - */ -#define ExportStringValue(v) do { \ - StringValue(v); \ - (v) = rb_str_export(v); \ -} while (0) - -/** @} */ - -/** - * @private - * - * Bits that you can set to ::RBasic::flags. - * - * @warning These enums are not the only bits we use for strings. - * - * @internal - * - * Actually all bits through FL_USER1 to FL_USER19 are used for strings. Why - * only this tiny part of them are made public here? @shyouhei can find no - * reason. - */ -enum ruby_rstring_flags { - - /** - * This flag has something to do with memory footprint. If the string is - * short enough, ruby tries to be creative to abuse padding bits of struct - * ::RString for storing contents. If this flag is set that string does - * _not_ do that, to resort to good old fashioned external allocation - * strategy instead. - * - * @warning This bit has to be considered read-only. Setting/clearing - * this bit without corresponding fix up must cause immediate - * SEGV. Also, internal structures of a string change - * dynamically and transparently throughout of its lifetime. - * Don't assume it being persistent. - * - * @internal - * - * 3rd parties must not be aware that there even is more than one way to - * store a string. Might better be hidden. - */ - RSTRING_NOEMBED = RUBY_FL_USER1, - -#if !USE_RVARGC - /** - * When a string employs embedded strategy (see ::RSTRING_NOEMBED), these - * bits are used to store the number of bytes actually filled into - * ::RString::ary. - * - * @internal - * - * 3rd parties must not be aware that there even is more than one way to - * store a string. Might better be hidden. - */ - RSTRING_EMBED_LEN_MASK = RUBY_FL_USER2 | RUBY_FL_USER3 | RUBY_FL_USER4 | - RUBY_FL_USER5 | RUBY_FL_USER6, -#endif - - /* Actually, string encodings are also encoded into the flags, using - * remaining bits.*/ - - /** - * This flag has something to do with infamous "f"string. What is a - * fstring? Well it is a special subkind of strings that is immutable, - * deduped globally, and managed by our GC. It is much like a Symbol (in - * fact Symbols are dynamic these days and are backended using fstrings). - * This concept has been silently introduced at some point in 2.x era. - * Since then it gained wider acceptance in the core. But extension - * libraries could not know that until very recently. Strings of this flag - * live in a special Limbo deep inside of the interpreter. Never try to - * manipulate it by hand. - * - * @internal - * - * Fstrings are not the only variant strings that we implement today. - * Other things are behind-the-scene. This is the only one that is visible - * from extension library. There is no clear reason why it has to be. - * Given there are more "polite" ways to create fstrings, it seems this bit - * need not be exposed to extension libraries. Might better be hidden. - */ - RSTRING_FSTR = RUBY_FL_USER17 -}; - -#if !USE_RVARGC -/** - * This is an enum because GDB wants it (rather than a macro). People need not - * bother. - */ -enum ruby_rstring_consts { - /** Where ::RSTRING_EMBED_LEN_MASK resides. */ - RSTRING_EMBED_LEN_SHIFT = RUBY_FL_USHIFT + 2, - - /** Max possible number of characters that can be embedded. */ - RSTRING_EMBED_LEN_MAX = RBIMPL_EMBED_LEN_MAX_OF(char) - 1 -}; -#endif - -/** - * Ruby's String. A string in ruby conceptually has these information: - * - * - Encoding of the string. - * - Length of the string. - * - Contents of the string. - * - * It is worth noting that a string is _not_ an array of characters in ruby. - * It has never been. In 1.x a string was an array of integers. Since 2.x a - * string is no longer an array of anything. A string is a string -- just like - * a Time is not an integer. - */ -struct RString { - - /** Basic part, including flags and class. */ - struct RBasic basic; - - /** String's specific fields. */ - union { - - /** - * Strings that use separated memory region for contents use this - * pattern. - */ - struct { - - /** - * Length of the string, not including terminating NUL character. - * - * @note This is in bytes. - */ - long len; - - /** - * Pointer to the contents of the string. In the old days each - * string had dedicated memory regions. That is no longer true - * today, but there still are strings of such properties. This - * field could be used to point such things. - */ - char *ptr; - - /** Auxiliary info. */ - union { - - /** - * Capacity of `*ptr`. A continuous memory region of at least - * `capa` bytes is expected to exist at `*ptr`. This can be - * bigger than `len`. - */ - long capa; - - /** - * Parent of the string. Nowadays strings can share their - * contents each other, constructing gigantic nest of objects. - * This situation is called "shared", and this is the field to - * control such properties. - */ - VALUE shared; - } aux; - } heap; - - /** Embedded contents. */ - struct { -#if USE_RVARGC - long len; - /* This is a length 1 array because: - * 1. GCC has a bug that does not optimize C flexible array members - * (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102452) - * 2. Zero length arrays are not supported by all compilers - */ - char ary[1]; -#else - /** - * When a string is short enough, it uses this area to store the - * contents themselves. This was impractical in the 20th century, - * but these days 64 bit machines can typically hold 24 bytes here. - * Could be sufficiently large. In this case the length is encoded - * into the flags. - */ - char ary[RSTRING_EMBED_LEN_MAX + 1]; -#endif - } embed; - } as; -}; - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * Identical to rb_check_string_type(), except it raises exceptions in case of - * conversion failures. - * - * @param[in] obj Target object. - * @exception rb_eTypeError No implicit conversion to String. - * @return Return value of `obj.to_str`. - * @see rb_io_get_io - * @see rb_ary_to_ary - */ -VALUE rb_str_to_str(VALUE obj); - -/** - * Identical to rb_str_to_str(), except it fills the passed pointer with the - * converted object. - * - * @param[in,out] ptr Pointer to a variable of target object. - * @exception rb_eTypeError No implicit conversion to String. - * @return Return value of `obj.to_str`. - * @post `*ptr` is the return value. - */ -VALUE rb_string_value(volatile VALUE *ptr); - -/** - * Identical to rb_str_to_str(), except it returns the converted string's - * backend memory region. - * - * @param[in,out] ptr Pointer to a variable of target object. - * @exception rb_eTypeError No implicit conversion to String. - * @post `*ptr` is the return value of `obj.to_str`. - * @return Pointer to the contents of the return value. - */ -char *rb_string_value_ptr(volatile VALUE *ptr); - -/** - * Identical to rb_string_value_ptr(), except it additionally checks for the - * contents for viability as a C string. Ruby can accept wider range of - * contents as strings, compared to C. This function is to check that. - * - * @param[in,out] ptr Pointer to a variable of target object. - * @exception rb_eTypeError No implicit conversion to String. - * @exception rb_eArgError String is not C-compatible. - * @post `*ptr` is the return value of `obj.to_str`. - * @return Pointer to the contents of the return value. - */ -char *rb_string_value_cstr(volatile VALUE *ptr); - -/** - * Identical to rb_str_to_str(), except it additionally converts the string - * into default external encoding. Ruby has a concept called encodings. A - * string can have different encoding than the environment expects. Someone - * has to make sure its contents be converted to something suitable. This is - * that routine. Call it when necessary. - * - * @param[in] obj Target object. - * @exception rb_eTypeError No implicit conversion to String. - * @return Converted ruby string of default external encoding. - */ -VALUE rb_str_export(VALUE obj); - -/** - * Identical to rb_str_export(), except it converts into the locale encoding - * instead. - * - * @param[in] obj Target object. - * @exception rb_eTypeError No implicit conversion to String. - * @return Converted ruby string of locale encoding. - */ -VALUE rb_str_export_locale(VALUE obj); - -RBIMPL_ATTR_ERROR(("rb_check_safe_str() and Check_SafeStr() are obsolete; use StringValue() instead")) -/** - * @private - * - * @deprecated This function once was a thing in the old days, but makes no - * sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - */ -void rb_check_safe_str(VALUE); - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define Check_SafeStr(v) rb_check_safe_str(RBIMPL_CAST((VALUE)(v))) - -/** - * @private - * - * Prints diagnostic message to stderr when RSTRING_PTR or RSTRING_END - * is NULL. - * - * @param[in] func The function name where encountered NULL pointer. - */ -void rb_debug_rstring_null_ptr(const char *func); -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries the length of the string. - * - * @param[in] str String in question. - * @return Its length, in bytes. - * @pre `str` must be an instance of ::RString, and must has its - * ::RSTRING_NOEMBED flag off. - * - * @internal - * - * This was a macro before. It was inevitable to be public, since macros are - * global constructs. But should it be forever? Now that it is a function, - * @shyouhei thinks it could just be eliminated, hidden into implementation - * details. - */ -static inline long -RSTRING_EMBED_LEN(VALUE str) -{ - RBIMPL_ASSERT_TYPE(str, RUBY_T_STRING); - RBIMPL_ASSERT_OR_ASSUME(! RB_FL_ANY_RAW(str, RSTRING_NOEMBED)); - -#if USE_RVARGC - long f = RSTRING(str)->as.embed.len; - return f; -#else - VALUE f = RBASIC(str)->flags; - f &= RSTRING_EMBED_LEN_MASK; - f >>= RSTRING_EMBED_LEN_SHIFT; - return RBIMPL_CAST((long)f); -#endif -} - -RBIMPL_WARNING_PUSH() -#if RBIMPL_COMPILER_IS(Intel) -RBIMPL_WARNING_IGNORED(413) -#endif - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * @private - * - * "Expands" an embedded string into an ordinal one. This is a function that - * returns aggregated type. The returned struct always has its `as.heap.len` - * an `as.heap.ptr` fields set appropriately. - * - * This is an implementation detail that 3rd parties should never bother. - */ -static inline struct RString -rbimpl_rstring_getmem(VALUE str) -{ - RBIMPL_ASSERT_TYPE(str, RUBY_T_STRING); - - if (RB_FL_ANY_RAW(str, RSTRING_NOEMBED)) { - return *RSTRING(str); - } - else { - /* Expecting compilers to optimize this on-stack struct away. */ - struct RString retval; - retval.as.heap.len = RSTRING_EMBED_LEN(str); - retval.as.heap.ptr = RSTRING(str)->as.embed.ary; - return retval; - } -} - -RBIMPL_WARNING_POP() - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries the length of the string. - * - * @param[in] str String in question. - * @return Its length, in bytes. - * @pre `str` must be an instance of ::RString. - */ -static inline long -RSTRING_LEN(VALUE str) -{ - return rbimpl_rstring_getmem(str).as.heap.len; -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries the contents pointer of the string. - * - * @param[in] str String in question. - * @return Pointer to its contents. - * @pre `str` must be an instance of ::RString. - */ -static inline char * -RSTRING_PTR(VALUE str) -{ - char *ptr = rbimpl_rstring_getmem(str).as.heap.ptr; - - if (RB_UNLIKELY(! ptr)) { - /* :BEWARE: @shyouhei thinks that currently, there are rooms for this - * function to return NULL. In the 20th century that was a pointless - * concern. However struct RString can hold fake strings nowadays. It - * seems no check against NULL are exercised around handling of them - * (one of such usages is located in marshal.c, which scares - * @shyouhei). Better check here for maximum safety. - * - * Also, this is not rb_warn() because RSTRING_PTR() can be called - * during GC (see what obj_info() does). rb_warn() needs to allocate - * Ruby objects. That is not possible at this moment. */ - rb_debug_rstring_null_ptr("RSTRING_PTR"); - } - - return ptr; -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries the end of the contents pointer of the string. - * - * @param[in] str String in question. - * @return Pointer to its end of contents. - * @pre `str` must be an instance of ::RString. - */ -static inline char * -RSTRING_END(VALUE str) -{ - struct RString buf = rbimpl_rstring_getmem(str); - - if (RB_UNLIKELY(! buf.as.heap.ptr)) { - /* Ditto. */ - rb_debug_rstring_null_ptr("RSTRING_END"); - } - - return &buf.as.heap.ptr[buf.as.heap.len]; -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * Identical to RSTRING_LEN(), except it differs for the return type. - * - * @param[in] str String in question. - * @exception rb_eRangeError Too long. - * @return Its length, in bytes. - * @pre `str` must be an instance of ::RString. - * - * @internal - * - * This API seems redundant but has actual usages. - */ -static inline int -RSTRING_LENINT(VALUE str) -{ - return rb_long2int(RSTRING_LEN(str)); -} - -/** - * Convenient macro to obtain the contents and length at once. - * - * @param str String in question. - * @param ptrvar Variable where its contents is stored. - * @param lenvar Variable where its length is stored. - */ -#ifdef HAVE_STMT_AND_DECL_IN_EXPR -# define RSTRING_GETMEM(str, ptrvar, lenvar) \ - __extension__ ({ \ - struct RString rbimpl_str = rbimpl_rstring_getmem(str); \ - (ptrvar) = rbimpl_str.as.heap.ptr; \ - (lenvar) = rbimpl_str.as.heap.len; \ - }) -#else -# define RSTRING_GETMEM(str, ptrvar, lenvar) \ - ((ptrvar) = RSTRING_PTR(str), \ - (lenvar) = RSTRING_LEN(str)) -#endif /* HAVE_STMT_AND_DECL_IN_EXPR */ -#endif /* RBIMPL_RSTRING_H */ diff --git a/libs/libruby/ruby/internal/core/rstruct.h b/libs/libruby/ruby/internal/core/rstruct.h deleted file mode 100644 index 69be487..0000000 --- a/libs/libruby/ruby/internal/core/rstruct.h +++ /dev/null @@ -1,121 +0,0 @@ -#ifndef RBIMPL_RSTRUCT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RSTRUCT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines to manipulate struct RStruct. - * @note The struct RStruct itself is opaque. - */ -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/value_type.h" -#include "ruby/internal/arithmetic/long.h" -#include "ruby/internal/arithmetic/int.h" -#if !defined RUBY_EXPORT && !defined RUBY_NO_OLD_COMPATIBILITY -# include "ruby/backward.h" -#endif - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - * - * @internal - * - * Declaration of rb_struct_ptr() is at include/ruby/backward.h. - */ -#define RSTRUCT_PTR(st) rb_struct_ptr(st) -/** @cond INTERNAL_MACRO */ -#define RSTRUCT_LEN RSTRUCT_LEN -#define RSTRUCT_SET RSTRUCT_SET -#define RSTRUCT_GET RSTRUCT_GET -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * Returns the number of struct members. - * - * @param[in] st An instance of RStruct. - * @return The number of members of `st`. - * @pre `st` must be of ::RUBY_T_STRUCT. - */ -VALUE rb_struct_size(VALUE st); - -/** - * Resembles `Struct#[]`. - * - * @param[in] st An instance of RStruct. - * @param[in] k Index a.k.a. key of the struct. - * @exception rb_eTypeError `k` is neither Numeric, Symbol, nor String. - * @exception rb_eIndexError Numerical index out of range. - * @exception rb_eNameError No such key. - * @return The member stored at `k` in `st`. - * @pre `st` must be of ::RUBY_T_STRUCT. - */ -VALUE rb_struct_aref(VALUE st, VALUE k); - -/** - * Resembles `Struct#[]=`. - * - * @param[out] st An instance of RStruct. - * @param[in] k Index a.k.a. key of the struct. - * @param[in] v Value to store. - * @exception rb_eTypeError `k` is neither Numeric, Symbol, nor String. - * @exception rb_eIndexError Numerical index out of range. - * @exception rb_eNameError No such key. - * @return Passed `v`. - * @pre `st` must be of ::RUBY_T_STRUCT. - * @post `v` is stored at `k` in `st`. - */ -VALUE rb_struct_aset(VALUE st, VALUE k, VALUE v); -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_ARTIFICIAL() -/** @copydoc rb_struct_size() */ -static inline long -RSTRUCT_LEN(VALUE st) -{ - RBIMPL_ASSERT_TYPE(st, RUBY_T_STRUCT); - - return RB_NUM2LONG(rb_struct_size(st)); -} - -RBIMPL_ATTR_ARTIFICIAL() -/** @copydoc rb_struct_aset() */ -static inline VALUE -RSTRUCT_SET(VALUE st, int k, VALUE v) -{ - RBIMPL_ASSERT_TYPE(st, RUBY_T_STRUCT); - - return rb_struct_aset(st, INT2NUM(k), (v)); -} - -RBIMPL_ATTR_ARTIFICIAL() -/** @copydoc rb_struct_aref() */ -static inline VALUE -RSTRUCT_GET(VALUE st, int k) -{ - RBIMPL_ASSERT_TYPE(st, RUBY_T_STRUCT); - - return rb_struct_aref(st, INT2NUM(k)); -} - -#endif /* RBIMPL_RSTRUCT_H */ diff --git a/libs/libruby/ruby/internal/core/rtypeddata.h b/libs/libruby/ruby/internal/core/rtypeddata.h deleted file mode 100644 index bbf2088..0000000 --- a/libs/libruby/ruby/internal/core/rtypeddata.h +++ /dev/null @@ -1,604 +0,0 @@ -#ifndef RBIMPL_RTYPEDDATA_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RTYPEDDATA_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines struct ::RTypedData. - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#include "ruby/internal/assume.h" -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/flag_enum.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/core/rdata.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/error.h" -#include "ruby/internal/fl_type.h" -#include "ruby/internal/stdbool.h" -#include "ruby/internal/value_type.h" - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define HAVE_TYPE_RB_DATA_TYPE_T 1 - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define HAVE_RB_DATA_TYPE_T_FUNCTION 1 - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define HAVE_RB_DATA_TYPE_T_PARENT 1 - -/** - * This is a value you can set to ::rb_data_type_struct::dfree. Setting this - * means the data was allocated using ::ruby_xmalloc() (or variants), and shall - * be freed using ::ruby_xfree(). - * - * @warning Do not use this if you want to use system malloc, because the - * system and Ruby might or might not share the same malloc - * implementation. - */ -#define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE - -/** - * This is a value you can set to ::rb_data_type_struct::dfree. Setting this - * means the data is managed by someone else, like, statically allocated. Of - * course you are on your own then. - */ -#define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE - -/** - * Convenient casting macro. - * - * @param obj An object, which is in fact an ::RTypedData. - * @return The passed object casted to ::RTypedData. - */ -#define RTYPEDDATA(obj) RBIMPL_CAST((struct RTypedData *)(obj)) - -/** - * Convenient getter macro. - * - * @param v An object, which is in fact an ::RTypedData. - * @return The passed object's ::RTypedData::data field. - */ -#define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data) - -/** @old{rb_check_typeddata} */ -#define Check_TypedStruct(v, t) \ - rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t)) - -/** @cond INTERNAL_MACRO */ -#define RTYPEDDATA_P RTYPEDDATA_P -#define RTYPEDDATA_TYPE RTYPEDDATA_TYPE -#define RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY -#define RUBY_TYPED_FROZEN_SHAREABLE RUBY_TYPED_FROZEN_SHAREABLE -#define RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED -#define RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1 -/** @endcond */ - -/** - * @private - * - * Bits for rb_data_type_struct::flags. - */ -enum -RBIMPL_ATTR_FLAG_ENUM() -rbimpl_typeddata_flags { - /** - * This flag has something to do with Ruby's global interpreter lock. For - * maximum safety, Ruby locks the entire VM during GC. However your - * callback functions could unintentionally unlock it, for instance when - * they try to flush an IO buffer. Such operations are dangerous (threads - * then run alongside of GC). By default, to prevent those scenario, - * callbacks are deferred until the GC engine is 100% sure threads can run. - * This flag skips that; structs with it are deallocated during the sweep - * phase. - * - * Using this flag needs deep understanding of both GC and threads. You - * would better leave it unspecified. - */ - RUBY_TYPED_FREE_IMMEDIATELY = 1, - - /** - * This flag has something to do with Ractor. Multiple Ractors run without - * protecting each other. Sharing an object among Ractors is basically - * dangerous, disabled by default. This flag is used to bypass that - * restriction. but setting it is not enough. In addition to do so, an - * object also has to be frozen, and be passed to - * rb_ractor_make_shareable() before being actually shareable. Of course, - * you have to manually prevent race conditions then. - * - * Using this flag needs deep understanding of multithreaded programming. - * You would better leave it unspecified. - */ - RUBY_TYPED_FROZEN_SHAREABLE = RUBY_FL_SHAREABLE, - - /** - * This flag has something to do with our garbage collector. These days - * ruby objects are "generational". There are those who are young and - * those who are old. Young objects are prone to die; monitored relatively - * extensively by the garbage collector. OTOH old objects tend to live - * longer. They are relatively rarely considered. This basically works. - * But there is one tweak that has to be exercised. When an elder object - * has reference(s) to younger one(s), that referenced objects must not - * die. In order to detect additions of such references, old generations - * are protected by write barriers. It is a very difficult hack to - * appropriately insert write barriers everywhere. This mechanism is - * disabled by default for 3rd party extensions (they never get aged). By - * specifying this flag you can enable the generational feature to your - * data structure. Of course, you have to manually insert write barriers - * then. - * - * Using this flag needs deep understanding of GC internals, often at the - * level of source code. You would better leave it unspecified. - */ - RUBY_TYPED_WB_PROTECTED = RUBY_FL_WB_PROTECTED, /* THIS FLAG DEPENDS ON Ruby version */ - - /** - * This flag is mysterious. It seems nobody is currently using it. The - * intention of this flag is also unclear. We need further investigations. - */ - RUBY_TYPED_PROMOTED1 = RUBY_FL_PROMOTED1 /* THIS FLAG DEPENDS ON Ruby version */ -}; - -/** - * This is the struct that holds necessary info for a struct. It roughly - * resembles a Ruby level class; multiple objects can share a ::rb_data_type_t - * instance. - */ -typedef struct rb_data_type_struct rb_data_type_t; - -/** @copydoc rb_data_type_t */ -struct rb_data_type_struct { - - /** - * Name of structs of this kind. This is used for diagnostic purposes. - * This has to be unique in the process, but doesn't has to be a valid - * C/Ruby identifier. - */ - const char *wrap_struct_name; - - /** Function pointers. Resembles C++ `vtbl`.*/ - struct { - - /** - * This function is called when the object is experiencing GC marks. - * If it contains references to other Ruby objects, you need to mark - * them also. Otherwise GC will smash your data. - * - * @see rb_gc_mark() - * @warning This is called during GC runs. Object allocations are - * impossible at that moment (that is why GC runs). - */ - RUBY_DATA_FUNC dmark; - - /** - * This function is called when the object is no longer used. You need - * to do whatever necessary to avoid memory leaks. - * - * @warning This is called during GC runs. Object allocations are - * impossible at that moment (that is why GC runs). - */ - RUBY_DATA_FUNC dfree; - - /** - * This function is to query the size of the underlying memory regions. - * - * @internal - * - * This function has only one usage, which is form inside of - * `ext/objspace`. - */ - size_t (*dsize)(const void *); - - /** - * This function is called when the object is relocated. Like - * ::rb_data_type_struct::dmark, you need to update references to Ruby - * objects inside of your structs. - * - * @see rb_gc_location() - * @warning This is called during GC runs. Object allocations are - * impossible at that moment (that is why GC runs). - */ - RUBY_DATA_FUNC dcompact; - - /** - * This field is reserved for future extension. For now, it must be - * filled with zeros. - */ - void *reserved[1]; /* For future extension. - This array *must* be filled with ZERO. */ - } function; - - /** - * Parent of this class. Sometimes C structs have inheritance-like - * relationships. An example is `struct sockaddr` and its family. If you - * design such things, make ::rb_data_type_t for each of them and connect - * using this field. Ruby can then transparently cast your data back and - * forth when you call #TypedData_Get_Struct(). - * - * ```CXX - * struct parent { }; - * static inline const rb_data_type_t parent_type = { - * .wrap_struct_name = "parent", - * }; - * - * struct child: public parent { }; - * static inline const rb_data_type_t child_type = { - * .wrap_struct_name = "child", - * .parent = &parent_type, - * }; - * - * // This function can take both parent_class and child_class. - * static inline struct parent * - * get_parent(VALUE v) - * { - * struct parent *p; - * TypedData_Get_Struct(v, parent_type, struct parent, p); - * return p; - * } - * ``` - */ - const rb_data_type_t *parent; - - /** - * Type-specific static data. This area can be used for any purpose by a - * programmer who define the type. Ruby does not manage this at all. - */ - void *data; /* This area can be used for any purpose - by a programmer who define the type. */ - - /** - * Type-specific behavioural characteristics. This is a bitfield. It is - * an EXTREMELY WISE IDEA to leave this field blank. It is designed so - * that setting zero is the safest thing to do. If you risk to set any - * bits on, you have to know exactly what you are doing. - * - * @internal - * - * Why it has to be a ::VALUE? @shyouhei doesn't understand the design. - */ - VALUE flags; /* RUBY_FL_WB_PROTECTED */ -}; - -/** - * "Typed" user data. By using this, extension libraries can wrap a C struct - * to make it visible from Ruby. For instance if you have a `struct timeval`, - * and you want users to use it, - * - * ```CXX - * static inline const rb_data_type_t timeval_type = { - * // Note that unspecified fields are 0-filled by default. - * .wrap_struct_name = "timeval", - * .function = { - * .dmark = nullptr, // no need to mark - * .dfree = RUBY_TYPED_DEFAULT_FREE, // use ruby_xfree() - * .dsize = [](auto) { - * return sizeof(struct timeval); - * }, - * }, - * }; - * - * extern "C" void - * Init_timeval(void) - * { - * auto klass = rb_define_class("YourName", rb_cObject); - * - * rb_define_alloc_func(klass, [](auto klass) { - * struct timeval *t; - * auto ret = TypedData_Make_Struct( - * klass, struct timeval, &timeval_type, t); - * - * if (auto i = gettimeofday(t, nullptr); i == -1) { - * rb_sys_fail("gettimeofday(3)"); - * } - * else { - * return ret; - * } - * }); - * } - * ``` - */ -struct RTypedData { - - /** The part that all ruby objects have in common. */ - struct RBasic basic; - - /** - * This field stores various information about how Ruby should handle a - * data. This roughly resembles a Ruby level class (apart from method - * definition etc.) - */ - const rb_data_type_t *type; - - /** - * This has to be always 1. - * - * @internal - * - * Why, then, this is not a const ::VALUE? - */ - VALUE typed_flag; - - /** Pointer to the actual C level struct that you want to wrap. */ - void *data; -}; - -RBIMPL_SYMBOL_EXPORT_BEGIN() -RBIMPL_ATTR_NONNULL((3)) -/** - * This is the primitive way to wrap an existing C struct into ::RTypedData. - * - * @param[in] klass Ruby level class of the returning object. - * @param[in] datap Pointer to the target C struct. - * @param[in] type The characteristics of the passed data. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return An allocated object that wraps `datap`. - */ -VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type); - -/** - * Identical to rb_data_typed_object_wrap(), except it allocates a new data - * region internally instead of taking an existing one. The allocation is done - * using ruby_calloc(). Hence it makes no sense for `type->function.dfree` to - * be anything other than ::RUBY_TYPED_DEFAULT_FREE. - * - * @param[in] klass Ruby level class of the returning object. - * @param[in] size Requested size of memory to allocate. - * @param[in] type The characteristics of the passed data. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return An allocated object that wraps a new `size` byte region. - */ -VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type); - -/** - * Checks for the domestic relationship between the two. - * - * @param[in] child A data type supposed to be a child of `parent`. - * @param[in] parent A data type supposed to be a parent of `child`. - * @retval true `child` is a descendent of `parent`. - * @retval false Otherwise. - * - * @internal - * - * You can path NULL to both arguments, don't know what that means though. - */ -int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent); - -/** - * Checks if the given object is of given kind. - * - * @param[in] obj An instance of ::RTypedData. - * @param[in] data_type Expected data type of `obj`. - * @retval true `obj` is of `data_type`. - * @retval false Otherwise. - */ -int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type); - -/** - * Identical to rb_typeddata_is_kind_of(), except it raises exceptions instead - * of returning false. - * - * @param[in] obj An instance of ::RTypedData. - * @param[in] data_type Expected data type of `obj`. - * @exception rb_eTypeError obj is not of `data_type`. - * @return Unwrapped C struct that `obj` holds. - * @post Upon successful return `obj`'s type is guaranteed `data_type`. - */ -void *rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type); -RBIMPL_SYMBOL_EXPORT_END() - -/** - * Converts sval, a pointer to your struct, into a Ruby object. - * - * @param klass A ruby level class. - * @param data_type The type of `sval`. - * @param sval A pointer to your struct. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return A created Ruby object. - */ -#define TypedData_Wrap_Struct(klass,data_type,sval)\ - rb_data_typed_object_wrap((klass),(sval),(data_type)) - -/** - * @private - * - * This is an implementation detail of #TypedData_Make_Struct. People don't - * use it directly. - * - * @param result Variable name of created Ruby object. - * @param klass Ruby level class of the object. - * @param type Type name of the C struct. - * @param size Size of the C struct. - * @param data_type The data type describing `type`. - * @param sval Variable name of created C struct. - */ -#define TypedData_Make_Struct0(result, klass, type, size, data_type, sval) \ - VALUE result = rb_data_typed_object_zalloc(klass, size, data_type); \ - (sval) = RBIMPL_CAST((type *)RTYPEDDATA_DATA(result)); \ - RBIMPL_CAST(/*suppress unused variable warnings*/(void)(sval)) - -/** - * Identical to #TypedData_Wrap_Struct, except it allocates a new data region - * internally instead of taking an existing one. The allocation is done using - * ruby_calloc(). Hence it makes no sense for `data_type->function.dfree` to - * be anything other than ::RUBY_TYPED_DEFAULT_FREE. - * - * @param klass Ruby level class of the object. - * @param type Type name of the C struct. - * @param data_type The data type describing `type`. - * @param sval Variable name of created C struct. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return A created Ruby object. - */ -#ifdef HAVE_STMT_AND_DECL_IN_EXPR -#define TypedData_Make_Struct(klass, type, data_type, sval) \ - RB_GNUC_EXTENSION({ \ - TypedData_Make_Struct0( \ - data_struct_obj, \ - klass, \ - type, \ - sizeof(type), \ - data_type, \ - sval); \ - data_struct_obj; \ - }) -#else -#define TypedData_Make_Struct(klass, type, data_type, sval) \ - rb_data_typed_object_make( \ - (klass), \ - (data_type), \ - RBIMPL_CAST((void **)&(sval)), \ - sizeof(type)) -#endif - -/** - * Obtains a C struct from inside of a wrapper Ruby object. - * - * @param obj An instance of ::RTypedData. - * @param type Type name of the C struct. - * @param data_type The data type describing `type`. - * @param sval Variable name of obtained C struct. - * @exception rb_eTypeError `obj` is not a kind of `data_type`. - * @return Unwrapped C struct that `obj` holds. - */ -#define TypedData_Get_Struct(obj,type,data_type,sval) \ - ((sval) = RBIMPL_CAST((type *)rb_check_typeddata((obj), (data_type)))) - -RBIMPL_ATTR_PURE() -RBIMPL_ATTR_ARTIFICIAL() -/** - * @private - * - * This is an implementation detail of Check_Type(). People don't use it - * directly. - * - * @param[in] obj Object in question - * @retval true `obj` is an instance of ::RTypedData. - * @retval false `obj` is an instance of ::RData. - * @pre `obj` must be a Ruby object of ::RUBY_T_DATA. - */ -static inline bool -rbimpl_rtypeddata_p(VALUE obj) -{ - return RTYPEDDATA(obj)->typed_flag == 1; -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Checks whether the passed object is ::RTypedData or ::RData. - * - * @param[in] obj Object in question - * @retval true `obj` is an instance of ::RTypedData. - * @retval false `obj` is an instance of ::RData. - * @pre `obj` must be a Ruby object of ::RUBY_T_DATA. - */ -static inline bool -RTYPEDDATA_P(VALUE obj) -{ -#if RUBY_DEBUG - if (RB_UNLIKELY(! RB_TYPE_P(obj, RUBY_T_DATA))) { - Check_Type(obj, RUBY_T_DATA); - RBIMPL_UNREACHABLE_RETURN(false); - } -#endif - - return rbimpl_rtypeddata_p(obj); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/* :TODO: can this function be __attribute__((returns_nonnull)) or not? */ -/** - * Queries for the type of given object. - * - * @param[in] obj Object in question - * @return Data type struct that corresponds to `obj`. - * @pre `obj` must be an instance of ::RTypedData. - */ -static inline const struct rb_data_type_struct * -RTYPEDDATA_TYPE(VALUE obj) -{ -#if RUBY_DEBUG - if (RB_UNLIKELY(! RTYPEDDATA_P(obj))) { - rb_unexpected_type(obj, RUBY_T_DATA); - RBIMPL_UNREACHABLE_RETURN(NULL); - } -#endif - - return RTYPEDDATA(obj)->type; -} - -/** - * While we don't stop you from using this function, it seems to be an - * implementation detail of #TypedData_Make_Struct, which is preferred over - * this one. - * - * @param[in] klass Ruby level class of the returning object. - * @param[in] type The data type - * @param[out] datap Return pointer. - * @param[in] size Size of the C struct. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eNoMemError Out of memory. - * @return A created Ruby object. - * @post `*datap` points to the C struct wrapped by the returned object. - */ -static inline VALUE -rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size) -{ - TypedData_Make_Struct0(result, klass, void, size, type, *datap); - return result; -} - -RBIMPL_ATTR_DEPRECATED(("by: rb_data_typed_object_wrap")) -/** @deprecated This function was renamed to rb_data_typed_object_wrap(). */ -static inline VALUE -rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type) -{ - return rb_data_typed_object_wrap(klass, datap, type); -} - -#endif /* RBIMPL_RTYPEDDATA_H */ diff --git a/libs/libruby/ruby/internal/ctype.h b/libs/libruby/ruby/internal/ctype.h deleted file mode 100644 index 0f7ca6c..0000000 --- a/libs/libruby/ruby/internal/ctype.h +++ /dev/null @@ -1,545 +0,0 @@ -#ifndef RBIMPL_CTYPE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_CTYPE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Our own, locale independent, character handling routines. - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/constexpr.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" - -/** - * @name Old character classification macros - * - * What is this #ISPRINT business? Well, according to our VCS and some - * internet surfing, it appears that the initial intent of these macros were to - * mimic codes appear in common in several GNU projects. As far as @shyouhei - * detects they seem to originate GNU regex (that standalone one rather than - * Gnulib or Glibc), and at least date back to 1995. - * - * Let me lawfully quote from a GNU coreutils commit - * https://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=49803907f5dbd7646184a8912c9db9b09dcd0f22 - * - * > Jim Meyering writes: - * > - * > "... Some ctype macros are valid only for character codes that - * > isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when - * > using /bin/cc or gcc but without giving an ansi option). So, all - * > ctype uses should be through macros like ISPRINT... If - * > STDC_HEADERS is defined, then autoconf has verified that the ctype - * > macros don't need to be guarded with references to isascii. ... - * > Defining isascii to 1 should let any compiler worth its salt - * > eliminate the && through constant folding." - * > - * > Bruno Haible adds: - * > - * > "... Furthermore, isupper(c) etc. have an undefined result if c is - * > outside the range -1 <= c <= 255. One is tempted to write isupper(c) - * > with c being of type `char', but this is wrong if c is an 8-bit - * > character >= 128 which gets sign-extended to a negative value. - * > The macro ISUPPER protects against this as well." - * - * So the intent was to reroute old problematic systems that no longer exist. - * At the same time the problems described above no longer hurt us, because we - * decided to completely avoid using system-provided isupper etc. to reinvent - * the wheel. These macros are entirely legacy; please ignore them. - * - * But let me also put stress that GNU people are wise; they use those macros - * only inside of their own implementations and never let them be public. On - * the other hand ruby has thoughtlessly publicised them to 3rd party libraries - * since its beginning, which is a very bad idea. These macros are too easy to - * get conflicted with definitions elsewhere. - * - * New programs should stick to the `rb_` prefixed names. - * - * @note It seems we just mimic the API. We do not share their implementation - * with GPL-ed programs. - * - * @{ - */ -#ifndef ISPRINT -# define ISASCII rb_isascii /**< @old{rb_isascii}*/ -# define ISPRINT rb_isprint /**< @old{rb_isprint}*/ -# define ISGRAPH rb_isgraph /**< @old{rb_isgraph}*/ -# define ISSPACE rb_isspace /**< @old{rb_isspace}*/ -# define ISUPPER rb_isupper /**< @old{rb_isupper}*/ -# define ISLOWER rb_islower /**< @old{rb_islower}*/ -# define ISALNUM rb_isalnum /**< @old{rb_isalnum}*/ -# define ISALPHA rb_isalpha /**< @old{rb_isalpha}*/ -# define ISDIGIT rb_isdigit /**< @old{rb_isdigit}*/ -# define ISXDIGIT rb_isxdigit /**< @old{rb_isxdigit}*/ -# define ISBLANK rb_isblank /**< @old{rb_isblank}*/ -# define ISCNTRL rb_iscntrl /**< @old{rb_iscntrl}*/ -# define ISPUNCT rb_ispunct /**< @old{rb_ispunct}*/ -#endif - -#define TOUPPER rb_toupper /**< @old{rb_toupper}*/ -#define TOLOWER rb_tolower /**< @old{rb_tolower}*/ -#define STRCASECMP st_locale_insensitive_strcasecmp /**< @old{st_locale_insensitive_strcasecmp}*/ -#define STRNCASECMP st_locale_insensitive_strncasecmp /**< @old{st_locale_insensitive_strncasecmp}*/ -#define STRTOUL ruby_strtoul /**< @old{ruby_strtoul}*/ - -/** @} */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** @name locale insensitive functions - * @{ - */ - -/* In descriptions below, `the POSIX Locale` and `the "C" locale` are tactfully - * used as to whether the described function mimics POSIX or C99. */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Our own locale-insensitive version of `strcasecmp(3)`. The "case" here - * always means that of the POSIX Locale. It doesn't depend on runtime locale - * settings. - * - * @param[in] s1 Comparison LHS. - * @param[in] s2 Comparison RHS. - * @retval -1 `s1` is "less" than `s2`. - * @retval 0 Both strings converted into lowercase would be identical. - * @retval 1 `s1` is "greater" than `s2`. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - */ -int st_locale_insensitive_strcasecmp(const char *s1, const char *s2); - -RBIMPL_ATTR_NONNULL(()) -/** - * Our own locale-insensitive version of `strcnasecmp(3)`. The "case" here - * always means that of the POSIX Locale. It doesn't depend on runtime locale - * settings. - * - * @param[in] s1 Comparison LHS. - * @param[in] s2 Comparison RHS. - * @param[in] n Comparison shall stop after first `n` bytes are scanned. - * @retval -1 `s1` is "less" than `s2`. - * @retval 0 Both strings converted into lowercase would be identical. - * @retval 1 `s1` is "greater" than `s2`. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning This function is _not_ timing safe. - */ -int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Our own locale-insensitive version of `strtoul(3)`. The conversion is done - * as if the current locale is set to the "C" locale, no matter actual runtime - * locale settings. - * - * @note This is needed because `strtoul("i", 0, 36)` would return zero - * if it is locale sensitive and the current locale is `tr_TR`. - * @param[in] str String of digits, optionally preceded with whitespaces - * (ignored) and optionally `+` or `-` sign. - * @param[out] endptr NULL, or an arbitrary pointer (overwritten on return). - * @param[in] base `2` to `36` inclusive for each base, or special case - * `0` to detect the base from the contents of the string. - * @return Converted integer, casted to unsigned long. - * @post If `endptr` is not NULL, it is updated to point the first such - * byte where conversion failed. - * @note This function sets `errno` on failure. - * - `EINVAL`: Passed `base` is out of range. - * - `ERANGE`: Converted integer is out of range of `long`. - * @warning As far as @shyouhei reads ISO/IEC 9899:2018 section 7.22.1.4, a - * conforming `strtoul` implementation shall render `ERANGE` - * whenever it finds the input string represents a negative - * integer. Such thing can never be representable using `unsigned - * long`. However this implementation does not honour that - * language. It just casts such negative value to the return - * type, resulting a very big return value. This behaviour is at - * least questionable. But we can no longer change that at this - * point. - * @note Not only does this function works under the "C" locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - */ -unsigned long ruby_strtoul(const char *str, char **endptr, int base); -RBIMPL_SYMBOL_EXPORT_END() - -/* - * We are making the functions below to return `int` instead of `bool`. They - * have been as such since their birth at 5f237d79033b2109afb768bc889611fa9630. - */ - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `isascii(3)`. - * - * @param[in] c Byte in question to query. - * @retval false `c` is out of range of ASCII character set. - * @retval true Yes it is. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_isascii(int c) -{ - return '\0' <= c && c <= '\x7f'; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `isupper(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in IEEE 1003.1 section 7.3.1.1 "upper". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_isupper(int c) -{ - return 'A' <= c && c <= 'Z'; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `islower(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in IEEE 1003.1 section 7.3.1.1 "lower". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_islower(int c) -{ - return 'a' <= c && c <= 'z'; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `isalpha(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in either IEEE 1003.1 section 7.3.1.1 - * "upper" or "lower". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_isalpha(int c) -{ - return rb_isupper(c) || rb_islower(c); -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `isdigit(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in IEEE 1003.1 section 7.3.1.1 "digit". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_isdigit(int c) -{ - return '0' <= c && c <= '9'; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `isalnum(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in either IEEE 1003.1 section 7.3.1.1 - * "upper", "lower", or "digit". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_isalnum(int c) -{ - return rb_isalpha(c) || rb_isdigit(c); -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `isxdigit(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in IEEE 1003.1 section 7.3.1.1 "xdigit". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_isxdigit(int c) -{ - return rb_isdigit(c) || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f'); -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `isblank(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in IEEE 1003.1 section 7.3.1.1 "blank". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_isblank(int c) -{ - return c == ' ' || c == '\t'; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `isspace(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in IEEE 1003.1 section 7.3.1.1 "space". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_isspace(int c) -{ - return c == ' ' || ('\t' <= c && c <= '\r'); -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `iscntrl(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in IEEE 1003.1 section 7.3.1.1 "cntrl". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_iscntrl(int c) -{ - return ('\0' <= c && c < ' ') || c == '\x7f'; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Identical to rb_isgraph(), except it also returns true for `' '`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in either IEEE 1003.1 section 7.3.1.1 - * "upper", "lower", "digit", "punct", or a `' '`. - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_isprint(int c) -{ - return ' ' <= c && c <= '\x7e'; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `ispunct(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in IEEE 1003.1 section 7.3.1.1 "punct". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_ispunct(int c) -{ - return !rb_isalnum(c); -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `isgraph(3)`. - * - * @param[in] c Byte in question to query. - * @retval true `c` is listed in either IEEE 1003.1 section 7.3.1.1 - * "upper", "lower", "digit", or "punct". - * @retval false Anything else. - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_isgraph(int c) -{ - return '!' <= c && c <= '\x7e'; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `tolower(3)`. - * - * @param[in] c Byte in question to convert. - * @retval c The byte is not listed in in IEEE 1003.1 section - * 7.3.1.1 "upper". - * @retval otherwise Byte converted using the map defined in IEEE 1003.1 - * section 7.3.1 "tolower". - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_tolower(int c) -{ - return rb_isupper(c) ? (c|0x20) : c; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Our own locale-insensitive version of `toupper(3)`. - * - * @param[in] c Byte in question to convert. - * @retval c The byte is not listed in in IEEE 1003.1 section - * 7.3.1.1 "lower". - * @retval otherwise Byte converted using the map defined in IEEE 1003.1 - * section 7.3.1 "toupper". - * @note Not only does this function works under the POSIX Locale, but - * also assumes its execution character set be what ruby calls an - * ASCII-compatible character set; which does not include for - * instance EBCDIC or UTF-16LE. - * @warning `c` is an int. This means that when you pass a `char` value - * here, it experiences "integer promotion" as defined in ISO/IEC - * 9899:2018 section 6.3.1.1 paragraph 1. - */ -static inline int -rb_toupper(int c) -{ - return rb_islower(c) ? (c&0x5f) : c; -} - -/** @} */ -#endif /* RBIMPL_CTYPE_H */ diff --git a/libs/libruby/ruby/internal/dllexport.h b/libs/libruby/ruby/internal/dllexport.h deleted file mode 100644 index 08a2622..0000000 --- a/libs/libruby/ruby/internal/dllexport.h +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef RBIMPL_DLLEXPORT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_DLLEXPORT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Tweaking visibility of C variables/functions. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/compiler_is.h" - -/** - * Declaration of externally visible global variables. Here "externally" means - * they should be visible from extension libraries. Depending on operating - * systems (dynamic linkers, to be precise), global variables inside of a DLL - * may or may not be visible form outside of that DLL by default. This - * declaration manually tweaks that default and ensures the declared variable - * be truly globally visible. - * - * ```CXX - * extern VALUE foo; // hidden on some OS - * RUBY_EXTERN VALUE foo; // ensure visible - * ``` - */ -#undef RUBY_EXTERN -#if defined(MJIT_HEADER) && defined(_WIN32) -# define RUBY_EXTERN extern __declspec(dllimport) -#elif defined(RUBY_EXPORT) -# define RUBY_EXTERN extern -#elif defined(_WIN32) -# define RUBY_EXTERN extern __declspec(dllimport) -#else -# define RUBY_EXTERN extern -#endif - -#ifndef RUBY_SYMBOL_EXPORT_BEGIN -# define RUBY_SYMBOL_EXPORT_BEGIN /* begin */ -#endif - -#ifndef RUBY_SYMBOL_EXPORT_END -# define RUBY_SYMBOL_EXPORT_END /* end */ -#endif - -#ifndef RUBY_FUNC_EXPORTED -# define RUBY_FUNC_EXPORTED /* void */ -#endif - -/** - * @cond INTERNAL_MACRO - * - * These MJIT related macros are placed here because translate_mjit_header can - * need them. Extension libraries should not touch. - */ - -/* These macros are used for functions which are exported only for MJIT - and NOT ensured to be exported in future versions. */ - -#if ! defined(MJIT_HEADER) -# define MJIT_FUNC_EXPORTED RUBY_FUNC_EXPORTED -#elif ! RBIMPL_COMPILER_IS(MSVC) -# define MJIT_FUNC_EXPORTED RUBY_FUNC_EXPORTED -#else -# define MJIT_FUNC_EXPORTED static -#endif - -#define MJIT_SYMBOL_EXPORT_BEGIN RUBY_SYMBOL_EXPORT_BEGIN -#define MJIT_SYMBOL_EXPORT_END RUBY_SYMBOL_EXPORT_END - -/* On mswin, MJIT header transformation can't be used since cl.exe can't output - preprocessed output preserving macros. So this `MJIT_STATIC` is needed - to force non-static function to static on MJIT header to avoid symbol conflict. */ -#ifdef MJIT_HEADER -# define MJIT_STATIC static -#else -# define MJIT_STATIC -#endif - -/** @endcond */ - -/** Shortcut macro equivalent to `RUBY_SYMBOL_EXPORT_BEGIN extern "C" {`. - * \@shyouhei finds it handy. */ -#if defined(__DOXYGEN__) -# define RBIMPL_SYMBOL_EXPORT_BEGIN() /* void */ -#elif defined(__cplusplus) -# define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN extern "C" { -#else -# define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN -#endif - -/** Counterpart of #RBIMPL_SYMBOL_EXPORT_BEGIN */ -#if defined(__DOXYGEN__) -# define RBIMPL_SYMBOL_EXPORT_END() /* void */ -#elif defined(__cplusplus) -# define RBIMPL_SYMBOL_EXPORT_END() } RUBY_SYMBOL_EXPORT_END -#else -# define RBIMPL_SYMBOL_EXPORT_END() RUBY_SYMBOL_EXPORT_END -#endif -#endif /* RBIMPL_DLLEXPORT_H */ diff --git a/libs/libruby/ruby/internal/dosish.h b/libs/libruby/ruby/internal/dosish.h deleted file mode 100644 index 7d354dd..0000000 --- a/libs/libruby/ruby/internal/dosish.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef RBIMPL_DOSISH_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_DOSISH_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Support for so-called dosish systems. - */ -#ifdef __CYGWIN__ -#undef _WIN32 -#endif - -#if defined(_WIN32) -/* - DOSISH mean MS-Windows style filesystem. - But you should use more precise macros like DOSISH_DRIVE_LETTER, PATH_SEP, - ENV_IGNORECASE or CASEFOLD_FILESYSTEM. - */ -#define DOSISH 1 -# define DOSISH_DRIVE_LETTER -#endif - -#ifdef _WIN32 -#include "ruby/win32.h" -#endif - -/** The delimiter of `PATH` environment variable. */ -#if defined(DOSISH) -#define PATH_SEP ";" -#else -#define PATH_SEP ":" -#endif - -/** Identical to #PATH_SEP, except it is of type `char`. */ -#define PATH_SEP_CHAR PATH_SEP[0] - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - * - * @internal - * - * For historical interests: there was an operating system called Human68k - * which used an environment variable called `"path"` for this purpose. - */ -#define PATH_ENV "PATH" - -#if defined(DOSISH) -#define ENV_IGNORECASE -#endif - -/** - * Stone age assumption was that an operating system supports only one file - * system at a moment. This macro was to detect if such (one and only) file - * system has case sensitivity. This assumption is largely not true any - * longer; most operating systems can mount many kinds of file systems side by - * side. Also there are file systems that do or do not ignore cases depending - * on configuration (e.g. EXT4's `casefold` feature). - * - * This macro is still used internally (for instance Ruby level constant - * `File::FNM_SYSCASE` depends on it), but it is basically a wrong idea for you - * to use it today. Please just find another way. - */ -#ifndef CASEFOLD_FILESYSTEM -# if defined DOSISH -# define CASEFOLD_FILESYSTEM 1 -# else -# define CASEFOLD_FILESYSTEM 0 -# endif -#endif - -#endif /* RBIMPL_DOSISH_H */ diff --git a/libs/libruby/ruby/internal/encoding/coderange.h b/libs/libruby/ruby/internal/encoding/coderange.h deleted file mode 100644 index 7a81208..0000000 --- a/libs/libruby/ruby/internal/encoding/coderange.h +++ /dev/null @@ -1,202 +0,0 @@ -#ifndef RUBY_INTERNAL_ENCODING_CODERANGE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_INTERNAL_ENCODING_CODERANGE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines for code ranges. - */ - -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/fl_type.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** What rb_enc_str_coderange() returns. */ -enum ruby_coderange_type { - - /** The object's coderange is unclear yet. */ - RUBY_ENC_CODERANGE_UNKNOWN = 0, - - /** The object holds 0 to 127 inclusive and nothing else. */ - RUBY_ENC_CODERANGE_7BIT = ((int)RUBY_FL_USER8), - - /** The object's encoding and contents are consistent each other */ - RUBY_ENC_CODERANGE_VALID = ((int)RUBY_FL_USER9), - - /** The object holds invalid/malformed/broken character(s). */ - RUBY_ENC_CODERANGE_BROKEN = ((int)(RUBY_FL_USER8|RUBY_FL_USER9)), - - /** Where the coderange resides. */ - RUBY_ENC_CODERANGE_MASK = (RUBY_ENC_CODERANGE_7BIT| - RUBY_ENC_CODERANGE_VALID| - RUBY_ENC_CODERANGE_BROKEN) -}; - -RBIMPL_ATTR_CONST() -/** - * @private - * - * This is an implementation detail of #RB_ENC_CODERANGE_CLEAN_P. People don't - * use it directly. - * - * @param[in] cr An enum ::ruby_coderange_type. - * @retval 1 It is. - * @retval 0 It isn't. - */ -static inline int -rb_enc_coderange_clean_p(int cr) -{ - return (cr ^ (cr >> 1)) & RUBY_ENC_CODERANGE_7BIT; -} - -RBIMPL_ATTR_CONST() -/** - * Queries if a code range is "clean". "Clean" in this context means it is - * known and valid. - * - * @param[in] cr An enum ::ruby_coderange_type. - * @retval 1 It is. - * @retval 0 It isn't. - */ -static inline bool -RB_ENC_CODERANGE_CLEAN_P(enum ruby_coderange_type cr) -{ - return rb_enc_coderange_clean_p(cr); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -/** - * Queries the (inline) code range of the passed object. The object must be - * capable of having inline encoding. Using this macro needs deep - * understanding of bit level object binary layout. - * - * @param[in] obj Target object. - * @return An enum ::ruby_coderange_type. - */ -static inline enum ruby_coderange_type -RB_ENC_CODERANGE(VALUE obj) -{ - VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENC_CODERANGE_MASK); - - return RBIMPL_CAST((enum ruby_coderange_type)ret); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -/** - * Queries the (inline) code range of the passed object is - * ::RUBY_ENC_CODERANGE_7BIT. The object must be capable of having inline - * encoding. Using this macro needs deep understanding of bit level object - * binary layout. - * - * @param[in] obj Target object. - * @retval 1 It is ascii only. - * @retval 0 Otherwise (including cases when the range is not known). - */ -static inline bool -RB_ENC_CODERANGE_ASCIIONLY(VALUE obj) -{ - return RB_ENC_CODERANGE(obj) == RUBY_ENC_CODERANGE_7BIT; -} - -/** - * Destructively modifies the passed object so that its (inline) code range is - * the passed one. The object must be capable of having inline encoding. - * Using this macro needs deep understanding of bit level object binary layout. - * - * @param[out] obj Target object. - * @param[out] cr An enum ::ruby_coderange_type. - * @post `obj`'s code range is `cr`. - */ -static inline void -RB_ENC_CODERANGE_SET(VALUE obj, enum ruby_coderange_type cr) -{ - RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK); - RB_FL_SET_RAW(obj, cr); -} - -/** - * Destructively clears the passed object's (inline) code range. The object - * must be capable of having inline encoding. Using this macro needs deep - * understanding of bit level object binary layout. - * - * @param[out] obj Target object. - * @post `obj`'s code range is ::RUBY_ENC_CODERANGE_UNKNOWN. - */ -static inline void -RB_ENC_CODERANGE_CLEAR(VALUE obj) -{ - RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK); -} - -RBIMPL_ATTR_CONST() -/* assumed ASCII compatibility */ -/** - * "Mix" two code ranges into one. This is handy for instance when you - * concatenate two strings into one. Consider one of then is valid but the - * other isn't. The result must be invalid. This macro computes that kind of - * mixture. - * - * @param[in] a An enum ::ruby_coderange_type. - * @param[in] b Another enum ::ruby_coderange_type. - * @return The `a` "and" `b`. - */ -static inline enum ruby_coderange_type -RB_ENC_CODERANGE_AND(enum ruby_coderange_type a, enum ruby_coderange_type b) -{ - if (a == RUBY_ENC_CODERANGE_7BIT) { - return b; - } - else if (a != RUBY_ENC_CODERANGE_VALID) { - return RUBY_ENC_CODERANGE_UNKNOWN; - } - else if (b == RUBY_ENC_CODERANGE_7BIT) { - return RUBY_ENC_CODERANGE_VALID; - } - else { - return b; - } -} - -#define ENC_CODERANGE_MASK RUBY_ENC_CODERANGE_MASK /**< @old{RUBY_ENC_CODERANGE_MASK} */ -#define ENC_CODERANGE_UNKNOWN RUBY_ENC_CODERANGE_UNKNOWN /**< @old{RUBY_ENC_CODERANGE_UNKNOWN} */ -#define ENC_CODERANGE_7BIT RUBY_ENC_CODERANGE_7BIT /**< @old{RUBY_ENC_CODERANGE_7BIT} */ -#define ENC_CODERANGE_VALID RUBY_ENC_CODERANGE_VALID /**< @old{RUBY_ENC_CODERANGE_VALID} */ -#define ENC_CODERANGE_BROKEN RUBY_ENC_CODERANGE_BROKEN /**< @old{RUBY_ENC_CODERANGE_BROKEN} */ -#define ENC_CODERANGE_CLEAN_P(cr) RB_ENC_CODERANGE_CLEAN_P(cr) /**< @old{RB_ENC_CODERANGE_CLEAN_P} */ -#define ENC_CODERANGE(obj) RB_ENC_CODERANGE(obj) /**< @old{RB_ENC_CODERANGE} */ -#define ENC_CODERANGE_ASCIIONLY(obj) RB_ENC_CODERANGE_ASCIIONLY(obj) /**< @old{RB_ENC_CODERANGE_ASCIIONLY} */ -#define ENC_CODERANGE_SET(obj,cr) RB_ENC_CODERANGE_SET(obj,cr) /**< @old{RB_ENC_CODERANGE_SET} */ -#define ENC_CODERANGE_CLEAR(obj) RB_ENC_CODERANGE_CLEAR(obj) /**< @old{RB_ENC_CODERANGE_CLEAR} */ -#define ENC_CODERANGE_AND(a, b) RB_ENC_CODERANGE_AND(a, b) /**< @old{RB_ENC_CODERANGE_AND} */ -#define ENCODING_CODERANGE_SET(obj, encindex, cr) RB_ENCODING_CODERANGE_SET(obj, encindex, cr) /**< @old{RB_ENCODING_CODERANGE_SET} */ - -/** @cond INTERNAL_MACRO */ -#define RB_ENC_CODERANGE RB_ENC_CODERANGE -#define RB_ENC_CODERANGE_AND RB_ENC_CODERANGE_AND -#define RB_ENC_CODERANGE_ASCIIONLY RB_ENC_CODERANGE_ASCIIONLY -#define RB_ENC_CODERANGE_CLEAN_P RB_ENC_CODERANGE_CLEAN_P -#define RB_ENC_CODERANGE_CLEAR RB_ENC_CODERANGE_CLEAR -#define RB_ENC_CODERANGE_SET RB_ENC_CODERANGE_SET -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_INTERNAL_ENCODING_CODERANGE_H */ diff --git a/libs/libruby/ruby/internal/encoding/ctype.h b/libs/libruby/ruby/internal/encoding/ctype.h deleted file mode 100644 index 05c314a..0000000 --- a/libs/libruby/ruby/internal/encoding/ctype.h +++ /dev/null @@ -1,258 +0,0 @@ -#ifndef RUBY_INTERNAL_ENCODING_CTYPE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_INTERNAL_ENCODING_CTYPE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines to query chacater types. - */ - -#include "ruby/onigmo.h" -#include "ruby/internal/attr/const.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/encoding/encoding.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Queries if the passed pointer points to a newline character. What is a - * newline and what is not depends on the passed encoding. - * - * @param[in] p Pointer to a possibly-middle of a character. - * @param[in] end End of the string. - * @param[in] enc Encoding. - * @retval false It isn't. - * @retval true It is. - */ -static inline bool -rb_enc_is_newline(const char *p, const char *e, rb_encoding *enc) -{ - OnigUChar *up = RBIMPL_CAST((OnigUChar *)p); - OnigUChar *ue = RBIMPL_CAST((OnigUChar *)e); - - return ONIGENC_IS_MBC_NEWLINE(enc, up, ue); -} - -/** - * Queries if the passed code point is of passed character type in the passed - * encoding. The "character type" here is a set of macros defined in onigmo.h, - * like `ONIGENC_CTYPE_PUNCT`. - * - * @param[in] c An `OnigCodePoint` value. - * @param[in] t An `OnigCtype` value. - * @param[in] enc A `rb_encoding*` value. - * @retval true `c` is of `t` in `enc`. - * @retval false Otherwise. - */ -static inline bool -rb_enc_isctype(OnigCodePoint c, OnigCtype t, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_CTYPE(enc, c, t); -} - -/** - * Identical to rb_isascii(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @retval false `c` is out of range of ASCII character set in `enc`. - * @retval true Otherwise. - * - * @internal - * - * `enc` is ignored. This is at least an intentional implementation detail - * (not a bug). But there could be rooms for future extensions. - */ -static inline bool -rb_enc_isascii(OnigCodePoint c, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_ASCII(c); -} - -/** - * Identical to rb_isalpha(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @retval true `enc` classifies `c` as "ALPHA". - * @retval false Otherwise. - */ -static inline bool -rb_enc_isalpha(OnigCodePoint c, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_ALPHA(enc, c); -} - -/** - * Identical to rb_islower(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @retval true `enc` classifies `c` as "LOWER". - * @retval false Otherwise. - */ -static inline bool -rb_enc_islower(OnigCodePoint c, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_LOWER(enc, c); -} - -/** - * Identical to rb_isupper(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @retval true `enc` classifies `c` as "UPPER". - * @retval false Otherwise. - */ -static inline bool -rb_enc_isupper(OnigCodePoint c, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_UPPER(enc, c); -} - -/** - * Identical to rb_iscntrl(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @retval true `enc` classifies `c` as "CNTRL". - * @retval false Otherwise. - */ -static inline bool -rb_enc_iscntrl(OnigCodePoint c, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_CNTRL(enc, c); -} - -/** - * Identical to rb_ispunct(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @retval true `enc` classifies `c` as "PUNCT". - * @retval false Otherwise. - */ -static inline bool -rb_enc_ispunct(OnigCodePoint c, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_PUNCT(enc, c); -} - -/** - * Identical to rb_isalnum(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @retval true `enc` classifies `c` as "ANUM". - * @retval false Otherwise. - */ -static inline bool -rb_enc_isalnum(OnigCodePoint c, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_ALNUM(enc, c); -} - -/** - * Identical to rb_isprint(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @retval true `enc` classifies `c` as "PRINT". - * @retval false Otherwise. - */ -static inline bool -rb_enc_isprint(OnigCodePoint c, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_PRINT(enc, c); -} - -/** - * Identical to rb_isspace(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @retval true `enc` classifies `c` as "PRINT". - * @retval false Otherwise. - */ -static inline bool -rb_enc_isspace(OnigCodePoint c, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_SPACE(enc, c); -} - -/** - * Identical to rb_isdigit(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @retval true `enc` classifies `c` as "DIGIT". - * @retval false Otherwise. - */ -static inline bool -rb_enc_isdigit(OnigCodePoint c, rb_encoding *enc) -{ - return ONIGENC_IS_CODE_DIGIT(enc, c); -} - -RBIMPL_ATTR_CONST() -/** - * Identical to rb_toupper(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @return `c`'s (Ruby's definition of) upper case counterpart. - * - * @internal - * - * As `RBIMPL_ATTR_CONST` implies this function ignores `enc`. - */ -int rb_enc_toupper(int c, rb_encoding *enc); - -RBIMPL_ATTR_CONST() -/** - * Identical to rb_tolower(), except it additionally takes an encoding. - * - * @param[in] c A code point. - * @param[in] enc An encoding. - * @return `c`'s (Ruby's definition of) lower case counterpart. - * - * @internal - * - * As `RBIMPL_ATTR_CONST` implies this function ignores `enc`. - */ -int rb_enc_tolower(int c, rb_encoding *enc); - -RBIMPL_SYMBOL_EXPORT_END() - -/** @cond INTERNAL_MACRO */ -#define rb_enc_is_newline rb_enc_is_newline -#define rb_enc_isalnum rb_enc_isalnum -#define rb_enc_isalpha rb_enc_isalpha -#define rb_enc_isascii rb_enc_isascii -#define rb_enc_isctype rb_enc_isctype -#define rb_enc_isdigit rb_enc_isdigit -#define rb_enc_islower rb_enc_islower -#define rb_enc_isprint rb_enc_isprint -#define rb_enc_iscntrl rb_enc_iscntrl -#define rb_enc_ispunct rb_enc_ispunct -#define rb_enc_isspace rb_enc_isspace -#define rb_enc_isupper rb_enc_isupper -/** @endcond */ - -#endif /* RUBY_INTERNAL_ENCODING_CTYPE_H */ diff --git a/libs/libruby/ruby/internal/encoding/encoding.h b/libs/libruby/ruby/internal/encoding/encoding.h deleted file mode 100644 index 4748ca8..0000000 --- a/libs/libruby/ruby/internal/encoding/encoding.h +++ /dev/null @@ -1,1060 +0,0 @@ -#ifndef RUBY_INTERNAL_ENCODING_ENCODING_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_INTERNAL_ENCODING_ENCODING_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines ::rb_encoding - */ - -#include "ruby/oniguruma.h" -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/deprecated.h" -#include "ruby/internal/attr/noalias.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/attr/returns_nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/fl_type.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * `Encoding` class. - * - * @ingroup object - */ -RUBY_EXTERN VALUE rb_cEncoding; - -/** - * @private - * - * Bit constants used when embedding encodings into ::RBasic::flags. Extension - * libraries must not bother such things. - */ -enum ruby_encoding_consts { - - /** Max possible number of embeddable encodings. */ - RUBY_ENCODING_INLINE_MAX = 127, - - /** Where inline encodings reside. */ - RUBY_ENCODING_SHIFT = (RUBY_FL_USHIFT+10), - - /** Bits we use to store inline encodings. */ - RUBY_ENCODING_MASK = (RUBY_ENCODING_INLINE_MAX<> RUBY_ENCODING_SHIFT; - - return RBIMPL_CAST((int)ret); -} - -#define ENCODING_SET_INLINED(obj,i) RB_ENCODING_SET_INLINED(obj,i) /**< @old{RB_ENCODING_SET_INLINED} */ -#define ENCODING_SET(obj,i) RB_ENCODING_SET(obj,i) /**< @old{RB_ENCODING_SET} */ -#define ENCODING_GET_INLINED(obj) RB_ENCODING_GET_INLINED(obj) /**< @old{RB_ENCODING_GET_INLINED} */ -#define ENCODING_GET(obj) RB_ENCODING_GET(obj) /**< @old{RB_ENCODING_GET} */ -#define ENCODING_IS_ASCII8BIT(obj) RB_ENCODING_IS_ASCII8BIT(obj) /**< @old{RB_ENCODING_IS_ASCII8BIT} */ -#define ENCODING_MAXNAMELEN RUBY_ENCODING_MAXNAMELEN /**< @old{RUBY_ENCODING_MAXNAMELEN} */ - -/** - * The type of encoding. Our design here is we take Oniguruma/Onigmo's - * multilingualisation schema as our base data structure. - */ -typedef const OnigEncodingType rb_encoding; - -RBIMPL_ATTR_NOALIAS() -/** - * Converts a character option to its encoding. It only supports a very - * limited set of Japanese encodings due to its Japanese origin. Ruby still - * has this in-core for backwards compatibility. But new codes must not bother - * such concept like one-character encoding option. Consider deprecated in - * practice. - * - * @param[in] c One of `['n', 'e', 's', 'u', 'i', 'x', 'm']`. - * @param[out] option Return buffer. - * @param[out] kcode Return buffer. - * @retval 1 `c` understood properly. - * @retval 0 `c` is not understood. - * @post `option` is a ::OnigOptionType. - * @post `kcode` is an enum `ruby_preserved_encindex`. - * - * @internal - * - * `kcode` is opaque because `ruby_preserved_encindex` is not visible from - * extension libraries. But who cares? - */ -int rb_char_to_option_kcode(int c, int *option, int *kcode); - -/** - * Creates a new encoding, using the passed one as a template. - * - * @param[in] name Name of the creating encoding. - * @param[in] src Template. - * @exception rb_eArgError Duplicated or malformed `name`. - * @return Replicated new encoding's index. - * @post Encoding named `name` is created as a copy of `src`, whose index - * is the return value. - * - * @internal - * - * `name` can be `NULL`, but that just raises an exception. OTOH it seems no - * sanity check is done against `src`...? - */ -int rb_enc_replicate(const char *name, rb_encoding *src); - -/** - * Creates a new "dummy" encoding. Roughly speaking, an encoding is dummy when - * it is stateful. Notable example of dummy encoding are those defined in - * ISO/IEC 2022 - * - * @param[in] name Name of the creating encoding. - * @exception rb_eArgError Duplicated or malformed `name`. - * @return New dummy encoding's index. - * @post Encoding named `name` is created, whose index is the return - * value. - */ -int rb_define_dummy_encoding(const char *name); - -RBIMPL_ATTR_PURE() -/** - * Queries if the passed encoding is dummy. - * - * @param[in] enc Encoding in question. - * @retval 1 It is. - * @retval 0 It isn't. - */ -int rb_enc_dummy_p(rb_encoding *enc); - -RBIMPL_ATTR_PURE() -/** - * Queries the index of the encoding. An encoding's index is a Ruby-local - * concept. It is a (sequential) number assigned to each encoding. - * - * @param[in] enc Encoding in question. - * @return Its index. - * @note You can pass null pointers to this function. It is equivalent - * to rb_usascii_encindex() then. - */ -int rb_enc_to_index(rb_encoding *enc); - -/** - * Queries the index of the encoding of the passed object, if any. - * - * @param[in] obj Object in question. - * @retval -1 `obj` is incapable of having an encoding. - * @retval otherwise `obj`'s encoding's index. - */ -int rb_enc_get_index(VALUE obj); - -/** - * @alias{rb_enc_get_index} - * - * @internal - * - * Implementation wise this is not a verbatim alias of rb_enc_get_index(). But - * the API is consistent. Don't bother. - */ -static inline int -RB_ENCODING_GET(VALUE obj) -{ - int encindex = RB_ENCODING_GET_INLINED(obj); - - if (encindex == RUBY_ENCODING_INLINE_MAX) { - return rb_enc_get_index(obj); - } - else { - return encindex; - } -} - -/** - * Destructively assigns an encoding (via its index) to an object. - * - * @param[out] obj Object in question. - * @param[in] encindex An encoding index. - * @exception rb_eFrozenError `obj` is frozen. - * @exception rb_eArgError `obj` is incapable of having an encoding. - * @exception rb_eEncodingError `encindex` is out of bounds. - * @exception rb_eLoadError Failed to load the encoding. - */ -void rb_enc_set_index(VALUE obj, int encindex); - -/** @alias{rb_enc_set_index} */ -static inline void -RB_ENCODING_SET(VALUE obj, int encindex) -{ - rb_enc_set_index(obj, encindex); -} - -/** - * This is #RB_ENCODING_SET + RB_ENC_CODERANGE_SET combo. The object must be - * capable of having inline encoding. Using this macro needs deep - * understanding of bit level object binary layout. - * - * @param[out] obj Target object. - * @param[in] encindex Encoding in encindex format. - * @param[in] cr An enum ::ruby_coderange_type. - * @post `obj`'s encoding is `encindex`. - * @post `obj`'s code range is `cr`. - */ -static inline void -RB_ENCODING_CODERANGE_SET(VALUE obj, int encindex, enum ruby_coderange_type cr) -{ - RB_ENCODING_SET(obj, encindex); - RB_ENC_CODERANGE_SET(obj, cr); -} - -RBIMPL_ATTR_PURE() -/** - * Queries if the passed object can have its encoding. - * - * @param[in] obj Object in question. - * @retval 1 It can. - * @retval 0 It cannot. - */ -int rb_enc_capable(VALUE obj); - -/** - * Queries the index of the encoding. - * - * @param[in] name Name of the encoding to find. - * @exception rb_eArgError No such encoding named `name`. - * @retval -1 `name` exists, but unable to load. - * @retval otherwise Index of encoding named `name`. - */ -int rb_enc_find_index(const char *name); - -/** - * Registers an "alias" name. In the wild, an encoding can be called using - * multiple names. For instance an encoding known as `"CP932"` is also called - * `"SJIS"` on occasions. This API registers such relationships. - * - * @param[in] alias New name. - * @param[in] orig Old name. - * @exception rb_eArgError `alias` is duplicated or malformed. - * @retval -1 Failed to load `orig`. - * @retval otherwise The index of `orig` and `alias`. - * @post `alias` is a synonym of `orig`. They refer to the identical - * encoding. - */ -int rb_enc_alias(const char *alias, const char *orig); - -/** - * Obtains a encoding index from a wider range of objects (than - * rb_enc_find_index()). - * - * @param[in] obj An ::rb_cEncoding, or its name in ::rb_cString. - * @retval -1 `obj` is unexpected type/contents. - * @retval otherwise Index corresponding to `obj`. - */ -int rb_to_encoding_index(VALUE obj); - -/** - * Identical to rb_find_encoding(), except it raises an exception instead of - * returning NULL. - * - * @param[in] obj An ::rb_cEncoding, or its name in ::rb_cString. - * @exception rb_eTypeError `obj` is neither ::rb_cEncoding nor ::rb_cString. - * @exception rb_eArgError `obj` is an unknown encoding name. - * @return Encoding of `obj`. - */ -rb_encoding *rb_to_encoding(VALUE obj); - -/** - * Identical to rb_to_encoding_index(), except the return type. - * - * @param[in] obj An ::rb_cEncoding, or its name in ::rb_cString. - * @exception rb_eTypeError `obj` is neither ::rb_cEncoding nor ::rb_cString. - * @retval NULL No such encoding. - * @return otherwise Encoding of `obj`. - */ -rb_encoding *rb_find_encoding(VALUE obj); - -/** - * Identical to rb_enc_get_index(), except the return type. - * - * @param[in] obj Object in question. - * @retval NULL Obj is incapable of having an encoding. - * @retval otherwise `obj`'s encoding. - */ -rb_encoding *rb_enc_get(VALUE obj); - -/** - * Look for the "common" encoding between the two. One character can or cannot - * be expressed depending on an encoding. This function finds the super-set of - * encodings that satisfy contents of both arguments. If that is impossible - * returns NULL. - * - * @param[in] str1 An object. - * @param[in] str2 Another object. - * @retval NULL No encoding can satisfy both at once. - * @retval otherwise Common encoding between the two. - * @note Arguments can be non-string, e.g. Regexp. - */ -rb_encoding *rb_enc_compatible(VALUE str1, VALUE str2); - -/** - * Identical to rb_enc_compatible(), except it raises an exception instead of - * returning NULL. - * - * @param[in] str1 An object. - * @param[in] str2 Another object. - * @exception rb_eEncCompatError No encoding can satisfy both. - * @return Common encoding between the two. - * @note Arguments can be non-string, e.g. Regexp. - */ -rb_encoding *rb_enc_check(VALUE str1,VALUE str2); - -/** - * Identical to rb_enc_set_index(), except it additionally does contents fix-up - * depending on the passed object. It for instance changes the byte length of - * terminating `U+0000` according to the passed encoding. - * - * @param[out] obj Object in question. - * @param[in] encindex An encoding index. - * @exception rb_eFrozenError `obj` is frozen. - * @exception rb_eArgError `obj` is incapable of having an encoding. - * @exception rb_eEncodingError `encindex` is out of bounds. - * @exception rb_eLoadError Failed to load the encoding. - * @return The passed `obj`. - * @post `obj`'s contents might be fixed according to `encindex`. - */ -VALUE rb_enc_associate_index(VALUE obj, int encindex); - -/** - * Identical to rb_enc_associate_index(), except it takes an encoding itself - * instead of its index. - * - * @param[out] obj Object in question. - * @param[in] enc An encoding. - * @exception rb_eFrozenError `obj` is frozen. - * @exception rb_eArgError `obj` is incapable of having an encoding. - * @return The passed `obj`. - * @post `obj`'s contents might be fixed according to `enc`. - */ -VALUE rb_enc_associate(VALUE obj, rb_encoding *enc); - -/** - * Destructively copies the encoding of the latter object to that of former - * one. It can also be seen as a routine identical to - * rb_enc_associate_index(), except it takes an object's encoding instead of an - * encoding's index. - * - * @param[out] dst Object to modify. - * @param[in] src Object to reference. - * @exception rb_eFrozenError `dst` is frozen. - * @exception rb_eArgError `dst` is incapable of having an encoding. - * @exception rb_eEncodingError `src` is incapable of having an encoding. - * @post `dst`'s encoding is that of `src`'s. - */ -void rb_enc_copy(VALUE dst, VALUE src); - - -/** - * Identical to rb_find_encoding(), except it takes an encoding index instead - * of a Ruby object. - * - * @param[in] idx An encoding index. - * @retval NULL No such encoding. - * @retval otherwise An encoding whose index is `idx`. - */ -rb_encoding *rb_enc_from_index(int idx); - -/** - * Identical to rb_find_encoding(), except it takes a C's string instead of - * Ruby's. - * - * @param[in] name Name of the encoding to query. - * @retval NULL No such encoding. - * @retval otherwise An encoding whose index is `idx`. - */ -rb_encoding *rb_enc_find(const char *name); - -/** - * Queries the (canonical) name of the passed encoding. - * - * @param[in] enc An encoding. - * @return Its name. - */ -static inline const char * -rb_enc_name(rb_encoding *enc) -{ - return enc->name; -} - -/** - * Queries the minimum number of bytes that the passed encoding needs to - * represent a character. For ASCII and compatible encodings this is typically - * 1. There are however encodings whose minimum is not 1; they are - * historically called wide characters. - * - * @param[in] enc An encoding. - * @return Its least possible number of bytes except 0. - */ -static inline int -rb_enc_mbminlen(rb_encoding *enc) -{ - return enc->min_enc_len; -} - -/** - * Queries the maximum number of bytes that the passed encoding needs to - * represent a character. Fixed-width encodings have the same value for this - * one and #rb_enc_mbminlen. However there are variable-width encodings. - * UTF-8, for instance, takes from 1 up to 6 bytes. - * - * @param[in] enc An encoding. - * @return Its maximum possible number of bytes of a character. - */ -static inline int -rb_enc_mbmaxlen(rb_encoding *enc) -{ - return enc->max_enc_len; -} - -/** - * Queries the number of bytes of the character at the passed pointer. - * - * @param[in] p Pointer to a character's first byte. - * @param[in] e End of the string that has `p`. - * @param[in] enc Encoding of the string. - * @return If the character at `p` does not end until `e`, number of bytes - * between `p` and `e`. Otherwise the number of bytes that the - * character at `p` is encoded. - * - * @internal - * - * Strictly speaking there are chances when `p` points to a middle byte of a - * wide character. This function returns "the number of bytes from `p` to - * nearest of either `e` or the next character boundary", if you go strict. - */ -int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc); - -/** - * Identical to rb_enc_mbclen() unless the character at `p` overruns `e`. That - * can happen for instance when you read from a socket and its partial read - * cuts a wide character in-between. In those situations this function - * "estimates" theoretical length of the character in question. Typically it - * tends to be possible to know how many bytes a character needs before - * actually reaching its end; for instance UTF-8 encodes a character's length - * in the first byte of it. This function returns that info. - * - * @note This implies that the string is not broken. - * - * @param[in] p Pointer to the character's first byte. - * @param[in] e End of the string that has `p`. - * @param[in] enc Encoding of the string. - * @return Number of bytes of character at `p`, measured or estimated. - */ -int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc); - -/** - * Queries the number of bytes of the character at the passed pointer. This - * function returns 3 different types of information: - * - * ```CXX - * auto n = rb_enc_precise_mbclen(p, q, r); - * - * if (ONIGENC_MBCLEN_CHARFOUND_P(n)) { - * // Character found. Normal return. - * auto found_length = ONIGENC_MBCLEN_CHARFOUND_LEN(n); - * } - * else if (ONIGENC_MBCLEN_NEEDMORE_P(n)) { - * // Character overruns past `q`; needs more. - * auto requested_length = ONIGENC_MBCLEN_NEEDMORE_LEN(n); - * } - * else { - * // `p` is broken. - * assert(ONIGENC_MBCLEN_INVALID_P(n)); - * } - * ``` - * - * @param[in] p Pointer to the character's first byte. - * @param[in] e End of the string that has `p`. - * @param[in] enc Encoding of the string. - * @return Encoded read/needed number of bytes (see above). - */ -int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc); - -#define MBCLEN_CHARFOUND_P(ret) ONIGENC_MBCLEN_CHARFOUND_P(ret) /**< @old{ONIGENC_MBCLEN_CHARFOUND_P} */ -#define MBCLEN_CHARFOUND_LEN(ret) ONIGENC_MBCLEN_CHARFOUND_LEN(ret) /**< @old{ONIGENC_MBCLEN_CHARFOUND_LEN} */ -#define MBCLEN_INVALID_P(ret) ONIGENC_MBCLEN_INVALID_P(ret) /**< @old{ONIGENC_MBCLEN_INVALID_P} */ -#define MBCLEN_NEEDMORE_P(ret) ONIGENC_MBCLEN_NEEDMORE_P(ret) /**< @old{ONIGENC_MBCLEN_NEEDMORE_P} */ -#define MBCLEN_NEEDMORE_LEN(ret) ONIGENC_MBCLEN_NEEDMORE_LEN(ret) /**< @old{ONIGENC_MBCLEN_NEEDMORE_LEN} */ - -/** - * Queries the code point of character pointed by the passed pointer. If that - * code point is included in ASCII that code point is returned. Otherwise -1. - * This can be different from just looking at the first byte. For instance it - * reads 2 bytes in case of UTF-16BE. - * - * @param[in] p Pointer to the character's first byte. - * @param[in] e End of the string that has `p`. - * @param[in] len Return buffer. - * @param[in] enc Encoding of the string. - * @retval -1 The character at `p` is not i ASCII. - * @retval otherwise A code point of the character at `p`. - * @post `len` (if set) is the number of bytes of `p`. - */ -int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc); - -/** - * Queries the code point of character pointed by the passed pointer. - * Exceptions happen in case of broken input. - * - * @param[in] p Pointer to the character's first byte. - * @param[in] e End of the string that has `p`. - * @param[in] len Return buffer. - * @param[in] enc Encoding of the string. - * @exception rb_eArgError `p` is broken. - * @return Code point of the character pointed by `p`. - * @post `len` (if set) is the number of bytes of `p`. - */ -unsigned int rb_enc_codepoint_len(const char *p, const char *e, int *len, rb_encoding *enc); - -/** - * Queries the code point of character pointed by the passed pointer. - * Exceptions happen in case of broken input. - * - * @deprecated Use rb_enc_codepoint_len() instead. - * @param[in] p Pointer to the character's first byte. - * @param[in] e End of the string that has `p`. - * @param[in] enc Encoding of the string. - * @exception rb_eArgError `p` is broken. - * @return Code point of the character pointed by `p`. - * - * @internal - * - * @matz says in commit 91e5ba1cb865a2385d3e1cbfacd824496898e098 that the line - * below is a "prototype for obsolete function". However even today there - * still are some use cases of it throughout our repository. It seems it has - * its own niche. - */ -static inline unsigned int -rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc) -{ - return rb_enc_codepoint_len(p, e, 0, enc); - /* ^^^ - * This can be `NULL` in C, `nullptr` in C++, and `0` for both. - * We choose the most portable one here. - */ -} - - -/** - * Identical to rb_enc_codepoint(), except it assumes the passed character is - * not broken. - * - * @param[in] p Pointer to the character's first byte. - * @param[in] e End of the string that has `p`. - * @param[in] enc Encoding of the string. - * @return Code point of the character pointed by `p`. - */ -static inline OnigCodePoint -rb_enc_mbc_to_codepoint(const char *p, const char *e, rb_encoding *enc) -{ - const OnigUChar *up = RBIMPL_CAST((const OnigUChar *)p); - const OnigUChar *ue = RBIMPL_CAST((const OnigUChar *)e); - - return ONIGENC_MBC_TO_CODE(enc, up, ue); -} - -/** - * Queries the number of bytes requested to represent the passed code point - * using the passed encoding. - * - * @param[in] code Code point in question. - * @param[in] enc Encoding to convert the code into a byte sequence. - * @exception rb_eArgError `enc` does not glean `code`. - * @return Number of bytes requested to represent `code` using `enc`. - */ -int rb_enc_codelen(int code, rb_encoding *enc); - -/** - * Identical to rb_enc_codelen(), except it returns 0 for invalid code points. - * - * @param[in] c Code point in question. - * @param[in] enc Encoding to convert `c` into a byte sequence. - * @retval 0 `c` is invalid. - * @return otherwise Number of bytes needed for `enc` to encode `c`. - */ -static inline int -rb_enc_code_to_mbclen(int c, rb_encoding *enc) -{ - OnigCodePoint uc = RBIMPL_CAST((OnigCodePoint)c); - - return ONIGENC_CODE_TO_MBCLEN(enc, uc); -} - -/** - * Identical to rb_enc_uint_chr(), except it writes back to the passed buffer - * instead of allocating one. - * - * @param[in] c Code point. - * @param[out] buf Return buffer. - * @param[in] enc Target encoding scheme. - * @retval <= 0 `c` is invalid in `enc`. - * @return otherwise Number of bytes written to `buf`. - * @post `c` is encoded according to `enc`, then written to `buf`. - * - * @internal - * - * The second argument must be typed. But its current usages prevent us from - * being any stricter than this. :FIXME: - */ -static inline int -rb_enc_mbcput(unsigned int c, void *buf, rb_encoding *enc) -{ - OnigCodePoint uc = RBIMPL_CAST((OnigCodePoint)c); - OnigUChar *ubuf = RBIMPL_CAST((OnigUChar *)buf); - - return ONIGENC_CODE_TO_MBC(enc, uc, ubuf); -} - -/** - * Queries the previous (left) character. - * - * @param[in] s Start of the string. - * @param[in] p Pointer to a character. - * @param[in] e End of the string. - * @param[in] enc Encoding. - * @retval NULL No previous character. - * @retval otherwise Pointer to the head of the previous character. - */ -static inline char * -rb_enc_prev_char(const char *s, const char *p, const char *e, rb_encoding *enc) -{ - const OnigUChar *us = RBIMPL_CAST((const OnigUChar *)s); - const OnigUChar *up = RBIMPL_CAST((const OnigUChar *)p); - const OnigUChar *ue = RBIMPL_CAST((const OnigUChar *)e); - OnigUChar *ur = onigenc_get_prev_char_head(enc, us, up, ue); - - return RBIMPL_CAST((char *)ur); -} - -/** - * Queries the left boundary of a character. This function takes a pointer - * that is not necessarily a head of a character, and searches for its head. - * - * @param[in] s Start of the string. - * @param[in] p Pointer to a possibly-middle of a character. - * @param[in] e End of the string. - * @param[in] enc Encoding. - * @return Pointer to the head of the character that contains `p`. - */ -static inline char * -rb_enc_left_char_head(const char *s, const char *p, const char *e, rb_encoding *enc) -{ - const OnigUChar *us = RBIMPL_CAST((const OnigUChar *)s); - const OnigUChar *up = RBIMPL_CAST((const OnigUChar *)p); - const OnigUChar *ue = RBIMPL_CAST((const OnigUChar *)e); - OnigUChar *ur = onigenc_get_left_adjust_char_head(enc, us, up, ue); - - return RBIMPL_CAST((char *)ur); -} - -/** - * Queries the right boundary of a character. This function takes a pointer - * that is not necessarily a head of a character, and searches for its tail. - * - * @param[in] s Start of the string. - * @param[in] p Pointer to a possibly-middle of a character. - * @param[in] e End of the string. - * @param[in] enc Encoding. - * @return Pointer to the end of the character that contains `p`. - */ -static inline char * -rb_enc_right_char_head(const char *s, const char *p, const char *e, rb_encoding *enc) -{ - const OnigUChar *us = RBIMPL_CAST((const OnigUChar *)s); - const OnigUChar *up = RBIMPL_CAST((const OnigUChar *)p); - const OnigUChar *ue = RBIMPL_CAST((const OnigUChar *)e); - OnigUChar *ur = onigenc_get_right_adjust_char_head(enc, us, up, ue); - - return RBIMPL_CAST((char *)ur); -} - -/** - * Scans the string backwards for n characters. - * - * @param[in] s Start of the string. - * @param[in] p Pointer to a character. - * @param[in] e End of the string. - * @param[in] n Steps. - * @param[in] enc Encoding. - * @retval NULL There are no `n` characters left. - * @retval otherwise Pointer to `n` character before `p`. - */ -static inline char * -rb_enc_step_back(const char *s, const char *p, const char *e, int n, rb_encoding *enc) -{ - const OnigUChar *us = RBIMPL_CAST((const OnigUChar *)s); - const OnigUChar *up = RBIMPL_CAST((const OnigUChar *)p); - const OnigUChar *ue = RBIMPL_CAST((const OnigUChar *)e); - const OnigUChar *ur = onigenc_step_back(enc, us, up, ue, n); - - return RBIMPL_CAST((char *)ur); -} - -/** - * @private - * - * This is an implementation detail of rb_enc_asciicompat(). People don't use - * it directly. Just always use rb_enc_asciicompat(). - * - * @param[in] enc Encoding in question. - * @retval 1 It is ASCII compatible. - * @retval 0 It isn't. - */ -static inline int -rb_enc_asciicompat_inline(rb_encoding *enc) -{ - return rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc); -} - -/** - * Queries if the passed encoding is _in some sense_ compatible with ASCII. - * The concept of ASCII compatibility is nuanced, and private to our - * implementation. For instance SJIS is ASCII compatible to us, despite their - * having different characters at code point `0x5C`. This is based on some - * practical consideration that Japanese people confuses SJIS to be "upper - * compatible" with ASCII (which is in fact a wrong idea, but we just don't go - * strict here). An example of ASCII incompatible encoding is UTF-16. UTF-16 - * shares code points with ASCII, but employs a completely different encoding - * scheme. - * - * @param[in] enc Encoding in question. - * @retval 0 It is incompatible. - * @retval 1 It is compatible. - */ -static inline bool -rb_enc_asciicompat(rb_encoding *enc) -{ - if (rb_enc_mbminlen(enc) != 1) { - return false; - } - else if (rb_enc_dummy_p(enc)) { - return false; - } - else { - return true; - } -} - -/** - * Queries if the passed string is in an ASCII-compatible encoding. - * - * @param[in] str A Ruby's string to query. - * @retval 0 `str` is not a String, or an ASCII-incompatible string. - * @retval 1 Otherwise. - */ -static inline bool -rb_enc_str_asciicompat_p(VALUE str) -{ - rb_encoding *enc = rb_enc_get(str); - - return rb_enc_asciicompat(enc); -} - -/** - * Queries the Ruby-level counterpart instance of ::rb_cEncoding that - * corresponds to the passed encoding. - * - * @param[in] enc An encoding - * @retval RUBY_Qnil `enc` is a null pointer. - * @retval otherwise An instance of ::rb_cEncoding. - */ -VALUE rb_enc_from_encoding(rb_encoding *enc); - -RBIMPL_ATTR_PURE() -/** - * Queries if the passed encoding is either one of UTF-8/16/32. - * - * @note It does not take UTF-7, which we actually support, into account. - * - * @param[in] enc Encoding in question. - * @retval 0 It is not a Unicode variant. - * @retval otherwise It is. - * - * @internal - * - * In reality it returns 1/0, but the value is abstracted as - * `ONIGENC_FLAG_UNICODE`. - */ -int rb_enc_unicode_p(rb_encoding *enc); - -RBIMPL_ATTR_RETURNS_NONNULL() -/** - * Queries the encoding that represents ASCII-8BIT a.k.a. binary. - * - * @return The encoding that represents ASCII-8BIT. - * - * @internal - * - * This can not return NULL once the process properly boots up. - */ -rb_encoding *rb_ascii8bit_encoding(void); - -RBIMPL_ATTR_RETURNS_NONNULL() -/** - * Queries the encoding that represents UTF-8. - * - * @return The encoding that represents UTF-8. - * - * @internal - * - * This can not return NULL once the process properly boots up. - */ -rb_encoding *rb_utf8_encoding(void); - -RBIMPL_ATTR_RETURNS_NONNULL() -/** - * Queries the encoding that represents US-ASCII. - * - * @return The encoding that represents US-ASCII. - * - * @internal - * - * This can not return NULL once the process properly boots up. - */ -rb_encoding *rb_usascii_encoding(void); - -/** - * Queries the encoding that represents the current locale. - * - * @return The encoding that represents the process' locale. - * - * @internal - * - * This is dynamic. If you change the process' locale by e.g. calling - * `setlocale(3)`, that should also change the return value of this function. - * - * There is no official way for Ruby scripts to manipulate locales, though. - */ -rb_encoding *rb_locale_encoding(void); - -/** - * Queries the "filesystem" encoding. This is the encoding that ruby expects - * info from the OS' file system are in. This affects for instance return - * value of rb_dir_getwd(). Most notably on Windows it can be an alias of OS - * codepage. Most notably on Linux users can set this via default external - * encoding. - * - * @return The "filesystem" encoding. - */ -rb_encoding *rb_filesystem_encoding(void); - -/** - * Queries the "default external" encoding. This is used to interact with - * outer-process things such as File. Though not recommended, you can set this - * using rb_enc_set_default_external(). - * - * @return The "default external" encoding. - */ -rb_encoding *rb_default_external_encoding(void); - -/** - * Queries the "default internal" encoding. This could be a null pointer. - * Otherwise, outer-process info are transcoded from default external encoding - * to this one during reading from an IO. - * - * @return The "default internal" encoding (if any). - */ -rb_encoding *rb_default_internal_encoding(void); - -#ifndef rb_ascii8bit_encindex -RBIMPL_ATTR_CONST() -/** - * Identical to rb_ascii8bit_encoding(), except it returns the encoding's index - * instead of the encoding itself. - * - * @return The index of encoding of ASCII-8BIT. - * - * @internal - * - * This happens to be 0. - */ -int rb_ascii8bit_encindex(void); -#endif - -/** - * Queries if the passed object is in ascii 8bit (== binary) encoding. The - * object must be capable of having inline encoding. Using this macro needs - * deep understanding of bit level object binary layout. - * - * @param[in] obj An object to check. - * @retval 1 It is. - * @retval 0 It isn't. - */ -static inline bool -RB_ENCODING_IS_ASCII8BIT(VALUE obj) -{ - return RB_ENCODING_GET_INLINED(obj) == rb_ascii8bit_encindex(); -} - -#ifndef rb_utf8_encindex -RBIMPL_ATTR_CONST() -/** - * Identical to rb_utf8_encoding(), except it returns the encoding's index - * instead of the encoding itself. - * - * @return The index of encoding of UTF-8. - */ -int rb_utf8_encindex(void); -#endif - -#ifndef rb_usascii_encindex -RBIMPL_ATTR_CONST() -/** - * Identical to rb_usascii_encoding(), except it returns the encoding's index - * instead of the encoding itself. - * - * @return The index of encoding of UTF-8. - */ -int rb_usascii_encindex(void); -#endif - -/** - * Identical to rb_locale_encoding(), except it returns the encoding's index - * instead of the encoding itself. - * - * @return The index of the locale encoding. - */ -int rb_locale_encindex(void); - -/** - * Identical to rb_filesystem_encoding(), except it returns the encoding's - * index instead of the encoding itself. - * - * @return The index of the filesystem encoding. - */ -int rb_filesystem_encindex(void); - -/** - * Identical to rb_default_external_encoding(), except it returns the - * Ruby-level counterpart instance of ::rb_cEncoding that corresponds to the - * default external encoding. - * - * @return An instance of ::rb_cEncoding of default external. - */ -VALUE rb_enc_default_external(void); - -/** - * Identical to rb_default_internal_encoding(), except it returns the - * Ruby-level counterpart instance of ::rb_cEncoding that corresponds to the - * default internal encoding. - * - * @return An instance of ::rb_cEncoding of default internal. - */ -VALUE rb_enc_default_internal(void); - -/** - * Destructively assigns the passed encoding as the default external encoding. - * You should not use this API. It has process-global side effects. Also it - * doesn't change encodings of strings that have already been read. - * - * @param[in] encoding Ruby level encoding. - * @exception rb_eArgError `encoding` is ::RUBY_Qnil. - * @post The default external encoding is `encoding`. - */ -void rb_enc_set_default_external(VALUE encoding); - -/** - * Destructively assigns the passed encoding as the default internal encoding. - * You should not use this API. It has process-global side effects. Also it - * doesn't change encodings of strings that have already been read. - * - * @param[in] encoding Ruby level encoding. - * @post The default internal encoding is `encoding`. - * @note Unlike rb_enc_set_default_external() you can pass ::RUBY_Qnil. - */ -void rb_enc_set_default_internal(VALUE encoding); - -/** - * Returns a platform-depended "charmap" of the current locale. This - * information is called a "Codeset name" in IEEE 1003.1 section 13 - * (``). This is a very low-level API. The return value can have - * no corresponding encoding when passed to rb_find_encoding(). - * - * @param[in] klass Ignored for no reason (why...) - * @return The low-level locale charmap, in Ruby's String. - */ -VALUE rb_locale_charmap(VALUE klass); - -RBIMPL_SYMBOL_EXPORT_END() - -/** @cond INTERNAL_MACRO */ -#define RB_ENCODING_GET RB_ENCODING_GET -#define RB_ENCODING_GET_INLINED RB_ENCODING_GET_INLINED -#define RB_ENCODING_IS_ASCII8BIT RB_ENCODING_IS_ASCII8BIT -#define RB_ENCODING_SET RB_ENCODING_SET -#define RB_ENCODING_SET_INLINED RB_ENCODING_SET_INLINED -#define rb_enc_asciicompat rb_enc_asciicompat -#define rb_enc_code_to_mbclen rb_enc_code_to_mbclen -#define rb_enc_codepoint rb_enc_codepoint -#define rb_enc_left_char_head rb_enc_left_char_head -#define rb_enc_mbc_to_codepoint rb_enc_mbc_to_codepoint -#define rb_enc_mbcput rb_enc_mbcput -#define rb_enc_mbmaxlen rb_enc_mbmaxlen -#define rb_enc_mbminlen rb_enc_mbminlen -#define rb_enc_name rb_enc_name -#define rb_enc_prev_char rb_enc_prev_char -#define rb_enc_right_char_head rb_enc_right_char_head -#define rb_enc_step_back rb_enc_step_back -#define rb_enc_str_asciicompat_p rb_enc_str_asciicompat_p -/** @endcond */ - -#endif /* RUBY_INTERNAL_ENCODING_ENCODING_H */ diff --git a/libs/libruby/ruby/internal/encoding/pathname.h b/libs/libruby/ruby/internal/encoding/pathname.h deleted file mode 100644 index 0b5e85a..0000000 --- a/libs/libruby/ruby/internal/encoding/pathname.h +++ /dev/null @@ -1,184 +0,0 @@ -#ifndef RUBY_INTERNAL_ENCODING_PATHNAME_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_INTERNAL_ENCODING_PATHNAME_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines to manipulate encodings of pathnames. - */ - -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/encoding/encoding.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() -RBIMPL_ATTR_NONNULL(()) -/** - * Returns a path component directly adjacent to the passed pointer. - * - * ``` - * "/multi/byte/encoded/pathname.txt" - * ^ ^ ^ - * | | +--- end - * | +--- @return - * +--- path - * ``` - * - * @param[in] path Where to start scanning. - * @param[in] end End of the path string. - * @param[in] enc Encoding of the string. - * @return A pointer in the passed string where the next path component - * resides, or `end` if there is no next path component. - */ -char *rb_enc_path_next(const char *path, const char *end, rb_encoding *enc); - -RBIMPL_ATTR_NONNULL(()) -/** - * Seeks for non-prefix part of a pathname. This can be a no-op when the OS - * has no such concept like a path prefix. But there are OSes where path - * prefixes do exist. - * - * ``` - * "C:\multi\byte\encoded\pathname.txt" - * ^ ^ ^ - * | | +--- end - * | +--- @return - * +--- path - * ``` - * - * @param[in] path Where to start scanning. - * @param[in] end End of the path string. - * @param[in] enc Encoding of the string. - * @return A pointer in the passed string where non-prefix part starts, or - * `path` if the OS does not have path prefix. - */ -char *rb_enc_path_skip_prefix(const char *path, const char *end, rb_encoding *enc); - -RBIMPL_ATTR_NONNULL(()) -/** - * Returns the last path component. - * - * ``` - * "/multi/byte/encoded/pathname.txt" - * ^ ^ ^ - * | | +--- end - * | +--- @return - * +--- path - * ``` - * - * @param[in] path Where to start scanning. - * @param[in] end End of the path string. - * @param[in] enc Encoding of the string. - * @return A pointer in the passed string where the last path component - * resides, or `end` if there is no more path component. - */ -char *rb_enc_path_last_separator(const char *path, const char *end, rb_encoding *enc); - -RBIMPL_ATTR_NONNULL(()) -/** - * This just returns the passed end basically. It makes difference in case the - * passed string ends with tons of path separators like the following: - * - * ``` - * "/path/that/ends/with/lots/of/slashes//////////////" - * ^ ^ ^ - * | | +--- end - * | +--- @return - * +--- path - * ``` - * - * @param[in] path Where to start scanning. - * @param[in] end End of the path string. - * @param[in] enc Encoding of the string. - * @return A pointer in the passed string where the trailing path - * separators start, or `end` if there is no trailing path - * separators. - * - * @internal - * - * It seems this function was introduced to mimic what POSIX says about - * `basename(3)`. - */ -char *rb_enc_path_end(const char *path, const char *end, rb_encoding *enc); - -RBIMPL_ATTR_NONNULL((1, 4)) -/** - * Our own encoding-aware version of `basename(3)`. Normally, this function - * returns the last path component of the given name. However in case the - * passed name ends with a path separator, it returns the name of the - * directory, not the last (empty) component. Also if the passed name is a - * root directory, it returns that root directory. Note however that Windows - * filesystem have drive letters, which this function does not return. - * - * @param[in] name Target path. - * @param[out] baselen Return buffer. - * @param[in,out] alllen Number of bytes of `name`. - * @param[enc] enc Encoding of `name`. - * @return The rightmost component of `name`. - * @post `baselen`, if passed, is updated to be the number of bytes - * of the returned basename. - * @post `alllen`, if passed, is updated to be the number of bytes of - * strings not considered as the basename. - */ -const char *ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encoding *enc); - -RBIMPL_ATTR_NONNULL((1, 3)) -/** - * Our own encoding-aware version of `extname`. This function first applies - * rb_enc_path_last_separator() to the passed name and only concerns its return - * value (ignores any parent directories). This function returns complicated - * results: - * - * ```CXX - * auto path = "..."; - * auto len = strlen(path); - * auto ret = ruby_enc_find_extname(path, &len, rb_ascii8bit_encoding()); - * - * switch(len) { - * case 0: - * if (ret == 0) { - * // `path` is a file without extensions. - * } - * else { - * // `path` is a dotfile. - * // `ret` is the file's name. - * } - * break; - * - * case 1: - * // `path` _ends_ with a dot. - * // `ret` is that dot. - * break; - * - * default: - * // `path` has an extension. - * // `ret` is that extension. - * } - * ``` - * - * @param[in] name Target path. - * @param[in,out] len Number of bytes of `name`. - * @param[in] enc Encoding of `name`. - * @return See above. - * @post `len`, if passed, is updated (see above). - */ -const char *ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_INTERNAL_ENCODING_PATHNAME_H */ diff --git a/libs/libruby/ruby/internal/encoding/re.h b/libs/libruby/ruby/internal/encoding/re.h deleted file mode 100644 index d0de23b..0000000 --- a/libs/libruby/ruby/internal/encoding/re.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef RUBY_INTERNAL_ENCODING_RE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_INTERNAL_ENCODING_RE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines to manipulate encodings of symbols. - */ - -#include "ruby/internal/dllexport.h" -#include "ruby/internal/encoding/encoding.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Identical to rb_reg_new(), except it additionally takes an encoding. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @param[in] enc Encoding of `ptr`. - * @param[in] opts Options e.g. ONIG_OPTION_MULTILINE. - * @exception rb_eRegexpError Failed to compile `ptr`. - * @return An allocated new instance of ::rb_cRegexp, of `enc` encoding, - * whose expression is compiled according to `ptr`. - */ -VALUE rb_enc_reg_new(const char *ptr, long len, rb_encoding *enc, int opts); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_INTERNAL_ENCODING_RE_H */ diff --git a/libs/libruby/ruby/internal/encoding/sprintf.h b/libs/libruby/ruby/internal/encoding/sprintf.h deleted file mode 100644 index cb8737b..0000000 --- a/libs/libruby/ruby/internal/encoding/sprintf.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef RUBY_INTERNAL_ENCODING_SPRINTF_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_INTERNAL_ENCODING_SPRINTF_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines to manipulate encodings of symbols. - */ -#include "ruby/internal/config.h" -#include -#include "ruby/internal/attr/format.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/encoding/encoding.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3) -/** - * Identical to rb_sprintf(), except it additionally takes an encoding. The - * passed encoding rules both the incoming format specifier and the resulting - * string. - * - * @param[in] enc Encoding of `fmt`. - * @param[in] fmt A `printf`-like format specifier. - * @param[in] ... Variadic number of contents to format. - * @return A rendered new instance of ::rb_cString, of `enc` encoding. - */ -VALUE rb_enc_sprintf(rb_encoding *enc, const char *fmt, ...); - -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 0) -/** - * Identical to rb_enc_sprintf(), except it takes a `va_list` instead of - * variadic arguments. It can also be seen as a routine identical to - * rb_vsprintf(), except it additionally takes an encoding. - * - * @param[in] enc Encoding of `fmt`. - * @param[in] fmt A `printf`-like format specifier. - * @param[in] ap Contents to format. - * @return A rendered new instance of ::rb_cString, of `enc` encoding. - */ -VALUE rb_enc_vsprintf(rb_encoding *enc, const char *fmt, va_list ap); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL((3)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4) -/** - * Identical to rb_raise(), except it additionally takes an encoding. - * - * @param[in] enc Encoding of the generating exception. - * @param[in] exc A subclass of ::rb_eException. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - * @param[in] ... Contents of the message. - * @exception exc The specified exception. - * @note It never returns. - */ -void rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_INTERNAL_ENCODING_SPRINTF_H */ diff --git a/libs/libruby/ruby/internal/encoding/string.h b/libs/libruby/ruby/internal/encoding/string.h deleted file mode 100644 index 6ed7ca1..0000000 --- a/libs/libruby/ruby/internal/encoding/string.h +++ /dev/null @@ -1,346 +0,0 @@ -#ifndef RUBY_INTERNAL_ENCODING_STRING_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_INTERNAL_ENCODING_STRING_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines to manipulate encodings of strings. - */ - -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/encoding/encoding.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/intern/string.h" /* rbimpl_strlen */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Identical to rb_enc_str_new(), except it additionally takes an encoding. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @param[in] enc Encoding of `ptr`. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString, of `len` bytes length, of `enc` - * encoding, whose contents are verbatim copy of `ptr`. - * @pre At least `len` bytes of continuous memory region shall be - * accessible via `ptr`. - * @note `enc` can be a null pointer. It can also be seen as a routine - * identical to rb_usascii_str_new() then. - */ -VALUE rb_enc_str_new(const char *ptr, long len, rb_encoding *enc); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Identical to rb_enc_str_new(), except it assumes the passed pointer is a - * pointer to a C string. It can also be seen as a routine identical to - * rb_str_new_cstr(), except it additionally takes an encoding. - * - * @param[in] ptr A C string. - * @param[in] enc Encoding of `ptr`. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString, of `enc` encoding, whose contents - * are verbatim copy of `ptr`. - * @pre `ptr` must not be a null pointer. - * @pre Because `ptr` is a C string it makes no sense for `enc` to be - * something like UTF-32. - * @note `enc` can be a null pointer. It can also be seen as a routine - * identical to rb_usascii_str_new_cstr() then. - */ -VALUE rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc); - -/** - * Identical to rb_enc_str_new(), except it takes a C string literal. It can - * also be seen as a routine identical to rb_str_new_static(), except it - * additionally takes an encoding. - * - * @param[in] ptr A C string literal. - * @param[in] len `strlen(ptr)`. - * @param[in] enc Encoding of `ptr`. - * @exception rb_eArgError `len` out of range of `size_t`. - * @pre `ptr` must be a C string constant. - * @return An instance of ::rb_cString, of `enc` encoding, whose backend - * storage is the passed C string literal. - * @warning It is a very bad idea to write to a C string literal (often - * immediate SEGV shall occur). Consider return values of this - * function be read-only. - * @note `enc` can be a null pointer. It can also be seen as a routine - * identical to rb_usascii_str_new_static() then. - */ -VALUE rb_enc_str_new_static(const char *ptr, long len, rb_encoding *enc); - -/** - * Identical to rb_enc_str_new(), except it returns a "f"string. It can also - * be seen as a routine identical to rb_interned_str(), except it additionally - * takes an encoding. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @param[in] enc Encoding of `ptr`. - * @exception rb_eArgError `len` is negative. - * @return A found or created instance of ::rb_cString, of `len` bytes - * length, of `enc` encoding, whose contents are identical to that - * of `ptr`. - * @pre At least `len` bytes of continuous memory region shall be - * accessible via `ptr`. - * @note `enc` can be a null pointer. - */ -VALUE rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Identical to rb_enc_str_new_cstr(), except it returns a "f"string. It can - * also be seen as a routine identical to rb_interned_str_cstr(), except it - * additionally takes an encoding. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] enc Encoding of `ptr`. - * @return A found or created instance of ::rb_cString of `enc` encoding, - * whose contents are identical to that of `ptr`. - * @pre At least `len` bytes of continuous memory region shall be - * accessible via `ptr`. - * @note `enc` can be a null pointer. - */ -VALUE rb_enc_interned_str_cstr(const char *ptr, rb_encoding *enc); - -/** - * Counts the number of characters of the passed string, according to the - * passed encoding. This has to be complicated. The passed string could be - * invalid and/or broken. This routine would scan from the beginning til the - * end, byte by byte, to seek out character boundaries. Could be super slow. - * - * @param[in] head Leftmost pointer to the string. - * @param[in] tail Rightmost pointer to the string. - * @param[in] enc Encoding of the string. - * @return Number of characters exist in `head` .. `tail`. The definition - * of "character" depends on the passed `enc`. - */ -long rb_enc_strlen(const char *head, const char *tail, rb_encoding *enc); - -/** - * Queries the n-th character. Like rb_enc_strlen() this function can be fast - * or slow depending on the contents. Don't expect characters to be uniformly - * distributed across the entire string. - * - * @param[in] head Leftmost pointer to the string. - * @param[in] tail Rightmost pointer to the string. - * @param[in] nth Requested index of characters. - * @param[in] enc Encoding of the string. - * @return Pointer to the first byte of the character that is `nth` - * character ahead of `head`, or `tail` if there is no such - * character (OOB etc). The definition of "character" depends on - * the passed `enc`. - */ -char *rb_enc_nth(const char *head, const char *tail, long nth, rb_encoding *enc); - -/** - * Identical to rb_enc_get_index(), except the return type. - * - * @param[in] obj Object in question. - * @exception rb_eTypeError `obj` is incapable of having an encoding. - * @return `obj`'s encoding. - */ -VALUE rb_obj_encoding(VALUE obj); - -/** - * Identical to rb_str_cat(), except it additionally takes an encoding. - * - * @param[out] str Destination object. - * @param[in] ptr Contents to append. - * @param[in] len Length of `src`, in bytes. - * @param[in] enc Encoding of `ptr`. - * @exception rb_eArgError `len` is negative. - * @exception rb_eEncCompatError `enc` is not compatible with `str`. - * @return The passed `dst`. - * @post The contents of `ptr` is copied, transcoded into `dst`'s - * encoding, then pasted into `dst`'s end. - */ -VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc); - -/** - * Encodes the passed code point into a series of bytes. - * - * @param[in] code Code point. - * @param[in] enc Target encoding scheme. - * @exception rb_eRangeError `enc` does not glean `code`. - * @return An instance of ::rb_cString, of `enc` encoding, whose sole - * contents is `code` represented in `enc`. - * @note No way to encode code points bigger than UINT_MAX. - * - * @internal - * - * In other languages, APIs like this one could be seen as the primitive - * routines where encodings' "encode" feature are implemented. However in case - * of Ruby this is not the primitive one. We directly manipulate encoded - * strings. Encoding conversion routines transcode an encoded string directly - * to another one; not via a code point array. - */ -VALUE rb_enc_uint_chr(unsigned int code, rb_encoding *enc); - -/** - * Identical to rb_external_str_new(), except it additionally takes an - * encoding. However the whole point of rb_external_str_new() is to encode a - * string into default external encoding. Being able to specify arbitrary - * encoding just ruins the designed purpose the function meseems. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @param[in] enc Target encoding scheme. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString. In case encoding conversion from - * "default internal" to `enc` is fully defined over the given - * contents, then the return value is a string of `enc` encoding, - * whose contents are the converted ones. Otherwise the string is - * a junk. - * @warning It doesn't raise on a conversion failure and silently ends up in - * a corrupted output. You can know the failure by querying - * `valid_encoding?` of the result object. - * - * @internal - * - * @shyouhei has no idea why this one does not follow the naming convention - * that others obey. It seems to him that this should have been called - * `rb_enc_external_str_new`. - */ -VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *enc); - -/** - * Identical to rb_str_export(), except it additionally takes an encoding. - * - * @param[in] obj Target object. - * @param[in] enc Target encoding. - * @exception rb_eTypeError No implicit conversion to String. - * @return Converted ruby string of `enc` encoding. - */ -VALUE rb_str_export_to_enc(VALUE obj, rb_encoding *enc); - -/** - * Encoding conversion main routine. - * - * @param[in] str String to convert. - * @param[in] from Source encoding. - * @param[in] to Destination encoding. - * @return A copy of `str`, with conversion from `from` to `to` applied. - * @note `from` can be a null pointer. `str`'s encoding is taken then. - * @note `to` can be a null pointer. No-op then. - */ -VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to); - -/** - * Identical to rb_str_conv_enc(), except it additionally takes IO encoder - * options. The extra arguments can be constructed using io_extract_modeenc() - * etc. - * - * @param[in] str String to convert. - * @param[in] from Source encoding. - * @param[in] to Destination encoding. - * @param[in] ecflags A set of enum ::ruby_econv_flag_type. - * @param[in] ecopts Optional hash. - * @return A copy of `str`, with conversion from `from` to `to` applied. - * @note `from` can be a null pointer. `str`'s encoding is taken then. - * @note `to` can be a null pointer. No-op then. - * @note `ecopts` can be ::RUBY_Qnil, which is equivalent to passing an - * empty hash. - */ -VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts); - -/** - * Scans the passed string to collect its code range. Because a Ruby's string - * is mutable, its contents change from time to time; so does its code range. - * A long-lived string tends to fall back to ::RUBY_ENC_CODERANGE_UNKNOWN. - * This API scans it and re-assigns a fine-grained code range constant. - * - * @param[out] str A string. - * @return An enum ::ruby_coderange_type. - */ -int rb_enc_str_coderange(VALUE str); - -/** - * Scans the passed string until it finds something odd. Returns the number of - * bytes scanned. As the name implies this is suitable for repeated call. One - * of its application is `IO#readlines`. The method reads from its receiver's - * read buffer, maybe more than once, looking for newlines. But "newline" can - * be different among encodings. This API is used to detect broken contents to - * properly mark them as such. - * - * @param[in] str String to scan. - * @param[in] end End of `str`. - * @param[in] enc `str`'s encoding. - * @param[out] cr Return buffer. - * @return Distance between `str` and first such byte where broken. - * @post `cr` has the code range type. - */ -long rb_str_coderange_scan_restartable(const char *str, const char *end, rb_encoding *enc, int *cr); - -/** - * Queries if the passed string is "ASCII only". An ASCII only string is a - * string who doesn't have any non-ASCII characters at all. This doesn't - * necessarily mean the string is in ASCII encoding. For instance a String of - * CP932 encoding can quite much be ASCII only, depending on its contents. - * - * @param[in] str String in question. - * @retval 1 It doesn't have non-ASCII characters. - * @retval 0 It has characters that are out of ASCII. - */ -int rb_enc_str_asciionly_p(VALUE str); - -RBIMPL_ATTR_NONNULL(()) -/** - * Looks for the passed string in the passed buffer. - * - * @param[in] x Buffer that potentially includes `y`. - * @param[in] m Number of bytes of `x`. - * @param[in] y Query string. - * @param[in] n Number of bytes of `y`. - * @param[in] enc Encoding of both `x` and `y`. - * @retval -1 Not found. - * @retval otherwise Found index in `x`. - * @note This API can match at a non-character-boundary. - */ -long rb_memsearch(const void *x, long m, const void *y, long n, rb_encoding *enc); - -/** @cond INTERNAL_MACRO */ -RBIMPL_ATTR_NONNULL(()) -static inline VALUE -rbimpl_enc_str_new_cstr(const char *str, rb_encoding *enc) -{ - long len = rbimpl_strlen(str); - - return rb_enc_str_new_static(str, len, enc); -} - -#define rb_enc_str_new(str, len, enc) \ - ((RBIMPL_CONSTANT_P(str) && \ - RBIMPL_CONSTANT_P(len) ? \ - rb_enc_str_new_static: \ - rb_enc_str_new) ((str), (len), (enc))) - -#define rb_enc_str_new_cstr(str, enc) \ - ((RBIMPL_CONSTANT_P(str) ? \ - rbimpl_enc_str_new_cstr : \ - rb_enc_str_new_cstr) ((str), (enc))) - -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_INTERNAL_ENCODING_STRING_H */ diff --git a/libs/libruby/ruby/internal/encoding/symbol.h b/libs/libruby/ruby/internal/encoding/symbol.h deleted file mode 100644 index 9cd1b0d..0000000 --- a/libs/libruby/ruby/internal/encoding/symbol.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef RUBY_INTERNAL_ENCODING_SYMBOL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_INTERNAL_ENCODING_SYMBOL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Routines to manipulate encodings of symbols. - */ - -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/encoding/encoding.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Identical to rb_intern2(), except it additionally takes an encoding. - * - * @param[in] name The name of the id. - * @param[in] len Length of `name`. - * @param[in] enc `name`'s encoding. - * @exception rb_eRuntimeError Too many symbols. - * @return A (possibly new) id whose value is the given name. - * @note These days Ruby internally has two kinds of symbols - * (static/dynamic). Symbols created using this function would - * become static ones; i.e. would never be garbage collected. It - * is up to you to avoid memory leaks. Think twice before using - * it. - */ -ID rb_intern3(const char *name, long len, rb_encoding *enc); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_symname_p(), except it additionally takes an encoding. - * - * @param[in] str A C string to check. - * @param[in] enc `str`'s encoding. - * @retval 1 It is a valid symbol name. - * @retval 0 It is invalid as a symbol name. - */ -int rb_enc_symname_p(const char *str, rb_encoding *enc); - -/** - * Identical to rb_enc_symname_p(), except it additionally takes the passed - * string's length. This is needed for strings containing NUL bytes, like in - * case of UTF-32. - * - * @param[in] name A C string to check. - * @param[in] len Number of bytes of `str`. - * @param[in] enc `str`'s encoding. - * @retval 1 It is a valid symbol name. - * @retval 0 It is invalid as a symbol name. - */ -int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc); - -/** - * Identical to rb_check_id(), except it takes a pointer to a memory region - * instead of Ruby's string. - * - * @param[in] ptr A pointer to a memory region. - * @param[in] len Number of bytes of `ptr`. - * @param[in] enc Encoding of `ptr`. - * @exception rb_eEncodingError `ptr` contains non-ASCII according to `enc`. - * @retval 0 No such id ever existed in the history. - * @retval otherwise The id that represents the given name. - */ -ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc); - -/** - * Identical to rb_check_id_cstr(), except for the return type. It can also be - * seen as a routine identical to rb_check_symbol(), except it takes a pointer - * to a memory region instead of Ruby's string. - * - * @param[in] ptr A pointer to a memory region. - * @param[in] len Number of bytes of `ptr`. - * @param[in] enc Encoding of `ptr`. - * @exception rb_eEncodingError `ptr` contains non-ASCII according to `enc`. - * @retval RUBY_Qnil No such id ever existed in the history. - * @retval otherwise The id that represents the given name. - */ -VALUE rb_check_symbol_cstr(const char *ptr, long len, rb_encoding *enc); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_INTERNAL_ENCODING_SYMBOL_H */ diff --git a/libs/libruby/ruby/internal/encoding/transcode.h b/libs/libruby/ruby/internal/encoding/transcode.h deleted file mode 100644 index 7f26d2e..0000000 --- a/libs/libruby/ruby/internal/encoding/transcode.h +++ /dev/null @@ -1,562 +0,0 @@ -#ifndef RUBY_INTERNAL_ENCODING_TRANSCODE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_INTERNAL_ENCODING_TRANSCODE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief econv stuff - */ - -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** return value of rb_econv_convert() */ -typedef enum { - - /** - * The conversion stopped when it found an invalid sequence. - */ - econv_invalid_byte_sequence, - - /** - * The conversion stopped when it found a character in the input which - * cannot be representable in the output. - */ - econv_undefined_conversion, - - /** - * The conversion stopped because there is no destination. - */ - econv_destination_buffer_full, - - /** - * The conversion stopped because there is no input. - */ - econv_source_buffer_empty, - - /** - * The conversion stopped after converting everything. This is arguably - * the expected normal end of conversion. - */ - econv_finished, - - /** - * The conversion stopped after writing something to somewhere, before - * reading everything. - */ - econv_after_output, - - /** - * The conversion stopped in middle of reading a character, possibly due to - * a partial read of a socket etc. - */ - econv_incomplete_input -} rb_econv_result_t; - -/** An opaque struct that represents a lowest level of encoding conversion. */ -typedef struct rb_econv_t rb_econv_t; - -/** - * Converts the contents of the passed string from its encoding to the passed - * one. - * - * @param[in] str Target string. - * @param[in] to Destination encoding. - * @param[in] ecflags A set of enum - * ::ruby_econv_flag_type. - * @param[in] ecopts A keyword hash, like - * ::rb_io_t::rb_io_enc_t::ecopts. - * @exception rb_eArgError Not fully converted. - * @exception rb_eInvalidByteSequenceError `str` is malformed. - * @exception rb_eUndefinedConversionError `str` has a character not - * representable using `to`. - * @exception rb_eConversionNotFoundError There is no known conversion from - * `str`'s encoding to `to`. - * @return A string whose encoding is `to`, and whose contents is converted - * contents of `str`. - * @note Use rb_econv_prepare_options() to generate `ecopts`. - */ -VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts); - -/** - * Queries if there is more than one way to convert between the passed two - * encodings. Encoding conversion are has_and_belongs_to_many relationships. - * There could be no direct conversion defined for the passed pair. Ruby tries - * to find an indirect way to do so then. For instance ISO-8859-1 has no - * direct conversion to ISO-2022-JP. But there is ISO-8859-1 to UTF-8 - * conversion; then there is UTF-8 to EUC-JP conversion; finally there also is - * EUC-JP to ISO-2022-JP conversion. So in short ISO-8859-1 can be converted - * to ISO-2022-JP using that path. This function returns true. Obviously not - * everything that can be represented using UTF-8 can also be represented using - * EUC-JP. Conversions in practice can fail depending on the actual input, and - * that renders exceptions in case of rb_str_encode(). - * - * @param[in] from_encoding One encoding. - * @param[in] to_encoding Another encoding. - * @retval 0 No way to convert the two. - * @retval 1 At least one way to convert the two. - * - * @internal - * - * Practically @shyouhei knows no way for this function to return 0. It seems - * everything can eventually be converted to/from UTF-8, which connects - * everything. - */ -int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding); - -/** - * Identical to rb_econv_prepare_opts(), except it additionally takes the - * initial value of flags. The extra bits are bitwise-ORed to the return - * value. - * - * @param[in] opthash Keyword arguments. - * @param[out] ecopts Return buffer. - * @param[in] ecflags Default set of enum ::ruby_econv_flag_type. - * @exception rb_eArgError Unknown/Broken values passed. - * @return Calculated set of enum ::ruby_econv_flag_type. - * @post `ecopts` holds a hash object suitable for - * ::rb_io_t::rb_io_enc_t::ecopts. - */ -int rb_econv_prepare_options(VALUE opthash, VALUE *ecopts, int ecflags); - -/** - * Splits a keyword arguments hash (that for instance `String#encode` took) - * into a set of enum ::ruby_econv_flag_type and a hash storing replacement - * characters etc. - * - * @param[in] opthash Keyword arguments. - * @param[out] ecopts Return buffer. - * @exception rb_eArgError Unknown/Broken values passed. - * @return Calculated set of enum ::ruby_econv_flag_type. - * @post `ecopts` holds a hash object suitable for - * ::rb_io_t::rb_io_enc_t::ecopts. - */ -int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts); - -/** - * Creates a new instance of struct ::rb_econv_t. - * - * @param[in] source_encoding Name of an encoding. - * @param[in] destination_encoding Name of another encoding. - * @param[in] ecflags A set of enum ::ruby_econv_flag_type. - * @exception rb_eArgError No such encoding. - * @retval NULL Failed to create a struct ::rb_econv_t. - * @retval otherwise Allocated struct ::rb_econv_t. - * @warning Return value must be passed to rb_econv_close() exactly once. - */ -rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags); - -/** - * Identical to rb_econv_open(), except it additionally takes a hash of - * optional strings. - * - * - * @param[in] source_encoding Name of an encoding. - * @param[in] destination_encoding Name of another encoding. - * @param[in] ecflags A set of enum ::ruby_econv_flag_type. - * @param[in] ecopts Optional set of strings. - * @exception rb_eArgError No such encoding. - * @retval NULL Failed to create a struct ::rb_econv_t. - * @retval otherwise Allocated struct ::rb_econv_t. - * @warning Return value must be passed to rb_econv_close() exactly once. - */ -rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts); - -/** - * Converts a string from an encoding to another. - * - * Possible flags are either ::RUBY_ECONV_PARTIAL_INPUT (means the source - * buffer is a part of much larger one), ::RUBY_ECONV_AFTER_OUTPUT (instructs - * the converter to stop after output before input), or both of them. - * - * @param[in,out] ec Conversion specification/state etc. - * @param[in] source_buffer_ptr Target string. - * @param[in] source_buffer_end End of target string. - * @param[out] destination_buffer_ptr Return buffer. - * @param[out] destination_buffer_end End of return buffer. - * @param[in] flags Flags (see above). - * @return The status of the conversion. - * @post `destination_buffer_ptr` holds conversion results. - */ -rb_econv_result_t rb_econv_convert(rb_econv_t *ec, - const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end, - unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end, - int flags); - -/** - * Destructs a converter. Note that a converter can have a buffer, and can be - * non-empty. Calling this would lose your data then. - * - * @param[out] ec The converter to destroy. - * @post `ec` is no longer a valid pointer. - */ -void rb_econv_close(rb_econv_t *ec); - -/** - * Assigns the replacement string. The string passed here would appear in - * converted string when it cannot represent its source counterpart. This can - * happen for instance you convert an emoji to ISO-8859-1. - * - * @param[out] ec Target converter. - * @param[in] str Replacement string. - * @param[in] len Number of bytes of `str`. - * @param[in] encname Name of encoding of `str`. - * @retval 0 Success. - * @retval -1 Failure (ENOMEM etc.). - * @post `ec`'s replacement string is set to `str`. - */ -int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname); - -/** - * "Decorate"s a converter. There are special kind of converters that - * transforms the contents, like replacing CR into CRLF. You can add such - * decorators to a converter using this API. By using this function a - * decorator is prepended at the beginning of a conversion sequence: in case of - * CRLF conversion, newlines are converted before encodings are converted. - * - * @param[out] ec Target converter to decorate. - * @param[in] decorator_name Name of decorator to prepend. - * @retval 0 Success. - * @retval -1 Failure (no such decorator etc.). - * @post Decorator works before encoding conversion happens. - * - * @internal - * - * What is the possible value of the `decorator_name` is not public. You have - * to read through `transcode.c` carefully. - */ -int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name); - -/** - * Identical to rb_econv_decorate_at_first(), except it adds to the opposite - * direction. For instance CRLF conversion would run _after_ encodings are - * converted. - * - * @param[out] ec Target converter to decorate. - * @param[in] decorator_name Name of decorator to prepend. - * @retval 0 Success. - * @retval -1 Failure (no such decorator etc.). - * @post Decorator works after encoding conversion happens. - */ -int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name); - -/** - * Creates a `rb_eConverterNotFoundError` exception object (but does not - * raise). - * - * @param[in] senc Name of source encoding. - * @param[in] denc Name of destination encoding. - * @param[in] ecflags A set of enum ::ruby_econv_flag_type. - * @return An instance of `rb_eConverterNotFoundError`. - */ -VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags); - -/** - * Appends the passed string to the passed converter's output buffer. This can - * be handy when an encoding needs bytes out of thin air; for instance - * ISO-2022-JP has "shift function" which does not correspond to any - * characters. - * - * @param[out] ec Target converter. - * @param[in] str String to insert. - * @param[in] len Number of bytes of `str`. - * @param[in] str_encoding Encoding of `str`. - * @retval 0 Success. - * @retval -1 Failure (conversion error etc.). - * @note `str_encoding` can be anything, and `str` itself is converted - * when necessary. - */ -int rb_econv_insert_output(rb_econv_t *ec, - const unsigned char *str, size_t len, const char *str_encoding); - -/** - * Queries an encoding name which best suits for rb_econv_insert_output()'s - * last parameter. Strings in this encoding need no conversion when inserted; - * can be both time/space efficient. - * - * @param[in] ec Target converter. - * @return Its encoding for insertion. - */ -const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec); - -/** - * This is a rb_econv_make_exception() + rb_exc_raise() combo. - * - * @param[in] ec (Possibly failed) conversion. - * @exception rb_eInvalidByteSequenceError Invalid byte sequence. - * @exception rb_eUndefinedConversionError Conversion undefined. - * @note This function can return when no error. - */ -void rb_econv_check_error(rb_econv_t *ec); - -/** - * This function makes sense right after rb_econv_convert() returns. As listed - * in ::rb_econv_result_t, rb_econv_convert() can bail out for various reasons. - * This function checks the passed converter's internal state and convert it to - * an appropriate exception object. - * - * @param[in] ec Target converter. - * @retval RUBY_Qnil The converter has no error. - * @retval otherwise Conversion error turned into an exception. - */ -VALUE rb_econv_make_exception(rb_econv_t *ec); - -/** - * Queries if rb_econv_putback() makes sense, i.e. there are invalid byte - * sequences remain in the buffer. - * - * @param[in] ec Target converter. - * @return Number of bytes that can be pushed back. - */ -int rb_econv_putbackable(rb_econv_t *ec); - -/** - * Puts back the bytes. In case of ::econv_invalid_byte_sequence, some of - * those invalid bytes are discarded and the others are buffered to be - * converted later. The latter bytes can be put back using this API. - * - * @param[out] ec Target converter (invalid byte sequence). - * @param[out] p Return buffer. - * @param[in] n Max number of bytes to put back. - * @post At most `n` bytes of what was put back is written to `p`. - */ -void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n); - -/** - * Queries the passed encoding's corresponding ASCII compatible encoding. "The - * corresponding ASCII compatible encoding" in this context is an ASCII - * compatible encoding which can represent exactly the same character sets as - * the given ASCII incompatible encoding. For instance that of UTF-16LE is - * UTF-8. - * - * @param[in] encname Name of an ASCII incompatible encoding. - * @retval NULL `encname` is already ASCII compatible. - * @retval otherwise The corresponding ASCII compatible encoding. - */ -const char *rb_econv_asciicompat_encoding(const char *encname); - -/** - * Identical to rb_econv_convert(), except it takes Ruby's string instead of - * C's pointer. - * - * @param[in,out] ec Target converter. - * @param[in] src Source string. - * @param[in] flags Flags (see rb_econv_convert). - * @exception rb_eArgError Converted string is too long. - * @exception rb_eInvalidByteSequenceError Invalid byte sequence. - * @exception rb_eUndefinedConversionError Conversion undefined. - * @return The conversion result. - */ -VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags); - -/** - * Identical to rb_econv_str_convert(), except it converts only a part of the - * passed string. Can be handy when you for instance want to do line-buffered - * conversion. - * - * @param[in,out] ec Target converter. - * @param[in] src Source string. - * @param[in] byteoff Number of bytes to seek. - * @param[in] bytesize Number of bytes to read. - * @param[in] flags Flags (see rb_econv_convert). - * @exception rb_eArgError Converted string is too long. - * @exception rb_eInvalidByteSequenceError Invalid byte sequence. - * @exception rb_eUndefinedConversionError Conversion undefined. - * @return The conversion result. - */ -VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags); - -/** - * Identical to rb_econv_str_convert(), except it appends the conversion result - * to the additionally passed string instead of creating a new string. It can - * also be seen as a routine identical to rb_econv_append(), except it takes a - * Ruby's string instead of C's pointer. - * - * @param[in,out] ec Target converter. - * @param[in] src Source string. - * @param[in] dst Return buffer. - * @param[in] flags Flags (see rb_econv_convert). - * @exception rb_eArgError Converted string is too long. - * @exception rb_eInvalidByteSequenceError Invalid byte sequence. - * @exception rb_eUndefinedConversionError Conversion undefined. - * @return The conversion result. - */ -VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags); - -/** - * Identical to rb_econv_str_append(), except it appends only a part of the - * passed string with conversion. It can also be seen as a routine identical - * to rb_econv_substr_convert(), except it appends the conversion result to the - * additionally passed string instead of creating a new string. - * - * @param[in,out] ec Target converter. - * @param[in] src Source string. - * @param[in] byteoff Number of bytes to seek. - * @param[in] bytesize Number of bytes to read. - * @param[in] dst Return buffer. - * @param[in] flags Flags (see rb_econv_convert). - * @exception rb_eArgError Converted string is too long. - * @exception rb_eInvalidByteSequenceError Invalid byte sequence. - * @exception rb_eUndefinedConversionError Conversion undefined. - * @return The conversion result. - */ -VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags); - -/** - * Converts the passed C's pointer according to the passed converter, then - * append the conversion result to the passed Ruby's string. This way buffer - * overflow is properly avoided to resize the destination properly. - * - * @param[in,out] ec Target converter. - * @param[in] bytesrc Target string. - * @param[in] bytesize Number of bytes of `bytesrc`. - * @param[in] dst Return buffer. - * @param[in] flags Flags (see rb_econv_convert). - * @exception rb_eArgError Converted string is too long. - * @exception rb_eInvalidByteSequenceError Invalid byte sequence. - * @exception rb_eUndefinedConversionError Conversion undefined. - * @return The conversion result. - */ -VALUE rb_econv_append(rb_econv_t *ec, const char *bytesrc, long bytesize, VALUE dst, int flags); - -/** - * This badly named function does not set the destination encoding to binary, - * but instead just nullifies newline conversion decorators if any. Other - * ordinal character conversions still happen after this; something non-binary - * would still be generated. - * - * @param[out] ec Target converter to modify. - * @post Any newline conversions, if any, would be killed. - */ -void rb_econv_binmode(rb_econv_t *ec); - -/** - * This enum is kind of omnibus. Gathers various constants. - */ -enum ruby_econv_flag_type { - - /** - * @name Flags for rb_econv_open() - * - * @{ - */ - - /** Mask for error handling related bits. */ - RUBY_ECONV_ERROR_HANDLER_MASK = 0x000000ff, - - /** Special handling of invalid sequences are there. */ - RUBY_ECONV_INVALID_MASK = 0x0000000f, - - /** Invalid sequences shall be replaced. */ - RUBY_ECONV_INVALID_REPLACE = 0x00000002, - - /** Special handling of undefined conversion are there. */ - RUBY_ECONV_UNDEF_MASK = 0x000000f0, - - /** Undefined characters shall be replaced. */ - RUBY_ECONV_UNDEF_REPLACE = 0x00000020, - - /** Undefined characters shall be escaped. */ - RUBY_ECONV_UNDEF_HEX_CHARREF = 0x00000030, - - /** Decorators are there. */ - RUBY_ECONV_DECORATOR_MASK = 0x0001ff00, - - /** Newline converters are there. */ - RUBY_ECONV_NEWLINE_DECORATOR_MASK = 0x00007f00, - - /** (Unclear; seems unused). */ - RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK = 0x00000f00, - - /** (Unclear; seems unused). */ - RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK = 0x00007000, - - /** Universal newline mode. */ - RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR = 0x00000100, - - /** CR to CRLF conversion shall happen. */ - RUBY_ECONV_CRLF_NEWLINE_DECORATOR = 0x00001000, - - /** CRLF to CR conversion shall happen. */ - RUBY_ECONV_CR_NEWLINE_DECORATOR = 0x00002000, - - /** CRLF to LF conversion shall happen. */ - RUBY_ECONV_LF_NEWLINE_DECORATOR = 0x00004000, - - /** Texts shall be XML-escaped. */ - RUBY_ECONV_XML_TEXT_DECORATOR = 0x00008000, - - /** Texts shall be AttrValue escaped */ - RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR = 0x00010000, - - /** (Unclear; seems unused). */ - RUBY_ECONV_STATEFUL_DECORATOR_MASK = 0x00f00000, - - /** Texts shall be AttrValue escaped. */ - RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR = 0x00100000, - - /** Newline decorator's default. */ - RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR = -#if defined(RUBY_TEST_CRLF_ENVIRONMENT) || defined(_WIN32) - RUBY_ECONV_CRLF_NEWLINE_DECORATOR, -#else - 0, -#endif - -#define ECONV_ERROR_HANDLER_MASK RUBY_ECONV_ERROR_HANDLER_MASK /**< @old{RUBY_ECONV_ERROR_HANDLER_MASK} */ -#define ECONV_INVALID_MASK RUBY_ECONV_INVALID_MASK /**< @old{RUBY_ECONV_INVALID_MASK} */ -#define ECONV_INVALID_REPLACE RUBY_ECONV_INVALID_REPLACE /**< @old{RUBY_ECONV_INVALID_REPLACE} */ -#define ECONV_UNDEF_MASK RUBY_ECONV_UNDEF_MASK /**< @old{RUBY_ECONV_UNDEF_MASK} */ -#define ECONV_UNDEF_REPLACE RUBY_ECONV_UNDEF_REPLACE /**< @old{RUBY_ECONV_UNDEF_REPLACE} */ -#define ECONV_UNDEF_HEX_CHARREF RUBY_ECONV_UNDEF_HEX_CHARREF /**< @old{RUBY_ECONV_UNDEF_HEX_CHARREF} */ -#define ECONV_DECORATOR_MASK RUBY_ECONV_DECORATOR_MASK /**< @old{RUBY_ECONV_DECORATOR_MASK} */ -#define ECONV_NEWLINE_DECORATOR_MASK RUBY_ECONV_NEWLINE_DECORATOR_MASK /**< @old{RUBY_ECONV_NEWLINE_DECORATOR_MASK} */ -#define ECONV_NEWLINE_DECORATOR_READ_MASK RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK /**< @old{RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK} */ -#define ECONV_NEWLINE_DECORATOR_WRITE_MASK RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK /**< @old{RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK} */ -#define ECONV_UNIVERSAL_NEWLINE_DECORATOR RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR /**< @old{RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR} */ -#define ECONV_CRLF_NEWLINE_DECORATOR RUBY_ECONV_CRLF_NEWLINE_DECORATOR /**< @old{RUBY_ECONV_CRLF_NEWLINE_DECORATOR} */ -#define ECONV_CR_NEWLINE_DECORATOR RUBY_ECONV_CR_NEWLINE_DECORATOR /**< @old{RUBY_ECONV_CR_NEWLINE_DECORATOR} */ -#define ECONV_LF_NEWLINE_DECORATOR RUBY_ECONV_LF_NEWLINE_DECORATOR /**< @old{RUBY_ECONV_LF_NEWLINE_DECORATOR} */ -#define ECONV_XML_TEXT_DECORATOR RUBY_ECONV_XML_TEXT_DECORATOR /**< @old{RUBY_ECONV_XML_TEXT_DECORATOR} */ -#define ECONV_XML_ATTR_CONTENT_DECORATOR RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR /**< @old{RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR} */ -#define ECONV_STATEFUL_DECORATOR_MASK RUBY_ECONV_STATEFUL_DECORATOR_MASK /**< @old{RUBY_ECONV_STATEFUL_DECORATOR_MASK} */ -#define ECONV_XML_ATTR_QUOTE_DECORATOR RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR /**< @old{RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR} */ -#define ECONV_DEFAULT_NEWLINE_DECORATOR RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR /**< @old{RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR} */ - /** @} */ - - /** - * @name Flags for rb_econv_convert() - * - * @{ - */ - - /** Indicates the input is a part of much larger one. */ - RUBY_ECONV_PARTIAL_INPUT = 0x00020000, - - /** Instructs the converter to stop after output. */ - RUBY_ECONV_AFTER_OUTPUT = 0x00040000, -#define ECONV_PARTIAL_INPUT RUBY_ECONV_PARTIAL_INPUT /**< @old{RUBY_ECONV_PARTIAL_INPUT} */ -#define ECONV_AFTER_OUTPUT RUBY_ECONV_AFTER_OUTPUT /**< @old{RUBY_ECONV_AFTER_OUTPUT} */ - - RUBY_ECONV_FLAGS_PLACEHOLDER /**< Placeholder (not used) */ -}; - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_INTERNAL_ENCODING_TRANSCODE_H */ diff --git a/libs/libruby/ruby/internal/error.h b/libs/libruby/ruby/internal/error.h deleted file mode 100644 index 49e2276..0000000 --- a/libs/libruby/ruby/internal/error.h +++ /dev/null @@ -1,582 +0,0 @@ -#ifndef RBIMPL_ERROR_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ERROR_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Declares ::rb_raise(). - */ -#include "ruby/internal/attr/cold.h" -#include "ruby/internal/attr/format.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -/** - * @defgroup exception Exception handlings - * @{ - */ - -/** - * Warning categories. A warning issued using this API can be selectively - * requested / suppressed by the end-users. For instance passing - * `-W:no-deprecated` to the ruby process would suppress those warnings in - * deprecated category. - * - * @warning There is no way to declare a new category (for now). - */ -typedef enum { - /** Category unspecified. */ - RB_WARN_CATEGORY_NONE, - - /** Warning is for deprecated features. */ - RB_WARN_CATEGORY_DEPRECATED, - - /** Warning is for experimental features. */ - RB_WARN_CATEGORY_EXPERIMENTAL, - - RB_WARN_CATEGORY_ALL_BITS = 0x6 /* no RB_WARN_CATEGORY_NONE bit */ -} rb_warning_category_t; - -/** for rb_readwrite_sys_fail first argument */ -enum rb_io_wait_readwrite {RB_IO_WAIT_READABLE, RB_IO_WAIT_WRITABLE}; -/** @cond INTERNAL_MACRO */ -#define RB_IO_WAIT_READABLE RB_IO_WAIT_READABLE -#define RB_IO_WAIT_WRITABLE RB_IO_WAIT_WRITABLE -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * This is the same as `$!` in Ruby. - * - * @retval RUBY_Qnil Not handling exceptions at the moment. - * @retval otherwise The current exception in the current thread. - * @ingroup exception - */ -VALUE rb_errinfo(void); - -/** - * Sets the current exception (`$!`) to the given value. - * - * @param[in] err An instance of ::rb_eException, or ::RUBY_Qnil. - * @exception rb_eTypeError What is given was neither ::rb_eException nor - * ::RUBY_Qnil. - * @note Use rb_raise() instead to raise `err`. This function just - * assigns the given object to the global variable. - * @ingroup exception - */ -void rb_set_errinfo(VALUE err); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3) -/** - * Exception entry point. By calling this function the execution of your - * program gets interrupted to "raise" an exception up to the callee entities. - * Programs could "rescue" that exception, or could "ensure" some part of them. - * If nobody cares about such things, the raised exception reaches at the top - * of execution. This yields abnormal end of the process. - * - * @param[in] exc A subclass of ::rb_eException. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - * @exception exc The specified exception. - * @note It never returns. - */ -void rb_raise(VALUE exc, const char *fmt, ...); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL((1)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2) -/** - * Raises the unsung "fatal" exception. This is considered severe. Nobody can - * rescue the exception. Once raised, process termination is inevitable. - * However ensure clauses still run, so that resources are properly cleaned up. - * - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - * @exception rb_eFatal An exception that you cannot rescue. - * @note It never returns. - */ -void rb_fatal(const char *fmt, ...); - -RBIMPL_ATTR_COLD() -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL((1)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2) -/** - * Interpreter panic switch. Immediate process termination without any - * synchronisations shall occur. LOTS of internal states, stack traces, and - * even machine registers are displayed if possible for debugging purposes - * then. - * - * @warning Do not use this API. - * @warning You are not expected to use this API. - * @warning Why not just fix your code instead of calling this API? - * @warning It was a bad idea to expose this API to extension libraries at - * the first place. We just cannot delete it at this point for - * backwards compatibility. That doesn't mean everyone are - * welcomed to call this function at will. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - * @note It never returns. - */ -void rb_bug(const char *fmt, ...); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL(()) -/** - * This is a wrapper of rb_bug() which automatically constructs appropriate - * message from the passed errno. - * - * @param[in] msg Additional message to display. - * @exception err C level errno. - * @note It never returns. - */ -void rb_bug_errno(const char *msg, int err); - -RBIMPL_ATTR_NORETURN() -/** - * Converts a C errno into a Ruby exception, then raises it. For instance: - * - * ```CXX - * static VALUE - * foo(VALUE argv) - * { - * const auto cmd = StringValueCStr(argv); - * const auto waitr = system(cmd); - * if (waitr == -1) { - * rb_sys_fail("system(3posix)"); // <-------------- this - * } - * else { - * return INT2FIX(fd); - * } - * } - * ``` - * - * @param[in] msg Additional message to raise. - * @exception rb_eSystemCallError An exception representing errno. - * @note It never returns. - */ -void rb_sys_fail(const char *msg); - -RBIMPL_ATTR_NORETURN() -/** - * Identical to rb_sys_fail(), except it takes the message in Ruby's String - * instead of C's. - * - * @param[in] msg Additional message to raise. - * @exception rb_eSystemCallError An exception representing errno. - * @note It never returns. - */ -void rb_sys_fail_str(VALUE msg); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL((2)) -/** - * Identical to rb_sys_fail(), except it takes additional module to extend the - * exception object before raising. - * - * @param[in] mod A ::rb_cModule instance. - * @param[in] msg Additional message to raise. - * @exception rb_eSystemCallError An exception representing errno. - * @note It never returns. - * - * @internal - * - * Does anybody use it? - */ -void rb_mod_sys_fail(VALUE mod, const char *msg); - -RBIMPL_ATTR_NORETURN() -/** - * Identical to rb_mod_sys_fail(), except it takes the message in Ruby's String - * instead of C's. - * - * @param[in] mod A ::rb_cModule instance. - * @param[in] msg Additional message to raise. - * @exception rb_eSystemCallError An exception representing errno. - * @note It never returns. - */ -void rb_mod_sys_fail_str(VALUE mod, VALUE msg); - -RBIMPL_ATTR_NORETURN() -/** - * Raises appropriate exception using the parameters. - * - * In Ruby level there are rb_eEAGAINWaitReadable etc. This function maps the - * given parameter to an appropriate exception class, then raises it. - * - * @param[in] waiting Reason for the IO to wait. - * @param[in] msg Additional message to raise. - * @exception rb_eEAGAINWaitWritable - * @exception rb_eEWOULDBLOCKWaitWritable - * @exception rb_eEINPROGRESSWaitWritable - * @exception rb_eEAGAINWaitReadable - * @exception rb_eEWOULDBLOCKWaitReadable - * @exception rb_eEINPROGRESSWaitReadable - * @exception rb_eSystemCallError - * @note It never returns. - */ -void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg); - -RBIMPL_ATTR_NORETURN() -/** - * Breaks from a block. Because you are using a CAPI this is not as intuitive - * as it sounds. In order for this function to properly work, make a - * ::rb_block_call_func_t function that calls it internally, and pass that - * function to rb_block_call(). - * - * @exception rb_eLocalJumpError Called from outside of a block. - * @note It never returns. - */ -void rb_iter_break(void); - -RBIMPL_ATTR_NORETURN() -/** - * Identical to rb_iter_break(), except it additionally takes the "value" of - * this breakage. It will be the evaluation result of the iterator. This is - * kind of complicated; you cannot see this as a "return from a block" - * behaviour. Take a look at this example: - * - * ```ruby - * def foo(q) - * puts(w = yield(q)) - * puts(e = yield(w)) - * puts(r = yield(e)) - * puts(t = yield(r)) - * puts(y = yield(t)) - * return "howdy!" - * end - * - * x = foo(0) {|i| - * if i > 2 - * break "hello!" - * else - * next i + 1 - * end - * } - * - * puts x - * ``` - * - * This script outputs 1, 2, 3, and hello. Note that the value passed to break - * becomes the return value of foo method, not the value of yield. This is - * confusing, but can be handy on occasions e.g. when you want to bring a - * local variable out of a block. - * - * @param[in] val The value of the iterator. - * @exception rb_eLocalJumpError Called from outside of a block. - * @note It never returns. - */ -void rb_iter_break_value(VALUE val); - -RBIMPL_ATTR_NORETURN() -/** - * Terminates the current execution context. This API is the entry point of a - * "well-mannered" termination sequence. When called from an extension - * library, it raises ::rb_eSystemExit exception. Programs could rescue that - * exception. Can cancel process exit then. Otherwise, that exception results - * in a process termination with the status passed to this function. - * - * @param[in] status Exit status, see also exit(3). - * @exception rb_eSystemExit Exception representing the exit status. - * @note It never returns. - * - * @internal - * - * "When called from an extension library"? You might wonder. In fact there - * are chances for this function to be called from outside of it, for instance - * when dlopen(3) failed. In case it is not possible for this function to - * raise an exception, it does not (silently enters to process cleanup). But - * that is a kind of implementation detail which extension library authors - * should not bother. - */ -void rb_exit(int status); - -RBIMPL_ATTR_NORETURN() -/** - * @exception rb_eNotImpError - * @note It never returns. - */ -void rb_notimplement(void); - -/** - * Creates an exception object that represents the given C errno. - * - * @param[in] err C level errno. - * @param[in] msg Additional message. - * @retval rb_eSystemCallError An exception for the errno. - */ -VALUE rb_syserr_new(int err, const char * msg); - -/** - * Identical to rb_syserr_new(), except it takes the message in Ruby's String - * instead of C's. - * - * @param[in] n C level errno. - * @param[in] arg Additional message. - * @retval rb_eSystemCallError An exception for the errno. - */ -VALUE rb_syserr_new_str(int n, VALUE arg); - -RBIMPL_ATTR_NORETURN() -/** - * Raises appropriate exception that represents a C errno. - * - * @param[in] err C level errno. - * @param[in] msg Additional message to raise. - * @exception rb_eSystemCallError An exception representing `err`. - * @note It never returns. - */ -void rb_syserr_fail(int err, const char *msg); - -RBIMPL_ATTR_NORETURN() -/** - * Identical to rb_syserr_fail(), except it takes the message in Ruby's String - * instead of C's. - * - * @param[in] err C level errno. - * @param[in] msg Additional message to raise. - * @exception rb_eSystemCallError An exception representing `err`. - * @note It never returns. - */ -void rb_syserr_fail_str(int err, VALUE msg); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_mod_sys_fail(), except it does not depend on C global - * variable errno. Pass it explicitly. - * - * @param[in] mod A ::rb_cModule instance. - * @param[in] err C level errno. - * @param[in] msg Additional message to raise. - * @exception rb_eSystemCallError An exception representing `err`. - * @note It never returns. - */ -void rb_mod_syserr_fail(VALUE mod, int err, const char *msg); - -RBIMPL_ATTR_NORETURN() -/** - * Identical to rb_mod_syserr_fail(), except it takes the message in Ruby's - * String instead of C's. - * - * @param[in] mod A ::rb_cModule instance. - * @param[in] err C level errno. - * @param[in] msg Additional message to raise. - * @exception rb_eSystemCallError An exception representing `err`. - * @note It never returns. - */ -void rb_mod_syserr_fail_str(VALUE mod, int err, VALUE msg); - -RBIMPL_ATTR_NORETURN() -/** - * Identical to rb_readwrite_sys_fail(), except it does not depend on C global - * variable errno. Pass it explicitly. - * - * @param[in] waiting Reason for the IO to wait. - * @param[in] err C level errno. - * @param[in] msg Additional message to raise. - * @exception rb_eEAGAINWaitWritable - * @exception rb_eEWOULDBLOCKWaitWritable - * @exception rb_eEINPROGRESSWaitWritable - * @exception rb_eEAGAINWaitReadable - * @exception rb_eEWOULDBLOCKWaitReadable - * @exception rb_eEINPROGRESSWaitReadable - * @exception rb_eSystemCallError - * @note It never returns. - */ -void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int err, const char *msg); - -RBIMPL_ATTR_COLD() -RBIMPL_ATTR_NORETURN() -/** - * Fails with the given object's type incompatibility to the type. - * - * It seems this function is visible from extension libraries only because - * RTYPEDDATA_TYPE() uses it on RUBY_DEBUG. So you can basically ignore it; - * use some other fine-grained method instead. - * - * @param[in] self The object in question. - * @param[in] t Expected type of the object. - * @exception rb_eTypeError `self` not in type `t`. - * @note It never returns. - * @note The second argument must have been an enum ::ruby_value_type, - * but for historical reasons it remains to be an int (in other - * words we see no benefits fixing this bug). - */ -void rb_unexpected_type(VALUE self, int t); - -/** - * @private - * - * This is an implementation detail of #ruby_verbose. Please don't use it - * directly. - * - * @retval Qnil Interpreter is quiet. - * @retval Qfalse Interpreter is kind of chatty. - * @retval otherwise Interpreter is very verbose. - */ -VALUE *rb_ruby_verbose_ptr(void); - -/** - * @private - * - * This is an implementation detail of #ruby_debug. Please don't use it - * directly. - * - * @retval Qnil Interpreter not in debug mode. - * @retval Qfalse Interpreter not in debug mode. - * @retval otherwise Interpreter is in debug mode. - */ -VALUE *rb_ruby_debug_ptr(void); - -/** - * This variable controls whether the interpreter is in debug mode. Setting - * this to some truthy value is equivalent to passing `-W` flag to the - * interpreter. Setting this to ::Qfalse is equivalent to passing `-W1` flag - * to the interpreter. Setting this to ::Qnil is equivalent to passing `-W0` - * flag to the interpreter. - * - * @retval Qnil Interpreter is quiet. - * @retval Qfalse Interpreter is kind of chatty. - * @retval otherwise Interpreter is very verbose. - */ -#define ruby_verbose (*rb_ruby_verbose_ptr()) - -/** - * This variable controls whether the interpreter is in debug mode. Setting - * this to some truthy value is equivalent to passing `-d` flag to the - * interpreter. - * - * @retval Qnil Interpreter not in debug mode. - * @retval Qfalse Interpreter not in debug mode. - * @retval otherwise Interpreter is in debug mode. - */ -#define ruby_debug (*rb_ruby_debug_ptr()) - -/* reports if `-W' specified */ -RBIMPL_ATTR_NONNULL((1)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2) -/** - * Issues a warning. - * - * In ruby, warnings these days are tightly coupled with the rb_mWarning - * constant and its `warn` singleton method. This CAPI is just a thin wrapper - * of it; everything passed are formatted like what rb_sprintf() does, then - * passed through to the method. Programs can have their own `def - * Warning.warn` at will to do whatever they want, from ignoring the warnings - * at all to sinking them to some BigQuery data set via a Fluentd cluster. By - * default, the method just emits its passed contents to ::rb_stderr using - * rb_io_write(). - * - * @note This function is affected by the `-W` flag. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -void rb_warning(const char *fmt, ...); - -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3) -/** - * Identical to rb_warning(), except it takes additional "category" parameter. - * - * @param[in] cat Name of a known category. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - */ -void rb_category_warning(rb_warning_category_t cat, const char *fmt, ...); - -RBIMPL_ATTR_NONNULL((1, 3)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4) -/** - * Issues a compile-time warning that happens at `__file__:__line__`. Purpose - * of this function being exposed to CAPI is unclear. - * - * @note This function is affected by the `-W` flag. - * @param[in] file The path corresponding to Ruby level `__FILE__`. - * @param[in] line The number corresponding to Ruby level `__LINE__`. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - */ -void rb_compile_warning(const char *file, int line, const char *fmt, ...); - -RBIMPL_ATTR_NONNULL((1)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2) -/** - * Identical to rb_sys_fail(), except it does not raise an exception to render - * a warning instead. - * - * @note This function is affected by the `-W` flag. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - */ -void rb_sys_warning(const char *fmt, ...); - -/* reports always */ -RBIMPL_ATTR_COLD() -RBIMPL_ATTR_NONNULL((1)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2) -/** - * Identical to rb_warning(), except it reports always regardless of runtime - * `-W` flag. - * - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - */ -void rb_warn(const char *fmt, ...); - -RBIMPL_ATTR_COLD() -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3) -/** - * Identical to rb_category_warning(), except it reports always regardless of - * runtime `-W` flag. - * - * @param[in] cat Category e.g. deprecated. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - */ -void rb_category_warn(rb_warning_category_t cat, const char *fmt, ...); - -RBIMPL_ATTR_NONNULL((1, 3)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4) -/** - * Identical to rb_compile_warning(), except it reports always regardless of - * runtime `-W` flag. - * - * @param[in] file The path corresponding to Ruby level `__FILE__`. - * @param[in] line The number corresponding to Ruby level `__LINE__`. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - */ -void rb_compile_warn(const char *file, int line, const char *fmt, ...); - -RBIMPL_ATTR_NONNULL((2, 4)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 4, 5) -/** - * Identical to rb_compile_warn(), except it also accepts category. - * - * @param[in] cat Category e.g. deprecated. - * @param[in] file The path corresponding to Ruby level `__FILE__`. - * @param[in] line The number corresponding to Ruby level `__LINE__`. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - */ -void rb_category_compile_warn(rb_warning_category_t cat, const char *file, int line, const char *fmt, ...); - -/** @} */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_ERROR_H */ diff --git a/libs/libruby/ruby/internal/eval.h b/libs/libruby/ruby/internal/eval.h deleted file mode 100644 index 5bcbb97..0000000 --- a/libs/libruby/ruby/internal/eval.h +++ /dev/null @@ -1,400 +0,0 @@ -#ifndef RBIMPL_EVAL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_EVAL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Declares ::rb_eval_string(). - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -RBIMPL_ATTR_NONNULL(()) -/** - * Evaluates the given string. - * - * In case it is called from within a C-backended method, the evaluation is - * done under the current binding. However there can be no method. On such - * situation this function evaluates in an isolated binding, like `require` - * runs in a separate one. - * - * `__FILE__` will be `"(eval)"`, and `__LINE__` starts from 1 in the - * evaluation. - * - * @param[in] str Ruby code to evaluate. - * @exception rb_eException Raises an exception on error. - * @return The evaluated result. - * - * @internal - * - * @shyouhei's old tale about the birth and growth of this function: - * - * At the beginning, there was no rb_eval_string(). @shyouhei heard that - * @shugo, author of Apache httpd's mod_ruby module, requested @matz for this - * API. He wanted a way so that mod_ruby can evaluate ruby scripts one by one, - * separately, in each different contexts. So this function was made. It was - * designed to be a global interpreter entry point like ruby_run_node(). - * - * The way it is implemented however allows extension libraries (not just - * programs like Apache httpd) to call this function. Because its name says - * nothing about the initial design, people started to think of it as an - * orthodox way to call ruby level `eval` method from their extension - * libraries. Even our `extension.rdoc` has had a description of this function - * basically according to this understanding. - * - * The old (mod_ruby like) usage still works. But over time, usages of this - * function from extension libraries got popular, while mod_ruby faded out; is - * no longer maintained now. Devs decided to actively support both. This - * function now auto-detects how it is called, and switches how it works - * depending on it. - * - * @see https://bugs.ruby-lang.org/issues/18780 - */ -VALUE rb_eval_string(const char *str); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Identical to rb_eval_string(), except it avoids potential global escapes. - * Such global escapes include exceptions, `throw`, `break`, for example. - * - * It first evaluates the given string as rb_eval_string() does. If no global - * escape occurred during the evaluation, it returns the result and `*state` is - * zero. Otherwise, it returns some undefined value and sets `*state` to - * nonzero. If state is `NULL`, it is not set in both cases. - * - * @param[in] str Ruby code to evaluate. - * @param[out] state State of execution. - * @return The evaluated result if succeeded, an undefined value if - * otherwise. - * @post `*state` is set to zero if succeeded. Nonzero otherwise. - * @warning You have to clear the error info with `rb_set_errinfo(Qnil)` if - * you decide to ignore the caught exception. - * @see rb_eval_string - * @see rb_protect - * - * @internal - * - * The "undefined value" described above is in fact ::RUBY_Qnil for now. But - * @shyouhei doesn't think that we would never change that. - * - * Though not a part of our public API, `state` is in fact an - * enum ruby_tag_type. You can see the potential "nonzero" values by looking - * at vm_core.h. - */ -VALUE rb_eval_string_protect(const char *str, int *state); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Identical to rb_eval_string_protect(), except it evaluates the given string - * under a module binding in an isolated binding. This is the same as a - * binding for loaded libraries on `rb_load(something, true)`. - * - * @param[in] str Ruby code to evaluate. - * @param[out] state State of execution. - * @return The evaluated result if succeeded, an undefined value if - * otherwise. - * @post `*state` is set to zero if succeeded. Nonzero otherwise. - * @warning You have to clear the error info with `rb_set_errinfo(Qnil)` if - * you decide to ignore the caught exception. - * @see rb_eval_string - */ -VALUE rb_eval_string_wrap(const char *str, int *state); - -/** - * Calls a method. Can call both public and private methods. - * - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] n Number of arguments that follow. - * @param[in] ... Arbitrary number of method arguments. - * @exception rb_eNoMethodError No such method. - * @exception rb_eException Any exceptions happen inside. - * @return What the method evaluates to. - */ -VALUE rb_funcall(VALUE recv, ID mid, int n, ...); - -/** - * Identical to rb_funcall(), except it takes the method arguments as a C - * array. - * - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @exception rb_eNoMethodError No such method. - * @exception rb_eException Any exceptions happen inside. - * @return What the method evaluates to. - */ -VALUE rb_funcallv(VALUE recv, ID mid, int argc, const VALUE *argv); - -/** - * Identical to rb_funcallv(), except you can specify how to handle the last - * element of the given array. - * - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eNoMethodError No such method. - * @exception rb_eException Any exceptions happen inside. - * @return What the method evaluates to. - */ -VALUE rb_funcallv_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat); - -/** - * Identical to rb_funcallv(), except it only takes public methods into - * account. This is roughly Ruby's `Object#public_send`. - * - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @exception rb_eNoMethodError No such method. - * @exception rb_eNoMethodError The method is private or protected. - * @exception rb_eException Any exceptions happen inside. - * @return What the method evaluates to. - */ -VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, const VALUE *argv); - -/** - * Identical to rb_funcallv_public(), except you can specify how to handle the - * last element of the given array. It can also be seen as a routine identical - * to rb_funcallv_kw(), except it only takes public methods into account. - * - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eNoMethodError No such method. - * @exception rb_eNoMethodError The method is private or protected. - * @exception rb_eException Any exceptions happen inside. - * @return What the method evaluates to. - */ -VALUE rb_funcallv_public_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat); - -/** - * @deprecated This is an old name of rb_funcallv(). Provided here for - * backwards compatibility to 2.x programs (introduced in 2.1). - * It is not a good name. Please don't use it any longer. - */ -#define rb_funcall2 rb_funcallv - -/** - * @deprecated This is an old name of rb_funcallv_public(). Provided here - * for backwards compatibility to 2.x programs (introduced in - * 2.1). It is not a good name. Please don't use it any longer. - */ -#define rb_funcall3 rb_funcallv_public - -/** - * Identical to rb_funcallv_public(), except you can pass the passed block. - * - * Sometimes you want to "pass" a block parameter form one method to another. - * Suppose you have this Ruby method `foo`: - * - * ```ruby - * def foo(x, y, &z) - * x.open(y, &z) - * end - * ``` - * - * And suppose you want to translate this into C. Then - * rb_funcall_passing_block() function is usable in this situation. - * - * ```CXX - * VALUE - * foo_translated_into_C(VALUE self, VALUE x, VALUE y) - * { - * const auto open = rb_intern("open"); - * - * return rb_funcall_passing_block(x, open, 1, &y); - * } - * ``` - * - * @see rb_yield_block - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @exception rb_eNoMethodError No such method. - * @exception rb_eNoMethodError The method is private or protected. - * @exception rb_eException Any exceptions happen inside. - * @return What the method evaluates to. - */ -VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv); - -/** - * Identical to rb_funcallv_passing_block(), except you can specify how to - * handle the last element of the given array. It can also be seen as a - * routine identical to rb_funcallv_public_kw(), except you can pass the passed - * block. - * - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eNoMethodError No such method. - * @exception rb_eNoMethodError The method is private or protected. - * @exception rb_eException Any exceptions happen inside. - * @return What the method evaluates to. - */ -VALUE rb_funcall_passing_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat); - -/** - * Identical to rb_funcallv_public(), except you can pass a block. A block - * here basically is an instance of ::rb_cProc. If you want to exercise - * `to_proc` conversion, do so before passing it here. However nil and symbols - * are special-case allowed. - * - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] procval An instance of Proc, Symbol, or NilClass. - * @exception rb_eNoMethodError No such method. - * @exception rb_eNoMethodError The method is private or protected. - * @exception rb_eException Any exceptions happen inside. - * @return What the method evaluates to. - * - * @internal - * - * Implementation-wise, `procval` is in fact a "block handler" object. You - * could also pass an IFUNC (block_handler_ifunc) here to say precise. --- But - * AFAIK there is no 3rd party way to even know that there are objects called - * IFUNC behind-the-scene. - */ -VALUE rb_funcall_with_block(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval); - -/** - * Identical to rb_funcallv_with_block(), except you can specify how to handle - * the last element of the given array. It can also be seen as a routine - * identical to rb_funcallv_public_kw(), except you can pass a block. - * - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] procval An instance of Proc, Symbol, or NilClass. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eNoMethodError No such method. - * @exception rb_eNoMethodError The method is private or protected. - * @exception rb_eException Any exceptions happen inside. - * @return What the method evaluates to. - */ -VALUE rb_funcall_with_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval, int kw_splat); - -/** - * This resembles ruby's `super`. - * - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @exception rb_eNoMethodError No super method are there. - * @exception rb_eException Any exceptions happen inside. - * @return What the super method evaluates to. - */ -VALUE rb_call_super(int argc, const VALUE *argv); - -/** - * Identical to rb_call_super(), except you can specify how to handle the last - * element of the given array. - * - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eNoMethodError No super method are there. - * @exception rb_eException Any exceptions happen inside. - * @return What the super method evaluates to. - */ -VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat); - -/** - * This resembles ruby's `self`. - * - * @exception rb_eRuntimeError Called from outside of method context. - * @return Current receiver. - */ -VALUE rb_current_receiver(void); - -RBIMPL_ATTR_NONNULL((2)) -/** - * Keyword argument deconstructor. - * - * Retrieves argument values bound to keywords, which directed by `table` into - * `values`, deleting retrieved entries from `keyword_hash` along the way. - * First `required` number of IDs referred by `table` are mandatory, and - * succeeding `optional` (`-optional-1` if `optional` is negative) number of - * IDs are optional. If a mandatory key is not contained in `keyword_hash`, - * raises ::rb_eArgError. If an optional key is not present in `keyword_hash`, - * the corresponding element in `values` is set to ::RUBY_Qundef. If - * `optional` is negative, rest of `keyword_hash` are ignored, otherwise raises - * ::rb_eArgError. - * - * @warning Handling keyword arguments in the C API is less efficient than - * handling them in Ruby. Consider using a Ruby wrapper method - * around a non-keyword C function. - * @see https://bugs.ruby-lang.org/issues/11339 - * @param[out] keyword_hash Target hash to deconstruct. - * @param[in] table List of keywords that you are interested in. - * @param[in] required Number of mandatory keywords. - * @param[in] optional Number of optional keywords (can be negative). - * @param[out] values Buffer to be filled. - * @exception rb_eArgError Absence of a mandatory keyword. - * @exception rb_eArgError Found an unknown keyword. - * @return Number of found values that are stored into `values`. - */ -int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values); - -RBIMPL_ATTR_NONNULL(()) -/** - * Splits a hash into two. - * - * Takes a hash of various keys, and split it into symbol-keyed parts and - * others. Symbol-keyed part becomes the return value. What remains are - * returned as a new hash object stored at the argument pointer. - * - * @param[in,out] orighash Pointer to a target hash to split. - * @return An extracted keyword hash. - * @post Upon successful return `orighash` points to another hash - * object, whose contents are the remainder of the operation. - * @note The argument hash object is not modified. - */ -VALUE rb_extract_keywords(VALUE *orighash); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_EVAL_H */ diff --git a/libs/libruby/ruby/internal/event.h b/libs/libruby/ruby/internal/event.h deleted file mode 100644 index 04b137a..0000000 --- a/libs/libruby/ruby/internal/event.h +++ /dev/null @@ -1,154 +0,0 @@ -#ifndef RBIMPL_EVENT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_EVENT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Debugging and tracing APIs. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -/* These macros are not enums because they are wider than int.*/ - -/** - * @name Traditional set_trace_func events - * - * @{ - */ -#define RUBY_EVENT_NONE 0x0000 /**< No events. */ -#define RUBY_EVENT_LINE 0x0001 /**< Encountered a new line. */ -#define RUBY_EVENT_CLASS 0x0002 /**< Encountered a new class. */ -#define RUBY_EVENT_END 0x0004 /**< Encountered an end of a class clause. */ -#define RUBY_EVENT_CALL 0x0008 /**< A method, written in Ruby, is called. */ -#define RUBY_EVENT_RETURN 0x0010 /**< Encountered a `return` statement. */ -#define RUBY_EVENT_C_CALL 0x0020 /**< A method, written in C, is called. */ -#define RUBY_EVENT_C_RETURN 0x0040 /**< Return from a method, written in C. */ -#define RUBY_EVENT_RAISE 0x0080 /**< Encountered a `raise` statement. */ -#define RUBY_EVENT_ALL 0x00ff /**< Bitmask of traditional events. */ - -/** @} */ - -/** - * @name TracePoint extended events - * - * @{ - */ -#define RUBY_EVENT_B_CALL 0x0100 /**< Encountered an `yield` statement. */ -#define RUBY_EVENT_B_RETURN 0x0200 /**< Encountered a `next` statement. */ -#define RUBY_EVENT_THREAD_BEGIN 0x0400 /**< Encountered a new thread. */ -#define RUBY_EVENT_THREAD_END 0x0800 /**< Encountered an end of a thread. */ -#define RUBY_EVENT_FIBER_SWITCH 0x1000 /**< Encountered a `Fiber#yield`. */ -#define RUBY_EVENT_SCRIPT_COMPILED 0x2000 /**< Encountered an `eval`. */ -#define RUBY_EVENT_TRACEPOINT_ALL 0xffff /**< Bitmask of extended events. */ - -/** @} */ - -/** - * @name Special events - * - * @internal - * - * These bits are actually used internally. See vm_core.h if you are curious. - * - * @endinternal - * - * @{ - */ -#define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000 /**< Opaque bits. */ - -/** @} */ - -/** - * @name Internal events - * - * @shyouhei's understanding is that some of them are visible from extension - * libraries because of `ext/objspace`. But it seems that doesn't describe - * everything? The ultimate reason why they are here remains unclear. - * - * @{ - */ -#define RUBY_INTERNAL_EVENT_SWITCH 0x040000 /**< Thread switched. */ -#define RUBY_EVENT_SWITCH 0x040000 /**< @old{RUBY_INTERNAL_EVENT_SWITCH} */ - /* 0x080000 */ -#define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000 /**< Object allocated. */ -#define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000 /**< Object swept. */ -#define RUBY_INTERNAL_EVENT_GC_START 0x400000 /**< GC started. */ -#define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000 /**< GC ended mark phase. */ -#define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000 /**< GC ended sweep phase. */ -#define RUBY_INTERNAL_EVENT_GC_ENTER 0x2000000 /**< `gc_enter()` is called. */ -#define RUBY_INTERNAL_EVENT_GC_EXIT 0x4000000 /**< `gc_exit()` is called. */ -#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x7f00000 /**< Bitmask of GC events. */ -#define RUBY_INTERNAL_EVENT_MASK 0xffff0000 /**< Bitmask of internal events. */ - -/** @} */ - -/** - * Represents event(s). As the name implies events are bit flags. - */ -typedef uint32_t rb_event_flag_t; - -/** - * Type of event hooks. When an event happens registered functions are kicked - * with appropriate parameters. - * - * @param[in] evflag The kind of event that happened. - * @param[in] data The `data` passed to rb_add_event_hook(). - * @param[in] self Current receiver. - * @param[in] mid Name of the current method. - * @param[in] klass Current class. - */ -typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass); - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1 - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Registers an event hook function. - * - * @param[in] func A callback. - * @param[in] events A set of events that `func` should run. - * @param[in] data Passed as-is to `func`. - */ -void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); - -/** - * Removes the passed function from the list of event hooks. - * - * @param[in] func A callback. - * @return Number of deleted event hooks. - * @note As multiple events can share the same `func` it is quite - * possible for the return value to become more than one. - * - * @internal - * - * @shyouhei doesn't know if this is an Easter egg or an official feature, but - * you can pass 0 to the argument. That effectively swipes everything out from - * the hook list. - */ -int rb_remove_event_hook(rb_event_hook_func_t func); -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_EVENT_H */ diff --git a/libs/libruby/ruby/internal/fl_type.h b/libs/libruby/ruby/internal/fl_type.h deleted file mode 100644 index 7383426..0000000 --- a/libs/libruby/ruby/internal/fl_type.h +++ /dev/null @@ -1,948 +0,0 @@ -#ifndef RBIMPL_FL_TYPE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_FL_TYPE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines enum ::ruby_fl_type. - */ -#include "ruby/internal/config.h" /* for ENUM_OVER_INT */ -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/deprecated.h" -#include "ruby/internal/attr/flag_enum.h" -#include "ruby/internal/attr/forceinline.h" -#include "ruby/internal/attr/noalias.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/compiler_since.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/has/extension.h" -#include "ruby/internal/special_consts.h" -#include "ruby/internal/stdbool.h" -#include "ruby/internal/value.h" -#include "ruby/internal/value_type.h" -#include "ruby/assert.h" -#include "ruby/defines.h" - -/** @cond INTERNAL_MACRO */ -#if RBIMPL_HAS_EXTENSION(enumerator_attributes) -# define RBIMPL_HAVE_ENUM_ATTRIBUTE 1 -#elif RBIMPL_COMPILER_SINCE(GCC, 6, 0, 0) -# define RBIMPL_HAVE_ENUM_ATTRIBUTE 1 -#endif - -#ifdef ENUM_OVER_INT -# define RBIMPL_WIDER_ENUM 1 -#elif SIZEOF_INT * CHAR_BIT > 12+19+1 -# define RBIMPL_WIDER_ENUM 1 -#else -# define RBIMPL_WIDER_ENUM 0 -#endif -/** @endcond */ - -#define FL_SINGLETON RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON) /**< @old{RUBY_FL_SINGLETON} */ -#define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED) /**< @old{RUBY_FL_WB_PROTECTED} */ -#define FL_PROMOTED0 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED0) /**< @old{RUBY_FL_PROMOTED0} */ -#define FL_PROMOTED1 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED1) /**< @old{RUBY_FL_PROMOTED1} */ -#define FL_FINALIZE RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE) /**< @old{RUBY_FL_FINALIZE} */ -#define FL_TAINT RBIMPL_CAST((VALUE)RUBY_FL_TAINT) /**< @old{RUBY_FL_TAINT} */ -#define FL_SHAREABLE RBIMPL_CAST((VALUE)RUBY_FL_SHAREABLE) /**< @old{RUBY_FL_SHAREABLE} */ -#define FL_UNTRUSTED RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED) /**< @old{RUBY_FL_UNTRUSTED} */ -#define FL_SEEN_OBJ_ID RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID) /**< @old{RUBY_FL_SEEN_OBJ_ID} */ -#define FL_EXIVAR RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR) /**< @old{RUBY_FL_EXIVAR} */ -#define FL_FREEZE RBIMPL_CAST((VALUE)RUBY_FL_FREEZE) /**< @old{RUBY_FL_FREEZE} */ - -#define FL_USHIFT RBIMPL_CAST((VALUE)RUBY_FL_USHIFT) /**< @old{RUBY_FL_USHIFT} */ - -#define FL_USER0 RBIMPL_CAST((VALUE)RUBY_FL_USER0) /**< @old{RUBY_FL_USER0} */ -#define FL_USER1 RBIMPL_CAST((VALUE)RUBY_FL_USER1) /**< @old{RUBY_FL_USER1} */ -#define FL_USER2 RBIMPL_CAST((VALUE)RUBY_FL_USER2) /**< @old{RUBY_FL_USER2} */ -#define FL_USER3 RBIMPL_CAST((VALUE)RUBY_FL_USER3) /**< @old{RUBY_FL_USER3} */ -#define FL_USER4 RBIMPL_CAST((VALUE)RUBY_FL_USER4) /**< @old{RUBY_FL_USER4} */ -#define FL_USER5 RBIMPL_CAST((VALUE)RUBY_FL_USER5) /**< @old{RUBY_FL_USER5} */ -#define FL_USER6 RBIMPL_CAST((VALUE)RUBY_FL_USER6) /**< @old{RUBY_FL_USER6} */ -#define FL_USER7 RBIMPL_CAST((VALUE)RUBY_FL_USER7) /**< @old{RUBY_FL_USER7} */ -#define FL_USER8 RBIMPL_CAST((VALUE)RUBY_FL_USER8) /**< @old{RUBY_FL_USER8} */ -#define FL_USER9 RBIMPL_CAST((VALUE)RUBY_FL_USER9) /**< @old{RUBY_FL_USER9} */ -#define FL_USER10 RBIMPL_CAST((VALUE)RUBY_FL_USER10) /**< @old{RUBY_FL_USER10} */ -#define FL_USER11 RBIMPL_CAST((VALUE)RUBY_FL_USER11) /**< @old{RUBY_FL_USER11} */ -#define FL_USER12 RBIMPL_CAST((VALUE)RUBY_FL_USER12) /**< @old{RUBY_FL_USER12} */ -#define FL_USER13 RBIMPL_CAST((VALUE)RUBY_FL_USER13) /**< @old{RUBY_FL_USER13} */ -#define FL_USER14 RBIMPL_CAST((VALUE)RUBY_FL_USER14) /**< @old{RUBY_FL_USER14} */ -#define FL_USER15 RBIMPL_CAST((VALUE)RUBY_FL_USER15) /**< @old{RUBY_FL_USER15} */ -#define FL_USER16 RBIMPL_CAST((VALUE)RUBY_FL_USER16) /**< @old{RUBY_FL_USER16} */ -#define FL_USER17 RBIMPL_CAST((VALUE)RUBY_FL_USER17) /**< @old{RUBY_FL_USER17} */ -#define FL_USER18 RBIMPL_CAST((VALUE)RUBY_FL_USER18) /**< @old{RUBY_FL_USER18} */ -#define FL_USER19 RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19) /**< @old{RUBY_FL_USER19} */ - -#define ELTS_SHARED RUBY_ELTS_SHARED /**< @old{RUBY_ELTS_SHARED} */ -#define RB_OBJ_FREEZE rb_obj_freeze_inline /**< @alias{rb_obj_freeze_inline} */ - -/** @cond INTERNAL_MACRO */ -#define RUBY_ELTS_SHARED RUBY_ELTS_SHARED -#define RB_FL_ABLE RB_FL_ABLE -#define RB_FL_ALL RB_FL_ALL -#define RB_FL_ALL_RAW RB_FL_ALL_RAW -#define RB_FL_ANY RB_FL_ANY -#define RB_FL_ANY_RAW RB_FL_ANY_RAW -#define RB_FL_REVERSE RB_FL_REVERSE -#define RB_FL_REVERSE_RAW RB_FL_REVERSE_RAW -#define RB_FL_SET RB_FL_SET -#define RB_FL_SET_RAW RB_FL_SET_RAW -#define RB_FL_TEST RB_FL_TEST -#define RB_FL_TEST_RAW RB_FL_TEST_RAW -#define RB_FL_UNSET RB_FL_UNSET -#define RB_FL_UNSET_RAW RB_FL_UNSET_RAW -#define RB_OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW -#define RB_OBJ_FROZEN RB_OBJ_FROZEN -#define RB_OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW -#define RB_OBJ_INFECT RB_OBJ_INFECT -#define RB_OBJ_INFECT_RAW RB_OBJ_INFECT_RAW -#define RB_OBJ_TAINT RB_OBJ_TAINT -#define RB_OBJ_TAINTABLE RB_OBJ_TAINTABLE -#define RB_OBJ_TAINTED RB_OBJ_TAINTED -#define RB_OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW -#define RB_OBJ_TAINT_RAW RB_OBJ_TAINT_RAW -#define RB_OBJ_UNTRUST RB_OBJ_TAINT -#define RB_OBJ_UNTRUSTED RB_OBJ_TAINTED -/** @endcond */ - -/** - * @defgroup deprecated_macros Deprecated macro APIs - * @{ - * These macros are deprecated. Prefer their `RB_`-prefixed versions. - */ -#define FL_ABLE RB_FL_ABLE /**< @old{RB_FL_ABLE} */ -#define FL_ALL RB_FL_ALL /**< @old{RB_FL_ALL} */ -#define FL_ALL_RAW RB_FL_ALL_RAW /**< @old{RB_FL_ALL_RAW} */ -#define FL_ANY RB_FL_ANY /**< @old{RB_FL_ANY} */ -#define FL_ANY_RAW RB_FL_ANY_RAW /**< @old{RB_FL_ANY_RAW} */ -#define FL_REVERSE RB_FL_REVERSE /**< @old{RB_FL_REVERSE} */ -#define FL_REVERSE_RAW RB_FL_REVERSE_RAW /**< @old{RB_FL_REVERSE_RAW} */ -#define FL_SET RB_FL_SET /**< @old{RB_FL_SET} */ -#define FL_SET_RAW RB_FL_SET_RAW /**< @old{RB_FL_SET_RAW} */ -#define FL_TEST RB_FL_TEST /**< @old{RB_FL_TEST} */ -#define FL_TEST_RAW RB_FL_TEST_RAW /**< @old{RB_FL_TEST_RAW} */ -#define FL_UNSET RB_FL_UNSET /**< @old{RB_FL_UNSET} */ -#define FL_UNSET_RAW RB_FL_UNSET_RAW /**< @old{RB_FL_UNSET_RAW} */ -#define OBJ_FREEZE RB_OBJ_FREEZE /**< @old{RB_OBJ_FREEZE} */ -#define OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW /**< @old{RB_OBJ_FREEZE_RAW} */ -#define OBJ_FROZEN RB_OBJ_FROZEN /**< @old{RB_OBJ_FROZEN} */ -#define OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW /**< @old{RB_OBJ_FROZEN_RAW} */ -#define OBJ_INFECT RB_OBJ_INFECT /**< @old{RB_OBJ_INFECT} */ -#define OBJ_INFECT_RAW RB_OBJ_INFECT_RAW /**< @old{RB_OBJ_INFECT_RAW} */ -#define OBJ_TAINT RB_OBJ_TAINT /**< @old{RB_OBJ_TAINT} */ -#define OBJ_TAINTABLE RB_OBJ_TAINTABLE /**< @old{RB_OBJ_TAINT_RAW} */ -#define OBJ_TAINTED RB_OBJ_TAINTED /**< @old{RB_OBJ_TAINTED} */ -#define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW /**< @old{RB_OBJ_TAINTED_RAW} */ -#define OBJ_TAINT_RAW RB_OBJ_TAINT_RAW /**< @old{RB_OBJ_TAINT_RAW} */ -#define OBJ_UNTRUST RB_OBJ_UNTRUST /**< @old{RB_OBJ_TAINT} */ -#define OBJ_UNTRUSTED RB_OBJ_UNTRUSTED /**< @old{RB_OBJ_TAINTED} */ -/** @} */ - -/** - * This is an enum because GDB wants it (rather than a macro). People need not - * bother. - */ -enum ruby_fl_ushift { - /** - * Number of bits in ::ruby_fl_type that are _not_ open to users. This is - * an implementation detail. Please ignore. - */ - RUBY_FL_USHIFT = 12 -}; - -/* > The expression that defines the value of an enumeration constant shall be - * > an integer constant expression that has a value representable as an `int`. - * - * -- ISO/IEC 9899:2018 section 6.7.2.2 - * - * So ENUM_OVER_INT situation is an extension to the standard. Note however - * that we do not support 16 bit `int` environment. */ -RB_GNUC_EXTENSION -/** - * The flags. Each ruby objects have their own characteristics apart from - * their classes. For instance whether an object is frozen or not is not - * controlled by its class. This is the type that represents such properties. - * - * @note About the `FL_USER` terminology: the "user" here does not necessarily - * mean only you. For instance struct ::RString instances use these - * bits to cache their encodings etc. Devs discussed about this topic, - * reached their consensus that ::RUBY_T_DATA is the only valid data - * structure that can use these bits; other data structures including - * ::RUBY_T_OBJECT use these bits for their own purpose. See also - * https://bugs.ruby-lang.org/issues/18059 - */ -enum -RBIMPL_ATTR_FLAG_ENUM() -ruby_fl_type { - - /** - * @deprecated This flag once was a thing back in the old days, but makes - * no sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - * - * @internal - * - * The reality is our GC no longer remembers write barriers inside of each - * objects, to use dedicated bitmap instead. But this flag is still used - * internally. The current usages of this flag should be something - * different, which is unclear to @shyouhei. - */ - RUBY_FL_WB_PROTECTED = (1<<5), - - /** - * This flag has something to do with our garbage collector. These days - * ruby objects are "generational". There are those who are young and - * those who are old. Young objects are prone to die; monitored relatively - * extensively by the garbage collector. OTOH old objects tend to live - * longer. They are relatively rarely considered. This flag is set when a - * object experienced promotion i.e. survived a garbage collection. - * - * @internal - * - * But honestly, @shyouhei doesn't think this flag should be visible from - * 3rd parties. It must be an implementation detail that they should never - * know. Might better be hidden. - */ - RUBY_FL_PROMOTED0 = (1<<5), - - /** - * This flag has something to do with our garbage collector. These days - * ruby objects are "generational". There are those who are young and - * those who are old. Young objects are prone to die; monitored relatively - * extensively by the garbage collector. OTOH old objects tend to live - * longer. They are relatively rarely considered. This flag is set when a - * object experienced two promotions i.e. survived garbage collections - * twice. - * - * @internal - * - * But honestly, @shyouhei doesn't think this flag should be visible from - * 3rd parties. It must be an implementation detail that they should never - * know. Might better be hidden. - */ - RUBY_FL_PROMOTED1 = (1<<6), - - /** - * This flag has something to do with our garbage collector. These days - * ruby objects are "generational". There are those who are young and - * those who are old. Young objects are prone to die; monitored relatively - * extensively by the garbage collector. OTOH old objects tend to live - * longer. They are relatively rarely considered. This flag is set when a - * object experienced promotions i.e. survived more than one garbage - * collections. - * - * @internal - * - * But honestly, @shyouhei doesn't think this flag should be visible from - * 3rd parties. It must be an implementation detail that they should never - * know. Might better be hidden. - */ - RUBY_FL_PROMOTED = RUBY_FL_PROMOTED0 | RUBY_FL_PROMOTED1, - - /** - * This flag has something to do with finalisers. A ruby object can have - * its finaliser, which is another object that evaluates when the target - * object is about to die. This flag is used to denote that there is an - * attached finaliser. - * - * @internal - * - * But honestly, @shyouhei doesn't think this flag should be visible from - * 3rd parties. It must be an implementation detail that they should never - * know. Might better be hidden. - */ - RUBY_FL_FINALIZE = (1<<7), - - /** - * @deprecated This flag once was a thing back in the old days, but makes - * no sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - */ - RUBY_FL_TAINT - -#if defined(RBIMPL_HAVE_ENUM_ATTRIBUTE) - RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea.")) -#elif defined(_MSC_VER) -# pragma deprecated(RUBY_FL_TAINT) -#endif - - = (1<<8), - - /** - * This flag has something to do with Ractor. Multiple Ractors run without - * protecting each other. Sharing an object among Ractors are basically - * dangerous, disabled by default. This flag is used to bypass that - * restriction. Of course, you have to manually prevent race conditions - * then. - * - * This flag needs deep understanding of multithreaded programming. You - * would better not use it. - */ - RUBY_FL_SHAREABLE = (1<<8), - - /** - * @deprecated This flag once was a thing back in the old days, but makes - * no sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - */ - RUBY_FL_UNTRUSTED - -#if defined(RBIMPL_HAVE_ENUM_ATTRIBUTE) - RBIMPL_ATTR_DEPRECATED(("trustedness turned out to be a wrong idea.")) -#elif defined(_MSC_VER) -# pragma deprecated(RUBY_FL_UNTRUSTED) -#endif - - = (1<<8), - - /** - * This flag has something to do with object IDs. Unlike in the old days, - * an object's object ID (that a user can query using `Object#object_id`) - * is no longer its physical address represented using Ruby level integers. - * It is now a monotonic-increasing integer unrelated to the underlying - * memory arrangement. Object IDs are assigned when necessary; objects are - * born without one, and will eventually have such property when queried. - * The interpreter has to manage which one is which. This is the flag that - * helps the management. Objects with this flag set are the ones with - * object IDs assigned. - * - * @internal - * - * But honestly, @shyouhei doesn't think this flag should be visible from - * 3rd parties. It must be an implementation detail that they should never - * know. Might better be hidden. - */ - RUBY_FL_SEEN_OBJ_ID = (1<<9), - - /** - * This flag has something to do with instance variables. 3rd parties need - * not know, but there are several ways to store an object's instance - * variables. Objects with this flag use so-called "generic" backend - * storage. This distinction is purely an implementation detail. People - * need not be aware of this working behind-the-scene. - * - * @internal - * - * As of writing everything except ::RObject and RModule use this scheme. - */ - RUBY_FL_EXIVAR = (1<<10), - - /** - * This flag has something to do with data immutability. When this flag is - * set an object is considered "frozen". No modification are expected to - * happen beyond that point for the particular object. Immutability is - * basically considered to be a good property these days. Library authors - * are expected to obey. Test this bit before you touch a data structure. - * - * @see rb_check_frozen() - */ - RUBY_FL_FREEZE = (1<<11), - -/** (@shyouhei doesn't know how to excude this macro from doxygen). */ -#define RBIMPL_FL_USER_N(n) RUBY_FL_USER##n = (1<<(RUBY_FL_USHIFT+n)) - RBIMPL_FL_USER_N(0), /**< User-defined flag. */ - RBIMPL_FL_USER_N(1), /**< User-defined flag. */ - RBIMPL_FL_USER_N(2), /**< User-defined flag. */ - RBIMPL_FL_USER_N(3), /**< User-defined flag. */ - RBIMPL_FL_USER_N(4), /**< User-defined flag. */ - RBIMPL_FL_USER_N(5), /**< User-defined flag. */ - RBIMPL_FL_USER_N(6), /**< User-defined flag. */ - RBIMPL_FL_USER_N(7), /**< User-defined flag. */ - RBIMPL_FL_USER_N(8), /**< User-defined flag. */ - RBIMPL_FL_USER_N(9), /**< User-defined flag. */ - RBIMPL_FL_USER_N(10), /**< User-defined flag. */ - RBIMPL_FL_USER_N(11), /**< User-defined flag. */ - RBIMPL_FL_USER_N(12), /**< User-defined flag. */ - RBIMPL_FL_USER_N(13), /**< User-defined flag. */ - RBIMPL_FL_USER_N(14), /**< User-defined flag. */ - RBIMPL_FL_USER_N(15), /**< User-defined flag. */ - RBIMPL_FL_USER_N(16), /**< User-defined flag. */ - RBIMPL_FL_USER_N(17), /**< User-defined flag. */ - RBIMPL_FL_USER_N(18), /**< User-defined flag. */ -#ifdef ENUM_OVER_INT - RBIMPL_FL_USER_N(19), /**< User-defined flag. */ -#else -# define RUBY_FL_USER19 (RBIMPL_VALUE_ONE<<(RUBY_FL_USHIFT+19)) -#endif -#undef RBIMPL_FL_USER_N -#undef RBIMPL_WIDER_ENUM - - /** - * This flag has something to do with data structures. Over time, ruby - * evolved to reduce memory footprints. One of such attempt is so-called - * copy-on-write, which delays duplication of resources until ultimately - * necessary. Some data structures share this scheme. For example - * multiple instances of struct ::RArray could point identical memory - * region in common, as long as they don't differ. As people favour - * immutable style of programming than before, this situation is getting - * more and more common. Because such "shared" memory regions have nuanced - * ownership by nature, each structures need special care for them. This - * flag is used to distinguish such shared constructs. - * - * @internal - * - * But honestly, @shyouhei doesn't think this flag should be visible from - * 3rd parties. It must be an implementation detail that they should never - * know. Might better be hidden. - */ - RUBY_ELTS_SHARED = RUBY_FL_USER2, - - /** - * This flag has something to do with an object's class. There are kind of - * classes called "singleton class", each of which have exactly one - * instance. What is interesting about singleton classes is that they are - * created _after_ their instance were instantiated, like this: - * - * ```ruby - * foo = Object.new # foo is an instance of Object... - * bar = foo.singleton_class # foo is now an instance of bar. - * ``` - * - * Here as you see `bar` is a singleton class of `foo`, which is injected - * into `foo`'s inheritance tree in a different statement (== distinct - * sequence point). In order to achieve this property singleton classes - * are special-cased in the interpreter. There is one bit flag that - * distinguishes if a class is a singleton class or not, and this is it. - * - * @internal - * - * But honestly, @shyouhei doesn't think this flag should be visible from - * 3rd parties. It must be an implementation detail that they should never - * know. Might better be hidden. - */ - RUBY_FL_SINGLETON = RUBY_FL_USER0, -}; - -enum { - /** - * @deprecated This flag once was a thing back in the old days, but makes - * no sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - */ - RUBY_FL_DUPPED - -#if defined(RBIMPL_HAVE_ENUM_ATTRIBUTE) - RBIMPL_ATTR_DEPRECATED(("It seems there is no actual usage of this enum.")) -#elif defined(_MSC_VER) -# pragma deprecated(RUBY_FL_DUPPED) -#endif - - = (int)RUBY_T_MASK | (int)RUBY_FL_EXIVAR -}; - -#undef RBIMPL_HAVE_ENUM_ATTRIBUTE - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * This is an implementation detail of #RB_OBJ_FREEZE(). People don't use it - * directly. - * - * @param[out] klass A singleton class. - * @post `klass` gets frozen. - */ -void rb_freeze_singleton_class(VALUE klass); -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_FORCEINLINE() -/** - * Checks if the object is flaggable. There are some special cases (most - * notably ::RUBY_Qfalse) where appending a flag to an object is not possible. - * This function can detect that. - * - * @param[in] obj Object in question - * @retval true It is flaggable. - * @retval false No it isn't. - */ -static bool -RB_FL_ABLE(VALUE obj) -{ - if (RB_SPECIAL_CONST_P(obj)) { - return false; - } - else if (RB_TYPE_P(obj, RUBY_T_NODE)) { - return false; - } - else { - return true; - } -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * This is an implenentation detail of RB_FL_TEST(). 3rd parties need not use - * this. Just always use RB_FL_TEST(). - * - * @param[in] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @pre The object must not be an enum ::ruby_special_consts. - * @return `obj`'s flags, masked by `flags`. - */ -static inline VALUE -RB_FL_TEST_RAW(VALUE obj, VALUE flags) -{ - RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj)); - return RBASIC(obj)->flags & flags; -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Tests if the given flag(s) are set or not. You can pass multiple flags at - * once: - * - * ```CXX - * auto obj = rb_eval_string("..."); - * if (RB_FL_TEST(obj, RUBY_FL_FREEZE | RUBY_FL_SHAREABLE)) { - * printf("Ractor ready!\n"); - * } - * ``` - * - * @param[in] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @return `obj`'s flags, masked by `flags`. - * @note It is intentional for this function to return ::VALUE. The - * return value could be passed to RB_FL_STE() etc. - */ -static inline VALUE -RB_FL_TEST(VALUE obj, VALUE flags) -{ - if (RB_FL_ABLE(obj)) { - return RB_FL_TEST_RAW(obj, flags); - } - else { - return RBIMPL_VALUE_NULL; - } -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * This is an implenentation detail of RB_FL_ANY(). 3rd parties need not use - * this. Just always use RB_FL_ANY(). - * - * @param[in] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @retval true The object has any of the flags set. - * @retval false No it doesn't at all. - * @pre The object must not be an enum ::ruby_special_consts. - */ -static inline bool -RB_FL_ANY_RAW(VALUE obj, VALUE flags) -{ - return RB_FL_TEST_RAW(obj, flags); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Identical to RB_FL_TEST(), except it returns bool. - * - * @param[in] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @retval true The object has any of the flags set. - * @retval false No it doesn't at all. - */ -static inline bool -RB_FL_ANY(VALUE obj, VALUE flags) -{ - return RB_FL_TEST(obj, flags); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * This is an implenentation detail of RB_FL_ALL(). 3rd parties need not use - * this. Just always use RB_FL_ALL(). - * - * @param[in] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @retval true The object has all of the flags set. - * @retval false The object lacks any of the flags. - * @pre The object must not be an enum ::ruby_special_consts. - */ -static inline bool -RB_FL_ALL_RAW(VALUE obj, VALUE flags) -{ - return RB_FL_TEST_RAW(obj, flags) == flags; -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Identical to RB_FL_ANY(), except it mandates all passed flags be set. - * - * @param[in] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @retval true The object has all of the flags set. - * @retval false The object lacks any of the flags. - */ -static inline bool -RB_FL_ALL(VALUE obj, VALUE flags) -{ - return RB_FL_TEST(obj, flags) == flags; -} - -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_ARTIFICIAL() -/** - * @private - * - * This is an implenentation detail of RB_FL_SET(). 3rd parties need not use - * this. Just always use RB_FL_SET(). - * - * @param[out] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @post `obj` has `flags` set. - * - * @internal - * - * This is function is here to annotate a part of RB_FL_SET_RAW() as - * `__declspec(noalias)`. - */ -static inline void -rbimpl_fl_set_raw_raw(struct RBasic *obj, VALUE flags) -{ - obj->flags |= flags; -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * This is an implenentation detail of RB_FL_SET(). 3rd parties need not use - * this. Just always use RB_FL_SET(). - * - * @param[out] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @post `obj` has `flags` set. - */ -static inline void -RB_FL_SET_RAW(VALUE obj, VALUE flags) -{ - RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj)); - rbimpl_fl_set_raw_raw(RBASIC(obj), flags); -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * Sets the given flag(s). - * - * ```CXX - * auto v = rb_eval_string("..."); - * RB_FL_SET(v, RUBY_FL_FREEZE); - * ``` - * - * @param[out] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @post `obj` has `flags` set. - */ -static inline void -RB_FL_SET(VALUE obj, VALUE flags) -{ - if (RB_FL_ABLE(obj)) { - RB_FL_SET_RAW(obj, flags); - } -} - -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_ARTIFICIAL() -/** - * @private - * - * This is an implenentation detail of RB_FL_UNSET(). 3rd parties need not use - * this. Just always use RB_FL_UNSET(). - * - * @param[out] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @post `obj` has `flags` cleared. - * - * @internal - * - * This is function is here to annotate a part of RB_FL_UNSET_RAW() as - * `__declspec(noalias)`. - */ -static inline void -rbimpl_fl_unset_raw_raw(struct RBasic *obj, VALUE flags) -{ - obj->flags &= ~flags; -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * This is an implenentation detail of RB_FL_UNSET(). 3rd parties need not use - * this. Just always use RB_FL_UNSET(). - * - * @param[out] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @post `obj` has `flags` cleared. - */ -static inline void -RB_FL_UNSET_RAW(VALUE obj, VALUE flags) -{ - RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj)); - rbimpl_fl_unset_raw_raw(RBASIC(obj), flags); -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * Clears the given flag(s). - * - * @param[out] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @post `obj` has `flags` cleard. - */ -static inline void -RB_FL_UNSET(VALUE obj, VALUE flags) -{ - if (RB_FL_ABLE(obj)) { - RB_FL_UNSET_RAW(obj, flags); - } -} - -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_ARTIFICIAL() -/** - * @private - * - * This is an implenentation detail of RB_FL_REVERSE(). 3rd parties need not - * use this. Just always use RB_FL_REVERSE(). - * - * @param[out] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @post `obj` has `flags` reversed. - * - * @internal - * - * This is function is here to annotate a part of RB_FL_REVERSE_RAW() as - * `__declspec(noalias)`. - */ -static inline void -rbimpl_fl_reverse_raw_raw(struct RBasic *obj, VALUE flags) -{ - obj->flags ^= flags; -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * This is an implenentation detail of RB_FL_REVERSE(). 3rd parties need not - * use this. Just always use RB_FL_REVERSE(). - * - * @param[out] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @post `obj` has `flags` cleared. - */ -static inline void -RB_FL_REVERSE_RAW(VALUE obj, VALUE flags) -{ - RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj)); - rbimpl_fl_reverse_raw_raw(RBASIC(obj), flags); -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * Reverses the flags. This function is here mainly for symmetry on set/unset. - * Rarely used in practice. - * - * @param[out] obj Object in question. - * @param[in] flags A set of enum ::ruby_fl_type. - * @post `obj` has `flags` reversed. - */ -static inline void -RB_FL_REVERSE(VALUE obj, VALUE flags) -{ - if (RB_FL_ABLE(obj)) { - RB_FL_REVERSE_RAW(obj, flags); - } -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea.")) -/** - * @deprecated This function once was a thing in the old days, but makes no - * sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - * - * @param[in] obj Object in question. - * @return false always. - */ -static inline bool -RB_OBJ_TAINTABLE(VALUE obj) -{ - return false; -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea.")) -/** - * @deprecated This function once was a thing in the old days, but makes no - * sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - * - * @param[in] obj Object in question. - * @return false always. - */ -static inline VALUE -RB_OBJ_TAINTED_RAW(VALUE obj) -{ - return false; -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea.")) -/** - * @deprecated This function once was a thing in the old days, but makes no - * sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - * - * @param[in] obj Object in question. - * @return false always. - */ -static inline bool -RB_OBJ_TAINTED(VALUE obj) -{ - return false; -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea.")) -/** - * @deprecated This function once was a thing in the old days, but makes no - * sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - * - * @param[in] obj Object in question. - */ -static inline void -RB_OBJ_TAINT_RAW(VALUE obj) -{ - return; -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea.")) -/** - * @deprecated This function once was a thing in the old days, but makes no - * sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - * - * @param[in] obj Object in question. - */ -static inline void -RB_OBJ_TAINT(VALUE obj) -{ - return; -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea.")) -/** - * @deprecated This function once was a thing in the old days, but makes no - * sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - * - * @param[in] dst Victim object. - * @param[in] src Infectant object. - */ -static inline void -RB_OBJ_INFECT_RAW(VALUE dst, VALUE src) -{ - return; -} - -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea.")) -/** - * @deprecated This function once was a thing in the old days, but makes no - * sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - * - * @param[in] dst Victim object. - * @param[in] src Infectant object. - */ -static inline void -RB_OBJ_INFECT(VALUE dst, VALUE src) -{ - return; -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * This is an implenentation detail of RB_OBJ_FROZEN(). 3rd parties need not - * use this. Just always use RB_OBJ_FROZEN(). - * - * @param[in] obj Object in question. - * @retval RUBY_FL_FREEZE Yes it is. - * @retval 0 No it isn't. - * - * @internal - * - * It is intentional not to return bool here. There is a place in ruby core - * (namely `class.c:singleton_class_of()`) where return value of this function - * is passed to RB_FL_SET_RAW(). - */ -static inline VALUE -RB_OBJ_FROZEN_RAW(VALUE obj) -{ - return RB_FL_TEST_RAW(obj, RUBY_FL_FREEZE); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Checks if an object is frozen. - * - * @param[in] obj Object in question. - * @retval true Yes it is. - * @retval false No it isn't. - */ -static inline bool -RB_OBJ_FROZEN(VALUE obj) -{ - if (! RB_FL_ABLE(obj)) { - return true; - } - else { - return RB_OBJ_FROZEN_RAW(obj); - } -} - -RBIMPL_ATTR_ARTIFICIAL() -/** - * This is an implenentation detail of RB_OBJ_FREEZE(). 3rd parties need not - * use this. Just always use RB_OBJ_FREEZE(). - * - * @param[out] obj Object in question. - */ -static inline void -RB_OBJ_FREEZE_RAW(VALUE obj) -{ - RB_FL_SET_RAW(obj, RUBY_FL_FREEZE); -} - -RUBY_SYMBOL_EXPORT_BEGIN -void rb_obj_freeze_inline(VALUE obj); -RUBY_SYMBOL_EXPORT_END - -#endif /* RBIMPL_FL_TYPE_H */ diff --git a/libs/libruby/ruby/internal/gc.h b/libs/libruby/ruby/internal/gc.h deleted file mode 100644 index 66fc14e..0000000 --- a/libs/libruby/ruby/internal/gc.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef RBIMPL_GC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_GC_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Registering values to the GC. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Inform the garbage collector that `valptr` points to a live Ruby object that - * should not be moved. Note that extensions should use this API on global - * constants instead of assuming constants defined in Ruby are always alive. - * Ruby code can remove global constants. - */ -void rb_gc_register_address(VALUE *valptr); - -/** - * An alias for `rb_gc_register_address()`. - */ -void rb_global_variable(VALUE *); - -/** - * Inform the garbage collector that a pointer previously passed to - * `rb_gc_register_address()` no longer points to a live Ruby object. - */ -void rb_gc_unregister_address(VALUE *valptr); - -/** - * Inform the garbage collector that `object` is a live Ruby object that should - * not be moved. - * - * See also: rb_gc_register_address() - */ -void rb_gc_register_mark_object(VALUE object); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_GC_H */ diff --git a/libs/libruby/ruby/internal/glob.h b/libs/libruby/ruby/internal/glob.h deleted file mode 100644 index adbccbd..0000000 --- a/libs/libruby/ruby/internal/glob.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef RBIMPL_GLOB_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_GLOB_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Declares ::rb_glob(). - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Type of a glob callback function. Called every time glob scans a path. - * - * @param[in] path The path in question. - * @param[in] arg The argument passed to rb_glob(). - * @param[in] enc Encoding of the path. - * @retval -1 Not enough memory to do the operation. - * @retval 0 Operation successful. - * @retval otherwise Opaque exception state. - * @note You can use rb_protect() to generate the return value. - * - * @internal - * - * This is a wrong design. Type of `enc` should have been `rb_encoding*` - * instead of just `void*`. But we cannot change the API any longer. - * - * Though not a part of our public API, the "opaque exception state" is in fact - * an enum ruby_tag_type. You can see the potential "otherwise" values by - * looking at vm_core.h. - */ -typedef int ruby_glob_func(const char *path, VALUE arg, void *enc); - -RBIMPL_ATTR_NONNULL(()) -/** - * The "glob" operator. Expands the given pattern against the actual local - * filesystem, then iterates over the expanded filenames by calling the - * callback function. - * - * @param[in] pattern A glob pattern. - * @param[in] func Identical to ruby_glob_func, except it can raise - * exceptions instead of returning opaque state. - * @param[in] arg Extra argument passed to func. - * @exception rb_eException Can propagate what `func` raises. - * @note The language accepted as the pattern is not a regular - * expression. It resembles shell's glob. - */ -void rb_glob(const char *pattern, void (*func)(const char *path, VALUE arg, void *enc), VALUE arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_glob(), except it returns opaque exception states instead of - * raising exceptions. - * - * @param[in] pattern A glob pattern. - * @param[in] flags No, you are not allowed to use this. Just pass 0. - * @param[in] func A callback function. - * @param[in] arg Extra argument passed to func. - * @return Return value of `func`. - * - * @internal - * - * This function is completely broken by design... Not only is there no sane - * way to pass flags, but there also is no sane way to know what a return value - * is meant to be. - * - * Though not a part of our public API, and @shyouhei thinks it's a failure not - * to be a public API, the flags can be `FNM_EXTGLOB`, `FNM_DOTMATCH` etc. - * Look at dir.c for the list. - * - * Though not a part of our public API, the return value is in fact an - * enum ruby_tag_type. You can see the potential values by looking at - * vm_core.h. - */ -int ruby_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to ruby_glob(), @shyouhei currently suspects. Historically you - * had to call this function instead of ruby_glob() if the pattern included - * "{x,y,...}" syntax. However since commit 0f63d961169989a7f6dcf7c0487fe29da, - * ruby_glob() also supports that syntax. It seems as of writing these two - * functions provide basically the same functionality in a different - * implementation. Is this analysis right? Correct me! :FIXME: - * - * @param[in] pattern A glob pattern. - * @param[in] flags No, you are not allowed to use this. Just pass 0. - * @param[in] func A callback function. - * @param[in] arg Extra argument passed to func. - * @return Return value of `func`. - */ -int ruby_brace_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_GLOB_H */ diff --git a/libs/libruby/ruby/internal/globals.h b/libs/libruby/ruby/internal/globals.h deleted file mode 100644 index 5a414fc..0000000 --- a/libs/libruby/ruby/internal/globals.h +++ /dev/null @@ -1,209 +0,0 @@ -#ifndef RBIMPL_GLOBALS_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_GLOBALS_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Ruby-level global variables / constants, visible from C. - */ -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/fl_type.h" -#include "ruby/internal/special_consts.h" -#include "ruby/internal/value.h" -#include "ruby/internal/value_type.h" - -/** - * @defgroup object Core objects and their operations - * - * @internal - * - * There are several questionable constants listed in this header file. They - * are intentionally left untouched for purely academic backwards compatibility - * concerns. But for instance do any one of 3rd party extension libraries even - * need to know that there is NameError::Message? - * - * @endinternal - * - * @{ - */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define RUBY_INTEGER_UNIFICATION 1 - -RUBY_EXTERN VALUE rb_mKernel; /**< `Kernel` module. */ -RUBY_EXTERN VALUE rb_mComparable; /**< `Comparable` module. */ -RUBY_EXTERN VALUE rb_mEnumerable; /**< `Enumerable` module. */ -RUBY_EXTERN VALUE rb_mErrno; /**< `Errno` module. */ -RUBY_EXTERN VALUE rb_mFileTest; /**< `FileTest` module. */ -RUBY_EXTERN VALUE rb_mGC; /**< `GC` module. */ -RUBY_EXTERN VALUE rb_mMath; /**< `Math` module. */ -RUBY_EXTERN VALUE rb_mProcess; /**< `Process` module. */ -RUBY_EXTERN VALUE rb_mWaitReadable; /**< `IO::WaitReadable` module. */ -RUBY_EXTERN VALUE rb_mWaitWritable; /**< `IO::WaitReadable` module. */ - -RUBY_EXTERN VALUE rb_cBasicObject; /**< `BasicObject` class. */ -RUBY_EXTERN VALUE rb_cObject; /**< `Object` class. */ -RUBY_EXTERN VALUE rb_cArray; /**< `Array` class. */ -RUBY_EXTERN VALUE rb_cBinding; /**< `Binding` class. */ -RUBY_EXTERN VALUE rb_cClass; /**< `Class` class. */ -RUBY_EXTERN VALUE rb_cDir; /**< `Dir` class. */ -RUBY_EXTERN VALUE rb_cEncoding; /**< `Encoding` class. */ -RUBY_EXTERN VALUE rb_cEnumerator; /**< `Enumerator` class. */ -RUBY_EXTERN VALUE rb_cFalseClass; /**< `FalseClass` class. */ -RUBY_EXTERN VALUE rb_cFile; /**< `File` class. */ -RUBY_EXTERN VALUE rb_cComplex; /**< `Complex` class. */ -RUBY_EXTERN VALUE rb_cFloat; /**< `Float` class. */ -RUBY_EXTERN VALUE rb_cHash; /**< `Hash` class. */ -RUBY_EXTERN VALUE rb_cIO; /**< `IO` class. */ -RUBY_EXTERN VALUE rb_cInteger; /**< `Module` class. */ -RUBY_EXTERN VALUE rb_cMatch; /**< `MatchData` class. */ -RUBY_EXTERN VALUE rb_cMethod; /**< `Method` class. */ -RUBY_EXTERN VALUE rb_cModule; /**< `Module` class. */ -RUBY_EXTERN VALUE rb_cRefinement; /**< `Refinement` class. */ -RUBY_EXTERN VALUE rb_cNameErrorMesg; /**< `NameError::Message` class. */ -RUBY_EXTERN VALUE rb_cNilClass; /**< `NilClass` class. */ -RUBY_EXTERN VALUE rb_cNumeric; /**< `Numeric` class. */ -RUBY_EXTERN VALUE rb_cProc; /**< `Proc` class. */ -RUBY_EXTERN VALUE rb_cRandom; /**< `Random` class. */ -RUBY_EXTERN VALUE rb_cRange; /**< `Range` class. */ -RUBY_EXTERN VALUE rb_cRational; /**< `Rational` class. */ -RUBY_EXTERN VALUE rb_cRegexp; /**< `Regexp` class. */ -RUBY_EXTERN VALUE rb_cStat; /**< `File::Stat` class. */ -RUBY_EXTERN VALUE rb_cString; /**< `String` class. */ -RUBY_EXTERN VALUE rb_cStruct; /**< `Struct` class. */ -RUBY_EXTERN VALUE rb_cSymbol; /**< `Sumbol` class. */ -RUBY_EXTERN VALUE rb_cThread; /**< `Thread` class. */ -RUBY_EXTERN VALUE rb_cTime; /**< `Time` class. */ -RUBY_EXTERN VALUE rb_cTrueClass; /**< `TrueClass` class. */ -RUBY_EXTERN VALUE rb_cUnboundMethod; /**< `UnboundMethod` class. */ - -/** - * @} - * @addtogroup exception - * @{ - */ - -RUBY_EXTERN VALUE rb_eException; /**< Mother of all exceptions. */ -RUBY_EXTERN VALUE rb_eStandardError; /**< `StandardError` exception. */ -RUBY_EXTERN VALUE rb_eSystemExit; /**< `SystemExit` exception. */ -RUBY_EXTERN VALUE rb_eInterrupt; /**< `Interrupt` exception. */ -RUBY_EXTERN VALUE rb_eSignal; /**< `SignalException` exception. */ -RUBY_EXTERN VALUE rb_eFatal; /**< `fatal` exception. */ -RUBY_EXTERN VALUE rb_eArgError; /**< `ArgumentError` exception. */ -RUBY_EXTERN VALUE rb_eEOFError; /**< `EOFError` exception. */ -RUBY_EXTERN VALUE rb_eIndexError; /**< `IndexError` exception. */ -RUBY_EXTERN VALUE rb_eStopIteration; /**< `StopIteration` exception. */ -RUBY_EXTERN VALUE rb_eKeyError; /**< `KeyError` exception. */ -RUBY_EXTERN VALUE rb_eRangeError; /**< `RangeError` exception. */ -RUBY_EXTERN VALUE rb_eIOError; /**< `IOError` exception. */ -RUBY_EXTERN VALUE rb_eRuntimeError; /**< `RuntimeError` exception. */ -RUBY_EXTERN VALUE rb_eFrozenError; /**< `FrozenError` exception. */ -RUBY_EXTERN VALUE rb_eSecurityError; /**< `SecurityError` exception. */ -RUBY_EXTERN VALUE rb_eSystemCallError; /**< `SystemCallError` exception. */ -RUBY_EXTERN VALUE rb_eThreadError; /**< `ThreadError` exception. */ -RUBY_EXTERN VALUE rb_eTypeError; /**< `TypeError` exception. */ -RUBY_EXTERN VALUE rb_eZeroDivError; /**< `ZeroDivisionError` exception. */ -RUBY_EXTERN VALUE rb_eNotImpError; /**< `NotImplementedError` exception. */ -RUBY_EXTERN VALUE rb_eNoMemError; /**< `NoMemoryError` exception. */ -RUBY_EXTERN VALUE rb_eNoMethodError; /**< `NoMethodError` exception. */ -RUBY_EXTERN VALUE rb_eFloatDomainError; /**< `FloatDomainError` exception. */ -RUBY_EXTERN VALUE rb_eLocalJumpError; /**< `LocalJumpError` exception. */ -RUBY_EXTERN VALUE rb_eSysStackError; /**< `SystemStackError` exception. */ -RUBY_EXTERN VALUE rb_eRegexpError; /**< `RegexpError` exception. */ -RUBY_EXTERN VALUE rb_eEncodingError; /**< `EncodingError` exception. */ -RUBY_EXTERN VALUE rb_eEncCompatError; /**< `Encoding::CompatibilityError` exception. */ -RUBY_EXTERN VALUE rb_eNoMatchingPatternError; /**< `NoMatchingPatternError` exception. */ -RUBY_EXTERN VALUE rb_eNoMatchingPatternKeyError; /**< `NoMatchingPatternKeyError` exception. */ - -RUBY_EXTERN VALUE rb_eScriptError; /**< `ScriptError` exception. */ -RUBY_EXTERN VALUE rb_eNameError; /**< `NameError` exception. */ -RUBY_EXTERN VALUE rb_eSyntaxError; /**< `SyntaxError` exception. */ -RUBY_EXTERN VALUE rb_eLoadError; /**< `LoadError` exception. */ - -RUBY_EXTERN VALUE rb_eMathDomainError; /**< `Math::DomainError` exception. */ - -/** - * @} - * @addtogroup object - * @{ - */ - -RUBY_EXTERN VALUE rb_stdin; /**< `STDIN` constant. */ -RUBY_EXTERN VALUE rb_stdout; /**< `STDOUT` constant. */ -RUBY_EXTERN VALUE rb_stderr; /**< `STDERR` constant. */ - -RBIMPL_ATTR_PURE() -/** - * Object to class mapping function. Every object have its class. This - * function obtains that. - * - * @param[in] obj Target object to query. - * @return The class of the given object. - * - * @internal - * - * This function is a super-duper hot path. Optimised targeting modern C - * compilers and x86_64 architecture. - */ -static inline VALUE -rb_class_of(VALUE obj) -{ - if (! RB_SPECIAL_CONST_P(obj)) { - return RBASIC_CLASS(obj); - } - else if (obj == RUBY_Qfalse) { - return rb_cFalseClass; - } - else if (obj == RUBY_Qnil) { - return rb_cNilClass; - } - else if (obj == RUBY_Qtrue) { - return rb_cTrueClass; - } - else if (RB_FIXNUM_P(obj)) { - return rb_cInteger; - } - else if (RB_STATIC_SYM_P(obj)) { - return rb_cSymbol; - } - else if (RB_FLONUM_P(obj)) { - return rb_cFloat; - } - -#if !RUBY_DEBUG - RBIMPL_UNREACHABLE_RETURN(Qfalse); -#else - RUBY_ASSERT_FAIL("unexpected type"); -#endif -} - -#define CLASS_OF rb_class_of /**< @old{rb_class_of} */ - -RBIMPL_SYMBOL_EXPORT_END() - -/** @} */ - -#endif /* RBIMPL_GLOBALS_H */ diff --git a/libs/libruby/ruby/internal/has/attribute.h b/libs/libruby/ruby/internal/has/attribute.h deleted file mode 100644 index f068a65..0000000 --- a/libs/libruby/ruby/internal/has/attribute.h +++ /dev/null @@ -1,163 +0,0 @@ -#ifndef RBIMPL_HAS_ATTRIBUTE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_HAS_ATTRIBUTE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_HAS_ATTRIBUTE. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/compiler_since.h" - -#if defined(__has_attribute) -# if __has_attribute(pure) || RBIMPL_COMPILER_IS(GCC) -# /* FreeBSD's defines its own *broken* version of -# * __has_attribute. Cygwin copied that content to be a victim of the -# * broken-ness. We don't take them into account. */ -# define RBIMPL_HAVE___HAS_ATTRIBUTE 1 -# endif -#endif - -/** Wraps (or simulates) `__has_attribute`. */ -#if defined(RBIMPL_HAVE___HAS_ATTRIBUTE) -# define RBIMPL_HAS_ATTRIBUTE(_) __has_attribute(_) - -#elif RBIMPL_COMPILER_IS(GCC) -# /* GCC <= 4 lack __has_attribute predefined macro, while have attributes -# * themselves. We can simulate the macro like the following: */ -# define RBIMPL_HAS_ATTRIBUTE(_) (RBIMPL_HAS_ATTRIBUTE_ ## _) -# define RBIMPL_HAS_ATTRIBUTE_aligned RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0) -# define RBIMPL_HAS_ATTRIBUTE_alloc_size RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0) -# define RBIMPL_HAS_ATTRIBUTE_artificial RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0) -# define RBIMPL_HAS_ATTRIBUTE_always_inline RBIMPL_COMPILER_SINCE(GCC, 3, 1, 0) -# define RBIMPL_HAS_ATTRIBUTE_cdecl RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0) -# define RBIMPL_HAS_ATTRIBUTE_cold RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0) -# define RBIMPL_HAS_ATTRIBUTE_const RBIMPL_COMPILER_SINCE(GCC, 2, 6, 0) -# define RBIMPL_HAS_ATTRIBUTE_deprecated RBIMPL_COMPILER_SINCE(GCC, 3, 1, 0) -# define RBIMPL_HAS_ATTRIBUTE_dllexport RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0) -# define RBIMPL_HAS_ATTRIBUTE_dllimport RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0) -# define RBIMPL_HAS_ATTRIBUTE_error RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0) -# define RBIMPL_HAS_ATTRIBUTE_format RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0) -# define RBIMPL_HAS_ATTRIBUTE_hot RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0) -# define RBIMPL_HAS_ATTRIBUTE_leaf RBIMPL_COMPILER_SINCE(GCC, 4, 6, 0) -# define RBIMPL_HAS_ATTRIBUTE_malloc RBIMPL_COMPILER_SINCE(GCC, 3, 0, 0) -# define RBIMPL_HAS_ATTRIBUTE_no_address_safety_analysis RBIMPL_COMPILER_SINCE(GCC, 4, 8, 0) -# define RBIMPL_HAS_ATTRIBUTE_no_sanitize_address RBIMPL_COMPILER_SINCE(GCC, 4, 8, 0) -# define RBIMPL_HAS_ATTRIBUTE_no_sanitize_undefined RBIMPL_COMPILER_SINCE(GCC, 4, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_noinline RBIMPL_COMPILER_SINCE(GCC, 3, 1, 0) -# define RBIMPL_HAS_ATTRIBUTE_nonnull RBIMPL_COMPILER_SINCE(GCC, 3, 3, 0) -# define RBIMPL_HAS_ATTRIBUTE_noreturn RBIMPL_COMPILER_SINCE(GCC, 2, 5, 0) -# define RBIMPL_HAS_ATTRIBUTE_nothrow RBIMPL_COMPILER_SINCE(GCC, 3, 3, 0) -# define RBIMPL_HAS_ATTRIBUTE_pure RBIMPL_COMPILER_SINCE(GCC, 2,96, 0) -# define RBIMPL_HAS_ATTRIBUTE_returns_nonnull RBIMPL_COMPILER_SINCE(GCC, 4, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_returns_twice RBIMPL_COMPILER_SINCE(GCC, 4, 1, 0) -# define RBIMPL_HAS_ATTRIBUTE_stdcall RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0) -# define RBIMPL_HAS_ATTRIBUTE_unused RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0) -# define RBIMPL_HAS_ATTRIBUTE_visibility RBIMPL_COMPILER_SINCE(GCC, 3, 3, 0) -# define RBIMPL_HAS_ATTRIBUTE_warn_unused_result RBIMPL_COMPILER_SINCE(GCC, 3, 4, 0) -# define RBIMPL_HAS_ATTRIBUTE_warning RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0) -# define RBIMPL_HAS_ATTRIBUTE_weak RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0) -# /* Note that "0, 0, 0" might be inaccurate. */ - -#elif RBIMPL_COMPILER_IS(SunPro) -# /* Oracle Solaris Studio 12.4 (cc version 5.11) introduced __has_attribute. -# * Before that, following attributes were available. */ -# /* See https://docs.oracle.com/cd/F24633_01/index.html */ -# define RBIMPL_HAS_ATTRIBUTE(_) (RBIMPL_HAS_ATTRIBUTE_ ## _) -# define RBIMPL_HAS_ATTRIBUTE_alias RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_aligned RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_always_inline RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0) -# define RBIMPL_HAS_ATTRIBUTE_const RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_constructor RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_destructor RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_malloc RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_noinline RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_noreturn RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_packed RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_pure RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_returns_twice RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0) -# define RBIMPL_HAS_ATTRIBUTE_vector_size RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0) -# define RBIMPL_HAS_ATTRIBUTE_visibility RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) -# define RBIMPL_HAS_ATTRIBUTE_weak RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0) - -#elif defined (_MSC_VER) -# define RBIMPL_HAS_ATTRIBUTE(_) 0 -# /* Fallback below doesn't work: see win32/Makefile.sub */ - -#else -# /* Take config.h definition when available. */ -# define RBIMPL_HAS_ATTRIBUTE(_) ((RBIMPL_HAS_ATTRIBUTE_ ## _)+0) -# ifdef ALWAYS_INLINE -# define RBIMPL_HAS_ATTRIBUTE_always_inline 1 -# endif -# ifdef FUNC_CDECL -# define RBIMPL_HAS_ATTRIBUTE_cdecl 1 -# endif -# ifdef CONSTFUNC -# define RBIMPL_HAS_ATTRIBUTE_const 1 -# endif -# ifdef DEPRECATED -# define RBIMPL_HAS_ATTRIBUTE_deprecated 1 -# endif -# ifdef ERRORFUNC -# define RBIMPL_HAS_ATTRIBUTE_error 1 -# endif -# ifdef FUNC_FASTCALL -# define RBIMPL_HAS_ATTRIBUTE_fastcall 1 -# endif -# ifdef PUREFUNC -# define RBIMPL_HAS_ATTRIBUTE_pure 1 -# endif -# ifdef NO_ADDRESS_SAFETY_ANALYSIS -# define RBIMPL_HAS_ATTRIBUTE_no_address_safety_analysis 1 -# endif -# ifdef NO_SANITIZE -# define RBIMPL_HAS_ATTRIBUTE_no_sanitize 1 -# endif -# ifdef NO_SANITIZE_ADDRESS -# define RBIMPL_HAS_ATTRIBUTE_no_sanitize_address 1 -# endif -# ifdef NOINLINE -# define RBIMPL_HAS_ATTRIBUTE_noinline 1 -# endif -# ifdef RBIMPL_FUNC_NONNULL -# define RBIMPL_HAS_ATTRIBUTE_nonnull 1 -# endif -# ifdef NORETURN -# define RBIMPL_HAS_ATTRIBUTE_noreturn 1 -# endif -# ifdef FUNC_OPTIMIZED -# define RBIMPL_HAS_ATTRIBUTE_optimize 1 -# endif -# ifdef FUNC_STDCALL -# define RBIMPL_HAS_ATTRIBUTE_stdcall 1 -# endif -# ifdef MAYBE_UNUSED -# define RBIMPL_HAS_ATTRIBUTE_unused 1 -# endif -# ifdef WARN_UNUSED_RESULT -# define RBIMPL_HAS_ATTRIBUTE_warn_unused_result 1 -# endif -# ifdef WARNINGFUNC -# define RBIMPL_HAS_ATTRIBUTE_warning 1 -# endif -# ifdef WEAK -# define RBIMPL_HAS_ATTRIBUTE_weak 1 -# endif -#endif - -#endif /* RBIMPL_HAS_ATTRIBUTE_H */ diff --git a/libs/libruby/ruby/internal/has/builtin.h b/libs/libruby/ruby/internal/has/builtin.h deleted file mode 100644 index 243ba2a..0000000 --- a/libs/libruby/ruby/internal/has/builtin.h +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef RBIMPL_HAS_BUILTIN_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_HAS_BUILTIN_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_HAS_BUILTIN. - */ -#include "ruby/internal/config.h" -#include "ruby/internal/compiler_since.h" - -#if defined(__has_builtin) -# if RBIMPL_COMPILER_IS(Intel) -# /* :TODO: Intel C Compiler has __has_builtin (since 19.1 maybe?), and is -# * reportedly broken. We have to skip them. However the situation can -# * change. They might improve someday. We need to revisit here later. */ -# elif RBIMPL_COMPILER_IS(GCC) && ! __has_builtin(__builtin_alloca) -# /* FreeBSD's defines its own *broken* version of -# * __has_builtin. Cygwin copied that content to be a victim of the -# * broken-ness. We don't take them into account. */ -# else -# define RBIMPL_HAVE___HAS_BUILTIN 1 -# endif -#endif - -/** Wraps (or simulates) `__has_builtin`. */ -#if defined(RBIMPL_HAVE___HAS_BUILTIN) -# define RBIMPL_HAS_BUILTIN(_) __has_builtin(_) - -#elif RBIMPL_COMPILER_IS(GCC) -# /* :FIXME: Historically GCC has had tons of builtins, but it implemented -# * __has_builtin only since GCC 10. This section can be made more -# * granular. */ -# /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66970 */ -# define RBIMPL_HAS_BUILTIN(_) (RBIMPL_HAS_BUILTIN_ ## _) -# define RBIMPL_HAS_BUILTIN___builtin_add_overflow RBIMPL_COMPILER_SINCE(GCC, 5, 1, 0) -# define RBIMPL_HAS_BUILTIN___builtin_alloca RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0) -# define RBIMPL_HAS_BUILTIN___builtin_alloca_with_align RBIMPL_COMPILER_SINCE(GCC, 6, 1, 0) -# define RBIMPL_HAS_BUILTIN___builtin_assume 0 -# /* See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52624 for bswap16. */ -# define RBIMPL_HAS_BUILTIN___builtin_bswap16 RBIMPL_COMPILER_SINCE(GCC, 4, 8, 0) -#ifndef __OpenBSD__ -# define RBIMPL_HAS_BUILTIN___builtin_bswap32 RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -# define RBIMPL_HAS_BUILTIN___builtin_bswap64 RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -#endif -# define RBIMPL_HAS_BUILTIN___builtin_clz RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -# define RBIMPL_HAS_BUILTIN___builtin_clzl RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -# define RBIMPL_HAS_BUILTIN___builtin_clzll RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -# define RBIMPL_HAS_BUILTIN___builtin_constant_p RBIMPL_COMPILER_SINCE(GCC, 2,95, 3) -# define RBIMPL_HAS_BUILTIN___builtin_ctz RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -# define RBIMPL_HAS_BUILTIN___builtin_ctzl RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -# define RBIMPL_HAS_BUILTIN___builtin_ctzll RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -# define RBIMPL_HAS_BUILTIN___builtin_expect RBIMPL_COMPILER_SINCE(GCC, 3, 0, 0) -# define RBIMPL_HAS_BUILTIN___builtin_mul_overflow RBIMPL_COMPILER_SINCE(GCC, 5, 1, 0) -# define RBIMPL_HAS_BUILTIN___builtin_mul_overflow_p RBIMPL_COMPILER_SINCE(GCC, 7, 0, 0) -# define RBIMPL_HAS_BUILTIN___builtin_popcount RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -# define RBIMPL_HAS_BUILTIN___builtin_popcountl RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -# define RBIMPL_HAS_BUILTIN___builtin_popcountll RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0) -# define RBIMPL_HAS_BUILTIN___builtin_rotateleft32 0 -# define RBIMPL_HAS_BUILTIN___builtin_rotateleft64 0 -# define RBIMPL_HAS_BUILTIN___builtin_rotateright32 0 -# define RBIMPL_HAS_BUILTIN___builtin_rotateright64 0 -# define RBIMPL_HAS_BUILTIN___builtin_sub_overflow RBIMPL_COMPILER_SINCE(GCC, 5, 1, 0) -# define RBIMPL_HAS_BUILTIN___builtin_unreachable RBIMPL_COMPILER_SINCE(GCC, 4, 5, 0) -# /* Note that "0, 0, 0" might be inaccurate. */ - -#else -# /* Take config.h definition when available */ -# define RBIMPL_HAS_BUILTIN(_) ((RBIMPL_HAS_BUILTIN_ ## _)+0) -# define RBIMPL_HAS_BUILTIN___builtin_add_overflow HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW -# define RBIMPL_HAS_BUILTIN___builtin_alloca 0 -# define RBIMPL_HAS_BUILTIN___builtin_alloca_with_align HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN -# define RBIMPL_HAS_BUILTIN___builtin_assume 0 -# define RBIMPL_HAS_BUILTIN___builtin_assume_aligned HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED -# define RBIMPL_HAS_BUILTIN___builtin_bswap16 HAVE_BUILTIN___BUILTIN_BSWAP16 -# define RBIMPL_HAS_BUILTIN___builtin_bswap32 HAVE_BUILTIN___BUILTIN_BSWAP32 -# define RBIMPL_HAS_BUILTIN___builtin_bswap64 HAVE_BUILTIN___BUILTIN_BSWAP64 -# define RBIMPL_HAS_BUILTIN___builtin_clz HAVE_BUILTIN___BUILTIN_CLZ -# define RBIMPL_HAS_BUILTIN___builtin_clzl HAVE_BUILTIN___BUILTIN_CLZL -# define RBIMPL_HAS_BUILTIN___builtin_clzll HAVE_BUILTIN___BUILTIN_CLZLL -# define RBIMPL_HAS_BUILTIN___builtin_constant_p HAVE_BUILTIN___BUILTIN_CONSTANT_P -# define RBIMPL_HAS_BUILTIN___builtin_ctz HAVE_BUILTIN___BUILTIN_CTZ -# define RBIMPL_HAS_BUILTIN___builtin_ctzl 0 -# define RBIMPL_HAS_BUILTIN___builtin_ctzll HAVE_BUILTIN___BUILTIN_CTZLL -# define RBIMPL_HAS_BUILTIN___builtin_expect HAVE_BUILTIN___BUILTIN_EXPECT -# define RBIMPL_HAS_BUILTIN___builtin_mul_overflow HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW -# define RBIMPL_HAS_BUILTIN___builtin_mul_overflow_p HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW_P -# define RBIMPL_HAS_BUILTIN___builtin_popcount HAVE_BUILTIN___BUILTIN_POPCOUNT -# define RBIMPL_HAS_BUILTIN___builtin_popcountl 0 -# define RBIMPL_HAS_BUILTIN___builtin_rotateleft32 0 -# define RBIMPL_HAS_BUILTIN___builtin_rotateleft64 0 -# define RBIMPL_HAS_BUILTIN___builtin_rotateright32 0 -# define RBIMPL_HAS_BUILTIN___builtin_rotateright64 0 -# define RBIMPL_HAS_BUILTIN___builtin_popcountll HAVE_BUILTIN___BUILTIN_POPCOUNTLL -# define RBIMPL_HAS_BUILTIN___builtin_sub_overflow HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW -# if defined(HAVE___BUILTIN_UNREACHABLE) -# define RBIMPL_HAS_BUILTIN___builtin_unreachable 1 -# else -# define RBIMPL_HAS_BUILTIN___builtin_unreachable 0 -# endif -#endif - -#endif /* RBIMPL_HAS_BUILTIN_H */ diff --git a/libs/libruby/ruby/internal/has/c_attribute.h b/libs/libruby/ruby/internal/has/c_attribute.h deleted file mode 100644 index c5c4886..0000000 --- a/libs/libruby/ruby/internal/has/c_attribute.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef RBIMPL_HAS_C_ATTRIBUTE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_HAS_C_ATTRIBUTE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_HAS_C_ATTRIBUTE. - */ - -/** Wraps (or simulates) `__has_c_attribute`. */ -#if defined(__cplusplus) -# /* Makes no sense. */ -# define RBIMPL_HAS_C_ATTRIBUTE(_) 0 - -#elif defined(__has_c_attribute) -# define RBIMPL_HAS_C_ATTRIBUTE(_) __has_c_attribute(_) - -#else -# /* As of writing everything that lacks __has_c_attribute also completely -# * lacks C2x attributes as well. Might change in future? */ -# define RBIMPL_HAS_C_ATTRIBUTE(_) 0 -#endif - -#endif /* RBIMPL_HAS_C_ATTRIBUTE_H */ diff --git a/libs/libruby/ruby/internal/has/cpp_attribute.h b/libs/libruby/ruby/internal/has/cpp_attribute.h deleted file mode 100644 index 6a393b1..0000000 --- a/libs/libruby/ruby/internal/has/cpp_attribute.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef RBIMPL_HAS_CPP_ATTRIBUTE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_HAS_CPP_ATTRIBUTE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_HAS_CPP_ATTRIBUTE. - */ -#include "ruby/internal/compiler_is.h" -#include "ruby/internal/compiler_since.h" - -/** @cond INTERNAL_MACRO */ -#if RBIMPL_COMPILER_IS(SunPro) -# /* Oracle Developer Studio 12.5's C++ preprocessor is reportedly broken. We -# * could simulate __has_cpp_attribute like below, but don't know the exact -# * list of which version supported which attribute. Just kill everything for -# * now. If you can please :FIXME: */ -# /* https://unicode-org.atlassian.net/browse/ICU-12893 */ -# /* https://github.com/boostorg/config/pull/95 */ -# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) 0 - -#elif defined(__has_cpp_attribute) -# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) __has_cpp_attribute(_) - -#elif RBIMPL_COMPILER_IS(MSVC) -# /* MSVC has never updated its __cplusplus since forever (unless specified -# * explicitly by a compiler flag). They also lack __has_cpp_attribute until -# * 2019. However, they do have attributes since 2015 or so. */ -# /* https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance */ -# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) (RBIMPL_HAS_CPP_ATTRIBUTE_ ## _) -# define RBIMPL_HAS_CPP_ATTRIBUTE_noreturn 200809 * RBIMPL_COMPILER_SINCE(MSVC, 19, 00, 0) -# define RBIMPL_HAS_CPP_ATTRIBUTE_carries_dependency 200809 * RBIMPL_COMPILER_SINCE(MSVC, 19, 00, 0) -# define RBIMPL_HAS_CPP_ATTRIBUTE_deprecated 201309 * RBIMPL_COMPILER_SINCE(MSVC, 19, 10, 0) -# define RBIMPL_HAS_CPP_ATTRIBUTE_fallthrough 201603 * RBIMPL_COMPILER_SINCE(MSVC, 19, 10, 0) -# define RBIMPL_HAS_CPP_ATTRIBUTE_maybe_unused 201603 * RBIMPL_COMPILER_SINCE(MSVC, 19, 11, 0) -# define RBIMPL_HAS_CPP_ATTRIBUTE_nodiscard 201603 * RBIMPL_COMPILER_SINCE(MSVC, 19, 11, 0) - -#elif RBIMPL_COMPILER_BEFORE(Clang, 3, 6, 0) -# /* Clang 3.6.0 introduced __has_cpp_attribute. Prior to that following -# * attributes were already there. */ -# /* https://clang.llvm.org/cxx_status.html */ -# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) (RBIMPL_HAS_CPP_ATTRIBUTE_ ## _) -# define RBIMPL_HAS_CPP_ATTRIBUTE_noreturn 200809 * RBIMPL_COMPILER_SINCE(Clang, 3, 3, 0) -# define RBIMPL_HAS_CPP_ATTRIBUTE_deprecated 201309 * RBIMPL_COMPILER_SINCE(Clang, 3, 4, 0) - -#elif RBIMPL_COMPILER_BEFORE(GCC, 5, 0, 0) -# /* GCC 5+ have __has_cpp_attribute, while 4.x had following attributes. */ -# /* https://gcc.gnu.org/projects/cxx-status.html */ -# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) (RBIMPL_HAS_CPP_ATTRIBUTE_ ## _) -# define RBIMPL_HAS_CPP_ATTRIBUTE_noreturn 200809 * RBIMPL_COMPILER_SINCE(GCC, 4, 8, 0) -# define RBIMPL_HAS_CPP_ATTRIBUTE_deprecated 201309 * RBIMPL_COMPILER_SINCE(GCC, 4, 9, 0) - -#else -# /* :FIXME: -# * Candidate compilers to list here: -# * - icpc: They have __INTEL_CXX11_MODE__. -# */ -# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) 0 -#endif -/** @endcond */ - -/** Wraps (or simulates) `__has_cpp_attribute`. */ -#if ! defined(__cplusplus) -# /* Makes no sense. */ -# define RBIMPL_HAS_CPP_ATTRIBUTE(_) 0 -#else -# /* GCC needs workarounds. See https://gcc.godbolt.org/z/jdz3pa */ -# define RBIMPL_HAS_CPP_ATTRIBUTE(_) \ - ((RBIMPL_HAS_CPP_ATTRIBUTE0(_) <= __cplusplus) ? RBIMPL_HAS_CPP_ATTRIBUTE0(_) : 0) -#endif - -#endif /* RBIMPL_HAS_CPP_ATTRIBUTE_H */ diff --git a/libs/libruby/ruby/internal/has/declspec_attribute.h b/libs/libruby/ruby/internal/has/declspec_attribute.h deleted file mode 100644 index 1c526da..0000000 --- a/libs/libruby/ruby/internal/has/declspec_attribute.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_HAS_DECLSPEC_ATTRIBUTE. - */ -#include "ruby/internal/compiler_since.h" - -/** Wraps (or simulates) `__has_declspec_attribute`. */ -#if defined(__has_declspec_attribute) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE(_) __has_declspec_attribute(_) -#else -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE(_) (RBIMPL_HAS_DECLSPEC_ATTRIBUTE_ ## _) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_align RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_deprecated RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllexport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllimport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_empty_bases RBIMPL_COMPILER_SINCE(MSVC,19, 0, 23918) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noalias RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noinline RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noreturn RBIMPL_COMPILER_SINCE(MSVC,11, 0, 0) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0) -# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_restrict RBIMPL_COMPILER_SINCE(MSVC,14, 0, 0) -# /* Note that "8, 0, 0" might be inaccurate. */ -# if ! defined(__cplusplus) -# /* Clang has this in both C/C++, but MSVC has this in C++ only.*/ -# undef RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow -# endif -#endif - -#endif /* RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H */ diff --git a/libs/libruby/ruby/internal/has/extension.h b/libs/libruby/ruby/internal/has/extension.h deleted file mode 100644 index da8c0d3..0000000 --- a/libs/libruby/ruby/internal/has/extension.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef RBIMPL_HAS_EXTENSION_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_HAS_EXTENSION_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_HAS_EXTENSION. - */ -#include "ruby/internal/has/feature.h" - -/** Wraps (or simulates) `__has_extension`. */ -#if defined(__has_extension) -# define RBIMPL_HAS_EXTENSION(_) __has_extension(_) -#else -# /* Pre-3.0 clang had __has_feature but not __has_extension. */ -# define RBIMPL_HAS_EXTENSION(_) RBIMPL_HAS_FEATURE(_) -#endif - -#endif /* RBIMPL_HAS_EXTENSION_H */ diff --git a/libs/libruby/ruby/internal/has/feature.h b/libs/libruby/ruby/internal/has/feature.h deleted file mode 100644 index 7be8d27..0000000 --- a/libs/libruby/ruby/internal/has/feature.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef RBIMPL_HAS_FEATURE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_HAS_FEATURE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_HAS_FEATURE. - */ - -/** Wraps (or simulates) `__has_feature`. */ -#if defined(__has_feature) -# define RBIMPL_HAS_FEATURE(_) __has_feature(_) -#else -# define RBIMPL_HAS_FEATURE(_) 0 -#endif - -#endif /* RBIMPL_HAS_FEATURE_H */ diff --git a/libs/libruby/ruby/internal/has/warning.h b/libs/libruby/ruby/internal/has/warning.h deleted file mode 100644 index 12d7db1..0000000 --- a/libs/libruby/ruby/internal/has/warning.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef RBIMPL_HAS_WARNING_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_HAS_WARNING_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_HAS_WARNING. - */ - -/** Wraps (or simulates) `__has_warning`. */ -#if defined(__has_warning) -# define RBIMPL_HAS_WARNING(_) __has_warning(_) -#else -# define RBIMPL_HAS_WARNING(_) 0 -#endif - -#endif /* RBIMPL_HAS_WARNING_H */ diff --git a/libs/libruby/ruby/internal/intern/array.h b/libs/libruby/ruby/internal/intern/array.h deleted file mode 100644 index 2262c6f..0000000 --- a/libs/libruby/ruby/internal/intern/array.h +++ /dev/null @@ -1,657 +0,0 @@ -#ifndef RBIMPL_INTERN_ARRAY_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_ARRAY_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cArray. - */ -#include "ruby/internal/attr/noalias.h" -#include "ruby/internal/attr/noexcept.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* array.c */ - -RBIMPL_ATTR_NONNULL(()) -RBIMPL_ATTR_NOALIAS() -/** - * Fills the memory region with a series of ::RUBY_Qnil. - * - * @param[out] buf Buffer to squash. - * @param[in] len Number of objects of `buf`. - * @post `buf` is filled with ::RUBY_Qnil. - */ -void rb_mem_clear(VALUE *buf, long len) - RBIMPL_ATTR_NOEXCEPT(true) - ; - -/** - * Identical to rb_ary_new_from_values(), except it expects exactly two - * parameters. - * - * @param[in] car Arbitrary ruby object. - * @param[in] cdr Arbitrary ruby object. - * @return An allocated new array, of length 2, whose contents are the - * passed objects. - */ -VALUE rb_assoc_new(VALUE car, VALUE cdr); - -/** - * Try converting an object to its array representation using its `to_ary` - * method, if any. If there is no such thing, returns ::RUBY_Qnil. - * - * @param[in] obj Arbitrary ruby object to convert. - * @exception rb_eTypeError `obj.to_ary` returned something non-Array. - * @retval RUBY_Qnil No conversion from `obj` to array defined. - * @retval otherwise Converted array representation of `obj`. - * @see rb_io_check_io - * @see rb_check_string_type - * @see rb_check_hash_type - */ -VALUE rb_check_array_type(VALUE obj); - -/** - * Allocates a new, empty array. - * - * @return An allocated new array, whose length is 0. - */ -VALUE rb_ary_new(void); - -/** - * Identical to rb_ary_new(), except it additionally specifies how many rooms - * of objects it should allocate. This way you can create an array whose - * capacity is bigger than the length of it. If you can say that an array - * grows to a specific amount, this could be effective than resizing an array - * over and over again and again. - * - * @param[in] capa Designed capacity of the generating array. - * @return An empty array, whose capacity is `capa`. - */ -VALUE rb_ary_new_capa(long capa); - -/** - * Constructs an array from the passed objects. - * - * @param[in] n Number of passed objects. - * @param[in] ... Arbitrary ruby objects, filled into the returning array. - * @return An array of size `n`, whose contents are the passed objects. - */ -VALUE rb_ary_new_from_args(long n, ...); - -/** - * Identical to rb_ary_new_from_args(), except how objects are passed. - * - * @param[in] n Number of objects of `elts`. - * @param[in] elts Arbitrary ruby objects, filled into the returning array. - * @return An array of size `n`, whose contents are the passed objects. - */ -VALUE rb_ary_new_from_values(long n, const VALUE *elts); - -/** - * Allocates a hidden (no class) empty array. - * - * @param[in] capa Designed capacity of the array. - * @return A hidden, empty array. - * @see rb_obj_hide() - */ -VALUE rb_ary_hidden_new(long capa); -#define rb_ary_tmp_new rb_ary_hidden_new - -/** - * Destroys the given array for no reason. - * - * @warning DO NOT USE IT. - * @warning Leave this task to our GC. - * @warning It was a wrong indea at the first place to let you know about it. - * - * @param[out] ary The array to be executed. - * @post The given array no longer exists. - * @note Maybe `Array#clear` could be what you want. - * - * @internal - * - * Should have moved this to `internal/array.h`. - */ -void rb_ary_free(VALUE ary); - -/** - * Declares that the array is about to be modified. This for instance let the - * array have a dedicated backend storage. - * - * @param[out] ary Array about to be modified. - * @exception rb_eFrozenError `ary` is frozen. - * @post Upon successful return the passed array is eligible to be - * modified. - */ -void rb_ary_modify(VALUE ary); - -/** @alias{rb_obj_freeze} */ -VALUE rb_ary_freeze(VALUE obj); - -RBIMPL_ATTR_PURE() -/** - * Queries if the passed two arrays share the same backend storage. A use-case - * for knowing such property is to take a snapshot of an array (using - * e.g. rb_ary_replace()), then check later if that snapshot still shares the - * storage with the original. Taking a snapshot is ultra-cheap. If nothing - * happens the impact shall be minimal. But if someone modifies the original, - * that entity shall pay the cost of copy-on-write. You can detect that using - * this API. - * - * @param[in] lhs Comparison LHS. - * @param[in] rhs Comparison RHS. - * @retval RUBY_Qtrue They share the same backend storage. - * @retval RUBY_Qfalse They are distinct. - * @pre Both arguments must be of ::RUBY_T_ARRAY. - */ -VALUE rb_ary_shared_with_p(VALUE lhs, VALUE rhs); - -/** - * Queries element(s) of an array. This is complicated! Refer `Array#slice` - * document for the complete description of how it behaves. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Up to 2 objects. - * @param[in] ary Target array. - * @exception rb_eTypeError `argv` (or its part) includes non-Integer. - * @exception rb_eRangeError rb_cArithSeq is passed, and is OOB. - * @return An element (if requested), or an array of elements (if - * requested), or ::RUBY_Qnil (if index OOB). - * - * @internal - * - * ```rbs - * # "int" is ::Integer or `#to_int`, defined in builtin.rbs - * - * class ::Array[unchecked out T] - * def slice - * : (int i) -> T? - * | (int beg, int len) -> ::Array[T]? - * | (Range[int] r) -> ::Array[T]? - * | (ArithmeticSequence as) -> ::Array[T]? # This also raises RagneError. - * end - * ``` - */ -VALUE rb_ary_aref(int argc, const VALUE *argv, VALUE ary); - -/** - * Obtains a part of the passed array. - * - * @param[in] ary Target array. - * @param[in] beg Subpart index. - * @param[in] len Requested length of returning array. - * @retval RUBY_Qnil Requested range out of bounds of `ary`. - * @retval otherwise An allocated new array whose contents are `ary`'s - * `beg` to `len`. - * @note Return array can be shorter than `len` when for instance - * `[0, 1, 2, 3]`'s 4th to 1,000,000,000th is requested. - */ -VALUE rb_ary_subseq(VALUE ary, long beg, long len); - -/** - * Destructively stores the passed value to the passed array's passed index. - * It also resizes the array's backend storage so that the requested index is - * not out of bounds. - * - * @param[out] ary Target array to modify. - * @param[in] key Where to store `val`. - * @param[in] val What to store at `key`. - * @exception rb_eFrozenError `ary` is frozen. - * @exception rb_eIndexError `key` is negative. - * @post `ary`'s `key`th position is occupied with `val`. - * @post Depending on `key` and previous length of `ary` this operation - * can also create a series of "hole" positions inside of the - * backend storage. They are filled with ::RUBY_Qnil. - */ -void rb_ary_store(VALUE ary, long key, VALUE val); - -/** - * Duplicates an array. - * - * @param[in] ary Target to duplicate. - * @return An allocated new array whose contents are identical to `ary`. - * - * @internal - * - * Not sure why this has to be something different from `ary_make_shared_copy`, - * which seems much efficient. - */ -VALUE rb_ary_dup(VALUE ary); - -/** - * I guess there is no use case of this function in extension libraries, but - * this is a routine identical to rb_ary_dup(). This makes the most sense when - * the passed array is formerly hidden by rb_obj_hide(). - * - * @param[in] ary An array, possibly hidden. - * @return A duplicated new instance of ::rb_cArray. - */ -VALUE rb_ary_resurrect(VALUE ary); - -/** - * Force converts an object to an array. It first tries its `#to_ary` method. - * Takes the result if any. Otherwise creates an array of size 1 whose sole - * element is the passed object. - * - * @param[in] obj Arbitrary ruby object. - * @return An array representation of `obj`. - * @note Unlike rb_str_to_str() which is a variant of - * rb_check_string_type(), rb_ary_to_ary() is not a variant of - * rb_check_array_type(). - */ -VALUE rb_ary_to_ary(VALUE obj); - -/** - * Converts an array into a human-readable string. Historically its behaviour - * changed over time. Currently it is identical to calling `inspect` method. - * This behaviour is from that of python (!!) circa 2006. - * - * @param[in] ary Array to inspect. - * @return Recursively inspected representation of `ary`. - * @see `[ruby-dev:29520]` - */ -VALUE rb_ary_to_s(VALUE ary); - -/** - * Destructively appends multiple elements at the end of the array. - * - * @param[out] ary Where to push `train`. - * @param[in] train Arbitrary ruby objects to push to `ary`. - * @param[in] len Number of objects of `train`. - * @exception rb_eIndexError `len` too large. - * @exception rb_eFrozenError `ary` is frozen. - * @return The passed `ary`. - * @post `ary` has contents from `train` appended at its end. - */ -VALUE rb_ary_cat(VALUE ary, const VALUE *train, long len); - -/** - * Special case of rb_ary_cat() that it adds only one element. - * - * @param[out] ary Where to push `elem`. - * @param[in] elem Arbitrary ruby object to push. - * @exception rb_eFrozenError `ary` is frozen. - * @return The passed `ary`. - * @post `ary` has `elem` appended at its end. - */ -VALUE rb_ary_push(VALUE ary, VALUE elem); - -/** - * Destructively deletes an element from the end of the passed array and - * returns what was deleted. - * - * @param[out] ary Target array to modify. - * @exception rb_eFrozenError `ary` is frozen. - * @return What was at the end of `ary`, or ::RUBY_Qnil if there is - * nothing to remove. - * @post `ary`'s last element, if any, is removed. - * @note There is no way to distinguish whether `ary` was an 1-element - * array whose content was ::RUBY_Qnil, or was empty. - */ -VALUE rb_ary_pop(VALUE ary); - -/** - * Destructively deletes an element from the beginning of the passed array and - * returns what was deleted. It can also be seen as a routine identical to - * rb_ary_pop(), except which side of the array to scrub. - * - * @param[out] ary Target array to modify. - * @exception rb_eFrozenError `ary` is frozen. - * @return What was at the beginning of `ary`, or ::RUBY_Qnil if there is - * nothing to remove. - * @post `ary`'s first element, if any, is removed. As the name implies - * everything else remaining in `ary` gets moved towards `ary`'s - * beginning. - * @note There is no way to distinguish whether `ary` was an 1-element - * array whose content was ::RUBY_Qnil, or was empty. - */ -VALUE rb_ary_shift(VALUE ary); - -/** - * Destructively prepends the passed item at the beginning of the passed array. - * It can also be seen as a routine identical to rb_ary_push(), except which - * side of the array to modify. - * - * @param[out] ary Target array to modify. - * @param[in] elem Arbitrary ruby object to unshift. - * @exception rb_eFrozenError `ary` is frozen. - * @return The passed `ary`. - * @post `ary` has `elem` prepended at this beginning. - */ -VALUE rb_ary_unshift(VALUE ary, VALUE elem); - -RBIMPL_ATTR_PURE() -/** - * Queries an element of an array. When passed offset is negative it counts - * backwards. - * - * @param[in] ary An array to look into. - * @param[in] off Offset (can be negative). - * @return ::RUBY_Qnil when `off` is out of bounds of `ary`. Otherwise - * what is stored at `off`-th position of `ary`. - * @note `ary`'s `off`-th element can happen to be ::RUBY_Qnil. - */ -VALUE rb_ary_entry(VALUE ary, long off); - -/** - * Iteratively yields each element of the passed array to the implicitly passed - * block if any. In case there is no block given, an enumerator that does the - * thing is generated instead. - * - * @param[in] ary Array to iterate over. - * @retval ary Passed block was evaluated. - * @retval otherwise An instance of ::rb_cEnumerator for `Array#each`. - */ -VALUE rb_ary_each(VALUE ary); - -/** - * Recursively stringises the elements of the passed array, flattens that - * result, then joins the sequence using the passed separator. - * - * @param[in] ary Target array to convert. - * @param[in] sep Separator. Either a string, or ::RUBY_Qnil - * if you want no separator. - * @exception rb_eArgError Infinite recursion in `ary`. - * @exception rb_eTypeError `sep` is not a string. - * @exception rb_eEncCompatError Strings do not agree with their encodings. - * @return An instance of ::rb_cString which concatenates stringised - * contents of `ary`, using `sep` as separator. - */ -VALUE rb_ary_join(VALUE ary, VALUE sep); - -/** - * _Destructively_ reverses the passed array in-place. - * - * @warning This is `Array#reverse!`, not `Array#reverse`. - * @param[out] ary Target array to modify. - * @exception rb_eFrozenError `ary` is frozen. - * @return Passed `ary`. - * @post `ary` is reversed. - */ -VALUE rb_ary_reverse(VALUE ary); - -/** - * _Destructively_ rotates the passed array in-place to towards its end. The - * amount can be negative. Would rotate to the opposite direction then. - * - * @warning This is `Array#rotate!`, not `Array#rotate`. - * @param[out] ary Target array to modify. - * @param[in] rot Amount of rotation. - * @exception rb_eFrozenError `ary` is frozen. - * @retval RUBY_Qnil Not rotated. - * @retval ary Rotated. - * @post `ary` is rotated. - */ -VALUE rb_ary_rotate(VALUE ary, long rot); - -/** - * Creates a copy of the passed array, whose elements are sorted according to - * their `<=>` result. - * - * @param[in] ary Array to sort. - * @exception rb_eArgError Comparison not defined among elements. - * @exception rb_eRuntimeError Infinite recursion in `<=>`. - * @return A copy of `ary`, sorted. - * @note As of writing this function uses `qsort` as backend algorithm, - * which means the result is unstable (in terms of sort stability). - */ -VALUE rb_ary_sort(VALUE ary); - -/** - * Destructively sorts the passed array in-place, according to each elements' - * `<=>` result. - * - * @param[in] ary Target array to modify. - * @exception rb_eArgError Comparison not defined among elements. - * @exception rb_eRuntimeError Infinite recursion in `<=>`. - * @return Passed `ary`. - * @post `ary` is sorted. - * @note As of writing this function uses `qsort` as backend algorithm, - * which means the result is unstable (in terms of sort stability). - */ -VALUE rb_ary_sort_bang(VALUE ary); - -/** - * Destructively removes elements from the passed array, so that there would be - * no elements inside that satisfy `==` relationship with the passed object. - * Returns the last deleted element if any. But in case there was nothing to - * delete it gets complicated. It checks for the implicitly passed block. If - * there is a block the return value would be what the block evaluates to. - * Otherwise it resorts to ::RUBY_Qnil. - * - * @param[out] ary Target array to modify. - * @param[in] elem Template object to match against each element. - * @exception rb_eFrozenError `ary` is frozen. - * @return What was deleted, or what was the block returned, or - * ::RUBY_Qnil (see above). - * @post All elements that have `==` relationship with `elem` are purged - * from `ary`. Elements shift their positions so that `ary` gets - * compact. - * - * @internal - * - * Internally there also is `rb_ary_delete_same`, which compares by identity. - */ -VALUE rb_ary_delete(VALUE ary, VALUE elem); - -/** - * Destructively removes an element which resides at the specific index of the - * passed array. Unlike rb_ary_stre() the index can be negative, which means - * the index counts backwards from the array's tail. - * - * @param[out] ary Target array to modify. - * @param[in] pos Position (can be negative). - * @exception rb_eFrozenError `ary` is frozen. - * @return What was deleted, or ::RUBY_Qnil in case of OOB. - * @post `ary`'s `pos`-th element is deleted if any. - * @note There is no way to distinguish whether `pos` is out of bound, - * or `pos` did exist but stored ::RUBY_Qnil as an ordinal value. - */ -VALUE rb_ary_delete_at(VALUE ary, long pos); - -/** - * Destructively removes everything form an array. - * - * @param[out] ary Target array to modify. - * @exception rb_eFrozenError `ary` is frozen. - * @return The passed `ary`. - * @post `ary` is an empty array. - */ -VALUE rb_ary_clear(VALUE ary); - -/** - * Creates a new array, concatenating the former to the latter. - * - * @param[in] lhs Source array #1. - * @param[in] rhs Source array #2. - * @exception rb_eIndexError Result array too big. - * @return A new array containing `rhs` concatenated to `lhs`. - * @note This operation doesn't commute. Don't get confused by the - * "plus" terminology. For historical reasons there are some - * noncommutative `+`s in Ruby. This is one of such things. There - * has been a long discussion around `+`s in programming languages. - * - * @internal - * - * rb_ary_concat() is not a destructive version of rb_ary_plus(). They raise - * different exceptions. Don't know why though. - */ -VALUE rb_ary_plus(VALUE lhs, VALUE rhs); - -/** - * Destructively appends the contents of latter into the end of former. - * - * @param[out] lhs Destination array. - * @param[in] rhs Source array. - * @exception rb_eFrozenError `lhs` is frozen. - * @exception rb_eIndexError Result array too big. - * @exception rb_eTypeError `rhs` doesn't respond to `#to_ary`. - * @return The passed `lhs`. - * @post `lhs` has contents of `rhs` appended to its end. - */ -VALUE rb_ary_concat(VALUE lhs, VALUE rhs); - -/** - * Looks up the passed key, assuming the passed array is an alist. An "alist" - * here is a list of "association"s, much like that of Emacs. Emacs has - * `assoc` function that behaves exactly the same as this one. - * - * ```ruby - * # This is an example of aliist. - * auto_mode_alist = [ - * [ /\.[ch]\z/, :"c-mode" ], - * [ /\.[ch]pp\z/, :"c++-mode" ], - * [ /\.awk\z/, :"awk-mode" ], - * [ /\.cs\z/, :"csharp-mode" ], - * [ /\.go\z/, :"go-mode" ], - * [ /\.java\z/, :"java-mode" ], - * [ /\.pas\z/, :"pascal-mode" ], - * [ /\.rs\z/, :"rust-mode" ], - * [ /\.txt\z/, :"text-mode" ], - * ] - * ``` - * - * This function scans the passed array looking for an element, which itself is - * an array, whose first element is the passed key. If no such element is - * found, returns ::RUBY_Qnil. - * - * Although this function expects the passed array be an array of arrays, it - * can happily accept non-array elements; it just ignores such things. - * - * @param[in] alist An array of arrays. - * @param[in] key Needle. - * @retval RUBY_Qnil Nothing was found. - * @retval otherwise An element in `alist` whose first element is in `==` - * relationship with `key`. - */ -VALUE rb_ary_assoc(VALUE alist, VALUE key); - -/** - * Identical to rb_ary_assoc(), except it scans the passed array from the - * opposite direction. - * - * @param[in] alist An array of arrays. - * @param[in] key Needle. - * @retval RUBY_Qnil Nothing was found. - * @retval otherwise An element in `alist` whose first element is in `==` - * relationship with `key`. - */ -VALUE rb_ary_rassoc(VALUE alist, VALUE key); - -/** - * Queries if the passed array has the passed entry. - * - * @param[in] ary Target array to scan. - * @param[in] elem Target array to find. - * @retval RUBY_Qfalse No element in `ary` is in `==` relationship with - * `elem`. - * @retval RUBY_Qtrue There is at least one element in `ary` which is in - * `==` relationship with `elem`. - * - * @internal - * - * This is the only function in the entire C API that is named using third - * person singular form of a verb (except #ISASCII etc., which are not our - * naming). The counterpart Ruby API of this function is `Array#include?`. - */ -VALUE rb_ary_includes(VALUE ary, VALUE elem); - -/** - * Recursively compares each elements of the two arrays one-by-one using `<=>`. - * - * @param[in] lhs Comparison LHS. - * @param[in] rhs Comparison RHS. - * @retval RUBY_Qnil `lhs` and `rhs` are not comparable. - * @retval -1 `lhs` is less than `rhs`. - * @retval 0 They are equal. - * @retval 1 `rhs` is less then `lhs`. - */ -VALUE rb_ary_cmp(VALUE lhs, VALUE rhs); - -/** - * Replaces the contents of the former object with the contents of the latter. - * - * @param[out] copy Destination object. - * @param[in] orig Source object. - * @exception rb_eTypeError `orig` has no implicit conversion to Array. - * @exception rb_eFrozenError `copy` is frozen. - * @return The passed `copy`. - * @post `copy`'s former components are abandoned. It now has the - * identical length and contents to `orig`. - */ -VALUE rb_ary_replace(VALUE copy, VALUE orig); - -/** - * This _was_ a generalisation of `Array#values_at`, `Struct#values_at`, and - * `MatchData#values_at`. It begun its life as a refactoring effort. However - * as Ruby evolves over time, as of writing none of aforementioned methods - * share their implementations at all. This function is not deprecated; still - * works as it has been. But it is now kind of like a rudimentum. - * - * This function takes an object, which is a receiver, and a series of - * "indices", which are either integers, or ranges of integers. Calls the - * passed callback for each of those indices, along with the receiver. This - * callback is expected to do something like rb_ary_aref(), rb_struct_aref(), - * etc. In case of a range index rb_range_beg_len() expands the range. - * Finally return values of the callback are gathered as an array, then - * returned. - * - * @param[in] obj Arbitrary ruby object. - * @param[in] olen "Length" of `obj`. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv List of "indices", described above. - * @param[in] func Callback function. - * @return A new instance of ::rb_cArray gathering `func`outputs. - * - * @internal - * - * `Array#values_at` no longer uses this function. There is no reason apart - * from historical ones to list this function here. - */ -VALUE rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func)(VALUE obj, long oidx)); - -/** - * Expands or shrinks the passed array to the passed length. - * - * @param[out] ary An array to modify. - * @param[in] len Desired length of `ary`. - * @exception rb_eFrozenError `ary` is frozen. - * @exception rb_eIndexError `len` too long. - * @return The passed `ary`. - * @post `ary`'s length is `len`. - * @post Depending on `len` and previous length of `ary` this operation - * can also create a series of "hole" positions inside of the - * backend storage. They are filled with ::RUBY_Qnil. - * - * @internal - * - * `len` is signed. Intentional or...? - */ -VALUE rb_ary_resize(VALUE ary, long len); - -#define rb_ary_new2 rb_ary_new_capa /**< @old{rb_ary_new_capa} */ -#define rb_ary_new3 rb_ary_new_from_args /**< @old{rb_ary_new_from_args} */ -#define rb_ary_new4 rb_ary_new_from_values /**< @old{rb_ary_new_from_values} */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_ARRAY_H */ diff --git a/libs/libruby/ruby/internal/intern/bignum.h b/libs/libruby/ruby/internal/intern/bignum.h deleted file mode 100644 index 43d6801..0000000 --- a/libs/libruby/ruby/internal/intern/bignum.h +++ /dev/null @@ -1,846 +0,0 @@ -#ifndef RBIMPL_INTERN_BIGNUM_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_BIGNUM_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to so-called rb_cBignum. - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/backward/2/long_long.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* bignum.c */ - -/** - * Allocates a bignum object. - * - * @param[in] len Length of the bignum's backend storage, in words. - * @param[in] sign Sign of the bignum. - * @return An allocated new bignum instance. - * @note This only allocates an object, doesn't fill its value in. - * - * @internal - * - * @shyouhei finds it hard to use from extension libraries. `len` is per - * `BDIGIT` but its definition is hidden. - */ -VALUE rb_big_new(size_t len, int sign); - -/** - * Queries if the passed bignum instance is a "bigzro". What is a bigzero? - * Well, bignums are for very big integers, but can also represent tiny ones - * like -1, 0, 1. Bigzero are instances of bignums whose values are zero. - * Knowing if a bignum is bigzero can be handy on occasions, like for instance - * detecting division by zero situation. - * - * @param[in] x A bignum. - * @retval 1 It is a bigzero. - * @retval 0 Otherwise. - */ -int rb_bigzero_p(VALUE x); - -/** - * Duplicates the given bignum. - * - * @param[in] num A bignum. - * @return An allocated bignum, who is equivalent to `num`. - */ -VALUE rb_big_clone(VALUE num); - -/** - * Destructively modify the passed bignum into 2's complement representation. - * - * @note By default bignums are in signed magnitude system. - * - * @param[out] num A bignum to modify. - */ -void rb_big_2comp(VALUE num); - -/** - * Normalises the passed bignum. It for instance returns a fixnum of the same - * value if fixnum can represent that number. - * - * @param[out] x Target bignum (can be destructively modified). - * @return An integer of the identical value (can be `x` itself). - */ -VALUE rb_big_norm(VALUE x); - -/** - * Destructively resizes the backend storage of the passed bignum. - * - * @param[out] big A bignum. - * @param[in] len New length of `big`'s backend, in words. - */ -void rb_big_resize(VALUE big, size_t len); - -RBIMPL_ATTR_NONNULL(()) -/** - * Parses C's string to convert into a Ruby's integer. It understands prefixes - * (e.g. `0x`) and underscores. - * - * @param[in] str Stringised representation of the return value. - * @param[in] base Base of conversion. Must be `-36..36` inclusive, - * except `1`. `2..36` means the conversion is done - * according to it, with unmatched prefix understood - * as a part of the result. `-36..-2` means the - * conversion honours prefix when present, or use - * `-base` when absent. `0` is equivalent to `-10`. - * `-1` mandates a prefix. `1` is an error. - * @param[in] badcheck Whether to raise ::rb_eArgError on failure. If - * `0` is passed here this function can return - * `INT2FIX(0)` for parse errors. - * @exception rb_eArgError Failed to parse (and `badcheck` is truthy). - * @return An instance of ::rb_cInteger, which is a numeric interpretation - * of what is written in `str`. - * - * @internal - * - * Not sure if it intentionally accepts `base == -1` or is just buggy. Nobody - * practically uses negative bases these days. - */ -VALUE rb_cstr_to_inum(const char *str, int base, int badcheck); - -/** - * Identical to rb_cstr2inum(), except it takes Ruby's strings instead of C's. - * - * @param[in] str Stringised representation of the return - * value. - * @param[in] base Base of conversion. Must be `-36..36` - * inclusive, except `1`. `2..36` means the - * conversion is done according to it, with - * unmatched prefix understood as a part of the - * result. `-36..-2` means the conversion - * honours prefix when present, or use `-base` - * when absent. `0` is equivalent to `-10`. - * `-1` mandates a prefix. `1` is an error. - * @param[in] badcheck Whether to raise ::rb_eArgError on failure. - * If `0` is passed here this function can - * return `INT2FIX(0)` for parse errors. - * @exception rb_eArgError Failed to parse (and `badcheck` is truthy). - * @exception rb_eTypeError `str` is not a string. - * @exception rb_eEncCompatError `str` is not ASCII compatible. - * @return An instance of ::rb_cInteger, which is a numeric interpretation - * of what is written in `str`. - */ -VALUE rb_str_to_inum(VALUE str, int base, int badcheck); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_cstr_to_inum(), except the second argument controls the base - * and badcheck at once. It basically doesn't raise for parse errors, unless - * the base is zero. - * - * This is an older API. New codes might prefer rb_cstr_to_inum(). - * - * @param[in] str Stringised representation of the return value. - * @param[in] base Base of conversion. Must be `-36..36` inclusive, - * except `1`. `2..36` means the conversion is done - * according to it, with unmatched prefix understood - * as a part of the result. `-36..-2` means the - * conversion honours prefix when present, or use - * `-base` when absent. `0` is equivalent to `-10`. - * `-1` mandates a prefix. `1` is an error. - * @exception rb_eArgError Failed to parse (and `base` is zero). - * @return An instance of ::rb_cInteger, which is a numeric interpretation - * of what is written in `str`. - */ -VALUE rb_cstr2inum(const char *str, int base); - -/** - * Identical to rb_str_to_inum(), except the second argument controls the base - * and badcheck at once. It can also be seen as a routine identical to - * rb_cstr2inum(), except it takes Ruby's strings instead of C's. - * - * This is an older API. New codes might prefer rb_cstr_to_inum(). - * - * @param[in] str Stringised representation of the return - * value. - * @param[in] base Base of conversion. Must be `-36..36` - * inclusive, except `1`. `2..36` means the - * conversion is done according to it, with - * unmatched prefix understood as a part of the - * result. `-36..-2` means the conversion - * honours prefix when present, or use `-base` - * when absent. `0` is equivalent to `-10`. - * `-1` mandates a prefix. `1` is an error. - * @exception rb_eArgError Failed to parse (and `base` is zero). - * @exception rb_eTypeError `str` is not a string. - * @exception rb_eEncCompatError `str` is not ASCII compatible. - * @return An instance of ::rb_cInteger, which is a numeric interpretation - * of what is written in `str`. - */ -VALUE rb_str2inum(VALUE str, int base); - -/** - * Generates a place-value representation of the passed integer. - * - * @param[in] x An integer to stringify. - * @param[in] base `2` to `36` inclusive for each radix. - * @exception rb_eArgError `base` is out of range. - * @exception rb_eRangeError `x` is too big, cannot represent in string. - * @return An instance of ::rb_cString which represents `x`. - */ -VALUE rb_big2str(VALUE x, int base); - -/** - * Converts a bignum into C's `long`. - * - * @param[in] x A bignum. - * @exception rb_eRangeError `x` is out of range of `long`. - * @return The passed value converted into C's `long`. - */ -long rb_big2long(VALUE x); - -/** @alias{rb_big2long} */ -#define rb_big2int(x) rb_big2long(x) - -/** - * Converts a bignum into C's `unsigned long`. - * - * @param[in] x A bignum. - * @exception rb_eRangeError `x` is out of range of `unsigned long`. - * @return The passed value converted into C's `unsigned long`. - * - * @internal - * - * This function can generate a very large positive integer for a negative - * input. For instance applying Ruby's -4,611,686,018,427,387,905 to this - * function yields C's 13,835,058,055,282,163,711 on my machine. This is how - * it has been. Cannot change any longer. - */ -unsigned long rb_big2ulong(VALUE x); - -/** @alias{rb_big2long} */ -#define rb_big2uint(x) rb_big2ulong(x) - -#if HAVE_LONG_LONG -/** - * Converts a bignum into C's `long long`. - * - * @param[in] x A bignum. - * @exception rb_eRangeError `x` is out of range of `long long`. - * @return The passed value converted into C's `long long`. - */ -LONG_LONG rb_big2ll(VALUE); - -/** - * Converts a bignum into C's `unsigned long long`. - * - * @param[in] x A bignum. - * @exception rb_eRangeError `x` is out of range of `unsigned long long`. - * @return The passed value converted into C's `unsigned long long`. - * - * @internal - * - * This function can generate a very large positive integer for a negative - * input. For instance applying Ruby's -4,611,686,018,427,387,905 to this - * function yields C's 13,835,058,055,282,163,711 on my machine. This is how - * it has been. Cannot change any longer. - */ -unsigned LONG_LONG rb_big2ull(VALUE); - -#endif /* HAVE_LONG_LONG */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Converts a bignum into a series of its parts. - * - * @param[in] val An integer. - * @param[out] buf Return buffer. - * @param[in] num_longs Number of words of `buf`. - * @exception rb_eTypeError `val` doesn't respond to `#to_int`. - * @post `buf` is filled with `val`'s 2's complement representation, in - * the host CPU's native byte order, from least significant word - * towards the most significant one, for `num_longs` words. - * @note The "pack" terminology comes from `Array#pack`. - */ -void rb_big_pack(VALUE val, unsigned long *buf, long num_longs); - -RBIMPL_ATTR_NONNULL(()) -/** - * Constructs a (possibly very big) bignum from a series of integers. `buf[0]` - * would be the return value's least significant word; `buf[num_longs-1]` would - * be that of most significant. - * - * @param[in] buf A series of integers. - * @param[in] num_longs Number of words of `buf`. - * @exception rb_eArgError Result would be too big. - * @return An instance of ::rb_cInteger which is an "unpack"-ed value of - * the parameters. - * @note The "unpack" terminology comes from `String#pack`. - */ -VALUE rb_big_unpack(unsigned long *buf, long num_longs); - -/* pack.c */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Encodes a Unicode codepoint into its UTF-8 representation. - * - * @param[out] buf Return buffer, must at least be 6 bytes width. - * @param[in] uv An Unicode codepoint. - * @exception rb_eRangeError `uv` is out of Unicode. - * @return Number of bytes written to `buf` - * @post `buf` holds a UTF-8 representation of `uv`. - */ -int rb_uv_to_utf8(char buf[6], unsigned long uv); - -/* bignum.c */ - -/** - * Converts a C's `double` into a bignum. - * - * @param[in] d A value to convert. - * @exception rb_eFloatDomainError `d` is Inf/NaN. - * @return An instance of ::rb_cInteger whose value is approximately `d`. - * - * @internal - * - * @shyouhei is not sure if the result is guaranteed to be the nearest integer - * of `d`. - */ -VALUE rb_dbl2big(double d); - -/** - * Converts a bignum into C's `double`. - * - * @param[in] x A bignum. - * @return The passed value converted into C's `double`. - * - * @internal - * - * @shyouhei is not sure if the result is guaranteed to be `x`'s nearest value - * that a `double` can represent. - */ -double rb_big2dbl(VALUE x); - -/** - * Compares the passed two bignums. - * - * @param[in] lhs Comparison LHS. - * @param[in] rhs Comparison RHS. - * @retval -1 `rhs` is bigger than `lhs`. - * @retval 0 They are identical. - * @retval 1 `lhs` is bigger than `rhs`. - * @see rb_num_coerce_cmp() - */ -VALUE rb_big_cmp(VALUE lhs, VALUE rhs); - -/** - * Equality, in terms of `==`. This checks if the _value_ is the same, not the - * identity. For instance `1 == 1.0` must hold. - * - * @param[in] lhs Comparison LHS. - * @param[in] rhs Comparison RHS. - * @retval RUBY_Qtrue They are the same. - * @retval RUBY_Qfalse They are different. - */ -VALUE rb_big_eq(VALUE lhs, VALUE rhs); - -/** - * Equality, in terms of `eql?`. Unlike rb_big_eq() it does not convert - * ::rb_cFloat etc. This function returns ::RUBY_Qtrue if and only if both - * parameters are bignums, which represent the identical numerical value. - * - * @param[in] lhs Comparison LHS. - * @param[in] rhs Comparison RHS. - * @retval RUBY_Qtrue They are identical. - * @retval RUBY_Qfalse They are distinct. - */ -VALUE rb_big_eql(VALUE lhs, VALUE rhs); - -/** - * Performs addition of the passed two objects. - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x + y` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_big_plus(VALUE x, VALUE y); - -/** - * Performs subtraction of the passed two objects. - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x - y` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_big_minus(VALUE x, VALUE y); - -/** - * Performs multiplication of the passed two objects. - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x * y` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_big_mul(VALUE x, VALUE y); - -/** - * Performs division of the passed two objects. - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x / y` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_big_div(VALUE x, VALUE y); - -/** - * Performs "integer division". This is different from rb_big_div(). - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x.div y` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_big_idiv(VALUE x, VALUE y); - -/** - * Performs modulo of the passed two objects. - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x % y` evaluates to. - * @see rb_num_coerce_bin() - * - * @internal - * - * There also is `rb_big_remainder()` internally, which is different from this - * one. - */ -VALUE rb_big_modulo(VALUE x, VALUE y); - -/** - * Performs "divmod" operation. The operation in bignum's context is that it - * calculates rb_big_idiv() and rb_big_modulo() at once. - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x.divmod y` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_big_divmod(VALUE x, VALUE y); - -/** - * Raises `x` to the powerof `y`. - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x ** y` evaluates to. - * @see rb_num_coerce_bin() - * @note This can return an instance of ::rb_cFloat, even when both `x` - * and `y` are bignums. Or an instance of ::rb_cRational, when for - * instance `y` is negative. - */ -VALUE rb_big_pow(VALUE x, VALUE y); - -/** - * Performs bitwise and of the passed two objects. - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x & y` evaluates to. - * @see rb_num_coerce_bit() - */ -VALUE rb_big_and(VALUE x, VALUE y); - -/** - * Performs bitwise or of the passed two objects. - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x | y` evaluates to. - * @see rb_num_coerce_bit() - */ -VALUE rb_big_or(VALUE x, VALUE y); - -/** - * Performs exclusive or of the passed two objects. - * - * @param[in] x A bignum. - * @param[in] y Arbitrary ruby object. - * @return What `x ^ y` evaluates to. - * @see rb_num_coerce_bit() - */ -VALUE rb_big_xor(VALUE x, VALUE y); - -/** - * Performs shift left. - * - * @param[in] x A bignum. - * @param[in] y Shift amount. - * @exception rb_eTypeError `y` is not an integer. - * @exception rb_eArgError `y` is too big. - * @return `x` shifted left to `y` bits. - * @note `y` can be negative. Shifts right then. - */ -VALUE rb_big_lshift(VALUE x, VALUE y); - -/** - * Performs shift right. - * - * @param[in] x A bignum. - * @param[in] y Shift amount. - * @exception rb_eTypeError `y` is not an integer. - * @return `x` shifted right to `y` bits. - * @note This is arithmetic. Because bignums are not bitfields there is - * no shift right logical operator. - */ -VALUE rb_big_rshift(VALUE x, VALUE y); - -/** - * @name Flags for rb_integer_pack()/rb_integer_unpack() - * @{ - */ - -/** Stores/interprets the most significant word as the first word. */ -#define INTEGER_PACK_MSWORD_FIRST 0x01 - -/** Stores/interprets the least significant word as the first word. */ -#define INTEGER_PACK_LSWORD_FIRST 0x02 - -/** - * Stores/interprets the most significant byte in a word as the first byte in - * the word. - */ -#define INTEGER_PACK_MSBYTE_FIRST 0x10 - -/** - * Stores/interprets the least significant byte in a word as the first byte in - * the word. - */ -#define INTEGER_PACK_LSBYTE_FIRST 0x20 - -/** - * Means either #INTEGER_PACK_MSBYTE_FIRST or #INTEGER_PACK_LSBYTE_FIRST, - * depending on the host processor's endian. - */ -#define INTEGER_PACK_NATIVE_BYTE_ORDER 0x40 - -/** Uses 2's complement representation. */ -#define INTEGER_PACK_2COMP 0x80 - -/** Uses "generic" implementation (handy on test). */ -#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION 0x400 - -/** - * Always generates a bignum object even if the integer can be representable - * using fixnum scheme (unpack only) - */ -#define INTEGER_PACK_FORCE_BIGNUM 0x100 - -/** - * Interprets the input as a signed negative number (unpack only). If not - * specified returns a positive number. - */ -#define INTEGER_PACK_NEGATIVE 0x200 - -/** Little endian combination. */ -#define INTEGER_PACK_LITTLE_ENDIAN \ - (INTEGER_PACK_LSWORD_FIRST | \ - INTEGER_PACK_LSBYTE_FIRST) - -/** Big endian combination */ -#define INTEGER_PACK_BIG_ENDIAN \ - (INTEGER_PACK_MSWORD_FIRST | \ - INTEGER_PACK_MSBYTE_FIRST) - -/** @} */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Exports an integer into a buffer. This function fills the buffer specified - * by `words` and `numwords` as `val` in the format specified by `wordsize`, - * `nails` and `flags`. - * - * @param[in] val Integer or integer-like object which has - * `#to_int` method. - * @param[out] words Return buffer. - * @param[in] numwords Number of words of `words`. - * @param[in] wordsize Number of bytes per word. - * @param[in] nails Number of padding bits in a word. Most - * significant nails bits of each word are filled - * by zero. - * @param[in] flags Bitwise or of constants whose name starts - * "INTEGER_PACK_". - * @exception rb_eTypeError `val` doesn't respond to `#to_int`. - * - * Possible flags are: - * - * - #INTEGER_PACK_MSWORD_FIRST: - * Stores the most significant word as the first word. - * - * - #INTEGER_PACK_LSWORD_FIRST: - * Stores the least significant word as the first word. - * - * - #INTEGER_PACK_MSBYTE_FIRST: - * Stores the most significant byte in a word as the first byte in the - * word. - * - * - #INTEGER_PACK_LSBYTE_FIRST: - * Stores the least significant byte in a word as the first byte in the - * word. - * - * - #INTEGER_PACK_NATIVE_BYTE_ORDER: - * Either #INTEGER_PACK_MSBYTE_FIRST or #INTEGER_PACK_LSBYTE_FIRST - * corresponding to the host's endian. - * - * - #INTEGER_PACK_2COMP: - * Uses 2's complement representation. - * - * - #INTEGER_PACK_LITTLE_ENDIAN: Shorthand of - * `INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_LSBYTE_FIRST`. - * - * - #INTEGER_PACK_BIG_ENDIAN: Shorthand of - * `INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_MSBYTE_FIRST`. - * - * - #INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION: - * Uses generic implementation (for test and debug). - * - * This function fills the buffer specified by `words` as `val`'s 2's - * complement representation if #INTEGER_PACK_2COMP is specified in `flags`. - * Otherwise it fills `words` as `abs(val)` and signedness is returned via the - * return value. - * - * @return The signedness and overflow condition. The overflow condition - * depends on #INTEGER_PACK_2COMP. - * - * When #INTEGER_PACK_2COMP is not specified: - * - * - `-2` : - * Negative overflow. `val <= -2**(numwords*(wordsize*CHAR_BIT-nails))` - * - * - `-1` : - * Negative without overflow. - * `-2**(numwords*(wordsize*CHAR_BIT-nails)) < val < 0` - * - * - `0` : zero. `val == 0` - * - * - `1` : - * Positive without overflow. - * `0 < val < 2**(numwords*(wordsize*CHAR_BIT-nails))` - * - * - `2` : - * Positive overflow. `2**(numwords*(wordsize*CHAR_BIT-nails)) <= val` - * - * When #INTEGER_PACK_2COMP is specified: - * - * - `-2` : - * Negative overflow. `val < -2**(numwords*(wordsize*CHAR_BIT-nails))` - * - * - `-1` : - * Negative without overflow. - * `-2**(numwords*(wordsize*CHAR_BIT-nails)) <= val < 0` - * - * - `0` : zero. `val == 0` - * - * - `1` : - * Positive without overflow. - * `0 < val < 2**(numwords*(wordsize*CHAR_BIT-nails))` - * - * - `2` : - * Positive overflow. `2**(numwords*(wordsize*CHAR_BIT-nails)) <= val` - * - * The value, `-2**(numwords*(wordsize*CHAR_BIT-nails))`, is representable in - * 2's complement representation but not representable in absolute value. So - * `-1` is returned for the value if #INTEGER_PACK_2COMP is specified but - * returns `-2` if #INTEGER_PACK_2COMP is not specified. - * - * The least significant words are filled in the buffer when overflow occur. - */ -int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags); - -RBIMPL_ATTR_NONNULL(()) -/** - * Import an integer from a buffer. - * - * @param[in] words Buffer to import. - * @param[in] numwords Number of words of `words`. - * @param[in] wordsize Number of bytes per word. - * @param[in] nails Number of padding bits in a word. Most - * significant nails bits of each word are ignored. - * @param[in] flags Bitwise or of constants whose name starts - * "INTEGER_PACK_". - * @exception rb_eArgError `numwords * wordsize` too big. - * - * Possible flags are: - * - * - #INTEGER_PACK_MSWORD_FIRST: - * Interpret the first word as the most significant word. - * - * - #INTEGER_PACK_LSWORD_FIRST: - * Interpret the first word as the least significant word. - * - * - #INTEGER_PACK_MSBYTE_FIRST: - * Interpret the first byte in a word as the most significant byte in the - * word. - * - * - #INTEGER_PACK_LSBYTE_FIRST: - * Interpret the first byte in a word as the least significant byte in - * the word. - * - * - #INTEGER_PACK_NATIVE_BYTE_ORDER: - * Either #INTEGER_PACK_MSBYTE_FIRST or #INTEGER_PACK_LSBYTE_FIRST - * corresponding to the host's endian. - * - * - #INTEGER_PACK_2COMP: - * Uses 2's complement representation. - * - * - #INTEGER_PACK_LITTLE_ENDIAN: Shorthand of - * `INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_LSBYTE_FIRST` - * - * - #INTEGER_PACK_BIG_ENDIAN: Shorthand of - * `INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_MSBYTE_FIRST` - * - * - #INTEGER_PACK_FORCE_BIGNUM: - * Returns a bignum even if its value is representable as a fixnum. - * - * - #INTEGER_PACK_NEGATIVE: - * Returns a non-positive value. (Returns a non-negative value if not - * specified.) - * - * - #INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION: - * Uses generic implementation (for test and debug). - * - * @return An instance of ::rb_cInteger whose value is the interpreted - * `words`. The range of the result value depends on - * #INTEGER_PACK_2COMP and #INTEGER_PACK_NEGATIVE. - * - * When #INTEGER_PACK_2COMP is not set: - * - * - `0 <= val < 2**(numwords*(wordsize*CHAR_BIT-nails))` if - * `!INTEGER_PACK_NEGATIVE` - * - * - `-2**(numwords*(wordsize*CHAR_BIT-nails)) < val <= 0` if - * `INTEGER_PACK_NEGATIVE` - * - * When #INTEGER_PACK_2COMP is set: - * - * - `-2**(numwords*(wordsize*CHAR_BIT-nails)-1)` `<= val <=` - * `2**(numwords*(wordsize*CHAR_BIT-nails)-1)-1` if - * `!INTEGER_PACK_NEGATIVE` - * - * - `-2**(numwords*(wordsize*CHAR_BIT-nails)) <= val <= -1` if - * `INTEGER_PACK_NEGATIVE` - * - * Passing #INTEGER_PACK_2COMP without #INTEGER_PACK_NEGATIVE means sign - * extension. #INTEGER_PACK_2COMP with #INTEGER_PACK_NEGATIVE means assuming - * the higher bits are `1`. - * - * Note that this function returns 0 when `numwords` is zero and - * #INTEGER_PACK_2COMP is set but #INTEGER_PACK_NEGATIVE is not set. - */ -VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags); - -/** - * Calculates the number of bytes needed to represent the absolute value of the - * passed integer. - * - * @param[in] val Integer or integer-like object which has - * `#to_int` method. - * @param[out] nlz_bits_ret Number of leading zero bits in the most - * significant byte is returned if not `NULL`. - * @exception rb_eTypeError `val` doesn't respond to `#to_int`. - * @return `((val_numbits * CHAR_BIT + CHAR_BIT - 1) / CHAR_BIT)`, where - * val_numbits is the number of bits of `abs(val)`. - * @post If `nlz_bits_ret` is not `NULL`, - * `(return_value * CHAR_BIT - val_numbits)` is stored in - * `*nlz_bits_ret`. In this case, - * `0 <= *nlz_bits_ret < CHAR_BIT`. - * - * This function should not overflow. - */ -size_t rb_absint_size(VALUE val, int *nlz_bits_ret); - -/** - * Calculates the number of words needed represent the absolute value of the - * passed integer. Unlike rb_absint_size() this function can overflow. It - * returns `(size_t)-1` then. - * - * @param[in] val Integer or integer-like object which has - * `#to_int` method. - * @param[in] word_numbits Number of bits per word. - * @param[out] nlz_bits_ret Number of leading zero bits in the most - * significant word is returned if not `NULL`. - * @exception rb_eTypeError `val` doesn't respond to `#to_int`. - * @retval (size_t)-1 Overflowed. - * @retval otherwise - `((val_numbits * CHAR_BIT + word_numbits - 1) / word_numbits)`, - * where val_numbits is the number of bits of `abs(val)`. - * @post If `nlz_bits_ret` is not `NULL` and there is no overflow, - * `(return_value * word_numbits - val_numbits)` is stored in - * `*nlz_bits_ret`. In this case, - * `0 <= *nlz_bits_ret < word_numbits.` - * - */ -size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret); - -/** - * Tests `abs(val)` consists only of a bit or not. - * - * @param[in] val Integer or integer-like object which has - * `#to_int` method. - * @exception rb_eTypeError `val` doesn't respond to `#to_int`. - * @retval 1 `abs(val) == 1 << n` for some `n >= 0`. - * @retval 0 Otherwise. - * - * rb_absint_singlebit_p() can be used to determine required buffer size for - * rb_integer_pack() used with #INTEGER_PACK_2COMP (two's complement). - * - * Following example calculates number of bits required to represent val in - * two's complement number, without sign bit. - * - * ```CXX - * size_t size; - * int neg = FIXNUM_P(val) ? FIX2LONG(val) < 0 : BIGNUM_NEGATIVE_P(val); - * size = rb_absint_numwords(val, 1, NULL) - * if (size == (size_t)-1) ...overflow... - * if (neg && rb_absint_singlebit_p(val)) - * size--; - * ``` - * - * Following example calculates number of bytes required to represent val in - * two's complement number, with sign bit. - * - * ```CXX - * size_t size; - * int neg = FIXNUM_P(val) ? FIX2LONG(val) < 0 : BIGNUM_NEGATIVE_P(val); - * int nlz_bits; - * size = rb_absint_size(val, &nlz_bits); - * if (nlz_bits == 0 && !(neg && rb_absint_singlebit_p(val))) - * size++; - * ``` - */ -int rb_absint_singlebit_p(VALUE val); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_BIGNUM_H */ diff --git a/libs/libruby/ruby/internal/intern/class.h b/libs/libruby/ruby/internal/intern/class.h deleted file mode 100644 index 0fb2d00..0000000 --- a/libs/libruby/ruby/internal/intern/class.h +++ /dev/null @@ -1,394 +0,0 @@ -#ifndef RBIMPL_INTERN_CLASS_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_CLASS_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cClass/::rb_cModule. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/backward/2/stdarg.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* class.c */ - -/** - * Creates a new, anonymous class. - * - * @param[in] super What would become a parent class. - * @exception rb_eTypeError `super` is not something inheritable. - * @return An anonymous class that inherits `super`. - */ -VALUE rb_class_new(VALUE super); - -/** - * The comment that comes with this function says `:nodoc:`. Not sure what - * that means though. - * - * @param[out] clone Destination object. - * @param[in] orig Source object. - * @exception rb_eTypeError Cannot copy `orig`. - * @return The passed `clone`. - */ -VALUE rb_mod_init_copy(VALUE clone, VALUE orig); - -/** - * Asserts that the given class can derive a child class. A class might or - * might not be able to do so; for instance a singleton class cannot. - * - * @param[in] super Possible super class. - * @exception rb_eTypeError No it cannot. - * @post Upon successful return `super` can derive. - */ -void rb_check_inheritable(VALUE super); - -/** - * This is a very badly designed API that creates an anonymous class. - * - * @param[in] id Discarded for no reason (why...). - * @param[in] super What would become a parent class. 0 means - * ::rb_cObject. - * @exception rb_eTypeError `super` is not something inheritable. - * @return An anonymous class that inherits `super`. - * @warning You must explicitly name the return value. - */ -VALUE rb_define_class_id(ID id, VALUE super); - -/** - * Identical to rb_define_class_under(), except it takes the name in ::ID - * instead of C's string. - * - * @param[out] outer A class which contains the new class. - * @param[in] id Name of the new class - * @param[in] super A class from which the new class will derive. - * 0 means ::rb_cObject. - * @exception rb_eTypeError The constant name `id` is already taken but the - * constant is not a class. - * @exception rb_eTypeError The class is already defined but the class can - * not be reopened because its superclass is not - * `super`. - * @exception rb_eArgError `super` is NULL. - * @return The created class. - * @post `outer::id` refers the returned class. - * @note If a class named `id` is already defined and its superclass is - * `super`, the function just returns the defined class. - * @note The compaction GC does not move classes returned by this - * function. - */ -VALUE rb_define_class_id_under(VALUE outer, ID id, VALUE super); - -/** - * Creates a new, anonymous module. - * - * @return An anonymous module. - */ -VALUE rb_module_new(void); - - -/** - * Creates a new, anonymous refinement. - * - * @return An anonymous refinement. - */ -VALUE rb_refinement_new(void); - -/** - * This is a very badly designed API that creates an anonymous module. - * - * @param[in] id Discarded for no reason (why...). - * @return An anonymous module. - * @warning You must explicitly name the return value. - */ -VALUE rb_define_module_id(ID id); - -/** - * Identical to rb_define_module_under(), except it takes the name in ::ID - * instead of C's string. - * - * @param[out] outer A class which contains the new module. - * @param[in] id Name of the new module - * @exception rb_eTypeError The constant name `id` is already taken but the - * constant is not a module. - * @return The created module. - * @post `outer::id` refers the returned module. - * @note The compaction GC does not move classes returned by this - * function. - */ -VALUE rb_define_module_id_under(VALUE outer, ID id); - -/** - * Queries the list of included modules. It can also be seen as a routine to - * first call rb_mod_ancestors(), then rejects non-modules from the return - * value. - * - * @param[in] mod Class or Module. - * @return An array of modules that are either included or prepended in any - * of `mod`'s ancestry tree (including itself). - */ -VALUE rb_mod_included_modules(VALUE mod); - -/** - * Queries if the passed module is included by the module. It can also be seen - * as a routine to first call rb_mod_included_modules(), then see if the return - * value contains the passed module. - * - * @param[in] child A Module. - * @param[in] parent Another Module. - * @exception rb_eTypeError `child` is not an instance of ::rb_cModule. - * @retval RUBY_Qtrue `parent` is either included or prepended in any - * of `child`'s ancestry tree (including itself). - * @return RUBY_Qfalse Otherwise. - */ -VALUE rb_mod_include_p(VALUE child, VALUE parent); - -/** - * Queries the module's ancestors. This routine gathers classes and modules - * that the passed module either inherits, includes, or prepends, then - * recursively applies that routine again and again to the collected entries - * until the list doesn't grow up. - * - * @param[in] mod A module or a class. - * @return An array of classes or modules that `mod` possibly recursively - * inherits, includes, or prepends. - * - * @internal - * - * Above description is written in a recursive language but in practice it - * computes the return value iteratively. - */ -VALUE rb_mod_ancestors(VALUE mod); - -/** - * Queries the class's descendants. This routine gathers classes that are - * subclasses of the given class (or subclasses of those subclasses, etc.), - * returning an array of classes that have the given class as an ancestor. - * The returned array does not include the given class or singleton classes. - * - * @param[in] klass A class. - * @return An array of classes where `klass` is an ancestor. - * - * @internal - */ -VALUE rb_class_descendants(VALUE klass); - -/** - * Queries the class's direct descendants. This routine gathers classes that are - * direct subclasses of the given class, - * returning an array of classes that have the given class as a superclass. - * The returned array does not include singleton classes. - * - * @param[in] klass A class. - * @return An array of classes where `klass` is the `superclass`. - * - * @internal - */ -VALUE rb_class_subclasses(VALUE klass); - - -/** - * Returns the attached object for a singleton class. - * If the given class is not a singleton class, raises a TypeError. - * - * @param[in] klass A class. - * @return The object which has the singleton class `klass`. - * - * @internal - */ -VALUE rb_class_attached_object(VALUE klass); - -/** - * Generates an array of symbols, which are the list of method names defined in - * the passed class. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Array of at most one object, which controls (if - * any) whether the return array includes the names - * of methods defined in ancestors or not. - * @param[in] mod A module or a class. - * @exception rb_eArgError `argc` out of range. - * @return An array of symbols collecting names of instance methods that - * are not private, defined at `mod`. - */ -VALUE rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod); - -/** - * Identical to rb_class_instance_methods(), except it returns names of methods - * that are public only. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Array of at most one object, which controls (if - * any) whether the return array includes the names - * of methods defined in ancestors or not. - * @param[in] mod A module or a class. - * @exception rb_eArgError `argc` out of range. - * @return An array of symbols collecting names of instance methods that - * are public, defined at `mod`. - */ -VALUE rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod); - -/** - * Identical to rb_class_instance_methods(), except it returns names of methods - * that are protected only. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Array of at most one object, which controls (if - * any) whether the return array includes the names - * of methods defined in ancestors or not. - * @param[in] mod A module or a class. - * @exception rb_eArgError `argc` out of range. - * @return An array of symbols collecting names of instance methods that - * are protected, defined at `mod`. - */ -VALUE rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod); - -/** - * Identical to rb_class_instance_methods(), except it returns names of methods - * that are private only. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Array of at most one object, which controls (if - * any) whether the return array includes the names - * of methods defined in ancestors or not. - * @param[in] mod A module or a class. - * @exception rb_eArgError `argc` out of range. - * @return An array of symbols collecting names of instance methods that - * are protected, defined at `mod`. - */ -VALUE rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod); - -/** - * Identical to rb_class_instance_methods(), except it returns names of - * singleton methods instead of instance methods. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Array of at most one object, which controls (if - * any) whether the return array includes the names - * of methods defined in ancestors or not. - * @param[in] obj Arbitrary ruby object. - * @exception rb_eArgError `argc` out of range. - * @return An array of symbols collecting names of instance methods that - * are not private, defined at the singleton class of `obj`. - */ -VALUE rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj); - -/** - * Identical to rb_define_method(), except it takes the name of the method in - * ::ID instead of C's string. - * - * @param[out] klass A module or a class. - * @param[in] mid Name of the function. - * @param[in] func The method body. - * @param[in] arity The number of parameters. See @ref defmethod. - * @note There are in fact 18 different prototypes for func. - * @see ::ruby::backward::cxxanyargs::define_method::rb_define_method_id - */ -void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(ANYARGS), int arity); - -/* vm_method.c */ - -/** - * Inserts a method entry that hides previous method definition of the given - * name. This is not a deletion of a method. Method of the same name defined - * in a parent class is kept invisible in this way. - * - * @param[out] mod The module to insert an undef. - * @param[in] mid Name of the undef. - * @exception rb_eTypeError `klass` is a non-module. - * @exception rb_eFrozenError `klass` is frozen. - * @exception rb_eNameError No such method named `klass#name`. - * @post `klass#name` is undefined. - * @see rb_undef_method - * - * @internal - * - * @shyouhei doesn't understand why this is not the ::ID -taking variant of - * rb_undef_method(), given rb_remove_method() has its ::ID -taking counterpart - * named rb_remove_method_id(). - */ -void rb_undef(VALUE mod, ID mid); - -/* class.c */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_define_method(), except it defines a protected method. - * - * @param[out] klass A module or a class. - * @param[in] mid Name of the function. - * @param[in] func The method body. - * @param[in] arity The number of parameters. See @ref defmethod. - * @note There are in fact 18 different prototypes for func. - * @see ::ruby::backward::cxxanyargs::define_method::rb_define_protected_method - */ -void rb_define_protected_method(VALUE klass, const char *mid, VALUE (*func)(ANYARGS), int arity); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_define_method(), except it defines a private method. - * - * @param[out] klass A module or a class. - * @param[in] mid Name of the function. - * @param[in] func The method body. - * @param[in] arity The number of parameters. See @ref defmethod. - * @note There are in fact 18 different prototypes for func. - * @see ::ruby::backward::cxxanyargs::define_method::rb_define_protected_method - */ -void rb_define_private_method(VALUE klass, const char *mid, VALUE (*func)(ANYARGS), int arity); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_define_method(), except it defines a singleton method. - * - * @param[out] obj Arbitrary ruby object. - * @param[in] mid Name of the function. - * @param[in] func The method body. - * @param[in] arity The number of parameters. See @ref defmethod. - * @note There are in fact 18 different prototypes for func. - * @see ::ruby::backward::cxxanyargs::define_method::rb_define_singleton_method - */ -void rb_define_singleton_method(VALUE obj, const char *mid, VALUE(*func)(ANYARGS), int arity); - -/** - * Finds or creates the singleton class of the passed object. - * - * @param[out] obj Arbitrary ruby object. - * @exception rb_eTypeError `obj` cannot have its singleton class. - * @return A (possibly newly allocated) instance of ::rb_cClass. - * @post `obj` has its singleton class, which is the return value. - * @post In case `obj` is a class, the returned singleton class also has - * its own singleton class in order to keep consistency of the - * inheritance structure of metaclasses. - * @note A new singleton class will be created if `obj` did not have - * one. - * @note The singleton classes for ::RUBY_Qnil, ::RUBY_Qtrue, and - * ::RUBY_Qfalse are ::rb_cNilClass, ::rb_cTrueClass, and - * ::rb_cFalseClass respectively. - * - * @internal - * - * You can _create_ a singleton class of a frozen object. Intentional or ...? - * - * Nowadays there are wider range of objects who cannot have singleton classes - * than before. For instance some string instances cannot for some reason. - */ -VALUE rb_singleton_class(VALUE obj); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_CLASS_H */ diff --git a/libs/libruby/ruby/internal/intern/compar.h b/libs/libruby/ruby/internal/intern/compar.h deleted file mode 100644 index dc3b377..0000000 --- a/libs/libruby/ruby/internal/intern/compar.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef RBIMPL_INTERN_COMPAR_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_COMPAR_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_mComparable. - */ -#include "ruby/internal/attr/cold.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* bignum.c */ - -/** - * Canonicalises the passed `val`, which is the return value of `a <=> b`, into - * C's `{-1, 0, 1}`. This can be handy when you implement a callback function - * to pass to `qsort(3)` etc. - * - * @param[in] val Return value of a space ship operator. - * @param[in] a Comparison LHS. - * @param[in] b Comparison RHS. - * @exception rb_eArgError `a` and `b` are not comparable each other. - * @retval -1 `val` is less than zero. - * @retval 0 `val` is equal to zero. - * @retval 1 `val` is greater than zero. - */ -int rb_cmpint(VALUE val, VALUE a, VALUE b); - -/* compar.c */ - -RBIMPL_ATTR_COLD() -RBIMPL_ATTR_NORETURN() -/** - * Raises "comparison failed" error. - * - * @param[in] a Comparison LHS. - * @param[in] b Comparison RHS. - * @exception rb_eArgError `a` and `b` are not comparable each other. - */ -void rb_cmperr(VALUE a, VALUE b); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_COMPAR_H */ diff --git a/libs/libruby/ruby/internal/intern/complex.h b/libs/libruby/ruby/internal/intern/complex.h deleted file mode 100644 index e111bd8..0000000 --- a/libs/libruby/ruby/internal/intern/complex.h +++ /dev/null @@ -1,253 +0,0 @@ -#ifndef RBIMPL_INTERN_COMPLEX_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_COMPLEX_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cComplex. - */ -#include "ruby/internal/attr/deprecated.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/arithmetic/long.h" /* INT2FIX is here. */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* complex.c */ - -/** - * Identical to rb_complex_new(), except it assumes both arguments are not - * instances of ::rb_cComplex. It is thus dangerous for extension libraries. - * - * @param[in] real Real part, in any numeric except Complex. - * @param[in] imag Imaginary part, in any numeric except Complex. - * @return An instance of ::rb_cComplex whose value is `real + (imag)i`. - */ -VALUE rb_complex_raw(VALUE real, VALUE imag); - -/** - * Shorthand of `x+0i`. It practically converts `x` into a Complex of the - * identical value. - * - * @param[in] x Any numeric except Complex. - * @return An instance of ::rb_cComplex, whose value is `x + 0i`. - */ -#define rb_complex_raw1(x) rb_complex_raw((x), INT2FIX(0)) - -/** @alias{rb_complex_raw} */ -#define rb_complex_raw2(x,y) rb_complex_raw((x), (y)) - -/** - * Constructs a Complex, by first multiplying the imaginary part with `1i` then - * adds it to the real part. This definition doesn't need both arguments be - * real numbers. It can happily combine two instances of ::rb_cComplex (with - * rotating the latter one). - * - * @param[in] real An instance of ::rb_cNumeric. - * @param[in] imag Another instance of ::rb_cNumeric. - * @return An instance of ::rb_cComplex whose value is `imag * 1i + real`. - */ -VALUE rb_complex_new(VALUE real, VALUE imag); - -/** - * Shorthand of `x+0i`. It practically converts `x` into a Complex of the - * identical value. - * - * @param[in] x Any numeric value. - * @return An instance of ::rb_cComplex, whose value is `x + 0i`. - */ -#define rb_complex_new1(x) rb_complex_new((x), INT2FIX(0)) - -/** @alias{rb_complex_new} */ -#define rb_complex_new2(x,y) rb_complex_new((x), (y)) - -/** - * Constructs a Complex using polar representations. Unlike rb_complex_new() - * it makes no sense to pass non-real instances to this function. - * - * @param[in] abs Magnitude, in any numeric except Complex. - * @param[in] arg Angle, in radians, in any numeric except Complex. - * @return An instance of ::rb_cComplex which denotes the given polar - * coordinates. - */ -VALUE rb_complex_new_polar(VALUE abs, VALUE arg); - -RBIMPL_ATTR_DEPRECATED(("by: rb_complex_new_polar")) -/** @old{rb_complex_new_polar} */ -VALUE rb_complex_polar(VALUE abs, VALUE arg); - -RBIMPL_ATTR_PURE() -/** - * Queries the real part of the passed Complex. - * - * @param[in] z An instance of ::rb_cComplex. - * @return Its real part, which is an instance of ::rb_cNumeric. - */ -VALUE rb_complex_real(VALUE z); - -RBIMPL_ATTR_PURE() -/** - * Queries the imaginary part of the passed Complex. - * - * @param[in] z An instance of ::rb_cComplex. - * @return Its imaginary part, which is an instance of ::rb_cNumeric. - */ -VALUE rb_complex_imag(VALUE z); - -/** - * Performs addition of the passed two objects. - * - * @param[in] x An instance of ::rb_cComplex. - * @param[in] y Arbitrary ruby object. - * @return What `x + y` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_complex_plus(VALUE x, VALUE y); - -/** - * Performs subtraction of the passed two objects. - * - * @param[in] x An instance of ::rb_cComplex. - * @param[in] y Arbitrary ruby object. - * @return What `x - y` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_complex_minus(VALUE x, VALUE y); - -/** - * Performs multiplication of the passed two objects. - * - * @param[in] x An instance of ::rb_cComplex. - * @param[in] y Arbitrary ruby object. - * @return What `x * y` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_complex_mul(VALUE x, VALUE y); - -/** - * Performs division of the passed two objects. - * - * @param[in] x An instance of ::rb_cComplex. - * @param[in] y Arbitrary ruby object. - * @return What `x / y` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_complex_div(VALUE x, VALUE y); - -/** - * Performs negation of the passed object. - * - * @param[in] z An instance of ::rb_cComplex. - * @return What `-z` evaluates to. - */ -VALUE rb_complex_uminus(VALUE z); - -/** - * Performs complex conjugation of the passed object. - * - * @param[in] z An instance of ::rb_cComplex. - * @return Its complex conjugate, in ::rb_cComplex. - */ -VALUE rb_complex_conjugate(VALUE z); - -/** - * Queries the absolute (or the magnitude) of the passed object. - * - * @param[in] z An instance of ::rb_cComplex. - * @return Its magnitude, in ::rb_cFloat. - */ -VALUE rb_complex_abs(VALUE z); - -/** - * Queries the argument (or the angle) of the passed object. - * - * @param[in] z An instance of ::rb_cComplex. - * @return Its magnitude, in ::rb_cFloat. - */ -VALUE rb_complex_arg(VALUE z); - -/** - * Performs exponentiation of the passed two objects. - * - * @param[in] base An instance of ::rb_cComplex. - * @param[in] exp Arbitrary ruby object. - * @return What `base ** exp` evaluates to. - * @see rb_num_coerce_bin() - */ -VALUE rb_complex_pow(VALUE base, VALUE exp); - -/** - * Identical to rb_complex_new(), except it takes the arguments as C's double - * instead of Ruby's object. - * - * @param[in] real Real part. - * @param[in] imag Imaginary part. - * @return An instance of ::rb_cComplex whose value is `real + (imag)i`. - */ -VALUE rb_dbl_complex_new(double real, double imag); - -/** @alias{rb_complex_plus} */ -#define rb_complex_add rb_complex_plus - -/** @alias{rb_complex_minus} */ -#define rb_complex_sub rb_complex_minus - -/** @alias{rb_complex_uminus} */ -#define rb_complex_nagate rb_complex_uminus - -/** - * Converts various values into a Complex. This function accepts: - * - * - Instances of ::rb_cComplex (taken as-is), - * - Instances of ::rb_cNumeric (adds `0i`), - * - Instances of ::rb_cString (parses), - * - Other objects that respond to `#to_c`. - * - * It (possibly recursively) applies `#to_c` until both sides become a Complex - * value, then computes `imag * 1i + real`. - * - * As a special case, passing ::RUBY_Qundef to `imag` is the same as passing - * `RB_INT2NUM(0)`. - * - * @param[in] real Real part (see above). - * @param[in] imag Imaginary part (see above). - * @exception rb_eTypeError Passed something not described above. - * @return An instance of ::rb_cComplex whose value is `1i * imag + real`. - * - * @internal - * - * This was the implementation of `Kernel#Complex` before, but they diverged. - */ -VALUE rb_Complex(VALUE real, VALUE imag); - -/** - * Shorthand of `x+0i`. It practically converts `x` into a Complex of the - * identical value. - * - * @param[in] x ::rb_cNumeric, ::rb_cString, or something that responds to - * `#to_c`. - * @return An instance of ::rb_cComplex, whose value is `x + 0i`. - */ -#define rb_Complex1(x) rb_Complex((x), INT2FIX(0)) - -/** @alias{rb_Complex} */ -#define rb_Complex2(x,y) rb_Complex((x), (y)) - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_COMPLEX_H */ diff --git a/libs/libruby/ruby/internal/intern/cont.h b/libs/libruby/ruby/internal/intern/cont.h deleted file mode 100644 index 32647f4..0000000 --- a/libs/libruby/ruby/internal/intern/cont.h +++ /dev/null @@ -1,282 +0,0 @@ -#ifndef RBIMPL_INTERN_CONT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_CONT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to rb_cFiber. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/iterator.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* cont.c */ - -/** - * Creates a Fiber instance from a C-backended block. - * - * @param[in] func A function, to become the fiber's body. - * @param[in] callback_obj Passed as-is to `func`. - * @return An allocated new instance of rb_cFiber, which is ready to be - * "resume"d. - */ -VALUE rb_fiber_new(rb_block_call_func_t func, VALUE callback_obj); - -/** - * Creates a Fiber instance from a C-backended block with the specified - * storage. - * - * If the given storage is Qundef or Qtrue, this function is equivalent to - * rb_fiber_new() which inherits storage from the current fiber. - * - * Specifying Qtrue is experimental and may be changed in the future. - * - * If the given storage is Qnil, this function will lazy initialize the - * internal storage which starts of empty (without any inheritance). - * - * Otherwise, the given storage is used as the internal storage. - * - * @param[in] func A function, to become the fiber's body. - * @param[in] callback_obj Passed as-is to `func`. - * @param[in] storage The way to set up the storage for the fiber. - * @return An allocated new instance of rb_cFiber, which is ready to be - * "resume"d. - */ -VALUE rb_fiber_new_storage(rb_block_call_func_t func, VALUE callback_obj, VALUE storage); - -/** - * Queries the fiber which is calling this function. Any ruby execution - * context has its fiber, either explicitly or implicitly. - * - * @return The current fiber. - */ -VALUE rb_fiber_current(void); - -/** - * Queries the liveness of the passed fiber. "Alive" in this context means - * that the fiber can still be resumed. Once it reaches is its end of - * execution, this function returns ::RUBY_Qfalse. - * - * @param[in] fiber A target fiber. - * @retval RUBY_Qtrue It is. - * @retval RUBY_Qfalse It isn't. - */ -VALUE rb_fiber_alive_p(VALUE fiber); - -/** - * Queries if an object is a fiber. - * - * @param[in] obj Arbitrary ruby object. - * @retval RUBY_Qtrue It is. - * @retval RUBY_Qfalse It isn't. - */ -VALUE rb_obj_is_fiber(VALUE obj); - -/** - * Resumes the execution of the passed fiber, either from the point at which - * the last rb_fiber_yield() was called if any, or at the beginning of the - * fiber body if it is the first call to this function. - * - * Other arguments are passed into the fiber's body, either as return values of - * rb_fiber_yield() in case it switches to there, or as the block parameter of - * the fiber body if it switches to the beginning of the fiber. - * - * The return value of this function is either the value passed to previous - * rb_fiber_yield() call, or the ultimate evaluated value of the entire fiber - * body if the execution reaches the end of it. - * - * When an exception happens inside of a fiber it propagates to this function. - * - * ```ruby - * f = Fiber.new do |i| - * puts " =>> #{i}" - * puts " <-- #{i + 1}" - * j = Fiber.yield(i + 1) - * puts " =>> #{j}" - * puts " <-- #{j + 1}" - * next j + 1 - * end - * - * puts "[a] <-- 1" - * p = f.resume(1) - * puts "[b] =>> #{p}" - * puts "[c] <-- #{p + 1}" - * q = f.resume(p + 1) - * puts "[d] =>> #{q}" - * ``` - * - * Above program executes in `[a] [b] [c] [d]`. - * - * @param[out] fiber The fiber to resume. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Passed (somehow) to `fiber`. - * @exception rb_eFiberError `fib` is terminated etc. - * @exception rb_eException Any exceptions happen in `fiber`. - * @return (See above) - * @note This function _does_ return. - * - * @internal - * - * @shyouhei expected this function to raise ::rb_eFrozenError for frozen - * fibers but it doesn't in practice. Intentional or ...? - */ -VALUE rb_fiber_resume(VALUE fiber, int argc, const VALUE *argv); - -/** - * Identical to rb_fiber_resume(), except you can specify how to handle the - * last element of the given array. - * - * @param[out] fiber The fiber to resume. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Passed (somehow) to `fiber`. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eFiberError `fiber` is terminated etc. - * @exception rb_eException Any exceptions happen in `fiber`. - * @return Either what was yielded or the last value of the fiber body. - */ -VALUE rb_fiber_resume_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat); - -/** - * Yields the control back to the point where the current fiber was resumed. - * The passed objects would be the return value of rb_fiber_resume(). This - * fiber then suspends its execution until next time it is resumed. - * - * This function can also raise arbitrary exceptions injected from outside of - * the fiber using rb_fiber_raise(). - * - * ```ruby - * exc = Class.new Exception - * - * f = Fiber.new do - * Fiber.yield - * rescue exc => e - * puts e.message - * end - * - * f.resume - * f.raise exc, "Hi!" - * ``` - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Passed to rb_fiber_resume(). - * @exception rb_eException (See above) - * @return (See rb_fiber_resume() for details) - */ -VALUE rb_fiber_yield(int argc, const VALUE *argv); - -/** - * Identical to rb_fiber_yield(), except you can specify how to handle the last - * element of the given array. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Passed to rb_fiber_resume(). - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eException What was raised using `Fiber#raise`. - * @return (See rb_fiber_resume() for details) - */ -VALUE rb_fiber_yield_kw(int argc, const VALUE *argv, int kw_splat); - -/** - * Transfers control to another fiber, resuming it from where it last stopped - * or starting it if it was not resumed before. The calling fiber will be - * suspended much like in a call to rb_fiber_yield(). - * - * The fiber which receives the transfer call treats it much like a resume - * call. Arguments passed to transfer are treated like those passed to resume. - * - * The two style of control passing to and from fiber (one is rb_fiber_resume() - * and rb_fiber_yield(), another is rb_fiber_transfer() to and from fiber) - * can't be freely mixed. - * - * - If the Fiber's lifecycle had started with transfer, it will never be - * able to yield or be resumed control passing, only finish or transfer - * back. (It still can resume other fibers that are allowed to be - * resumed.) - * - * - If the Fiber's lifecycle had started with resume, it can yield or - * transfer to another Fiber, but can receive control back only the way - * compatible with the way it was given away: if it had transferred, it - * only can be transferred back, and if it had yielded, it only can be - * resumed back. After that, it again can transfer or yield. - * - * If those rules are broken, rb_eFiberError is raised. - * - * For an individual Fiber design, yield/resume is easier to use (the Fiber - * just gives away control, it doesn't need to think about who the control is - * given to), while transfer is more flexible for complex cases, allowing to - * build arbitrary graphs of Fibers dependent on each other. - * - * @param[out] fiber Explicit control destination. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Passed to rb_fiber_resume(). - * @exception rb_eFiberError (See above) - * @exception rb_eException What was raised using `Fiber#raise`. - * @return (See rb_fiber_resume() for details) - */ -VALUE rb_fiber_transfer(VALUE fiber, int argc, const VALUE *argv); - -/** - * Identical to rb_fiber_transfer(), except you can specify how to handle the - * last element of the given array. - * - * @param[out] fiber Explicit control destination. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Passed to rb_fiber_resume(). - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eFiberError (See above) - * @exception rb_eException What was raised using `Fiber#raise`. - * @return (See rb_fiber_resume() for details) - */ -VALUE rb_fiber_transfer_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat); - -/** - * Identical to rb_fiber_resume() but instead of resuming normal execution of - * the passed fiber, it raises the given exception in it. From inside of the - * fiber this would be seen as if rb_fiber_yield() raised. - * - * This function does return in case the passed fiber gracefully handled the - * passed exception. But if it does not, the raised exception propagates out - * of the passed fiber; this function then does not return. - * - * Parameters are passed to rb_make_exception() to create an exception object. - * See its document for what are allowed here. - * - * It is a failure to call this function against a fiber which is resuming, - * have never run yet, or has already finished running. - * - * @param[out] fiber Where exception is raised. - * @param[in] argc Passed as-is to rb_make_exception(). - * @param[in] argv Passed as-is to rb_make_exception(). - * @exception rb_eFiberError `fiber` is terminated etc. - * @return (See rb_fiber_resume() for details) - */ -VALUE rb_fiber_raise(VALUE fiber, int argc, const VALUE *argv); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_CONT_H */ diff --git a/libs/libruby/ruby/internal/intern/dir.h b/libs/libruby/ruby/internal/intern/dir.h deleted file mode 100644 index da1873e..0000000 --- a/libs/libruby/ruby/internal/intern/dir.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef RBIMPL_INTERN_DIR_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_DIR_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cDir. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* dir.c */ - -/** - * Queries the path of the current working directory of the current process. - * - * @return An instance of ::rb_cString that holds the working directory. - * @note The returned string is in "filesystem" encoding. Most notably on - * Linux this is an alias of default external encoding. Most notably - * on Windows it can be an alias of OS codepage. - */ -VALUE rb_dir_getwd(void); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_DIR_H */ diff --git a/libs/libruby/ruby/internal/intern/enum.h b/libs/libruby/ruby/internal/intern/enum.h deleted file mode 100644 index 215ad82..0000000 --- a/libs/libruby/ruby/internal/intern/enum.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef RBIMPL_INTERN_ENUM_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_ENUM_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_mEnumerable. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* enum.c */ - -/** - * Basically identical to rb_ary_new_form_values(), except it returns something - * different when `argc` < 2. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arbitrary objects. - * @retval RUBY_Qnil `argc` is zero. - * @retval argv[0] `argc` is one. - * @retval otherwise Otherwise. - * - * @internal - * - * What is this business? Well, this function is about `yield`'s taking - * multiple values. Consider following user-defined class: - * - * ```ruby - * class Foo - * include Enumerable - * - * def each - * yield :q, :w, :e, :r - * end - * end - * - * Foo.new.each_with_object([]) do |i, j| - * j << i # ^^^ <- What to expect for `i`? - * end - * ``` - * - * Here, `Foo#each_with_object` is in fact `Enumerable#each_with_object`, which - * doesn't know what would be yielded. Yet, it has to take a block of arity 2. - * This function is used here, to "pack" arbitrary number of yielded objects - * into one. - * - * If people want to implement their own `Enumerable#each_with_object` this API - * can be handy. Though @shyouhei suspects it is relatively rare for 3rd party - * extension libraries to have such things. Also `Enumerable#each_entry` is - * basically this function exposed as a Ruby method. - */ -VALUE rb_enum_values_pack(int argc, const VALUE *argv); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_ENUM_H */ diff --git a/libs/libruby/ruby/internal/intern/enumerator.h b/libs/libruby/ruby/internal/intern/enumerator.h deleted file mode 100644 index 20e5d7c..0000000 --- a/libs/libruby/ruby/internal/intern/enumerator.h +++ /dev/null @@ -1,259 +0,0 @@ -#ifndef RBIMPL_INTERN_ENUMERATOR_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_ENUMERATOR_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cEnumerator. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/intern/eval.h" /* rb_frame_this_func */ -#include "ruby/internal/iterator.h" /* rb_block_given_p */ -#include "ruby/internal/symbol.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * This is the type of functions that rb_enumeratorize_with_size() expects. In - * theory an enumerator can have indefinite number of elements, but in practice - * it often is the case we can compute the size of an enumerator beforehand. - * If your enumerator has such property, supply a function that calculates such - * values. - * - * @param[in] recv The original receiver of the enumerator. - * @param[in] argv Arguments passed to `Object#enum_for` etc. - * @param[in] eobj The enumerator object. - * @return The size of `eobj`, in ::rb_cNumeric, or ::RUBY_Qnil if the size - * is not known until we actually iterate. - */ -typedef VALUE rb_enumerator_size_func(VALUE recv, VALUE argv, VALUE eobj); - -/** - * Decomposed `Enumerator::ArithmeicSequence`. This is a subclass of - * ::rb_cEnumerator, which represents a sequence of numbers with common - * difference. Internal data structure of the class is opaque to users, but - * you can obtain a decomposed one using rb_arithmetic_sequence_extract(). - */ -typedef struct { - VALUE begin; /**< "Left" or "lowest" endpoint of the sequence. */ - VALUE end; /**< "Right" or "highest" endpoint of the sequence.*/ - VALUE step; /**< Step between a sequence. */ - int exclude_end; /**< Whether the endpoint is open or closed. */ -} rb_arithmetic_sequence_components_t; - -/* enumerator.c */ - -/** - * Constructs an enumerator. This roughly resembles `Object#enum_for`. - * - * @param[in] recv A receiver of `meth`. - * @param[in] meth Method ID in a symbol object. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arguments passed to `meth`. - * @exception rb_eTypeError `meth` is not an instance of ::rb_cSymbol. - * @return A new instance of ::rb_cEnumerator which, when yielded, - * enumerates by calling `meth` on `recv` with `argv`. - */ -VALUE rb_enumeratorize(VALUE recv, VALUE meth, int argc, const VALUE *argv); - -/** - * Identical to rb_enumeratorize(), except you can additionally specify the - * size function of return value. - * - * @param[in] recv A receiver of `meth`. - * @param[in] meth Method ID in a symbol object. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arguments passed to `meth`. - * @param[in] func Size calculator. - * @exception rb_eTypeError `meth` is not an instance of ::rb_cSymbol. - * @return A new instance of ::rb_cEnumerator which, when yielded, - * enumerates by calling `meth` on `recv` with `argv`. - * @note `func` can be zero, which means the size is unknown. - */ -VALUE rb_enumeratorize_with_size(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func); - -/** - * Identical to rb_enumeratorize_with_func(), except you can specify how to - * handle the last element of the given array. - * - * @param[in] recv A receiver of `meth`. - * @param[in] meth Method ID in a symbol object. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arguments passed to `meth`. - * @param[in] func Size calculator. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eTypeError `meth` is not an instance of ::rb_cSymbol. - * @return A new instance of ::rb_cEnumerator which, when yielded, - * enumerates by calling `meth` on `recv` with `argv`. - * @note `func` can be zero, which means the size is unknown. - */ -VALUE rb_enumeratorize_with_size_kw(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func, int kw_splat); - -RBIMPL_ATTR_NONNULL(()) -/** - * Extracts components of the passed arithmetic sequence. This can be seen as - * an extended version of rb_range_values(). - * - * @param[in] as Target instance of `Enumerator::ArithmericSequence`. - * @param[out] buf Decomposed results buffer. - * @return 0 `as` is not `Enumerator::ArithmericSequence`. - * @return 1 Success. - * @post `buf` is filled. - */ -int rb_arithmetic_sequence_extract(VALUE as, rb_arithmetic_sequence_components_t *buf); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_range_beg_len(), except it takes an instance of - * `Enumerator::ArithmericSequence`. - * - * @param[in] as An `Enumerator::ArithmericSequence` instance. - * @param[out] begp Return value buffer. - * @param[out] lenp Return value buffer. - * @param[out] stepp Return value buffer. - * @param[in] len Updated length. - * @param[in] err In case `len` is out of range... - * - `0`: returns ::RUBY_Qnil. - * - `1`: raises ::rb_eRangeError. - * - `2`: `beg` and `len` expanded accordingly. - * @exception rb_eRangeError `as` cannot fit into `long`. - * @retval RUBY_Qfalse `as` is not `Enumerator::ArithmericSequence`. - * @retval RUBY_Qnil `len` is out of `as` but `err` is zero. - * @retval RUBY_Qtrue Otherwise. - * @post `beg` is the (possibly updated) left endpoint. - * @post `len` is the (possibly updated) length of the range. - * - * @internal - * - * Currently no 3rd party applications of this function is found. But that can - * be because this function is relatively new. - */ -VALUE rb_arithmetic_sequence_beg_len_step(VALUE as, long *begp, long *lenp, long *stepp, long len, int err); - -RBIMPL_SYMBOL_EXPORT_END() - -/** @cond INTERNAL_MACRO */ -#ifndef RUBY_EXPORT -# define rb_enumeratorize_with_size(obj, id, argc, argv, size_fn) \ - rb_enumeratorize_with_size(obj, id, argc, argv, (rb_enumerator_size_func *)(size_fn)) -# define rb_enumeratorize_with_size_kw(obj, id, argc, argv, size_fn, kw_splat) \ - rb_enumeratorize_with_size_kw(obj, id, argc, argv, (rb_enumerator_size_func *)(size_fn), kw_splat) -#endif -/** @endcond */ - -/** - * This is an implementation detail of #RETURN_SIZED_ENUMERATOR(). You could - * use it directly, but can hardly be handy. - * - * @param[in] obj A receiver. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arguments passed to the current method. - * @param[in] size_fn Size calculator. - * @return A new instance of ::rb_cEnumerator which, when yielded, - * enumerates by calling the current method on `recv` with `argv`. - */ -#define SIZED_ENUMERATOR(obj, argc, argv, size_fn) \ - rb_enumeratorize_with_size((obj), ID2SYM(rb_frame_this_func()), \ - (argc), (argv), (size_fn)) - -/** - * This is an implementation detail of #RETURN_SIZED_ENUMERATOR_KW(). You - * could use it directly, but can hardly be handy. - * - * @param[in] obj A receiver. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arguments passed to the current method. - * @param[in] size_fn Size calculator. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @return A new instance of ::rb_cEnumerator which, when yielded, - * enumerates by calling the current method on `recv` with `argv`. - */ -#define SIZED_ENUMERATOR_KW(obj, argc, argv, size_fn, kw_splat) \ - rb_enumeratorize_with_size_kw((obj), ID2SYM(rb_frame_this_func()), \ - (argc), (argv), (size_fn), (kw_splat)) - -/** - * This roughly resembles `return enum_for(__callee__) unless block_given?`. - * - * @param[in] obj A receiver. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arguments passed to the current method. - * @param[in] size_fn Size calculator. - * @note This macro may return inside. - */ -#define RETURN_SIZED_ENUMERATOR(obj, argc, argv, size_fn) do { \ - if (!rb_block_given_p()) \ - return SIZED_ENUMERATOR(obj, argc, argv, size_fn); \ - } while (0) - - -/** - * Identical to #RETURN_SIZED_ENUMERATOR(), except you can specify how to - * handle the last element of the given array. - * - * @param[in] obj A receiver. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arguments passed to the current method. - * @param[in] size_fn Size calculator. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @note This macro may return inside. - */ -#define RETURN_SIZED_ENUMERATOR_KW(obj, argc, argv, size_fn, kw_splat) do { \ - if (!rb_block_given_p()) \ - return SIZED_ENUMERATOR_KW(obj, argc, argv, size_fn, kw_splat); \ - } while (0) - -/** - * Identical to #RETURN_SIZED_ENUMERATOR(), except its size is unknown. - * - * @param[in] obj A receiver. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arguments passed to the current method. - * @note This macro may return inside. - */ -#define RETURN_ENUMERATOR(obj, argc, argv) \ - RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0) - -/** - * Identical to #RETURN_SIZED_ENUMERATOR_KW(), except its size is unknown. It - * can also be seen as a routine identical to #RETURN_ENUMERATOR(), except you - * can specify how to handle the last element of the given array. - * - * @param[in] obj A receiver. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arguments passed to the current method. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @note This macro may return inside. - */ -#define RETURN_ENUMERATOR_KW(obj, argc, argv, kw_splat) \ - RETURN_SIZED_ENUMERATOR_KW(obj, argc, argv, 0, kw_splat) - -#endif /* RBIMPL_INTERN_ENUMERATOR_H */ diff --git a/libs/libruby/ruby/internal/intern/error.h b/libs/libruby/ruby/internal/intern/error.h deleted file mode 100644 index 9c153cb..0000000 --- a/libs/libruby/ruby/internal/intern/error.h +++ /dev/null @@ -1,287 +0,0 @@ -#ifndef RBIMPL_INTERN_ERROR_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_ERROR_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_eException. - */ -#include "ruby/internal/attr/format.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/fl_type.h" -#include "ruby/backward/2/assume.h" - -/** - * This macro is used in conjunction with rb_check_arity(). If you pass it to - * the function's last (max) argument, that means the function does not check - * upper limit. - */ -#define UNLIMITED_ARGUMENTS (-1) - -#define rb_exc_new2 rb_exc_new_cstr /**< @old{rb_exc_new_cstr} */ -#define rb_exc_new3 rb_exc_new_str /**< @old{rb_exc_new_str} */ - -/** @cond INTERNAL_MACRO */ -#define rb_check_arity rb_check_arity -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* error.c */ - -/** - * Creates an instance of the passed exception class. - * - * @param[in] etype A subclass of ::rb_eException. - * @param[in] ptr Buffer contains error message. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @exception rb_eTypeError `etype` is not a class. - * @exception rb_eArgError `len` is negative. - * @return An instance of `etype`. - * @pre At least `len` bytes of continuous memory region shall be - * accessible via `ptr`. - * - * @internal - * - * This function works for non-exception classes as well, as long as they take - * one string argument. - */ -VALUE rb_exc_new(VALUE etype, const char *ptr, long len); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_exc_new(), except it assumes the passed pointer is a pointer - * to a C string. - * - * @param[in] etype A subclass of ::rb_eException. - * @param[in] str A C string (becomes an error message). - * @exception rb_eTypeError `etype` is not a class. - * @return An instance of `etype`. - */ -VALUE rb_exc_new_cstr(VALUE etype, const char *str); - -/** - * Identical to rb_exc_new_cstr(), except it takes a Ruby's string instead of - * C's. - * - * @param[in] etype A subclass of ::rb_eException. - * @param[in] str An instance of ::rb_cString. - * @exception rb_eTypeError `etype` is not a class. - * @return An instance of `etype`. - */ -VALUE rb_exc_new_str(VALUE etype, VALUE str); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL((1)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2) -/** - * Raises an instance of ::rb_eLoadError. - * - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - * @exception rb_eLoadError Always raises this. - * @note It never returns. - * - * @internal - * - * Who needs this? Except ruby itself? - */ -void rb_loaderror(const char *fmt, ...); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3) -/** - * Identical to rb_loaderror(), except it additionally takes which file is - * unable to load. The path can be obtained later using `LoadError#path` of - * the raising exception. - * - * @param[in] path What failed. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - * @exception rb_eLoadError Always raises this. - * @note It never returns. - */ -void rb_loaderror_with_path(VALUE path, const char *fmt, ...); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3) -/** - * Raises an instance of ::rb_eNameError. The name can be obtained later using - * `NameError#name` of the raising exception. - * - * @param[in] name What failed. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - * @exception rb_eNameError Always raises this. - * @note It never returns. - */ -void rb_name_error(ID name, const char *fmt, ...); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3) -/** - * Identical to rb_name_error(), except it takes a ::VALUE instead of ::ID. - * - * @param[in] name What failed. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - * @exception rb_eNameError Always raises this. - * @note It never returns. - */ -void rb_name_error_str(VALUE name, const char *fmt, ...); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3) -/** - * Raises an instance of ::rb_eFrozenError. The object can be obtained later - * using `FrozenError#receiver` of the raising exception. - * - * @param[in] recv What is frozen. - * @param[in] fmt Format specifier string compatible with rb_sprintf(). - * @exception rb_eFrozenError Always raises this. - * @note It never returns. - * - * @internal - * - * Note however, that it is often not possible to inspect a frozen object, - * because the inspection itself could be forbidden by the frozen-ness. - */ -void rb_frozen_error_raise(VALUE recv, const char *fmt, ...); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL(()) -/** - * Honestly I don't understand the name, but it raises an instance of - * ::rb_eArgError. - * - * @param[in] str A message. - * @param[in] type Another message. - * @exception rb_eArgError Always raises this. - * @note It never returns. - */ -void rb_invalid_str(const char *str, const char *type); - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_frozen_error_raise(), except its raising exception has a - * message like "can't modify frozen /what/". - * - * @param[in] what What was frozen. - * @exception rb_eFrozenError Always raises this. - * @note It never returns. - */ -void rb_error_frozen(const char *what); - -RBIMPL_ATTR_NORETURN() -/** - * Identical to rb_error_frozen(), except it takes arbitrary Ruby object - * instead of C's string. - * - * @param[in] what What was frozen. - * @exception rb_eFrozenError Always raises this. - * @note It never returns. - */ -void rb_error_frozen_object(VALUE what); - -/** - * Queries if the passed object is frozen. - * - * @param[in] obj Target object to test frozen-ness. - * @exception rb_eFrozenError It is frozen. - * @post Upon successful return it is guaranteed _not_ frozen. - */ -void rb_check_frozen(VALUE obj); - -/** - * Ensures that the passed object can be `initialize_copy` relationship. When - * you implement your own one you would better call this at the right beginning - * of your implementation. - * - * @param[in] obj Destination object. - * @param[in] orig Source object. - * @exception rb_eFrozenError `obj` is frozen. - * @post Upon successful return obj is guaranteed safe to copy orig. - */ -void rb_check_copyable(VALUE obj, VALUE orig); - -RBIMPL_ATTR_NORETURN() -/** - * @private - * - * This is an implementation detail of rb_scan_args(). You don't have to - * bother. - * - * @pre `argc` is out of range of `min`..`max`, both inclusive. - * @param[in] argc Arbitrary integer. - * @param[in] min Minimum allowed `argc`. - * @param[in] max Maximum allowed `argc`. - * @exception rb_eArgError Always. - */ -MJIT_STATIC void rb_error_arity(int argc, int min, int max); - -RBIMPL_SYMBOL_EXPORT_END() - -/** - * @deprecated - * - * Does anyone use this? Remain not deleted for compatibility. - */ -#define rb_check_frozen_internal(obj) do { \ - VALUE frozen_obj = (obj); \ - if (RB_UNLIKELY(RB_OBJ_FROZEN(frozen_obj))) { \ - rb_error_frozen_object(frozen_obj); \ - } \ - } while (0) - -/** @alias{rb_check_frozen} */ -static inline void -rb_check_frozen_inline(VALUE obj) -{ - if (RB_UNLIKELY(RB_OBJ_FROZEN(obj))) { - rb_error_frozen_object(obj); - } -} - -/** @alias{rb_check_frozen} */ -#define rb_check_frozen rb_check_frozen_inline - -/** - * Ensures that the passed integer is in the passed range. When you can use - * rb_scan_args() that is preferred over this one (powerful, descriptive). But - * it can have its own application area. - * - * @param[in] argc Arbitrary integer. - * @param[in] min Minimum allowed `argv`. - * @param[in] max Maximum allowed `argv`, or `UNLIMITED_ARGUMENTS`. - * @exception rb_eArgError `argc` out of range. - * @return The passed `argc`. - * @post Upon successful return `argc` is in range of `min`..`max`, both - * inclusive. - */ -static inline int -rb_check_arity(int argc, int min, int max) -{ - if ((argc < min) || (max != UNLIMITED_ARGUMENTS && argc > max)) - rb_error_arity(argc, min, max); - return argc; -} - -#endif /* RBIMPL_INTERN_ERROR_H */ diff --git a/libs/libruby/ruby/internal/intern/eval.h b/libs/libruby/ruby/internal/intern/eval.h deleted file mode 100644 index 2230f7a..0000000 --- a/libs/libruby/ruby/internal/intern/eval.h +++ /dev/null @@ -1,222 +0,0 @@ -#ifndef RBIMPL_INTERN_EVAL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_EVAL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Pre-1.9 era evaluator APIs (now considered miscellaneous). - */ -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* eval.c */ -RBIMPL_ATTR_NORETURN() -/** - * Identical to rb_raise(), except it raises the passed exception instance as- - * is instead of creating new one. - * - * @param[in] exc An instance of a subclass of ::rb_eException. - * @exception exc What is passed. - * @exception rb_eTypeError `exc` is not an exception. - * @note It never returns. - * - * @internal - * - * Wellll actually, it can take more than what is described above. This - * function tries to call `exception` method of the passed object. If that - * function returns an exception object that is used instead. - */ -void rb_exc_raise(VALUE exc); - -RBIMPL_ATTR_NORETURN() -/** - * Identical to rb_fatal(), except it raises the passed exception instance as- - * is instead of creating new one. - * - * @param[in] exc An instance of a subclass of ::rb_eException. - * @exception exc What is passed. - * @note It never returns. - * - * @internal - * - * You know what...? Using this API you can make arbitrary exceptions, like - * `RuntimeError`, that doesn't interface with `rescue` clause. This is very - * confusing. - */ -void rb_exc_fatal(VALUE exc); - -/* process.c */ - -RBIMPL_ATTR_NORETURN() -/** - * Identical to rb_exit(), except how arguments are passed. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Contains at most one of the following: - * - ::RUBY_Qtrue - means `EXIT_SUCCESS`. - * - ::RUBY_Qfalse - means `EXIT_FAILURE`. - * - Numerical value - takes that value. - * @exception rb_eArgError Wrong `argc`. - * @exception rb_eSystemExit Exception representing the exit status. - * @note It never returns. - */ -VALUE rb_f_exit(int argc, const VALUE *argv); - -RBIMPL_ATTR_NORETURN() -/** - * This is similar to rb_f_exit(). In fact on some situation it internally - * calls rb_exit(). But can be very esoteric on occasions. - * - * It takes up to one argument. If an argument is passed, it tries to display - * that. Otherwise if there is `$!`, displays that exception instead. It - * finally raise ::rb_eSystemExit in both cases. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Contains at most one string-ish object. - * @exception rb_eArgError Wrong `argc`. - * @exception rb_eTypeError No conversion from `argv[0]` to String. - * @exception rb_eSystemExit Exception representing `EXIT_FAILURE`. - * @note It never returns. - */ -VALUE rb_f_abort(int argc, const VALUE *argv); - -/* eval.c*/ - -RBIMPL_ATTR_NORETURN() -/** - * Raises an instance of ::rb_eInterrupt. - * - * @exception rb_eInterrupt Always raises this exception. - * @note It never returns. - */ -void rb_interrupt(void); - -/** - * Queries the name of the Ruby level method that is calling this function. - * The "name" in this context is the one assigned to the function for the first - * time (note that methods can have multiple names via aliases). - * - * @retval 0 There is no method (e.g. toplevel context). - * @retval otherwise The name of the current method. - */ -ID rb_frame_this_func(void); - -RBIMPL_ATTR_NORETURN() -/** - * This function is to re-throw global escapes. Such global escapes include - * exceptions, `throw`, `break`, for example. - * - * It makes sense only when used in conjunction with "protect" series APIs - * e.g. rb_protect(), rb_load_protect(), rb_eval_string_protect(), etc. In - * case these functions experience global escapes, they fill their opaque - * `state` return buffer. You can ignore such escapes. But if you decide - * otherwise, you have to somehow escape globally again. This function is used - * for that purpose. - * - * @param[in] state Opaque state of execution. - * @note It never returns. - * - * @internal - * - * Though not a part of our public API, `state` is in fact an enum - * ruby_tag_type. You can see the potential values by looking at vm_core.h. - */ -void rb_jump_tag(int state); - -/** - * Calls `initialize` method of the passed object with the passed arguments. - * It also forwards the implicitly passed block to the method. - * - * @param[in] obj Receiver object. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Passed as-is to `obj.initialize`. - * @exception rb_eException Any exceptions happen inside. - */ -void rb_obj_call_init(VALUE obj, int argc, const VALUE *argv); - -/** - * Identical to rb_obj_call_init(), except you can specify how to handle the - * last element of the given array. - * - * @param[in] obj Receiver object. - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Passed as-is to `obj.initialize`. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eNoMethodError No such method. - * @exception rb_eException Any exceptions happen inside. - */ -void rb_obj_call_init_kw(VALUE, int, const VALUE*, int); - -/** - * Identical to rb_frame_this_func(), except it returns the named used to call - * the method. - * - * @retval 0 There is no method (e.g. toplevel context). - * @retval otherwise The name of the current method. - */ -ID rb_frame_callee(void); - -/** - * Constructs an exception object from the list of arguments, in a manner - * similar to Ruby's `raise`. This function can take: - * - * - No arguments at all, i.e. `argc == 0`. This is not a failure. It - * returns ::RUBY_Qnil then. - * - * - An object, which is an instance of ::rb_cString. In this case an - * instance of ::rb_eRuntimeError whose message is the passed string is - * created then returned. - * - * - An object, which responds to `exception` method, and optionally its - * argument, and optionally its backtrace. For example instances of - * subclasses of ::rb_eException have this method. What is returned from - * the method is returned. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv 0 up to 3 objects. - * @exception rb_eArgError Wrong `argc`. - * @exception rb_eTypeError `argv[0].exception` returned non-exception. - * @return An instance of a subclass of ::rb_eException. - * - * @internal - * - * Historically this was _the_ way `raise` converted its arguments to an - * exception. However they diverged. - */ -VALUE rb_make_exception(int argc, const VALUE *argv); - -/* eval_jump.c */ - -/** - * Registers a function that shall run on process exit. Registered functions - * run in reverse-chronological order, mixed with syntactic `END` block and - * `Kernel#at_exit`. - * - * @param[in] func Function to run at process exit. - * @param[in] arg Passed as-is to `func`. - */ -void rb_set_end_proc(void (*func)(VALUE arg), VALUE arg); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_EVAL_H */ diff --git a/libs/libruby/ruby/internal/intern/file.h b/libs/libruby/ruby/internal/intern/file.h deleted file mode 100644 index 79820fd..0000000 --- a/libs/libruby/ruby/internal/intern/file.h +++ /dev/null @@ -1,213 +0,0 @@ -#ifndef RBIMPL_INTERN_FILE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_FILE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cFile. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* file.c */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_file_expand_path(), except how arguments are passed. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Filename, and base directory, in that order. - * @exception rb_eArgError Wrong `argc`. - * @exception rb_eTypeError Non-string passed. - * @exception rb_eEncCompatError No conversion from arguments to a path. - * @return Expanded path. - * - * @internal - * - * It seems nobody actually uses this function right now. Maybe delete it? - */ -VALUE rb_file_s_expand_path(int argc, const VALUE *argv); - -/** - * Identical to rb_file_absolute_path(), except it additionally understands - * `~`. If a given pathname starts with `~someone/`, that part expands to the - * user's home directory (or that of current process' owner's in case of `~/`). - * - * @param[in] fname Relative file name. - * @param[in] dname Lookup base directory name, or in case - * ::RUBY_Qnil is passed the process' current - * working directory is assumed. - * @exception rb_eArgError Home directory is not absolute. - * @exception rb_eTypeError Non-string passed. - * @exception rb_eEncCompatError No conversion from arguments to a path. - * @return Expanded path. - */ -VALUE rb_file_expand_path(VALUE fname, VALUE dname); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_file_absolute_path(), except how arguments are passed. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Filename, and base directory, in that order. - * @exception rb_eArgError Wrong `argc`. - * @exception rb_eTypeError Non-string passed. - * @exception rb_eEncCompatError No conversion from arguments to a path. - * @return Expanded path. - * - * @internal - * - * It seems nobody actually uses this function right now. Maybe delete it? - */ -VALUE rb_file_s_absolute_path(int argc, const VALUE *argv); - -/** - * Maps a relative path to its absolute representation. Relative paths are - * referenced from the passed directory name, or from the process' current - * working directory in case ::RUBY_Qnil is passed. - * - * @param[in] fname Relative file name. - * @param[in] dname Lookup base directory name, or in case - * ::RUBY_Qnil is passed the process' current - * working directory is assumed. - * @exception rb_eArgError Strings contain NUL bytes. - * @exception rb_eTypeError Non-string passed. - * @exception rb_eEncCompatError No conversion from arguments to a path. - * @return Expanded path. - */ -VALUE rb_file_absolute_path(VALUE fname, VALUE dname); - -/** - * Strips a file path's last component (and trailing separators if any). This - * function is relatively simple on POSIX environments; just splits the input - * with `/`, strips the last one, if something remains joins them again, - * otherwise the return value is `"."`. However when it comes to Windows this - * function is quite very much complicated. We have to take UNC etc. into - * account. So for instance `"C:foo"`'s dirname is `"C:."`. - * - * @param[in] fname File name to strip. - * @exception rb_eTypeError `fname` is not a String. - * @exception rb_eArgError `fname` contains NUL bytes. - * @exception rb_eEncCompatError `fname`'s encoding is not path-compat. - * @return A dirname of `fname`. - * @note This is a "pure" operation; it computes the return value solely - * from the passed object and never does any file IO. - */ -VALUE rb_file_dirname(VALUE fname); - -RBIMPL_ATTR_NONNULL(()) -/** - * Resolves a feature's path. This function takes for instance `"json"` and - * `[".so", ".rb"]`, and iterates over the `$LOAD_PATH` to see if there is - * either `json.so` or `json.rb` in the directory. - * - * This is not what everything `require` does, but at least `require` is built - * on top of it. - * - * @param[in,out] feature File to search, and return buffer. - * @param[in] exts List of file extensions. - * @exception rb_eTypeError `feature` is not a String. - * @exception rb_eArgError `feature` contains NUL bytes. - * @exception rb_eEncCompatError `feature`'s encoding is not path-compat. - * @retval 0 Not found - * @retval otherwise Found index in `ext`, plus one. - * @post `*feature` is a resolved path. - */ -int rb_find_file_ext(VALUE *feature, const char *const *exts); - -/** - * Identical to rb_find_file_ext(), except it takes a feature name and is - * extension at once, e.g. `"json.rb"`. This difference is much like how - * `require` and `load` are different. - * - * @param[in] path A path relative to `$LOAD_PATH`. - * @exception rb_eTypeError `path` is not a String. - * @exception rb_eArgError `path` contains NUL bytes. - * @exception rb_eEncCompatError `path`'s encoding is not path-compat. - * @return Expanded path. - */ -VALUE rb_find_file(VALUE path); - -/** - * Queries if the given path is either a directory, or a symlink that - * (potentially recursively) points to such thing. - * - * @param[in] _ Ignored (why...?) - * @param[in] path String, or IO. In case of IO it issues - * `fstat(2)` instead of `stat(2)`. - * @exception rb_eFrozenError `path` is a frozen IO (why...?) - * @exception rb_eTypeError `path` is neither String nor IO. - * @exception rb_eArgError `path` contains NUL bytes. - * @exception rb_eEncCompatError `path`'s encoding is not path-compat. - * @retval RUBY_Qtrue `path` is a directory. - * @retval RUBY_Qfalse Otherwise. - */ -VALUE rb_file_directory_p(VALUE _, VALUE path); - -/** - * Converts a string into an "OS Path" encoding, if any. In most operating - * systems there are no such things like per-OS default encoding of filename. - * For them this function is no-op. However most notably on MacOS, pathnames - * are UTF-8 encoded. It converts the given string into such encoding. - * - * @param[in] path An instance of ::rb_cString. - * @exception rb_eEncCompatError `path`'s encoding is not path-compat. - * @return `path`'s contents converted to the OS' path encoding. - */ -VALUE rb_str_encode_ospath(VALUE path); - -RBIMPL_ATTR_NONNULL(()) -RBIMPL_ATTR_PURE() -/** - * Queries if the given path is an absolute path. On POSIX environments it is - * as easy as `path[0] == '/'`. However on Windows, drive letters and UNC - * paths are also taken into account. - * - * @param[in] path A possibly relative path string. - * @retval 1 `path` is absolute. - * @retval 0 `path` is relative. - */ -int rb_is_absolute_path(const char *path); - -/** - * Queries the file size of the given file. Because this function calls - * `fstat(2)` internally, it is a failure to pass a closed file to this - * function. - * - * This function flushes the passed file's buffer if any. Can take time. - * - * @param[in] file A file object. - * @exception rb_eFrozenError `file` is frozen. - * @exception rb_eIOError `file` is closed. - * @exception rb_eSystemCallError Permission denied etc. - * @exception rb_eNoMethodError The given non-file object doesn't respond - * to `#size`. - * @return The size of the passed file. - * @note Passing a non-regular file such as a UNIX domain socket to this - * function is not a failure. But the return value is - * unpredictable. POSIX's `` states that "the use of - * this field is unspecified" then. - */ -rb_off_t rb_file_size(VALUE file); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_FILE_H */ diff --git a/libs/libruby/ruby/internal/intern/gc.h b/libs/libruby/ruby/internal/intern/gc.h deleted file mode 100644 index 2ee1d25..0000000 --- a/libs/libruby/ruby/internal/intern/gc.h +++ /dev/null @@ -1,392 +0,0 @@ -#ifndef RBIMPL_INTERN_GC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_GC_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_mGC. - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include /* size_t */ -#endif - -#ifdef HAVE_SYS_TYPES_H -# include /* ssize_t */ -#endif - -#include "ruby/internal/attr/cold.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* gc.c */ - -RBIMPL_ATTR_COLD() -RBIMPL_ATTR_NORETURN() -/** - * Triggers out-of-memory error. If possible it raises ::rb_eNoMemError. But - * because we are running out of memory that is not always doable. This - * function tries hard to show something, but ultimately can die silently. - * - * @exception rb_eNoMemError Raises it if possible. - */ -void rb_memerror(void); - -RBIMPL_ATTR_PURE() -/** - * Queries if the GC is busy. - * - * @retval 0 It isn't. - * @retval 1 It is. - */ -int rb_during_gc(void); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Marks objects between the two pointers. This is one of the GC utility - * functions that you can call when you design your own - * ::rb_data_type_struct::dmark. - * - * @pre Continuous memory region from `start` to `end` shall be fully - * addressable. - * @param[out] start Pointer to an array of objects. - * @param[out] end Pointer that terminates the array of objects. - * @post Objects from `start` (included) to `end` (excluded) are marked. - * - * @internal - * - * `end` can be NULL... But that just results in no-op. - */ -void rb_gc_mark_locations(const VALUE *start, const VALUE *end); - -/** - * Identical to rb_mark_hash(), except it marks only values of the table and - * leave their associated keys unmarked. This is one of the GC utility - * functions that you can call when you design your own - * ::rb_data_type_struct::dmark. - * - * @warning Of course it can break GC. Leave it unused if unsure. - * @param[in] tbl A table to mark. - * @post Values stored in `tbl` are marked. - */ -void rb_mark_tbl(struct st_table *tbl); - -/** - * Identical to rb_mark_tbl(), except it marks objects using - * rb_gc_mark_movable(). This is one of the GC utility functions that you can - * call when you design your own ::rb_data_type_struct::dmark. - * - * @warning Of course it can break GC. Leave it unused if unsure. - * @param[in] tbl A table to mark. - * @post Values stored in `tbl` are marked. - */ -void rb_mark_tbl_no_pin(struct st_table *tbl); - -/** - * Identical to rb_mark_hash(), except it marks only keys of the table and - * leave their associated values unmarked. This is one of the GC utility - * functions that you can call when you design your own - * ::rb_data_type_struct::dmark. - * - * @warning Of course it can break GC. Leave it unused if unsure. - * @param[in] tbl A table to mark. - * @post Keys stored in `tbl` are marked. - */ -void rb_mark_set(struct st_table *tbl); - -/** - * Marks keys and values associated inside of the given table. This is one of - * the GC utility functions that you can call when you design your own - * ::rb_data_type_struct::dmark. - * - * @param[in] tbl A table to mark. - * @post Objects stored in `tbl` are marked. - */ -void rb_mark_hash(struct st_table *tbl); - -/** - * Updates references inside of tables. After you marked values using - * rb_mark_tbl_no_pin(), the objects inside of the table could of course be - * moved. This function is to fixup those references. You can call this from - * your ::rb_data_type_struct::dcompact. - * - * @param[out] ptr A table that potentially includes moved references. - * @post Moved references, if any, are corrected. - */ -void rb_gc_update_tbl_refs(st_table *ptr); - -/** - * Identical to rb_gc_mark(), except it allows the passed value be a - * non-object. For instance pointers to different type of memory regions are - * allowed here. Such values are silently ignored. This is one of the GC - * utility functions that you can call when you design your own - * ::rb_data_type_struct::dmark. - * - * @param[out] obj A possible object. - * @post `obj` is marked, if possible. - */ -void rb_gc_mark_maybe(VALUE obj); - -/** - * Marks an object. This is one of the GC utility functions that you can call - * when you design your own ::rb_data_type_struct::dmark. - * - * @param[out] obj Arbitrary Ruby object. - * @post `obj` is marked. - */ -void rb_gc_mark(VALUE obj); - -/** - * Maybe this is the only function provided for C extensions to control the - * pinning of objects, so let us describe it in detail. These days Ruby's GC - * is copying. As far as an object's physical address is guaranteed unused, it - * can move around the object space. Our GC engine rearranges these objects - * after it reclaims unreachable objects from our object space, so that the - * space is compact (improves memory locality). This is called the - * "compaction" phase, and works well most of the time... as far as there are - * no C extensions. C extensions complicate the scenario because Ruby core - * cannot detect any use of the physical address of an object inside of C - * functions. In order to prevent memory corruptions, objects observable from - * C extensions are "pinned"; they stick to where they are born until they die, - * just in case any C extensions touch their raw pointers. This variant of - * scheme is called "Mostly-Copying" garbage collector. Authors of C - * extensions, however, can extremely carefully write them to become - * compaction-aware. To do so avoid referring to a Ruby object from inside of - * your struct in the first place. But if that is not possible, use this - * function from your ::rb_data_type_struct::dmark then. This way objects - * marked using it are considered movable. If you chose this way you have to - * manually fix up locations of such moved pointers using rb_gc_location(). - * - * @see Bartlett, Joel F., "Compacting Garbage Collection with Ambiguous - * Roots", ACM SIGPLAN Lisp Pointers Volume 1 Issue 6 pp. 3-12, - * April-May-June, 1988. https://doi.org/10.1145/1317224.1317225 - * - * @param[in] obj Object that is movable. - * @post Values stored in `tbl` are marked. - */ -void rb_gc_mark_movable(VALUE obj); - -/** - * Finds a new "location" of an object. An object can be moved on compaction. - * This function projects its new abode, or just returns the passed object if - * not moved. This is one of the GC utility functions that you can call when - * you design your own ::rb_data_type_struct::dcompact. - * - * @param[in] obj An object, possibly already moved to somewhere else. - * @return An object, which holds the current contents of former `obj`. - */ -VALUE rb_gc_location(VALUE obj); - -/** - * Asserts that the passed object is no longer needed. Such objects are - * reclaimed sooner or later so this function is not mandatory. But sometimes - * you can know from your application knowledge that an object is surely dead - * at some point. Calling this as a hint can be a polite way. - * - * @param[out] obj Object, dead. - * @pre `obj` have never been passed to this function before. - * @post `obj` could be invalidated. - * @warning It is a failure to pass an object multiple times to this - * function. - * @deprecated This is now a no-op function. - */ -RBIMPL_ATTR_DEPRECATED(("this is now a no-op function")) -void rb_gc_force_recycle(VALUE obj); - -/** - * Triggers a GC process. This was the only GC entry point that we had at the - * beginning. Over time our GC evolved. Now what this function does is just a - * very simplified variation of the entire GC algorithms. A series of - * procedures kicked by this API is called a "full" GC. - * - * - It immediately scans the entire object space to sort the dead. - * - It immediately reclaims any single dead bodies to reuse later. - * - * It is worth noting that the procedures above do not include evaluations of - * finalisers. They run later. - * - * @internal - * - * Finalisers are deferred until we can handle interrupts. See - * `rb_postponed_job_flush` in vm_trace.c. - * - * Of course there are GC that are not "full". For instance this one and the - * GC which runs when we are running out of memory are different. See - * `gc_profile_record_flag` defined in gc.c for the kinds of GC. - * - * In spite of the name this is not what everything that a GC can trigger. As - * of writing it seems this function does not trigger compaction. But this - * might change in future. - */ -void rb_gc(void); - -/** - * Copy&paste an object's finaliser to another. This is one of the GC utility - * functions that you can call when you design your own `initialize_copy`, - * `initialize_dup`, `initialize_clone`. - * - * @param[out] dst Destination object. - * @param[in] src Source object. - * @post `dst` and `src` share the same finaliser. - * - * @internal - * - * But isn't it easier for you to call super, and let `Object#initialize_copy` - * call this function instead? - */ -void rb_gc_copy_finalizer(VALUE dst, VALUE src); - -/** - * (Re-) enables GC. This makes sense only after you called rb_gc_disable(). - * - * @retval RUBY_Qtrue GC was disabled before. - * @retval RUBY_Qfalse GC was enabled before. - * @post GC is enabled. - * - * @internal - * - * This is one of such exceptional functions that does not raise both Ruby - * exceptions and C++ exceptions. - */ -VALUE rb_gc_enable(void); - -/** - * Disables GC. This prevents automatic GC runs when the process is running - * out of memory. Such situations shall result in rb_memerror(). However this - * does not prevent users from manually invoking rb_gc(). That should work. - * People abused this by disabling GC at the beginning of an event loop, - * process events without GC overheads, then manually force reclaiming garbage - * at the bottom of the loop. However because our GC is now much smarter than - * just calling rb_gc(), this technique is proven to be sub-optimal these days. - * It is believed that there is currently practically no needs of this - * function. - * - * @retval RUBY_Qtrue GC was disabled before. - * @retval RUBY_Qfalse GC was enabled before. - * @post GC is disabled. - */ -VALUE rb_gc_disable(void); - -/** - * Identical to rb_gc(), except the return value. - * - * @return Always returns ::RUBY_Qnil. - */ -VALUE rb_gc_start(void); - -/** - * Assigns a finaliser for an object. Each objects can have objects (typically - * blocks) that run immediately after that object dies. They are called - * finalisers of an object. This function associates a finaliser object with a - * target object. - * - * @note Note that finalisers run _after_ the object they finalise dies. You - * cannot for instance call its methods. - * @note If your finaliser references the object it finalises that object - * loses any chance to become a garbage; effectively leaks memory until - * the end of the process. - * - * @param[in] obj Target to finalise. - * @param[in] block Something `call`able. - * @exception rb_eRuntimeError Somehow `obj` cannot have finalisers. - * @exception rb_eFrozenError `obj` is frozen. - * @exception rb_eArgError `block` doesn't respond to `call`. - * @return The passed `block`. - * @post `block` runs after `obj` dies. - */ -VALUE rb_define_finalizer(VALUE obj, VALUE block); - -/** - * Modifies the object so that it has no finalisers at all. This function is - * mainly provided for symmetry. No practical usages can be thought of. - * - * @param[out] obj Object to clear its finalisers. - * @exception rb_eFrozenError `obj` is frozen. - * @return The passed `obj`. - * @post `obj` has no finalisers. - * @note There is no way to undefine a specific part of many finalisers - * that `obj` could have. All you can do is to clear them all. - */ -VALUE rb_undefine_finalizer(VALUE obj); - -/** - * Identical to rb_gc_stat(), with "count" parameter. - * - * @return Lifetime total number of runs of GC. - */ -size_t rb_gc_count(void); - -/** - * Obtains various GC related profiles. The parameter can be either a Symbol - * or a Hash. If a Hash is passed, it is filled with everything currently - * available. If a Symbol is passed just that portion is returned. - * - * Possible variations of keys you can pass here change from version to - * version. You can get the list of known keys by passing an empty hash and - * let it be filled. - * - * @param[in,out] key_or_buf A Symbol, or a Hash. - * @exception rb_eTypeError Neither Symbol nor Hash. - * @exception rb_eFrozenError Frozen hash is passed. - * @return In case a Hash is passed it returns 0. Otherwise the - * profile value associated with the given key is returned. - * @post In case a Hash is passed it is filled with values. - */ -size_t rb_gc_stat(VALUE key_or_buf); - -/** - * Obtains various info regarding the most recent GC run. This includes for - * instance the reason of the GC. The parameter can be either a Symbol or a - * Hash. If a Hash is passed, it is filled with everything currently - * available. If a Symbol is passed just that portion is returned. - * - * Possible variations of keys you can pass here change from version to - * version. You can get the list of known keys by passing an empty hash and - * let it be filled. - * - * @param[in,out] key_or_buf A Symbol, or a Hash. - * @exception rb_eTypeError Neither Symbol nor Hash. - * @exception rb_eFrozenError Frozen hash is passed. - * @return In case a Hash is passed it returns that hash. Otherwise - * the profile value associated with the given key is returned. - * @post In case a Hash is passed it is filled with values. - */ -VALUE rb_gc_latest_gc_info(VALUE key_or_buf); - -/** - * Informs that there are external memory usages. Our GC runs when we are - * running out of memory. The amount of memory, however, can increase/decrease - * behind-the-scene. For instance DLLs can allocate memories using `mmap(2)` - * etc, which are opaque to us. Registering such external allocations using - * this function enables proper detection of how much memories an object used - * as a whole. That will trigger GCs more often than it would otherwise. You - * can also pass negative numbers here, to indicate that such external - * allocations are gone. - * - * @param[in] diff Amount of memory increased(+)/decreased(-). - */ -void rb_gc_adjust_memory_usage(ssize_t diff); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_GC_H */ diff --git a/libs/libruby/ruby/internal/intern/hash.h b/libs/libruby/ruby/internal/intern/hash.h deleted file mode 100644 index af8dfd5..0000000 --- a/libs/libruby/ruby/internal/intern/hash.h +++ /dev/null @@ -1,320 +0,0 @@ -#ifndef RBIMPL_INTERN_HASH_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_HASH_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cHash. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/st.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* hash.c */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_st_foreach(), except it raises exceptions when the callback - * function tampers the table during iterating over it. - * - * @param[in] st Table to iterate over. - * @param[in] func Callback function to apply. - * @param[in] arg Passed as-is to `func`. - * @exception rb_eRuntimeError `st` was tampered during iterating. - * - * @internal - * - * This is declared here because exceptions are Ruby level concept. - * - * This is in fact a very thin wrapper of rb_st_foreach_check(). - */ -void rb_st_foreach_safe(struct st_table *st, st_foreach_callback_func *func, st_data_t arg); - -/** @alias{rb_st_foreach_safe} */ -#define st_foreach_safe rb_st_foreach_safe - -/** - * Try converting an object to its hash representation using its `to_hash` - * method, if any. If there is no such thing, returns ::RUBY_Qnil. - * - * @param[in] obj Arbitrary ruby object to convert. - * @exception rb_eTypeError `obj.to_hash` returned something non-Hash. - * @retval RUBY_Qnil No conversion from `obj` to hash defined. - * @retval otherwise Converted hash representation of `obj`. - * @see rb_io_check_io - * @see rb_check_array_type - * @see rb_check_string_type - * - * @internal - * - * There is no rb_hash_to_hash() that analogous to rb_str_to_str(). - * Intentional or ...? - */ -VALUE rb_check_hash_type(VALUE obj); - -RBIMPL_ATTR_NONNULL(()) -/** - * Iterates over a hash. This basically does the same thing as - * rb_st_foreach(). But because the passed hash is a Ruby object, its keys and - * values are both Ruby objects. - * - * @param[in] hash An instance of ::rb_cHash to iterate over. - * @param[in] func Callback function to yield. - * @param[in] arg Passed as-is to `func`. - * @exception rb_eRuntimeError `hash` was tampered during iterating. - */ -void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, VALUE arg), VALUE arg); - -/** - * Calculates a message authentication code of the passed object. The return - * value is a very small integer used as an index of a key of a table. In - * order to calculate the value this function calls `#hash` method of the - * passed object. Ruby provides you a default implementation. But if you - * implement your class in C, that default implementation cannot know the - * underlying data structure. You must implement your own `#hash` method then, - * which must return an integer of uniform distribution in a sufficiently - * instant manner. - * - * @param[in] obj Arbitrary Ruby object. - * @exception rb_eTypeError `obj.hash` returned something non-Integer. - * @return A small integer. - * @note `#hash` can return very big integers, but they get truncated. - */ -VALUE rb_hash(VALUE obj); - -/** - * Creates a new, empty hash object. - * - * @return An allocated new instance of ::rb_cHash. - */ -VALUE rb_hash_new(void); - -/** - * Identical to rb_hash_new(), except it additionally specifies how many keys - * it is expected to contain. This way you can create a hash that is large enough - * for your need. For large hashes it means it won't need to be reallocated and - * rehashed as much, improving performance. - * - * @param[in] capa Designed capacity of the hash. - * @return An empty Hash, whose capacity is `capa`. - */ -VALUE rb_hash_new_capa(long capa); - -/** - * Duplicates a hash. - * - * @param[in] hash An instance of ::rb_cHash. - * @return An allocated new instance of ::rb_cHash, whose contents are - * a verbatim copy of from `hash`. - */ -VALUE rb_hash_dup(VALUE hash); - -/** @alias{rb_obj_freeze} */ -VALUE rb_hash_freeze(VALUE obj); - -/** - * Queries the given key in the given hash table. If there is the key in the - * hash, returns the value associated with the key. Otherwise it returns the - * "default" value (defined per hash table). - * - * @param[in] hash Hash table to look into. - * @param[in] key Hash key to look for. - * @return Either the value associated with the key, or the default one if - * absent. - */ -VALUE rb_hash_aref(VALUE hash, VALUE key); - -/** - * Identical to rb_hash_aref(), except it always returns ::RUBY_Qnil for - * misshits. - * - * @param[in] hash Hash table to look into. - * @param[in] key Hash key to look for. - * @return Either the value associated with the key, or ::RUBY_Qnil if - * absent. - * @note A hash can store ::RUBY_Qnil as an ordinary value. You cannot - * distinguish whether the key is missing, or just its associated - * value happens to be ::RUBY_Qnil, as far as you use this API. - */ -VALUE rb_hash_lookup(VALUE hash, VALUE key); - -/** - * Identical to rb_hash_lookup(), except you can specify what to return on - * misshits. This is much like 2-arguments version of `Hash#fetch`. - * - * ```CXX - * VALUE hash; - * VALUE key; - * VALUE tmp = rb_obj_alloc(rb_cObject); - * VALUE val = rb_hash_lookup2(hash, key, tmp); - * if (val == tmp) { - * printf("misshit"); - * } - * else { - * printf("hit"); - * } - * ``` - * - * @param[in] hash Hash table to look into. - * @param[in] key Hash key to look for. - * @param[in] def Default value. - * @retval def `hash` does not have `key`. - * @retval otherwise The value associated with `key`. - */ -VALUE rb_hash_lookup2(VALUE hash, VALUE key, VALUE def); - -/** - * Identical to rb_hash_lookup(), except it yields the (implicitly) passed - * block instead of returning ::RUBY_Qnil. - * - * @param[in] hash Hash table to look into. - * @param[in] key Hash key to look for. - * @exception rb_eKeyError No block given. - * @return Either the value associated with the key, or what the block - * evaluates to if absent. - */ -VALUE rb_hash_fetch(VALUE hash, VALUE key); - -/** - * Inserts or replaces ("upsert"s) the objects into the given hash table. This - * basically associates the given value with the given key. On duplicate key - * this function updates its associated value with the given one. Otherwise it - * inserts the association at the end of the table. - * - * @param[out] hash Target hash table to modify. - * @param[in] key Arbitrary Ruby object. - * @param[in] val A value to be associated with `key`. - * @exception rb_eFrozenError `hash` is frozen. - * @return The passed `val` - * @post `val` is associated with `key` in `hash`. - */ -VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val); - -/** - * Swipes everything out of the passed hash table. - * - * @param[out] hash Target to clear. - * @exception rb_eFrozenError `hash`is frozen. - * @return The passed `hash` - * @post `hash` has no contents. - */ -VALUE rb_hash_clear(VALUE hash); - -/** - * Deletes each entry for which the block returns a truthy value. If there is - * no block given, it returns an enumerator that does the thing. - * - * @param[out] hash Target hash to modify. - * @exception rb_eFrozenError `hash` is frozen. - * @retval hash The hash is modified. - * @retval otherwise An instance of ::rb_cEnumerator that does it. - */ -VALUE rb_hash_delete_if(VALUE hash); - -/** - * Deletes the passed key from the passed hash table, if any. - * - * @param[out] hash Target hash to modify. - * @param[in] key Key to delete. - * @retval RUBY_Qnil `hash` has no such key as `key`. - * @retval otherwise What was associated with `key`. - * @post `hash` has no such key as `key`. - */ -VALUE rb_hash_delete(VALUE hash, VALUE key); - -/** - * Inserts a list of key-value pairs into a hash table at once. It is - * semantically identical to repeatedly calling rb_hash_aset(), but can be - * faster than that. - * - * @param[in] argc Length of `argv`, must be even. - * @param[in] argv A list of key, value, key, value, ... - * @param[out] hash Target hash table to modify. - * @post `hash` has contents from `argv`. - * @note `argv` is allowed to be NULL as long as `argc` is zero. - * - * @internal - * - * What happens for duplicated keys? Well it silently discards older ones to - * accept the newest (rightmost) one. This behaviour also mimics repeated call - * of rb_hash_aset(). - */ -void rb_hash_bulk_insert(long argc, const VALUE *argv, VALUE hash); - -/** - * Type of callback functions to pass to rb_hash_update_by(). - * - * @param[in] newkey A key of the table. - * @param[in] oldkey Value associated with `key` in hash1. - * @param[in] value Value associated with `key` in hash2. - * @return Either one of the passed values to take. - */ -typedef VALUE rb_hash_update_func(VALUE newkey, VALUE oldkey, VALUE value); - -/** - * Destructively merges two hash tables into one. It resolves key conflicts by - * calling the passed function and take its return value. - * - * @param[out] hash1 Target hash to be modified. - * @param[in] hash2 A hash to merge into `hash1`. - * @param[in] func Conflict reconciler. - * @exception rb_eFrozenError `hash1` is frozen. - * @exception rb_eRuntimeError `hash2` is updated instead. - * @return The passed `hash1`. - * @post Contents of `hash2` is merged into `hash1`. - * @note You can pass zero to `func`. This means values from `hash2` - * are always taken. - */ -VALUE rb_hash_update_by(VALUE hash1, VALUE hash2, rb_hash_update_func *func); - -/* file.c */ - -/** - * This function is mysterious. What it does is not immediately obvious. Also - * what it does seems platform dependent. - * - * @param[in] path A local path. - * @retval 0 The "check" succeeded. - * @retval otherwise The "check" failed. - */ -int rb_path_check(const char *path); - -/* hash.c */ - -/** - * Destructively removes every environment variables of the running process. - * - * @return The `ENV` object. - * @post The process has no environment variables. - */ -VALUE rb_env_clear(void); - -/** - * Identical to #RHASH_SIZE(), except it returns the size in Ruby's integer - * instead of C's. - * - * @param[in] hash A hash object. - * @return The size of the hash. - */ -VALUE rb_hash_size(VALUE hash); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_HASH_H */ diff --git a/libs/libruby/ruby/internal/intern/io.h b/libs/libruby/ruby/internal/intern/io.h deleted file mode 100644 index 02c2497..0000000 --- a/libs/libruby/ruby/internal/intern/io.h +++ /dev/null @@ -1,661 +0,0 @@ -#ifndef RBIMPL_INTERN_IO_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_IO_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cIO. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* io.c */ - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define rb_defout rb_stdout - -/* string.c */ /* ...why? moved in commit de7161526014b781468cea5d84411e23be */ - -/** - * The field separator character for inputs, or the `$;`. This affects how - * `String#split` works. You can set this via the `-F` command line option. - * You can also assign arbitrary ruby objects programmatically, but it makes - * best sense for you to assign a regular expression here. - * - * @internal - * - * Tidbit: "fs" comes from AWK's `FS` variable. - */ -RUBY_EXTERN VALUE rb_fs; - -/* io.c */ /* ...why? given rb_fs is in string.c? */ - -/** - * The field separator character for outputs, or the `$,`. This affects how - * `Array#join` works. - * - * @deprecated Assigning anything other than ::RUBY_Qnil to this variable is - * deprecated. - */ -RUBY_EXTERN VALUE rb_output_fs; - -/** - * The record separator character for inputs, or the `$/`. This affects how - * `IO#gets` works. You can set this via the `-0` command line option. - * - * @deprecated Assigning anything other than ::RUBY_Qnil to this variable is - * deprecated. - * - * @internal - * - * Tidbit: "rs" comes from AWK's `RS` variable. - */ -RUBY_EXTERN VALUE rb_rs; - -/** - * This is the default value of ::rb_rs, i.e. `"\n"`. It seems it has always - * been just a newline string since the beginning. Not sure why C codes has to - * use this, given there is no way for ruby programs to interface. - * - * Also it has not been deprecated for unknown reasons. - */ -RUBY_EXTERN VALUE rb_default_rs; - -/** - * The record separator character for outputs, or the `$\`. This affects how - * `IO#print` works. - * - * @deprecated Assigning anything other than ::RUBY_Qnil to this variable is - * deprecated. - */ -RUBY_EXTERN VALUE rb_output_rs; - -/** - * Writes the given string to the given IO. - * - * @param[out] io An IO, opened for writing. - * @param[in] str A String-like object to write to `io`. - * @exception rb_eIOError `io` isn't opened for writing. - * @exception rb_eFrozenError `io` is frozen. - * @exception rb_eTypeError No conversion from `str` to String. - * @exception rb_eSystemCallError `write(2)` failed for some reason. - * @return The number of bytes written to the `io`. - * @post `str` (up to the length of return value) is written to `io`. - * @note This function blocks. - * @note Partial write is a thing. It must be at least questionable not - * to check the return value. - * - * @internal - * - * Above description is in fact inaccurate. This function can take arbitrary - * objects, and calls their `write` method. What is written above in fact - * describes how `IO#write` works. You can pass StringIO etc. here, and would - * work completely differently. - */ -VALUE rb_io_write(VALUE io, VALUE str); - -/** - * Reads a "line" from the given IO. A line here means a chunk of characters - * which is terminated by either `"\n"` or an EOF. - * - * @param[in,out] io An IO, opened for reading. - * @exception rb_eIOError `io` isn't opened for reading. - * @exception rb_eFrozenError `io` is frozen. - * @retval RUBY_Qnil `io` is at EOF. - * @retval otherwise An instance of ::rb_cString. - * @post `io` is read. - * @note Unlike `IO#gets` it doesn't set `$_`. - * @note Unlike `IO#gets` it doesn't consider `$/`. - */ -VALUE rb_io_gets(VALUE io); - -/** - * Reads a byte from the given IO. - * - * @note In Ruby a "byte" always means an 8 bit integer ranging from - * 0 to 255 inclusive. - * @param[in,out] io An IO, opened for reading. - * @exception rb_eIOError `io` is not opened for reading. - * @exception rb_eFrozenError `io` is frozen. - * @retval RUBY_Qnil `io` is at EOF. - * @retval otherwise An instance of ::rb_cInteger. - * @post `io` is read. - * - * @internal - * - * Of course there was a function called `rb_io_getc()`. It was removed in - * commit a25fbe3b3e531bbe479f344af24eaf9d2eeae6ea. - */ -VALUE rb_io_getbyte(VALUE io); - -/** - * "Unget"s a string. This function pushes back the passed string onto the - * passed IO, such that a subsequent buffered read will return it. If the - * passed content is in fact an integer, a single character string of that - * codepoint of the encoding of the IO will be pushed back instead. - * - * It might be counter-intuitive but this function can push back multiple - * characters at once. Also this function can be called multiple times on a - * same IO. Also a "character" can be wider than a byte, depending on the - * encoding of the IO. - * - * @param[out] io An IO, opened for reading. - * @param[in] c Either a String, or an Integer. - * @exception rb_eIOError `io` is not opened for reading. - * @exception rb_eFrozenError `io` is frozen. - * @exception rb_eTypeError No conversion from `c` to ::rb_cString. - * @return Always returns ::RUBY_Qnil. - * - * @internal - * - * Why there is ungetc, given there is no getc? - */ -VALUE rb_io_ungetc(VALUE io, VALUE c); - -/** - * Identical to rb_io_ungetc(), except it doesn't take the encoding of the - * passed IO into account. When an integer is passed, it just casts that value - * to C's `unsigned char`, and pushes that back. - * - * @param[out] io An IO, opened for reading. - * @param[in] b Either a String, or an Integer. - * @exception rb_eIOError `io` is not opened for reading. - * @exception rb_eFrozenError `io` is frozen. - * @exception rb_eTypeError No conversion from `b` to ::rb_cString. - * @return Always returns ::RUBY_Qnil. - */ -VALUE rb_io_ungetbyte(VALUE io, VALUE b); - -/** - * Closes the IO. Any buffered contents are flushed to the operating system. - * Any future operations against the IO would raise ::rb_eIOError. In case the - * io was created using `IO.popen`, it also sets the `$?`. - * - * @param[out] io Target IO to close. - * @return Always returns ::RUBY_Qnil. - * @post `$?` is set in case IO is a pipe. - * @post No operations are possible against `io` any further. - * @note This can block to flush the contents. - * @note This can wake other threads up, especially those who are - * `select()`-ing the passed IO. - * @note Multiple invocations of this function over the same IO again - * and again is not an error, since Ruby 2.3. - * - * @internal - * - * You can close a frozen IO... Is this intentional? - */ -VALUE rb_io_close(VALUE io); - -/** - * Flushes any buffered data within the passed IO to the underlying operating - * system. - * - * @param[out] io Target IO to flush. - * @exception rb_eIOError `io` is closed. - * @exception rb_eFrozenError `io` is frozen. - * @exception rb_eSystemCallError `write(2)` failed for some reason. - * @return The passed `io`. - * @post `io`'s buffers are empty. - * @note This operation also discards the read buffer. Should basically - * be harmless, but in an esoteric situation like when user pushed - * something different from what was read using `ungetc`, this - * operation in fact changes the behaviour of the `io`. - * @note Buffering is difficult. This operation flushes the data from - * our userspace to the kernel, but that doesn't always mean you - * can expect them stored persistently onto your hard drive. - */ -VALUE rb_io_flush(VALUE io); - -/** - * Queries if the passed IO is at the end of file. "The end of file" here mans - * that there are no more data to read. This function blocks until the read - * buffer is filled in, and if that operation reached the end of file, it still - * returns ::RUBY_Qfalse (because there are data yet in that buffer). It - * returns ::RUBY_Qtrue once after the buffer is cleared. - * - * @param[in,out] io Target io to query. - * @exception rb_eIOError `io` is not opened for reading. - * @exception rb_eFrozenError `io` is frozen. - * @retval RUBY_Qfalse There are things yet to be read. - * @retval RUBY_Qtrue "The end of file" situation. - */ -VALUE rb_io_eof(VALUE io); - -/** - * Sets the binmode. This operation nullifies the effect of textmode (newline - * conversion from `"\r\n"` to `"\n"` or vice versa). Note that it doesn't - * stop character encodings conversions. For instance an IO created using: - * - * ```ruby - * File.open( - * "/dev/urandom", - * textmode: true, - * external_encoding: Encoding::GB18030, - * internal_encoding: Encoding::Windows_31J) - * ``` - * - * has both newline and character conversions. If you pass such IO to this - * function, only the `textmode:true` part is cancelled. Texts read through - * the IO would still be encoded in Windows-31J; texts written to the IO will - * be encoded in GB18030. - * - * @param[out] io Target IO to modify. - * @exception rb_eFrozenError `io` is frozen. - * @return The passed `io`. - * @post `io` is in binmode. - * @note There is no equivalent operation in Ruby. You can do this only - * in C. - */ -VALUE rb_io_binmode(VALUE io); - -/** - * Forces no conversions be applied to the passed IO. Unlike rb_io_binmode(), - * this cancels any newline conversions as well as encoding conversions. Any - * texts read/written through the IO will be the verbatim binary contents. - * - * @param[out] io Target IO to modify. - * @exception rb_eFrozenError `io` is frozen. - * @return The passed `io`. - * @post `io` is in binmode. Both external/internal encoding are set to - * rb_ascii8bit_encoding(). - * @note This is the implementation of `IO#binmode`. - */ -VALUE rb_io_ascii8bit_binmode(VALUE io); - -/** - * Identical to rb_io_write(), except it always returns the passed IO. - * - * @param[out] io An IO, opened for writing. - * @param[in] str A String-like object to write to `io`. - * @exception rb_eIOError `io` isn't opened for writing. - * @exception rb_eFrozenError `io` is frozen. - * @exception rb_eTypeError No conversion from `str` to String. - * @exception rb_eSystemCallError `write(2)` failed. - * @return The passed `io`. - * @post `str` is written to `io`. - * @note This function blocks. - * - * @internal - * - * As rb_io_write(), above description is a fake. - */ -VALUE rb_io_addstr(VALUE io, VALUE str); - -/** - * This is a rb_f_sprintf() + rb_io_write() combo. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv A format string followed by its arguments. - * @param[out] io An IO, opened for writing. - * @exception rb_eIOError `io` isn't opened for writing. - * @exception rb_eFrozenError `io` is frozen. - * @exception rb_eTypeError No conversion from `str` to String. - * @exception rb_eSystemCallError `write(2)` failed. - * @return Always returns ::RUBY_Qnil. - * @post `argv` is formatted, then written to `io`. - * @note This function blocks. - * - * @internal - * - * As rb_io_write(), above descriptions include fakes. - */ -VALUE rb_io_printf(int argc, const VALUE *argv, VALUE io); - -/** - * Iterates over the passed array to apply rb_io_write() individually. If - * there is `$,`, this function inserts the string in middle of each - * iterations. If there is `$\`, this function appends the string at the end. - * If the array is empty, this function outputs `$_`. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv An array of strings to display. - * @param[out] io An IO, opened for writing. - * @exception rb_eIOError `io` isn't opened for writing. - * @exception rb_eFrozenError `io` is frozen. - * @exception rb_eTypeError No conversion from `str` to String. - * @exception rb_eSystemCallError `write(2)` failed. - * @return Always returns ::RUBY_Qnil. - * @post `argv` is written to `io`. - * @note This function blocks. - * @note This function calls rb_io_write() multiple times. Which means, - * it is not an atomic operation. Outputs from multiple threads - * can interleave. - * - * @internal - * - * As rb_io_write(), above descriptions include fakes. - */ -VALUE rb_io_print(int argc, const VALUE *argv, VALUE io); - -/** - * Iterates over the passed array to apply rb_io_write() individually. Unlike - * rb_io_print(), this function prints a newline per each element. It also - * flattens the passed array (OTOH rb_io_print() just resorts to - * rb_ary_to_s()). - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv An array of strings to display. - * @param[out] io An IO, opened for writing. - * @exception rb_eIOError `io` isn't opened for writing. - * @exception rb_eFrozenError `io` is frozen. - * @exception rb_eTypeError No conversion from `str` to String. - * @exception rb_eSystemCallError `write(2)` failed. - * @return Always returns ::RUBY_Qnil. - * @post `argv` is written to `io`. - * @note This function blocks. - * @note This function calls rb_io_write() multiple times. Which means, - * it is not an atomic operation. Outputs from multiple threads - * can interleave. - * - * @internal - * - * As rb_io_write(), above descriptions include fakes. - */ -VALUE rb_io_puts(int argc, const VALUE *argv, VALUE io); - -/** - * Creates an IO instance whose backend is the given file descriptor. C - * extension libraries sometimes have file descriptors created elsewhere (maybe - * deep inside of another shared library), which they want ruby programs to - * handle. This function is handy for such situations. - * - * @param[in] fd Target file descriptor. - * @param[in] flags Flags, e.g. `O_CREAT|O_EXCL` - * @param[in] path The path of the file that backs `fd`, for diagnostics. - * @return An allocated instance of ::rb_cIO. - * @note Leave `path` NULL if you don't know. - */ -VALUE rb_io_fdopen(int fd, int flags, const char *path); - -RBIMPL_ATTR_NONNULL(()) -/** - * Opens a file located at the given path. - * - * `fmode` is a C string that represents the open mode. It can be one of: - * - * - `r` (means `O_RDONLY`), - * - `w` (means `O_WRONLY | O_TRUNC | O_CREAT`), - * - `a` (means `O_WRONLY | O_APPEND | O_CREAT`), - * - * Followed by zero or more combinations of: - * - * - `b` (means `_O_BINARY`), - * - `t` (means `_O_TEXT`), - * - `+` (means `O_RDWR`), - * - `x` (means `O_TRUNC`), or - * - `:[BOM|]enc[:enc]` (see below). - * - * This last one specifies external (and internal if any) encodings, - * respectively. If optional `BOM|` is specified and the specified external - * encoding is capable of expressing BOMs, opening file's contents' byte order - * is auto-detected using the mechanism. - * - * So for instance, fmode of `"rt|BOM:utf-16le:utf-8"` specifies that... - * - * - the physical representation of the contents of the file is in UTF-16; - * - honours its BOM but assumes little endian if absent; - * - opens the file for reading; - * - what is read is converted into UTF-8; - * - with newlines cannibalised to `\n`. - * - * @param[in] fname Path to open. - * @param[in] fmode Mode specifier much like `fopen(3)`. - * @exception rb_eArgError `fmode` contradicted (e.g. `"bt"`). - * @exception rb_eSystemCallError `open(2)` failed for some reason. - * @return An instance of ::rb_cIO. - */ -VALUE rb_file_open(const char *fname, const char *fmode); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_file_open(), except it takes the pathname as a Ruby's string - * instead of C's. In case the passed Ruby object is a non-String it tries to - * call `#to_path`. - * - * @param[in] fname Path to open. - * @param[in] fmode Mode specifier much like `fopen(3)`. - * @exception rb_eTypeError `fname` is not a String. - * @exception rb_eEncCompatError `fname` is not ASCII-compatible. - * @exception rb_eArgError `fmode` contradicted (e.g. `"bt"`). - * @exception rb_eSystemCallError `open(2)` failed for some reason. - * @return An instance of ::rb_cIO. - */ -VALUE rb_file_open_str(VALUE fname, const char *fmode); - -/** - * Much like rb_io_gets(), but it reads from the mysterious ARGF object. ARGF - * in this context can be seen as a virtual IO which concatenates contents of - * the files passed to the process via the ARGV, or just STDIN if there are no - * such files. - * - * Unlike rb_io_gets() this function sets `$_`. - * - * @exception rb_eFrozenError ARGF resorts to STDIN but it is frozen. - * @retval RUBY_Qnil ARGF is at EOF. - * @retval otherwise An instance of ::rb_cString. - * @post ARGF is read. - * @post `$_` is set. - * - * @internal - * - * In reality, this function can call `ARGF.gets`. Its redefinition can affect - * the behaviour. - * - * Also, you can tamper ARGV on-the-fly in middle of ARGF usages: - * - * ``` - * gets # Reads the first file. - * ARGV << '/proc/self/limits' # Adds a file. - * gets # Can read from /proc/self/limits. - * ``` - */ -VALUE rb_gets(void); - -RBIMPL_ATTR_NONNULL(()) -/** - * Writes the given error message to somewhere applicable. On Windows it goes - * to the console. On POSIX environments it goes to the standard error. - * - * @warning IT IS A BAD IDEA to use this function form your C extensions. - * It is often annoying when GUI applications write to consoles; - * users don't want to look at there. Programmers also want to - * control the cause of the message itself, like by rescuing an - * exception. Just let ruby handle errors. That must be better than - * going your own way. - * - * @param[in] str Error message to display. - * @post `str` is written to somewhere. - * - * @internal - * - * AFAIK this function is listed here without marked deprecated because there - * are usages of this function in the wild. - */ -void rb_write_error(const char *str); - -/** - * Identical to rb_write_error(), except it additionally takes the message's - * length. Necessary when you want to handle wide characters. - * - * @param[in] str Error message to display. - * @param[in] len Length of `str`, in bytes. - * @post `str` is written to somewhere. - */ -void rb_write_error2(const char *str, long len); - -/** - * Closes everything. In case of POSIX environments, a child process inherits - * its parent's opened file descriptors. Which is nowadays considered as one - * of the UNIX mistakes. This function closes such inherited file descriptors. - * When your C extension needs to have a child process, don't forget to call - * this from your child process right before exec. - * - * @param[in] lowfd Lower bound of FDs (you want STDIN to remain, no?). - * @param[in] maxhint Hint of max FDs. - * @param[in] noclose_fds A hash, whose keys are an allowlist. - * - * @internal - * - * As of writing, in spite of the name, this function does not actually close - * anything. It just sets `FD_CLOEXEC` for everything and let `execve(2)` to - * atomically close them at once. This is because as far as we know there are - * no such platform that has `fork(2)` but lacks `FD_CLOEXEC`. - * - * Because this function is expected to run on a forked process it is entirely - * async-signal-safe. - */ -void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds); - -RBIMPL_ATTR_NONNULL(()) -/** - * This is an rb_cloexec_pipe() + rb_update_max_fd() combo. - * - * @param[out] pipes Return buffer. Must at least hold 2 elements. - * @retval 0 Successful creation of a pipe. - * @retval -1 Failure in underlying system call(s). - * @post `pipes` is filled with file descriptors. - * @post `errno` is set on failure. - */ -int rb_pipe(int *pipes); - -/** - * Queries if the given FD is reserved or not. Occasionally Ruby interpreter - * opens files for its own purposes. Use this function to prevent touching - * such behind-the-scene descriptors. - * - * @param[in] fd Target file descriptor. - * @retval 1 `fd` is reserved. - * @retval 0 Otherwise. - */ -int rb_reserved_fd_p(int fd); - -/** @alias{rb_reserved_fd_p} */ -#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd) - -/** - * Opens a file that closes on exec. In case of POSIX environments, a child - * process inherits its parent's opened file descriptors. Which is nowadays - * considered as one of the UNIX mistakes. This function opens a file - * descriptor as `open(2)` does, but additionally instructs the operating - * system that we don't want it be seen from child processes. - * - * @param[in] pathname File path to open. - * @param[in] flags Open mode, as in `open(2)`. - * @param[in] mode File mode, in case of `O_CREAT`. - * @retval -1 `open(2)` failed for some reason. - * @retval otherwise An allocated new file descriptor. - * @note This function does not raise. - * - * @internal - * - * Whether this function can take NULL or not depends on the underlying open(2) - * system call implementation but @shyouhei doesn't think it's worth trying. - */ -int rb_cloexec_open(const char *pathname, int flags, mode_t mode); - -/** - * Identical to rb_cloexec_fcntl_dupfd(), except it implies minfd is 3. - * - * @param[in] oldfd File descriptor to duplicate. - * @retval -1 `dup2(2)` failed for some reason. - * @retval otherwise An allocated new file descriptor. - * @note This function does not raise. - */ -int rb_cloexec_dup(int oldfd); - -/** - * Identical to rb_cloexec_dup(), except you can specify the destination file - * descriptor. If the destination is already squatted by another file - * descriptor that gets silently closed without any warnings. (This is a spec - * requested by POSIX.) - * - * @param[in] oldfd File descriptor to duplicate. - * @param[in] newfd Return value destination. - * @retval -1 `dup2(2)` failed for some reason. - * @retval newfd An allocated new file descriptor. - * @post Whatever sat at `newfd` gets closed with no notifications. - * @post In case return value is -1 `newfd` is untouched. - * @note This function does not raise. - */ -int rb_cloexec_dup2(int oldfd, int newfd); - -RBIMPL_ATTR_NONNULL(()) -/** - * Opens a pipe with closing on exec. In case of POSIX environments, a child - * process inherits its parent's opened file descriptors. Which is nowadays - * considered as one of the UNIX mistakes. This function opens a pipe as - * `pipe(2)` does, but additionally instructs the operating system that we - * don't want the duplicated FDs be seen from child processes. - * - * @param[out] fildes Return buffer. Must at least hold 2 elements. - * @retval 0 Successful creation of a pipe. - * @retval -1 Failure in underlying system call(s). - * @post `pipes` is filled with file descriptors. - * @post `errno` is set on failure. - */ -int rb_cloexec_pipe(int fildes[2]); - -/** - * Duplicates a file descriptor with closing on exec. In case of POSIX - * environments, a child process inherits its parent's opened file descriptors. - * Which is nowadays considered as one of the UNIX mistakes. This function - * duplicates a file descriptor as `dup(2)` does, but additionally instructs - * the operating system that we don't want the duplicated FD be seen from child - * processes. - * - * @param[in] fd File descriptor to duplicate. - * @param[in] minfd Minimum allowed FD to return. - * @retval -1 `dup(2)` failed for some reason. - * @retval otherwise An allocated new file descriptor. - * @note This function does not raise. - * - * `minfd` is handy when for instance STDERR is closed but you don't want to - * use fd 2. - */ -int rb_cloexec_fcntl_dupfd(int fd, int minfd); - -/** - * Informs the interpreter that the passed fd can be the max. This information - * is used from rb_close_before_exec(). - * - * @param[in] fd An open FD, which can be large. - */ -void rb_update_max_fd(int fd); - -/** - * Sets or clears the close-on-exec flag of the passed file descriptor to the - * desired state. STDIN, STDOUT, STDERR are the exceptional file descriptors - * that shall remain open. All others are to be closed on exec. When a C - * extension library opens a file descriptor using anything other than - * rb_cloexec_open() etc., that file descriptor shall experience this function. - * - * @param[in] fd An open file descriptor. - */ -void rb_fd_fix_cloexec(int fd); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_IO_H */ diff --git a/libs/libruby/ruby/internal/intern/load.h b/libs/libruby/ruby/internal/intern/load.h deleted file mode 100644 index 288a16c..0000000 --- a/libs/libruby/ruby/internal/intern/load.h +++ /dev/null @@ -1,218 +0,0 @@ -#ifndef RBIMPL_INTERN_LOAD_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_LOAD_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_f_require(). - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* load.c */ - -/** - * Loads and executes the Ruby program in the given file. - * - * If the path is an absolute path (e.g. starts with `'/'`), the file will be - * loaded directly using the absolute path. If the path is an explicit - * relative path (e.g. starts with `'./'` or `'../'`), the file will be loaded - * using the relative path from the current directory. Otherwise, the file - * will be searched for in the library directories listed in the `$LOAD_PATH`. - * If the file is found in a directory, this function will attempt to load the - * file relative to that directory. If the file is not found in any of the - * directories in the `$LOAD_PATH`, the file will be loaded using the relative - * path from the current directory. - * - * If the file doesn't exist when there is an attempt to load it, a LoadError - * will be raised. - * - * If the `wrap` parameter is true, the loaded script will be executed under an - * anonymous module, protecting the calling program's global namespace. In no - * circumstance will any local variables in the loaded file be propagated to - * the loading environment. - * - * @param[in] path Pathname of a file to load. - * @param[in] wrap Either to load under an anonymous module. - * @exception rb_eTypeError `path` is not a string. - * @exception rb_eArgError `path` is broken as a pathname. - * @exception rb_eEncCompatError `path` is incompatible with pathnames. - * @exception rb_eLoadError `path` not found. - * @exception rb_eException Any exceptions while loading the contents. - * - * @internal - * - * It seems this function is under the rule of bootsnap's regime? - */ -void rb_load(VALUE path, int wrap); - -/** - * Identical to rb_load(), except it avoids potential global escapes. Such - * global escapes include exceptions, `throw`, `break`, for example. - * - * It first evaluates the given file as rb_load() does. If no global escape - * occurred during the evaluation, it `*state` is set to zero on return. - * Otherwise, it sets `*state` to nonzero. If state is `NULL`, it is not set - * in both cases. - * - * @param[in] path Pathname of a file to load. - * @param[in] wrap Either to load under an anonymous module. - * @param[out] state State of execution. - * @post `*state` is set to zero if succeeded. Nonzero otherwise. - * @warning You have to clear the error info with `rb_set_errinfo(Qnil)` if - * you decide to ignore the caught exception. - * @see rb_load - * @see rb_protect - * - * @internal - * - * Though not a part of our public API, `state` is in fact an - * enum ruby_tag_type. You can see the potential "nonzero" values by looking - * at vm_core.h. - */ -void rb_load_protect(VALUE path, int wrap, int *state); - -RBIMPL_ATTR_NONNULL(()) -/** - * Queries if the given feature has already been loaded into the execution - * context. The "feature" head are things like `"json"` or `"socket"`. - * - * @param[in] feature Name of a library you want to know about. - * @retval 1 Yes there is. - * @retval 0 Not yet. - */ -int rb_provided(const char *feature); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Identical to rb_provided(), except it additionally returns the "canonical" - * name of the loaded feature. This can be handy when for instance you want to - * know the actually loaded library is either `foo.rb` or `foo.so`. - * - * @param[in] feature Name of a library you want to know about. - * @param[out] loading Return buffer. - * @retval 1 Yes there is. - * @retval 0 Not yet. - */ -int rb_feature_provided(const char *feature, const char **loading); - -RBIMPL_ATTR_NONNULL(()) -/** - * Declares that the given feature is already provided by someone else. This - * API can be handy when you have an extension called `foo.so` which, when - * required, also provides functionality of `bar.so`. - * - * @param[in] feature Name of a library which had already been provided. - * @post No further `require` would search `feature`. - */ -void rb_provide(const char *feature); - -/** - * Identical to rb_require_string(), except it ignores the first argument for - * no reason. There seems to be no reason for 3rd party extension libraries to - * use it. - * - * @param[in] self Ignored. Can be anything. - * @param[in] feature Name of a feature, e.g. `"json"`. - * @exception rb_eLoadError No such feature. - * @exception rb_eRuntimeError `$"` is frozen; unable to push. - * @retval RUBY_Qtrue The feature is loaded for the first time. - * @retval RUBY_Qfalse The feature has already been loaded. - * @post `$"` is updated. - */ -VALUE rb_f_require(VALUE self, VALUE feature); - -/** - * Finds and loads the given feature, if absent. - * - * If the feature is an absolute path (e.g. starts with `'/'`), the feature - * will be loaded directly using the absolute path. If the feature is an - * explicit relative path (e.g. starts with `'./'` or `'../'`), the feature - * will be loaded using the relative path from the current directory. - * Otherwise, the feature will be searched for in the library directories - * listed in the `$LOAD_PATH`. - * - * If the feature has the extension `".rb"`, it is loaded as a source file; if - * the extension is `".so"`, `".o"`, or `".dll"`, or the default shared library - * extension on the current platform, Ruby loads the shared library as a Ruby - * extension. Otherwise, Ruby tries adding `".rb"`, `".so"`, and so on to the - * name until found. If the file named cannot be found, a LoadError will be - * raised. - * - * For extension libraries the given feature may use any shared library - * extension. For example, on Linux you can require `"socket.dll"` to actually - * load `socket.so`. - * - * The absolute path of the loaded file is added to `$LOADED_FEATURES`. A file - * will not be loaded again if its path already appears in there. - * - * Any constants or globals within the loaded source file will be available in - * the calling program's global namespace. However, local variables will not - * be propagated to the loading environment. - * - * @param[in] feature Name of a feature, e.g. `"json"`. - * @exception rb_eLoadError No such feature. - * @exception rb_eRuntimeError `$"` is frozen; unable to push. - * @retval RUBY_Qtrue The feature is loaded for the first time. - * @retval RUBY_Qfalse The feature has already been loaded. - * @post `$"` is updated. - */ -VALUE rb_require_string(VALUE feature); - -/** - * @name extension configuration - * @{ - */ - -/** - * Asserts that the extension library that calls this function is aware of - * Ractor. Multiple Ractors run without protecting each other. This doesn't - * interface well with C programs, unless designed with an in-depth - * understanding of how Ractors work. Extension libraries are shut out from - * Ractors by default. This API is to bypass that restriction. Once after it - * was called, successive calls to rb_define_method() etc. become definitions - * of methods that are aware of Ractors. The amendment would be in effect - * until the end of rb_require_string() etc. - * - * @param[in] flag Either the library is aware of Ractors or not. - * @post Methods would be callable form Ractors, if `flag` is true. - */ -void rb_ext_ractor_safe(bool flag); - -/** @alias{rb_ext_ractor_safe} */ -#define RB_EXT_RACTOR_SAFE(f) rb_ext_ractor_safe(f) - -/** - * This macro is to provide backwards compatibility. It must be safe to do - * something like: - * - * ```CXX - * #ifdef HAVE_RB_EXT_RACTOR_SAFE - * rb_ext_ractor_safe(true); - * #endif - * ``` - */ -#define HAVE_RB_EXT_RACTOR_SAFE 1 - -/** @} */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_LOAD_H */ diff --git a/libs/libruby/ruby/internal/intern/marshal.h b/libs/libruby/ruby/internal/intern/marshal.h deleted file mode 100644 index 118d78a..0000000 --- a/libs/libruby/ruby/internal/intern/marshal.h +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef RBIMPL_INTERN_MARSHAL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_MARSHAL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to rb_mMarshal. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* marshal.c */ - -/** - * Serialises the given object and all its referring objects, to write them - * down to the passed port. - * - * @param[in] obj Target object to dump. - * @param[out] port IO-like destination buffer. - * @exception rb_eTypeError `obj` cannot be dumped for some reason. - * @exception rb_eRuntimeError `obj` was tampered during dumping. - * @exception rb_eArgError Traversal too deep. - * @return The passed `port` as-is. - * @post Serialised representation of `obj` is written to `port`. - * @note `port` is basically an IO but StringIO is also possible. - */ -VALUE rb_marshal_dump(VALUE obj, VALUE port); - -/** - * Deserialises a previous output of rb_marshal_dump() into a network of - * objects. - * - * @param[in,out] port Either IO or String. - * @exception rb_eTypeError `port` is in unexpected type. - * @exception rb_eArgError Contents of `port` is broken. - * @return Object(s) rebuilt using the info from `port`. - * - * SECURITY CONSIDERATIONS - * ======================== - * - * @warning By design, rb_marshal_load() can deserialise almost any - * class loaded into the Ruby process. In many cases this can - * lead to remote code execution if the Marshal data is loaded - * from an untrusted source. - * @warning As a result, rb_marshal_load() is not suitable as a general - * purpose serialisation format and you should never unmarshal - * user supplied input or other untrusted data. - * @warning If you need to deserialise untrusted data, use JSON or - * another serialisation format that is only able to load - * simple, 'primitive' types such as String, Array, Hash, etc. - * Never allow user input to specify arbitrary types to - * deserialise into. - */ -VALUE rb_marshal_load(VALUE port); - -/** - * Marshal format compatibility layer. Over time, classes evolve, so that - * their internal data structure change drastically. For instance an instance - * of ::rb_cRange was made of ::RUBY_T_OBJECT in 1.x., but in 3.x it is a - * ::RUBY_T_STRUCT now. In order to keep binary compatibility, we "fake" the - * marshalled representation to stick to old types. This is the API to enable - * that manoeuvre. Here is how: - * - * First, because you are going to keep backwards compatibility, you need to - * retain the old implementation of your class. Rename it, and keep the class - * somewhere (for instance rb_register_global_address() could help). Next - * create your new class. Do whatever you want. - * - * Then, this is the key point. Create two new "bridge" functions that convert - * the structs back and forth: - * - * - the "dumper" function that takes an instance of the new class, and - * returns an instance of the old one. This is called from - * rb_marshal_dump(), to keep it possible for old programs to read your new - * data. - * - * - the "loader" function that takes two arguments, new one and old one, in - * that order. rb_marshal_load() calls this function when it finds a - * representation of the retained old class. The old one passed to this - * function is the reconstructed instance of the old class. - * Reverse-engineer that to modify the new one, to have the identical - * contents. - * - * Finally, connect all of them using this function. - * - * @param[in] newclass The class that needs conversion. - * @param[in] oldclass Old implementation of `newclass`. - * @param[in] dumper Function that converts `newclass` to `oldclass`. - * @param[in] loader Function that converts `oldclass` to `newclass`. - * @exception rb_eTypeError `newclass` has no allocator. - */ -void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE)); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_MARSHAL_H */ diff --git a/libs/libruby/ruby/internal/intern/numeric.h b/libs/libruby/ruby/internal/intern/numeric.h deleted file mode 100644 index 30863fb..0000000 --- a/libs/libruby/ruby/internal/intern/numeric.h +++ /dev/null @@ -1,208 +0,0 @@ -#ifndef RBIMPL_INTERN_NUMERIC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_NUMERIC_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cNumeric. - */ -#include "ruby/internal/attr/cold.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define RB_NUM_COERCE_FUNCS_NEED_OPID 1 - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* numeric.c */ - -RBIMPL_ATTR_NORETURN() -RBIMPL_ATTR_COLD() -/** - * Just always raises an exception. - * - * @exception rb_eZeroDivError Division by zero error. - */ -void rb_num_zerodiv(void); - -/** - * @name Coercion operators. - * - * What is a coercion? Well Ruby is basically an OOPL but it also has - * arithmetic operators. They are implemented in OO manners. For instance - * `a+b` is a binary operation `+`, whose receiver is `a`, and whose (sole) - * argument is `b`. - * - * The problem is, you often want `a+b == b+a` to hold. That is easy if both - * `a` and `b` belongs to the same class... Ensuring `1 + 2 == 2 + 1` is kind - * of intuitive. But if you want `1.0 + 2 == 2 + 1.0`, things start getting - * complicated. `1.0+2` is `Float#+`, while `2+1.0` is `Integer#+`. In order - * to achieve the equality Float's and Integer's methods must agree with their - * behaviours. - * - * Now. Floats versus Integers situation is still controllable because they - * are both built-in. But in Ruby you can define your own numeric classes. - * BigDecimal, which is a rubygems gem distributed along with the interpreter, - * is one of such examples. Rational was another such example before. In - * short you cannot create list of all possible combination of the classes that - * could be the operand of `+` operator. Then how do we achieve the - * commutativity? - * - * Here comes the concept of coercion. If a definition of an operator - * encounters an object which is unknown to the author, just assumes that the - * unknown object knows how to handle the situation. So for instance when - * `1+x` has unknown `x`, it lets the `x` handle this. - * - * ```ruby - * class Foo - * def +(x) - * if we_know_what_is_x? then - * ... # handle here - * else - * y, z = x.coerce self - * return y + z - * end - * end - * end - * ``` - * - * The `x.coerce` method returns a 2-element array which are "casted" versions - * of `x` and `self`. - * - * @{ - */ - -/** - * Coerced binary operation. This function first coerces the two objects, then - * applies the operation. - * - * @param[in] lhs LHS operand. - * @param[in] rhs RHS operand. - * @param[in] op Operator method name. - * @exception rb_eTypeError Coercion failed for some reason. - * @return `lhs op rhs`, in a coerced way. - */ -VALUE rb_num_coerce_bin(VALUE lhs, VALUE rhs, ID op); - -/** - * Identical to rb_num_coerce_bin(), except for return values. This function - * best suits for comparison operators e.g. `<=>`. - * - * @param[in] lhs LHS operand. - * @param[in] rhs RHS operand. - * @param[in] op Operator method name. - * @retval RUBY_Qnil Coercion failed for some reason. - * @retval otherwise `lhs op rhs`, in a coerced way. - */ -VALUE rb_num_coerce_cmp(VALUE lhs, VALUE rhs, ID op); - -/** - * Identical to rb_num_coerce_cmp(), except for return values. This function - * best suits for relationship operators e.g. `<=`. - * - * @param[in] lhs LHS operand. - * @param[in] rhs RHS operand. - * @param[in] op Operator method name. - * @exception rb_eArgError Coercion failed for some reason. - * @return `lhs op rhs`, in a coerced way. - */ -VALUE rb_num_coerce_relop(VALUE lhs, VALUE rhs, ID op); - -/** - * This one is optimised for bitwise operations, but the API is identical to - * rb_num_coerce_bin(). - * - * @param[in] lhs LHS operand. - * @param[in] rhs RHS operand. - * @param[in] op Operator method name. - * @exception rb_eArgError Coercion failed for some reason. - * @return `lhs op rhs`, in a coerced way. - */ -VALUE rb_num_coerce_bit(VALUE lhs, VALUE rhs, ID op); - -/** @} */ - -/** - * Converts a numeric value into a Fixnum. This is not a preserving - * conversion; for instance 1.5 would be converted into 1. - * - * @param[in] val A numeric object. - * @exception rb_eTypeError No conversion from `val` to Integer. - * @exception rb_eRangeError `val` out of range. - * @return A fixnum converted from `val`. - * - * @internal - * - * This seems used from nowhere? - */ -VALUE rb_num2fix(VALUE val); - -/** - * Generates a place-value representation of the given Fixnum, with given - * radix. - * - * @param[in] val A fixnum to stringify. - * @param[in] base `2` to `36` inclusive for each radix. - * @exception rb_eArgError `base` is out of range. - * @return An instance of ::rb_cString representing `val`. - * @pre `val` must be a Fixnum (no checks performed). - */ -VALUE rb_fix2str(VALUE val, int base); - -RBIMPL_ATTR_CONST() -/** - * Compares two `double`s. Handy when implementing a spaceship operator. - * - * @param[in] lhs A value. - * @param[in] rhs Another value. - * @retval RB_INT2FIX(-1) `lhs` is "bigger than" `rhs`. - * @retval RB_INT2FIX(1) `rhs` is "bigger than" `lhs`. - * @retval RB_INT2FIX(0) They are equal. - * @retval RUBY_Qnil Not comparable, e.g. NaN. - */ -VALUE rb_dbl_cmp(double lhs, double rhs); - -/** - * Raises the passed `x` to the power of `y`. - * - * @note The return value can be really big. - * @note Also the return value can be really small, in case `x` is a - * negative number. - * @param[in] x A number. - * @param[in] y Another number. - * @retval Inf Cannot express the result. - * @retval 1 Either `y` is 0 or `x` is 1. - * @retval otherwise An instance of ::rb_cInteger whose value is `x ** y`. - * - * @internal - * - * This function returns Infinity when `y` is big enough not to fit into a - * Fixnum. Warning is issued then. - */ -RUBY_EXTERN VALUE rb_int_positive_pow(long x, unsigned long y); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_NUMERIC_H */ diff --git a/libs/libruby/ruby/internal/intern/object.h b/libs/libruby/ruby/internal/intern/object.h deleted file mode 100644 index b9ffa57..0000000 --- a/libs/libruby/ruby/internal/intern/object.h +++ /dev/null @@ -1,501 +0,0 @@ -#ifndef RBIMPL_INTERN_OBJECT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_OBJECT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cObject. - */ -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/deprecated.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * This macro is (used but) mysterious. Why on earth do we need this? - * - * - `obj != orig` check is done anyways inside of rb_obj_init_copy(). - * - rb_obj_init_copy() returns something. No need are there to add `, 1`. - */ -#define RB_OBJ_INIT_COPY(obj, orig) \ - ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1)) -/** @old{RB_OBJ_INIT_COPY} */ -#define OBJ_INIT_COPY(obj, orig) RB_OBJ_INIT_COPY(obj, orig) - -/* object.c */ - -/** - * Identical to rb_class_new_instance(), except it passes the passed keywords - * if any to the `#initialize` method. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] klass An instance of ::rb_cClass. - * @exception rb_eTypeError `klass`'s allocator is undefined. - * @exception rb_eException Any exceptions can happen inside. - * @return An allocated new instance of `klass`. - * @note This is _the_ implementation of `Object.new`. - */ -VALUE rb_class_new_instance_pass_kw(int argc, const VALUE *argv, VALUE klass); - -/** - * Allocates, then initialises an instance of the given class. It first calls - * the passed class' allocator to obtain an uninitialised object, then calls - * its initialiser with the remaining arguments. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arguments passed to `#initialize`. - * @param[in] klass An instance of ::rb_cClass. - * @exception rb_eTypeError `klass`'s allocator is undefined. - * @exception rb_eException Any exceptions can happen inside. - * @return An allocated new instance of `klass`. - */ -VALUE rb_class_new_instance(int argc, const VALUE *argv, VALUE klass); - -/** - * Identical to rb_class_new_instance(), except you can specify how to handle - * the last element of the given array. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] klass An instance of ::rb_cClass. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eTypeError `klass`'s allocator is undefined. - * @exception rb_eException Any exceptions can happen inside. - * @return An allocated new instance of `klass`. - */ -VALUE rb_class_new_instance_kw(int argc, const VALUE *argv, VALUE klass, int kw_splat); - -/** - * Checks for equality of the passed objects, in terms of `Object#eql?`. - * - * @param[in] lhs Comparison left hand side. - * @param[in] rhs Comparison right hand side. - * @retval non-zero They are equal. - * @retval 0 Otherwise. - * @note This function actually calls `lhs.eql?(rhs)` so you cannot - * implement your class' `#eql?` method using it. - */ -int rb_eql(VALUE lhs, VALUE rhs); - -/** - * Generates a textual representation of the given object. - * - * @param[in] obj Arbitrary ruby object. - * @return An instance of ::rb_cString that represents `obj`. - * @note This is the default implementation of `Object#to_s` that each - * subclasses want to override. - */ -VALUE rb_any_to_s(VALUE obj); - -/** - * Generates a human-readable textual representation of the given object. This - * is largely similar to Ruby level `Object#inspect` but not the same; it - * additionally escapes the inspection result so that the string be compatible - * with that of default internal (or default external, if absent). - * - * @param[in] obj Arbitrary ruby object. - * @return An instance of ::rb_cString that represents `obj`. - */ -VALUE rb_inspect(VALUE obj); - -/** - * Queries if the given object is a direct instance of the given class. - * - * @param[in] obj Arbitrary ruby object. - * @param[in] klass An instance of ::rb_cModule. - * @exception rb_eTypeError `klass` is neither module nor class. - * @retval RUBY_Qtrue `obj` is an instance of `klass`. - * @retval RUBY_Qfalse Otherwise. - */ -VALUE rb_obj_is_instance_of(VALUE obj, VALUE klass); - -/** - * Queries if the given object is an instance (of possibly descendants) of the - * given class. - * - * @param[in] obj Arbitrary ruby object. - * @param[in] klass An instance of ::rb_cModule. - * @exception rb_eTypeError `klass` is neither module nor class. - * @retval RUBY_Qtrue `obj` is a `klass`. - * @retval RUBY_Qfalse Otherwise. - */ -VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass); - -/** - * Allocates an instance of the given class. - * - * @param[in] klass A class to instantiate. - * @exception rb_eTypeError `klass` is not a class. - * @return An allocated, not yet initialised instance of `klass`. - * @note It calls the allocator defined by rb_define_alloc_func(). You - * cannot use this function to define an allocator. Use - * rb_newobj_of(), #TypedData_Make_Struct or others, instead. - * @note Usually prefer rb_class_new_instance() to rb_obj_alloc() and - * rb_obj_call_init(). - * @see rb_class_new_instance() - * @see rb_obj_call_init() - * @see rb_define_alloc_func() - * @see rb_newobj_of() - * @see #TypedData_Make_Struct - */ -VALUE rb_obj_alloc(VALUE klass); - -/** - * Produces a shallow copy of the given object. Its list of instance variables - * are copied, but not the objects they reference. It also copies the frozen - * value state. - * - * @param[in] obj Arbitrary ruby object. - * @exception rb_eException `#initialize_copy` can raise anything. - * @return A "clone" of `obj`. - * - * @internal - * - * Unlike ruby-level `Object#clone`, there is no way to control the frozen-ness - * of the return value. - */ -VALUE rb_obj_clone(VALUE obj); - -/** - * Duplicates the given object. This does almost the same thing as - * rb_obj_clone() do. However it does not copy the singleton class (if any). - * It also doesn't copy frozen-ness. - * - * @param[in] obj Arbitrary ruby object. - * @exception rb_eException `#initialize_copy` can raise anything. - * @return A shallow copy of `obj`. - */ -VALUE rb_obj_dup(VALUE obj); - -/** - * Default implementation of `#initialize_copy`, `#initialize_dup` and - * `#initialize_clone`. It does almost nothing. Just raises exceptions for - * checks. - * - * @param[in] dst The destination object. - * @param[in] src The source object. - * @exception rb_eFrozenError `dst` is frozen. - * @exception rb_eTypeError `dst` and `src` have different classes. - * @return Always returns `dst`. - */ -VALUE rb_obj_init_copy(VALUE src, VALUE dst); - -/** - * Just calls rb_obj_freeze_inline() inside. Does this make any sens to - * extension libraries? - * - * @param[out] obj Object to freeze. - * @return Verbatim `obj`. - */ -VALUE rb_obj_freeze(VALUE obj); - -RBIMPL_ATTR_PURE() -/** - * Just calls RB_OBJ_FROZEN() inside. Does this make any sens to extension - * libraries? - * - * @param[in] obj Object in question. - * @retval RUBY_Qtrue Yes it is. - * @retval RUBY_Qfalse No it isn't. - */ -VALUE rb_obj_frozen_p(VALUE obj); - -/* gc.c */ - -/** - * Finds or creates an integer primary key of the given object. In the old - * days this function was a purely arithmetic operation that maps the - * underlying memory address where the object resides into a Ruby's integer. - * Some time around 2.x this changed. It no longer relates its return values - * to C level pointers. This function assigns some random number to the given - * object if absent. The same number will be returned on all subsequent - * requests. No two active objects share a number. - * - * @param[in] obj Arbitrary ruby object. - * @return An instance of ::rb_cInteger which is an "identifier" of `obj`. - * - * @internal - * - * The "some random number" is in fact a monotonic-increasing process-global - * unique integer, much like an `INTEGER AUTO_INCREMENT PRIMARY KEY` column in - * a MySQL table. - */ -VALUE rb_obj_id(VALUE obj); - -RBIMPL_ATTR_CONST() -/** - * Identical to rb_obj_id(), except it hesitates from allocating a new instance - * of ::rb_cInteger. rb_obj_id() could allocate ::RUBY_T_BIGNUM objects. That - * allocation might perhaps impact negatively. On such situations, this - * function instead returns one-shot temporary small integers that need no - * allocations at all. The values are guaranteed unique at the moment, but no - * future promise is made; could be reused. Use of this API should be very - * instant. It is a failure to store the returned integer to somewhere else. - * - * In short it is difficult to use. - * - * @param[in] obj Arbitrary ruby object. - * @return An instance of ::rb_cInteger unique at the moment. - * - * @internal - * - * This is roughly the old behaviour of rb_obj_id(). - */ -VALUE rb_memory_id(VALUE obj); - -/* object.c */ - -RBIMPL_ATTR_PURE() -/** - * Finds a "real" class. As the name implies there are class objects that are - * surreal. This function takes a class, traverses its ancestry tree, and - * returns its nearest ancestor which is neither a module nor a singleton - * class. - * - * @param[in] klass An instance of ::rb_cClass. - * @retval RUBY_Qfalse No real class in `klass`' ancestry tree. - * @retval klass `klass` itself is a real class. - * @retval otherwise Nearest ancestor of `klass` who is real. - */ -VALUE rb_class_real(VALUE klass); - -RBIMPL_ATTR_PURE() -/** - * Determines if the given two modules are relatives. - * - * @param[in] scion Possible subclass. - * @param[in] ascendant Possible superclass. - * @exception rb_eTypeError `ascendant` is not a module. - * @retval RUBY_Qtrue `scion` inherits, or is equal to `ascendant`. - * @retval RUBY_Qfalse `ascendant` inherits `scion`. - * @retval RUBY_Qnil They are not relatives. - */ -VALUE rb_class_inherited_p(VALUE scion, VALUE ascendant); - -RBIMPL_ATTR_PURE() -/** - * Queries the parent of the given class. - * - * @param[in] klass A child class. - * @exception rb_eTypeError `klass` is a `Class.allocate`. - * @retval RUBY_Qfalse `klass` has no superclass. - * @retval otherwise `klass`' superclass. - * - * @internal - * - * Is there any class except ::rb_cBasicObject, that has no superclass? - */ -VALUE rb_class_superclass(VALUE klass); - -RBIMPL_ATTR_NONNULL(()) -/** - * Converts an object into another type. Calls the specified conversion method - * if necessary. - * - * @param[in] val An object to convert. - * @param[in] type A value of enum ::ruby_value_type. - * @param[in] name Name to display on error (e.g. "Array"). - * @param[in] mid Conversion method (e.g. "to_ary"). - * @exception rb_eTypeError Failed to convert. - * @return An object of the specified type. - */ -VALUE rb_convert_type(VALUE val, int type, const char *name, const char *mid); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_convert_type(), except it returns ::RUBY_Qnil instead of - * raising exceptions, in case of conversion failure. It still raises - * exceptions for various reasons, like when the conversion method itself - * raises, though. - * - * @param[in] val An object to convert. - * @param[in] type A value of enum ::ruby_value_type. - * @param[in] name Name to display on error (e.g. "Array"). - * @param[in] mid Conversion method (e.g. "to_ary"). - * @exception rb_eTypeError The `mid` does not generate `type`. - * @retval RUBY_Qnil No conversion defined. - * @retval otherwise An object of the specified type. - */ -VALUE rb_check_convert_type(VALUE val, int type, const char *name, const char *mid); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_check_convert_type(), except the return value type is fixed - * to ::rb_cInteger. - * - * @param[in] val An object to convert. - * @param[in] mid Conversion method (e.g. "to_ary"). - * @exception rb_eTypeError The `mid` does not generate an integer. - * @retval RUBY_Qnil No conversion defined. - * @retval otherwise An instance of ::rb_cInteger. - */ -VALUE rb_check_to_integer(VALUE val, const char *mid); - -/** - * This is complicated. - * - * - When the passed object is already an instance of ::rb_cFloat, just - * returns it as-is. - * - * - When the passed object is something numeric, the function tries to - * convert it using `#to_f` method. - * - * - If that conversion fails (this happens for instance when the numeric - * is a complex) it returns ::RUBY_Qnil. - * - * - Otherwise returns the conversion result. - * - * - Otherwise it also returns ::RUBY_Qnil. - * - * @param[in] val An object to convert. - * @retval RUBY_Qnil Conversion from `val` to float is undefined. - * @retval otherwise Converted result. - */ -VALUE rb_check_to_float(VALUE val); - -/** - * Identical to rb_check_to_int(), except it raises in case of conversion - * mismatch. - * - * @param[in] val An object to convert. - * @exception rb_eTypeError `#to_int` does not generate an integer. - * @return An instance of ::rb_cInteger. - */ -VALUE rb_to_int(VALUE val); - -/** - * Identical to rb_check_to_integer(), except it uses `#to_int` for conversion. - * - * @param[in] val An object to convert. - * @exception rb_eTypeError `#to_int` does not return an integer. - * @retval RUBY_Qnil No conversion defined. - * @retval otherwise An instance of ::rb_cInteger. - */ -VALUE rb_check_to_int(VALUE val); - -/** - * This is the logic behind `Kernel#Integer`. Numeric types are converted - * directly, with floating point numbers being truncated. Strings are - * interpreted strictly; only leading/trailing whitespaces, plus/minus sign, - * radix indicators such as `0x`, digits, and underscores are allowed. - * Anything else are converted by first trying `#to_int`, then `#to_i`. - * - * This is slightly stricter than `String#to_i`. - * - * @param[in] val An object to convert. - * @exception rb_eArgError Malformed `val` passed. - * @exception rb_eTypeError No conversion defined. - * @return An instance of ::rb_cInteger. - */ -VALUE rb_Integer(VALUE val); - -/** - * Identical to rb_check_to_float(), except it raises on error. - * - * @param[in] val An object to convert. - * @exception rb_eTypeError No conversion defined. - * @return An instance of ::rb_cFloat. - */ -VALUE rb_to_float(VALUE val); - -/** - * This is the logic behind `Kernel#Float`. Numeric types are converted - * directly to the nearest value that a Float can represent. Strings are - * interpreted strictly; only leading/trailing whitespaces are allowed except - * what `strtod` understands. Anything else are converted using `#to_f`. - * - * This is slightly stricter than `String#to_f`. - * - * @param[in] val An object to convert. - * @exception rb_eArgError Malformed `val` passed. - * @exception rb_eTypeError No conversion defined. - * @return An instance of ::rb_cFloat. - */ -VALUE rb_Float(VALUE val); - -/** - * This is the logic behind `Kernel#String`. Arguments are converted by first - * trying `#to_str`, then `#to_s`. - * - * @param[in] val An object to convert. - * @exception rb_eTypeError No conversion defined. - * @return An instance of ::rb_cString. - */ -VALUE rb_String(VALUE val); - -/** - * This is the logic behind `Kernel#Array`. Arguments are converted by first - * trying `#to_ary`, then `#to_a`, and if both failed, returns an array of - * length 1 that contains the passed argument as the sole contents. - * - * @param[in] val An object to convert. - * @return An instance of ::rb_cArray. - */ -VALUE rb_Array(VALUE val); - -/** - * This is the logic behind `Kernel#Hash`. Arguments are converted by first - * trying `#to_hash`. if it failed, and the argument is either ::RUBY_Qnil or - * an empty array, returns an empty hash. Otherwise an exception is raised. - * - * @param[in] val An object to convert. - * @exception rb_eTypeError No conversion defined. - * @return An instance of ::rb_cHash. - */ -VALUE rb_Hash(VALUE val); - -RBIMPL_ATTR_NONNULL(()) -/** - * Converts a textual representation of a real number into a numeric, which is - * the nearest value that the return type can represent, of the value that the - * argument represents. This is in fact a 2-in-1 function whose behaviour can - * be controlled using the second (mode) argument. If the mode is zero, this - * function is in "historical" mode which only understands "floating-constant" - * defined at ISO/IEC 9899:1990 section 6.1.3.1. If the mode is nonzero, it is - * in "extended" mode, which also accepts "hexadecimal-floating-constant" - * defined at ISO/IEC 9899:2018 section 6.4.4.2. - * - * @param[in] str A textual representation of a real number. - * @param[in] mode Conversion mode, as described above. - * @exception rb_eArgError Malformed `str` passed. - * @see https://bugs.ruby-lang.org/issues/2969 - * @note Null pointers are allowed, and it returns 0.0 then. - */ -double rb_cstr_to_dbl(const char *str, int mode); - -/** - * Identical to rb_cstr_to_dbl(), except it accepts a Ruby's string instead of - * C's. - * - * @param[in] str A textual representation of a real number. - * @param[in] mode Conversion mode, as described in rb_cstr_to_dbl(). - * @exception rb_eArgError Malformed `str` passed. - * @see https://bugs.ruby-lang.org/issues/2969 - */ -double rb_str_to_dbl(VALUE str, int mode); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_OBJECT_H */ diff --git a/libs/libruby/ruby/internal/intern/parse.h b/libs/libruby/ruby/internal/intern/parse.h deleted file mode 100644 index 7c4e992..0000000 --- a/libs/libruby/ruby/internal/intern/parse.h +++ /dev/null @@ -1,194 +0,0 @@ -#ifndef RBIMPL_INTERN_PARSE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_PARSE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cSymbol. - */ -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* symbol.c */ - -/** - * Calculates an ID of attribute writer. For instance it returns `:foo=` when - * passed `:foo`. - * - * @param[in] id An id. - * @exception rb_eNameError `id` is not for attributes (e.g. operator). - * @return Calculated name of attribute writer. - */ -ID rb_id_attrset(ID id); - -RBIMPL_ATTR_CONST() -/** - * Classifies the given ID, then sees if it is a constant. In case an ID is in - * Unicode (likely), its "constant"-ness is determined if its first character - * is either upper case or title case. Otherwise it is detected if case- - * folding the first character changes its case or not. - * - * @param[in] id An id to classify. - * @retval 1 It is a constant. - * @retval 0 It isn't. - */ -int rb_is_const_id(ID id); - -RBIMPL_ATTR_CONST() -/** - * Classifies the given ID, then sees if it is a global variable. A global - * variable must start with `$`. - * - * @param[in] id An id to classify. - * @retval 1 It is a global variable. - * @retval 0 It isn't. - */ -int rb_is_global_id(ID id); - -RBIMPL_ATTR_CONST() -/** - * Classifies the given ID, then sees if it is an instance variable. An - * instance variable must start with `@`, but not `@@`. - * - * @param[in] id An id to classify. - * @retval 1 It is an instance variable. - * @retval 0 It isn't. - */ -int rb_is_instance_id(ID id); - -RBIMPL_ATTR_CONST() -/** - * Classifies the given ID, then sees if it is an attribute writer. An - * attribute writer is otherwise a local variable, except it ends with `=`. - * - * @param[in] id An id to classify. - * @retval 1 It is an attribute writer. - * @retval 0 It isn't. - */ -int rb_is_attrset_id(ID id); - -RBIMPL_ATTR_CONST() -/** - * Classifies the given ID, then sees if it is a class variable. A class - * variable is must start with `@@`. - * - * @param[in] id An id to classify. - * @retval 1 It is a class variable. - * @retval 0 It isn't. - */ -int rb_is_class_id(ID id); - -RBIMPL_ATTR_CONST() -/** - * Classifies the given ID, then sees if it is a local variable. A local - * variable starts with a lowercase character, followed by some alphanumeric - * characters or `_`, then ends with anything other than `!`, `?`, or `=`. - * - * @param[in] id An id to classify. - * @retval 1 It is a local variable. - * @retval 0 It isn't. - */ -int rb_is_local_id(ID id); - -RBIMPL_ATTR_CONST() -/** - * Classifies the given ID, then sees if it is a junk ID. An ID with no - * special syntactic structure is considered junk. This category includes for - * instance punctuation. - * - * @param[in] id An id to classify. - * @retval 1 It is a junk. - * @retval 0 It isn't. - */ -int rb_is_junk_id(ID); - -RBIMPL_ATTR_NONNULL(()) -/** - * Sees if the passed C string constructs a valid syntactic symbol. Invalid - * ones for instance includes whitespaces. - * - * @param[in] str A C string to check. - * @retval 1 It is a valid symbol name. - * @retval 0 It is invalid as a symbol name. - */ -int rb_symname_p(const char *str); - -/* vm.c */ - -/** - * Queries the last match, or `Regexp.last_match`, or the `$~`. You don't have - * to use it, because in reality you can get `$~` using rb_gv_get() as usual. - * - * @retval RUBY_Qnil The method has not ran a regular expression. - * @retval otherwise An instance of ::rb_cMatch. - */ -VALUE rb_backref_get(void); - -/** - * Updates `$~`. You don't have to use it, because in reality you can set `$~` - * using rb_gv_set() as usual. - * - * @param[in] md Arbitrary Ruby object. - * @post The passed object is assigned to `$~`. - * - * @internal - * - * Yes, this function bypasses the Check_Type() that would normally prevent - * evil souls from assigning evil objects to `$~`. Use of this function is a - * really bad smell. - */ -void rb_backref_set(VALUE md); - -/** - * Queries the last line, or the `$_`. You don't have to use it, because in - * reality you can get `$_` using rb_gv_get() as usual. - * - * @retval RUBY_Qnil There has never been a "line" yet. - * @retval otherwise The last set `$_` value. - */ -VALUE rb_lastline_get(void); - -/** - * Updates `$_`. You don't have to use it, because in reality you can set `$_` - * using rb_gv_set() as usual. - * - * @param[in] str Arbitrary Ruby object. - * @post The passed object is assigned to `$_`. - * - * @internal - * - * Unlike `$~`, you can assign non-strings to `$_`, even from ruby scripts. - */ -void rb_lastline_set(VALUE str); - -/* symbol.c */ - -/** - * Collects every single bits of symbols that have ever interned in the entire - * history of the current process. - * - * @return An array that contains all symbols that have ever existed. - */ -VALUE rb_sym_all_symbols(void); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_PARSE_H */ diff --git a/libs/libruby/ruby/internal/intern/proc.h b/libs/libruby/ruby/internal/intern/proc.h deleted file mode 100644 index b8c3c5e..0000000 --- a/libs/libruby/ruby/internal/intern/proc.h +++ /dev/null @@ -1,353 +0,0 @@ -#ifndef RBIMPL_INTERN_PROC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_PROC_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cProc. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/iterator.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* proc.c */ - -/** - * Constructs a Proc object from implicitly passed components. When a ruby - * method is called with a block, that block is not explicitly passed around - * using C level function parameters. This function gathers all the necessary - * info to turn them into a Ruby level instance of ::rb_cProc. - * - * @exception rb_eArgError There is no passed block. - * @return An instance of ::rb_cProc. - */ -VALUE rb_block_proc(void); - -/** - * Identical to rb_proc_new(), except it returns a lambda. - * - * @exception rb_eArgError There is no passed block. - * @return An instance of ::rb_cProc. - */ -VALUE rb_block_lambda(void); - -/** - * This is an rb_iterate() + rb_block_proc() combo. - * - * ```CXX - * VALUE - * my_own_iterator(RB_BLOCK_CALL_FUNC_ARGLIST(y, c)) - * { - * const auto plus = rb_intern("+"); - * return rb_funcall(c, plus, 1, y); - * } - * - * VALUE - * my_own_method(VALUE self) - * { - * return rb_proc_new(my_own_iterator, self); - * } - * ``` - * - * @param[in] func A backend function of a proc. - * @param[in] callback_arg Passed to `func`'s callback_arg. - * @return A C-backended proc object. - * - */ -VALUE rb_proc_new(rb_block_call_func_t func, VALUE callback_arg); - -/** - * Queries if the given object is a proc. - * - * @note This is about the object's data structure, not its class etc. - * @param[in] recv Object in question. - * @retval RUBY_Qtrue It is a proc. - * @retval RUBY_Qfalse Otherwise. - */ -VALUE rb_obj_is_proc(VALUE recv); - -/** - * Evaluates the passed proc with the passed arguments. - * - * @param[in] recv The proc to call. - * @param[in] args An instance of ::RArray which is the arguments. - * @exception rb_eException Any exceptions happen inside. - * @return What the proc evaluates to. - */ -VALUE rb_proc_call(VALUE recv, VALUE args); - -/** - * Identical to rb_proc_call(), except you can specify how to handle the last - * element of the given array. - * - * @param[in] recv The proc to call. - * @param[in] args An instance of ::RArray which is the arguments. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `args`' last is not a keyword argument. - * - RB_PASS_KEYWORDS `args`' last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eException Any exceptions happen inside. - * @return What the proc evaluates to. - */ -VALUE rb_proc_call_kw(VALUE recv, VALUE args, int kw_splat); - -/** - * Identical to rb_proc_call(), except you can additionally pass another proc - * object, as a block. Nowadays procs can take blocks: - * - * ```ruby - * l = -> (positional, optional=nil, *rest, kwarg:, **kwrest, &block) { - * # ... how can we pass this `&block`? ^^^^^^ - * } - * ``` - * - * And this function is to pass one to such procs. - * - * @param[in] recv The proc to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of proc arguments. - * @param[in] proc Proc as a passed block. - * @exception rb_eException Any exceptions happen inside. - * @return What the proc evaluates to. - */ -VALUE rb_proc_call_with_block(VALUE recv, int argc, const VALUE *argv, VALUE proc); - -/** - * Identical to rb_proc_call_with_block(), except you can specify how to handle - * the last element of the given array. It can also be seen as a routine - * identical to rb_proc_call_kw(), except you can additionally pass another - * proc object as a block. - * - * @param[in] recv The proc to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of proc arguments. - * @param[in] proc Proc as a passed block. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `args`' last is not a keyword argument. - * - RB_PASS_KEYWORDS `args`' last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eException Any exceptions happen inside. - * @return What the proc evaluates to. - */ -VALUE rb_proc_call_with_block_kw(VALUE recv, int argc, const VALUE *argv, VALUE proc, int kw_splat); - -/** - * Queries the number of mandatory arguments of the given Proc. If its block - * is declared to take no arguments, returns `0`. If the block is known to - * take exactly `n` arguments, returns `n`. If the block has optional - * arguments, returns `-n-1`, where `n` is the number of mandatory arguments, - * with the exception for blocks that are not lambdas and have only a finite - * number of optional arguments; in this latter case, returns `n`. Keyword - * arguments will be considered as a single additional argument, that argument - * being mandatory if any keyword argument is mandatory. - * - * @param[in] recv Target Proc object. - * @retval 0 It takes no arguments. - * @retval >0 It takes exactly this number of arguments. - * @retval <0 It takes optional arguments. - */ -int rb_proc_arity(VALUE recv); - -/** - * Queries if the given object is a lambda. Instances of ::rb_cProc are either - * lambda or proc. They differ in several points. This function can - * distinguish them without actually evaluating their contents. - * - * @param[in] recv Target proc object. - * @retval RUBY_Qtrue It is a lambda. - * @retval RUBY_Qfalse Otherwise. - */ -VALUE rb_proc_lambda_p(VALUE recv); - -/** - * Snapshots the current execution context and turn it into an instance of - * ::rb_cBinding. - * - * @return An instance of ::rb_cBinding. - */ -VALUE rb_binding_new(void); - -/** - * Creates a method object. A method object is a proc-like object that you can - * "call". Note that a method object snapshots the method at the time the - * object is created: - * - * ```ruby - * class Foo - * def foo - * return 1 - * end - * end - * - * obj = Foo.new.method(:foo) - * - * class Foo - * def foo - * return 2 - * end - * end - * - * obj.call # => 1, not 2. - * ``` - * - * @param[in] recv Receiver of the method. - * @param[in] mid Method name, in either String or Symbol. - * @exception rb_eNoMethodError No such method. - * @return An instance of ::rb_cMethod. - */ -VALUE rb_obj_method(VALUE recv, VALUE mid); - -/** - * Queries if the given object is a method. - * - * @note This is about the object's data structure, not its class etc. - * @param[in] recv Object in question. - * @retval RUBY_Qtrue It is a method. - * @retval RUBY_Qfalse Otherwise. - */ -VALUE rb_obj_is_method(VALUE recv); - -/** - * Evaluates the passed method with the passed arguments. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] recv The method object to call. - * @exception rb_eTypeError `recv` is not a method. - * @exception rb_eException Any exceptions happen inside. - * @return What the method returns. - */ -VALUE rb_method_call(int argc, const VALUE *argv, VALUE recv); - -/** - * Identical to rb_method_call(), except you can specify how to handle the last - * element of the given array. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] recv The method object to call. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `args`' last is not a keyword argument. - * - RB_PASS_KEYWORDS `args`' last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eTypeError `recv` is not a method. - * @exception rb_eException Any exceptions happen inside. - * @return What the method returns. - */ -VALUE rb_method_call_kw(int argc, const VALUE *argv, VALUE recv, int kw_splat); - -/** - * Identical to rb_proc_call(), except you can additionally pass a proc as a - * block. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] recv The method object to call. - * @param[in] proc Proc as a passed block. - * @exception rb_eTypeError `recv` is not a method. - * @exception rb_eException Any exceptions happen inside. - * @return What the method returns. - */ -VALUE rb_method_call_with_block(int argc, const VALUE *argv, VALUE recv, VALUE proc); - -/** - * Identical to rb_method_call_with_block(), except you can specify how to - * handle the last element of the given array. It can also be seen as a - * routine identical to rb_method_call_kw(), except you can additionally pass - * another proc object as a block. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] recv The method object to call. - * @param[in] proc Proc as a passed block. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `args`' last is not a keyword argument. - * - RB_PASS_KEYWORDS `args`' last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @exception rb_eTypeError `recv` is not a method. - * @exception rb_eException Any exceptions happen inside. - * @return What the method returns. - */ -VALUE rb_method_call_with_block_kw(int argc, const VALUE *argv, VALUE recv, VALUE proc, int kw_splat); - -/** - * Queries the number of mandatory arguments of the method defined in the given - * module. If it is declared to take no arguments, returns `0`. If it takes - * exactly `n` arguments, returns `n`. If it has optional arguments, returns - * `-n-1`, where `n` is the number of mandatory arguments. Keyword arguments - * will be considered as a single additional argument, that argument being - * mandatory if any keyword argument is mandatory. - * - * @param[in] mod Namespace to search a method for. - * @param[in] mid Method id. - * @retval 0 It takes no arguments. - * @retval >0 It takes exactly this number of arguments. - * @retval <0 It takes optional arguments. - */ -int rb_mod_method_arity(VALUE mod, ID mid); - -/** - * Identical to rb_mod_method_arity(), except it searches for singleton methods - * rather than instance methods. - * - * @param[in] obj Object to search for a singleton method. - * @param[in] mid Method id. - * @retval 0 It takes no arguments. - * @retval >0 It takes exactly this number of arguments. - * @retval <0 It takes optional arguments. - */ -int rb_obj_method_arity(VALUE obj, ID mid); - -/* eval.c */ - -RBIMPL_ATTR_NONNULL((1)) -/** - * Protects a function call from potential global escapes from the function. - * Such global escapes include exceptions, `throw`, `break`, for example. - * - * It first calls the function func with `args` as the argument. If no global - * escape occurred during the function, it returns the result and `*state` is - * zero. Otherwise, it returns ::RUBY_Qnil and sets `*state` to nonzero. If - * `state` is `NULL`, it is not set in both cases. - * - * @param[in] func A function that potentially escapes globally. - * @param[in] args Passed as-is to `func`. - * @param[out] state State of execution. - * @return What `func` returns, or an undefined value when it did not - * return. - * @post `*state` is set to zero if succeeded. Nonzero otherwise. - * @warning You have to clear the error info with `rb_set_errinfo(Qnil)` if - * you decide to ignore the caught exception. - * @see rb_eval_string_protect() - * @see rb_load_protect() - * - * @internal - * - * The "undefined value" described above is in fact ::RUBY_Qnil for now. But - * @shyouhei doesn't think that we would never change that. - * - * Though not a part of our public API, `state` is in fact an - * enum ruby_tag_type. You can see the potential "nonzero" values by looking - * at vm_core.h. - */ -VALUE rb_protect(VALUE (*func)(VALUE args), VALUE args, int *state); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_PROC_H */ diff --git a/libs/libruby/ruby/internal/intern/process.h b/libs/libruby/ruby/internal/intern/process.h deleted file mode 100644 index 7a7b24e..0000000 --- a/libs/libruby/ruby/internal/intern/process.h +++ /dev/null @@ -1,273 +0,0 @@ -#ifndef RBIMPL_INTERN_PROCESS_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_PROCESS_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_mProcess. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/config.h" /* rb_pid_t is defined here. */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* process.c */ - -/** - * Sets the "last status", or the `$?`. - * - * @param[in] status The termination status, as defined in `waitpid(3posix)`. - * @param[in] pid The last child of the current process. - * @post `$?` is updated. - */ -void rb_last_status_set(int status, rb_pid_t pid); - -/** - * Queries the "last status", or the `$?`. - * - * @retval RUBY_Qnil The current thread has no dead children. - * @retval otherwise An instance of Process::Status describing the status of - * the child that was most recently `wait`-ed. - */ -VALUE rb_last_status_get(void); - -RBIMPL_ATTR_NONNULL(()) -/** - * Executes a shell command. - * - * @warning THIS FUNCTION RETURNS on error! - * @param[in] cmd Passed to the shell. - * @retval -1 Something prevented the command execution. - * @post Upon successful execution this function doesn't return. - * @post In case it returns the `errno` is set properly. - */ -int rb_proc_exec(const char *cmd); - -RBIMPL_ATTR_NORETURN() -/** - * Replaces the current process by running the given external command. This is - * the implementation of `Kernel#exec`. - * - * @param[in] argc Number of objects in `argv`. - * @param[in] argv Command and its options to execute. - * @exception rb_eTypeError Invalid options e.g. non-String argv. - * @exception rb_eArgError Invalid options e.g. redirection cycle. - * @exception rb_eNotImpError Not implemented e.g. no `setuid(2)`. - * @exception rb_eRuntimeError `Process::UID.switch` in operation. - * @exception rb_eSystemCallError `execve(2)` failed. - * @warning This function doesn't return. - * @warning On failure it raises. On success the process is replaced. - * - * @internal - * - * @shyouhei have to say that the rdoc for `Kernel#exec` is fairly incomplete. - * AFAIK this function ultimately takes the following signature: - * - * ```rbs - * type boolx = bool | nil # != `boolish` - * - * type rlim_t = Integer # rlim_cur - * | [ Integer, Integer ] # rlim_cur, rlim_max - * - * type uid_t = String # e.g. "root" - * | Integer # e.g. 0 - * - * type gid_t = String # e.g. "wheel" - * | Integer # e.g. 0 - * - * type fmode = String # e.g. "rb" - * | Integer # e.g. O_RDONLY | O_BINARY - * - * type mode_t = Integer # e.g. 0644 - * - * type pgrp = true # Creates a dedicated pgroup - * | 0 # ditto - * | nil # Uses the current one - * | Integer # Uses this specific pgroup - * - * type fd = :in # STDIN - * | :out # STDOUT - * | :err # STDERR - * | IO # This specific IO - * | Integer # A file descriptor of this # - * - * type src = fd | [ fd ] - * type dst = :close # Intuitive - * | fd # Intuitive - * | String # Open a file at this path - * | [ String ] # ... using O_RDONLY - * | [ String, fmode ] # ... using this mode - * | [ String, fmode, mode_t ] # ... with a permission - * | [ :child, fd ] # fd of child side - * - * type redir = Hash[ src, dst ] - * - * # ---- - * - * # Key-value pair of environment variables - * type envp = Hash[ String, String ] - * - * # Actual name (and the name passed to the subprocess if any) - * type arg0 = String | [ String, String ] - * - * # Arbitrary string parameters - * type argv = String - * - * # Exec options: - * type argh = redir | { - * chdir: String, # Working directory - * close_others: boolx, # O_CLOEXEC like behaviour - * gid: gid_t, # setegid(2) - * pgrooup: pgrp, # setpgrp(2) - * rlimit_as: rlim_t, # setrlimit(2) - * rlimit_core: rlim_t, # ditto - * rlimit_cpu: rlim_t, # ditto - * rlimit_data: rlim_t, # ditto - * rlimit_fsize: rlim_t, # ditto - * rlimit_memlock: rlim_t, # ditto - * rlimit_msgqueue: rlim_t, # ditto - * rlimit_nice: rlim_t, # ditto - * rlimit_nofile: rlim_t, # ditto - * rlimit_nproc: rlim_t, # ditto - * rlimit_rss: rlim_t, # ditto - * rlimit_rtprio: rlim_t, # ditto - * rlimit_rttime: rlim_t, # ditto - * rlimit_sbsize: rlim_t, # ditto - * rlimit_sigpending: rlim_t, # ditto - * rlimit_stack: rlim_t, # ditto - * uid: uid_t, # seteuid(2) - * umask: mode_t, # umask(2) - * unsetenv_others: boolx # Unset everything except the passed envp - * } - * - * # ==== - * - * class Kernel - * def self?.exec - * : ( arg0 cmd, *argv args ) -> void - * | ( arg0 cmd, *argv args, argh opts) -> void - * | (envp env, arg0 cmd, *argv args ) -> void - * | (envp env, arg0 cmd, *argv args, argh opts) -> void - * end - * ``` - */ -VALUE rb_f_exec(int argc, const VALUE *argv); - -/** - * Waits for a process, with releasing GVL. - * - * @param[in] pid Process ID. - * @param[out] status The wait status is filled back. - * @param[in] flags Wait options. - * @retval -1 System call failed, errno set. - * @retval 0 WNOHANG but no waitable children. - * @retval otherwise A process ID that was `wait()`-ed. - * @post Upon successful return `status` is updated to have the process' - * status. - * @note `status` can be NULL. - * @note The arguments are passed through to underlying system call(s). - * Can have special meanings. For instance passing `(rb_pid_t)-1` - * to `pid` means it waits for any processes, under - * POSIX-compliant situations. - */ -rb_pid_t rb_waitpid(rb_pid_t pid, int *status, int flags); - -/** - * This is a shorthand of rb_waitpid without status and flags. It has been - * like this since the very beginning. The initial revision already did the - * same thing. Not sure why, then, it has been named `syswait`. AFAIK this is - * different from how `wait(3posix)` works. - * - * @param[in] pid Passed to rb_waitpid(). - */ -void rb_syswait(rb_pid_t pid); - -/** - * Identical to rb_f_exec(), except it spawns a child process instead of - * replacing the current one. - * - * @param[in] argc Number of objects in `argv`. - * @param[in] argv Command and its options to execute. - * @exception rb_eTypeError Invalid options e.g. non-String argv. - * @exception rb_eArgError Invalid options e.g. redirection cycle. - * @exception rb_eNotImpError Not implemented e.g. no `setuid(2)`. - * @exception rb_eRuntimeError `Process::UID.switch` in operation. - * @retval -1 Child process died for some reason. - * @retval otherwise The ID of the born child. - * - * @internal - * - * This is _really_ identical to rb_f_exec() until ultimately calling the - * system call. Almost everything are shared among these two (and - * rb_f_system()). - */ -rb_pid_t rb_spawn(int argc, const VALUE *argv); - -/** - * Identical to rb_spawn(), except you can additionally know the detailed - * situation in case of abnormal parturitions. - * - * @param[in] argc Number of objects in `argv`. - * @param[in] argv Command and its options to execute. - * @param[out] errbuf Error description write-back buffer. - * @param[in] buflen Number of bytes of `errbuf`, including NUL. - * @exception rb_eTypeError Invalid options e.g. non-String argv. - * @exception rb_eArgError Invalid options e.g. redirection cycle. - * @exception rb_eNotImpError Not implemented e.g. no `setuid(2)`. - * @exception rb_eRuntimeError `Process::UID.switch` in operation. - * @retval -1 Child process died for some reason. - * @retval otherwise The ID of the born child. - * @post In case of `-1`, at most `buflen` bytes of the reason why is - * written back to `errbuf`. - */ -rb_pid_t rb_spawn_err(int argc, const VALUE *argv, char *errbuf, size_t buflen); - -/** - * Gathers info about resources consumed by the current process. - * - * @param[in] _ Not used. Pass anything. - * @return An instance of `Process::Tms`. - * - * @internal - * - * This function might or might not exist depending on `./confiugre` result. - * It must be a portability hell. Better not use. - */ -VALUE rb_proc_times(VALUE _); - -/** - * "Detaches" a subprocess. In POSIX systems every child processes that a - * process creates must be `wait(2)`-ed. A child process that died yet has not - * been waited so far is called a "zombie", which more or less consumes - * resources. This function automates reclamation of such processes. Once - * after this function successfully returns you can basically forget about the - * child process. - * - * @param[in] pid Process to wait. - * @return An instance of ::rb_cThread which is `waitpid(2)`-ing `pid`. - * @post You can just forget about the return value. GC reclaims it. - * @post You can know the exit status by querying `#value` of the - * return value (which is a blocking operation). - */ -VALUE rb_detach_process(rb_pid_t pid); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_PROCESS_H */ diff --git a/libs/libruby/ruby/internal/intern/random.h b/libs/libruby/ruby/internal/intern/random.h deleted file mode 100644 index 5577f53..0000000 --- a/libs/libruby/ruby/internal/intern/random.h +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef RBIMPL_INTERN_RANDOM_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_RANDOM_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief MT19937 backended pseudo random number generator. - * @see Matsumoto, M., Nishimura, T., "Mersenne Twister: A 623- - * dimensionally equidistributed uniform pseudorandom number - * generator", ACM Trans. on Modeling and Computer Simulation, 8 - * (1): pp 3-30, 1998. https://doi.org/10.1145/272991.272995 - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* random.c */ - -/** - * Generates a 32 bit random number. - * - * @return A random number. - * @note Now that we have ractors, the RNG behind this function is - * per-ractor. - */ -unsigned int rb_genrand_int32(void); - -/** - * Generates a `double` random number. - * - * @return A random number. - * @note This function shares the RNG with rb_genrand_int32(). - */ -double rb_genrand_real(void); - -/** - * Resets the RNG behind rb_genrand_int32()/rb_genrand_real(). - * - * @post The (now per-ractor) default RNG's internal state is cleared. - */ -void rb_reset_random_seed(void); - -/** - * Generates a String of random bytes. - * - * @param[in,out] rnd An instance of ::rb_cRandom. - * @param[in] n Requested number of bytes. - * @return An instance of ::rb_cString, of binary, of `n` bytes length, - * whose contents are random bits. - * - * @internal - * - * @shyouhei doesn't know if this is an Easter egg or an official feature, but - * this function can take a wider range of objects, such as `Socket::Ifaddr`. - * The arguments are just silently ignored and the default RNG is used instead, - * if they are non-RNG. - */ -VALUE rb_random_bytes(VALUE rnd, long n); - -/** - * Identical to rb_genrand_int32(), except it generates using the passed RNG. - * - * @param[in,out] rnd An instance of ::rb_cRandom. - * @return A random number. - */ -unsigned int rb_random_int32(VALUE rnd); - -/** - * Identical to rb_genrand_real(), except it generates using the passed RNG. - * - * @param[in,out] rnd An instance of ::rb_cRandom. - * @return A random number. - */ -double rb_random_real(VALUE rnd); - -/** - * Identical to rb_genrand_ulong_limited(), except it generates using the - * passed RNG. - * - * @param[in,out] rnd An instance of ::rb_cRandom. - * @param[in] limit Max possible return value. - * @return A random number, distributed in `[0, limit]` interval. - * @note Note it can return `limit`. - * @note Whether the return value distributes uniformly in the - * interval or not depends on how the argument RNG behaves; at - * least in case of MT19937 it does. - */ -unsigned long rb_random_ulong_limited(VALUE rnd, unsigned long limit); - -/** - * Generates a random number whose upper limit is `i`. - * - * @param[in] i Max possible return value. - * @return A random number, uniformly distributed in `[0, limit]` interval. - * @note Note it can return `i`. - */ -unsigned long rb_genrand_ulong_limited(unsigned long i); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_RANDOM_H */ diff --git a/libs/libruby/ruby/internal/intern/range.h b/libs/libruby/ruby/internal/intern/range.h deleted file mode 100644 index 1f7d7c3..0000000 --- a/libs/libruby/ruby/internal/intern/range.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef RBIMPL_INTERN_RANGE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_RANGE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cRange. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* range.c */ - -/** - * Creates a new Range. - * - * @param[in] beg "Left" or "lowest" endpoint of the range. - * @param[in] end "Right" or "highest" endpoint of the range. - * @param[in] excl Whether the range is open-ended. - * @exception rb_eArgError `beg` and `end` are not comparable. - * @note These days both endpoints can be ::RUBY_Qnil, which means that - * endpoint is unbound. - */ -VALUE rb_range_new(VALUE beg, VALUE end, int excl); - -RBIMPL_ATTR_NONNULL(()) -/** - * Deconstructs a numerical range. As the arguments are `long` based, it - * expects everything are in the `long` domain. - * - * @param[in] range A range of numerical endpoints. - * @param[out] begp Return value buffer. - * @param[out] lenp Return value buffer. - * @param[in] len Updated length. - * @param[in] err In case `len` is out of range... - * - `0`: returns ::RUBY_Qnil. - * - `1`: raises ::rb_eRangeError. - * - `2`: `beg` and `len` expanded accordingly. - * @exception rb_eTypeError `range` is not a numerical range. - * @exception rb_eRangeError `range` cannot fit into `long`. - * @retval RUBY_Qfalse `range` is not an ::rb_cRange. - * @retval RUBY_Qnil `len` is out of `range` but `err` is zero. - * @retval RUBY_Qtrue Otherwise. - * @post `beg` is the (possibly updated) left endpoint. - * @post `len` is the (possibly updated) length of the range. - * - * @internal - * - * The complex error handling switch reflects the fact that `Array#[]=` and - * `String#[]=` behave differently when they take ranges. - */ -VALUE rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err); - -RBIMPL_ATTR_NONNULL(()) -/** - * Deconstructs a range into its components. - * - * @param[in] range Range or range-ish object. - * @param[out] begp Return value buffer. - * @param[out] endp Return value buffer. - * @param[out] exclp Return value buffer. - * @retval RUBY_Qfalse `range` is not an instance of ::rb_cRange. - * @retval RUBY_Qtrue Argument pointers are updated. - * @post `*begp` is the left endpoint of the range. - * @post `*endp` is the right endpoint of the range. - * @post `*exclp` is whether the range is open-ended or not. - */ -int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_RANGE_H */ diff --git a/libs/libruby/ruby/internal/intern/rational.h b/libs/libruby/ruby/internal/intern/rational.h deleted file mode 100644 index ff4beca..0000000 --- a/libs/libruby/ruby/internal/intern/rational.h +++ /dev/null @@ -1,172 +0,0 @@ -#ifndef RBIMPL_INTERN_RATIONAL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_RATIONAL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cRational. - */ -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/arithmetic/long.h" /* INT2FIX is here. */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* rational.c */ - -/** - * Identical to rb_rational_new(), except it skips argument validations. It is - * thus dangerous for extension libraries. For instance `1/0r` could be - * constructed using this. - * - * @param[in] num Numerator, an instance of ::rb_cInteger. - * @param[in] den Denominator, an instance of ::rb_cInteger. - * @exception rb_eTypeError Either argument is not an Integer. - * @return An instance of ::rb_cRational whose value is `(num/den)r`. - */ -VALUE rb_rational_raw(VALUE num, VALUE den); - -/** - * Shorthand of `(x/1)r`. As `x` is already an Integer, it practically - * converts it into a Rational of the identical value. - * - * @param[in] x An instance of ::rb_cInteger. - * @return An instance of ::rb_cRational, whose value is `(x/1)r`. - */ -#define rb_rational_raw1(x) rb_rational_raw((x), INT2FIX(1)) - -/** @alias{rb_rational_raw} */ -#define rb_rational_raw2(x,y) rb_rational_raw((x), (y)) - -/** - * Constructs a Rational, with reduction. This returns for instance `(2/3)r` - * for `rb_rational_new(INT2NUM(-384), INT2NUM(-576))`. - * - * @param[in] num Numerator, an instance of ::rb_cInteger. - * @param[in] den Denominator, an instance of ::rb_cInteger. - * @exception rb_eZeroDivError `den` is zero. - * @return An instance of ::rb_cRational whose value is `(num/den)r`. - */ -VALUE rb_rational_new(VALUE num, VALUE den); - -/** - * Shorthand of `(x/1)r`. As `x` is already an Integer, it practically - * converts it into a Rational of the identical value. - * - * @param[in] x An instance of ::rb_cInteger. - * @return An instance of ::rb_cRational, whose value is `(x/1)r`. - */ -#define rb_rational_new1(x) rb_rational_new((x), INT2FIX(1)) - -/** @alias{rb_rational_new} */ -#define rb_rational_new2(x,y) rb_rational_new((x), (y)) - -/** - * Converts various values into a Rational. This function accepts: - * - * - Instances of ::rb_cInteger (taken as-is), - * - Instances of ::rb_cRational (taken as-is), - * - Instances of ::rb_cFloat (applies `#to_r`), - * - Instances of ::rb_cComplex (applies `#to_r`), - * - Instances of ::rb_cString (applies `#to_r`), - * - Other objects that respond to `#to_r`. - * - * It (possibly recursively) applies `#to_r` until both sides become either - * Integer or Rational, then divides them. - * - * As a special case, passing ::RUBY_Qundef to `den` is the same as passing - * `RB_INT2NUM(1)`. - * - * @param[in] num Numerator (see above). - * @param[in] den Denominator (see above). - * @exception rb_eTypeError Passed something not described above. - * @exception rb_eFloatDomainError `#to_r` produced Nan/Inf. - * @exception rb_eZeroDivError `#to_r` produced zero for `den`. - * @return An instance of ::rb_cRational whose value is `(num/den)r`. - * - * @internal - * - * This was the implementation of `Kernel#Rational` before, but they diverged. - */ -VALUE rb_Rational(VALUE num, VALUE den); - -/** - * Shorthand of `(x/1)r`. It practically converts it into a Rational of the - * identical value. - * - * @param[in] x ::rb_cInteger, ::rb_cRational, or something that responds to - * `#to_r`. - * @return An instance of ::rb_cRational, whose value is `(x/1)r`. - */ -#define rb_Rational1(x) rb_Rational((x), INT2FIX(1)) - -/** @alias{rb_Rational} */ -#define rb_Rational2(x,y) rb_Rational((x), (y)) - -RBIMPL_ATTR_PURE() -/** - * Queries the numerator of the passed Rational. - * - * @param[in] rat An instance of ::rb_cRational. - * @return Its numerator part, which is an instance of ::rb_cInteger. - */ -VALUE rb_rational_num(VALUE rat); - -RBIMPL_ATTR_PURE() -/** - * Queries the denominator of the passed Rational. - * - * @param[in] rat An instance of ::rb_cRational. - * @return Its denominator part, which is an instance of ::rb_cInteger - * greater than or equal to one.. - */ -VALUE rb_rational_den(VALUE rat); - -/** - * Simplified approximation of a float. It returns a rational `rat` which - * satisfies: - * - * ``` - * flt - |prec| <= rat <= flt + |prec| - * ``` - * - * ```ruby - * 3.141592.rationalize(0.001) # => (201/64)r - * 3.141592.rationalize(0.01)' # => (22/7)r - * 3.141592.rationalize(0.1)' # => (16/5)r - * 3.141592.rationalize(1)' # => (3/1)r - * ``` - * - * @param[in] flt An instance of ::rb_cFloat to rationalise. - * @param[in] prec Another ::rb_cFloat, which is the "precision". - * @return Approximation of `flt`, in ::rb_cRational. - */ -VALUE rb_flt_rationalize_with_prec(VALUE flt, VALUE prec); - -/** - * Identical to rb_flt_rationalize_with_prec(), except it auto-detects - * appropriate precision depending on the passed value. - * - * @param[in] flt An instance of ::rb_cFloat to rationalise. - * @return Approximation of `flt`, in ::rb_cRational. - */ -VALUE rb_flt_rationalize(VALUE flt); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_RATIONAL_H */ diff --git a/libs/libruby/ruby/internal/intern/re.h b/libs/libruby/ruby/internal/intern/re.h deleted file mode 100644 index 31f5593..0000000 --- a/libs/libruby/ruby/internal/intern/re.h +++ /dev/null @@ -1,249 +0,0 @@ -#ifndef RBIMPL_INTERN_RE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_RE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cRegexp. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* re.c */ - -/** - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - * - * @internal - * - * This was a function that switched between memcmp and rb_memcicmp depending - * on then-called `ruby_ignorecase`, or the `$=` global variable. That feature - * was abandoned in sometime around version 1.9.0. - */ -#define rb_memcmp memcmp - -/** - * Identical to st_locale_insensitive_strcasecmp(), except it is timing safe - * and returns something different. - * - * @param[in] s1 Comparison LHS. - * @param[in] s2 Comparison RHS. - * @param[in] n Comparison shall stop after first `n` bytes are scanned. - * @retval <0 `s1` is "less" than `s2`. - * @retval 0 Both sides converted into lowercase would be identical. - * @retval >0 `s1` is "greater" than `s2`. - * @note The "case" here means that of the POSIX Locale. - * - * @internal - * - * Can accept NULLs as long as n is also 0, and returns 0. - */ -int rb_memcicmp(const void *s1,const void *s2, long n); - -/** - * Asserts that the given MatchData is "occupied". MatchData shares its - * backend storages with its Regexp object. But programs can destructively - * tamper its contents. Calling this function beforehand shall prevent such - * modifications to spill over into other objects. - * - * @param[out] md Target instance of ::rb_cMatch. - * @post The object is "busy". - * - * @internal - * - * There is rb_match_unbusy internally, but extension libraries are left unable - * to do so. - */ -void rb_match_busy(VALUE md); - -/** - * Identical to rb_reg_nth_match(), except it just returns Boolean. This could - * skip allocating a returning string, resulting in reduced memory footprints - * if applicable. - * - * @param[in] n Match index. - * @param[in] md An instance of ::rb_cMatch. - * @exception rb_eTypeError `md` is not initialised. - * @retval RUBY_Qnil There is no `n`-th capture. - * @retval RUBY_Qfalse There is a `n`-th capture and is empty. - * @retval RUBY_Qtrue There is a `n`-th capture that has something. - * - * @internal - * - * @shyouhei wonders: why there are both rb_reg_match_defined() and - * rb_match_nth_defined, which are largely the same things, but do not share - * their implementations at all? - */ -VALUE rb_reg_nth_defined(int n, VALUE md); - -/** - * Queries the nth captured substring. - * - * @param[in] n Match index. - * @param[in] md An instance of ::rb_cMatch. - * @exception rb_eTypeError `md` is not initialised. - * @retval RUBY_Qnil There is no `n`-th capture. - * @retval otherwise An allocated instance of ::rb_cString containing - * the contents captured. - */ -VALUE rb_reg_nth_match(int n, VALUE md); - -/** - * Queries the index of the given named capture. Captures could be named. But - * that doesn't mean named ones are not indexed. A regular expression can mix - * named and non-named captures, and they are all indexed. This function - * converts from a name to its index. - * - * @param[in] match An instance of ::rb_cMatch. - * @param[in] backref Capture name, in String, Symbol, or Numeric. - * @exception rb_eIndexError No such named capture. - * @return The index of the given name. - */ -int rb_reg_backref_number(VALUE match, VALUE backref); - -/** - * This just returns the argument, stringified. What a poor name. - * - * @param[in] md An instance of ::rb_cMatch. - * @return Its 0th capture (i.e. entire matched string). - */ -VALUE rb_reg_last_match(VALUE md); - -/** - * The portion of the original string before the given match. - * - * @param[in] md An instance of ::rb_cMatch. - * @return Its "prematch". This is perl's ``$```. - */ -VALUE rb_reg_match_pre(VALUE md); - -/** - * The portion of the original string after the given match. - * - * @param[in] md An instance of ::rb_cMatch. - * @return Its "postmatch". This is perl's `$'`. - */ -VALUE rb_reg_match_post(VALUE md); - -/** - * The portion of the original string that captured at the very last. - * - * @param[in] md An instance of ::rb_cMatch. - * @return Its "lastmatch". This is perl's `$+`. - */ -VALUE rb_reg_match_last(VALUE md); - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define HAVE_RB_REG_NEW_STR 1 - -/** - * Identical to rb_reg_new(), except it takes the expression in Ruby's string - * instead of C's. - * - * @param[in] src Source code in String. - * @param[in] opts Options e.g. ONIG_OPTION_MULTILINE. - * @exception rb_eRegexpError `src` and `opts` do not interface. - * @return Allocated new instance of ::rb_cRegexp. - */ -VALUE rb_reg_new_str(VALUE src, int opts); - -RBIMPL_ATTR_NONNULL(()) -/** - * Creates a new Regular expression. - * - * @param[in] src Source code. - * @param[in] len `strlen(src)`. - * @param[in] opts Options e.g. ONIG_OPTION_MULTILINE. - * @return Allocated new instance of ::rb_cRegexp. - */ -VALUE rb_reg_new(const char *src, long len, int opts); - -/** - * Allocates an instance of ::rb_cRegexp. - * - * @private - * - * Nobody should call this function. Regular expressions that are not - * initialised must not exist in the wild. - */ -VALUE rb_reg_alloc(void); - -/** - * Initialises an instance of ::rb_cRegexp. - * - * @private - * - * This just raises for ordinal regexp objects. Extension libraries must not - * use. - */ -VALUE rb_reg_init_str(VALUE re, VALUE s, int options); - -/** - * This is the match operator. - * - * @param[in] re An instance of ::rb_cRegexp. - * @param[in] str An instance of ::rb_cString. - * @exception rb_eTypeError `str` is not a string. - * @exception rb_eRegexpError Error inside of Onigmo (unlikely). - * @retval RUBY_Qnil Match failed. - * @retval otherwise Matched position (character index inside of - * `str`). - * @post `Regexp.last_match` is updated. - * @post `$&`, `$~`, etc., are updated. - * @note If you do this in ruby, named captures are assigned to local - * variable of the local scope. But that doesn't happen here. The - * assignment is done by the interpreter. - */ -VALUE rb_reg_match(VALUE re, VALUE str); - -/** - * Identical to rb_reg_match(), except it matches against rb_lastline_get() - * (or, the `$_`). - * - * @param[in] re An instance of ::rb_cRegexp. - * @exception rb_eRegexpError Error inside of Onigmo (unlikely). - * @retval RUBY_Qnil Match failed or `$_` is absent. - * @retval otherwise Matched position (character index inside of - * `$_`). - * @post `Regexp.last_match` is updated. - * @post `$&`, `$~`, etc., are updated. - */ -VALUE rb_reg_match2(VALUE re); - -/** - * Queries the options of the passed regular expression. - * - * @param[in] re An instance of ::rb_cRegexp. - * @return Its options. - * @note Possible return values are defined in Onigmo.h. - */ -int rb_reg_options(VALUE re); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_RE_H */ diff --git a/libs/libruby/ruby/internal/intern/ruby.h b/libs/libruby/ruby/internal/intern/ruby.h deleted file mode 100644 index efe6142..0000000 --- a/libs/libruby/ruby/internal/intern/ruby.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef RBIMPL_INTERN_RUBY_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_RUBY_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Process-global APIs. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* ruby.c */ -/** @alias{rb_get_argv} */ -#define rb_argv rb_get_argv() - -/** - * The value of `$0` at process bootup. - * - * @note This is just a snapshot of `$0`, not the backend storage of it. `$0` - * could become something different because it is a writable global - * variable. Modifying it for instance affects `ps(1)` output. Don't - * assume they are synced. - */ -RUBY_EXTERN VALUE rb_argv0; - -/* io.c */ - -/** - * Queries the arguments passed to the current process that you can access from - * Ruby as `ARGV`. - * - * @return An array of strings containing arguments passed to the process. - */ -VALUE rb_get_argv(void); - -/* ruby.c */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Loads the given file. This function opens the given pathname for reading, - * parses the contents as a Ruby script, and returns an opaque "node" pointer. - * You can then pass it to ruby_run_node() for evaluation. - * - * @param[in] file File name, or "-" to read from stdin. - * @return Opaque "node" pointer. - */ -void *rb_load_file(const char *file); - -/** - * Identical to rb_load_file(), except it takes the argument as a Ruby's string - * instead of C's. - * - * @param[in] file File name, or "-" to read from stdin. - * @return Opaque "node" pointer. - */ -void *rb_load_file_str(VALUE file); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_RUBY_H */ diff --git a/libs/libruby/ruby/internal/intern/select.h b/libs/libruby/ruby/internal/intern/select.h deleted file mode 100644 index fabc287..0000000 --- a/libs/libruby/ruby/internal/intern/select.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef RBIMPL_INTERN_SELECT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_SELECT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs to provide ::rb_fd_select(). - * @note Functions and structs defined in this header file are not - * necessarily ruby-specific. They don't need ::VALUE etc. - */ -#include "ruby/internal/config.h" - -#ifdef HAVE_SYS_TYPES_H -# include /* for NFDBITS (BSD Net/2) */ -#endif - -#include "ruby/internal/dllexport.h" - -/* thread.c */ -#if defined(NFDBITS) && defined(HAVE_RB_FD_INIT) -# include "ruby/internal/intern/select/largesize.h" -#elif defined(_WIN32) -# include "ruby/internal/intern/select/win32.h" -# /** Does nothing (defined for compatibility). */ -# define rb_fd_resize(n, f) ((void)(f)) -#else -# include "ruby/internal/intern/select/posix.h" -# /** Does nothing (defined for compatibility). */ -# define rb_fd_resize(n, f) ((void)(f)) -#endif - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -struct timeval; - -/** - * Waits for multiple file descriptors at once. This is basically a wrapper of - * system-provided select() with releasing GVL, to allow other Ruby threads run - * in parallel. - * - * @param[in] nfds Max FD in everything passed, plus one. - * @param[in,out] rfds Set of FDs to wait for reads. - * @param[in,out] wfds Set of FDs to wait for writes. - * @param[in,out] efds Set of FDs to wait for OOBs. - * @param[in,out] timeout Max blocking duration. - * @retval -1 Failed, errno set. - * @retval 0 Timeout exceeded. - * @retval otherwise Total number of file descriptors returned. - * @post `rfds` contains readable FDs. - * @post `wfds` contains writable FDs. - * @post `efds` contains exceptional FDs. - * @post `timeout` is the time left. - * @note All pointers are allowed to be null pointers. - * - * Although backend threads can run in parallel of this function, touching a - * file descriptor from multiple threads could be problematic. For instance - * what happens when a thread closes a file descriptor that is selected by - * someone else, vastly varies among operating systems. You would better avoid - * touching an fd from more than one threads. - * - * @internal - * - * Although any file descriptors are possible here, it makes completely no - * sense to pass a descriptor that is not `O_NONBLOCK`. If you want to know - * the reason for this limitatuon in detail, you might find this thread super - * interesting: https://lkml.org/lkml/2004/10/6/117 - */ -int rb_thread_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_SELECT_H */ diff --git a/libs/libruby/ruby/internal/intern/select/largesize.h b/libs/libruby/ruby/internal/intern/select/largesize.h deleted file mode 100644 index d65f088..0000000 --- a/libs/libruby/ruby/internal/intern/select/largesize.h +++ /dev/null @@ -1,214 +0,0 @@ -#ifndef RBIMPL_INTERN_SELECT_LARGESIZE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_SELECT_LARGESIZE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs to provide ::rb_fd_select(). - * - * Several Unix platforms support file descriptors bigger than FD_SETSIZE in - * `select(2)` system call. - * - * - Linux 2.2.12 (?) - * - * - NetBSD 1.2 (src/sys/kern/sys_generic.c:1.25) - * `select(2)` documents how to allocate fd_set dynamically. - * http://netbsd.gw.com/cgi-bin/man-cgi?select++NetBSD-4.0 - * - * - FreeBSD 2.2 (src/sys/kern/sys_generic.c:1.19) - * - * - OpenBSD 2.0 (src/sys/kern/sys_generic.c:1.4) - * `select(2)` documents how to allocate fd_set dynamically. - * http://www.openbsd.org/cgi-bin/man.cgi?query=select&manpath=OpenBSD+4.4 - * - * - Solaris 8 has `select_large_fdset` - * - * - Mac OS X 10.7 (Lion) - * `select(2)` returns `EINVAL` if `nfds` is greater than `FD_SET_SIZE` and - * `_DARWIN_UNLIMITED_SELECT` (or `_DARWIN_C_SOURCE`) isn't defined. - * http://developer.apple.com/library/mac/#releasenotes/Darwin/SymbolVariantsRelNotes/_index.html - * - * When `fd_set` is not big enough to hold big file descriptors, it should be - * allocated dynamically. Note that this assumes `fd_set` is structured as - * bitmap. - * - * `rb_fd_init` allocates the memory. - * `rb_fd_term` frees the memory. - * `rb_fd_set` may re-allocate bitmap. - * - * So `rb_fd_set` doesn't reject file descriptors bigger than `FD_SETSIZE`. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" - -/**@cond INTERNAL_MACRO */ -#define rb_fd_ptr rb_fd_ptr -#define rb_fd_max rb_fd_max -/** @endcond */ - -struct timeval; - -/** - * The data structure which wraps the fd_set bitmap used by select(2). This - * allows Ruby to use FD sets larger than that allowed by historic limitations - * on modern platforms. - */ -typedef struct { - int maxfd; /**< Maximum allowed number of FDs. */ - fd_set *fdset; /**< File descriptors buffer */ -} rb_fdset_t; - -RBIMPL_SYMBOL_EXPORT_BEGIN() -RBIMPL_ATTR_NONNULL(()) -/** - * (Re-)initialises a fdset. One must be initialised before other `rb_fd_*` - * operations. Analogous to calling `malloc(3)` to allocate an `fd_set`. - * - * @param[out] f An fdset to squash. - * @post `f` holds no file descriptors. - */ -void rb_fd_init(rb_fdset_t *f); - -RBIMPL_ATTR_NONNULL(()) -/** - * Destroys the ::rb_fdset_t, releasing any memory and resources it used. It - * must be reinitialised using rb_fd_init() before future use. Analogous to - * calling `free(3)` to release memory for an `fd_set`. - * - * @param[out] f An fdset to squash. - * @post `f` holds no file descriptors. - */ -void rb_fd_term(rb_fdset_t *f); - -RBIMPL_ATTR_NONNULL(()) -/** - * Wipes out the current set of FDs. - * - * @param[out] f The fdset to clear. - * @post `f` has no FDs. - */ -void rb_fd_zero(rb_fdset_t *f); - -RBIMPL_ATTR_NONNULL(()) -/** - * Sets an fd to a fdset. - * - * @param[in] fd A file descriptor. - * @param[out] f Target fdset. - * @post `f` holds `fd`. - */ -void rb_fd_set(int fd, rb_fdset_t *f); - -RBIMPL_ATTR_NONNULL(()) -/** - * Releases a specific FD from the given fdset. - * - * @param[in] fd Target FD. - * @param[out] f The fdset that holds `fd`. - * @post `f` doesn't hold n. - */ -void rb_fd_clr(int fd, rb_fdset_t *f); - -RBIMPL_ATTR_NONNULL(()) -RBIMPL_ATTR_PURE() -/** - * Queries if the given FD is in the given set. - * - * @param[in] fd Target FD. - * @param[in] f The fdset to scan. - * @retval 1 Yes there is. - * @retval 0 No there isn't. - * @see http://www.freebsd.org/cgi/query-pr.cgi?pr=91421 - */ -int rb_fd_isset(int fd, const rb_fdset_t *f); - -/** - * Destructively overwrites an fdset with another. - * - * @param[out] dst Target fdset. - * @param[in] src Source fdset. - * @param[in] max Maximum number of file descriptors to copy. - * @post `dst` is a copy of `src`. - */ -void rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int max); - -/** - * Identical to rb_fd_copy(), except it copies unlimited number of file - * descriptors. - * - * @param[out] dst Target fdset. - * @param[in] src Source fdset. - * @post `dst` is a copy of `src`. - */ -void rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src); - -/** - * Waits for multiple file descriptors at once. - * - * @param[in] nfds Max FD in everything passed, plus one. - * @param[in,out] rfds Set of FDs to wait for reads. - * @param[in,out] wfds Set of FDs to wait for writes. - * @param[in,out] efds Set of FDs to wait for OOBs. - * @param[in,out] timeout Max blocking duration. - * @retval -1 Failed, errno set. - * @retval 0 Timeout exceeded. - * @retval otherwise Total number of file descriptors returned. - * @post `rfds` contains readable FDs. - * @post `wfds` contains writable FDs. - * @post `efds` contains exceptional FDs. - * @post `timeout` is the time left. - * @note All pointers are allowed to be null pointers. - */ -int rb_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout); -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_NONNULL(()) -RBIMPL_ATTR_PURE() -/** - * Raw pointer to `fd_set`. - * - * @param[in] f Target fdset. - * @retval NULL `f` is already terminated by rb_fd_term(). - * @retval otherwise Underlying fd_set. - * - * @internal - * - * Extension library must not touch raw pointers. It was a bad idea to let - * them use it. - */ -static inline fd_set * -rb_fd_ptr(const rb_fdset_t *f) -{ - return f->fdset; -} - -RBIMPL_ATTR_NONNULL(()) -RBIMPL_ATTR_PURE() -/** - * It seems this function has no use. Maybe just remove? - * - * @param[in] f A set. - * @return Number of file descriptors stored. - */ -static inline int -rb_fd_max(const rb_fdset_t *f) -{ - return f->maxfd; -} - -#endif /* RBIMPL_INTERN_SELECT_LARGESIZE_H */ diff --git a/libs/libruby/ruby/internal/intern/select/posix.h b/libs/libruby/ruby/internal/intern/select/posix.h deleted file mode 100644 index 0a9b0b2..0000000 --- a/libs/libruby/ruby/internal/intern/select/posix.h +++ /dev/null @@ -1,144 +0,0 @@ -#ifndef RBIMPL_INTERN_SELECT_POSIX_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_SELECT_POSIX_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs to provide ::rb_fd_select(). - */ -#include "ruby/internal/config.h" - -#ifdef HAVE_SYS_SELECT_H -# include /* for select(2) (modern POSIX) */ -#endif - -#ifdef HAVE_UNISTD_H -# include /* for select(2) (archaic UNIX) */ -#endif - -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/noalias.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/pure.h" - -/** - * The data structure which wraps the fd_set bitmap used by `select(2)`. This - * allows Ruby to use FD sets larger than what has been historically allowed on - * modern platforms. - * - * @internal - * - * ... but because this header file is included only when the system is with - * that "historic restrictions", this is nothing more than an alias of fd_set. - */ -typedef fd_set rb_fdset_t; - -/** Clears the given ::rb_fdset_t. */ -#define rb_fd_zero FD_ZERO - -/** Sets the given fd to the ::rb_fdset_t. */ -#define rb_fd_set FD_SET - -/** Unsets the given fd from the ::rb_fdset_t. */ -#define rb_fd_clr FD_CLR - -/** Queries if the given fd is in the ::rb_fdset_t. */ -#define rb_fd_isset FD_ISSET - -/** Initialises the :given :rb_fdset_t. */ -#define rb_fd_init FD_ZERO - -/** Waits for multiple file descriptors at once. */ -#define rb_fd_select select - -/**@cond INTERNAL_MACRO */ -#define rb_fd_copy rb_fd_copy -#define rb_fd_dup rb_fd_dup -#define rb_fd_ptr rb_fd_ptr -#define rb_fd_max rb_fd_max -/** @endcond */ - -RBIMPL_ATTR_NONNULL(()) -RBIMPL_ATTR_NOALIAS() -/** - * Destructively overwrites an fdset with another. - * - * @param[out] dst Target fdset. - * @param[in] src Source fdset. - * @param[in] n Unused parameter. - * @post `dst` is a copy of `src`. - */ -static inline void -rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int n) -{ - *dst = *src; -} - -RBIMPL_ATTR_NONNULL(()) -RBIMPL_ATTR_NOALIAS() -/** - * Destructively overwrites an fdset with another. - * - * @param[out] dst Target fdset. - * @param[in] src Source fdset. - * @post `dst` is a copy of `src`. - */ -static inline void -rb_fd_dup(rb_fdset_t *dst, const fd_set *src) -{ - *dst = *src; -} - -RBIMPL_ATTR_PURE() -/* :TODO: can this function be __attribute__((returns_nonnull)) or not? */ -/** - * Raw pointer to `fd_set`. - * - * @param[in] f Target fdset. - * @return Underlying fd_set. - * - * @internal - * - * Extension library must not touch raw pointers. It was a bad idea to let - * them use it. - */ -static inline fd_set * -rb_fd_ptr(rb_fdset_t *f) -{ - return f; -} - -RBIMPL_ATTR_CONST() -/** - * It seems this function has no use. Maybe just remove? - * - * @param[in] f A set. - * @return Number of file descriptors stored. - */ -static inline int -rb_fd_max(const rb_fdset_t *f) -{ - return FD_SETSIZE; -} - -/** @cond INTERNAL_MACRO */ -/* :FIXME: What are these? They don't exist for sibling implementations. */ -#define rb_fd_init_copy(d, s) (*(d) = *(s)) -#define rb_fd_term(f) ((void)(f)) -/** @endcond */ - -#endif /* RBIMPL_INTERN_SELECT_POSIX_H */ diff --git a/libs/libruby/ruby/internal/intern/signal.h b/libs/libruby/ruby/internal/intern/signal.h deleted file mode 100644 index 84f7558..0000000 --- a/libs/libruby/ruby/internal/intern/signal.h +++ /dev/null @@ -1,152 +0,0 @@ -#ifndef RBIMPL_INTERN_SIGNAL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_SIGNAL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Signal handling APIs. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* signal.c */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Sends a signal ("kills") to processes. - * - * The first argument is the signal, either in: - * - * - Numerical representation (e.g. `9`), or - * - Textual representation of canonical (e.g. `:SIGKILL`) name or - * abbreviated (e.g. `:KILL`) name, either in ::rb_cSymbol or ::rb_cString. - * - * All the remaining arguments are numerical representations of process IDs. - * This function iterates over them to send the specified signal. - * - * You can specify both negative PIDs and negative signo to this function: - * - * ``` - * sig \ pid | >= 1 | == 0 | == -1 | <= -2 - * ===========+======+======+=======+======= - * > 0 | #1 | #2 | #3 | #4 - * == 0 | #5 | #6 | #7 | #8 - * < 0 | #9 | #10 | #11 - * ``` - * - * - Case #1: When signo and PID are both positive, this function sends the - * specified signal to the specified process (intuitive). - * - * - Case #2: When signo is positive and PID is zero, this function sends - * that signal to the current process group. - * - * - Case #3: When signo is positive and PID is -1, this function sends that - * signal to everything that the current process is allowed to kill. - * - * - Case #4: When signo is positive and PID is negative (but not -1), this - * function sends that signal to every processes in a process group, whose - * process group ID is the absolute value of the passed PID. - * - * - Case #5: When signo is zero and PID is positive, this function just - * checks for the existence of the specified process and doesn't send - * anything to anyone. In case the process is absent `Errno::ESRCH` is - * raised. - * - * - Case #6: When signo and PID are both zero, this function checks for the - * existence of the current process group. And it must do. This function - * is effectively a no-op then. - * - * - Case #7: When signo is zero and PID is -1, this function checks if there - * is any other process that the current process can kill. At least init - * (PID 1) must exist, so this must not fail. - * - * - Case #8: When signo is zero and PID is negative (but not -1), this - * function checks if there is a process group whose process group ID is - * the absolute value of the passed PID. In case the process group is - * absent `Errno::ESRCH` is raised. - * - * - Case #9: When signo is negative and PID is positive, this function sends - * the absolute value of the passed signo to the process group specified as - * the PID. - * - * - Case #10: When signo is negative and PID is zero, it is highly expected - * that this function sends the absolute value of the passed signo to the - * current process group. Strictly speaking, IEEE Std 1003.1-2017 - * specifies that this (`killpg(3posix)` with an argument of zero) is an - * undefined behaviour. But no operating system is known so far that does - * things differently. - * - * - Case #11: When signo and PID are both negative, the behaviour of this - * function depends on how `killpg(3)` works. On Linux, it seems such - * attempt is strictly prohibited and `Errno::EINVAL` is raised. But on - * macOS, it seems it tries to to send the signal actually to the process - * group. - * - * @note Above description is in fact different from how `kill(2)` works. - * We interpret the passed arguments before passing them through to - * system calls. - * @param[in] argc Number of objects in `argv`. - * @param[in] argv Signal, followed by target PIDs. - * @exception rb_eArgError Unknown signal name. - * @exception rb_eSystemCallError Various errors sending signal to processes. - * @return Something numeric. The meaning of this return value is unclear. - * It seems in case of #1 above, this could be the body count. But - * other cases remain mysterious. - */ -VALUE rb_f_kill(int argc, const VALUE *argv); - -/* This must be private, @shyouhei guesses. */ -#ifdef POSIX_SIGNAL -#define posix_signal ruby_posix_signal -void (*posix_signal(int, void (*)(int)))(int); -#endif - -RBIMPL_ATTR_PURE() -/** - * Queries the name of the signal. It returns for instance `"KILL"` for - * SIGKILL. - * - * @param[in] signo Signal number to query. - * @retval 0 No such signal. - * @retval otherwise A pointer to a static C string that is the name of - * the signal. - * @warning Don't free the return value. - */ -const char *ruby_signal_name(int signo); - -/** - * Pretends as if there was no custom signal handler. This function sets the - * signal action to SIG_DFL, then kills itself. - * - * @param[in] sig The signal. - * @post Previous signal handler is lost. - * @post Passed signal is sent to the current process. - * - * @internal - * - * @shyouhei doesn't understand the needs of this function being visible from - * extension libraries. - */ -void ruby_default_signal(int sig); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_SIGNAL_H */ diff --git a/libs/libruby/ruby/internal/intern/sprintf.h b/libs/libruby/ruby/internal/intern/sprintf.h deleted file mode 100644 index aedc0f9..0000000 --- a/libs/libruby/ruby/internal/intern/sprintf.h +++ /dev/null @@ -1,159 +0,0 @@ -#ifndef RBIMPL_INTERN_SPRINTF_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_SPRINTF_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Our own private `printf(3)`. - */ -#include "ruby/internal/attr/format.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* sprintf.c */ - -/** - * Identical to rb_str_format(), except how the arguments are arranged. - * - * @param[in] argc Number of objects of `argv`. - * @param[in] argv A format string, followed by its arguments. - * @return A rendered new instance of ::rb_cString. - * - * @internal - * - * You can safely pass NULL to `argv`. Doesn't make any sense though. - */ -VALUE rb_f_sprintf(int argc, const VALUE *argv); - -RBIMPL_ATTR_NONNULL((1)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2) -/** - * Ruby's extended `sprintf(3)`. We ended up reinventing the entire `printf` - * business because we don't want to depend on locales. OS-provided `printf` - * routines might or might not, which caused instabilities of the result - * strings. - * - * The format sequence is a mixture of format specifiers and other verbatim - * contents. Each format specifier starts with a `%`, and has the following - * structure: - * - * ``` - * %[flags][width][.precision][length]conversion - * ``` - * - * This function supports flags of ` `, `#`, `+`, `-`, `0`, width of - * non-negative decimal integer and `*`, precision of non-negative decimal - * integers and `*`, length of `L`, `h`, `t`, `z`, `l`, `ll`, `q`, conversions - * of `A`, `D`, `E`, `G`, `O`, `U`, `X`, `a`, `c`, `d`, `e`, `f`, `g`, `i`, - * `n`, `o`, `p`, `s`, `u`, `x`, and `%`. In case of `_WIN32` it also supports - * `I`. And additionally, it supports magical `PRIsVALUE` macro that can - * stringise arbitrary Ruby objects: - * - * ```CXX - * rb_sprintf("|%"PRIsVALUE"|", RUBY_Qtrue); // => "|true|" - * rb_sprintf("%+"PRIsVALUE, rb_stdin); // => "#>" - * ``` - * - * @param[in] fmt A `printf`-like format specifier. - * @param[in] ... Variadic number of contents to format. - * @return A rendered new instance of ::rb_cString. - * - * @internal - * - * :FIXME: We can improve this document. - */ -VALUE rb_sprintf(const char *fmt, ...); - -RBIMPL_ATTR_NONNULL((1)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 0) -/** - * Identical to rb_sprintf(), except it takes a `va_list`. - * - * @param[in] fmt A `printf`-like format specifier. - * @param[in] ap Contents to format. - * @return A rendered new instance of ::rb_cString. - */ -VALUE rb_vsprintf(const char *fmt, va_list ap); - -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3) -/** - * Identical to rb_sprintf(), except it renders the output to the specified - * object rather than creating a new one. - * - * @param[out] dst String to modify. - * @param[in] fmt A `printf`-like format specifier. - * @param[in] ... Variadic number of contents to format. - * @exception rb_eTypeError `dst` is not a String. - * @return Passed `dst`. - * @post `dst` has the rendered output appended to its end. - */ -VALUE rb_str_catf(VALUE dst, const char *fmt, ...); - -RBIMPL_ATTR_NONNULL((2)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 0) -/** - * Identical to rb_str_catf(), except it takes a `va_list`. It can also be - * seen as a routine identical to rb_vsprintf(), except it renders the output - * to the specified object rather than creating a new one. - * - * @param[out] dst String to modify. - * @param[in] fmt A `printf`-like format specifier. - * @param[in] ap Contents to format. - * @exception rb_eTypeError `dst` is not a String. - * @return Passed `dst`. - * @post `dst` has the rendered output appended to its end. - */ -VALUE rb_str_vcatf(VALUE dst, const char *fmt, va_list ap); - -/** - * Formats a string. - * - * Returns the string resulting from applying `fmt` to `argv`. The format - * sequence is a mixture of format specifiers and other verbatim contents. - * Each format specifier starts with a `%`, and has the following structure: - * - * ``` - * %[flags][width][.precision]type - * ``` - * - * ... which is different from that of rb_sprintf(). Because ruby has no - * `short` or `long`, there is no way to specify a "length" of an argument. - * - * This function supports flags of ` `, `#`, `+`, `-`, `<>`, `{}`, with of - * non-negative decimal integer and `$`, `*`, precision of non-negative decimal - * integer and `$`, `*`, type of `A`, `B`, `E`, `G`, `X`, `a`, `b`, `c`, `d`, - * `e`, `f`, `g`, `i`, `o`, `p`, `s`, `u`, `x`, `%`. This list is also - * (largely the same but) not identical to that of rb_sprintf(). - * - * @param[in] argc Number of objects in `argv`. - * @param[in] argv Format arguments. - * @param[in] fmt A printf-like format specifier. - * @exception rb_eTypeError `fmt` is not a string. - * @exception rb_eArgError Failed to parse `fmt`. - * @return A rendered new instance of ::rb_cString. - * @note Everything it takes must be Ruby objects. - * - */ -VALUE rb_str_format(int argc, const VALUE *argv, VALUE fmt); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_SPRINTF_H */ diff --git a/libs/libruby/ruby/internal/intern/string.h b/libs/libruby/ruby/internal/intern/string.h deleted file mode 100644 index 3083125..0000000 --- a/libs/libruby/ruby/internal/intern/string.h +++ /dev/null @@ -1,1757 +0,0 @@ -#ifndef RBIMPL_INTERN_STRING_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_STRING_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cString. - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#ifdef HAVE_STRING_H -# include -#endif - -#ifdef HAVE_STDINT_H -# include -#endif - -#include "ruby/internal/attr/deprecated.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/constant_p.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/variable.h" /* rb_gvar_setter_t */ -#include "ruby/st.h" /* st_index_t */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* string.c */ - -/** - * Allocates an instance of ::rb_cString. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString, of `len` bytes length, of - * "binary" encoding, whose contents are verbatim copy of `ptr`. - * @pre At least `len` bytes of continuous memory region shall be - * accessible via `ptr`. - */ -VALUE rb_str_new(const char *ptr, long len); - -/** - * Identical to rb_str_new(), except it assumes the passed pointer is a pointer - * to a C string. - * - * @param[in] ptr A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @exception rb_eArgError `ptr` is a null pointer. - * @return An instance of ::rb_cString, of "binary" encoding, whose - * contents are verbatim copy of `ptr`. - * @pre `ptr` must not be a null pointer. - */ -VALUE rb_str_new_cstr(const char *ptr); - -/** - * Identical to rb_str_new_cstr(), except it takes a Ruby's string instead of - * C's. Implementation wise it creates a string that shares the backend memory - * region with the receiver. So the name. But there is no way for extension - * libraries to know if a string is of such variant. - * - * @param[in] str An object of ::RString. - * @return An allocated instance of ::rb_cString, which shares the - * encoding, length, and contents with the passed string. - * @pre `str` must not be any arbitrary object except ::RString. - * @note Use #StringValue to enforce the precondition. - */ -VALUE rb_str_new_shared(VALUE str); - -/** - * Creates a frozen copy of the string, if necessary. This function does - * nothing when the passed string is already frozen. Otherwise, it allocates a - * copy of it, which is frozen. The passed string is untouched either ways. - * - * @param[in] str An object of ::RString. - * @return Something frozen. - * @pre `str` must not be any arbitrary object except ::RString. - * @note Use #StringValue to enforce the precondition. - */ -VALUE rb_str_new_frozen(VALUE str); - -/** - * Identical to rb_str_new(), except it takes the class of the allocating - * object. - * - * @param[in] obj A string-ish object. - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of the class of `obj`, of `len` bytes length, of - * "binary" encoding, whose contents are verbatim copy of `ptr`. - * @pre At least `len` bytes of continuous memory region shall be - * accessible via `ptr`. - * - * @internal - * - * Why it doesn't take an instance of ::rb_cClass? - */ -VALUE rb_str_new_with_class(VALUE obj, const char *ptr, long len); - -/** - * Identical to rb_str_new(), except it generates a string of "default - * external" encoding. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString. In case encoding conversion from - * "default internal" to "default external" is fully defined over - * the given contents, then the return value is a string of - * "default external" encoding, whose contents are the converted - * ones. Otherwise the string is a junk. - * @warning It doesn't raise on a conversion failure and silently ends up in - * a corrupted output. You can know the failure by querying - * `valid_encoding?` of the result object. - */ -VALUE rb_external_str_new(const char *ptr, long len); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_external_str_new(), except it assumes the passed pointer is - * a pointer to a C string. It can also be seen as a routine identical to - * rb_str_new_cstr(), except it generates a string of "default external" - * encoding. - * - * @param[in] ptr A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString. In case encoding conversion from - * "default internal" to "default external" is fully defined over - * the given contents, then the return value is a string of - * "default external" encoding, whose contents are the converted - * ones. Otherwise the string is a junk. - * @warning It doesn't raise on a conversion failure and silently ends up in - * a corrupted output. You can know the failure by querying - * `valid_encoding?` of the result object. - * @pre `ptr` must not be a null pointer. - */ -VALUE rb_external_str_new_cstr(const char *ptr); - -/** - * Identical to rb_str_new(), except it generates a string of "locale" - * encoding. It can also be seen as a routine identical to - * rb_external_str_new(), except it generates a string of "locale" encoding - * instead of "default external" encoding. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString. In case encoding conversion from - * "default internal" to "locale" is fully defined over the given - * contents, then the return value is a string of "locale" - * encoding, whose contents are the converted ones. Otherwise the - * string is a junk. - * @warning It doesn't raise on a conversion failure and silently ends up in - * a corrupted output. You can know the failure by querying - * `valid_encoding?` of the result object. - */ -VALUE rb_locale_str_new(const char *ptr, long len); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_locale_str_new(), except it assumes the passed pointer is a - * pointer to a C string. It can also be seen as a routine identical to - * rb_external_str_new_cstr(), except it generates a string of "locale" - * encoding instead of "default external". - * - * @param[in] ptr A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString. In case encoding conversion from - * "default internal" to "locale" is fully defined over the given - * contents, then the return value is a string of "locale" - * encoding, whose contents are the converted ones. Otherwise the - * string is a junk. - * @warning It doesn't raise on a conversion failure and silently ends up in - * a corrupted output. You can know the failure by querying - * `valid_encoding?` of the result object. - * @pre `ptr` must not be a null pointer. - */ -VALUE rb_locale_str_new_cstr(const char *ptr); - -/** - * Identical to rb_str_new(), except it generates a string of "filesystem" - * encoding. It can also be seen as a routine identical to - * rb_external_str_new(), except it generates a string of "filesystem" encoding - * instead of "default external" encoding. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString. In case encoding conversion from - * "default internal" to "filesystem" is fully defined over the - * given contents, then the return value is a string of - * "filesystem" encoding, whose contents are the converted ones. - * Otherwise the string is a junk. - * @warning It doesn't raise on a conversion failure and silently ends up in - * a corrupted output. You can know the failure by querying - * `valid_encoding?` of the result object. - */ -VALUE rb_filesystem_str_new(const char *ptr, long len); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_filesystem_str_new(), except it assumes the passed pointer - * is a pointer to a C string. It can also be seen as a routine identical to - * rb_external_str_new_cstr(), except it generates a string of "filesystem" - * encoding instead of "default external". - * - * @param[in] ptr A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString. In case encoding conversion from - * "default internal" to "filesystem" is fully defined over the - * given contents, then the return value is a string of - * "filesystem" encoding, whose contents are the converted ones. - * Otherwise the string is a junk. - * @warning It doesn't raise on a conversion failure and silently ends up in - * a corrupted output. You can know the failure by querying - * `valid_encoding?` of the result object. - * @pre `ptr` must not be a null pointer. - */ -VALUE rb_filesystem_str_new_cstr(const char *ptr); - -/** - * Allocates a "string buffer". A string buffer here is an instance of - * ::rb_cString, whose capacity is bigger than the length of it. If you can - * say that a string grows to a specific amount of bytes, this could be - * effective than resizing a string over and over again and again. - * - * @param[in] capa Designed capacity of the generating string. - * @return An empty string, of "binary" encoding, whose capacity is `capa`. - */ -VALUE rb_str_buf_new(long capa); - -RBIMPL_ATTR_NONNULL(()) -/** - * This is a rb_str_buf_new() + rb_str_buf_cat() combo. - * - * @param[in] ptr A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString, of "binary" encoding, whose - * contents are verbatim copy of `ptr`. - * @pre `ptr` must not be a null pointer. - * - * @internal - * - * This must be identical to rb_str_new_cstr(), except done in inefficient way? - * @shyouhei doesn't understand why this is not a simple alias. - */ -VALUE rb_str_buf_new_cstr(const char *ptr); - -/** - * Allocates a "temporary" string. This is a hidden empty string. Handy on - * occasions. - * - * @param[in] len Designed length of the string. - * @return A hidden, empty string. - * @see rb_obj_hide() - */ -VALUE rb_str_tmp_new(long len); - -/** - * Identical to rb_str_new(), except it generates a string of "US ASCII" - * encoding. This is different from rb_external_str_new(), not only for the - * output encoding, but also it doesn't convert the contents. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString, of `len` bytes length, of - * "US ASCII" encoding, whose contents are verbatim copy of `ptr`. - */ -VALUE rb_usascii_str_new(const char *ptr, long len); - -/** - * Identical to rb_str_new_cstr(), except it generates a string of "US ASCII" - * encoding. It can also be seen as a routine Identical to - * rb_usascii_str_new(), except it assumes the passed pointer is a pointer to a - * C string. - * - * @param[in] ptr A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @exception rb_eArgError `ptr` is a null pointer. - * @return An instance of ::rb_cString, of "US ASCII" encoding, whose - * contents are verbatim copy of `ptr`. - * @pre `ptr` must not be a null pointer. - */ -VALUE rb_usascii_str_new_cstr(const char *ptr); - -/** - * Identical to rb_str_new(), except it generates a string of "UTF-8" encoding. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString, of `len` bytes length, of - * "UTF-8" encoding, whose contents are verbatim copy of `ptr`. - */ -VALUE rb_utf8_str_new(const char *ptr, long len); - -/** - * Identical to rb_str_new_cstr(), except it generates a string of "UTF-8" - * encoding. It can also be seen as a routine Identical to - * rb_usascii_str_new(), except it assumes the passed pointer is a pointer to a - * C string. - * - * @param[in] ptr A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @exception rb_eArgError `ptr` is a null pointer. - * @return An instance of ::rb_cString, of "UTF-8" encoding, whose contents - * are verbatim copy of `ptr`. - * @pre `ptr` must not be a null pointer. - */ -VALUE rb_utf8_str_new_cstr(const char *ptr); - -/** - * @name Special strings that are backended by C string literals. - * - * *_str_new_static functions are intended for C string literals. - * They require memory in the range [ptr, ptr+len] to always be readable. - * Note that this range covers a total of len + 1 bytes. - * - * @{ - */ - -/** - * Identical to rb_str_new(), except it takes a C string literal. - * - * @param[in] ptr A C string literal. - * @param[in] len `strlen(ptr)`. - * @exception rb_eArgError `len` out of range of `size_t`. - * @pre `ptr` must be a C string constant. - * @return An instance of ::rb_cString, of "binary" encoding, whose backend - * storage is the passed C string literal. - * @warning It is a very bad idea to write to a C string literal (often - * immediate SEGV shall occur). Consider return values of this - * function be read-only. - * - * @internal - * - * Surprisingly it can take NULL, and generates an empty string. - */ -VALUE rb_str_new_static(const char *ptr, long len); - -/** - * Identical to rb_str_new_static(), except it generates a string of "US ASCII" - * encoding instead of "binary". It can also be seen as a routine identical to - * rb_usascii_str_new(), except it takes a C string literal. - * - * @param[in] ptr A C string literal. - * @param[in] len `strlen(ptr)`. - * @exception rb_eArgError `len` out of range of `size_t`. - * @pre `ptr` must be a C string constant. - * @return An instance of ::rb_cString, of "US ASCII" encoding, whose - * backend storage is the passed C string literal. - * @warning It is a very bad idea to write to a C string literal (often - * immediate SEGV shall occur). Consider return values of this - * function be read-only. - */ -VALUE rb_usascii_str_new_static(const char *ptr, long len); - -/** - * Identical to rb_str_new_static(), except it generates a string of "UTF-8" - * encoding instead of "binary". It can also be seen as a routine identical to - * rb_utf8_str_new(), except it takes a C string literal. - * - * @param[in] ptr A C string literal. - * @param[in] len `strlen(ptr)`. - * @exception rb_eArgError `len` out of range of `size_t`. - * @pre `ptr` must be a C string constant. - * @return An instance of ::rb_cString, of "UTF-8" encoding, whose backend - * storage is the passed C string literal. - * @warning It is a very bad idea to write to a C string literal (often - * immediate SEGV shall occur). Consider return values of this - * function be read-only. - */ -VALUE rb_utf8_str_new_static(const char *ptr, long len); - -/** @} */ - -/** - * Identical to rb_interned_str(), except it takes a Ruby's string instead of - * C's. It can also be seen as a routine identical to to rb_str_new_shared(), - * except it returns an infamous "f"string. - * - * @param[in] str An object of ::RString. - * @return An instance of ::rb_cString, either cached or allocated, which - * has the identical encoding, length, and contents with the passed - * string. - * @pre `str` must not be any arbitrary object except ::RString. - * @note Use #StringValue to enforce the precondition. - * - * @internal - * - * It actually finds or creates a fstring of the needed property, and - * destructively modifies the receiver behind-the-scene so that it becomes a - * shared string whose parent is the returning fstring. - */ -VALUE rb_str_to_interned_str(VALUE str); - -/** - * Identical to rb_str_new(), except it returns an infamous "f"string. What is - * a fstring? Well it is a special subkind of strings that is immutable, - * deduped globally, and managed by our GC. It is much like a Symbol (in fact - * Symbols are dynamic these days and are backended using fstrings). This - * concept has been silently introduced at some point in 2.x era. Since then - * it gained wider acceptance in the core. Starting from 3.x extension - * libraries can also generate ones. - * - * @param[in] ptr A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @exception rb_eArgError `len` is negative. - * @return A found or created instance of ::rb_cString, of `len` bytes - * length, of "binary" encoding, whose contents are identical to - * that of `ptr`. - * @pre At least `len` bytes of continuous memory region shall be - * accessible via `ptr`. - */ -VALUE rb_interned_str(const char *ptr, long len); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_interned_str(), except it assumes the passed pointer is a - * pointer to a C's string. It can also be seen as a routine identical to to - * rb_str_to_interned_str(), except it takes a C's string instead of Ruby's. - * Or it can also be seen as a routine identical to rb_str_new_cstr(), except - * it returns an infamous "f"string. - * - * @param[in] ptr A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString, of "binary" encoding, whose - * contents are verbatim copy of `ptr`. - * @pre `ptr` must not be a null pointer. - */ -VALUE rb_interned_str_cstr(const char *ptr); - -/** - * Destroys the given string for no reason. - * - * @warning DO NOT USE IT. - * @warning Leave this task to our GC. - * @warning It was a bad idea at the first place to let you know about it. - * - * @param[out] str The string to be executed. - * @post The given string no longer exists. - * @note Maybe `String#clear` could be what you want. - * - * @internal - * - * Should have moved this to `internal/string.h`. - */ -void rb_str_free(VALUE str); - -/** - * Replaces the contents of the former with the latter. - * - * @param[out] dst Destination object. - * @param[in] src Source object. - * @pre Both objects must not be any arbitrary objects except - * ::RString. - * @post `dst`'s former components are abandoned. It now has the - * identical encoding, length, and contents to `src`. - * @see rb_str_replace() - * - * @internal - * - * @shyouhei doesn't understand why this is useful to extension libraries. - * Just use rb_str_replace(). What's wrong with that? - */ -void rb_str_shared_replace(VALUE dst, VALUE src); - -/** - * Identical to rb_str_cat_cstr(), except it takes Ruby's string instead of - * C's. It can also be seen as a routine identical to rb_str_shared_replace(), - * except it appends instead of replaces. - * - * @param[out] dst Destination object. - * @param[in] src Source object. - * @exception rb_eEncCompatError Can't mix the encodings. - * @exception rb_eArgError Result string too big. - * @return The passed `dst`. - * @pre Both objects must not be any arbitrary objects except - * ::RString. - * @post `dst` has the contents of `src` appended, with encoding - * converted into `dst`'s one, into the end of `dst`. - */ -VALUE rb_str_buf_append(VALUE dst, VALUE src); - -/** @alias{rb_str_cat} */ -VALUE rb_str_buf_cat(VALUE, const char*, long); - -/** @alias{rb_str_cat_cstr} */ -VALUE rb_str_buf_cat2(VALUE, const char*); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_str_cat_cstr(), except it additionally assumes the source - * string be a NUL terminated ASCII string. - * - * @param[out] dst Destination object. - * @param[in] src Source string. - * @exception rb_eArgError Result string too big. - * @return The passed `dst`. - * @pre `dst` must not be any arbitrary object except ::RString. - * @pre `src` must be a NUL terminated ASCII string. - * @post `dst` has the contents of `src` appended, with encoding - * converted into `dst`'s one, into the end of `dst`. - */ -VALUE rb_str_buf_cat_ascii(VALUE dst, const char *src); - -/** - * Try converting an object to its stringised representation using its `to_s` - * method, if any. If there is no such thing, it resorts to rb_any_to_s() - * output. - * - * @param[in] obj Arbitrary ruby object to stringise. - * @return An instance of ::rb_cString. - */ -VALUE rb_obj_as_string(VALUE obj); - -/** - * Try converting an object to its stringised representation using its `to_str` - * method, if any. If there is no such thing, returns ::RUBY_Qnil. - * - * @param[in] obj Arbitrary ruby object to stringise. - * @exception rb_eTypeError `obj.to_str` returned something non-String. - * @retval RUBY_Qnil No conversion from obj to String defined. - * @return otherwise Stringised representation of `obj`. - * @see rb_io_check_io - * @see rb_check_array_type - * @see rb_check_hash_type - */ -VALUE rb_check_string_type(VALUE obj); - -/** - * Asserts that the given string's encoding is (Ruby's definition of) ASCII - * compatible. - * - * @param[in] obj An instance of ::rb_cString. - * @exception rb_eEncCompatError `obj` is ASCII incompatible. - * - * @internal - * - * @shyouhei doesn't know if this is an Easter egg or an official feature, but - * this function can in fact take non-strings such as Symbols, Regexps, IOs, - * etc. However if something unsupported is passed, it causes SEGV. It seems - * the feature is kind of untested. - */ -void rb_must_asciicompat(VALUE obj); - -/** - * Duplicates a string. - * - * @param[in] str String in question to duplicate. - * @return A duplicated new instance. - * @pre `str` must be of ::RString. - */ -VALUE rb_str_dup(VALUE str); - -/** - * I guess there is no use case of this function in extension libraries, but - * this is a routine identical to rb_str_dup(), except it always creates an - * instance of ::rb_cString regardless of the given object's class. This makes - * the most sense when the passed string is formerly hidden by rb_obj_hide(). - * - * @param[in] str A string, possibly hidden. - * @return A duplicated new instance of ::rb_cString. - */ -VALUE rb_str_resurrect(VALUE str); - -/** - * Obtains a "temporary lock" of the string. This advisory locking mechanism - * prevents other cooperating threads from tampering the receiver. The same - * thing could be done via freeze mechanism, but this one can also be unlocked - * using rb_str_unlocktmp(). - * - * @param[out] str String to lock. - * @exception rb_eRuntimeError `str` already locked. - * @return The given string. - * @post The string is locked. - */ -VALUE rb_str_locktmp(VALUE str); - -/** - * Releases a lock formerly obtained by rb_str_locktmp(). - * - * @param[out] str String to unlock. - * @exception rb_eRuntimeError `str` already unlocked. - * @return The given string. - * @post The string is locked. - */ -VALUE rb_str_unlocktmp(VALUE str); - -/** @alias{rb_str_new_frozen} */ -VALUE rb_str_dup_frozen(VALUE); - -/** @alias{rb_str_new_frozen} */ -#define rb_str_dup_frozen rb_str_new_frozen - -/** - * Generates a new string, concatenating the former to the latter. It can also - * be seen as a routine identical to rb_str_append(), except it doesn't tamper - * the passed strings to create a new one instead. - * - * @param[in] lhs Source string #1. - * @param[in] rhs Source string #2. - * @exception rb_eEncCompatError Can't mix the encodings. - * @exception rb_eArgError Result string too big. - * @return A new string containing `rhs` concatenated to `lhs`. - * @pre Both objects must not be any arbitrary objects except ::RString. - * @note This operation doesn't commute. Don't get confused by the - * "plus" terminology. For historical reasons there are some - * noncommutative `+`s in Ruby. This is one of such things. There - * has been a long discussion around `+`s in programming languages. - */ -VALUE rb_str_plus(VALUE lhs, VALUE rhs); - -/** - * Repetition of a string. - * - * @param[in] str String to repeat. - * @param[in] num Count, something numeric. - * @exception rb_eArgError `num` is negative. - * @return A new string repeating `num` times of `str`. - */ -VALUE rb_str_times(VALUE str, VALUE num); - -/** - * Byte offset to character offset conversion. This makes sense when the - * receiver is in a multibyte encoding. The string's i-th character does not - * always sit at its i-th byte. This function scans the contents to find the - * character index that matches the byte index. Generally speaking this is an - * `O(n)` operation. Could be slow. - * - * @param[in] str The string to scan. - * @param[in] pos Offset, in bytes. - * @return Offset, in characters. - */ -long rb_str_sublen(VALUE str, long pos); - -/** - * This is the implementation of two-argumented `String#slice`. - * - * - Returns the substring of the given `len` found in `str` at offset `beg`: - * - * ```ruby - * 'foo'[0, 2] # => "fo" - * 'foo'[0, 0] # => "" - * ``` - * - * - Counts backward from the end of `str` if `beg` is negative: - * - * ```ruby - * 'foo'[-2, 2] # => "oo" - * ``` - * - * - Special case: returns a new empty string if `beg` is equal to the length - * of `str`: - * - * ```ruby - * 'foo'[3, 2] # => "" - * ``` - * - * - Returns a null pointer if `beg` is out of range: - * - * ```ruby - * 'foo'[4, 2] # => nil - * 'foo'[-4, 2] # => nil - * ``` - * - * - Returns the trailing substring of `str` if `len` is large: - * - * ```ruby - * 'foo'[1, 50] # => "oo" - * ``` - * - * - Returns a null pointer if `len` is negative: - * - * ```ruby - * 'foo'[0, -1] # => nil - * ``` - * - * @param[in] str The string to slice. - * @param[in] beg Requested offset of the substring. - * @param[in] len Requested length of the substring. - * @retval RUBY_Qnil Parameters out of range. - * @retval otherwise A new string whose contents is the specified - * substring of `str`. - * @pre `str` must not be any arbitrary objects except ::RString. - */ -VALUE rb_str_substr(VALUE str, long beg, long len); - -/** - * Identical to rb_str_substr(), except the numbers are interpreted as byte - * offsets instead of character offsets. - * - * @param[in] str The string to slice. - * @param[in] beg Requested offset of the substring. - * @param[in] len Requested length of the substring. - * @return A new string whose contents is the specified substring of `str`. - * @pre `str` must not be any arbitrary objects except ::RString. - * @pre `beg` and `len` must not point to OOB contents. - */ -VALUE rb_str_subseq(VALUE str, long beg, long len); - -/** - * Identical to rb_str_substr(), except it returns a C's string instead of - * Ruby's. - * - * @param[in] str The string to slice. - * @param[in] beg Requested offset of the substring. - * @param[in,out] len Requested length of the substring. - * @retval NULL Parameters out of range. - * @retval otherwise A pointer inside of `str`'s backend storage where - * the specified substring exist. - * @pre `str` must not be any arbitrary objects except ::RString. - * @post `len` is updated to have the length of the return value. - */ -char *rb_str_subpos(VALUE str, long beg, long *len); - -/** - * Declares that the string is about to be modified. This for instance let the - * string have a dedicated backend storage. - * - * @param[out] str String about to be modified. - * @exception rb_eRuntimeError `str` is `locktmp`-ed. - * @exception rb_eFrozenError `str` is frozen. - * @pre `str` must not be any arbitrary objects except ::RString. - * @post Upon successful return the passed string is eligible to be - * modified. - */ -void rb_str_modify(VALUE str); - -/** - * Identical to rb_str_modify(), except it additionally expands the capacity of - * the receiver. - * - * @param[out] str Target string to modify. - * @param[in] capa Additional capacity to add. - * @exception rb_eArgError `capa` is negative. - * @exception rb_eRuntimeError `str` is `locktmp`-ed. - * @exception rb_eFrozenError `str` is frozen. - * @pre `str` must not be any arbitrary objects except ::RString. - * @post Upon successful return the passed string is modified so that - * its capacity is increased for `capa` bytes. - */ -void rb_str_modify_expand(VALUE str, long capa); - -/** - * This is the implementation of `String#freeze`. - * - * @param[out] str Target string to freeze. - * @return The passed string. - * @post Upon successful return the passed string is frozen. - */ -VALUE rb_str_freeze(VALUE str); - -/** - * Overwrites the length of the string. Typically this is used to shrink a - * string that was formerly expanded. - * - * ```CXX - * extern int fd; - * auto str = rb_eval_string("'...'"); - * rb_str_modify_expand(str, BUFSIZ); - * if (auto len = recv(fd, RSTRING_PTR(str), BUFSIZ, 0); len >= 0) { - * rb_str_set_len(str, len); - * } - * else { - * rb_sys_fail("recv(2)"); - * } - * ``` - * - * @param[out] str String to shrink. - * @param[in] len New length of the string. - * @exception rb_eRuntimeError `str` is `locktmp`-ed. - * @exception rb_eFrozenError `str` is frozen. - * @pre `str` must not be any arbitrary objects except ::RString. - * @post Upon successful return `str`'s length is set to `len`. - */ -void rb_str_set_len(VALUE str, long len); - -/** - * Overwrites the length of the string. In contrast to rb_str_set_len(), this - * function can also expand a string. - * - * @param[out] str String to shrink. - * @param[in] len New length of the string. - * @exception rb_eArgError `len` is negative. - * @exception rb_eRuntimeError `str` is `locktmp`-ed. - * @exception rb_eFrozenError `str` is frozen. - * @return The passed `str`. - * @pre `str` must not be any arbitrary objects except ::RString. - * @post Upon successful return `str` is either expanded or shrunken to - * have its length be `len`. - */ -VALUE rb_str_resize(VALUE str, long len); - -/** - * Destructively appends the passed contents to the string. - * - * @param[out] dst Destination object. - * @param[in] src Contents to append. - * @param[in] srclen Length of `src`. - * @exception rb_eArgError `srclen` is negative. - * @return The passed `dst`. - * @pre `dst` must not be any arbitrary objects except ::RString. - * @post `dst` has the contents of `ptr` appended. - */ -VALUE rb_str_cat(VALUE dst, const char *src, long srclen); - -/** - * Identical to rb_str_cat(), except it assumes the passed pointer is a pointer - * to a C string. - * - * @param[out] dst Destination object. - * @param[in] src Contents to append. - * @exception rb_eArgError Result string too big. - * @exception rb_eArgError `src` is a null pointer. - * @return The passed `dst`. - * @pre `dst` must not be any arbitrary objects except ::RString. - * @pre `src` must not be a null pointer. - * @post `dst` has the contents of `src` appended. - */ -VALUE rb_str_cat_cstr(VALUE dst, const char *src); - -/** @alias{rb_str_cat_cstr} */ -VALUE rb_str_cat2(VALUE, const char*); - -/** - * Identical to rb_str_buf_append(), except it converts the right hand side - * before concatenating. - * - * @param[out] dst Destination object. - * @param[in] src Source object. - * @exception rb_eEncCompatError Can't mix the encodings. - * @exception rb_eArgError Result string too big. - * @return The passed `dst`. - * @pre `dst` must not be any arbitrary objects except ::RString. - * @post `dst` has the contents of `src` appended, with encoding - * converted into `dst`'s one, into the end of `dst`. - */ -VALUE rb_str_append(VALUE dst, VALUE src); - -/** - * Identical to rb_str_append(), except it also accepts an integer as a - * codepoint. This resembles `String#<<`. - * - * @param[out] dst Destination object. - * @param[in] src Source object, String or Numeric. - * @exception rb_eRangeError Source numeric is out of range. - * @exception rb_eEncCompatError Source string too long. - * @exception rb_eArgError Result string too big. - * @return The passed `dst`. - * @pre `dst` must not be any arbitrary objects except ::RString. - * @post `dst` has the contents of `src` appended, with encoding - * converted into `dst`'s one, into the end of `dst`. - */ -VALUE rb_str_concat(VALUE dst, VALUE src); - -/* random.c */ - -/** - * This is a universal hash function. - * - * @warning This function changes its value per process. - * @param[in] ptr Target message. - * @param[in] len Length of `ptr` in bytes. - * @return A pseudorandom number suitable for Hash's hash value. - * @see Aumasson, JP., Bernstein, D.J., "SipHash: A Fast Short-Input - * PRF", In proceedings of 13th International Conference on - * Cryptology in India (INDOCRYPT 2012), LNCS 7668, pp. 489-508, - * 2012. http://doi.org/10.1007/978-3-642-34931-7_28 -*/ -st_index_t rb_memhash(const void *ptr, long len); - -/** - * Starts a series of hashing. Suppose you have a struct: - * - * ```CXX - * struct foo_tag { - * unsigned char bar; - * uint32_t baz; - * }; - * ``` - * - * It is not a wise idea to call rb_memhash() over it, because there could be - * padding bits. Instead you should explicitly iterate over each fields: - * - * ```CXX - * foo_tag foo = { 0, 0, }; - * st_index_t hash = 0; - * - * hash = rb_hash_start(0); - * hash = rb_hash_uint(hash, foo.bar); - * hash = rb_hash_uint32(hash, foo.baz); - * hash = rb_hash_end(hash); - * ``` - * - * @param[in] i Initial value. - * @return A hash value. - */ -st_index_t rb_hash_start(st_index_t i); - -/** @alias{st_hash_uint32} */ -#define rb_hash_uint32(h, i) st_hash_uint32((h), (i)) - -/** @alias{st_hash_uint} */ -#define rb_hash_uint(h, i) st_hash_uint((h), (i)) - -/** @alias{st_hash_end} */ -#define rb_hash_end(h) st_hash_end(h) - -/* string.c */ - -/** - * Calculates a hash value of a string. This is one of the two functions that - * constructs struct ::st_hash_type. - * - * @param[in] str An object of ::RString. - * @return A hash value. - * @pre `str` must not be any arbitrary object except ::RString. - * - * @internal - * - * Although safe to call, there must be no particular use case of this function - * for extension libraries. Only ruby internals must know about it. - * - * This is not a simple alias of rb_memhash(), because it considers the passed - * string's encoding as well as its contents. - */ -st_index_t rb_str_hash(VALUE str); - -/** - * Compares two strings. This is one of the two functions that constructs - * struct ::st_hash_type. - * - * @param[in] str1 A string. - * @param[in] str2 Another string. - * @retval 1 They have identical contents, length, and encodings. - * @retval 0 Otherwise. - * @pre Both objects must not be any arbitrary objects except - * ::RString. - * - * @internal - * - * In contrast to rb_str_hash(), this could be handy for comparison that only - * concerns equality. rb_str_cmp() returns 1, 0, -1. - */ -int rb_str_hash_cmp(VALUE str1, VALUE str2); - -/** - * Checks if two strings are comparable each other or not. Because - * rb_str_cmp() must return "lesser than" or "greater than" information, - * comparing two strings needs a stricter restriction. Both sides must be in a - * same set of strings which have total order. This is to check that property. - * Intuitive it sounds? But they can have different encodings. A character - * and another might or might not appear in the same order in their codepoints. - * It is complicated than you think. - * - * @param[in] str1 A string. - * @param[in] str2 Another string. - * @retval 1 They agree on a total order. - * @retval 0 Otherwise. - * @pre Both objects must not be any arbitrary objects except - * ::RString. - */ -int rb_str_comparable(VALUE str1, VALUE str2); - -/** - * Compares two strings, as in `strcmp(3)`. This does not consider the current - * locale, but considers the encodings of both sides instead. - * - * @param[in] lhs A string. - * @param[in] rhs Another string. - * @retval -1 `lhs` is "bigger than" `rhs`. - * @retval 1 `rhs` is "bigger than" `lhs`. - * @retval 0 Otherwise, e.g. not comparable. - * @pre Both objects must not be any arbitrary objects except - * ::RString. - */ -int rb_str_cmp(VALUE lhs, VALUE rhs); - -/** - * Equality of two strings. - * - * If `str2` is not a String, it resorts to `str2 == str1`. Otherwise if they - * are not comparable, returns ::RUBY_Qfalse. Otherwise if they have the same - * contents and the length, returns ::RUBY_Qtrue. Otherwise, returns - * ::RUBY_Qfalse. - * - * @param[in] str1 A string. - * @param[in] str2 Another string. - * @retval RUBY_Qtrue They are equal. - * @retval RUBY_Qfalse They are either different, or not comparable. - */ -VALUE rb_str_equal(VALUE str1, VALUE str2); - -/** - * Shrinks the given string for the given number of bytes. - * - * @param[out] str String to squash. - * @param[in] len Number of bytes to reduce. - * @exception rb_eRuntimeError `str` is `locktmp`-ed. - * @exception rb_eFrozenError `str` is frozen. - * @return The passed `str`. - * @pre `str` must not be any arbitrary objects except ::RString. - * @post `str` is shrunken. - * @warning Can break a multibyte character in middle. - * - * @internal - * - * What if `len` is negative? - */ -VALUE rb_str_drop_bytes(VALUE str, long len); - -/** - * Replaces some (or all) of the contents of the given string. This is the - * implementation of three-argumented `String#[]=`. - * - * @param[out] dst Target string to update. - * @param[in] beg Offset of the affected portion. - * @param[in] len Length of the affected portion. - * @param[in] src Object to be assigned. - * @exception rb_eTypeError `src` has no implicit conversion to String. - * @exception rb_eIndexError `len` is negative, or `beg` is OOB. - * @exception rb_eRuntimeError `dst` is `locktmp`-ed. - * @exception rb_eFrozenError `dst` is frozen. - * @note Unlike rb_str_substr(), this function raises. - * @post A portion of `dst` from `beg` to `len` is the stringised - * representation of `src`. If that replacement string is not the - * same length as the portion it is replacing, `dst` will be - * resized accordingly. - */ -void rb_str_update(VALUE dst, long beg, long len, VALUE src); - -/** - * Replaces the contents of the former object with the stringised contents of - * the latter. - * - * @param[out] dst Destination object. - * @param[in] src Source object. - * @exception rb_eTypeError `src` has no implicit conversion to String. - * @exception rb_eRuntimeError `dst` is `locktmp`-ed. - * @exception rb_eFrozenError `dst` is frozen. - * @return The passed `dst`. - * @pre `dst` must not be any arbitrary object except ::RString. - * @post `dst`'s former components are abandoned. It now has the - * identical encoding, length, and contents to `src`. - */ -VALUE rb_str_replace(VALUE dst, VALUE src); - -/** - * Generates a "readable" version of the receiver. - * - * @warning The output is _insecure_. Never feed one to `eval`. - * @warning The output is not always in the same encoding as the given one. - * @warning A character might or might not be escaped, depending on the - * result encoding. - * @param[in] str String to inspect. - * @return Its inspection, either in default internal encoding if any, or - * in default external encoding otherwise. - * @see rb_str_dump() - * - * @internal - * - * This is a (silent) fix of an actual vulnerability feeding `inspect` output - * strings to `eval`: - * https://github.com/hiki/hiki/commit/8771a6e25198e264a2bf9dc1c102fea2cc8ff975 - * - * ... and its advisory: - * http://hikiwiki.org/en/advisory20040712.html - */ -VALUE rb_str_inspect(VALUE str); - -/** - * "Inverse" of rb_eval_string(). Returns a quoted version of the string. All - * non-printing characters are replaced by `\uNNNN` or `\xHH` notation and all - * special characters are escaped. The result string is guaranteed to render a - * string of the same contents when passed to `eval` and friends. - * - * @param[in] str String to dump. - * @exception rb_eRuntimeError Too many escape sequences causes integer - * overflow on the length of the string. - * @return An US-ASCII string that includes all the necessary info to - * reconstruct the original string. - */ -VALUE rb_str_dump(VALUE str); - -/** - * Divides the given string based on the given delimiter. This is the - * 1-argument 0-block version of `String#split`. - * - * @param[in] str Object in question to split. - * @param[in] delim Delimiter, in C string. - * @exception rb_eTypeError `str` has no implicit conversion to String. - * @exception rb_eArgError `delim` is a null pointer. - * @return An array of strings, which are substrings of the passed `str`. - * If `delim` is an empty C string (i.e. `""`), `str` is split into - * each characters. If `delim` is a C string whose sole content is - * a whitespace (i.e. `" "`), `str` is split on whitespaces, with - * leading and trailing whitespace and runs of contiguous - * whitespace characters ignored. Otherwise, `str` is split - * according to `delim`. - */ -VALUE rb_str_split(VALUE str, const char *delim); - -/** - * This is a ::rb_gvar_setter_t that refutes non-string assignments. - * - * @exception rb_eTypeError Passed something non-string. - */ -rb_gvar_setter_t rb_str_setter; - -/* symbol.c */ - -/** - * Identical to rb_to_symbol(), except it assumes the receiver being an - * instance of ::RString. - * - * @param[in] str The name of the id. - * @exception rb_eRuntimeError Too many symbols. - * @return A (possibly new) id whose value is the given `str`. - * @pre `str` must not be any arbitrary object except ::RString. - * @note These days Ruby internally has two kinds of symbols - * (static/dynamic). Symbols created using this function would - * become dynamic ones; i.e. would be garbage collected. It could - * be safer for you to use it than alternatives, when applicable. - */ -VALUE rb_str_intern(VALUE str); - -/* string.c */ - -/** - * This is an rb_sym2str() + rb_str_dup() combo. - * - * @param[in] sym A symbol to query. - * @return A string duplicating the symbol's backend storage. - * - * @internal - * - * This function causes SEGV when the passed value is a static symbol that - * doesn't exist. - */ -VALUE rb_sym_to_s(VALUE sym); - -/** - * Counts the number of characters (not bytes) that are stored inside of the - * given string. This of course depends on its encoding. Also this function - * generally runs in O(n), because for instance you have to scan the entire - * string to know how many characters are there in a UTF-8 string. - * - * @param[in] str Target string to query. - * @return Its number of characters. - */ -long rb_str_strlen(VALUE str); - -/** - * Identical to rb_str_strlen(), except it returns the value in ::rb_cInteger. - * - * @param[in] str Target string to query. - * @return Its number of characters. - */ -VALUE rb_str_length(VALUE); - -/** - * "Inverse" of rb_str_sublen(). This function scans the contents to find the - * byte index that matches the character index. Generally speaking this is an - * `O(n)` operation. Could be slow. - * - * @param[in] str The string to scan. - * @param[in] pos Offset, in characters. - * @return Offset, in bytes. - */ -long rb_str_offset(VALUE str, long pos); - -RBIMPL_ATTR_PURE() -/** - * Queries the capacity of the given string. - * - * @see ::RString::capa - * @param[in] str String in question. - * @return Its capacity. - */ -size_t rb_str_capacity(VALUE str); - -/** - * Shortens `str` and adds three dots, an ellipsis, if it is longer than `len` - * characters. The length of the returned string in characters is less than or - * equal to `len`. If the length of `str` is less than or equal `len`, returns - * `str` itself. The encoding of returned string is equal to that of passed - * one. The class of returned string is equal to that of passed one. - * - * @param[in] str The string to shorten. - * @param[in] len The maximum string length. - * @exception rb_eIndexError `len` is negative. - * @retval str No need to add ellipsis. - * @retval otherwise A new, shortened string. - * @note The length is counted in characters. - */ -VALUE rb_str_ellipsize(VALUE str, long len); - -/** - * "Cleanses" the string. A string has its encoding and its contents. They, - * in practice, do not always fit. There are strings in the wild that are - * "broken"; include bit patterns that are not allowed by its encoding. That - * can happen when a user copy&pasted something bad, network input got - * clobbered by a middleman, cosmic rays hit the physical memory, and many more - * occasions. This function takes such strings, and fills the "broken" portion - * with the passed replacement bit pattern. - * - * This function also takes a ruby block. That is a neat way to do things, but - * can be annoying when the caller function want to use a block for another - * purpose. - * - * @param[in] str Target string to scrub. - * @param[in] repl Replacement string. When it is a string, - * this function takes that as a replacement. - * When it is ::RUBY_Qnil, this function tries - * to yield a block (if any) and takes its - * evaluated value as a replacement. In case - * of ::RUBY_Qnil without a block, this - * function takes an encoding-specific default - * character (`U+FFFD`, for instance) as a last - * resort. - * @exception rb_eTypeError `repl` is neither string nor nil. - * @exception rb_eArgError `repl` itself is broken. - * @exception rb_eEncCompatError `repl` and `str` are incompatible. - * @retval RUBY_Qnil `str` is already clean. - * @retval otherwise A new, clean string. - */ -VALUE rb_str_scrub(VALUE str, VALUE repl); - -/** - * Searches for the "successor" of a string. This function is complicated! - * This is the only function in the entire ruby API (either C or Ruby) that - * generates a string out of thin air. First, the successor to an empty string - * is a new empty string: - * - * ```ruby - * ''.succ # => "" - * ``` - * - * Otherwise the successor is calculated by "incrementing" characters. The - * first character to be incremented is the rightmost alphanumeric: or, if no - * alphanumerics, the rightmost character: - * - * ```ruby - * 'THX1138'.succ # => "THX1139" - * '<>'.succ # => "<>" - * '***'.succ # => '**+' - * ``` - * - * The successor to a digit is another digit, "carrying" to the next-left - * character for a "rollover" from 9 to 0, and prepending another digit if - * necessary: - * - * ```ruby - * '00'.succ # => "01" - * '09'.succ # => "10" - * '99'.succ # => "100" - * '-9'.succ # => "-10" - * ``` - * - * The successor to a letter is another letter of the same case, carrying to - * the next-left character for a rollover, and prepending another same-case - * letter if necessary: - * - * ```ruby - * 'aa'.succ # => "ab" - * 'az'.succ # => "ba" - * 'zz'.succ # => "aaa" - * 'AA'.succ # => "AB" - * 'AZ'.succ # => "BA" - * 'ZZ'.succ # => "AAA" - * ``` - * - * The successor to a non-alphanumeric character is the next character in the - * underlying character set's collating sequence, carrying to the next-left - * character for a rollover, and prepending another character if necessary: - * - * ```ruby - * s = "\u03A1" - * s.succ # => "\u03A3" # There is no such thing like \u03A2. - * s = 255.chr * 3 - * s # => "\xFF\xFF\xFF" - * s.succ # => "\x01\x00\x00\x00" - * ``` - * - * Carrying can occur between and among mixtures of alphanumeric characters: - * - * ```ruby - * s = 'zz99zz99' - * s.succ # => "aaa00aa00" - * s = '99zz99zz' - * s.succ # => "100aa00aa" - * s = '1.9.9' - * s.succ # => "2.0.0" - * ``` - * - * @param[in] orig Predecessor string. - * @return Successor string. - */ -VALUE rb_str_succ(VALUE orig); - -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail. Don't bother. - * - * @param[in] str A C string. - * @return `strlen`, casted to `long`. - */ -static inline long -rbimpl_strlen(const char *str) -{ - return RBIMPL_CAST((long)strlen(str)); -} - -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail. Don't bother. - * - * @param[in] str A C string literal. - * @return Corresponding Ruby string. - */ -static inline VALUE -rbimpl_str_new_cstr(const char *str) -{ - long len = rbimpl_strlen(str); - return rb_str_new_static(str, len); -} - -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail. Don't bother. - * - * @param[in] str A C string literal. - * @return Corresponding Ruby string. - */ -static inline VALUE -rbimpl_usascii_str_new_cstr(const char *str) -{ - long len = rbimpl_strlen(str); - return rb_usascii_str_new_static(str, len); -} - -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail. Don't bother. - * - * @param[in] str A C string literal. - * @return Corresponding Ruby string. - */ -static inline VALUE -rbimpl_utf8_str_new_cstr(const char *str) -{ - long len = rbimpl_strlen(str); - return rb_utf8_str_new_static(str, len); -} - -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail. Don't bother. - * - * @param[in] str A C string literal. - * @return Corresponding Ruby string. - */ -static inline VALUE -rbimpl_external_str_new_cstr(const char *str) -{ - long len = rbimpl_strlen(str); - return rb_external_str_new(str, len); -} - -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail. Don't bother. - * - * @param[in] str A C string literal. - * @return Corresponding Ruby string. - */ -static inline VALUE -rbimpl_locale_str_new_cstr(const char *str) -{ - long len = rbimpl_strlen(str); - return rb_locale_str_new(str, len); -} - -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail. Don't bother. - * - * @param[in] str A C string literal. - * @return Corresponding Ruby string. - */ -static inline VALUE -rbimpl_str_buf_new_cstr(const char *str) -{ - long len = rbimpl_strlen(str); - VALUE buf = rb_str_buf_new(len); - return rb_str_buf_cat(buf, str, len); -} - -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail. Don't bother. - * - * @param[out] buf A string buffer. - * @param[in] str A C string literal. - * @return `buf` itself. - */ -static inline VALUE -rbimpl_str_cat_cstr(VALUE buf, const char *str) -{ - long len = rbimpl_strlen(str); - return rb_str_cat(buf, str, len); -} - -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail. Don't bother. - * - * @param[in] exc An exception class. - * @param[in] str A C string literal. - * @return An instance of `exc`. - */ -static inline VALUE -rbimpl_exc_new_cstr(VALUE exc, const char *str) -{ - long len = rbimpl_strlen(str); - return rb_exc_new(exc, str, len); -} - -/** - * Allocates an instance of ::rb_cString. - * - * @param[in] str A memory region of `len` bytes length. - * @param[in] len Length of `ptr`, in bytes, not including the - * terminating NUL character. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString, of `len` bytes length, of - * "binary" encoding, whose contents are verbatim copy of `str`. - * @pre At least `len` bytes of continuous memory region shall be - * accessible via `str`. - */ -#define rb_str_new(str, len) \ - ((RBIMPL_CONSTANT_P(str) && \ - RBIMPL_CONSTANT_P(len) ? \ - rb_str_new_static : \ - rb_str_new) ((str), (len))) - -/** - * Identical to #rb_str_new, except it assumes the passed pointer is a pointer - * to a C string. - * - * @param[in] str A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString, of "binary" encoding, whose - * contents are verbatim copy of `str`. - * @pre `str` must not be a null pointer. - */ -#define rb_str_new_cstr(str) \ - ((RBIMPL_CONSTANT_P(str) ? \ - rbimpl_str_new_cstr : \ - rb_str_new_cstr) (str)) - -/** - * Identical to #rb_str_new, except it generates a string of "US ASCII" - * encoding. This is different from rb_external_str_new(), not only for the - * output encoding, but also it doesn't convert the contents. - * - * @param[in] str A memory region of `len` bytes length. - * @param[in] len Length of `str`, in bytes, not including the - * terminating NUL character. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString, of `len` bytes length, of - * "US ASCII" encoding, whose contents are verbatim copy of `str`. - */ -#define rb_usascii_str_new(str, len) \ - ((RBIMPL_CONSTANT_P(str) && \ - RBIMPL_CONSTANT_P(len) ? \ - rb_usascii_str_new_static : \ - rb_usascii_str_new) ((str), (len))) - -/** - * Identical to #rb_str_new, except it generates a string of "UTF-8" encoding. - * - * @param[in] str A memory region of `len` bytes length. - * @param[in] len Length of `str`, in bytes, not including the - * terminating NUL character. - * @exception rb_eNoMemError Failed to allocate `len+1` bytes. - * @exception rb_eArgError `len` is negative. - * @return An instance of ::rb_cString, of `len` bytes length, of - * "UTF-8" encoding, whose contents are verbatim copy of `str`. - */ -#define rb_utf8_str_new(str, len) \ - ((RBIMPL_CONSTANT_P(str) && \ - RBIMPL_CONSTANT_P(len) ? \ - rb_utf8_str_new_static : \ - rb_utf8_str_new) ((str), (len))) - -/** - * Identical to #rb_str_new_cstr, except it generates a string of "US ASCII" - * encoding. It can also be seen as a routine Identical to - * #rb_usascii_str_new, except it assumes the passed pointer is a pointer to a - * C string. - * - * @param[in] str A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString, of "US ASCII" encoding, whose - * contents are verbatim copy of `str`. - * @pre `str` must not be a null pointer. - */ -#define rb_usascii_str_new_cstr(str) \ - ((RBIMPL_CONSTANT_P(str) ? \ - rbimpl_usascii_str_new_cstr : \ - rb_usascii_str_new_cstr) (str)) - -/** - * Identical to #rb_str_new_cstr, except it generates a string of "UTF-8" - * encoding. It can also be seen as a routine Identical to #rb_utf8_str_new, - * except it assumes the passed pointer is a pointer to a C string. - * - * @param[in] str A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString, of "UTF-8" encoding, whose contents - * are verbatim copy of `str`. - * @pre `str` must not be a null pointer. - */ -#define rb_utf8_str_new_cstr(str) \ - ((RBIMPL_CONSTANT_P(str) ? \ - rbimpl_utf8_str_new_cstr : \ - rb_utf8_str_new_cstr) (str)) - -/** - * Identical to #rb_str_new_cstr, except it generates a string of "default - * external" encoding. - * - * @param[in] str A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString. In case encoding conversion from - * "default internal" to "default external" is fully defined over - * the given contents, then the return value is a string of - * "default external" encoding, whose contents are the converted - * ones. Otherwise the string is a junk. - * @warning It doesn't raise on a conversion failure and silently ends up in - * a corrupted output. You can know the failure by querying - * `valid_encoding?` of the result object. - * @pre `str` must not be a null pointer. - */ -#define rb_external_str_new_cstr(str) \ - ((RBIMPL_CONSTANT_P(str) ? \ - rbimpl_external_str_new_cstr : \ - rb_external_str_new_cstr) (str)) - -/** - * Identical to #rb_external_str_new_cstr, except it generates a string of - * "locale" encoding instead of "default external". - * - * @param[in] str A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString. In case encoding conversion from - * "default internal" to "locale" is fully defined over the given - * contents, then the return value is a string of "locale" - * encoding, whose contents are the converted ones. Otherwise the - * string is a junk. - * @warning It doesn't raise on a conversion failure and silently ends up in - * a corrupted output. You can know the failure by querying - * `valid_encoding?` of the result object. - * @pre `str` must not be a null pointer. - */ -#define rb_locale_str_new_cstr(str) \ - ((RBIMPL_CONSTANT_P(str) ? \ - rbimpl_locale_str_new_cstr : \ - rb_locale_str_new_cstr) (str)) - -/** - * Identical to #rb_str_new_cstr, except done differently. - * - * @param[in] str A C string. - * @exception rb_eNoMemError Failed to allocate memory. - * @return An instance of ::rb_cString, of "binary" encoding, whose - * contents are verbatim copy of `str`. - * @pre `str` must not be a null pointer. - */ -#define rb_str_buf_new_cstr(str) \ - ((RBIMPL_CONSTANT_P(str) ? \ - rbimpl_str_buf_new_cstr : \ - rb_str_buf_new_cstr) (str)) - -/** - * Identical to rb_str_cat(), except it assumes the passed pointer is a pointer - * to a C string. - * - * @param[out] buf Destination object. - * @param[in] str Contents to append. - * @exception rb_eArgError Result string too big. - * @return The passed `buf`. - * @pre `buf` must not be any arbitrary objects except ::RString. - * @pre `str` must not be a null pointer. - * @post `buf` has the contents of `str` appended. - */ -#define rb_str_cat_cstr(buf, str) \ - ((RBIMPL_CONSTANT_P(str) ? \ - rbimpl_str_cat_cstr : \ - rb_str_cat_cstr) ((buf), (str))) - -/** - * Identical to rb_exc_new(), except it assumes the passed pointer is a pointer - * to a C string. - * - * @param[out] exc A subclass of ::rb_eException. - * @param[in] str Message to raise. - * @return An instance of `exc` whose message is `str`. - * @pre `str` must not be a null pointer. - */ -#define rb_exc_new_cstr(exc, str) \ - ((RBIMPL_CONSTANT_P(str) ? \ - rbimpl_exc_new_cstr : \ - rb_exc_new_cstr) ((exc), (str))) - -#define rb_str_new2 rb_str_new_cstr /**< @old{rb_str_new_cstr} */ -#define rb_str_new3 rb_str_new_shared /**< @old{rb_str_new_shared} */ -#define rb_str_new4 rb_str_new_frozen /**< @old{rb_str_new_frozen} */ -#define rb_str_new5 rb_str_new_with_class /**< @old{rb_str_new_with_class} */ -#define rb_str_buf_new2 rb_str_buf_new_cstr /**< @old{rb_str_buf_new_cstr} */ -#define rb_usascii_str_new2 rb_usascii_str_new_cstr /**< @old{rb_usascii_str_new_cstr} */ -#define rb_str_buf_cat rb_str_cat /**< @alias{rb_str_cat} */ -#define rb_str_buf_cat2 rb_str_cat_cstr /**< @old{rb_usascii_str_new_cstr} */ -#define rb_str_cat2 rb_str_cat_cstr /**< @old{rb_str_cat_cstr} */ - -/** - * Length of a string literal. - * - * @param[in] str A C String literal. - * @return An integer constant expression that represents `str`'s length, - * in bytes, not including the terminating NUL character. - */ -#define rb_strlen_lit(str) (sizeof(str "") - 1) - -/** - * Identical to rb_str_new_static(), except it cannot take string variables. - * - * @param[in] str A C string literal. - * @pre `str` must not be a variable. - * @return An instance of ::rb_cString, of "binary" encoding, whose backend - * storage is the passed C string literal. - * @warning It is a very bad idea to write to a C string literal (often - * immediate SEGV shall occur). Consider return values of this - * function be read-only. - */ -#define rb_str_new_lit(str) rb_str_new_static((str), rb_strlen_lit(str)) - -/** - * Identical to rb_usascii_str_new_static(), except it cannot take string - * variables. - * - * @param[in] str A C string literal. - * @pre `str` must not be a variable. - * @return An instance of ::rb_cString, of "US ASCII" encoding, whose - * backend storage is the passed C string literal. - * @warning It is a very bad idea to write to a C string literal (often - * immediate SEGV shall occur). Consider return values of this - * function be read-only. - */ -#define rb_usascii_str_new_lit(str) rb_usascii_str_new_static((str), rb_strlen_lit(str)) - -/** - * Identical to rb_utf8_str_new_static(), except it cannot take string - * variables. - * - * @param[in] str A C string literal. - * @pre `str` must not be a variable. - * @return An instance of ::rb_cString, of "UTF-8" encoding, whose backend - * storage is the passed C string literal. - * @warning It is a very bad idea to write to a C string literal (often - * immediate SEGV shall occur). Consider return values of this - * function be read-only. - */ -#define rb_utf8_str_new_lit(str) rb_utf8_str_new_static((str), rb_strlen_lit(str)) - -/** - * Identical to rb_enc_str_new_static(), except it cannot take string - * variables. - * - * @param[in] str A C string literal. - * @param[in] enc A pointer to an encoding. - * @pre `str` must not be a variable. - * @return An instance of ::rb_cString, of the passed encoding, whose - * backend storage is the passed C string literal. - * @warning It is a very bad idea to write to a C string literal (often - * immediate SEGV shall occur). Consider return values of this - * function be read-only. - */ -#define rb_enc_str_new_lit(str, enc) rb_enc_str_new_static((str), rb_strlen_lit(str), (enc)) - -#define rb_str_new_literal(str) rb_str_new_lit(str) /**< @alias{rb_str_new_lit} */ -#define rb_usascii_str_new_literal(str) rb_usascii_str_new_lit(str) /**< @alias{rb_usascii_str_new_lit} */ -#define rb_utf8_str_new_literal(str) rb_utf8_str_new_lit(str) /**< @alias{rb_utf8_str_new_lit} */ -#define rb_enc_str_new_literal(str, enc) rb_enc_str_new_lit(str, enc) /**< @alias{rb_enc_str_new_lit} */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_STRING_H */ diff --git a/libs/libruby/ruby/internal/intern/struct.h b/libs/libruby/ruby/internal/intern/struct.h deleted file mode 100644 index 312cf44..0000000 --- a/libs/libruby/ruby/internal/intern/struct.h +++ /dev/null @@ -1,203 +0,0 @@ -#ifndef RBIMPL_INTERN_STRUCT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_STRUCT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cStruct. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/intern/vm.h" /* rb_alloc_func_t */ -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* struct.c */ - -/** - * Creates an instance of the given struct. - * - * @param[in] klass The class of the instance to allocate. - * @param[in] ... The fields. - * @return Allocated instance of `klass`. - * @pre `klass` must be a subclass of ::rb_cStruct. - * @note Number of variadic arguments must much that of the passed klass' - * fields. - */ -VALUE rb_struct_new(VALUE klass, ...); - -/** - * Defines a struct class. - * - * @param[in] name Name of the class. - * @param[in] ... Arbitrary number of `const char*`, terminated by - * zero. Each of which are the name of fields. - * @exception rb_eNameError `name` is not a constant name. - * @exception rb_eTypeError `name` is already taken. - * @exception rb_eArgError Duplicated field name. - * @return The defined class. - * @post Global toplevel constant `name` is defined. - * @note `name` is allowed to be a null pointer. This function creates - * an anonymous struct class then. - * - * @internal - * - * Not seriously checked but it seems this function does not share its - * implementation with how `Struct.new` is implemented...? - */ -VALUE rb_struct_define(const char *name, ...); - -RBIMPL_ATTR_NONNULL((2)) -/** - * Identical to rb_struct_define(), except it defines the class under the - * specified namespace instead of global toplevel. - * - * @param[out] space Namespace that the defining class shall reside. - * @param[in] name Name of the class. - * @param[in] ... Arbitrary number of `const char*`, terminated by - * zero. Each of which are the name of fields. - * @exception rb_eNameError `name` is not a constant name. - * @exception rb_eTypeError `name` is already taken. - * @exception rb_eArgError Duplicated field name. - * @return The defined class. - * @post `name` is a constant under `space`. - * @note In contrast to rb_struct_define(), it doesn't make any sense to - * pass a null pointer to this function. - */ -VALUE rb_struct_define_under(VALUE space, const char *name, ...); - -/** - * Identical to rb_struct_new(), except it takes the field values as a Ruby - * array. - * - * @param[in] klass The class of the instance to allocate. - * @param[in] values Field values. - * @return Allocated instance of `klass`. - * @pre `klass` must be a subclass of ::rb_cStruct. - * @pre `values` must be an instance of struct ::RArray. - */ -VALUE rb_struct_alloc(VALUE klass, VALUE values); - -/** - * Mass-assigns a struct's fields. - * - * @param[out] self An instance of a struct class to squash. - * @param[in] values New values. - * @return ::RUBY_Qnil. - */ -VALUE rb_struct_initialize(VALUE self, VALUE values); - -/** - * Identical to rb_struct_aref(), except it takes ::ID instead of ::VALUE. - * - * @param[in] self An instance of a struct class. - * @param[in] key Key to query. - * @exception rb_eTypeError `self` is not a struct. - * @exception rb_eNameError No such field. - * @return The value stored at `key` in `self`. - */ -VALUE rb_struct_getmember(VALUE self, ID key); - -/** - * Queries the list of the names of the fields of the given struct class. - * - * @param[in] klass A subclass of ::rb_cStruct. - * @return The list of the names of the fields of `klass`. - */ -VALUE rb_struct_s_members(VALUE klass); - -/** - * Queries the list of the names of the fields of the class of the given struct - * object. This is almost the same as calling rb_struct_s_members() over the - * class of the receiver. - * - * @internal - * - * "Almost"? What exactly is the difference? - * - * @endinternal - * - * @param[in] self An instance of a subclass of ::rb_cStruct. - * @return The list of the names of the fields. - */ -VALUE rb_struct_members(VALUE self); - -/** - * Allocates an instance of the given class. This consequential name is of - * course because rb_struct_alloc() not only allocates but also initialises an - * instance. The API design is broken. - * - * @param[in] klass A subclass of ::rb_cStruct. - * @return An allocated instance of `klass`, not initialised. - */ -VALUE rb_struct_alloc_noinit(VALUE klass); - -/** - * Identical to rb_struct_define(), except it does not define accessor methods. - * You have to define them yourself. Forget about the allocator function - * parameter; it is for internal use only. Extension libraries are unable to - * properly allocate a ruby struct, because `RStruct` is opaque. - * - * @internal - * - * Several flags must be set up properly for ::RUBY_T_STRUCT objects, which are - * also missing for extension libraries. - * - * @endinternal - * - * @param[in] name Name of the class. - * @param[in] super Superclass of the defining class. - * @param[in] func Must be 0 for extension libraries. - * @param[in] ... Arbitrary number of `const char*`, terminated by - * zero. Each of which are the name of fields. - * @exception rb_eNameError `name` is not a constant name. - * @exception rb_eTypeError `name` is already taken. - * @exception rb_eArgError Duplicated field name. - * @return The defined class. - * @post Global toplevel constant `name` is defined. - * @note `name` is allowed to be a null pointer. This function creates - * an anonymous struct class then. - */ -VALUE rb_struct_define_without_accessor(const char *name, VALUE super, rb_alloc_func_t func, ...); - -RBIMPL_ATTR_NONNULL((2)) -/** - * Identical to rb_struct_define_without_accessor(), except it defines the - * class under the specified namespace instead of global toplevel. It can also - * be seen as a routine identical to rb_struct_define_under(), except it does - * not define accessor methods. - * - * @param[out] outer Namespace that the defining class shall reside. - * @param[in] class_name Name of the class. - * @param[in] super Superclass of the defining class. - * @param[in] alloc Must be 0 for extension libraries. - * @param[in] ... Arbitrary number of `const char*`, terminated by - * zero. Each of which are the name of fields. - * @exception rb_eNameError `class_name` is not a constant name. - * @exception rb_eTypeError `class_name` is already taken. - * @exception rb_eArgError Duplicated field name. - * @return The defined class. - * @post `class_name` is a constant under `outer`. - * @note In contrast to rb_struct_define_without_accessor(), it doesn't - * make any sense to pass a null name. - */ -VALUE rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, ...); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_STRUCT_H */ diff --git a/libs/libruby/ruby/internal/intern/thread.h b/libs/libruby/ruby/internal/intern/thread.h deleted file mode 100644 index 716375a..0000000 --- a/libs/libruby/ruby/internal/intern/thread.h +++ /dev/null @@ -1,492 +0,0 @@ -#ifndef RBIMPL_INTERN_THREAD_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_THREAD_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cThread. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/config.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -struct timeval; - -/* thread.c */ - -/** - * Tries to switch to another thread. This function blocks until the current - * thread re-acquires the GVL. - * - * @exception rb_eInterrupt Operation interrupted. - */ -void rb_thread_schedule(void); - -/** - * Blocks the current thread until the given file descriptor is ready to be - * read. - * - * @param[in] fd A file descriptor. - * @exception rb_eIOError Closed stream. - * @exception rb_eSystemCallError Situations like EBADF. - */ -int rb_thread_wait_fd(int fd); - -/** - * Identical to rb_thread_wait_fd(), except it blocks the current thread until - * the given file descriptor is ready to be written. - * - * @param[in] fd A file descriptor. - * @exception rb_eIOError Closed stream. - * @exception rb_eSystemCallError Situations like EBADF. - */ -int rb_thread_fd_writable(int fd); - -/** - * Notifies a closing of a file descriptor to other threads. Multiple threads - * can wait for the given file descriptor at once. If such file descriptor is - * closed, threads need to start propagating their exceptions. This is the API - * to kick that process. - * - * @param[in] fd A file descriptor. - * @note This function blocks until all the threads waiting for such fd - * have woken up. - */ -void rb_thread_fd_close(int fd); - -/** - * Checks if the thread this function is running is the only thread that is - * currently alive. - * - * @retval 1 Yes it is. - * @retval 0 No it isn't. - * - * @internal - * - * Above description is in fact inaccurate. There are Ractors these days. - */ -int rb_thread_alone(void); - -/** - * Blocks for the given period of time. - * - * @warning This function can be interrupted by signals. - * @param[in] sec Duration in seconds. - * @exception rb_eInterrupt Interrupted. - */ -void rb_thread_sleep(int sec); - -/** - * Blocks indefinitely. - * - * @exception rb_eInterrupt Interrupted. - */ -void rb_thread_sleep_forever(void); - -/** - * Identical to rb_thread_sleep_forever(), except the thread calling this - * function is considered "dead" when our deadlock checker is triggered. - * - * @exception rb_eInterrupt Interrupted. - */ -void rb_thread_sleep_deadly(void); - -/** - * Stops the current thread. This is not the end of the thread's lifecycle. A - * stopped thread can later be woken up. - * - * @exception rb_eThreadError Stopping this thread would deadlock. - * @retval ::RUBY_Qnil Always. - * - * @internal - * - * The return value makes no sense at all. - */ -VALUE rb_thread_stop(void); - -/** - * Marks a given thread as eligible for scheduling. - * - * @note It may still remain blocked on I/O. - * @note This does not invoke the scheduler itself. - * - * @param[out] thread Thread in question to wake up. - * @exception rb_eThreadError Stop flogging a dead horse. - * @return The passed thread. - * @post The passed thread is made runnable. - */ -VALUE rb_thread_wakeup(VALUE thread); - -/** - * Identical to rb_thread_wakeup(), except it doesn't raise on an already - * killed thread. - * - * @param[out] thread A thread to wake up. - * @retval RUBY_Qnil `thread` is already killed. - * @retval otherwise `thread` is alive. - * @post The passed thread is made runnable, unless killed. - */ -VALUE rb_thread_wakeup_alive(VALUE thread); - -/** - * This is a rb_thread_wakeup() + rb_thread_schedule() combo. - * - * @note There is no guarantee that this function yields to the passed - * thread. It may still remain blocked on I/O. - * @param[out] thread Thread in question to wake up. - * @exception rb_eThreadError Stop flogging a dead horse. - * @return The passed thread. - */ -VALUE rb_thread_run(VALUE thread); - -/** - * Terminates the given thread. Unlike a stopped thread, a killed thread could - * never be revived. This function does return, when passed e.g. an already - * killed thread. But if the passed thread is the only one, or a special - * thread called "main", then it also terminates the entire process. - * - * @param[out] thread The thread to terminate. - * @exception rb_eFatal The passed thread is the running thread. - * @exception rb_eSystemExit The passed thread is the last thread. - * @return The passed thread. - * @post Either the passed thread, or the process entirely, is killed. - * - * @internal - * - * It seems killing the main thread also kills the entire process even if there - * are multiple running ractors. No idea why. - */ -VALUE rb_thread_kill(VALUE thread); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Creates a Ruby thread that is backended by a C function. - * - * @param[in] f The function to run on a thread. - * @param[in,out] g Passed through to `f`. - * @exception rb_eThreadError Could not create a ruby thread. - * @exception rb_eSystemCallError Situations like `EPERM`. - * @return Allocated instance of ::rb_cThread. - * @note This doesn't wait for anything. - */ -VALUE rb_thread_create(VALUE (*f)(void *g), void *g); - -/** - * Identical to rb_thread_sleep(), except it takes struct `timeval` instead. - * - * @warning This function can be interrupted by signals. - * @param[in] time Duration. - * @exception rb_eInterrupt Interrupted. - */ -void rb_thread_wait_for(struct timeval time); - -/** - * Obtains the "current" thread. - * - * @return The current thread of the current ractor of the current execution - * context. - * @pre This function must be called from a thread controlled by ruby. - */ -VALUE rb_thread_current(void); - -/** - * Obtains the "main" thread. There are threads called main. Historically the - * (only) main thread was the one which runs when the process boots. Now that - * we have Ractor, there are more than one main threads. - * - * @return The main thread of the current ractor of the current execution - * context. - * @pre This function must be called from a thread controlled by ruby. - */ -VALUE rb_thread_main(void); - -/** - * This badly named function reads from a Fiber local storage. When this - * function was born there was no such thing like a Fiber. The world was - * innocent. But now... This is a Fiber local storage. Sorry. - * - * @param[in] thread Thread that the target Fiber is running. - * @param[in] key The name of the Fiber local storage to read. - * @retval RUBY_Qnil No such storage. - * @retval otherwise The value stored at `key`. - * @note There in fact are "true" thread local storage, but Ruby doesn't - * provide any interface of them to you, C programmers. - */ -VALUE rb_thread_local_aref(VALUE thread, ID key); - -/** - * This badly named function writes to a Fiber local storage. When this - * function was born there was no such thing like a Fiber. The world was - * innocent. But now... This is a Fiber local storage. Sorry. - * - * @param[in] thread Thread that the target Fiber is running. - * @param[in] key The name of the Fiber local storage to write. - * @param[in] val The new value of the storage. - * @exception rb_eFrozenError `thread` is frozen. - * @return The passed `val` as-is. - * @post Fiber local storage `key` has value of `val`. - * @note There in fact are "true" thread local storage, but Ruby doesn't - * provide any interface of them to you, C programmers. - */ -VALUE rb_thread_local_aset(VALUE thread, ID key, VALUE val); - -/** - * A `pthread_atfork(3posix)`-like API. Ruby expects its child processes to - * call this function at the very beginning of their processes. If you plan to - * fork a process don't forget to call it. - */ -void rb_thread_atfork(void); - -/** - * :FIXME: situation of this function is unclear. It seems nobody uses it. - * Maybe a good idea to KonMari. - */ -void rb_thread_atfork_before_exec(void); - -/** - * "Recursion" API entry point. This basically calls the given function with - * the given arguments, but additionally with recursion flag. The flag is set - * to 1 if the execution have already experienced the passed `g` parameter - * before. - * - * @param[in] f The function that possibly recurs. - * @param[in,out] g Passed as-is to `f`. - * @param[in,out] h Passed as-is to `f`. - * @return The return value of f. - */ -VALUE rb_exec_recursive(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h); - -/** - * Identical to rb_exec_recursive(), except it checks for the recursion on the - * ordered pair of `{ g, p }` instead of just `g`. - * - * @param[in] f The function that possibly recurs. - * @param[in,out] g Passed as-is to `f`. - * @param[in] p Paired object for recursion detection. - * @param[in,out] h Passed as-is to `f`. - */ -VALUE rb_exec_recursive_paired(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h); - -/** - * Identical to rb_exec_recursive(), except it calls `f` for outermost - * recursion only. Inner recursions yield calls to rb_throw_obj(). - * - * @param[in] f The function that possibly recurs. - * @param[in,out] g Passed as-is to `f`. - * @param[in,out] h Passed as-is to `f`. - * @return The return value of f. - * - * @internal - * - * It seems nobody uses the "it calls rb_throw_obj()" part of this function. - * @shyouhei doesn't understand the needs. - */ -VALUE rb_exec_recursive_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h); - -/** - * Identical to rb_exec_recursive_outer(), except it checks for the recursion - * on the ordered pair of `{ g, p }` instead of just `g`. It can also be seen - * as a routine identical to rb_exec_recursive_paired(), except it calls `f` - * for outermost recursion only. Inner recursions yield calls to - * rb_throw_obj(). - * - * @param[in] f The function that possibly recurs. - * @param[in,out] g Passed as-is to `f`. - * @param[in] p Paired object for recursion detection. - * @param[in,out] h Passed as-is to `f`. - * - * @internal - * - * It seems nobody uses the "it calls rb_throw_obj()" part of this function. - * @shyouhei doesn't understand the needs. - */ -VALUE rb_exec_recursive_paired_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h); - -/** - * This is the type of UBFs. An UBF is a function that unblocks a blocking - * region. For instance when a thread is blocking due to `pselect(3posix)`, it - * is highly expected that `pthread_kill(3posix)` can interrupt the system call - * and the thread could revive. Or when a thread is blocking due to - * `waitpid(3posix)`, it is highly expected that killing the waited process - * should suffice. An UBF is a function that does such things. Designing your - * own UBF needs deep understanding of why your blocking region blocks, how - * threads work in ruby, and a matter of luck. It often is the case you simply - * cannot cancel something that had already begun. - * - * @see rb_thread_call_without_gvl() - */ -typedef void rb_unblock_function_t(void *); - -/** - * @private - * - * This is an implementation detail. Must be a mistake to be here. - * - * @internal - * - * Why is this function type different from what rb_thread_call_without_gvl() - * takes? - */ -typedef VALUE rb_blocking_function_t(void *); - -/** - * Checks for interrupts. In ruby, signals are masked by default. You can - * call this function at will to check if there are pending signals. In case - * there are, they would be handled in this function. - * - * If your extension library has a function that takes a long time, consider - * calling it periodically. - * - * @note It might switch to another thread. - */ -void rb_thread_check_ints(void); - -/** - * Checks if the thread's execution was recently interrupted. If called from - * that thread, this function can be used to detect spurious wake-ups. - * - * @param[in] thval Thread in question. - * @retval 0 The thread was not interrupted. - * @retval otherwise The thread was interrupted recently. - * - * @internal - * - * Above description is not a lie. But actually the return value is an opaque - * trap vector. If you know which bit means which, you can know what happened. - */ -int rb_thread_interrupted(VALUE thval); - -/** - * A special UBF for blocking IO operations. You need deep understanding of - * what this actually do before using. Basically you should not use it from - * extension libraries. It is too easy to mess up. - */ -#define RUBY_UBF_IO RBIMPL_CAST((rb_unblock_function_t *)-1) - -/** - * A special UBF for blocking process operations. You need deep understanding - * of what this actually do before using. Basically you should not use it from - * extension libraries. It is too easy to mess up. - */ -#define RUBY_UBF_PROCESS RBIMPL_CAST((rb_unblock_function_t *)-1) - -/* thread_sync.c */ - -/** - * Creates a mutex. - * - * @return An allocated instance of rb_cMutex. - */ -VALUE rb_mutex_new(void); - -/** - * Queries if there are any threads that holds the lock. - * - * @param[in] mutex The mutex in question. - * @retval RUBY_Qtrue The mutex is locked by someone. - * @retval RUBY_Qfalse The mutex is not locked by anyone. - */ -VALUE rb_mutex_locked_p(VALUE mutex); - -/** - * Attempts to lock the mutex, without waiting for other threads to unlock it. - * Failure in locking the mutex can be detected by the return value. - * - * @param[out] mutex The mutex to lock. - * @retval RUBY_Qtrue Successfully locked by the current thread. - * @retval RUBY_Qfalse Otherwise. - * @note This function also returns ::RUBY_Qfalse when the mutex is - * already owned by the calling thread itself. - */ -VALUE rb_mutex_trylock(VALUE mutex); - -/** - * Attempts to lock the mutex. It waits until the mutex gets available. - * - * @param[out] mutex The mutex to lock. - * @exception rb_eThreadError Recursive deadlock situation. - * @return The passed mutex. - * @post The mutex is owned by the current thread. - */ -VALUE rb_mutex_lock(VALUE mutex); - -/** - * Releases the mutex. - * - * @param[out] mutex The mutex to unlock. - * @exception rb_eThreadError The mutex is not owned by the current thread. - * @return The passed mutex. - * @post Upon successful return the passed mutex is no longer owned by - * the current thread. - */ -VALUE rb_mutex_unlock(VALUE mutex); - -/** - * Releases the lock held in the mutex and waits for the period of time; - * reacquires the lock on wakeup. - * - * @pre The lock has to be owned by the current thread beforehand. - * @param[out] self The target mutex. - * @param[in] timeout Duration, in seconds, in ::rb_cNumeric. - * @exception rb_eArgError `timeout` is negative. - * @exception rb_eRangeError `timeout` is out of range of `time_t`. - * @exception rb_eThreadError The mutex is not owned by the current thread. - * @return Number of seconds it actually slept. - * @warning It is a failure not to check the return value. This function - * can return spuriously for various reasons. Maybe other threads - * can rb_thread_wakeup(). Maybe an end user can press the - * Control and C key from the interactive console. On the other - * hand it can also take longer than the specified. The mutex - * could be locked by someone else. It waits then. - * @post Upon successful return the passed mutex is owned by the current - * thread. - * - * @internal - * - * This function is called from `ConditionVariable#wait`. So it is not a - * deprecated feature. However @shyouhei have never seen any similar mutex - * primitive available in any other languages than Ruby. - * - * EDIT: In 2021, @shyouhei asked @ko1 in person about this API. He answered - * that it is his invention. The motivation behind its design is to eliminate - * needs of condition variables as primitives. Unlike other languages, Ruby's - * `ConditionVariable` class was written in pure-Ruby initially. We don't have - * to implement machine-native condition variables in assembly each time we - * port Ruby to a new architecture. This function made it possible. "I felt I - * was a genius when this idea came to me", said @ko1. - * - * `rb_cConditionVariable` is now written in C for speed, though. - */ -VALUE rb_mutex_sleep(VALUE self, VALUE timeout); - -/** - * Obtains the lock, runs the passed function, and releases the lock when it - * completes. - * - * @param[out] mutex The mutex to lock. - * @param[in] func What to do during the mutex is locked. - * @param[in,out] arg Passed as-is to `func`. - */ -VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_THREAD_H */ diff --git a/libs/libruby/ruby/internal/intern/time.h b/libs/libruby/ruby/internal/intern/time.h deleted file mode 100644 index df48286..0000000 --- a/libs/libruby/ruby/internal/intern/time.h +++ /dev/null @@ -1,161 +0,0 @@ -#ifndef RBIMPL_INTERN_TIME_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_TIME_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to ::rb_cTime. - */ -#include "ruby/internal/config.h" - -#ifdef HAVE_TIME_H -# include /* for time_t */ -#endif - -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -struct timespec; -struct timeval; - -/* time.c */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Fills the current time into the given struct. - * - * @param[out] ts Return buffer. - * @exception rb_eSystemCallError Access denied for hardware clock. - * @post Current time is stored in `*ts`. - */ -void rb_timespec_now(struct timespec *ts); - -/** - * Creates an instance of ::rb_cTime with the given time and the local - * timezone. - * - * @param[in] sec Seconds since the UNIX epoch. - * @param[in] usec Subsecond part, in microseconds resolution. - * @exception rb_eRangeError Cannot express the time. - * @return An allocated instance of ::rb_cTime. - */ -VALUE rb_time_new(time_t sec, long usec); - -/** - * Identical to rb_time_new(), except it accepts the time in nanoseconds - * resolution. - * - * @param[in] sec Seconds since the UNIX epoch. - * @param[in] nsec Subsecond part, in nanoseconds resolution. - * @exception rb_eRangeError Cannot express the time. - * @return An allocated instance of ::rb_cTime. - */ -VALUE rb_time_nano_new(time_t sec, long nsec); - -RBIMPL_ATTR_NONNULL(()) -/** - * Creates an instance of ::rb_cTime, with given time and offset. - * - * @param[in] ts Time specifier. - * @param[in] offset Offset specifier, can take following values: - * - `INT_MAX`: `ts` is in local time. - * - `INT_MAX - 1`: `ts` is in UTC. - * - `-86400` to `86400`: fixed timezone. - * @exception rb_eArgError Malformed `offset`. - * @return An allocated instance of ::rb_cTime. - */ -VALUE rb_time_timespec_new(const struct timespec *ts, int offset); - -/** - * Identical to rb_time_timespec_new(), except it takes Ruby values instead of - * C structs. - * - * @param[in] timev Something numeric. Currently Integers, Rationals, - * and Floats are accepted. - * @param[in] off Offset specifier. As of 2.7 this argument is - * heavily extended to take following kinds of - * objects: - * - ::RUBY_Qundef ... means UTC. - * - ::rb_cString ... "+12:34" etc. - * - A mysterious "zone" object. This is largely - * undocumented. However the initial intent was - * that we want to accept - * `ActiveSupport::TimeZone` here. Other gems - * could also be possible... But how to make an - * acceptable class is beyond this document. - * @exception rb_eArgError Malformed `off`. - * @return An allocated instance of ::rb_cTime. - */ -VALUE rb_time_num_new(VALUE timev, VALUE off); - -/** - * Creates a "time interval". This basically converts an instance of - * ::rb_cNumeric into a struct `timeval`, but for instance negative time - * interval must not exist. - * - * @param[in] num An instance of ::rb_cNumeric. - * @exception rb_eArgError `num` is negative. - * @exception rb_eRangeError `num` is out of range of `timeval::tv_sec`. - * @return A struct that represents the identical time to `num`. - */ -struct timeval rb_time_interval(VALUE num); - -/** - * Converts an instance of rb_cTime to a struct timeval that represents the - * identical point of time. It can also take something numeric; would consider - * it as a UNIX time then. - * - * @param[in] time Instance of either ::rb_cTime or ::rb_cNumeric. - * @exception rb_eRangeError `time` is out of range of `timeval::tv_sec`. - * @return A struct that represents the identical time to `num`. - */ -struct timeval rb_time_timeval(VALUE time); - -/** - * Identical to rb_time_timeval(), except for return type. - * - * @param[in] time Instance of either ::rb_cTime or ::rb_cNumeric. - * @exception rb_eRangeError `time` is out of range of `timeval::tv_sec`. - * @return A struct that represents the identical time to `num`. - */ -struct timespec rb_time_timespec(VALUE time); - -/** - * Identical to rb_time_interval(), except for return type. - * - * @param[in] num An instance of ::rb_cNumeric. - * @exception rb_eArgError `num` is negative. - * @exception rb_eRangeError `num` is out of range of `timespec::tv_sec`. - * @return A struct that represents the identical time to `num`. - */ -struct timespec rb_time_timespec_interval(VALUE num); - -/** - * Queries the offset, in seconds between the time zone of the time and the - * UTC. - * - * @param[in] time An instance of ::rb_cTime. - * @return Numeric offset. - */ -VALUE rb_time_utc_offset(VALUE time); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_TIME_H */ diff --git a/libs/libruby/ruby/internal/intern/variable.h b/libs/libruby/ruby/internal/intern/variable.h deleted file mode 100644 index 479c395..0000000 --- a/libs/libruby/ruby/internal/intern/variable.h +++ /dev/null @@ -1,628 +0,0 @@ -#ifndef RBIMPL_INTERN_VARIABLE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_VARIABLE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to names inside of a Ruby program. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/st.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* variable.c */ - -/** - * Queries the name of a module. - * - * @param[in] mod An instance of ::rb_cModule. - * @retval RUBY_Qnil `mod` is anonymous. - * @retval otherwise `mod` is onymous. - */ -VALUE rb_mod_name(VALUE mod); - -/** - * Identical to rb_mod_name(), except it returns `#` style - * inspection for anonymous modules. - * - * @param[in] mod An instance of ::rb_cModule. - * @return An instance of ::rb_cString representing `mod`'s path. - */ -VALUE rb_class_path(VALUE mod); - -/** - * @alias{rb_mod_name} - * - * @internal - * - * Am I missing something? Why we have the same thing in different names? - */ -VALUE rb_class_path_cached(VALUE mod); - -RBIMPL_ATTR_NONNULL(()) -/** - * Names a class. - * - * @param[out] klass Target module to name. - * @param[out] space Namespace that `klass` shall reside. - * @param[in] name Name of `klass`. - * @post `klass` has `space::klass` name. - */ -void rb_set_class_path(VALUE klass, VALUE space, const char *name); - -/** - * Identical to rb_set_class_path(), except it accepts the name as Ruby's - * string instead of C's. - * - * @param[out] klass Target module to name. - * @param[out] space Namespace that `klass` shall reside. - * @param[in] name Name of `klass`. - * @post `klass` has `space::klass` name. - */ -void rb_set_class_path_string(VALUE klass, VALUE space, VALUE name); - -/** - * Identical to rb_path2class(), except it accepts the path as Ruby's string - * instead of C's. - * - * @param[in] path Path to query. - * @exception rb_eArgError No such constant. - * @exception rb_eTypeError The path resolved to a non-module. - * @return Resolved class. - */ -VALUE rb_path_to_class(VALUE path); - -RBIMPL_ATTR_NONNULL(()) -/** - * Resolves a `Q::W::E::R`-style path string to the actual class it points. - * - * @param[in] path Path to query. - * @exception rb_eArgError No such constant. - * @exception rb_eTypeError The path resolved to a non-module. - * @return Resolved class. - */ -VALUE rb_path2class(const char *path); - -/** - * Queries the name of the given object's class. - * - * @param[in] obj Arbitrary object. - * @return An instance of ::rb_cString representing `obj`'s class' path. - */ -VALUE rb_class_name(VALUE obj); - -/** - * Kicks the autoload procedure as if it was "touched". - * - * @param[out] space Namespace where autoload is defined. - * @param[in] name Name of the autoloaded constant. - * @retval RUBY_Qfalse No such autoload. - * @retval RUBY_Qtrue Autoload successfully initiated. - * @note As an autoloaded library is expected to define `space::name`, - * it is a nature of this function to have process-global side - * effects. - * @note Multiple threads can simultaneously call this API. It blocks - * then. That must not last indefinitely but can take longer than - * you expect. - * - * @internal - * - * @shyouhei has no idea why extension libraries should use this API. - */ -VALUE rb_autoload_load(VALUE space, ID name); - -/** - * Queries if an autoload is defined at a point. - * - * @param[in] space Namespace where autoload is defined. - * @param[in] name Name of the autoloaded constant. - * @retval RUBY_Qnil No such autoload. - * @retval otherwise The feature (path) registered at `space::name`. - */ -VALUE rb_autoload_p(VALUE space, ID name); - -/** - * Traces a global variable. - * - * @param[in] argc Either 1 or 2. - * @param[in] argv Variable name, optionally a Proc. - * @retval RUBY_Qnil No previous tracers. - * @retval otherwise Previous tracers. - * - * @internal - * - * @shyouhei has no idea why extension libraries should use this API. - */ -VALUE rb_f_trace_var(int argc, const VALUE *argv); - -/** - * Deletes the passed tracer from the passed global variable, or if omitted, - * deletes everything. - * - * @param[in] argc Either 1 or 2. - * @param[in] argv Variable name, optionally a Proc. - * @retval RUBY_Qnil No previous tracers. - * @retval otherwise Deleted tracers. - * - * @internal - * - * @shyouhei has no idea why extension libraries should use this API. - */ -VALUE rb_f_untrace_var(int argc, const VALUE *argv); - -/** - * Queries the list of global variables. - * - * @return The list of the name of the global variables. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -VALUE rb_f_global_variables(void); - -/** - * Aliases a global variable. Did you know that you can alias a global - * variable? It is like aliasing methods: - * - * ```ruby - * alias $dst $src - * ``` - * - * This C function does the same thing. - * - * @param[in] dst Destination name. - * @param[in] src Source name. - * @post A global variable named `dst` is defined to be an alias of a - * global variable named `src`. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -void rb_alias_variable(ID dst, ID src); - -/** - * Frees the list of instance variables. 3rd parties need not know, but there - * are several ways to store an object's instance variables, depending on its - * internal structure. This function makes sense when the passed objects is - * using so-called "generic" backend storage. People need not be aware of this - * working behind-the-scenes. - * - * @param[out] obj The object in question. - * - * @internal - * - * This just destroys the given object. @shyouhei has no idea why extension - * libraries should use this API. - */ -void rb_free_generic_ivar(VALUE obj); - -/** - * Identical to rb_iv_get(), except it accepts the name as an ::ID instead of a - * C string. - * - * @param[in] obj Target object. - * @param[in] name Target instance variable to query. - * @retval RUBY_nil No such instance variable. - * @retval otherwise The value assigned to the instance variable. - */ -VALUE rb_ivar_get(VALUE obj, ID name); - -/** - * Identical to rb_iv_set(), except it accepts the name as an ::ID instead of a - * C string. - * - * @param[out] obj Target object. - * @param[in] name Target instance variable. - * @param[in] val Value to assign. - * @exception rb_eFrozenError Can't modify `obj`. - * @exception rb_eArgError `obj` has too many instance variables. - * @return Passed value. - * @post An instance variable named `name` is defined if absent on - * `obj`, whose value is set to `val`. - */ -VALUE rb_ivar_set(VALUE obj, ID name, VALUE val); - -/** - * Queries if the instance variable is defined at the object. This roughly - * resembles `defined?(@name)` in `obj`'s context. - * - * @param[in] obj Target object. - * @param[in] name Target instance variable to query. - * @retval RUBY_Qtrue There is an instance variable. - * @retval RUBY_Qfalse No such instance variable. - */ -VALUE rb_ivar_defined(VALUE obj, ID name); - -/** - * Iterates over an object's instance variables. - * - * @param[in] obj Target object. - * @param[in] func Callback function. - * @param[in] arg Passed as-is to the last argument of `func`. - */ -void rb_ivar_foreach(VALUE obj, int (*func)(ID name, VALUE val, st_data_t arg), st_data_t arg); - -/** - * Number of instance variables defined on an object. - * - * @param[in] obj Target object. - * @return Number of instance variables defined on `obj`. - */ -st_index_t rb_ivar_count(VALUE obj); - -/** - * Identical to rb_ivar_get() - * - * @param[in] obj Target object. - * @param[in] name Target instance variable to query. - * @retval RUBY_nil No such instance variable. - * @retval otherwise The value assigned to the instance variable. - * - * @internal - * - * Am I missing something? Why we have the same thing in different names? - */ -VALUE rb_attr_get(VALUE obj, ID name); - -/** - * Resembles `Object#instance_variables`. - * - * @param[in] obj Target object to query. - * @return An array of instance variable names for the receiver. - * @note Simply defining an accessor does not create the corresponding - * instance variable. - */ -VALUE rb_obj_instance_variables(VALUE obj); - -/** - * Resembles `Object#remove_instance_variable`. - * - * @param[out] obj Target object. - * @param[in] name Variable name to remove, either in Symbol or String. - * @return What was removed. - * @pre Instance variable named `name` is deleted from `obj`. - */ -VALUE rb_obj_remove_instance_variable(VALUE obj, VALUE name); - -/** - * This API is mysterious. It has been there since the initial revision. No - * single bits of documents has ever been written. The function name doesn't - * describe anything. What should be passed to the argument, or what should be - * the return value, are not obvious. Yet it has evolved over time. The - * source code is written in counter-intuitive way (as of 3.0). - * - * Simply put, don't try to understand this API. - */ -void *rb_mod_const_at(VALUE, void*); - -/** - * This is a variant of rb_mod_const_at(). As a result, it is also mysterious. - * It _seems_ it iterates over the ancestry tree of the module. But what that - * means is beyond a human brain. - */ -void *rb_mod_const_of(VALUE, void*); - -/** - * This is another mysterious API that comes with no documents at all. It - * seems it expects some specific data structure for the passed pointer. But - * the details has never been made explicit. It seems nobody should use this - * API. - */ -VALUE rb_const_list(void*); - -/** - * Resembles `Module#constants`. List up the constants defined at the - * receiver. This includes the names of constants in any included modules, - * unless `argv[0]` is ::RUBY_Qfalse. - * - * The implementation makes no guarantees about the order in which the - * constants are yielded. - * - * @param[in] argc Either 0 or 1. - * @param[in] argv Pointer to ::RUBY_Qfalse, if `argc == 1`. - * @param[in] recv Target namespace. - * @return An array of symbols, which are constant names under `recv`. - */ -VALUE rb_mod_constants(int argc, const VALUE *argv, VALUE recv); - -/** - * Resembles `Module#remove_const`. - * - * @param[out] space Target namespace. - * @param[in] name Variable name to remove, either in Symbol or String. - * @return What was removed. - * @pre Constant named `space::name` is deleted. - * @note In case what was removed was in fact a module or a class, this - * operation does not affect its name. Which means when people - * for instance look at it using `p` etc., it still introduces - * itself using the deleted name. Can confuse people. - */ -VALUE rb_mod_remove_const(VALUE space, VALUE name); - -/** - * Queries if the constant is defined at the namespace. - * - * @param[in] space Target namespace. - * @param[in] name Target name to query. - * @retval RUBY_Qtrue There is a constant. - * @retval RUBY_Qfalse No such constant. - * - * @internal - * - * The return values are not typo! This function returns ruby values casted to - * `int`. Completely brain-damaged design. - */ -int rb_const_defined(VALUE space, ID name); - -/** - * Identical to rb_const_defined(), except it doesn't look for parent classes. - * For instance `Array` is a toplevel constant, which is visible from - * everywhere. But this function does not take such things into account. It - * concerns only what is directly defined inside of the given namespace. - * - * @param[in] space Target namespace. - * @param[in] name Target name to query. - * @retval RUBY_Qtrue There is a constant. - * @retval RUBY_Qfalse No such constant. - * - * @internal - * - * The return values are not typo! This function returns ruby values casted to - * `int`. Completely brain-damaged design. - */ -int rb_const_defined_at(VALUE space, ID name); - -/** - * Identical to rb_const_defined(), except it returns false for private - * constants. - * - * @param[in] space Target namespace. - * @param[in] name Target name to query. - * @retval RUBY_Qtrue There is a constant. - * @retval RUBY_Qfalse No such constant. - * - * @internal - * - * What does "from" mean? The name sounds quite cryptic. - * - * The return values are not typo! This function returns ruby values casted to - * `int`. Completely brain-damaged design. - */ -int rb_const_defined_from(VALUE space, ID name); - -/** - * Identical to rb_const_defined(), except it returns the actual defined value. - * - * @param[in] space Target namespace. - * @param[in] name Target name to query. - * @exception rb_eNameError No such constant. - * @return The defined constant. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -VALUE rb_const_get(VALUE space, ID name); - -/** - * Identical to rb_const_defined_at(), except it returns the actual defined - * value. It can also be seen as a routine identical to rb_const_get(), except - * it doesn't look for parent classes. - * - * @param[in] space Target namespace. - * @param[in] name Target name to query. - * @exception rb_eNameError No such constant. - * @return The defined constant. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -VALUE rb_const_get_at(VALUE space, ID name); - -/** - * Identical to rb_const_defined_at(), except it returns the actual defined - * value. It can also be seen as a routine identical to rb_const_get(), except - * it doesn't return a private constant. - * - * @param[in] space Target namespace. - * @param[in] name Target name to query. - * @exception rb_eNameError No such constant. - * @return The defined constant. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -VALUE rb_const_get_from(VALUE space, ID name); - -/** - * Names a constant. - * - * @param[out] space Target namespace. - * @param[in] name Target name to query. - * @param[in] val Value to define. - * @exception rb_eTypeError `space` is not a module. - * @post `name` is a constant under `space`, whose value is `val`. - * @note You can reassign. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -void rb_const_set(VALUE space, ID name, VALUE val); - -/** - * Identical to rb_mod_remove_const(), except it takes the name as ::ID instead - * of ::VALUE. - * - * @param[out] space Target namespace. - * @param[in] name Variable name to remove, either in Symbol or String. - * @return What was removed. - * @pre Constant named `space::name` is deleted. - * @note In case what was removed was in fact a module or a class, this - * operation does not affect its name. Which means when people - * for instance look at it using `p` etc., it still introduces - * itself using the deleted name. Can confuse people. - */ -VALUE rb_const_remove(VALUE space, ID name); - -#if 0 /* EXPERIMENTAL: remove if no problem */ -RBIMPL_ATTR_NORETURN() -/** - * This is the default implementation of `Module#const_missing`. - * - * @param[in] space Target namespace. - * @param[in] name Target name that is nonexistent. - * @exception rb_eNameError Always. - */ -VALUE rb_mod_const_missing(VALUE space, VALUE name); -#endif - -/** - * Queries if the given class has the given class variable. - * - * @param[in] klass Target class. - * @param[in] name Name to query. - * @return RUBY_Qtrue Yes there is. - * @return RUBY_Qfalse No there isn't. - * @pre `klass` must be an instance of rb_cModule. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -VALUE rb_cvar_defined(VALUE klass, ID name); - -/** - * Assigns a value to a class variable. - * - * @param[out] klass Target class. - * @param[in] name Variable name. - * @param[in] val Value to be assigned. - * @post `klass` has a class variable named `name` whose value is `val`. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -void rb_cvar_set(VALUE klass, ID name, VALUE val); - -/** - * Obtains a value from a class variable. - * - * @param[in] klass Target class. - * @param[in] name Variable name. - * @exception rb_eNameError Uninitialised class variable. - * @exception rb_eRuntimeError `[Bug#14541]` situation. - * @return Class variable named `name` under `klass`. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -VALUE rb_cvar_get(VALUE klass, ID name); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_cvar_get(), except it takes additional "front" pointer. - * This extra parameter is a buffer, which will have the class where the - * queried class variable actually resides. - * - * @param[in] klass Target class. - * @param[in] name Variable name. - * @param[out] front Return buffer. - * @exception rb_eNameError Uninitialised class variable. - * @exception rb_eRuntimeError `[Bug#14541]` situation. - * @return Class variable named `name` under `klass`. - * @post `front` has the class object, which is an ancestor of `klass`, - * where the queried class variable actually resides. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -VALUE rb_cvar_find(VALUE klass, ID name, VALUE *front); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_cvar_set(), except it accepts C's string instead of ::ID. - * - * @param[out] klass Target class. - * @param[in] name Variable name. - * @param[in] val Value to be assigned. - * @post `klass` has a class variable named `name` whose value is `val`. - */ -void rb_cv_set(VALUE klass, const char *name, VALUE val); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_cvar_get(), except it accepts C's string instead of ::ID. - * - * @param[in] klass Target class. - * @param[in] name Variable name. - * @exception rb_eNameError Uninitialised class variable. - * @exception rb_eRuntimeError `[Bug#14541]` situation. - * @return Class variable named `name` under `klass`. - */ -VALUE rb_cv_get(VALUE klass, const char *name); - -RBIMPL_ATTR_NONNULL(()) -/** - * @alias{rb_cv_set} - * - * @internal - * - * Am I missing something? Why we have the same thing in different names? - */ -void rb_define_class_variable(VALUE, const char*, VALUE); - -/** - * Resembles `Module#class_variables`. List up the variables defined at the - * receiver. This includes the names of constants in any included modules, - * unless `argv[0]` is ::RUBY_Qfalse. - * - * The implementation makes no guarantees about the order in which the - * constants are yielded. - * - * @param[in] argc Either 0 or 1. - * @param[in] argv Pointer to ::RUBY_Qfalse, if `argc == 1`. - * @param[in] recv Target class. - * @return An array of symbols, which are class variable names under - * `recv`. - */ -VALUE rb_mod_class_variables(int argc, const VALUE *argv, VALUE recv); - -/** - * Resembles `Module#remove_class_variable`. - * - * @param[out] mod Target class. - * @param[in] name Variable name to remove, either in Symbol or String. - * @return What was removed. - * @pre Instance variable named `name` is deleted from `obj`. - */ -VALUE rb_mod_remove_cvar(VALUE mod, VALUE name); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_VARIABLE_H */ diff --git a/libs/libruby/ruby/internal/intern/vm.h b/libs/libruby/ruby/internal/intern/vm.h deleted file mode 100644 index 76af796..0000000 --- a/libs/libruby/ruby/internal/intern/vm.h +++ /dev/null @@ -1,431 +0,0 @@ -#ifndef RBIMPL_INTERN_VM_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERN_VM_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Public APIs related to rb_cRubyVM. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* vm.c */ - -/** - * Resembles `__LINE__`. - * - * @retval 0 Current execution context not in a ruby method. - * @retval otherwise The current line number of the current thread of the - * current ractor of the current execution context. - */ -int rb_sourceline(void); - -/** - * Resembles `__FILE__`. - * - * @retval 0 Current execution context not in a ruby method. - * @retval otherwise The current source path of the current thread of the - * current ractor of the current execution context. - * @note This may or may not be an absolute path. - */ -const char *rb_sourcefile(void); - -/** - * Resembles `__method__`. - * - * @param[out] idp Return buffer for method id. - * @param[out] klassp Return buffer for class. - * @retval 0 Current execution context not in a method. - * @retval 1 Successful return. - * @post Upon successful return `*idp` and `*klassp` are updated to have - * the current method name and its defined class respectively. - * @note Both parameters can be `NULL`. - */ -int rb_frame_method_id_and_class(ID *idp, VALUE *klassp); - -/* vm_eval.c */ - -/** - * Identical to rb_funcallv(), except it returns ::RUBY_Qundef instead of - * raising ::rb_eNoMethodError. - * - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @retval RUBY_Qundef `recv` doesn't respond to `mid`. - * @retval otherwise What the method evaluates to. - */ -VALUE rb_check_funcall(VALUE recv, ID mid, int argc, const VALUE *argv); - -/** - * Identical to rb_check_funcall(), except you can specify how to handle the - * last element of the given array. It can also be seen as a routine identical - * to rb_funcallv_kw(), except it returns ::RUBY_Qundef instead of raising - * ::rb_eNoMethodError. - * - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] argc Number of arguments. - * @param[in] argv Arbitrary number of method arguments. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `argv`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `argv`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @retval RUBY_Qundef `recv` doesn't respond to `mid`. - * @retval otherwise What the method evaluates to. - */ -VALUE rb_check_funcall_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat); - -/** - * This API is practically a variant of rb_proc_call_kw() now. Historically - * when there still was a concept called `$SAFE`, this was an API for that. - * But we no longer have that. This function basically ended its role. It - * just remains here because of no harm. - * - * @param[in] cmd A string, or something callable. - * @param[in] arg Argument passed to the call. - * @param[in] kw_splat Handling of keyword parameters: - * - RB_NO_KEYWORDS `arg`'s last is not a keyword argument. - * - RB_PASS_KEYWORDS `arg`'s last is a keyword argument. - * - RB_PASS_CALLED_KEYWORDS it depends if there is a passed block. - * @return What the command evaluates to. - */ -VALUE rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat); - -/** - * Identical to rb_funcallv(), except it takes Ruby's array instead of C's. - * @param[in,out] recv Receiver of the method. - * @param[in] mid Name of the method to call. - * @param[in] args An instance of ::RArray. - * @exception rb_eNoMethodError No such method. - * @exception rb_eException Any exceptions happen inside. - * @return What the method evaluates to. - * @pre `args` must be an ::RArray. Call `to_ary` beforehand when - * necessary. - */ -VALUE rb_apply(VALUE recv, ID mid, VALUE args); - -/** - * Evaluates a string containing Ruby source code, or the given block, within - * the context of the receiver. In order to set the context, the variable - * `self` is set to `recv` while the code is executing, giving the code access - * to `recv`'s instance variables and private methods. - * - * When given a block, `recv` is also passed in as the block's only argument. - * - * When given a string, the optional second and third parameters supply a - * filename and starting line number that are used when reporting compilation - * errors. - * - * @param[in] argc Number of objects in `argv` - * @param[in] argv C array of 0 up to 3 elements. - * @param[in] recv The object in question. - * @return What was evaluated. - */ -VALUE rb_obj_instance_eval(int argc, const VALUE *argv, VALUE recv); - -/** - * Executes the given block within the context of the receiver. In order to - * set the context, the variable `self` is set to `recv` while the code is - * executing, giving the code access to `recv`'s instance variables. Arguments - * are passed as block parameters. - * - * @param[in] argc Number of objects in `argv` - * @param[in] argv Arbitrary parameters to be passed to the block. - * @param[in] recv The object in question. - * @return What was evaluated. - * @note Don't confuse this with rb_obj_instance_eval(). The key - * difference is whether you can pass arbitrary parameters to the - * block, like this: - * - * ```ruby - * class Foo - * def initialize - * @foo = 5 - * end - * end - * Foo.new.instance_exec(7) {|i| @foo + i } # => 12 - * ``` - */ -VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE recv); - -/** - * Identical to rb_obj_instance_eval(), except it evaluates within the context - * of module. - * - * @param[in] argc Number of objects in `argv` - * @param[in] argv C array of 0 up to 3 elements. - * @param[in] mod The module in question. - * @pre `mod` must be a Module. - * @return What was evaluated. - */ -VALUE rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod); - -/** - * Identical to rb_obj_instance_exec(), except it evaluates within the context - * of module. - * - * @param[in] argc Number of objects in `argv` - * @param[in] argv Arbitrary parameters to be passed to the block. - * @param[in] mod The module in question. - * @pre `mod` must be a Module. - * @return What was evaluated. - */ -VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod); - -/* vm_method.c */ - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define HAVE_RB_DEFINE_ALLOC_FUNC 1 - -/** - * This is the type of functions that ruby calls when trying to allocate an - * object. It is sometimes necessary to allocate extra memory regions for an - * object. When you define a class that uses ::RTypedData, it is typically the - * case. On such situations define a function of this type and pass it to - * rb_define_alloc_func(). - * - * @param[in] klass The class that this function is registered. - * @return A newly allocated instance of `klass`. - */ -typedef VALUE (*rb_alloc_func_t)(VALUE klass); - -/** - * Sets the allocator function of a class. - * - * @param[out] klass The class to modify. - * @param[in] func An allocator function for the class. - * @pre `klass` must be an instance of Class. - */ -void rb_define_alloc_func(VALUE klass, rb_alloc_func_t func); - -/** - * Deletes the allocator function of a class. It is sometimes desirable to - * restrict creation of an instance of a class. For example it rarely makes - * sense for a DB adaptor class to allow programmers creating DB row objects - * without querying the DB itself. You can kill sporadic creation of such - * objects then, by nullifying the allocator function using this API. Your - * object shall be allocated using #RB_NEWOBJ_OF() directly. - * - * @param[out] klass The class to modify. - * @pre `klass` must be an instance of Class. - */ -void rb_undef_alloc_func(VALUE klass); - -/** - * Queries the allocator function of a class. - * - * @param[in] klass The class in question. - * @pre `klass` must be an instance of Class. - * @retval 0 No allocator function is registered. - * @retval otherwise The allocator function. - * - * @internal - * - * Who cares? @shyouhei finds no practical usage of the return value. Maybe we - * need KonMari. - */ -rb_alloc_func_t rb_get_alloc_func(VALUE klass); - -/** - * Clears the inline constant caches associated with a particular ID. Extension - * libraries should not bother with such things. Just forget about this API (or - * even, the presence of constant caches). - */ -void rb_clear_constant_cache_for_id(ID id); - -/** - * Resembles `alias`. - * - * @param[out] klass Where to define an alias. - * @param[in] dst New name. - * @param[in] src Existing name. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eFrozenError `klass` is frozen. - * @exception rb_eNameError No such method named `src`. - * @post `klass` has a method named `dst`, which is the identical to its - * method named `src`. - */ -void rb_alias(VALUE klass, ID dst, ID src); - -/** - * This function resembles now-deprecated `Module#attr`. - * - * @param[out] klass Where to define an attribute. - * @param[in] name Name of an instance variable. - * @param[in] need_reader Whether attr_reader is needed. - * @param[in] need_writer Whether attr_writer is needed. - * @param[in] honour_visibility Whether to use the current visibility. - * @exception rb_eTypeError `klass` is not a class. - * @exception rb_eFrozenError `klass` is frozen. - * @post If `need_reader` is set `klass` has a method named `name`. - * @post If `need_writer` is set `klass` has a method named `name=`. - * - * @internal - * - * The three `int` arguments should have been bool, but there was no such thing - * like a bool when K&R was used in this project. - */ -void rb_attr(VALUE klass, ID name, int need_reader, int need_writer, int honour_visibility); - -RBIMPL_ATTR_NONNULL(()) -/** - * Removes a method. Don't confuse this to rb_undef_method(), which doesn't - * remove a method. This one resembles `Module#remove_method`. - * - * @param[out] klass The class to remove a method. - * @param[in] name Name of a method to be removed. - * @exception rb_eTypeError `klass` is a non-module. - * @exception rb_eFrozenError `klass` is frozen. - * @exception rb_eNameError No such method. - * @see rb_undef_method - */ -void rb_remove_method(VALUE klass, const char *name); - -/** - * Identical to rb_remove_method(), except it accepts the method name as ::ID. - * - * @param[out] klass The class to remove a method. - * @param[in] mid Name of a method to be removed. - * @exception rb_eTypeError `klass` is a non-module. - * @exception rb_eFrozenError `klass` is frozen. - * @exception rb_eNameError No such method. - * @see rb_undef - */ -void rb_remove_method_id(VALUE klass, ID mid); - -/** - * Queries if the klass has this method. This function has only one line of - * document in the implementation that states "// deprecated". Don't know what - * that means though. - * - * @param[in] klass The class in question. - * @param[in] id The method name to query. - * @param[in] ex Undocumented magic value. - * @retval false Method not found. - * @retval true There is a method. - * @pre `klass` must be a module. - * - * @internal - * - * @shyouhei has no motivation to describe what should be passed to `ex`. It - * seems this function should just be trashed. - */ -int rb_method_boundp(VALUE klass, ID id, int ex); - -/** - * Well... Let us hesitate from describing what a "basic definition" is. This - * nuanced concept should have been kept private. Just please. Don't touch - * it. This function is a badly distributed random number generator. Right? - * - * @param[in] klass The class in question. - * @param[in] mid The method name in question. - * @retval 1 It is. - * @retval 0 It isn't. - */ -int rb_method_basic_definition_p(VALUE klass, ID mid); - -/** - * Identical to rb_respond_to(), except it additionally takes the visibility - * parameter. This does not make difference unless the object has - * `respond_to?` undefined, but has `respond_to_missing?` defined. That case - * the passed argument becomes the second argument of `respond_to_missing?`. - * - * @param[in] obj The object in question. - * @param[in] mid The method name in question. - * @param[in] private_p This is the second argument of `obj`'s - * `respond_to_missing?`. - * @retval 1 Yes it does. - * @retval 0 No it doesn't. - */ -int rb_obj_respond_to(VALUE obj, ID mid, int private_p); - -/** - * Queries if the object responds to the method. This involves calling the - * object's `respond_to?` method. - * - * @param[in] obj The object in question. - * @param[in] mid The method name in question. - * @retval 1 Yes it does. - * @retval 0 No it doesn't. - */ -int rb_respond_to(VALUE obj, ID mid); - -RBIMPL_ATTR_NORETURN() -/** - * Raises ::rb_eNotImpError. This function is used as an argument to - * rb_define_method() etc. - * - * ```CXX - * rb_define_method(rb_cFoo, "foo", rb_f_notimplement, -1); - * ``` - * - * @param argc Unused parameter. - * @param argv Unused parameter. - * @param obj Unused parameter. - * @param marker Unused parameter. - * @exception rb_eNotImpError Always. - * @return Never returns. - * - * @internal - * - * See also the Q&A section of include/ruby/internal/anyargs.h. - */ -VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker); -#if !defined(RUBY_EXPORT) && defined(_WIN32) -RUBY_EXTERN VALUE (*const rb_f_notimplement_)(int, const VALUE *, VALUE, VALUE marker); -#define rb_f_notimplement (*rb_f_notimplement_) -#endif - -/* vm_backtrace.c */ - -/** - * Prints the backtrace out to the standard error. This just confuses people - * for no reason. Evil souls must only use it. - * - * @internal - * - * Actually it is very useful when called from an interactive GDB session. - */ -void rb_backtrace(void); - -/** - * Creates the good old fashioned array-of-strings style backtrace info. - * - * @return An array which contains strings, which are the textual - * representations of the backtrace locations of the current thread of - * the current ractor of the current execution context. - * @note Ruby scripts can access more sophisticated - * `Thread::Backtrace::Location`. But it seems there is no way for C - * extensions to use that API. - */ -VALUE rb_make_backtrace(void); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERN_VM_H */ diff --git a/libs/libruby/ruby/internal/interpreter.h b/libs/libruby/ruby/internal/interpreter.h deleted file mode 100644 index 662d39c..0000000 --- a/libs/libruby/ruby/internal/interpreter.h +++ /dev/null @@ -1,304 +0,0 @@ -#ifndef RBIMPL_INTERPRETER_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_INTERPRETER_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Interpreter embedding APIs. - */ -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * @defgroup embed CRuby Embedding APIs - * - * CRuby interpreter APIs. These are APIs to embed MRI interpreter into your - * program. - * These functions are not a part of Ruby extension library API. - * Extension libraries of Ruby should not depend on these functions. - * - * @{ - */ - -/** - * @defgroup ruby1 ruby(1) implementation - * - * A part of the implementation of ruby(1) command. - * Other programs that embed Ruby interpreter do not always need to use these - * functions. - * - * @{ - */ - -RBIMPL_ATTR_NONNULL(()) -/** - * Initializes the process for libruby. - * - * This function assumes this process is `ruby(1)` and it has just started. - * Usually programs that embed CRuby interpreter may not call this function, - * and may do their own initialization. - * - * @param[in] argc Pointer to process main's `argc`. - * @param[in] argv Pointer to process main's `argv`. - * @warning `argc` and `argv` cannot be `NULL`. - * - * @internal - * - * AFAIK Ruby does write to argv, especially `argv[0][0]`, via setproctitle(3). - * It is intentional that the argument is not const-qualified. - */ -void ruby_sysinit(int *argc, char ***argv); - -/** - * Calls ruby_setup() and check error. - * - * Prints errors and calls exit(3) if an error occurred. - */ -void ruby_init(void); - -/** - * Processes command line arguments and compiles the Ruby source to execute. - * - * This function does: - * - Processes the given command line flags and arguments for `ruby(1)` - * - Compiles the source code from the given argument, `-e` or `stdin`, and - * - Returns the compiled source as an opaque pointer to an internal data - * structure - * - * @param[in] argc Process main's `argc`. - * @param[in] argv Process main's `argv`. - * @return An opaque pointer to the compiled source or an internal special - * value. Pass it to ruby_executable_node() to detect which. - * @see ruby_executable_node - */ -void* ruby_options(int argc, char** argv); - -/** - * Checks the return value of ruby_options(). - * - * ruby_options() sometimes returns a special value to indicate this process - * should immediately exit. This function checks if the case. Also stores the - * exit status that the caller have to pass to exit(3) into `*status`. - * - * @param[in] n A return value of ruby_options(). - * @param[out] status Pointer to the exit status of this process. - * @retval 0 The given value is such a special value. - * @retval otherwise The given opaque pointer is actually a compiled - * source. - */ -int ruby_executable_node(void *n, int *status); - -/** - * Runs the given compiled source and exits this process. - * - * @param[in] n Opaque "node" pointer. - * @retval EXIT_SUCCESS Successfully run the source. - * @retval EXIT_FAILURE An error occurred. - */ -int ruby_run_node(void *n); - -/* version.c */ -/** Prints the version information of the CRuby interpreter to stdout. */ -void ruby_show_version(void); - -#ifndef ruby_show_copyright -/** Prints the copyright notice of the CRuby interpreter to stdout. */ -void ruby_show_copyright(void); -#endif - -/** - * A convenience macro to call ruby_init_stack(). - * Must be placed just after variable declarations. - */ -#define RUBY_INIT_STACK \ - VALUE variable_in_this_stack_frame; \ - ruby_init_stack(&variable_in_this_stack_frame); -/** @} */ - -/** - * Set stack bottom of Ruby implementation. - * - * You must call this function before any heap allocation by Ruby - * implementation. Or GC will break living objects. - * - * @param[in] addr A pointer somewhere on the stack, near its bottom. - */ -void ruby_init_stack(volatile VALUE *addr); - -/** - * Initializes the VM and builtin libraries. - * - * @retval 0 Initialization succeeded. - * @retval otherwise An error occurred. - * - * @internal - * - * Though not a part of our public API, the return value is in fact an enum - * ruby_tag_type. You can see the potential "otherwise" values by looking at - * vm_core.h. - */ -int ruby_setup(void); - -/** - * Destructs the VM. - * - * Runs the VM finalization processes as well as ruby_finalize(), and frees - * resources used by the VM. - * - * @param[in] ex Default value to the return value. - * @retval EXIT_FAILURE An error occurred. - * @retval ex Successful cleanup. - * @note This function does not raise any exception. - */ -int ruby_cleanup(int ex); - -/** - * Runs the VM finalization processes. - * - * `END{}` and procs registered by `Kernel.#at_exit` are executed here. See the - * Ruby language spec for more details. - * - * @note This function is allowed to raise an exception if an error occurred. - */ -void ruby_finalize(void); - -RBIMPL_ATTR_NORETURN() -/** Calls ruby_cleanup() and exits the process. */ -void ruby_stop(int); - -/** - * Checks for stack overflow. - * - * @retval true NG machine stack is about to overflow. - * @retval false OK there still is a room in the stack. - * - * @internal - * - * Does anybody use it? So far @shyouhei have never seen any actual use-case. - */ -int ruby_stack_check(void); - -/** - * Queries what Ruby thinks is the machine stack. Ruby manages a region of - * memory. It calls that area the "machine stack". By calling this function, - * in spite of its name, you can obtain both one end of the stack and its - * length at once. Which means you can know the entire region. - * - * @param[out] topnotch On return the pointer points to the upmost address of - * the macihne stack that Ruby knows. - * @return Length of the machine stack that Ruby knows. - * - * @internal - * - * Does anybody use it? @shyouhei is quite skeptical if this is useful outside - * of the VM. Maybe it was a wrong idea to expose this API to 3rd parties. - */ -size_t ruby_stack_length(VALUE **topnotch); - -/** - * Identical to ruby_run_node(), except it returns an opaque execution status. - * You can pass it to rb_cleanup(). - * - * @param[in] n Opaque "node" pointer. - * @retval 0 Successful end-of-execution. - * @retval otherwise An error occurred. - * - * @internal - * - * Though not a part of our public API, the return value is in fact an enum - * ruby_tag_type. You can see the potential "otherwise" values by looking at - * vm_core.h. - */ -int ruby_exec_node(void *n); - -/** - * Sets the current script name to this value. - * - * This is similar to `$0 = name` in Ruby level but also affects - * `Method#location` and others. - * - * @param[in] name File name to set. - */ -void ruby_script(const char* name); - -/** - * Identical to ruby_script(), except it takes the name as a Ruby String - * instance. - * - * @param[in] name File name to set. - */ -void ruby_set_script_name(VALUE name); - -/** Defines built-in variables */ -void ruby_prog_init(void); - -/** - * Sets argv that ruby understands. Your program might have its own command - * line parameters etc. Handle them as you wish, and pass remaining parts of - * argv here. - * - * @param[in] argc Number of elements of `argv`. - * @param[in] argv Command line arguments. - */ -void ruby_set_argv(int argc, char **argv); - -/** - * Identical to ruby_options(), except it raises ruby-level exceptions on - * failure. - * - * @param[in] argc Process main's `argc`. - * @param[in] argv Process main's `argv`. - * @return An opaque "node" pointer. - */ -void *ruby_process_options(int argc, char **argv); - -/** - * Sets up `$LOAD_PATH`. - * - * @internal - * - * @shyouhei guesses this has to be called at very later stage, at least after - * the birth of object system. But is not exactly sure when. - */ -void ruby_init_loadpath(void); - -/** - * Appends the given path to the end of the load path. - * - * @pre ruby_init_loadpath() must be done beforehand. - * @param[in] path The path you want to push to the load path. - */ -void ruby_incpush(const char *path); - -/** - * Clear signal handlers. - * - * Ruby installs its own signal handler (apart from those which user scripts - * set). This is to clear that. Must be called when the ruby part terminates, - * before switching to your program's own logic. - */ -void ruby_sig_finalize(void); - -/** @} */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_INTERPRETER_H */ diff --git a/libs/libruby/ruby/internal/iterator.h b/libs/libruby/ruby/internal/iterator.h deleted file mode 100644 index 5f70646..0000000 --- a/libs/libruby/ruby/internal/iterator.h +++ /dev/null @@ -1,513 +0,0 @@ -#ifndef RBIMPL_ITERATOR_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_ITERATOR_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Block related APIs. - */ -#include "ruby/internal/attr/deprecated.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define RB_BLOCK_CALL_FUNC_STRICT 1 - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1 - -/** - * Shim for block function parameters. Historically ::rb_block_call_func_t had - * only two parameters. Over time it evolved to have much more than that. By - * using this macro you can absorb such API differences. - * - * ```CXX - * // This works since 2.1.0 - * VALUE my_own_iterator(RB_BLOCK_CALL_FUNC_ARGLIST(y, c)); - * ``` - */ -#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg) \ - VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg - -/** - * This is the type of a function that the interpreter expect for C-backended - * blocks. Blocks are often written in Ruby. But C extensions might want to - * have their own blocks. In order to do so authors have to create a separate - * C function of this type, and pass its pointer to rb_block_call(). - * - * ```CXX - * VALUE - * my_own_iterator(RB_BLOCK_CALL_FUNC_ARGLIST(y, c)) - * { - * const auto plus = rb_intern("+"); - * return rb_funcall(c, plus, 1, y); - * } - * - * VALUE - * my_own_method(VALUE self) - * { - * const auto each = rb_intern("each"); - * return rb_block_call(self, each, 0, 0, my_own_iterator, self); - * } - * ``` - */ -typedef VALUE rb_block_call_func(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)); - -/** - * Shorthand type that represents an iterator-written-in-C function pointer. - */ -typedef rb_block_call_func *rb_block_call_func_t; - -/** - * This is a shorthand of calling `obj.each`. - * - * @param[in] obj The receiver. - * @return What `obj.each` returns. - * - * @internal - * - * Does anyone still need it? This API was to use with rb_iterate(), which is - * marked deprecated (see below). Old idiom to call an iterator was: - * - * ```CXX - * VALUE recv; - * VALUE iter_func(ANYARGS); - * VALUE iter_data; - * rb_iterate(rb_each, recv, iter_func, iter_data); - * ``` - */ -VALUE rb_each(VALUE obj); - -/** - * Yields the block. In Ruby there is a concept called a block. You can pass - * one to a method. In a method, when called with a block, you can yield it - * using this function. - * - * ```CXX - * VALUE - * iterate(VALUE self) - * { - * extern int get_n(VALUE); - * extern VALUE get_v(VALUE, VALUE); - * const auto n = get_n(self); - * - * for (int i=0; i - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Memory management stuff. - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#ifdef HAVE_STRING_H -# include -#endif - -#ifdef HAVE_STDINT_H -# include -#endif - -#ifdef HAVE_ALLOCA_H -# include -#endif - -#if defined(_MSC_VER) && defined(_WIN64) -# include -# pragma intrinsic(_umul128) -#endif - -#include "ruby/internal/attr/alloc_size.h" -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/constexpr.h" -#include "ruby/internal/attr/noalias.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/attr/restrict.h" -#include "ruby/internal/attr/returns_nonnull.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/has/builtin.h" -#include "ruby/internal/stdalign.h" -#include "ruby/internal/stdbool.h" -#include "ruby/internal/xmalloc.h" -#include "ruby/backward/2/limits.h" -#include "ruby/backward/2/long_long.h" -#include "ruby/backward/2/assume.h" -#include "ruby/defines.h" - -/** @cond INTENAL_MACRO */ - -/* Make alloca work the best possible way. */ -#if defined(alloca) -# /* Take that. */ -#elif RBIMPL_HAS_BUILTIN(__builtin_alloca) -# define alloca __builtin_alloca -#elif defined(_AIX) -# pragma alloca -#elif defined(__cplusplus) -extern "C" void *alloca(size_t); -#else -extern void *alloca(); -#endif - -/** @endcond */ - -#if defined(__DOXYGEN__) -/** - * @private - * - * Type that is as twice wider as size_t. This is an implementation detail of - * rb_mul_size_overflow(). People should not use it. This is not a good name - * either. - */ -typedef uint128_t DSIZE_T; -#elif defined(HAVE_INT128_T) && SIZEOF_SIZE_T <= 8 -# define DSIZE_T uint128_t -#elif SIZEOF_SIZE_T * 2 <= SIZEOF_LONG_LONG -# define DSIZE_T unsigned LONG_LONG -#endif - -/** - * @private - * - * Maximum possible number of bytes that #RB_ALLOCV can allocate using - * `alloca`. Anything beyond this is allocated using rb_alloc_tmp_buffer(). - * This selection is transparent to users. People don't have to bother. - */ -#ifdef C_ALLOCA -# define RUBY_ALLOCV_LIMIT 0 -#else -# define RUBY_ALLOCV_LIMIT 1024 -#endif - -/** - * Prevents premature destruction of local objects. Ruby's garbage collector - * is conservative; it scans the C level machine stack as well. Possible in- - * use Ruby objects must remain visible on stack, to be properly marked as - * such. However contemporary C compilers do not interface well with this. - * Consider the following example: - * - * ```CXX - * auto s = rb_str_new_cstr(" world"); - * auto sptr = RSTRING_PTR(s); - * auto t = rb_str_new_cstr("hello,"); // Possible GC invocation - * auto u = rb_str_cat_cstr(t, sptr); - * - * RB_GC_GUARD(s); // ensure `s` (and thus `sptr`) do not get GC-ed - * ``` - * - * Here, without the #RB_GC_GUARD, the last use of `s` is _before_ the last use - * of `sptr`. Compilers could thus think `s` and `t` are allowed to overlap. - * That would eliminate `s` from the stack, while `sptr` is still in use. If - * our GC ran at that very moment, `s` gets swept out, which also destroys - * `sptr`. Boom! You got a SEGV. - * - * In order to prevent this scenario #RB_GC_GUARD must be placed _after_ the - * last use of `sptr`. Placing #RB_GC_GUARD before dereferencing `sptr` would - * be of no use. - * - * #RB_GC_GUARD would not be necessary at all in the above example if non- - * inlined function calls are made on the `s` variable after `sptr` is - * dereferenced. Thus, in the above example, calling any un-inlined function - * on `s` such as `rb_str_modify(s);` will ensure `s` stays on the stack or - * register to prevent a GC invocation from prematurely freeing it. - * - * Using the #RB_GC_GUARD macro is preferable to using the `volatile` keyword - * in C. #RB_GC_GUARD has the following advantages: - * - * - the intent of the macro use is clear. - * - * - #RB_GC_GUARD only affects its call site. OTOH `volatile` generates some - * extra code every time the variable is used, hurting optimisation. - * - * - `volatile` implementations may be buggy/inconsistent in some compilers - * and architectures. #RB_GC_GUARD is customisable for broken - * systems/compilers without negatively affecting other systems. - * - * - C++ since C++20 deprecates `volatile`. If you write your extension - * library in that language there is no escape but to use this macro. - * - * @param v A variable of ::VALUE type. - * @post `v` is still alive. - */ -#ifdef __GNUC__ -#define RB_GC_GUARD(v) \ - (*__extension__ ({ \ - volatile VALUE *rb_gc_guarded_ptr = &(v); \ - __asm__("" : : "m"(rb_gc_guarded_ptr)); \ - rb_gc_guarded_ptr; \ - })) -#elif defined _MSC_VER -#define RB_GC_GUARD(v) (*rb_gc_guarded_ptr(&(v))) -#else -#define HAVE_RB_GC_GUARDED_PTR_VAL 1 -#define RB_GC_GUARD(v) (*rb_gc_guarded_ptr_val(&(v),(v))) -#endif - -/* Casts needed because void* is NOT compatible with others in C++. */ - -/** - * Convenient macro that allocates an array of n elements. - * - * @param type Type of array elements. - * @param n Length of the array. - * @exception rb_eNoMemError No space left for allocation. - * @exception rb_eArgError Integer overflow trying to calculate the length - * of continuous memory region of `n` elements of - * `type`. - * @return Storage instance that is capable of storing at least `n` - * elements of type `type`. - * @note It doesn't return NULL, even when `n` is zero. - * @warning The return value shall be invalidated exactly once by either - * ruby_xfree(), ruby_xrealloc(), or ruby_xrealloc2(). It is a - * failure to pass it to system free(), because the system and Ruby - * might or might not share the same malloc() implementation. - */ -#define RB_ALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xmalloc2((n), sizeof(type))) - -/** - * Shorthand of #RB_ALLOC_N with `n=1`. - * - * @param type Type of allocation. - * @exception rb_eNoMemError No space left for allocation. - * @return Storage instance that can hold an `type` object. - * @note It doesn't return NULL. - * @warning The return value shall be invalidated exactly once by either - * ruby_xfree(), ruby_xrealloc(), or ruby_xrealloc2(). It is a - * failure to pass it to system free(), because the system and Ruby - * might or might not share the same malloc() implementation. - */ -#define RB_ALLOC(type) RBIMPL_CAST((type *)ruby_xmalloc(sizeof(type))) - -/** - * Identical to #RB_ALLOC_N() but also nullifies the allocated region before - * returning. - * - * @param type Type of array elements. - * @param n Length of the array. - * @exception rb_eNoMemError No space left for allocation. - * @exception rb_eArgError Integer overflow trying to calculate the length - * of continuous memory region of `n` elements of - * `type`. - * @return Storage instance that is capable of storing at least `n` - * elements of type `type`. - * @post Returned array is filled with zeros. - * @note It doesn't return NULL, even when `n` is zero. - * @warning The return value shall be invalidated exactly once by either - * ruby_xfree(), ruby_xrealloc(), or ruby_xrealloc2(). It is a - * failure to pass it to system free(), because the system and Ruby - * might or might not share the same malloc() implementation. - */ -#define RB_ZALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xcalloc((n), sizeof(type))) - -/** - * Shorthand of #RB_ZALLOC_N with `n=1`. - * - * @param type Type of allocation. - * @exception rb_eNoMemError No space left for allocation. - * @return Storage instance that can hold an `type` object. - * @post Returned object is filled with zeros. - * @note It doesn't return NULL. - * @warning The return value shall be invalidated exactly once by either - * ruby_xfree(), ruby_xrealloc(), or ruby_xrealloc2(). It is a - * failure to pass it to system free(), because the system and Ruby - * might or might not share the same malloc() implementation. - */ -#define RB_ZALLOC(type) (RB_ZALLOC_N(type, 1)) - -/** - * Convenient macro that reallocates an array with a new size. - * - * @param var A variable of `type`, which points to a storage - * instance that was previously returned from - * either - * - ruby_xmalloc(), - * - ruby_xmalloc2(), - * - ruby_xcalloc(), - * - ruby_xrealloc(), or - * - ruby_xrealloc2(). - * @param type Type of allocation. - * @param n Requested new size of each element. - * @exception rb_eNoMemError No space left for allocation. - * @exception rb_eArgError Integer overflow trying to calculate the length - * of continuous memory region of `n` elements of - * `type`. - * @return Storage instance that is capable of storing at least `n` - * elements of type `type`. - * @pre The passed variable must point to a valid live storage instance. - * It is a failure to pass a variable that holds an already-freed - * pointer. - * @note It doesn't return NULL, even when `n` is zero. - * @warning Do not assume anything on the alignment of the return value. - * There is no guarantee that it inherits the passed argument's - * one. - * @warning The return value shall be invalidated exactly once by either - * ruby_xfree(), ruby_xrealloc(), or ruby_xrealloc2(). It is a - * failure to pass it to system free(), because the system and Ruby - * might or might not share the same malloc() implementation. - */ -#define RB_REALLOC_N(var,type,n) \ - ((var) = RBIMPL_CAST((type *)ruby_xrealloc2((void *)(var), (n), sizeof(type)))) - -/** - * @deprecated This macro is dangerous (does not bother stack overflow at - * all). #RB_ALLOCV is the modern way to do the same thing. - * @param type Type of array elements. - * @param n Length of the array. - * @return A pointer on stack. - */ -#define ALLOCA_N(type,n) \ - RBIMPL_CAST((type *)alloca(rbimpl_size_mul_or_raise(sizeof(type), (n)))) - -/** - * Identical to #RB_ALLOCV_N(), except that it allocates a number of bytes and - * returns a void* . - * - * @param v A variable to hold the just-in-case opaque Ruby object. - * @param n Size of allocation, in bytes. - * @return A void pointer to `n` bytes storage. - * @note `n` may be evaluated twice. - */ -#define RB_ALLOCV(v, n) \ - ((n) < RUBY_ALLOCV_LIMIT ? \ - ((v) = 0, alloca(n)) : \ - rb_alloc_tmp_buffer(&(v), (n))) - -/** - * Allocates a memory region, possibly on stack. If the given size exceeds - * #RUBY_ALLOCV_LIMIT, it allocates a dedicated opaque ruby object instead and - * let our GC sweep that region after use. Either way you can fire-and-forget. - * - * ```CXX - * #include - * - * VALUE - * foo(int n) - * { - * VALUE v; - * auto ptr = RB_ALLOCV(struct tms, v, n); - * ... - * // no need to free `ptr`. - * } - * ``` - * - * If you want to be super-duper polite you can also explicitly state the end - * of use of such memory region by calling #RB_ALLOCV_END(). - * - * @param type The type of array elements. - * @param v A variable to hold the just-in-case opaque Ruby object. - * @param n Number of elements requested to allocate. - * @return An array of `n` elements of `type`. - * @note `n` may be evaluated twice. - */ -#define RB_ALLOCV_N(type, v, n) \ - RBIMPL_CAST((type *) \ - (((size_t)(n) < RUBY_ALLOCV_LIMIT / sizeof(type)) ? \ - ((v) = 0, alloca((n) * sizeof(type))) : \ - rb_alloc_tmp_buffer2(&(v), (n), sizeof(type)))) - -/** - * Polite way to declare that the given array is not used any longer. Calling - * this not mandatory. Our GC can baby-sit you. However it is not a very bad - * idea to use it when possible. Doing so could reduce memory footprint. - * - * @param v A variable previously passed to either #RB_ALLOCV/#RB_ALLOCV_N. - */ -#define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v)) - -/** - * Handy macro to erase a region of memory. - * - * @param p Target pointer. - * @param type Type of `p[0]` - * @param n Length of `p`. - * @return `p`. - * @post First `n` elements of `p` are squashed. - */ -#define MEMZERO(p,type,n) memset((p), 0, rbimpl_size_mul_or_raise(sizeof(type), (n))) - -/** - * Handy macro to call memcpy. - * - * @param p1 Destination pointer. - * @param p2 Source pointer. - * @param type Type of `p2[0]` - * @param n Length of `p2`. - * @return `p1`. - * @post First `n` elements of `p2` are copied into `p1`. - */ -#define MEMCPY(p1,p2,type,n) ruby_nonempty_memcpy((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n))) - -/** - * Handy macro to call memmove. - * - * @param p1 Destination pointer. - * @param p2 Source pointer. - * @param type Type of `p2[0]` - * @param n Length of `p2`. - * @return `p1`. - * @post First `n` elements of `p2` are copied into `p1`. - */ -#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n))) - -/** - * Handy macro to call memcmp - * - * @param p1 Target LHS. - * @param p2 Target RHS. - * @param type Type of `p1[0]` - * @param n Length of `p1`. - * @retval <0 `p1` is "less" than `p2`. - * @retval 0 `p1` is equal to `p2`. - * @retval >0 `p1` is "greater" than `p2`. - */ -#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n))) - -#define ALLOC_N RB_ALLOC_N /**< @old{RB_ALLOC_N} */ -#define ALLOC RB_ALLOC /**< @old{RB_ALLOC} */ -#define ZALLOC_N RB_ZALLOC_N /**< @old{RB_ZALLOC_N} */ -#define ZALLOC RB_ZALLOC /**< @old{RB_ZALLOC} */ -#define REALLOC_N RB_REALLOC_N /**< @old{RB_REALLOC_N} */ -#define ALLOCV RB_ALLOCV /**< @old{RB_ALLOCV} */ -#define ALLOCV_N RB_ALLOCV_N /**< @old{RB_ALLOCV_N} */ -#define ALLOCV_END RB_ALLOCV_END /**< @old{RB_ALLOCV_END} */ - -/** - * @private - * - * This is an implementation detail of rbimpl_size_mul_overflow(). - * - * @internal - * - * Expecting this struct to be eliminated by function inlinings. This is - * nothing more than std::variant if we could use recent C++, but - * reality is we cannot. - */ -struct rbimpl_size_mul_overflow_tag { - bool left; /**< Whether overflow happened or not. */ - size_t right; /**< Multiplication result. */ -}; - -RBIMPL_SYMBOL_EXPORT_BEGIN() -RBIMPL_ATTR_RESTRICT() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((2)) -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail of #RB_ALLOCV(). People don't use this - * directly. - * - * @param[out] store Pointer to a variable. - * @param[in] len Requested number of bytes to allocate. - * @return Allocated `len` bytes array. - * @post `store` holds the corresponding tmp buffer object. - */ -void *rb_alloc_tmp_buffer(volatile VALUE *store, long len); - -RBIMPL_ATTR_RESTRICT() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((2,3)) -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail of #RB_ALLOCV_N(). People don't use this - * directly. - * - * @param[out] store Pointer to a variable. - * @param[in] len Requested number of bytes to allocate. - * @param[in] count Number of elements in an array. - * @return Allocated `len` bytes array. - * @post `store` holds the corresponding tmp buffer object. - * - * @internal - * - * Although the meaning of `count` variable is clear, @shyouhei doesn't - * understand its needs. - */ -void *rb_alloc_tmp_buffer_with_count(volatile VALUE *store, size_t len,size_t count); - -/** - * @private - * - * This is an implementation detail of #RB_ALLOCV_END(). People don't use this - * directly. - * - * @param[out] store Pointer to a variable. - * @pre `store` is a NULL, or a pointer to a tmp buffer object. - * @post `*store` is ::RUBY_Qfalse. - * @post The object formerly stored in `store` is destroyed. - */ -void rb_free_tmp_buffer(volatile VALUE *store); - -RBIMPL_ATTR_NORETURN() -/** - * @private - * - * This is an implementation detail of #RB_ALLOCV_N(). People don't use this - * directly. - * - * @param[in] x Arbitrary value. - * @param[in] y Arbitrary value. - * @exception rb_eArgError `x` * `y` would integer overflow. - */ -void ruby_malloc_size_overflow(size_t x, size_t y); - -#ifdef HAVE_RB_GC_GUARDED_PTR_VAL -volatile VALUE *rb_gc_guarded_ptr_val(volatile VALUE *ptr, VALUE val); -#endif -RBIMPL_SYMBOL_EXPORT_END() - -#ifdef _MSC_VER -# pragma optimize("", off) - -/** - * @private - * - * This is an implementation detail of #RB_GC_GUARD(). People don't use this - * directly. - * - * @param[in] ptr A pointer to an on-stack C variable. - * @return `ptr` as-is. - */ -static inline volatile VALUE * -rb_gc_guarded_ptr(volatile VALUE *ptr) -{ - return ptr; -} - -# pragma optimize("", on) -#endif - -/** - * @deprecated This function was an implementation detail of old - * #RB_ALLOCV_N(). We no longer use it. @shyouhei suspects that - * there are no actual usage now. However it was not marked as - * private before. We cannot delete it any longer. - * @param[in] a Arbitrary value. - * @param[in] b Arbitrary value. - * @param[in] max Possible maximum value. - * @param[out] c A pointer to return the computation result. - * @retval 1 `c` is insane. - * @retval 0 `c` is sane. - * @post `c` holds `a` * `b`, but could be overflowed. - */ -static inline int -rb_mul_size_overflow(size_t a, size_t b, size_t max, size_t *c) -{ -#ifdef DSIZE_T - RB_GNUC_EXTENSION DSIZE_T da, db, c2; - da = a; - db = b; - c2 = da * db; - if (c2 > max) return 1; - *c = RBIMPL_CAST((size_t)c2); -#else - if (b != 0 && a > max / b) return 1; - *c = a * b; -#endif - return 0; -} - -#if defined(__DOXYGEN__) -RBIMPL_ATTR_CONSTEXPR(CXX14) -#elif RBIMPL_COMPILER_SINCE(GCC, 7, 0, 0) -RBIMPL_ATTR_CONSTEXPR(CXX14) /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70507 */ -#elif RBIMPL_COMPILER_SINCE(Clang, 7, 0, 0) -RBIMPL_ATTR_CONSTEXPR(CXX14) /* https://bugs.llvm.org/show_bug.cgi?id=37633 */ -#endif -RBIMPL_ATTR_CONST() -/** - * @private - * - * This is an implementation detail of #RB_ALLOCV_N(). People don't use this - * directly. - * - * @param[in] x Arbitrary value. - * @param[in] y Arbitrary value. - * @return `{ left, right }`, where `left` is whether there is an integer - * overflow or not, and `right` is a (possibly overflowed) result - * of `x` * `y`. - * - * @internal - * - * This is in fact also an implementation detail of ruby_xmalloc2() etc. - */ -static inline struct rbimpl_size_mul_overflow_tag -rbimpl_size_mul_overflow(size_t x, size_t y) -{ - struct rbimpl_size_mul_overflow_tag ret = { false, 0, }; - -#if RBIMPL_HAS_BUILTIN(__builtin_mul_overflow) - ret.left = __builtin_mul_overflow(x, y, &ret.right); - -#elif defined(DSIZE_T) - RB_GNUC_EXTENSION DSIZE_T dx = x; - RB_GNUC_EXTENSION DSIZE_T dy = y; - RB_GNUC_EXTENSION DSIZE_T dz = dx * dy; - ret.left = dz > SIZE_MAX; - ret.right = RBIMPL_CAST((size_t)dz); - -#elif defined(_MSC_VER) && defined(_WIN64) - unsigned __int64 dp = 0; - unsigned __int64 dz = _umul128(x, y, &dp); - ret.left = RBIMPL_CAST((bool)dp); - ret.right = RBIMPL_CAST((size_t)dz); - -#else - /* https://wiki.sei.cmu.edu/confluence/display/c/INT30-C.+Ensure+that+unsigned+integer+operations+do+not+wrap */ - ret.left = (y != 0) && (x > SIZE_MAX / y); - ret.right = x * y; -#endif - - return ret; -} - -/** - * @private - * - * This is an implementation detail of #RB_ALLOCV_N(). People don't use this - * directly. - * - * @param[in] x Arbitrary value. - * @param[in] y Arbitrary value. - * @exception rb_eArgError Multiplication could integer overflow. - * @return `x` * `y`. - * - * @internal - * - * This is in fact also an implementation detail of ruby_xmalloc2() etc. - */ -static inline size_t -rbimpl_size_mul_or_raise(size_t x, size_t y) -{ - struct rbimpl_size_mul_overflow_tag size = - rbimpl_size_mul_overflow(x, y); - - if (RB_LIKELY(! size.left)) { - return size.right; - } - else { - ruby_malloc_size_overflow(x, y); - RBIMPL_UNREACHABLE_RETURN(0); - } -} - -/** - * This is an implementation detail of #RB_ALLOCV_N(). People don't use this - * directly. - * - * @param[out] store Pointer to a variable. - * @param[in] count Number of elements in an array. - * @param[in] elsize Size of each elements. - * @return Region of `count` * `elsize` bytes. - * @post `store` holds the corresponding tmp buffer object. - * - * @internal - * - * We might want to deprecate this function and make a `rbimpl_` counterpart. - */ -static inline void * -rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize) -{ - const size_t total_size = rbimpl_size_mul_or_raise(count, elsize); - const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE); - return rb_alloc_tmp_buffer_with_count(store, total_size, cnt); -} - -RBIMPL_SYMBOL_EXPORT_BEGIN() -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL((1)) -RBIMPL_ATTR_RETURNS_NONNULL() -/* At least since 2004, glibc's annotates memcpy to be - * __attribute__((__nonnull__(1, 2))). However it is safe to pass NULL to the - * source pointer, if n is 0. Let's wrap memcpy. */ -static inline void * -ruby_nonempty_memcpy(void *dest, const void *src, size_t n) -{ - if (n) { - return memcpy(dest, src, n); - } - else { - return dest; - } -} -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_MEMORY_H */ diff --git a/libs/libruby/ruby/internal/method.h b/libs/libruby/ruby/internal/method.h deleted file mode 100644 index 19feb0c..0000000 --- a/libs/libruby/ruby/internal/method.h +++ /dev/null @@ -1,205 +0,0 @@ -#ifndef RBIMPL_METHOD_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_METHOD_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Creation and modification of Ruby methods. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/backward/2/stdarg.h" - -/** - * @defgroup defmethod Defining methods - * - * There are some APIs to define a method from C. - * These API takes a C function as a method body. - * - * ### Method body functions - * - * Method body functions must return a VALUE and - * can be one of the following form: - * - * #### Fixed number of parameters - * - * This form is a normal C function, excepting it takes - * a receiver object as the first argument. - * - * ```CXX - * static VALUE my_method(VALUE self, VALUE x, VALUE y); - * ``` - * - * #### argc and argv style - * - * This form takes three parameters: argc, argv and self. - * self is the receiver. argc is the number of arguments. - * argv is a pointer to an array of the arguments. - * - * ```CXX - * static VALUE my_method(int argc, VALUE *argv, VALUE self); - * ``` - * - * #### Ruby array style - * - * This form takes two parameters: self and args. - * self is the receiver. args is an Array object which - * contains the arguments. - * - * ```CXX - * static VALUE my_method(VALUE self, VALUE args); - * ``` - * - * ### Number of parameters - * - * Method defining APIs takes the number of parameters which the - * method will takes. This number is called argc. - * argc can be: - * - * - Zero or positive number. - * This means the method body function takes a fixed number of parameters. - * - * - `-1`. - * This means the method body function is "argc and argv" style. - * - * - `-2`. - * This means the method body function is "self and args" style. - * - * @{ - */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines a method. - * - * @param[out] klass A module or a class. - * @param[in] mid Name of the function. - * @param[in] func The method body. - * @param[in] arity The number of parameters. See @ref defmethod. - * @note There are in fact 18 different prototypes for func. - * @see ::ruby::backward::cxxanyargs::define_method::rb_define_method - */ -void rb_define_method(VALUE klass, const char *mid, VALUE (*func)(ANYARGS), int arity); - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines a module function for a module. - * - * @param[out] klass A module or a class. - * @param[in] mid Name of the function. - * @param[in] func The method body. - * @param[in] arity The number of parameters. See @ref defmethod. - * @note There are in fact 18 different prototypes for func. - * @see ::ruby::backward::cxxanyargs::define_method::rb_define_module_function - */ -void rb_define_module_function(VALUE klass, const char *mid, VALUE (*func)(ANYARGS), int arity); - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines a global function. - * - * @param[in] mid Name of the function. - * @param[in] func The method body. - * @param[in] arity The number of parameters. See @ref defmethod. - * @note There are in fact 18 different prototypes for func. - * @see ::ruby::backward::cxxanyargs::define_method::rb_define_global_function - */ -void rb_define_global_function(const char *mid, VALUE (*func)(ANYARGS), int arity); - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines an undef of a method. -- What? - * - * In ruby, there are two separate concepts called "undef" and "remove_method". - * The thing you imagine when you "un-define" a method is remove_method. This - * one on the other hand is masking of a previous method definition. Suppose - * for instance: - * - * ```ruby - * class Foo - * def foo - * end - * end - * - * class Bar < Foo - * def bar - * foo - * end - * end - * - * class Baz < Foo - * undef foo # <--- (*1) - * end - * ``` - * - * This `undef foo` at `(*1)` must not eliminate `Foo#foo`, because that method - * is also used from `Bar#bar`. So instead of physically executing the target - * method, `undef` inserts a special filtering entry to the class (`Baz` this - * case). That entry, when called, acts as if there were no methods at all. - * But the original can still be accessible, via ways like `Bar#bar` above. - * - * @param[out] klass The class to insert an undef. - * @param[in] name Name of the undef. - * @exception rb_eTypeError `klass` is a non-module. - * @exception rb_eFrozenError `klass` is frozen. - * @see rb_remove_method - */ -void rb_undef_method(VALUE klass, const char *name); - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines an alias of a method. - * - * @param[in,out] klass The class which the original method belongs - * to; this is also where the new method will - * belong to. - * @param[in] dst A new name for the method. - * @param[in] src The original name of the method. - * @exception rb_eTypeError `klass` is a non-module. - * @exception rb_eFrozenError `klass` is frozen. - * @exception rb_eNameError There is no such method named as `src` in - * `klass`. - * - * @internal - * - * Above description is in fact a bit inaccurate because it ignores - * Refinements. - */ -void rb_define_alias(VALUE klass, const char *dst, const char *src); - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines public accessor method(s) for an attribute. - * - * @param[out] klass The class which the attribute will belong to. - * @param[in] name Name of the attribute. - * @param[in] read Whether to define a getter method. - * @param[in] write Whether to define a setter method. - * @exception rb_eTypeError `klass` is a non-module. - * @exception rb_eFrozenError `klass` is frozen. - * @exception rb_eNameError `name` invalid as an attr e.g. an operator. - */ -void rb_define_attr(VALUE klass, const char *name, int read, int write); - -/** @} */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_METHOD_H */ diff --git a/libs/libruby/ruby/internal/module.h b/libs/libruby/ruby/internal/module.h deleted file mode 100644 index d678dd2..0000000 --- a/libs/libruby/ruby/internal/module.h +++ /dev/null @@ -1,177 +0,0 @@ -#ifndef RBIMPL_MODULE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_MODULE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Creation and modification of Ruby modules. - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" - -/** - * @defgroup class Classes and their hierarchy. - * - * @par Terminology - * - class: same as in Ruby. - * - singleton class: class for a particular object. - * - eigenclass: = singleton class - * - metaclass: class of a class. Metaclass is a kind of singleton class. - * - metametaclass: class of a metaclass. - * - meta^(n)-class: class of a meta^(n-1)-class. - * - attached object: A singleton class knows its unique instance. - * The instance is called the attached object for the singleton class. - * @{ - */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines a top-level class. - * - * @param[in] name Name of the class. - * @param[in] super A class from which the new class will derive. - * @exception rb_eTypeError The constant name `name` is already taken but the - * constant is not a class. - * @exception rb_eTypeError The class is already defined but the class can - * not be reopened because its superclass is not - * `super`. - * @exception rb_eArgError `super` is NULL. - * @return The created class. - * @post Top-level constant named `name` refers the returned class. - * @note If a class named `name` is already defined and its superclass is - * `super`, the function just returns the defined class. - * @note The compaction GC does not move classes returned by this - * function. - * - * @internal - * - * There are classes without names, but you can't pass NULL here. You have to - * use other ways to create one. - */ -VALUE rb_define_class(const char *name, VALUE super); - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines a top-level module. - * - * @param[in] name Name of the module. - * @exception rb_eTypeError The constant name `name` is already taken but the - * constant is not a module. - * @return The created module. - * @post Top-level constant named `name` refers the returned module. - * @note The compaction GC does not move classes returned by this - * function. - * - * @internal - * - * There are modules without names, but you can't pass NULL here. You have to - * use other ways to create one. - */ -VALUE rb_define_module(const char *name); - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines a class under the namespace of `outer`. - * - * @param[out] outer A class which contains the new class. - * @param[in] name Name of the new class - * @param[in] super A class from which the new class will derive. - * 0 means ::rb_cObject. - * @exception rb_eTypeError The constant name `name` is already taken but - * the constant is not a class. - * @exception rb_eTypeError The class is already defined but the class can - * not be reopened because its superclass is not - * `super`. - * @exception rb_eArgError `super` is NULL. - * @return The created class. - * @post `outer::name` refers the returned class. - * @note If a class named `name` is already defined and its superclass - * is `super`, the function just returns the defined class. - * @note The compaction GC does not move classes returned by this - * function. - */ -VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super); - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines a module under the namespace of `outer`. - * - * @param[out] outer A class which contains the new module. - * @param[in] name Name of the new module - * @exception rb_eTypeError The constant name `name` is already taken but - * the constant is not a class. - * @return The created module. - * @post `outer::name` refers the returned module. - * @note The compaction GC does not move classes returned by this - * function. - */ -VALUE rb_define_module_under(VALUE outer, const char *name); - -/** - * Includes a module to a class. - * - * @param[out] klass Inclusion destination. - * @param[in] module Inclusion source. - * @exception rb_eArgError Cyclic inclusion. - * - * @internal - * - * :FIXME: @shyouhei suspects this function lacks assertion that the arguments - * being modules... Could silently SEGV if non-module was passed? - */ -void rb_include_module(VALUE klass, VALUE module); - -/** - * Extend the object with the module. - * - * @warning This is the same as `Module#extend_object`, not - * `Object#extend`! These two methods are very similar, but not - * identical. The difference is the hook. `Module#extend_object` - * does not invoke `Module#extended`, while `Object#extend` does. - * @param[out] obj Object to extend. - * @param[in] mod Module of extension. - */ -void rb_extend_object(VALUE obj, VALUE mod); - -/** - * Identical to rb_include_module(), except it "prepends" the passed module to - * the klass, instead of includes. This affects how `super` resolves. For - * instance: - * - * ```ruby - * class Q; def foo; "" end end - * module W; def foo; "#{super}" end end - * class E < Q; include W; def foo; "#{super}" end end - * class R < Q; prepend W; def foo; "#{super}" end end - * - * E.new.foo # => "" - * r.new.foo # => "" - * ``` - * - * @param[out] klass Target class to modify. - * @param[in] module Module to prepend. - * @exception rb_eArgError Cyclic inclusion. - */ -void rb_prepend_module(VALUE klass, VALUE module); - -/** @} */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_MODULE_H */ diff --git a/libs/libruby/ruby/internal/newobj.h b/libs/libruby/ruby/internal/newobj.h deleted file mode 100644 index a8a5557..0000000 --- a/libs/libruby/ruby/internal/newobj.h +++ /dev/null @@ -1,195 +0,0 @@ -#ifndef RBIMPL_NEWOBJ_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_NEWOBJ_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #NEWOBJ. - */ -#include "ruby/internal/attr/deprecated.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/fl_type.h" -#include "ruby/internal/special_consts.h" -#include "ruby/internal/value.h" -#include "ruby/assert.h" - -/** - * Declares, allocates, then assigns a new object to the given variable. - * - * @param obj Variable name. - * @param type Variable type. - * @exception rb_eNoMemError No space left. - * @return An allocated object, not initialised. - * @note Modern programs tend to use #NEWOBJ_OF instead. - * - * @internal - * - * :FIXME: Should we deprecate it? - */ -#define RB_NEWOBJ(obj,type) type *(obj) = RBIMPL_CAST((type *)rb_newobj()) - -/** - * Identical to #RB_NEWOBJ, except it also accepts the allocating object's - * class and flags. - * - * @param obj Variable name. - * @param type Variable type. - * @param klass Object's class. - * @param flags Object's flags. - * @exception rb_eNoMemError No space left. - * @return An allocated object, filled with the arguments. - */ -#define RB_NEWOBJ_OF(obj,type,klass,flags) type *(obj) = RBIMPL_CAST((type *)rb_newobj_of(klass, flags)) - -#define NEWOBJ RB_NEWOBJ /**< @old{RB_NEWOBJ} */ -#define NEWOBJ_OF RB_NEWOBJ_OF /**< @old{RB_NEWOBJ_OF} */ -#define OBJSETUP rb_obj_setup /**< @old{rb_obj_setup} */ -#define CLONESETUP rb_clone_setup /**< @old{rb_clone_setup} */ -#define DUPSETUP rb_dup_setup /**< @old{rb_dup_setup} */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * This is the implementation detail of #RB_NEWOBJ. - * - * @exception rb_eNoMemError No space left. - * @return An allocated object, not initialised. - */ -VALUE rb_newobj(void); - -/** - * This is the implementation detail of #RB_NEWOBJ_OF. - * - * @param klass Object's class. - * @param flags Object's flags. - * @exception rb_eNoMemError No space left. - * @return An allocated object, filled with the arguments. - */ -VALUE rb_newobj_of(VALUE klass, VALUE flags); - -/** - * Fills common fields in the object. - * - * @note Prefer rb_newobj_of() to this function. - * @param[in,out] obj A Ruby object to be set up. - * @param[in] klass `obj` will belong to this class. - * @param[in] type One of ::ruby_value_type. - * @return The passed object. - * - * @internal - * - * Historically, authors of Ruby has described the `type` argument as "one of - * ::ruby_value_type". In reality it accepts either ::ruby_value_type, - * ::ruby_fl_type, or any combinations of the two. For instance - * `RUBY_T_STRING | RUBY_FL_FREEZE` is a valid value that this function takes, - * and means this is a frozen string. - * - * 3rd party extension libraries rarely need to allocate Strings this way. - * They normally only concern ::RUBY_T_DATA. This argument is mainly used for - * specifying flags, @shyouhei suspects. - */ -VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type); - -/** - * Queries the class of an object. This is not always identical to - * `RBASIC_CLASS(obj)`. It searches for the nearest ancestor skipping - * singleton classes or included modules. - * - * @param[in] obj Object in question. - * @return The object's class, in a normal sense. - */ -VALUE rb_obj_class(VALUE obj); - -/** - * Clones a singleton class. An object can have its own singleton class. OK. - * Then what happens when a program clones such object? The singleton class - * that is attached to the source object must also be cloned. Otherwise a - * singleton object gets shared with two objects, which breaks "singleton"-ness - * of such class. - * - * This is basically an implementation detail of rb_clone_setup(). People - * need not be aware of this working behind-the-scene. - * - * @param[in] obj The object that has its own singleton class. - * @return Cloned singleton class. - */ -VALUE rb_singleton_class_clone(VALUE obj); - -/** - * Attaches a singleton class to its corresponding object. - * - * This is basically an implementation detail of rb_clone_setup(). People - * need not be aware of this working behind-the-scene. - * - * @param[in] klass The singleton class. - * @param[out] obj The object to attach a class. - * @pre The passed two objects must agree with each other that `klass` - * becomes a singleton class of `obj`. - * @post `klass` becomes the singleton class of `obj`. - */ -void rb_singleton_class_attached(VALUE klass, VALUE obj); - -/** - * Copies the list of instance variables. 3rd parties need not know, but there - * are several ways to store an object's instance variables, depending on its - * internal structure. This function makes sense when either of the passed - * objects are using so-called "generic" backend storage. This distinction is - * purely an implementation detail of rb_clone_setup(). People need not be - * aware of this working behind-the-scenes. - * - * @param[out] clone The destination object. - * @param[in] obj The source object. - */ -void rb_copy_generic_ivar(VALUE clone, VALUE obj); -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_DEPRECATED(("This is no longer how Object#clone works.")) -/** - * @deprecated Not sure exactly when but at some time, the implementation of - * `Object#clone` stopped using this function. It remained - * untouched for a while, and then @shyouhei realised that they - * are no longer doing the same thing. It seems nobody seriously - * uses this function any longer. Let's just abandon it. - * - * @param[out] clone The destination object. - * @param[in] obj The source object. - */ -static inline void -rb_clone_setup(VALUE clone, VALUE obj) -{ - return; -} - -RBIMPL_ATTR_DEPRECATED(("This is no longer how Object#dup works.")) -/** - * @deprecated Not sure exactly when but at some time, the implementation of - * `Object#dup` stopped using this function. It remained - * untouched for a while, and then @shyouhei realised that they - * are no longer the same thing. It seems nobody seriously uses - * this function any longer. Let's just abandon it. - * - * @param[out] dup The destination object. - * @param[in] obj The source object. - */ -static inline void -rb_dup_setup(VALUE dup, VALUE obj) -{ - return; -} - -#endif /* RBIMPL_NEWOBJ_H */ diff --git a/libs/libruby/ruby/internal/rgengc.h b/libs/libruby/ruby/internal/rgengc.h deleted file mode 100644 index 7ea0444..0000000 --- a/libs/libruby/ruby/internal/rgengc.h +++ /dev/null @@ -1,443 +0,0 @@ -#ifndef RBIMPL_RGENGC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_RGENGC_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief RGENGC write-barrier APIs. - * @see Sasada, K., "Gradual write-barrier insertion into a Ruby - * interpreter", in proceedings of the 2019 ACM SIGPLAN - * International Symposium on Memory Management (ISMM 2019), pp - * 115-121, 2019. https://doi.org/10.1145/3315573.3329986 - */ -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/maybe_unused.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/special_consts.h" -#include "ruby/internal/stdbool.h" -#include "ruby/internal/value.h" -#include "ruby/assert.h" - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#undef USE_RGENGC -#define USE_RGENGC 1 - -/** - * @private - * - * This is a compile-time flag to enable/disable incremental GC feature. It - * has to be set at the time ruby itself compiles. Makes no sense for 3rd - * parties. It is safe for them to set this though; that just doesn't change - * anything. - */ -#ifndef USE_RINCGC -# define USE_RINCGC 1 -#endif - -/** - * @deprecated This macro seems broken. Setting this to anything other than - * zero just doesn't compile. We need to KonMari. - */ -#ifndef USE_RGENGC_LOGGING_WB_UNPROTECT -# define USE_RGENGC_LOGGING_WB_UNPROTECT 0 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RArray. It has to be set at the time ruby itself compiles. Makes - * no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_ARRAY -# define RGENGC_WB_PROTECTED_ARRAY 1 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RHash. It has to be set at the time ruby itself compiles. Makes - * no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_HASH -# define RGENGC_WB_PROTECTED_HASH 1 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RStruct. It has to be set at the time ruby itself compiles. Makes - * no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_STRUCT -# define RGENGC_WB_PROTECTED_STRUCT 1 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RString. It has to be set at the time ruby itself compiles. Makes - * no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_STRING -# define RGENGC_WB_PROTECTED_STRING 1 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RObject. It has to be set at the time ruby itself compiles. Makes - * no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_OBJECT -# define RGENGC_WB_PROTECTED_OBJECT 1 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RRegexp. It has to be set at the time ruby itself compiles. Makes - * no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_REGEXP -# define RGENGC_WB_PROTECTED_REGEXP 1 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RClass. It has to be set at the time ruby itself compiles. Makes - * no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_CLASS -# define RGENGC_WB_PROTECTED_CLASS 1 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RFloat. It has to be set at the time ruby itself compiles. Makes - * no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_FLOAT -# define RGENGC_WB_PROTECTED_FLOAT 1 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RComplex. It has to be set at the time ruby itself compiles. - * Makes no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_COMPLEX -# define RGENGC_WB_PROTECTED_COMPLEX 1 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RRational. It has to be set at the time ruby itself compiles. - * Makes no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_RATIONAL -# define RGENGC_WB_PROTECTED_RATIONAL 1 -#endif - -/** - * @private - * - * This is a compile-time flag to enable/disable write barrier for - * struct ::RBignum. It has to be set at the time ruby itself compiles. Makes - * no sense for 3rd parties. - */ -#ifndef RGENGC_WB_PROTECTED_BIGNUM -# define RGENGC_WB_PROTECTED_BIGNUM 1 -#endif - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - * - * @internal - * - * @shyouhei doesn't think anybody uses this right now. - */ -#ifndef RGENGC_WB_PROTECTED_NODE_CREF -# define RGENGC_WB_PROTECTED_NODE_CREF 1 -#endif - -/** - * @defgroup rgengc Write barrier (WB) interfaces: - * - * @note The following core interfaces can be changed in the future. Please - * catch up if you want to insert WB into C-extensions correctly. - * - * @{ - */ - -/** - * Declaration of a "back" pointer. This is a write barrier for new reference - * from "old" generation to "young" generation. It writes `young` into - * `*slot`, which is a pointer inside of `old`. - * - * @param[in] old An old object. - * @param[in] slot A pointer inside of `old`. - * @param[out] young A young object. - */ -#define RB_OBJ_WRITE(old, slot, young) \ - RBIMPL_CAST(rb_obj_write((VALUE)(old), (VALUE *)(slot), (VALUE)(young), __FILE__, __LINE__)) - -/** - * Identical to #RB_OBJ_WRITE(), except it doesn't write any values, but only a - * WB declaration. `oldv` is replaced value with `b` (not used in current - * Ruby). - * - * @param[in] old An old object. - * @param[in] oldv An object previously stored inside of `old`. - * @param[out] young A young object. - */ -#define RB_OBJ_WRITTEN(old, oldv, young) \ - RBIMPL_CAST(rb_obj_written((VALUE)(old), (VALUE)(oldv), (VALUE)(young), __FILE__, __LINE__)) -/** @} */ - -#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW /**< @old{RB_OBJ_PROMOTED_RAW} */ -#define OBJ_PROMOTED RB_OBJ_PROMOTED /**< @old{RB_OBJ_PROMOTED} */ -#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT /**< @old{RB_OBJ_WB_UNPROTECT} */ - -/** - * Asserts that the passed object is not fenced by write barriers. Objects of - * such property do not contribute to generational GCs. They are scanned - * always. - * - * @param[out] x An object that would not be protected by the barrier. - */ -#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__) - -/** - * Identical to #RB_OBJ_WB_UNPROTECT(), except it can also assert that the - * given object is of given type. - * - * @param[in] type One of `ARRAY`, `STRING`, etc. - * @param[out] obj An object of `type` that would not be protected. - * - * @internal - * - * @shyouhei doesn't understand why this has to be visible from extensions. - */ -#define RB_OBJ_WB_UNPROTECT_FOR(type, obj) \ - (RGENGC_WB_PROTECTED_##type ? OBJ_WB_UNPROTECT(obj) : obj) - -/** - * @private - * - * This is an implementation detail of rb_obj_wb_unprotect(). People don't use - * it directly. - */ -#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging - -/** @cond INTERNAL_MACRO */ -#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW -#define RB_OBJ_PROMOTED RB_OBJ_PROMOTED -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() -/** - * This is the implementation of #RB_OBJ_WRITE(). People don't use it - * directly. - * - * @param[in] old An object that points to `young`. - * @param[out] young An object that is referenced from `old`. - */ -void rb_gc_writebarrier(VALUE old, VALUE young); - -/** - * This is the implementation of #RB_OBJ_WB_UNPROTECT(). People don't use it - * directly. - * - * @param[out] obj An object that does not participate in WB. - */ -void rb_gc_writebarrier_unprotect(VALUE obj); - -#if USE_RGENGC_LOGGING_WB_UNPROTECT -/** - * @private - * - * This is the implementation of #RGENGC_LOGGING_WB_UNPROTECT(). People - * don't use it directly. - * - * @param[in] objptr Don't know why this is a pointer to void but in - * reality this is a pointer to an object that is about - * to be un-protected. - * @param[in] filename Pass C's `__FILE__` here. - * @param[in] line Pass C's `__LINE__` here. - */ -void rb_gc_unprotect_logging(void *objptr, const char *filename, int line); -#endif - -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * This is the implementation of #RB_OBJ_PROMOTED(). People don't use it - * directly. - * - * @param[in] obj An object to query. - * @retval true The object is "promoted". - * @retval false The object is young. Have not experienced GC at all. - */ -static inline bool -RB_OBJ_PROMOTED_RAW(VALUE obj) -{ - RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj)); - return RB_FL_ANY_RAW(obj, RUBY_FL_PROMOTED); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Tests if the object is "promoted" -- that is, whether the object experienced - * one or more GC marks. - * - * @param[in] obj An object to query. - * @retval true The object is "promoted". - * @retval false The object is young. Have not experienced GC at all. - * @note Hello, is anyone actively calling this function? @shyouhei have - * never seen any actual usages outside of the GC implementation - * itself. - */ -static inline bool -RB_OBJ_PROMOTED(VALUE obj) -{ - if (! RB_FL_ABLE(obj)) { - return false; - } - else { - return RB_OBJ_PROMOTED_RAW(obj); - } -} - -/** - * This is the implementation of #RB_OBJ_WB_UNPROTECT(). People don't use it - * directly. - * - * @param[out] x An object that does not participate in WB. - * @param[in] filename C's `__FILE__` of the caller function. - * @param[in] line C's `__LINE__` of the caller function. - * @return x - */ -static inline VALUE -rb_obj_wb_unprotect( - VALUE x, - RBIMPL_ATTR_MAYBE_UNUSED() - const char *filename, - RBIMPL_ATTR_MAYBE_UNUSED() - int line) -{ -#if USE_RGENGC_LOGGING_WB_UNPROTECT - RGENGC_LOGGING_WB_UNPROTECT(RBIMPL_CAST((void *)x), filename, line); -#endif - rb_gc_writebarrier_unprotect(x); - return x; -} - -/** - * @private - * - * This is the implementation of #RB_OBJ_WRITTEN(). People don't use it - * directly. - * - * @param[in] a An old object. - * @param[in] oldv An object previously stored inside of `old`. - * @param[out] b A young object. - * @param[in] filename C's `__FILE__` of the caller function. - * @param[in] line C's `__LINE__` of the caller function. - * @return a - */ -static inline VALUE -rb_obj_written( - VALUE a, - RBIMPL_ATTR_MAYBE_UNUSED() - VALUE oldv, - VALUE b, - RBIMPL_ATTR_MAYBE_UNUSED() - const char *filename, - RBIMPL_ATTR_MAYBE_UNUSED() - int line) -{ -#if USE_RGENGC_LOGGING_WB_UNPROTECT - RGENGC_LOGGING_OBJ_WRITTEN(a, oldv, b, filename, line); -#endif - - if (!RB_SPECIAL_CONST_P(b)) { - rb_gc_writebarrier(a, b); - } - - return a; -} - -/** - * @private - * - * This is the implementation of #RB_OBJ_WRITE(). People don't use it - * directly. - * - * @param[in] a An old object. - * @param[in] slot A pointer inside of `old`. - * @param[out] b A young object. - * @param[in] filename C's `__FILE__` of the caller function. - * @param[in] line C's `__LINE__` of the caller function. - * @return a - */ -static inline VALUE -rb_obj_write( - VALUE a, VALUE *slot, VALUE b, - RBIMPL_ATTR_MAYBE_UNUSED() - const char *filename, - RBIMPL_ATTR_MAYBE_UNUSED() - int line) -{ -#ifdef RGENGC_LOGGING_WRITE - RGENGC_LOGGING_WRITE(a, slot, b, filename, line); -#endif - - *slot = b; - - rb_obj_written(a, RUBY_Qundef /* ignore `oldv' now */, b, filename, line); - return a; -} - -#endif /* RBIMPL_RGENGC_H */ diff --git a/libs/libruby/ruby/internal/scan_args.h b/libs/libruby/ruby/internal/scan_args.h deleted file mode 100644 index 1ed2bf6..0000000 --- a/libs/libruby/ruby/internal/scan_args.h +++ /dev/null @@ -1,534 +0,0 @@ -#ifndef RBIMPL_SCAN_ARGS_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_SCAN_ARGS_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Compile-time static implementation of ::rb_scan_args(). - * - * This is a beast. It statically analyses the argument spec string, and - * expands the assignment of variables into dedicated codes. - */ -#include "ruby/assert.h" -#include "ruby/internal/attr/diagnose_if.h" -#include "ruby/internal/attr/error.h" -#include "ruby/internal/attr/forceinline.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/config.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/has/attribute.h" -#include "ruby/internal/intern/array.h" /* rb_ary_new_from_values */ -#include "ruby/internal/intern/error.h" /* rb_error_arity */ -#include "ruby/internal/intern/hash.h" /* rb_hash_dup */ -#include "ruby/internal/intern/proc.h" /* rb_block_proc */ -#include "ruby/internal/iterator.h" /* rb_block_given_p / rb_keyword_given_p */ -#include "ruby/internal/static_assert.h" -#include "ruby/internal/stdbool.h" -#include "ruby/internal/value.h" - -/** - * @name Possible values that you should pass to rb_scan_args_kw(). - * @{ - */ - -/** Same behaviour as rb_scan_args(). */ -#define RB_SCAN_ARGS_PASS_CALLED_KEYWORDS 0 - -/** The final argument should be a hash treated as keywords.*/ -#define RB_SCAN_ARGS_KEYWORDS 1 - -/** - * Treat a final argument as keywords if it is a hash, and not as keywords - * otherwise. - */ -#define RB_SCAN_ARGS_LAST_HASH_KEYWORDS 3 - -/** @} */ - -/** - * @name Possible values that you should pass to rb_funcallv_kw(). - * @{ - */ - -/** Do not pass keywords. */ -#define RB_NO_KEYWORDS 0 - -/** Pass keywords, final argument should be a hash of keywords. */ -#define RB_PASS_KEYWORDS 1 - -/** - * Pass keywords if current method is called with keywords, useful for argument - * delegation - */ -#define RB_PASS_CALLED_KEYWORDS rb_keyword_given_p() - -/** @} */ - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1 - -RBIMPL_SYMBOL_EXPORT_BEGIN() -RBIMPL_ATTR_NONNULL((2, 3)) -/** - * Retrieves argument from argc and argv to given ::VALUE references according - * to the format string. The format can be described in ABNF as follows: - * - * ``` - * scan-arg-spec := param-arg-spec [keyword-arg-spec] [block-arg-spec] - * - * param-arg-spec := pre-arg-spec [post-arg-spec] / post-arg-spec / - * pre-opt-post-arg-spec - * pre-arg-spec := num-of-leading-mandatory-args - * [num-of-optional-args] - * post-arg-spec := sym-for-variable-length-args - * [num-of-trailing-mandatory-args] - * pre-opt-post-arg-spec := num-of-leading-mandatory-args num-of-optional-args - * num-of-trailing-mandatory-args - * keyword-arg-spec := sym-for-keyword-arg - * block-arg-spec := sym-for-block-arg - * - * num-of-leading-mandatory-args := DIGIT ; The number of leading mandatory - * ; arguments - * num-of-optional-args := DIGIT ; The number of optional arguments - * sym-for-variable-length-args := "*" ; Indicates that variable length - * ; arguments are captured as a ruby - * ; array - * num-of-trailing-mandatory-args := DIGIT ; The number of trailing mandatory - * ; arguments - * sym-for-keyword-arg := ":" ; Indicates that keyword argument - * ; captured as a hash. - * ; If keyword arguments are not - * ; provided, returns nil. - * sym-for-block-arg := "&" ; Indicates that an iterator block - * ; should be captured if given - * ``` - * - * For example, "12" means that the method requires at least one argument, and - * at most receives three (1+2) arguments. So, the format string must be - * followed by three variable references, which are to be assigned to captured - * arguments. For omitted arguments, variables are set to ::RUBY_Qnil. `NULL` - * can be put in place of a variable reference, which means the corresponding - * captured argument(s) should be just dropped. - * - * The number of given arguments, excluding an option hash or iterator block, - * is returned. - * - * @param[in] argc Length of `argv`. - * @param[in] argv Pointer to the arguments to parse. - * @param[in] fmt Format, in the language described above. - * @param[out] ... Variables to fill in. - * @exception rb_eFatal Malformed `fmt`. - * @exception rb_eArgError Arity mismatch. - * @return Actually parsed number of given arguments. - * @post Each values passed to `argv` is filled into the variadic - * arguments, according to the format. - */ -int rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...); - -RBIMPL_ATTR_NONNULL((3, 4)) -/** - * Identical to rb_scan_args(), except it also accepts `kw_splat`. - * - * @param[in] kw_splat How to understand the keyword arguments. - * - RB_SCAN_ARGS_PASS_CALLED_KEYWORDS: Same behaviour as rb_scan_args(). - * - RB_SCAN_ARGS_KEYWORDS: The final argument is a kwarg. - * - RB_SCAN_ARGS_LAST_HASH_KEYWORDS: The final argument is a kwarg, iff it - * is a hash. - * @param[in] argc Length of `argv`. - * @param[in] argv Pointer to the arguments to parse. - * @param[in] fmt Format, in the language described above. - * @param[out] ... Variables to fill in. - * @exception rb_eFatal Malformed `fmt`. - * @exception rb_eArgError Arity mismatch. - * @return Actually parsed number of given arguments. - * @post Each values passed to `argv` is filled into the variadic - * arguments, according to the format. - */ -int rb_scan_args_kw(int kw_splat, int argc, const VALUE *argv, const char *fmt, ...); - -RBIMPL_ATTR_ERROR(("bad scan arg format")) -/** - * @private - * - * This is an implementation detail of rb_scan_args(). People don't use it - * directly. - */ -void rb_scan_args_bad_format(const char*); - -RBIMPL_ATTR_ERROR(("variable argument length doesn't match")) -/** - * @private - * - * This is an implementation detail of rb_scan_args(). People don't use it - * directly. - */ -void rb_scan_args_length_mismatch(const char*,int); - -RBIMPL_SYMBOL_EXPORT_END() - -/** @cond INTERNAL_MACRO */ - -/* If we could use constexpr the following macros could be inline functions - * ... but sadly we cannot. */ - -#define rb_scan_args_isdigit(c) (RBIMPL_CAST((unsigned char)((c)-'0'))<10) - -#define rb_scan_args_count_end(fmt, ofs, vari) \ - ((fmt)[ofs] ? -1 : (vari)) - -#define rb_scan_args_count_block(fmt, ofs, vari) \ - ((fmt)[ofs]!='&' ? \ - rb_scan_args_count_end(fmt, ofs, vari) : \ - rb_scan_args_count_end(fmt, (ofs)+1, (vari)+1)) - -#define rb_scan_args_count_hash(fmt, ofs, vari) \ - ((fmt)[ofs]!=':' ? \ - rb_scan_args_count_block(fmt, ofs, vari) : \ - rb_scan_args_count_block(fmt, (ofs)+1, (vari)+1)) - -#define rb_scan_args_count_trail(fmt, ofs, vari) \ - (!rb_scan_args_isdigit((fmt)[ofs]) ? \ - rb_scan_args_count_hash(fmt, ofs, vari) : \ - rb_scan_args_count_hash(fmt, (ofs)+1, (vari)+((fmt)[ofs]-'0'))) - -#define rb_scan_args_count_var(fmt, ofs, vari) \ - ((fmt)[ofs]!='*' ? \ - rb_scan_args_count_trail(fmt, ofs, vari) : \ - rb_scan_args_count_trail(fmt, (ofs)+1, (vari)+1)) - -#define rb_scan_args_count_opt(fmt, ofs, vari) \ - (!rb_scan_args_isdigit((fmt)[ofs]) ? \ - rb_scan_args_count_var(fmt, ofs, vari) : \ - rb_scan_args_count_var(fmt, (ofs)+1, (vari)+(fmt)[ofs]-'0')) - -#define rb_scan_args_count_lead(fmt, ofs, vari) \ - (!rb_scan_args_isdigit((fmt)[ofs]) ? \ - rb_scan_args_count_var(fmt, ofs, vari) : \ - rb_scan_args_count_opt(fmt, (ofs)+1, (vari)+(fmt)[ofs]-'0')) - -#define rb_scan_args_count(fmt) rb_scan_args_count_lead(fmt, 0, 0) - -#if RBIMPL_HAS_ATTRIBUTE(diagnose_if) -# /* Assertions done in the attribute. */ -# define rb_scan_args_verify(fmt, varc) RBIMPL_ASSERT_NOTHING -#else -# /* At one sight it _seems_ the expressions below could be written using -# * static assertions. The reality is no, they don't. Because fmt is a -# * string literal, any operations against fmt cannot produce the "integer -# * constant expression"s, as defined in ISO/IEC 9899:2018 section 6.6 -# * paragraph #6. Static assertions need such integer constant expressions as -# * defined in ISO/IEC 9899:2018 section 6.7.10 paragraph #3. -# * -# * GCC nonetheless constant-folds this into a no-op, though. */ -# define rb_scan_args_verify(fmt, varc) \ - (sizeof(char[1-2*(rb_scan_args_count(fmt)<0)])!=1 ? \ - rb_scan_args_bad_format(fmt) : \ - sizeof(char[1-2*(rb_scan_args_count(fmt)!=(varc))])!=1 ? \ - rb_scan_args_length_mismatch(fmt, varc) : \ - RBIMPL_ASSERT_NOTHING) -#endif - -static inline bool -rb_scan_args_keyword_p(int kw_flag, VALUE last) -{ - switch (kw_flag) { - case RB_SCAN_ARGS_PASS_CALLED_KEYWORDS: - return !! rb_keyword_given_p(); - case RB_SCAN_ARGS_KEYWORDS: - return true; - case RB_SCAN_ARGS_LAST_HASH_KEYWORDS: - return RB_TYPE_P(last, T_HASH); - default: - return false; - } -} - -RBIMPL_ATTR_FORCEINLINE() -static bool -rb_scan_args_lead_p(const char *fmt) -{ - return rb_scan_args_isdigit(fmt[0]); -} - -RBIMPL_ATTR_FORCEINLINE() -static int -rb_scan_args_n_lead(const char *fmt) -{ - return (rb_scan_args_lead_p(fmt) ? fmt[0]-'0' : 0); -} - -RBIMPL_ATTR_FORCEINLINE() -static bool -rb_scan_args_opt_p(const char *fmt) -{ - return (rb_scan_args_lead_p(fmt) && rb_scan_args_isdigit(fmt[1])); -} - -RBIMPL_ATTR_FORCEINLINE() -static int -rb_scan_args_n_opt(const char *fmt) -{ - return (rb_scan_args_opt_p(fmt) ? fmt[1]-'0' : 0); -} - -RBIMPL_ATTR_FORCEINLINE() -static int -rb_scan_args_var_idx(const char *fmt) -{ - return (!rb_scan_args_lead_p(fmt) ? 0 : !rb_scan_args_isdigit(fmt[1]) ? 1 : 2); -} - -RBIMPL_ATTR_FORCEINLINE() -static bool -rb_scan_args_f_var(const char *fmt) -{ - return (fmt[rb_scan_args_var_idx(fmt)]=='*'); -} - -RBIMPL_ATTR_FORCEINLINE() -static int -rb_scan_args_trail_idx(const char *fmt) -{ - const int idx = rb_scan_args_var_idx(fmt); - return idx+(fmt[idx]=='*'); -} - -RBIMPL_ATTR_FORCEINLINE() -static int -rb_scan_args_n_trail(const char *fmt) -{ - const int idx = rb_scan_args_trail_idx(fmt); - return (rb_scan_args_isdigit(fmt[idx]) ? fmt[idx]-'0' : 0); -} - -RBIMPL_ATTR_FORCEINLINE() -static int -rb_scan_args_hash_idx(const char *fmt) -{ - const int idx = rb_scan_args_trail_idx(fmt); - return idx+rb_scan_args_isdigit(fmt[idx]); -} - -RBIMPL_ATTR_FORCEINLINE() -static bool -rb_scan_args_f_hash(const char *fmt) -{ - return (fmt[rb_scan_args_hash_idx(fmt)]==':'); -} - -RBIMPL_ATTR_FORCEINLINE() -static int -rb_scan_args_block_idx(const char *fmt) -{ - const int idx = rb_scan_args_hash_idx(fmt); - return idx+(fmt[idx]==':'); -} - -RBIMPL_ATTR_FORCEINLINE() -static bool -rb_scan_args_f_block(const char *fmt) -{ - return (fmt[rb_scan_args_block_idx(fmt)]=='&'); -} - -# if 0 -RBIMPL_ATTR_FORCEINLINE() -static int -rb_scan_args_end_idx(const char *fmt) -{ - const int idx = rb_scan_args_block_idx(fmt); - return idx+(fmt[idx]=='&'); -} -# endif - -/* NOTE: Use `char *fmt` instead of `const char *fmt` because of clang's bug*/ -/* https://bugs.llvm.org/show_bug.cgi?id=38095 */ -# define rb_scan_args0(argc, argv, fmt, varc, vars) \ - rb_scan_args_set(RB_SCAN_ARGS_PASS_CALLED_KEYWORDS, argc, argv, \ - rb_scan_args_n_lead(fmt), \ - rb_scan_args_n_opt(fmt), \ - rb_scan_args_n_trail(fmt), \ - rb_scan_args_f_var(fmt), \ - rb_scan_args_f_hash(fmt), \ - rb_scan_args_f_block(fmt), \ - (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc) -# define rb_scan_args_kw0(kw_flag, argc, argv, fmt, varc, vars) \ - rb_scan_args_set(kw_flag, argc, argv, \ - rb_scan_args_n_lead(fmt), \ - rb_scan_args_n_opt(fmt), \ - rb_scan_args_n_trail(fmt), \ - rb_scan_args_f_var(fmt), \ - rb_scan_args_f_hash(fmt), \ - rb_scan_args_f_block(fmt), \ - (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc) - -RBIMPL_ATTR_FORCEINLINE() -static int -rb_scan_args_set(int kw_flag, int argc, const VALUE *argv, - int n_lead, int n_opt, int n_trail, - bool f_var, bool f_hash, bool f_block, - VALUE *vars[], RB_UNUSED_VAR(const char *fmt), RB_UNUSED_VAR(int varc)) - RBIMPL_ATTR_DIAGNOSE_IF(rb_scan_args_count(fmt) < 0, "bad scan arg format", "error") - RBIMPL_ATTR_DIAGNOSE_IF(rb_scan_args_count(fmt) != varc, "variable argument length doesn't match", "error") -{ - int i, argi = 0, vari = 0; - VALUE *var, hash = Qnil; -#define rb_scan_args_next_param() vars[vari++] - const int n_mand = n_lead + n_trail; - - /* capture an option hash - phase 1: pop from the argv */ - if (f_hash && argc > 0) { - VALUE last = argv[argc - 1]; - if (rb_scan_args_keyword_p(kw_flag, last)) { - hash = rb_hash_dup(last); - argc--; - } - } - - if (argc < n_mand) { - goto argc_error; - } - - /* capture leading mandatory arguments */ - for (i = 0; i < n_lead; i++) { - var = rb_scan_args_next_param(); - if (var) *var = argv[argi]; - argi++; - } - - /* capture optional arguments */ - for (i = 0; i < n_opt; i++) { - var = rb_scan_args_next_param(); - if (argi < argc - n_trail) { - if (var) *var = argv[argi]; - argi++; - } - else { - if (var) *var = Qnil; - } - } - - /* capture variable length arguments */ - if (f_var) { - int n_var = argc - argi - n_trail; - - var = rb_scan_args_next_param(); - if (0 < n_var) { - if (var) *var = rb_ary_new_from_values(n_var, &argv[argi]); - argi += n_var; - } - else { - if (var) *var = rb_ary_new(); - } - } - - /* capture trailing mandatory arguments */ - for (i = 0; i < n_trail; i++) { - var = rb_scan_args_next_param(); - if (var) *var = argv[argi]; - argi++; - } - - /* capture an option hash - phase 2: assignment */ - if (f_hash) { - var = rb_scan_args_next_param(); - if (var) *var = hash; - } - - /* capture iterator block */ - if (f_block) { - var = rb_scan_args_next_param(); - if (rb_block_given_p()) { - *var = rb_block_proc(); - } - else { - *var = Qnil; - } - } - - if (argi == argc) { - return argc; - } - - argc_error: - rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt); - UNREACHABLE_RETURN(-1); -#undef rb_scan_args_next_param -} - -/** @endcond */ - -#if defined(__DOXYGEN__) -# /* don't bother */ - -#elif ! defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P) -# /* skip */ - -#elif ! defined(HAVE_VA_ARGS_MACRO) -# /* skip */ - -#elif ! defined(__OPTIMIZE__) -# /* skip */ - -#elif defined(HAVE___VA_OPT__) -# define rb_scan_args(argc, argvp, fmt, ...) \ - __builtin_choose_expr( \ - __builtin_constant_p(fmt), \ - rb_scan_args0( \ - argc, argvp, fmt, \ - (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), \ - ((VALUE*[]){__VA_ARGS__})), \ - (rb_scan_args)(argc, argvp, fmt __VA_OPT__(, __VA_ARGS__))) -# define rb_scan_args_kw(kw_flag, argc, argvp, fmt, ...) \ - __builtin_choose_expr( \ - __builtin_constant_p(fmt), \ - rb_scan_args_kw0( \ - kw_flag, argc, argvp, fmt, \ - (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), \ - ((VALUE*[]){__VA_ARGS__})), \ - (rb_scan_args_kw)(kw_flag, argc, argvp, fmt __VA_OPT__(, __VA_ARGS__))) - -#elif defined(__STRICT_ANSI__) -# /* skip */ - -#elif defined(__GNUC__) -# define rb_scan_args(argc, argvp, fmt, ...) \ - __builtin_choose_expr( \ - __builtin_constant_p(fmt), \ - rb_scan_args0( \ - argc, argvp, fmt, \ - (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), \ - ((VALUE*[]){__VA_ARGS__})), \ - (rb_scan_args)(argc, argvp, fmt, __VA_ARGS__)) -# define rb_scan_args_kw(kw_flag, argc, argvp, fmt, ...) \ - __builtin_choose_expr( \ - __builtin_constant_p(fmt), \ - rb_scan_args_kw0( \ - kw_flag, argc, argvp, fmt, \ - (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), \ - ((VALUE*[]){__VA_ARGS__})), \ - (rb_scan_args_kw)(kw_flag, argc, argvp, fmt, __VA_ARGS__ /**/)) -#endif - -#endif /* RBIMPL_SCAN_ARGS_H */ diff --git a/libs/libruby/ruby/internal/special_consts.h b/libs/libruby/ruby/internal/special_consts.h deleted file mode 100644 index dc0a6b4..0000000 --- a/libs/libruby/ruby/internal/special_consts.h +++ /dev/null @@ -1,362 +0,0 @@ -#ifndef RBIMPL_SPECIAL_CONSTS_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_SPECIAL_CONSTS_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines enum ::ruby_special_consts. - * @see Sasada, K., "A Lightweight Representation of Floating-Point - * Numbers on Ruby Interpreter", in proceedings of 10th JSSST - * SIGPPL Workshop on Programming and Programming Languages - * (PPL2008), pp. 9-16, 2008. - */ -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/constexpr.h" -#include "ruby/internal/attr/enum_extensibility.h" -#include "ruby/internal/stdbool.h" -#include "ruby/internal/value.h" - -/** - * @private - * @warning Do not touch this macro. - * @warning It is an implementation detail. - * @warning The value of this macro must match for ruby itself and all - * extension libraries, otherwise serious memory corruption shall - * occur. - */ -#if defined(USE_FLONUM) -# /* Take that. */ -#elif SIZEOF_VALUE >= SIZEOF_DOUBLE -# define USE_FLONUM 1 -#else -# define USE_FLONUM 0 -#endif - -/** This is an old name of #RB_TEST. Not sure which name is preferred. */ -#define RTEST RB_TEST - -#define FIXNUM_P RB_FIXNUM_P /**< @old{RB_FIXNUM_P} */ -#define IMMEDIATE_P RB_IMMEDIATE_P /**< @old{RB_IMMEDIATE_P} */ -#define NIL_P RB_NIL_P /**< @old{RB_NIL_P} */ -#define SPECIAL_CONST_P RB_SPECIAL_CONST_P /**< @old{RB_SPECIAL_CONST_P} */ -#define STATIC_SYM_P RB_STATIC_SYM_P /**< @old{RB_STATIC_SYM_P} */ - -#define Qfalse RUBY_Qfalse /**< @old{RUBY_Qfalse} */ -#define Qnil RUBY_Qnil /**< @old{RUBY_Qnil} */ -#define Qtrue RUBY_Qtrue /**< @old{RUBY_Qtrue} */ -#define Qundef RUBY_Qundef /**< @old{RUBY_Qundef} */ - -#define FIXNUM_FLAG RUBY_FIXNUM_FLAG /**< @old{RUBY_FIXNUM_FLAG} */ -#define FLONUM_FLAG RUBY_FLONUM_FLAG /**< @old{RUBY_FLONUM_FLAG} */ -#define FLONUM_MASK RUBY_FLONUM_MASK /**< @old{RUBY_FLONUM_MASK} */ -#define FLONUM_P RB_FLONUM_P /**< @old{RB_FLONUM_P} */ -#define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK /**< @old{RUBY_IMMEDIATE_MASK} */ -#define SYMBOL_FLAG RUBY_SYMBOL_FLAG /**< @old{RUBY_SYMBOL_FLAG} */ - -/** @cond INTERNAL_MACRO */ -#define RB_FIXNUM_P RB_FIXNUM_P -#define RB_FLONUM_P RB_FLONUM_P -#define RB_IMMEDIATE_P RB_IMMEDIATE_P -#define RB_NIL_P RB_NIL_P -#define RB_SPECIAL_CONST_P RB_SPECIAL_CONST_P -#define RB_STATIC_SYM_P RB_STATIC_SYM_P -#define RB_TEST RB_TEST -#define RB_UNDEF_P RB_UNDEF_P -#define RB_NIL_OR_UNDEF_P RB_NIL_OR_UNDEF_P -/** @endcond */ - -/** special constants - i.e. non-zero and non-fixnum constants */ -enum -RBIMPL_ATTR_ENUM_EXTENSIBILITY(closed) -ruby_special_consts { -#if defined(__DOXYGEN__) - RUBY_Qfalse, /**< @see ::rb_cFalseClass */ - RUBY_Qtrue, /**< @see ::rb_cTrueClass */ - RUBY_Qnil, /**< @see ::rb_cNilClass */ - RUBY_Qundef, /**< Represents so-called undef. */ - RUBY_IMMEDIATE_MASK, /**< Bit mask detecting special consts. */ - RUBY_FIXNUM_FLAG, /**< Flag to denote a fixnum. */ - RUBY_FLONUM_MASK, /**< Bit mask detecting a flonum. */ - RUBY_FLONUM_FLAG, /**< Flag to denote a flonum. */ - RUBY_SYMBOL_FLAG, /**< Flag to denote a static symbol. */ -#elif USE_FLONUM - RUBY_Qfalse = 0x00, /* ...0000 0000 */ - RUBY_Qnil = 0x04, /* ...0000 0100 */ - RUBY_Qtrue = 0x14, /* ...0001 0100 */ - RUBY_Qundef = 0x24, /* ...0010 0100 */ - RUBY_IMMEDIATE_MASK = 0x07, /* ...0000 0111 */ - RUBY_FIXNUM_FLAG = 0x01, /* ...xxxx xxx1 */ - RUBY_FLONUM_MASK = 0x03, /* ...0000 0011 */ - RUBY_FLONUM_FLAG = 0x02, /* ...xxxx xx10 */ - RUBY_SYMBOL_FLAG = 0x0c, /* ...xxxx 1100 */ -#else - RUBY_Qfalse = 0x00, /* ...0000 0000 */ - RUBY_Qnil = 0x02, /* ...0000 0010 */ - RUBY_Qtrue = 0x06, /* ...0000 0110 */ - RUBY_Qundef = 0x0a, /* ...0000 1010 */ - RUBY_IMMEDIATE_MASK = 0x03, /* ...0000 0011 */ - RUBY_FIXNUM_FLAG = 0x01, /* ...xxxx xxx1 */ - RUBY_FLONUM_MASK = 0x00, /* any values ANDed with FLONUM_MASK cannot be FLONUM_FLAG */ - RUBY_FLONUM_FLAG = 0x02, /* ...0000 0010 */ - RUBY_SYMBOL_FLAG = 0x0e, /* ...xxxx 1110 */ -#endif - - RUBY_SPECIAL_SHIFT = 8 /**< Least significant 8 bits are reserved. */ -}; - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Emulates Ruby's "if" statement. - * - * @param[in] obj An arbitrary ruby object. - * @retval false `obj` is either ::RUBY_Qfalse or ::RUBY_Qnil. - * @retval true Anything else. - * - * @internal - * - * It HAS to be `__attribute__((const))` in order for clang to properly deduce - * `__builtin_assume()`. - */ -static inline bool -RB_TEST(VALUE obj) -{ - /* - * if USE_FLONUM - * Qfalse: ....0000 0000 - * Qnil: ....0000 0100 - * ~Qnil: ....1111 1011 - * v ....xxxx xxxx - * ---------------------------- - * RTEST(v) ....xxxx x0xx - * - * if ! USE_FLONUM - * Qfalse: ....0000 0000 - * Qnil: ....0000 0010 - * ~Qnil: ....1111 1101 - * v ....xxxx xxxx - * ---------------------------- - * RTEST(v) ....xxxx xx0x - * - * RTEST(v) can be 0 if and only if (v == Qfalse || v == Qnil). - */ - return obj & ~RUBY_Qnil; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Checks if the given object is nil. - * - * @param[in] obj An arbitrary ruby object. - * @retval true `obj` is ::RUBY_Qnil. - * @retval false Anything else. - */ -static inline bool -RB_NIL_P(VALUE obj) -{ - return obj == RUBY_Qnil; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Checks if the given object is undef. - * - * @param[in] obj An arbitrary ruby object. - * @retval true `obj` is ::RUBY_Qundef. - * @retval false Anything else. - */ -static inline bool -RB_UNDEF_P(VALUE obj) -{ - return obj == RUBY_Qundef; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX14) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Checks if the given object is nil or undef. Can be used to see if - * a keyword argument is not given or given `nil`. - * - * @param[in] obj An arbitrary ruby object. - * @retval true `obj` is ::RUBY_Qnil or ::RUBY_Qundef. - * @retval false Anything else. - */ -static inline bool -RB_NIL_OR_UNDEF_P(VALUE obj) -{ - /* - * if USE_FLONUM - * Qundef: ....0010 0100 - * Qnil: ....0000 0100 - * mask: ....1101 1111 - * common_bits: ....0000 0100 - * --------------------------------- - * Qnil & mask ....0000 0100 - * Qundef & mask ....0000 0100 - * - * if ! USE_FLONUM - * Qundef: ....0000 1010 - * Qnil: ....0000 0010 - * mask: ....1111 0111 - * common_bits: ....0000 0010 - * ---------------------------- - * Qnil & mask ....0000 0010 - * Qundef & mask ....0000 0010 - * - * NIL_OR_UNDEF_P(v) can be true only when v is Qundef or Qnil. - */ - const VALUE mask = ~(RUBY_Qundef ^ RUBY_Qnil); - const VALUE common_bits = RUBY_Qundef & RUBY_Qnil; - return (obj & mask) == common_bits; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Checks if the given object is a so-called Fixnum. - * - * @param[in] obj An arbitrary ruby object. - * @retval true `obj` is a Fixnum. - * @retval false Anything else. - * @note Fixnum was a thing in the 20th century, but it is rather an - * implementation detail today. - */ -static inline bool -RB_FIXNUM_P(VALUE obj) -{ - return obj & RUBY_FIXNUM_FLAG; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX14) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Checks if the given object is a static symbol. - * - * @param[in] obj An arbitrary ruby object. - * @retval true `obj` is a static symbol - * @retval false Anything else. - * @see RB_DYNAMIC_SYM_P() - * @see RB_SYMBOL_P() - * @note These days there are static and dynamic symbols, just like we - * once had Fixnum/Bignum back in the old days. - */ -static inline bool -RB_STATIC_SYM_P(VALUE obj) -{ - RBIMPL_ATTR_CONSTEXPR(CXX14) - const VALUE mask = ~(RBIMPL_VALUE_FULL << RUBY_SPECIAL_SHIFT); - return (obj & mask) == RUBY_SYMBOL_FLAG; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Checks if the given object is a so-called Flonum. - * - * @param[in] obj An arbitrary ruby object. - * @retval true `obj` is a Flonum. - * @retval false Anything else. - * @see RB_FLOAT_TYPE_P() - * @note These days there are Flonums and non-Flonum floats, just like we - * once had Fixnum/Bignum back in the old days. - */ -static inline bool -RB_FLONUM_P(VALUE obj) -{ -#if USE_FLONUM - return (obj & RUBY_FLONUM_MASK) == RUBY_FLONUM_FLAG; -#else - return false; -#endif -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Checks if the given object is an immediate i.e. an object which has no - * corresponding storage inside of the object space. - * - * @param[in] obj An arbitrary ruby object. - * @retval true `obj` is a Flonum. - * @retval false Anything else. - * @see RB_FLOAT_TYPE_P() - * @note The concept of "immediate" is purely C specific. - */ -static inline bool -RB_IMMEDIATE_P(VALUE obj) -{ - return obj & RUBY_IMMEDIATE_MASK; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -RBIMPL_ATTR_ARTIFICIAL() -/** - * Checks if the given object is of enum ::ruby_special_consts. - * - * @param[in] obj An arbitrary ruby object. - * @retval true `obj` is a special constant. - * @retval false Anything else. - */ -static inline bool -RB_SPECIAL_CONST_P(VALUE obj) -{ - return RB_IMMEDIATE_P(obj) || obj == RUBY_Qfalse; -} - -RBIMPL_ATTR_CONST() -RBIMPL_ATTR_CONSTEXPR(CXX11) -/** - * Identical to RB_SPECIAL_CONST_P, except it returns a ::VALUE. - * - * @param[in] obj An arbitrary ruby object. - * @retval RUBY_Qtrue `obj` is a special constant. - * @retval RUBY_Qfalse Anything else. - * - * @internal - * - * This function is to mimic old rb_special_const_p macro but have anyone - * actually used its return value? Wasn't it just something no one needed? - */ -static inline VALUE -rb_special_const_p(VALUE obj) -{ - return RB_SPECIAL_CONST_P(obj) * RUBY_Qtrue; -} - -/** - * @cond INTERNAL_MACRO - * See [ruby-dev:27513] for the following macros. - */ -#define RUBY_Qfalse RBIMPL_CAST((VALUE)RUBY_Qfalse) -#define RUBY_Qtrue RBIMPL_CAST((VALUE)RUBY_Qtrue) -#define RUBY_Qnil RBIMPL_CAST((VALUE)RUBY_Qnil) -#define RUBY_Qundef RBIMPL_CAST((VALUE)RUBY_Qundef) -/** @endcond */ - -#endif /* RBIMPL_SPECIAL_CONSTS_H */ diff --git a/libs/libruby/ruby/internal/static_assert.h b/libs/libruby/ruby/internal/static_assert.h deleted file mode 100644 index 594c2b2..0000000 --- a/libs/libruby/ruby/internal/static_assert.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef RBIMPL_STATIC_ASSERT_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_STATIC_ASSERT_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_STATIC_ASSERT. - */ -#include -#include "ruby/internal/has/extension.h" -#include "ruby/internal/compiler_since.h" - -/** @cond INTERNAL_MACRO */ -#if defined(__cplusplus) && defined(__cpp_static_assert) -# /* https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations */ -# define RBIMPL_STATIC_ASSERT0 static_assert - -#elif defined(__cplusplus) && RBIMPL_COMPILER_SINCE(MSVC, 16, 0, 0) -# define RBIMPL_STATIC_ASSERT0 static_assert - -#elif defined(__INTEL_CXX11_MODE__) -# define RBIMPL_STATIC_ASSERT0 static_assert - -#elif defined(__cplusplus) && __cplusplus >= 201103L -# define RBIMPL_STATIC_ASSERT0 static_assert - -#elif defined(__cplusplus) && RBIMPL_HAS_EXTENSION(cxx_static_assert) -# define RBIMPL_STATIC_ASSERT0 __extension__ static_assert - -#elif defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__ -# define RBIMPL_STATIC_ASSERT0 __extension__ static_assert - -#elif defined(__STDC_VERSION__) && RBIMPL_HAS_EXTENSION(c_static_assert) -# define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert - -#elif defined(__STDC_VERSION__) && RBIMPL_COMPILER_SINCE(GCC, 4, 6, 0) -# define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert - -#elif defined(static_assert) -# /* Take definition */ -# define RBIMPL_STATIC_ASSERT0 static_assert -#endif -/** @endcond */ - -/** - * @brief Wraps (or simulates) `static_assert` - * @param name Valid C/C++ identifier, describing the assertion. - * @param expr Expression to assert. - * @note `name` shall not be a string literal. - */ -#if defined(__DOXYGEN__) -# define RBIMPL_STATIC_ASSERT static_assert - -#elif defined(RBIMPL_STATIC_ASSERT0) -# define RBIMPL_STATIC_ASSERT(name, expr) \ - RBIMPL_STATIC_ASSERT0(expr, # name ": " # expr) - -#else -# define RBIMPL_STATIC_ASSERT(name, expr) \ - typedef int static_assert_ ## name ## _check[1 - 2 * !(expr)] -#endif - -#endif /* RBIMPL_STATIC_ASSERT_H */ diff --git a/libs/libruby/ruby/internal/stdalign.h b/libs/libruby/ruby/internal/stdalign.h deleted file mode 100644 index ec68f6a..0000000 --- a/libs/libruby/ruby/internal/stdalign.h +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef RBIMPL_STDALIGN_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_STDALIGN_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_ALIGNAS / #RBIMPL_ALIGNOF - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#include "ruby/internal/compiler_is.h" -#include "ruby/internal/has/attribute.h" -#include "ruby/internal/has/declspec_attribute.h" -#include "ruby/internal/has/feature.h" - -/** - * Wraps (or simulates) `alignas`. This is C++11's `alignas` and is _different_ - * from C11 `_Alignas`. For instance, - * - * ```CXX - * typedef struct alignas(128) foo { int foo } foo; - * ``` - * - * is a valid C++ while - * - * ```C - * typedef struct _Alignas(128) foo { int foo } foo; - * ``` - * - * is an invalid C because: - * - * - You cannot `struct _Alignas`. - * - A `typedef` cannot have alignments. - */ -#if defined(__cplusplus) && RBIMPL_HAS_FEATURE(cxx_alignas) -# define RBIMPL_ALIGNAS alignas - -#elif defined(__cplusplus) && (__cplusplus >= 201103L) -# define RBIMPL_ALIGNAS alignas - -#elif defined(__INTEL_CXX11_MODE__) -# define RBIMPL_ALIGNAS alignas - -#elif defined(__GXX_EXPERIMENTAL_CXX0X__) -# define RBIMPL_ALIGNAS alignas - -#elif RBIMPL_HAS_DECLSPEC_ATTRIBUTE(align) -# define RBIMPL_ALIGNAS(_) __declspec(align(_)) - -#elif RBIMPL_HAS_ATTRIBUTE(aligned) -# define RBIMPL_ALIGNAS(_) __attribute__((__aligned__(_))) - -#else -# define RBIMPL_ALIGNAS(_) /* void */ -#endif - -/** - * Wraps (or simulates) `alignof`. - * - * We want C11's `_Alignof`. However in spite of its clear language, compilers - * (including GCC and clang) tend to have buggy implementations. We have to - * avoid such things to resort to our own version. - * - * @see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023 - * @see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69560 - * @see https://bugs.llvm.org/show_bug.cgi?id=26547 - */ -#if defined(__DOXYGEN__) -# define RBIMPL_ALIGNOF alignof -#elif defined(__cplusplus) -# /* C++11 `alignof()` can be buggy. */ -# /* see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69560 */ -# /* But don't worry, we can use templates. */ -# define RBIMPL_ALIGNOF(T) (static_cast(ruby::rbimpl_alignof::value)) - -namespace ruby { -template -struct rbimpl_alignof { - typedef struct { - char _; - T t; - } type; - - enum { - value = offsetof(type, t) - }; -}; -} - -#elif RBIMPL_COMPILER_IS(MSVC) -# /* Windows have no alignment glitch.*/ -# define RBIMPL_ALIGNOF __alignof - -#elif defined(HAVE__ALIGNOF) -# /* Autoconf detected availability of a sane `_Alignof()`. */ -# define RBIMPL_ALIGNOF(T) RB_GNUC_EXTENSION(_Alignof(T)) - -#else -# /* :BEWARE: This is the last resort. If your compiler somehow supports -# * querying the alignment of a type, you definitely should use that instead. -# * There are 2 known pitfalls for this fallback implementation: -# * -# * First, it is either an undefined behaviour (C) or an explicit error (C++) -# * to define a struct inside of `offsetof`. C compilers tend to accept such -# * things, but AFAIK C++ has no room to allow. -# * -# * Second, there exist T such that `struct { char _; T t; }` is invalid. A -# * known example is when T is a struct with a flexible array member. Such -# * struct cannot be enclosed into another one. -# */ -# /* see: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2083.htm */ -# /* see: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm */ -# define RBIMPL_ALIGNOF(T) offsetof(struct { char _; T t; }, t) - -#endif - -#endif /* RBIMPL_STDALIGN_H */ diff --git a/libs/libruby/ruby/internal/stdbool.h b/libs/libruby/ruby/internal/stdbool.h deleted file mode 100644 index 1ca6113..0000000 --- a/libs/libruby/ruby/internal/stdbool.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef RBIMPL_STDBOOL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_STDBOOL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief C99 shim for - */ -#include "ruby/internal/config.h" - -#if defined(__bool_true_false_are_defined) -# /* Take that. */ - -#elif defined(__cplusplus) -# /* bool is a keyword in C++. */ -# if defined(HAVE_STDBOOL_H) && (__cplusplus >= 201103L) -# include -# endif -# -# ifndef __bool_true_false_are_defined -# define __bool_true_false_are_defined -# endif - -#elif defined(HAVE_STDBOOL_H) -# /* Take stdbool.h definition. */ -# include - -#elif !defined(HAVE__BOOL) -typedef unsigned char _Bool; -# /* See also http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2229.htm */ -# define bool _Bool -# define true ((_Bool)+1) -# define false ((_Bool)+0) -# define __bool_true_false_are_defined -#endif - -#endif /* RBIMPL_STDBOOL_H */ diff --git a/libs/libruby/ruby/internal/symbol.h b/libs/libruby/ruby/internal/symbol.h deleted file mode 100644 index 869a311..0000000 --- a/libs/libruby/ruby/internal/symbol.h +++ /dev/null @@ -1,332 +0,0 @@ -#ifndef RBIMPL_SYMBOL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_SYMBOL_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #rb_intern - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#ifdef HAVE_STRING_H -# include -#endif - -#include "ruby/internal/attr/noalias.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/constant_p.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/has/builtin.h" -#include "ruby/internal/value.h" - -#define RB_ID2SYM rb_id2sym /**< @alias{rb_id2sym} */ -#define RB_SYM2ID rb_sym2id /**< @alias{rb_sym2id} */ -#define ID2SYM RB_ID2SYM /**< @old{RB_ID2SYM} */ -#define SYM2ID RB_SYM2ID /**< @old{RB_SYM2ID} */ -#define CONST_ID_CACHE RUBY_CONST_ID_CACHE /**< @old{RUBY_CONST_ID_CACHE} */ -#define CONST_ID RUBY_CONST_ID /**< @old{RUBY_CONST_ID} */ - -/** @cond INTERNAL_MACRO */ -#define rb_intern_const rb_intern_const -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Converts an instance of ::rb_cSymbol into an ::ID. - * - * @param[in] obj An instance of ::rb_cSymbol. - * @exception rb_eTypeError `obj` is not an instance of ::rb_cSymbol. - * @return An ::ID of the identical symbol. - */ -ID rb_sym2id(VALUE obj); - -/** - * Allocates an instance of ::rb_cSymbol that has the given id. - * - * @param[in] id An id. - * @retval RUBY_Qfalse No such id ever existed in the history. - * @retval Otherwise An allocated ::rb_cSymbol instance. - */ -VALUE rb_id2sym(ID id); - -RBIMPL_ATTR_NONNULL(()) -/** - * Finds or creates a symbol of the given name. - * - * @param[in] name The name of the id. - * @exception rb_eRuntimeError Too many symbols. - * @return A (possibly new) id whose value is the given name. - * @note These days Ruby internally has two kinds of symbols (static / - * dynamic). Symbols created using this function would become a - * static one; i.e. would never be garbage collected. It is up to - * you to avoid memory leaks. Think twice before using it. - */ -ID rb_intern(const char *name); - -/** - * Identical to rb_intern(), except it additionally takes the length of the - * string. This way you can have a symbol that contains NUL characters. - * - * @param[in] name The name of the id. - * @param[in] len Length of `name`. - * @exception rb_eRuntimeError Too many symbols. - * @return A (possibly new) id whose value is the given name. - * @note These days Ruby internally has two kinds of symbols - * (static/dynamic). Symbols created using this function would - * become static ones; i.e. would never be garbage collected. It - * is up to you to avoid memory leaks. Think twice before using - * it. - */ -ID rb_intern2(const char *name, long len); - -/** - * Identical to rb_intern(), except it takes an instance of ::rb_cString. - * - * @param[in] str The name of the id. - * @pre `str` must either be an instance of ::rb_cSymbol, or an instance - * of ::rb_cString, or responds to `#to_str` method. - * @exception rb_eTypeError Can't convert `str` into ::rb_cString. - * @exception rb_eRuntimeError Too many symbols. - * @return A (possibly new) id whose value is the given str. - * @note These days Ruby internally has two kinds of symbols - * (static/dynamic). Symbols created using this function would - * become static ones; i.e. would never be garbage collected. It - * is up to you to avoid memory leaks. Think twice before using - * it. - */ -ID rb_intern_str(VALUE str); - -/** - * Retrieves the name mapped to the given id. - * - * @param[in] id An id to query. - * @retval NULL No such id ever existed in the history. - * @retval otherwise A name that the id represents. - * @note The return value is managed by the interpreter. Don't pass it - * to free(). - */ -const char *rb_id2name(ID id); - -RBIMPL_ATTR_NONNULL(()) -/** - * Detects if the given name is already interned or not. It first tries to - * convert the argument to an instance of ::rb_cString if it is neither an - * instance of ::rb_cString nor ::rb_cSymbol. The conversion result is written - * back to the variable. Then queries if that name was already interned - * before. If found it returns such id, otherwise zero. - * - * We eventually introduced this API to avoid inadvertent symbol pin-down. - * Before, there was no way to know if an ID was already interned or not - * without actually creating one (== leaking memory). By using this API you - * can avoid such situations: - * - * ```CXX - * bool does_interning_this_leak_memory(VALUE obj) - * { - * auto tmp = obj; - * if (auto id = rb_check_id(&tmp); id) { - * return false; - * } - * else { - * return true; // Let GC sweep tmp if necessary. - * } - * } - * ``` - * - * @param[in,out] namep A pointer to a name to query. - * @pre The object referred by `*namep` must either be an instance - * of ::rb_cSymbol, or an instance of ::rb_cString, or responds - * to `#to_str` method. - * @exception rb_eTypeError Can't convert `*namep` into ::rb_cString. - * @exception rb_eEncodingError Given string is non-ASCII. - * @retval 0 No such id ever existed in the history. - * @retval otherwise The id that represents the given name. - * @post The object that `*namep` points to is a converted result - * object, which is always an instance of either ::rb_cSymbol - * or ::rb_cString. - * @see https://bugs.ruby-lang.org/issues/5072 - * - * @internal - * - * @shyouhei doesn't know why this has to raise rb_eEncodingError. - */ -ID rb_check_id(volatile VALUE *namep); - -/** - * @copydoc rb_intern_str() - * - * @internal - * - * :FIXME: Can anyone tell us what is the difference between this one and - * rb_intern_str()? As far as @shyouhei reads the implementation it seems what - * rb_to_id() does is is just waste some CPU time, then call rb_intern_str(). - * He hopes he is wrong. - */ -ID rb_to_id(VALUE str); - -/** - * Identical to rb_id2name(), except it returns a Ruby's String instead of C's. - * - * @param[in] id An id to query. - * @retval RUBY_Qfalse No such id ever existed in the history. - * @retval otherwise An instance of ::rb_cString with the name of id. - * - * @internal - * - * In reality "rb_id2str() is identical to rb_id2name() except it returns Ruby - * string" is just describing things upside down; truth is `rb_id2name(foo)` is - * a shorthand of `RSTRING_PTR(rb_id2str(foo))`. - */ -VALUE rb_id2str(ID id); - -/** - * Identical to rb_id2str(), except it takes an instance of ::rb_cSymbol rather - * than an ::ID. - * - * @param[in] id An id to query. - * @retval RUBY_Qfalse No such id ever existed in the history. - * @retval otherwise An instance of ::rb_cString with the name of id. - */ -VALUE rb_sym2str(VALUE id); - -/** - * Identical to rb_intern_str(), except it generates a dynamic symbol if - * necessary. - * - * @param[in] name The name of the id. - * @pre `name` must either be an instance of ::rb_cSymbol, or an - * instance of ::rb_cString, or responds to `#to_str` method. - * @exception rb_eTypeError Can't convert `name` into ::rb_cString. - * @exception rb_eRuntimeError Too many symbols. - * @return A (possibly new) id whose value is the given name. - * @note These days Ruby internally has two kinds of symbols - * (static/dynamic). Symbols created using this function would - * become dynamic ones; i.e. would be garbage collected. It could - * be safer for you to use it than alternatives, when applicable. - */ -VALUE rb_to_symbol(VALUE name); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_check_id(), except it returns an instance of ::rb_cSymbol - * instead. - * - * @param[in,out] namep A pointer to a name to query. - * @pre The object referred by `*namep` must either be an instance - * of ::rb_cSymbol, or an instance of ::rb_cString, or responds - * to `#to_str` method. - * @exception rb_eTypeError Can't convert `*namep` into ::rb_cString. - * @exception rb_eEncodingError Given string is non-ASCII. - * @retval RUBY_Qnil No such id ever existed in the history. - * @retval otherwise The id that represents the given name. - * @post The object that `*namep` points to is a converted result - * object, which is always an instance of either ::rb_cSymbol - * or ::rb_cString. - * @see https://bugs.ruby-lang.org/issues/5072 - * - * @internal - * - * @shyouhei doesn't know why this has to raise rb_eEncodingError. - */ -VALUE rb_check_symbol(volatile VALUE *namep); -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_PURE() -RBIMPL_ATTR_NONNULL(()) -/** - * This is a "tiny optimisation" over rb_intern(). If you pass a string - * _literal_, and if your C compiler can special-case strlen of such literal to - * strength-reduce into an integer constant expression, then this inline - * function can precalc a part of conversion. - * - * @note This function also works happily for non-constant strings. Why - * bother then? Just apply liberally to everything. - * @note But #rb_intern() could be faster on compilers with statement - * expressions, because they can cache the created ::ID. - * @param[in] str The name of the id. - * @exception rb_eRuntimeError Too many symbols. - * @return A (possibly new) id whose value is the given str. - * @note These days Ruby internally has two kinds of symbols (static / - * dynamic). Symbols created using this function would become a - * static one; i.e. would never be garbage collected. It is up to - * you to avoid memory leaks. Think twice before using it. - */ -static inline ID -rb_intern_const(const char *str) -{ - size_t len = strlen(str); - return rb_intern2(str, RBIMPL_CAST((long)len)); -} - -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL(()) -/** - * @private - * - * This is an implementation detail of #rb_intern(). Just don't use it. - */ -static inline ID -rbimpl_intern_const(ID *ptr, const char *str) -{ - while (! *ptr) { - *ptr = rb_intern_const(str); - } - - return *ptr; -} - -/** - * Old implementation detail of rb_intern(). - * @deprecated Does anyone use it? Preserved for backward compat. - */ -#define RUBY_CONST_ID_CACHE(result, str) \ - { \ - static ID rb_intern_id_cache; \ - rbimpl_intern_const(&rb_intern_id_cache, (str)); \ - result rb_intern_id_cache; \ - } - -/** - * Old implementation detail of rb_intern(). - * @deprecated Does anyone use it? Preserved for backward compat. - */ -#define RUBY_CONST_ID(var, str) \ - do { \ - static ID rbimpl_id; \ - (var) = rbimpl_intern_const(&rbimpl_id, (str)); \ - } while (0) - -#if defined(HAVE_STMT_AND_DECL_IN_EXPR) -/* __builtin_constant_p and statement expression is available - * since gcc-2.7.2.3 at least. */ -#define rb_intern(str) \ - (RBIMPL_CONSTANT_P(str) ? \ - __extension__ ({ \ - static ID rbimpl_id; \ - rbimpl_intern_const(&rbimpl_id, (str)); \ - }) : \ - (rb_intern)(str)) -#endif - -#endif /* RBIMPL_SYMBOL_H */ diff --git a/libs/libruby/ruby/internal/value.h b/libs/libruby/ruby/internal/value.h deleted file mode 100644 index 805cd83..0000000 --- a/libs/libruby/ruby/internal/value.h +++ /dev/null @@ -1,133 +0,0 @@ -#ifndef RBIMPL_VALUE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_VALUE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines ::VALUE and ::ID. - */ -#include "ruby/internal/static_assert.h" -#include "ruby/backward/2/long_long.h" -#include "ruby/backward/2/limits.h" - -#if defined(__DOXYGEN__) - -/** - * Type that represents a Ruby object. It is an unsigned integer of some kind, - * depending on platforms. - * - * ```CXX - * VALUE value = rb_eval_string("ARGF.readlines.map.with_index"); - * ``` - * - * @warning ::VALUE is not a pointer. - * @warning ::VALUE can be wider than `long`. - */ -typedef uintptr_t VALUE; - -/** - * Type that represents a Ruby identifier such as a variable name. - * - * ```CXX - * ID method = rb_intern("method"); - * VALUE result = rb_funcall(obj, method, 0); - * ``` - * - * @note ::rb_cSymbol is a Ruby-level data type for the same thing. - */ -typedef uintptr_t ID; - -/** - * A signed integer type that has the same width with ::VALUE. - * - * @internal - * - * @shyouhei wonders: is it guaranteed that `uintptr_t` and `intptr_t` are the - * same width? As far as I read ISO/IEC 9899:2018 section 7.20.1.4 paragraph 1 - * no such description is given... or defined elsewhere? - */ -typedef intptr_t SIGNED_VALUE; - -/** - * Identical to `sizeof(VALUE)`, except it is a macro that can also be used - * inside of preprocessor directives such as `#if`. Handy on occasions. - */ -#define SIZEOF_VALUE SIZEOF_UINTPTR_T - -/** - * @private - * - * A compile-time constant of type ::VALUE whose value is 0. - */ -#define RBIMPL_VALUE_NULL UINTPTR_C(0) - -/** - * @private - * - * A compile-time constant of type ::VALUE whose value is 1. - */ -#define RBIMPL_VALUE_ONE UINTPTR_C(1) - -/** - * @private - * - * Maximum possible value that a ::VALUE can take. - */ -#define RBIMPL_VALUE_FULL UINTPTR_MAX - -#elif defined HAVE_UINTPTR_T && 0 -typedef uintptr_t VALUE; -typedef uintptr_t ID; -# define SIGNED_VALUE intptr_t -# define SIZEOF_VALUE SIZEOF_UINTPTR_T -# undef PRI_VALUE_PREFIX -# define RBIMPL_VALUE_NULL UINTPTR_C(0) -# define RBIMPL_VALUE_ONE UINTPTR_C(1) -# define RBIMPL_VALUE_FULL UINTPTR_MAX - -#elif SIZEOF_LONG == SIZEOF_VOIDP -typedef unsigned long VALUE; -typedef unsigned long ID; -# define SIGNED_VALUE long -# define SIZEOF_VALUE SIZEOF_LONG -# define PRI_VALUE_PREFIX "l" -# define RBIMPL_VALUE_NULL 0UL -# define RBIMPL_VALUE_ONE 1UL -# define RBIMPL_VALUE_FULL ULONG_MAX - -#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP -typedef unsigned LONG_LONG VALUE; -typedef unsigned LONG_LONG ID; -# define SIGNED_VALUE LONG_LONG -# define LONG_LONG_VALUE 1 -# define SIZEOF_VALUE SIZEOF_LONG_LONG -# define PRI_VALUE_PREFIX PRI_LL_PREFIX -# define RBIMPL_VALUE_NULL 0ULL -# define RBIMPL_VALUE_ONE 1ULL -# define RBIMPL_VALUE_FULL ULLONG_MAX - -#else -# error ---->> ruby requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<---- -#endif - -/** @cond INTERNAL_MACRO */ -RBIMPL_STATIC_ASSERT(sizeof_int, SIZEOF_INT == sizeof(int)); -RBIMPL_STATIC_ASSERT(sizeof_long, SIZEOF_LONG == sizeof(long)); -RBIMPL_STATIC_ASSERT(sizeof_long_long, SIZEOF_LONG_LONG == sizeof(LONG_LONG)); -RBIMPL_STATIC_ASSERT(sizeof_voidp, SIZEOF_VOIDP == sizeof(void *)); -/** @endcond */ -#endif /* RBIMPL_VALUE_H */ diff --git a/libs/libruby/ruby/internal/value_type.h b/libs/libruby/ruby/internal/value_type.h deleted file mode 100644 index 977f60a..0000000 --- a/libs/libruby/ruby/internal/value_type.h +++ /dev/null @@ -1,449 +0,0 @@ -#ifndef RBIMPL_VALUE_TYPE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_VALUE_TYPE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines enum ::ruby_value_type. - */ -#include "ruby/internal/assume.h" -#include "ruby/internal/attr/artificial.h" -#include "ruby/internal/attr/cold.h" -#include "ruby/internal/attr/enum_extensibility.h" -#include "ruby/internal/attr/forceinline.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/cast.h" -#include "ruby/internal/constant_p.h" -#include "ruby/internal/core/rbasic.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/error.h" -#include "ruby/internal/has/builtin.h" -#include "ruby/internal/special_consts.h" -#include "ruby/internal/stdbool.h" -#include "ruby/internal/value.h" -#include "ruby/assert.h" - -#if defined(T_DATA) -/* - * :!BEWARE!: (Recent?) Solaris' have conflicting definition of - * T_DATA. Let us stop here. Please have a workaround like this: - * - * ```C - * #include // <- Include this one first. - * #undef T_DATA // <- ... and stick to RUBY_T_DATA forever. - * #include // <- OS-provided T_DATA introduced. - * ``` - * - * See also [ruby-core:4261] - */ -# error Bail out due to conflicting definition of T_DATA. -#endif - -#define T_ARRAY RUBY_T_ARRAY /**< @old{RUBY_T_ARRAY} */ -#define T_BIGNUM RUBY_T_BIGNUM /**< @old{RUBY_T_BIGNUM} */ -#define T_CLASS RUBY_T_CLASS /**< @old{RUBY_T_CLASS} */ -#define T_COMPLEX RUBY_T_COMPLEX /**< @old{RUBY_T_COMPLEX} */ -#define T_DATA RUBY_T_DATA /**< @old{RUBY_T_DATA} */ -#define T_FALSE RUBY_T_FALSE /**< @old{RUBY_T_FALSE} */ -#define T_FILE RUBY_T_FILE /**< @old{RUBY_T_FILE} */ -#define T_FIXNUM RUBY_T_FIXNUM /**< @old{RUBY_T_FIXNUM} */ -#define T_FLOAT RUBY_T_FLOAT /**< @old{RUBY_T_FLOAT} */ -#define T_HASH RUBY_T_HASH /**< @old{RUBY_T_HASH} */ -#define T_ICLASS RUBY_T_ICLASS /**< @old{RUBY_T_ICLASS} */ -#define T_IMEMO RUBY_T_IMEMO /**< @old{RUBY_T_IMEMO} */ -#define T_MASK RUBY_T_MASK /**< @old{RUBY_T_MASK} */ -#define T_MATCH RUBY_T_MATCH /**< @old{RUBY_T_MATCH} */ -#define T_MODULE RUBY_T_MODULE /**< @old{RUBY_T_MODULE} */ -#define T_MOVED RUBY_T_MOVED /**< @old{RUBY_T_MOVED} */ -#define T_NIL RUBY_T_NIL /**< @old{RUBY_T_NIL} */ -#define T_NODE RUBY_T_NODE /**< @old{RUBY_T_NODE} */ -#define T_NONE RUBY_T_NONE /**< @old{RUBY_T_NONE} */ -#define T_OBJECT RUBY_T_OBJECT /**< @old{RUBY_T_OBJECT} */ -#define T_RATIONAL RUBY_T_RATIONAL /**< @old{RUBY_T_RATIONAL} */ -#define T_REGEXP RUBY_T_REGEXP /**< @old{RUBY_T_REGEXP} */ -#define T_STRING RUBY_T_STRING /**< @old{RUBY_T_STRING} */ -#define T_STRUCT RUBY_T_STRUCT /**< @old{RUBY_T_STRUCT} */ -#define T_SYMBOL RUBY_T_SYMBOL /**< @old{RUBY_T_SYMBOL} */ -#define T_TRUE RUBY_T_TRUE /**< @old{RUBY_T_TRUE} */ -#define T_UNDEF RUBY_T_UNDEF /**< @old{RUBY_T_UNDEF} */ -#define T_ZOMBIE RUBY_T_ZOMBIE /**< @old{RUBY_T_ZOMBIE} */ - -#define BUILTIN_TYPE RB_BUILTIN_TYPE /**< @old{RB_BUILTIN_TYPE} */ -#define DYNAMIC_SYM_P RB_DYNAMIC_SYM_P /**< @old{RB_DYNAMIC_SYM_P} */ -#define RB_INTEGER_TYPE_P rb_integer_type_p /**< @old{rb_integer_type_p} */ -#define SYMBOL_P RB_SYMBOL_P /**< @old{RB_SYMBOL_P} */ -#define rb_type_p RB_TYPE_P /**< @alias{RB_TYPE_P} */ - -/** @cond INTERNAL_MACRO */ -#define RB_BUILTIN_TYPE RB_BUILTIN_TYPE -#define RB_DYNAMIC_SYM_P RB_DYNAMIC_SYM_P -#define RB_FLOAT_TYPE_P RB_FLOAT_TYPE_P -#define RB_SYMBOL_P RB_SYMBOL_P -#define RB_TYPE_P RB_TYPE_P -#define Check_Type Check_Type - -#if !RUBY_DEBUG -# define RBIMPL_ASSERT_TYPE(v, t) RBIMPL_ASSERT_OR_ASSUME(RB_TYPE_P((v), (t))) -#else -# define RBIMPL_ASSERT_TYPE Check_Type -#endif -/** @endcond */ - -/** @old{rb_type} */ -#define TYPE(_) RBIMPL_CAST((int)rb_type(_)) - -/** C-level type of an object. */ -enum -RBIMPL_ATTR_ENUM_EXTENSIBILITY(closed) -ruby_value_type { - RUBY_T_NONE = 0x00, /**< Non-object (swept etc.) */ - - RUBY_T_OBJECT = 0x01, /**< @see struct ::RObject */ - RUBY_T_CLASS = 0x02, /**< @see struct ::RClass and ::rb_cClass */ - RUBY_T_MODULE = 0x03, /**< @see struct ::RClass and ::rb_cModule */ - RUBY_T_FLOAT = 0x04, /**< @see struct ::RFloat */ - RUBY_T_STRING = 0x05, /**< @see struct ::RString */ - RUBY_T_REGEXP = 0x06, /**< @see struct ::RRegexp */ - RUBY_T_ARRAY = 0x07, /**< @see struct ::RArray */ - RUBY_T_HASH = 0x08, /**< @see struct ::RHash */ - RUBY_T_STRUCT = 0x09, /**< @see struct ::RStruct */ - RUBY_T_BIGNUM = 0x0a, /**< @see struct ::RBignum */ - RUBY_T_FILE = 0x0b, /**< @see struct ::RFile */ - RUBY_T_DATA = 0x0c, /**< @see struct ::RTypedData */ - RUBY_T_MATCH = 0x0d, /**< @see struct ::RMatch */ - RUBY_T_COMPLEX = 0x0e, /**< @see struct ::RComplex */ - RUBY_T_RATIONAL = 0x0f, /**< @see struct ::RRational */ - - RUBY_T_NIL = 0x11, /**< @see ::RUBY_Qnil */ - RUBY_T_TRUE = 0x12, /**< @see ::RUBY_Qfalse */ - RUBY_T_FALSE = 0x13, /**< @see ::RUBY_Qtrue */ - RUBY_T_SYMBOL = 0x14, /**< @see struct ::RSymbol */ - RUBY_T_FIXNUM = 0x15, /**< Integers formerly known as Fixnums. */ - RUBY_T_UNDEF = 0x16, /**< @see ::RUBY_Qundef */ - - RUBY_T_IMEMO = 0x1a, /**< @see struct ::RIMemo */ - RUBY_T_NODE = 0x1b, /**< @see struct ::RNode */ - RUBY_T_ICLASS = 0x1c, /**< Hidden classes known as IClasses. */ - RUBY_T_ZOMBIE = 0x1d, /**< @see struct ::RZombie */ - RUBY_T_MOVED = 0x1e, /**< @see struct ::RMoved */ - - RUBY_T_MASK = 0x1f /**< Bitmask of ::ruby_value_type. */ -}; - -RBIMPL_SYMBOL_EXPORT_BEGIN() -RBIMPL_ATTR_COLD() -/** - * @private - * - * This was the old implementation of Check_Type(), but they diverged. This - * one remains for theoretical backwards compatibility. People normally need - * not use it. - * - * @param[in] obj An object. - * @param[in] t A type. - * @exception rb_eTypeError `obj` is not of type `t`. - * @exception rb_eFatal `obj` is corrupt. - * @post Upon successful return `obj` is guaranteed to have type `t`. - * - * @internal - * - * The second argument shall have been enum ::ruby_value_type. But at the time - * matz designed this function he still used K&R C. There was no such thing - * like a function prototype. We can no longer change this API. - */ -void rb_check_type(VALUE obj, int t); -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries the type of the object. - * - * @param[in] obj Object in question. - * @pre `obj` must not be a special constant. - * @return The type of `obj`. - */ -static inline enum ruby_value_type -RB_BUILTIN_TYPE(VALUE obj) -{ - RBIMPL_ASSERT_OR_ASSUME(! RB_SPECIAL_CONST_P(obj)); - -#if 0 && defined __GNUC__ && !defined __clang__ - /* Don't move the access to `flags` before the preceding - * RB_SPECIAL_CONST_P check. */ - __asm volatile("": : :"memory"); -#endif - VALUE ret = RBASIC(obj)->flags & RUBY_T_MASK; - return RBIMPL_CAST((enum ruby_value_type)ret); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -/** - * Queries if the object is an instance of ::rb_cInteger. - * - * @param[in] obj Object in question. - * @retval true It is. - * @retval false It isn't. - */ -static inline bool -rb_integer_type_p(VALUE obj) -{ - if (RB_FIXNUM_P(obj)) { - return true; - } - else if (RB_SPECIAL_CONST_P(obj)) { - return false; - } - else { - return RB_BUILTIN_TYPE(obj) == RUBY_T_BIGNUM; - } -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -/** - * Identical to RB_BUILTIN_TYPE(), except it can also accept special constants. - * - * @param[in] obj Object in question. - * @return The type of `obj`. - */ -static inline enum ruby_value_type -rb_type(VALUE obj) -{ - if (! RB_SPECIAL_CONST_P(obj)) { - return RB_BUILTIN_TYPE(obj); - } - else if (obj == RUBY_Qfalse) { - return RUBY_T_FALSE; - } - else if (obj == RUBY_Qnil) { - return RUBY_T_NIL; - } - else if (obj == RUBY_Qtrue) { - return RUBY_T_TRUE; - } - else if (obj == RUBY_Qundef) { - return RUBY_T_UNDEF; - } - else if (RB_FIXNUM_P(obj)) { - return RUBY_T_FIXNUM; - } - else if (RB_STATIC_SYM_P(obj)) { - return RUBY_T_SYMBOL; - } - else { - RBIMPL_ASSUME(RB_FLONUM_P(obj)); - return RUBY_T_FLOAT; - } -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries if the object is an instance of ::rb_cFloat. - * - * @param[in] obj Object in question. - * @retval true It is. - * @retval false It isn't. - */ -static inline bool -RB_FLOAT_TYPE_P(VALUE obj) -{ - if (RB_FLONUM_P(obj)) { - return true; - } - else if (RB_SPECIAL_CONST_P(obj)) { - return false; - } - else { - return RB_BUILTIN_TYPE(obj) == RUBY_T_FLOAT; - } -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries if the object is a dynamic symbol. - * - * @param[in] obj Object in question. - * @retval true It is. - * @retval false It isn't. - */ -static inline bool -RB_DYNAMIC_SYM_P(VALUE obj) -{ - if (RB_SPECIAL_CONST_P(obj)) { - return false; - } - else { - return RB_BUILTIN_TYPE(obj) == RUBY_T_SYMBOL; - } -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries if the object is an instance of ::rb_cSymbol. - * - * @param[in] obj Object in question. - * @retval true It is. - * @retval false It isn't. - */ -static inline bool -RB_SYMBOL_P(VALUE obj) -{ - return RB_STATIC_SYM_P(obj) || RB_DYNAMIC_SYM_P(obj); -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -RBIMPL_ATTR_FORCEINLINE() -/** - * @private - * - * This is an implementation detail of RB_TYPE_P(). Just don't use it. - * - * @param[in] obj An object. - * @param[in] t A type. - * @retval true `obj` is of type `t`. - * @retval false Otherwise. - */ -static bool -rbimpl_RB_TYPE_P_fastpath(VALUE obj, enum ruby_value_type t) -{ - if (t == RUBY_T_TRUE) { - return obj == RUBY_Qtrue; - } - else if (t == RUBY_T_FALSE) { - return obj == RUBY_Qfalse; - } - else if (t == RUBY_T_NIL) { - return obj == RUBY_Qnil; - } - else if (t == RUBY_T_UNDEF) { - return obj == RUBY_Qundef; - } - else if (t == RUBY_T_FIXNUM) { - return RB_FIXNUM_P(obj); - } - else if (t == RUBY_T_SYMBOL) { - return RB_SYMBOL_P(obj); - } - else if (t == RUBY_T_FLOAT) { - return RB_FLOAT_TYPE_P(obj); - } - else if (RB_SPECIAL_CONST_P(obj)) { - return false; - } - else if (t == RB_BUILTIN_TYPE(obj)) { - return true; - } - else { - return false; - } -} - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -RBIMPL_ATTR_ARTIFICIAL() -/** - * Queries if the given object is of given type. - * - * @param[in] obj An object. - * @param[in] t A type. - * @retval true `obj` is of type `t`. - * @retval false Otherwise. - * - * @internal - * - * This function is a super-duper hot path. Optimised targeting modern C - * compilers and x86_64 architecture. - */ -static inline bool -RB_TYPE_P(VALUE obj, enum ruby_value_type t) -{ - if (RBIMPL_CONSTANT_P(t)) { - return rbimpl_RB_TYPE_P_fastpath(obj, t); - } - else { - return t == rb_type(obj); - } -} - -/** @cond INTERNAL_MACRO */ -/* Clang, unlike GCC, cannot propagate __builtin_constant_p beyond function - * boundary. */ -#if defined(__clang__) -# undef RB_TYPE_P -# define RB_TYPE_P(obj, t) \ - (RBIMPL_CONSTANT_P(t) ? \ - rbimpl_RB_TYPE_P_fastpath((obj), (t)) : \ - (RB_TYPE_P)((obj), (t))) -#endif - -/* clang 3.x (4.2 compatible) can't eliminate CSE of RB_BUILTIN_TYPE - * in inline function and caller function - * See also 8998c06461ea0bef11b3aeb30b6d2ab71c8762ba - */ -#if RBIMPL_COMPILER_BEFORE(Clang, 4, 0, 0) -# undef rb_integer_type_p -# define rb_integer_type_p(obj) \ - __extension__ ({ \ - const VALUE integer_type_obj = (obj); \ - (RB_FIXNUM_P(integer_type_obj) || \ - (!RB_SPECIAL_CONST_P(integer_type_obj) && \ - RB_BUILTIN_TYPE(integer_type_obj) == RUBY_T_BIGNUM)); \ - }) -#endif -/** @endcond */ - -RBIMPL_ATTR_PURE() -RBIMPL_ATTR_ARTIFICIAL() -/** - * @private - * Defined in ruby/internal/core/rtypeddata.h - */ -static inline bool rbimpl_rtypeddata_p(VALUE obj); - -RBIMPL_ATTR_ARTIFICIAL() -/** - * Identical to RB_TYPE_P(), except it raises exceptions on predication - * failure. - * - * @param[in] v An object. - * @param[in] t A type. - * @exception rb_eTypeError `obj` is not of type `t`. - * @exception rb_eFatal `obj` is corrupt. - * @post Upon successful return `obj` is guaranteed to have type `t`. - */ -static inline void -Check_Type(VALUE v, enum ruby_value_type t) -{ - if (RB_UNLIKELY(! RB_TYPE_P(v, t))) { - goto unexpected_type; - } - else if (t == RUBY_T_DATA && rbimpl_rtypeddata_p(v)) { - /* Typed data is not simple `T_DATA`, see `rb_check_type` */ - goto unexpected_type; - } - else { - return; - } - - unexpected_type: - rb_unexpected_type(v, t); -} - -#endif /* RBIMPL_VALUE_TYPE_H */ diff --git a/libs/libruby/ruby/internal/variable.h b/libs/libruby/ruby/internal/variable.h deleted file mode 100644 index c017ffe..0000000 --- a/libs/libruby/ruby/internal/variable.h +++ /dev/null @@ -1,337 +0,0 @@ -#ifndef RBIMPL_VARIABLE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_VARIABLE_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Declares rb_define_variable(). - */ -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/noreturn.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Type that represents a global variable getter function. - * - * @param[in] id The variable name. - * @param[in,out] data Where the value is stored. - * @return The value that shall be visible from Ruby. - */ -typedef VALUE rb_gvar_getter_t(ID id, VALUE *data); - -/** - * Type that represents a global variable setter function. - * - * @param[in] val The value to set. - * @param[in] id The variable name. - * @param[in,out] data Where the value is to be stored. - */ -typedef void rb_gvar_setter_t(VALUE val, ID id, VALUE *data); - -/** - * Type that represents a global variable marker function. - * - * @param[in] var Where the value is to be stored. - */ -typedef void rb_gvar_marker_t(VALUE *var); - -/** - * @deprecated - * - * This function has no actual usage (than in ruby itself). Please ignore. It - * was a bad idea to expose this function to 3rd parties, but we can no longer - * delete it. - */ -rb_gvar_getter_t rb_gvar_undef_getter; - -/** - * @deprecated - * - * This function has no actual usage (than in ruby itself). Please ignore. It - * was a bad idea to expose this function to 3rd parties, but we can no longer - * delete it. - */ -rb_gvar_setter_t rb_gvar_undef_setter; - -/** - * @deprecated - * - * This function has no actual usage (than in ruby itself). Please ignore. It - * was a bad idea to expose this function to 3rd parties, but we can no longer - * delete it. - */ -rb_gvar_marker_t rb_gvar_undef_marker; - -/** - * This is the getter function that backs global variables defined from a ruby - * script. Extension libraries can use this if its global variable needs no - * custom logic. - */ -rb_gvar_getter_t rb_gvar_val_getter; - -/** - * This is the setter function that backs global variables defined from a ruby - * script. Extension libraries can use this if its global variable needs no - * custom logic. - */ -rb_gvar_setter_t rb_gvar_val_setter; - -/** - * This is the setter function that backs global variables defined from a ruby - * script. Extension libraries can use this if its global variable needs no - * custom logic. - */ -rb_gvar_marker_t rb_gvar_val_marker; - -/** - * @deprecated - * - * This function has no actual usage (than in ruby itself). Please ignore. It - * was a bad idea to expose this function to 3rd parties, but we can no longer - * delete it. - */ -rb_gvar_getter_t rb_gvar_var_getter; - -/** - * @deprecated - * - * This function has no actual usage (than in ruby itself). Please ignore. It - * was a bad idea to expose this function to 3rd parties, but we can no longer - * delete it. - */ -rb_gvar_setter_t rb_gvar_var_setter; - -/** - * @deprecated - * - * This function has no actual usage (than in ruby itself). Please ignore. It - * was a bad idea to expose this function to 3rd parties, but we can no longer - * delete it. - */ -rb_gvar_marker_t rb_gvar_var_marker; - -RBIMPL_ATTR_NORETURN() -/** - * This function just raises ::rb_eNameError. Handy when you want to prohibit - * a global variable from being squashed by someone. - */ -rb_gvar_setter_t rb_gvar_readonly_setter; - -RBIMPL_ATTR_NONNULL(()) -/** - * "Shares" a global variable between Ruby and C. Normally a Ruby-level global - * variable is stored somewhere deep inside of the interpreter's execution - * context, but this way you can explicitly specify its storage. - * - * ```CXX - * static VALUE foo; - * - * extern "C" void - * init_Foo(void) - * { - * foo = rb_eval_string("..."); - * rb_define_variable("$foo", &foo); - * } - * ``` - * - * In the above example a Ruby global variable named `$foo` is stored in a C - * global variable named `foo`. - * - * @param[in] name Variable (Ruby side). - * @param[in] var Variable (C side). - * @post Ruby level global variable named `name` is defined if absent, - * and its storage is set to `var`. - */ -void rb_define_variable(const char *name, VALUE *var); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Defines a global variable that is purely function-backended. By using this - * API a programmer can define a global variable that dynamically changes from - * time to time. - * - * @param[in] name Variable name, in C's string. - * @param[in] getter A getter function. - * @param[in] setter A setter function. - * @post Ruby level global variable named `name` is defined if absent. - * - * @internal - * - * @shyouhei doesn't know if this is an Easter egg or an official feature, but - * you can pass 0 to the third argument (setter). That effectively nullifies - * any efforts to write to the defining global variable. - */ -void rb_define_virtual_variable(const char *name, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Identical to rb_define_virtual_variable(), but can also specify a storage. - * A programmer can use the storage for e.g. memoisation, storing intermediate - * computation result, etc. - * - * Also you can pass 0 to this function, unlike other variants: - * - * - When getter is 0 ::rb_gvar_var_getter is used instead. - * - When setter is 0 ::rb_gvar_var_setter is used instead. - * - When data is 0, you must specify a non-zero setter function. Otherwise - * ::rb_gvar_var_setter tries to write to `*NULL`, and just causes SEGV. - * - * @param[in] name Variable name, in C's string. - * @param[in] var Variable storage. - * @param[in] getter A getter function. - * @param[in] setter A setter function. - * @post Ruby level global variable named `name` is defined if absent. - */ -void rb_define_hooked_variable(const char *name, VALUE *var, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_define_variable(), except it does not allow Ruby programs to - * assign values to such global variable. C codes can still set values at - * will. This could be handy for you when implementing an `errno`-like - * experience, where a method updates a read-only global variable as a side- - * effect. - * - * @param[in] name Variable (Ruby side). - * @param[in] var Variable (C side). - * @post Ruby level global variable named `name` is defined if absent, - * and its storage is set to `var`. - */ -void rb_define_readonly_variable(const char *name, const VALUE *var); - -RBIMPL_ATTR_NONNULL(()) -/** - * Defines a Ruby level constant under a namespace. - * - * @param[out] klass Namespace for the constant to reside. - * @param[in] name Name of the constant. - * @param[in] val Value of the constant. - * @exception rb_eTypeError `klass` is not a kind of ::rb_cModule. - * @exception rb_eFrozenError `klass` is frozen. - * @post Ruby level constant `klass::name` is defined to be `val`. - * @note This API does not stop you from defining a constant that is - * unable to reach from ruby (like for instance passing - * non-capital letter to `name`). - * @note This API does not stop you from overwriting a constant that - * already exist. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -void rb_define_const(VALUE klass, const char *name, VALUE val); - -RBIMPL_ATTR_NONNULL(()) -/** - * Identical to rb_define_const(), except it defines that of "global", - * i.e. toplevel constant. - * - * @param[in] name Name of the constant. - * @param[in] val Value of the constant. - * @exception rb_eFrozenError ::rb_cObject is frozen. - * @post Ruby level constant \::name is defined to be `val`. - * @note This API does not stop you from defining a constant that is - * unable to reach from ruby (like for instance passing - * non-capital letter to `name`). - * @note This API does not stop you from overwriting a constant that - * already exist. - */ -void rb_define_global_const(const char *name, VALUE val); - -RBIMPL_ATTR_NONNULL(()) -/** - * Asserts that the given constant is deprecated. Attempt to refer such - * constant will produce a warning. - * - * @param[in] mod Namespace of the target constant. - * @param[in] name Name of the constant. - * @exception rb_eNameError No such constant. - * @exception rb_eFrozenError `mod` is frozen. - * @post `name` under `mod` is deprecated. - */ -void rb_deprecate_constant(VALUE mod, const char *name); - -RBIMPL_ATTR_NONNULL(()) -/** - * Assigns to a global variable. - * - * @param[in] name Target global variable. - * @param[in] val Value to assign. - * @return Passed value. - * @post Ruby level global variable named `name` is defined if absent, - * whose value is set to `val`. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with - * `set_trace_func`. - */ -VALUE rb_gv_set(const char *name, VALUE val); - -RBIMPL_ATTR_NONNULL(()) -/** - * Obtains a global variable. - * - * @param[in] name Global variable to query. - * @retval RUBY_Qnil The global variable does not exist. - * @retval otherwise The value assigned to the global variable. - * - * @internal - * - * Unlike rb_gv_set(), there is no way to trace this function. - */ -VALUE rb_gv_get(const char *name); - -RBIMPL_ATTR_NONNULL(()) -/** - * Obtains an instance variable. - * - * @param[in] obj Target object. - * @param[in] name Target instance variable to query. - * @exception rb_eEncodingError `name` is corrupt (contains Hanzi etc.). - * @retval RUBY_nil No such instance variable. - * @retval otherwise The value assigned to the instance variable. - */ -VALUE rb_iv_get(VALUE obj, const char *name); - -RBIMPL_ATTR_NONNULL(()) -/** - * Assigns to an instance variable. - * - * @param[out] obj Target object. - * @param[in] name Target instance variable. - * @param[in] val Value to assign. - * @exception rb_eFrozenError Can't modify `obj`. - * @exception rb_eArgError `obj` has too many instance variables. - * @return Passed value. - * @post An instance variable named `name` is defined if absent on - * `obj`, whose value is set to `val`. - * - * @internal - * - * This function does not stop you form creating an ASCII-incompatible instance - * variable, but there is no way to get one because rb_iv_get raises exceptions - * for such things. This design seems broken... But no idea why. - */ -VALUE rb_iv_set(VALUE obj, const char *name, VALUE val); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_VARIABLE_H */ diff --git a/libs/libruby/ruby/internal/warning_push.h b/libs/libruby/ruby/internal/warning_push.h deleted file mode 100644 index f598163..0000000 --- a/libs/libruby/ruby/internal/warning_push.h +++ /dev/null @@ -1,124 +0,0 @@ -#ifndef RBIMPL_WARNING_PUSH_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_WARNING_PUSH_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Defines #RBIMPL_WARNING_PUSH. - * - * ### Q&A ### - * - * Q: Why all the macros defined in this file are function-like macros? - * - * A: Sigh. This is because of Doxygen. Its `SKIP_FUNCTION_MACROS = YES` - * configuration setting requests us that if we want it to ignore these - * macros, then we have to do two things: (1) let them be defined as - * function-like macros, and (2) place them separately in their own line, - * like below: - * - * ```CXX - * // NG -- foo's type considered something like `unsigned int`. - * RBIMPL_WARNING_PUSH - * int foo(void); - * RBIMPL_WARNING_POP - * - * // OK -- the macros are ignored by Doxygen. - * RBIMPL_WARNING_PUSH() - * int foo(void); - * RBIMPL_WARNING_POP() - * ``` - */ -#include "ruby/internal/compiler_is.h" -#include "ruby/internal/compiler_since.h" - -#if defined(__DOXYGEN__) - -/** - * @private - * - * Pushes compiler warning state. - */ -#define RBIMPL_WARNING_PUSH() __pragma(warning(push)) - -/** - * @private - * - * Pops compiler warning state. - */ -#define RBIMPL_WARNING_POP() __pragma(warning(pop)) - -/** - * @private - * - * Turns a warning into a fatal error. - * - * @param flag A flag that represents the kind of warnings. - */ -#define RBIMPL_WARNING_ERROR(flag) __pragma(warning(error: flag)) - -/** - * @private - * - * Suppresses a warning. - * - * @param flag A flag that represents the kind of warnings. - */ -#define RBIMPL_WARNING_IGNORED(flag) __pragma(warning(disable: flag)) - -#elif RBIMPL_COMPILER_SINCE(MSVC, 12, 0, 0) -# /* Not sure exactly when but it seems VC++ 6.0 is a version with it.*/ -# define RBIMPL_WARNING_PUSH() __pragma(warning(push)) -# define RBIMPL_WARNING_POP() __pragma(warning(pop)) -# define RBIMPL_WARNING_ERROR(flag) __pragma(warning(error: flag)) -# define RBIMPL_WARNING_IGNORED(flag) __pragma(warning(disable: flag)) - -#elif RBIMPL_COMPILER_SINCE(Intel, 13, 0, 0) -# define RBIMPL_WARNING_PUSH() __pragma(warning(push)) -# define RBIMPL_WARNING_POP() __pragma(warning(pop)) -# define RBIMPL_WARNING_ERROR(flag) __pragma(warning(error: flag)) -# define RBIMPL_WARNING_IGNORED(flag) __pragma(warning(disable: flag)) - -#elif RBIMPL_COMPILER_IS(Clang) || RBIMPL_COMPILER_IS(Apple) -# /* Not sure exactly when but it seems LLVM 2.6.0 is a version with it. */ -# define RBIMPL_WARNING_PRAGMA0(x) _Pragma(# x) -# define RBIMPL_WARNING_PRAGMA1(x) RBIMPL_WARNING_PRAGMA0(clang diagnostic x) -# define RBIMPL_WARNING_PRAGMA2(x, y) RBIMPL_WARNING_PRAGMA1(x # y) -# define RBIMPL_WARNING_PUSH() RBIMPL_WARNING_PRAGMA1(push) -# define RBIMPL_WARNING_POP() RBIMPL_WARNING_PRAGMA1(pop) -# define RBIMPL_WARNING_ERROR(flag) RBIMPL_WARNING_PRAGMA2(error, flag) -# define RBIMPL_WARNING_IGNORED(flag) RBIMPL_WARNING_PRAGMA2(ignored, flag) - -#elif RBIMPL_COMPILER_SINCE(GCC, 4, 6, 0) -# /* https://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/Diagnostic-Pragmas.html */ -# define RBIMPL_WARNING_PRAGMA0(x) _Pragma(# x) -# define RBIMPL_WARNING_PRAGMA1(x) RBIMPL_WARNING_PRAGMA0(GCC diagnostic x) -# define RBIMPL_WARNING_PRAGMA2(x, y) RBIMPL_WARNING_PRAGMA1(x # y) -# define RBIMPL_WARNING_PUSH() RBIMPL_WARNING_PRAGMA1(push) -# define RBIMPL_WARNING_POP() RBIMPL_WARNING_PRAGMA1(pop) -# define RBIMPL_WARNING_ERROR(flag) RBIMPL_WARNING_PRAGMA2(error, flag) -# define RBIMPL_WARNING_IGNORED(flag) RBIMPL_WARNING_PRAGMA2(ignored, flag) - -#else -# /* :FIXME: improve here */ -# define RBIMPL_WARNING_PUSH() /* void */ -# define RBIMPL_WARNING_POP() /* void */ -# define RBIMPL_WARNING_ERROR(flag) /* void */ -# define RBIMPL_WARNING_IGNORED(flag) /* void */ -#endif /* _MSC_VER */ -/** @endcond */ - -#endif /* RBIMPL_WARNING_PUSH_H */ diff --git a/libs/libruby/ruby/internal/xmalloc.h b/libs/libruby/ruby/internal/xmalloc.h deleted file mode 100644 index 57552e4..0000000 --- a/libs/libruby/ruby/internal/xmalloc.h +++ /dev/null @@ -1,392 +0,0 @@ -#ifndef RBIMPL_XMALLOC_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RBIMPL_XMALLOC_H -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are - * implementation details. Don't take them as canon. They could - * rapidly appear then vanish. The name (path) of this header file - * is also an implementation detail. Do not expect it to persist - * at the place it is now. Developers are free to move it anywhere - * anytime at will. - * @note To ruby-core: remember that this header can be possibly - * recursively included from extension libraries written in C++. - * Do not expect for instance `__VA_ARGS__` is always available. - * We assume C99 for ruby itself but we don't assume languages of - * extension libraries. They could be written in C++98. - * @brief Declares ::ruby_xmalloc(). - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#ifdef HAVE_STDLIB_H -# include -#endif - -#include "ruby/internal/attr/alloc_size.h" -#include "ruby/internal/attr/nodiscard.h" -#include "ruby/internal/attr/noexcept.h" -#include "ruby/internal/attr/restrict.h" -#include "ruby/internal/attr/returns_nonnull.h" -#include "ruby/internal/dllexport.h" - -/** - * @private - * @warning Do not touch this macro. - * @warning It is an implementation detail. - * @warning It was a failure at the first place to let you know about it. - * @warning The value of this macro must match for ruby itself and all - * extension libraries, otherwise serious memory corruption shall - * occur. - */ -#ifndef USE_GC_MALLOC_OBJ_INFO_DETAILS -# define USE_GC_MALLOC_OBJ_INFO_DETAILS 0 -#endif - -#define xmalloc ruby_xmalloc /**< @old{ruby_xmalloc} */ -#define xmalloc2 ruby_xmalloc2 /**< @old{ruby_xmalloc2} */ -#define xcalloc ruby_xcalloc /**< @old{ruby_xcalloc} */ -#define xrealloc ruby_xrealloc /**< @old{ruby_xrealloc} */ -#define xrealloc2 ruby_xrealloc2 /**< @old{ruby_xrealloc2} */ -#define xfree ruby_xfree /**< @old{ruby_xfree} */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RESTRICT() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((1)) -/** - * Allocates a storage instance. It is largely the same as system malloc(), - * except: - * - * - It raises Ruby exceptions instead of returning NULL, and - * - In case of `ENOMEM` it tries to GC to make some room. - * - * @param[in] size Requested amount of memory. - * @exception rb_eNoMemError No space left for `size` bytes allocation. - * @return A valid pointer to an allocated storage instance; which has at - * least `size` bytes width, with appropriate alignment detected by - * the underlying malloc() routine. - * @note It doesn't return NULL. - * @note Unlike some malloc() implementations, it allocates something and - * returns a meaningful value even when `size` is equal to zero. - * @warning The return value shall be invalidated exactly once by either - * ruby_xfree(), ruby_xrealloc(), or ruby_xrealloc2(). It is a - * failure to pass it to system free(), because the system and Ruby - * might or might not share the same malloc() implementation. - */ -void *ruby_xmalloc(size_t size) -RBIMPL_ATTR_NOEXCEPT(malloc(size)) -; - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RESTRICT() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((1,2)) -/** - * Identical to ruby_xmalloc(), except it allocates `nelems` * `elemsiz` bytes. - * This is needed because the multiplication could integer overflow. On such - * situations Ruby does not try to allocate at all but raises Ruby level - * exceptions instead. If there is no integer overflow the behaviour is - * exactly the same as `ruby_xmalloc(nelems*elemsiz)`. - * - * @param[in] nelems Number of elements. - * @param[in] elemsiz Size of an element. - * @exception rb_eNoMemError No space left for allocation. - * @exception rb_eArgError `nelems` * `elemsiz` would overflow. - * @return A valid pointer to an allocated storage instance; which has at - * least `nelems` * `elemsiz` bytes width, with appropriate - * alignment detected by the underlying malloc() routine. - * @note It doesn't return NULL. - * @note Unlike some malloc() implementations, it allocates something and - * returns a meaningful value even when `nelems` or `elemsiz` or - * both are zero. - * @warning The return value shall be invalidated exactly once by either - * ruby_xfree(), ruby_xrealloc(), or ruby_xrealloc2(). It is a - * failure to pass it to system free(), because the system and Ruby - * might or might not share the same malloc() implementation. - */ -void *ruby_xmalloc2(size_t nelems, size_t elemsiz) -RBIMPL_ATTR_NOEXCEPT(malloc(nelems * elemsiz)) -; - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RESTRICT() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((1,2)) -/** - * Identical to ruby_xmalloc2(), except it returns a zero-filled storage - * instance. It can also be seen as a routine identical to ruby_xmalloc(), - * except it calls calloc() instead of malloc(). - * - * @param[in] nelems Number of elements. - * @param[in] elemsiz Size of an element. - * @exception rb_eNoMemError No space left for allocation. - * @exception rb_eArgError `nelems` * `elemsiz` would overflow. - * @return A valid pointer to an allocated storage instance; which has at - * least `nelems` * `elemsiz` bytes width, with appropriate - * alignment detected by the underlying calloc() routine. - * @post The returned storage instance is filled with zeros. - * @note It doesn't return NULL. - * @note Unlike some calloc() implementations, it allocates something and - * returns a meaningful value even when `nelems` or `elemsiz` or - * both are zero. - * @warning The return value shall be invalidated exactly once by either - * ruby_xfree(), ruby_xrealloc(), or ruby_xrealloc2(). It is a - * failure to pass it to system free(), because the system and Ruby - * might or might not share the same malloc() implementation. - */ -void *ruby_xcalloc(size_t nelems, size_t elemsiz) -RBIMPL_ATTR_NOEXCEPT(calloc(nelems, elemsiz)) -; - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((2)) -/** - * Resize the storage instance. - * - * @param[in] ptr A valid pointer to a storage instance that was - * previously returned from either: - * - ruby_xmalloc(), - * - ruby_xmalloc2(), - * - ruby_xcalloc(), - * - ruby_xrealloc(), or - * - ruby_xrealloc2(). - * @param[in] newsiz Requested new amount of memory. - * @exception rb_eNoMemError No space left for `newsiz` bytes allocation. - * @return A valid pointer to a (possibly newly allocated) storage - * instance; which has at least `newsiz` bytes width, with - * appropriate alignment detected by the underlying realloc() - * routine. - * @pre The passed pointer must point to a valid live storage instance. - * It is a failure to pass an already freed pointer. - * @post In case the function returns the passed pointer as-is, the - * storage instance that the pointer holds is either grown or - * shrunken to have at least `newsiz` bytes. Otherwise a valid - * pointer to a newly allocated storage instance is returned. In - * this case `ptr` is invalidated as if it was passed to - * ruby_xfree(). - * @note It doesn't return NULL. - * @warning Unlike some realloc() implementations, passing zero to `newsiz` - * is not the same as calling ruby_xfree(), because this function - * never returns NULL. Something meaningful still returns then. - * @warning It is a failure not to check the return value. Do not assume - * anything on it. It could be either identical to, or distinct - * form the passed argument. - * @warning Do not assume anything on the alignment of the return value. - * There is no guarantee that it inherits the passed argument's - * one. - * @warning The return value shall be invalidated exactly once by either - * ruby_xfree(), ruby_xrealloc(), or ruby_xrealloc2(). It is a - * failure to pass it to system free(), because the system and Ruby - * might or might not share the same malloc() implementation. - */ -void *ruby_xrealloc(void *ptr, size_t newsiz) -RBIMPL_ATTR_NOEXCEPT(realloc(ptr, newsiz)) -; - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((2,3)) -/** - * Identical to ruby_xrealloc(), except it resizes the given storage instance - * to `newelems` * `newsiz` bytes. This is needed because the multiplication - * could integer overflow. On such situations Ruby does not try to touch the - * contents of argument pointer at all but raises Ruby level exceptions - * instead. If there is no integer overflow the behaviour is exactly the same - * as `ruby_xrealloc(ptr,nelems*elemsiz)`. - * - * This is roughly the same as reallocarray() function that OpenBSD - * etc. provides, but also interacts with our GC. - * - * @param[in] ptr A valid pointer to a storage instance that was - * previously returned from either: - * - ruby_xmalloc(), - * - ruby_xmalloc2(), - * - ruby_xcalloc(), - * - ruby_xrealloc(), or - * - ruby_xrealloc2(). - * @param[in] newelems Requested new number of elements. - * @param[in] newsiz Requested new size of each element. - * @exception rb_eNoMemError No space left for allocation. - * @exception rb_eArgError `newelems` * `newsiz` would overflow. - * @return A valid pointer to a (possibly newly allocated) storage - * instance; which has at least `newelems` * `newsiz` bytes width, - * with appropriate alignment detected by the underlying realloc() - * routine. - * @pre The passed pointer must point to a valid live storage instance. - * It is a failure to pass an already freed pointer. - * @post In case the function returns the passed pointer as-is, the - * storage instance that the pointer holds is either grown or - * shrunken to have at least `newelems` * `newsiz` bytes. - * Otherwise a valid pointer to a newly allocated storage instance - * is returned. In this case `ptr` is invalidated as if it was - * passed to ruby_xfree(). - * @note It doesn't return NULL. - * @warning Unlike some realloc() implementations, passing zero to either - * `newelems` or `elemsiz` are not the same as calling - * ruby_xfree(), because this function never returns NULL. - * Something meaningful still returns then. - * @warning It is a failure not to check the return value. Do not assume - * anything on it. It could be either identical to, or distinct - * form the passed argument. - * @warning Do not assume anything on the alignment of the return value. - * There is no guarantee that it inherits the passed argument's - * one. - * @warning The return value shall be invalidated exactly once by either - * ruby_xfree(), ruby_xrealloc(), or ruby_xrealloc2(). It is a - * failure to pass it to system free(), because the system and Ruby - * might or might not share the same malloc() implementation. - */ -void *ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz) -RBIMPL_ATTR_NOEXCEPT(realloc(ptr, newelems * newsiz)) -; - -/** - * Deallocates a storage instance. - * - * @param[out] ptr Either - * - NULL, or - * - a valid pointer previously returned from one of: - * - ruby_xmalloc(), - * - ruby_xmalloc2(), - * - ruby_xcalloc(), - * - ruby_xrealloc(), or - * - ruby_xrealloc2(). - * @pre The passed pointer must point to a valid live storage instance. - * It is a failure to pass an already freed pointer. - * @post The storage instance pointed by the passed pointer gets - * invalidated; it is no longer addressable. - * @warning Every single storage instance that was previously allocated by - * either ruby_xmalloc(), ruby_xmalloc2(), ruby_xcalloc(), - * ruby_xrealloc(), or ruby_xrealloc2() shall be invalidated - * exactly once by either passing it to ruby_xfree(), or passing - * it to either ruby_xrealloc(), ruby_xrealloc2() then check the - * return value for invalidation. - * @warning Do not pass anything other than pointers described above. For - * instance pointers returned from malloc() or mmap() shall not be - * passed to this function, because the underlying memory - * management mechanism could differ. - * @warning Do not pass any invalid pointers to this function e.g. by - * calling it twice with a same argument. - */ -void ruby_xfree(void *ptr) -RBIMPL_ATTR_NOEXCEPT(free(ptr)) -; - -#if USE_GC_MALLOC_OBJ_INFO_DETAILS -# define ruby_xmalloc(s1) ruby_xmalloc_with_location(s1, __FILE__, __LINE__) -# define ruby_xmalloc2(s1, s2) ruby_xmalloc2_with_location(s1, s2, __FILE__, __LINE__) -# define ruby_xcalloc(s1, s2) ruby_xcalloc_with_location(s1, s2, __FILE__, __LINE__) -# define ruby_xrealloc(ptr, s1) ruby_xrealloc_with_location(ptr, s1, __FILE__, __LINE__) -# define ruby_xrealloc2(ptr, s1, s2) ruby_xrealloc2_with_location(ptr, s1, s2, __FILE__, __LINE__) - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RESTRICT() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((1)) -void *ruby_xmalloc_body(size_t size) -RBIMPL_ATTR_NOEXCEPT(malloc(size)) -; - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RESTRICT() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((1,2)) -void *ruby_xmalloc2_body(size_t nelems, size_t elemsiz) -RBIMPL_ATTR_NOEXCEPT(malloc(nelems * elemsiz)) -; - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RESTRICT() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((1,2)) -void *ruby_xcalloc_body(size_t nelems, size_t elemsiz) -RBIMPL_ATTR_NOEXCEPT(calloc(nelems, elemsiz)) -; - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((2)) -void *ruby_xrealloc_body(void *ptr, size_t newsiz) -RBIMPL_ATTR_NOEXCEPT(realloc(ptr, newsiz)) -; - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_ALLOC_SIZE((2,3)) -void *ruby_xrealloc2_body(void *ptr, size_t newelems, size_t newsiz) -RBIMPL_ATTR_NOEXCEPT(realloc(ptr, newelems * newsiz)) -; - -RUBY_EXTERN const char *ruby_malloc_info_file; -RUBY_EXTERN int ruby_malloc_info_line; - -static inline void * -ruby_xmalloc_with_location(size_t s, const char *file, int line) -{ - void *ptr; - ruby_malloc_info_file = file; - ruby_malloc_info_line = line; - ptr = ruby_xmalloc_body(s); - ruby_malloc_info_file = NULL; - return ptr; -} - -static inline void * -ruby_xmalloc2_with_location(size_t s1, size_t s2, const char *file, int line) -{ - void *ptr; - ruby_malloc_info_file = file; - ruby_malloc_info_line = line; - ptr = ruby_xmalloc2_body(s1, s2); - ruby_malloc_info_file = NULL; - return ptr; -} - -static inline void * -ruby_xcalloc_with_location(size_t s1, size_t s2, const char *file, int line) -{ - void *ptr; - ruby_malloc_info_file = file; - ruby_malloc_info_line = line; - ptr = ruby_xcalloc_body(s1, s2); - ruby_malloc_info_file = NULL; - return ptr; -} - -static inline void * -ruby_xrealloc_with_location(void *ptr, size_t s, const char *file, int line) -{ - void *rptr; - ruby_malloc_info_file = file; - ruby_malloc_info_line = line; - rptr = ruby_xrealloc_body(ptr, s); - ruby_malloc_info_file = NULL; - return rptr; -} - -static inline void * -ruby_xrealloc2_with_location(void *ptr, size_t s1, size_t s2, const char *file, int line) -{ - void *rptr; - ruby_malloc_info_file = file; - ruby_malloc_info_line = line; - rptr = ruby_xrealloc2_body(ptr, s1, s2); - ruby_malloc_info_file = NULL; - return rptr; -} -#endif - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RBIMPL_XMALLOC_H */ diff --git a/libs/libruby/ruby/io.h b/libs/libruby/ruby/io.h deleted file mode 100644 index 88029b1..0000000 --- a/libs/libruby/ruby/io.h +++ /dev/null @@ -1,1022 +0,0 @@ -#ifndef RUBY_IO_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_IO_H 1 -/** - * @file - * @author $Author$ - * @date Fri Nov 12 16:47:09 JST 1993 - * @copyright Copyright (C) 1993-2007 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ -#include "ruby/internal/config.h" - -#include -#include "ruby/encoding.h" - -#if defined(HAVE_STDIO_EXT_H) -#include -#endif - -#include - -/** @cond INTERNAL_MACRO */ -#if defined(HAVE_POLL) -# ifdef _AIX -# define reqevents events -# define rtnevents revents -# endif -# include -# ifdef _AIX -# undef reqevents -# undef rtnevents -# undef events -# undef revents -# endif -# define RB_WAITFD_IN POLLIN -# if defined(POLLPRI) -# define RB_WAITFD_PRI POLLPRI -# else -# define RB_WAITFD_PRI 0 -# endif -# define RB_WAITFD_OUT POLLOUT -#else -# define RB_WAITFD_IN 0x001 -# define RB_WAITFD_PRI 0x002 -# define RB_WAITFD_OUT 0x004 -#endif -/** @endcond */ - -#include "ruby/internal/attr/const.h" -#include "ruby/internal/attr/pure.h" -#include "ruby/internal/attr/noreturn.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/value.h" -#include "ruby/backward/2/attributes.h" /* PACKED_STRUCT_UNALIGNED */ - -// IO#wait, IO#wait_readable, IO#wait_writable, IO#wait_priority are defined by this implementation. -#define RUBY_IO_WAIT_METHODS - -// Used as the default timeout argument to `rb_io_wait` to use the `IO#timeout` value. -#define RUBY_IO_TIMEOUT_DEFAULT Qnil - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -struct stat; -struct timeval; - -/** - * Indicates that a timeout has occurred while performing an IO operation. - */ -RUBY_EXTERN VALUE rb_eIOTimeoutError; - -/** - * Type of events that an IO can wait. - * - * @internal - * - * This is visible from extension libraries because `io/wait` wants it. - */ -typedef enum { - RUBY_IO_READABLE = RB_WAITFD_IN, /**< `IO::READABLE` */ - RUBY_IO_WRITABLE = RB_WAITFD_OUT, /**< `IO::WRITABLE` */ - RUBY_IO_PRIORITY = RB_WAITFD_PRI, /**< `IO::PRIORITY` */ -} rb_io_event_t; - -/** - * IO buffers. This is an implementation detail of ::rb_io_t::wbuf and - * ::rb_io_t::rbuf. People don't manipulate it directly. - */ -PACKED_STRUCT_UNALIGNED(struct rb_io_buffer_t { - - /** Pointer to the underlying memory region, of at least `capa` bytes. */ - char *ptr; /* off + len <= capa */ - - /** Offset inside of `ptr`. */ - int off; - - /** Length of the buffer. */ - int len; - - /** Designed capacity of the buffer. */ - int capa; -}); - -/** @alias{rb_io_buffer_t} */ -typedef struct rb_io_buffer_t rb_io_buffer_t; - -/** Decomposed encoding flags (e.g. `"enc:enc2""`). */ -/* - * enc enc2 read action write action - * NULL NULL force_encoding(default_external) write the byte sequence of str - * e1 NULL force_encoding(e1) convert str.encoding to e1 - * e1 e2 convert from e2 to e1 convert str.encoding to e2 - */ -struct rb_io_enc_t { - /** Internal encoding. */ - rb_encoding *enc; - /** External encoding. */ - rb_encoding *enc2; - /** - * Flags. - * - * @see enum ::ruby_econv_flag_type - */ - int ecflags; - /** - * Flags as Ruby hash. - * - * @internal - * - * This is set. But used from nowhere maybe? - */ - VALUE ecopts; -}; - -/** Ruby's IO, metadata and buffers. */ -typedef struct rb_io_t { - - /** The IO's Ruby level counterpart. */ - VALUE self; - - /** stdio ptr for read/write, if available. */ - FILE *stdio_file; - - /** file descriptor. */ - int fd; - - /** mode flags: FMODE_XXXs */ - int mode; - - /** child's pid (for pipes) */ - rb_pid_t pid; - - /** number of lines read */ - int lineno; - - /** pathname for file */ - VALUE pathv; - - /** finalize proc */ - void (*finalize)(struct rb_io_t*,int); - - /** Write buffer. */ - rb_io_buffer_t wbuf; - - /** - * (Byte) read buffer. Note also that there is a field called - * ::rb_io_t::cbuf, which also concerns read IO. - */ - rb_io_buffer_t rbuf; - - /** - * Duplex IO object, if set. - * - * @see rb_io_set_write_io() - */ - VALUE tied_io_for_writing; - - struct rb_io_enc_t encs; /**< Decomposed encoding flags. */ - - /** Encoding converter used when reading from this IO. */ - rb_econv_t *readconv; - - /** - * rb_io_ungetc() destination. This buffer is read before checking - * ::rb_io_t::rbuf - */ - rb_io_buffer_t cbuf; - - /** Encoding converter used when writing to this IO. */ - rb_econv_t *writeconv; - - /** - * This is, when set, an instance of ::rb_cString which holds the "common" - * encoding. Write conversion can convert strings twice... In case - * conversion from encoding X to encoding Y does not exist, Ruby finds an - * encoding Z that bridges the two, so that X to Z to Y conversion happens. - */ - VALUE writeconv_asciicompat; - - /** Whether ::rb_io_t::writeconv is already set up. */ - int writeconv_initialized; - - /** - * Value of ::rb_io_t::rb_io_enc_t::ecflags stored right before - * initialising ::rb_io_t::writeconv. - */ - int writeconv_pre_ecflags; - - /** - * Value of ::rb_io_t::rb_io_enc_t::ecopts stored right before initialising - * ::rb_io_t::writeconv. - */ - VALUE writeconv_pre_ecopts; - - /** - * This is a Ruby level mutex. It avoids multiple threads to write to an - * IO at once; helps for instance rb_io_puts() to ensure newlines right - * next to its arguments. - * - * This of course doesn't help inter-process IO interleaves, though. - */ - VALUE write_lock; - - /** - * The timeout associated with this IO when performing blocking operations. - */ - VALUE timeout; -} rb_io_t; - -/** @alias{rb_io_enc_t} */ -typedef struct rb_io_enc_t rb_io_enc_t; - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define HAVE_RB_IO_T 1 - -/** - * @name Possible flags for ::rb_io_t::mode - * - * @{ - */ - -/** The IO is opened for reading. */ -#define FMODE_READABLE 0x00000001 - -/** The IO is opened for writing. */ -#define FMODE_WRITABLE 0x00000002 - -/** The IO is opened for both read/write. */ -#define FMODE_READWRITE (FMODE_READABLE|FMODE_WRITABLE) - -/** - * The IO is in "binary mode". This is not what everything rb_io_binmode() - * concerns. This low-level flag is to stop CR <-> CRLF conversions that would - * happen in the underlying operating system. - * - * Setting this one and #FMODE_TEXTMODE at the same time is a contradiction. - * Setting this one and #ECONV_NEWLINE_DECORATOR_MASK at the same time is also - * a contradiction. - */ -#define FMODE_BINMODE 0x00000004 - -/** - * The IO is in "sync mode". All output is immediately flushed to the - * underlying operating system then. Can be set via rb_io_synchronized(), but - * there is no way except calling `IO#sync=` to reset. - */ -#define FMODE_SYNC 0x00000008 - -/** - * The IO is a TTY. What is a TTY and what isn't depends on the underlying - * operating system's `isatty(3)` output. You cannot change this. - */ -#define FMODE_TTY 0x00000010 - -/** - * Ruby eventually detects that the IO is bidirectional. For instance a TTY - * has such property. There are several other things known to be duplexed. - * Additionally you (extension library authors) can also implement your own - * bidirectional IO subclasses. One of such example is `Socket`. - */ -#define FMODE_DUPLEX 0x00000020 - -/** - * The IO is opened for appending. This mode always writes at the end of the - * IO. Ruby manages this flag for record but basically the logic behind this - * mode is at the underlying operating system. We almost do nothing. - */ -#define FMODE_APPEND 0x00000040 - -/** - * The IO is opened for creating. This makes sense only when the destination - * file does not exist at the time the IO object was created. This is the - * default mode for writing, but you can pass `"r+"` to `IO.open` etc., to - * reroute this creation. - */ -#define FMODE_CREATE 0x00000080 -/* #define FMODE_NOREVLOOKUP 0x00000100 */ - -/** - * This flag amends the effect of #FMODE_CREATE, so that if there already is a - * file at the given path the operation fails. Using this you can be sure that - * the file you get is a fresh new one. - */ -#define FMODE_EXCL 0x00000400 - -/** - * This flag amends the effect of #FMODE_CREATE, so that if there already is a - * file at the given path it gets truncated. - */ -#define FMODE_TRUNC 0x00000800 - -/** - * The IO is in "text mode". On systems where such mode make sense, this flag - * changes the way the IO handles the contents. On POSIX systems it is - * basically a no-op, but with this flag set you can optionally let Ruby - * manually convert newlines, unlike when in binary mode: - * - * ```ruby - * IO.open("/p/a/t/h", "wt", crlf_newline: true) # "wb" is NG. - * ``` - * - * Setting this one and #FMODE_BINMODE at the same time is a contradiction. - */ -#define FMODE_TEXTMODE 0x00001000 -/* #define FMODE_PREP 0x00010000 */ -/* #define FMODE_SIGNAL_ON_EPIPE 0x00020000 */ - -/** - * This flag amends the encoding of the IO so that the BOM of the contents of - * the IO takes effect. - */ -#define FMODE_SETENC_BY_BOM 0x00100000 -/* #define FMODE_UNIX 0x00200000 */ -/* #define FMODE_INET 0x00400000 */ -/* #define FMODE_INET6 0x00800000 */ - -/** @} */ - -/** - * Queries the underlying IO pointer. - * - * @param[in] obj An IO object. - * @param[out] fp A variable of type ::rb_io_t. - * @exception rb_eFrozenError `obj` is frozen. - * @exception rb_eIOError `obj` is closed. - * @post `fp` holds `obj`'s underlying IO. - */ -#define RB_IO_POINTER(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr) - -/** - * This is an old name of #RB_IO_POINTER. Not sure if we want to deprecate - * this macro. There still are tons of usages out there in the wild. - */ -#define GetOpenFile RB_IO_POINTER - -/** - * Fills an IO object. This makes the best sense when called from inside of an - * `#initialize` method of a 3rd party extension library that inherits - * ::rb_cIO. - * - * If the passed IO is already opened for something it first closes that and - * opens a new one instead. - * - * @param[out] obj An IO object to fill in. - * @param[out] fp A variable of type ::rb_io_t. - * @exception rb_eTypeError `obj` is not ::RUBY_T_FILE. - * @post `fp` holds `obj`'s underlying IO. - */ -#define RB_IO_OPEN(obj, fp) do {\ - (fp) = rb_io_make_open_file(obj);\ -} while (0) - -/** - * This is an old name of #RB_IO_OPEN. Not sure if we want to deprecate this - * macro. There still are usages out there in the wild. - */ -#define MakeOpenFile RB_IO_OPEN - -/** - * @private - * - * This is an implementation detail of #RB_IO_OPEN. People don't use it - * directly. - * - * @param[out] obj An IO object to fill in. - * @exception rb_eTypeError `obj` is not ::RUBY_T_FILE. - * @return `obj`'s backend IO. - * @post `obj` is initialised. - */ -rb_io_t *rb_io_make_open_file(VALUE obj); - -/** - * Finds or creates a stdio's file structure from a Ruby's one. This can be - * handy if you want to call an external API that accepts `FILE *`. - * - * @note Note however, that `FILE`s can have their own buffer. Mixing Ruby's - * and stdio's file are basically dangerous. Use with care. - * - * @param[in,out] fptr Target IO. - * @return A stdio's file, created if absent. - * @post `fptr` has its corresponding stdio's file. - * - * @internal - * - * We had rich support for `FILE` before! In the days of 1.8.x ::rb_io_t was - * like this: - * - * ```CXX - * typedef struct rb_io_t { - * FILE *f; // stdio ptr for read/write - * FILE *f2; // additional ptr for rw pipes - * int mode; // mode flags - * int pid; // child's pid (for pipes) - * int lineno; // number of lines read - * char *path; // pathname for file - * void (*finalize) _((struct rb_io_t*,int)); // finalize proc - * } rb_io_t; - *``` - * - * But we eventually abandoned this layout. It was too difficult. We could - * not have fine-grained control over the `f` field. - * - * - `FILE` tends to be an opaque struct. It does not interface well with - * `select(2)` etc. This makes IO multiplexing quite hard. Using stdio, - * there is arguably no portable way to know if `fwrite(3)` blocks. - * - * - Nonblocking mode, which is another core concept that enables IO - * multiplexing, does not interface with stdio routines at all. - * - * - Detection of duplexed IO is also hard for the same reason. - * - * - `feof(3)` is not portable. - * https://mail.python.org/pipermail/python-dev/2001-January/011390.html - * - * - Solaris was a thing back then. They could not have more than 256 `FILE` - * structures at a time. Their file descriptors ware stored in an - * `unsigned char`. - * - * - It is next to impossible to avoid SEGV, especially when a thread tries to - * `ungetc(3)`-ing from a `FILE` which is `fread(3)`-ed by another one. - * - * In short, it is a bad idea to let someone else manage IO buffers, especially - * someone you cannot control. This still applies to extension libraries - * methinks. Ruby doesn't prevent you from shooting yourself in the foot, but - * consider yourself warned here. - */ -FILE *rb_io_stdio_file(rb_io_t *fptr); - -/** - * Identical to rb_io_stdio_file(), except it takes file descriptors instead of - * Ruby's IO. It can also be seen as a compatibility layer to wrap - * `fdopen(3)`. Nowadays all supporting systems, including Windows, have - * `fdopen`. Why not use them. - * - * @param[in] fd A file descriptor. - * @param[in] modestr C string, something like `"r+"`. - * @exception rb_eSystemCallError `fdopen` failed for some reason. - * @return A stdio's file associated with `fd`. - * @note Interpretation of `modestr` depends on the underlying operating - * system. On glibc you might be able to pass e.g. `"rm"`, but - * that's an extension to POSIX. - */ -FILE *rb_fdopen(int fd, const char *modestr); - -/** - * Maps a file mode string (that rb_file_open() takes) into a mixture of - * `FMODE_` flags. This for instance returns - * `FMODE_WRITABLE | FMODE_TRUNC | FMODE_CREATE | FMODE_EXCL` for `"wx"`. - * - * @note You cannot pass this return value to OS provided `open(2)` etc. - * - * @param[in] modestr File mode, in C's string. - * @exception rb_eArgError `modestr` is broken. - * @return A set of flags. - * - * @internal - * - * rb_io_modestr_fmode() is not a pure function because it raises. - */ -int rb_io_modestr_fmode(const char *modestr); - -/** - * Identical to rb_io_modestr_fmode(), except it returns a mixture of `O_` - * flags. This for instance returns `O_WRONLY | O_TRUNC | O_CREAT | O_EXCL` for - * `"wx"`. - * - * @param[in] modestr File mode, in C's string. - * @exception rb_eArgError `modestr` is broken. - * @return A set of flags. - * - * @internal - * - * rb_io_modestr_oflags() is not a pure function because it raises. - */ -int rb_io_modestr_oflags(const char *modestr); - -RBIMPL_ATTR_CONST() -/** - * Converts an oflags (that rb_io_modestr_oflags() returns) to a fmode (that - * rb_io_mode_flags() returns). This is a purely functional operation. - * - * @param[in] oflags A set of `O_` flags. - * @return Corresponding set of `FMODE_` flags. - */ -int rb_io_oflags_fmode(int oflags); - -/** - * Asserts that an IO is opened for writing. - * - * @param[in] fptr An IO you want to write to. - * @exception rb_eIOError `fptr` is not for writing. - * @post Upon successful return `fptr` is ready for writing. - * - * @internal - * - * The parameter must have been `const rb_io_t *`. - */ -void rb_io_check_writable(rb_io_t *fptr); - -/** @alias{rb_io_check_byte_readable} */ -void rb_io_check_readable(rb_io_t *fptr); - -/** - * Asserts that an IO is opened for character-based reading. A character can - * be wider than a byte. Because of this we have to buffer reads from - * descriptors. This fiction checks if that is possible. - * - * @param[in] fptr An IO you want to read characters from. - * @exception rb_eIOError `fptr` is not for reading. - * @post Upon successful return `fptr` is ready for reading characters. - * - * @internal - * - * Unlike rb_io_check_writable() the parameter cannot be `const rb_io_t *`. - * Behind the scene this operation flushes its write buffers. This is because - * of OpenSSL. They mandate this way. - * - * @see "Can I use OpenSSL's SSL library with non-blocking I/O?" - * https://www.openssl.org/docs/faq.html - */ -void rb_io_check_char_readable(rb_io_t *fptr); - -/** - * Asserts that an IO is opened for byte-based reading. Byte-based and - * character-based reading operations cannot be mixed at a time. - * - * @param[in] fptr An IO you want to read characters from. - * @exception rb_eIOError `fptr` is not for reading. - * @post Upon successful return `fptr` is ready for reading bytes. - */ -void rb_io_check_byte_readable(rb_io_t *fptr); - -/** - * Destroys the given IO. Any pending operations are flushed. - * - * @note It makes no sense to call this function from anywhere outside of your - * class' ::rb_data_type_struct::dfree. - * - * @param[out] fptr IO to close. - * @post `fptr` is no longer a valid pointer. - */ -int rb_io_fptr_finalize(rb_io_t *fptr); - -/** - * Sets #FMODE_SYNC. - * - * @note There is no way for C extensions to undo this operation. - * - * @param[out] fptr IO to set the flag. - * @exception rb_eIOError `fptr` is not opened. - * @post `fptr` is in sync mode. - */ -void rb_io_synchronized(rb_io_t *fptr); - -/** - * Asserts that the passed IO is initialised. - * - * @param[in] fptr IO that you expect be initialised. - * @exception rb_eIOError `fptr` is not initialised. - * @post `fptr` is initialised. - */ -void rb_io_check_initialized(rb_io_t *fptr); - -/** - * This badly named function asserts that the passed IO is _open_. - * - * @param[in] fptr An IO - * @exception rb_eIOError `fptr` is closed. - * @post `fptr` is open. - */ -void rb_io_check_closed(rb_io_t *fptr); - -/** - * Identical to rb_io_check_io(), except it raises exceptions on conversion - * failures. - * - * @param[in] io Target object. - * @exception rb_eTypeError No implicit conversion to IO. - * @return Return value of `obj.to_io`. - * @see rb_str_to_str - * @see rb_ary_to_ary - */ -VALUE rb_io_get_io(VALUE io); - -/** - * Try converting an object to its IO representation using its `to_io` method, - * if any. If there is no such thing, returns ::RUBY_Qnil. - * - * @param[in] io Arbitrary ruby object to convert. - * @exception rb_eTypeError `obj.to_io` returned something non-IO. - * @retval RUBY_Qnil No conversion from `obj` to IO defined. - * @retval otherwise Converted IO representation of `obj`. - * @see rb_check_array_type - * @see rb_check_string_type - * @see rb_check_hash_type - */ -VALUE rb_io_check_io(VALUE io); - -/** - * Queries the tied IO for writing. An IO can be duplexed. Fine. The thing - * is, that characteristics could sometimes be achieved by the underlying - * operating system (for instance a socket's duplexity is by nature) but - * sometimes by us. Notable example is a bidirectional pipe. Suppose you - * have: - * - * ```ruby - * fp = IO.popen("-", "r+") - * ``` - * - * This pipe is duplexed (the `"r+"`). You can both read from/write to it. - * However your operating system may or may not implement bidirectional pipes. - * FreeBSD is one of such operating systems known to have one; OTOH Linux is - * known to lack such things. So to achieve maximum portability, Ruby's - * bidirectional pipes are done purely in user land. A pipe in ruby can have - * multiple file descriptors; one for reading and the other for writing. This - * API is to obtain the IO port which corresponds to the passed one, for - * writing. - * - * @param[in] io An IO. - * @return Its tied IO for writing, if any, or `io` itself otherwise. - */ -VALUE rb_io_get_write_io(VALUE io); - -/** - * Assigns the tied IO for writing. See rb_io_get_write_io() for what a "tied - * IO for writing" is. - * - * @param[out] io An IO. - * @param[in] w Another IO. - * @retval RUBY_Qnil There was no tied IO for writing for `io`. - * @retval otherwise The IO formerly tied to `io`. - * @post `io` ties `w` for writing. - * - * @internal - * - * @shyouhei doesn't think there is any needs of this function for 3rd party - * extension libraries. - */ -VALUE rb_io_set_write_io(VALUE io, VALUE w); - -/** - * Instructs the OS to put its internal file structure into "nonblocking mode". - * This is an in-Kernel concept. Reading from/writing to that file using C - * function calls would return -1 with errno set. However when it comes to a - * ruby program, we hide that error behind our `IO#read` method. Ruby level - * `IO#read` blocks regardless of this flag. If you want to avoid blocking, - * you should consider using methods like `IO#readpartial`. - * - * ```ruby - * require 'io/nonblock' - * STDIN.nonblock = true - * STDIN.gets # blocks. - * ``` - * - * As of writing there is a room of this API in Fiber schedulers. A Fiber - * scheduler could be written in a way its behaviour depends on this property. - * You need an in-depth understanding of how schedulers work to properly - * leverage this, though. - * - * @note Note however that nonblocking-ness propagates across process - * boundaries. You must really carefully watch your step when turning - * for instance `stderr` into nonblock mode (it tends to be shared - * across many processes). Also it is a complete disaster to mix a - * nonblocking file and stdio, and `stderr` tends to be under control of - * stdio in other processes. - * - * @param[out] fptr An IO that is to ne nonblocking. - * @post Descriptor that `fptr` describes is under nonblocking mode. - * - * @internal - * - * There is `O_NONBLOCK` but not `FMODE_NONBLOCK`. You cannot atomically - * create a nonblocking file descriptor using our API. - */ -void rb_io_set_nonblock(rb_io_t *fptr); - -/** - * Returns an integer representing the numeric file descriptor for - * io. - * - * @param[in] io An IO. - * @retval int A file descriptor. - */ -int rb_io_descriptor(VALUE io); - -/** - * This function breaks down the option hash that `IO#initialize` takes into - * components. This is an implementation detail of rb_io_extract_modeenc() - * today. People prefer that API instead. - * - * @param[in] opt The hash to decompose. - * @param[out] enc_p Return value buffer. - * @param[out] enc2_p Return value buffer. - * @param[out] fmode_p Return value buffer. - * @exception rb_eTypeError `opt` is broken. - * @exception rb_eArgError Specified encoding does not exist. - * @retval 1 Components got extracted. - * @retval 0 Otherwise. - * @post `enc_p` is the specified internal encoding. - * @post `enc2_p` is the specified external encoding. - * @post `fmode_p` is the specified set of `FMODE_` modes. - */ -int rb_io_extract_encoding_option(VALUE opt, rb_encoding **enc_p, rb_encoding **enc2_p, int *fmode_p); - -/** - * This function can be seen as an extended version of - * rb_io_extract_encoding_option() that not only concerns the option hash but - * also mode string and so on. This should be mixed with rb_scan_args() like: - * - * ```CXX - * // This method mimics File.new - * static VALUE - * your_method(int argc, const VALUE *argv, VALUE self) - * { - * VALUE f; // file name - * VALUE m; // open mode - * VALUE p; // permission (O_CREAT) - * VALUE k; // keywords - * rb_io_enc_t c; // converter - * int oflags; - * int fmode; - * - * int n = rb_scan_args(argc, argv, "12:", &f, &m, &p, &k); - * rb_io_extract_modeenc(&m, &p, k, &oflags, &fmode, &c); - * - * // Every local variables declared so far has been properly filled here. - * ... - * } - * ``` - * - * @param[in,out] vmode_p Pointer to a mode object. - * @param[in,out] vperm_p Pointer to a permission object. - * @param[in] opthash Keyword arguments - * @param[out] oflags_p `O_` flags return buffer. - * @param[out] fmode_p `FMODE_` flags return buffer. - * @param[out] convconfig_p Encoding config return buffer. - * @exception rb_eTypeError Unexpected object (e.g. Time) passed. - * @exception rb_eArgError Contradiction inside of params. - * @post `*vmode_p` is a mode object (filled if any). - * @post `*vperm_p` is a permission object (filled if any). - * @post `*oflags_p` is filled with `O_` flags. - * @post `*fmode_p` is filled with `FMODE_` flags. - * @post `*convconfig_p` is filled with conversion instructions. - * - * @internal - * - * ```rbs - * class File - * def initialize: ( - * (String | int) path, - * ?(String | int) fmode, - * ?(String | int) perm, - * ?mode: (String | int), - * ?flags: int, - * ?external_encoding: (Encoding | String), - * ?internal_encoding: (Encoding | String), - * ?encoding: String, - * ?textmode: bool, - * ?binmode: bool, - * ?autoclose: bool, - * ?invalid: :replace, - * ?undef: :replace, - * ?replace: String, - * ?fallback: (Hash | Proc | Method), - * ?xml: (:text | :attr), - * ?crlf_newline: bool, - * ?cr_newline: bool, - * ?universal_newline: bool - * ) -> void - * ``` - */ -void rb_io_extract_modeenc(VALUE *vmode_p, VALUE *vperm_p, VALUE opthash, int *oflags_p, int *fmode_p, rb_io_enc_t *convconfig_p); - -/* :TODO: can this function be __attribute__((warn_unused_result)) or not? */ -/** - * Buffered write to the passed IO. - * - * @param[out] io Destination IO. - * @param[in] buf Contents to go to `io`. - * @param[in] size Number of bytes of `buf`. - * @exception rb_eFrozenError `io` is frozen. - * @exception rb_eIOError `io` is not open for writing. - * @exception rb_eSystemCallError `writev(2)` failed for some reason. - * @retval -1 Write failed. - * @retval otherwise Number of bytes actually written. - * @post `buf` is written to `io`. - * @note Partial write is a thing. It is a failure not to check the - * return value. - */ -ssize_t rb_io_bufwrite(VALUE io, const void *buf, size_t size); - -//RBIMPL_ATTR_DEPRECATED(("use rb_io_maybe_wait_readable")) -/** - * Blocks until the passed file descriptor gets readable. - * - * @deprecated We now prefer rb_io_maybe_wait_readable() over this one. - * @param[in] fd The file descriptor to wait. - * @exception rb_eIOError Bad file descriptor. - * @return 0 or 1 (meaning unclear). - * @post `fd` is ready for reading. - */ -int rb_io_wait_readable(int fd); - -//RBIMPL_ATTR_DEPRECATED(("use rb_io_maybe_wait_writable")) -/** - * Blocks until the passed file descriptor gets writable. - * - * @deprecated We now prefer rb_io_maybe_wait_writable() over this one. - * @param[in] fd The file descriptor to wait. - * @exception rb_eIOError Bad file descriptor. - * @return 0 or 1 (meaning unclear). - */ -int rb_io_wait_writable(int fd); - -//RBIMPL_ATTR_DEPRECATED(("use rb_io_wait")) -/** - * Blocks until the passed file descriptor is ready for the passed events. - * - * @deprecated We now prefer rb_io_maybe_wait() over this one. - * @param[in] fd The file descriptor to wait. - * @param[in] events A set of enum ::rb_io_event_t. - * @param[in,out] tv Timeout. - * @retval 0 Operation timed out. - * @retval -1 `select(2)` failed for some reason. - * @retval otherwise A set of enum ::rb_io_event_t. - * @note Depending on your operating system `tv` might or might not - * be updated (POSIX permits both). Portable programs must - * have no assumptions. - */ -int rb_wait_for_single_fd(int fd, int events, struct timeval *tv); - -/** - * Get the timeout associated with the specified io object. - * - * @param[in] io An IO object. - * @retval RUBY_Qnil There is no associated timeout. - * @retval Otherwise The timeout value. - */ -VALUE rb_io_timeout(VALUE io); - -/** - * Set the timeout associated with the specified io object. This timeout is - * used as a best effort timeout to prevent operations from blocking forever. - * - * @param[in] io An IO object. - * @param[in] timeout A timeout value. Must respond to #to_f. - * @ - */ -VALUE rb_io_set_timeout(VALUE io, VALUE timeout); - -/** - * Blocks until the passed IO is ready for the passed events. The "events" - * here is a Ruby level integer, which is an OR-ed value of `IO::READABLE`, - * `IO::WRITable`, and `IO::PRIORITY`. - * - * If timeout is `Qnil`, it will use the default timeout as given by - * `rb_io_timeout(io)`. - * - * @param[in] io An IO object to wait. - * @param[in] events See above. - * @param[in] timeout Time, or numeric seconds since UNIX epoch. - * If Qnil, use the default timeout. If Qfalse - * or Qundef, wait forever. - * @exception rb_eIOError `io` is not open. - * @exception rb_eRangeError `timeout` is out of range. - * @exception rb_eSystemCallError `select(2)` failed for some reason. - * @retval RUBY_Qfalse Operation timed out. - * @retval Otherwise Actual events reached. - */ -VALUE rb_io_wait(VALUE io, VALUE events, VALUE timeout); - -/** - * Identical to rb_io_wait() except it additionally takes previous errno. If - * the passed errno indicates for instance `EINTR`, this function returns - * immediately. This is expected to be called in a loop. - * - * ```CXX - * while (true) { - * - * ... // Your interesting operation here - * // `errno` could be updated - * - * rb_io_maybe_wait(errno, io, ev, Qnil); - * } - * ``` - * - * @param[in] error System errno. - * @param[in] io An IO object to wait. - * @param[in] events An integer set of interests. - * @param[in] timeout Time, or numeric seconds since UNIX epoch. - * @exception rb_eIOError `io` is not open. - * @exception rb_eRangeError `timeout` is out of range. - * @exception rb_eSystemCallError `select(2)` failed for some reason. - * @retval RUBY_Qfalse Operation timed out. - * @retval Otherwise Actual events reached. - * - * @internal - * - * This function to return ::RUBY_Qfalse on timeout could be unintended. It - * seems timeout feature has some rough edge. - */ -VALUE rb_io_maybe_wait(int error, VALUE io, VALUE events, VALUE timeout); - -/** - * Blocks until the passed IO is ready for reading, if that makes sense for the - * passed errno. This is a special case of rb_io_maybe_wait() that only - * concerns for reading. - * - * @param[in] error System errno. - * @param[in] io An IO object to wait. - * @param[in] timeout Time, or numeric seconds since UNIX epoch. - * @exception rb_eIOError `io` is not open. - * @exception rb_eRangeError `timeout` is out of range. - * @exception rb_eSystemCallError `select(2)` failed for some reason. - * @retval 0 Operation timed out. - * @retval Otherwise Always returns ::RUBY_IO_READABLE. - */ -int rb_io_maybe_wait_readable(int error, VALUE io, VALUE timeout); - -/** - * Blocks until the passed IO is ready for writing, if that makes sense for the - * passed errno. This is a special case of rb_io_maybe_wait() that only - * concernsfor writing. - * - * @param[in] error System errno. - * @param[in] io An IO object to wait. - * @param[in] timeout Time, or numeric seconds since UNIX epoch. - * @exception rb_eIOError `io` is not open. - * @exception rb_eRangeError `timeout` is out of range. - * @exception rb_eSystemCallError `select(2)` failed for some reason. - * @retval 0 Operation timed out. - * @retval Otherwise Always returns ::RUBY_IO_WRITABLE. - */ -int rb_io_maybe_wait_writable(int error, VALUE io, VALUE timeout); - -/** @cond INTERNAL_MACRO */ -/* compatibility for ruby 1.8 and older */ -#define rb_io_mode_flags(modestr) [<"rb_io_mode_flags() is obsolete; use rb_io_modestr_fmode()">] -#define rb_io_modenum_flags(oflags) [<"rb_io_modenum_flags() is obsolete; use rb_io_oflags_fmode()">] -/** @endcond */ - -/** - * @deprecated This function once was a thing in the old days, but makes no - * sense any longer today. Exists here for backwards - * compatibility only. You can safely forget about it. - * - * @param[in] obj Object in question. - * @exception rb_eFrozenError obj is frozen. - * @return The passed `obj` - */ -VALUE rb_io_taint_check(VALUE obj); - -RBIMPL_ATTR_NORETURN() -/** - * Utility function to raise ::rb_eEOFError. - * - * @exception rb_eEOFError End of file situation. - * @note It never returns. - */ -void rb_eof_error(void); - -/** - * Blocks until there is a pending read in the passed IO. If there already is - * it just returns. - * - * @param[out] fptr An IO to wait for reading. - * @post The are bytes to be read. - */ -void rb_io_read_check(rb_io_t *fptr); - -RBIMPL_ATTR_PURE() -/** - * Queries if the passed IO has any pending reads. Unlike rb_io_read_check() - * this doesn't block; has no side effects. - * - * @param[in] fptr An IO which can have pending reads. - * @retval 0 The IO is empty. - * @retval 1 There is something buffered. - */ -int rb_io_read_pending(rb_io_t *fptr); - -/** - * Constructs an instance of ::rb_cStat from the passed information. - * - * @param[in] st A stat. - * @return Allocated new instance of ::rb_cStat. - */ -VALUE rb_stat_new(const struct stat *st); - -/* gc.c */ - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_IO_H */ diff --git a/libs/libruby/ruby/io/buffer.h b/libs/libruby/ruby/io/buffer.h deleted file mode 100644 index 88e5598..0000000 --- a/libs/libruby/ruby/io/buffer.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef RUBY_IO_BUFFER_H -#define RUBY_IO_BUFFER_H -/** - * @file - * @author Samuel Williams - * @date Fri 2 Jul 2021 16:29:01 NZST - * @copyright Copyright (C) 2021 Samuel Williams - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ - -#pragma once - -#include "ruby/ruby.h" -#include "ruby/internal/config.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -// WARNING: This entire interface is experimental and may change in the future! -#define RB_IO_BUFFER_EXPERIMENTAL 1 - -#define RUBY_IO_BUFFER_VERSION 2 - -RUBY_EXTERN VALUE rb_cIOBuffer; -RUBY_EXTERN size_t RUBY_IO_BUFFER_PAGE_SIZE; -RUBY_EXTERN size_t RUBY_IO_BUFFER_DEFAULT_SIZE; - -enum rb_io_buffer_flags { - // The memory in the buffer is owned by someone else. - // More specifically, it means that someone else owns the buffer and we shouldn't try to resize it. - RB_IO_BUFFER_EXTERNAL = 1, - // The memory in the buffer is allocated internally. - RB_IO_BUFFER_INTERNAL = 2, - // The memory in the buffer is mapped. - // A non-private mapping is marked as external. - RB_IO_BUFFER_MAPPED = 4, - - // A mapped buffer that is also shared. - RB_IO_BUFFER_SHARED = 8, - - // The buffer is locked and cannot be resized. - // More specifically, it means we can't change the base address or size. - // A buffer is typically locked before a system call that uses the data. - RB_IO_BUFFER_LOCKED = 32, - - // The buffer mapping is private and will not impact other processes or the underlying file. - RB_IO_BUFFER_PRIVATE = 64, - - // The buffer is read-only and cannot be modified. - RB_IO_BUFFER_READONLY = 128 -}; - -enum rb_io_buffer_endian { - RB_IO_BUFFER_LITTLE_ENDIAN = 4, - RB_IO_BUFFER_BIG_ENDIAN = 8, - -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - RB_IO_BUFFER_HOST_ENDIAN = RB_IO_BUFFER_LITTLE_ENDIAN, -#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ - RB_IO_BUFFER_HOST_ENDIAN = RB_IO_BUFFER_BIG_ENDIAN, -#elif REG_DWORD == REG_DWORD_LITTLE_ENDIAN - RB_IO_BUFFER_HOST_ENDIAN = RB_IO_BUFFER_LITTLE_ENDIAN, -#elif REG_DWORD == REG_DWORD_BIG_ENDIAN - RB_IO_BUFFER_HOST_ENDIAN = RB_IO_BUFFER_BIG_ENDIAN, -#endif - - RB_IO_BUFFER_NETWORK_ENDIAN = RB_IO_BUFFER_BIG_ENDIAN -}; - -VALUE rb_io_buffer_new(void *base, size_t size, enum rb_io_buffer_flags flags); -VALUE rb_io_buffer_map(VALUE io, size_t size, rb_off_t offset, enum rb_io_buffer_flags flags); - -VALUE rb_io_buffer_lock(VALUE self); -VALUE rb_io_buffer_unlock(VALUE self); -int rb_io_buffer_try_unlock(VALUE self); -VALUE rb_io_buffer_free(VALUE self); - -int rb_io_buffer_get_bytes(VALUE self, void **base, size_t *size); -void rb_io_buffer_get_bytes_for_reading(VALUE self, const void **base, size_t *size); -void rb_io_buffer_get_bytes_for_writing(VALUE self, void **base, size_t *size); - -VALUE rb_io_buffer_transfer(VALUE self); -void rb_io_buffer_resize(VALUE self, size_t size); -void rb_io_buffer_clear(VALUE self, uint8_t value, size_t offset, size_t length); - -// The length is the minimum required length. -VALUE rb_io_buffer_read(VALUE self, VALUE io, size_t length, size_t offset); -VALUE rb_io_buffer_pread(VALUE self, VALUE io, rb_off_t from, size_t length, size_t offset); -VALUE rb_io_buffer_write(VALUE self, VALUE io, size_t length, size_t offset); -VALUE rb_io_buffer_pwrite(VALUE self, VALUE io, rb_off_t from, size_t length, size_t offset); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_IO_BUFFER_H */ diff --git a/libs/libruby/ruby/memory_view.h b/libs/libruby/ruby/memory_view.h deleted file mode 100644 index 1ddca2d..0000000 --- a/libs/libruby/ruby/memory_view.h +++ /dev/null @@ -1,325 +0,0 @@ -#ifndef RUBY_MEMORY_VIEW_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_MEMORY_VIEW_H 1 -/** - * @file - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @brief Memory View. - */ - -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include /* size_t */ -#endif - -#ifdef HAVE_SYS_TYPES_H -# include /* ssize_t */ -#endif - -#include "ruby/internal/attr/pure.h" /* RBIMPL_ATTR_PURE */ -#include "ruby/internal/core/rtypeddata.h" /* rb_data_type_t */ -#include "ruby/internal/dllexport.h" /* RUBY_EXTERN */ -#include "ruby/internal/stdbool.h" /* bool */ -#include "ruby/internal/value.h" /* VALUE */ - -/** - * Flags passed to rb_memory_view_get(), then to ::rb_memory_view_get_func_t. - */ -enum ruby_memory_view_flags { - RUBY_MEMORY_VIEW_SIMPLE = 0, - RUBY_MEMORY_VIEW_WRITABLE = (1<<0), - RUBY_MEMORY_VIEW_FORMAT = (1<<1), - RUBY_MEMORY_VIEW_MULTI_DIMENSIONAL = (1<<2), - RUBY_MEMORY_VIEW_STRIDES = (1<<3) | RUBY_MEMORY_VIEW_MULTI_DIMENSIONAL, - RUBY_MEMORY_VIEW_ROW_MAJOR = (1<<4) | RUBY_MEMORY_VIEW_STRIDES, - RUBY_MEMORY_VIEW_COLUMN_MAJOR = (1<<5) | RUBY_MEMORY_VIEW_STRIDES, - RUBY_MEMORY_VIEW_ANY_CONTIGUOUS = RUBY_MEMORY_VIEW_ROW_MAJOR | RUBY_MEMORY_VIEW_COLUMN_MAJOR, - RUBY_MEMORY_VIEW_INDIRECT = (1<<6) | RUBY_MEMORY_VIEW_STRIDES, -}; - -/** Memory view component metadata. */ -typedef struct { - /** @see ::rb_memory_view_t::format */ - char format; - - /** :FIXME: what is a "native" size is unclear. */ - unsigned native_size_p: 1; - - /** Endian of the component */ - unsigned little_endian_p: 1; - - /** The component's offset. */ - size_t offset; - - /** The component's size. */ - size_t size; - - /** - * How many numbers of components are there. For instance "CCC"'s repeat is - * 3. - */ - size_t repeat; -} rb_memory_view_item_component_t; - -/** - * A MemoryView structure, `rb_memory_view_t`, is used for exporting objects' - * MemoryView. - * - * This structure contains the reference of the object, which is the owner of - * the MemoryView, the pointer to the head of exported memory, and the metadata - * that describes the structure of the memory. The metadata can describe - * multidimensional arrays with strides. - */ -typedef struct { - /** - * The original object that has the memory exported via this memory view. - */ - VALUE obj; - - /** The pointer to the exported memory. */ - void *data; - - /** The number of bytes in data. */ - ssize_t byte_size; - - /** true for readonly memory, false for writable memory. */ - bool readonly; - - /** - * A string to describe the format of an element, or NULL for unsigned bytes. - * The format string is a sequence of the following pack-template specifiers: - * - * c, C, s, s!, S, S!, n, v, i, i!, I, I!, l, l!, L, L!, - * N, V, f, e, g, q, q!, Q, Q!, d, E, G, j, J, x - * - * For example, "dd" for an element that consists of two double values, - * and "CCC" for an element that consists of three bytes, such as - * an RGB color triplet. - * - * Also, the value endianness can be explicitly specified by '<' or '>' - * following a value type specifier. - * - * The items are packed contiguously. When you emulate the alignment of - * structure members, put '|' at the beginning of the format string, - * like "|iqc". On x86_64 Linux ABI, the size of the item by this format - * is 24 bytes instead of 13 bytes. - */ - const char *format; - - /** - * The number of bytes in each element. - * item_size should equal to rb_memory_view_item_size_from_format(format). */ - ssize_t item_size; - - /** Description of each components. */ - struct { - /** - * The array of rb_memory_view_item_component_t that describes the - * item structure. rb_memory_view_prepare_item_desc and - * rb_memory_view_get_item allocate this memory if needed, - * and rb_memory_view_release frees it. */ - const rb_memory_view_item_component_t *components; - - /** The number of components in an item. */ - size_t length; - } item_desc; - - /** The number of dimension. */ - ssize_t ndim; - - /** - * ndim size array indicating the number of elements in each dimension. - * This can be NULL when ndim == 1. */ - const ssize_t *shape; - - /** - * ndim size array indicating the number of bytes to skip to go to the - * next element in each dimension. */ - const ssize_t *strides; - - /** - * The offset in each dimension when this memory view exposes a nested array. - * Or, NULL when this memory view exposes a flat array. */ - const ssize_t *sub_offsets; - - /** The private data for managing this exported memory */ - void *private_data; - - /** DO NOT TOUCH THIS: The memory view entry for the internal use */ - const struct rb_memory_view_entry *_memory_view_entry; -} rb_memory_view_t; - -/** Type of function of ::rb_memory_view_entry_t::get_func. */ -typedef bool (* rb_memory_view_get_func_t)(VALUE obj, rb_memory_view_t *view, int flags); - -/** Type of function of ::rb_memory_view_entry_t::release_func. */ -typedef bool (* rb_memory_view_release_func_t)(VALUE obj, rb_memory_view_t *view); - -/** Type of function of ::rb_memory_view_entry_t::available_p_func. */ -typedef bool (* rb_memory_view_available_p_func_t)(VALUE obj); - -/** Operations applied to a specific kind of a memory view. */ -typedef struct rb_memory_view_entry { - /** - * Exports a memory view from a Ruby object. - */ - rb_memory_view_get_func_t get_func; - - /** - * Releases a memory view that was previously generated using - * ::rb_memory_view_entry_t::get_func. - */ - rb_memory_view_release_func_t release_func; - - /** - * Queries if an object understands memory view protocol. - */ - rb_memory_view_available_p_func_t available_p_func; -} rb_memory_view_entry_t; - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* memory_view.c */ - -/** - * Associates the passed class with the passed memory view entry. This has to - * be called before actually creating a memory view from an instance. - */ -bool rb_memory_view_register(VALUE klass, const rb_memory_view_entry_t *entry); - -RBIMPL_ATTR_PURE() -/** - * Return `true` if the data in the MemoryView `view` is row-major contiguous. - * - * Return `false` otherwise. - */ -bool rb_memory_view_is_row_major_contiguous(const rb_memory_view_t *view); - -RBIMPL_ATTR_PURE() -/** - * Return `true` if the data in the MemoryView `view` is column-major - * contiguous. - * - * Return `false` otherwise. - */ -bool rb_memory_view_is_column_major_contiguous(const rb_memory_view_t *view); - -RBIMPL_ATTR_NOALIAS() -/** - * Fill the `strides` array with byte-Strides of a contiguous array of the - * given shape with the given element size. - */ -void rb_memory_view_fill_contiguous_strides(const ssize_t ndim, const ssize_t item_size, const ssize_t *const shape, const bool row_major_p, ssize_t *const strides); - -RBIMPL_ATTR_NOALIAS() -/** - * Fill the members of `view` as an 1-dimensional byte array. - */ -bool rb_memory_view_init_as_byte_array(rb_memory_view_t *view, VALUE obj, void *data, const ssize_t len, const bool readonly); - -/** - * Deconstructs the passed format string, as describe in - * ::rb_memory_view_t::format. - */ -ssize_t rb_memory_view_parse_item_format(const char *format, - rb_memory_view_item_component_t **members, - size_t *n_members, const char **err); - -/** - * Calculate the number of bytes occupied by an element. - * - * When the calculation fails, the failed location in `format` is stored into - * `err`, and returns `-1`. - */ -ssize_t rb_memory_view_item_size_from_format(const char *format, const char **err); - -/** - * Calculate the location of the item indicated by the given `indices`. - * - * The length of `indices` must equal to `view->ndim`. - * - * This function initializes `view->item_desc` if needed. - */ -void *rb_memory_view_get_item_pointer(rb_memory_view_t *view, const ssize_t *indices); - -/** - * Return a value that consists of item members. - * - * When an item is a single member, the return value is a single value. - * - * When an item consists of multiple members, an array will be returned. - */ -VALUE rb_memory_view_extract_item_members(const void *ptr, const rb_memory_view_item_component_t *members, const size_t n_members); - -/** Fill the `item_desc` member of `view`. */ -void rb_memory_view_prepare_item_desc(rb_memory_view_t *view); - -/** * Return a value that consists of item members in the given memory view. */ -VALUE rb_memory_view_get_item(rb_memory_view_t *view, const ssize_t *indices); - -/** - * Return `true` if `obj` supports to export a MemoryView. Return `false` - * otherwise. - * - * If this function returns `true`, it doesn't mean the function - * `rb_memory_view_get` will succeed. - */ -bool rb_memory_view_available_p(VALUE obj); - -/** - * If the given `obj` supports to export a MemoryView that conforms the given - * `flags`, this function fills `view` by the information of the MemoryView and - * returns `true`. In this case, the reference count of `obj` is increased. - * - * If the given combination of `obj` and `flags` cannot export a MemoryView, - * this function returns `false`. The content of `view` is not touched in this - * case. - * - * The exported MemoryView must be released by `rb_memory_view_release` when - * the MemoryView is no longer needed. - */ -bool rb_memory_view_get(VALUE obj, rb_memory_view_t* memory_view, int flags); - -/** - * Release the given MemoryView `view` and decrement the reference count of - * `memory_view->obj`. - * - * Consumers must call this function when the MemoryView is no longer needed. - * Missing to call this function leads memory leak. - */ -bool rb_memory_view_release(rb_memory_view_t* memory_view); - -/* for testing */ -/** @cond INTERNAL_MACRO */ -RUBY_EXTERN VALUE rb_memory_view_exported_object_registry; -RUBY_EXTERN const rb_data_type_t rb_memory_view_exported_object_registry_data_type; -/** @endcond */ - -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_PURE() -/** - * Return `true` if the data in the MemoryView `view` is row-major or - * column-major contiguous. - * - * Return `false` otherwise. - */ -static inline bool -rb_memory_view_is_contiguous(const rb_memory_view_t *view) -{ - if (rb_memory_view_is_row_major_contiguous(view)) { - return true; - } - else if (rb_memory_view_is_column_major_contiguous(view)) { - return true; - } - else { - return false; - } -} - -#endif /* RUBY_BUFFER_H */ diff --git a/libs/libruby/ruby/missing.h b/libs/libruby/ruby/missing.h deleted file mode 100644 index aea6c90..0000000 --- a/libs/libruby/ruby/missing.h +++ /dev/null @@ -1,342 +0,0 @@ -#ifndef RUBY_MISSING_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_MISSING_H 1 -/** - * @author $Author$ - * @date Sat May 11 23:46:03 JST 2002 - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @brief Prototype for *.c in ./missing, and for missing timeval struct. - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include -#endif - -#if defined(__cplusplus) -# include -#else -# include /* for INFINITY and NAN */ -#endif - -#ifdef RUBY_ALTERNATIVE_MALLOC_HEADER -# include RUBY_ALTERNATIVE_MALLOC_HEADER -#endif - -#if defined(HAVE_TIME_H) -# include -#endif - -#if defined(HAVE_SYS_TIME_H) -# include -#endif - -#ifdef HAVE_SYS_STAT_H -# include -#endif - -#ifdef HAVE_UNISTD_H -# include -#endif - -#ifdef HAVE_STDIO_H -# include -#endif - -#ifdef HAVE_IEEEFP_H -# include -#endif - -#include "ruby/internal/dllexport.h" -#include "ruby/internal/attr/format.h" - -#ifndef M_PI -# define M_PI 3.14159265358979323846 -#endif -#ifndef M_PI_2 -# define M_PI_2 (M_PI/2) -#endif - -#if !defined(HAVE_STRUCT_TIMEVAL) -struct timeval { - time_t tv_sec; /* seconds */ - long tv_usec; /* microseconds */ -}; -#endif /* HAVE_STRUCT_TIMEVAL */ - -#if !defined(HAVE_STRUCT_TIMESPEC) -/* :BEWARE: @shyouhei warns that IT IS A WRONG IDEA to define our own version - * of struct timespec here. `clock_gettime` is a system call, and your kernel - * could expect something other than just `long` (results stack smashing if - * that happens). See also https://ewontfix.com/19/ */ -struct timespec { - time_t tv_sec; /* seconds */ - long tv_nsec; /* nanoseconds */ -}; -#endif - -#if !defined(HAVE_STRUCT_TIMEZONE) -struct timezone { - int tz_minuteswest; - int tz_dsttime; -}; -#endif - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -#ifndef HAVE_ACOSH -RUBY_EXTERN double acosh(double); -RUBY_EXTERN double asinh(double); -RUBY_EXTERN double atanh(double); -#endif - -#ifndef HAVE_CRYPT -RUBY_EXTERN char *crypt(const char *, const char *); -#endif - -#ifndef HAVE_EACCESS -RUBY_EXTERN int eaccess(const char*, int); -#endif - -#ifndef HAVE_ROUND -RUBY_EXTERN double round(double); /* numeric.c */ -#endif - -#ifndef HAVE_FLOCK -RUBY_EXTERN int flock(int, int); -#endif - -/* -#ifndef HAVE_FREXP -RUBY_EXTERN double frexp(double, int *); -#endif -*/ - -#ifndef HAVE_HYPOT -RUBY_EXTERN double hypot(double, double); -#endif - -#ifndef HAVE_ERF -RUBY_EXTERN double erf(double); -RUBY_EXTERN double erfc(double); -#endif - -#ifndef HAVE_TGAMMA -RUBY_EXTERN double tgamma(double); -#endif - -#ifndef HAVE_LGAMMA_R -RUBY_EXTERN double lgamma_r(double, int *); -#endif - -#ifndef HAVE_CBRT -RUBY_EXTERN double cbrt(double); -#endif - -#if !defined(INFINITY) || !defined(NAN) -union bytesequence4_or_float { - unsigned char bytesequence[4]; - float float_value; -}; -#endif - -#ifndef INFINITY -/** @internal */ -RUBY_EXTERN const union bytesequence4_or_float rb_infinity; -# define INFINITY (rb_infinity.float_value) -# define USE_RB_INFINITY 1 -#endif - -#ifndef NAN -/** @internal */ -RUBY_EXTERN const union bytesequence4_or_float rb_nan; -# define NAN (rb_nan.float_value) -# define USE_RB_NAN 1 -#endif - -#ifndef HUGE_VAL -# define HUGE_VAL ((double)INFINITY) -#endif - -#ifndef HAVE_FINITE -# define HAVE_FINITE 1 -# define finite(x) isfinite(x) -#endif - -#ifndef HAVE_NAN -RUBY_EXTERN double nan(const char *); -#endif - -#ifndef HAVE_NEXTAFTER -RUBY_EXTERN double nextafter(double x, double y); -#endif - -/* -#ifndef HAVE_MEMCMP -RUBY_EXTERN int memcmp(const void *, const void *, size_t); -#endif -*/ - -#ifndef HAVE_MEMMOVE -RUBY_EXTERN void *memmove(void *, const void *, size_t); -#endif - -/* -#ifndef HAVE_MODF -RUBY_EXTERN double modf(double, double *); -#endif -*/ - -#ifndef HAVE_STRCHR -RUBY_EXTERN char *strchr(const char *, int); -RUBY_EXTERN char *strrchr(const char *, int); -#endif - -#ifndef HAVE_STRERROR -RUBY_EXTERN char *strerror(int); -#endif - -#ifndef HAVE_STRSTR -RUBY_EXTERN char *strstr(const char *, const char *); -#endif - -#ifndef HAVE_STRLCPY -RUBY_EXTERN size_t strlcpy(char *, const char*, size_t); -#endif - -#ifndef HAVE_STRLCAT -RUBY_EXTERN size_t strlcat(char *, const char*, size_t); -#endif - -#ifndef HAVE_FFS -RUBY_EXTERN int ffs(int); -#endif - -#ifdef BROKEN_CLOSE -# include -# include -RUBY_EXTERN int ruby_getpeername(int, struct sockaddr *, socklen_t *); -RUBY_EXTERN int ruby_getsockname(int, struct sockaddr *, socklen_t *); -RUBY_EXTERN int ruby_shutdown(int, int); -RUBY_EXTERN int ruby_close(int); -#endif - -#ifndef HAVE_SETPROCTITLE -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2) -RUBY_EXTERN void setproctitle(const char *fmt, ...); -#endif - -#ifdef HAVE_EXPLICIT_BZERO -# /* Take that. */ -#elif defined(SecureZeroMemory) -# define explicit_bzero(b, len) SecureZeroMemory(b, len) -#else -RUBY_EXTERN void explicit_bzero(void *b, size_t len); -#endif - -#ifndef HAVE_TZSET -RUBY_EXTERN void tzset(void); -#endif - -#ifndef HAVE_POSIX_MADVISE -RUBY_EXTERN int posix_madvise(void *, size_t, int); -#endif - -#ifndef HAVE_GETEUID -RUBY_EXTERN rb_uid_t geteuid(void); -#endif - -#ifndef HAVE_GETUID -RUBY_EXTERN rb_uid_t getuid(void); -#endif - -#ifndef HAVE_GETEGID -RUBY_EXTERN rb_gid_t getegid(void); -#endif - -#ifndef HAVE_GETGID -RUBY_EXTERN rb_gid_t getgid(void); -#endif - -#ifndef HAVE_GETLOGIN -RUBY_EXTERN char *getlogin(void); -#endif - -#ifndef HAVE_GETPPID -RUBY_EXTERN rb_pid_t getppid(void); -#endif - -#ifndef HAVE_UMASK -RUBY_EXTERN rb_mode_t umask(rb_mode_t); -#endif - -#ifndef HAVE_CHMOD -RUBY_EXTERN int chmod(const char *, rb_mode_t); -#endif - -#ifndef HAVE_CHOWN -RUBY_EXTERN int chown(const char *, rb_uid_t, rb_gid_t); -#endif - -#ifndef HAVE_PCLOSE -RUBY_EXTERN int pclose(FILE *); -#endif - -#ifndef HAVE_POPEN -RUBY_EXTERN FILE *popen(const char *, const char *); -#endif - -#ifndef HAVE_PIPE -RUBY_EXTERN int pipe(int [2]); -#endif - -#ifndef HAVE_DUP -RUBY_EXTERN int dup(int); -#endif - -#ifndef HAVE_DUP2 -RUBY_EXTERN int dup2(int, int); -#endif - -#ifndef HAVE_KILL -RUBY_EXTERN int kill(rb_pid_t, int); -#endif - -#ifndef HAVE_EXECL -RUBY_EXTERN int execl(const char *, const char *, ...); -#endif - -#ifndef HAVE_EXECLE -RUBY_EXTERN int execle(const char *, const char *, ...); -#endif - -#ifndef HAVE_EXECV -RUBY_EXTERN int execv(const char *, char *const []); -#endif - -#ifndef HAVE_EXECVE -RUBY_EXTERN int execve(const char *, char *const [], char *const []); -#endif - -#ifndef HAVE_SHUTDOWN -RUBY_EXTERN int shutdown(int, int); -#endif - -#ifndef HAVE_SYSTEM -RUBY_EXTERN int system(const char *); -#endif - -#ifndef WNOHANG -# define WNOHANG 0 -#endif - -#ifndef HAVE_WAITPID -# define HAVE_WAITPID 1 -RUBY_EXTERN rb_pid_t waitpid(rb_pid_t, int *, int); -#endif - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_MISSING_H */ diff --git a/libs/libruby/ruby/onigmo.h b/libs/libruby/ruby/onigmo.h deleted file mode 100644 index 8d7c601..0000000 --- a/libs/libruby/ruby/onigmo.h +++ /dev/null @@ -1,952 +0,0 @@ -#ifndef ONIGMO_H -#define ONIGMO_H -/********************************************************************** - onigmo.h - Onigmo (Oniguruma-mod) (regular expression library) -**********************************************************************/ -/*- - * Copyright (c) 2002-2009 K.Kosako - * Copyright (c) 2011-2017 K.Takata - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifdef __cplusplus -extern "C" { -# if 0 -} /* satisfy cc-mode */ -# endif -#endif - -#define ONIGMO_VERSION_MAJOR 6 -#define ONIGMO_VERSION_MINOR 1 -#define ONIGMO_VERSION_TEENY 3 - -#ifndef ONIG_EXTERN -# ifdef RUBY_EXTERN -# define ONIG_EXTERN RUBY_EXTERN -# else -# if defined(_WIN32) && !defined(__GNUC__) -# if defined(EXPORT) || defined(RUBY_EXPORT) -# define ONIG_EXTERN extern __declspec(dllexport) -# else -# define ONIG_EXTERN extern __declspec(dllimport) -# endif -# endif -# endif -#endif - -#ifndef ONIG_EXTERN -# define ONIG_EXTERN extern -#endif - -#ifndef RUBY -# ifndef RUBY_SYMBOL_EXPORT_BEGIN -# define RUBY_SYMBOL_EXPORT_BEGIN -# define RUBY_SYMBOL_EXPORT_END -# endif -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -#include /* for size_t */ - -/* PART: character encoding */ - -#ifndef ONIG_ESCAPE_UCHAR_COLLISION -# define UChar OnigUChar -#endif - -typedef unsigned char OnigUChar; -typedef unsigned int OnigCodePoint; -typedef unsigned int OnigCtype; -typedef size_t OnigDistance; -typedef ptrdiff_t OnigPosition; - -#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0) - -/* - * Onig casefold/case mapping flags and related definitions - * - * Subfields (starting with 0 at LSB): - * 0-2: Code point count in casefold.h - * 3-12: Index into SpecialCaseMapping array in casefold.h - * 13-22: Case folding/mapping flags - */ -typedef unsigned int OnigCaseFoldType; /* case fold flag */ - -ONIG_EXTERN OnigCaseFoldType OnigDefaultCaseFoldFlag; - -/* bits for actual code point count; 3 bits is more than enough, currently only 2 used */ -#define OnigCodePointMaskWidth 3 -#define OnigCodePointMask ((1< Unicode:0x1ffc */ - -/* code range */ -#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0]) -#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1] -#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2] - -typedef struct { - int byte_len; /* argument(original) character(s) byte length */ - int code_len; /* number of code */ - OnigCodePoint code[ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN]; -} OnigCaseFoldCodeItem; - -typedef struct { - OnigCodePoint esc; - OnigCodePoint anychar; - OnigCodePoint anytime; - OnigCodePoint zero_or_one_time; - OnigCodePoint one_or_more_time; - OnigCodePoint anychar_anytime; -} OnigMetaCharTableType; - -typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg); - -typedef struct OnigEncodingTypeST { - int (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc); - const char* name; - int max_enc_len; - int min_enc_len; - int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc); - OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc); - int (*code_to_mbclen)(OnigCodePoint code, const struct OnigEncodingTypeST* enc); - int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, const struct OnigEncodingTypeST* enc); - int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, const struct OnigEncodingTypeST* enc); - int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, const struct OnigEncodingTypeST* enc); - int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], const struct OnigEncodingTypeST* enc); - int (*property_name_to_ctype)(const struct OnigEncodingTypeST* enc, const OnigUChar* p, const OnigUChar* end); - int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, const struct OnigEncodingTypeST* enc); - int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], const struct OnigEncodingTypeST* enc); - OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc); - int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc); - int (*case_map)(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc); - int ruby_encoding_index; - unsigned int flags; -} OnigEncodingType; - -typedef const OnigEncodingType* OnigEncoding; - -ONIG_EXTERN const OnigEncodingType OnigEncodingASCII; -#ifndef RUBY -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_1; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_2; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_3; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_4; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_5; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_6; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_7; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_8; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_9; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_10; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_11; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_13; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_14; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_15; -ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_16; -ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_8; -ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_16BE; -ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_16LE; -ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_32BE; -ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_32LE; -ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_JP; -ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_TW; -ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_KR; -ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_CN; -ONIG_EXTERN const OnigEncodingType OnigEncodingShift_JIS; -ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_31J; -/* ONIG_EXTERN const OnigEncodingType OnigEncodingKOI8; */ -ONIG_EXTERN const OnigEncodingType OnigEncodingKOI8_R; -ONIG_EXTERN const OnigEncodingType OnigEncodingKOI8_U; -ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1250; -ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1251; -ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1252; -ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1253; -ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1254; -ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1257; -ONIG_EXTERN const OnigEncodingType OnigEncodingBIG5; -ONIG_EXTERN const OnigEncodingType OnigEncodingGB18030; -#endif /* RUBY */ - -#define ONIG_ENCODING_ASCII (&OnigEncodingASCII) -#ifndef RUBY -# define ONIG_ENCODING_ISO_8859_1 (&OnigEncodingISO_8859_1) -# define ONIG_ENCODING_ISO_8859_2 (&OnigEncodingISO_8859_2) -# define ONIG_ENCODING_ISO_8859_3 (&OnigEncodingISO_8859_3) -# define ONIG_ENCODING_ISO_8859_4 (&OnigEncodingISO_8859_4) -# define ONIG_ENCODING_ISO_8859_5 (&OnigEncodingISO_8859_5) -# define ONIG_ENCODING_ISO_8859_6 (&OnigEncodingISO_8859_6) -# define ONIG_ENCODING_ISO_8859_7 (&OnigEncodingISO_8859_7) -# define ONIG_ENCODING_ISO_8859_8 (&OnigEncodingISO_8859_8) -# define ONIG_ENCODING_ISO_8859_9 (&OnigEncodingISO_8859_9) -# define ONIG_ENCODING_ISO_8859_10 (&OnigEncodingISO_8859_10) -# define ONIG_ENCODING_ISO_8859_11 (&OnigEncodingISO_8859_11) -# define ONIG_ENCODING_ISO_8859_13 (&OnigEncodingISO_8859_13) -# define ONIG_ENCODING_ISO_8859_14 (&OnigEncodingISO_8859_14) -# define ONIG_ENCODING_ISO_8859_15 (&OnigEncodingISO_8859_15) -# define ONIG_ENCODING_ISO_8859_16 (&OnigEncodingISO_8859_16) -# define ONIG_ENCODING_UTF_8 (&OnigEncodingUTF_8) -# define ONIG_ENCODING_UTF_16BE (&OnigEncodingUTF_16BE) -# define ONIG_ENCODING_UTF_16LE (&OnigEncodingUTF_16LE) -# define ONIG_ENCODING_UTF_32BE (&OnigEncodingUTF_32BE) -# define ONIG_ENCODING_UTF_32LE (&OnigEncodingUTF_32LE) -# define ONIG_ENCODING_EUC_JP (&OnigEncodingEUC_JP) -# define ONIG_ENCODING_EUC_TW (&OnigEncodingEUC_TW) -# define ONIG_ENCODING_EUC_KR (&OnigEncodingEUC_KR) -# define ONIG_ENCODING_EUC_CN (&OnigEncodingEUC_CN) -# define ONIG_ENCODING_SHIFT_JIS (&OnigEncodingShift_JIS) -# define ONIG_ENCODING_WINDOWS_31J (&OnigEncodingWindows_31J) -/* # define ONIG_ENCODING_KOI8 (&OnigEncodingKOI8) */ -# define ONIG_ENCODING_KOI8_R (&OnigEncodingKOI8_R) -# define ONIG_ENCODING_KOI8_U (&OnigEncodingKOI8_U) -# define ONIG_ENCODING_WINDOWS_1250 (&OnigEncodingWindows_1250) -# define ONIG_ENCODING_WINDOWS_1251 (&OnigEncodingWindows_1251) -# define ONIG_ENCODING_WINDOWS_1252 (&OnigEncodingWindows_1252) -# define ONIG_ENCODING_WINDOWS_1253 (&OnigEncodingWindows_1253) -# define ONIG_ENCODING_WINDOWS_1254 (&OnigEncodingWindows_1254) -# define ONIG_ENCODING_WINDOWS_1257 (&OnigEncodingWindows_1257) -# define ONIG_ENCODING_BIG5 (&OnigEncodingBIG5) -# define ONIG_ENCODING_GB18030 (&OnigEncodingGB18030) - -/* old names */ -# define ONIG_ENCODING_SJIS ONIG_ENCODING_SHIFT_JIS -# define ONIG_ENCODING_CP932 ONIG_ENCODING_WINDOWS_31J -# define ONIG_ENCODING_CP1250 ONIG_ENCODING_WINDOWS_1250 -# define ONIG_ENCODING_CP1251 ONIG_ENCODING_WINDOWS_1251 -# define ONIG_ENCODING_CP1252 ONIG_ENCODING_WINDOWS_1252 -# define ONIG_ENCODING_CP1253 ONIG_ENCODING_WINDOWS_1253 -# define ONIG_ENCODING_CP1254 ONIG_ENCODING_WINDOWS_1254 -# define ONIG_ENCODING_CP1257 ONIG_ENCODING_WINDOWS_1257 -# define ONIG_ENCODING_UTF8 ONIG_ENCODING_UTF_8 -# define ONIG_ENCODING_UTF16_BE ONIG_ENCODING_UTF_16BE -# define ONIG_ENCODING_UTF16_LE ONIG_ENCODING_UTF_16LE -# define ONIG_ENCODING_UTF32_BE ONIG_ENCODING_UTF_32BE -# define ONIG_ENCODING_UTF32_LE ONIG_ENCODING_UTF_32LE -#endif /* RUBY */ - -#define ONIG_ENCODING_UNDEF ((OnigEncoding )0) - -/* this declaration needs to be here because it is used in string.c in Ruby */ -ONIG_EXTERN -int onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc); - - -/* work size */ -#define ONIGENC_CODE_TO_MBC_MAXLEN 7 -#define ONIGENC_MBC_CASE_FOLD_MAXLEN 18 -/* 18: 6(max-byte) * 3(case-fold chars) */ - -/* character types */ -#define ONIGENC_CTYPE_NEWLINE 0 -#define ONIGENC_CTYPE_ALPHA 1 -#define ONIGENC_CTYPE_BLANK 2 -#define ONIGENC_CTYPE_CNTRL 3 -#define ONIGENC_CTYPE_DIGIT 4 -#define ONIGENC_CTYPE_GRAPH 5 -#define ONIGENC_CTYPE_LOWER 6 -#define ONIGENC_CTYPE_PRINT 7 -#define ONIGENC_CTYPE_PUNCT 8 -#define ONIGENC_CTYPE_SPACE 9 -#define ONIGENC_CTYPE_UPPER 10 -#define ONIGENC_CTYPE_XDIGIT 11 -#define ONIGENC_CTYPE_WORD 12 -#define ONIGENC_CTYPE_ALNUM 13 /* alpha || digit */ -#define ONIGENC_CTYPE_ASCII 14 -#define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII - -/* flags */ -#define ONIGENC_FLAG_NONE 0U -#define ONIGENC_FLAG_UNICODE 1U - -#define onig_enc_len(enc,p,e) ONIGENC_MBC_ENC_LEN(enc, p, e) - -#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF) -#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1) -#define ONIGENC_IS_MBC_HEAD(enc,p,e) (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1) -#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128) -#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128) -#define ONIGENC_IS_MBC_WORD(enc,s,end) \ - ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end)) -#define ONIGENC_IS_MBC_ASCII_WORD(enc,s,end) \ - onigenc_ascii_is_code_ctype( \ - ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD,enc) -#define ONIGENC_IS_UNICODE(enc) ((enc)->flags & ONIGENC_FLAG_UNICODE) - - -#define ONIGENC_NAME(enc) ((enc)->name) - -#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) \ - (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc) -#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \ - (enc)->is_allowed_reverse_match(s,end,enc) -#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) \ - (enc)->left_adjust_char_head(start, s, end, enc) -#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) \ - (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc) -#define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) \ - (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs,enc) -#define ONIGENC_STEP_BACK(enc,start,s,end,n) \ - onigenc_step_back((enc),(start),(s),(end),(n)) - -#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n) (n) -#define ONIGENC_MBCLEN_CHARFOUND_P(r) (0 < (r)) -#define ONIGENC_MBCLEN_CHARFOUND_LEN(r) (r) - -#define ONIGENC_CONSTRUCT_MBCLEN_INVALID() (-1) -#define ONIGENC_MBCLEN_INVALID_P(r) ((r) == -1) - -#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n) (-1-(n)) -#define ONIGENC_MBCLEN_NEEDMORE_P(r) ((r) < -1) -#define ONIGENC_MBCLEN_NEEDMORE_LEN(r) (-1-(r)) - -#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e) (enc)->precise_mbc_enc_len(p,e,enc) - -ONIG_EXTERN -int onigenc_mbclen(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc); - -#define ONIGENC_MBC_ENC_LEN(enc,p,e) onigenc_mbclen(p,e,enc) -#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len) -#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc) -#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len) -#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end),enc) -#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end),enc) -#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code,enc) -#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf,enc) -#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) \ - (enc)->property_name_to_ctype(enc,p,end) - -#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype,enc) - -#define ONIGENC_IS_CODE_NEWLINE(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE) -#define ONIGENC_IS_CODE_GRAPH(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH) -#define ONIGENC_IS_CODE_PRINT(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT) -#define ONIGENC_IS_CODE_ALNUM(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM) -#define ONIGENC_IS_CODE_ALPHA(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA) -#define ONIGENC_IS_CODE_LOWER(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER) -#define ONIGENC_IS_CODE_UPPER(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER) -#define ONIGENC_IS_CODE_CNTRL(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL) -#define ONIGENC_IS_CODE_PUNCT(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT) -#define ONIGENC_IS_CODE_SPACE(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE) -#define ONIGENC_IS_CODE_BLANK(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK) -#define ONIGENC_IS_CODE_DIGIT(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT) -#define ONIGENC_IS_CODE_XDIGIT(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT) -#define ONIGENC_IS_CODE_WORD(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD) - -#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) \ - (enc)->get_ctype_code_range(ctype,sbout,ranges,enc) - -ONIG_EXTERN -OnigUChar* onigenc_step_back(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n); - - -/* encoding API */ -ONIG_EXTERN -int onigenc_init(void); -ONIG_EXTERN -int onigenc_set_default_encoding(OnigEncoding enc); -ONIG_EXTERN -OnigEncoding onigenc_get_default_encoding(void); -ONIG_EXTERN -OnigUChar* onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev); -ONIG_EXTERN -OnigUChar* onigenc_get_prev_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end); -ONIG_EXTERN -OnigUChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end); -ONIG_EXTERN -OnigUChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end); -ONIG_EXTERN -int onigenc_strlen(OnigEncoding enc, const OnigUChar* p, const OnigUChar* end); -ONIG_EXTERN -int onigenc_strlen_null(OnigEncoding enc, const OnigUChar* p); -ONIG_EXTERN -int onigenc_str_bytelen_null(OnigEncoding enc, const OnigUChar* p); - - - -/* PART: regular expression */ - -/* config parameters */ -#define ONIG_NREGION 4 -#define ONIG_MAX_CAPTURE_GROUP_NUM 32767 -#define ONIG_MAX_BACKREF_NUM 1000 -#define ONIG_MAX_REPEAT_NUM 100000 -#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000 -/* constants */ -#define ONIG_MAX_ERROR_MESSAGE_LEN 90 - -typedef unsigned int OnigOptionType; - -#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE - -/* options */ -#define ONIG_OPTION_NONE 0U -#define ONIG_OPTION_IGNORECASE 1U -#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1) -#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1) -#define ONIG_OPTION_DOTALL ONIG_OPTION_MULTILINE -#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1) -#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1) -#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1) -#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1) -#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1) -#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1) -/* options (search time) */ -#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1) -#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1) -#define ONIG_OPTION_NOTBOS (ONIG_OPTION_NOTEOL << 1) -#define ONIG_OPTION_NOTEOS (ONIG_OPTION_NOTBOS << 1) -/* options (ctype range) */ -#define ONIG_OPTION_ASCII_RANGE (ONIG_OPTION_NOTEOS << 1) -#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1) -#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1) -/* options (newline) */ -#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1) -#define ONIG_OPTION_MAXBIT ONIG_OPTION_NEWLINE_CRLF /* limit */ - -#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt)) -#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt)) -#define ONIG_IS_OPTION_ON(options,option) ((options) & (option)) - -/* syntax */ -typedef struct { - unsigned int op; - unsigned int op2; - unsigned int behavior; - OnigOptionType options; /* default option */ - OnigMetaCharTableType meta_char_table; -} OnigSyntaxType; - -ONIG_EXTERN const OnigSyntaxType OnigSyntaxASIS; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixBasic; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixExtended; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxEmacs; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxGrep; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxGnuRegex; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxJava; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58_NG; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxRuby; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPython; - -/* predefined syntaxes (see regsyntax.c) */ -#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS) -#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic) -#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended) -#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs) -#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep) -#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex) -#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava) -#define ONIG_SYNTAX_PERL58 (&OnigSyntaxPerl58) -#define ONIG_SYNTAX_PERL58_NG (&OnigSyntaxPerl58_NG) -#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl) -#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby) -#define ONIG_SYNTAX_PYTHON (&OnigSyntaxPython) - -/* default syntax */ -ONIG_EXTERN const OnigSyntaxType* OnigDefaultSyntax; -#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax - -/* syntax (operators) */ -#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0) -#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1) /* . */ -#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2) /* * */ -#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3) -#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4) /* + */ -#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5) -#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6) /* ? */ -#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7) -#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8) /* {lower,upper} */ -#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9) /* \{lower,upper\} */ -#define ONIG_SYN_OP_VBAR_ALT (1U<<10) /* | */ -#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11) /* \| */ -#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12) /* (...) */ -#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13) /* \(...\) */ -#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14) /* \A, \Z, \z */ -#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15) /* \G */ -#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16) /* \num */ -#define ONIG_SYN_OP_BRACKET_CC (1U<<17) /* [...] */ -#define ONIG_SYN_OP_ESC_W_WORD (1U<<18) /* \w, \W */ -#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19) /* \<. \> */ -#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20) /* \b, \B */ -#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21) /* \s, \S */ -#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22) /* \d, \D */ -#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23) /* ^, $ */ -#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24) /* [:xxxx:] */ -#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25) /* ??,*?,+?,{n,m}? */ -#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26) /* \n,\r,\t,\a ... */ -#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27) /* \cx */ -#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28) /* \OOO */ -#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29) /* \xHH */ -#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30) /* \x{7HHHHHHH} */ -#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL (1U<<31) /* \o{OOO} */ - -#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0) /* \Q...\E */ -#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1) /* (?...) */ -#define ONIG_SYN_OP2_OPTION_PERL (1U<<2) /* (?imsxadlu), (?-imsx), (?^imsxalu) */ -#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3) /* (?imxadu), (?-imx) */ -#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4) /* ?+,*+,++ */ -#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5) /* {n,m}+ */ -#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6) /* [...&&..[..]..] */ -#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7) /* (?...) */ -#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8) /* \k */ -#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9) /* \g, \g */ -#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10) /* (?@..),(?@..) */ -#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11) /* \C-x */ -#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12) /* \M-x */ -#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13) /* \v as VTAB */ -#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14) /* \uHHHH */ -#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15) /* \`, \' */ -#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16) /* \p{...}, \P{...} */ -#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17) /* \p{^..}, \P{^..} */ -/* #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) */ -#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19) /* \h, \H */ -#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20) /* \ */ -#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK (1U<<21) /* \R as (?>\x0D\x0A|[\x0A-\x0D\x{85}\x{2028}\x{2029}]) */ -#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22) /* \X */ -#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE (1U<<23) /* \v, \V -- Perl */ /* NOTIMPL */ -#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24) /* \h, \H -- Perl */ /* NOTIMPL */ -#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<25) /* \K */ -#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF (1U<<26) /* \g{name}, \g{n} */ -#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL (1U<<27) /* (?&name), (?n), (?R), (?0) */ -#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET (1U<<28) /* (?|...) */ /* NOTIMPL */ -#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION (1U<<29) /* (?(cond)yes...|no...) */ -#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30) /* (?P...), (?P=name), (?P>name) -- Python/PCRE */ -#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT (1U<<31) /* (?~...) */ -/* #define ONIG_SYN_OP2_OPTION_JAVA (1U< {0,n} */ -#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5) /* /(\1)/,/\1()/ ..*/ -#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6) /* (?<=a|bc) */ -#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7) /* see doc/RE */ -#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8) /* (?)(?) */ -#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9) /* a{n}?=(?:a{n})? */ -#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10) /* (?)(?)(?&x) */ -#define ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP (1U<<11) /* (?)(?)\k */ - -/* syntax (behavior) in char class [...] */ -#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20) /* [^...] */ -#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21) /* [..\w..] etc.. */ -#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22) -#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23) /* [0-9-a]=[0-9\-a] */ -/* syntax (behavior) warning */ -#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24) /* [,-,] */ -#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25) /* (?:a*)+ */ -#define ONIG_SYN_WARN_CC_DUP (1U<<26) /* [aa] */ - -/* meta character specifiers (onig_set_meta_char()) */ -#define ONIG_META_CHAR_ESCAPE 0 -#define ONIG_META_CHAR_ANYCHAR 1 -#define ONIG_META_CHAR_ANYTIME 2 -#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3 -#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4 -#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5 - -#define ONIG_INEFFECTIVE_META_CHAR 0 - -/* error codes */ -#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000) -/* normal return */ -#define ONIG_NORMAL 0 -#define ONIG_MISMATCH -1 -#define ONIG_NO_SUPPORT_CONFIG -2 - -/* internal error */ -#define ONIGERR_MEMORY -5 -#define ONIGERR_TYPE_BUG -6 -#define ONIGERR_PARSER_BUG -11 -#define ONIGERR_STACK_BUG -12 -#define ONIGERR_UNDEFINED_BYTECODE -13 -#define ONIGERR_UNEXPECTED_BYTECODE -14 -#define ONIGERR_MATCH_STACK_LIMIT_OVER -15 -#define ONIGERR_PARSE_DEPTH_LIMIT_OVER -16 -#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET -21 -#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22 -/* general error */ -#define ONIGERR_INVALID_ARGUMENT -30 -/* syntax error */ -#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100 -#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101 -#define ONIGERR_EMPTY_CHAR_CLASS -102 -#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103 -#define ONIGERR_END_PATTERN_AT_ESCAPE -104 -#define ONIGERR_END_PATTERN_AT_META -105 -#define ONIGERR_END_PATTERN_AT_CONTROL -106 -#define ONIGERR_META_CODE_SYNTAX -108 -#define ONIGERR_CONTROL_CODE_SYNTAX -109 -#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110 -#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111 -#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112 -#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113 -#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114 -#define ONIGERR_NESTED_REPEAT_OPERATOR -115 -#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116 -#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117 -#define ONIGERR_END_PATTERN_IN_GROUP -118 -#define ONIGERR_UNDEFINED_GROUP_OPTION -119 -#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121 -#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122 -#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123 -#define ONIGERR_INVALID_CONDITION_PATTERN -124 -/* values error (syntax error) */ -#define ONIGERR_TOO_BIG_NUMBER -200 -#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201 -#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202 -#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203 -#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204 -#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205 -#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206 -#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207 -#define ONIGERR_INVALID_BACKREF -208 -#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209 -#define ONIGERR_TOO_MANY_CAPTURE_GROUPS -210 -#define ONIGERR_TOO_SHORT_DIGITS -211 -#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212 -#define ONIGERR_EMPTY_GROUP_NAME -214 -#define ONIGERR_INVALID_GROUP_NAME -215 -#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216 -#define ONIGERR_UNDEFINED_NAME_REFERENCE -217 -#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218 -#define ONIGERR_MULTIPLEX_DEFINED_NAME -219 -#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220 -#define ONIGERR_NEVER_ENDING_RECURSION -221 -#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222 -#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223 -#define ONIGERR_INVALID_CODE_POINT_VALUE -400 -#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400 -#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401 -#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402 -#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403 - -/* errors related to thread */ -/* #define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT -1001 */ - - -/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */ -#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31 -#define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \ - ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i]) - -#ifdef USE_CAPTURE_HISTORY -typedef struct OnigCaptureTreeNodeStruct { - int group; /* group number */ - OnigPosition beg; - OnigPosition end; - int allocated; - int num_childs; - struct OnigCaptureTreeNodeStruct** childs; -} OnigCaptureTreeNode; -#endif - -/* match result region type */ -struct re_registers { - int allocated; - int num_regs; - OnigPosition* beg; - OnigPosition* end; -#ifdef USE_CAPTURE_HISTORY - /* extended */ - OnigCaptureTreeNode* history_root; /* capture history tree root */ -#endif -}; - -/* capture tree traverse */ -#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1 -#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2 -#define ONIG_TRAVERSE_CALLBACK_AT_BOTH \ - ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST ) - - -#define ONIG_REGION_NOTPOS -1 - -typedef struct re_registers OnigRegion; - -typedef struct { - OnigEncoding enc; - OnigUChar* par; - OnigUChar* par_end; -} OnigErrorInfo; - -typedef struct { - int lower; - int upper; - long base_num; - long inner_num; -} OnigRepeatRange; - -typedef void (*OnigWarnFunc)(const char* s); -extern void onig_null_warn(const char* s); -#define ONIG_NULL_WARN onig_null_warn - -#define ONIG_CHAR_TABLE_SIZE 256 - -typedef struct re_pattern_buffer { - /* common members of BBuf(bytes-buffer) */ - unsigned char* p; /* compiled pattern */ - unsigned int used; /* used space for p */ - unsigned int alloc; /* allocated space for p */ - - int num_mem; /* used memory(...) num counted from 1 */ - int num_repeat; /* OP_REPEAT/OP_REPEAT_NG id-counter */ - int num_null_check; /* OP_NULL_CHECK_START/END id counter */ - int num_comb_exp_check; /* combination explosion check */ - int num_call; /* number of subexp call */ - unsigned int capture_history; /* (?@...) flag (1-31) */ - unsigned int bt_mem_start; /* need backtrack flag */ - unsigned int bt_mem_end; /* need backtrack flag */ - int stack_pop_level; - int repeat_range_alloc; - - OnigOptionType options; - - OnigRepeatRange* repeat_range; - - OnigEncoding enc; - const OnigSyntaxType* syntax; - void* name_table; - OnigCaseFoldType case_fold_flag; - - /* optimization info (string search, char-map and anchors) */ - int optimize; /* optimize flag */ - int threshold_len; /* search str-length for apply optimize */ - int anchor; /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */ - OnigDistance anchor_dmin; /* (SEMI_)END_BUF anchor distance */ - OnigDistance anchor_dmax; /* (SEMI_)END_BUF anchor distance */ - int sub_anchor; /* start-anchor for exact or map */ - unsigned char *exact; - unsigned char *exact_end; - unsigned char map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */ - int *int_map; /* BM skip for exact_len > 255 */ - int *int_map_backward; /* BM skip for backward search */ - OnigDistance dmin; /* min-distance of exact or map */ - OnigDistance dmax; /* max-distance of exact or map */ - - /* rb_hrtime_t from hrtime.h */ -#ifdef MY_RUBY_BUILD_MAY_TIME_TRAVEL - int128_t timelimit; -#else - uint64_t timelimit; -#endif - - /* regex_t link chain */ - struct re_pattern_buffer* chain; /* escape compile-conflict */ -} OnigRegexType; - -typedef OnigRegexType* OnigRegex; - -#ifndef ONIG_ESCAPE_REGEX_T_COLLISION -typedef OnigRegexType regex_t; -#endif - - -typedef struct { - int num_of_elements; - OnigEncoding pattern_enc; - OnigEncoding target_enc; - const OnigSyntaxType* syntax; - OnigOptionType option; - OnigCaseFoldType case_fold_flag; -} OnigCompileInfo; - -/* Oniguruma Native API */ -ONIG_EXTERN -int onig_initialize(OnigEncoding encodings[], int n); -ONIG_EXTERN -int onig_init(void); -ONIG_EXTERN -int onig_error_code_to_str(OnigUChar* s, OnigPosition err_code, ...); -ONIG_EXTERN -void onig_set_warn_func(OnigWarnFunc f); -ONIG_EXTERN -void onig_set_verb_warn_func(OnigWarnFunc f); -ONIG_EXTERN -int onig_new(OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo); -ONIG_EXTERN -int onig_reg_init(OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax); -ONIG_EXTERN -int onig_new_without_alloc(OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo); -ONIG_EXTERN -int onig_new_deluxe(OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo); -ONIG_EXTERN -void onig_free(OnigRegex); -ONIG_EXTERN -void onig_free_body(OnigRegex); -ONIG_EXTERN -OnigPosition onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(OnigPosition, OnigPosition, OnigRegion*, void*), void* callback_arg); -ONIG_EXTERN -OnigPosition onig_search(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option); -ONIG_EXTERN -OnigPosition onig_search_gpos(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option); -ONIG_EXTERN -OnigPosition onig_match(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option); -ONIG_EXTERN -int onig_check_linear_time(OnigRegex reg); -ONIG_EXTERN -OnigRegion* onig_region_new(void); -ONIG_EXTERN -void onig_region_init(OnigRegion* region); -ONIG_EXTERN -void onig_region_free(OnigRegion* region, int free_self); -ONIG_EXTERN -void onig_region_copy(OnigRegion* to, const OnigRegion* from); -ONIG_EXTERN -void onig_region_clear(OnigRegion* region); -ONIG_EXTERN -int onig_region_resize(OnigRegion* region, int n); -ONIG_EXTERN -int onig_region_set(OnigRegion* region, int at, int beg, int end); -ONIG_EXTERN -int onig_name_to_group_numbers(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums); -ONIG_EXTERN -int onig_name_to_backref_number(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, const OnigRegion *region); -ONIG_EXTERN -int onig_foreach_name(OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg); -ONIG_EXTERN -int onig_number_of_names(const OnigRegexType *reg); -ONIG_EXTERN -int onig_number_of_captures(const OnigRegexType *reg); -ONIG_EXTERN -int onig_number_of_capture_histories(const OnigRegexType *reg); -#ifdef USE_CAPTURE_HISTORY -ONIG_EXTERN -OnigCaptureTreeNode* onig_get_capture_tree(OnigRegion* region); -#endif -ONIG_EXTERN -int onig_capture_tree_traverse(OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg); -ONIG_EXTERN -int onig_noname_group_capture_is_active(const OnigRegexType *reg); -ONIG_EXTERN -OnigEncoding onig_get_encoding(const OnigRegexType *reg); -ONIG_EXTERN -OnigOptionType onig_get_options(const OnigRegexType *reg); -ONIG_EXTERN -OnigCaseFoldType onig_get_case_fold_flag(const OnigRegexType *reg); -ONIG_EXTERN -const OnigSyntaxType* onig_get_syntax(const OnigRegexType *reg); -ONIG_EXTERN -int onig_set_default_syntax(const OnigSyntaxType* syntax); -ONIG_EXTERN -void onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from); -ONIG_EXTERN -unsigned int onig_get_syntax_op(const OnigSyntaxType* syntax); -ONIG_EXTERN -unsigned int onig_get_syntax_op2(const OnigSyntaxType* syntax); -ONIG_EXTERN -unsigned int onig_get_syntax_behavior(const OnigSyntaxType* syntax); -ONIG_EXTERN -OnigOptionType onig_get_syntax_options(const OnigSyntaxType* syntax); -ONIG_EXTERN -void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op); -ONIG_EXTERN -void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2); -ONIG_EXTERN -void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior); -ONIG_EXTERN -void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options); -ONIG_EXTERN -int onig_set_meta_char(OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code); -ONIG_EXTERN -void onig_copy_encoding(OnigEncodingType *to, OnigEncoding from); -ONIG_EXTERN -OnigCaseFoldType onig_get_default_case_fold_flag(void); -ONIG_EXTERN -int onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag); -ONIG_EXTERN -unsigned int onig_get_match_stack_limit_size(void); -ONIG_EXTERN -int onig_set_match_stack_limit_size(unsigned int size); -ONIG_EXTERN -unsigned int onig_get_parse_depth_limit(void); -ONIG_EXTERN -int onig_set_parse_depth_limit(unsigned int depth); -ONIG_EXTERN -int onig_end(void); -ONIG_EXTERN -const char* onig_version(void); -ONIG_EXTERN -const char* onig_copyright(void); - -RUBY_SYMBOL_EXPORT_END - -#ifdef __cplusplus -# if 0 -{ /* satisfy cc-mode */ -# endif -} -#endif - -#endif /* ONIGMO_H */ diff --git a/libs/libruby/ruby/oniguruma.h b/libs/libruby/ruby/oniguruma.h deleted file mode 100644 index dc83754..0000000 --- a/libs/libruby/ruby/oniguruma.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef ONIGURUMA_H -#define ONIGURUMA_H -#include "onigmo.h" -#define ONIGURUMA -#define ONIGURUMA_VERSION_MAJOR ONIGMO_VERSION_MAJOR -#define ONIGURUMA_VERSION_MINOR ONIGMO_VERSION_MINOR -#define ONIGURUMA_VERSION_TEENY ONIGMO_VERSION_TEENY -#endif /* ONIGURUMA_H */ diff --git a/libs/libruby/ruby/ractor.h b/libs/libruby/ruby/ractor.h deleted file mode 100644 index 7811616..0000000 --- a/libs/libruby/ruby/ractor.h +++ /dev/null @@ -1,264 +0,0 @@ -#ifndef RUBY_RACTOR_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_RACTOR_H 1 - -/** - * @file - * @author Koichi Sasada - * @date Tue Nov 17 16:39:15 2020 - * @copyright Copyright (C) 2020 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ -#include "internal/dllexport.h" /* RUBY_EXTERN is here */ -#include "internal/fl_type.h" /* FL_TEST_RAW is here */ -#include "internal/special_consts.h" /* RB_SPECIAL_CONSTS_P is here */ -#include "internal/stdbool.h" /* bool is here */ -#include "internal/value.h" /* VALUE is here */ - -/** Type that defines a ractor-local storage. */ -struct rb_ractor_local_storage_type { - - /** - * A function to mark a ractor-local storage. - * - * @param[out] ptr A ractor-local storage. - * @post Ruby objects inside of `ptr` are marked. - */ - void (*mark)(void *ptr); - - /** - * A function to destruct a ractor-local storage. - * - * @param[out] ptr A ractor-local storage. - * @post `ptr` is not a valid pointer. - */ - void (*free)(void *ptr); - // TODO: update -}; - -/** (Opaque) struct that holds a ractor-local storage key. */ -typedef struct rb_ractor_local_key_struct *rb_ractor_local_key_t; - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * `Ractor` class. - * - * @ingroup object - */ -RUBY_EXTERN VALUE rb_cRactor; - -/** - * Queries the standard input of the current Ractor that is calling this - * function. - * - * @return An IO. - * @note This can be different from the process-global one. - */ -VALUE rb_ractor_stdin(void); - -/** - * Queries the standard output of the current Ractor that is calling this - * function. - * - * @return An IO. - * @note This can be different from the process-global one. - */ -VALUE rb_ractor_stdout(void); - -/** - * Queries the standard error of the current Ractor that is calling this - * function. - * - * @return An IO. - * @note This can be different from the process-global one. - */ -VALUE rb_ractor_stderr(void); - -/** - * Assigns an IO to the standard input of the Ractor that is calling this - * function. - * - * @param[in] io An IO. - * @post `io` is the standard input of the current ractor. - * @post In case the calling Ractor is the main Ractor, it also updates - * the process global ::rb_stdin. - */ -void rb_ractor_stdin_set(VALUE io); - -/** - * Assigns an IO to the standard output of the Ractor that is calling this - * function. - * - * @param[in] io An IO. - * @post `io` is the standard input of the current ractor. - * @post In case the calling Ractor is the main Ractor, it also updates - * the process global ::rb_stdout. - */ -void rb_ractor_stdout_set(VALUE io); - -/** - * Assigns an IO to the standard error of the Ractor that is calling this - * function. - * - * @param[in] io An IO. - * @post `io` is the standard input of the current ractor. - * @post In case the calling Ractor is the main Ractor, it also updates - * the process global ::rb_stderr. - */ -void rb_ractor_stderr_set(VALUE io); - -/** - * Issues a new key. - * - * @return A newly issued ractor-local storage key. Keys issued using this - * key can be associated to a Ruby object per Ractor. - */ -rb_ractor_local_key_t rb_ractor_local_storage_value_newkey(void); - -/** - * Queries the key. - * - * @param[in] key A ractor-local storage key to lookup. - * @retval RUBY_Qnil No such key. - * @retval otherwise A value corresponds to `key` in the current Ractor. - * @note This cannot distinguish between a nonexistent key and a key - * exists and corresponds to ::RUBY_Qnil. - */ -VALUE rb_ractor_local_storage_value(rb_ractor_local_key_t key); - -/** - * Queries the key. - * - * @param[in] key A ractor-local storage key to lookup. - * @param[out] val Return value buffer. - * @retval false `key` not found. - * @retval true `key` found. - * @post `val` is updated so that it has the value corresponds to `key` - * in the current Ractor. - */ -bool rb_ractor_local_storage_value_lookup(rb_ractor_local_key_t key, VALUE *val); - -/** - * Associates the passed value to the passed key. - * - * @param[in] key A ractor-local storage key. - * @param[in] val Arbitrary ruby object. - * @post `val` corresponds to `key` in the current Ractor. - */ -void rb_ractor_local_storage_value_set(rb_ractor_local_key_t key, VALUE val); - -/** - * A type of ractor-local storage that destructs itself using ::ruby_xfree. - * - * @internal - * - * Why it is visible from 3rd party extension libraries is not obvious to - * @shyouhei. - */ -RUBY_EXTERN const struct rb_ractor_local_storage_type rb_ractor_local_storage_type_free; - -/** @alias{rb_ractor_local_storage_type_free} */ -#define RB_RACTOR_LOCAL_STORAGE_TYPE_FREE (&rb_ractor_local_storage_type_free) - -/** - * Extended version of rb_ractor_local_storage_value_newkey(). It additionally - * takes the type of the issuing key. - * - * @param[in] type How the value associated with the issuing key should - * behave. - * @return A newly issued ractor-local storage key, of type `type`. - */ -rb_ractor_local_key_t rb_ractor_local_storage_ptr_newkey(const struct rb_ractor_local_storage_type *type); - -/** - * Identical to rb_ractor_local_storage_value() except the return type. - * - * @param[in] key A ractor-local storage key to lookup. - * @retval NULL No such key. - * @retval otherwise A value corresponds to `key` in the current Ractor. - */ -void *rb_ractor_local_storage_ptr(rb_ractor_local_key_t key); - -/** - * Identical to rb_ractor_local_storage_value_set() except the parameter type. - * - * @param[in] key A ractor-local storage key. - * @param[in] ptr A pointer that conforms `key`'s type. - * @post `ptr` corresponds to `key` in the current Ractor. - */ -void rb_ractor_local_storage_ptr_set(rb_ractor_local_key_t key, void *ptr); - -/** - * Destructively transforms the passed object so that multiple Ractors can - * share it. What is a shareable object and what is not is a nuanced concept, - * and @ko1 says the definition can still change. However extension library - * authors might interest to learn how to use #RUBY_TYPED_FROZEN_SHAREABLE. - * - * @param[out] obj Arbitrary ruby object to modify. - * @exception rb_eRactorError Ractors cannot share `obj` by nature. - * @return Passed `obj`. - * @post Multiple Ractors can share `obj`. - * - * @internal - * - * In case an exception is raised, `obj` remains in an intermediate state where - * some of its part is frozen and others are not. @shyouhei is not sure if it - * is either an intended behaviour, current implementation limitation, or - * simply a bug. Note also that there is no way to "melt" a frozen object. - */ -VALUE rb_ractor_make_shareable(VALUE obj); - -/** - * Identical to rb_ractor_make_shareable(), except it returns a (deep) copy of - * the passed one instead of modifying it in-place. - * - * @param[in] obj Arbitrary ruby object to duplicate. - * @exception rb_eRactorError Ractors cannot share `obj` by nature. - * @return A deep copy of `obj` which is sharable among Ractors. - */ -VALUE rb_ractor_make_shareable_copy(VALUE obj); - -RBIMPL_SYMBOL_EXPORT_END() - -/** - * Queries if the passed object has previously classified as shareable or not. - * This doesn't mean anything in practice... Objects can be shared later. - * Always use rb_ractor_shareable_p() instead. - * - * @param[in] obj Object in question. - * @retval RUBY_FL_SHAREABLE It once was shareable before. - * @retval 0 Otherwise. - */ -#define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE) - -/** - * Queries if multiple Ractors can share the passed object or not. Ractors run - * without protecting each other. Sharing an object among them is basically - * dangerous, disabled by default. However there are objects that are - * extremely carefully implemented to be Ractor-safe; for instance integers - * have such property. This function can classify that. - * - * @param[in] obj Arbitrary ruby object. - * @retval true `obj` is capable of shared across ractors. - * @retval false `obj` cannot travel across ractor boundaries. - */ -static inline bool -rb_ractor_shareable_p(VALUE obj) -{ - bool rb_ractor_shareable_p_continue(VALUE obj); - - if (RB_SPECIAL_CONST_P(obj)) { - return true; - } - else if (RB_OBJ_SHAREABLE_P(obj)) { - return true; - } - else { - return rb_ractor_shareable_p_continue(obj); - } -} - -#endif /* RUBY_RACTOR_H */ diff --git a/libs/libruby/ruby/random.h b/libs/libruby/ruby/random.h deleted file mode 100644 index 39bdb6f..0000000 --- a/libs/libruby/ruby/random.h +++ /dev/null @@ -1,359 +0,0 @@ -#ifndef RUBY_RANDOM_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_RANDOM_H 1 -/** - * @file - * @date Sat May 7 11:51:14 JST 2016 - * @copyright 2007-2020 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * - * This is a set of APIs to roll your own subclass of ::rb_cRandom. An - * illustrative example of such PRNG can be found at - * `ext/-test-/ramdom/loop.c`. - */ - -#include "ruby/ruby.h" - -/* - * version - * 0: before versioning; deprecated - * 1: added version, flags and init_32bit function - */ -#define RUBY_RANDOM_INTERFACE_VERSION_MAJOR 1 -#define RUBY_RANDOM_INTERFACE_VERSION_MINOR 0 - -#define RUBY_RANDOM_PASTE_VERSION_SUFFIX(x, y, z) x##_##y##_##z -#define RUBY_RANDOM_WITH_VERSION_SUFFIX(name, major, minor) \ - RUBY_RANDOM_PASTE_VERSION_SUFFIX(name, major, minor) -#define rb_random_data_type \ - RUBY_RANDOM_WITH_VERSION_SUFFIX(rb_random_data_type, \ - RUBY_RANDOM_INTERFACE_VERSION_MAJOR, \ - RUBY_RANDOM_INTERFACE_VERSION_MINOR) -#define RUBY_RANDOM_INTERFACE_VERSION_INITIALIZER \ - {RUBY_RANDOM_INTERFACE_VERSION_MAJOR, RUBY_RANDOM_INTERFACE_VERSION_MINOR} -#define RUBY_RANDOM_INTERFACE_VERSION_MAJOR_MAX 0xff -#define RUBY_RANDOM_INTERFACE_VERSION_MINOR_MAX 0xff - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Base components of the random interface. - * - * @internal - * - * Ideally this could be an empty class if we could assume C++, but in C a - * struct must have at least one field. - */ -struct rb_random_struct { - /** Seed, passed through e.g. `Random.new` */ - VALUE seed; -}; -typedef struct rb_random_struct rb_random_t; /**< @see ::rb_random_struct */ - -RBIMPL_ATTR_NONNULL(()) -/** - * This is the type of functions called when your random object is initialised. - * Passed buffer is the seed object basically. But in Ruby a number can be - * really big. This type of functions accept such big integers as a series of - * machine words. - * - * @param[out] rng Your random struct to fill in. - * @param[in] buf Seed, maybe converted from a bignum. - * @param[in] len Number of words of `buf`. - * @post `rng` is initialised using the passed seeds. - */ -typedef void rb_random_init_func(rb_random_t *rng, const uint32_t *buf, size_t len); - -RBIMPL_ATTR_NONNULL(()) -/** - * This is the type of functions called when your random object is initialised. - * Passed data is the seed integer. - * - * @param[out] rng Your random struct to fill in. - * @param[in] data Seed, single word. - * @post `rng` is initialised using the passed seeds. - */ -typedef void rb_random_init_int32_func(rb_random_t *rng, uint32_t data); - -RBIMPL_ATTR_NONNULL(()) -/** - * This is the type of functions called from your object's `#rand` method. - * - * @param[out] rng Your random struct to extract an integer from. - * @return A random number. - * @post `rng` is consumed somehow. - */ -typedef unsigned int rb_random_get_int32_func(rb_random_t *rng); - -RBIMPL_ATTR_NONNULL(()) -/** - * This is the type of functions called from your object's `#bytes` method. - * - * @param[out] rng Your random struct to extract an integer from. - * @param[out] buf Return buffer of at least `len` bytes length. - * @param[in] len Number of bytes of `buf`. - * @post `rng` is consumed somehow. - * @post `buf` is filled with random bytes. - */ -typedef void rb_random_get_bytes_func(rb_random_t *rng, void *buf, size_t len); - -RBIMPL_ATTR_NONNULL(()) -/** - * This is the type of functions called from your object's `#rand` method. - * - * @param[out] rng Your random struct to extract an integer from. - * @param[in] excl Pass nonzero value here to indicate you don't want 1.0. - * @return A random number of range 0.0 to 1.0. - * @post `rng` is consumed somehow. - */ -typedef double rb_random_get_real_func(rb_random_t *rng, int excl); - -/** PRNG algorithmic interface, analogous to Ruby level classes. */ -typedef struct { - /** Number of bits of seed numbers. */ - size_t default_seed_bits; - - /** - * Major/minor versions of this interface - */ - struct { - uint8_t major, minor; - } version; - - /** - * Reserved flags - */ - uint16_t flags; - - /** Function to initialize from uint32_t array. */ - rb_random_init_func *init; - - /** Function to initialize from single uint32_t. */ - rb_random_init_int32_func *init_int32; - - /** Function to obtain a random integer. */ - rb_random_get_int32_func *get_int32; - - /** - * Function to obtain a series of random bytes. If your PRNG have a native - * method to yield arbitrary number of bytes use that to implement this. - * But in case you lack such things, you can do so by using - * rb_rand_bytes_int32() - * - * ```CXX - * extern rb_random_get_int32_func your_get_int32_func; - * - * void - * your_get_byes_func(rb_random_t *rng, void *buf, size_t len) - * { - * rb_rand_bytes_int32(your_get_int32_func, rng, buf, len); - * } - * ``` - */ - rb_random_get_bytes_func *get_bytes; - - /** - * Function to obtain a random double. If your PRNG have a native method - * to yield a floating point random number use that to implement this. But - * in case you lack such things, you can do so by using - * rb_int_pair_to_real(). - * - * ```CXX - * extern rb_random_get_int32_func your_get_int32_func; - * - * void - * your_get_real_func(rb_random_t *rng, int excl) - * { - * auto a = your_get_int32_func(rng); - * auto b = your_get_int32_func(rng); - * return rb_int_pair_to_real(a, b, excl); - * } - * ``` - */ - rb_random_get_real_func *get_real; -} rb_random_interface_t; - -/** - * This utility macro defines 4 functions named prefix_init, prefix_init_int32, - * prefix_get_int32, prefix_get_bytes. - */ -#define RB_RANDOM_INTERFACE_DECLARE(prefix) \ - static void prefix##_init(rb_random_t *, const uint32_t *, size_t); \ - static void prefix##_init_int32(rb_random_t *, uint32_t); \ - static unsigned int prefix##_get_int32(rb_random_t *); \ - static void prefix##_get_bytes(rb_random_t *, void *, size_t) - -/** - * Identical to #RB_RANDOM_INTERFACE_DECLARE except it also declares - * prefix_get_real. - */ -#define RB_RANDOM_INTERFACE_DECLARE_WITH_REAL(prefix) \ - RB_RANDOM_INTERFACE_DECLARE(prefix); \ - static double prefix##_get_real(rb_random_t *, int) - -/** - * This utility macro expands to the names declared using - * #RB_RANDOM_INTERFACE_DECLARE. Expected to be used inside of a - * ::rb_random_interface_t initialiser: - * - * ```CXX - * RB_RANDOM_INTERFACE_DECLARE(foo); - * - * static inline constexpr rb_random_interface_t foo_interface = { - * 32768, // bits - * RB_RANDOM_INTERFACE_DEFINE(foo), - * }; - * ``` - */ -#define RB_RANDOM_INTERFACE_DEFINE(prefix) \ - RUBY_RANDOM_INTERFACE_VERSION_INITIALIZER, 0, \ - prefix##_init, \ - prefix##_init_int32, \ - prefix##_get_int32, \ - prefix##_get_bytes - -/** - * Identical to #RB_RANDOM_INTERFACE_DEFINE except it also defines - * prefix_get_real. - */ -#define RB_RANDOM_INTERFACE_DEFINE_WITH_REAL(prefix) \ - RB_RANDOM_INTERFACE_DEFINE(prefix), \ - prefix##_get_real - -#define RB_RANDOM_DEFINE_INIT_INT32_FUNC(prefix) \ - static void prefix##_init_int32(rb_random_t *rnd, uint32_t data) \ - { \ - prefix##_init(rnd, &data, 1); \ - } - -#if defined _WIN32 && !defined __CYGWIN__ -typedef rb_data_type_t rb_random_data_type_t; -# define RB_RANDOM_PARENT 0 -#else - -/** This is the type of ::rb_random_data_type. */ -typedef const rb_data_type_t rb_random_data_type_t; - -/** - * This utility macro can be used when you define your own PRNG type: - * - * ```CXX - * static inline constexpr rb_random_interface_t your_if = { - * 0, RB_RANDOM_INTERFACE_DEFINE(your), - * }; - * - * static inline constexpr rb_random_data_type_t your_prng_type = { - * "your PRNG", - * { rb_random_mark, }, - * RB_RANDOM_PARENT, // <<-- HERE - * &your_if, - * 0, - * } - * ``` - */ -# define RB_RANDOM_PARENT &rb_random_data_type -#endif - -/** - * This macro is expected to be called exactly once at the beginning of a - * program, possibly from inside of your `Init_Foo()` function. Depending on - * platforms #RB_RANDOM_PARENT can require a fixup. This routine does that - * when necessary. - */ -#define RB_RANDOM_DATA_INIT_PARENT(random_data) \ - rbimpl_random_data_init_parent(&random_data) - -/** - * This is the implementation of ::rb_data_type_struct::dmark for - * ::rb_random_data_type. In case your PRNG does not involve Ruby objects at - * all (which is quite likely), you can simply reuse it. - * - * @param[out] ptr Target to mark, which is a ::rb_random_t this case. - */ -void rb_random_mark(void *ptr); - -/** - * Initialises an allocated ::rb_random_t instance. Call it from your own - * initialiser appropriately. - * - * @param[out] rnd Your PRNG's base part. - * @post `rnd` is filled with an initial state. - */ -void rb_random_base_init(rb_random_t *rnd); - -/** - * Generates a 64 bit floating point number by concatenating two 32bit unsigned - * integers. - * - * @param[in] a Most significant 32 bits of the result. - * @param[in] b Least significant 32 bits of the result. - * @param[in] excl Whether the result should exclude 1.0 or not. - * @return A double, whose range is either `[0, 1)` or `[0, 1]`. - * @see ::rb_random_interface_t::get_real() - * - * @internal - * - * This in fact has nothing to do with PRNGs. - */ -double rb_int_pair_to_real(uint32_t a, uint32_t b, int excl); - -/** - * Repeatedly calls the passed function over and over again until the passed - * buffer is filled with random bytes. - * - * @param[in] func Generator function. - * @param[out] prng Passed as-is to `func`. - * @param[out] buff Return buffer. - * @param[in] size Number of words of `buff`. - * @post `buff` is filled with random bytes. - * @post `prng` is updated by `func`. - * @see ::rb_random_interface_t::get_bytes() - */ -void rb_rand_bytes_int32(rb_random_get_int32_func *func, rb_random_t *prng, void *buff, size_t size); - -/** - * The data that holds the backend type of ::rb_cRandom. Used as your PRNG's - * ::rb_data_type_struct::parent. - */ -RUBY_EXTERN const rb_data_type_t rb_random_data_type; - -RBIMPL_SYMBOL_EXPORT_END() - -RBIMPL_ATTR_PURE_UNLESS_DEBUG() -/* :TODO: can this function be __attribute__((returns_nonnull)) or not? */ -/** - * Queries the interface of the passed random object. - * - * @param[in] obj An instance (of a subclass) of ::rb_cRandom. - * @return Its corresponding ::rb_random_interface_t interface. - */ -static inline const rb_random_interface_t * -rb_rand_if(VALUE obj) -{ - RBIMPL_ASSERT_OR_ASSUME(RTYPEDDATA_P(obj)); - const struct rb_data_type_struct *t = RTYPEDDATA_TYPE(obj); - const void *ret = t->data; - return RBIMPL_CAST((const rb_random_interface_t *)ret); -} - -RBIMPL_ATTR_NOALIAS() -/** - * @private - * - * This is an implementation detail of #RB_RANDOM_DATA_INIT_PARENT. People - * don't use it directly. - * - * @param[out] random_data Region to fill. - * @post ::rb_random_data_type is filled appropriately. - */ -static inline void -rbimpl_random_data_init_parent(rb_random_data_type_t *random_data) -{ -#if defined _WIN32 && !defined __CYGWIN__ - random_data->parent = &rb_random_data_type; -#endif -} - -#endif /* RUBY_RANDOM_H */ diff --git a/libs/libruby/ruby/re.h b/libs/libruby/ruby/re.h deleted file mode 100644 index 3892d6e..0000000 --- a/libs/libruby/ruby/re.h +++ /dev/null @@ -1,147 +0,0 @@ -#ifndef RUBY_RE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_RE_H 1 -/** - * @file - * @author $Author$ - * @date Thu Sep 30 14:18:32 JST 1993 - * @copyright Copyright (C) 1993-2007 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ -#include "ruby/internal/config.h" - -#ifdef HAVE_SYS_TYPES_H -# include -#endif - -#include - -#include "ruby/regex.h" -#include "ruby/internal/core/rmatch.h" -#include "ruby/internal/dllexport.h" - -struct re_registers; /* Defined in onigmo.h */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Creates a new instance of ::rb_cRegexp. It can be seen as a specialised - * version of rb_reg_new_str() where it does not take options. - * - * @param[in] str Source code in String. - * @return Allocated new instance of ::rb_cRegexp. - */ -VALUE rb_reg_regcomp(VALUE str); - -/** - * Runs the passed regular expression over the passed string. Unlike - * rb_reg_search() this function also takes position and direction of the - * search, which make it possible for this function to run from in middle of - * the string. - * - * @param[in] re Regular expression to execute. - * @param[in] str Target string to search. - * @param[in] pos Offset in `str` to start searching, in bytes. - * @param[in] dir `pos`' direction; 0 means left-to-right, 1 for - * the opposite. - * @exception rb_eArgError `re` is broken. - * @exception rb_eRegexpError `re` is malformed. - * @retval -1 Match failed. - * @retval otherwise Offset of first such byte where match happened. - * @post `Regexp.last_match` is updated. - * @post `$&`, `$~`, etc., are updated. - * - * @internal - * - * Distinction between raising ::rb_eArgError and ::rb_eRegexpError is not - * obvious, at least to @shyouhei. - */ -long rb_reg_search(VALUE re, VALUE str, long pos, int dir); - -/** - * Substitution. This is basically the implementation of `String#sub`. Also - * `String#gsub` repeatedly calls this function. - * - * @param[in] repl Replacement string, e.g. `"\\1\\2"` - * @param[in] src Source string, to be replaced. - * @param[in] regs Matched data generated by applying `rexp` to `src`. - * @param[in] rexp Regular expression. - * @return A substituted string. - * - * @internal - * - * This function does not check for encoding compatibility. `String#sub!` - * etc. employ their own checker. - * - * `regs` should have been `const struct re_registers *` because it is read - * only. Kept as-is for compatibility. - */ -VALUE rb_reg_regsub(VALUE repl, VALUE src, struct re_registers *regs, VALUE rexp); - -/** - * Tell us if this is a wrong idea, but it seems this function has no usage at - * all. Just remains here for theoretical backwards compatibility. - * - * @param[in] re Regular expression to execute. - * @param[in] str Target string to search. - * @param[in] pos Offset in `str` to start searching, in bytes. - * @param[in] dir `pos`' direction; 0 means left-to-right, 1 for - * the opposite. - * @return Adjusted nearest offset to `pos` inside of `str`, where is a - * character boundary. - * - */ -long rb_reg_adjust_startpos(VALUE re, VALUE str, long pos, int dir); - -/** - * Escapes any characters that would have special meaning in a regular - * expression. - * - * @param[in] str Target string to escape. - * @return A copy of `str` whose contents are escaped. - */ -VALUE rb_reg_quote(VALUE str); - -/** - * Exercises various checks and preprocesses so that the given regular - * expression can be applied to the given string. The preprocess here includes - * (but not limited to) for instance encoding conversion. - * - * @param[in] re Target regular expression. - * @param[in] str What `re` is about to run on. - * @exception rb_eArgError `re` does not fit for `str`. - * @exception rb_eEncCompatError `re` and `str` are incompatible. - * @exception rb_eRegexpError `re` is malformed. - * @return A preprocessesed pattern buffer ready to be applied to `str`. - * @note The return value is manages by our GC. Don't free. - * - * @internal - * - * The return type, `regex_t *`, is defined in ``, _and_ - * _conflicts_ with POSIX's ``. We can no longer save the situation - * at this point. Just don't mix the two. - */ -regex_t *rb_reg_prepare_re(VALUE re, VALUE str); - -/** - * Duplicates a match data. This is roughly the same as `onig_region_copy()`, - * except it tries to GC when there is not enough memory. - * - * @param[out] dst Target registers to fill. - * @param[in] src Source registers to duplicate. - * @exception rb_eNoMemError Not enough memory. - * @retval 0 Successful - * @retval ONIGERR_MEMORY Not enough memory, even after GC (unlikely). - * @post `dst` has identical contents to `src`. - * - * @internal - * - * It seems this function is here for `ext/strscan` and nothing else. - */ -int rb_reg_region_copy(struct re_registers *dst, const struct re_registers *src); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_RE_H */ diff --git a/libs/libruby/ruby/regex.h b/libs/libruby/ruby/regex.h deleted file mode 100644 index 5327817..0000000 --- a/libs/libruby/ruby/regex.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef ONIGURUMA_REGEX_H /*-*-C++-*-vi:se ft=cpp:*/ -#define ONIGURUMA_REGEX_H 1 -/** - * @author $Author$ - * @copyright Copyright (C) 1993-2007 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#ifdef RUBY -#include "ruby/oniguruma.h" -#else -#include "oniguruma.h" -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -#ifndef ONIG_RUBY_M17N - -ONIG_EXTERN OnigEncoding OnigEncDefaultCharEncoding; - -#define mbclen(p,e,enc) rb_enc_mbclen((p),(e),(enc)) - -#endif /* ifndef ONIG_RUBY_M17N */ - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* ONIGURUMA_REGEX_H */ diff --git a/libs/libruby/ruby/ruby.h b/libs/libruby/ruby/ruby.h deleted file mode 100644 index bbe9504..0000000 --- a/libs/libruby/ruby/ruby.h +++ /dev/null @@ -1,321 +0,0 @@ -#ifndef RUBY_RUBY_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_RUBY_H 1 -/** - * @file - * @author $Author$ - * @date Thu Jun 10 14:26:32 JST 1993 - * @copyright Copyright (C) 1993-2008 Yukihiro Matsumoto - * @copyright Copyright (C) 2000 Network Applied Communication Laboratory, - * Inc. - * @copyright Copyright (C) 2000 Information-technology Promotion Agency, - * Japan - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ -#include "ruby/internal/config.h" - -/* @shyouhei doesn't understand why we need at this very - * beginning of the entire circus. */ -#ifdef HAVE_INTRINSICS_H -#include -#endif - -#include - -#include "defines.h" -#include "ruby/assert.h" -#include "ruby/backward/2/assume.h" -#include "ruby/backward/2/inttypes.h" -#include "ruby/backward/2/limits.h" -#include "ruby/internal/abi.h" -#include "ruby/internal/anyargs.h" -#include "ruby/internal/arithmetic.h" -#include "ruby/internal/core.h" -#include "ruby/internal/ctype.h" -#include "ruby/internal/dllexport.h" -#include "ruby/internal/error.h" -#include "ruby/internal/eval.h" -#include "ruby/internal/event.h" -#include "ruby/internal/fl_type.h" -#include "ruby/internal/gc.h" -#include "ruby/internal/glob.h" -#include "ruby/internal/globals.h" -#include "ruby/internal/has/warning.h" -#include "ruby/internal/interpreter.h" -#include "ruby/internal/iterator.h" -#include "ruby/internal/memory.h" -#include "ruby/internal/method.h" -#include "ruby/internal/module.h" -#include "ruby/internal/newobj.h" -#include "ruby/internal/rgengc.h" -#include "ruby/internal/scan_args.h" -#include "ruby/internal/special_consts.h" -#include "ruby/internal/symbol.h" -#include "ruby/internal/value.h" -#include "ruby/internal/value_type.h" -#include "ruby/internal/variable.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/* Module#methods, #singleton_methods and so on return Symbols */ -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define USE_SYMBOL_AS_METHOD_NAME 1 - -/** - * Converts an object to a path. It first tries `#to_path` method if any, then - * falls back to `#to_str` method. - * - * @param[in] obj Arbitrary ruby object. - * @exception rb_eArgError `obj` contains a NUL byte. - * @exception rb_eTypeError `obj` is not path-ish. - * @exception rb_eEncCompatError No encoding conversion from `obj` to path. - * @return Converted path object. - */ -VALUE rb_get_path(VALUE obj); - -/** - * Ensures that the parameter object is a path. - * - * @param[in,out] v Arbitrary ruby object. - * @exception rb_eArgError `v` contains a NUL byte. - * @exception rb_eTypeError `v` is not path-ish. - * @exception rb_eEncCompatError `v` is not path-compatible. - * @post `v` is a path. - */ -#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v)) - -/** - * @deprecated This function is an alias of rb_get_path() now. The part that - * did "no_checksafe" was deleted. It remains here because of no - * harm. - */ -VALUE rb_get_path_no_checksafe(VALUE); - -/** - * @deprecated This macro is an alias of #FilePathValue now. The part that did - * "String" was deleted. It remains here because of no harm. - */ -#define FilePathStringValue(v) ((v) = rb_get_path(v)) - -/** @cond INTERNAL_MACRO */ -#if defined(HAVE_BUILTIN___BUILTIN_CONSTANT_P) && \ - defined(HAVE_STMT_AND_DECL_IN_EXPR) -#define rb_varargs_argc_check_runtime(argc, vargc) \ - (((argc) <= (vargc)) \ - ? (argc) \ - : (rb_fatal("argc(%d) exceeds actual arguments(%d)", argc, vargc), 0)) -#define rb_varargs_argc_valid_p(argc, vargc) \ - ((argc) == 0 ? (vargc) <= 1 : /* [ruby-core:85266] [Bug #14425] */ \ - (argc) == (vargc)) -#if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P) -#ifdef HAVE_ATTRIBUTE_ERRORFUNC -ERRORFUNC((" argument length doesn't match"), - int rb_varargs_bad_length(int, int)); -#else -#define rb_varargs_bad_length(argc, vargc) \ - ((argc) / rb_varargs_argc_valid_p(argc, vargc)) -#endif -#define rb_varargs_argc_check(argc, vargc) \ - __builtin_choose_expr(__builtin_constant_p(argc), \ - (rb_varargs_argc_valid_p(argc, vargc) \ - ? (argc) \ - : rb_varargs_bad_length(argc, vargc)), \ - rb_varargs_argc_check_runtime(argc, vargc)) -#else -#define rb_varargs_argc_check(argc, vargc) \ - rb_varargs_argc_check_runtime(argc, vargc) -#endif -#endif -/** @endcond */ - -/** - * Queries the name of the passed class. - * - * @param[in] klass An instance of a class. - * @return The name of `klass`. - * @note Return value is managed by our GC. Don't free. - */ -const char *rb_class2name(VALUE klass); - -/** - * Queries the name of the class of the passed object. - * - * @param[in] obj Arbitrary ruby object. - * @return The name of the class of `obj`. - * @note Return value is managed by our GC. Don't free. - */ -const char *rb_obj_classname(VALUE obj); - -/** - * Inspects an object. It first calls the argument's `#inspect` method, then - * feeds its result string into ::rb_stdout. - * - * This is identical to Ruby level `Kernel#p`, except it takes only one object. - * - * @internal - * - * Above description is in fact inaccurate. This API interfaces with Ractors. - */ -void rb_p(VALUE obj); - -/** - * This function is an optimised version of calling `#==`. It checks equality - * between two objects by first doing a fast identity check using using C's - * `==` (same as `BasicObject#equal?`). If that check fails, it calls `#==` - * dynamically. This optimisation actually affects semantics, because when - * `#==` returns false for the same object obj, `rb_equal(obj, obj)` would - * still return true. This happens for `Float::NAN`, where `Float::NAN == - * Float::NAN` is `false`, but `rb_equal(Float::NAN, Float::NAN)` is `true`. - * - * @param[in] lhs Comparison LHS. - * @param[in] rhs Comparison RHS. - * @retval RUBY_Qtrue They are the same. - * @retval RUBY_Qfalse They are different. - */ -VALUE rb_equal(VALUE lhs, VALUE rhs); - -/** - * Identical to rb_require_string(), except it takes C's string instead of - * Ruby's. - * - * @param[in] feature Name of a feature, e.g. `"json"`. - * @exception rb_eLoadError No such feature. - * @exception rb_eRuntimeError `$"` is frozen; unable to push. - * @retval RUBY_Qtrue The feature is loaded for the first time. - * @retval RUBY_Qfalse The feature has already been loaded. - * @post `$"` is updated. - */ -VALUE rb_require(const char *feature); - -#include "ruby/intern.h" - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define RUBY_VM 1 /* YARV */ - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define HAVE_NATIVETHREAD - -/** - * Queries if the thread which calls this function is a ruby's thread. - * "Ruby's" in this context is a thread created using one of our APIs like - * rb_thread_create(). There are distinctions between ruby's and other - * threads. For instance calling ruby methods are allowed only from inside of - * a ruby's thread. - * - * @retval 1 The current thread is a Ruby's thread. - * @retval 0 The current thread is a random thread from outside of Ruby. - */ -int ruby_native_thread_p(void); - -/** - * @private - * - * This macro is for internal use. Must be a mistake to place here. - */ -#define InitVM(ext) \ - { \ - void InitVM_##ext(void); \ - InitVM_##ext(); \ - } - -RBIMPL_ATTR_NONNULL((3)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4) -/** - * Our own locale-insensitive version of `snprintf(3)`. It can also be seen as - * a routine identical to rb_sprintf(), except it writes back to the passed - * buffer instead of allocating a new Ruby object. - * - * @param[out] str Return buffer - * @param[in] n Number of bytes of `str`. - * @param[in] fmt A `printf`-like format specifier. - * @param[in] ... Variadic number of contents to format. - * @return Number of bytes that would have been written to `str`, if `n` - * was large enough. Comparing this to `n` can give you insights - * that the buffer is too small or too big. Especially passing 0 - * to `n` gives you the exact number of bytes necessary to hold - * the result string without writing anything to anywhere. - * @post `str` holds up to `n-1` bytes of formatted contents (and the - * terminating NUL character.) - */ -int ruby_snprintf(char *str, size_t n, char const *fmt, ...); - -RBIMPL_ATTR_NONNULL((3)) -RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 0) -/** - * Identical to ruby_snprintf(), except it takes a `va_list`. It can also be - * seen as a routine identical to rb_vsprintf(), except it writes back to the - * passed buffer instead of allocating a new Ruby object. - * - * @param[out] str Return buffer - * @param[in] n Number of bytes of `str`. - * @param[in] fmt A `printf`-like format specifier. - * @param[in] ap Contents to format. - * @return Number of bytes that would have been written to `str`, if `n` - * was large enough. Comparing this to `n` can give you insights - * that the buffer is too small or too big. Especially passing 0 - * to `n` gives you the exact number of bytes necessary to hold - * the result string without writing anything to anywhere. - * @post `str` holds up to `n-1` bytes of formatted contents (and the - * terminating NUL character.) - */ -int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap); - -/** @cond INTERNAL_MACRO */ -#if RBIMPL_HAS_WARNING("-Wgnu-zero-variadic-macro-arguments") -#/* Skip it; clang -pedantic doesn't like the following */ -#elif defined(__GNUC__) && defined(HAVE_VA_ARGS_MACRO) && defined(__OPTIMIZE__) -#define rb_yield_values(argc, ...) \ - __extension__({ \ - const int rb_yield_values_argc = (argc); \ - const VALUE rb_yield_values_args[] = {__VA_ARGS__}; \ - const int rb_yield_values_nargs = \ - (int)(sizeof(rb_yield_values_args) / sizeof(VALUE)); \ - rb_yield_values2( \ - rb_varargs_argc_check(rb_yield_values_argc, rb_yield_values_nargs), \ - rb_yield_values_nargs ? rb_yield_values_args : NULL); \ - }) - -#define rb_funcall(recv, mid, argc, ...) \ - __extension__({ \ - const int rb_funcall_argc = (argc); \ - const VALUE rb_funcall_args[] = {__VA_ARGS__}; \ - const int rb_funcall_nargs = \ - (int)(sizeof(rb_funcall_args) / sizeof(VALUE)); \ - rb_funcallv(recv, mid, \ - rb_varargs_argc_check(rb_funcall_argc, rb_funcall_nargs), \ - rb_funcall_nargs ? rb_funcall_args : NULL); \ - }) -#endif -/** @endcond */ - -#ifndef RUBY_DONT_SUBST -#include "ruby/subst.h" -#endif - -#if !defined RUBY_EXPORT && !defined RUBY_NO_OLD_COMPATIBILITY -#include "ruby/backward.h" -#endif - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_RUBY_H */ diff --git a/libs/libruby/ruby/st.h b/libs/libruby/ruby/st.h deleted file mode 100644 index f35ab43..0000000 --- a/libs/libruby/ruby/st.h +++ /dev/null @@ -1,199 +0,0 @@ -/* This is a public domain general purpose hash table package - originally written by Peter Moore @ UCB. - - The hash table data structures were redesigned and the package was - rewritten by Vladimir Makarov . */ - -#ifndef RUBY_ST_H -#define RUBY_ST_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include "ruby/defines.h" - -RUBY_SYMBOL_EXPORT_BEGIN - -#if SIZEOF_LONG == SIZEOF_VOIDP -typedef unsigned long st_data_t; -#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP -typedef unsigned LONG_LONG st_data_t; -#else -# error ---->> st.c requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<---- -#endif -#define ST_DATA_T_DEFINED - -#ifndef CHAR_BIT -# ifdef HAVE_LIMITS_H -# include -# else -# define CHAR_BIT 8 -# endif -#endif -#ifndef _ -# define _(args) args -#endif -#ifndef ANYARGS -# ifdef __cplusplus -# define ANYARGS ... -# else -# define ANYARGS -# endif -#endif - -typedef struct st_table st_table; - -typedef st_data_t st_index_t; - -/* Maximal value of unsigned integer type st_index_t. */ -#define MAX_ST_INDEX_VAL (~(st_index_t) 0) - -typedef int st_compare_func(st_data_t, st_data_t); -typedef st_index_t st_hash_func(st_data_t); - -typedef char st_check_for_sizeof_st_index_t[SIZEOF_VOIDP == (int)sizeof(st_index_t) ? 1 : -1]; -#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP - -struct st_hash_type { - int (*compare)(st_data_t, st_data_t); /* st_compare_func* */ - st_index_t (*hash)(st_data_t); /* st_hash_func* */ -}; - -#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT) - -#if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR) && defined(HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P) -# define ST_DATA_COMPATIBLE_P(type) \ - __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0) -#else -# define ST_DATA_COMPATIBLE_P(type) 0 -#endif - -typedef struct st_table_entry st_table_entry; - -struct st_table_entry; /* defined in st.c */ - -struct st_table { - /* Cached features of the table -- see st.c for more details. */ - unsigned char entry_power, bin_power, size_ind; - /* How many times the table was rebuilt. */ - unsigned int rebuilds_num; - const struct st_hash_type *type; - /* Number of entries currently in the table. */ - st_index_t num_entries; - /* Array of bins used for access by keys. */ - st_index_t *bins; - /* Start and bound index of entries in array entries. - entries_starts and entries_bound are in interval - [0,allocated_entries]. */ - st_index_t entries_start, entries_bound; - /* Array of size 2^entry_power. */ - st_table_entry *entries; -}; - -#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0) - -enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK, ST_REPLACE}; - -size_t rb_st_table_size(const struct st_table *tbl); -#define st_table_size rb_st_table_size -st_table *rb_st_init_table(const struct st_hash_type *); -#define st_init_table rb_st_init_table -st_table *rb_st_init_table_with_size(const struct st_hash_type *, st_index_t); -#define st_init_table_with_size rb_st_init_table_with_size -st_table *rb_st_init_numtable(void); -#define st_init_numtable rb_st_init_numtable -st_table *rb_st_init_numtable_with_size(st_index_t); -#define st_init_numtable_with_size rb_st_init_numtable_with_size -st_table *rb_st_init_strtable(void); -#define st_init_strtable rb_st_init_strtable -st_table *rb_st_init_strtable_with_size(st_index_t); -#define st_init_strtable_with_size rb_st_init_strtable_with_size -st_table *rb_st_init_strcasetable(void); -#define st_init_strcasetable rb_st_init_strcasetable -st_table *rb_st_init_strcasetable_with_size(st_index_t); -#define st_init_strcasetable_with_size rb_st_init_strcasetable_with_size -int rb_st_delete(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */ -#define st_delete rb_st_delete -int rb_st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t); -#define st_delete_safe rb_st_delete_safe -int rb_st_shift(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */ -#define st_shift rb_st_shift -int rb_st_insert(st_table *, st_data_t, st_data_t); -#define st_insert rb_st_insert -int rb_st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t)); -#define st_insert2 rb_st_insert2 -int rb_st_lookup(st_table *, st_data_t, st_data_t *); -#define st_lookup rb_st_lookup -int rb_st_get_key(st_table *, st_data_t, st_data_t *); -#define st_get_key rb_st_get_key -typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing); -/* *key may be altered, but must equal to the old key, i.e., the - * results of hash() are same and compare() returns 0, otherwise the - * behavior is undefined */ -int rb_st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg); -#define st_update rb_st_update -typedef int st_foreach_callback_func(st_data_t, st_data_t, st_data_t); -typedef int st_foreach_check_callback_func(st_data_t, st_data_t, st_data_t, int); -int rb_st_foreach_with_replace(st_table *tab, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg); -#define st_foreach_with_replace rb_st_foreach_with_replace -int rb_st_foreach(st_table *, st_foreach_callback_func *, st_data_t); -#define st_foreach rb_st_foreach -int rb_st_foreach_check(st_table *, st_foreach_check_callback_func *, st_data_t, st_data_t); -#define st_foreach_check rb_st_foreach_check -st_index_t rb_st_keys(st_table *table, st_data_t *keys, st_index_t size); -#define st_keys rb_st_keys -st_index_t rb_st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never); -#define st_keys_check rb_st_keys_check -st_index_t rb_st_values(st_table *table, st_data_t *values, st_index_t size); -#define st_values rb_st_values -st_index_t rb_st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never); -#define st_values_check rb_st_values_check -void rb_st_add_direct(st_table *, st_data_t, st_data_t); -#define st_add_direct rb_st_add_direct -void rb_st_free_table(st_table *); -#define st_free_table rb_st_free_table -void rb_st_cleanup_safe(st_table *, st_data_t); -#define st_cleanup_safe rb_st_cleanup_safe -void rb_st_clear(st_table *); -#define st_clear rb_st_clear -st_table *rb_st_copy(st_table *); -#define st_copy rb_st_copy -CONSTFUNC(int rb_st_numcmp(st_data_t, st_data_t)); -#define st_numcmp rb_st_numcmp -CONSTFUNC(st_index_t rb_st_numhash(st_data_t)); -#define st_numhash rb_st_numhash -PUREFUNC(int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2)); -#define st_locale_insensitive_strcasecmp rb_st_locale_insensitive_strcasecmp -PUREFUNC(int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n)); -#define st_locale_insensitive_strncasecmp rb_st_locale_insensitive_strncasecmp -#define st_strcasecmp rb_st_locale_insensitive_strcasecmp -#define st_strncasecmp rb_st_locale_insensitive_strncasecmp -PUREFUNC(size_t rb_st_memsize(const st_table *)); -#define st_memsize rb_st_memsize -PUREFUNC(st_index_t rb_st_hash(const void *ptr, size_t len, st_index_t h)); -#define st_hash rb_st_hash -CONSTFUNC(st_index_t rb_st_hash_uint32(st_index_t h, uint32_t i)); -#define st_hash_uint32 rb_st_hash_uint32 -CONSTFUNC(st_index_t rb_st_hash_uint(st_index_t h, st_index_t i)); -#define st_hash_uint rb_st_hash_uint -CONSTFUNC(st_index_t rb_st_hash_end(st_index_t h)); -#define st_hash_end rb_st_hash_end -CONSTFUNC(st_index_t rb_st_hash_start(st_index_t h)); -#define st_hash_start(h) ((st_index_t)(h)) - -void rb_hash_bulk_insert_into_st_table(long, const VALUE *, VALUE); - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_ST_H */ diff --git a/libs/libruby/ruby/subst.h b/libs/libruby/ruby/subst.h deleted file mode 100644 index d7b9a63..0000000 --- a/libs/libruby/ruby/subst.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef RUBY_SUBST_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_SUBST_H 1 -/** - * @author Ruby developers - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ - -#undef snprintf -#undef vsnprintf -#define snprintf ruby_snprintf -#define vsnprintf ruby_vsnprintf - -#ifdef BROKEN_CLOSE -#undef getpeername -#define getpeername ruby_getpeername -#undef getsockname -#define getsockname ruby_getsockname -#undef shutdown -#define shutdown ruby_shutdown -#undef close -#define close ruby_close -#endif -#endif diff --git a/libs/libruby/ruby/thread.h b/libs/libruby/ruby/thread.h deleted file mode 100644 index 0b5b1ca..0000000 --- a/libs/libruby/ruby/thread.h +++ /dev/null @@ -1,235 +0,0 @@ -#ifndef RUBY_THREAD_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_THREAD_H 1 -/** - * @file - * @author $Author: matz $ - * @date Tue Jul 10 17:35:43 JST 2012 - * @copyright Copyright (C) 2007 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - */ -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/intern/thread.h" /* rb_unblock_function_t */ -#include "ruby/internal/dllexport.h" - -/** - * @name Flags for rb_nogvl() - * - * @{ - */ - -/** - * Passing this flag to rb_nogvl() prevents it from checking interrupts. - * Interrupts can impact your program negatively. For instance consider - * following callback function: - * - * ```CXX - * static inline int fd; // set elsewhere. - * static inline auto callback(auto buf) { - * auto tmp = ruby_xmalloc(BUFSIZ); - * auto ret = ruby_xmalloc(sizeof(ssize_t)); // (a) - * auto n = read(fd, tmp, BUFSIZ); // (b) - * memcpy(buf, tmp, n); // (c) - * memcpy(ret, n, sizeof(n)); - * ruby_xfree(tmp); - * return ret; - * } - * ``` - * - * Here, if it gets interrupted at (a) or (b), `read(2)` is cancelled and this - * function leaks memory (which is not a good thing of course, but...). But if - * it gets interrupted at (c), where `read(2)` is already done, interruption is - * way more catastrophic because what was read gets lost. To reroute this kind - * of problem you should set this flag. And check interrupts elsewhere at your - * own risk. - */ -#define RB_NOGVL_INTR_FAIL (0x1) - -/** - * Passing this flag to rb_nogvl() indicates that the passed UBF is - * async-signal-safe. An UBF could be async safe, and that makes things - * simpler. However async unsafe UBFs are just okay. If unsure, you can - * safely leave it unspecified. - * - * @internal - * - * This makes sense only in case of POSIX threads. - */ -#define RB_NOGVL_UBF_ASYNC_SAFE (0x2) - -/** @} */ - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -RBIMPL_ATTR_NONNULL((1)) -/** - * (Re-)acquires the GVL. This manoeuvre makes it possible for an out-of-GVL - * routine to one-shot call a ruby method. - * - * What this function does: - * - * 1. Blocks until it acquires the GVL. - * 2. Calls the passed function. - * 3. Releases the GVL. - * 4. Returns what was returned form the passed function. - * - * @param[in] func What to call with GVL. - * @param[in,out] data1 Passed as-is to `func`. - * @return What was returned from `func`. - * @warning `func` must not return a Ruby object. If it did such return - * value would escape from GC's scope; would not be marked. - * @warning Global escapes from this function just yield whatever fatal - * undefined behaviours. You must make sure that `func` does - * not raise, by properly rescuing everything using - * e.g. rb_protect(). - * @warning You cannot convert a non-Ruby thread into a Ruby thread - * using this API. This function makes sense only from inside - * of a rb_thread_call_without_gvl()'s callback. - */ -void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Allows the passed function to run in parallel with other Ruby threads. - * - * What this function does: - * - * 1. Checks (and handles) pending interrupts. - * 2. Releases the GVL. (Others can run here in parallel...) - * 3. Calls the passed function. - * 4. Blocks until it re-acquires the GVL. - * 5. Checks interrupts that happened between 2 to 4. - * - * In case other threads interfaced with this thread using rb_thread_kill() - * etc., the passed UBF is additionally called. See ::rb_unblock_function_t - * for details. - * - * Unlike rb_thread_call_without_gvl2() this function also reacts to signals - * etc. - * - * @param[in] func A function to call without GVL. - * @param[in,out] data1 Passed as-is to `func`. - * @param[in] ubf An UBF to cancel `func`. - * @param[in,out] data2 Passed as-is to `ubf`. - * @return What `func` returned, or 0 in case `ubf` cancelled `func`. - * @warning You cannot use most of Ruby C APIs like calling methods or - * raising exceptions from any of the functions passed to it. - * If that is dead necessary use rb_thread_call_with_gvl() to - * re-acquire the GVL. - * @warning In short, this API is difficult. @ko1 recommends you to use - * other ways if any. We lack experiences to use this API. If - * you find any corner cases etc., please report it to the - * devs. - * @warning Releasing and re-acquiring the GVL are expensive operations. - * For a short-running `func`, it might be faster to just call - * `func` with blocking everything else. Be sure to benchmark - * your code to see if it is actually worth releasing the GVL. - */ -void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1, - rb_unblock_function_t *ubf, void *data2); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Identical to rb_thread_call_without_gvl(), except it does not interface with - * signals etc. As described in #RB_NOGVL_INTR_FAIL, interrupts can hurt you. - * In case this function detects an interrupt, it returns immediately. You can - * record progress of your callback and check it after returning from this - * function. - * - * What this function does: - * - * 1. Checks for pending interrupts and if any, just returns. - * 2. Releases the GVL. (Others can run here in parallel...) - * 3. Calls the passed function. - * 4. Blocks until it re-acquires the GVL. - * - * @param[in] func A function to call without GVL. - * @param[in,out] data1 Passed as-is to `func`. - * @param[in] ubf An UBF to cancel `func`. - * @param[in,out] data2 Passed as-is to `ubf`. - * @return What `func` returned, or 0 in case `func` did not return. - */ -void *rb_thread_call_without_gvl2(void *(*func)(void *), void *data1, - rb_unblock_function_t *ubf, void *data2); - -/* - * XXX: unstable/unapproved - out-of-tree code should NOT not depend - * on this until it hits Ruby 2.6.1 - */ - -RBIMPL_ATTR_NONNULL((1)) -/** - * Identical to rb_thread_call_without_gvl(), except it additionally takes - * "flags" that change the behaviour. - * - * @param[in] func A function to call without GVL. - * @param[in,out] data1 Passed as-is to `func`. - * @param[in] ubf An UBF to cancel `func`. - * @param[in,out] data2 Passed as-is to `ubf`. - * @param[in] flags Flags. - * @return What `func` returned, or 0 in case `func` did not return. - */ -void *rb_nogvl(void *(*func)(void *), void *data1, - rb_unblock_function_t *ubf, void *data2, - int flags); - -/** - * @private - * - * @deprecated This macro once was a thing in the old days, but makes no sense - * any longer today. Exists here for backwards compatibility - * only. You can safely forget about it. - */ -#define RUBY_CALL_WO_GVL_FLAG_SKIP_CHECK_INTS_AFTER 0x01 - -/** - * @private - * @deprecated It seems even in the old days it made no sense...? - */ -#define RUBY_CALL_WO_GVL_FLAG_SKIP_CHECK_INTS_ - -#define RUBY_INTERNAL_THREAD_EVENT_STARTED 1 << 0 /** thread started */ -#define RUBY_INTERNAL_THREAD_EVENT_READY 1 << 1 /** acquiring GVL */ -#define RUBY_INTERNAL_THREAD_EVENT_RESUMED 1 << 2 /** acquired GVL */ -#define RUBY_INTERNAL_THREAD_EVENT_SUSPENDED 1 << 3 /** released GVL */ -#define RUBY_INTERNAL_THREAD_EVENT_EXITED 1 << 4 /** thread terminated */ -#define RUBY_INTERNAL_THREAD_EVENT_MASK 0xff /** All Thread events */ - -typedef void rb_internal_thread_event_data_t; // for future extension. - -typedef void (*rb_internal_thread_event_callback)(rb_event_flag_t event, - const rb_internal_thread_event_data_t *event_data, - void *user_data); -typedef struct rb_internal_thread_event_hook rb_internal_thread_event_hook_t; - -/** - * Registers a thread event hook function. - * - * @param[in] func A callback. - * @param[in] events A set of events that `func` should run. - * @param[in] data Passed as-is to `func`. - * @return An opaque pointer to the hook, to unregister it later. - * @note This functionality is a noop on Windows. - * @warning This function MUST not be called from a thread event callback. - */ -rb_internal_thread_event_hook_t *rb_internal_thread_add_event_hook( - rb_internal_thread_event_callback func, rb_event_flag_t events, - void *data); - - -/** - * Unregister the passed hook. - * - * @param[in] hook. The hook to unregister. - * @return Wether the hook was found and unregistered. - * @note This functionality is a noop on Windows. - * @warning This function MUST not be called from a thread event callback. -*/ -bool rb_internal_thread_remove_event_hook( - rb_internal_thread_event_hook_t * hook); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_THREAD_H */ diff --git a/libs/libruby/ruby/thread_native.h b/libs/libruby/ruby/thread_native.h deleted file mode 100644 index c23b15e..0000000 --- a/libs/libruby/ruby/thread_native.h +++ /dev/null @@ -1,205 +0,0 @@ -#ifndef RUBY_THREAD_NATIVE_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_THREAD_NATIVE_H 1 -/** - * @file - * @author $Author: ko1 $ - * @date Wed May 14 19:37:31 2014 - * @copyright Copyright (C) 2014 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * - * This file contains wrapper APIs for native thread primitives - * which Ruby interpreter uses. - * - * Now, we only support pthread and Windows threads. - * - * If you want to use Ruby's Mutex and so on to synchronize Ruby Threads, - * please use Mutex directly. - */ - -#if defined(_WIN32) -#include -typedef HANDLE rb_nativethread_id_t; - -typedef union rb_thread_lock_union { - HANDLE mutex; - CRITICAL_SECTION crit; -} rb_nativethread_lock_t; - -typedef struct rb_thread_cond_struct rb_nativethread_cond_t; - -#elif defined(HAVE_PTHREAD_H) - -#include -typedef pthread_t rb_nativethread_id_t; -typedef pthread_mutex_t rb_nativethread_lock_t; -typedef pthread_cond_t rb_nativethread_cond_t; - -#elif defined(__wasi__) // no-thread platforms - -typedef struct rb_nativethread_id_t *rb_nativethread_id_t; -typedef struct rb_nativethread_lock_t *rb_nativethread_lock_t; -typedef struct rb_nativethread_cond_t *rb_nativethread_cond_t; - -#elif defined(__DOXYGEN__) - -/** Opaque type that holds an ID of a native thread. */ -struct rb_nativethread_id_t; - -/** Opaque type that holds a lock. */ -struct rb_nativethread_lock_t; - -/** Opaque type that holds a condition variable. */ -struct rb_nativethread_cond_t; - -#else -#error "unsupported thread type" - -#endif - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * Queries the ID of the native thread that is calling this function. - * - * @return The caller thread's native ID. - */ -rb_nativethread_id_t rb_nativethread_self(void); - -/** - * Fills the passed lock with an initial value. - * - * @param[out] lock A mutex to initialise. - * @post `lock` is updated to its initial state. - * - * @internal - * - * There is no data structure that analogous to pthread_once_t in ruby. It is - * pretty much tricky (if not impossible) to properly initialise a mutex - * exactly once. - */ -void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock); - -/** - * Destroys the passed mutex. - * - * @param[out] lock A mutex to kill. - * @post `lock` is no longer eligible for other functions. - * - * @internal - * - * It is an undefined behaviour (see `pthread_mutex_destroy(3posix)`) to - * destroy a locked mutex. So it has to be unlocked. But an unlocked mutex - * can of course be locked by another thread. That's the ultimate reason why - * we do mutex. There is an inevitable race condition here. 2017 edition of - * IEEE 1003.1 issue 7 says in its rationale that "care must be taken". Care? - * How? - * - * @shyouhei thinks that POSIX is broken by design. - */ -void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock); - -/** - * Blocks until the current thread obtains a lock. - * - * @param[out] lock A mutex to lock. - * @post `lock` is owned by the current native thread. - */ -void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock); - -/** - * Releases a lock. - * - * @param[out] lock A mutex to unlock. - * @pre `lock` is owned by the current native thread. - * @post `lock` is not owned by the current native thread. - */ -void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock); - -/** @alias{rb_nativethread_lock_lock} */ -void rb_native_mutex_lock(rb_nativethread_lock_t *lock); - -/** - * Identical to rb_native_mutex_lock(), except it doesn't block in case - * rb_native_mutex_lock() would. - * - * @param[out] lock A mutex to lock. - * @retval 0 `lock` is successfully owned by the current thread. - * @retval EBUSY `lock` is owned by someone else. - */ -int rb_native_mutex_trylock(rb_nativethread_lock_t *lock); - -/** @alias{rb_nativethread_lock_unlock} */ -void rb_native_mutex_unlock(rb_nativethread_lock_t *lock); - -/** @alias{rb_nativethread_lock_initialize} */ -void rb_native_mutex_initialize(rb_nativethread_lock_t *lock); - -/** @alias{rb_nativethread_lock_destroy} */ -void rb_native_mutex_destroy(rb_nativethread_lock_t *lock); - -/** - * Signals a condition variable. - * - * @param[out] cond A condition variable to ping. - * @post More than one threads waiting for `cond` gets signalled. - * @note This function can spuriously wake multiple threads up. - * `pthread_cond_signal(3posix)` says it can even be "impossible - * to avoid the unblocking of more than one thread blocked on a - * condition variable". Just brace spurious wakeups. - */ -void rb_native_cond_signal(rb_nativethread_cond_t *cond); - -/** - * Signals a condition variable. - * - * @param[out] cond A condition variable to ping. - * @post All threads waiting for `cond` gets signalled. - */ -void rb_native_cond_broadcast(rb_nativethread_cond_t *cond); - -/** - * Waits for the passed condition variable to be signalled. - * - * @param[out] cond A condition variable to wait. - * @param[out] mutex A mutex. - * @pre `mutex` is owned by the current thread. - * @post `mutex` is owned by the current thread. - * @note This can wake up spuriously. - */ -void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex); - -/** - * Identical to rb_native_cond_wait(), except it additionally takes timeout in - * msec resolution. Timeouts can be detected by catching exceptions. - * - * @param[out] cond A condition variable to wait. - * @param[out] mutex A mutex. - * @param[in] msec Timeout. - * @exception rb_eSystemCallError `Errno::ETIMEDOUT` for timeout. - * @pre `mutex` is owned by the current thread. - * @post `mutex` is owned by the current thread. - * @note This can wake up spuriously. - */ -void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec); - -/** - * Fills the passed condition variable with an initial value. - * - * @param[out] cond A condition variable to initialise. - * @post `cond` is updated to its initial state. - */ -void rb_native_cond_initialize(rb_nativethread_cond_t *cond); - -/** - * Destroys the passed condition variable. - * - * @param[out] cond A condition variable to kill. - * @post `cond` is no longer eligible for other functions. - */ -void rb_native_cond_destroy(rb_nativethread_cond_t *cond); - -RBIMPL_SYMBOL_EXPORT_END() -#endif diff --git a/libs/libruby/ruby/util.h b/libs/libruby/ruby/util.h deleted file mode 100644 index e8727a3..0000000 --- a/libs/libruby/ruby/util.h +++ /dev/null @@ -1,228 +0,0 @@ -#ifndef RUBY_UTIL_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_UTIL_H 1 -/** - * @file - * @author $Author$ - * @date Thu Mar 9 11:55:53 JST 1995 - * @copyright Copyright (C) 1993-2007 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * @warning DO NOT ADD RANDOM GARBAGES IN THIS FILE! Contents of this file - * reside here for historical reasons. Find a right place for your - * API! - */ -#include "ruby/internal/config.h" - -#ifdef STDC_HEADERS -# include /* size_t */ -#endif - -#ifdef HAVE_SYS_TYPES_H -# include /* ssize_t */ -#endif - -#include "ruby/internal/attr/noalias.h" -#include "ruby/internal/attr/nodiscard.h" -#include "ruby/internal/attr/nonnull.h" -#include "ruby/internal/attr/restrict.h" -#include "ruby/internal/attr/returns_nonnull.h" -#include "ruby/internal/dllexport.h" -#include "ruby/defines.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** an approximation of ceil(n * log10(2)), up to 65536 at least */ -#define DECIMAL_SIZE_OF_BITS(n) (((n) * 3010 + 9998) / 9999) - -/** - * Character to number mapping like `'a'` -> `10`, `'b'` -> `11` etc. For - * punctuation etc., the value is -1. "36" terminology comes from the fact - * that this is the table behind `str.to_i(36)`. - */ -RUBY_EXTERN const signed char ruby_digit36_to_number_table[]; - -/** - * Characters that Ruby accepts as hexadecimal digits. This is `/\h/` expanded - * into an array. - */ -RUBY_EXTERN const char ruby_hexdigits[]; - -/** - * Scans the passed string, assuming the string is a textual representation of - * an integer. Stops when encountering something non-digit for the passed - * base. - * - * @note This does not understand minus sign. - * @note This does not understand e.g. `0x` prefix. - * @note It is a failure to pass `0` to `base`, unlike ruby_strtoul(). - * @param[in] str Target string of digits to interpret. - * @param[in] len Number of bytes of `str`, or -1 to detect `NUL`. - * @param[in] base Base, `2` to `36` inclusive. - * @param[out] retlen Return value buffer. - * @param[out] overflow Return value buffer. - * @return Interpreted numeric representation of `str`. - * @post `retlen` is the number of bytes scanned so far. - * @post `overflow` is set to true if the string represents something - * bigger than `ULONG_MAX`. Something meaningful still returns; - * which is the designed belabour of C's unsigned arithmetic. - */ -unsigned long ruby_scan_digits(const char *str, ssize_t len, int base, size_t *retlen, int *overflow); - -/** @old{ruby_scan_oct} */ -#define scan_oct(s,l,e) ((int)ruby_scan_oct((s),(l),(e))) - -RBIMPL_ATTR_NOALIAS() -RBIMPL_ATTR_NONNULL(()) -/** - * Interprets the passed string as an octal unsigned integer. Stops when - * encounters something not understood. - * - * @param[in] str C string to scan. - * @param[in] len Length of `str`. - * @param[out] consumed Return value buffer. - * @return Parsed integer. - * @post `ret` is the number of characters read. - * - * @internal - * - * No consideration is made for integer overflows. As the return value is - * unsigned this function has fully defined behaviour, but you cannot know if - * there was an integer wrap-around or not. - */ -unsigned long ruby_scan_oct(const char *str, size_t len, size_t *consumed); - -/** @old{ruby_scan_hex} */ -#define scan_hex(s,l,e) ((int)ruby_scan_hex((s),(l),(e))) - -RBIMPL_ATTR_NONNULL(()) -/** - * Interprets the passed string a hexadecimal unsigned integer. Stops when - * encounters something not understood. - * - * @param[in] str C string to scan. - * @param[in] len Length of `str`. - * @param[out] ret Return value buffer. - * @return Parsed integer. - * @post `ret` is the number of characters read. - * - * @internal - * - * No consideration is made for integer overflows. As the return value is - * unsigned this function has fully defined behaviour, but you cannot know if - * there was an integer wrap-around or not. - */ -unsigned long ruby_scan_hex(const char *str, size_t len, size_t *ret); - -/** - * Reentrant implementation of quick sort. If your system provides something - * (like C11 qsort_s), this is a thin wrapper of that routine. Otherwise - * resorts to our own version. - */ -#ifdef HAVE_GNU_QSORT_R -# define ruby_qsort qsort_r -#else -void ruby_qsort(void *, const size_t, const size_t, - int (*)(const void *, const void *, void *), void *); -#endif - -RBIMPL_ATTR_NONNULL((1)) -/** - * Sets an environment variable. In case of POSIX this is a wrapper of - * `setenv(3)`. But there are systems which lack one. We try hard emulating. - * - * @param[in] key An environment variable. - * @param[in] val A value to be associated with `key`, or 0. - * @exception rb_eSystemCallError `setenv(3)` failed for some reason. - * @post Environment variable `key` is created if necessary. Its value - * is updated to be `val`. - */ -void ruby_setenv(const char *key, const char *val); - -RBIMPL_ATTR_NONNULL(()) -/** - * Deletes the passed environment variable, if any. - * - * @param[in] key An environment variable. - * @exception rb_eSystemCallError `unsetenv(3)` failed for some reason. - * @post Environment variable `key` does not exist. - */ -void ruby_unsetenv(const char *key); - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RESTRICT() -RBIMPL_ATTR_RETURNS_NONNULL() -RBIMPL_ATTR_NONNULL(()) -/** - * This is our own version of `strdup(3)` that uses ruby_xmalloc() instead of - * system malloc (benefits our GC). - * - * @param[in] str Target C string to duplicate. - * @return An allocated C string holding the identical contents. - * @note Return value must be discarded using ruby_xfree(). - */ -char *ruby_strdup(const char *str); - -#undef strdup -/** - * @alias{ruby_strdup} - * - * @internal - * - * @shyouhei doesn't think it is a wise idea. ruby_strdup()'s return value - * must be passed to ruby_xfree(), but this macro makes it almost impossible. - */ -#define strdup(s) ruby_strdup(s) - -RBIMPL_ATTR_NODISCARD() -RBIMPL_ATTR_RESTRICT() -RBIMPL_ATTR_RETURNS_NONNULL() -/** - * This is our own version of `getcwd(3)` that uses ruby_xmalloc() instead of - * system malloc (benefits our GC). - * - * @return An allocated C string holding the process working directory. - * @note Return value must be discarded using ruby_xfree(). - */ -char *ruby_getcwd(void); - -RBIMPL_ATTR_NONNULL((1)) -/** - * Our own locale-insensitive version of `strtod(3)`. The conversion is done - * as if the current locale is set to the "C" locale, no matter actual runtime - * locale settings. - * - * @param[in] str Decimal or hexadecimal representation of a floating - * point number. - * @param[out] endptr NULL, or an arbitrary pointer (overwritten on return). - * @return Converted number. - * @post If `endptr` is not NULL, it is updated to point the first such - * byte where conversion failed. - * @note This function sets `errno` on failure. - * - `ERANGE`: Converted integer is out of range of `double`. - * @see William D. Clinger, "How to Read Floating Point Numbers - * Accurately" in Proc. ACM SIGPLAN '90, pp. 92-101. - * https://doi.org/10.1145/93542.93557 - */ -double ruby_strtod(const char *str, char **endptr); - -#undef strtod -/** @alias{ruby_strtod} */ -#define strtod(s,e) ruby_strtod((s),(e)) - -RBIMPL_ATTR_NONNULL((2)) -/** - * Scans the passed string, with calling the callback function every time it - * encounters a "word". A word here is a series of characters separated by - * either a space (of IEEE 1003.1 section 7.3.1.1), or a `','`. - * - * @param[in] str Target string to split into each words. - * @param[in] func Callback function. - * @param[in,out] argv Passed as-is to `func`. - */ -void ruby_each_words(const char *str, void (*func)(const char *word, int len, void *argv), void *argv); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_UTIL_H */ diff --git a/libs/libruby/ruby/version.h b/libs/libruby/ruby/version.h deleted file mode 100644 index 18b3abc..0000000 --- a/libs/libruby/ruby/version.h +++ /dev/null @@ -1,159 +0,0 @@ -#ifndef RUBY_VERSION_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_VERSION_H 1 -/** - * @file - * @author $Author$ - * @date Wed May 13 12:56:56 JST 2009 - * @copyright Copyright (C) 1993-2009 Yukihiro Matsumoto - * @copyright Copyright (C) 2000 Network Applied Communication Laboratory, Inc. - * @copyright Copyright (C) 2000 Information-technology Promotion Agency, Japan - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * - * This file contains only - * - never-changeable information, and - * - interfaces accessible from extension libraries. - * - * Never try to check RUBY_VERSION_CODE etc in extension libraries, - * check the features with mkmf.rb instead. - */ - -/** - * @name The origin. - * - * These information never change. Just written here to remember. - * - * @{ - */ - -/** Author of this project. */ -#define RUBY_AUTHOR "Yukihiro Matsumoto" - -/** Ruby's birth year. */ -#define RUBY_BIRTH_YEAR 1993 - -/** Ruby's birth month. */ -#define RUBY_BIRTH_MONTH 2 - -/** Ruby's birth day. */ -#define RUBY_BIRTH_DAY 24 - -/** @} */ - -/** - * @name The API version. - * - * API version is different from binary version. These numbers are for API - * stability. When you have distinct API versions x and y, you cannot expect - * codes targeted to x also works for y. - * - * However let us repeat here that it's a BAD idea to check - * #RUBY_API_VERSION_CODE form extension libraries. Different API versions are - * just different. There is no such thing like upper compatibility. - * - * @{ - */ - -/** - * Major version. This digit changes sometimes for various reasons, but that - * doesn't mean a total rewrite. Practically when it comes to API versioning, - * major and minor version changes are equally catastrophic. - */ -#define RUBY_API_VERSION_MAJOR 3 - -/** - * Minor version. As of writing this version changes annually. Greater - * version doesn't mean "better"; they just mean years passed. - */ -#define RUBY_API_VERSION_MINOR 2 - -/** - * Teeny version. This digit is kind of reserved these days. Kept 0 for the - * entire 2.x era. Waiting for future uses. - */ -#define RUBY_API_VERSION_TEENY 0 - -/** - * This macro is API versions encoded into a C integer. - * - * @note Use mkmf. - * @note Don't rely on it. - */ -#define RUBY_API_VERSION_CODE (RUBY_API_VERSION_MAJOR*10000+RUBY_API_VERSION_MINOR*100+RUBY_API_VERSION_TEENY) - -/** @} */ - -#ifdef RUBY_EXTERN -/* Internal note: this file could be included from verconf.mk _before_ - * generating config.h, on Windows. The #ifdef above is to trick such - * situation. */ -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * @name Interfaces from extension libraries. - * - * Before using these infos, think thrice whether they are really - * necessary or not, and if the answer was yes, think twice a week - * later again. - * - * @{ - */ - -/** API versions, in { major, minor, teeny } order. */ -RUBY_EXTERN const int ruby_api_version[3]; - -/** - * Stringised version. - * - * @note This is the runtime version, not the API version. For instance it - * was `"2.5.9"` when ::ruby_api_version was `{ 2, 5, 0 }`. - */ -RUBY_EXTERN const char ruby_version[]; - -/** Date of release, in a C string. */ -RUBY_EXTERN const char ruby_release_date[]; - -/** - * Target platform identifier, in a C string. - * - * @note Seasoned UNIX programmers should beware that this "platform - * identifier" is our invention; not always identical to so-called - * target triplets that GNU systems use. For instance on @shyouhei's - * machine, ::ruby_platform is `"x64_64-linux"` while its target triplet - * is `x86_64-pc-linux-gnu`. - * @note Note also that we support Windows. - */ -RUBY_EXTERN const char ruby_platform[]; - -/** - * This is a monotonic increasing integer that describes specific "patch" - * level. You can know the exact changeset your binary is running by this info - * (and ::ruby_version), unless this is -1. -1 means there is no release yet - * for the version; ruby is actively developed. 0 means the initial GA version. - */ -RUBY_EXTERN const int ruby_patchlevel; - -/** - * This is what `ruby -v` prints to the standard error. Something like: - * `"ruby 2.5.9p229 (2021-04-05 revision 67829) [x86_64-linux]"`. This doesn't - * include runtime options like a JIT being enabled. - */ -RUBY_EXTERN const char ruby_description[]; - -/** Copyright notice. */ -RUBY_EXTERN const char ruby_copyright[]; - -/** - * This is just `"ruby"` for us. But different implementations can have - * different strings here. - */ -RUBY_EXTERN const char ruby_engine[]; - -/** @} */ - -RBIMPL_SYMBOL_EXPORT_END() -#endif - -#endif diff --git a/libs/libruby/ruby/vm.h b/libs/libruby/ruby/vm.h deleted file mode 100644 index 3458c28..0000000 --- a/libs/libruby/ruby/vm.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef RUBY_VM_H /*-*-C++-*-vi:se ft=cpp:*/ -#define RUBY_VM_H 1 -/** - * @file - * @author $Author$ - * @date Sat May 31 15:17:36 2008 - * @copyright Copyright (C) 2008 Yukihiro Matsumoto - * @copyright This file is a part of the programming language Ruby. - * Permission is hereby granted, to either redistribute and/or - * modify this file, provided that the conditions mentioned in the - * file COPYING are met. Consult the file for details. - * - * We planned to have multiple VMs run side-by-side. The API here was a - * preparation of that feature. The topic branch was eventually abandoned, and - * we now have Ractor. This file is kind of obsolescent. - */ -#include "ruby/internal/dllexport.h" - -RBIMPL_SYMBOL_EXPORT_BEGIN() - -/** - * The opaque struct to hold VM internals. Its fields are intentionally hidden - * from extension libraries because it changes drastically time to time. - */ -typedef struct rb_vm_struct ruby_vm_t; - -/** - * Destructs the passed VM. You don't have to call this API directly now, - * because there is no way to create one. There is only one VM at one time. - * ruby_stop() should just suffice. - */ -int ruby_vm_destruct(ruby_vm_t *vm); - -/** - * ruby_vm_at_exit registers a function _func_ to be invoked when a VM - * passed away. Functions registered this way runs in reverse order - * of registration, just like END {} block does. The difference is - * its timing to be triggered. ruby_vm_at_exit functions runs when a - * VM _passed_ _away_, while END {} blocks runs just _before_ a VM - * _is_ _passing_ _away_. - * - * You cannot register a function to another VM than where you are in. - * So where to register is intuitive, omitted. OTOH the argument - * _func_ cannot know which VM it is in because at the time of - * invocation, the VM has already died and there is no execution - * context. The VM itself is passed as the first argument to it. - * - * @param[in] func the function to register. - */ -void ruby_vm_at_exit(void(*func)(ruby_vm_t *)); - -RBIMPL_SYMBOL_EXPORT_END() - -#endif /* RUBY_VM_H */ diff --git a/src/main.cc b/src/main.cc index 38a6cb6..83d5dce 100644 --- a/src/main.cc +++ b/src/main.cc @@ -74,8 +74,6 @@ void input_listener(Bar bar) { int main(int argc, char *argv[]) { auto start = std::chrono::high_resolution_clock::now(); - ruby_init(); - ruby_start(); load_theme(); load_languages_info(); @@ -119,8 +117,6 @@ int main(int argc, char *argv[]) { end_screen(); - ruby_shutdown(); - for (auto editor : editors) free_editor(editor); @@ -134,7 +130,7 @@ int main(int argc, char *argv[]) { throttle(16ms, lsp_worker); } - rb_gc_start(); + ruby_shutdown(); - return ruby_cleanup(0); + return 0; } diff --git a/src/scripting/process.cc b/src/scripting/process.cc index 500f719..3f116d8 100644 --- a/src/scripting/process.cc +++ b/src/scripting/process.cc @@ -1,7 +1,8 @@ #include "scripting/decl.h" #include "utils/utils.h" -std::unordered_map> custom_highlighters; +std::unordered_map> + custom_highlighters; struct R_ThemeEntry { std::string key; @@ -23,32 +24,19 @@ struct R_Language { std::string lsp_command; // link to LSP by name }; -VALUE C_module = Qnil; +mrb_state *mrb = nullptr; +RClass *C_module; std::mutex ruby_mutex; namespace fs = std::filesystem; -static void ruby_load(const char *main_file) { - std::lock_guard lock(ruby_mutex); - ruby_init_loadpath(); - int state = 0; - rb_load_protect(rb_str_new_cstr(main_file), 0, &state); - if (state) { - rb_set_errinfo(Qnil); - fprintf(stderr, "%d: Failed to load Ruby file %s\n", state, main_file); - } -} - -static void ruby_eval_string(const char *code) { - int state = 0; - rb_eval_string_protect(code, &state); - if (state) { - rb_set_errinfo(Qnil); - fprintf(stderr, "Ruby eval failed\n"); - } -} - void ruby_start() { + std::lock_guard lock(ruby_mutex); + mrb = mrb_open(); + if (!mrb) { + fprintf(stderr, "Failed to init mruby\n"); + return; + } fs::path exe_dir = get_exe_dir(); std::vector candidates; candidates.emplace_back("./crib.rb"); @@ -66,138 +54,171 @@ void ruby_start() { } candidates.emplace_back(exe_dir / "../config/main.rb"); candidates.emplace_back(exe_dir / "../config/crib.rb"); - ruby_eval_string(crib_module); - ruby_eval_string(tokens_def); + mrb_load_string(mrb, crib_module); + mrb_load_string(mrb, tokens_def); for (const auto &p : candidates) { - if (fs::exists(p) && fs::is_regular_file(p)) { - ruby_load(p.string().c_str()); + if (fs::exists(p)) { + FILE *f = fopen(p.string().c_str(), "r"); + if (f) { + mrb_load_file(mrb, f); + fclose(f); + } break; } } - C_module = rb_const_get(rb_cObject, rb_intern("C")); - if (C_module == Qnil) - return; - VALUE block = rb_funcall(C_module, rb_intern("b_startup"), 0); - if (block != Qnil) - rb_funcall(block, rb_intern("call"), 0); + C_module = mrb_module_get(mrb, "C"); + mrb_value mod_val = mrb_obj_value(C_module); + mrb_value block = mrb_funcall(mrb, mod_val, "b_startup", 0); + mrb_funcall(mrb, block, "call", 0); } void ruby_shutdown() { std::lock_guard lock(ruby_mutex); - if (C_module == Qnil) + if (C_module == nullptr) return; - VALUE block = rb_funcall(C_module, rb_intern("b_shutdown"), 0); - if (block != Qnil) - rb_funcall(block, rb_intern("call"), 0); + C_module = mrb_module_get(mrb, "C"); + mrb_value mod_val = mrb_obj_value(C_module); + mrb_value block = mrb_funcall(mrb, mod_val, "b_shutdown", 0); + mrb_funcall(mrb, block, "call", 0); + mrb_close(mrb); + mrb = nullptr; + C_module = nullptr; } -inline std::vector ruby_array_to_vector(VALUE rb_array) { +std::vector array_to_vector(mrb_value ary) { std::vector result; - if (NIL_P(rb_array) || !RB_TYPE_P(rb_array, T_ARRAY)) + if (mrb_nil_p(ary) || mrb_type(ary) != MRB_TT_ARRAY) return result; - for (long i = 0; i < RARRAY_LEN(rb_array); ++i) { - VALUE item = rb_ary_entry(rb_array, i); - if (RB_TYPE_P(item, T_STRING)) - result.push_back(StringValueCStr(item)); + mrb_int len = RARRAY_LEN(ary); + for (mrb_int i = 0; i < len; i++) { + mrb_value item = mrb_ary_ref(mrb, ary, i); + if (mrb_string_p(item)) + result.push_back(std::string(RSTRING_PTR(item), RSTRING_LEN(item))); } return result; } void ruby_log(std::string msg) { std::lock_guard lock(ruby_mutex); - VALUE str = rb_str_new(msg.c_str(), msg.size()); - rb_funcall(C_module, rb_intern("queue_log"), 1, str); + mrb_value str = mrb_str_new(mrb, msg.c_str(), msg.size()); + mrb_value mod_val = mrb_obj_value(C_module); + mrb_funcall(mrb, mod_val, "queue_log", 1, str); } void load_custom_highlighters() { - std::lock_guard lock(ruby_mutex); - if (C_module == Qnil) + std::lock_guard lock(ruby_mutex); + if (!C_module) return; - VALUE hashmap = rb_funcall(C_module, rb_intern("highlighters"), 0); - if (NIL_P(hashmap)) + mrb_value mod_val = mrb_obj_value((struct RObject *)C_module); + mrb_value hashmap = mrb_funcall(mrb, mod_val, "highlighters", 0); + if (mrb_nil_p(hashmap) || mrb_type(hashmap) != MRB_TT_HASH) return; - VALUE keys = rb_funcall(hashmap, rb_intern("keys"), 0); - for (long i = 0; i < RARRAY_LEN(keys); ++i) { - VALUE key_sym = rb_ary_entry(keys, i); - std::string key = rb_id2name(SYM2ID(key_sym)); - VALUE val_hash = rb_hash_aref(hashmap, key_sym); - if (NIL_P(val_hash)) + mrb_value keys = mrb_funcall(mrb, hashmap, "keys", 0); + mrb_int len = RARRAY_LEN(keys); + for (mrb_int i = 0; i < len; i++) { + mrb_value key_sym = mrb_ary_ref(mrb, keys, i); + mrb_sym sym_id = mrb_symbol(key_sym); + const char *key_cstr = mrb_sym_dump(mrb, sym_id); + std::string key(key_cstr); + mrb_value val_hash = mrb_hash_get(mrb, hashmap, key_sym); + if (mrb_nil_p(val_hash) || mrb_type(val_hash) != MRB_TT_HASH) continue; - VALUE parse_block = rb_hash_aref(val_hash, ID2SYM(rb_intern("parser"))); - VALUE match_block = rb_hash_aref(val_hash, ID2SYM(rb_intern("matcher"))); - rb_gc_register_address(&match_block); - rb_gc_register_address(&parse_block); + mrb_sym parser_sym = mrb_intern_lit(mrb, "parser"); + mrb_sym matcher_sym = mrb_intern_lit(mrb, "matcher"); + mrb_value parse_block = + mrb_hash_get(mrb, val_hash, mrb_symbol_value(parser_sym)); + mrb_value match_block = + mrb_hash_get(mrb, val_hash, mrb_symbol_value(matcher_sym)); custom_highlighters[key] = {parse_block, match_block}; } } -bool custom_compare(VALUE match_block, VALUE state1, VALUE state2) { - std::lock_guard lock(ruby_mutex); - return RTEST(rb_funcall(match_block, rb_intern("call"), 2, state1, state2)); +bool custom_compare(mrb_value match_block, mrb_value state1, mrb_value state2) { + std::lock_guard lock(ruby_mutex); + if (mrb_type(match_block) != MRB_TT_PROC) + return false; + mrb_value ret = mrb_funcall(mrb, match_block, "call", 2, state1, state2); + return mrb_test(ret); } -VALUE parse_custom(std::vector *tokens, VALUE parser_block, - const char *line, uint32_t len, VALUE state, - uint32_t c_line) { - std::lock_guard lock(ruby_mutex); +mrb_value parse_custom(std::vector *tokens, mrb_value parser_block, + const char *line, uint32_t len, mrb_value state, + uint32_t c_line) { + std::lock_guard lock(ruby_mutex); tokens->clear(); - if (NIL_P(parser_block)) - return {}; - VALUE ruby_line = rb_str_new(line, len); - VALUE line_idx = UINT2NUM(c_line); - VALUE tokens_and_state_hash = rb_funcall(parser_block, rb_intern("call"), 3, - ruby_line, state, line_idx); - VALUE tokens_rb = - rb_hash_aref(tokens_and_state_hash, ID2SYM(rb_intern("tokens"))); - for (long i = 0; i < RARRAY_LEN(tokens_rb); ++i) { - VALUE token = rb_ary_entry(tokens_rb, i); - Token tok; - tok.type = - (TokenKind)NUM2INT(rb_hash_aref(token, ID2SYM(rb_intern("type")))); - tok.start = NUM2UINT(rb_hash_aref(token, ID2SYM(rb_intern("start")))); - tok.end = NUM2UINT(rb_hash_aref(token, ID2SYM(rb_intern("end")))); - if (tok.type < TokenKind::Count && tok.end > tok.start && tok.end <= len) - tokens->push_back(tok); + if (mrb_nil_p(parser_block)) + return mrb_nil_value(); + mrb_value ruby_line = mrb_str_new(mrb, line, len); + mrb_value line_idx = mrb_fixnum_value(c_line); + mrb_value tokens_and_state_hash = + mrb_funcall(mrb, parser_block, "call", 3, ruby_line, state, line_idx); + mrb_sym tokens_sym = mrb_intern_lit(mrb, "tokens"); + mrb_value tokens_rb = + mrb_hash_get(mrb, tokens_and_state_hash, mrb_symbol_value(tokens_sym)); + if (mrb_type(tokens_rb) == MRB_TT_ARRAY) { + mrb_int len_tokens = RARRAY_LEN(tokens_rb); + for (mrb_int i = 0; i < len_tokens; i++) { + mrb_value token = mrb_ary_ref(mrb, tokens_rb, i); + Token tok; + tok.type = (TokenKind)mrb_fixnum(mrb_hash_get( + mrb, token, mrb_symbol_value(mrb_intern_lit(mrb, "type")))); + tok.start = (uint32_t)mrb_fixnum(mrb_hash_get( + mrb, token, mrb_symbol_value(mrb_intern_lit(mrb, "start")))); + tok.end = (uint32_t)mrb_fixnum(mrb_hash_get( + mrb, token, mrb_symbol_value(mrb_intern_lit(mrb, "end")))); + if (tok.type < TokenKind::Count && tok.end > tok.start && tok.end <= len) + tokens->push_back(tok); + } } - return rb_hash_aref(tokens_and_state_hash, ID2SYM(rb_intern("state"))); + mrb_sym state_sym = mrb_intern_lit(mrb, "state"); + return mrb_hash_get(mrb, tokens_and_state_hash, mrb_symbol_value(state_sym)); } static std::vector read_theme() { - std::lock_guard lock(ruby_mutex); + std::lock_guard lock(ruby_mutex); std::vector result; - if (C_module == Qnil) + if (!C_module) return result; - VALUE theme_hash = rb_funcall(C_module, rb_intern("theme"), 0); - if (NIL_P(theme_hash)) + mrb_value mod_val = mrb_obj_value((struct RObject *)C_module); + mrb_value theme_hash = mrb_funcall(mrb, mod_val, "theme", 0); + if (mrb_nil_p(theme_hash) || mrb_type(theme_hash) != MRB_TT_HASH) return result; - VALUE keys = rb_funcall(theme_hash, rb_intern("keys"), 0); - for (long i = 0; i < RARRAY_LEN(keys); ++i) { - VALUE key_sym = rb_ary_entry(keys, i); - std::string key = rb_id2name(SYM2ID(key_sym)); - VALUE val_hash = rb_hash_aref(theme_hash, key_sym); - if (NIL_P(val_hash)) + mrb_value keys = mrb_funcall(mrb, theme_hash, "keys", 0); + mrb_int len_keys = RARRAY_LEN(keys); + for (mrb_int i = 0; i < len_keys; i++) { + mrb_value key_sym = mrb_ary_ref(mrb, keys, i); + mrb_sym sym_id = mrb_symbol(key_sym); + const char *key_cstr = mrb_sym_dump(mrb, sym_id); + std::string key(key_cstr); + mrb_value val_hash = mrb_hash_get(mrb, theme_hash, key_sym); + if (mrb_nil_p(val_hash) || mrb_type(val_hash) != MRB_TT_HASH) continue; R_ThemeEntry entry; entry.key = key; - VALUE fg = rb_hash_aref(val_hash, ID2SYM(rb_intern("fg"))); - VALUE bg = rb_hash_aref(val_hash, ID2SYM(rb_intern("bg"))); - VALUE italic = rb_hash_aref(val_hash, ID2SYM(rb_intern("italic"))); - VALUE bold = rb_hash_aref(val_hash, ID2SYM(rb_intern("bold"))); - VALUE underline = rb_hash_aref(val_hash, ID2SYM(rb_intern("underline"))); - VALUE strikethrough = - rb_hash_aref(val_hash, ID2SYM(rb_intern("strikethrough"))); - if (!NIL_P(fg)) - entry.fg = NUM2UINT(fg); - if (!NIL_P(bg)) - entry.bg = NUM2UINT(bg); - if (!NIL_P(italic)) - entry.italic = RTEST(italic); - if (!NIL_P(bold)) - entry.bold = RTEST(bold); - if (!NIL_P(underline)) - entry.underline = RTEST(underline); - if (!NIL_P(strikethrough)) - entry.strikethrough = RTEST(strikethrough); + mrb_value fg = mrb_hash_get(mrb, val_hash, + mrb_symbol_value(mrb_intern_lit(mrb, "fg"))); + mrb_value bg = mrb_hash_get(mrb, val_hash, + mrb_symbol_value(mrb_intern_lit(mrb, "bg"))); + mrb_value italic = mrb_hash_get( + mrb, val_hash, mrb_symbol_value(mrb_intern_lit(mrb, "italic"))); + mrb_value bold = mrb_hash_get( + mrb, val_hash, mrb_symbol_value(mrb_intern_lit(mrb, "bold"))); + mrb_value underline = mrb_hash_get( + mrb, val_hash, mrb_symbol_value(mrb_intern_lit(mrb, "underline"))); + mrb_value strikethrough = mrb_hash_get( + mrb, val_hash, mrb_symbol_value(mrb_intern_lit(mrb, "strikethrough"))); + if (!mrb_nil_p(fg)) + entry.fg = (uint32_t)mrb_fixnum(fg); + if (!mrb_nil_p(bg)) + entry.bg = (uint32_t)mrb_fixnum(bg); + if (!mrb_nil_p(italic)) + entry.italic = mrb_test(italic); + if (!mrb_nil_p(bold)) + entry.bold = mrb_test(bold); + if (!mrb_nil_p(underline)) + entry.underline = mrb_test(underline); + if (!mrb_nil_p(strikethrough)) + entry.strikethrough = mrb_test(strikethrough); result.push_back(entry); } return result; @@ -249,17 +270,23 @@ void load_theme() { std::vector read_lsps() { std::vector result; - if (C_module == Qnil) + if (!C_module) return result; - VALUE lsp_hash = rb_funcall(C_module, rb_intern("lsp_config"), 0); - if (NIL_P(lsp_hash)) + mrb_value mod_val = mrb_obj_value((struct RObject *)C_module); + mrb_value lsp_hash = mrb_funcall(mrb, mod_val, "lsp_config", 0); + if (mrb_nil_p(lsp_hash) || mrb_type(lsp_hash) != MRB_TT_HASH) return result; - VALUE keys = rb_funcall(lsp_hash, rb_intern("keys"), 0); - for (long i = 0; i < RARRAY_LEN(keys); ++i) { - VALUE key = rb_ary_entry(keys, i); - std::string cmd = StringValueCStr(key); - VALUE args_array = rb_hash_aref(lsp_hash, key); - std::vector args = ruby_array_to_vector(args_array); + mrb_value keys = mrb_funcall(mrb, lsp_hash, "keys", 0); + mrb_int len_keys = RARRAY_LEN(keys); + for (mrb_int i = 0; i < len_keys; i++) { + mrb_value key = mrb_ary_ref(mrb, keys, i); + std::string cmd; + if (mrb_string_p(key)) + cmd = std::string(RSTRING_PTR(key), RSTRING_LEN(key)); + else if (mrb_symbol_p(key)) + cmd = std::string(mrb_sym_dump(mrb, mrb_symbol(key))); + mrb_value args_array = mrb_hash_get(mrb, lsp_hash, key); + std::vector args = array_to_vector(args_array); result.push_back({cmd, args}); } return result; @@ -267,34 +294,45 @@ std::vector read_lsps() { std::vector read_languages() { std::vector result; - if (C_module == Qnil) + if (!C_module) return result; - VALUE lang_hash = rb_funcall(C_module, rb_intern("languages"), 0); - if (NIL_P(lang_hash)) + mrb_value mod_val = mrb_obj_value((struct RObject *)C_module); + mrb_value lang_hash = mrb_funcall(mrb, mod_val, "languages", 0); + if (mrb_nil_p(lang_hash) || mrb_type(lang_hash) != MRB_TT_HASH) return result; - VALUE keys = rb_funcall(lang_hash, rb_intern("keys"), 0); - for (long i = 0; i < RARRAY_LEN(keys); ++i) { - VALUE key = rb_ary_entry(keys, i); - VALUE val_hash = rb_hash_aref(lang_hash, key); - if (NIL_P(val_hash)) + mrb_value keys = mrb_funcall(mrb, lang_hash, "keys", 0); + mrb_int len_keys = RARRAY_LEN(keys); + for (mrb_int i = 0; i < len_keys; i++) { + mrb_value key = mrb_ary_ref(mrb, keys, i); + mrb_value val_hash = mrb_hash_get(mrb, lang_hash, key); + if (mrb_nil_p(val_hash) || mrb_type(val_hash) != MRB_TT_HASH) continue; R_Language lang; - lang.name = rb_id2name(SYM2ID(key)); - VALUE fg = rb_hash_aref(val_hash, ID2SYM(rb_intern("color"))); - VALUE symbol = rb_hash_aref(val_hash, ID2SYM(rb_intern("symbol"))); - VALUE extensions = rb_hash_aref(val_hash, ID2SYM(rb_intern("extensions"))); - VALUE filenames = rb_hash_aref(val_hash, ID2SYM(rb_intern("filenames"))); - VALUE mimetypes = rb_hash_aref(val_hash, ID2SYM(rb_intern("mimetypes"))); - VALUE lsp = rb_hash_aref(val_hash, ID2SYM(rb_intern("lsp"))); - if (!NIL_P(fg)) - lang.color = NUM2UINT(fg); - if (!NIL_P(symbol)) - lang.symbol = StringValueCStr(symbol); - lang.extensions = ruby_array_to_vector(extensions); - lang.filenames = ruby_array_to_vector(filenames); - lang.mimetypes = ruby_array_to_vector(mimetypes); - if (!NIL_P(lsp)) - lang.lsp_command = StringValueCStr(lsp); + if (mrb_symbol_p(key)) + lang.name = std::string(mrb_sym_dump(mrb, mrb_symbol(key))); + else if (mrb_string_p(key)) + lang.name = std::string(RSTRING_PTR(key), RSTRING_LEN(key)); + mrb_value fg = mrb_hash_get(mrb, val_hash, + mrb_symbol_value(mrb_intern_lit(mrb, "color"))); + mrb_value symbol = mrb_hash_get( + mrb, val_hash, mrb_symbol_value(mrb_intern_lit(mrb, "symbol"))); + mrb_value extensions = mrb_hash_get( + mrb, val_hash, mrb_symbol_value(mrb_intern_lit(mrb, "extensions"))); + mrb_value filenames = mrb_hash_get( + mrb, val_hash, mrb_symbol_value(mrb_intern_lit(mrb, "filenames"))); + mrb_value mimetypes = mrb_hash_get( + mrb, val_hash, mrb_symbol_value(mrb_intern_lit(mrb, "mimetypes"))); + mrb_value lsp = mrb_hash_get(mrb, val_hash, + mrb_symbol_value(mrb_intern_lit(mrb, "lsp"))); + if (!mrb_nil_p(fg)) + lang.color = (uint32_t)mrb_fixnum(fg); + if (!mrb_nil_p(symbol)) + lang.symbol = std::string(RSTRING_PTR(symbol), RSTRING_LEN(symbol)); + lang.extensions = array_to_vector(extensions); + lang.filenames = array_to_vector(filenames); + lang.mimetypes = array_to_vector(mimetypes); + if (!mrb_nil_p(lsp)) + lang.lsp_command = std::string(RSTRING_PTR(lsp), RSTRING_LEN(lsp)); result.push_back(lang); } return result; @@ -325,14 +363,15 @@ void load_languages_info() { } uint8_t read_line_endings() { - std::lock_guard lock(ruby_mutex); - if (C_module == Qnil) + std::lock_guard lock(ruby_mutex); + if (!C_module) return 1; - VALUE le = rb_funcall(C_module, rb_intern("line_endings"), 0); - if (!SYMBOL_P(le)) + mrb_value mod_val = mrb_obj_value((struct RObject *)C_module); + mrb_value le = mrb_funcall(mrb, mod_val, "line_endings", 0); + if (!mrb_symbol_p(le)) return 1; uint8_t flags = 1; - const char *name = rb_id2name(SYM2ID(le)); + const char *name = mrb_sym_dump(mrb, mrb_symbol(le)); if (std::strcmp(name, "unix") == 0) flags = 0b01; else if (std::strcmp(name, "windows") == 0) diff --git a/src/syntax/parser.cc b/src/syntax/parser.cc index 5a2017b..049cd53 100644 --- a/src/syntax/parser.cc +++ b/src/syntax/parser.cc @@ -2,7 +2,6 @@ #include "editor/editor.h" #include "io/knot.h" #include "main.h" -#include "ruby/internal/special_consts.h" #include "syntax/decl.h" #include "syntax/langs.h" @@ -116,14 +115,14 @@ void Parser::work() { } std::shared_ptr new_state{nullptr}; if (is_custom) { - VALUE state = Qnil; + mrb_value state = mrb_nil_value(); if (prev_state) { std::shared_ptr state_ptr = std::static_pointer_cast(prev_state); state = state_ptr->state; } - VALUE out_state = parse_custom(&line_data->tokens, parser_block, text, - r_len, state, c_line); + mrb_value out_state = parse_custom(&line_data->tokens, parser_block, + text, r_len, state, c_line); std::shared_ptr out_state_ptr = std::make_shared(out_state); new_state = out_state_ptr; @@ -152,11 +151,11 @@ void Parser::work() { if (c_line < line_count && (line_data = line_tree.at(c_line))) { bool done = false; if (is_custom) { - VALUE in_state_v = Qnil; + mrb_value in_state_v = mrb_nil_value(); if (prev_state) in_state_v = std::static_pointer_cast(prev_state)->state; - VALUE out_state_v = Qnil; + mrb_value out_state_v = mrb_nil_value(); if (line_data->in_state) out_state_v = std::static_pointer_cast(line_data->in_state)

7C2;`t8B!|8DckKWF*ONf|@*wdr{lywblpXo- z^LRiPCxK6d{R%2U{_F?so&fEa7kI(t4BGI0*thjbiLhgHjfx0keFFG^l;bb{Zv|zb zVhLy-2JI*PR-y~O;^-A9zs7@CpB)iEY<&lvKHC-F{HGL=WYlbf1*Nol3ubFy)Uo-atzh>zJe$Cns$cYJbbu(y6*Hyry z7kt#xad3KpY#{+BHIH8KQSirGO`u7}qZ6F6UMvIcgYBLQG64~%pmWuA9Z-TFa{jeP z=O>TOe}?~G=KuSTdRzh`zrg*s6_inETrkg!_c?Q~d z?b&%1l(@ct)0IbO?G2CK+8Zx+MSu$R+8Zw%Lm>>0@9dz>*goCm0v^5b5}-2z;w3;k zm6g4EO^kgyU;1=Ddcgu(lhW;a19}bx%uTP_F2nU~s z1S)^v;W;SM%Qal-<*zN4^a64};!F!z3Az<@@s&sCR8aarO2)1yKFh+w^xVZ#TGk|d0RoH z9%wM2^Z1KR8(%}tmIN)|gxs;<*&CxGQNrrk9iswD0Q@Z%bU{ z|KV}mxd2@LY5wl@t~mIT`LoAr&u$hKXx+`rz#zZ?I-l6r@&$kM8&d`bN65_CZA1y~ z2zK9baM2G^?twUC$EC9ubg~X?{hCkb0pHGJzLqbF_&}So89XhI^0%0?fp%^Qc!Ew~ za$s!urCR#Jv)2u@?g&%@_*lN+Z#ilSx?PP$#i#R=kLDq8`^y6o9FX$^eHs7rcg)oT z4V?Y((7XXYCjc_WE;tzZfq!?gdqVpax=z ztcT@X&{;#ZA|Bn43)g*TzWxsyrvn|V>I*t1o0o%u;W#*2K~dni1C+Qtj)SXN(0LY+ zvIMkM@Hn`+17bPyZ>wW;X!vi#-w!&U#G&PXg(8SsF7454Y7xxG;K0A_xJNQen+M|u z&>nP1d#)Q?6glwkgPx7mdFX#Y1SpAB^MZ0Z3Ni4E*~9Ji1x6=7P=>vM@aG z!b2Z)lrUtylSenWruFFF3yvDlkzBo?t66;@=jb1A1#v)Ld2wjx|NlPSt&qC^fJZ0T z2L6^93%GUs+bkR!{;Tk}2=Fp6d;q*c7+s!{z_*?n~KQfo zVZ-1!0v$oj-||R+fdS$^2S_wAf=04Fg8JvpYeC_}2kHpm`u`fdKfSoa!|fL~-hfFxO8P@;q+Q6J6^pe*_Ah(ZagZ?}(%gfD2L zioPZTgX1w4NmbD4IzHXt5ch08zzE8@O--OuJ+ogJxqv8OEa-0d81Glo{UaI{Ct=xs_TnW|r(-fqW zf9qs~a+hxK9Vd`D10`C=hI0oRDj2nV zdOaBVTkOC&1Cri*!A)v#r|dkm9Dea&8#sl7oa@nwNa4mNaQC=$f-T_RX7SSd53<+J znL+|Z4(v6im(M^)*MoBaD9AQIWf{P-EH6*|gSlUUzqQ&F$?s|i&p>k~sH@it%aWkO z&k$MCqql|AQ_L=1D>77_*+hzFfcS&sPMN0@`54`6rs(ao9mj4LF>T&^S4Yl zW?<;v3M$6CdqMSHuN$M~IsV>x#vqUOf~r4{L%eIB9$Xl@B0wkWAfrfWH$Y1BpZ>(1vr6EBQM#O&AzJ^#Qox zgC&*UzrgEfd^_L01Z|vy)h{01;1;A$=P{2?=uJd65--B6K&RY*`7a}X{r`{Xe>yb$ zPv>vZV`gCJ^`GAGQ;5I)(y#xJGd4hnH9AfJt)g*bWnfs@z{0@5-@-2l+9C=n6u!uU z3yK1t&g1+op!4ruI9P#d^LyYcRa!wUW}of?ffu)KGBV(;6D%h~>V$jX0}!@?HFiFK z;RI?#KpK#cw41=+(hOc{3^p5l1Qe{zpbAPt_z|4LC;;=`!FS>3c zmu}r)K}aFj_z+Y+dT^eA7Ipls`$a()UYz7_N!MdwXa*nK$i&}rTmqC1A)(S+AOSri zi@$X?X!8wdU$2)gNZU95R%_6H?_P+?PS+VOkY3r_f z39fiv1h07g-v`oWc)1XCXC%0>~b@e8Rxs!3Zu} zK@E@Y&>0Z#d2n9noC<0yfV>B43^aZI4k{x+*$7%T!^%~UZb-MKd+&vRpa~O*lMWa& zGC(U97fW!)tkZODd0V3LBCUag!Q(pvXh?#;)!u-C;l&hpc7({*81PY*phNk1Zh_j7 zuE;||XZ1koC-ny6uxil3VGa%dQ}|nEh(pVFPjJN;EeML(<1fUIg3b;*)clCqqxlyT zf6G}x@CtheflvGbq8GDy7}EGPPNeaN@aE=$*m@WFo3?{$M@TK;+ij!b(_6Zy8$2?` zzm37M@i{2wkGbw;=y2TwNrDditt$m#iB*BW)m#Y15h&qwJm&Ua!L#`tBSb9+M8p6g z!UPe~MToFKM6?kij1UoJkO;^?RmfW4PyB-5g87BuHAc{;FEGcmx9q=9=W}qg;>8Q_ z4R10kpp4)67;^g5Z_iE{l^5r}GB7keR{&SspjNnmC#bMU`T@GX%11@wWdvv}861)k zlAxj&RF(L2x=uLwgQ@ueBcwCz`0W5Af2${GbHld-?EI}wpxdcH4Yy`c`=pz}qw`Sn zBYBVJUtIhxd72Ci9?ie_`CDT^cbRm;n=GkQ{(yQUpbY2PdF+MTlt2GHI}boY%b}DD zQUiikI6-WC#|+B-43O%v`I$iHR?x7?w<8MtEw7b94h6M+IX^(!e2{@S&*p#3{H?E< z85j&NwI1O2yx@_1sB*dC&rx?%IwQVtYa9-L(TETk^=G^N>gLqxT-ozgSA{fsXPmxv_$gzqN{& zfx(8Soa&5_?wuqD4VLm!0^d~U&l$nqt^#?tCerZOGi*y-fJr}9dybVwBQC;fiKk8fx4Iw zp>D9yORLYIS&ajp%?Bj-Tf0EJ2YYQFP2*&E@p~<}a0PW-T@4Ss%>M}5NvC&!zbi`( zd<@G;pI%eZHZF!Ve*F{t?UiDn)B#GyD@6EPb@&+=j)8js3_C#`PDo$N@*uzOK}dWl z@VlM>m5Gr4T=GR|(7zUf?{@;%A4fr5+D>r07*T&fst=D&@X*o=m#e6?2q=Mibc5w! zrR@nw-2&~^A-9|Vfp*CE+DPsLU6$$7*$ZlRcyvw$nE|oog{Ts^0Ra;6>4wT5=idhQ zn+M}%h;NwqTPBGxFti*f5rbIO!S2y{zt{1<#|#h6<35b%9r?GjrFF79@^5ov>TqXz z83~@4Wj)Xj+Bjr-zXf(=+jYga|9z6Tg1SB6a<+A?CIdq^__i~b&TlV%tp5Ms#d0gC zCC1+;sRfQ7P$LY|9|v_2{kmB|XLEttR_JZv!yjR7NeBLxCO!rRNATqVkeaahfj}pC zEEY8Q(D6eK)a(QK8B11g5e2O(O8&4PbPO=8XT)dw4OYx}bRK(g|J&F9`&dEK5uM+m zW5+K}tDq=3^Wf`$pU!WfgCsYCWFTE%P>wzh9z6!JJUb774+in+JpLlb5_CnwR?zsi z2ei-593bG)={lj;kI}>Onn&_U4}RZ^&EPR-MvvxO|69ND&p+U5_>F(t0nhf$#eFJH~ytsG?CCP!u{$ObhTklLt z8Ptqrk@Ri-#^2g41PfbG10`GrbdU)n|I|aEo?CB-kamZFXD^GSM|bE14@g?_>2;Fu zVD=L5_|60xCj!m)I6=mUDwP-*;7zwv{5>m$85oW+7(j|;ka?{K>Nr8&LOl?t8yu{l zcFuKS6n*_0WEdD)FV$&yXkPT}wUP9J410L?nsB@j(|-zDrT_|cpKkDIhzH|g-_~y> zys(tt`Wb;8RUP$AL`ZuK)kyL%q6j>$V{W61|LMR44wvllc{fat8e zXj%#CU4cb?AdUu=!7V8o(9TLcAE>ASHI~4gm8)vd&dMt_P{?9*Rz9kM@(H%i3TiI} zRAWIM1L>>;OEECKm?{nGtROoEQf@-#r5yRURWdd|+TU=hq4j_ZzsDzNzwc!jcqb|- zA4764bP%fZ7^FA!LT?3VxfUoRdnAKH3OXERd4j*!0pVao#`fs8IrwtrCs;EP?DN~I zP@jKL#p?6#pd%xaA@d*ITR{Z{q?6V;6%=?r-7ME$%D?~r|HZ^b-~PX}`3zeB2#Hk@ z{;AN4_T{7>pxMUbj?E7k`CAjX85mw9OML^4WOcNIP88_|x0XAPLs~2^(pSFz@00w& zwe=f+U%Cp&QJ_KuI;QZV@;@U(>jB7EN`(_l)VS^Se@KS5yilUkdCjNuc_+B*{o?2B z*Z-lzXLfC`|HDQZ6+mlu!Q-Duxfj&HfjC})za@~1fdNujgX{L@myG@cDo6yfUcm!pPrh0a|kaX=?LtW3b8R zZ*i9ZjhC(FWMHs~;BNuZ%@6L|IPtek1m)uH+757e`{KUu^Zy>*0v?cQAdk+2KD`AJ zjgLU(4}YsK*rVV0TmCD8cRsRpfNMh=UH+DBGO)He3xCUP1qO!ZwV*1M5z-dWJ`S#8 zKx1Sc-HssB!6Dh}2MDVwQ&ct`*-)0BeaJm`Ph3%XR8cp%&o(oDkKAlSsfSS{tUpzYR zferAF zxV_?I`2n7O7M?*#Kj1zbEd9W`xX7)NuVSDQ3*0sJKy+(C0aPI20jf2Yi-D5bH~v<8 z(3*Hiw-(x6^>yTmZ3lQiui>{BVXlxA_VVtR|NlXwCarT`g0@hAitt(=OYoQ{ ze>3P%U+BfJ&;cQz&ZVGsJO8%1AeGS4-=}*iC@x;BfaY0!I=}mLJ^~$|@3i>!e~%fS zjK@G-<7R%)bxi!*>>Mn9m)?d}C%&DZU^PQG_-(m@x1n+ij zfZFQV{E87#eSr+{O#TE~GVB5AC4tf>qHy4er2!CUH%Lt3j<(@GOQ$cWlFp!{D7TkXe(?d!Y8)N3OS^n}J?+!H31Qf+pE~pfwLPKX+TaP_y{}8Vdxu#ituwErG&|zvTkxK-x~%hL;VX z*|HD9ph_5=-y!X^)&u+<=U)H+4;e93czGR^pqqb)^0$V87B+Xgc6eO;0Xo(UrSRJ$ z3@ZFyvq1_!5DhK-3P1xtppyha#UrG0VBv4c6US42?Smav=F{uC&A0QINApik{=TUo zgE~)u1`<5Jzw_w4;L&-?eq*c)iz(Rt9ZL(HS~K@8~E(U|NJf7;6^z{^F|01Qm{%M+{!_#S3cYAz)2nw5n zFPJ@gO&UBHzjb>hx&PPm=`Dwj{wwgeoCGbUOa}MhJbUZ@L!9^tv`e=2WTigBeV)B_|M0rc zu_Nq1!hxWJ#NRV|be;e$Oa?_cVYi)wq%Z;g7WcRR|G%_+3%Xj8WhZFXulWa~D|Ch7BfJR&1A9#7`)&KuC75uFU;02tZ z$`jOlGCT=s_kfnv>;oknM=5l`C$0}#e#F0cVF8*nxJ_99&8`G3eb!)sIMy>OnO z38g;JRC>3AgjX*Q99=)tz;&>Q5n~yQ_Z(|YYVD#t)FH8cpO}jk=AT83; zJzz78L9_6nqUoRnf6F;01_meoZ6O8{9-Sw=dU*^%2bgA=$?wwbpv$`q4&jiUh4#}PI{3u3sg*l>Nt;Nun4q8VtL2|GWX5jTMnuX zARRBy&V!J;95hJd(QR|hqql(3qZ2$?_Ob%hVTKG@fl6a&+aDZlFQ)Q?o4TM>j2QFu zfwb3B0psTv^8AQe;1$RQ@UXxq=m^;h26?bF$WbqsJp=8E|Hj{<0&1xBx`D>LtX*gD zx5x;CvLDD&(3rzF(B2YI6$`qk-0=Sk-}^X|R6iF|lG+X`q0y4mLk#f+r~> zP&*Qw7DB<}wMgj+bb>bjHc)z65<_HqvICg`Nlzsq7-?y%N3ZSfM)b6FdH!TE zdvr5^#?V`tK`puFV~j6BjZ}|b+sZ~xh8L4Snjq=gk$;<*N3RELCJS_IIK&gLyFGes zy+Nu|aH{5S5diHSfM%nYTz~)nZ#huH>e%5T`NxreyO?LMi{#(5P60>$ZDC9u0ZcD1 z-~ay~GMdr+h>O4FCg{8@@E8whNx^C!28QOJjQmp%^tv!;J9e;0f(DU5V^ht)IQUzm z--5;kKJ5do_w?vI?gK7PK`H9RV;*qg0I@-;UmCszWfahK7cp~YPfx(-%(`7?>;laO zwH_$p=mbx?bshqZ8N-U$3!v$iYDWw&Zg$fNRp1oi9Pwg6ceQWw{=F z67GNgmLnpdVF_?$37$EFPHCS8HH*5z?I(;WZI+8Kqn@FdmIyPg47+Ky_)XgfYC?CO z1BDx8^veS@8VPQjcyxa9={)8G9Z#7q4a)rxiDdBDrw??RyBje+(}@A;r%wO-J44=9`7V`qS_ z%wgeg2?HILgw~S>m5HFz#G|`F0Gwo7FM)cf9ulB4gj*~?Hx2aK82Uh`i9wYMxa+Rx z@bo`qP_Oks319PCPy>JoGD-j&EChAmTO2|A5ui)0O5&lD`wbP04E(LLK}ROR2Q!y| zd7!eZ`GG?-_VmhD` zW4fn;nlP@QRd}Go4P3gx2^e&VO6Lh?kXu1($oH8ufCfrAO2nFf2=KRD=Vo9q{MP(~ z$$@{$vEGt0J;?Mkq|M^dYa+{)A2}y_mEM;$86Mum@yi0gA6ZI8R`itKwn<9RPfZzx5EPfz}IY2Qgj-jrO=e z#t@;6BhXrgzVA0dEpAXk14pkTbjcao{2FB2FJ^iJdFaKfoha@EPZvU>#fS3)76*Fs zfJQD5lWCwD0J;|E#W^-`N&}e-pGUa-GUz5~^A~8LC3pn!MFbCMw&4OIy&MJI4A2; zgOdgJwA&k^A_1zapb0nxlqE0mw|H&rbLo_k@@PKH^l~j|u^1$z5zW2k zM_%AMcL8{00MzP&W>7??g%m#gE&kw}cDjd+~vr3ua`44%WA!z0u>VA+eNF*cj z9uD^}=K?L>1;<lUU#x7rb^)^PoraK~P&6 zbn2~V^D&8+{-DF`dToD~BRXTe{h&rCq%*eZ8fXHlKw=lD!}Ib!c&WxQiI+K`Gjh72 z!r&@1n*-FA09Bcg76`+^ck-QEL22pbQ_#FgZ-KAqY6I${7aPzzc*23yF~G67uvLhICGRt5%7#&e+6T`#*p61}#TU>~%CvegUkK9CQ< z?3aR<{{QdZ3vw8!N4Fkyz}qnvNd;I7?&aLa|NlcOUFgufE@Jfjr55Puf^Klh4GLKg zNO$Q4w=g&hgBtWNPyYdR-a$;{-Y97219(muGPC?L7u2umwVhH14rWkh@_;Ohd@;Wl zZ>Yim=A6t3VhVy|#|6AjRO+@uC#03OY0mO_Kqz{t51Go-HqTI2z0bAw$93XvD)44|R{lro`};@n8yG90CxC_+iW>M)5odI1n38~?r?aG&i7vY%=G|~jI3Y6kshJt+AYrCNd6dmAp>5C^F zpm=~LNU#vJwD#!rkl=55_xJyQ@JeH7@#^vYCM4VHA{o06d>|^UFauxW?g%C!qk5n% z2`>%a{QnOYgUEnJ{6HE&sbt~dYxJA&(2zR&;vw;m{AhjghJ5zA>_@_hdPzt_>g zr?+$~L=v^KXKcx)*RVyhvyV#{p=0xkop26!4`3sJ4O3_v{00X>YKI*a12=kKg6PODWKL zt6p2K0#H0c3Kki#8DKW}(i2ch23^So>U={g4QMC`L&h^e4)TEdAGGcqQpZ6$cn=pj4p5r}Je<7)l8L z!UNKi0TnFU-~9jo@+7Ep-)rlU&&lv25o{8q0|56v_$Yw(!CTtQ_1~ zgf^95GJ&Rbdu@N^A)LnpQ3Xn4FD+jE|L?dLluTedzFroC4#w!UJ&}i$R>1w&7nfU+ zQVCe-Whdx>h<%`B44OCs57l{Ce&TP51C{T%%9$IWWsHZxs~BIJf)w`JMnP-?mCvw( zB^6>DSP0rc?0~f9bRnJr$-J;{1&1|={cIjUO>Uawy2# zFJ(Zd;q}_y%!PaR#p@QhKVMc|gcnvNHqe|7$>zufl{n}euU^|J5JN!K;frMuLqP18 z3D2?F{OI2Q|DZKn+VD!}10?19=7J&%+R_0RJTD?zK;DE1LAo9aCkZ1t$rX|xALW2`gEKy)3;*J6Gm=%{diW*iRs@e;+pRgA z3@^@srF$VcQV=pO|MJ0I*x0lo_^NC0Xg6q024pB4G_Cz|^EuG6BXAK0T5|-l^5q)P zEMl*14A>QrbPK6nUZjJqfe1lHL0+oA2kj4MElmTru1?3mT30@of*^y1b0YY zWKUxP&B=q7Ms|Z+SsuNjU!%DgJUb71bhDa*^g|XKd2|~X9(a-S{mp-mZdTbe8PHOD z&^V$;ujqFM9yBw$4WR3o3=h1pglKt{3c6Vjbn&`NG|V;sAX4X3!LD2f7k>s3-wqMK z3l~2J5ucwb!_W;`z}0Jdhyga)zX2lKh%8$Jmz@NWO@^3xBMRn*Du}o@M4TfQCY}Tl zH-?BCz}0&}#HGRFqA4Krdrgf)VcN7I(tlE9U_s*1E4n+1ivb$C$bl*U4IG#kQo!D4 z{Lc;DmHr$ez5^l-(hS+HejXye03!Y(5@zRihxLHA>tYkaYwkgJw#jpB0e2%jygpAM>5!7`fzc6u=re1S_5tB zhpdwGf$d8Q76ETC`2Iqp@$Y{hNGS%|-+hyRAGmsO>^uOv`m39DL9z^kXRp^kN6i~S z9^D2Wy`p~qxETx&yg2{m4YvL6t^e!zJ-Wp})8x&^I9_rd{{KJJqnkAn;=FSa&|viF zeEK5y>l>uaQ2g@X{oNkjUK}3XOdg%5{yzYn55T`oe8lN>ur`UGiu?&e&VD zzt>Bl`Ja>rztcqz!wdY|#62<(OlD+YY`Ii=`!Hg@9;Dy!fQRLG{;3BJ!_4pe;n6Ds zngL?)IQX8~VV<4e978=j&w_&Uk4NYAV2{qrFAQ@) zE00B+l4KY>teHx=Jv#5dmC6)FY<5u*VElF%?8@7v`i|d@vX`>@w!SUp zfu5-XI(1!*q2YQz55TI=Y=MLtJmKBe|>~so*~rp_yJIx6MEnJ zchI>K|2#UcgS_+AF(laI_+hYg^BWCE{%wAYzTJKX;F%nc%a1+2U-nS^?Acu=@!A%) z|H_4bn~I!g^B=}CFYjKK6xZ%B7SCRngBN@(ElQ$&IuCdre9P_88#9~H(ZoO1;y!jU+e@h!^#1yolrx&z{yIbWR$fWXZzO7G64@0lR_Gmt$fx1%&;;-%k z4wuf*Gd`WZ2RtnQmE7>`cH{8qtljZnz@+n8`TqOxyFPfC`v3ob z&*MkHl}jYp5XgEYaQX=MJboM$ilD#+CzQXS5Qd!mgA%^JjGo=02EN^{67b-4wWyVX;F&yyl z^o50|2fyo$mxZ8=a{MqjJV9X#OJ9)i1f5O+%4=VOAtxtE_;lB4_;kl9cy!kr_;hDW zxbSZ)X7cEEGw`+i&EI?*Gz;8WdcwO`B-+*Rq-W<3pI(s*;B@2DdBL;!Fr#PlAqkIW zi~o-N5?uT(^B5Qyyn97FJ$pqicvxO2;s4B^&%iIp1l|ML=_TOX`nIHmf15X>N4Eep zSwifqmhim%#G~_q=l3f4K>{FAZF$m8HEZjWA<21XCY3qFbu99q7W zJaTCG$H?EZfdRC$6BISuKo0HZIS$fMe$KNukO{P=xpg_{Uh9q!RtAq|X8}gf=7WqN zZ#9A1nLgdACwwd)m$>k6XZGx_QISY<>|{~l-{#B&T2;yfIt7RIMZ3-W{~q1W5+DTz zo}Df#5-&<1LIxh4_dx;%FOqHE{|6OI0*=itDlCki$6ZuF0~ZV+Sq+coBNEWk1(YiI zo2GcmY~#?7-mBd%#Q%cIw(%%$^}NAoczkAu&deY(93JQ;ubb{l#&|NGD1qQ(fCJMd=o z=qz2~*?HTy^Efp7`gDHw=&W7fdHG4_InVD`d=x=SPo&uetquQKebjBX|FW}Q1 zd%&mLcLyk$gl_2eJ;UE}8DzD!Hw%9&CuqeC|F&YrmoDH)1Lt3N{_Q&HFNNXdvq!hH zh6iYiQ}a7UkLKeN9+t=Wn>9f3+IjBf(tn^@5~8nLXZg!J2tLdwzMVh7p1JPRdE2ww zQ2>Pc}V(o?lf5rR(2ok zXVmr+sD1}Eo;;2p0(lbDhPv+A`PHNI6G}_U!nZrjz_&Y2!lTo71*|>d#sshOU;7}+ z4_E$eD$>5KPfEf;O(A}8e0%qrq_}qbv3T~De7fLaDF$gb`E(vbYFs@7H?FRED1L4| zP_hd=uDlb}xB_hlJ-`4u5JcrRs9Ckrv)N66(WmnlG$VL6|Nqb53c3mj68;|Dt}8q` zB|MssSfIDM!0``K@5Ar%`*j0MeHn)fC~sq9(AC%KzM6mhD|rBF@0XN2@^33qVFI=JB|xLnHlQkm z@euzusbfrx9?h?rJiAL&3_N;SqCE~iVD{)0Ve{y&;_&RW_vnTk7|8C??IqyR$?tKT z36$16n{!kI7(K0HR22AIwu4R?1Pv&G8p|k!FoQ>P?FohwZjWx)6CTGweq=B_@cITK zy@3vQ(Ex27R{(j@z{m1*@fnX^lW3n_lMk=?(u18uAl+?Lex~Q;tbcb#L6;LJXU!DcU zsUEC-2MQ1kkR=|Lmy2aRdR^EgUJHQE32QzKt$!|q$^nc2C2u`DV^kEtjShZ!22k_X z8Pw{C^XO$cbqauD;$;oZyP;M1#e2z0Oyq;3OcZ*T*`@T6;ZK8sJM>jF?367T>W0MQ9* zj=N6yf5E5QbwTqFmd=Bvc0S#q9louXN=!j94Y^zlthN`V7JMv-N2lun$N!f;^VhlV z0BP(z$S>x4z>#0jMTNuFI-jL9vH2$xe+%eL&*q=ZCC1G^8B0xF4c~%N7t)!Z*Fm$! z%||L+I$t0qMo4+l?c36NvgEX9x4#Bxp3~Fv1b-8#@%MTMMBcaat7GRm&u(`EPf$pK z3I$M5@wY^S$M)X&bpC%~0UCk_Wvv@7ogaOA9sc=tz5}_U`N#im*A_?qDMt-&J1T-N zo^JgETE)^`3JbquAP=;H&cy>IJdW1e{4KK>7#KR|W`Jvf&(IStJv%ReTJMK~gmlL%_*kCiZ~h5V-d(!_R2;c!&W^8pD@%d@cZ$+t6K;iWp*=?)C8oi7khceQqB z;cv12|Ns9>C8)dy;~^LRZCb~e7(JWcGQCWL)qCCG!EKlB+!nCsp!MWS1F$yGxmU=3 zdASv|N4}S($)#HZQbd6bgB+s^DZhNWeJ6l&Ie2!&@SEX($Nv{!`arZn3O*P9?HXyF z0$`n>MvhD8N6?{1mH$B(!ho{{B;dfhUhuqqf;=RMbUrDl_460h?g4EbdY(JQ)?m5;&j8>n;P(H+9X z;c@U0^NWcOp8P-V3|iIBfEW~sJq#(Az?QglKJ>W!9M*XR9o)(Q_RNd4?)U%qCx9z| zus?P%F*7ivbuu4wW@31K-lLmU)f+r?yWa&mHu@su!JGe}_H5`5P#T6DDE!-_`3;9h zcenumHhzy@6CuzUC6*tGd^~z>rh-$c<&R=}P(d48N_Qt7AY-5Te76W4MK%BlvC&P!||>E;TeySfDg}A*m9QB9DMl zAT0H({}?X`FneGJA-;q3&2^xqdRngOSkWy)&nIP zF4o>G9^Jkhe7ap%l&pHW7gqj)CYg5p{Qv*uKClP_NF9IcJaBjC*FXLiP}P;enU+;QiB2o`B1LQ2B_QE<8K`1S67xBmXuY72j?b z6%9})>pEe}A(uRv{d1J7OuMo>RT!n4ywMFZ3i0+&dg5-_Ji zX2?K=db}h5HXjv6kK@NcU1X2W8;<<&6Uf5SuZ zL(8R-#|^(2OY|CkF_l<)zy{@SdNvcy#*iz?tWeY5}x7=LpUr;5-MOhXCifN8m+;_g{#BmJWdm zxKr@_W&_G^9^Jv9n&FU7X9m`6*8w*4hzHcikl6zl(2|zg10LP3JA68y|Gxm^ zY~W*giNAR^I1}=KGU18WLK6`A?-FwUGlb+nmrma;KAoWpKm&80mS0L>`ELfunc$wZ zOSkV9r2MzSr#o~($*Pwd!MVwWfdQ2NEWZ8!|8f&p1e*UQ!SY`#c<~SDBt2+737#53 z3W!7C0;$)7(WBE_!=snS!K2$56u>8ZIt@HJ12{n8Y$vSG}b}o7E*c&a|{JF*E@fM+pwUv=Zkp_ z@Be@1&u9M3pYJX3nLj^R!L#!SzaRs@poajzV1NS1aiDBy0GeF_-KHx8X-mvpf15RU-62TM0JL1T^My<2 zPjFU!RuBc6rF8M=E(RS$QX=Mg@HwbU@Zl#fgI9Nm1-OA*D(caEgadtyk^x*&yg2sc z$^X~)LH_mVE;jJ#{OHkn=*7kxPyWAN4Q|N4Xgv&_9|wiUOZGRQwlTQ<0Oo&xjlu_) zXW^j67AU;HEiHcy4^U^hyWYS9)M35`PIN5Mo}GU^ds&XZmV%!z2kIw-`iUN(e)4(- zP)1PjZ2t4V@ zB~bn@;&AD7Jpmq~1dmLAEHQ)3X8UgN=sf>l092p4bi1BtJy0U_wWCIkZ|co&*p#sN?v>SvXp_G0ve$8WIXk$bO&g}38gkLJOFN09CroH12CX>4Lm@tE}!md1CMUs9sDgJpv2R8 z3R(;3fmYvx)_DK;S8@$hUGulR2DPrXIWu{52TOo<=gnqhU~uE#ro!df{Duj%1jM)3 z=D2TnIfrMryMRxp?*@9pF(2AFv}qBaK%sC4S(jQizfT|)-%VQ-h zo}KO-9^I}7KofW1a^R&RsJ{g=pTG4wcrfhGKmL}pfB*jnJOB8>|NsC02SxTvKCoes z@h1Ll++f{4-QF5$p8R>oe7aK)@Qbz4)V8v>TghG@7e3f2p-GmbOtr*JVA{* zpUwmUenH5p2hc{)mgyjqLF+CcEjpjh58&niw)UK#=fQW7^%g#iA3PB4IXO@xOcT_e zdwrc>p23ZOyNcJ#0MM`jIQ~HE8eZ>1w6{R*xApw;prr{+Etg6hK<&7a2G9~EkpFx- zd5#+%c*zcO7Gyn`TenKrOGfbM9Ju~)I>y4q_%aV}zDoxWyWxSCSHUVE?FD{K*99+F zK!>n_!iYcLb-~Nm|Db1rgQ{<@m--;>E}cB?h6i5G{`>#G({YwAP)dI(1|I$7X*WFZ zvia}-|1aupqE+zV@fgT0m@gBb|NjpzKSEtWmx?|0Xnv!BTrm6qox9}wz@xMDfk&@t z@(s{sNTDwbFTKzJAN~~j1NCYgA&^~Q^E^5)LaZ>n^zzR$lmQ;FyiYI7HPBp#PdBKV z^jGk)JXYfFV|lXJ$)i`q(*v}~rt`yVE^zpRgylV&t^SwrfF`^=nh$VzbXNTEXg&z8 z7CbEvl-}{s{NQo$2lHW2eQtOFxio}~PYoUW1nBHP^6c~I{OQs8!K3*fJAd00(7fJ` ztHDl!6RQumdw?#aIrxIvr`P8=hsXZ<$*$_oYrpz{+5z2+9?b_iJo(oj@Hluv-ox;M z2mkux9tXk4LHSsoEWPK^`Jwp%yGQd6_A)0A!%vWtndCqUckO)oL?+igV!sFf`a__j zjt{<)28+KIG!)+Ld0`4d9Aq#!9eDKG9(>Qs;E~MI?!oxO?*9X5``Yk7|29WfkAn|1 zJUD;wZ>wbSIQU$_gY$SdqX*{?55q$q2M@4&Xdd#|0duGUntxj*o5#WD2Cq9H>iM@hf)=$1ygmWp z!|H2rCEfgn z%B43DpTYo!;A2{@Bf4D)j0Uho_`x? z9>j<7oyWz09?S)xrLW*YvJd=C4?&%b=4t^3{#HAU70}hxzK#!-)-{@G=JD*4_c(md)E}SNSU#e8zlAvbUAA0al|S* z|L&Y;KYTi0z2F1w`vR?y7W8cem(aB*d^-QVXkYd2KX@IoAZTSI4`_)3=tRYWRqy_T zn-G>qO8YUE5JJMo1Kf)_0$yv@3A!{g8ZxHh7$5tR0aOKbS982r{uH!(l-slO0C)i0 z^YRnV?@#y}Kg3BmXuBrVeK&&u#|;@PL1(vjJ>!=Y_NI`~NR{;rY_D+mFMu zTMTsnW_RfcRL{M9ei7bZ^yvKO**H1Y$tORKI*&&p638f{!F;?|9|K% z(8e;*>hKU~k>%jhoi5Q`E`!{3cwuyId{QdEucI!_@{(jJLAFU_(TW>Oej*#XDUx^B8(}Tt;c7hxX z9+8TBa;zTvph8UGLX`2u&RmengD054%i}=q^ysbK z(CK^T1!yIB=b`3m0q#;;P&wS~%;VVnhmpU<8Pr*C{=>xI0=mc5vH1^ksZ8?^d2nR$ zyIg>s`_O!d5u~}~xJS3^3#7Fa!XOKqk2rK*h<1#LJv^cLAUh~%`kwy#|G)K8>1k*v zB!fn4q(AfLXDfJgx;_A1n+Wzf=my2y3n1Tji*DrNVd!){()K%%5MZz^_>g3C&WFd9T+&>bK?>a?L*&A--|D z@X`)k5`)^g@ZdB&2?`@nHS4is11w+}4|(jkwz$BS>-u5_kAtUJJS;EpPd?aqFo%(W z0Ti62fB*mQJoIu6$c^B3V)F~x<{wOs{BBoX-U1D6wVZnbnLh;=#Gv#V?il9L>w5q+ zsO8!DWuGbo0|PV#TX=NaBd1=_9lOU}4=6G-FueG)hn)d*xTwg1umAbC2P<_KE4cJl zr0{QZR&n9qmaUj}@D=;Pcf6qW<*FXt)dHOt`L_itH9xR#ekR}i(BARF+cf^XYiay> z2M)YqO5@MF$-muO#j*J*fAb^xH2$Q+ju+lJHos*|SV}aTe{qyLfYLMnKEcjw&94%he@T|JH9w1Y=r9CT z)gG27N}qu0XQ;d*ME;xtiagSQMyQA8chJV5B{LZq_A7x3s?K9C%E6Q2;QAX@cY>lZ z*t=JT!L#$eNAnvA4{amRNSG(%_o5hI%b!KzprN+TYo487Ufe8TWB_k-dGFa9EAgW1 zF$06=cUSOjhoIV~R0VW5rM)NPeXm{?WuHz<&rUhi@*CuS&+b@>*VjPn-Hu2Y9zY60 zX#MHYYin!*+OFt(;)RDdXp^GviPx*s;Ohm!bFn_X`4XUQ3Ri+X8s9{KaxQ3RN9R`1 z3LTHm-V>lZQ@YCqd^%fqfS8@VpxbslI$J^8O3)MNckm^fpkw&+C45`o^0(N?gAP^s z@6)*!bj13L%b=4)7+?6dKJkFuE6YFSfJZa<{vHPYDTg>N@VEX3xuAJ3$aV()mbVZd z$Po-B8ZRdMf$oq5A3g11dALOU#U!8C|3NI?7Zw3vRw*B-U4I-rgbl7zx?4d;`7*xq z>NQdDfSyJSS`WWVoq@sQc99` zZ|4J_&i@|0y`aOEJbI^sgW(KlWTNvJ*rYUd1_sa#)vf8EYnZyhr-1u1KJx@!0a+@^ zz~I?i%jf~UY1r~OfAa@P(Dfmp6N4FiJ72mQUUD^jvim=1Qv?6DK*nCLyA40X%kw;X zS-YR}GVpIZ>53A6|6<{9VF4Y4-h6=3!xHSw(krlZ1~Jb^^My}u0HZIcSiS+i2nD(x z*`s^z1JJM{#CPD)Wy{0-O`ush52%>sVg8mj3D5`?+Theu(24)OsW*^P_k@nAApax# z2l+f_k6!R`u0Fl3fByadzYBE!xl89%@VKVtKcCLt1)!oh@+1p`N9W;guo_U)40JXH z^uB7JZm=4cZm=f)cF;_{4>Qs_?&5V;ATk7@uxPCh9d+H|7HE5C!Edk8W^Y3;4ekl(YVq3V>R< zL7+uX%|{f#Nd**!o{%gCxpd06yBu=3DCh<%$k63~pH8sd9-XaVA9sT(AI%pYovmPx z2lRke1oG&C2Am*y(4!kHQyPy2`={1pfSq>h}0+-hq@#CG1BYu9%Zi$Ft~I+Xnw%x(Y+N^So-wpCO+k5aNGr&kl^1|rqub#p#$u(1Fx8xAIUfT z;`Zzf{p-W;_6n2|LC4j4B!kX#2bCElA!pv zl_|o5qWO_r!!HT`7IDzY;y;Y*IKktWm*g239GjmoIyO`?y7RZrmSA9T{C0?uzr|RZ zfx)-)sw21&=Xvq3YwHvKmeVqzrJxckm~piHQn$;iOJ4SY(wjRAj49OwYcUQ_W$ybLV|_*?u%KvmpJQ0L+i zNcH>H|No)6)U!KYfWI|{3DjBw-=oo6F7Yyu3FJs{I&|rL08Jv0qSvQacdIBDL-T{5 z%_ledYhIqm}8Bn3Ky zKlzeJFV7^8UeOy{yd-co{r;O(wkD51teOhqp&J%m~NMqYyJ355DDf zY<>#q+Cco{!teJ2;ineRv2c|7={9Iz1;|hA2tQp<1Enf(`Q_62(xKs>0soW(pxig* z5a$JtUeQDMLG||mk6x1|c-orWjGDGuR{j0|A5;r~s~T{@|02JQfx(9nl!Kvdte3T* zbFDz>4@-J;6^5lZ{_SBZpfm?cZ=DxiIv;$$*!+Mo?fbz4jQlMrpxs9YU$H?G+9P&o zDieALNo63vd4SY_>p!H*0MRD8P!BG#d^<0|avXA-$fpxrr@z?v1zci*A`(_&U6uu9 zue?3pAOHXF2CrQ-JlTAJT^oF&O7o9j{JrI%IsqKt{M*10ftiN? z-GQg!m*$9a2$~OF__t-K?63i?v2K29?`U}xmjC?0`H#P~>(BrHps=a=^Z&o&4p8ms z2wsf+vhWWmjv1ilfHJE`w*{yx%HR5mpMe2X8MLN~GBC8>-T`Xc^ZVU^I&lZ+;9pQC zbNS%V0dX{Fq>vLdao2iUjDg`rfDh;v!{d;;Mfx zd30|DH8Ly@^ZOp|jrik}e8AK48>l1m&7;@tzmMgCdPh)Ii7m%M+te@qe*j&Q2rv!I5075kdND2r&+l)1Iv+p{0^M8T+j-RE z;4dx@%|o#IR)K%YLB^Xl3Y~{NdRYU-xEMV6U5@+kuRjECv>Y-#@Zx_Z=x{IojzgdS z|95SD3$u4drG#hWAAUXthI)R_-VnBb4ZjsU`CYFaW773xJm%B+7~vX-GeGu3E%(Sg zBmlYuu=y7=Xk(6t=HXIK*Os^Zt;S$GF1bJoA^w(B&li)0 zzxL?7;n4|hn1W5${O8lFBIVI5x>l5n!SmoBR!_|%ptAkp3oEE6{(b_T*aOiq!>8AT z-KX;bXo0nlCWvD4&^*jP<$z1e3;xy>pZ@=M=>`{?;5hA@{^|dJBo`PS=)CFMo5twT zD{3#w#o(j)477^xQUxTirh@F5;oED%@-qGtC@+D_OGy3$WhY2|t_3=BnbLCRKIp_E zQ2oFSI`SV<&fJd2C}&=P&c6c}F5t0I@EGku!;_tdAcar!0d~y`pkk+|A9V9d@(GX3 zlc0fFkAp827!Mx&A%E~EljgyfMW8xp0=hq1KsWMI>JM?4Kb*xuE9gKiLyz9Mpa$>@ z9whH{-g_YnI*+XL{)^O?|NnO$gr#IqyQJj+|C9rqpytVw>!6bH61asT3#*?o`X!s= z;O#T;jgj#7S*pu`;O=@ zcMIY1_vsH%_dy&6a(Ssh>uqo|k>CHYPx1lZ&Lhya2{|oOQBb^sQnDlHE)Pgb7K{a@ zWN@=`Cp)O6x!pk}Z6&D5^!&&F|7izbuyr16e#rjvCWr@{Z-ly``8Q)77s!?TEtf#& zLt7pz76f%*K_lOwB{2PQ{0t1B;uqo{Y=!WPM$qj}AUCZQVPH7M!0FRl!1%HUyluvT z!I6JoArq*!Yl#9S-d@`{K`sUtXy0)9wkMzh1k}9)k1m*l7k5Bf9-{9-AqlHr`L{VJ zId&fH02ksr#6k7-fwxScR`W}Dkhd`7?{_pj{!qs|eh6?efZD3v;K4+UA&(bHAn(A& zJ3hRHw|4nk?r?zigG0tUS_MD{oAug;$#XJ*u1?7@V_vQ1kr#3vuUfpy5$)!wKY;?RT)Wol1E;l5c~CH2P0``~M%c zTYdp)(DVZ4py~7%h<3&SP=OBK6yyOJYJ1Tc$;bfi9{hi?uZxiZxdYzP`r-fom)F46 z93;LVVE~T#QqJbzjQss7Tnr2#*P!OVbKC^;A0uc_4JiNV3WD;Vst+jt@qm}&Ixv9R zt`9)xMK+&ddbt4HW(B8DkobvLu=YL!w7u`xe1_5R_RE=I&0uxlZa-`+0MsvoCN%zS z4vH(}_*+Dn85l0SXnw$N!^7Xs4!#!X0I2Yo;Q_i#t(W!7C2;R702Cb(>%bk4*Z%zS zkkKh@=5BXT={)rPQrh=Jpb~5=XyD@D3pUUS7>I$&mk|aYUkf%6G}_xD{R-TvYJR{7 z&PhnlM3ft#yy1A^EohnvS}nM?zJ1y9;s5^$Q1v+SPwNF{)s7SLQVtbPOKUUJHE zPw>?|2l!h`LDzOc%5v9mMh5sOf=lO1$UuVC1?WIR*#|_v1Q+;_tc<&KgnAQ{+W5g0 zE@+HI4RlOCxGnP17C!HYT%Wq|Z_iNJ0on=V*!UDQ(*`vLT#bPmxX|GV{?_dGpbC}0 zKlVMSdjuK*a@+$VUj~7TZwCg9dNnx=UM_Q^jQ1#V-J@nq0v7Py-U);2xON8<5w* zK?1MYU$TN%#DmU7>wEwoP)lI~4RA2NT=WWLHYEQ;?$h+>yywgK?1leU&`1J!LIX7E z(%StDG;I0V12S?5Du+7nz0eAUPS^c^@je_>()@TC0(LAopZavK1uCwOuCxsi%(UGcddic>!_=SRZsm9X#HB=q3M4c>3x!-FKFk;pI|r zQ2-7PP`HEob>K1Nmy5u49Rnn~TVX@RphlHv@*Pk)1{-$qu)F~;Rj~~ezi@nvC{?q- zH;sWO_Q1iO$pPxk?FCs4TKDgx`Q5Sk4<~=$QqX!~&~{nTA}LUH{@w7vi^`n;{~dcn zRK9!m)^UO_9PmiK^y2g4C;vSe@4fsD4j2Z)^T^TCeZZ z2IXbQ#1^z^4=M&;T%E%Xs#`!UJkQQUFSoq-|KAZbsN53w92}y}5578f9&v0w!}2l+ zyn2>Z`j-rYPp|57B~Av=W)?f>Y#FqN4&NWL58N5)eE#CH4YP$yBE|;c>->jf%DfsP;vvErMCliBdLq#vl7J#9-Su~ zn-4O2et!WvpdRVI%+8B0mgh`4BY7&?{=e#sxZ9bXw;B|1b6ag7)+7 z1cfhj7S)IGglFf$myf{5p@X|u;J5+zw|qLULn8##czfY8o1FoYTs=VkI|?q!{GWqU zY`@=Mv?w9_pQQ3#J+AD&%3vU$-&22cL=M?4rWcgGP^BEDyWz`yO`ejrijW9y#J~It045 z6Lg;_X#Isx@?qq{2sE6e3F^;a?a6GvhbW02u)`;*nqM=*C#jNeJG6ZB=)47**PAi_ z$$!sY7P*(~pc@QGvB(d}qH@9(>BB4v15KupV$oC38PCvZem=q$9h(RB(N<6~_3a23 ze@i&1{M!IZS@1z7Xw-sI=J(fz2YfWYdGzu~c^v$0@6jt7%FM;!aquUr=FJx`(jX%} zt3lT?fNqR_Sq4fzplPxzjGzh1$2f;X9lsr7FXaR^>{@@af*SYNUs#!g8uy2wjr;2_ z<-UMQkjF1?e}>R=L9JYHuK_wjd-^R}Y7TmdCQt}UyU1EjJpKQF2Pnrvy=Vy;l>7-9 zl;m$p2i<3p_xk_;9iZX|RncFVA}5d{&)1+b@`O((xHk)3mhdv=K1lS#%P`OsL+6K= zZJ^Sl^TW$yA3!q%84@pDUx4!0rPq9(&4(C0n}4P7w}5I4=Y|?l1_u5Xp|Ah{S3Y@h zUibBX@D?|4clgDFQc!LHjWX{9uMC3DSa(AX;_f{D;ykG7fc2{Ksi45^T?;xTZdVGp z2!H>A5zpdbv#lb$1Wk*5vTjz0T)d8(YUMO{c1r0iY>jKCs z3(w9YFGWC$0D8eqWRLDz0dV>0+WFL@^B}ksg%+V8+dMkKHR_9BQ^7-4j?I5K>U>=~ zmqO~eyB^(hK{F^Goj1W|?9&2`a6tyU7^j$)zc@UVox!pB4W~!vagf&fYd)Q?T|1w; zbb}3WZGBtf1Zh)3_Q^oHQ7l5B#c-vcJi2?qhWD~e1vMeShJ&r~=mb0cMJmKm9^I^m zKgqy)?O<289w@c*fy@*6^y(H%b24~#{!4?OCkF4oH=Ba%(-x3+Q2!m&P=zHZu;ozu zj=lIf1=M#x0IDxvfIJBq$M?MW172%2{pVx=mk%%QCjI~avJ^C}+Rf?+G8z&hFqeVG z6COxm9Z&dd0(K7%NE66CpxA*nI^ZtJ2fG9`iqHZ&kq=V8forx^-~m5KfWn5~UQYc6 z%7v)y7hQ1ThcpckZhIj*1*QG+<^KQw9=$HojGzS)3?99<%l?6GAZU#MovQ(jf=wZy zCM$SiXFsU*1lmF?mk!F`OTo?9Uhr-99-ZLp=U%^Yau?%VkSWEJY7x9iv7 z?gSqo=F<&cZ3n%o(F1ZNmrv)j7k$^D^#HVJ`H57tBtQNC|78~VMzFb{b$u`QKrVpr z;pSv`k*dVN@Urs}S|L{eIyA$V~i)LxKH9tR(Zcyu1$!2lX1=zQj3dB}s` z`H+X@EsxGy9{f&+1G-%W0i6Y%H`Q{We5_vj2);1~240Igs3=nfO` zXg((4(OE9x(HRaB1Gn2fy4gJrz7T7EQ18+FqrL>bAK+!P(Ch!O^YUB&m#Bk030*JE z0b2J7I>0De;DybjcmF+FZ~O7#>J- zY_?HhC=J*JIu8Kc=>eUbu+HTDe~-@N9-W6@BwN4xZ}`olw_3uZH{it!mZ_kj1XsjT z_)>k3<|6`-gSo(ma52A|&24L-fPKGopWsqp?9=$?hn zSK#Hw&pkS0H@wI`1e#`a-QdyuL#5;)*Z^acb(f{aXp6ET<88gQYhLJEb1=M~h~WRX z;b8FScHQuL--{*lq3heBOWQ%I{wp}ugYFstrTFG55k~(0IiNDG^P6Y$JH|?BaMJ^0 zZ8Ibt^s<=y_1c(&wgmZf{_yGi_*xXyukdJo$#{%`0kqcE1GMjY4|vV$|B~mR^Pjs* z5BPLG2d%sA5b)@{^&(#mv}V}%MC$?mKJYmkGkh#x@V797i|JRMy*4cS{)1{z%|kC- zCO`TAdRp29pI#et(3T++x!35^ZWl`4N$)yVQ#A~ zxHh`w)AyJbmLj8@D zAELpofCNYEVK4_d%Yygoft&*>IYCE$cyyb+u( zM_RrQ)^B)e-;e+Q|G(U@_Zj%SAHz%gKR%zyDXke$KsKrFK5p!62%0XmH1 zDd>2hf1ow~o}E`bIzNG3(+Q5+*|LBC`+(NX-UF=^0fj_}ibU&yQZY!@M?ZhZr}HHu zY~p4A{s*-QS`U#Sz^f1&k2-IH!-mhNB< z%M1L?&p^4LJM;#82Q`1I33&Pa5ecy6Agdwe*KttOkpZ-`!~=BNiRE|xmVKZs(wln) z?EY6TtiXffo#5ow}tNAVH60 zh%!)u4EN{+s|RiIn=SqNf9FAuWY;SmjLrhx&McM(i*r4?MZ5n>GkA1cbspk8)%>fz zEW@MMRADCgR+yRnZ$OnZvimzPyyX4=|9`hL%S+b(|Nrj*kEr|xcbuvPz-EIy$M^%Z z!n+xCje$p}vjAwz8R$lc+-_!DFFc39ma&!02anQw^nxArdg26_e9JCg zhSyCVy|E1*$sc?=AAwFdxc?$f3seBy^XRpmGYy=AWLLfU{~}@rs4j)1S5Wwb8h!(9 zLE5PC?Z3w^a4Uj=!640pzwQ9&@(*3e4s@I5N9@h7n45nwmT7x{9Ra#z4m6a@f#C8p6x65#ElC3%$smy8(G3X& zkIv8^hL@V3fp7ZxU#hzc)NS(U_5H996b~Mqt{-0bwXrjJbR(b4V0iK{xE}H77H@te z@6r5=wM5yY`4?O1K~!~|;C<$Hp@06r@SF~6TCpm9m1gkhHQn`rlL2xY*1_&K|6%TX z3a+F)z^BSccyyM&cu}1H^uI^*50(;Jk8X?aprgc@N|U}H2enK~y*#=L6g;{s1U!nw9af3Ggj#5R4qyb1hNIy4(uK?nE zSo?95-1q2aef=FAeH!m!(Z|#UzWnSmMEw6dnE0zsu=s9>_?^knKzVTqBEA?R{td2v zS10n7T^_w*KRqn37n^(RXn+Fnz3Cp!$2maa@}RTal=(~EfA-+tbMoL%W{>299=#&$ z9^h^A4h*2v3VL~`ZQ*6`(EQ<%%+lz=c*5@ggNC}F3>CK<>V7eJ^oISaxY$tl8^rou zalE1K4~X@rVsAs;Ul8kW#pZ^(e<0Ssij{_!8tVQtR4(-B4f_wW!tm1TsYuNe(0;sb z)*YY0LGxxkGzh@)-vNn#Q2O}sMVi5*^Or}j>Ay+P&;Thp*zpG1UkC-Ieo%Yhbmvb{ z$=3KE)T}Kl_UX;xWb|mgRH_NuQt0gi-oXCi=cf0NoMGkBe1rqqI0QGzK(OuAl=3PQ2a+8K3g#wSC#g z&G6z$!KeSnS-bAYfb;O{$>5MO{MLE@#jUff3@@(sgPI^Nkn>7F^$%!70(^9{XD5>T z%kE%tzajmk4xT zf64jw6{0@?^4kk_hS&dNJCDD7|K=6);n$#Y0+il7y4?jldR-V84@2V9qq$yy(L?e; z^8=B?AbGGE%8H=&ZMTB}=-N7{BrN}e26{p5HV2RHdI1l{9~GP)y)O2QpmDI5+8xi3 z?Sz>J8`?tTPhQXfRPPEfK}X!wD`*AaZ4C1k_8NAnv2k8W|F z?sS1~#}pu2&ON%>Ji7e^e0s|yz8wLJl}Y$mJ}eOjS301fILH_S*9_vGWjk*iq5N@>ePR7K`^Uj`cnPjRs8x_0L{!0;LO3AbVM}UP_quyZYaI+ z;{M-P|2?`(Z#Z@y_vmJOy&80XC1^Yhd~&H{C#Z%79e@jRJaV~p!|(vqIS|+Iw}9^9 zdXf0*)qjug%%B#lPj@kBBT7l3M|ZRYc<#-&^;?OOV{@$tV~LGNZ|D`TUK3-V&X=Gx zvXdLsD^n;*0q^-j>eQFUgTet`K!D3r(E7j^FJJv{JpdX_{Kr^&s=->J^r+zh(CwR` zbk=-W;&m^gN&;E%iptk`JssSbrk6Q zgaaHtmLH1!L4y#=0+4p$rGvkiJ(4f^^r{Ge?x0%zauR6$FF3rwqj2DXA0epupq91A z3{S=*zLtNA9=y(ixWfn3UgOPM1!_kg@SM)#eBzx z`rjbt?}{mo4fTIO%s&;Kjt%vHLCnAW9aW$W{tfm2K-_=)9oZ1>e})PhQ1fjE=-dcs zl!DT>Pbb)MUqKshTR~^hf!bZ5wmgy=Q2O=lP5=K=9??&Snq|O%rVf_(JUbDmrZ>OQ zKu*3VAZ?7sM+^)G3?7ZYK(_I>fX+JtWh&3kGtCd`A^D0QeBx>6^%rf=U;S^c5MV4R z@aP3y%JkZEKcgK3xGM7Kblu@=`L(zX5{{q?b-;s1-$03C9w#_ymkW9FFFsz(mHpqKwI6B4^=Pq1Dybi;voi~&KDlNykV<(89C4Jn(umD4bq!{{m(5m+t@n|9`Q+11)(wFu=kGZA{LiGxUH@w^nzc z0BAHCwDGE?2$T-HT~B}pen5w-zXEmGK+C!W!4kD6UL-sNy=)WP%VH8onn%iy^mmIGkzKmL8p%|GhP13Y@ee}am8%gaTQ zFG0NlX!{M+Wc2_I`GL+w_38ZSq0CY88qpWJ=)ri%qxBMhixJ3CofkYbZ-6c)(>w~A zBJk+E@6-7VbY|C!t)Tj41~}{=^Ec}-LN-43DI>YF8FWRePv>*UxVT(NWA-4J}$oG+gth{baSxC%YEQ(fC~cyXySms33M*=uY@L_!Yx(n2<>-_1VdC)VNrO$`)1E@n+|C52gL-7Cq|Ddes(Hs7Y zzk?af19j}efAe>I{Rff*b?(Cd@OL~1^FSTE@W1>WH^DqmColXTf5&Ms?>|F@kgMTa z@a27;oo69urBCqa4gdcVbeE*(@uT2T#$TXgbX(to&KBW!{qquJ3sQ#=Y5oU%R<0+! z(vav55^=N+72t1C1f9^-d9Lv%DC_gLNHIfB*>-g`{00g&MQAy7A3V)9MEMS?4{kgLrNh$oE}b7P{%|q;;A;47B_vay0~N-W zkBj#r5}t3bi^@-gepveR0rh8Y`B)wP}&1su;A0_dg6r|%j^FjkNJS|6U<*N;Gl=4 z^Ue<*$)`Yl_?aHxe|j|kV)SUf@!zxa*vo&Q2@m-C3p9^_bK4#8;SP}g9yb4g&b!9& z59q!H&ss8@B{hpIktUOE@;vsDKhO zXsa=Z{foh~w?yR^f5-NJ|NnyoeuD*m^LH$R3j6^J{Ne8a9l-)p@fR%cm%pP0s^TA5 z;2(cSF;w6`1AoUE(7c`I9bd+0FZY5@dxiNQAR85OiieNDJJB3!y6hGw^rDf$mo9Em8Ro zzUTqwz8BVPuR#OdB@&L^p&~CYgLh(p$`P>2iGTn9_vw6KcoLM(nturJ_klJTc=Q&t z`*c1xJn7N=?1xA5^B*3TpNr-B_c5!2V$l{9AK(Fw!;GNedd7numiI~@dRYGBZ(a%t zCHSa;N9QM>ZZ2?&?>ymo@Fg4Qw(Em0*nK!p_$VIm>^$gs@FfRi4XNkBmjZB>f)C?~ z<_G*9Ad`O;?eXY!{|`P=_64&?ugp=%fU_H;hvo4dU^c(g4G+f8;H;lE0kHFto;u1Q0ss2K};pwNaF(@-Ov^^qS5~F`ymDgCI|j02M$B} zL*P0vBpBQb`2FpOLaCKUx4!_W@(1@Sn;+Es^d^EX1!pP~>^u%`U}wB&zW?gKM{q+ zuwf1&K8z0_X2J6}sMX-{3DjPF-2?J3h;ISmp9Jwi{`au_R3h&2oe9*^F6Hy+c9#GJ zH{%75PIv6*m3FhPeFPek`?(Li(5P4RSv|C)^RlK4rHL@Xqt{)+19EUr2@BZh)&nJ6 zi1F4?k6zoZ7aR;8o#4TBk51PgFJ^$|k-J@goIDH~AMAVznmFo>mjLy5kc^6#01eIY zgANIU_!&~}_u5MSxTARfzenRKkOMqAg~7rI|ABTobA0&!zqvw$v2+*6R4$0U>pYN6 z6kzb^WPZIS4Sc_e#)nt`JCD6&0rh7<`Xxa8<1az8SkU^|r?+0h5i%hT?!p8c-UfAF zUh7ZrusmE_?c1HB0y^}p#M+U6n~N+1c(4G}Lksi(EiU{1B25%D8F82qGzBZ*`JF`t zoYW43G~4-h{spyhj(YUkHa_EEcrgpK7#ziz(wzwZfqZ0P%+Bz710=urwtn;FcYOwG zzDN6XK0xl|g32lId7Yp*hm9w^xP9}@f6xU2pwWTu*dK=9PC^GEA@$u0>1S_1OI%(E z^MTg?fzSOlJPDeN@#$rK|L*^P!%Hta1VMuk5cQz^gJOR5%{TuIzkz17p*Ea+30h$W zD~~}l$1kpHJ_V0XfW{&~#|eXvO^2+z1exU+3hL)WT`T}k@;=?*ljTZed@SFUntE6V z3qaP`L_5ZUrneyO@#wX+ehSJ?p`e4pU%UWc9oQZEz@xkL#p`1)dS9R%|BYIHfrsTl zopV^G02eR(EuesWarqWfZ#-GRqw`>iG3dO1&>93|uU-=+kIu^=cAiJ)eZxyHzWf1Y zpd$jE2cjKg!07?xMh6DaJZ|$LiPEzky|x8kK@RnO@nSisMDF%|;nVrdqc>Or+UYM@ z3o`%pa!9`Jy#J!%EvOuO32Ij(=AU|Py`O-Mf%rEDViefF5S56u11j&p;R_y10hKCX zA9H}lWFTW?u<-{_r~Adjo3B8-I$^F!_317K9XVE#>d_r7;KTUY)AC*s=;CGA6oO+M zs3{3=f87LkmA`=+l;wZ^fTz4$50squv^-W61xl`49P=W@Jo7@BCtU9m`USEEf=PyC?!JzWDn^oW@sIUhY z!`%`d&A(YnJiZ-f=Wo5Vk zf~C$r-N_Q5o3eEr8*Eg#_**A~lz=DQ!GpEX^xOP{u~gQlH(3HYuGDLr{fL9%Ma$3s z|6d<_8NcMo|Cdoqp8SX9Cs_W26iXhRpPQdCmSlNc{0%CvLHAJ!sDjEGkJj52I-tp5 z6Yx55&`qcwmbdEoLGFohO9<8@4=YZ8i$H{taS3l%ncyZ*%fAIP$n0ukQo1^(Tc>4HuDIdtB zb(6tU1E6uIZf2zM&Bx&JP5xF{Mg|7Z80Y10M-(6nOja^DFgWnHf*M}XD#)Yx2dHTP zt%&Y0FfhCjzy9jKM|ZWv3%OmO6Q7x3hbF`CrG$^9md1ld53@abZNEO?V0gjz zK!cFrNy0y%l}r0r6&M(Ndb1@!6DTikaf8mI4i@m}3=n|jbrzrQY*2;9-vU~%2fDAy zrxSGC5$HxGVbDMigM$aB0H|%&dC{Zs;s5{t_j`15gXUfIJvy&7Ka=-p{wEEIAkYXe zLqn;WN2jyG3UONrXpp1qVZkB51gc-J?i-do=%)E@=ZdB|vqZz{_$_!wcfhR!}<>d>A4`vkO?Wut&G+4G%<9cuT`M2aitS z*K6SAF{FI;N&e{==F@8;<{0YOc@|#MYWP@w^W^vc=GplLR;x+AkP>|N-#7WMcdv-K zNAn8_(9W#BZ;*?F?7%lpffw7jo_MiQ9CS>$ut#sPglFeL$M1(g8M`zL++7CUM+geL z0LR8h3<(Slo{hgivL!{Jf~utnY@ChaG0+x>zl{9-p!=VEI=v-)I+F!_I*S!B$H_oT zuwE}on*chI)~EA4_(JE<9Uh&f2VO|#fer@@-2u9m5abXP8%z55SnwAI*m^3`;@o z_C4^D=|5;2F0{PuwdKAGN48c6|XI=#M>ojGdwRCu2RIPv?WzufXkUXNlJ*Jd!UOetQv+ z@#O#OXGo(@@bP;1SUsq?@BrN)2I<1^x72_F9&+|*Ne#F;3mVVsblvfy=*6r5-5w&I zoku%;w}9*{fvgn-wS%2Jx?^`3egp5exb@;i2B_XVPztID#;Q0X`(9*!e#fQ3mw}1wyA&v*FiUpTf;D*r4Pk;aa2g!HddVL>ZAE^HG z=w=5cha7NO0bc6{ofIzLHo~<>*1&1 zdbqRNs_?TZWoB-l=JOaD-=8N;UP%1Z&`JnIw`vE-125MEj&;*s@XmvGYebfuS^GJ>O zYynU+%d_(sXa+G^!n;>Q2h<$$1zoM>0bchAcFQlwaS?TWF6=(gKE&QbHjenm6c>J2JpyizWn&5p# z{F<%}{F<&4_%&S@fNoXr=>*+S_+rN;@G|=nZCmifNV^9k0|WoIUXZ&zW1($<1r;H! zmGA$*{0pi+JHbj{9LWc@dckba+Gl8dwBGjVHt^__;BUDII$gE(Tgl$ny&k<&=YaFt zLs0iI`VFX48OPuH2y{Moaw|xxdn+iDcrqS^=C9UorIl&?`KJ1-xEa7BmXJ6D&=fp$EQ`NY8Z-yk`P{SlxCDQT3`nZmMMc1; z^EYHyC}>(2ba$U`uL-;10bk4S{LO|;3=9+aw+Z|7W;1#)UhuViS5o7#50ugW|Nn0f zzOm#TXgCtI^2Vq0IB4Aycsv<=<^^b9(2Mtx;GM9Zy)G&euu-)VR#2-1)H334Ne9g_ zS^nT}{R)~*>UQ1XY3-sSz~A}|#BDyzTCs-3?%qk68GC$9-VaYy9#IzTGvTA;SOstxrISy4QBF$T)A{-(=s+1*e((gH2G;_fBJTA)02;Jt1)V41lU%w55*Qr}3=I20n=*Vl zT~~Pbx|lJ7u2%*J&xHuk3Nc^EBD#H`owlH^#BtXHAmuMML1jIC|3W zA;^eaiN=fIW03h0u>R&>jCH#~?dj()x?`UFf4v?No}Kq!MBD_mFJ7MkyRX+)`vSCc z-~c*R1T>%G`r>6OI6xiX^n=C=K}|eg#y8MLYI!8sp`d|2q)H65zYY{GZ|g4lc76vng7d)*{5EjO{t9w9 zh%e)t7hAJI3-Z6e$Xx;IvonLth8kS99NPMIec^BvEl4JUtOL#5eM8v!GAkN+KMu&% zzMaoscRSA(D3?wj)UQa2_WWgPjTX=#2-B zq-emKT^`-wxf%YJ=b#ML?Iz%%c?*;wLA^C`P+!3Vd^-}NbO4QecKZqV_U1`=LO0K{ z_;%+>cyzOYg0}^9jTCqo&y(@2N3Wj*XiW)dbdJNL+fBlw)AfW$bL|NR{ua=Zeh<); zc=I7f7yfMquQ?}xtZuzj=kL-9UO@9V33PHBXz;Vd27KoiXsi@8=OOa)4`@%Fr{(d| zGalWcpw90J(2@3M(m)aM%R}=PXtSd|sA=7LseU6g&%M+GCnL~!U9auov!HYqdcdQz z^u&uRphLc(=Dhp?%89+Uiy#Viyx0zr-0{*MWL~dr`aO`&(hVM+pdkj|6ECKL6_joO zcdkG;uywP6{r?iQM+>RLiZp&74vLd&kYzaFQ7%xowfPw%f6GNsnSAj#s00=O&Cq|p z;bD1$zkeeW1A~v{Z~opDp!QblZLeMyYfuN3-{Z!MWgox(-}fJ+uk-i|&2rH2=5f$j ziDrxp3@<9fzJkWZ9lsr6=Whjxcy^1Zz{h^2`CC9M&OkjP4hH_#G$sayZ^tPx6#;O~?9u#_iND=~k%7VRQs+TXysQBogb6Yq zb$~t<mJt*jTh|T z1ta`@@{9}&macpFThu`Hf1`>DXaeuGJt*J2NDf7WTFWVLd+Pa%eYLRhUeDeT6_C57 zKyxTbkbb0RCyR<}hXyFepbiay>fO%!FD|%&BIfW*CFJ(!d5`9w_53ZMwkJ3tN*@G` z{g$5Sb`W{F9IO!3)&0xaX9h0NyGE+999F1lla`EaA}&sw7I3JbJw$YjZuiy(K(ArXpo9XcH(^C9XgsiXheziv z@DBbL@4vhQ@3-xST)UJ8Dt+LS%-|{EmqE~Y0uOk;^XNSPLM!#j|CjM#VQ@KDd*sD* zP4NExKUctKrGfYFzXUA;&}jehUFj(}4Q-9=*1!Pk`n>?*IS)(hO`0Ed5PB z0V?%;cf42uI^Cq(cgIUmU-v~+0(d{c?nB^ai%$Y{Wxn z37^gc1sBkMp!+Xc!O0LQ#7l!g!}F-24a(=8=U>b``wBF>3)XW*(xBpR`3y?`oxT%Z{MrL5)qE#(JBW0; z&H!azUr^5lT%z)UIyIn{yC&eHEWh-v*z~&<>wY*9rWsh9Cu< z&tGuHOfM`NG%ogAc#+1s~8_ZQl;iP4F-5f4u$g zlUzFk9H1V(5ifkYLnruj`*!$f{`T#B|8h6Dv;*e{?_L&m-_B3In!kK3KX@EJ017uB zey0mBCxO*4fQ$j9FV9|?cu&i__1|BDR=A~2@C3(BuZcXk2zs%X@%?|#&KMO1P=J8~ z4-|-=oh~X8FOPwS89?hjd^&w+yf8Tjj`bOx$6tQ?3qE`kG9Lh*aq;QwtpFA6ouLgr zovs}(%>TXn@6lVk06fm>I^l)*Zcyi@b_1w#kiG+AyLR|=hc@`O{`ctyYvpeR4U~Iy zyH4=!tWgmFy8zT+C=~}KFr>ybd&3z8PzAA%!GVndWM1|u&{;V#Dhe+}LG_JCa_9`h zZ!eYxJo*1J2-1v-J_4?{;3?-t#%+)jd>df?efa~F-Z_fpgl!t+1LTC*aNh7uTaf6U^XvK`n2;rj=jqU&MeAV;S}4Td(hO=by*mwB86?2S-%P&f9qpJT6&%6^y5N6n`cntw`xE`#QGdenIc!sT~59tIn`8fMWVuw{E+t`PK0RFF^yHh&~iZzehKNM<;5dv_#1Ra_SGHbI0G342rJ!?V#y(0Y?7TKv09x@^f*5 zujTt9+1HWq^2oFKI3ws*L0`-F#m+vKpNs7r`L~JlZ)3JNRPwmDXn*I$=93D||D<{g z_VYVk>^unJ@jD%~JXCVnL-K$}^9knH`pE8!o#4@3Is?)i?~WGmu#6KZ;p3kJ+WO~?{&~n6UmpdJA-vw_F#~)n2*~nH9=*052RImB zEW8drnP&z{S}*bQ=`N4}g|6Z4m$M;Z8wFBb3{gD+RkeUmcZLKgFS#22f4K%Uq}c5` z!PW3TD9gQ^0^!dvybX%Mm#!ewx@%{=&^QTh--0fWesL!pb^Rjhc!)#8Kb{f|hi}Kg zi#EQM3Pywd1G?!K)}QWXgRFrODSZsuBgOLyblBK^&(0$+7+*0mMEi6;bByumJRbXU z5on%jLa1lwNsrE_j^W_rvLN+2Y@d_`XaEAOkb!lw-NB^?={n>1D>51JbFRL3;lnw^T{93X0Q$?aMFjb34yMlTnrw{c>aR< z6sX~jQnm7cG&CQvKuRYQU`>HiKhQ#Y37^h`zMzgaXvWhQ)GhRFJy7cE(QE5+9_+IP zpiw@L&d?2@QL-2LS3w24?*gB0*A<{*#iQGI$7^x$ys2lmj|!-fUE&8e#UEX ztu}iJI=~I7yN`2zTEe4S%mdQOgS78T)L$rV2G#J|o}I@W8=rz|0&xAy>f8FHR0>ql zI^~1f)1Wk}aSW9HA?u;hs^@Fq2~Ymkxy+D-N5?=NL~ih;CVz_z69a>5cby2xw2=32 z|AQK8p2_DuAn6XW{Kca?Sipnv6llv$FKBQWV*ah>N9-P;+dR1+D9c46V!u-RwNU2V`uo4Tq2A5B^@z^cb{3^dG$M zLhtLl|KLWB>j{s}gZ!<0Acu6`@&GR-0ZlJDD>Of1FBJt_auBw}h7Gd71Kh*`E$!$G zJ@KOD;Q#;Nu;>m283k3!-wN6$015+`=Uccz4YBTO3Gk{7Ps@P@e`V zck;_KfY+mdBKY!w|NlLhy+QlGJv-08P`L!!Iq)1b`1V5L5@?CafBsg;c%L)4xhL>? z8nj9SFG%ADnIXUN|NqY8FFH1Wtgca!c+ofc-G9&HE-Iiy<`_T>(DVw!%jMuPb#Q$P ziegZlf#V3=uu_Hvh#aVY36^*KcATBR^&=>XLCYmTg%@-mV6W!8|DfS1(6|?3*%Euh zIS0>95f#sFaSwzj7jz|*XQw!LHC8D*xJ$?a9j$JDB>(aRq^S%lKe|gn>uf;F-ZXdr z{|`P!3DiCZtxf_rJCB3LlEA^k32rUB9sn&RdU+1)H3!i6%jBIL3@_GP`2YW9EK2!O zy%W?g4n6T=!Ub^Ia^j@`Xfh6zctIX5QGmK0T+aD){&)#0z+P^E_xh_lte&Uj5(6s=#o-qmvs{GdOz8*ahN( z1|~cXJ`nTi%$D%ryx`F->a$sz!KX7>Au zaj*(>5v}f-Bb*Gc*P@nZu=>@b`HcZ`Rrg~D$X<_5*9#u4|4Te~uqrfw238+{MY>tf zZUPMg)xPlPt-SzlPL+ND9TMbvO+86Ff_m6c+u_o1T;DTK5zlF_8SyWNI?R%AKV}SuYmwfNi@IF=w|fjtUck;>3g8l zb&oBmIOlJf0?O~8lS3}QU|kCudn*lWtlb0JF2LVX0g~&EJpmrQy#M0q&i|k@PZ)hV ze@I>eZT9JoJpdXN{qVo>5J*F(Flg`y9CeP+Wz3N9Xa;Xe25mnCjfCx6^Xh-6>kd#e zdNp_qsupB{Z*TffPxxNs7nM6fJvhj%c=y0XHz>bA_a%RSaqBF|sr-G#AQ#R6UDs)O zyu{MC^O=w3gCfzFx4}9XK>IX(EFbVUp9Z%lUU?`BK=#SO_a>VNfLcAvLHj5@x?@j( z8legdAYXv;x+dtnFW4v;IA4O+IdvZMvHVda_WCqZdlz&*xUc2E;_cw&+W$Z++$_K@ ztbfw{NzXLQ02;C!H z{)fKg$5b3sCw8t;g@Y0Pek(u!Fi1;By)v z%^Of#89X%!YUjKW0PWf-iGE?W3cjw%qq`WquF0eGP^l4kJrk(rDFxMD-NKy*Vf$w| zPkDgTya0HC7{be-Me46lAo!qE&#@QWKAH(mN4>VUH-r3B`oN!er$GKGeE>Qo z<@Hpg`It~p#s!ZTNPzqUalKFSE3k_LU0dIlnz$Oig}WBgW`eB50=e2A5-gw~wapR5G zs}b&d5eypqg`K8$z=QLUN9%zKUXNY>A;8{4@sLNaix4BqiIAZE0G&TUaR47;Z+rvV zkBwY(pD;WCIx*z9D|krixa(ff@(T~hDb=7UKn)Mn5w|jS1_qDDBOqfuI!_>#K^~p8 z9WShRg96yM1GEsN*HOZw6THC5<2xgGeJ{61H$tp=FKF!(1AogoHqfFXh{EozpbNx2 zj<Rpm1Dy%N&Ys_UgG8#2F*V>%cc0YF*iTB-~7VSMv}h`)KrD{?>)M=g6skvXV`iF z#k>=*{`(}q0QLR)%KrcV@7JrM4Uq!%EB}Wn_;h{(9}(`@c^q^UXIKQNsJ;QZ$GP(p zxFze-`QPzBSh(dQGw9~j8fdV1bk}z51RZ7yItZfkp5uPd*1i|Ij-ct!PtfzPR{IHkV&9}D7(Qa z!M9h3#Y6LucW;d?gHPwX7s+lQpTGC$E#2kQ`Rhf98>p-1+u_*lCgRy^BjeE-310H} zgOR^~9+DL{ko`v;FU7%Qkfj~q;Jp9hi8ttm3)lb0TR|hMkb!yE2Jrk0aLiFyfAblR4_d5i9IzPQgJoXCIZ|}1NSG?fUKv+O?z@U>lY?uwd zfsWO*wSMyd^&-%EozA}=-Eh~dc|ZBzycg_p{ua<0R*&A=T}Y{=c`qm#vGBLlfQGGp z*nz^T7m_({_;juX1vun#43EyapnXMoN*5#ZvZ#qMI_W< z8Bj+8W*x}j?yVqS_;h}PXPp+%%zZN?%3gxT;3j~NC$0mJ9Jw}lS{~u=E&K;+?i_i| z4{ncx;)B0s9s}sS3KM0p3+}&oegw2;?tjT6kM7V0&)ympMjy>b9*p-5zr8qP`Q-mg zJ<#YL0hjcG2d}_+>E-TU@cQz2E6B~D6F*;C{rUg@MU5>e*+Mex@fUeZ|Nnmpav;1s z0Ug;6Nu!|+;B5O6vzls8>l;BtN)IcM@#q+k=e5ZbPZ6Q2xBP^sOcuV2$X0_#6am2V&jXhwV
(1vo%T1a*CGW;iqQ7Pe>`~_T(fda#W@!pH*7oZh6z8xN& zpo%9_;pP0_|Nn!F))xX#p;EoI6F>z^=eZYe7lKNh+y$`G?JfB9ao-MK&=zdX$J4!7+VHV zAI;Kr2Y-tQxWsw>!eu+Ce6QUBs@5T9`G8Lu^Opc^6Ze}z@4qtkbVPp9h! z{@zERGl(XjwH+Kl12D~?^@hktsPM}(cy|8vY(6T%-p7ryo=@jvPs_Xf%{?IDWH%9TE&mR*KBn^~ zsGxjuEn+7!z4gO5NLi9WF{!_X&&;id{wj+e0&c`>x=bA{(z4V{s=DO zz{lwG90U~&yruoGCxFY37uwrE!*;G4Ji2{XfX)YS@IOGpquX}_Xe1O=<*x;`TDn1ddO#Bwwv;}M{e=BG|vS;T#U(I76E9<1di(|fl76a@BwFkOgH-PK_l`G(#rJ&LV zJniYa;l-K5f4~NTE-7o71#(5N>kjbZuWr{JFYQ2ckYIm0HvHq_Z;gZuy@Ji=A& zw|si5|NC10EfVzAeE;$!s8a)*-vJ-@yvnEZ_v@>^n#W(R{rms_ix>8w={`t*7u5d% z_19k%fBye}7ijr(EV!u+=>zh+9Kvxv+Y4u8^{_r8zbm?WklBvl$@_DTSchPu=YmQw z{#MW;Do_#l`V%~+!0S?4-|~acBLLl)(hRC+z+;W5vq}6db3q}GI->+iH!pbSzWVRm z`5biiRH^3csxi)FwY${vCz;=aFFwI7u7 ze|vU+O`zXq)#D0&Go{q+KP{RIk=iuIuW*h_uTfhXN{94~IH{QuvhoAu&6X$H^kFby917YOW8%|U3~nU;Vysv9=)4u}(Rsl!1~eD| z8XkkBH;{i;tONPybuXygG5q#or{Rr~X$CYq1RY0`c;Sr2)%-1>6OvzO zAiErGmydrhXuA$5#z8B0JAZ-tn%=&ae~R5+2yO<|93R1>m-j*2e8AZjw3yKywB#N% z&)Qvj!ngH6y_ZMpfqGZ))EC-_@q`!BpmuNTfx3sDnn$th53&dC4?2ZNAD)^=eOnLI zUG>!jZ7u?BEP7@21-NpN_Sl@Oh~M8t*my_F|^NlmD-GpodRLFsPf|2|v&S z5{(`&q-VVX-5l5qIuC;fG-~&2CMbiI@VRtC&q@K8M;@K`T@9bSsD1zce>6D5JMvFC z;sQEQ0u)!Ea|`ajU;w-0^%|_{DFo7|ft~^bDwUCXHzJ_XieL35i7$F)f?7qOJ`FQy zD#Ze{B~lq_J%l)TZly%PquUuWGy(M|=nxq2Pz8+NdH=WGcfhwGAhKUH(dgn+5}KW ze0;joA^Z42ZHzgf>J@z40BDMH-Y(EE;}HR$&gUS0 z^It~(DXs@V(d^lIgugWf)XC{Q4(-OW%>czYf2$uz6f)Gp-vX+tLA&BTKywBVPO*Ro z<3A73=8PYpJyHAEJvu={sE<7NK}JRX*Mqh$_r^2YDD$^$V*u^n=m)K9vXSO**#y$j z-@?ei;L_{x6MQm`W5W-&vecFX{GHv53=9pm2N?KU8bOnwrNQRk&{WAEW?U1MJf6x?vya+DTi`t~LI4km-)iFBpB35BPwNQFUMd zuR#Le*U$rMD0wn|2Os6-54upa^FIGRb`OZFTS2EpfTb3J23oh3GdeW+6wBU`LFo_GiXCf4``vfC*yI@(Vmd<3$*@-vcezHo@%x zh`CDqEsy{G|KI#V0o+1w{t?IDcIn^$|KKqa@bE2I-OGKTwg$Ky0IjF+>HKH-|HYv{ zpmxYHxR*c`vS;T_&*p;?kR{Hbu{+P+I0@fg5kvU0blHzD|_}j zGrp{Zw^!3#JDH*Gd>Ia&T!Z8XNB(V&j5aF#Qx4fU@J~6&ajKNvr}LIgbtwnfXT8CU z$C#9TdZQRUJ8!-O&0s>qV@FI8=y1owOrD)L(;PdU|Gi`c*)?HDObMF!OHf*c?{D4_ zlZGY_x|C&KOd_&q@xPawLDK;{W6B`HX|A2#|3EGP?cUoTlLQfkSY7?^Wg8^!KFt9w zbO=4*)9HKS1@o5w|9!ear+WIHc&Q9Jqp1TN0G+>IhX4Eje`ic8vLW98UOIvX5<0Je zJM-s#I%8*a`Y!S51g-t@UGd^7cyU7LhHl>_%`X^zx?^Xw9_V!4!QWR8YHD;|18vIk z>3rn)KLoUtF?0j?#+x0DKS9NxPcIL1eIRH)29`>FcX;%QzU=2@c=7fFD24j&@aYcS z04gwiIzz$d8i1M+f_k96AGdwFeGh;VFevqI+0D)1$$0qXR8XU(8V7W=na~M2xQD@`^K!SB2zV+7w4vd}CD810C$#(eqGdT~ZQTPI+iU`N{AkqA`_p@jrAwsYf@fE<}DO zXb>Ht#2%ys(e?$EcTn^GPR7CkWT_#iV7HUodl4e(f00;qAy-(n1EXLVNy zfI6Dpt}A>Q|A5ZDfwajXt#SUA_n^a(e)WQO5gqsFb=~99>AJwj@^O*k>p(>R;}~ey z^U`Ba{(B_5?tvWPTWsXf9l8L#Q3%`tWZ&@WKWO8(3j-r)4ex1CmYw{BjRB#f=$uEd z>k3dk3mW+Yxrg8Ns|V^l7o@`YDwZ408 z)mLyZyhvL2|Nl$D|Dcg!(0EFB=?c&lx}EP{SZ)9}WIzKDwHQHX^1;sA+iwrr2=-Fq5a{YlhVbx8uv;=oDTFy3~rl6>@lRwgTwxUH+Dppw7ja1dmSUvpb*hTh``@ja;A1uf2$cxef0OM%Nf@V>#mVPG<0?0(f{7OZaxafdmUINRmKjUw6I%t*lCb zPN}|O0?ip9oiW4T0%|!ooN@5zWPW)W?mo~si)ZpRL*$*k6Xe0mn7k*0`_(62B&-7E z+0qj)KZ2_=BtuKsAO?bFf9`_XI=!~i+Mq*AUaYY}siEQd7rJ_(TO73e84~ypK_PkY zm6%U=GGwnf+uQUUAx0y$`#f!Rq??4A1f{#eL_rd`@g@rcI zR`;T^15~<;FqZm)%FXBwP;0)_(W6@!k{2&FJ_42RkOn*C_*LlMP4Inppb7wb7%J#2 zRsjakb~MmhM#u&p@X>;x`@10HK?N_kJ3yPJ9Ynx~q(RQ30gab+9)DR3Di4wOvGV`_ z|Nq-D1^yN`P%+!h8qp)ofY>w!^549@VE?@YE!2VZe~`93f<`hXfHM7wS>W^pDmIbM zqXQk11>Qs${33iWXcr;q3|P>iX2p1lRsZv~wV0qR+TcLq3u=MKGkYYZe_bRLFmk30w~6CLiuEp4D^s1WgBt`_iUJ}&XX8DdHc=+GUH-o2nRZ9F>fy;#!* zO4H1s!jQoSx|RddLI5u-1si#y4Q!+#*htWc${|J)pu5LeLDl>3-S7T`X4o7&I*)sH z9)H0-4KyEAy8vXke;cSz1KM|e|3&a}(C8;r|zCI$w_W3CJgueH)9v|cJrfdm$4Whl6?0?nVh zbp8a-VZMLieH3KKaqxxc+d*;A`TxcBiJ(QNuE+;#u zE?>)h4*nL^$zHdB}q?K;R|l z>=;n}07|L?)4}-`IyeMre|YrT-tGmJw_CyHyyv@F4+b1LYpm=~v-LG#4-J6pjH+SC01za^OI(G8aO=?1IjZ+!z=r_fvv zY8fo}`~SaZBR}XM$(K{WjWGsrY6M@t8`by!|4TN|yx0X5#QIgp_$&BM22g`u!lPRr zG|B^7nhz?eJO6lge)sIW0a=P(;_28>3$h5*1c4P}7eOoE_*+2x!92QIdD=mp+h76E zIg6l@ROJZBqsKhE#e6$IG@Rq`>=b)l3*P4rJyTYizXf#I5~%OodC{la^mLmvL-Pan z#)k|X3=AHeCrTwfyY0Zm1Sn^Vf|@R%b1n~ib{_EPyx{Tu!nY#{{NN*$JiG0_9b+lw z1RbknSNw)pa5DxE#TW(%HZ2+?%Qdi0;-5n)~MZok#Xzo z|JDPgDW09N;D#2sghWyUPEXyel5HR_7fXQhKLaTFg8c1s5EOf$!*@M9kGeZ^*Av|yB8H&j6~PiV;57rnAaQW(1C$Rqro8&!dGMthD7kjt zhnw+nGQy0`1-}qaPfGP{DjS0}bFkZbO z3KHN}1gL*vu?<|yf(nt&qoB;V{{O!(rw%ykAguz>931FSv9t-`%^~3Z^qu#<9pT__0d1)QO}=<` zf{t(MEry>)%>pWxz?-8$YpZ=bOH{y{j$2oOVx#pNe+zhBRW}>bWDX~&HNeE+(aGl7 zS)!r~^@#Em5;OcQBA|s+`SqYm(LvIBe+gRK2(2f;4)JU}3%UpuIjmYiw@-jB zWodl+|GWKz7b25hfx`@Rks*HzXlw-J`noBv{=eJ`aU8Tfgq`^;&EKN)587T*22F^9 z&fNvKZ(dYv0mt7D&j^9iS44}?|fM++4iU(LN zXkR_(?g0s;$%&aB-+zNH?CjBEVqoy-JmtZ^{vM=P1ug$T{n9c~Sacr+MR!9js8%iz z@#tp#+bGT80=jAamf<&0v0%CvR2&}n==G5Bfb_shUBO32%mKN$^>%5vN3V^fXJZh$tfcpiLV@5y+>^WqQC2uC4!J<~0Z=HLHod0)GO)(bMe^|d@&uLJ7aeD>i^5R;4}uBcYFTgMIShQf|CCPk6zo|t)TSjd*a1~IZ%IigB63_2kyhYxF-1I z|4V;RdD_i-sUAGwXx<20vhY$6eAojd{rdD~OZxN{GlH533OhjUG>>l9^B^tV7A2NG zov*--d?C6Kbg~Dyf!j3))R6rITJLrIMXn%d%sXBHnlR#Kzxx03(cl075#5*G?k ztX~5!Zi-Lp***VnFTYUfU^Cz=`0% zi_^2fiQvFX=l`JbVNb?0o{ZN$8vlWI<(CwKinquf$fo>~WRJ$$1E9Vxe=F!X7hlV# z#cCeli8}DHorbeOwZjEZ&FkQuj-W%WJsGe1T0Skh1@bev6FR}8n{{I?Xe{}j2RMC$ zcA!9OyO#++Kq=#ukLDvE#$O=QPozzN90Az;p3$@UD5GNsyQk&#($`?)&VY(}aC?@c z2i%^$3eG>B_h0GYYWNnkEa>HbggQ`? z_2~8%0NsT41~k%=3_ele060i1K`YS^WiO~b2d|&N>yaR5xqx#HJAWVOu11W50_>nY zFj)WYGN_YlRt_3M5nwC3j`afBF2y zgidfe1I?1c+ru8cw$Tk73@=Ki|Njpg1S}DRm;x&44R6161P@Pxy#;RhAPs+{O$hbu z{DHE6rTI++=qwM9?sx%@&d>=clN5-fggroQffjl2*e-bWOR0xPukFQp&;+ULiWkqO zf$O6c9>-llqxcM--4Ozwkb0ZH6||GWw>LrJwIrxN(|Vh~(!gdX4crbK>594Fd(oWDRqCUL|3LciX_?wl$>RmS+ zcU=N%IDvK(b-IGi(rEzM(|I41qdhdQd-AXU>(Lu7;?aCu$D=cJ#f!{sU^7>M*7t)4 z%6cm#JUfs1^d<;+bPD+PvWR>2cga0Aw=g7#EMuTb`W<{|8jG9^mg-4=V7I zFEF|;@$3xa0Igi{u)I~&q%l%H*Coh^8 zfeKo*!QjdlIYqBP*Drw?Y{s2 zzqvkRfviR3cRdW+hlkku3u@sBKnF!3?J1Am&?i2f4?RFj*6zQk+w=eb>;2Gl@j{^$ zT;71TxxBa{{Nz7mZBteK|Nn?G8(v<6HX&Z##jt>Z0f&DVFfhEZtA+b_@lRR_vfCMUAxWtR=(x*d=#>X0UZ5Z;NkR3?rrnUB03B?312q_m zK_{w$gJA;59BGekXNlL_!2NZPUR&;J4u%&hlRyd4fdL$luMZ%VxA0&;2pS!M1bf-u z|Nmc4f`!|QW^lNHk}D+0-0S}Te=$i2<$Psm{dQ#+g98HtXb4FGIgQ)^rI9NjsTW)| z;M%Lx^~#I*1*jw8;4ysumH<%m(YXK|XrKXejRHuZfsQnD>CV04`28pYg98J9>vhm6 z-JruS1Q<%fJbFv7fO|K$UVQ%vwgOZ^uG#bdf4A!uRnS=2F3=iY(8_kuDd3=+PEtIy zA!Ff?u?5ie@`$5LA?rdRa}=n{uS=(Z2h9(H8lBK%NcdYoSHps(n}g!4<0I>Cy)dE#LTCKsQbMbUu0s+LQyWH(w-A zc?GJ6`CCAHIGd|MXF7qZ9?&kAg=?Yd4-)5-V5i>Ljd)a`rX zC1^JdC|zI+7yj1t|NsBL1no>lnBUE!^71UAf8^0?TV27y@M20oa{Ufk+66sN<@QU^ zyo%v%u)|(vf!xtu&GF(&_5c4b971d*a}ek)7gcHjsZ-6iIDX7ium;Rcp`b}k9#}9!)WPmK|QJIPp=)C z{!)9Xm;Qd2g4RFul9v8LD*yj~F`pNA`a`KNP|7}N{RpZr_{u@v5bkt+;sI@hK#M%k zc}On;vcX9XR5zMtLy{b5TMB5n7do+15&=5uG6Gb-gEu0B`n}+~BE#_ii;oxo|A$u@ z_rZ5Nx!!nDy%l67=vJuE7l?{84pi2GYYb?4r_y0aQ(c_C9sqe=+gP|NpO7!1VXpE-nGB|Ly+&|Mm74r980eRk{LYff78wf~H4< zK_`=3e{o_SBSRTQqCLoZhU`~M$wssiW;E&J(=3`nhe%={kg(RmqM;dnH^K?!rD z`es%sC;)^zU9X^pc_pZtxswSE^P?{gWJ`WDM$(CN3Ne(n-3`!x4a1}&emJj&m42~^oO*Mce{&@mX$0O1F3 z0)tdW55etF(1_2A)brr9cm;g*;C&C!gv*f^A2$8}|MDETE&weBdNH9IoUTBp=OgM1 zM192HQV%-u2kdxIon#BD3wmv(nxSPvU?(VCd{2Nkj==l_>Yu;d3$_E?p9M|cqMgOZ z-wK-heAx~e|LA6ZSqoMUZ9js>KdQj(aZo)88t*$@$ieX9Ne5DSVT@8=fzHl_yWgYN zc6K4ifu$#2Z0G?hQrF9~ai6=8u93a`MNodQkH7J@LX2yqtjs z`Qt`8O8!`#$HDO8NGs9#qdE`dz|s>hCbWVg4p;toRQUh@3tcuM@<+!E9Qot_1l;)p zT3;t%<_&0loxs5GA}$}~LM-()X#DoYg5+1QzHDnUByWI^W$!MA_v->c^(d&$P6u_& zg1~ikiQ)ejuBX7|Bc!VeDjz*MU2nWN58j-PURReQ)zu6jvmpJub>McrN3X4RE(gO4 zmljC>&ZC=kVmfSm_=Vr2|Nmca1l5~J_4ds-|Nnyq;UMK>=lvHPW#DuMDVb_iI9{X| z{Qv)A6AMcJ4yinnn2r?Q$n|x9KhE%mtw(+_yWs18k8aU7X`sn+D-X*br97ZHf6&Q7 zpnKdv9d{7><>ZGT4>5##K*sYzK~sC61<{v5_a1=ux}LHKj-~9aZ4sxD?9j58katUS8U_Z2Uibf?bvo^W z;L%CBZ-*I6EI`x3o%hh1bpII`7z|JD0-t9BUce37{pc7Qi?rX}quWcs6?Al5=mn47 z(i5POw@%*+FW%n$^&gb;D?oR5m56$DgHl@Q3GnI-kXOK0b|EJ_{?*c#Zi%-DIhF`3(V`X@; zm;tnj9==}$lpX&Bzc`!o6=|*!H20G|1vZxo8oJTF1ZwS|uXWS{CCEd?pcy$9{A(S- z@taWyitpE_K;;;s{}B9Q!X!qd^_rmizngVR5~y6Uc=2R1vNM)l#O4fRkTa}_aRy?1 z5EN-Q3c&6G-!BPr52%>oU|=ZW_UQb9xQFte;U&ZWFLSP;bbr9>Z#|mpI2cN~JwR(o zK7tmyaDfg%gSJ1r#lIbMD0%n&5CaDXL+LXQ>vDzC2P;9tSEV-_p6w6y=oI(pc2n@^ zbXNcy@D#lGQI&xKbY<}ck4|>bF%E3G|Nna&cLa~_qa5%BwjZ27!XT>`K$|$Of+F(^ z>i%l*at1-ja)uJE7h7YXOBp)vzqpz8^?$TW=SQE;SDl_#C=mjRKX7<}+5^AQ zyOA#p4>Uh#FVXVo25kl42d_`}=ynBlq+tVxplJ|z1)VklG>_B@S}*O<%>s%P27YdE zJ?+!2>KP5Hmt!AzHruE$@V9`^YxwKM&H$>rK&Q5rWn?y%359&tV|D4RY;BwFJz4FaO!T`wuBcK_xKgxH5T<=3mk!nxK6L z3jD2MpcT=etH;Iv|Njr(_rTu@I+YM~ofIT}g1e}od!%1}f%KnxYwx`HKAoKbG8H$$ z1H?Z*lbzwE9cb(kJiiPYKkGaWzW?||%%8`|Q3Otp;M-wYJzD>lavB~0Wd-m$7IDJ^ zNQbwEdvsoGe8`Z%;Na2t6Ld6OscR^xKM!7u2U-UQ-&Yr}08YEYofkk05=+!NkH7dH z37T1V5b@d0%owe}&&?@6jy)*%rZC`W)2W0htF%f1sQJI-(V{ zf{xXr^){%!yuXi;7gX^WUV8ELB^#*80@{`Z-jOvGT)czBi5YSpIcw=TcsmLy51^a> zLOT8He^?_6w6{z928R2Q;^XBWutg3G;KLVS#}b#kXn4i}I{*B~VW|24JRsq(;n6F5 zK3hvj86q2PGsG|Oy65Mf zy*{iGyFg3OL3bKF?FJQ3M=+K!MtF1w3m`3F1ntH_UX}-5ROks>lLuYGh`MDAbnyb_ zBqXRF1g~rC2Q?L->l!D6*xk^xnL#&;!-fnI>l#7lb0gL@g3bp3wJuv6L0$#bMX(J! zC0N!qs$6*c|8;rV1W1j*-x2~EJewZ|$yYByYmZ^&3SvED?*IRgiwHpraFRhILY-LF zGlFjGLR-%WSquwq_uyR52)aoMX+5J$Ch~el&=N*aJ+m(R)&G|(Km`?Sd>j96>gC4!C%d$B^dst3@E?fciLRN+T|3BenA$W-iq`g*=0jfX2 zOVB{$Pu}t1{&L5QgfdWXw6x=;Ip}&=q3@6XgTf8E29yEp5=8q9cE>VwNjK!A((WJ; zN6SzF{+6c<3=FP@-lIo=HLuFT&>&7k#s zsH?R=^$WNi@(-l?#lI5JCFW4&PhOt~jbDH8NIvDE`NLzT$M>He&A%8uns5B~>^$~* z6Qo}5{OQqa>Lvy{ulJ%yvPho?<0rfSj~pB7e=_iQfNsljY^eXm;Mwc`i@yW3#LKav z{x^vGo4*4zAqqaP*R$9C4}XU$!6P@$CE$Th;mn)RWQh=nOq^9MlbA=nfLG3=rUN z$pkMoISY-;mRit=spaz`xtGqM<4WWiJZ3mH`Z9o4V1WY2lkvE(V z6zlcZJ-S^_I39Op057adb`bGl{NZVN#FO9c2v}n$NMq4)$8J{!&@pJB^aDAI8Feo! z18B?si}E0lnf%}_f}qQ5|AU4;e|qeOCaDI{G8bRV=ltOFtsv!wBmX}3<{$Ot{@{h6 zzdS9^7fHSZt?z{OpPLVHc!1Is_+0AF8y?C`kaTt6;16bx86LehOyF}~ctC|&=MNvv zAD*56JsFQ7dWsFCD*p!GmqsAG311Ng>!&_)0S2FK1&29Q@l4r>AxUEl?G zkRTCY0Pke+=){qjz&D$L(-Y`?kzJrLe7zpb2OV(LYsw}9N?#W|l3Ch37(dwkf8f|q zqXJ4`pv^ZRHYkPFsQlvZ0NtYp5&)&K8kOJt9iUDdNZ=0xsOb5_-vPQu4Obf>GX9o@ zptK1(-V7uTX;GIXfX3^=vmMN!*^cgN0pHGN;1LP$UK5*6*CU+=OKU(&jeC8MfNGJu zfBygP4m|?es|M~TcZY&DQ9;Im_*+5yy+LIJVgb%!(6owg=QFSspi94fKvuLqDV^=n zYkMJ!gW&~tA*fJge%%F0haTO|0?~04 zkOzFHe6qw#(4IL^c!B%?x*i);{=DG+h|-`2mmi?D!B1Zpf~I3Sk9&ZMXV5Y)2M@*{ z75pB(F7}L|z7wSV6#KI4)l)3%UtSnDGcthBX<7wp$HUJf0hs84rWj#rar1E|zgMJP8_- z>AVS^u)GIKKYxY)g2rR&Z@9Mn=WjU=uA^Rf9DHHN-wJ9EdH1^LGNPY#2g%3Xrj|A` z43MpUpj{%Zpi^N$0|;7Spfy0O(l#;-pu;Xf>q~6@|Njp@-Y9JX$S|MI_ed!v3e+5d zho^6Es)SGHW6&{eDZbsg0-%K23R)5A(Q9jv!NKq%JMaJhm%N}j0J{Uzyeg4rNbv{q zWJK_v|IkS>22jPWkpND2pj{N8_QdZn(EN8EXuKX0%q9GwAU3=WvLCwo0_3chprbWi zTmF}Dfje0*K^J?2jQ<(*=l|L!NkDe2{|;BzXi12#kad0aur$|NT%Cez_;_O590^l?r;Inkq*$7 zE`JMXoDMuU-s!pm+{l0mfK+Ypu?*e7-~R`chCu7Mxj_|0bL|EO-_GYHnLeGDeKa4x zwwmDETf)lV(e1kcR4{_qC4YKRk^ARA_`J*WAU&Ojd^BHqXkG^O^!wI=s$a${psn-Z z<&B`drZ++573d6$5A%Ni_XHoKSh)h8K2ggP15hsnyvh*md{f`vatYtgub`9$J|D^x z4b&)f-SEOY2UJkFZU8qTK<%9y9?b_pmnN^^Zv`DO}CfSyO7~u$oMFDFJkC~7c*i(3lT#nK#Flt zx!WB&15^a-gTe!R3h94W!~ZW1fR$*#KfLnB-9iUaWFP8oUZMl8o0lptG zw1dB6HYn?9KJu`pU(F_ zouM;cOh^KU^Ng3EeV;y^mmr1BOVBkWKHaGcd^O*^I)layI{$&k#6Z0y56DSquB~rN+&o$j zR0Jb#l8OMyzX$_Q*;x95I_sb*n-b7|lU<;8=!+iEJx85KK;2yE#Y49i{01#a{{S5o zgpTLz2hCT!n74+N;q@a>d_mWbLB>L)OJ;mK!cjWeqnq`L56BXW*Ylv^2P$6-zr9Qa zpH}3;0Po*G+a??@Uc0{eZ}_eCK#3@5%pE*+6tNRj7enedPzepX#uPL(?Jy1XR3n3( z|KazyfY-PFhL65*fb=o2y!nqhPWBRfT~=us$hCJtb+Z8E*aDAEX2=}H1n{6)$xF~M z9q1eda2Uh(#|uCjMkU%W(%fJD@AeP@51-yQy!2ujcn%(RE)vu*aJ~e&BO?k_e!o8X zVto+GSPdu~LE!^R1Mu(w-2?>EWIPX4En$pz!PGm#$A6*82HZhJxe4b6q^SoQWdjYc zfo_+TfOY@Zf_5b=aDxsCcQgBRXM?M*jy_P1gUjico!?(liC4wNA ztz<&l|AZLZEO`tLT>e%)km4g8rI$emXvRYVv<5uh{0MreMmeO-1`m6bNf7>4&?b71 z<|78sN*C1F0k1bvhy;b>OBYCG3P~TJig&w5=Y3zsr!NYcKsOBh^I?1sI&{;+@_4q5986Y*2eHovE4wLju{svC?K8){P81#VV7_t>SI-Mn6Uxlo^^nRuxmGX zbb`*`dU4zpl(9<>fP8;C4O9|-D>d`z2HgiO0Xjn#DG=CD?-F}q6AD^Nm<_rj3%Y;r z6L^!{^B0o>{{Mfy>jn4o$NyhU3jkFDtm&TMwcWCgu(jQFw_k%!&h>|g8$9P?@aVQM zJn$mz_G@T4080=!_o+jQs1-%?=wV6#>~*^9qz~nITqz+RfeY z@zMvcUm~rK0iSW<)0?{ilykwGJZg79Cbu@A^j8cIyyyUzx1}3ERr-tD37{6~Vem!( z$PNzB<&*s2^Q1hw9Y8fFXp#R0(AG?!?g9aiPTv{OeGMfXPz5u(okcob*C4is`e=Ue zv3$Va13FFIqnnlALz%bOC6Sp;I%cZF}6O*8#TWlfM;oM+o>nL{nI^ z1a#jUsM2o*?fdcQu3g~6c)YoG4I}tEV@Pwxb%Rg00@(fC4B%B*1`J45cL_hJ3ReJ~ zL<%0`0WGS3am)#H9?}2KV=sInK(lV_kgVgw`M|T2-2-}pw@+v80f@1n)5%dbLx2vP zfQ&<;Hd7ox_c(!r41Cxo=zj2S2MKV~7g~OMHvR$4@cQt(JOCdk1-g6GyVnMEkqPKl z=of2VJO-U7KH;SRc%T_{x6%Zk&f}o#U?;u+4R9TJ`4-Yhf#g?@Eu7 z3{J1DwhyRz60lpwN5n*m?ZL-H=!RT{?ep9;z^Nv^-vFh?WFi)W|~`=%8c6pv8}4 zeC$g%(8e%GdER`4V+Ux1KSCDyfIsm31E@SlJ`1|}IlD(^>5WqGyZ|4l5J~$B%fG1g z6RZdYo#O(kqb_?`#@^s>0pHu#TYKY09cX6-cm*P?;@t=>bV2tjf^;kdPw;^H^FH0F zH$b&CNT7umRIEeJSZHMgvAdZ;Yv2Sx8?zMf6koNVf~nIRbYSp{i;1AD?JR-fWd4?0 z3=9mQ>8A$%76b5@6}TS(Ud#aPP(qhGg2oR(p6?6=C1G3>$IVA1AgdA_V`C4eLF!}v zR?u1EpgI{=74w4(DsTXw+i}w#G$vFn@#2BfyZ<0xdmMKLZ4ZXus0a&%R+RIwKvDd{ zck}=MFF_a0z}kCO9i-1$J%6TeOx1^Z+N%Zse1*O1K~g z41i9}@@xj5xB=>fd4fmuSQuVj2aj7rPM<1e1#Rh@4>UZ6%0yu5|<*1v)( z`zxSjx6N-9e7a4i>B=x5mzFmS4|KCe>dG**9w>?R=}bM){F|{nr}cKJgGaY5NE~!G zbFc4#-eATTLFYkJQpZs0-cmo%R3qrnMaLLOi&F>OHFRKrc+B<0>ur#F(xcbb@je&B z3!8%<{~u?4q$2}59GBsBH@I>&{MLE@g^?U9!wcO9D5D#Q@*mvZ>8*X?0Xli2v-HJ_ z#o)^_N?#aW0v+0T|3&df==uKOs>GxD$A9oRhzHt{{ouR?n)?M!83}lFg0CEW@gfvt zTIX?(PS+PNJSRhYrX_Wbpq8%d3-pr)OCn!Pv3>R55mMHbNPAcwE|mezcER`Mz}JU@ z?%OMQ;?eEF;Q`w1)@y3r3M!abzu1E+Q&8P}>N0Zq1gaA=0zmDS*RwskSz8@J%0gdw z^qMx^ht;_=E`#b;NcjjY&n_Yj(R_7;pIzSgCWDcIp>r?j6ddGu2Vd#Mr>H08zbQM|pI% zc0hO_*LrlePWbo#|7#0Kx-z`v+WOzK^QKQXL{WDyNY{cZQch>59MQ8fZAI^@(ri8~)ZJ z(9K<-uFrpuUa-@BEx+FT~?}LE-dT*2VG_e@i{+gsTn~ z70>1)jGzE>?7Zr0`Mo%!0UTruC0w98$U85zT&ld_(LEKU5wyCz^P5lS{};DoK?ogZOVBlo$Y*a&1$pWiiwXnuf;i}zqTPWKpn-Nx(AqetkfozQNf!7R3vh702#$sa zt*7P@pUy-9kIoaI*#Y>9KmJzm$=QuZKzRhIdIs0qo}FhQ_sukdlb-E1XVCrcQJ^vw zTwg)<)vccZ4rDjb?P%ak1`hw%(unZ~#|{y2u!7XJfR2@OXT+ zwI1N_2XA17gzn1)kR}wk-w#i02fg7T;?a5dWhtnQGQp!4IVf8}6R94(wkMoGqfKBd zU)+j>YxC)R@NzPE?ur3c7(50I-9S@wg9Y57;B&E9R2V?(?fM)*K?pe)>-me-=RnOg zu+cBo!DfNOv%42mI<%hT@2md%|G#VJ3#W!Xtl$9QZ_WJs|NqMvaK*y#!rS}R|IS0; zyWc_mVUO-!P{HNVJrz_qxOBev=-mp^22Fu4*0}!v4^4WYF`YP&QP;rMLds916!Xyw z?)=W04+`w@aT4ucx?$z=b#H5wZVxQEpG^cZW?Gj0!N$SJchFtq;X@4E{s+ablatKk!mAbcgUcNcXyLr`BPanv3+LxAxI$n32bKD7eY(Ll zfk$^Q$P`dn-+2%;{Mx-0T*7sO3qepmdr_YL|G%f@-O@!qozHzbmrelJKEGdFNCjQ7 z?ATl{!sydI7bIFL0xHs0n1Zfs0tA*^qKMiy6cz7VzzSa~xdv zfGSU4#%DH+k|#mOS_&{U9%Nt;U;yR(X7ChPC)h|wP;ck8W9J#4&bb+&noJMm@6JmN zdqhDAmw~?(bRU4H<=qk%#|~EpkOw@P4>S5$e&%lm9ViGIq37h^CJZi*Pk6v8Ja7RI z9)kV$!aW?6lBYs4#$Hf}cOL9K(D)P7pX6@??St~@En#2;O`x`d23A4mkF;2Un)#jA zA@#$HC12nDhm^{om8|?NpmS9~ZW8ioJm~{E=7ky37yxB>MezCaH(tttiw_5ePH;Kn z(K!{=KJe%SCzTi5zkp6q0JA;1Au`QBSRh4Gi7M!b0xb`C$aH-{4w(`GNIL{_83^da zLr7u(4VFR!=H*wU@&;C_mEL%{7IfYULiI~A5Z|{qSi-mSs&DHh{uWT8@$Cksuq)tc zBJip9y|$cwp#JY%P@?Yu=YSXHA>i-@iSTa&3%vxDnV@v#*&PkJzk(f9H+R19)Vu)- zGVs;GAbH3DUrB)vBymDZ@@+=1{&$0mJ7~rLm*=hwkn%hPQJ%klar*?QLk~{b5FIZ~ zA(aobeC@TZwgK(`4gUZCddp64{)1YQAZuTky#Xy$tplCuz8jo5zrXk#`2Rn+ zB3K0~H@aIv>O7h&KuS)4CdsnWO z+j;zjAxNV0u&3qm5;2c%umX?ny&&hj5Q9j;xaA1bb=ObzPM)s8nI~p z|G$*2doRdl$HqU9LL79yphxpwu-W|J^L$-8AA#rkJ-Wf79=#<(psRUbMBRP&|Md)5 zdjeZk-vV0x+IR$%&XB5lNVx{N6A^su?~8)(|Np-}464|FgRX(fXFbo$&EV6Udcddi z2h4naP0$db0>7pMXoR%%1Csxto`;wV_4i-n|NlD=HUIk0-vSzQZ2SfCUAfTl7H~j< z0`T=!NIM1U*OEMB|A8;`dr@)c-T&9?Am)NXq4Qqn90gC~5pmA7!)g4l4?6N|x_|Js{8M_}qZ^!U96Jxd#(9e&InV`~pSVD?wVmHzB>8~~ zneU+8x3h?A>)X!O6QIjxThkaB7(k~?lt{xQDMwJ}%LBA#6kDfflW7HDB<_)hF0O9Cv`)IiUFx{#NioJe|j1lxu^`XLOZ3;Mn*8bOf4XBlz66 zm!aU=X72>BY2SQ0=YmQ=7f2F(u}~Y-u5DcayKmMbxfc{SKD|1O9-XZZ!1uns_vq~1 z@$3Kp7cF_9u}X;kZg3oVb{+&rO%dq4+}>6nupMhbE&-OEbJbZC;0o#!Bxmskdr(*Z@F}S2agx@f(&$RJz1je(G8XZUt9V71?Snv z|631qgYDyY0b2sGs&OyKZ{Rd2>Dc%WlnTL-#qR|6G{oy3-L0T7^09p3(Rs*|-|4Dn zuZg%v=La9n7vTMNPKSIL_kvvFsrl8D5mdQ=;tX^%bTep$lTY_vP<`dmJrxw3pz~+C zw}KS-bpCvC!5cIba?Ho_cS(dt=e^G3FYJ6kC+&J9gJZ{&@rYyNKTrY3-v+vy1Cj9{ z`$xdZ3lVo7mWTPLLTYAEK!9(2N}JH#3yNrucry7z*^ z9CRu51@H(fN}_t_(+N%|FXHn-i3*&WJUYSA2jf8xXaWcI%fO!S>^%FzCkx~!usRn=PV|7(8{o2o0~8RQ z$30-h$5v3*@C22pYrzSq^ED(rg0i&-yaWMR>eD$Flu2HyfTwUA7+gAEbWZ^n8{o>^ z7u<&V)_J{iD#-sYOg%wM2iAhv$HB!q$V7fM(Y+Ovk3BUHc=fU{ zf)3&B2OYxeYx$?d-=h;;cz{ng|L4;A-tm8!LHATptV4^H)=MQ?9-XJa>&l9R+!i6Cf^ zu;vYD+2Nu2*^}|S2jgK6NO=b?H^60PcP~b{0Sdquv)w_32B@3?$%B`jfu_ZLI={Je zzJKx89kk=(gk$4hY~{vGMh1rNt)K)28f(AFz`)Qw6`Y(vom-#I?`Y|}Ko!)Qd~s6+ zG`s;$Auf<){_;I2`E~CFl_ai)Z=rd{5h>4<$@+ADhvgFuh&dBgKyeDrC!XDP5-`~= z_ILlG=AvXD&}m-qNX`=gZDVBc0S*4UNxTp<`47D%-Npo*X}}2plxe<$7XpFS*@BBl zQ20O#MNnkEJO=L8gT^_N!3E>XOQ0IJdnzbs!I`PE7gSn6i$@QL7k!|$tL7t6t~vzD zRkDoS44`~;!GjS}V0!e*fNEioJ3zaqI_HA&!wWrdZUWcM9^DX=A-T!N@~~g84TC4Y z(+wZZ!!H9sC-_0y;VzvoAl)@ciRts?-G7f{aQ_WdWO{TS=WhYsTI13UZhW|cmXm^} z#vyt@MdotQ(wnc_zQDD09(p+gG$aXW+4*+<^?>9>pU%%NkXq5F8ic zsREiN@7{)7_)36I9q*nBYGU|wzBB}l=%Xc?(?>x4dz94j{THZZ0SbRmF81s^?rQkt z;0qkIsMK#VsD)tmSH;{x<_?PR(Q?sDK4+UIn0mEP$B@ntlXd{qBfi7}EWCu=NI@k=qXN zoE&Hr1*Hpbc);U$D=6oJLe=9qcnS=}1dXz0FoQa;Y(BkfL4!Pwo&P*KFZ*=9_w4)* z>Y0M#b@Clh#sLqgf_m>y>_NAn9Rc5&1m2(O(+$?@2|3Zn7SxREZ3PWD`gT6_>3k1v zC3y7qg6#L{1=|fiQK}U*MESxj2!2W~e=8>=1L(3-$oP(D=Uva{qZ0frp!rdm?s#3wG26`&&TPHXZ>508&pA6we-T$3R@ty%*$BgiCyT%Q-wc!LEV1va>Y; zl-WCb6Ttot1Wks30=4-ClW%X$aRG4q$g`Ub6i&^@K)OLjzR0?b5>UJCK&2trD8ox0 z-C)B!y0?P7?E!IwCumst$P1&u|Nnh0zn89sFFyv2{rfu^USnlxu zKjh5+3BHW)4R1qkH-&U@!JQ7!I$V!l@YIbfXvI(~$P2H%K=VG`Q$cL-648e~o&R1` zJA#Hw!1H6Uu}O&QI*-3Nuk-(Z^AAQ3$keK5^S%F&UQMxb%k7e_;G>{Hdu&!i2OSx~ zDw>Zn`da=idg#;n0kja_yVu2xk-sGvJSP7Ah0L?3|G_syK*!xc>lY$U3lWr z3!cIRZK(^F17+jApjj^l{+4E_xfAU{R}*_$9w}A?bwph)a#a48vUoHfXY{drQ2GY6 zYZtr`0Cdla2jhQ_UU$ZqKA?W?UT`Xc4g1ad%fj$t>VD7+j|&6nd=mKHQ|Ow66VNpY zCtmR11SPH76EE1{Ub6S-2A>Y`BG?9$AwkP0PIz<+fYzWjJ_1e2__jW&lL9TLgeI#J zRbR_DbrrDj6wsUsc>f9LDo@Z73(z$ep!4}H-_$?$Xg&-Y+%1Xn=q-={4O6ptbb}b* zN-}&wYm6WHYCiX5ybqewxUwJAX)4{|)yty|z7Zb0J>s1sXr=q{(wVPkLF3z_J6huP zYQ+4dN3ZQ}H4cUsS8PFEa|O8_;_lbo;QR$T|4I!sSy+1D#RjmN(gUxX5c(12DQMkZ z=Wmof&qAP*staX(7Rq9wlKarrN}x4Epw&v}K^iK-w?iBOk7R*DF9{rao%dfb_<-EV z?5p|Ir#BgNbDaQaMJbC9XebzT>O81<2Wr#!GQNSX3o5s81Wzu5mq?*b?sGzx%t1~> z0WIbU1G4sU$?|MfD^e#I9v^gx3M zudhJLIooVi4u%&kHek1c_guU6aZeUfB(hQz2M|?0HhzL84~}X^n!feU9WAo3J1fBCDtGZgB=A;FN-1Sdu_8- z!0F||iw3Zo(g&|+A<_%j|KPQrp!CxGrlPa9$D=b8^|DdJ1E4xljGci2bWBR;x#s_j z{4Gx4D$AJ$Bn*r2Z?{r<@0bO8r9duFve~SXBGkRJQRKmDU z=ynk4bnO70xx(L4&ceXpdGT*^Z4VQF%Px?)y{y0GIH9|NKqKG`j(fn>8_3Y^QqZot z6)!fP0Il?W%iqDl%D@1=fbu`c9L=Mypabmx<&;SIcD{6M_*cZ=!p6$L;Cb++y)WZS z&x=2OHP3o_Fp3Q$4`TOUBD$;$BL7xBhVBO%m zQBQ!jz5e#-texS}c@VVm9DI)nsBieeW2Wc#KcL~3zW1OBh3;0+xyT;fp$(q=>(6*F z9s>7cE`SxB11VrU<)Qh{!}1z`-+mCc+jT~_ZwDxC_kxbC1!?GJ6_W)uuqMmX3 z+xoUn$fLQofq}o(1MCjh22aqE-VW#}!Z(oTJHLB=X9Jb~{NQ^rUM#Z!EtNb3TK%GV z!Lt)|u|??wpU&?u_UgX+4@rig?o)RwCIDknwYm_2r>I|Nn!|`RBIy|KC&dxNm2j0Q4dV zNFwbnka)QhJcthF`*c@Gyc9v=cS4h5x9bAGUK0h6&d>v(d6JfFP%twd;&0JrW?=BN zyynU8b`3oLEDZ^*1slyeI^nmkQda1lp^0#01o=s@(xP zK&#Vr!V4AfU=4_W546S1r#oHX#e*ZDG7Kbk7~AqMRZv|5+Wrb%{^iF6S^o9^MY$+s zX3dd*%5l(U0>}{)pfP2SZq`kb;04MD1UaFL^G~h@FYbl77c^XbV%C@co}EWu)_}WD zpmW|KvD*z@_ucptG-AQu@)^|70dW)<_*=mDq84n8BkvbOxyYH`xsu z2|=XpekG9RZr26i1pUgF@jd@OgBN_OAO8n;Ug7H(K^M2bxULSWz@VexAT6iBx_Ut| z1k!eW6}XQG;`%b4f7u02IuQSObhCbx02LCYD?p3l*G>jC;*Pz{0=v!ybSS~wm;XUC z60rEP1^ca4{O|w&FF|gEw@X4BKoJk}ONadb|1TGVEnxt)i6P7VK|Xnr3zA|0OTp~- z1(nVVe0pmSfHy4t^6B)Q@j_G=RABke0HvIkt)PRwEsufI6ll5ud?p)cOQ7Znk4|tg z2}+RQlC(1vblnle#Liz}1AS+_IIaUR?PVk=Pui(**iIOND{IizZ63-0J$juaJUg#|?&Ioo-Qm+~ z^3SI?_rPmsczW}({86s~x}Qq|bn;=bS1*s959p%L^PZZ=eL8==urUX>SovF;K?~2C z4|8~0-s5ip?W+LquXzu;lKVybSy09;Jpk&w+%^EUyFnWr4uEEeL4`;)`0{7iZ6l>U zAUn5sfJ%neZ>7B+y|yQ%L2=@`0CFLD>4q2Aj6f0Nx&Ts_lx}#L0^Yp<8g~L+K+_!{ z0IpsjRbL6b748H|tx;P*O(*_V@Hrt9c8Gx7jod3PweoDBr7+GB!;<;5CPkM1&1 zbn&-<4%+tx-w4-wpoA3^%o3pSfELhw&Y-aH+YAnimTjOw07u?k{+68}PPes3XYB#R zNkrwK+He19kY^$BD69|L1yFhbycNNtJ4`?oREK&%t5R^;2XfC+kLF`w_drB?ZGTFF zLvRE5Bs?xd(AjV-D&T8Qx=VL}&3Fk~!U+!VZg$9CN;dx1O3)N<=d%|TMZf>I9DrPF z4UWIp-0<{jcmQSHT&V%*lniiJ0TP*@^Y4*u?=b**DRcuUxxIV|8o039_!!&%6r}Sv zXE>7TfLqHgObiU5;l{jbqC zd^F#AXkPTN{N%&${}Pn_!IyNI=z}VvB@+A{suRv+|ySx@Pk{K(-w9ZGBs* z2X0oOBo_Ww@D-EjmzjgxQ;1U>d>CKwcYp?g!G{&R-V1RDDEt;o`T|~p(+L^}11al- zTtVl0U9YLCNXm4$w_@h;t|v-heAEMgh=eJFh%?P1mo3 zZGo7&==J{>4C@{v_VW@bztllVznjgo^BSmz044ockM1}~(&q*>^t+P;z8z+SE+)VD z+pCvF*`xKg2fxP+kJj529G;zbeJmf>>3Vd7Ll?A;mcMl~c=8JzU*OmUZ5IX&jY8Tr zhPUC3d{BAk+nokE*1`vrtGe9;d_jv*zk4zs@n!t`f<+0Gt{+0qHUdR%umLD@9OZ9q z1Z7Cn%mG>k3eFt!j)6)OPyzYfqw^Lx?p|c=1N9|93%&mHx1@sFM&RWy-~%HWfADvJ z8;YPqLD147xP)&$0yzQ~Qh0&JnR?SCVA&jW7oCPyd6j(e>!Hl@Q@zcwwjw+L{mUR)N<4rAdI?3QA%=|H1q4eS6a+UV@J5 zK+Y5{|Nj4nWQtF@tPJ3_i%3nUc`sQQUd&t#YC5x4@q&(Xyyekrs<8%^4EYwk{*QF{ z9_DyI=uURX7Q@RPjc+;_7*Muffwti^+phR7&A?D%=GywUzKp*$4bs_0?yseSgc^^4 zbi)>i!{g`0YtZ;pCu_=gP$Qc)6hyTiC{^_7H7#W2WSFpz19b30=l2(%Eg2a+I$2F1 z3QC@Pbh27}mu7HneOuS%+FSeIGx@l0x5<$g++1%!mmjNpcAKbpbe48Ff-e7Ry#VSm zcHV#Cd;CA-JOkMHB&eE>*aW_;64bqG?EzKh$6Y%>+y6lmT>LGdt$2v>9iLv;2|Gbq z9CQk%>AG*y3@?7hKl|^|T|2?2J9UOf^M93+VvpwkEG4-w43t1kw_~849?cK#gH3A% z9TDXS9`8{D4=jA+Zvovf0NSV4dH+S9+^hc{jmn_ocwTM?Ekm7v@Wy{e{#G84H=2L2 z@VA!y|NsA`7Pu7$&cB|`e^g4mJe&Wpl(;y4JHl8}=XvputKm0C&C#cyYoa|&jz(t&-Q@2en(zE@#%aHxBbO-i0Dhunlq2y+Kv~?4uL8~ z-wx23az35sUWBoO_^um#Esywuo%r9=@}?vI)Z;I~r`AASFyZL`|1VF1oy3gT!^z(Q z%F57z*8fZl44`Y1TXjL#79^kb=TEY#H=>`jdruZO(KtA1I zr5=nIKqq}zUhv>|y8s$;Xaz4_ZB+ih|NnlE&T0uC#^XMn&X5~;|1$FTXMr{!fzujj z@*U)0)WseiouD243NOn*y}pAl#5}sa6~LZ`jxLwkg4g3iJOT+Hk4|u>`NdOKuuuJ1 zvH8@a8?4BqmqpN{yIR7>@&bPg$je}}eLAoCKtk}v0&mdT4sZt*bR+@jbWc!`3JWNh zGEWas&;$$kKtcl)E}-kRTR>-vfKE1qMjf=P`$9_q9)lj;;2|~e4No53wH+`MzpH|k zfI6d~-R!NPb18kgb34GBJ|U6Xc?`1B7*c56e{n<-)O>ek@aPs+1&v=p42GI_qip&874Ii_MQ&7+$Pf`uP6~OaA}=A=&;V3uq__ zQFtMh@8Bus7jpam|M%#PfNk(EVe#mW0MEz>z|UrdwhKLaZHsw17+&>5HU6M$!&dlce(>mYRsb6XIvogCQSf*NX#4{G(!U>|v)xO-yx5};YGH-`fbSYCWjcBIMcZQV zk+ewb53uNe!LS#UI!eEQnsX%}b6O9Sh5eExTn*RF#i@%F-_5VX5^Cudhs}n$NMUT$X1IYdQ8-@p7#P0!l z4m_#nfjTuJ3OdYf0|RInQ-qPf-xgHXgGV|9&=i8suXxc8R|sxI_ST+w0p7O`-aUN) zdYT4*>kLpO+IbYRUI4@a56FO)>Gy$7adHG-@(UggaBQe$WZ-XE2TG^Cu^09+G=MH) zzyIQ%A?O5_=RTe9jy3#e2g!CGdf~bFG3Z(jP|p-Rl=ng+AC$-LgH}S4_g%UbUYz*<_PFeJd3@)9|U+mn16#wAy8qgl%r{LM=<~I_c)94i# z7)oS4y30YM9w0`r0Q_(yYaLMLVeshu2O1SAeeBU|`-+2uq0{%x3kHS%|GRzP7=C+w z7CxQOr7@c#?Y`O%=0`9Y1W zmc^$Y|95SDTbcwZ3?Nh3peapeCmag;YhALs>Z*@HN7<{)01E}#dAs9L!P}&dTG8X&>rHdCcHIU99^6b3x z5>)uZ+OHsf9Jm<>87~I;4;r!@&Cl6O)j=M!GW`GIF{n}j?|Nn7Z@GRF)Fp`haq{Jw zir@c1=?COW&}tfR?fQeI^x@0RC(-<)1NM&|NaZwyVWr!V{Zn`H@&DIL!RhS&>$zYW zURQw2O;G%V_PYNE)fb>+z(RsMe>eYNEO+tfw)5<~;@SE21*i>Rc*(Q#So3eDQXbFl zP!7=L5n>(}e?@~%1MU0{JF7vV5)?q!Uqm#4`e%n;KS1jFEV;wN0P+{ezSmud0u#gs zg%Nl?Q|CX(u_euKI6%Wopk{zax9rPT(hNQz*L?Np6axjHx=*j_`&S%b^T22KgJLIH zml4z-+4Bn2t2zuCmw5sjA*=z1%srpZmoA;3K$+`y59rv5!{9_B1WHG!U7#1Yf4=_T zdZ6SfMCv}G)PMOfh>ZcsN0)B1Fkl}awJ<;%Uqc$tf%zAlCOW@+G{50^aRapauK5Q` z326NS=(q`w&SNKEE^-8qcXh}90FMQnJPe-i2I=?c{QhzYcuoRw9ujDL_6pe0<~IW1 z{*D=9@Y4#EdqIa>z`&^?%P!85NJ_BamBh zLHP$Vp7Vm$1C%Vby*}^J`Td0(D6o4?_s``5Plb20F8w71oqh72h|+}xxfc|_p!&?C zGxUc?Z|IK~&xQa0NAeFy9vuIn;PXHsQ{lm&F?~>R)NPMk&49YNoj)K=KJe5|iK@rJ z_hQY@>phzP*F*M|zHtBb^1rL$6VL8i2H0^4P(__TAj+;XFfeo;eODGR5BM;?1|8o}2|BzHJWA+kdC!yI?Vd;H z4bXyr(B<7-plSqpK%T!9bYLRdxw5eG0yH$%d`O~nvPZ9N18CG?x77dtp1q+GFlX_% zfSSc1H@(aUwM4+@{rv>b6uo~jPY6^q9exQqZWuC-2Wpd6@Vxr}5_ASAc-|Yd6X9hx zxJUxuBmMqG1P{2rxeBgtdTq6tLH9pN{r~?`3e-CKH4E$bF{E$+&s%=R*bi6;n!5Dt z`~#Z31dSBcmz2La^y4M?;NFrD(14de=nx#=-VzlF(6M)czOCO%N*p_ng7h^%s0ZIl zYXDmWU}}B!T%EVE*fspz_C~*VdYegW*MpBxKb7CFm{+q#+mNvK9}>w?C;QE%7u{|B! z|8ZCF7@H?(q1!i5>9%wkXvg_+{+=h`&07C_I)8%4p$~dk9s^A#^7|b0ZT(*gKA0Qc zwB&C+1ZroY&jx|Z{o}6SVQ5fm_w{U0I_b@pfUOu~@qsQvZ21RrbnAgqOYlIrCn)-0 z(_H+m;PaF~iylDtTY}Qvftip0f4|`&c>p}H07;Lat0_HtgJEWurh~K7JCM1I*SbS@ zfJRSSFO_6?_J*)BfCkk;ZISyP{BEB-S}%F4|~DT!;n6LGURa{G!>@wc;Tm6G{s-+e0^O>4{Ds#NP~aYRZGFq%*ACjh0lLb;bq8pi zu0-3jyN<)L`7aZHYYr0wgTuGujQlMtL5b?(f6%l_$0iWl^0x=S|9#joe7>M15-&nF zfWiS3u(!bJ7gX`I9^mf;Epr0bXK16v@}PW!o>IZ{p|A;u(&eBc1UzQp(Rr}(A*9z2 zUb;{s3bMnH{r`W%OP~TDq>z8gAyAnBTC&IAG7ogxYj=){1o#A;xgZ|nJ21Nr1JN?iO(dO>}9ZC$D;Q%%ALFJNf=TmS$rZpK{$lI3iaWHg-uJP^7QIUAD zTm&={&7uODo$L->0~ulS1^MSC=)8B3eoz23uz}Mp=voSR`}@V|3Q%JVv}$PwD8@Sd zKn)_s`~01*|Nj49!Oq_b+5-jd>!gBYkmh$ln++jD+3Mk}4B$n)X%jp^*NKA`ggAIG z9;(px=yhRWgx+ESE>|G=3syh<;|8a#mn%U=cOHKc*Z1`QOD6Er;7>l9ufRvsdi2_^ z{KF3N?2G-vpwrpcyv+Xh|39Lo1=_cgdWnVMMZy&9^E2p0GpOyj50suj^D|c<>-QM> zTN^>Qu-#t44jN=Vz~A}^R0j3d?s&0sEhMQzrw*RKs8|Y`wtEg5>-h`X&j4B zf(vH&Ld(gvgM7Mi=dnWSU69lzZVnQ&ooG0k;E%Yqc83rmy?{z=@|1uCXkPmBrfqG9XN3nW@`^770+2Z8N#_$p}9S5oByGu`iR|Y(P0h*xz zx%w9P;M?~veyTnB|56y-AV%sxg*$fs2OX0Es!~Dgr9ty+H$c6Fy`T%s&}!8eTVKEa z51OCq_{hz`;MjSTzZJaBq4PfI9P#0$L21L|cq{0(4p7PV%6{O3>z~Ixl7F6ee zWaKkYaxU4?_XHD{QeKhObY`*bGUm!;RPxQK7n>>@cKaugJ>oOh8O-I6_A-BU(lQ~ zXo(ak1xxE^dj$$gNL+&53^@=UH0s#m#t9i#T>kIhf6#ts(0Eky9~S-=ZqNnZ z;F6c;EhvkEBi*NaE66XP<+czvLsnL>^0(--fa3T2i}U5b|AVIaL6sSJMCu#^=va?q zpiO<(z-#!Hf=qzi#0X6`ttbEf|Nr8s%ai}00WN6rX*~#1-J2}|O*P;$`8hjiJ-f32 zh|>yMD&f&<`lqZyoy7(Kedw1;IYD1Fw&K~fPY$@+9}1*P7X zpv^=RJi1#!>CmHlDmV{zZv|x&uU;F27fjr*{zEi@q7ihF&#{+ne?jZTe;A%LyaYag z<2ktf1}fK@_kxlm1ApsPP_9JU2a)H|da};aqZ#79QgIJU@C;`SU-wi{R%*ReDFewj znBkW23$(!hi4VWaV-M789hyK<(|80_{=kNnAv5$7K(?KR+qSYBnk*~k!|a{*dJV+B ztq^~MBLn9BUK=(KND#bW=6dxX5sTem*LftLcyStZ2}3711VOv$L5DAa>c|#5a2FSJ z98Wtq4}$~J!xC%@f3ppEZv;4~4gY)eZUtTa;nNAu^*)_TK`w#JfO&#;8qNj97${J? z=YnDblunTg9Pq5%Yd1*yr8nSv^Dh?uwj~Up!=e-*>)U-h|M_Y@gM~tgum`l*>fQ<} zVLdEA)Omxp9b4WncJ}C=3W_+7?p{#*`#_GtDdz(1v6%{Tq$lHb(1`L3-_BpX0pEQ! zA2t7CDGO@;p-|%M+j-5?@_x}?pKgdhy21YN=mtCgA}3Kr>IZ3&2AZV7I(5e*O>CR@nd^ zS_J#{MFPU^OW@)YT)u%)&oWlf>UeNk@#$U*iga+&1D7qZ$m;|r29Hi~e)j2H3W_h! z&M)9qP2ghAr}MC{<@@45A4nDC0m`ARH*s)s+fB~ z`~_C`4|Fd0OLovos3RpNo}f#~-WRR+?fmD{4YlvS2P9EK%MDM>V?L0~0Mhk8ZGva# z4WG`>zMao}y1|Zus)Ob#aJ)Y9=-vx*ypQHX56wd_s=k3Y6N0K17SGND9^K%;^63>} z_U}~@=La9+35!?MLXE%wKe(&(4C*G|&f{=*egj{JifTLPXoKcWObiU*PO>ZL{$StE zA3mK+K{=rFBIv5-&R-s#b3t{nPcLubN*)H!&hNgU<n?Ta3V}lJNL#Zdeyj9}c z`Ni<0ujSv8EYM+splzZ5eZd=8T2GelhZw-?+xg}79niQ^=cm_KKqq&BQa3Cn9)e2x zq_2o@@#*D#yaME!1N<$u;MN1UaA)-C`~>c5zn_{z8Qfk)>}PsaN%I=>)1=Gl3qL=Y58 zK9*}iy7~LAfOa}%!%g*p3js>x5vI2CJ7Ia@2XuuED zl6?8$JE%Va3G|nepi%+R(sAUU3ffT)PRI-l46gj!4)}H+_xyhUB?rg~NVtNI4}drj zlyM=k<*9kpr*kdH3oj3W3b*6ndIIEXpWbYVmlYu0hzj84Jdm2+z2FrXo%ddxdi3u< zcmq@^FX)CDXV47WS&))$*5}WpAh+6DyjTK09R4^+1^WwgOE!kr*FAbm7l03v0&T!~ zaoGdhB6>Lqtko5<9c>h{rnZwrn~>*_1Ay@ zyTN?|@Cb$Bw-+Z5vM|5~zd)r8s91l&@)+LE^8in_@VEY73o?zh>Y)^aN3ZGX7TA2Q zWCdtG7t|Gq`2YVuxDg1MZQ*Y_v-a`-*K3f5r{U`hAQNSszdbs?8-DX>exm`}w2ItI z0nNwHe*{`Cd;~t^0lMD~dV;*l3s6LZ78QGR9(uv{5`6exMIk7Ibl!iF_6(%)s88oB z&~EbkFWNqWRHvQ*UDE?D@Ldmp237@p7~gqletMA(I#IQ^^uT^*(3nc6>xCDo?oa-E zpx#RlPVcbwpz!`Fxc^x04hpP$9-xgGM_$}yc=aD73_3slMGT76J_b+@VSWDu9Pd7z zAQxG@SP>7Zosg}6=Jw?O%Np=_F4BM&=sGKKaRQoj0k=9|oOOiuA3*E(UhuoHf-ZW2 zjNgGK*c}9Xy0t*tt2^KMXuf(;{{a*%N5D6ky|~nf(jN~6jl%u`M+ayv56YegP+SN< z1o`nWETNPmwJ|xso0yJ*2H`qD_jZGW9W<=M4>|#&Gxh{{^c~dL?sPo>8c>G@`-k`F z{(k3*5$vFA!r^-eVnO%kf>YQJ=zau{Ga%Opy*TIq4vPwt7wpbRgDP0Up&Vp!=i!&Z z;7&BSUGLG&8u?fXv@Ha*ElVu!KR60Oqx&yrf^M(rdQJN} z{CoM|1CfkkFT9X*ee(Y$=tiO!DGi_@a0itA^5BKApi%G6+8rq#-H=-xJvu{AfLiah z3tkxbgM!?32gqi~RvP{m8&HwoT>!Zb4#LS7cyaB^%l{so;A=~EctE$sbsoC-%kaWV z$o4VNkg<0!i=N?a&>kM&*0=SMkopp~Ez-9Y)Q(RD?daLz(+Q>#MGSxID^SJ&Z97CA z;s)Kfb_^8LsbWw5`!N3Yw7grl7P^sSg=epg+>0Dgm~?~o4Bqoe{sG#t^y@9S*H8)` z8}T(^V|aZGw5}R7d=Hu+M7Z*`6nMTLY(6X8eEvSr>A5I&{P+v1Cz0)#2DRfLsQ3KR zn2q7}A!xtc6Li%0F$w&GU(W=cMdNr; zeG5FlE)FV2x?_JBeme=iAsIFv_hR?6*WgtaoB2TV`S(H7;f5zqf`)E-S3#|OW%5pexDa;O90G#P;2zXWKg;|{-Qt&^*%4qDG-S9GUz}MG<|t= zvtuN&Lmr*AD?ARq5(6cj=129Avv2uZE`UZ#58nnQDeyrq7SCV)Z#}@@0$S_}UZa~2 zYT|U>f02Lt<$v(N0eC*F^ZpCDC;$E*b6w5=G7vl<3`@44`%^$;E}*`83+T8LkM0No z-_G}*jCXxHfBRa#FOqy62k!TE9s?cJ#Q6AykjRt&K9;YG-95T%Hy~YQ`3f{{V!H4T zczmGsK%F}1JR)!kJLIGJ@5Subpyc(fbQ@@u9^>N|uMOE4d@NrV?QE!B&cNRS8m~p9 z`ENe_E})H=t~)?`n$bG3Vjy3F_MxMtc}V-In^p6qG{Z61<&0p@f`&A>KyAd%`!6IO zgQ{BB4IZ7WtS6|@+M+F&8Ig*!ngB1Xk4!b92Tu_`N4`jdTlMfvNOCW z{{8PicpMd)PrGY(ypRW-Sl{Wo<7GW$2pBw`QM=(q`h(y9UxF^m1+8}gT?6&)1?XsD zP*#5lI&uz_k3gGz<=?*i-+BC{0@xXl^ykrQ`}#3E!wZ(*;O@{4=;Acco|Fs;ki$S5 z2I4_ObD%vb84@o+V^S}sRpZPb(bqBZM+SKC1!CWe*^eRlV=^}*q^^qn0nZ=vyTJK_ zgC9@+_0BH2K6PyJ>8Sv$UKmY%SdUQhWmUawtge});d;^*R z_UN1nZfSS+{`dzzOc=F1ZhZkNFph&qzCcaC*8lwd`AiH9{H-%U&2>nd5Hwu+VO z^tXZr4M0a4{{R1<1=@<|Z{Y-~ZLSw!D7Euw-V3sbfxnd>B#1hIavL%p0k*U82*`Pe zw%uV+K6xSR3HBs(;PgewPf+|p`U;(`A3&1@3qeA?;9*SA5Jfk5gcZERu(K6(;LeKz zP&v{K?bVtF-3E>5LQLq66Y#V)<8KLLVPJT%^4m+$_G{1tV(U?Go&cNg(F^WRcy#uH z1^__iYUgnu%Ln|;%AkQtczJca6?C2qD8xWbv8|vpf?iuA#>+t`pn#~YD+F? z6FlQR-`4*nf*#**`*dyv>GtTH3)1In`K&nIqkAgIK5%#V8K`f+3ban+2QPn1A$%+r zWE-dy=>(l`_2T9Cm;XJIA!8t5kzN@KAI9&F|3f7}xfZm{!ngImNAhi7ewTlqjQ4yk zpB2pnZ_|tf4SU`OO=f)p9d!pv0FdsOkLE9rW^lWj!GquRo=@jL56xp9jJICMJ_n6C zf+H3*TiNm!6keUjUbyl<0bLR5Yx#`7=_RNr_y<}e-`xsI0ibqM3utR0XiXw`{sGho zf=G3OlikaEpt~u+<&H~l`hSnk&z{Lge7bdxy~qXUHvZPL;3UKhI*b=|8+P+QM*fz1 z@Wl~dz@2H(n(pT>?r#MxVuQAKzzO4p&390`=>;d&Uho(obOghr^V|#mYybXxCcBCt z;?Tny-1{%J^yob20qNtsczG3M#9mOWcyyOGfEuTa|3IPZ(G51Y^#JVLPEcHWTJrI? zn1Bv_=-vuSrl3f5^XYu((G51ixAO&P+5>cs!MzvjH6SfI9p7FXHXqR9Y|yL}s1fn> z+wcFLmdE*9?ttdsI*)=K~KLM7o7{9;l{R>`yar{Mv zHX8$U$it_%8n$$#gvF=38nXR&K4>z;axcjHrGg&a;N0k8=`6tCasxCfcjDnc`1)>G zGV|%Rk>GFH2R_me6pWzLM2~{DGHHU&Aq5p&;IXYkFrR83dol3|vgb-nLG!_Td7k|D z?fmz$4O|6)>kn|21Sj{b-=O;+z`OihKD=ZHrMU^92Gj~IHU{Wef@iOr1auc)35#d9 z8|3Z_K2We(f=dPdR?ucNsGmHo-2_S|fE&QD^1!F_$4k&?#0%wD;8Nw~Qt&ywufPXX zet(gB|2g8f^%%D1mHR7N&gW)A;&+5HTFSv~N z=rwgXD9!L9TMM)s3p|Wzc)+9imr4nb;Q^2Dhd>JuK?4eq39y$!AX_?*zo^kFh)gY^= zUkIHCHzedh3t1udblx{S39bfXUz+{^Eu(W`V0hsTx^T1e_zP!HTs9x!@acRA3cdHy z9-YS=V?dkJVq;%!V|$Hu-zTPhi_X3NZ+NoxK#2^pjZpiJf{)zpe%O1^dDv$>>P8c3|VRsJXr&2G+=6_85t>T~)fVyi`I6&tU zy%6dF?HY9L0IlpT@o+W#=GkqdvJW)3^J4l%P`~}?x5Mm^I}kzZVP7Qmy#Ajy!Lirv zKd1@b{s=T$4&7)7nmsK!@Om+*-Pcu)9o2GC&w zphKcOI)8a|gN|wft#^K5mq?K%TGrnBfRxWE9{mSUg+r}O>`yLM3Oe+O#xEq)40 z`MwRECz@X{+Wz~m&*0JRI)lFrbUHkAml^2zFVK~ypmVb|A9-{$`}XSacy#)9_-g+3 zW&G-6`H8<5bgzp?=OIw92zu!+f4c<}D0CDU7{IXsazHC9!~vb94KJ*?-~RVVE^Pqq z!13y}(eto8&fmWmdu>d-dQB`r7J4wA_tE_I;(i`zM9sGY zcrk;i5F|ZI+%Srvq1~PKvhaIWE1rlkb@4s5JQ~h#@`NF z>f;DI&keeVP8GBl)PwT`^c*+Tb-rssu5Lb30Z#Og2|Mt5oY&Xk>#;!H-p9){0nu;%~A1|Ns9>QRMLyfkwpTaG>d&I#Bbev9LB2GDF=I!G9D zxY5gKaIFMxpMa)JL3haUfab-`L8V$U;!HXIKG3oiP`m8;i|pjb|6hVG5`*@WI`6-D zaUT@u_dPq0zKDJI??0sQ08OcMI}3oX*l_K5;qv(3fAIQi{?(WM zY6#hRVA$j3>P!?2H2Ce%) z{^B&~s_ahJ8K9wO%muHypy46QwV<(Q{??n|oC?{&18QBgf-WLKDFFCeHvRtpAH2a8 zG{_6OoECiaHllqF$}6C;ulqilk6ze=&s44L0M#kQpevq1r^dR@cwt`j|3CP0nzRXq z|6lAh1WjNa1@}BBcy@;}KuQ}{$aMq0-L(R~jL*Tv04u2F4=DyfSBpA=!{X&P&;{bUbwsg)iBI2e?a#Yc=Xx|Uj>JcLMp;H>^ajt_i~^#afkL#J!Q zi+`s;wt$w(-uLJP@2Y+A`!z@i%=T!#RI2aM?b_hc84Nkk8Jt_3C0@AQ`UgGFIp-EA zL1rtwya&Gfhry$}wgD8JN5G9}uraUqfcA|-Mmbr1_+4^4UOxWy|No1PSN}n7-gyby zd-Gz^^?(0g@aBL@klGn9zTEluAGEc_qu2B$_#`dR1)Hq%&Vc%K7KR62lq7)q)JW@v zLb2S>6Mhb?{DrtDxL8Hp$0qg@G$nKd>0Dq~dk$9r!N;#&uLcjr*NMT#+988v9-4<< zGTZ_+NLfFg1&@A%M#en4El$2%>4CJr62rXTpw*472kPXI%meK&0U5adCa4tviN|i% znP}z)di?*7m~RLP_UIP(===>W*&$c3O?{TEiEEWKr zVge3L& zqqVQ$`SUiYyn+mh8GbwI(Rt`)<~6YAA>(t1@#BBcCNg*<6C}*Q+nI!3bku+&fWHHL z3_#~G_=Y{!QUh=ThjAa0=%Jk{{jubOruY#NpYQINovNHH|CrEg9 zyQpw@bQ^$Z0grA8umKyvz57@O&*T~vmgfJAr2-zBpFKKnff}!0la-aUA==b!;~asJB`n1)hxp4aj$X_vjXp0d9O!oVW)a(ELd-QsP z+~jE)Cr~fp+35?K>IEK?t$Afp$&b_BW8r#tt+i+m~2z(MT-X!!~%*}x+pC7C{!wHu(vj&{4Q0Id%ys_p!xDNt43nv{kSO#tpvXn0KZT(-F=?O}~uE;Y~LZHS@^AQW5PUMIJ z?|(VV&hSFz$v@CK-3g#muA2{l9J+zO6|_7BwEy=EJHrd+C;$F?9CzIS3NmoiK-!Z~ zH~a!Gr~Ce*xAOo0m-XOgE+oERNXvjm_MU*Wf{vdBt-k1WJpc-j*J7acBi*?NK>Ijd zen0;2)0w)#7vejg&TpXQ`uAV-fI7?I!y#BoFN0^bS}#>dfo+9aDFw2UA8e%y0|Pj@ zy$DldWqA1;)N<}-jXDgTkMFC8?V;|B0FAKUf5CX|-~ShHl2JCq!^<;Jf7P?|8e|$C zG)L4e1uD`zL9=M38+^L!VH?|#%RJEL#pYl2{4H^y6Z@~fn12w|B|8F|=>g4Wz~&BE z;4?jTpvH6SZT=2bQ0#Qq?l3$68fxWtxdGmYcL=GA0O|`&2bHDJJ!a5DL|Gs;;(s+W!I?7xd_6hi|l0VBl|= z0NNdt?4lyzXz8LN!ruzoK?V+T{`D6;duv1)JS~3|)p_u*KkTV_-KX=nkL3>!e!m;9 z)j<8|ZcwZ5x{u|r`WTPaOBL>(n*V()e|z%#-}hmB585H<>e1`E!?RNkG-nJ75f9W6 z{VY&WfOmVLq)#8l{~n#S8!9(I$FU6mgQi0r7+w@#23JC$yFNkr=|wV#f9NG>%n-x} z*M*@gUig6a_IHP_@UXm4a~SN2m!PEpNd2`79^K^vp2ZN9#8ae$Qhb2Y)boSRUl>1y6Z>zvS6@{k1wI{riB9O+Mt)`3^M8+yChIf6wOk zjG$#;pb0_HT##q4JEKo$?FJ9a!!?&cr=Nhkfulf5W=*TN*czE>MdY@!xc#-np-~X2z!4o~; z`rHRJPx#)WH*^DdT-bHRi=Z3-Acl4x_q05~-vZjl>eG1)w4ni_WC3UcEVztQzX2*_ zYghPyX0%%mlyrDn9`NLMI{?~-p!pkAHn!@62I)cDQlajEhPO|r>w*_IazWK~=nBvo zyq&Ha_&Y%7M}me;yK8rVjO1@^0uAT&*03_Xd=7T91B2mhkLKD94E%kdb{%|`@$I$uPC zPLF`5o9=9h*T>T)fVN^oj760Po&Rzi)IW25@S@`$C^|x4cyzlycs&DYwGi|?7;tI$ z(g-xI1TMdzEuEJS{{KgucNYp;zj6iCOhc&%Z-AO-0&ngG@+h52O6^gx0{g9r8^5+#o3+50bOhJB0?5CEmNrs z9vnhjCiM#xCa@Xv*uyWX#!UvbiA+g@JrB%V32eTYMfg*fc9G*d%5f% z@;1L0jk8!7Uev_ksBc3+Ej7@3x9cx%yaR2Ic!oHC)*M_&fXg*d|JS4Q2k58`R?uDK z?C|q&1dxs|di5QA9#AQ_N8>5b!9X6J0*6CAx>@~pgWCe;vCy@79-U8LR0X`ocAhHy zJ|Aeo!11CHR0@Ochy<0@9=)QB=RhS7^x&Y_mq`a-|3^A60@5D@p9TlYd9cHoKpjK$ zCIh6O=+XR(sZ12o@8)lr18Pvl?|k{+r8`69+hKP8)zyKYg z)&^}iJi@`>S`AXxdC24YrG{q-{4L;Zh@g|$K;yj7lh_~!=z=zeJmK$1Y<>J6RIc_% zw1S38gu(Ow7s2g<#)qH{shzH%E@p`xXki-Y{H2yoP^ZK43xD4Q(Dtcg7ylU^YkUSC ztZW5m9PoMbrNXciyE=tI zhyr=0`3O><^{_{`v%*X8ULSBi^tAj^XWWV6h>IX|z>eT=0qy<=s{>ozd|2XjGbEkX zz5`v4D!@?k4B^h#x6&p+MEP3+L3?{Fzwq~hCgTuFUV_GP!T#yI|Kh_ba1#Wyj}}p$ zfW}vgL1Rgv5*0LIaQ}tHmpA`CldpmXz&$iCyljOmPJzgKCSNuD_TrfDDOzc@Zu+E^tadd2xN*7wA^z$C#VAE z?sh%m(fANDpncGzlN%DBFAG6av@M7J{eSU30u<$}7CXSX!ZQk*D_*4gf;<4vZ?HZu ztT7BaHHg1M8C3dr{sz?;pjnsyr92=vz9|A}1>L{KjyN)~DA+|poK;Z zphc~oonJuLuJ9V3ge1?Y2RnVw_*%ZHmB!ezihRe)A;``n=x`M{^GLul59sdl7fRbe znFl(L@mWS#Cy?SeuB|vEeoErZz)@Oh^ zwdgw~LE~5u15!~9;O_(NU+H!|(|Vx97G%*upUy`vpksYOb1$H!rB6UZP~FZFUcEL7 zNcPmt@ag*j9z1a8r?SG%nWChUievt7rP@H(20H;&XM#>2u-QE(Q ztMnW|V^6$T|@Mk9u^oet@K}#xPj=V)uUi{{_>5 ze@Nve==>N^QsQrY((o93_CU*R5ThHBj9B?wPc%IKzmkE0L7{~Gq(|qE!)X(~9bqXI z@aPuZ1G1yrpTonFt0Wtgp28rhCxM9pG?k*j#87e;bR$qHsI~9WS^MJ!=&}Hh?%E%Q z-(IwD1vRj0e}HGwYJa?#t`5pSwLd%>`9YI@uO}nMGaAltcyzLRbpC*zZv!$@5^m-> zP;V7%=E;{vTmSt(Y547>*4BUjK}&mTf4q=K*z3?InplAtRw(CVZYDxmXII*)qvvYuK3K4$KP(A6*hJ-h2UJi2`) zJdQhn#*rAhLj^z`1`p^-k=+FxFRZ1Q8GO2ZSAd&fpxZt@I}dqwIx2w1{e3!1cla=V z@aY5{PVc$^G)Cgl={f<_G4udU*>r;Mt?=nA?Rf16EBAJQMh*V||6dQfZ4I<~=B3B? z&pw*pJS>kD^LuoDFuVlrkbeK>(RpwOXjTNYj@t5|2fxz^PsX!8o$p>){{H_Te8@cP zXcOd<=D|m?c7yJG2wmXA_}kU+BxsTcbc=<5FN;2?3-N;U4--T452jKRkM7t5KHa4| zKsI!{cKB%i_S8HET4ccf1H7iP1ky+at-tl@dEHjC&frlGa5?SKU3vh#haKk0QdLl|MBPUd)LMCw3fhCwy%luS5U8U%?KtR!kO!}O zCV=<0zrNzpYs<15)ZHju@j?>3&Y^V0>%%Y31);Rop#2RK9db zc7E~fyz1L|%mcJl8Pr|}6^DtCg&9RJ?p}WR-_!Cae+zgWe0Q|~(%CVfIfY;e@D{$% z11}y2|Nrk8=FuH`0KD_&c(>~rU(i;tpN8K8UZ{ckkDW&%qCf}mma_57GkA91@#syx zfx4R#G``gN{sqSd(6WruCXmnXtOqUIz355HE}`V-z^NSav+sWiQS8x>!E%Eg)Yd96=C4%A?S7otz$3$zXTn} z3T}tI@ID3}6MFd+oO3}-JYTFh1S+3jZv&U-pz(DU@VKG?1Ai;Hx6+N&3a4{pzchs@BX zlw@CYtOKP!&=d@05lSp%Z7w)`K;bvzAUHg(Bl`zdKEC*U6&!(}*)i~<)oxI?7ZC<9 z`{C-P(bR*E-#`mbPJh69vQ)GLg^6O5N%%t{4y&_HvCw|qL^Mf-F<2c5SU`%>rw zsD1=Rj0bec7PPyAb@4`UW6i`LR+;W{#@>Gc^*a85`uiL?Z0MIHxD`1b^W(k5u# zCurA1=iwKi@PJqXI#&WbK!FI&vi%A_k&j0^f7>z5qADJy#2x~<^TVepkqcRfTqhi*1Y@=p1XD3@Z!&E(7>th z22eHDTqy#YLFqjI;@WCZiNW9E$H)MlQ1tZ#d4s=|4b>F=l>U<-~RjW(h1&IIOD*}|DN6Ku-m+Dcy_Xb&in$` z3opF)fh5I2`+^I=&VBxZ1MKJ89pDMlLoXr^g8H$w2N*hC&+xZ`mZ3mnpyfO$sDFbN zr0}<{`uG2TckG$Y8y9~V-hk|yX#pJ;4y~tmgH(ZUMFHJ-06N5m7c^`kzyOsuy!}!W zT%Lfcyb2LU{?;X+;rY(vFS1sF!@6|}$O3Q+y14arsm6<<^DqB*9s>CblB_Hbm2fsf z;=N=xC{!-~|M$Q1Fx0J64|p_#Qc&yhzyJTgJPjYGDXjx3HB0*c|0U?$_X*vuXTZx^ zJosI2xbnMxc{v$c4ui&sLF1F1?_PKu`1ill^$hrwGf;ZDu@aG9&a4C#KcGtjT~~PY zn$GBo*yLOkThVG3wDRc@mA123Q%jO z#KjZrOwb9uki+mjdPOJX@G$UCIRHLj%A*tPc8^}x>Kq=>it$6B(=|X51HHQ&WPwlj zR*+-B!&={8h-?L|HaZS&Wio)gZ+U~i*$BkwZUy@ZyjJFTs{uGn1VG2BSo{MW{_xiW zJiXP*02&9BoB&gyzyLZS;wWgbY4ZoreTqp>-0piRV9m&rMbahSmf1XFZzt zf{bGEO|DT9;BT44%D~`j`HsIS5p;WFC+Gq~U(0{K{QloPL8}=1LEH49ebw%*pdbOa zj6%R0=%<2$%A*@>-iwPr|Nrlv3i4{}rBW`0!+aUvft~XGh5Qzfr@yyB%!Zkm=$p88O|4V&V1_nfVF5l#1 z9xy9GtxxcJIm@}A5a(|;U}j+O?qvZjas~)r~AV{o8~gZbb<1$9OnK+ST-f4-gHJuUAQHG|t1 z5L@zKwoC&}d0E~oR`TcuClzpddVv%-;AxZ>Ww>bbpxKS)Oiw1QX%u|5m3U;}*pGdLT9mQ8kmHhFi0xzH;Y9T zZ^D6^FcnmAcvuDs@VEM~fyZw_OXK&ZfqK#b0^r65*oGIcj)FSdU^euOC{X+9CFnwF zaC`kH=ydkZ{r4C1kAf2oe-AsT?&t=mLeM>LmOpB4z69NF2-@ET z&i+1-Ldm1MLg2+r_y7NWAi)6&ym_Fy0cm|=pak?RRd9U?NgrY0mcx5!LVsZnax!H1 z2e{4zCzTh1OF$lJ1?_tW9s2=t5~Lh^dH4^=#=W3`^6mTwPIo?*pZQzPgA*3GP={>} zIkOmKNNvN5&u*Y4#7BKWM+bmzJ48gR=C2pqzW)FJG6b}q543v(QeJ?Lh}Hb`Vm3&s z6>>xg`25#LAc@ZRFFt_}3p@UT>lZwpL6h&@j2@k>;5hCEmw_JN!8}k@gF0Z2pfw=; zEvX=vT7pY|{?-~02U4thbb~7h4@(aL{?-(5BK;3aq*qh^|M%$Ky8#>s$2>cazxcce zNB)_vIw;-H@R1M_4d7fNHQ*uxr2$M9&H>-9Yd%>^}6uGe*JUY+6U^xU*^&UK;cI(BrPyheF1cfB1Sbhm= zZ}#pD0F~#R@1XU^i^B^*n!y*_Lp=ssRRFbbZoJ$K zS~1$qdUY|lZTQUz);4@&3ThiVFo5QNSAqs)Aej_WI=`qp01hNj+Xb}G4>Sj#4Nk!f zu)14-!J`{oB6m*(r9uyIb_Yitv`=!uqmz+eo&i#Mzw`$mG6GTw>Q6zNSU#4&OLl@z zKLO?D-o4%Lf~RosO0!OI z0s3+dXi%!xwtEHGpP(|~#oYZMYrrKE_&VDcJ`Runzqq~{wBZY!p5guJaL>;3pk_0) zo7?#reBfcXyMRY`sQ@TJe!uBqd6T~%q|3wdaDBB0Bj{!}&(3SUoku~}wE4CkDDec{ za^ceHd*+1*c+BSci#1z7&0^3EX+ObR?Vfvf9t`UaJ>$`NF9;N^YhL~T9~B82YC;>A z>x>rwi9*_22)UQPL1!s+v*s)WO|yb-1B;yr>N0@(2Mi{!k>=;Yoomm|FCLxeV1p4J z$K3@$4d@roHiMcRkY4-!7b`$UHiJeC;9YijeTE!9;66KO32pNmlsSLUGNteA;1WN> zr#l_8L1GuUkarjG>3j_83xj%13pRs}asZ8Xf`)L9y;#5v8an_j@_+F(9L#*-`{^HO z37h~!iJwO|>-)Lj)Z790p`0;nUy(;|yaZ^BuJty53+NJUPf$#O*1NRc2A_?dvYnmb z#r(bh{=aSo*Owl>rCUI5$N}|4Kx=6hf;Iy+*9$Q6_bD?oFgP~Ys3`HbN`Q7`fL6%$ z)~GOgFdp^;&*t3lQT^fYgDOM1aPfdTlx5co_J%o%Bd%>Gxp#VfX(5Xj}}uTfa31)aB@P zX9C5T2dD>>462g5Rp)g|Gx)YX;cww(26axplyF0ge=&FC%m0oI^-R_Ltw!L{nd8i0 zAIO2iu@`idhU<#gdEjwQ&=~za(7nx?|6W|PVP^2?_TABW+@m+}zen>gR{nNoW(Ee^ z|NjLT_}c}T85ndKZh-jg3=I5jp#FkSZ|Na$Vf)STe~5|!q*3CLeBs5bH~;_pFxTz? z+q;a3fx(e~n|Q;oTK*Q$I4u9ZL(MNZn}4vBaW?!?fZV(0*?gSw^#w?{HPo(P;BQR< zcYTjDfz9{?8kFe`-2pvC@&5}AkZYT3cQAFh9^!Ak43;iE1P$f)FEZc!2OYw|2y()ZM4C8%W!Th9-g8SnsE1}ey2?6YQO@Mx~x z!P0r0zx6p2YA7rRH6pQvf^X+DP(VC<4QeIUt~lnp0^*hppiynhJNzwsKurzMjRWA- z(sgEzjrELrDWwJcE$N^pL-P;8Iwg-CdTIGZ$*J+Fp2jRH9=r0A^HVbO(ltDdLsU3C zI4_h)cyzPI%>rjge_L4f(yRaazhgsp@mGSSXb)Yp7tvD@FI5SzyF@lvP}b2#&~weOSl?7 z0cDVv6Mp~y|3Z5&XaI+`rcIi`v-8Ny`+q>|h@N=%#!I}+`2GL?4o=Wr)u8)he0$Sb z!Ph=Kc-aN22)kJYW`aXgKOR*84&SIxccJ|@dk)^PaMpg^}4VBzmT#7PwFQ_Bw4IsQ9lWy z$r~cR#tJ501raxfh<^`<8I}YQmxhQxfvfj|h%-aPH^9{!LBwBA2M5OUHSEv}L!@-E zj!%bymd}3$)!vY6O**f?aF_-(FV;9NG<*c zS>FX(hvLzj`T*P|gIy62`;zPLKcw|MFII!bKS9$`2l!jogIBH`;cr>S06HADMn#0N zqzruNnBo5yhd^hiHNWBT>3r$Yc`J*>)$pWm=L68p?Qzgz@8<8|iXSvxR}8WB12i#% z&bnfF;S9H@#M{&INQoP`0|%OA0jY*5eHp_7syaaZ@#ilJroIFZn}JSPfcee_)KLL# zfCk;f`g->SpUy|GcYx-%j=O=I0^oA|`-`iqK|uvN>IJkwe)@Cx{xW#|51D`I{Qct8 z9*|N{dmVP2cLli2gN#2S)PouwFXrw6<&OKHtFRs!fL3H9&(eTe)(G{W^;#aCzhCUy zjcz`2d5KUDHotc_-25gC^B??0TCWIq|0@jhcYv3JVRiprg!xJs<~N|29}K!MUcs{y zbf%X_=jRun^g$&a=*(MKI5|86HQ`weAu0WLKP+c>Xo1@3X!fJ77X$4}dc*M|Z!%<} z3_NBJih|CA(XNIk;rp)VJ^PP5S%fyf3c3FQd=NP31UQr_deHiC$hdf?>lVn>iHeL2 z3@+WZTR^uHs!j&oIwHd8(Rmou8b1DlWimLef#+R4lAQ%SIv;v89}ov^9Ydyh z(4+a$2M^0LC88dUZx{p^7(AMLRDSS-sv^rXrLP+w{pV+3@X)*hT2tN%K3btSM}^7=Ivehx4rl1yazht7ks||R#2?~zAnP0^Sxu|@&CaF-M(8O z^BK=Qldpq91>9kN(e?EIf2e7tJAFDIfR>ko^2_%Z0eX-ByBeN!=>%Or0JP5kYr2Wq5R!&Oi=-(1~w>;1g1XeY$;Tbh<8a>^$Ic@RgWvx1dkw zdHB}oxeN>pknSsZy_-+xHIIYu#G0SgcYd@5^^o{m+Zh-bEU)pmf~Wg?Yd3(dXWc## zv{W0kG2;A--J8HYP*9ExIQZ{BXi}dKo}6C1y$tFvp?yz>qcp*+m}B|LXZ$Ko>xO_M&_AmP!_S3%ole0qJC zfJ)&fpz{yALuYjRF7fDQf|w89HqC^x#FW1kw9d<;`A7z0t{Bq3?=F{ky)tcrZ+E7E zZ*L;ZrVcD{orVrIPVhOfW#={)b!={n^_$YM}} ztDWJ}?K-9Npij3r_|%Lv(E2**S?mm*z7sq;LA$d{JHX0SH~#w%Sq0MI(OudB()AK_ z{{Tq+>zSbauN(jU2VcYVVwWNE{Yi-V8&FjSnr{akEDyR6s5rUfPJq^0GxE29 z_RutgP9`q^51`gT&Nndfe)s>lYYP)7!*zm>_XKT~<8RRd4GP1LI#@H||Not!(Huk2 z3D)2x2FG5AgU1fRlOdg;Xm#lZ+wHgq)JS!0Jy|O1(akz*GN=a%+Sd3YoDbB22klD% zcx{8piMQ$U)(tW zTJwm0mCrHI$T7_5haR9~^bbUX8|0w5Zt&ukmqtfkf$#Hk7Vzk;kbChMd?ygNCfczc zoCTnVE<-negVtrfkXr~Ea(NC~R^AC3{Q}+a`(o#km;b@*O?HBFSPOVwrkh2@r!%$V zxN8F_@Sy4SIQTFJP!HRK^MvEKW9
5Bj!#^Xz0%;h%DV^C0vr-;UmN@X}w%-t%5( z3D3?Wul*tY5f8|kJ`Imf$bqJyt}6Hfoo;6V&_b8~!;B0J-M-*ce?Ui4et(hW0t$R^ zWOXb9H=5Ui7LL3q`pCl2uoq+#gGYCO1b@pyP{*a)i=(-=h0&+m(xcl;z^7Z2zvUwn z14DOhOY49B7ClfGqw|FiXk)`6&?!ru_h0Oq3n~ktM-?4=@fvi|ap&jL2^Me#Z35wMc>?Bu!wqySv*scG zRzpzp9(>#Hu@`$mN1j{$h3zLO7JzPT<8QGBdDZeAe_s*!Y$NbKH~yAhkOvt5fsfa* z0-FQA{n)$LMjzB;wp$B265s;V5cvK${uWb^i@SS4@$J!F+u_}7q7U0}o&`Pt7Q9p3 zlkqB4D}O6!e!;t!MaKhju`;N4+!_vQ*Z10TO=D+xp}ZDUl7cq-flmhj#a$ohvUlkG zH7M2jbfm&{?rBmx31ffXhoCP|$&HjPUJz4sv@-Fep43pMgTI z^%%q-PE$bxXc8&N2GGJR&~2*F#KzwONrfMwM~l3;Df9b( zw{L@I=YiIf{GI%uGrkV^Sh~*OpL(Fvwc#b`WG=+~p=UQ=^Fw)$=AW$mt^T0?Yqy(# zOSfx_Z?6u!YwLj$bx`W%Z;b_S+WG#X_95s5*5fZ!4Z*4LWiGfW=fc3y?b-lp^@6Ic ziZibt>Q%_Si7z(EH(p6UfBSPhsDOHD1_Apdk% zOT2Uf8w+ZmynnHv6Er8m=plL119W}WhyNap2SG*9%R2CAJJ?s?GlyPIgvTr7fT4RY zj&y=t47yhgoTx#AZrxxjL5qi{gXVa;!J*3rHUN6~fhWJ~xtE}Oo)Gcj(OWy?#da6a z6?5PSe|hjHsKdbkO1m#T{-SKi_>jTE;L*)$*#+*g<+{Pzw;A%_?x-R}oUsii9w7hv z|BKyPC`$t2?R(I9363F-pyu@TU=Q%|J{&LR?Eoz;0gY6G*EYFyJ_qL)P@y0D^575X z`2&V0UvB*Ya-|Cc1I#>7Z^5It_62xU7j(7dV`osYR{8?eBnSsBxB@M4Jq+IO1lnuV z@|b}E>F`)j(1o+0#S|XkJ=ta+puOne^(>yfK7Sc}I$wa+)-ZtP3k5uy4{&%eR|$An z9xVOf(fnVZzyBDx68;XEwtry(x{JB<@M|s5xEN@?*H_RfXxq5e(d}RRbc!#vnK`Shpf7F*A^yvKV(OG)p#nxG%=1J)Z$Ij!B`y5=r zJIF!$U!0ut@;~Ujw%wRZ(94o-fl{tiAK4pD==b-W979XEVD_{D53(A-)n=nz-% zB<$fAk;`BHe+gRl1sX?$hc|cto#VxxHc%R7>O90h&2Kb3 zy2a62OCFG&F_4v({4Ea{K<8Ptf!9wuemlxo>I6Dgsgx76*sJw5s5}HsC*6Mm>K~$A zKgR_sv3pY?9!RY(XnR`CA+r85nv&lVQ(1W}x-*jzM~P zU$FJ^zM%Hn_RmEwBOjL^O09?i9O?s zUrS&9@Alndd4j)nCIe{Qh>1BU&u%^onr^%Q;`LHcK?hny{R@0e%W190|2-T3f_ieL z0*$o?K&2$OBk05L`~q|s4|v|nhx3I;C-ck8@NyG0IS45Qx%gXI!1W&_BDs%%B9gxa zRNs4av)Z(P3paO5SeopXdj0>!H`T}gJ-dBC2P&{iK~#LU;9%$uJ>by|it98fa0&Ro zSqd!HYx>Corr%o%B~8Qf4{R#xO7kQ3;8IrK)+ePrpaIf5_Mou>2L{kZY)BhooleQ2pmYT~YumH) z*o*$fFaJaHp+~nd=;$WU$qY09fbJ5#Tlxk(=KlPJ=Ewj4kqrd5Cp@~%U`tIw*RH1i z`Tze#LEk^{e3S=hv7<*fJAX?bxKQmDgWnzv9`tFh6JRJ6+X3ndKzrDT{x#@QIgifY zpgUh-%RoV?0Gg8>JFj{)|Ee#kbhZ3ivJaFjctE?7JD+zRe!+C(-~UGN($5ktaF@BH z+VB8|`CwZQBkDV_O8yqm$=INA2HhsexJT&`(CQQZCh(vKc;@&eXh#>Qzx(`!#Z>S@ z=$D|)VK20&g4XbesDKtohJo`SC*2BCs61egduM_32HQ04;^( z@aT>g0Bzh*U|;~XQPU+ny4?hPdh;YazO#Y)&mh4(2@lJ|B?6$OwqQSieHMH8MK^fu zT*-3}(5Zajwfd1Npfe3Y>tCCXa76QOI{-=vuyg=QZyuK4`CCB!JaFd|ywLj(_!N@n zHyjS%j)4!s`&O#D4}2|q=lvHIUsxGh50sXG?1ly@D8j)0^yp@TWFywn^FH1A0zQ^` z0;ShpeEkbr(N}U7l!ProLz19vXGdP>ftklZU1_r3d zVCfQk9scD%zdQq2>0!uzNw9xF^K3BxKs_UY@C+#2B#_(=s#{_1egb#* zEsxIH8!s%OZujV}z44+3v?c-K_(Cuf#qsZyz>Z%8szt#rf;bW>eSt-h_%J7e+ZNzD z6Xn#K8y?-PnR%cq%3UwK5SaH8G*VsS?bDlk!Kd>PxXA(9krFNn%Ej+II&Xo6Kw~>D zqM+gt)Nj6#;-L-cl9w8S+~w2x9O9~%7eK`v@)qn;aIk=P13;7GXn$YMtH{N*ub;;6*)XjWhav=b*#GKR)A* z2vnd#%fDiY*C)~@)IW{}H(_9s;I7>B7hivY(toKTxY&lZ;f{jFSxa0!5L-YlfJ-xF z7t0r~XF|pUq7A{>6>g8=0m!}XptA13gqQzcUxugyWvmSoz~#{Eby)TzID&?KJvzUG zLg2;pI%t3@g8BuW$6kOse9?|E9y4OW>t~VDC&c}rGqzqDK6r|HzE>wC{!Q@5zZf`4 zK=v4ml-k1bap(6J4jbWV!E_^NiQjXN&ciQ$)k0D(Xl6tbSldX4_;0F zVhQ9-U(iA$P&2+4a^)oCR!2~~+M^qM68MWdpmjx{o;0Ywf?iYwIv`jddV|%A-B1NB zt3ZJZznu(Zu;c%$FRj7VoC5>QK|S1{vzlRdn1NJ*4jcP_6=VhI&>hd_|1A71;DZXg z_kwmX`*eaY$9iFGh6vnlh>!!+>Q>OMQK;KIx*?~^gO-C>I|=aj?*gSBkm;Z!EWx); zK=Uiu44AXNa^ZFsXnG6cEb!IGsLq;W`v3pyW<>kJ19V~z=v3BLP_lig4jw82^$Q>e znZL+659+~I3ow@GL7Ez^4?$gt&igNvX8-%ozmK8$g+cQVPX4yTkl+L*k(Up_r;tDr zR&$*IW9bp7UeHYyprrO}7N`*nPKEs27&^d_`QqZNfB#+hw;Awn1M^)hKJfR0#w0+A zixb3a0WDqifJZ&(nCl51-Frba_OAfUiKsNtAO*x!SJ0{u&^GMm z1B?)RT`WG7?tJMCQX&spHwkvt3zu2QzH3(krAEjKSkT%zu}aVc#a__TSCDtaXMu+3 z|JNyb_3~Ii$~XRf0?n@sntyTfw}Z~{@@PK5=wW%H^aW@EDa0($xEJUU^-~ofvp}aj zo_}#}Cd42`kU`*hM>1y~C}qIS=>;u2y!WD~0u++I8$6N^cJ_kOA86fh>nfMW{|ztg z11%Wv0BvIcUs>>CgVj^mePK{Z&_dN&R!{#seml`#I$2Xh^ppZGy9S@mo_V&l>4!pR6)jtTZF_}p!ePRNn< z(Brcqmk_*m^MD-l?$JFJ@1JV859uQmT?Eb;c~&f{qQ&s19f;%PBx&rFGj;U&-SM?puE zLl(pHPdx-`w?Z~lMtk(~zODNAAJP;6T@n@#9ye8-#R zpovoWvD)7uI~u{qYJ-OvUPiBe^?w&AR>4`c^ZtvfP!^>97wG=+>;zSQpFJAifaYO5 zI`@L+IefZx-y};jppB0Bw!SUZ@#!@+)aGD-*Qel=3R)9jybMzBC4(vDz2IviLAN{^d;!h7KrV6YJpNh{6#k$EVV&R`JYNJF zfJ%6XYEX}{L>`hT-@OQD1(nWV86VKK(Z~K@Zaq+fKHu~URF6U@8X$8+;6^Ms*bXDs zTY+y1^yudB=`E1(=G|d}ytGrL|UeI)b zM`tUDdMyI#pMHmhq96+>YajFIo(l4_Pv<{q;jk4n>+!<*`d`q>dymfJ;J`ip5`2?u zudQt@JHv~xDgXYz1YM5uB4!3CxBi0`MLwMmJUj1zFSvZ?*?IJ}m-1-OC_b-+6$lmMg6XO7{D7zVPk*>Is_K zdhFj@V#WwsR0V1#c!0KBf~M9Sd^#WdcE0iL{QAP45A1#LNhdFgL{RQm3j_72Jwba* z8{dEqmhtF>)SsQ;>r9Z7K4|XU6m*3Uq!|ZlgC5fbCq+=@`$7sN1-UE(dije7xQ&to zI#I{B7}Qt=UqK3)T?LJrAvNf)gBtYwE%QKX9~MHo|NO1~pp@Eq{Kfu4(C8i5U7!|< zJy`hriy1Bd{x^g7G^&9`j=z{z2p)K71)moOam$M$xGDyyssgC051^()=lvHKCV{FG zaQzD!-8l&1g6<6g?cCi2;&$Hi=mj@~JUS1)m{166n}DxbVT3mC_*=ovx?XVA{30Ks z0F<^E`CCEjr9k^&K-r_Ww!x?K*b6_fg4ziTCGH;JwFk#uSVM#kFxHzm@^3S9L^CRa)j)N5*4i?AiSu76K7kPd^0xCyK`792Vq$0{_L(s9bpe`(Q9Y&f*;}KAF zLbEnfKNB2`pz;`Oj!!QnQabO0%H&>NmePO!U)=u;>i2+`+_RJ}1$V_?FM#A%P_v_; z89Yu38tHqXA_O_l4ZS=C_e;TZ0PNpD#~^{uulMOLhujYb;Uo)u1D&q~o__3v9sSSW zqJ=nI2{b_lJ_H;TpFWnL(F{+1|1X}MUp+Oyyog-$=07+a`SezRM=Vi}$1j7QN@EF1 zR6Y4G|9d2RfDSqLVSMOg`IEozBq;j7U-)(;p(F(4t(mo;-fGZk9M#~XZG0Ku`*c=I zI3HtCX8`T2YgGRK|2$~tKl1TPo}K?Zn?d)#fzNsAwS89snhYyF;cEEp1;Yf8YnZ_& zsdYm_t>qNB!3;SU`GeN$|D6Xx=dL_tNMLYiek9-Nd%~mnmvjl};GX;c_j`0QgN~5_ z&8m6#n&^R-2mgQZlkf5W#@Z90finKqI8a}&^ZSdEz_kl45zum}PTvWQk3f!v9wXw>?K=Tf1Zv&|oi}3nnZE~Ab3@_+ zI+Y2U9s-@;*$$fRw*1WBDhi4|%hDNjk{+$MD@8oIYbSVozYSVzc*}?J|BLO+kN<-% zlIyPntwO2oE~!pU2e~!;?W)30G(Cfya8IkfYuY8 z3hK2qABlkGL&%aSP(SD33o%FVC{*)hO3*5Ot;C zJt%A&s7P%-65-K#4dKI=?-BE^usI}9mVd#X1ImN}B95TYYyQQ^-?tMq%MIEl`@)*( z@&A{g&F;{0rrWgxblP$+sPPdyq2aj#e=BJH4tPP7I>^@U+8Lmwo{axr7=WDU3(gP> zpz$4t6`*s!{)5gxZGIu)VR@Xt@A<#~kTdFEJYM(qKWOq7JTT(g@ZxYbsC@!j|MmRE z@g7k7{J0YhDr~B>Jr`#_n!g+0*34oTnO zWm@1>RxLNc9m8S)n3-!KW`1m9XLzC0`S1VBIbgHE`al88_=~@T3*@EF&<&oQ*IqJ% zr6J>WhL>QMsX+KIyx)EXElGK~44i>Lr_jEzc>DSPOVDCt(0YMxF9DC<(hZ5&68g$gm-U5PR%HG;;-L3dMvF5TppXV?W^h>`#=KV1#~gUta|^Wgm4oh$({ z{$&g3*iL2!1_tnknir?sz^g=7XMtwLKY8?;&PjsJh1&mp_5Z~x4p27-v~q>DJqtY9 zYQYKHTOjure4leZNWAlxN3ZF%WSCy&zpp?y&%8bXy2j~6>&sXFJ$g;2%?6FH9P;R9 zHAw^YNI`S4xBk3BTF(z2D+cc!xN3L_w6_hiM7Q%E=m0s7PTw1bCtut+{tFzs9a}*Q z2Bc20F!*%716}dhdHhAp-e3Pg2i!|^d$Cv^tgC4~P?6)&UBuy$e8Q(&<(y~ppa1+V zQ$dNl+eyHqxAullx5rxnX#q*Bx|}JLpP925>>T0<@i~^Q%Yab&t-= zFJ4ah_uscWmBI1b5qAET-wX^4E}ajWA25P11m8#1x|tDl6t73;eV^Xk6)&C& z|Nrl5cmQ-IJ7|YG=uqtEF9aS#Q~7sL(bW8d1+vu4qZ_n$=oKi;`WAtffq~8!$f^7kLKD1pd}Ujty4gaZ%}^%)}BP3N8@kZ3No+xNC0BtE2yUe+85sXq@)^D-8Mgv z_h|mX#^3S@93YRHAAtj;q^{)>e=BG|iAVDfR{mDd<&}^QJh)Wl6$kYigc>4KFSygWTzQ0K^CFgY0JgnGR0!FLpixo$_(yrP=@g|0jS0y%lsw4X9?m z_X1Sd9D6MauWuc{9bqha0y5;{KhN%34v)^#1(4bfd|vED(CO(bKvDFv6O{KSfK>K| zuJE|{52O+l-dqb|aZtkT(G1>RR|;C$0$x1)@(Q$^0r?3sxAda&2snFH+d^ zwBcIr0&dQ|R08=EKECPMUCIHfa8q{v`rmn|^#Fe-Xyub5bBGE{>m~mF(EtDcgBRK$ z_a`cn{(;)d3$6p43!vtIp zf%boAgX_E*FFKk)K~y^9B^T=YJp)G;h8Nn*C=LO&_Vv-W;1Br==3d5uDFKPC^l{`Yq}$P1wx zUI>8nb%$Suy)ez&*0{OP9m)NH8~0Q=>|1Y%vKSCbx zfaibccq;mOG#^R4>(M~#!qL~G<=|P52Ac8(RVkg|J(B-xu&qbayz(D(Q9Woq+DD(x z=Z2RIzr6t6YKy!k4W6Dny7^#g8h@j%TYGUK9kMHUIlx zV(8KN0h|`@8(#7__`=?U@fi60SIF+8*uxV*Yg%SJ1lOV-&Hw(Fo(H=gw0ku6Wy58p z{fCe?CcKa{KrZ0GmnJatw}8%@f^|l3gEC3CoKJTe2WU941$2%8Xq2t_!F$k1GpKI; zty01Yy3oKBQiE*d0-c@$yT9PRN9RFDNblgrO-Q?`HJ_1z;oD(G{ua=o4VWDGum{4*!0>-Z2@r#Wc|2EZxZhFLl8q6rgiyp#B86 zIo`iu{qq0+OVCI-=+=lE_d!*ru}9~j*V{lXm=hp==dqWdgG#^)tV4Ia*a8v*Uz2p~ z^(=5d47$#ZjlZ=FJjVDC;~0ha&!uR|6glB#;1IGb5Aw?19cLTUyr{Hd>kFbwP`RnKwKNO{qKM9QcFlX38IEQ zj~&@ZW*{}eplc;!exVd+knjVA9&~*WxY^PCCWGK&ac@=zh8J=XFaI0<2Q?X{{04Or zTvxo94IV&w4mx-GMSb#1@ZD%4jGeA6{H+VX>HPVN8{weY8&HFUe~RmDkLKD546gj! z{`0p?1m&)7*9nlxo`a#T(2}=5Gb{b9^n|^EbZ)l@#4jqssM#f zot{Ux?*h=>An!n{tXL~S+XhtlryOej;lMxTAjc{GRz{FXKdSj#et-j}bb*Iu=>+~3 z(6N<>`J!HDaB6SAz|6qVP&=D}ztxtRf#D@c5jefPm|YDDMb`;07lNA26F}n@pa?nU z3Q`MN?*8IsEmTF~zyJTiZ8GR~{|%tgyY5^8(4l^<;G@ZUZT}R2BEWUQ3uACg!F2(+ zRe1Uj5sp264h8GjRKinAkjw?}vE z3g6CuzMX%Lx$cSql}N{UK_zo(2YBKiB;Yy&e9At5QwX>X@))#9M8QY%Gw4VhP?G7q z|6&p^s6Yjs-UiYjG6U4Eh+P3HX_ulp~)Ob5xkBJbb)3~IlEZjC}cG#pY+ z>`nt6Dr@hypAUn>6p|9^KG=sXNQNR!Nk zfnj$Zi2n~17vT8WT>|32L-3P8{CjXdIGjK;^gf{eUFY`~t9d}Ro~imAb_Qrg_WgxA z*fX#M0-7g-Bn5rY-pSAwkQ+PiK|=V&>R&B5T?Yr^8&`4kZzj{Ms|7ZKh97q>p0 z{|yhkn7Ij5i2i?Z@ja->uU!EuPM&guPUL+8I*}I|X8&F!PW$)Yv-v2aujRYa9lo7! ze7eE5y#(z}Kx*GW)N6k7fL!YQViq?jt$;TZf;lZ6uGr4Uetl*YFB_m%A?ox z<1BWD7eA+hWFetd!VeCq7SK8letFP%Mdvf$&Oa|FfLoZL_(}xDhabG3x;qub2d!I# zqzj*Jkb55cfR2It|AG%>A7~*u_*~%$Q~&*c2|A`1+>d?#f*}puPF@CSc1+j@I-Lcy zy6VvXfCx|^8~pkIzwtNd!cYEI(As)X+&4oG*a6++y8@KX)_@v4U^_u6{e>>b3Q2IY zxdpUX05nff9mCG>VoEWhfGh!ZZX{d{zk!OymwJCdLrvd68U3XkXxoD3mq)1UNt^#m z^Y??+lehk_kZ=AkT`uL(E1ECL!_fKPBbjBF2jc~BUIw?n;p=mISugr?FdX*iWjzL> zVfC9wFY9JB{wy^91T=mv8b2MG-~7KGw85Uiqn9pyUF6m*%T2f_LeR2saH3j}SJIu75qC}sJ*fZK?Yf}(g+lX>xN@$B+Q|(3tu3JbyyZRqrf6`PG6g&a`TRxf zxBsxl2_*f2?sfC+d+y1|L@7NYE%|L_0*&I3NZCd?ka zuDd`dA@R#I@NeS=l{Ox|qBF!e7z_`9%exor)`FJj)vkE)^c6JrTo=6f$p$K*To-`m zSU@L`ukh$R1af%cM9}h+!;GGm_ewXsv;=2j(Cnj+=I0kjL3*GC$@3TP6aW2(40}!R z=#HK7k{7HNoc|!<_hKrFdU25Y+n{ip0Nxh!95meEzzY}9l}nxXU!2(kDx5=ac=VP&01udX zbhw2wqqLy6314lv*J(7zba7`7%C*4Ud|Fhets>>d=SgK&vxAD?vIz z8xcY4A>kbW2L{M+U5Uku%RVpvgKAc=Db2qa>$XCAvD}Xz{eQg@UcZ5Y^JOKtLj{gs zP<)(-2gL{EeqN7W+u3343@^6if?fR*bc8(8h$Gzp(1jW(n`=NGu( z12mWcu?OXThDXrtbv+CW44~nROCHVD0t_Wy&How8^GlOK8*@8d!H27rn1OGYZUyDt zZs-lu${r}UQ~QHPOF_GhU&bTSEvgb7P;7#u<|K4q>5Icfpbp2e*K5Ibx8b)JP1-CB zFL=ZM{eMyM_7Tc_4fxL8|12f;pbL;nSv^|+muiH9JF-t-?5Sm7@aQ$Q_vByzjc<0d zN_&H62@DUsIQa0@{|O%5{LuaPrDr@knGVC!D`bByXcr0SOp@O|y~Pq9&2KnfoJmBw zfV^73v-2ouR;3s`hSvh>MuKKtJHVx7va5(E|N0|7mOpAFL8$^Vh5|dj8aj{S)A)59pZgA0?+eoBuG^hl0=IC=~#8x9hyX6-W!Hp9>mz>9y_U<6(HQ zeFv!Gc@J92C*ua5I^zIcG;#^Dm=?U_9ct~%n!`*Cp!&vf2dG2t(RmSE6uf`ok_*0^ zu%zBc^8;ud&3(|2#QG@EM(tV=@G(fGAP4;Q1UaBI6WpEm=r!fz;{nYNy$GH2|Nl#I zaGT%ucQ8A{3z6)9|6f8blLefj@-VzuxdG%_&>BdPgS``8{(lL&s14Gda@+%Q z*Gtfvd~kaVWT}Vi%m4d8!XCZ0b9s3fKn=(v+d+mr1N#khl*{oKiw-e?oB~>D@%_O6 z|KRx=k8W0DU(mqcBadFwS?~?|$M1tC{J`#l$2VlWzgyg+6Yahg)fW<;FaLLQ`+(10 z_vkzx?HB`@)sKByHy?JsGAKJK#DMeZd5ruBPT3xvPobHTqxFBOI(QH8{TDT$FavG< z;f4xCgK`pRXd(8;$-`+AK$nuUdUUhBJ`c+WRT>!UpRt%P4mC~&X1*9Gi=8|SGEWI) z9`t;Bk8ak3KA=(4dmwr6&GD7T|3UiOhTmTBf-FN6uaNzQ;PFG)d0p_GlOEk-(B)N- zwL&E(FYdd){BL*?wA)bvlmWmqo8SY&Kug49UpmbD|Gyh_s~&>^!|QvH_y>(I-iQK+ z;{i}Qg~v}gWDOd0JtD^o;Q~<83^Mfzx+w#55$ZzF>~)MgNZCcFY~=YP@OX6ai$7HipfwVpEbtJ#^R+Y<)Rqu^2RaKgK>$2F zbsSVVd-j&7Futhm|NkH6cNS3H0gL&eM8dPTjM4D_i|t!LW%prhcXpSA`L=#5 zndk|&{S)Y1Xs$Pp{=aU3wby;SQ&c37&L;tR?nDGAd|tPM(gUde^9R*`Y5)Gev_PsS zdu^LR;&ame{eL|Nkz#SBpXTT6{H>P-A43jGJOyIFZh~dyZ`~#M`2UNIx!{-pwTW9m z=e1#`u=$`A_R9sN44%U5U@6QFv>XJK!a_hPEM*ofg}H*#mq#aP$Q)KEhkpjmAwt3% znqCfh^xAIngQS-esi1~FIJuT?hSnQM39i!vl;BEMK+Hv583Za3Uvz|n!tW($h;hP; z-`ODN9(kz;4mm)CDS+oBx1zaF+0c#^6DfH?&@c*X4^pf!qw%-}f0i&H_G@^w{x7)>zf4%9gda2-UwZWQ z6=*mi+*`;1I;=&;8C2MTrih|pZh5ieCa5}q^j~1<1;ssDVE34S+~b4f9vi58@{!#G zE4pF!xBf3Vj^w`kVE1i(eZ-@ib%GPjE$1De;qpS~Cg%9}OYuHXScB6C%zYlsZ&0RG ze(YdXU^oD}z!?-Go;z3-8V-1LmOcQBbhF-d16fu3!lSqLf=4%lM`!5=@O~PPPS+bR zPB??wlA%9RJhY*$YiZE!j9~jfGpwyU_#XfF=(Y8U;9z*Y^u^D|XyXN-`T!PQFJ9k$ z^dA=J9-YU)=W-xbh*0-mgw%%Mt~gp(pxa5H^+1U^Xm+=^_5f(NT*st;kVT)Mg$U9R z$0BtF)WFdIPoLL4Izg9Xhwga6;0K!BE!_Y*dHMDF7mkk~A<`SXW%t7BE~u-9d`>6m z=qOlu1aWV#t%yCS0r}K1+^5&}#m|5L9m9NjP474V{}0-B0nR)g-K_PlpthyKi|rMl zjdHRXu2P`3ibp5&i&6v7!ctHxBs&09HXeTw%n1r~RvxexYmaV&7ZY1Rx~x5VO{Y8l z`~TvSBWT^2HF#ybN3W1 zpI%kb{~*(0noYah*+CaSyr}DgXavoGdGv~&KLj32Jm|sB@FE$kQTNV1P)`f4adI+9 zaub}QRtw?5Pc%cUo_UIKY+5i7POv(x5Mq!AQ;Yp8P(c_@;xL(s0;p_}A ze)pm{fd`bIdQD#%b1=MkfGYLy0N8aWZ8;cT9EC`E^omCR{s*_HMwf%(#VWWI=zK?* z8$NWfGrZ`BNI}I!1-$-&7RmjwOZKN*DHF?5$vc> zIvflyCZS3hL!_pHI`ic{VD|=qkCL$lxx-ZF3&g!K5M3bmg4P>`+Hf$u@IZ*Y^5`|4 z5YEBi)2nL&iWgmk6iB&_4M@ti-Rb}T7eWvzSWq?}2Rm)kXVCahH#h)bQXbx5smZSF z3@`4WO7$9orEXbsFuXX3DkbCrmO2ZPT81hWt_PM{2a@WBNcnU=f`*^zHdl5ApI%jk z5O#(axe!@U5Qr{J1&8Z=kTXJ xArW9T*I2f5r9A`Uf5bYBWs%a0azh8IduDQNmw zTnUyk1-XG8Dg}+D9e2P|N+78>T_{0edkO4vL6Fo%R4Jh^U@1nB)HYP9>7ac+y{2!h zI2c~chDd>Z6yFEdB3Q@H@S+(>yd1Q}tJjp_6Fb9;Y?wH>hbFqFk;L^uM_2cndQW9%c(EBt+6!#hJ9=hi942{(wtRXOPb+@7gRn8BoE&4+-rLnBL7}fn&E{O zRNe_B4>}dWqt|vFME*EPo(n3klnZKLSi=(aWzfm8y{4TIl~X|~86ZxEshD^H97=g0 zM?UQUhX_oH?L1g21|)R~RciJ%u#^u-YCWn{z!|WV6-a6ds?=7{PU~J%b&ymgs#Mkq zur4u>R2-^Q{Bf`pJ4nhIA_b1$?{;AEpB5YpFSL=w&qKtYg2aU(;xHd=f#mUfIqVEC zezc=__GAV)_HKg8-@6bguq_W`!M0QtvopLniX^TX3s&C@vSlrjxZ_8#`a+QSR3vf9 z1hD!Pka#VUc;h~>dL>78h8L+w;w!=T>zE3G#C;*+Fkkp>1snA-ik;zw5k$(PS2SZ2 zqVDT-U}tzC4v~WCT5%h!s{thSrw!tFXbrp{{R1rL?mI4UeQUaU{^<)b1=McgGxbNeI2w5wAa)FB&7|N0vYDfE9wK$ zWdxEEK$TL2NXdevzP3Vw0jld8Xv;;fDF;aE7OK?hT(C3tYjZHX*pDj3upTV67$mg> zA_WRH(TqZ{_ymx64@4Xm6`;$cJ$g-lRkAa@D1=CXwUp+Awe*{DFuaIF5?`AK7B2&d zJ0gj*Lc~)+;+ha~SV+%;I5-d_#fK`T50P>KNqvU2_FxVZ0bTUgYia?Kx`8Tnb1m2n zG9anF5Gk;mCxV9Ldri4O;!7doFw?%h1Z(*UN>*JEDX^AzpmQ^NO`n3qi;%>>rGc}; z8IX7sk~kkk{T`6G6GR;5&C6H7R;&a`siR6&NP?y2f~0t$QqWqFR|G7z9#mm|Y=)!( zsMI3Ry?VW-WguPGpi(gsm83bzbeS47!k%4LYbq;L*1{-#U7k*GFXuj7E0ZZ|L ztTINGY6${MeFC-PB_L9u((0K zUqlkW3YxR;HC+o*zY|Hk7b3nCB)$+N-fIhHU(I{^e;?>75|3V6kS32#)?bR!3@>6+ z7#Q|}u0!$YwcTY5ZUlS+iMytN3tdcKq{O;rgy`ucNWmu4!x$)Ad59n zr9550eh3Ch@q(pfx0!$jp??})^60e<`UhG;bI;>AGpI4~B3qf6!KV`>1=^c#YY5U6 zuFMP`xT!CB3tA+nVGbHRu{}`=x)Q|TMPwEzyksAlfV%X@!Mns*kD5Vxp1x%uIqMfk zjlrEq=(q)V|GpDwU3l|<5&jkrW(EfE9*0&j5DPToq6|8>(-dTe#cOf!I9uy~$c;Q6 z-K;mjhFf^_n%+uaXLz9r_7k|NGcEYrP z4$$s3H*OQo5AjFvSep?p@J&KS`7{tAyp2B7o4b4t2Tml zebVD#c=4_d?0cAj@s40!<*(QoUR;Jqfx-(?{Fv@GWoLM?2QKW>`3;<0eR@roKm7Oq z#Uh9dDA$2@nW<&6GrZ_S72E5}&hVlNCg#yAS_c|T={4oGU}t!d1Q7?D>Cr3dYyx)X zaybr$7w)K15yoICFE7ykKUAr`puI%BrjtRQ6GWA2g0wU1K~mppA^wK=Ow=88E=aFw zE=cM&s?;4wn>H3CbpRse)A4^Hph^&Bsyz^i^B<6hmYlKSBM@R9|x_y;mR=+VupX#^2}1D+r6X1xhj z2fEG=Jpby^%?>(@K*ZzV58mbn%;1yUVCVgMfDY>FbzxwHj#q)kmtGzRkHv!R1&yVF z#-_lh*u41H0Gj0j-J}c}`eNAe3ba-7g+(N2+7{v-kb2nI8+cW)31|kz>=0;$FSkeX zg>Od_N{v0by#+kFSv4RI_h`LTq3O|U%6OTR!SKL~T}MEsegX~H_S)VAg&OEwc8`NU zd7B?Hzdqs7Yr5hRSmDGYul`Q}*$0}5fox!T5&P%u|6QPUpB}xYJM=gp!(GQ;l-+#$ z->37r=W!Pm(EU;jpaEs3t~dW*8+IOQKEUD094g@0>B`{KZ3LPPumnw;?9XCg*abTO z(gU<4>e!3s7k~e^9w_y7>~>{n{-IxX%(FX`!=u-U!?V+s1ER6?IB0fYRn=S2fFo!| z zBYPS?-D)14wL2WY9|3J_=5KKTt%W)GhTpOINxg69d(Y-ST>O2n!DscdEb#y>;Oqk( zWU|`<)Y)Xb?O}Pi=7&dbHKR{&@xK?Rmw>Oy*$t{vJv)zk_qwPsf)|AR2W?;V?M)YW zA+Z*876&ALJ$qdRVB0=QSv;e8(&?&K=jr^eC_2`b>;n8i%Dh)bQ5WE+WDHe3co#|^S zkjO94Sowz-(CuzVG<>k!+w9YwCh&4UXrJ6ZI|c@Z{f-O_4B!BJc?+~|1->2yoZcX7 zIY4`*I9}|&2p&HLMfZga@Z_5rC>3mZ4w@&p@6mY-bk>Vn2{Qxegc+6}k3a`>aDaUT zx=RY25@KJvr9Ax)3K4LXt9gNw;YADhY5@oEdocZO(iH||+1#++|%K!iW-`+zJd|H@CuZs{PI3geutl)Wm-|kWY@c9Zz za|NJs8B{*DUV>bMgB&j4o6r7$vL^>5x=L$(y2}MX`_1}5he8|P2K!vWv%5w_z_Zsy zMc~CjvoD|{${jtL4>S5$elAG?ZAOap; z=)I$mv!dTX{m0+h2wLCQoey44*9S5kff!9hP`@3tz1w4D*1ztq`{|wr_T>|yz z>yjAHZg!u}kKh?wkT+RDdrGnS(;ebXNr(Xuf1)_sg@M7d^Qh;+zr2pkPnlm9g9e?O zk8lw3A2{AZAvFeg5zTZ}@M&_vAP=Mpyp{*egG1{|%fq!gpgUH&ZEk?#=|xW+D+4Sg z-uASP6{zI}rN`IzVCfEgJ~HH9#Mr}W6JE?Vgd8k4ITCiT+Ok~tPs=7aNZD0n3gPw%p9s@$futWCHmG@B<3%~>pwC{@06tJP_8wF=gU_>4 zXJPQ@mCf?_0=dBmbo+a+se34>J8|oUarIM(Fu1IH@6l`8t@utzQM5nXn1G#vfdtdNdyp@as1D0jlB^LO>(2t_M7JfR`#WFgW-y{^0Kb zt<&)Cjj?C+=)4cQGW5lZ1EBrB-$6zE+h9-;`VhR_2;|?+V~(KRqYN)pPJ(Wou08PL zcR0w<<1ZG2Y4AbIE5Q1}OJ~;xGcZ7Obl!yM2i?=l@Z#wSkapJ{o|eZ;Y`}G1H^a9h z3Lq9g^uRm^g_q8Vb{S~-?tueOK&9i$5U?;P2ZECr*7^-}e}YGMkbp;L=nnAmCTMyE zm1l@JcZ8n5XaQ1&JP&%p@PNm0*8`v)V(b5UDR2=Ap0Mq_|DuwG1u_5a(p&%Ev-68* z@^PPTontTdf^!ysD=QPIUBIH^2swYR({+Ol4}S~j!~)Pp%N6XUoSB@=gahPDQ1R%} z`TK>yr?;Tp%pS)bz>P-Gsa>7NLF;W_9IJox->37tPx9wo%R##|dQH7mI2c~=pMMLw zO}X`Ui7PBWdUxCWd13wl)EGDpYIW|32DK6RTWcBN&C7cr=d0WUH7_B%nL&xp*YaQK zVbF@+7f}VEw(EOP>YINH(Vp~ZuHC=_Z&8+%gRb85=&s%HA_{a1cjsZy^hxLa7dqfO zy+QXNnBEiwonwCg#miu3h8If|Kt&#Z>l{#<5OrlT3n)8boa*9n+!b`)GQ-QKDD5Gi zZqU^a-(P%j2Ia>x4#^%PRF{qmZS}$z)&G7$=Ed{I$FF`xXKoJB=hA*Q)3%I)( zAm=!U@V6fM`~SaV=Y6<4A-9IGI;(+(B|r--_?2Pp>u^xVrJGd)E_Fi*CS|kZ)qlg= zFQxzf|Nmma;YX1B6F}#ggZ5W~GYV4U53v&xbZ|Qdvf9t=uuomM@ za6$Sk+N0Mt{KtRrsiv_n_ga98eisIK{q4~mEb#g$qJ0HwEeO0`ng&acp!^O#pPxei z9MOaOXQv(s{;|R4pXJ|R{&{OohJV1(0K1wI z)A=3Lx(2OGwLSaxzpv$=(i`CA0Hu(k61>j+#U~fgxLGJ@M;de$PL&62Gbya0?7-l0 z@I8O?^Lp@NE>Qc}1C}E>_*>V2b12fDwo(g_2_UOF@3}y)K>!=|Qq=);iv(z&F=#Ks zH&BV_qHyoVN>ZfrG{huYd}c&MPl=OM{{ua_{?#xbnyU zL5;i;(CKSOU;Cs@fMq?)!?iI!ogX~9ZEpDV+JIZzFBX)rGI&7h1v#J256BHx7ZnMw zZW9ZTJEOuLgZie7(A-?Q*3&vhMWB`sl=CEBuY;x!P`evjzw<@4I;4GA><_NIIY7JR zQQL=^@BaUXgwp+>SO3A=?b-e^gQ{E?#1&bncgu3TP|^AFAGB8T+pz@xmgV5ExbAuI zKd)o+b7pY6DS^KQ)FATcJO~|H0i9jh3c9@%6hL_bzODc3IbZvEcC&$u@#%aC>U^+x zcKb;*JWGIdN?5?bwjs`K(lG1EUa{%w+Ur68q#`H*qD=t<@XZS7vLkx zVJqK|dT@yTEUJ3&VHb_u;DH3VHgG=>R9=G17w~#l&>02b1F98}8%H+`548TT*Dba8 z>3ocKTk1Yg_1b(y0d*y-3j>2oZ~1@E*YpApXs-e2 zFpc-1!%IAlyPg2moG*5Ojw%F=&_I3M{Evmd1=P0m=(Xk3WM_D>yZ}^tAAb?=`uhKi zS$iJ+cj^565_FO$BK#b~;r&8zmhgrilh0mgDls#F+DgqoSW2CJx^*k1KqFkg zA@}}zShHqwN;8ybK{J*T)X85IL1QyNSW3a`pWFU@2DNNGtz8*P&w>(-PbchlZfO4& zBKQnET674Jq+arPGczDXIPUQaV-3(rs;WmgK#qRz*?AmPLgv9-k>S&AdQcMN?$>a4 zZ{(0>DA9zvTM_DR8<-BTyU+cFx|^-^9K?k`5N?C)3j~#K&p@%7(i|(26pP_ z*UA$-tXVlh?$n36QyuEgDKO=F9-a4JsKML`3SV$K_vmJwC;`rGwo<18UBM1I&$sme|CEEAr&=zR9{1=L@aVh<*|Wl4y5rk1g%Z%>ThMJL2Vd}m zRunfss0THPAn7^UquW6MwA>zYqY9+IyGsLfIvsd=tn(>owE0i)3t>M{vlrZH`T^Pp z-g(5M`2{2BMALF@k8WnrXjyNy0LXU-AMrLknGd-I`NbVu&~PSb(J{zQ&^a{sy?RZa zf;xCF8kT@|WPr{PEYa|21lxf*_hU4aKKBtQq|9C&f+>D&K^F2r%rZ6BSkCtfrc zgSrs^eUg9g+6KC)x7U=0{d%~yJ^!hi@`nME#fQFy@`yUhlpke9m+5;ZPok4zM z0JS1?EI{q}at_bVqo5)Fxn7`wN$`;XmwZ8m0=To14w=pe9mwO;3GSI}6$c&4_x?q0 z`cu$k7RW2mo^$yy@IAj{^YeP2&RVFe`m;cL9KrGXLRuJH_^U&%hJp+nfouE2V0loS z+}Hr>=O2HW_#c!IUxE8WOOja`UZ3{pW=)oa^>6gWU>Uc3^()Xktp{AH9xfHL8l?tB zE+0Gpdvsn0&82{MC13Vve&Yc;Qx3VN1GS+~DS_%6*A?FmL$~hnfJ&4j7eK>TpmS+K zmzP6s8MyBVPUZ=gCN0DP1{w{D<_6vJy>XgqmX zvpOz8&Ty5b~wG{vKv33NuW zi^sti{Gi>Epa${(Qb+Iz1L*ie(5OlZ>{2fNR?tnO9?eHQz>RQ};u_Q*?Jg4V==|W? z`oCnqWAlH;dLhs`86Mr1ps8%g-aZ{rz3tNZ|3$%P(2PSZWIye*7mY4(f40ni2+(7-5*M|ZWv3oc9WEXV?nUeo`e z>xX(nH+Xc$Zt&=~@Hp-YcJqtp%Ruw;r8_*D|FM+DKy&s>QP6pV;G5sOg9KhLd~tCL z=)8l{86Lg1CcoJkUL4E-W$5ECDs5l?fAJ+AWJK)@P^Um67reZl|2JqP@7Rl(P<4T} zuR*Ks-zcy%yl91r+1jGqo|p!yub_P~@LU1pPBouy)g(q~h8MjGpu_{JYayeE$6x%G zghXg*tWUS8pO6#-yuNj0#8Tg$fhi9I<&3y*ptwKoX$`7xyIIc*f@`qV!mx~xx8fD( zC;{*|@iEYa;Gmlvzm3!8=Ou4VA){GrN_z`y{Sj;qfAB|gZxFwjQ0ujL>9 zR?v+Dh6g-*{RDhlpVUjd{Ko*^x&cZj%?B8LEFbWK(n%;Cp>2OSpMK| z1s&@T9`by{{DRdUG+t-s3(|KGG>`WH;?36*u>AQQJY`qn?*W<6d*IV~5Nd;;f=9Q= zL62S=&?Y4Y56jD?mpr;_EID2nfb45Nf_yyv1Ygj++gYT2xXni-z!$h7`3}^t^zE({ zcxeF6MWAjA1DFpwIUckggdfyU`w4Cmm>O^8WPn`yS-9-gf9Ozsi7l+3*Lm0zdWWNd zXY(-u&u*J*FJ>$Tg@foseo#pYx*9_sY=%|mA;SYNw85st3cNn<+g+yc`W#Z@667v$ z-vD&C8+b!`w;A|Gz9di|sKmsh^Ml95AK+Q=3Q#8sG`JHE8{BCtUx_W`vd`F;JB;nCn`og2P^u-J1|DgR= z75cEkNX(-or1(EI~zU$jT_VF6@Ok8a47&R_2T2d`rQnUAPyL7@e;iNk~O zLj~x5Ign`{pqoZcz68zZ!qQjg_ZJUVg6h5dAO$BuTX#Sk5<%vHOaZkLzXXF^3b~sa zbO87Zk8Z0M+2CD>mFgbd)f}LULP|_QPI|G$4b)3NA^;wvLvG)7TO&$xr5Arsf~qkW z28I{L>7a(BGw86<*L#uj7idQ=w7Dx?a{k*fj?z=04sma|Kq-qycesSd44+PwL!h&E zOZ$CWpOkcgs=RA$piVHtc7%Dz{sFDA_zgMt7#azn3&L6tR3yXeS^-c(hyXhhnqInv z;q{4h$wQEP?ttAB40ca2vU>zT?t%0X@4s+{Itg4PT7(=8D zcF?({psr-=feK+*0uhBJ5D{5?aojZZ+G_|n_pq4WKpK+R^?8Qrc+S`U=E zVAQQ1-K8^LtTF`Gub^=*$Q^|IttFr_eXK142A^)*iN8SWZ9vED{Ci<545__J^uY!1 zJ<#A>?Gna%0nctW_}HQV69Yqc?GjKk;f2p@(Ac5_gHLzvir1QH6MU?7BY#PO#|^>v zSe592Z?by-;;|6KWd7Eh;D*lo7lrRZmEBQ~ZdP?}(72&S>7nM@C5-%ipz8>Il5>~% zSmw^)@7V(yzVCGw@awgC3+ncOCM;g-z{Y<)x?NXzb($!EN~luEC=Dn)Of@Tst>!PC0-v&n*a`1{?<}ZX$Cr@CPONs9ksHGGk;qe`O7;OoQM|XsTN9*m9Adha=lf0n%1T^#Dzzu7V+?@|ix5(q9 z5B~oD51zz(p|={;L}Tp->FhO?gKJwhA9S3$t)VbG!wWC1fB#=EfW;@g{0Kvg5itCa zf{YQ&7l5Rp(n_Ch-A^2#TJrO2b#TAJ!ifE@HoN0H_-76&^UodH)|dT zxPj%x1@jLt+&|E9jqfkIEFqSboCnn}E5MzE1EumF-K+)>-HLGC=jVY!16-ebbPGT_ z4eX^?p;bSq0}mM=0PW5d{{R1ftVieZmt4EB-7oRNSPWE79De~io(HV%(N56%7FhT| z%P@`?+)#CgLFu!b``gik5^c~J24sC1X!t_I{X9ow%jy15R$G5q#b|=h!(D@zU81n4=3Ywz00va{bcu^|~arIOY zW(JR5%!I_>a+;BWfq$DcXzU++Z&kx@W&Tz-@KnP07jmGx$vTfi2XtHIK~2zZHv!Pf zEsy5f0}T9qF^mih4ZoF3M0SA|czN`i8uNh0m)^fHjszXM_2hLmcMx0{4Vx9FaMziuz;?( z?RGujX?cXd1$3U#F33`M({*YP(>6zdOmi3T{LT()KZ6>#?h0PrEDyYTdBDRp9-zyH z!1Jv;UX+=Dnm*tO)Z4a@@ek0kcOXZfwt?_L7oCD8I$o?&ggc_X_W%Evrl7tyeEk-@ z9q4-C&(51w9WSq2ho2CWf$zYDZ$E83&ibQL=X17yewbcx`v@c&5X z3HfxshlT7a(7J>>pw;qV{m5N;r1G)XHk%*RuW~){qCpL`KhyQZOBqD_7oJ|gUz-vobI}Wmr#?$g>tqrx zc>y|M@5QlNu+R&=Xt#uZFXk?NgxnfJ9{+}qlz^IS79QR9 zXf2oT$3eY6{+3suDS(6jd7Gazzo=XN7PL0h6>^4Y!f#Nl9eW|c`1-$N=TVPdXHd>v z@j4c<{>anvIDapwfCRS+zQ5?51_~&UFIISUi~MkHeOnR%ipOIh;uPp&5^yA@@#h@m z*L2NZ~wnO z333ne8i7(J(5)|!mLq6{7cwRfawdaEceTJv5l|(ZwB*r$oZ*FX4iso{33v`79aMgG zegU^lSV6r>O;B2m6!-!fQ{1(j6MAIQ3r0`_40M-B-waqe>(OoJ(fI?i7=XR>ga_D@ z{4Jn+)u34(I=9*aS`Y}GwFJ$q_JbDxym-12ywtJcs~&=3X0c8uqpREdTsrgKs#R!z39J)()R%6b5MEs^7?a7XA+#gKzvZ21T_D2 z9o~fi-!s|y+oSOf_->$1@I9VBo!~n|TMm?H@@uw&I*u<@)BfT0+H7kp!xQ$8M2Y*FM^FMUF*?ny7(EW?{oi!Gy@C6>*X)5 zEC8KR23b!G4nOdD=-^eWkZvdJmQHY(`E-KA%crv!boNBcff6--%~nXzfp#qZ=hqBv z;Ma_uz^|FQfL}9r1HWeJ0e;Qe3&_Ez@&EsSc<_NjH0Sb5l|^BX9vo?QTYw8RiRDt!Ni*?-W;EBIPw zMA!vDuc}0Z9cVnH*R=B~BxD%>Gc$n7wgyly3DgKMkOxgBfbJJL44V5`Xb7?rJmGQ8 zcP z!NC>Gq(E6>!e;+6z`*c3{gU#9Y*uMP_orCoN-9q)i`0)2~~opMn!1hCduK;`J z(Ruy_(*n@JK?hMRNSgq43(TD_-q?UzbO&E1f#>F)?FYI4#qzp0|Dp9ByuN~r5rbMO zpCM6L>H>{19Z-yU^cD*=Kd<+I#+vT2NB^UJIv+X4#J;>K{{>Wu!^ZoH6+msQ*Hxc&oq)}s?#tb6pjZh#g*uB}h% zVq80)boX+A1Lc!XcQ3fO@7@Zk2E2Q1p1oFpwXZr)cr+j4Xgw&Jjj0xnkfX&z_)^Y@#0_b8_+89l?)6FOreud4v24_|`% z-H`AHO(MKLkLcflR=m!T0}U>*y}>C3IJKrI*-2Kaaec%^mg|2lKfZI|6< zpldKL|NsBL`88uH4>+4a(+}v_JdV!$;BzITJvtA85(J0Qm;cSDAV*NW_Hq&hv%KKLXn7-kOEP$N8@`yJ_w>I< zx9rJplAt5~ARBpozJm%ngBLAUAUW$7f4(y_`1GvRAAzYv3nftDcjn#zK7n?PI&+MNnI zLx>L~_Q4tKM6ih>prPYl)8BvC7+&0fiTiYd)Sfb9XLxbM8MGf*b?z}xsS4Q-{9Xt& zvhnD}N`!LIX)?Nc;NyLQumAu5q7NqJ(JNYX7VKsjkj-UC;=kU5#f44S8D7Le#65aN zL!Ked^l;(2aEb6wL1iRuD$h;d6DNtB}4pmbA2J$~d45nNavf^wy$TKS;QXu7^;OYj6 zO@)YoSK@=`>10>1gA(Yy7u8Nr|NC_FUil%(;L&UQ>;XGCDYEK-f|vD|5<9~Rc8^Y0 z)5lT_CC1=^;TF&e7Z1>-4lVB)85mYD^0yvmWMBa8Cjjw1x>+xP5^%T0YcWv23bgHR zI%r6|n{@%mj&2LkMd@F`?y2bK=yV`q4=+Yu~11tbkk+cU0%rI&)DX%0lX6iIp|sEO5UdIA(DwGinrBHYWNQC~o#Dj;i1<#h_$#pZzTa#NFHSgsIvt>0 zz~K1w=(e5qP>SKjMu_sRhf)lnwQu0CjP~di-FXe{X#I=qNTX;i4zPXB6&x?Kko%>q zhMz!1j>SvR)fy8#x>-HHLijF_`-@qBLgh`M{LC*9dC(1n(Df|6wu)as$?NG09c9oO zNLx8Dm-X2LDTWu45Fr_e&}onmn=%7KtVbv7wg*xSFL(X|AEFDXZ@bw&JAZb5bnN`( z+wCaOTk&79XO8?=5a(FN~=fz@Y>ACEhLHc&7$A7eyT>e4OY+IqY6 zLAM8sW3wX*W9!LMR>x*X4n~(w0guiA4p{pG+&+T!C7Rz@_;l+sew1WDuBmSr9`J0g zWnkcMnGdRzyKNVM%IMzE3!t+JV^;qC50wSAky;Ow*!py*UI1-jJNSabvEdI-i5_@z zlGV5MNvR{KTD(~dTIP2XoGop8rh!ITju{?!(YqKleq(q5}9xMBr0w;UKi zBN~uV7m?CU;Nc9zOCBpff+k-0T@JlIO7_y+wr`vWnD06p)p6~>1YF8+!hY!#k zEe`hS1g})fXa?2uM?j@TiMVL5N!yG#yGn-&n zEBJKl+P=q#L(rA1pu@RaK&=nM1Fio{iY;x=ewAb>%J%5Cz4BF(q4VCscbwqHvqEV( zc%#1MvEr&1olTGbgZ-A@`1n5~Xg}IFP?M(DB<@8XOezGH9zn4z?a^C%#RIhHP)?7H z0W|W1a4%}?I)R${;Mj#Un?URPA#12Cj}^5U9(cV0WYmlA+H4FU=eOQ2d2J~x`BjpE zzZo<1Y-} zy#Q^oe+uf79&v`9PkYmrfx&>G^gKxP9t-GdAkY#GnJJ*TmH-Y=`2Z;o3=h1hZ$Vky z2I`-K?GN+pyarmCc^15CV4n#C0|RLKMF1^Vz4)&RS|a%!v`?$$?F-OIZRfEUT+ARl z@4pcG#l+y#nJj_GJ=s2;*$SW>bRBeTMYpZQ7fA;2fW$5EE@o$e7kR5d_b=G;LnOdU zd|#ZJ{T6g0=JYR;3~7$dHYyCD^AM0OeJjoKXg&g6hzc6;f#fr=x%Xf6roH+9x&u_N z_10c_aX*{|G-C={tJ%wH$IQXt!|(C}G)C^zn}C>;^yyBJ0L}cfOn5zQf=93I>u+of zFIf2g{eS)L#oj)&{wO%SLVSADCBO?>Ad@qoBjwXUX7INz-1!K!2y8jXj03#?{=b~C z6UBs3(76qrPaQ)YLp*vzPk@41!=u~w?>spW1U7yH3J3cD91yC6C_H3m(Uv zL4!^V9^JNOpClO^o1gOebf#W-(YO|3KPU!UnLziEz66Id=oV+uci=kZ#a>Xmrt>g( z>E(+Fy`UZ;=)mw7SHU$FQhOfcQ3=rEAO03lxr-RWw)5zXm+*juW2vG?>uvtl!X4l+ zO#aHo@S=w2-~X2hJK*J?M|Zr$>zl~=6MD~`Na;3@?`{g9lC{(be3?M#1JGif7rUI_ zfG(VU;n5xXp!GnBn8$H9uy?_C555+J_9HwxufN!!{1`MM2R=O+Rz85^8(iN0a}4!7 z_>Kj^#i!fW_LU@qXR|#6^q#_Q+czITdF2&oag673(0xoGrc3Ad7r%f0 z{|`|K+FuSTtl%Sh{H>r>y2wcawon#yZ+h*K7w1DjJCa3B7&t)L!h_%CkZ*5|iUfG$ zjsgQi2`gxK3Fs!)5{n5w-L@-ULLJqb4Voi_%!~Kd9(f_I&c^T(e3J#JzB=;axdt1< z%R-PEQ2tr{nT^4t({;y-16<(wyB)7Ly(sMl#UN680QJ8;_x}I?AGEK68PeCnC~wwp z2Mr#81{*y(Szo=EWO(80^9EGx>{bMwN?@k&fB*L{k6zm^3)vZ7{0jZ|f4?A9fiF}6 zAIQ zxz%~>MI2NCc%ZG3KXFVWS|NJAweAhQm_J~ zz!0hcRNi`Y-r5H}X}0k{8^eoskOD`jf?J@&A3AUC5$I0#j6 z301*CHqiJCNWn#@f{joGpk*T-y|zZ6<1TDL3LZigOn@qYM)#~&Yz!|z=WXx*2vv}e zs-Og<;CJA^|N9wvA?1S~s)7(u@BJ1?fgn_YE~)|xkb<2c1&UAwJg5p}KniAn6c|Dk zyapd1aBClAK*`qfDLcc9a*zT?sDe{a1<)iX4N?#WQVdo_4*co1!f)pe| z6?C8~NaqLL&jV6W2vv{{RRAqWD+SmYUVIMt_kVvQRDl~*0W>`E2L9-!f%2vU#_Qg9He;1E;+)QZd> zYz!~_KngBG6)c1*fI5-|q(B#>;2~5&15^PtpwvJLct8q1LKVbA6+o?E1Sxp!4@wW< z-BHJ0*g+LQO>hQPD5pRQ1fdFKp$ecTl&xfEc(D?sKoP3o&sT^yp(a>yvopNt04Xqp zD!2_*02$k|b<$vGc##fL;0RT)3#tGbQ1YOhRRJSNfhtHrB2+;Is)EOl z*co21fD{x$6@;TII0{nm*bkH*pbE@T6)XoSI0RBK5vo8GRY506!9tLNg-``wK&P2^ z!jpYANI?Tg!A7Wp%cu%`K?>qQ3JyXQY(iC_4^m(UQg9KfU?N0;;Wv+7+lio&MFo&7 zXi^N+vMPqi!pcCd=WGlw{`>y>zkepE-0eK}A_%Gg8dJH?*ce{i11XpVRbU8J0J_H0 zqt|x5JUhdSy&we-p$-s$Du6aWCOib)&j3;YItv2ihWDUz+dFUV69$>sYg-LcPz_Q5 z+C>Laa1N>fYDFGMK@>;<=)O{r0?_^2pxOkgAQYs)5~N@r$jHuPFM6ORh=TaNwl*LI z5+DWOv8>KxFS4Nu#32d{K?=V6{QJLu0Z5?p*b6VH0%(n<0a9=cqyTho56BIgPz6FD z4ZXIKAO%}N3KoF`I*+~JfGUsy@q2B#K?vlCr}YWFTkfdEJWXsyDNWpvWfB*NdfSTY0RRGO*D?k<2Igo;}BwRVoG=k=QTJ&%gj18+v)<g!PY{-AyUWd5o1 zDQLYbXb=F@FZS^01Z|2dU4T5^a>DRHbCn2ViJ2p)mju5*53R$upA~#6f`<#rk$s@? zkIw5JotGUu&%O9{`vqwATb2C_*y>XZ;Ac?|Nl#`|Nr6c?e#d&@Y9aJ{TXPA0kqp6bQoj6E^uji`H@HKr_#L* zKc)Fw<}x!dG(Tc2kq6n}z~AzonStTB>k3fh`Sw;aI_?FrUMo!C-*=$-g=6y%N&fc9 zj9?|86yn=?-f=IOVfmcDc>xmxgCqYw@rGaVCCZ%_njhS6e&J{%StiWC?@;rP`f~o4 zbxg2*WFU1&N)-6F9cq4I(ENk5OcbPDp!rule_KBj0|RuN0KB387N}dk==Y2N9y2@{ zkNa9aFWTYT`Say3(D8^3m5dJjt)N4I!2M;<=7UU-@OcTk;L`_mTP#SsPbcVtao-g$ zcK?3y9~3X3C}};w-?taM2sLyDl1kqdovsW12P=GQ293Ehf>gV7$1d>c4xQoHd7QuH zH4|uEa_9n3!2$||&g1`sBS5O4X0~1fE!u^)A6+{CqsW%}H{1R@A;rK@D(}%NTC;!~ zbds@0Z_&s9!2uxsAagod@16k7eS|LPHobfTylUU2^S@80?+O&7_*--T{r`X56_f)R zd^^v-%mW1o|29WP8(aRCcc4kAI{ubdpnVJKpu>px_c<~)zp!oo!N}jf1+>QhJY2mE zf6JkN|Nq<@Sf#06v})O(=2RBh_` zTe$y09Od}^7=r@?1AnVEXcI{1PpF%(!SZ&g zT|nnj-ty@@|Kh^$|NkBLg8DX&{ELtAH!=MA|NrIN-=NIJ0QPe`C}{Y%vD?^|xZBv5 zaM&pFw-*2X|G(RJ#SRw%1_lrQ#V7cic7vAD_PR6q_WDD!s*mLZ{w5!=-Sv#N{H>0E z{{Q#w1n)<1#+K-Sa(S~oXeJ(-tN7au|AQkPTn2#h zA&BvE2}BE%Er07zkh5JuQP=Cp1X?!H0y<9Qxa$f~P(lL~)NeoTx&l;~`}S5cIqn6q zz*k=%cU=K85E^_ke?a4BwYz;fLuY_i^LlpP@agp3;L{1(-MF8D0kn4CcZEx5?1KNn z7NDdH$|Rs{mG<}le^91zv^>n;dh9o7wbD6{dI(9%_DczxkD8!!OA)Y5r{&AnBw`z$U(g2UI%!sON8!2hHz* zt^)?0WC73W1>X@_-D8FiPxy4c zN3I`kfYzg20u8X$p77{A3_48n#r-!g{=0NO1TVfl1UiqY?xT9_mD2ll%g-WYnYce)Et2KFJSufMUsq z-{rvz&FB9?qs*e9#n%NdPX7W=6o9I1fj1!k>jqv04J+0%Fq9;9v;Mg)$ptJ8lL+LG@;7ME7YS45bXhi(+Rq%+o;ei*D*{}Y;Xek2)D0DsP zPDaqi^vIJF2u(0`nX3Ycq+o{+5i79zLtQZ18w{n zp0X8ux>a{y!kB^a1kFD2xBLXPg*xxQa0IOwZaq+<0~H6i>AR6K6@Tj;kkaNO3Sb9< zrU)m1(u&8+7ocMgUmW-jqK|o69xVZ%3Bm9Llu=4cKx$GzyXHW--v!EL9-a4E5Ab^&0xh>mKH<^L+I|I`_Fm{e0nH8As4(!i zCWA^K*tDj*AY@wer7tLPK*Fi>zHjH(7jG;6{Rgd$=mZV2zsP?9PD?M`?=dleFSQ2G zM_+lN&d*ON}h%FYdb+(AB8%t;Tbn8C704;0y zTONVprt|)bRhpnlu+lo8?qmhe@1S=2{}M@XS}UCiPCb&K)YJ!U?{(WoT?Z`&E|zHi z|DV4F)XL~}XY}Yi-pT5C9aK;~VDaQU()sJ)BNm^|WCah~RiLv}oqmA>_0|ht(8-qF zwt65lI={V;oALJl>&c*g0AvcT7;_5l^EJ>E+%w1&+`oz7oDm3`f@6CA;=fPlNB9)n zq)Xu7dSL~+*sk+1_ySsRe4Tkw&dbK|610}kw!``@M47LKAoRlSlA)m7g-G&i0no_R?o|$`A7sb zM?rSdfcCp~9)HpB_y7Obmm&QSkKWoj9-XcoFQWOtX}#n1EJ!-l)r~SDKi< zho!UuRf*-Gkh=a56jHUI)0>Z!go2hRXrN?((s zN_agEKIZ^m;eLYW@C1*8?^(cg%S$ED#(41hB9J7grh!a_^1J^q{PvRN9>{^v`Vf@3 z!1V`ayW)o70jPE5CLX=*pc4-~z#RlfMh1o*pfhbyR%GzEW*k#S zC4BH2q}|YBhxq{_PWf9v{cBJ)>46fj{H@@TrsgA{ZGF&~o&5_Ga10)uHz6)`F6Lw~ zJg^@$%JpJD*o~0*M2UCMem@D1&imk)ff}R)I^-%A)D!GAT~-A4rU&>0kD0;XO=6Jr z4Ne#0pmYH0%7e?3D=*YJ*%)4$gO;tY%>_-(v!+erX7KF1u?y5Y@aVkn)ywn1qu2C7 z5y)vTJdw=CQ=xqM=zeKRtiLsN_3nX~(0gFfT34V|6P^61(Q=o0? zSfu^XKE0_=K&AH+c2N7152UwS7`!2@`2b@l>)#8IIs|N3>!s3lp!HUrt~Xvx;RF|B zH(t+ymTwSeyuS59D+hV~5GZ_iFfjc8-z~ZkWR~U+56eTvoS+4GATtkxE_3!c4O*}a zTAG?y$O$?81+-(lFaha4XHZ+H`Hg^2x9X;o7~uhK@RWpjbhCzn?C7o#c)=n8S|eub z3gY*gih&kA z#dHofhSvvQIAlXshj+7HJ1@xqIqwVPUuXeQCfxj-&+tI=e=hzhptdwP9~d4$PC=0P zMpw^6qIxzG)iV)L4=$iQ8vlbzvl0cE>qMcx;Q;A|@6W~SAHxI9&-uX0;rqAos{ei+ zt^?Mez@{GDTod!?c2{VAz}Nf(6ugk$3aFmw{NZu%1&2rDf6zLY@_R(+2YHAj{op<* zxPAbyzgI_IoEZjMfAj4KJLsUQC#8{~td$A6sHpQWc*$RaXQwM@0PDq)8~>pi_?s^D$gh6d(&QOTpVqB|JLW4G(}8DGK#R{OJEn#;gC4?!$)k(ZQt{#u}t< z`G(&-B@v#Tf8ht?fZG-J$N&BJ1RWIlgN47v3A~xu6}0{NMcH*wwPm{fD5%=9V<^c4 zg=^qVP>p5B;L&-wB*UZiHh7DZ2fxb=v@z%}pc=0Ehz2BYgO=n$T4~_?=+Vs#3q})A zF!Hw+gU@8R^ST|D-w(Vv&cw#>x(C6Z&cepG^myIP!`;f zSM_YRV<-{v?2Ki23EE}k(ObLcMJdR{TVSRa$gqcy_I5R-y$w3i5z;H|wrxHQYHvRW zwYLwv=xYPFw_QQrpL8444*UskZz~;#w6{-zmTPw&e%YrZM1E3w2_M)H`HMnbb z1+=rH^ZtuJpw;gvwGJEP2#yy*X`uDU80JF?_5d6<+!X=Y0B*VzT?M59)y;=NX#i4w zciw;Da~+fjKwMXk)&r2^1NmJJp;mmh9?eGrz)Mv@>%sQC_|5=Y0e1fdKTLD!VOV(s ziW1O?J1;gffh)KbuUEW?NQIR19?fqo;6a1rU>6k)kIo060MUau_l4O9(6*8g6%F{t zrV`c{f~nx6;4Kb=!oZ{Xjf6*MjS7cHr-{l7H&Dm6+eF2q8zcfAJUaBc2SweBM{%Io zgv%d$y#v&a0IAstUIWo9`kj>>G63{4?e%BSmNRI64>kM-s!tu?fCqPA#U-TP2I+^& zD?;Q!wGXH`#E@r%$b)JRtnv?E|NkEgI$0JxECcPIg3SlDr@?*i{h(C+qJkN;tNr}} zkK+!Y89LBPLw-R9(2=Q~HxB-022a}^{K3R|xbp^_VuA2DAd~>-;a;1$pf;vsr;Un7 z^8Xi8SV8Bmx~K?1y4;|_7jXWD*$?g8aCmgr3%ppq1iVTQoG@R`TJi?zJP?q2k7RR? zSeVxh(wA|Iqy)$Abd4!VR=t5K1Ibt+peI)9iUEhy9aWjuVZh)|IS+=Cn|nIxX@C9za^ZJfdS%5 zMOc0UyAxTRwFG~QJ|hDI#HkM)yIoW`IuBj^#dyfk@&bQ9=mbT_ZXXpEkK?XeKpVS{ zyMneZGIXA}_=E98=fQ(Nm=FGB;smi^6bppM0igsqPxP|1f+Ek+@<5$_=f%zo2Y)gh z{K3q5qVv$fUrd}AKokpv;($;BoEM;aJd%HalV7Lnh8K>^Z~uEHi>QE3;{olA03GhJ zp!HIn6DT=&b{_NTwPAv6n{-|AS^%2fLHh}PE&r9sI(D12ek=Ll*&W6KI?D_s{v!YE z|No$iK|rUBA4ucRcirI8UAw@u(?vzVkzbHS7~X!(H34+yn5X5Pl0Z+;MTd+x zx-DA&m%Q@nF5u|=3F*I=$%A{59-Y1iUf6-|n(g*I;BoLFi%0WGe$YTpENF58Jlu8O z@&DE4A510E%|94Rmw|>JkU|a`&M<3W-pU7gD<9okFH^x&$l&(o@fR~d_l$NPd_4_$ zyd0drApYaEeGni&TCNb38YPE{=rxh0`sId%yy2}lO?Y_x+^$*I=?|2U3v{B zhvYJlKF4MZ*LhmrDcuThF+vgszVO!o-4^7LERUA$TW{Bud-Q@Xr1%Glk1XV7O^3Jo{O~8loN4G%hr4k2-i=TmA%u=cYk^|4AgW4$FwHv&;T`V|2xyhs3 zb;th;p50*rphH%?I!mlLK;gjY*?e5U)AD}lD%6zD4whr6+g$;C6lA9phexNt z4p3o&T%PYxVPIfD(!T?AF(VS+qnllofq{v^kq~7r8 zJP6vR-Fl#e+r#ou=?9N)CXY@=m=_V_8EGE9wiSCM8Pd``USxzn`X39@)$L&5(e0qX zzpVju-AeNVrf+Z$qNgwL?vv&>93XQHpynuqKl<L&pWgwQdt*1meJ8?jxQ~T6_f3GB(-8Iu$$bYOF=2DyZ+s4f^yfk4 z8_0bYP;)hKxsQW5_kGv}@#lk3RQEAsbKiHu?%M%sxS*sT(2>7&0*047y4gHB&;5UZ z*uMhu3-qiWpWf09j-j4=gQI3I(BI+0fM_{1zd`Tf!N&(YyZIsWT%a?M55D5`=)BpbapfX;`T+h_2F8 zpu>wj8Cg_3dP`@3WDNYEG8;TVCva+l`nKO+cm+NB|9akw&k>+9jR73qptC0SgO+@P zb5ZZs3!qWa#y6mQ@{r5u7lsF3)I>c3?YZOfXxRR&OJMf0FX^P>+QmS;*tJsRIIfEH&o z_o(~;FB-QzQ~J8`5y(&v%_|5v7lbl51TSBP^;+u z3u*IL|M!7(dG^+@GJuBAH9^N0WUONcT|QhZ^7sGiYe+=~Bs@W5sVKX5K%Lm*t`9&X z@vZ+Wv^#(M^rk)l4;TA%KI^>y;%n3+(CB-;;EU5?kN$TXfbO$<(EN|PR07qb;-Eo8 zaL*FF1n*xAC&LR#&_J|GI4C+Hw7uRdDpD=U0B)Ir)PMg0QGXn?=#0Um(}@F=2;uc1 z$b1)&dQd$9Qhyw(9%S|*h}lda9kBkPN3UoJNIfW6LF%U?tM};j(tzp#>4&*Z17rZi ze<1s&fb@gvMUeh*Wc^URAms@AOpjE91|^=ps0n%nsap_rC8F>_Zcl;pux@X)B!gp! zPv<*Of9{2S&@0e*5okX(XaqnQ+MGik-v*V#8@58q&jkUXto_cT^S(zngHLw>s4~;= z>|{}S@huQ^)c7>ep(7rxmr7VbJGwnP+dzEqWu&i{qStSrmR;v>km*5C)13k!6K%bw zFRDNzF$_N42^ufv1it#e3$!RB+Q(V}bW|OKV+?3x8+eErDLhJAA>ok|2o8@1P-KGI z*P!-7s7J492vpuD@YR3*Z2<+}FEu}62G#5i8jwMcWCsCIk?GMJ!ocX!c>!iVSTfe5 z^8!+N4>FGhYTlm!hM}4d79sFc=VdyY>{MmaV6jtyl&hUP{2R+;K7Hi z&5!PLp6UoFK-AT+^liGN1>&DMAoKaRITSQMP(ajnh$x2m4}8_>XV3(SN3Urn$i5UT z_OUcSdXLLK6R3SU2>S$Z+t+K#0#*OV|JDCki2InEUohG*LtAX9@!e~Br5WO%Gybps z8=geOfS^b74$zS`D&TbD!S8ayqw@qf@Dc4#PhA&B=fS_vp%8M7JH-FJrY7YO z^K(G*-3;*D0FxJi$b*tSD41Tj_`mvpoB>pR!2=&W9tlwo4o}dzmK-mn=llWP!};^S zB+;YS)ayD}(D1+u24T=f)JLFs=K~(Srj^%0_s7l|s_oAJswl32 z#G8+BfE9xdi9LKBa=bhMmq?hxPRw0(0((JJ3B${XM(tYcM#b9A|P>O_wW7; zbN^34RQLb$=r#R&6>PKNffu(0iE)3_W~A_6AqaK<`A=X|UQ8E6a{no~(G7wq?*Dm} zo#91}AT0c=!ocBw8sh#CkT|mYe}96x-x7=aZQ+(kW4hm?yI$gDvIl4o4qSe{3w1+5mN9zG_1?2%+#FKl# zhu`&sN3ZJyk6zpG<)8)JsV6)-!Djh%mM#E|1-$sb`4y;@#NP^9dLv{df3w z9DM%x|5DZ$ldgd@vqNTUr1)FpDY#n?WTtxD*5xhbKX|2ZQQj3p2KKxFP zJT31ONjq8|tzma;KFa9YsfTE*fXi)}ME??c=>o@#-=L$8I>BeTPIwFo_SheW2Tr1lXMoczcqY!kqqFpcN3SVc zEyf)Bi%%Y)DWSulp%>6pWvOZRWDd~UmE+BzwgG4i1az zR)WtFIS;za=f!QQfB(C?!7k}^1*JfcYg$k8x0Hca5OxP^cyw2BfE-+s1v<~&qqhKY za)w8DfrLl%FaCPN7by;)uyH-{60|lPwEv{rS;M2(^yGffIcOCeFI-^qprz4Zc{Yzu z*9#uqZtS2lD2}<_2b~#k{q?pNUf!T3CZ_%S*%@B10JnEumTzT+?Y{t}$CvD=e9-9; zpabfd4G$cK#YN}meW1OLFMKwD7gK`Hq`8<1S`7Uhv=aGQCg}cxA1oyT;ARClWFg}> zh6i4MMC#sv?FY3lOd#!P$B^I`n(m;C;$Yy@onY}ohY57Zz+uo@9wAU~uh(=JXybn8 z^A|H@HD8_UNv#0JRoGJzD>l2zc~@4!XGaf(g9rx>OE)A`#N66wo-f0@#QA@(z%D zkYC?@@x&9+e*(KF6x@4v?EK@=c^%w7@#rfF zi1D{B2Bpq!C(zwG{4H&uO&HC882Q`RFfcHH&g5^I43=j-vsw~-B#uY70cdhnbkk>W z$p)5oHGB)YfCH5G8Q^ydT&%SL-9_)wZF2&&+vdqeu!d51Q1;OK23l{f|v9X82U z*Nc;Fp!3dH7cB#quG|5zY~*MQYfpiSFYtOnNDpPh3P?q?z!}v4dDaP9aex@l3lMlY z9lU@L>_2$?gU7GIVeZ*^1#*0o2XYcPVR!&k$%R18b^)9H+@sg@R1Ro8s)0v0tHnxC z4a(rty#v&ddNI)j+*|Xpt`H~zcXJQ;bXEvJx`zy{w;@}LJi9{~JUT-sH2-FVoR8(% z?Ft$*p3(f939|gmvpY`1v)j!ejsN`tkIv8qpbN!86GfnIU8m~`@UiJ>3NQYHZdBs% z=}g_>(d)YaR<-q(PVnG&z2VX83OP)(*A{X=SL_ClP9~3D(Z4T2Cuq8;aJ*1n3rft$ z>pYD>m&}1<3^EK2iO1uvGeBh{ct!wxM*?^@qVxU>rB-H!7qaeX<595i1t(!p017XM zL=LkPsDNVd=#DV(=-v$)i+aJJ3tGc88I+V7k_+}juf>yvCKb@!h7_nC16RE8`LH!;6PDAU~Dde&ONr=zp_?Sn0*i z8z4hgf(>CVIkXRY28bNUb(57rl_lvpv6H z11N*M>{osPOINV@nNY(6`#>Y7pe7;MgB&k7JwQXs|4ZZ=&TxR+gq`=n>q=)^%8$)9RsAN4C|71yR)<&sNe<#K z8t6P^=kXVc=idH*JqOA+JaG7hgVUq`-4-u2?ZHW~%L}wd7SvK+0vaS3}2_Kx6L3F0)r?>nXtXcbFq+Ini~H zyS{q#nx>?K2J%48dr@fzZFsV>F9uf_9^DO~3d6(NS)fE5)NwiN(djI3+!-`n$^fY^ zm|a`H@ppjsoR^yJ2aSTfI4llo=r~KjE-WeoYlNzf_UU{8y%z*J4(8bWkFhk#v%8kz z#ZCFg|G{Q>b{>6EgD?ivWGLbG=sX5$5L}UX1HN$OFz8NCpU!tsgJ1OIJpTWB0U~^$ z%9l#K`Tw%&KlBnFP`&;AgO1q$PXke~p!uu30zbngb=cW}HJq#Il>xBf3R^yqd5=iCPG0%lM}eY_c@ z3M}0n`vaPvPrlqI{{l4h0-9IvHC>o0$?zh^2DA&O0Nh?U2C>OO;PnQ0eSzF}1GOJP z;n!`OwM3HPCF2X^^@yPJlPwp4&QFHSTfI268gw_-@fWvNF)?`bntsj)w_`zR;Dt4) z&I1i=9tLf_X0~A}5%cLaZCJ?8V8dL(?bB=8H-(*{Z2Pv;|_&UYTYwr>}LryunG z|M~CHJsH$R0k32H#Zn^Z(RtjX*Yp}hK`g`H|INEWy&1+57s$Dm9=)dfA(9RZe?f=SIDrIdyTUflfu=RaugA-KH~l@y8y`6&wtucN(54@V9h=>eS`~0zTaepl-?W z7ZHps3@*JHprHZQ`H~F2$!|Tn8NM|nurM%i@V9n>E<^2R0bLPYn&@ktqasi{1+*Lo zblKF46^teApu-w_BN!34RC-t*=5NUbpI!d^MfUzj|2=v`q#1oWpL=zRyg)efWdTU4 z+d<)F5xCI}2@lAf!=UT&dbL0+L3>?P1YS=;3h!zGk8a~#3=E76;3GY?3phLu{$uuN ze#iLY|J?WBMZMm=CA!RrZ7n}8W69sp@RdMrQ$ywIikk?xe)Cunb&!T>R`juA1J>CEm=g_EeJljq#1hOE2x(O%9o)1 ztCv3i|HLoAd!v+-A&p=EU~yC$|NBd6{Q4J)9X|0#vfe0zh!-h+;*UA_$%9|#0JtyB zzpM6w{mXRF9zXbcaJcMC&}DyV6FiQ)g8l!}0URd`AU?=TFG1(Qf`3-0c zWoH&@+Z?plZmAiluXn81`9FAb)JA9?1|Pfla_X!9j-AI_50nOZ^w#cpvGM|F`0<#B zE$B$Ik~~nq#?!U+e`yK04+uI%6qMaLP}czzqpbsg&DS*lW-49zQZW_O3X=z~lXnA+ zq*{QQH>*5)Ll3;Dx(3?SS~Az8+x5WfRiK`vN4J9m?0#tQ6?EzESQuXSgS!#nO1ks@ zi;!|=h8OU9%HUGa-?Mv;3b@{AJOZM8EFYJ0zgC;z(Jk#``M5;Z z$8t3&J(j-r=q?rjEhboe9#j^CBugJh`*ePQHE*El8dPlWm;ouaR~UnoGJra6;2mXR zDWJmy5+q)CL&g(5x>;kVfm&YRP~v^*k^2LFJ_;!Pg3QW+niT^xtHJ;jq%5GeMC?nk z+#k?-8=hX^!>6E2>A~&L7Y%MKpvC$g-K_7Xf~;czU0~wp(cJ(Z0^jBU9{et;d*Lx1 zR4{#V0o`bGzw_XW8GAr&0Moz>P&eWJ3r~|*|GOJNb!h8>5>v#geo&re0J-(Rbcnw< z7@_)GBN@bZka*qW(aqXC6;uj>c1cv)gSwcYf&Ty6pguoq2FP{2rh2nrP1@($pvVM; zKZ8ein8de3;6dq2r9z<4d13h(eAou0eFa`mb+GxNyhrm-_R{;Hd+d3j9rnYZ{N&N? zB!JvzX|9)GDlsb4@aSd-)z{4x5=0F+jo-6qaEBLd=642n_4}G(QLX|8}X6N3UtN9jF@u+L5@>|JDBq9^K5IomV_S zhfv6SH2;z=x%2G^N9lFX&aa?V&P=5;FK$`9{SO}d1hoS@5515&%ESP=%!Pr02`2o) zY&H|*Cd;x((!Q&aASa1ZFPauDSCaob?g!8w6Rug+P z9~1ED*7NDEkuUZ`(>1iq=f`7onT@?+37BnN!0Qw3^; zJi9{`ULOO+J4oAt<&XaRw*D^(huxW3n2< z7csu)*?e5!bq}Jyf)T%+-$C=s9=)cIQY0B(+%d24o~d>w!`|&(1kuBSE16NyMOWQ;%-enGjQj;HFAw zfU|icMBEE5&Y(*#nZ_eLA0mQ|*i98K8lD z&@P+K$DsP`_zOW*(CNU?0d`pZ1Tr5sAHWSBnuF{c1gBwepATZ33D~&%pm~9vzW+hp zg6EDg9-YTxU#{|fi_yRCH5CDe^3xYO`XIlF?wt%OV1+!oCxNoNhjoBJi7KeGcEF=E z06gS++yUI1<`-lDH+w)H0>uY|N3w%LEV%m!aTmzFp!tO@;hY6N+gM zxW^8*2WkhbVCk-qKtwk`XiVh)ThQKNh`q3_XY8d<1e)J_O;ym` zV*+u{QBd;iM)5ap_XHqHa?m<}7X{!ZFq20oy!?I%D!*kwc@pfF<_Gnl&ED`OBH;4Z zNdPQ|B!T2&Nc$Ap)<-#!;D+IW7wyr{r7t06yt)Q_jk6zn_ zQzaQ*)V%%wzx6;xhDWdMOb|Z@!jJIiWd+H5^p;Klk6m~icbx$_jyC`_Tt4ANvmt2o z5OURUJ8S7w(7+=zf2&^1qyL?@i#xV6Ffh1u>)xLN zQg#)g>;)%O!8C}1LsKLfTXgVk+Bs4IziabE>wRE45Tx9$S4^fZL@i$h>Z{?1FF zGm2F8AN_afeC5$=d)tB&G%`EoIw)y5Fua%zR#u^NoHY=t`E?h+Jj07-i1^Xttd3A| z@Qvm#vh^SRe{oF@W?T%!I9Jf^KL_-{<8LdqK|M;_MHZln4>bO!V*lv>%eCM#7M?y^ zLQwO|6mZi*RCNMIz9c?oO4eitvC1Rt`hJ7U6~3RYjN;k z{N>U4qw*>^#lCdVcmgf&dQD4$!R~$WMhl#;Yx^G489W)098DGlpB4>OF)X)SCYx#61aDWDwj)59T9^JyAZn=jx=*p1> z(BLCH2r?m-%Fa!_~)+BOVrmqOwn6n@~|q-Q5+wcK`pN$`az z94~a$LEX>89^I_FyFn>|0eLJPoRYy~=^nk#;5EIV^LIc61HT|MIJZHnYG)0{Z$}tQ zQamsI@ojxlmkF+5UL-M~4zPpEgTo+`d^(dYAUYwY_;kL2aGgOjLL3nPLdV^~h`+AZ`H)}`_xC!{U2iEt>mP477f%`wqv-2O=VW1g>tDu#O zU%>0BgI`FVe)Hd@Gl9dWS9M=G=rG8`KAoUReV@(@ffr{qKvhbqu17cPO|Yc11ZV+e zJL~Ck&yU;I`BE0BUUAwj2Pf!8eN^sqC$(B*)xU<~PIXLupcf#Nnq{sdhH>eH)g zUoHh+#R&3bFxX<~{f6DFF(At=Z`%!Py{S*(^eTMJ&)!}_d8lEKIFL5YS(Z^Q|he>C=i8#vt+950qB zfeH#|3y`#r<%80PpnT=i`5uzgz(b7C{Nm9q4(gIy{^D-|t(FB_AMVpz@d9-BH0a8d z&aa?OV{g<8(2nfa4lkq`Ui|myhD3!khe!7g(5{OYq9uR+dp5sigq*PD+3haj*&8n5 z)A`$@x8Q}Rb3O?P*9H1-(t`tGb$vrxm_ywIM9Qn7os6Ylf zc6v7NQ309GQo;!uPWNd2U)tc=+oA$FDfu|~#-|+6xs=^5DhA-We9!I{l@p-h^VS0; zT%O%~R6t{;|1W?SN)>^&cXT^*G$a)K0Xwx7w3Y;Imm_pPK{xB1c5ptE^#)fXpddgQ zA9$(+Do2ikhX^3U1K@E2@U{fVJs~d^f$RhCg27xr)Xi!GF@LWYcJo{DneVX=)E@o+ z|9|}pTO>=s=>U@ddrgnP3GpppcY`Y29iUkfLB#L0Iy?0ZvR8v3o5TcVGNm(2KWD%7)n65wsXMB8Bh-l)K2I% zed#I5@FE2=j_A?N`l(ft!KXK013U%IB+Z(2b~g+@X`WV7Ee@32`2~M>q3IkXuSPL1i%Lgvi4n z2a6&NA0b?e6xiw@_jTgwAA-UgTtC9LF*HA8gI#}Qmz64d|&)sk)=-2oOpozHwa6D&M>D>OVbulZO$0=K+9_dk>3=j=I7>xlb{l5ea<*0z}5rZD! z^1qB1 zH+muA?a|G;vH^4&sNpw{Zi^RtnNc0q3YyIVXL@LT1F2vjr%i&2CeVor$WwgKWplDn zfAGqHMmi3I^EPC2?Kkk=T8cfx)$Vjfw{&XnFSY z7Y(65{<~Pds6Wcz6Yc}5AX(q#N`VL2IYG@|YbS%!Rj_FW-`*|Y=?0%(T}wAmW&635 z=XF-v1n_*r=aK|a&^JF|wqb%Ch~v>6Y|!nb^8JFclfnuv{?>SKJq?-aZ~b3#5|ku1 z%7Eg)+W<7*Y#pe<-(m$))Ox9OwMTD&fQMy(K*_?FYT%|WXuT7wV}m5aK6y}#_u6jN z1dS(xme_81q51CbfABgTk6v4+X3&mbfQGGmO=C1U89*xx1zfs46@0oK zID9%E8XkC2`{2)iP`wQ9V6^_{Zv~}o-|j6cpf&iut=~!%py>p3E(CbW=)U2B7w%wJ zn1SXcK`SVIn?RlhN$7!%t5Gp9ykz+8MME1agGYDi3eXzq5L-}d95f#O!t&cc(9VSo zb78uE+y{9|Ma9?h4}U9Y-qfc%b%94WYefyDZfreJQq;Txlxi3~dP6tt1MMONIT{qO zFQWha|NjznawT-Wu-8=51+@Q53bgMDvckGTz@xY5g@@(!5}^s8`4ErhgN#rSP`g#Y zqt~>*5$2fe`+xp}Po4)wm0BGns>CEg$rCXnwapX6caQ+DqI~f}7W;fTG(UkBkGuLw zGQ4n*0@XQ(LA$qBaFo`A3X_sbk8WoL56cJ*{+0s_4B+XYjkOR<7fOJpy;g(D2vB~r zj4&uE1kDJ9famzYEz#BBV#8w#tk`(};tlA|jc$C!2B^aP22zDq0J18AmSp#uPH%vf z;|l~q^IGp;%;T z>;?{BCeQ9RcunTny$@28fmDI+A9?8wT5Exr>_Og78xri(t?tqJ8#F><3#uTSK0f~s zswP@5l~{T7nqF4nWbm}SQo`raYx^_@T!&kO20lBFftoC(;CA^jkPq*JPND_Xn}N}9 z{!j4eHGQbU$?zJsUJR7}K=TJz?7{6tNF(?~n;5tn1tntPDo7$`76r|r@u+~ZCU|RZ zfQCow$r5#sURDnkP6iLlQ>98EXa0s9uvrQ^P7_@5!pbSuOpvlp(AKTxpv{uKrg}NB zoTtVIn@57U2h_ineFRFwtj#|JN@1N`lUjC$7hXSJV##la`9;uP@nQ>5Z_%eaU&5o; z_G6hO!wVM?P~ifKA_gDpVvCY+U(2Nv7#SE!^n5H;)zhUIN>qJ&w?=?#>hCW=dskWy zlnQw^?*%DhD9Hd#>2LS|T7u(@=;xw#-d=7HegwLl(=!d!r~m&V5UiYaS1qU~$GaJn zg**Rybb32@bUIu3bQW;=+DXLup|{pEj@{0UYM zTGTjM8bvh|NcH<~D5??TCEcbXAYXJoec>a7qU~Wd=>EfRFX8JEVCI7huiknN&}8Kc z&{dxvz10CP)`40ay}Lmr--|_HwzGl9anSNe@CY?1!-4j=gBOt=clO8wH9n3vZ(x7` zenDpg@JJ=n_&LnJ7s}iy4vPXgOdgki5c_XInI(c3w9uHl-f5)fW z;suBBtN*^;8TVil7!5XjQ~ZE^y|7wTBsydS@3v zlf0)vH5cgKneGCO7kA!2|L+JooAL(}e@i~->XIMK{4Hi+1|xs#cgIKnKRfd0yQpv+ zZw4*l02Tjf{KpP3@(VVD7czR6zWU$U3>vEe6@`U{;JcQSr5HM#3!#qn=xheL`NhT8 zkZRhqdmnhltP{NH=EW-2$NxQgcZ0H`M`trw26`CP3w==8(OnI?n&HJ}?;rp7MKCZh zfCmv@glq?$y!G6p(^=!ik2j!v$XW>6#@{QN1)?l3l*D>;b9i)vX4j5;bOv&GbaHt# zzxOC{^XQED-~rx;=I{b^6vK<3;Gux$FCK!8aXo?5h<^gwP}h9K!>98FT00)p_t?Y0 zAi(fq648bC2#372J85tnsJRoK4QV>D#vG$;ibDcLmdPN=MKyBn_9=#PDFP`#(Rzy5^ z>^%0OiWj2zFL;O5H~y9%|Nj36ult3D{7;`B|3NneCklWQW?luTsR$~zKNN!6r=TQP z1{zoew*w%l1eAk8Z3+dCPH-v#u{k_Cn}0AcFuc6-7pcDnl9BN2u2B(y=mfQGJvu>y zyx@(tFLahNGoTpKZSnm$Xi&ez)#KoM{^sZP9?8c&ERXZIx`UV5yVx^A?Rl}W=oMsB zk!N>_iiA%mG?~8W%>MEJr9b%0Xi&eVLg4kD7plUKAUoYl%GnuSeE;|o!kZ??$?)PO zjOPL3-G=eFK)kaso-#<^{*NeS1ERcy_WvO(nL%Alk6u$FXVhhQpb2I2#G+yol@odBBOKwe)A+O>7u^$MuKue1}D;GU(VlaOQ~x4Rh?t2fN*|4CZ!gwpagO zEE9yS{{xk$p&&~^8$v+MM9kAnK^F51x?b_-}x>y2RMIfBRmt*&7LpA80Z_YJfoZ!$Q_uI);GmO(_A*EkN42 z(xAfZ79Y5L0$=Fkah!E}i6kh-K|@s+Hva#=A2i4Cg020}f1mDTjTf=ppk`gR0qBfI z4v$`E3nb?|TY!3xav-Psnxc%gmM=PwR3ft}q7+ARcGD-A9mv4l6u zX}zFQU%N&{`D! z7LW%#x>ayLz&r4{RgRrUUOeJ|^uP0v$MFLU3?KftUMdOo zOg`hmc*F3LXXjmy?;k;zrZgX5^x$8A&{OlM;Q^mc-51eP48EFgd@LUqakL!ZZ;1r8 z;5ub*MoTex9A`Zi4T>5DhL=vDRuODH6=)T&$M+kr7eV`9KHaH1e7bWF_;fx8FND^e z91UtMt4@iQVt6rs%m4qLmUs9k9e6$cMH4S*{uMR+n%{7={;!jM5ytlDf48hbktBoV z;Sv{6_Y@i~6FPr)+wv4iGQ3#4_5c6Y+a-?;55QZ{0!5$}bSZcp9z^|1-Q%EK3R(wY zdkwUaCwJ@r|J|(L3qcC&mV0!wisXTM-ryy`Ge8r~8lW`Q*UfqbqNK&M+tmQPXt(_T z|No#lAdc4CB~I3|D+(nUN~|2aTT~nv89?p!mN3w6h3-~pZ;-#m4b0yQDohX_`2PSJ zPDsv<1Y1?Q`9;Gq&;~T5+=S9!1dqOe_JenR_UJ8r0NNIgJg^BmjI4hXD1nq_dvv=# z@aXovu?y6o@z6ZzVGC-zlv#UNUi9cZ;lb~A5p)EZ z@My$c1>kh-c&%L*1qGQ7}X0d2Pg_Zo2CNA*&i9mT$G)?@jg1W@4wF%42mzBqXF|9=n2H3}a* z_&3UajF4g|OFtoH`> z$6XA-{qYwuZ(jb7g`YMAlkc{@6D|ckpR89@0;;xQ4dmD{(B>~tIS8KHgd9@_cMm8$ zLB0Y{$b0mf-qD8?zb_`Ufkua!L95)j8_p+@T46)eqV;8@*(c?>0J)$BY--RplX5nA*lMr zH_!*0AK-k5)ZPTy4>AvA45%;qS{RbfJUZ{a2mq}oY&}q_;?cbuGHmp}L?5((+oRbY z)CdKMm0t7cWnC`}UP|WCYx_JGJkoMe64rhJr!2JiMY0d&+(l3pT*LC{zlSyJ)G*M( z2iFUw_MpCiN4Mw{u)qXR*6`>St%L9&`Nb8K?I1@xlscl@2hQrfwKraDUI)(G7eF%s z9=)y?JUW}ehB3Q7@X&U>;n4}seXlpX(BeS9{{wteLxltre+%e>RsJ@JwV=^o@B(-K z7SNr!{B09Ky>ZZtl><~5G*Vku2ObcD3Dq(%FqCB@36#@ZPS55KZ{ z^s<_2aWi=EySa9Fbh=J>2`cZP^*`7i(8@QL&Uc{V?+N&H7XDVyz>7z>>jcnXN9QSz z-r5!57O2M#*r~4`phH~2RWRBKuAr$Tk51nmh9_Ty|9$u$Vs7W*7hTW)|L45H-wL`p z8&q41f@^E!$wbf?yf0|73{(!dw!Y=>i~}W-Zr>R%E5M_cpmh<)U1xxUc!_jpbQh+;9+^V=$wb+_=W8c0`152u!Sm>`sBf{bK~_4(Ei-xhe5#!y43_6p0J&oH$3=v{kDhhh(%ft z1{weM>^$oj;@f!yysVB|6zg5s=p}x_5Z(*5u+{O99X%#cI&SMV&WZ_j`2PPWJ^b@tBYdZnPZy^78)+9R|=$E~{!BsQqSY zk_sD^S@H!mhL1dc4H~>U18p{Ccy#-r?1VmHc;MSX@Gi5HrQo|ruj~dj`9R}qjGmp} zJUWjxKa=-p{>NVW=-Uwm{+3Wsi3!=d4Vsfu1QnVk$O&VL2_j*DhA}~9UIOSw>&~O# zavu~N9^LFV+kbqYJ^wLjjaLIItv-(iB+oFa{mK7xn|1 zJXFD*z&g;W#fWj}(o&D+BN>R)@pAb)P-z7&2S9t;U$TMARw&<5;N?p2fq*zDx;LHgdqc$v@@ji=Lk#A06}PW|czoksEZK+%b<%Hvwol2w5k`2I{~2 zbUp-aZ~-6Q>2o5K=bdO-QgCXu`SPDfAH|!2~g2{(6=`oyn^*o8h_47pI+S{P?^Y|a|m1x3OZYO zbTWB%x?8+f1c!r1x3dOlEmm)Z!iyEJK@-&M;9(0;-R{|3@4!%c*RwO;!K0g1DHb&1 zVesP8Hc*nT_sHXK`3}lppm~K}Q5{dva1CfuLE%LMDA9Mid-z)Bf|ej0ybM}`@cjj6 z$)Eo(N{T^C5cpfcM?)A~ZEyw+kuZ98vwI$Q2ha4q1WmPq*6%?19^K9k9^Jtf zY5e)I3qaE~9-RV?-R+<$Kz_k!i`E0Bz8=lCdp)Ho}fgN7JAd+P&U+8sgRB0-XY0doKE zi@BhMB)t>Btv6c+d9GiuzC6FvA&*X0J`X8|m!J(#NankPr!ilGnz$f;cDreS&%XfO zvE$Rb0o3I4=yV02Kd%73o6B_usOtLA?4`ir(LDh&TyzPv0(l2$sObMCP$91dn*Lq- z@BjY^p1tk{o|f(g{4J1kINU8fntxdEx72{64C#0@{#MZB0%WKf92B4tYtXs}$N1Qn z&mMuh%%JvAZ|#N`;coE$z%fuO1a!~b_tXs@{0_%Fm|b^x@H-s?9a|4-!a@R}^8=_E z1YSl2ZQpqGvK|CwAWH`RmfU~;|99J##Yr-};9d0pKhn@vT^wkfg}>Ds)Lur8v{FUX z!`xoBYzEbRknTUn%T<5>|9_GA^WlHU{=INeLw-9bC_(j=4|t1ghDT><19Efc251bk zbjFKapk8FJDf1$5YW3*c3<}~GS3siO#h|s}1|FTUD|~vl1%Q%G?=Dc%^XM#{06A4P zwBv>3dq^?q(e1hdl%zd6ANh2HPF$S;a)D=W9JsO$1{+v90d#JzGyuU+GBhFg)fNi zu3g~M`R&C=(46F+#l?iWx(LLWi}9skm7%NZldz))iUV$z5I|9u!=6y^H# zmL32f6$HBT8FYQli}X35#OitjKC@gJ2puj3WjN4Eat4T|?=Rjs!Lu4t*ZTmp>wN;$ z_4Z^u>d|?^li&I1>lqWE<<0A^7fIh9{s*tO>IWq|kQcy5$QF2XhimwByBmPgEOPn> zU8&F++5x#Zr*?&B?+!@H4qf2UcnFjOzl&cV($kG&#?${2G=EDje&9xI4 z_*+0TjG*mVU9lCe$&4P|z7u@96@4rp6tj7Bf)3I0XtrGt1ul0FffjwKf`&gJ9WNio z2cW{nqZ`zg4?O`|?%C;j;>G7#poEyZ0(3x#=W)n33{Zl4@#_r8g|Q1f8V`e(_kc3j zcCb+G2GFwl=pT@jdie|}Rl2B1fV;o2bSdC?+(iW~VImF3C3rL+DFBa?BIY|vcYv&L zc>-V418JA_)?Rq=-vL`>ql~k7G9H0M_K}xTpq66I7nBqWDeuBS%e0!`SagfZMuJ)~ zwKqU>qpg?tJ93#A7+y%M2l?3d1~jdJ2CI2poTL~$nt%M~Z}nngVCZIj5&)dO!YqG}}fvL0Tl>+0c@Opw&oMS`SqEdUVI$@aQf*fmq22 z>f3pA*WP%M2Wq=@yWZGk2Ql(>1k^}YeUOnyz|&W8$oo-zx>Ii;uTGRX{r|s5ujo}! zao>60vvUe~Kg|o%)1cV#fyRzcXX*`~-i_cy3oD>~cldOICVxXWyr_5yOS`T&5C!xB zX!?Z}(3?(yLum)1fNlgC2ud^H0{RyNXhAoqE(NW7fmEEw6<+MV4M{JH!P;wYcyx!O z6wu%sxVuA7beCRv(f<~dCQEPl_AUeEQBaH7<`k&fd5&CGMuJT0y#GQGM0eL70F{+T zzd~%W1@(iwQOimp(A3RwN0d|vnU?TqXN_?H9U2PqcZI@>{<`n~UxIchA=)$DrB}c) zHRbC6|1T4e`VpP?Uu^jC|Nl$SjvmnXL+AY$2Tp=Q2yB+bi^FQr@|7KwELmSY{0~01 z;<)P-Pz&MZX6X6~SbO_LapoWJZIe^Mw@s$O@&`;FdH&g_S5;I=k^z((dEdSK4{D}@ zt^jc`aOuuac=7A)%m1KQ>~>HAwX>rgW4>Q-QGDST8{7PV3%Xyb^QlL#EvG-|Ji0dz z|9f;pvRvzd5&@6qiVB8U=+qCtJOg-e7!e%c@j#F6{h*=jmkW|1_lQD9gCMg$P`MXZ z+98XX(8u2){z(R1;0ei;3Lf2}=0T`SJwQcouZtNYsNH@7G}``|zmCbHI|4MOau9q* zDtseFGbq*dmR^AL1NeNv>o7r!k-@8{GeDEsjRBCJZQ<*OD0?g>mc9D#(T%>xLK^CD zP~zKv92B9DMidj)Jr*EUC&8+aXB{}9wO8!n7jNF9mPcU!Lv{mnLQbFPwGEeGX8@f& zg;M)?bhFOzgA6fsx?XtkWbfbq9=)L#z^x3APEaCqR`BSq(0EY=u2GP!hmAHDKpS5C z+uFeg#e+tNS1^`xH=kfMywm{}1Kp#7h+Sy?4pnb>X$4~mU-N^1;Fc2}^`Q8Nji-GD zO_YJp1Vfq1IRQCc`I{dkDxSRrr8>}z3Fry|1&?mlH9nFI9?cdE{4G+TL*lyIK!-+o zHXZ{}9^Dc?mLE#xUV;v5hqY(Ag*`fN_*j1CZ&?UR0-cv#EE6P3K{Es%-38!P(r10T zD+D|`%Q-wc?L50n89X7$7L=$!Codl47i940bmIVxd3%CysM}D$$iVPIs`b%-$AkK|G1mL`nm&;QReVoh+YjZK&)uT@?tbQ9pU? zIBdgQJC8xPc?WwmzDWReXgc>!0Cnm*w=Muvy)*v(|BqZC+%P=g3%Vv?F*9f!?fi?& z)u0-$wd3Fa{~){PcthOV^9<}>pY8)blQ_pyPFv29ggW?+DBW_$jknjLiZ?hlm`ZQs_n{4M_(7#LQtmx_XNj-*Go zK=UKev05DbEuc$4K&Mo;+y!Ol?p8=>v>y2P|9|Uk{uUKR28R8h1NC0qssbgly&y+G z4jk+}_JR%U%&B1abVJ`IeTkXDqZ^A> z&hf9e0Oy6z$-Q=>hTk{|g?She7kTNZlg- z)+tO33?7X~ASvbsIIn;<^dpLJG_M?Q-SO}Lf6&p99?$@>UI$4q*`AOD6aD1jf9M&N z9>-fhz*P%)fUa}toVo%W$F3(lx}6{kcbY({wcA4hd}g|Yhoxf#f6F(+f8Lcq=Hl!0pCPM+py<5C9npj(U*y!EOg_8}#Ug=tqqv zux4<~zBsl9G?~xe;s?5jc`nF!P&&^6xvG0EC|Vf}PUsF3~*$v|yoo189Zh zaquuK*iE3WAZTsrEU?2N{;Z7fu&j_Mak9Kt!UHwog;NJBLnquW(BAZy2H?UT+?d)A zT1@aluL7P)Uxxkp|37U)cVNQno&55Uv}}0$1rJCCBx=A}29&5gSl<5kfFxs|Zg6e` zotDWzq0I!fs$ycJa~2ib#;Iuq>&7bSJwxxk?t!6pXGVs#nPt_|AXa` z-1FO`w-$WLgGXoSixi7os068W6E%Sc-!Zh^K)T!qYQ^ovR|yy$ueni4$<3SrO2KVaW`fqf4; z+gAa!)+88wNb9o~0Zovj4-rQMq)h=d_*T`fpq8h7u)~+gPaU}KiZ@77-(T> zdbJ+ijs_l`k36~~C7``^k6zYF&`AKjn?ap(5Aa^ch~1!-*^5D=IiUW^%Uz({*4zLx zyLU2}I^GOY4KDsbW38a0&LG3$Yr%yebgcEm>Hq(`yIGhR7+O#Aw}NL8yIG}WIT=7r zK#*yj%?zN+zd+~If_ANUzJHN>>Hq(3uxRUn($~kEL7KtV^zOa@YHag@hwx)>fX1LZ z@4fi<6x`c?Q3iIRGh}obI^-$j(Or52ZPc^*hybDv1gDGc%^)jUzm+P3ysEeB|Nj@A zw;uinaX#(@)%p;7r(XR3|8<*B?`n`MK<#X(d-q=a|G#@O*oaG|uU{sDmgXWVS7`qT z9H-ztOQ0@n)O;@JFz!?F39zzT&DL62_M2+$ryaG&Z03nb3oF+*<& zn#;_<0P6JkSXXH9w_E{5>23ZNcP0h~$8YWh4*ab)OdtjApng8&&L933Ll)3P|3#03 zFZr7v)_Z^&qhd@TpT+$D4{FvicqDHHFM*RQ(-=%Y_3uv`K=U$M{za3NHZ^;8C z638i}9+ubmdp%e|Lq-P#Ji28*d^^m}-;x1R(EOW)zeOEnS@UlZ{+7Ee3=H26GxE2x zvM?|-{N~|rVFGFEX03DtO}v4wMhDHqbb|xfr+WdY;`Qw2QSs&)AD;MAE+O6{ns1t;q|53zTNc#Amdv? zz`a`NS_GNW3!dHO93Z7@ph`=wdRVjS>wyNNz!rFPgRLv6_poLa(34^)$?&jd{jV#< zz~8zZ6f_X;Hn)NToDmxE9^DN{@zpvB)N->f5a9290P=jdg90p^!3}wESAZ4Np6q57 za{>qD%WePu|8L$4N|Q{bbHM4)r5h5N-QdXd?7ZXC4USJ}XZl4A`(w~L4i)~^S^#_VfWPlHBLlKFX(2~aF%3nY<|MrdY~fkh4xIus$?JjjkeJ`Qs9AJkIq(* z0j2ugwm+OC8Cw5WsJ@s#6J%e#!i%&p&^-uKK?*$DMKyG!7(Bb{6<)+=egE&$xfUes z(!Cbsb&0dZ6@`BmXw{0+&v(7ME_Y0nHEo zxNtsj>~Jpthr35F>s%Enh6W1;{+2}0x{mH}1t04w4gS{PKmY$90}Vj4R;WlZbTh1| z=il}Rylk4^^~Z~x`VaqK8i420!R;lmJFo9!Wq8Q~3bP5mpsi$})7s@gJwJt)4A5~% zpKfQ4m)jBgz#EpfLXtW-U|s|zJ%S%3=hF=q^XLYvDB1FI3s|QM1H<T^BWFd%kTWHv;X}6|8n8q|Njxiq6hMHCV%TIP)i=1r9B#t zfC^Y>Iqw(`-X=BI3X))1!L3-;*;3i#z3@GbUJltt1(`!6M*6 zrq=hMxwUSv!WT0uS)p<-Z-9j%msTJ0fXIWoB!v>7QKOT`!R0gq0}E)w?Lm*@uAuA& zT87%;(OVz@IWZFIluvw5IsR%A>n|Z|wPHc{{MP;Wk7GU(+&*u716uHgTn)c~ zj62p@LE2b(S0Qbz&ej*;vS;^qt3Fd^`;vD*)k8x|NsBa&?he%&qErLpkBHtNUD1-*qC0h zJ)ljd;Kd?_w_m9DfeyL{2MuTf%%dA>AE@^Z^##OZa^M?Cph8F|p&{P(M2ZY!#$`2JP3w?-TLpt}-zE_M-Lc z|Nk%Vg68J~6J9TUG3`1i9kYJ71m~qIHn6vmV_Y;W@qSdJ>LA_PxA>z zP+9XrK=8+ZP?_b^S$hJ}W7_dz#u-RL_vrRL0qZfr=H@FUJQ|OKIzKOzKm+&9M>N0- zLXc`3Nc#?SJ%=IWeoK^f74ZHhv_AkozyRFS18tRDW-Q6@;^&2j|9!f_YwW>IK~Rs& zvl~2r;M<*F0a^j!+1(EEEa-$p@F?jWM$ic<;1xQc80=N*q;(=Ha!iFMG6Twl~&0Ii2S3>qfjG=Wq) zKhHh<@6imNXJi1cq%ANgarWta<K<*0%T}U4Snr;9s7xw4`51e{*$D=G$ z2CdiuRr=k#L1$-qbj}42m_vs4kGJ0W_aD;F12y5?|3Ccy;v9I!dn>5Q!#0NOCgIV! z6*T+`O4uIVZjh>p4czB|R855u9+m|X{4G~NWjkU3`Pm6bjs=xEkSY*j3}gV=qti{o zqZ>Rm;L$w;G(+gqy8=XcTHY;5gyvVsAbg1zbcPpviJ}km96j?)$mBF=RN(eXP@*O@ z$NLnlO4`%%Zs}5w-npRG!)q0Ay#ueTOLJiHRGN(xR^59+VfbPT8+bWDT|9Ig9<kzs@Z{X2A5fTodTaZg6k(v`?-R_`s{M;2vMGX%ehP4A;H6#}7|IqBO z00|(E&hsxF-yz+f2g;xs29OLIaT-*c3V<>fN^qAbAz332k6k(B^*FEyd59Vzu`e%! z?}C7zXW$qT46^d8KE%qWryl+Xoxlh>8{7c2Tmf`9O6L(!$#;Sg)K~3rE_mSpS~}Am zY=G%7O(ch@!5yXwG6>R->~MxGvzh>N-z`-4y)b$E|Nrarknjb!2_WtZg}Tr66evg- zK+}kj6Mn&~ygCm<9N7Gr*|Eb#r2xZW{4GmBDGZS(;$V&|(R>|^mS3D;a;1(CJHW?; zm3sShJ~#aK!ub}cDhg4-^nK}Wn5Xukc`E)5xUJx#0y%N4WGl?vKb$wf4u&p01CJLu z3cQR04Ywis>LB;Q>hl+mL6e*ZVv%dOU3;Cz7{{MFb-GNpz#kKWq=_Ih} z%@6)?xgH1mv-yaGOXm-8nS)wCLk;9_k@)}rKboNvUj6_7k`Fu=!{7+6j9)K@#SduT zA%{n|JSbBw(1B#C3CAD)H@pNYSwR~sDhyuugG-*+A1C1(!V&8m!1v*JbbbaI5DzuL z|MxtOvi- z$Co$2V=9pL2gJR}|2=wZKqv1!ebFt?$N=igdURd`UvP^w_k>7au>B99O_sr(pPL^u z_69S$^d>WUG{4~hB{av*W6cl#a9#kdrgLn5#@yi!O-o3%1%JzPl+4KA3YzJJB?|u5 z`=GSc{FLdn8mQiYC%IBrn37T#aR0vf0kezcgHo^7+ohSHLzVu&SbhzZKtQ8)=oQos zSk~N)7MDj}fLd!M>p-bvCDhnIE}S1gZ9LHY4ocDh-*Z@rooo-#Aqq8u6=VdcK8H+k8oYp1g0Vlq zZ9MSh=8*K^(RptdXt)8iUD`klG|C891MYW0(hul-B*&28&dVN+Z@>-n&b{De1D#tz z%OsEoJU}hDuZoU9Hg@rAg2yuWHCr$I`~SZa+?D~kva=PmYTG%8bwi8bA*Qk5z+4 zo;yGdG>_g1APUqUIpxti732UA8+7o(L8yZueG{-Uk8akfaMMBSUOc*c!ES_Hsfn^& z0XzxJQ0Q*$q3tiBT*4IbU#kb*WnyFqu>c7ntBMdEx= z7wWlBZ?c8Qaq#)gprCzG1roMSwkUD&=(W`qm11~dF(1?*LYO z+NlHDAny$6$;|jG2KwVkG z+dkc@*Hu7k1VHft4pYx&8x_!!I|=@lUQm0#8=L?560=Wbd zFyJx>wDb(rK7f>muct!mRsL;LK@C_?)eY*Jb~qQjl>Gl6bUz?;X$qn7p)gqc8I}%T zF)%P#UMrOYwV`MJ{r~^vY0&;8(0EWBQvCs2ZE__Q(s0fPsayyiFanS7L)y)VHVj&^ z>-+fs|Cdj}%Aw^=?_SXIm={M9SQ%dWfk*AZ=J@ok1#SNTC5V*?pdoYQxPeTkIdOP& z3V^2lTEqW=QttZ~@ky)1Y@r7eFe=tK*TUMF!6(0PXk zJyaP$1&!u$kLHITJS_i|hVGsb#p7yBx;0IOnmVZiLH$ME&&%ofJc?NXSESpEO z56=$9c}0>h)b+5n@s#osa= zqzcLJ$3dA3+Uw$PJ;VsQ7!7>Hr7P(CfuAm&pFk@*3~N~!P!_oIw|)f~)SC)hxaJrS z%5C8E2ih_RvEe1CG=Q&vhvoJbP(_E9xCAz#=QI8oOpwmfVf&0#uzZD#p;J|$dI@%Z-xCcF&AARt!JcBK8&y>Dyd;|&HE8u`* z0d2+x1uZ1ViX~h+UwJk^|KQX4^TmxX-~U5|(fX~R<7gnm&#j<-60GCO-#Q-@gUxR^ zTsmL+bbj*f{E@}r(%lU@y8;xDFaEGFL`A*?Rm>Bh?fciepyd*%zxy&B?00B59(!@) z=)?an)xcs5-$C1fm`XEzdus(eTEFqPO8)!*-?zI~;iUj5-%fyclRY}mLxvKh?t^NZ zYJ-;=pz;V){ugN5Qg^ihc!$^ok7gf{9}F))f^BmFjqAOCq2UHP`nZ$0uVLpMLGmxGy$c?n`T~ zsZKr&ssZo6;GO{*NG-Pj9U$x39S@%911%3f03IC$9dR!OYDL*7Kw42cyFrUdHiO1F zeL4+1dTkGbRz{2M29;91ASXBPHeh04VDjh$Fa9Xa^yp^209tzuUWcK?&cNW)y%nU+ zqx0U*>7bn7EBaT3ox!uaPT@uWkMI9IyW=EYEaQIn-=niR0<=46mJXPm0Al}xutC$| zpmQ$a=H6#xVDM~y^24L^p=Ym)ia5Ecx||K+zTOxWexJ@)9?g$Gcy`wrfDVAVe}UYPAX7YgA&n{UkX9=={JI-JO-YZ=R!~BQEONXL4$lY) zkMH1n%}Q82x+5e&>l|7RvokQfNZ18RgZDs9ZPm@72!k3FfLL}g>lH{GwCq5Vg}*f& z>|U^{Ztw-o&7f0&f3h$z@V7IAmed^JZ(#$^>w#12i+s?X9G!KCGiZad zN9PPsihwV0FhJPE!QWcR%D@0_?|XDZbu@rF{-Bx$vcI7_f&+99MK?H&c{J~a9{oNM zq^d;A1GLkj^?!-t3!Q18Q_qV9Ji5V3JUS1((B%5_|MhZcc>!&Q`gA^j@o)+#qZ1nW zd_4tqwLWM~Ts!D&KFG>^a47)lKX%Ur$4ck@7dtm2ishE~;7$P~#do_YH24)Tdsr7} z@VD%Rge@p9uV63b1o^bp4jkd2&tP7;_u>?!c7V@2ty%>#8tD`Y{?--XJb_kCLfdbU^wGQneAqO9 zt2wywv;)+td0}w&+kaSo=sXO`65^o4o4XY}dL0BD8=rt0Bc&|hjfmY0KD`-;oZ{1+ zApxFxTE)V^uumU6AN2l3-?oSUL9?n{4Hb+GB`iL@8H~QIPxxDUKpCz1Fz8l8@DV`# zE#Qrm_t$*-@7W1DUvmTKh>BiO;|ewg!vp&SKwDBbmH+wg(K{8KTRW#pfQDvfcyvSf z%|H0dICp4)c1w4;C? zUv350Lg1ip-VZuQl8L_^biTe%_f}BK@a&xjp5pAh|KjOH&U;qEVv;-}zgES=Se*XXe!aWR>(ZSvVmEbQ={`mj@#iB4)hL_@?5*EDl{YB6! zaAJGe2hIV}3NJxjBad$Aigrf+)=d!WKr!#pI~7#WKpHrn)BgW|IraDd{~$lD1EoVq zjSL!zIONg0x8NUWT@r`{t=Zrga}qGTpD`*q}6ek{tJs60=70@Ce(CYfTwX6&;Il!?94p*2P6u@o(kqn^P2Id9__}C2G z4IVI|-#Xvpw zy`aGI=r(w9PyRC~|MRy#1_v@YM!q=|DDbx~1+`ewQqWa|80eU6$jwho{H@DSGz;*z zP6ZX8Ml7rh9^V;22j=j%HiMKPT6QmsLHzCt1Mp7C7wSwu{=ZBB3H93Um1ARgan1Da z|Cc(To#?%`Yd``=P5=J)=$;EITztBfp(Wi*li#5I#NdGS?5-1dvA^v9|6NufSN57( z9|rAYI1DOccBK6Sor?XU;NRQ-;HFOZR!{)E2+)4@|D`x6Z9+Wi(OqHiBAW5X|CeI_ z!B^SzTfX}Lf@|Bu|1Z-YJ^cT&{1K$>0%_BN&e*8k;R87g2{c*!*D=JWSM{|N=m1g3 zqG9BLJJ3E?4Ug`MfEPb?{(y>c&?2@MYd3xEx}&O(9K=iv44-Mp>L zpz|?1K=qbKH*Y?K2WpggcKd38&uKP1;L+I&TEY6_H*NIgYK!IwWuDwrm0L)48ENssi!6C~GcBO}QD@d_NXCugyFK2=JQHb%6?$90JGn_lY!zC{f`#<-B zEPA2C06o$G8W@N}ES7@SD}pBzm?7&PL8nN9L+Rkls~|fd^&jXoiSV7E6(tbgwJL!V zC{p{ORKx?aWD;e)%8R7Upz|-_c820a_;pKhA@{H51eZYCa+W z9{vW8vw^m)@yj!~@^8y4cu@vgSpu1sYJSS>VR;z5S_XU~CFszTPS*>t2_^7aAK1hh z@?=LVXstJFw4n7N=wbl)*x((|Ob2Mz%%?Z?0(h3O#P($qsI>v>PlFCw3xy5ml!m-` zy88cr&`F31sFP(7&81#Go!>zn^Z9#0$u$hi6y*x2OG;LwjalqD|NsAsc8KZ4i{SSo z{c+)Z0h%a#c?8^qabWQ2d<5M*DE066f9P%Oh;d1934~^J;`#soUy6b{+vOWUqhsK9 z5UebM7C@i~kLWDzL5^$a-s~trNX&Yzc?eqE`1zUy1L%_HZU&$33Im_+1dSI9)`Hiz zz^{$w11krO)&ddKHzTwNxB+-dtJdV&j4y*`+&|e zFFgP{Sy+Ww9G|KF3}<%maT=mC#T z*9{)M&H|t^z@yi72jrkZ>0nSl-dW;>lNe|_KQpK!(UJx_vm>;p^%8$8XcZ>-3hPav zV(9KqSb{DFpCsq50I8)oN(DW-tzY=HKmYG(d7Qtc5wsJ6f17)OXLr4XZ|8bY{{Xzc z_u*Go@YGxL38v;}%%IsT=q!~(M`_oKb5B4W_;871uH6iV->jQJ^H-2{mr#F$4q1Zu z8*~N^)bAY~P``JVHu!Y@2m2kLr#qb`Ua0H_wX9r0JIHrHht5IQqJnzaARqf!+8+8N z$-v)Y0~&Zd-VSm9Pnr#>S2A!AF zngkxqww?SNw3MoJ#xd7!#+QEZ^46!*wDPwk!^<7;d7b=5UeKi~FJ_+p|NrF^aOK3h7PJhy z*VJq`XjPhp;ei)Ai$E(pS*Jq8zwLsFi!6Hi|3&>;PzbPAKqS8k!A8=*F9aP{2`&#n z~QeN$3@H zKRu|7fzOBD=6D4?*Yrao3j?To-5vV_ytnn_%RZ2i-K^KSKw)hfBM5U~*h1KT zLy-FnzrAz?_d1Z~TR~&|o}J%7+ZMqG_cy;mS-1uo9Blr_!r%G_)YS~11a6*9*!b{2 z=uE^HU!j>Eya5S(V(RhTA|QqDzW)Z#EI)s7axDK`B7LT2N`|2~>8JUWkifa@>@1_lQY#vlA0;H`YUpzC+KQBIjt1!aQf zBNEU`5i%qWIxhmU&}%MQAzuSpao2jgbP6;bfh*M4s}bYno!?))_y-z?eeThD*|YQb z3$Kabz-Zn835?rcpn=i)`QLxYY6qXrA0EA>2RxvQ9-vDdJbG>W@BRPp*?Amv&<4N5 zPtd8py`s^egxPu6gWut%594nSey5wDGpIXb54<=i0KS|D+zW@h$EWil=zN-9QRRRC z|APbFqt|x(ga7|uOcHqY|79mEAE9jjCcW4?X09w}KZ;i1kw zB?_RrEfEqlY;r0&D0J{e(c+ee`LO>^V`>uG=3pTxW1!#$|A*fN;UAy4L3a~EX)(FF< zmS6I+Grai!_&e$X;Svu}D3(OD-Y!Y=Xs+GC09m*6;@fi2esTqrM8x0f4hlVt+sPp7 zMfkUcf>+ytCUZfxILO@66&~HLGmbZaMvg$0W$W$IS&;tVbjS)V(AvY&TF{gWxHbb_ z$m-bbrtu?-b;rw4P;XsjIjBkL0M1X2JHXl({(-KibTvHiate5=7a|X;4?yL$ zBjgNOSk>Us&F<4(F5%N%&*9UZzyX?C5qnXy0JI(N5a>)SPi8jI$?u>%3TlOXztsGQ zxrEEJc|T|@N~J_}2dKzKTPrl-1@{M7d3K$Ffx#EF@dl*+h4O;`|3T-8G<^b(Wxn$1 z1l^f!8e_-N6E$-Q@zHh#$O?0&K70ftMG-^LMCi3){p0 z|GxxXxdhvP0;+FA4gZ6#iwHajsR9F8Atj&V0&o=w^KL0i>|xOU8PI-|*q2`pfx3B! z_zw2yjlBRGy*dn9f7kp*15|(@7ppG}K@I*3FHVE*89GoZ?$M2WWR(Ks2!yl=FS0>R z1k2b9CHG!{JH(c;7fN5fzW8GC5>NsJr$12of+eaKuebmI|H2HUsq+TZ5X5Q-#QN43 z!mxwIQI>Rq>l2W9FFx-Fb^S|uUc9;qJ%JpwIGR<53EWiC-2`iBt)79h!X6ZUFSmo^ z3f{f~nFn(p|Jk+!EFSNbZ{Dz~Ot@BWCL|rF)^C5eF&s)1d#vJ_3=8=5c= z=*jEac9uRK?Z#8h3W5hXK6i9Aq`s++s=CX18Bt2ox`KMLg59UKIpoAk322! z6xlmk9<5<_>~&>y>|}Foee2lkYVX-y2AcVIqwNZF+f9k{kj@@jpXCra|D10pK>J(f5_qyAA zbeC~>96$6Alw3WJcmDLad_n1 zWPWJp1yEoiQer{{eMvv1X^&BqQU`c6AJir zz5|PX= zJr2HN@#qZQ;o0q{;MpA}0SX?+Zo3yB{`~*n>AIlx0DlMQehR47y?a5O5s%K=h8O)M zprEg9@I2lM8gmB~yDwIkfO;aX7M|9wppA+R;GRg>D@leIiD1>P4W8Yl7M|Uq@Lh^K z86`pc>koKzhH-dw8i6jhhpcS{waYzvZ6!gPLqNuMyGlT}C?fSlz`N@`I(-{nFn}$n zZ2;Z%xCGRi?cNLCc`pIhTPp#cJ3;JObVXk3>UrE1Tq(o)Baw{k3@`GpgZm?{1@N`5 zt?NJoKifi=fEss@zJzPROVDyoX#d=^JJi7NHmnV`f{VWuw9L~LbeP{0{ua>Oflue7 zmp<_ErWe|?AN~i0Y`4Tq&@xY#?$iaYtxqc1UkJ^9_`g%aGx-S0n!3^;50twv4#Vv2 zE%SJB9yGan8#H$gpPzWaE&K;`b#CkCfB*l#kPG|&AAB1IXl(QU|NsAAD*yTa|AqN% zc>M@2-$A8&xM$~iX!+;cc@(+)t4Q(ahFrG>+U5t@aL@Z&f*~!<l$D`MEhNtC` z5*N^gMME<&epwUW{@ve4AryTh*A5eYa z)0^AT4L)e6`8^}3S>OzI=u*(ZNWPYD_*-`U`wzZ|9U3kjgxvbr92PDU;BMVN2NW*w zm}muGJJwy=06VecxGT7(1O;2`NzgbK^vI6muArVC!%GoR!$}_0k^%S2z{Ndi9W&Y( z-Hol#Rn7eJ3?P5`biViLeEs6#XV9TYple)TO#2E;NDx2!bgl(?)bcog|6kA%Jh0^S z@+EA1>^L~tfl@Ct>Ajo?8WxxUYE)=@cGoh18Zs~BPJ^zCfR3tx-HFim5;TE6;RW{z zuoBRYmKXlh(V7>C{v4$L4%&0_+oSPK2O|SR=iV65evz%9H3c4>Qxnk6Cp}?!;CO2b zbZG%-rjYA9qzL#m@!|hY@QIin-Lgl&NHBObTQh(*oPbV8h3t{wZ&6_ftqcrM@aWzI z&ONeX22_f zJv!%t);)k{j6jROKx1l#;8kOgbv3ZH_|L%$uJ(csgXj!B@*=$lGLa8zGF%6*NrM>E z3*I>cIvE4LmjJYO5PjOC)fiM{KsO|{9%p4>fR+FJt%pE1HSYz59s_?%If&Oi7sNwr znR$Fy2DQUHpbayR@5vk>zGvqVPsTGo{7%n&I+udB0KKs8|Nq~U@d$qt*sNagniP-D z)&kJx+g4DF8J_g%UJK&-^qT&w{{KI%v-cV(BEj2#__w!$;xnzY^$O_pV0)zbQ2tiX znNlXWM?(Z#zg75mgHvkj0scPF zj_9=Jz4t%~m%jznK5Tx$*a?>QfarcPvmEYxk9Jn=N1*;HWHlzwV@(a9 z+os^H!!?-mJu5f<|Nn9ksJMaDe=m=M+7$AT^?v(6S^i}qsO<_NjYlUi9dN2y{aBy+Bs(8lD6d*#i^NF}|93NV zf+GfIG4zm;&igNtvp_Y)eb3%_3*>?8nk>+Tc<~k`t{%O%`VS--URZ%dy4@W>w>p6e zfy1DYCD@c_FKhRA3CIvNI4D53nR)cue!DNp@WK$H5wtcOJXqa1w*nN%(3Rqy_g_57 z1cldLkSJ)px^XJlMK6A4g1Q)_4Od%zXJdE~a2DJ=bVq6)c7mdE+f>lz1w;$cz2Idb zNE~!dB52|imd8M?!&{(j$Co^s!K=_1_*-U!XD45QH`9abNl2oE<(1>$yaG-m&p|CW zT~0{r4m8vF!olbN|CjH;E6G5)0i+71@8wSLYQ}bI={b0Ppz6bSpvDwv84S48gzowZmf&vzP1SmIPX!m>-H>w!I=whN zIt4*FbTO!W0cSi=n{5jt0|Wo|si2bT+aU#h@OB%+1K$qaQ9vbztKpNE7eGSY zdqLsxBEx_c>LXE516mU_1O;Amh*r;kSo{C~OZ{K}|9c)k0t(!hwV(j#T{{I_yoP{d z?){4>ZO|$0JSuRHgSQcOw}Rw7T2Fd(7IAoVit&R_Jo4#$-w9sE_ku;2m7yEVe0d*K zlm{lf><1axyR-*Hbv}Q=qzzsq2|8T@Qlnz4Jujlwo`?7~A)De5wI_e;9?@7l{`?eZh-cA?4MJ?7oNp zyTQi=cM7~d@#0M%N)rP<-U`{R^`e#ylwRvOp&RoZ7?9SdJEnoMCuDs(hetPfha_k* zGN(uPZqOFP{}*64Si7fz2BX349e95wB)D7F{<8$bi>UU8|1A%fuz{_Z(9P=gS%Lvn z#~rn6MDkdbXYTNrJ)f zBxqtr)NV5u!;6`%Af+WoUoiB7R_fSler99nHh7Vg^Ab8Ak3K$noHgi^1ZXo6!%N#3 zlmpaYEJp(O^Km20eeNYh!9ft?|9}*wErbjk_=Dwan3=Z!EEhIW_cmOo6qvO$Q z+O|o8;e{hu6nu2fxi^ru@W|atnhC9K9Q!I4+6|^y9MjEriFGAJ+!Zc4$Bf5kIv&Sz88QU z2#$<{FL>amD|mFX{&@k?cgv&K^zR3ly%ku@-?9#*4q?6v)O;0>XFNMkLX>%QUNpS)awbR-Y1YHmPGP(f8iwO7o^xB$TW@7*yrtQi7pbQ|J|5AcsC%6>o6}=4VOp{{ z-hiaqK~kVldk5C!(JLyd{r~@q0*Ej;TvD{b&e8@sD*_@8Q`-rVQUFQWqDq|uExheD z6$42rL8N>-pTVMVg6;qRFSs#;J#GH~f01GY_Bu2cMO}-*);|UXzb8}*nh%@i0j?h8MpLLE))-CH+4r?z9fGF&Lf%r=WX2 zosVAJH3T~Y6a$YudQA)8ura(ii6rLJE6TYJoRW^eVrB5@y!K)>OxB}UbpHdeJ$3Wh z7+y?95??+8EUpVOtr{W@3(TJRV5#^QtPC#_pi-dbjYqHOL`V{>1o_4lDg_OLX=NZ@Z!4x)R!K;qTPmI_3O3S7+&0m zh{N2rz!@x6`)TmPmp*VL>y+?dq}+5gQT1xQeZ994ZvDBf3q^Y&_)vXhlneH)C(Jc;+a?K z6-vJOtN;K1iy!(RDOMqf6xcE!&=z*l`5@U_`cM9Q^s;h5WMTOx1SGW|B!!Z1{_6ez z|6&D180@qdJ+RYeTm-c*A>y#)F9`9CJ{KFqi&9jnXXapCDxk6}3L*tItqx*Z^a3`9 z7fujyuyZ|nMT5=2TC85NF}zTRNP)Hd)&+}efW-M>;y#_vJbFbHod5rS@mmiZ_n-@* zdQJDdW@UIGY4+s*K6yxC%sP>S;l+=DzyHB|Y(d+cyIE&G2K6@$UNm+wGx&7tN<9TN zdu(sKWCM+fGQ9AT0EL%nvo>fg;}KBvWyV7$22c+A2Rh`sS5(vU|Nj>)dQU)?1c03w zp$~TAqL*w8FLLyr{0FH8Er3;kh))8Ehv+@|5A$k=FKE-rbB|urMv#=H-jn~n-E|V6 zrkpL)XOOWTy{1_p_jI;PfQAM;4|#UBfx0U%?us)pcyzO}fxOUb>-Q3r7z|!a7l)YO z(Ji{>z667B?{d%phG*k($Z|U-&|r^pB*;?Gnx+>gT0qSIKE1ZCVEZG%3qG5|LHC%Y z73??s@7dV~TEO-qKl~Ah4I1QrVH^OOmQH2x=(TP7+j7^@>(0gG2Ac zPgaH(db*&n7rn0a|39b{vkf~3UQP1{l$nJfa<5@>RuH)ukYm2-fc5!bhU$}p$bC0v zV|Z~3B3GOSm1Ba)EqcVp@M511DCfxTzX}RR+ZSggA=NXa);oCh|Nj?rK)Sna&z^<4 z*5)$UweLZtbpu3hBTVjr7Ff3@=3PgF=mU>0NMQt$7YEvnPpx+->k;x+o|Q*ebx>@6jvTVheUl z(GONo^WxnZNro2}wZW=>odJjG@h7YdFV;bP@cazackdu6cF`ABh8K&pL182M{tBc< zu|0GKbcH0S&i@hh|No0-h-qtJTA7u=7A}9r#_%E?A~yl7;~Om5JI4I~|H21sD(~wj ztf1KMw#@;n0W|@XeE@|6)IH|j$qdGwklfSmUOT#eX%JPq;?NL1wsD}zt3={ryoybY1O z0+##+szV|5rRbs4pm4KQdIoB+g`RjZi5DEBpxIUMdScfDFYHAjaq7_xx+(P#XnOO- zY++Euxt{RoHJzXiZcTc0vgVzZWO(6t7bIhwbXt-D7DRHO%_+U6d%m$Uyin2thkyQM zX!u)!T?7jM6%qgczhH)VP31H+>J~%VlYBeb7+yTr1P2EPlF3gZ!O@fdl#SuV2~Cj6 zyy=gjf&AbUC?G&_a1RuiE5XvN&tcLB!P1~Os1N`D|3w$X@YP_^XW#-bJ>dWU7ex^9 z$)`XL^63P{!F*7IFA5@F4OagMbopw90X%O!dBVoHT5Q znFOIiOrXB0oEj(u?|XF0s+^K!c=7)>6N68$EW;%>2A|IRFBrh)*m8nh;L$7k!4>T1 zyszLqaO~8(H$-TI+UiRo{@n8(s>2-l0b9xux_ga|2C%P z2mCf{{4GBjK*v{r?vrjgz~3^3fq}t>g}+q`G+5eQ#bNmEMP<)7(6$Ni$O-6Fc2Je+ zx(Rd$3Fx*Z0gq&l6p!S91fSj-PDYPpj|`7wha8XI5FtjN-V#nmpWYk>Mu%_5!Dl-B z=Wm@1UX}Z#M8dPvM#Zx;M1{k*vqnY0x3fe=!nZR=MZp6UaGj_}0)h5FRB`xp=L@_z zy%Az_vTK4zZwLdUXR>RGPj3yFk>S%@0%qiZZGGL5Ho=CwG|8hoio>Jzc1a{?*(}`S zt)Po|K~k?@fX}Od-o?Vs-x~WLx^5eE9OjE%*^mBvbRJ*9UMdM1Z4?0wK6QhR$&~kK z{=v%MqW>Sf4MqYw`T~w;(BKVZ{KW78^5`3Ee68~-WV{p9NBwjY(noz%0_`AI2)y{V zn~4FmH1YTg9ncg->w%JRa2a$TG*;C)<<0*Uj3v4ryFi20;0+}ge|R(>VDzxOP@)ei zH9PNvg9bFh`SN$`oByDBXYk?DyFg=@VBsfVVFys!j74_gXMVX~9^I_5w?J(u29NHB z02T&@!>H>AK}qVxWstX5f_7_{a)Sq}p#Ht&(QE1sYKV6pkA3+r>kV>p=a**)1q~KH z2QMH2rAbfFiI(6EJiW3HL3LmA8x7E+aF1?(g)~q8ykj1nz6X4J_kr3wY5X}y_yrvm zJUjOZfLcwxw(-X#861zdfezRK1;q>f1kj3Q{=CDUz4Jg#Bgo9qeSS^W*1Hl6F9Z@m zOON&~0PS2zfv`bKtX@Qb*=?Zt0ng)YAge&8c^+?@0P3TFwuO4|=N)i7-Zq1gfgumX z=g&FddAtpDxfMvIBflV6GblDyZa`vFq!_eO`#w0a6oBrMKk=dwRDySxo&dGhRKd4( z-hVL{B-U#ic2tt#Gk+cHwYd`DrB3{stcUMNFuaJ12bG+@2RynRIXs#Va)1Kwrbnmm zi8TJ4+djP;PJpJ3G-Ee-Se__x1&;&zcJBktlzaBh15=jwOT@t9KAoU@p&kEU_3gIz zw7g&X-m|;S0u+kfp(mgQd01X31r4YkNaN4X1>NoL(K{Jr2)|%9=o$}@-G@ASCkrq# zFo4*XJbEW{urPq#3*w*h=$#BYg(i(Z=MukQGe~C|f6hsML9h;f!EUf(5B|JU5aDi+ z;um+;fmZnL29E_5fL7}D?gozorNn{aYL5zNAm~Lnh|}$&BH_{844N}yJl+7>c?b%7 zkLDvtSLD8o1ucR=q*g?J0}TmrfFh{*8YF^>3qgbBrguz1Aq*Lo>b(B~q#v|J?RYcD zMIZ}aSj9a5|6(cckN@D|&6l%zJ|HJ)P<{dB2awSkP@^RvMk^ZqhhFApO0ze4u_Bq_F8`=$--6?$f;hWY&vdGgikD(sDwo^de zJyVK+U{})fpL0VvHSxUfj z2p+w*dw%`@fAZxqb5`g*U!d>;h5w7>-~a!=(7XKZzehLg{Hx&5^*9bLy+E-D8WRU~ zu;BXzKobLwoqzU&3Pf<)c=5>#RL&pv=w?lTXm{ye0SYk3Z$}wRJwR*a8NNOI4_l+( zdH;prw}<~7o1Ze3=7A(1e+5Z8Ko-7t-hc5K#0Ott45`XME^vX|w$=yQnc|uJ=S962 zsQ+~Yq3mo5S=&7BJ=$X{4{zXl&hvG^;*wvtJZtIeGudS7Ihfz~x0 z2kiw5xcBKlsFN81HcP|t+fnvXPSA-5t!>~vFVA1ZeSP@f@c)Z)&qpAIAU!%@wHX{> z#jL)qZ%chaMwo(J-+BK9FIYN(1LQ9LR+az%|AWu_kp^FR1{yPeG283)|CikG^$3Rl zUr2g_ef3fmw0{V)Tl7V#*X#eFMXn4`ekw>;*8l&A@%b>&&^mMl_Y1T6AWwm(elA~v ze7OiAjEP$`o9x& zZVkjMLI=Wt?5BAtm-QNY?$8V2tk?fvpPB$N%cJ>?fJbNP z4^S(uM9-u7KTAo4NArIX{+2pW>*CvS#?lCfhW|VezDGAJ|0PiVvUn{BzOS=X+oPNH z$z`yRN4M#s1E99I?+-`t^wTa-75aj07YoBlaQOmSkN^56qP+9yW_@@Lto1cip7rNN z2!AuEJo4yfU3nhDUkv3-Lggoe_@MCc=q~5*=(Y!6w+rGU{8anHqqp|Qi|=PZr@^@X zIC&V{ehxJ}0BV4Qf{$y5++6B)nUw(+q%UR|{`n6&)z?(K9&{$m{TJKLQd*cK>a-`&a6tx*s$vv-UGM!u1hwBynIP`>UI}(T3rHN<{ocP|;r~(()%|}wdQIPc0^4kO;KgY@ zV%+a_0V(`v=t13Y4hiZP?RrS=-vu|iKo2GSUw#6me?3_E7uABp-+B$${VpJJWcNpZ zfw^B3&HbS8*M(ccO_ck)&Lg@1hA!0o<&dC$aa6&(Vds z|4|Lt{j+z1-QNNdM|S`0&oK9A>Y|1}$o;u+OT2Ya!avkQ^B<(}L7waNX#U5@-?t9b z6W_<){KBC52WL6xj!Z@<+tj1^A5#er|2}snh)9{TN3S!JM<)~iKIUGL2L64{jG(FP zXvdh|mH^O!YM_My9-ZerdTnol2AB@KDAxW1>c#VKbN+9m%iq!k>gQYWw}4K)@#yvb zzY8?G>Dl~;t1ic**EIebXvF2c;ei)Dpu?xSS?8Vwow@POqub(zmLI6@JpSU*XAljt zp&Vj^AhHc5yf#)KbNQznYPnP*!N2c+Fzcwrw2 zI&k7RX!QDu6R1&g6m$q;NfxAQ{V@6wWP7$x=X=ji7L^wlqCqV{W|X6fN-aE)FBP8P z(fPyU;y;gzKRjl7eE;Xsda07#gYlC`^9x3gUKa*NkU1W`E<%j2x4mG@0yXKrzp%Xa z36vxbRe>s#Lmu6%Cys+FG{XZg^5Rf7kAnKg;PwDShwCL!CI;!42G?POssmhqzqo!C zY=Z_|eHvUn4;J;H@G3F$===xrN$a-?(-O)3T%hAG&R2f=4{j01dUPIpxp4cB{}XnA z8pufPp%lKxY0zl3>B)+=3uyhwF z5#XN-x<9+uh2j5UaC@oSjmOfRr}Ra)8;7MkN9luZHx^5GmeL#DVulAS#Y-9KIc6EV1zH{Nd60(evUDkBdL~Tf9MAOCaNB3=9W6Ef18kc{Kn0Un1+%c>oky zKRx)@pYX9fSR(Usd(RKpdBYx{YpX#$1c#S`Nss?e0LLQIcn7FWRLbhn`oEO*CBxTG z|2?{)<3y~b?;$A-6ml<*c07jM#|}!bFT(%-|Gxr!i~505Hc-ROfx)9&p!t!!NAoZK z(sv%s6%x#)&p{W|ql~>k{Rh_gzf{y?A8000BRh}p^-6gC54WGc^nU0*#wn)dpaj$Q zAJovN3zQrf!oUZ1 z|48xBhOMClwW~o5IR=oX($k>zTF2l{;ws(c(d`OS4%z-wntSr4&H_-tI52oz{O@t` zpR3_XPgoQ=fU?r}cb<#~JVEncmp#CD*8czhzur^uqTwYU%L6`=r;7MJ_}BmQ0G*Qp zUi3Tx)dHTAKAqQnI`6$K?RotF#e}qn|3TpoDl1?EodU>Z#S6m&&CeMj{^oCK1Wh4Y ze&+942r75ygVLo(H_8o@lRzpU*&mz*TtGKZgQMqmsW)htpx5^SIJ|s1Qy=VW2Zh<0 z5O9%$x|`h>REB_uzwd!M+ArD7L4gA9kA6GMUb@wzo4NS`XgHCpbfrh(ARX7LBzxN{1^RM9naDPAyl~Q1Toc&K|wKH#|Czfi^)Z*E2JK7GVBRDdF@0k3;fL1zlp~ zqN2-qsrkWA&~D!QQ2WbpVqC>y#!hQos)+jPO6u?1yqsTZPQpZ@OxEmr8fdHGT6 zp;BY$u*3v-;$|%s0y|+JD8IkB+5(OqP^gp~dhtE<)Bo28Ji1xSj)4orH)mi0+8coq zppg6s8T)O1&R(hs8kTm3M1S)O*5)4q<)$9JqV1hr3?9iWO&*LF?EXIhmy;gNpj*&4 zf)Zq}^Ba$q@Bjb*U&0B#2Yn)FmF7vqOZyCYK^L;$f5B1544!Ok{-IJ5zORu7BKpXL zg`xF8NulGnBaEeipbmX$Drle~!Lyr11)BUyEIpck@R$0+7SirJ_5;*4aRHkEPP%K3 zfr?HC&^b;oHf#r-xOxO!r%L&BJ^(3z?>Fqc6YbOaz%eHFFlczg^gOtRdR7dp1CJbl z)qz>zFOk;6fzu24EJDZ5FVNJCa%;m4!vmc^njbK>ek+j%O;~_uBrg8u?{H#bU@*M& znjdnWOUr>09gmB@L6Zu zdeGUu9=*ONAn^}sS%C8Xan}=|y79%V8t{p_D*P>>pz+ks<1aF-Ky8g$(ajAG$$ zUC+S4@QGi*TfnvTNeLh5D7!R%{e%4Npt>}TU*n)hZ|#Xs{DQtaUd&AfEo^>&=@Y+z z?~XKn{X_gspjnGg{E@7aW^*un;*VfmGz&!Q9Qed9;CjL%`GW2Lle4Vr_(4+gvp5($ z8ef5Sntbx$*SV3#|Nhb^4}Pu7Y5aN@s@V8jks$CQd4Zj@`UC z5dty>Qr?1GJ_G9V7c;>wzW{alCD5E(Uohxg5wMH-V_4&6axj1bwe!$RYw%t{(0PX^ z!8ck!*O7w~MujuTHHTgXg6!|S{~`m-Km793-~az#?2ZRdB)s^18Z@}~(xcb(_z76E zuzoKr6RCoo2rb`0W1HYPmF71RFHZ0K3qG>5qyltaeCJ_MtHY!9KwYM*;S--;-8rpX z46hZD#$%d)FqdR`HXmX1Z2rSj;^5IO?9uHk(C|#5^oa*(vHBB_-eL)l)^8=D-n}(T z8Fqp5z_KpTvi;H%pwiZ{*F}X9TI8lp@a((;67=bO4ldat;xEfUr>jBAweDhx*Bg-R z@3nn>3^boxdgBGdJISuE{&`&dk9?-vcMrxN6$0R<%Ild(?KR{E5!=a^tHU4vfAK69lr2E({h>`U z4p_Mf@*lX^1LY-9yR-pxa>k3&@W=o6gL1t`=dl+W;7zsnK}_E7|NnO$0;l%YOBFUA z`$2UWs15bPIs7r?(lSsA1D#(B*Z%S=Xe<+a?ZLTkpjHC^JV@IIbd@&9elo&W7Zko1 zyeSXg9(eeI+KWixt4U<|dWSv!|Dr7h7QP_=Ku^Z->;xav0jgCldo;gsKyDe{Fg(y; zdwi8714Aj#G1h&nBpDcAB!+@!h)NfLPO(*u10Q_P-!cnS19!Wg@aZlEE$;`PF9kZ= zz>$9+n@{KGmII}-FF}WE!q!_udgg~2K~)tfp*8=gFMADY<7s|=@d0E3=0n*%g?De4+a?vQed7%AQ&`3VwEFua1 zZQ&~X+x?W#!kd4an+pH7c%|k?_Gt%SvNu1lZ+>Wh;5C!xA^z>|O3jbuJ-Y4F4!!_M zXr9PEV8eKUe_NQ6N4MF5S4_>189ZiI1x`ZD~jdqJ*883^bBrA#wV z76xb|u?2JijwAmzS4BtuZ6PX(hKHIT$(49OI2T?tKj6Rcs`(MW#RbU&stmDz|M$*e zZU|�G*uF>mtpF62kng^&tD2k3h~Q1f7TF*zKy|*d3yxV0ftU5yJy!hLWRT?!gzl z%@5=czT$0uB#&

*&#W4}L|MG`OpI z7?z+oK|?ghH-I{4w?JKL5Z|NoxZ@7cE@Idglys1M_g>Jn12i|lI%&{@Iz2k~f;J8F z3)bVk;iA*s05!7CDT6uy;P$m=H~(k;{0h*pg+UsB{&DDu%4z&{zxg${f+o87j~#mg z8m^Fdt(vAs;&=tWCiuz_k52IX*o$lHp*aXPYymPKQa`?^S`W+jpkWJ$Hdr6jkzddS z_e~gxp$c%nS{~A`#*_ZQJS z;9f2~V{w5pR^D28#scv%G8P|59zA10%Ij`+P$xiWgwl0F-!&p0LbKDAs~4yV^as^K_xeMxRb3A zG>8M+hYs3J4y`a=tiiQ-v>B`$rUj}Tr1M23E-e9|qkJJF{hr7hfNJ$f%eIRGT4h>t6;etRNjJ12hc8T za0vyuXbqGwAniNQIHoh!>;)=|kfs-(t^!*K8dX3kSB}Gq_!h9O5Z^(@;h;eX+6xUD zj&tnhQGu5Bpgjisg8q0@q(|qkPRM0OzfRzY?~Aga_{J7v$8l+y2i5{9Ho>!rysMxk z24aKSseo<9=2$6Qj{PVD@*ilR2hvFaPu7A`BxrB_ z3*##|4pi7B1DUD>pM!vW7y;y{1hkV8bTGHwAttBtp+@{%Hvx1%Nf@RH@bej7fsXWmJy9^(cb zuLkMMeCE%OgPc_aUKW)c_JOFC(WoWuE^&}cK!XjC%`{e1FmeVYYfS_zggRLr?8p~? z7lU1lxN;O!r9z|@Ee5$5vwKYb{Hy@j0pNAPpoY!F$v7PPLJZ_1bClDsLiXb*{&!;{nqxq5 z$cxJg6|l2FmAO3hSRQb~gAE_HE`+zQFozE{7D9pRFAj5|~xcinU19jVr za0FhR2)yX?=oLL6ga`Tc=!n8@dYr~qmD4~A2 zSBS&mM}6P2d0y@%mWpqpq~FekSx?q&{Y=U^N@oc>}c3w+E_;bl5urW9w2p5oIoD!yn!_k zp3TJ(2pEO8BflUCmrD2vg5m`n7vNeC6#OrC&INh>5zHZ-pen@k_yO>>IF;kVIuJQ5+cV~PYWP9K^+{}FU-L%Kmz<%w02z)0`|riG z**M~#!c5=?c0%|E9GPJKY*0!-!~<;UJt#%I2%3#89>DWwSmObECIIcc@tBR((;sKy z@HB;qK9Ua}?vT(uF$-)zB#Fa2(%|^WorUa4YNYquyl~rLq5i^s7HT-7r1w`dk(~f` zF>Fi%YdB+1@1SsgFca)g^u*OU6Gu2xn7%*qfLqoxW+8bv{RgBm8afkP)3 zBn6TBH3OS}!Euh&zu8y|SCD@{fJ{Q&a0rgn88dKr7^4&;ZAy-T2g#@E;Fx-mGXoU0 zptYZ<2}=azwr<+;w=D__cVwNxF zARLm2fTqOw zTXwNCFnAny-2pl-;9IjTBLjm1f9qT}&}s3kQFD|T8Y~$2TYEwLZf6ePDTkIwrq8o&Mf@6jvzYY9lgih;lN0yhH#_~_%~&Y&E{;BmY;0u&}71CBd`rv4fD z1)UvQ5Ae5!vN13;><0Omfxp9pje)_Zd$9*21A}kt6aE$sPzZK6S1^KvH-BJYVDRnE zQ4#RybX~!}tr--eE139OXK^wxtYG19nGM?c)6Ht!pv>UgdZ1Lxr`Pt-6MhDMdC>ht z4B&}>pU(d;l+ST6cyzMzG$=EGW@?{%b{_EP7X4Ze;$A8>@ac3t;L~f{0oLilfYA5) zELh(eu)+f+&waXG4|sGQ^61{J!N|a{&lu#n&d?1Y{V(QE25q@=J>bzDy20?IXXkOy zHV=@B7p{{*MJhYE1W)77=XL!d!~it{+)r`@jh8o^Y2erNJ>c2N-rWp3?z=aDv2!wr z;n?YJ@WKgXc;_$J&;`_V&;b!1ovs^RJe~x$A&o!Z_kc&I>jJQ`4QCp_CSx}e7MKG3 zEi;%vkuG|#4iX%yKE1YC=>iOC6X49w^;7hnL-^TYM6hUlw->+23(;0angjtD=WPTvV2{V(DtfiiRG0>hKwaD{l$v-83W zHn`_%4}ilEE$r$Q8qPFe_v8z%NuVMON4PC`v3epn+`@iFk?|cjlh9`G{C|J7j=yaX&f^#A$RmILotepV%J;Z2fgwbFl9r*?G@dWI~2_Sd* zPVnjcxeu%rl-^wz_;jA~?L6@!cmgOcT^E3j_UOFt(JjC)n4#d&c?`0J1blO(KsPvj z_j)mQc7qanXMllE=c^aypsntmM`7ucgTHkvGbnvRk_>3yluu{wf)@s02e@w7xsjWJ z0W>lJ&Tk;;7gzgX{t7(+p0h+tFyVOob+aGja^D3$oxdQ<96URZf+7So_4%R(Y_KaR zp@bfQg;FTQG*98*=t9+J zZr}cUbZ-VNMEB^t4+;X4QqWQ#u!lW6T~q{oI?E*-za3*Q<@Ig-R>I-a`R&C3048VPc+!WquV*aL-T@1^AAS;zRI8f z|2J6e=5H+kF{&8%^S7pfY-rx|@xMp6w}(gbZji$m;5AVo6Q~m8Z(R*CyEE9~W&F?o z|B?2mGzWlo1%MU?fhtT$4eY?*IveEv&f_ngywV4&LckEx~8+0 z7<@XPd3M(_yokKd%>b(N6j?zH14NbB-3&T+tHDCIl&hhFF_pjN1!!5$an~Ip3=9k} z4}J%QDXfy%7Xw-@VBZVspn&#BoCGCEkQk_K^rGkYe@Mzp}u z;&=lTe4zRjR!(*w1BagvL=mW7IsRfgC`=(`+&<9BXr7(NUpV)GdqkiWSieA?2Z@8~ zxfidx!Nm}$ph-Od*{ToG3fa+~2$_Zk*AI-4P(rF#9Sy+x!9fZyK|mY$Urg?Xl_05D ztDJO5p2u2MPwxhmAfXFjbv4Mn(29D&3oEcBxL`~@04o?1h$$FCg0z!PZPY;w# zJCDE6>P8J1kT^JCE_Q)j0V?-PH+Xd3Pvg%|Jpe9+6BO_l!JxC$o>YNGVqG`9Z2JX@ zOooQ4f4uyyPricYo?n4;;LGb@|No!xLOSW&e~-@NFOnDh`S00z?4{^$uzF~D3$Djs zw0EJ^Z;;vtBB|8{4rp+-4!WUS>pe!(C>|8n{F<@2nnvnfzae)g`GDI;NWs0~#pzCP z^4O5ZpC5a`qnlT_Oql_aG9n424A5FK1D{^ox|{qA@caU=-!C5qr`sc?;KU7T7y51h z?TUiN4yYFL>GWOT(doP4MLXCHpqTL808eEg6)$u zM`y7IxB~*3FY)NS(6AWPsNe6=`RV22&;S2V0L$%UU|@hsyzB)#h@qi^iGjc6%BTPT zUvmCND!)M`rcdXy7a`ZV89Y0WtYGJFJ@E@v^BmxB*$-lLGc-St_h|mX!QZ<6*Z==7 zcE5W4->37NPv>)RHGSyCEc{Nm3SFk8T*)0yMN zdk9CuqtjX7#Ultu!K2ez;>A@Er_))%qdWG;$-`-g^aZjX-TWWgpvFZt$BXw6hQNzw z5QfByyATG%oR{adzy3!u3$&gRWZp~jqObp<{XY=jquX7fxk7@egx{l^p-dEXJ{^c# z`f&%SF%1c~!$|5wJ$g+;+?5zSI-kDq(f#~C)}xyNUETyLuLF^HkU$BqUQ-dMJP%Y} z0krDeqq{=k<*ox94CwyvHGSd+vG0x!*ggjZkM0VImwh0$2*v#J44|-b4Dsx|6713W z`Ng~kYz*Mx!F!-0c!Bt5a8Z0?$7i(hif+~;{Yng;oj(mP`Sh}K*nv74`#ysD@!b|6 zUz&;WGI(?cC^UE}FvcQB&je8Tfx^QD;=W*y<~JNK%ymBh_W#*aaH@U|?W4;K6ywqxC=qug5OX49Wlh|Lr{#4}sEwN3V+zBT8c6 zmuCRk=h17rEKPvnrNS<57=Ip!FR+Un;{Q<3&c7a=-$CK<1>&NsM>!aLyH!*`6Hu)O zN)$oPczA?^q4hwCu}AX}4v)?o;O1T|EFOJ2pTF2}3Z$U)zE9^PP}$pSyZ^f&!;4v< zTW>q>zYyBb!2l6n@m-JsR3|q4`~M&0K2RKZG`}%O@#tnz1?3fwPS+oX2U`Ev<#}|o zd33s7X#USwYMREM&-yk?h=E_z^?^rc=#A#%jNl7jJ$g$oyl`0#3h~e%DIVG)U^7Y` zPaX!BLv9=%ovsg>|1*^edmMKKwFwzsAAr|C9^GyN9-Xc)n*TGGtlGuQz`(E%G{o{k zC5MOMg}mNtZ21A?UReI^c9&@W!BnDJE(glVb{}E6m-&Seh~4Qd@LB|vkD7llmvVb_ zTfdM73p0CkS1Y{W2eVyuw|ErY9gOb9@mm+GQEbG7kvX{rB+Zv{WA1n>ZT#)(+%zb%H{VS-+5327@tAG9f zdIdauUhD?(yWxCLe7y_@4W&WGgFt*_H@~n3ovqVd4J}b>K?Wl-TpBd}cRmG;^?7#w z0p&Vy7Wgvb&wr23`<|UgU%Uh}4;dctw7goX=h+R~PSfqJz`rd_!6;Cn`4MxeWOtZ^ zb)ZD4VDm4g64`QZkM2kg56d`?5=~IrgeFW_Ka3M}Q6htfC7%bs%c0lzpyiTBx2FJ9 z!cPD!a|9gz&A*sSPJ??4uQ!9@4dge-*raFYU-0ncXOMe+y48KVOH>3ryUiTF9cw79 z@#y@}{6L_z#<$x=g~PMELZEy43kC*;)=MS69^L(*V?|!`g3R-1KEUW%DUN3U&ew-Q5In#YS+wb%cByX$`V zbpG?`ws_%p5LCh(gIVg)X#nb+mWqNly$gV>n#=U{KTOuMkq>0x%f$a^^(QEdJeuDq zcyxy=pygqYZYKqgZukX%felX;N^L+D254hPr|SccWG4-e-qHvALHmh3dR-V8L7DMI z*!$Q2J-U%|vnnVzgZjJ82LxUpLZm2<&U4MrD9- zB*mlo2Xl#@L&HCw5)ZIH1wsDg@#toQG=W4)43E1@fXV=mPIFKe0o(WN&vADNP?_+V zKcA0ZkRMWFxC=n)x#R8T>H`hSCmAd^Su4RD4AIUbt7JMX_(;f!8?bv^}^UxxodN%_Uf{h%r*S^;##S$DC( zi=Dx23?ALapdx=Am|4sLVlM)*JCDCO1)_(aW2{A;Q4FjlKB+zYRBk`xVdE|M|CF z@JJS!=)ri(?*Airec{pV&H*yWqxFC3d472Y!%LlFh6g~A1aUvO5%c;rTz$7c2Uw{2 zCsWzg=AX(d37Ov-^;rbjBuK&T|$_5Wt{+23m zH5Fvh9mIkhtP{H3C0Y;gcclLR|G$&%FerS$?pJvE89YD(Za;zAZ!I?9_N7Pj8v(Q; z??tB4=l>qPrC(rS_~OLB|Npx~zjPk7yzu=Zzw1ShdoM_h|klT_W)92ulgKN9R3IG5>7_H@LR(>3jgKJrU`@S2P0R zSCA7tJHLRJ%s^U+`o}@dhW7_Nx+4@kJCE`UI%|L$X+IK$7(9BNEsi^b%S}*M#-}q` zfM3wr!tvV?_EJ{g)+eQ64c-b&pc>An^99^a2hboNXcSQO&zJwN@524xD_UZ$!~j0u z2sBq13TmnT0lUGYn>Dgci2+oZEj;%1KWJi0!KWKE{Bzu+^RQ3nD^L)WZ{cC^>@HRC z>?~0M55I!0oBdWQ?bz+A;n?Y-q5*OTa+B5pJR!H>_m}^#Z=wZw?dck}2 z>wnPJvwNVG+?@ycw=wv1W-2s4_|SZUtAp{yx(ZOs!%blY^updiP{6?w4Xl*{E@wPi zZgyHI^TPC9(&QhnunqFKxwvP^M6KNK@L=2-vXxu(CV#jR=WmB zR+x4elri&J@5Kr+_;iD2i4HsR3%W9Z8q)%vouvW}ps5d5kJfLcd7y$q!K1re!Lzee z0wM19;$S%_vR&bkEdq*cL@t50uRD){CMZgOd;!e@VD<|^k`X_?fQuuA*Q+OhS`r>V zzWjgP0nrbQ&oIxrVp!pfIW9Ju-=6{SOoUSeZ`CCsgGBDV%^0$I#?7JN~Ji4P4K-W~y z_ULw0fLr2F0JdmyKg^=i>7e?)^ZpBk4IH3$x@Yr0m6CX$?%D;=MD_oL*h+B1^J=aY zKu&nyJ>Us16`t^-_}~do%A?zN256%nXngMfix0oSo7i3p^UE`Ihk_f3#*7RMyIDX( zS;*;0%}~#g9hX~eHXk4 zfv8#Vnio_F&YTFaKYD24_5mZdXvf-tqu67|~t3p!1VQ=e-yHD?a~!VI>D@ zQ`as47ke*wmVZX>@+11IVUD3by`?um#-)_tzh6f`u&UKdQf_~4=RR!fXgS>8{nx;(5*C{-C>}F z%HL88T3rH5ti?9mptR})?(nC9x&WY_e=Pqt21sHK_UL9!tpkn1KJ@8)1wO*~oloa? zpKgvU#w>;xlm7hw9~J4*n+mDo9pgY_Hw+%#tcG<;44`SCPmn^(r<>u$G|-rC>w(gX z9^Iigd^(?b^x7sr7i4&G?#+MX&_UGCrX|Lpa_K3kR7M05a?ZVBc;JPjjYW)4_vX-F^c6+XR~*@i+WpE2#nHVV~|o(2$(~sJ-dz(HnXJG?L7}3{)Z=1?kfV zHCy&~fCk^WK?x*_AqzACe8IExpl>Jm&eBD{LH>Qs4Jl`KKr%(>4a5MEH(FRg>aFfN z4sZ!m4sIZVGJS!erW%pp!4YNWcCM>fbllOE8rf zm1%&R3i;Q?s>vD<+IdB6}}{zKPC`ShxC z8YwXZgCYgIQi|inPw~(HJv)zrs`EmR=HD#*Ez`ld{kI5z%UnhVhHr-%`CCgE85kOV z^YFLK2FZ1^>ePU13ZKqL;B5aQWiP0;U=3+fg1q%YXg;VJ^Bmr+{PiNB4XGKUJm>BI z*M$>2T5t2WvO~-~P>X7&0EU_S=E2SM>HGy6zW>vTWajzVZ~x zc(JDdl;prI9`HFE+~Dl{{6!0B=&tz)2WsO7)L*FPc=-!l=0MXE>%($zu)Lh`57fTt zX8l3hJZ({+bWcL9e_r|$;-7VxR=&A(XqTgn(27(APQiSW1NFflMVemlg--x|coz~I>M zi-*4@1H3+g6=bhZx5l?a?EI~u+YiCxO&*|O2T+0LYWM_PK3spXv+>V=NK1&nr57CY z(F)-DvH;8}hP1FbJzBr-<# zU_0m0Z2=i)k}jFm@Km5=szv)!zml@PuG znBRHbr!y4Xwt4Zv88qx4y27VBbb&|n4;IhPBPHUX8M?`!S_-t{q8-HOJOpY_z}?N? z>H-?`>%8)^87zDMg+v|?gGcA#m!JgY)A{J-dvNlDxd%G9#mwJY{O|vN*Ovb!#-JY7 z<0+u|<>R2T)Cn}x*Ig_DSt{e(`R|2WAH+n*f8e1$(0EGc{TCZ@c^E+bg6;wZ(CPmR z;U<*s^XYu&)A`)D^ZN_!O>aS^(d%`Pa@V7q^&~Vr3_$7Gqnp*T911Hpb7{&J^>lu^Jspf0cxdq z^p@U04#^jW2VSr|15W~%%7cc2LSMjZMgG<$V4s7g6+!ixN9Qq6rPm!G(fo_K6g1%n z8rFbtON^R-G4Z#&F$XoE96%K!hevPi1JHEKiz6?<=9eshjHSJ_iMe0j2v< zxf@Wq3sJd~z}yOj7c+kR|Nna8i$;;x|H17uP+GL!GVt52sEK&P|=MX)cmahm_oLgLRv7P z3WXOdzWx9IQtdzJK8NQoPA>xWyIpU9TBe{*UaxKBT|tHyCXfFAe~~YQ(su@>U*z%y zGT#IqDe&kl-Qm$&x&t{|fLf?;AA!15t|vfqD=iDa?f4uO1;=hziRK^7{H>t7Y(2YO zAw$OCEWzIbI_eJ`{ye5g;on_)!lSqL0%-E`#g3;SLqW5){4IY#q1_FVkOGxKyrA=9 zI6!?7nZ8il~E{5l>&N`S|I7?DrecRV0x4P>){GscO*S&6l?~ zV$t9E6f}vqA|En|H-qans0gv}=q?v{X?=!=0cnU5WZ%o6gm&O8Xk!C;JoMoYGMA{59%Pj^j!p6D#99;tHj{ZYpQ=s5HzxCc;LlS zW>8aw)ea)=4j1obM(Hj?{1fWY`3Zb{!9NdB=a&IA69G0JRQ|nQ`1OA*xK?33kOywD zy`1s#KkE7lxO>eY?sbQ|7uC5h<{=C#h8pJm65Ilqk^}ZZ?oF5v9y5V`Py-Qfg^QnN zLh%78{J`ZgXg5mdRq&81XvSB;qqFveM`!5)loG?Eo9){Xg%Tyt&Lf@&-|#y&KdA?e zt}^krg6@y@Xg)0PS_xWzcc%$>Hvakl|9?GyJLq<3u)5L$kM3wt%lHJS%LR(#Be{?` z-oo+vzYFLL|C6qrFTgi$e*-mS&K~Dw@aPRa;n5j-!J|9$ghy}a0Vo@^O9IsDfG&UV z_kfh?pk>M6MhCP#*m?g&#iZB&J-#zDD1f%ERD*JJ^I?IPkkXrVaz1DT;gLtLX`71x zH1?M>e*XVLi1+n>NcLmz(*GU9Tsx0BhI)d+&9M_SEPEQ#2B}3U zXipd(0D1Lh4#cY`*+IFlTmj@=P}lvXN4JIH0Z>oYgWu(bXXniq*N=gHy~Cq36y(bt zAfLlqET#M&%||qlIuS22ctA}dh=1Yn3GP4pb{++dPMiq_j~8no$K?sb10LVmAYlT! zdETS>n1D}r9fwc18ECtU38-NSYLd?eEgVkE{`}vk^QBMcqt1Jdod-Y)K;ul{)#t7| zUa&(Hmjr=2J088I2f%~t9-XcSUesIwEwB3y>iTX3myn^L;bUl=rJ(r)+)gP|cv*tT z&mO(LJHTb=zC`fp_TOJv{o-YKy&cxRdT~1I^MBvY7e1X2J8wC59)v3U|HAkuFT+bv zHSofd`!%A!0tz2j!vil(z!B;IkI!I_-qI%?&2J<;y5mtM^?g7bzCU-oLz||SmB$K0#hlMrR$y&Sx7&(+ZEI(f;QQ;K_2Klaq{p4 z!;_#@_45zDzUR@+S`H~Z%sTm@8Kdvtr~fa0a-xMN$o(G8Zyb=F{{!OurK}oV9-Y@;f;wE_dD7P>U$}6B9KgCX8(d7LbijPH=kF)v5k7GJ z2J#QIb&Ap>gGPxU)K82^emW`x@slRRPX}I<+yk|N?!8z8iWii`A_ofVlZQRJStTHj zx!w+QjQ-zG|6k1Fc#X7v7CC*O8uX8Td@afe(uoJY1A5vcJ11&!R z_0JDa1GVW`V<74v>-f)4=U{*rB_6$?jdRDqlT&IS-*g@a4MV>!rG@ftXq^1_=kZgA%wb57>M6U#PUd{_odm@&Y`A!wsIix&LDS z9nhMZ`!CenU;lsU3hFyd*xv@K-^^}cP!zuW|^H^5_q|6kTv2CeaJe)h+s`G|y1=X-?oOWT>C(E%6G zwKG4!tKi>zG(Y&`(dl~PMNuKxAtn6Z4l|Z;`B+wH@VD?WGBEJ(JMGb3dcvpk(d+e~ z@n6=L$w~}9)(ZSB;CaJdQAufNRD;HN{w)3aA2b`(?Vx}e!6lKNo%dgYf(brf?%B-_ z8Lt%KZ&d*`)w)?bA?BCVc=U?yl|nLm0WPy)^XT_IJMX_Zb?eLjmyf~G2KMLw7ZOuI z<9Z1ko}I@*iHN`TDCk&L(9YpK|3IDYXP`;j$slcOKz$=feF+Y_|42dC^ymNov2UYhRFYf;ZRT76^ zuqT0zV-yd5;`hrH?-9zLM@z@wYBGzqk4%A?!j!cs$_IRigCbzR#xP1$$iBQ^2Ckzj?{^##| z%*epd>;B)TThFuenn!OON2lu?$337z{Doxf=l`Ikq=k$O44@EjOoW7h;h$IkJ$g-N ziGw->-+j6*UiAO{1S_39x(g&6za3@gZ`}mSajkFpTNObWuA6mNGNdRos^eksv~*MO z=yaXH-*N?1a5TT+05y?&LG$|WvKT;1E_`}@5BT)D?sy^m9JDvE^uP@7uW?R4wzjY*c;?UbX1i9VX%1`7xl|cMfc(^Z$$Z)4U8(ktn?b z{?>0Gn|o6s>(wFE8^1hsrgk1^&sXzb5&jm?sHfw%ql~3>jtzf#AbgK*R@Ov_XHsjC zJkx3nF5o~8VlX@aa;Xo$%LAwrUwFlT{_g|Y@!b4|!?Qb3BH(2NSUDuUd3M)wyadfc zL)&jJr2qW~H3?oefpa8iK6Ya)*v^-`K;z?}@$&=-e-)Hp83*Bm7S@C2k6y+@_+9`0 z|8G9^AF_Tu#g>QRMg0F)$c;Ia@vtyYQ0oQURrBop68xe#`_F%mUfV-v0t_CV#|#g= zP}7J0ar5Iny8ieL6pR z^qM+>-ErTe^Pp?z1H%I^p6q93cs&<1{>5B64Ri+{Xk7x_ZLKMwDUog-6^Ld5Gtd#! zplrK#KP$sa&>$qNe+0@epv5j8y`o=D1sEWwO1LR7dGNbjczGXGydm-yBD{J{r-(qt zZ{FNT9lt@!dyw_v&2P}NU$6UrP#>b*47}%>&7-$=hbL&sz!gu>G6mNiFEXZpntF#F zoBuNMx9kR0bKUhE9-XxtUetj~d{D1*EhrJU-sW!+0ngRBZt&@@Q1I*ySMcf1Qt-8W z%HI+Un$81fNI~$q4{!NfI6#bUR|cQXgOGK_%=|4n;MNalvc?0n%f8bUG8OgJ9Wwvr z)9tzdGOq?&(81sO7i4cY>$fOy5(6zw=5M(Sx}*C00R{n3YYIGi+-v&v1h`PE`}hge zwFHkp)^2$5{|&eRBFc0X%igzxA8&T(EO17h2CF? z6G}5YdO`D-pra{VH@qwWXK-+N@S+>MFB&9y96Y}y1d2k?Agz)ZIF?`j1tl{0_#$|9 zI4Fj>{{R2q;HSX+k`dGngUkDN=PQ8P4O3RVg>1PG~EFT-AMUgOqDM7Ca0u+JAxSW>Egf;RcOUnjZsi zDDvoL^^E{0RKo)=KEM0)AHF`N^C@W9=Sy(sZ;#IF=xcUC(_yA7-~Q*{<_ntQ?!52O zd8ql}hvt)v9llRIdVQa~5C@ItpmbU}J(`aQfM-lz{QCI{OaBzyzVYb1hG^h`hnysk z#{@tV4mPiN82Gn^Uh(Mlz2ejP&ZYBt^P>;Vrx-n24|IS;0~9>?T~B#*-g+?!wA!m1 zc>xPIsQn5~=&^@i6#smM;@?ou&aYt0K`k3}YeCg~R3xOD_xb_~Oi-*Dcyvc(fEI2> zd33WLjs}IK1UR|fe=+qXvCe!AS~`T{Oc^9+PVnfpH9QI~D=uC9^#ApO7rTF;)KQ@F z6gt+x@nS!85|InOuVDhHP|pBa(R!ftCAfM4k8pv6C!XX5t>(N8IXt7+R^C8>;l-Qf zY@qtgqnp(z4CEn;7hbnNfp_&WHGYPUXM*g6_ZB@mzk?>AUob-~;cuA*D(=1=VTY{y z2i5lcEn%QSy7>=iJq5VfJ;Dg-Z#Xvm;o)xq9kc_gx4~(V;dL1}e}YQC`QXwon8U;J zP^lZJBiw6h!>7dX!u-pp|Df$e3O?Q03ZC6{3Lf3@9H59`0gb+amN)ryr*VK*O|$rP zrzyOc9s^!JSPWWE4?A`NTAzaMC-L?KZ9)RA2kHckqVl&)2ie>FTZF#_RF8Z+%vhQM zUJJAzB;GBm0CuR*OVFZsk8aVQk)VJQdKm^@uh7l<63l0Ky$<9LPs=-{-JrQAPfIrr z{#H;|4>V=tY01Xl3MvM{)4eYEt-5W7v7`#j?AQG;*&FG-<#LDiEN{=1+Y) zB2cR20UAf#@6l`fcCi4%KJXR6%@6}Tnt!O2?tH!2qx1egMIHu*7uwO>3?AJA&5z`p zUokcRV)Wp5yYadu4b~n3yDi)?%%`_@hhyh8@ETZ;&fh+rpjIwu_8xuY{DoBycvb1Q z!|ePm%RmtbUh*XZuJ=Gu3>x16FZlwkivdS7Xcaza-9;F9-GxUtt38+nIUEYyqwftp z0PeuQ_vv)q;Bnmb0JvkYppJ(ji_xPSG{tb!G0dkMv?KqxZ|4J_&UY`IulxrsC+tS4 zeL>rTJkZgiGf~@R~5t((@OhpyI#v zKi`d{k#M% z3x)D6gOwPd%R)ixu~}D!K-8~zq5lP?ECQ(qr60pfFGIntbLe~rxY&8=1gaAectw7D9zo8crVY*0#AanK4AXhi@Si+KKm`S1V#FXBFkyC2*kXtUCx&omIaDRcEy)JbFzZaDXD#;>C@3psu!o2WTC(yHB@=0@CbKb0sJ@ z%?G7X{+1+BSm!cO!ngB~Y~W5csg@cqn= zVZM;5u&2dkknvx*d5~E-P$39i zHo7PPGN=M`Pv=3fL9s6@A&!CcS3&wg^Ft-z41ky)0<~|hg1iQ9RDm|JU-CgXPZBZ) zisZi7mzzMwPI#dWb>Cf7_kkK^9^Limo2fwis9toO1Wn<5={)%TqU8n9{;6){xeb<+ zofi(jDER^(ee<#>%rIOUwnH1 z3fi6k4F!S5hySybBzQFc7b(ed_;#GJ)CD|Hl;_dSx;_9@qglN4NAw#&`{RT?x>;+2 zAX1>VG^qUX=&t8@sg9(sn{}cuSjp?#5P8;>5Yt|thVmo*Ao9DR{F9(`+HLWAHHZ(2 z&rpwE(<7{q{_LLDpFnE~K<6Vk2pmp>mS?@DOQ7;|UW4)uNIF0Ox^04`#KeZJM9%PJ z%YhOOkIoaImIvrQYmQit&J%~><**Y6Xul&&Pw5$t?kWz$Z?P{y_Yxuc*dX_S_6>uU z^78R-b5gkQqWJ@3^8?0CHb|ePM5&y+^#JHvxl(TMemtw!pnZfMy`mFAt#Zo%ff8=; z;%P{F1)0MJI{y)LzFCFDOC3Ig&;ZyCkH$bPuTAd^6|=XtOn99-6;(A-G+EGOG@aSJ&Ru z|DMT5e7kLqzew-_4IGxL7+x~`=F<88#Ro0WIP&)wJ0AZ3-+BDS#V7y&zg`B_2P#H4 zd;yJp9|!HZ@c^xNnkE$ZrZJpewJ*YJ`@ujwBnWri2&i$LqZT@OGMfftN{cV6*N zIl#Z|K&R`Tmo}g^_YH4e{detr`m*N#f7JCO9=)bdn84{9Yb2j|ftIHEY?w;TJi4m{ zz_A6&iWMjm+Wf7MmOEroBsiQsx>3`2Ntz8?$*YzFpz|4`KyCMuR8ZLdRU(*vvNpW_ z|9S$fJ?Mcs4}J3G^xvQb4N!YQx#-1FP}=W2{CXPL#o%>cFA873`ac0wcR>43=ySFF z+n7NcMcDXT(m~S}?Vw0*IZ#q+!%}JqI)29R+lxGqv7j-6I#6>Gbhbn{c+&!7sW@o6 zgGaBZ3}|=*yv^ANG+YeokAbJApB(=Gzq|HK=b`VHEPwF3{zCBwf2$AJyx1QnU+#Vc ziYx{+dC;&F$PJ*JWBBdlOV@xO|H1tS8_v=>&D9(%rPDmRS@jJeX756n1eD&7znEVI5_7%a(arkC0HRgHqgVD{KS(R2ya10Xfb<7L^dEt! z1MBzbjlJ+98f?Zr*i`b37rWMh=Em;9CN?j;SP2q9868Ljc>`2sfZCVN93I^f0x#>p z6)0%If`mt}sVjpL!wZLJuyp7E+FQWivL2MrI}g7M0?{ZY@`FqS6VtG1ei0Q49vFVB02=EB4GeRxWM%N_E*1c7ECn6Ln8*s+QgDo&za<}Z zB42l~f=9QP0RJ{dXllF20XlcKiUYj)G=~+;Q2@=>l?s7{l378=+{#1Z!=u?+g})^a zY9wgK>Noz@>6{=<#T?+t%UJL>DHBf6*fASY&&>7P5rGm1aHk72Z@Af)n_&feDJN(p zXRAFI=*-(P0k8owU;{pLfDM35uE~@eZ?>zRxb_+X$ujRiI5m48p z*YuOT0E18GbHf8KLRPXec=WPP3^cNM=$GDc@VP|v}XY{u6Ac5I|FE? zE@+?q3;PPt5jdb-+AmV}g2X{VN9Q5K120~# zV1*jtAOPL$#Q`~g*rU6)1JoD${uq{!Dg<8q0*w=Og4R=f(1oOV6`x++n3l41eP=@GlfhdIN z*DnW|>3YJWn>7U@4qD$}dUpoMZb>!Km?{a57EECqnq^#L>#Q&DFR79r~wU1AIT8?Yar?%`tu?B4|sI5 z_CUnJ`c;tK&kn9%zrRq1=ud&DgXq_X=-=Vd&FTUX2kWo$0#(mY|3l7c{Qlx`3E2NK z5Oom!@4;q*_As;l(FXeqtbh7+B=^JgFNWy90#OIizaFH&yA-m>7My}zXS_Hy6_nDL zza3HFZ`lT#g6KTd_=uswp24H>7efOh1AmJI8w0~}SFrnB4Zpnvom&GRpYS;Ng1`Ae zy{F}I{@w!6D1NWAfLAxm50CE*pk)yJEl)vBh3)_ekLCjc9^D)s-w%QINb|RX#62y~ z^0$C`%N~}#C-_@7fGPn?-vj(D&mgQF{4IANtQGt%QlQg1Eq!P3w^Tq_8~9ruLSz>} z_APmU^;UsgVd=Yrzhwi2wSvEe4WeTPe@h7q0|Tg?>(LGIF?bzj=OK@SulSoE)q6C* zV)U{6#orIwi0RmTjL|pwA1Gj2ML`V_>uLf1-fobU-OdWgo@@mTH9@)x0USu4YypXb zJ^2e13LsCmI)hq}y{3<)VI_suQc(5+G4OKFbv--7OPSyQA+w1dy|$-7 zE5ty1gS|I`mg0a8bUp;~c`ImC&!gA$^GC3=4G+AqTEfckvKCz1xiByoe)H(HRSpN0 ziM|tF@F6sNSo&_@Z>eTcJfMC>=4p_%jIQNq6trm;6t~;$3qnU(`{)sn@mpb`~qh)1t!U6KI9iwz*NnvZ0l zt$l*TPp_#a+)?QuN38tpJ-h0cIZfl0?AF-1-h%tqt`S5BKhJ>KRd(AD_}Q*-3=<>CBR&8dC#y5RG)(8+o9^`fYgHy z28FhVJbHr#Ji6hDt#vYJiB5Nr!plCeUl=?=2lT-XmEms*`}Y6;w<7}lExzACD~G;= zn`1B3T|i^t)}WL@FM5ZDt1td%HCIi0h~+0^%rP)OCYM##n4oP8(uH2^?}SXebvg(@UraN|Nk#U5jwLVIvJ?fvpV0L6=Ox}7DOe=wG)^S7;MV1R5$VPgg{nE6}hg7Qu`vqyJ? z0z?_;@G57}c~g^L|Njp@Z>ses6R35ZAhC}J6s*0reWC&kFTV7!ff|x`KP!TYJ@5jy zi#I`S`sY5~1~0_kfmTPG?uW>Nw|_c=k~7DPH8){RN!WM~e+%dsbsIMR7SQQ$FRDLs zgO-K7v;g%XLFc@JG-eC}!4*!;>zZzI!|v{~7-G(YyxQiSlAW z9%!>p=>eB+-#wn7)xSqvIz1FTIzcC1#(e;7F9TT#auE19(~FxxJIq2)xEh`W9i$C% zzu|w6&TB7Ll!JZ10or)N_m zZ-S18>J`28QIWyb@QJJ8TX4*SVwk@cwCxtO@A0tbads8ZG3;t!V?gITUGwVY0W}gC zK>qUS3_b8d;PR{gAiwy4XPl0MZ-@8jW@WSmkF(EO4jX5eI1fsrtS`a#nnuCJ8O|e( zzk~NvzNkF~8V$b>I<>|0g~1&V=MeamT94LCrQF~Ne8@O7=+Kc~({&#d8D6Zs_6fAE z(W9Fo_V9!k)_=h3vpl+4cPc=d}!u?r_LpD`;TK6nS8ZzZD{nG~CGF zIuWb|G&luXe~LCP| zXc-4+zlKL|=mDskKx_OvV-JAVaxs9*-lwxci?pAE7U;h^4qg;h!UvkAR{%K?>@v{8 zxn5h})BpcBKW2OZT7k=W8{}+|i;>)mw8IOu`~$M@DfaM-lIzIhL6G$>e?V&)UaY$J z|G#hNL-6s$kUPP;S=r2$7<_tJ{hxwvOatZA*1e!@n4n?;)Xiz|P+$b*4R8)b+FZyl z51T*y06t;|ek_G==Mm7@5oq9=2YmXjN2l)z!;|oqId}~wsAZn~%cDDj!>8N8r#nO7 zMgDBiP}+UaW+;_j5EFDO+l!S=umAgWTRVO~4r$+>1Q(R=JrBO;f029Q_kYLc=k*>l zd@O(P_ZV zJUfqicDpIK@NY{{cwqywtn>W~6EOYGqt{mI|NsAv7v8*Z`uqRCWAhV6P$alAK7q!A z3+E$9!a*J`Ujxd3sGHDW=?4^?FIm9@)Zq4)Pv?7|?rMP-OOF5k5Aj4lXq|&cxAAw- zQaYy6u+cS} z;|I0fnxECbJ_ahMJMX_}hyu-27{8wT!tLs-{~q0}%gsT98{dS*3*#HDj z|KRe}1Dqq#_k+D~zXK{GZ-TNmDCKvvE;9kAulJAs{|Bc#P!dzx4VoQz4x0P!1}}bR ze8CSYkb5z6^7a|voa}G{H79QXbu);`$)MF)kp1j0Vy>XfC`0CdK<%+G&(3d-p^lw@ zK~pfGd6!Pm#&83V?kW`Tfim}x)u5E{myy5y31}@)=Mh)Xa%b>CP02@mdP^7>U$l0E zTwHnpoaj6{K{qQL1!a7n&e97nI%a?}|9f!IID>Qii=*`*q3195f@#qCN{j#e|9|22 zi!;B#1pp|~G2VuzIapbRl=pKznvWPj;~hNz=G$%N3BF?`6Eu?1`Td3S(ciEGl`R&6 zOC0`|(Ep%`)IBbp?_Dk5)C)EL`p@6u`2YWZ7t2@ty%r!w=d%}Df;^B0IAl^sT9Aj~ zh1lg+&~=@V^w7LGXq*^5V)L6iKpsiyo4FUk@@eMh(|kIrM@F3F31mw6dLgQsCQ!;48s;@?0^GI~uXoAEQe zsDg-l^oq8a@qL36AzhFZW_UIL5{{c4W=o5a17q4r;7K3L5L94NPP31wM za|J{A4Je}aLWIH2Q3Rdc&}*vnlAqzlQiwR%IUc>DZ4fDuAOVIKT@Wd-mb_(Pi`zK_ z7+w^C#aXirL9I>OW)4t+Xz=1sD#$sqPjx|OqBl{KO=H+WDVF(#6<8l6 zKKnqjy{4Az0t_#dz~ZdZ`e5^%pysWCn3rp$#IO%^FOf&Dtp!M`llg_H{vpEOa)gzEVFe?9YYi&{gAEUV%N3AJH!CYh zbGOB7X?T4GnjMsfNL~O1Rkwvluj!>|eg>aj)&9Hx|G$s|``a2EfgZi0v#)_1ZyFWA z&+vl38stv6R0Bjx*@U0r#g{6u6gXCHK+;>M3&_7n;vY7FjY`SmXLxZ0BJR`q2pY$x z&*cOdUaW-+`*gko%lP!_ay_3>hH-iQ+ zdTnJk{{R0X93l&odI3qUVvqP4Uf4jSkldkS$j|UX6(S7w&dKFqXY+yV;f0AqmYSad zWx$`6P_IM8{u%Kzym$%|^XL`roD0@}!H=Ke#aSfrg>%5-g8uvrFSa6y|AdHdd&ST2 zVlI;SMu_-5Rsn_=tw`dP5b-M@@mwVFMo3|E2qYegBt8?gg}2vq*HeCm7q&>^g^$7R zS??#n@In-&u$x)7oRHL{s%E& zp*-mZ*tl?z_1Dnk($<0H?&=CKyx3I%3O-h0NIo-Th2&e8B#@}At~NaJAJT>;eq%`D z-v}C80Vn?LOpwH%&IC#P$3ZgPtQ@+a3dZ8K7^wXOO84dv@f&(zagScpTM_&WFEk;3 zg}HmxWw6^aefb$)$bsDkPw@Q^DI-t{VTMS7Q^@n#U@bEoLFHdL$l;LUTUu>L78_!(YQBZ>Dz z#KGn!BZ-GY#5aNL^M;7Sd~34>Y}9;^lmS!gtAGb}3Z!hY z2f1qoM9QOAc9OOL10?%*-t*`c^}q1{|BI?JXu5+s`xK?faViCx>++dAo4j- zek7Ei0@JSvk@tbh?}YMQK=P3GT(7Mz6R0)=FNy-St&W27O}D{|zj2`Wk^Kg;5_BCU z^NVT?ST-_&WTPz5gc&#+fzJN})ghpZXF+uci0{$OdJtmYYjNHnhBQr%qPI` zVi`mVoZN1028(lmDxf}yI4lX(LlUngqX5H;VyF~oP{E^D^vG7QE<=!11XK#ti1FwZ zoe8OiG(l3f5Gk-l52t~(G-6U_vmKb360+)P=2NwM1BjDe-oB| zKzvaAg3d?tNOoWWpMHRRxG1zg50PiUA`Mwj36cljmC{hbQojS7dih<@?#BY}8tQgn zv8gZN0o}U*OV9kvmvieo)_hfYF8#YOMbu9PR@zeC-Zk z>AV2bQO5zA(CzgB-NXr6b_kizfSC_9`UfNQq$QYpVDd2cuBb2NKz1WczB_;gJoNSL zP<<(X<0FRu3=E*f`;g1OkcLFy>K#~AK@kQ&+6g*;0+QbWI*1c=WdXFm)6K5U23scy zlJ92IW=H0O_fR0I2b~XfSCIiczW;J}I@a@{KudA|1cNqGdURJ9c(nd6Ve#m$SMcba z51P&g4f#Eq!@&R=a^mpp7Eu8WcXm2)cytQ9_%(-vA=>Z&==3+(eOO3)i6uO`Rt z`E)CLSbpYj=?9Itbbj^eHC5tKW_T^(0}?zB66|JC@#%c*Yx%S!&$IJLcd$-(wTee? zu}1SL#usgeU;TINJl=Ys5a*t8BuuEsPLYfDE z-r+Rw^yvKPVp*XAI{KU6<%UP+2@lJkrLUmd>0B5X9J}2V zK*QjwpwXaiH;rSgf4P(y7&}=%b15^t1Ra3}88-&UU${c+rBYqUur6eEHGI7E#p}-; z4BgHOtp`fJfW{XM4?xz1ftRehFferfu>4-b)%@#!35(_Rdd9<{pi=hfi=~Xva|rmi ziF~;EX!&t`J@Jpdo)}!+TzdQr~wg5(t<^zl_y-wd98-6gBy=(ZTQ1WsIsQ7BR zRFVO54Cr`web7N%y`oe8fV*~6|L`*y9`NY3ZU4j1@FHQ?tN$-nAA0pa7I7b&Pq&`{ zL`x!6t!V;SuWblOOYWgp|6f$VwKy=KW>*KuePZC#9UMEa1oQ8c?+u>cd87G3eDg0U ze&@r@FC1-z%5yw=MHep-X5im;z_atOW9L1OWR@lm#tU};AAoN1;cuw}HME-lag{oG z^qL+66|_sW^;Mn|!u_Vg1>2pP8~9L(NAo|X(l;KxrZUC+3@`lNvNCiY+5wu|X}wf>6=Z1XYViCj z$YjyiCnmV^Z$p^76Jl;6*j&)kRtE+T@Sw{EP%>-&$6Pweqt~>R0W|;i2IOA;mXQDd z|ASZ5L(2oO`c}~XD34y#>#qC^FHXGyy8#q&t(W*)ltCImXY)bQ7dSjxL1QzZNm`J} zvmok0l@Uli=-jE75{Pvr&HvaTM?`uw|Ks3q{Rf)H=`~dW=}ds=1Wglybng83|NqN- z;Hn1f4>tZ5$Ux>lR{j=HX$o;G=nM#tUeiziLG4+H3A~`IZ!Yn-l!Hu|^AGucOONJ% z%=|5PzyqTH*!WvP%N{*?O`m~uKX?rZ6R>Qr>4X2EneF#4PQC^Q06)}F&_vTqcd)ZS zBLPuHW@R2C$g0hRsq z_y7MLp!u4Y`yhJH|Kn$P;RThw0+IzyioIL_kxc;U)q%=x1IdC$lwUSMWH~{yd{EgL zAX(4~fR`yC7U(YHmr2VJjlcgx#|RI2 z^ZVayJy0j-k$l1OaGiKG_=*_Em`+hv6(t7H7$2y5Vem-49PJnbmg^LKtqhX!=w`jA zsKn5D%cIwHZVzmd?DJ-n{jcD;i{>|=`zF6RJ1~|?zxcErG#yyY@!}gdy?b zI)tI{;v9sb@!}|iVen!PgkkYwGlY@wVikl@@nRvEu^Z&f7gHhZ4$xsToe(zY4zw4w z5H@H5z>7i%8+6L%i&O|3bO#!!lsx$|WcwFzI~r8Jg32=Rc}w6uR#$>SlR`e-TFCQ4 zpwrtrYj=S5)`O=;pGvVa?6U=>LQr{n_{G;ful|E30n2^5OAmksN=tY>dTS57*ek^j zy2|x{N3ZE!Ay5nWz7J@xw%fi}|631~IDwCV`Tt`1RM2ScdynG|pwt7}Px|6X2xu(b z6*LO~J!8uPG$4<1mj|ex@$D>8;ds5>qnp)A0n|(j-Qm$|D&7r?CErb-{=e9<7c_SR z%5jME^j=Kf_UeDE2hQ`+UKHbz2j3pu`SgYTHjpXcaE_JaU)L=invRh6i349(?uRGx@xK zuZs$!Pj3n*WAl&y{4J}&vpvszI*)^n%hR3m`aftk7#i}PokyD=G4i*9FJbSl1sx*# zA}Sa(U9=jM>_AifdOn@c!E^I3K2FAnHND{1|6h7S3QI_Mzc^j|`adjUK?@-|n?WYM z-U%(QU#v!w2m7Scx#Fc6#0VD#@Szv-pbIgiAV*J_eFYb4J|M?890Z+Yu@g2G9sw=ld5r2Vebv z2|DQm>OOG(*afN#Jiv!Oe>VIEz8hxA_y7OFOVmM2OITmDZhrN@^El{i{ni5|A3<^U zL!{)TN9XYsj3rzz#Mgr63XZ?N@#5_o2mXEHBQlfA#-`)vj0nyKAp>O8B4}ivLIxl!|ekif<=(SZ8X8@g*c?G=W`Gv6DXOOj^B*Nm@SvmJ zf}hs_jt|f|r^%b~%Rk{QCAcWWNTq?}8Q{-K-_j-~)`H z6VrzOgF(03*W3R2@7tZC0y<9Kv71Gu^*|{cqX%`cyya?WB{Gub|2i$e9_|$TAlemO zyACS@H2;KpbhCDdgGMDyH?~4cWl;2OSp%v*A^Jh_4JsQsx>*(fD}kD!Ixn{Dc=f;Y z@Qd1wul{%5>b%!^{KcX5;NTVOl#P%9ndc(S2(HQwznJm=|9`{(FE*b31lpg|%_;%0 zZz8gNF4*l``wwa#%NnqKYeD%KVqeo%n0*hVvD)Vdv9H%r0Mz&h_k`S;e+$nOOH<16)(3lFfdGjulGL6->U#>)ponC@ar~t;o0jZ;0ZY&wUh-keGZz^ zy}#o3e~<3k1D&p0K-0Q2JV0}yprf^4JiQ8DnzRFQ#tMJyb5K>>?Rvt;vZ8{&1+>l$ zG@I>Xy#v%LfaG*6Hh>me*B*EwaTsKn>j_88J1+b_kA18wDoXUBdP~$mjegH=cJMN8 z&{l9?>wJOQ49{+Ng_oeU*wA?P?Da!-zn_9fcO}OQxfQ?vJ6axb;rDp}IzkoH-t4YD z;BovAXe{u>fE(dTSn}|LM`q>MxgzPqu12zJ?t#YMpJ-s%6`qwx(W7?9gDpuLEKYhV3u{_(#= zAAIA}Gw{67i<(uSSTEHc}fkB+lm{jCHVM*?qI0_``3m!wE}ZR2ma zd)QW@yQgIn%sr1JaJnZRtO)EL6OeoAak|G5mwP-rFE;;UEDiDLX7>bDrQV=hL7IOu zg4%|MJS|Vu@OgBe^65MXt1m$#37r=`W_o=830h+I!2_gL%%}4JM5vS9vzrmj^z38= z-TMP7pP^+YI6V>KgTe>07OC+K=zJ%S&fXWGE?&2+L!hkM6A?i#(eD{Vy^1 z=w^K@ti;e6rvf_Rr+Wf;G^V!$M1cl-PJ)O-pp`oOf@~h0MI0WT8$fa|61q6R6QEl` zJ3t}Hzjiq&+9B&^TW|CCZv_n$bWa6)xO*$u`@Ov&-+)@J4&VQS54P(DD`K@20#zMz zK~4n~UP0GD%~RIhU{Q+~&LD2@UXWEU!a=KfTW^DQH{XA;3UmrW?^Mu^Q;*)Qpi5jl zdiR316~DN!4xB;xTlzt(|64&))~z6Q{H>t#u|dN}XaD{GZ`}$~&EI+u6i>ZVLD#}~ z^lpW8>Gy*6dB0c=$?5zpL12SGQr4{?b^NV8U;{v^_*+5uySzBP?G^ZtfzHFAo0n=p zW_GuN{10Ai)@|`3YuT&+ua#lxvH3S|2^V<9atk9P14Hv+#^&FS{4Ju4psg95_g~Ce z|LVU7s9k^U#lj7*Kqt|4Gc^AYE4k*;y%&^lKryQ9(G5vGttU&wJvvW$^qQ^&O)f6j z25Q)`sDSddM|UsC5uL4|%V~Ui*Mg|-NS4E(yh7w(m=Dnb_%21;0(G5<#Q0tGmaQp|IE%9Q;Dv(1#*MOCZ@2>}S zF_*1?txs`mwozdzed*D?736xK&R3oHU%c21vE%XUixWEUgS#KihZ$ci1V!I(NB&mO z5DF~3JbLGXl7L6&{TCZIy#h_OcS81lzL*3q+)8six~GDi2erYYdoLvawSscn{|l`L zN}OMWuLn8sNH@bv(4`09d<_Yhm!N|lc7qC3)GK1#JsOXIa&srB;o=wz?y6l{4vHCQ zpsaxh$|AV^U@4DYQ%lf-2a&C>{=aT}k-PpCq#fqbYx^2By=Qay6KGN78xY$7%r-sz z0$dk7Is`i33{>8L$`t4onxGYYkp8Skrz>blYG>^YkKWoF9-XBRUQFNy9pDFEuE$!* z4p}7R(Q6uflpl1~-;2a}(4za=2QM-Z>h4w`)X6G?JJ>HQLF!PpIdgy-N}!R^7i-s{ zEZ0KqpMuVd^=Nzpnkw+=w$0*GVn8m)Ktlk%;9PUu9hANpJUYSUnny15(VJ&DqvVmi#jEXC$8xJ~W zM1>D>%!tTJP`L-1t}%FVV-E+zi(&;%h8J}ToD3e_TR|ooUV@ZZrx!s=tW}^EP%mrV zD5*K_;jv@$lxu1)xb*}*G(UQL zf9Y}Xr@hC)Us4{Lr#vjL*ZX*69%nc;%i4qS1Lz{yQg%=N^(-m{9-iHNpka%SOpt-# z3LSL35vbYX;K6u^zat+c4!W}b=}J}a}VqSrM`XO z4P?h%4=_$KE%)hs`J!qTXiXXPEHiD8`p)AX$<7?$ULE+(fQVVVpe+|*$Jv3FNO&~= zXDl&6vuYAZYp;tvqetg`pH8TGV9P*b5h4&XJm6mN?6&h@{N(}CP|5n@=!G}`;hOY8 zCV|%MxgL0NXC^P`!XVH%7vwAy{#MXApzv-vG!4P~doQXlya64r_L3W%78zb-UwHHX zC1_D1B%OKe_|s%}>o2G+VtJgu2UI_TqUdD>c)-_z!Q=Y{aPtV^P>=}YA^y&Z;HnPk zxT#VxkSjbokAuetzz%u&_xzjxFEUnv3PH&D4ybGcwU(bLE@Nc^g$~mUn zAd)ZsWU(?p%r9Bs)A@WCXeimE*L1;SeufteQS4~9bf-;l0UueJ3(;+O;KiOSRtD&v zQII1UAo8wo`8go@|KPv|%fs?BD2%}U08qc)@V`s9f=hP>%Zs(Ez}tun9)pVb!=A}k zJUWjX9(WO!#meB)`3_V|&IUybcvS?f?n0U!g^njc$0K2Opk!ar0^9EkpbaU|5yFn0 zM|_fB*!~CQsdmu5JDyeDt56fx$!b3iu+!ZJ?Ch8>7PS(fs%WXu(Y9Jy1h& z`NCKKeUe`|Hvj$4-vYY&@5R=5@In2qt#9j8{d#p)!{_t5nZZTSVHR*-_r+bi*Z(~& z@0Pv*UH0^%pAFnmy^#XH5IPEUG8b%rDd_$tpUxLvy(XYz_!vA6zOXB`^XLs@_w4)% z((iHb6|)cj`d2Tun}H5WIs7sToQJ^i`VSuI1Pvl? z=|YT`dnB`7ttQSt;7HyK7zK>jPhrD8svpM1avT)y}*_Z9dI^wt9v4KmSX2m8sT^EvqN1D@3& z*OnZ5!MqIAk+oe@BFNBf@ZxGKs5cE8kLzabd<$CV_0%yWxb*;kD=2th2rUQI<1cQ{ z2TeU6aj|?{YTa$RmrIGk@*Y3# zE7Y6cpe#*)VR)eVKNEku6sUXC`MLQ&BYz91zG?o?R8rw;_{8uw=o|vjIZoXcFH%l| zTM=iW+)xm=xAxA9Ip6++1{wHUo-%?@-vys^^WxY{(99Hn%W2S2yr6^NLFR&I5m2_w z@VBl4)q#+Uh9Ki@9^G{uu7*!Mn*XzuW_xs7gBT@J;F`~)*Yw9deufu6jsE=aJp3{q zG=>gZ&$N&Q(y}>t0_;RBs1rAVxF9F~{0eoV6WEC*CWilCY@Gut;$1-V4^Ljt0L2d| z)IEAl`#?5KH~RD6vGWM@U?6b*dGUD$IQ^)+=Vy5FeEO^Z9?3UcTc4EFx8COO0G&AO z(d#13_)->}<3Rh?FM+r6c=X!(fJ`hk`1Zf^FnEIE>p$@6M$Y=*{u_P+?H`=}3bISS z^ZtuvhujP={1$@)p&4YA(stzZ1v;UuMCt|aRPgx!3)AZy4B&louzKyq zm)*{Q%FDG{2GX=&XIw{G5@$6?8tT z4Npn(3h>dO2THv_`#PO$zJVGtkVS5wR^5vNBTxd30N)3|V)E_3M{{)q1Aprl(B5)q zfz|^RweUtSXfqx-ej!JHdNltMDP09}mq%~yix=e<91I@TtOBo;7)tCstXcoRRAMMm z^{{4r_fms<~1`}XDuymp192k7{;hvlK#9X_2eJi2WzI5r<=e4zp!>jK|Y@v|JmRx@+Z z6=Q6k$=5+g9_;qC4in(-Ed`$$@22p27r#8ii^JiF**VZ-UC?tMftcJ+HzGwLV#s1AGp$UrrP{+>8Y5eaGcyylf>^zmm z|NbO6HG&SN{_fIw4?K6*@%sP&PagbQ%%AupS-o!wGJN9K^5*!&A92vJ`8Q)JFGv?i zp8penK?(!p0Y&5zidUokiTVl30~0GA02 z3=9pRDREv<67uN009ls=;+%Xb=Jgx8-^b(N0cNn62k0J@<`YaH<2pfW`5^fh+`bM2 zA7SU&`PZY{_VP0&2GC+O@a=CeWc4{1JS=bUgYQ@H=(b(^Oo`zI2Uzehe+%edX^(E( z2_V7GdLWgD`CAr&+GyRj#UR0ZdY}W7J{n%~usmE+;?Zpz3KBg5Qwqwr9^JMUAi>Qr zLC|^4pkt3qL_NA~ML|+Cpip<#WFf%Z`z6ObR5Z}RxpW*c}R6fj{*F6YvkUp6B%R*3BsGC)W0n~s2 zE#WY@0n5Awli>TAq3I74uvdahj9#Sn{{|gV1>T?7dAP*rMMys=Ssv@W|H5k;xN)Kx z4X&>t%laG`UI?S;C_VRr38Lfm8N>fC#5Tgt?T41PPr;2laJvpPR|h)Z(`XU6)%K$6 z84ClbP%KRW)t~<0HB%Ly-L(ua5s8<5Hf)ZGA=SIuuYnx8S2guKx2LkYEz7jk{SK|`J|md$?k z-=*_e=Y3F$WMBYo)7?B7G`Jbc(0ZxV3}mUt4A6=k21ZbtL3Z!%USu;%*SuKO3pVrh zD#QOT_N_-N0KoH)pz_3{6CA{6Au$Td_8=z)zUVav?arAz_15zeOV_{n*#kE4^;*OKFL+TM z3=L24{IN&ln*>G%lp#0ppwCwDv9nJmfE>c#x&zc0?cEBR+=4W%PeUclj{Xo9bM6wE8G^>KjQsknUzbzHip56&+)Y9q>1;g!@@ltj^g|_v7kvLfL%vf%avq&iPk?10yk3YtxFFb+ z-l-t>B2o~4WQE!L4%Pm>ZgECQ~_`7?Pc}a1?t8ayjb;@i@~GYRQdtvr0n;eoyT6x0Eu)S z2c0_opQTjRv6DpwbZyW-mQoGJPVn*u$k2&nTi3;wblO5$MC{MjE&*-Noe^1x?T7` zW4SNrJ^_XjnHSUhL4`quC!%cxA0GtWN7DR*rQ|kb?UBHX*&U$Nef;$)Nd5RC8_M4W zE!tnqy21^rN{S)#=g9tPeiMK^1pUJB0PLzA24)5Z$n93m|CvfbmnLv{bjyJc!&hcx zU;tf>PzAcitqwGTB?+<7qqlU!i@TG-Lm2!m3qi$8x9bk@sMD!g)}5eJ`9Qb2xGwPM zwoSXM#PGsV4Rm7FgAyMP&{^)ir3ZXEAA0oGE_m?*bTk?A@typwSs>$@j|6~+6TtVv zfY0&hy#J!Q9pe86i2tFv{1R$T2jy(v1)umMd2KF$vb9#|3XqWNg-`qur;wX_kb8hI z%N12nxdIv*F#$2)S^gzxM>w>f!VEbIQ-r_u5hyQo+aA25#PA|U71}J525IcJT>=tx zhY9jR1lvJ^MleB8sp8RXn*|b-g$Z&(RMvt7IbeeSAWgjlkl<$(s6~e%g32JldoaNd z5W#=9l^9-}gb9L@n@6|pN08tam>}pB1&?mqGa$kFP{G#w44@MZSAZIH9>-llD^3|e z5esUtz102p|37%D2C||U)ZT@bFE7o(g#{$tBTrcIw?Z13kobK0!tVEf!~ZXL|Aj8O zd$|#`MEJPt0+4;jT|tXl!PbG=mEfhv;IX)u-B4Aa3hcP+3Q(&Mo{oBRrLfEakP^F{bYZrFM! z;;6*Q?0 z^Im5wWCj&HW$w}03YoVLz2E`MMBs%CFBX9Im!syR#UR5PkAU0_&Po$Nx1O z4;}Mi@aRUQ=Sc9N4y1kQ(QW(krV_)87A0tM(}pC>Ga$iyn4lU&a6L#c3ML4;Ps5|z zb`nU?6((o{QMnW(XaEy5hX{6n1f^kuk043d8zjgE6AXo@R09cqRD?QdHbhVoBzOlV z_zoiY<%SZ&i{nti)}>4g3@=_zc=aFBZhav)5tKR(f+qC&Th@TeoX$g_KnEpsj~&5L zvlr;^aAEK`_=?lx`y-Eoued!j4}sE~N9R;<9B3YdtP^>e2Tu8*^^l;p$V+w58h>y( zVfg>06odl_Pw-gfOLmA5Xx!}o3(jeviEGeWULmjxz|ngg9Oa;-4ss93&X-)E{b`V_ za2&K&9%BACkKVnYl@u?6+Ch~Ff9prE$014Oxa$RwR%nvR1Scv`zJVmDmpj0fJ|w^P z?ggz!c;VB96e62IMs*$nXDm{J|_kqSe<3*3o zUQqP=XdYnv0C9lr|C6(<%fxiS`kD_iLPVkJz~T4eQadzEoc{brE^J<%;bwU8v=2Pc zxa1^1!;77Z5T#S@BJgqqcWr)#7YiZmFp!$55OyAj-3eibg4neX_KZdR3@-{7A?^?T z)%=JZ+=YUSi*tB%yDPYKE4YHjs#k*M?z%HrKz#xWkLLd@{4H#t2x|T>!r#Kf$iM(< zWAV3w@+0U*2L2Z4{Wy~E6+t(ZzUBb8C%fx8UcCRu#o*Cv`{o2__UoA8ffsy!tPG$@ zuwGL+uo&pPBEthO-2LIxVLhNt@SXR;jTetzQ!&tPR1Z7IyqyPh-aQs+ybI(=V~8U+ zf(i(*BS9-MA&%^2U|;|_vLxN3o3-K{#DVOfbyQ)6BPE{_6#haA56( z@L#?K136!7pV$4k&%O^09Gg2JKm zhez{+_aIdzr#+hgtCSoCgEM0NFNB-lfYwG| z04@ZyNqpe>l!kATkSmgQ z96sG@9-W6l{hMIWB*A1*jR9V?ap6Tf=;U9}tx~QxUYrKE6Tu$bPzUy)8|vC&Bah}I z3gErY;1(5h9@wKhP5?BD>cQ`F6I2Q8g{QQFN1sh~6(ExOm{fqcUP~JdV;=$jV1unUdM1aS& zAd>~)^z6}F+wtQ66E+5)Zf%cF*9PC#xBM-jRp!3EsS=*wT_LBFw}R#;K)XCzzJj+E zz4z%Yo$+FZ4;$zdC!gNj1sE@b`oEwD@%Xd+`T+ zsE@TzZ@PrXcXrUpZlGRwI;huOy4a)F_TGCwh8N%2Kv~23^(4^wjjl65Tb--A9Ryy2 zmJ~wc!?!zC;-wL|Aq#Hb>~{q<_Wc^bD;qsJkM964ec<=_@uI2|l$)77JCB0(d-U2? zf$W&f1`ey2-~asw&0B^xyeQOTXXvhN@aQ#7IKyXz^yZ zya#Agu)Ig}4|e`mo>i~@e><+g-(nAn?1QiQn;+MEBp-I{yy0Pan7{Sc%2)rpMgPB2 zWN5v_-;oWvaMAJte?O=(*Z3Q;DpV!*4G> z=zxwj2HkP~!n6z8TLLZ8_2{kL@xu8DXnSVuj2F8=hvcDNvj?s!(XZKqlpmhm@d7XR zgIn+5bmGx@!v!>U(Q5))*8*O1!ruy7cL-W{0iLyZ<o>AmU{t*a@J0 z#o%=->p)kNU1$NVnPfG5t_V72OyB@4VR=-3f-GbK_2XWre*tZlX_*14?%?}xAmw*& z=>re6)qkKhs>fX)fD+k@2JrcSwGTQEgDM|c=yWr30S&*IiNWyOi$ZO7hS#@VShZli zzZG=e;b#w!jh*+QH;JJvjD=as4Yky<^9aaRb}tklKPXe7tdn|Sc%Ykg-YL+sp3-2@1P91zFh{h3E-USZ`CPm6{);DV zpt8Qy7`3dI2USquvK~C73hJ+Ydyxrp$C(#Nr~m(dq1*fl6#8t_(dUD(yN3^ld%l5g z2|{ttmU^Pyb5oO@;q{ppmrniv|6*QXf|vBTbUuU3Qy4dZ99Ut58enpudw$X4%@X9kLobX#?)%#acHcG7v^lt5 zg4f@n5EpWEv%Wk5auQ@!l4s}N7nWtOKwHNi)xsAhS#`6@JX2%<&69!}{NSZ!phaDv zV;pCMJMX`cg0z|pu@ol~pzH){rh@acBFJ4wUPztz|Nq6)da&d6O-6AXVm-lASjCCr z#v7nKzUvssjr^^XKrNQu)C(ZDg2p{SXRLHy1zi9-13bQ5djV3;`TBG|^XYsK9zX!K z396v7&}420nJ9cx4i02X)O`n_nN10Bc>qmN6AZt-h*V=|c)beR?lAoJ!V|>bY54!e zhe@CQzpy?II=`_VeLXm6egu-@QSv0%M=y>-d~^ovqf(HMJUg#=be;ws6bbd(i^Jff z^lL9Tb{++lqvbxG&yl5(Yz26c^EbGsTcOgBAo1$F;HbVl5jB4xwSiIM z_yj19uN{Ge$R2Q{egTbp!kS8;T(JEMIKLc#_@?BAI5_f3svY-&(xj#A`-h4QuAT2) zJKwqRyZ(MLqY|_`&V}Fg^NYKMpo#4FE}g$DZ@6@R1Ib2JgMy&Kw^MejH>^x&YjFpj`k{k8ZHa7m=kHy?`oE`>y#&1~`?XxYMH- zqUp;GaP!uq6MPFbxHkY=)rZ;}0F9D@djsD=DX|mO8|Zk^w}UVp#6Zops7}ru7E`?v?~w<>k5DlF@Sdk=7BBy_u}Iua4R2cS73ohukGc> zd<-w%`~uw;Wc|7yn%+FRT{}R#5WpMjL45+yXkw?=HVb4?^DkCV-{~c2IiumX&Z!_@y@*p{XXpld5OkBxHhzW|d-^{8e<5BC zZn#z41*M;4IH7(u-Yrl2mgOWa^{Ru07@s$U64k|(BLqI3K94M{z=`FngE)c#$ z%7ho&|AHh$&cu9uq?gxxsJ=-D-5Ti8`Q5Ygsz>L&7jMAba?qXDAjjVW z@!*a(hO9onrHJ|*R-S|Q zK5AT5WJpW%cp*{n3Up^QgGaZ6fk(GP0P-FYkouR$5#v-~{&rM8xQ!6z*!j<++g4!=Y5w>1DDPW7MIQhju&btKy%HA zRWpe3WRQJO^Ftjwp;yI&9G`s!;`r!%P+ev_XSWjMKt+#UQHvf>I5PNj7Z|*VL9S>}Sb>i(KLuIA0kz^s9>@wv@Emst0BuGEb^5{WDv5FY#>&4-3AENRwv&}2aKu zABlhHI4cK?%b#=5<2dWh9T3(0nyiO*fK~*9&gg6h83>(60@(*nAEAz&e?i&h3#g{? zKyF^&Fg(!wjImVV#e-ce3@)9Iz#H|Bzew840@_9D(fmV&zx4}vK@8{^Ee4m)+#@cX zsb`=avE#0w={N>ZdbYR-$ub%_(DWQ(;L+*20d#jbi$`~~f=};aP;7vDEUg|K4BfRy zTL1I+gO(?H^frUs>|qI}_*+0j1>bQ7Is??O0KCG?^#aI%5|9C|2X=!p zOY4D>@H#<{UeV^=N(|jXt(W*)LBsbh-MJUi`13+fr19sS@aVR^xg8YRqE#KxqfyiN zlTM|1^4FbtF)&EYgqg%cI|NsBZ^$a6_E9h{5?$9If5$4`zP}*y~RL2hUbGHB}s&9Do#)39* zg4m$5Ee`W*x-RhOjNCYO7VCV}orsum1o4Mc&m<|G_PC`253h zSMWq5_;@VGyMvdnGOyyOMdq7>s*8ioT5iJgI z!xP+@ihT*b*AhP7>(OoJ+4&VTLsO#j;(r3DygSnTo3TXPv%8i9EUfzCMFObwJ^Xqr zzdVEC?bqu-`SitRh}zeeAo=ITVyL1C;LQex-(Fl=!;M&<4PH+PK8nb*^GoNo;1?>O zW<6+OpsPo(>GC$vW!A?%IuE~)$^P`;rCYR{l}84(ce()j|K(GP>mw-<+VLF>80I64JfI$waj4(j&9&SwPe9Q5f;eF6?K zlo5;dmy#E4pyhrPSk`FH)gX?tU!DY~`GXmg|su$04F~&zi9YcJ2bHRrf zqO?;%`(NEv!MjaC{yB0M;-4)U2>(Fqkk<;JerPtx-rgE%M$m2=K3C8Yci;=9gIQkx z2RZT`q{x~A>gpxmX#V}b^vsLnIj{bATQvXYDwRd;WQc+~8L<9;>|w)iFU~Z4`u{>b z7t{a%*H_T8CIob$3);{-sGI@qKRg7w6bF{P>^*u*uYfvb&tC}s107<(-?5H?fuY15 zzBMWolmTIT$wAX(AUA*`1U#MzPk*H@FXH2%>5r+z#qjp)CH(T>a%sUCNEl5>#|Wbx zpz`DOEJPjh!WwQy=^juTHoOg4Z2>x%^~JlC-~T%gzXTl#152jbtH8@mSwP_+pM#RS zKtdI2=@)_EU1DCp67>}7#7Xo5KQ2iQ@dVM6GB)tAe` zlOy2pg_-9V0y=ZC*A{e$doXB_FF6Ht1&!&I%}Na3y&)=$pgk0whhONlfraO80#y#h zkoyi#KM_>*J#hN+A0`SL--6l)-A_^?@IpHF_y1Ur&f_mZmk_5-c=0+0 z$_GujBgzv{l?&RX@S^(;sO-9L`0YjF^8cW5?5evQ3@=(iL_*f9|DE75QE+hu@-b|@ z_!nptvlFy(0c8v8507rPZ$}zRJv|P-5NLkD4?g7^H2taI(HZ){qt|pT5BLnf2Oh^= zUx1?a#hqx-7Hi)Zpv4M^?y2xek514T;Gp#`ZUP?N4g#;YyhzM?^&gzSJ$g;QHYzf_ zypRUpPXoWX3>1$Q&@n2H&aI$P5RcBOpe6e$9^H^s>d_f`!tm0IP2i0>b3rORJCA^F zS2PB#C25_+$N<_a4Z6?{W#)P}7XxT;y#k!HVPjSd9-TMf>s3yAH2+p9IsEM~BY$fi zBLhRjZ=TYvptJ5eV<)^&{=*JiP{H5I#suD!;@Nyug1-gC@#u~KP0zFQ_dRB2VAusZ z@)mM|+!r5Vh8N2dKplx7bU;yptt8fGtPoRX(-|`rI_X`8)xV4si(6!r; z3&J5s4BZ1sHveGaZ&l|49WVr{*`uOB+wqRSSo9UVQ3kvs)wA>13n!>}*Vo_wJ$gf= z89jPS7l5Z5eL725cyxv?05vvVcCtU}}~r1hUI zD?!5Tmq2%_zF=>D@SDFCbV`X&_gauoeL8bH9KRi9FR2A>Cxk6=5%X;Rt5PE1`0XfT zsgYyDUmpGz(4;G9qD6}dv@g`P19Vs@=tQFy9!^j&y??RrDClY+u!LuKjYLW zDa?R4AKRxpLjn{zt-nAOX0PqM^PuH5t)R^&u7+=4tbGO=J_K`L-T>eC09q%(4%((+ z&04TtiGjam5hzhuvrYzc=71v1nzathF=k@`ZA;Araa#XzFff3<0lC?@^WKY(N1+~h z30jBX)A`=;+l$%=P~?IV({V@0#dZ8Gp!;Y&55D7fY<^bn2|8|D8ni};zvUqdcICxF6Q4r2TaP~is-YhD%xh866koS-4m z*551)3@^Mt{|4&=1*=cz`+cDGs*Za-nHd;fJOFL!1hpx+K?`J*K7%TgqaNM06JCU6 zvoXMSrGi>$2YfnnH-Or7pfZME%ykC1wFXL$Ab}UhwLreS2h-u%y+;Lfvav_!p%-_K zfC8lj%m=TG1$oG)GZ&n_Kwhwx`urc{9goiApf%I2)u5s5Zf1{8=%vZr{4Ijape+fE z{H>scl^)H%*!f#PUIV%GC1`;#D1Cs81$hyaVgcr3*{eYA{C{lrAh;)4&{M2qzHC zseo`yz#KUUM;^>6261c~c^Me^TVMbB|KE{+n~RF$3I+bwORNkG%_kHbJ6u#8J-YXT zvK?eIOo<4%Sn}vK75&J^@Z$cb-~XE*Fgo&Y3sG@A_<*JP(Rvebk{YwT?bxy*8;lg{AD@lK9d)}r4jphJv)zjcDkq}yflNW2N$;Cpb$CkIs>#m z|Akj3T3Ud`e;R*2tL;KT2GHG+FW-Zg7CSKbc9#mgR0DIs^*7j)4l6kLTQfl3?*@CW z`2+{Z)eh*MoG_oC;l;0yU{4-=z|wgLqPzJ4)SC`3Z-8$McL8O+Jt`mzc7YNgXdt=x z5G0|21Yd51`^WK{i;4pif9rfuR6=a`_I0GIn8-h*$Zjx)sYDK(`ZYkM7A*C@6hMTd$8pyg z&0s&&PI#FCYP@#df8l=sRH7bU!C1NibT{#9&`@>jfzo|1AO3;c2aU#;4B!L;Ij7^L zI%psPoIV^IYE&E;_&dORN7ReCVxPgA{5!!iFaAk={_hA1kOokR0~ORv zM&K4EWevX&=;K5OL_?{UPaL|F;AGVCElo(#9d}3z+Wnd4>|CE-Do-H-N`J z86eiP^0$5kIj6UF#)~(5*+6@6Ux-Zj1}PRHCy0ZJj+b{~nbHB2DJ?9=)kOy0!ekVzCHkU(i6Bi6GZ$nMBEf^)TEI9f1l1g%&S;60Pv4_XSYVB~KB4XAo__kz6Z*~z2g(aq`6*_-kH|Nn-k3jD42 zK&>u_tWR&H1b88=cKxgWuKe4~T@BwF-ga&I#@}*+g@K`?6{HDtb{3?*1s#$v>e%ql zwj>ZVT-NYU-;saHQO|=|k? z?mP1D`{vPWdvZEI!;6=Z;6(x@OFVj8K{4Rb*}4K0PTde*H`0U>f9rQptETZtg#ZHs zQb!i4Jnn9V_?bloG&KMUIKywSQ@=sy;(CJah3d_KZNLDneung5T2?WE`%NCbQxClV z|9>ZF0rLyn)gM6hF?hrTw6THp#c6fWx(gQ-4p2$zz{ua~20FH-xkg2Tfxl%ws8rnx ziWraHxeGv^INl1PKnbP!IFm>6e~*LDnO{7QW@Fd|y1E0DSD=$Q9-YTQE5Fxpv4h)` zF!%Adf=-$8=naqn9T?ZL0MrHU&JghEoH_%PW_!1SC{M<#K9;YFojf|{f;`v2uza4QSkK6QtTvz&#D_d?UYPj{unOIc9G*&QJ95_H3m;r|yIQOFIb zB!fkKde?&e-fM!qKMHi<-g}Sc!yM3L`hsgKXuZyVkIrMT zFz5~dZ>oFofPF3PAUr@VAD8 zT-<9LcmULy-U^D-7s=N_J!vrer3FOV2ua!nN!lE2I3&MDe3l-=p~#2Y)+gonS|6_51(-9e2qxFfbUN^zD4_(K$B*lpR28?3O0H|Nq~& z^9r~<>|^=3IMlb-M8>0+_kg7^1E>`OO4yyhJTJcU?q&Jr)2qV)+TW1u2N^@+W@KP+ zZm6+kVBl{#{TtK~0Q8AHVXW$OF>)3 z@1R9l;An<*@4+Pli^_|}D<8nkH&CH-@z?+VFQq}=?_dIzKfQ5`FE{=J)haK+b@#Uy z!G56akjG!n0mYm=gGcA*757VdUp9js?7(2dS;E7=&6&}o`7q;(`=uW|I&XPse)8%3 z|3ZrmbcTlM|C9WX6O}dvR$dfd z0jGEn`(-O=a!DZ+a@06@4gkLXq45nUoT2+YP)0~6yaFv7ngEja>^uf8Kfz}c_BsiG z?mrLh@aeW~=@$eY%nTm8>jj;s0Pc8sbox&4=>(q|^YS$V0|Qe10v%qobe+K8dlb}f z?*wk}AaIeUx^SeiH3q-6=(7-uD0q<;3pLrfg7QB%7Hh+sRDA9mY$#GYZFevqb zI+Y%vie)Qk%b`o>TF_(=xENApW`L}RfOZ5u!08TDazJ~UkaWj$!K2qvz~eh3EZsRO zcywEMbozF@IPDCYW%ljx=!B$GOm(2Pt#5;?;kOs_oxwxmo}C9ELk*zB;=;h_)9Km) zs@|YMJG0>He;;rf@NHPZ=-GMPweu){%WqJVveUQ2r_;6JwK_b$q3-sv{J`HcnFZ7y zKE~+y?KmTUixQ}X04i^se}isC=m2fb2bDEaU`PD(>3j}aY^hW5^*?yK8>l~Ax)F5w z=Ic#9-H?Fl1_zX9cUXmMXI_bKXPN?NRf(fVHxoGUK7yJT(EQqY7`5Hvaquzgi}#N~ zZISz)okw1neE9O;v(rUIz_&Ba!jXTQn}cunI#4^i`GJIu1b>SQ6Zmee(m0P^*BPLR z0FQ3)bOq=jYREnu{#Ittcv0gKPf;NOTcy_yjGI2>2GzLIJ2)&<}K+{654PMR^wcy4_Fs&u+tCwN#p3-I^e2Q`km zofW`?auYn0uX=Qz2M^-=^wtP5`gHz!5uy7UR5pM@4t$;WbMOY27mm@ObPX;>UQ5FI zpWxExmrv(&-_Cb0r&B?!Zr1x76dAg~lXf1x zroX#j-P{jOpZ>ql4n&Dqa64EIG`51M&#>o2H9Q`_Ou8N1=d-!zO4MAie)#=_VQp!q9E#aZIw(_Jm# z(H$)TTG~?wDio%Idl|=lTmP5ZdUn<2vERxznH~itB`zo4{?acQ0%cKK*}D;R9N(0BL_i=eJSj zcQrgZYj?c(1iD_n^YDvZ-mm_9bk7Er8lIg;yBRuNkAR!lmq1l5sGjIH23=~{>3ZU2 z54iCLs)ranIzJ$1Y*0HCbb}RACgX1bDTHL~0<5hJa0{Wt?8OS(-~T~}#2*%2Efo|6$j-9Ry9-yPFnvZB86_Jp30K9G22|3T(F(ept7U_A9<~JT5oxUrO7nXsB zXVyIU|KB6|ck}Oh{`L!u3=BTKHh)3AZI4d)u3OJucX3c(1#w0@NttMl1@-Mg`w+mZ;9g8tdJVb=houB`Gu^ji3j8gBj0_Boj~E*489W+)fi|`B zx1I&*Y(601(JkQ78+!meS08%7quYVQvy(;TMSn7A@csUa^kv{Ic;Ll736Oy60ng;4 zzMaoKdu5J*GFL`28-r)J{fh$<;GV2!^KlN(PWK-#43@Dm_*nify$!lk4YUbL9^`P> z)^8&ul~RE22HxlGeFO+*9P-I<~LUe zF!8s7GAlT#f-*8_{G^+``GIWn4_5w`Bv99*H0dj7)^q`A%|VF|s8Ho_Y<|mFVg;I# z<^XL|b_ScsfY8SS(q{|NHv^=PzvbuO|NmWE-}1Nq1|8dT8+<|+C`ezjfz&#BfHD^A zqE+D0(KjuyYGbF(r~muFWqZ8#m;Xp>Jwfh7Dqq0&>2+T7=oOtFugCyCFm)ejND{Ov z^AF_IREZZnufF_u0S)`Ua{(R5a2VuikItJOovtTdG=RGOt^Z58KqbjH2Se{lKs;*;yE{|&Vb4BZwbIv%~Iu`@yU zbi9Aj?FJgRC>8YR-VGWuei0q@>Hmu`H&B`S{)Ju?sDc3>G~&?-o;d=wu)4tlFFr=X z#_xB6CU)S#3EjzyzQ*>&M^M8DbiJ_aiWgIF|NrlC+!b^bICzn5uj`iMuAtoj3?7}% z9-xJNua`m=t=$F{^WES|9W(?2T0#$9-}fQ_WC$pT`N8LEd-U4I$$?s-;FAS?I#UmL z^oq)WCe@&8bm6-n%~yZ=-+8?CK)vBNXGa14R#0~r+#*K1P!)7C3~0G4xE25fF?iqV z%FCc4!_+8N5j@o1dHlt4$4{Wsg+ViEduIIp4|2W^)cG1cP&Tr1A*56rCKcqN{bB-ylw!k?+~qS1jiqLi#DjW28%;E&=j>iL(2jF zmOzj=sHo~ThLu(?QX)V}+<^gnH{MIo{bw&Gx`4(}K_!_qT-jS^P^02rx5W$Nh)@6b z34`l!Thm5<2A^)_7xRVK7#zDxS-@%g@QV*Kp$AoY^qQ*HfExD4U#$58DucmiFkF-b z4a6Xqn5=n=K?_mufyNYs)jxqoreB;sgR(^ooc}x^*P4QtVxz2Y16|`-braOAJPbPV z^AAgj^^2(AAa8&UyEBz<1&ts*NAx>fFL)exy#cCEUwk$JwL4vJcyu;{THzkut`|Hy zn?XG!)E(-eRi_G&Ri_2ci18ZG{Y;?q?U7fp{V=@r;tptyVz289k51PQAcIiX(J`Go z{6fna%YLqZuv5x=ZC||wC6~}ASWaSiv2NL?|J|-nS`U@*-*8r~fbZI-#tvgwAhyc76l}X}DvUXXigq!Fm-^o`KqIprInPMu|u3H~to7 zP*Dt#qu~LM}Zr!HOTV_hszD-Lb_!AvXN1gc$LZ}90Zo#E5%+X1StK%Q{m zZw+Mwd2SzQ00iv6QdR~A$A&u4$_Osdfhzpl+#ErRSl)uxSF!N7a_z?Te`EtN*Vzg8QT3v4z%dc2G|`N&s_I!Kc%A z#*3+!;Uf#T?tl63)9pJ0I=YZ(@zN1o)PR~C3=H4g9hmrAME?E%-yI(TTKd>}kBx!h zB{R4+0lv@sWQn3#P6Zm9sAo z{e!Jj;0Z947+<=zJQ#Zj%RC#x5-!z~ewt zpy3WxL(mB6VUOn884RFvkoa3bCz?X8WPIrWj#B=XWUzS{_x^&`wSd=VdVn4K|Nnn` z56d6?O^Kk!G3Y)qkM3GfvvUWUydhk^w{!z|p(m&qf04zESg-{e^#YIcR3w1f@!)aW z7nN6E{fAyXTvFiKT_*wY2WZ~IXgy=| z5k~NYmjZw5VNhgPrwj1+J_qG3&~?E_K&`^p`rwdx`4F5U7$8?2S3tHtC_#)~0JE!f z%8NOAAmztj_d@$yFS@}32f_DP_$~mCmw*n!1DW#@)VhMI^XM$?c;WvQRGF4`fa)jM z5CX{iofQc$S;2{x;l*jQH~(Lrf~SWUyFq-=9UGATn`gJ1g->^dfJZkY*sdbbm{@nA z0LXmL&JP~lr5&K+vF{-}1A}kpACKNZ0iVvjAcq*<_UWu`@a#PA)43KjAnM!s)U)%8 zM`!2^AIQ)pbm-Wpvlp~r@8x9BxIE~*qZvNkCO1Gq4viGpeb5ygFV5+Kj;(fOz#?n$ zVk1P7#S^sVTYaHsQtJ`c3YB%zCJZ5KL0F6gFg36E;Ec`8?rB#mIbva;Fb4?-nx%B{l z=bc~R?9AWd0Ui?xodBNkum*8@P1!0TdAbJF7g7h$34zNwQ2zAkENuYYk<{th0WuUi z%z&An7l7v8yInhQ<>wdix}fa~&}b;h@oYXO;MrZr@xomfJO(|%qq}ql_zG0V&SNix z>OiYb_&a9({{J7e|L6M)27PGW0PWT4yzkk3gz-hrG0=!S4Qg>f)77+v2f$j?6 z0U7W-qHlMZ0_eOl&+ae<$L_KcaDE2)=EbU7(8@F4883T&g1Zr5Q#v1l5+wMNNuSPM z&`2P-L@RCZ>CBzs)4djyARW7F8Jhq9=WjU&s+_EAS@>I~gBFg0)~DZOWnk#M_rgyP z?BbHR&igM89R;~Gl*6$zmcjG5D`;{AG$Z=IRPALiD`*rS9NsTxgO!DGI38yMB^{6E zU;p`AazG(_@DZzTuZg&0x1D2m8Ow`Ly089s9tT~8d)lWvcLr#nuq6-FqXCU{f>zij zf;gb7!Aw7vK_Yj)J*>bM1pBqL!KWMSIgkOM%BAJP_y7N)RY8y*2LmWgfllGx2^M~_ zUk{R+nh!AYw=Vtu|9{#9u(jVojeMB3uRt8IwJQA(Yc=53&ie8HzhieCxFTz@|Nj4f zgP#MFM`!7b7hj-8J9auofEp^z;N<|mGhSF5z4{NnuU^RrYB{KCV*UJ4vwncuw}(6qzT$6wRPWIl+Tq!G z;bk*uu2kNE!SKLKE68F^Nc#3{t`lIYdkIQ5FGawkhTzi02Ye76@4X^Wk^xVgKqr`d zI(-{_x*-Kr>&X&!k6zxBAVrcjZM#af_3wM5&a zw}{ch@?X(?PtZ;ZP*=>6(X;umf~Vz?l1z`zgReJE@aVk$dN;p315|~lQ?hLf*5PnbD*9fPzP-#|sb38^v>6tOZJ5dGx|9 zDxL0e+!dUZeLK(ibb`ipAxR7}vFFoW3M!L3nk_(A>hVL@Avp-VwujUY-PJ5FW*hh1%IlNFfsX{r~^&VwP^}7rV8F#yPYMvt3e&YZo>oMIe^aE881Ao zU;Xc{odLFXCL;sG3P%1`(7=832}ba0eQ<+M#TsG^c&jBi6MO>oRA8ClDTo8k1Xab5 zq^NB3>i^4g-(c+|k8a-v56HN)N3&~(0w@GMEI;zMRDl+4cDgpayapOFhNu8#L!a*4 zhL@6GKw>uvxU_j28r|KO=i za5o|C2Z#gjCbT~K{Qv*ULXi2O#_A4e-t0X5G83Eypms8Vtby728FZo%*v@qY5IYS) zcHRLA_u4L>%f|pNZTDyS{?@lF)kY9k?INJ3s&be`q#21{!!gZ}RHDXY)RA zY63Z$zvV8-VcR1>nFm_rRf8;mIU*0l0Xrft58{Y5RT; zV+AAR{22aL(BeJE+(1~cE z1k$Sf3lyeMx4Z|RgXB5^Jc05E!~wgdGQmZV$ zUgd9<{||BMOW(i$|G)Tb44Q-ht%tnm(fJ9qb{Trc7kEpl#0%w*pqx_?|IOKfu@p3J z&jA{vEKLXB#Q+-i1NVtQgEHXg0Zq7d7i%E(F!)-j;xXkiDnq??aOcyxkx@q>n5h-*LiTS4bbgU>;_2TCX1!2%xL&KjVJ9FN{&4p7I$ z(+9M&r}Mc_=c^aD3|{?z(F!)T`3DDN2ed~ot5*&vK_qi{bTWhXF4;nMJ9+fl>g4b< zyjW`R>i=sCet8Dac<>LkSN~r)BTV1}kN2>0AWQ(Q%j>oMl+DlZ;iN z&YO;qc*zcK)q%qWbYsa&2L#`v*LLf@X(GZ@dKE@&ha1du^*{@iDxZ zvXPbHq!%|{xL2O4k| zulnY1-3%K33|MqcLDd>c= zZe!3=tQCJjs~(QL5Lm*&@IrbC2Lou>vqavb*EFLA6bbKNOfv*EUP~ikgPv)w;Bih+ z(+j!|!Kd>ZXaKq!;z%}-JS3yOIQ8WJ{})>qb1=L(u$Y6PdoRc#FOK$n0-Xc7?)Z=Y z;O;YM9sNfa*!ZYN=hGLU{u94EY=0-xjj*5_t^NeR2sQu>xq_~I^#Kojzj*ZL|Nl;A zaF-FB)Ir;?A>%zSv7ZkT>eIUwG~Npt`vDDIphSm9H|z9?iVQy88Xn!Ou@gW?cv$%M zE(M)P@S-dPbWe=Wo3O zI?d{KDeH^OouHUTIcMM;D4#VR0r>%X20Y03p!Db2Jr&&gmi=A^x-aOtXKycv589M= z(xaDkZyD$eiOXe>Qz1N#vtEEQK?)8XXFUny^5-1n*JSN01D&kJIvFbJ(doqD+1Uy* z@P#ncZ^``-zXfX{{3Z_a+opw}@K}iAH$I5pT0lp~d-R%iW`M7RUjdp|XVwRoci{X3 z9~`W`qp$|HRJy4E!WP=P0zSyD%G7f&;D`-DHcnGswwyRW$ z0XgD92TQizF4gksRb7$I54+c7A80=WC=R>#vNL#evWAp`Hb@@^6=qL-x>ZB_6&XM) zkyo&n#DdCQ{ub~xGvGx8pfjRDZIXoy3=B3r{4EDTk=4!0)ej&0P2bK9nx+MnXQ1gL z&~jYRjP?N;(7o)(S1^`DzPKX)`~PdzG*DGlV(rmg!2wdB57t+5+5>crtx-MrO!bmV z)Bs3DJ>Sx!o3#>>YG3aKrH>cUAcN1q+piwotP{JzY5nzFki17X>&iX|zZaAbz(?6w zyl(X9X1&-876)(aei5Pz8g;gnOy_5Kq2UM`TZgpAVeyB4#O)8m11}1|8~96P5EC{( zQarRFOa4m5K-;?=7+&1&`1HT^Kq(J+zTx%l7q4}|7Cm{$!{E^y`emOAsPLOM;nV-_ z+AlBsHlPfiBb6V)9?76%cG1%gXzF2O4?g89aJzSwlgi z`K}jUto_Bx0M3@6Gu=HpU2k}FvpRyqOW=jzM(|M03(l>d{)76DpsVh{`@=(FQ$4{R zou3WAfw#G*WPmREX#T-i!ukT#Iqf_Ss*zg{lzcP0^R*I{v6PB--Q=HT-X?1DCaRScy!(as|785 zy_^p&B2~J;sT>k!$6Y}~Fbp2u0xzDd2m9*9oz0+Wk7J;Ld&32v{=c4#{MvU*vCT0If0nehf6ohq+5CKABc7>9zolMBH0Flg4v zcYl|n(rNA5`oAKoyY|S7cXFUZvP%zm^t$fZ1+pJBpxNm< z!=>~4i$hJIhQT3^)&mu>F5S6%z{L>w^Z<|M+7%4^E$!e|UF`w}{?>V5bHBfsC->_A zYv&j2nxHmar!xm=q8L7@!r%G`q@y?WhD+xUXqD<1AA9)44GqwtVc%W4HC#G#_q>Rd z11&SZ&EEn#Mbo7-o5Q0!bcSd0caL6MKPCnS=se|%Pd%Wyn?0S*EH9%$3$NwD?X6DN z7SO)(Rt-?D_C4X#4eEe`4?%G0<^U~tbm@EzZDP29y6T-vL4$?9oqv3jbyWD}8N7Q- zbQwYO$Cur|{)g-fDT#ILW>M)4V6?o!?|Tb$-HHnXL-S!qkL1Ik)uQ0#u}k5qOP@M+ z+o*Kjd+})d*Z)4rFF;4XKo<16biRMFck|c(Ao&+1vakMwW*uJlc{U$m@v%(p;BT!2 zHL@VfgfHoa~FUjWc=>|LYCF?)XGJ*g6otFRp|9?5-A86IM%(HxV|+&&Im6I4`eaC*!JiD|ENe%KEPM! zI;bP&3&G}rQ@#BQj!U2%$_y$8eY(8`e7c=EJbF!oz`fG|1&?ko1&{73kDwO;prOw0 z*dHf7W*mmC--DM2pMU@V53Unpk&lOil((SCy-?52tKf1FR0y6iJPA681Eur_9gNd= z50qz)gAP|Q-UC`N4O)NT;?XNAdJ8lOS$Y7xlp+>%orW=}H`bYZ!lyI!!V9$?(4If! z^#!UP&Cu0Ppe~jJgGaCE<0SCBbjb$Tx`NlsUg)a5LSFF!X`hB7)>dG+5;Vj6;x62k zy`aJkG=*Q{=Fuyf51RVz1s!;N)1x!?f=91yFDP|Dr+7V%L(i?R=mxtMblfJia+Qa) zia_&Uy`t7ocdmoGbIFTVRZx;}VSv;p``tlJmQL8pj~C|P9De|OEd;2D09_05SPis~ z>L^l&614vXI%Ty9Je2m{r`Oc4myh8^`Ab#?(2>%h%Q23;s65HW@S;TpejF}8sN4s2 z2m)TRLRJji2W?&yQUi73TMv}PfUb7<-TZ^8#HsnWWQlF_Z>7>y&&EIh`574MV<4wh zd-ldkym(;E#sIsjqlCq?I~Fv5R=N~aT0C9M%J6zNxc~Ux@SEdaP+9uoz-cyyXdlGE zP9D9s^LzLhUhG)R%J9AZMTx zkWKsiEi&MBXz*)0_**?eD>y+HOcgRRFhI`RJtqSyS|I@~z`)=E3g};|pfz8IeGq%z z_*+4%t-ym?pqnK?6-sYu#|yz1tPJ24WZ)}Egio+BypU6dg)-#42k=PfYd%mq=)C{p z!E;b}ABPTe`E=vD|=KOMBdz4buJe2?x5 zg%{V}voe5f0mM3+f7}33@=VEWMz0+2g*jhwhKW5yFdb<8)(5AI>E;i zznFTGjRA6;v`4S$zF2;S7oSZ({eR)7gp$3H+MoE+!;9leul|E0ytB3D|Ns9lu1jG? zJF^Nj+7l2{!l1zl@Hh)UC>Mf)yR^fnH+RAdG0-tBpv!u|Q7>@})IL*$MLj&eKRgA; zclTb9r9Q})&$Pj#8+1VvG`d4T(d`e8?hT;PUD#DLpqrpz(VZ;uBFh3Lx|6|I(M<5@ zwGHm%V|bCXfR*8O6Jm@69H@}1R9`rp04-~DMJyvM&BYei;P?e^V`)85vL76uZ10fb z^XG9khS%FYdTk$d@G-pjJ)e~UJYWO1sdFmGuP?402Sp!<>CtO?85DgcCZGPl=vP3C zK4^c@@RCQb>7>=5QuwK3xKFR`vm5{aJBIo6nij?KGdPC&^y*$o`Trku0-NgOSbm0J zk6zi1SWuS%)aT%M@jai50c^&+B+wx0^B2$Zxj-XVKE0~xAj`w^xIj7eg?}CwgHNyQ zk9Yt7gEtuX^omYO1C7Ak^Xa_)!twH(|31CEt3Lhz@6*f58_N$KB{=8PdHjVMNU9UG zI1;Syh1lgc5EDFlO}oIAgzcW0d<-xCU3vo=r~oSh-5&Jr5<*=PsQuV$d%1+4;l(v1 z@mZfiRiQ1D2S3A$eMsU-pz+LJ+ch!#3@?^ldh_3-*LE3*eQF2jVk%kZ21N$&wN4(r zrqg0TVR77}llg_sR?zLm){sMgdQDqEIyAO|z0LRz)GV;}=@p%u3i9+VpU!JLK{E<3 zj$Z`(e8Weu&xK?7LA!~%t$jLA`E(w8vGO9wLTjJSZ(!A+b)vndUpD>!|Dqoz1Daca zNcQSZZsuq3=~bN!QjiBx0G9IT6qeo9)vHQXK^nz6ucrJMrdvuzlVj@x2gn@B&1SUQxeIU?~fb)FQAH z>+3pDuio0D*Hkkav|?4@#mlYWOT|1oS=&>T7+&0};b!pYX01+9VpzdmVh-+Rw21P8 z4kP;^!rx-e3z>oW%mW$i@CM0rv&w*twRkNBD~~~4q4}T{JKd}=>Oodo`1IPoTFD2B zo9|Je`2Y7p{}jk`wgM?i42CCtI-hy;iuR=Z|Nlb$_h(QVtD3>t@f2aYh0UePscKq_=oK`I`c1A8|yS&0D_L2r{l=9t#Z zz$pVbG|PshQ!S&~6v>Cr3d90Hd6IDwDh z#dV0>izKL=dl6XfN&_Fmi`@{pGcdW^Jz%+_7Cwd-^C5B@z;clI;R*Tw|3y1Qd5V;zdoHRu43`ou&B9{P@(}&3I0Ld9cqb$%#YcG+=V! z5Pg$Ca=(v({mlcDi-yS6f#mK(4VgIBZ;3+0E^3j#Ep@}m&bs`c|hXQ5OG)nxC4pd zpW*xrFBqUwpd-jUdPN;;z`FK?@iV-5dIoGeEL9x?m*u9XLAp*sq`(f7gE(LpNPH7S zd?(a2H|+q4g+RqX z!=@g+rgb1O2Z$KVYX|$lHtL7)GrUlR7z=ZMSU*@w4kX0|k~)4IToK3#fxYR`Yib@2 zs#3r^s9vrETMsGy^gtF}M;6fv2bcGsL4msuBC!jyj@MKUq<9rnj1$zy=`|GriA{rw zf!1kz^qTU3#G0UDP#-aa#PXnGP@n$>MMV@;Ob}w;7m%16R7?^g_8uf=1QnBph`k1h z$w9^VA!3g~Vq8!$UWnLTkl44iU@!0DhKOAQi9Ldf$wI`=g2c{2#pEGk$3bGdpkm;= z?0QWPg2a|V#X#pgdi0v^2Z>FBh=B^;Umm@taiH+40~g5Fuo(P59~@2dK+2OLQXu88 zJbFznK+63gVld?grh%20f|Q#;q(I6+b=iMVXevO&V9FgAfR)>Wl(Rylz=>Eg7A$@h zq~+~NaDsqov6}*x5&~(t1eJoO@5NKWQh!7F8D4CMNP$h;oeLI!2@;&p07-?9 zKvFFbDX^9wd0;JjLEu3<(6s0QvhER73>t^NAhB~$F=#po1c~i} zib2z7Fi30}R1BI2LO^1ZpkmN;2NtV?ib2z7I7nRBpnj z^n3`YKw+H{t;FzR`uaEjK`HYWs7~v)ZHNZV^{^I#q-u^sq(Ci7k8a!8XeCgCWfrKQ zN`y**&S3KBw)Fxj_l49;L~3*C0~+QKcIC|Nnon8zQwPN{Qjc{6nDb z0I1RUFBs(e<1hX~WZOWpjd0lq!Jr^ly$4lv1EMGsVmdexn@0ct{~`e*?iq#fY;QE! zy&Ho08D2O-q>YfI^L+pRf1wEx7eW#biwA4#0%_xdNdJyRnCc$?|No0mM?q0%dmBld zAEIsfBz}e$mm$(ekfaTAK>mk_FF_JtF#&9wHpsR)5b54Xlwfb0`TzfmMu=2aB(!-3 ziO$`<|Np;8151I@)`uW|h8N*$A&CT3ZaxkIhpa~@t7fDU!wVa*N?Tc|^`Nrv1W1bt zM4S~W4k|)-fW&zq;%_5Bz6b5ki2&z~#UQy4N5CO)F#_r!k6uyVnPBM`e*6qCE<&U? zAxZ!11xp_SNpAv4_sZ@*4=PG*dl0Hj{lHGX^c%`W8fbHD`Cl{EzVHww)ag3ehN!-qaf& zy`~ETL9uiTG0X9C^5HlCLE~cG6&x>_I9@V=*91ZNtciKxj>5|~pa1^{ z-A^6}(NB=NWau=o;?csr7~KSaC*B%Tivhtx^7*HggiQ$XV3NaBX=VE4Fy#O*=ipq(@x zy|$VVb5ua$>L77Q9b>!43v3PxNSq%e4mJO5B3S%Mm=eQ_?{nE1z!UTyy|#7p!R8+U ziQfl_^MKnvw)-IFECGoh2Z@6&Iq>MU-Qf>5rv)Uw9wZK_D{VJI#8W`x(~-niL&RM` z;`JbLsQZ^f#8p7z=^$}P{c4*G5oZC3`y+|RLd2hhDlxn;2Z=-784eLY0uq-8iGyyv z_2{)tzAFG)cd!H`&JGfXv?Xm#AnIE{;_v6MGwkDo_*Wewo&plT4iblkrxrxq1th*7 zBrX9_&jN{e6_EIHkT|67wq=Egvw+0=LE@11s_ivDaJW4QQDS&e4iX1V#C!DGKE4BX z=Mj*2JV;yvV*Y1{_!5w~J4hU=o*Uw?7Ld3;NE{l!lOX1&fW*b;urtJZbh7$~C^5Xu zdh;LYK5$U__egFBt$guFp1uTZ7mI_(!3WG9y)73WFflM7PY*%oTOjL6E`uhZ{tJPY zhqhiS;W_Ti0c!5=01>e15y<$TMHZXSd5>;(&{oXW z10{l?kaOz)UoboXnI{6NMT~|*%m=G?056miK+^zr1g3h{y_ujgg2Cha4G+l!%@0IS z=F2>~-3>tF7cHLppeB%mghw~SVdyvvIQ+WZ6g;{cG(drc#8*J(cRO%+^tv!GB8Miw zJT!c|S#xtB_IEodfDA{t5M*8`B)ornG#}Rhh53u`pu=l>s{>x_`wTkCZa1hTg|^Qi zn`)1N+iJT#KvU(d|4XF6gQuV!GcS4!L2K~9GA}MDfY||1Rje=cmxFd#RtvlkI|W)f z1Gy>TYv<~P5CmY4-FfB6rJ2c#tj;Q7Os=FDIIBZUvh{fO~<@On#)?takW z4QLZPttaa|Tn(Rq!lkYxG>1dj2_UvNgq;Cm+k@D>)dDY;o#18Yp6mcR z7vWNgzEAgJ1Mp zKmPpx|KhSfD?>Ny*+9^BYjts;-5I^LJA8Ue5BT)zZVyyqfQGk6H|xegB?hP&pt0P} zZ(iLj55QZw)@!gbv>qrC^XPUx0LoFIMA>?vgw3P7cE|qs?5NLwp?493r;uK@tYBvV#T%+}evooRqu}t1Tn>~O0!V%h_2{;h0Xe$Y zH1&o6gW&;C;=26jBdGlVPCKEXIp{0UDR2qUZN|sJB^J2tbG#jtQb2o1_ZxsBGwT1# z{~o>78XleC)be81dvKx-c<~X;*bOR*UOa`c13-K2I6r_CG=t*C<9IVD(m;lR7VsSa z-Npi5rXvWEZvMeiD(lhN3`!9`or^(<1ZgEN*#Et?H(s!(fF@#UZ@loU`S8EFLWI$? z^Js~xM>p%WOwcm7P|$S!>gxi~GkIVB{)ot5pp)=DQa^x}Y@PS$uD$WX`Wh?4>mGP| z0hI?H-K@45;PRr|K>}K;AeW~eJO0ZvfY)_{LJt~j93I`m9^G{c9-S9Gl-U~}GJp;W z;XL8d$^Mx?-&=rR&>ytQSiz&yU7_I_OQ|_%&8^3AXV4}N284kg%FO(N&H~`TF+9L8 z#v0 zdEfAWN3ZG1ZhnRrGRHx;aNYOlH8r{>09u96%>=5sUa)|~n~!jKfD}i2^qQ_-!OsA? z!6^3S%VR7I@c41;4gKfQYx)*+$Pq~Ci_^zg7+$Z1%Y(xM)BRoA3Lg5B>8alZ>l9NGQRJuvrcqPhRSN3W?a+!Ai0 z+~1Xso(ce>j5T{>)B(h8K5^z}&y+ z3OM|&CBg1L0uo1dKlcQf`&S-8b^jmGy*eFWn+*@V=stq!evi%{9-y#iDtjwnga+&;iR3y~kf42iNbQ{0v@bv9&a*P4O=$kX%-?!c z6|_3e*0zF=;idF>Rt8YNwAWT9gP-9g4@ecFxrO9Ea65&gpH`y6pFGXrRf$9%XU8vv%ngcWa?!*r&#yX$AIQ|t>7lPV8ko80!y{3{Wd=N>{ zX*Op-Mc<3WL(ptDp&gufUIZLsVQ_7EQfdrZ#nNlqcnO>!K^u__54qKdhL^sYq}+Xm7*6G$j|WNAgb7kiF^z%)}o5d1L>WKDi#3J+lngI2hv-JBnAqnhKZ1HiaY@J z1af=5*Ysr~$O|apWq1G@UJ0#`@KQK{5?(tmg44?^NO&bAnrW>?6}t!0n~5qG z2+|vhDi#OQ>xd)<3a@|(knqxkcmg%Nb|!$lfD&Ge`=Q}w06L1Q^Zttu`%uEm5)xio zq2Tm&c^@pidJ^E_wQnC%c)bUYB!I%JxgTU1D7@zGLkX`kkpDVS#k%eJ8D5m4ipBKv zF}z4b6{`a2^+gp+1L?Iy6>|dVRYej5g^fu+By4y=4n`D@(Ds){uj$Nqkdslu=iy#x z_y{yZ($j^#DB&~n0wg`jfx~Ar__|Y2Ln|j99zOH-B8AU+@CXJde3JV>mVv^jb}vf! zY_Q{Jc#(-J7SPAX@FEmd?B00+h8Lh!il8xPP_xXVSF{_XR~J>C8Az`rk{Bo~H2NT6 z!MGQx{FxaCauTZl_rUz$1oi(O6#q*?{2wI+@&6uJ`pAhx_TN zMyUUHqxiq^JUITnL?Qm)4flU6!vDLG{qF-d#-mp>xd&t!*#Emx{4WIZLnf-&r*i@f zFG5kp7(wbBQN_GKOH*}`#6W(v>4ErFbTBpzB)>yg0lI=HHqaxPRB}Lh|o@Z?G{Qy`sh4Aj?4h?cIgq-#U=rDpAE& zfy7c##m<4m0#U_&fy8W4#h7jQ8D40jiV1*Lm5QQ@{R8P`L>0Sd&Cl@S?M@W;eFH7{ zyon?R3ey)|kT5;C6Dj>fMuWVF5}pfpLc{Yy9XKFfOxTH%ek>vBXVn|f=H?g0J7M9e z6Acf~xSdGh*$*DE2IU{+E|6uQ@U%s8n@6vx-dO>L7n-PIQ6MocRi~@NHCHxY1 zK*MiBEhPK`cA$h`;yG~si+T+XKjR&+@Ou*p4?npbNa5%22{s1Q{_6l)1`5Bw+fn@c z?z8~Ii0>diLFHyyK2eL@M0#aSQ99mTT#W1fYcSDidBJD ztHvUUfx<7R0}_6&+tI@BW(3GfDB-8L9U6WC;IrrMzYy4t5`LX$!QsdC3LJi)x52`1 zO$0pr?rlQ~KYkBb_$_V+Sq2Kfz1vX2Z`~;Yh8HVQ#cqMbrlN}d1Bo@FifMtuJ{MK& zm<2z>i%3+lRiJQoMHSl$QfG)NX4THe@In?z3>1Dk?U3+e-G&x^Gs8h%LJ7ZzTcP16 zP!0C@iwj#(!f)ppaQJ0;LCXKFu<*+Xhlk(1tw`Z_-VJOFsQhmOSq2Kf+N~(z#}4vG zCaPFK8>s$A72^Yifg`HeBXfR+7rLloW+1(iNMfKc&}f5%0pnJr@@r-o$VsUF-vaZ0 z71-e~E^I;ZzvWAQ(16k|Pl*4w!2KVF@c$NM|GR>X0r|fbWEt51TTuMJ43q{kQN^T= zg6cn1F#(WY9Z|(JTKO1W=%R{E1DPj@D)!oppWy{7su&+g@5jvuw}8Tlp%oHNH#dVl zf!dzV3CnhKARJ3b03CEZB?^UY)1G>E)F*IJ}xS!@|oZ6dqoA5UU{lkNGZO zV?26AjaxvLfx^od$&DVpqGh0bWQi*F>aYOA3sqDxL6DyXQN?~V^D(^my9wcEk6zJb zAoE_LioG%AXLxZHRqP%}??EInP?P%~SLBe6-Mx^{@84Pj~s{c2_{9gw3 z|3(!5TWWy)e~K64|BZ0}2P6Ey5ggP||2u(=@#qz0ZUR{b_CJ!_JbFd5P52pJaH5KR zXaxCx1FHW|3NXBQh$`j=(t8$F>>5b#P9!m~{~MwH-+=7@Adr(l{ttzZ@PG%mt2aPH zVO1&E`7g3IKtjP3GRm{t5*!L!AiZ|q4J@ERKE$x~|3Hvspd(3)Hn1?HO#p47a0DCV z(JT790c0s?2UxGJ5y+{0NKOUqmpdWA@Z#5c6t6D^i9JIVI}Z}Oget}i3Zi|eVz$Qo z3@=uJ#lY*qKs~b;v%q}#5EC~@UmL2J3`k!Qs+cxNT^y=dJV?w7RctXx%nViRK1fUn zRqU)0Kf?fkzP%zY>Z z2l$H(>mV@)9iNkQ2gjV$GjRK2GRT@vQ2*E`0G@v9)*+?e_4Z(6Kx@(KL6(8iZ|pjh z$Wa1$!V^`@pq`K6g(<3-7$^V~QN{im@-w{PMHLeR>HWDDVFxJva@2#8RP4)#Ymw4# zr9a3?sQzCI^M4W8;V(9AssA75`y}YPmVj#Ug*P!{o4(k6k$o}^OISJMOYheB_ z1Uvl2hBYYuPdo|sf7X47|JT6%?}zaJ8f5?5f{g+BzZPT}*#Agw1JzH*1sGm;bVBQ z5=jh{o_5qg!gJzkczAX`bqx3H{O{5E-7#$61JKnokmCnDJFj^3itb=l1Wo>(_Go@% z0XlpDZB@Ywjh-+6!Sj6ge7Z9fJQ_JbQ^1~`u8=*nt~*{#fB64Dc-_he{)4PlMoJ9L z2N)eYT{%2q3qPjuLKc2}=Fe{^03AKdFW3sAU+m5O@gKC!+y``o{QDRC9)YHkU3Y+H z+rd{lfUb2wK4rHQG$U>SE-%3I=7(QIzkG?jqZu^b0G}C=XhTIKkm)~ zTCDSWJ80jHp%TL`$WkWLdOd!I7sjVQ{s&z<;@NrBqnp*$P>I2#^+2hDPp@gE9zVlA z&?;%rM&Lc=pt&7ZRfv4abMR#%$3WYB7nO4{7#;vQ&G3JxGmB5>BcIN9Ah*3(kq0`y z{QV1s!cYIf{tNNxMa&Iz9bjj0+yP#g2s(%Vo=30fbvDr1ezqGPg4UnfLXHR8ydN}$ z44OD@Jy6OCK42R(f8x>2dQwRcv^mhD6FjZ_V%L6lh8I)CIY3*JpM&NRD)+M^=4-pl zd0M~Kx%+hUyL7t?yk>{+&Aa_MI#0}W{Qd(vi{sc_bC89#RKD9?qV+)OtzJjQ=68(E z?jnpcJIi?-zyIhA=V<*_fAa8zZg(D#d%&sbFuy$Lys@V*rvLx{A1qO4(e2OS)6L#p zF3@Yk@tQMjLi0gJ%kw3QohN2~{|B?H+vNaD^9$DIAB<%WK6k z9^Lyv6H=giD71WflQlr|>ht!2(jR0!P|^SY|62}}>P3TYj*5wWxoICeL)wHFvnR5H zVzT6nN4M>Eeegt+#!=9six-KvKmMQK0hx>kr3=uRBC()D`8uB;2hY`mmPLR9`eph) z&|(jy`6$r&>cKwU>K>iHK{sYY-NoNB4YVLb(h_vuQnkQ~g4sOa{pj7y;Q6nQpp$^Q zt2w&e!Bb|<`4WuZ>jgj)YLEp!9=$9VJii|S9RX6Raoho%RzVYSpt-ZBd)XO|ImDr%dn(S)X4xfE?U;|AoXqaLA@~SMxY_9&7zy7uD^};nU6BT`a(O{xuJHzZ)c8 z9g*YJvsdImw-YR8?|tUaXY%O0?+8AJ(UD&ebP0@;fM=(xz;P$=T;Yp^zmVOoKlZRQ zM7wl;04+BFolAu@WeA=R^MI^BQvj_u17D-U3Q82b;3NYJ7msdnFu(bcyhrmdo)UIw z`Qp)BFTq&C30g)6cDF}&xWG3jN5<0oppXEaI^@y%&7-sQM~RR}XYGd_oXwC<3hl@c4cRl!*9S>Orfpy6X)*JOBE&{s&z>Suf$)+YU;|;G=KBSDL#{@a%Qh z0A0xL(d!C2N4vwP^M@m7GdL(egEB=0_*{+J887sAvopAKF9z-LHay_cJsGs}%+>Ob z3%~0JSIcYsz2`y8DZ9bhv3oOUm6B`c_wH`cQnuG3(Dho5pbLU6uk*Knc7Z$fve?c1 z{u5dbc=WOy?+##b>2><;2r3J%G{0hO{>9ASuD}kOU08VBfd#aHwi$f$0OO0Z zyVw~#oByfsw}7^odvyDDfX_1Tj9mb#sX;d^_1b!Z&a~_--QdxA4s=6&BF-SU$b0L2>ERn|k22CZzs^R6C$pQ~CqWwRR1= zK|#Y%8VeF!3pz8ndpEccX#HPu@kLD!qNfvSDcOs1e@Cete6?HbVUKQGM~L=c`vn+Yu!6i;@bKk-P=0s`y3Yj~{~$gnr=hNo zy0(Lz;TyR6VlR<}EtD!1h7`lBpi~7~{rTY}JG@f6vIA5kL)Mdm%?owhE5g9Q06Lrx zy!|Im0ai&=?qFwt211Df$Uif7fLDTW_;kJi$5iZLME*V23<@nqh+`N_Ib03jzCO(_ z4`01i`VQhK&;cNzwOTKtPqH(-z6oFN1a?a}=%R>kpnd-N8lV+he}d7Ep*sO;DS+;c z1+^S*YzHN;78TIF8m$NT`#=|NfT|VH$^Nc}|2?|pLFax6_Xhm;=q=~)?7Z%A@DcNi zMfX4nXb)Hy$dp6dK{0uozXfz|oKJ7H2Iz#<+U@KN-QA#8!?%M>B}Ltn!E4Yim1a0L z*Re43x70E)FhD#6DuTcs>N>&B@Y#_+pUtQ9Kfhoz#4&CH9-YlEK($-+c6J7E*@cqs z`CGxq-^0$dfwc8N^*G288r#_!UJ66%8<0ySwzD%B9(cVEBoC>6LFa4wbpG%3-Sgu2 zHqi2&G7gVk+XjA6Gbr@Pi|0Ba#vcHuTyqT%3g@d7nDz_m7L zqqxog|NmdA{Qv*|#hZIC|964|;6Z*%=(awS(e!N|gP5Qc<=I;w@PhL=sEK+1#Yd2aZdkIY zZv{E(2gp$+QlL=0v=x?$KY&v)B+MPZwWxrsU@5un*xjN6GPw0X>3PTF5H`e;8kK+- zi;uB0yxtD2PwNz3J_etK0&c&7ngU-@GAMW?#&9cIJ_-Q2pxf3{4P0z!?Ex1X+?POW zcNjd9!R5Y7cQ>e#@PJebE|w?j@?a~SPs{|RGG7MA=7Wsif4X!+6oQ&UEJ2{EfM1Zq zvpZD4qccDNnj0~T25_?tR5V;Y3JZ+q;J}D|xp@nyfMD?GHSzQ~_>ASn<@+!HcW(yO zMNl_^4uu1+nDyv94slcGN6mvSj3*pB4>@Xnak67~|M*m(G2an{F ze!VQmJ$iXOL2hU8=;b-jFUaWI?I7UO=_uf6d8zb#FOOL#*y}H4{{KfxZ_x7G0=XL<-rp-r?dr**a-m~+|e=$({JJbAwsgx6(BVQj%n*d&4 z4Zf>_hlzn<7dU`A@4dMCg@wVf^JwdV(m5X8*58jaurM(2w{n11!gu~?ejwlcLyEus z7`UJn_1rJS;E~MI;2w{&%$eTU+m$ z{1ueCS-`ghJ_9Z1<@^siS(qPkk#e`SWAjl)h#{rBJ-Vv}Uhnbg*0r@%WH{!!fx)LU zb%$qjE$A|D@S3~c&K>hpi7tO^qYLqqKb2L4vT|H%6}KrPDuAu1f8 zP9C_i^l}%dB@7x!;*HoZ#IP%!6I6(p?or@pc)@@EGw9fnb7A}ph6i5kdHoW!|EgL5 zG>{MiK3kH%6?C4OM|ZUZNX!8&Rx;=1ynp}ye?QKU0CHwC=;)k-|9O3Ss|A{$GlQE} zZ~6O5{{R2)YWU5&+vYn+E9eL}P(hReK4|S2qp#(=(#J3T!3V%W41fF=5=u@W=R&-_ z0AzIMeOS1>P&o7DKiJPLV*mgDe+g=agMxaeIST{mnkvxM(4YYIfau=D$N&%07gHHn zA;Hyh8+1zCUC@cpfoz~FOI=hXK#_FiB=o*pkIv&SuYzt4>jkxt?t`uY<}e0r@pIkK zEzo+Y#1N9+Tsl8_bk|(q@M!+8QX&HKq7u{tjUdh4t{WVik1@Jf8x&pj=(c{j3@m8v zaqzu@NArK~lGqo?dMpf}eA1hZxF6f6J6iyBlY#la|NlD=`1Y0@W$^5-WdPd&j+K3X zAb}+N7j$0TQ4U|rucdcia)3H%-Pr;@-PID1qnEm?1ztRQ%fj$_fk$ucniuY6ybLeT zft{Vd^Sc)17^0{3sAj6HzrA6R(EWnl#T=kE$CuwApOoGM%OExRpyq-0mjr{V z5OCY2h~ovQ8`yfFgac+G)E$WW3tXObe)ed769K*Z9KI|SR;+-#MS32c)e0EpN+4*2 z0kx$HiDyWmavoHu@PNJY`Y5oY=ZcLDwIz02eVypvzr)Lsz``_7+;a@V7dG z#6VZCc89J2-S+`j7{|iE@FMU73qwP-21ALpPj~7J(CN3|j2Otb*$0`wu!!s8|8y zI3LS*C90mCB`OkN%~BxEq9BW8*M0sEQUGu7fv>UzJHn&WS>b;$QbE)SN~WF9J$iYc z?-F9zmCp?>h>T_U8D6xV0vANCLEwVO`1#BKu>B060OAMD{xkS=>x!EwG8}gWZBk=^ z7K7cO!0HWM0yQvp`qwo^% zDIi8S>tYMgjtUNteIC86%cQ|`wPl|{eH7b%IVI4V;tL>Kq`^)!Jq4=OLGwtR&tF&= zgA1V60%itqgz~pu231p_n}WJ6U|F8OWgRmE!;2g(7KZKs0Z^EM4%`>;gkD8l3ciY1 zp!E`e%T7=k*?GjL*W^Ol1mA8Q70>3sDkWyn=;4MIGx?zG++D2TY55hjKDl;=XQzn@ zICgkIvBUnNY0c;VX%jq~k8t=}ektAlGW6g7{~+J-x2|JiVEA?dX=&SEwykeZjjr5}{7P^<7e-@#Qle=q3Ddf())KA`jUzrC!Q;pxOP7G>n{1h0UA^&aRR4??=RYafeLT_*4N%J4Z#px4T3|;$;>jKEcCeFV32>Gr)CPfaBeDh6f}~T?923dQEq|0F_%6 z0^qdO2^x!!J@BIS2Mbu=%NU4vA*TI52)c?cb;ipyut~KuAi^ABul~P04Hl{pcroi4 z3q$9jmtNp#fGKG;=VEv%1rqA5-SFah9xubo$)HdN@n+`oGQ3Rx{r~@q`in2YrR&R1 zkX-A3{uZ#J=Km}u;U3NZMM|6;z8z;Q)pcn2&r>4d(amaR1TKVLmVwlF`*Xa^1v6Ne z8A8P4AY6TY2-hFNhy(dUls7cv_mMl!k*E9w3?75E*@lOesT&u4iW{gGYBY2RM%9L2)eA>3Zjd z(2CFhyIt?R<^{(yyq<18A^`4zfCer>_waO@sK7PP25Fx5;>PmN|6$hYfUPT;_ z+=~Gpq|I7<;{ShsP1gsY1FrcsT`z#P%$)!c2h;d-4uZ~>1r1#vbA7=GzT(#e;tOfe zHW&}k*pi?}cPQu#ZV^?`2Jlkxlb|6bHVJUoQdJaO32iw1@&60y^C)dNu=_lEO_#h< zU;u5SytCosf6&0`RM1E*{5)FF6dFi&-S*G_K}YZ>dh~)$#6JkS@9=oT4ba#JsC;aG z{sS~Flg}!~Ey&;jx}6iG@!(75&mOBijx&Ke&-{W-pmFDJR%dbWv{|PUM<=VfIA{kd zYlaT!>~aB*&I_RNFxE^1MTT8Q3=9n5T;|bhYp@oy1(M^1#>JQa!RMa8Sa$@)Gtlur zkKT63=FE1K&6$vmnP4d_dq zw_f7!12-d+FZp!aZekZ?@aX*P*?G>Rm*t{Q?>f+sDQF=0brk44-`>;>KArDCXW(`| zdhzZVc+9j2I$X%#dK;81;NzwIty4jpHldSGic8o*Gpa9sJ^^XsZ=DE|>wNygatUZ_ z6nuXuFEx@qf?>`YI*8o}FxSNF;y;kzRst zIqtUY76CiRWt9NK3;zQj|G(IE`X$;c6j)4*r_|9eUF#&7d zgZQA6xE&;7JuICR_@{t!A1Ium@zra}@*JE$!4rASZ#Z6u`|55*!b$dXXjDZ)+cqczR6GgdQ~2$ zP4EC+x%1wm`7p-|#>7|ueJmfBz5(shhM&4$YUI(I`T{YO4K3F_ntfP)Fn~uKKo%@r z$jIW&LBsalE-Ijz<^a#`5ETK>ULO?>kKSerCI$w$b(hlka}Mzff(1P~nZVcSIv#gX zkpPWx9d8D0j|8#cmO<*%7uu6P|M%=X_TuvY&;MWC+s4V@+xm^abuTy~(X8@3?h48o z2rF-;@#h>ySn1ddvJGr8#6D252ojWGd@1oCbmWf%!wc>-UIyHrc$CJUbA%`pA%W9+ z;2-?hf!LSwX}qv=4_;jU@%jHtOVC&tqH_$ZKe}1(swy&g9CrsTaA5H0u9NWSw1Czs z$J;?61@b2-WDj^82WKuYA9O#5Ah>>c`SdTyJMi?;&H6_JRJT0^4SRr=pqM^ZUDE1~ z0;5%?_X*TK8m7Is@HJ%Nujq8Q|r6 zx9&$}P;;17N*(G&pKgN^3rIAB!ql8K#`CEPegE}lJDhe+_U3X|cYfk2c<#_&9ZP0jS59q!$P5iX%0ay3t_JdwjS7QDw?v65 z!b{E0GK{^Bj1U7nAT4gt=?S3mw$9oYFWQrML6<_mK-B?h&u~Co^Ljt%Hu@K5p(?w< zZfQQi_<9x6;2bnRA<`G9U<9oZKxt$_^jd=RQHg%@3&zf7kjGF<=~}2W9b-WSAtKBA zbn6-_f#OdzN)_bUS_TH6Zlw|l$L1Ur8AgZ)K&k%qa!5G)^p;)$twU;w=VgGX0mlv` z#y|>7IY82`iM$NmU}wC{22F!KJq&6+!Sgd{{R()chezjcQ0p&jHmJA;pp{qE7dAC$pCd)&GBx49R5zp#S2lnqi} zgIb^+AphgzNCeW=2pa#!zB}jv3`(9832XgP4Hs~akZr2kKmFl3&>bu<~ ze0$e}W^a9a%Q-;BPTN)n(2c*Kd!LWBg9;JGT`!nH!*%a`I{$;_;y^(S$zSd=j4zHS zfFd(rh7s&&p%kn+D<2gJn@0D!xXnYMSr=aC+jj!C59K4U7Oj`EF4wkVLQPDu^->kmmhhNzn;#x6TAf z_R3!0{{O#6CzD4v>s+WYQ$Z?09%Q}Dp~Uc_O&;V)+v6ONlNKQ-#+s(H@iV-z&H*{d zb`7djG)PJTA~g|JDgv~ph!rALhAL(1$j9*FRW{hbXjCcvYkUkZ&O@XeP^Elg_!wSn zfk>&MN`1P@$M9k%M2ZVl>JTeG!;3nI)O&WYzrbAp=pnDB8(8@nUdCm=L0&wHTs|X} zC!hqvqW~&T3_QEtIDC8SID9OB@VCqWRr=5j->aI-3Ob}z_n!$L!)sS~ecpP&ru3O-;r03!r2YUEYae7G#oB`%Aa5Z0aep3y z_zn`UPb2Clbo*PRk?b#*1toG+`%izwus?x`fdSe60;v57X!f@eVLuD9{ry<%_r|mz zbXFO%{U2nY{@)JrFT(!O% z$DpxZ&`^__N9PPs1bB2?d^^ludKI*I>w-rocp~uSxyhfQ{V-6xL_po;f#$BJ2OxJk zNW9*H)ZPWT=es1jd!B-V2gNbob^2+JaU3&qv;uJJ^3A!W;GVxk! z;L&*lk`+Pg276gQt_7Vz8@l1RD`*6U!K2r7JxHX}b;FBq4_FvpAAI4z3vKuhvYySO z+Z}Yok%C8e#f_KNpr$%neuVmmK?v+0$BjN)9_2CPpoiG1G(mzW0y#Dtexk>=Vw?{YYT`^EGWx)Vn_X}!s zf+HR@_@w?8lmi) z#xedayapV~4?rOdNjIP?KS4tzpwaLbUvB@0j(3&vd34u401vl=LPrdB+}jv*jVY+T z*2}sPbb(NB=z-&|paUF1;gSy$>2y8tV%t3yhHlpr;0403_q|}>0czcYq6*TF3I%u5 zL2ac7m+oB9t(TBdb&t-_8-|y_Gx9!nKzZ0*!lU!EM>m5@2b)Kyn}BP}$r8QeZY-cd zTA$7|(DjZt-~&zkt=gb*AlRY-XnE)O?Ff4*t8eR*Qqkki;3exmoyi=aMFWua%Ha84 zMh1q`hu}r!zB9n{?JWmNFM4$Q&hYqt5VTUcMDn;Z3#hB?+VZv}7i>Taw4Q_ny{#yC zDIn{)Rp3BA01D(29=)XtKq(i*IquW>92C|b$6XIVQ}lut7a;ky27LTu^ADAhB9BgI zj^oZOpqBSb&~@o)6QJf_1&#alvaVZ?F#iG;^AEwyKjwM@G>@_1MGnLcS-2g-AUj?j z0yTIGw!QrSLV7D`dd}A7KX?&v^dHd9r5Ddu!Nz^T>C4sdq$}i%JaAUN09q~T(H*DY z)Awu6q~v$_pWg2n+uK@0zK4}jLgfX2m}-=MEP&SHEq{qO((4ZFb$B%>nv zTYEtR-@VBipmAuBp3eI(zFq<4F#cB1;y+La^J@=i_X?jCKQ z3s8DH)(l$P$mr484C*iO3pO7BmqW-C4z`eyPS^^+i#_ZN;PuHTdO(vIVCV3+RD+js z*lzg?4)3p%1wc!^%2s~-|KcII)rM@~8<2tEo(L#4gYyq4K0y6N&~R^y;Z0B`DUfK` z2R6Kf>F@-P?(hn5Xn`i4_oJ3QApb-3*BgK{+3y=5{q7PCI}rLiKY_ye*vsaBpb<7m zeucJO9YOPb&2K7vI(`F6{DB!BGmo#N5?$)oe5$H7M|9tU6A@V8zCEr4r2Bmh1{?;+?My~gK|QSYA~ zmS?bydY>tM-S`MH?0v!ZT&+5GT>YwHvKzSA5G44%nnK-b{@k=YtY}M`!E;P&|4-%=ZOdr}|5!#MPr4vYxT|4M#KBU>48bZIC3|3(^kB!p9jv zMT^IA2M$mn1io{wyTTxg@kQz{&;_X7u2VqkyXUZj26;+nygULPB>-8=09q^vs{TM7 z7I2w#+!bUxsE*y>(H#LA2w4FeCS1|U4qYwJ!r$_nkpaFqoxk-hBLhS8Zjiam{4Eu% zu*Kb=vK2h*wssaf!)N~dZjjk&{O>RMbiO~{3{nmn0QTsf49Rsh2;}X~|1WM{0F@1(%>=CHeky`CXO${>^vWhH@-d`MfE>%-dH+SQ1872$ zbqz#C$#c-6#dt^1e1va{)iU0c7Eh&vu{2XR4O00o^RzhFDa1EBM-K%+3= z@CA))AXR0%LF?aoQ*XfLO(0_&;C7p7;+f=-S}X$>G=y4nolUA!u+1HAHVa@(a!fh3Ly|paKs(e)b}`9klc2m;fjdwEq74 zAKH(B>?H!-kPDh(eet)AodJ?zK?`*u3*ABS*h&9kjkBcgAZ0XnpV5d{n^K z@@YxAV|Oe=>+RC_p53k-KHUWhp1pD4W%R4t*clwZwSk({Ec`9HObiUJ-Sa@p++AC5 z^S8=^2J}1czu4La3W?ekFKXJ@8C)T2?Oj_hf!bcID_;sQctY&==&oG>vhhW08#{xq z<>9sVDhcPJ&|NIM~G?$Ai@bw?SPl1P%|7DZZ9Z`CCByARN1W8Cp-4 zzD9TZ`&Q8O!8UL;_^mF?vwIpS%X=iBGd%E`AJRYfXg5>fzDt+u+%| zAG86)qm%JP(vkoF9lNK4a++u7QP9G@6`%{EQz7mKOVR@+Zonv$>%H*uzbC}Yyx^gC-x4 zuU@_ZhdhI0_kK_tul0ZZBah|-0zQ@xO4ook=ZG8zHAHJyywGlDXLxz}53GD}?A{Iv zwAOF+n_v}0$uX$8pj!Xs6qvc-0?D`YU+V#!CA>#>ZO4nKTkH%keL-8)x>?IUgGxwQ z328o1wZh+e{3py_c)jx55}fXQKq^6#8ZQ_B{QuuG`3|U67Q5i(_V54y!*=XAG~qA2 z0-8WZ-G3p`1S(_JLxSmTiG?FlQPFw-g=P~w!^>*W+PTjAFJwS^x>=WUf*fkPtP`{% z2-MrWGVkMmP`KSW2-^?tO6e0WeUihi64dse0qI9yr}*PiYVlzS4<}lzu3AG z)T2b2FG8R7`T^>TfD8clMZP;c0QKWMx;<_<@=rZrc**daEC03wFXX_6yMoqrK?h0L zPeOM4zX%4~0G>Yz_2~Qo>Hl~@x*PD8?+?)STu^fK=q@_p@!jbL$QGY&uNNNOUKc<% zd34)BmXwyHc{cwP*#+{jPj8rj2fxcH57=_o@14IqEWh)&&N=(?zfb2ikIv&hy}mbI zG=BO2|1*D`>kW_I(g)ykpg}!J*l^E-7m2x`LlBTdM)Krgge~1+3Lf2cV4Ggge$lc5 z6krZu|2Tk_!-5yzGamN%&JH?#q4e9!P4E9h$1fmb5#W{n@PVEe2u&ipL0i+{gGrF` z)uUU!@iEw>hc7a~Lue&;;pf9c?#lo#6hs&!3R?IN8D{7P4Rb)vfx71rc=}WBJt*>P zUx51KFAi$`{_oLw9Mlo5R)7p-LB?A^?uDGm;Mw^VG_(L&QQ0e64;q{D;Lkhd(f9_m z-4{81o$%;om7o3pKPXIZcyu$T@#mc8*X#}W|NsBDBMSU2-k`yR&g1Y%y6$0loxhdi z%*+3+|M~k^85tN{ddvTN^m+?`wm?Gq5S|C0F~80R*SFC2xL3E01!%S$avb=9)1dyA zgT%2`PzQtow8Ey-wE+<%PRCnI{{R0E${HS>dqLd;kKU~yrJ&l2>E!?azLx*^TROoV zPiD{N;~d|PD3neGZGCt>4O&0I;&ZD<=Uz~||HbXMpdbXZTMm@YOXJU<3i2bUA?ndv zIsr65!LRAMz~i{<22kSU*9@KT!u%X~ge=6P+jRqY@uL^C`vh?xs1NZn3A~_$0j1qq zs_xNv1QgKVJ}a!v3T{_|_GW;aXD?PQ`TzgL*QKE3h?IXp(e}lo`Hci3G(0qSpqj06pKp{xLVVR+z}>vIOMTVVU^l)#=v861Hu z+k>QbP`wKC|J4^vZ$M4)(lZ{trO!e2`=tHgNRw-*ea=w2&7<2k^DU^|4;nOd2RT(} zCTP6S@BrxQdJYDL(iw)A3{UPm$ORgsz5haGG7p1Cx3EX&1&@O-IGP_YHaz3t2QP#7 z=(d#ynbd2l(E={uPtN%G|AomCPy|BC6Nvvhe}fBr&?co9ZO&i*d$isL-3Qzu#Nfg2 zatq$)?393c2AnQH;p5S3o4Q|t;pK+^paM_s7sx!&K56jjDxl>S>lqapkn`>f!vo+c z4*r(8puCVQ>h?yF!CKVi4JZn19p5N2l<4<5F@n{2bjn=sWK{);C8G}X7D1OhfW}rB zS}&EFAXW%q(Gu0K_l1<7EIJXz}9jBDC=>kpCh61uq0|ek0(~ExVrq!@uA;H7!t4 z!U4{a;b^I(3ltEDl_m@?9$y0|kF(HuHg}Ki2FUe82TG(t2mOPWI~{*w!`U z*nA$i_Iteu;UCa70Fx2zG0;3v025^1#bGX}I77_4d;qVzbdY#G`Gx2rQ1U>|-=T=I z8C@Bp}60f{iYV21ebFw}qQNdCL* z(+N4g?Dz}N`KYZ2_@^Fty$({pfZRWU5#s)aIjHWpg1LV)!oTqN0j)pm)>ZwlzyL0) zf_=M789X|F`?h{7(e~`#2MOE%CH|0ujb5|ElK7BD6JYrf3OHbxV;f zKX(MgcaV6!_{G)v=;;R%{!9N78U8IhaEJed{|exB!VR-P_94=5#1Smv@4W?k_%~n1 z9sb>{Tc3kU3($Qatq1B<4R8DOsxEr2$N*X|%eoLG*KKpdqxmr73!Vp`|2taBsMJ4e zwrzf{$RKc>we&gYiaZ8}dT!8SMCiOZs62lTEt2+u8rH{I13}6`O>7V6FaM(*V>~)p z-JUBlplpu-uTS>qHGR5Gfx)BK*8d3~!^@MOkk+$=dUXDD?7ZO7`5oLM-?!?THY2FH zcAOE!N}JI6;ou87!w;DUQajmmdQAj6O(uFYA7b=q`~^C1tMq~6E)WgY1~%Y$;|Wd% zP&<&pqqp$@Cj*14qJ$M|{_G*CDP%aD% z-R&U%cy|5(t(yb0TMyLP`gHe${N~x~$l}@A0Af0JGj<+2_=?-`Q0Ik%57<>3!gS^u zUg$h@@DYFGBL;?J@4*r;gbXhnJ`Oep6l~q*o}E8^IuCjD?(bm+4Fx(dbbjbAVo_ya zU})(4*!b}O|Nr%z2RlDBKVZE0^7{?R10KzXSXA$C;FxLLWWdJ2V0fa_>5qry_0kh* z{Q0&QZi0sQex&igzn#XPZ+h{j07DvozV1y3t@`k$0E1`m1dx}J%eVXhme2h844~d| z8h`$&H2&Mi)A(z7vFD5UUD>U0J*#I5y%gQ7aThqK+bsy z+SLw;KTvtQ161!q(><7fgA;V^A-FyT@jaT4bG&p0k7R)RGhlu&WWE9{-);ZWWeQ~9 zBaCkX<%fE7vp)C>8bAeIW;^u}Xzi5+s7vwm#mD}S|0jfkH@4WjgU4~#56++}w_D)FOL=gc^Tk8uPpJF5Kote3EAsh;8#_qJeb3ILFRa;r|M#>! zTEYjuQwy@(61>ktSMiksXu~XM4^`N7P;VQw>jSjM(PR3@|DY|Q9J@d%&8Ig5w1m>5 z^Ds!|n%OTwcav@M?4F_mN~s>*%^=E0^OKL}3sAJo=x)Bi$-v-f*`flXOFKNejX^sd zVKvgrtn%8vZ)XF!Sy zL8Gaikl^y^{O+N7$fK8KGU#kFP{_XEQv3bivy(*yv?2<9c;0~lbf%d{^AF}yHBh(A zr@KJF2Xy0Z4!E}j-beHQ#f;8h|6lh&(tEv&2k4ZHJP**0b_Dc>Thoo0a=FC}o=7z7I{&FO+&gvjeQ3e}Tm>!^OG4;?4>X6CJ@p z_VNrk_rTk0y{1zj`(YeIf?u4R^6@`d6)5`VxV-xBxC0cJh9|*`={$Um9OGg4Zh3UxFuVjhW$fS!(A?I65;31nuujmH zyn~MvJRtgC`L_Nq+3nF8dIBch9eSekfCuLxh=Stz9?i7}7)lQrUV42KRPTYxBd{OA z`vJf!J}keN1p4%vDm_zR@a+8ZLW<@0f1l28pb+w(3@Qe``E))9l^l+fKmOlo4LUNd z^Swvsu^pgv`q^WtXYy2V=G464+3V8E;n~>=N~VwnERf;_seuS?4|JAufa_|IdpgnU z_mb%x$QAs3k6v(fb-W#938;4T=mZNOmCvCby{0KoA?3xKNgv_qBi5t0f&-jL!0F>< z!OGW=^Cb~`UqKs4e}lT)$VKf9575{yXvo;XgYg1?2WXbbqt``<5uA*CFMu8I(dl}@ zquX@LJw=8W>1TKtJUS1rVCQdLy$e*T9N=$R1Y&eEcz{oC@M!+U%HP@#777;lc0{4X z-P7_4e?O>b;qPf_S0TYB*INl3o-=)C^oLf`BEFFn9{m;rq5**DNQPSnho|6ebLwU0e|ZMpyQGQ3a` zVP$yT0m{dp!THtm4lEx>b$0tt`r44~q*gvFz~K*FQ-TZt^#iJ&yDf$mlCyrXUM zAJ8SVr8izw2(vPHbeG-XVDCr%kW~2 z5G%v$MTja5>=)>I2hYwchL?gt%kVrpYd3(`2bHea2fBe1IklcJJn-V#+}Hm-dTkgy zI$aldH2(h&nm2E61dSl}LO1nwJ_Iez0i|hB0ip_7;Be5R`Oybr7dfPXjdMNV0ovE+ z(djzDqxta%pYGZPu7(F7)tgV}b8uzn)oZdFeC})M4p3!Rx#;zOP&EhI3e@R3gTDi` z&e*5BbcW*|P=0nb{QtTLUZ1#hz5qG!;ww-Q1|AGzg0ooQEDjIOL!d^}b&rGZ1w1%^ zl_)!QUI&jBcGs@>AE4l(_`|jJNeQo`<N;Hqi6Fw#v*aI zZk^4pt^Z5<9QT8khl3iMp!4QHSKor>n+;DwY8i0x@xpBBYtT&h1W*+d_2Kh>k8al! z@Y(Xx6!4|@ouHZoRNz4iaY%jQ(e1hbHUR}%VRG<=U8$Bwuj>KOGL(a_m_0y?)?FvO zC{X}y5N=?-kk z0~Yfy_RoF|+TLAS<7Cg@>#1lt;yBc-oF#iB>Ej|v9^Bzj?O8F2CE14;!xpmi$u zJe!|=0G$jlalz~Vj@@RU5cKJ-J>d91RKgJ)e4vY#7#Lo{OfP| zbjGfDu|e+3eC^cDsb%rvf8Wdh;1mTam5ho&=fQx}6L?LV3TRIbgW)$&fn(v(S-T^}qZ>Za zbi?qHPv@f-a?PNoa_$aL{lxoP4Rn43qPlks&15sCAmU6>4e8(PsA=QVmKO5?2&~S)HZ|nt7HQxLNWw!5y;ei()|NZ~p zTziKRth$`%xa$K@@dTb2g|;<8Yc#-Z&ljo-U;p0)nuY?8g@Be6bRKz;&;{}#@>*UV zkLDu^kVuF<{Gy@vC8YfUF5kiV7aG{5pumRA0D5$~o&X(3#SYJ)y%F*r2Vb-L^j0(a z^_qZo<}!G~%J`??gy|*@+P@8IiGufSAM8MJkG~mO#Xnv%BS-;XqxyQ zQqc)o-1q~O&$>fFH5hpLAC?@kRAuQ_Jxr&=)|@o;5mFmeG1*@4O-0lf}sa;-YO`~gA2EATh^NR1_6H%^9|yJn^;TGW z1=hX?B`gk)Zd(cbBiG=WPf++G*|Spz?9W%1LH;}p z>PmeF>4)koJ+U7&PxoRmXzso9o=30k%4MLY_n{YwKS5LT@T|;@R zy#$dykodPPT>DGn}+k5odMlV%h zcp>%!w3R?P+Nbjc?2vD0dH`)+)c~&^I`aAi+@E5glYYRFA+r<`8CSl8Bja@^R3DN* zZ)$=4$p!Hzs7WIZ@@LTh|Np^NyWuyN&gU;KAL9buiwsJ;khyJ8GafXWbQ#njMQeb9 z+V8O*-L~5etq%nIXH#$w_F7mEVgY+6c|8*PMn~r76Fg$3JY*a^6mvMcmYHx zs4)epYxrAFfZLg=$gL?*`yX^-W#|EL^XA3(Ns#6)Xnh{6B%BSl3Awck?!jF64fXkv|Apdu}u6W4+?tOvgkD!Z?plv|@ z)@NY%f=vDdF44g4z!@)c#6YFkVNfOMxbOdeP%^j&ZeTlt7Lj+p0w2T@yTI}CJHK9= zwV?JqxQXM^S-Qf%*Tnh-&vZ~@`xm&;@caee$N&GkT~|0NviY{Y_34gXP-1U*0JN5n z!SZ5}31}@HC|0x`yG5EEyLs9yPZfhMY=CI?>5N_Q;_L^o0U)i8ifpeBO>o=+atO4v z^67jBN{FUhciI~qA2URL1h&B*)$%Yg>&Md zB+&WWv-1n+Fz429C6ON8wo&I58D7kN3Qbslz`p2Md^q2GH2?o!qV54Y z-4V2hs`GxQ?~WI3@BjaIZ2rRn+6B?=yQ7r3+ZA+@?FLZeQ1OGu%i*+zGlTMFTX1gq*2w7#?VT#8{Hxaq)kNcO`r4$x>I3@Ao}=!~cV> zgX(<$!Wh(10j*B~wU3v9W5dOs5#<1M{?=U}aoC~P;CWNX{O%2SfA58K=xfjb@^g>w z+7qC~1quudr2?(DORv31+zA@Xb3NhFd3+yeT=fOR9+<$P6^tdW9v6RkH2?Zvvc{+L zJ?OyIg`h@C=W*o0n;-n0si5us$7)~ye+gQSGU0_bh#3l6m;;VCsBc6;1!!;R36IXu z3!pf7X$;bKz8Ph<98^z2%KvUtm&c%T7Tluj{QW|$;Ul;v>t(%jNrAz`(pjK{546D% zJhlk72VTFGK8I9I$zMTv`7I6^#X1-yN;sVR@lM!=v>!e@h)G3Sb-WK=XgLf@c&N zUW7aX)eqn%feoyVD!mSI+KDe9IZ)MpZXU>%LoeDsf<%~KZ<}Cv8#L$%Z8o?tFd(JF zMip>6+;ke64iCTB|LFh!*9$$m1w6W0Uq1m49VwiG4UsUFgVuvU!n5-!w0!_wguwBF z1zhyK2h~oJ{NP4_Dx?trsX;pLfh!UCB>l^lx6u6DdHltWR7gAE3d;O|C+M;u&><*} zoqs$!uR{;L<9IRaA1K(5fdbH{JHrBW;AIPF$BrZawond7{%x+D&A%8SCtHE4@bc7e zhuKR&7pT2pm;)N&W`+;(Nte6?U03nMwe?Ai`AL@E?6 zwHPEN51yYwN<+3HrxY1pgg*d9CphxuVUb_r;L%&n0iJn$+5Q+5m|*uI#qUBTaQt36 z35s8EyYN2999X;X03`8re*&2eN<0(iKoXB9Xb~OA>`qAA@TCUWcu08!i+^Yuw=FrT z$nawOeUKSo_l3jVR|`7i3Dj|Y2~N8A9Xk)bxcBJ)f5(HbSV61F()iz>{N%{5b?D#= zHjpg+a8u_ODd1Dt;$o?8db z2O!UFnGNw=&O4A(nP0|(D|!cTczYaY2la*yBg%_j(Ie*+AbABexeZ>UvxQ>8n`9_ zmBOI*NHfxU7Vxz#sPO@^<&Q_V?UUo6R;}7SkT1azk_L|u6W`V+CGzlw>!Mi-450Gv z<<4jSL7N>Q=7DD!!IK&gJ|rB|K&Og<+p9UVAmOM2S|-@Z{CYKJ`$`iuG}dh!bsQ8w z$3VfAe((SPm!Or3knn*74cNt?WQ4NJ?S|oj7dt@5l7iN!dvx21fK564BIGV8UmgW@ ziE=!8Sxq1P|L23@>$lGyLztzvPgD$H4~* zpe*9S`N4zpmq+I@P;2GjGgA-#CC5!Y7(aLj{`%y>uXPAycqadGre(~crw2`(SRQFgO=5GPD4?Mfw1bn&+EIhm2K&w$p zN>PG|AAIB(Xt=}$yi*e#V2*LI{~ti-GkQxefY-x$9Crn6!eV$~^z8qCm+ssP-JsoX z$h#KHA*MWX>3k0}<>gk`{Guo5Zluop|3QO5j-5vx|A#4b9s?gP3Q3o-tDb+b1=0L_21KsqNc9`b?~4Y(fg0PC6z(hr)r_B}x`VH5njf(@zhVYe&TV@^=WByD;N^lC;OnA5OISR*Yd3gwx*m8b0XirTl3$@N zcrp1NsE%U*oelq@{M@hqpy4)<(?EwWD$G`voS1|Io-UoReX)=$CzqOee zbZE8$e@hj}%Fg>Qg1kTtS^ic{h_6~Nl>~cq-iNeY-8O<+u7|%JX5??tVrF1~#+r*lGaq+kQ1|{vzf1vRphjp+2!{>Rxi5hhBtVeIa z8;|dY-v9sqzhu%1#?n3;o|3K?Pq==AW_&=)&sq3e%0cyWcjy6+&Wp_tnLV0+GV!-` zLjuH00NnnAhPVSn&_Mt>{YD_AUmK9;IuCiErr$>(QBeAo1u@|1_a*o)4{*9&!N}k8 z9Mt8y_`~Dke-B2qZcYd2kVp@3D!B{Vg9txg%A@(0Ab-nAkj~~`Ec`9X|NsAgxdL1o zg4=f0cD=n1EppjaOZ%t(j%~52Ezj{OF-w>y_l^CYHWkL zv$Y#unu6>GyBE~ceW?ak3$ds3phxqAKOP5P+JlZ0@58B=yFq=gg9n(w z^35lhUT=6IR`B}&OA(OykQ@Q3T#MfR|NnaG3vI<;|6l%u@23R!CttpV^ShDClh6)O zp)%ox#ZOTB6!4w!iC+LD7Q?!4Jt)OT9t0OPpZFtAed3Qe@X`YmO32|+lI?-Z*_U2^ z0S$nns5Zc<`qaxRkZL4PzBB{%R*$=a=0X`>Hbd63U3$3}qzrB-I1hnNOVDRj`;@No?bbvVzD8Y8i zc{KlKfvk)2=)BPkty~m92l{Y=dZDeMAZ4BRU+|v%^&eEa^0z8OMXEtd)4-V#w1Nsb zFIh5zOB@eSi6c5^Ex7bLn8qK%YOw*t*1N#p)DEs;-d_U6^Nloq{fp)KyFg8ENR{%! z{yQY%Z-BOPr}68bDq{iFCWyS5=D`oHS4wg)>y%HRf}{07X&_PtfE~;RYD7cA2b}(p zT6kdVJvz^UQtW|m|Nmp!RXPQs{AH}%um6zz(tJb$p4P$5me`jYKx4SgMPXzzI-r%})iVbJzC z*k2Hbym;~T|NocU|G|fgUo79i#qh%EI`aN4$1q1wp?e+N{sE2qcV2#B0O|;K-ty^u z=hFGzqw^qWhuT#Wlb_cZ@@XuTSSgkIq|$-=YowgZ%9n7yB|3blFXJ zEyIfq*O2yWggS!O{(%lS1$B))x^1;~D>A&uy$J8Pq{2Eb{4MREsO`K7ZMQ#j>3sh} z1mq6zxP6HXIDxi+R^=df+d*z}U;r&$1XWX|PhJFug3|I44p_e)qyW;#gUlBd3WM8= zi*|w9i{Sq9dXQ_N{bl~vD$xB`kp58EV~{gJ{mPhLNPkEK)CKKi2JhMc+4Kh2fZ2R#W`><>XuI@$WI=f2VdBN$`gpUL_yvv(Lwdn1d!Qa|2%)u7=rE} zkmL)mtN$_9XLde?-r(oic@;kYu@lr&{Bs`U6Hrf)zl8&o#bMrUxdd7u37!KHV}#6s zaQb$uc{cxHDGdUrF7RCA`xjlG|Nn=N;TeE(=phfwLnV2TtwA=;57?VuFoW*D%t6YS zt(QuDkXuT8Eye!aYR_lS%2cRr@_7BL9KNw4TK@*jSph}*D=eK^al#e)I>l#>1oYLaayg38ur4_?rg0NfX?kozo48zYuVbnfWCb z)I6kqM5G`%U3BdLr3-L>cKZ4M|6hX66#$0=Wd0?1EqML~7T@5NdZ5*;uR&9Otp`fP zK(pB0u|GUIkAZcad>Q!ZKj^+LQ_UTU42CB`*SFn&aW)pz3poDbD$DQxpn3t+@Gcif zX!!JS31XtixAiUP z+)|_t9)Bxncm;H~rVnU71awlIV{Gh8r)!|{$JOwO2lBc({?=Qd%-(!N12PTo7z@g# z4h){XwTvE}KR`|F(rj?U$)gv#vJbSH2C}&C{x(I17hOvrK{)9bsG)Os1!GCIXXg>m zi+@04QEPdAfkv+cp;etKFkQ@a|VVNuP43! z|9Ucf{2M7l!6M3+Nc{IsU%_+I!OB4ASdqd9U;%C^Dfr4m9D9 zH2w`rUml$oL93-Y|9SM<_FVY?AM1Uopf!i!J~pU#E%D+AXdbrpK#9Fax2?ifP>3FW zk#HKE*h;)TdTqb7qbD>_t?UCj8wi}B;$mMKUI*nTaQ*wqr}MetH;@bCVqfkA6^O9; zcBJ@g@B zERU6VLhEObZaWXgQyvEo@_IBMd7oa{9)BSQ$L5FZ-pMB29tWRW_%PnH`~M8lK5*pUR>0B>tXl<>LR~h76FhWpsw;UJmATA!l#!<06Y?P z!sFmEQICTM1bqz8`+yepeeyhbK*7iGlt-_Lg=52q{~iYq@Ot&~FnJh$@Hlu#z{BvA z$H8L?9*hS;nmib>S1`o!|;>G!Gj7OjK@G4JQyz`sRyY&ra+qd1A-t!!De3o z8*F&uaM}crpP4)kJ`(`>lYd(QqsPH#91u3h(=XXTGfRlz0b5q{!gG_~S5y z4@zaA#GJlKk>TYlP~QdKUjwC&(0!nD>7j>>1$*?$nuBzA-uGyH^MjKCWhWhIcynj+ zOHdi4h*s`_uCDcHJOa`IO1QDHhkbh2e)#$yvI5MfcPYa+&nWMHhfnYt0Q{^d9%A4+>1Zvd}F0hQ3lK~uHh!Fh0h5h-73a)I+z z)J9mo`tc&|#DCBl%pb4!Lc$9?aMNq+wt)|H$&F*UPp_^020jMRq4z$$x~3pz2&i1( zcp>whjlrjv)%4!~|GPjlz2G%`$3Pb#7)if@2zm6HihYL!jhytG{~q0}>8C)Y`gf0R zgBN@Lyavzobsm4Ac$|v?w2QUZ_U3v%h8InLL9^hp*~dX@AAwiUANT1sJ+dC;CgvB+ ze>oXExE_lib51=;r8qu12<0WZUgnZj@WgQXzNZI512_HY0H zzi1ME^WUdeRQo?K1Gp>T1Gzeo{&^WUSFHGVxG1Lzd7=b)_BE9&?7 z|Nj@BAgOL^uqKaQ(O;kzTCb`38D54LdJrkYlODaIP3J(zOqz<_;bnNS4I&QHGW`r# ziUTAy8|(~Tk&~e6%^GCaIgeh^(hL9pzi5Ey0*QU|=oK|Q^Z);g9Ecdqq*zda*lYUd zIWNPDjY6QnwT622pHDCA{5zn4IP^kY5?SV*N3W>pm;e7?2uOlMK=U8y^m>SYKr1nO zMW^5X|Nq4&32+F+u7f%Z5&~~-{r~^sI!LP98tl#2*TH@ueb562Pai-67l_Tr5oI4C`OO+7*0;$?UPx_8c_ z6WkxU&-Ug&xC#8+r&rbK)Bpc3bYFe^51!Gv4~`a(UQ-#6Ha0g{)1E5Af>yEXG4501>xVV9g#7*!3?LLAug2DM3%#Q*$ilKbg!b4zZzjOih zhdjDj6QTSo;PIbs*2<$0`6Ez%CX_D%RWErMA`hA}p5W2V$_eF9fvT@O0+D|L}44`Mh0^Zg&Y7AKdq<@&H{j3>lHn1C7X+ zf=@?bHau|Hqnq91_@Vc||NjSd^Z6GaD)tS9?hf?mW(@-cMQ7~~P|0-Z^e^x#M&6U) z);n~63@AJgg8UCrwD$C`|0h9dX6ga{Z3hmgO@OLJsee2={~2EL=(XLz#=!8>`vyA$ zT6+xS0MK+0w6V|O(Ooa_A~>Cu0d%vP1ZaZJEgiJa1H9jGb~-Bq$TZUlv-lW1zq_a? zfX=AlpLz(K29J9*A7XlOU5JeVlD1y_F=qp(Aw;Jd$#UfRe8_(6&?BJz*ug&C=>i^| zzdgH48GO3SB|z2C;Zxw?DD?yNFiRw&!2>nWAq1rO0c+{}{$dJ5dCB!p`~s}Qf-$9HG2SA9Caf$oIhpL)SvXI})1@h})3K-o+UnokCYeF(HS2s*hIzG@hBJaadz3n=kJmo9@+ z#U9XrTkC-mf1mEu2jGq(sNdM@`(Phv5ah*Le;#O888krt-w-r~QQ=!+jCxXqJYqu* zcq-Qga%M-vTX2u)^^zCM62P4hc97-0rd7qDA{caPlUyjc2l*b9qkBzXu7HWNg@U_8 z(D_ZUpFsT+@MH-nWkLPN0g6}fRkW?&N+dkKvw?ODmD+%gYVzo|d+`CXa>J+F*6$Fg z(tYmPZT{l)2}r!Ffl4B9q$3qaX%jq}j|sd!gvi03-R7Vc&Qyr5l2gd>_Q|L79sksW zAcK55pCgQUnQjM)J8=00ioe!Nr5Rv9gn);iI)8g~mkEF~Mc)*NV>n^c;1fJScUXch z(0)+_kt=zEk}05xhJWe-i$kR+qj!MTm^;RR`mB)tBUk__{etZc_1p^@^<-dRZ~%9K zJetol27`O3puKGzpmYO@_2$D&Fa8LFBK(18^AScL#ut?@JV0}_pm{cj7Yif6(@M~K ztMmSg3&NnDFLVlvc`8`;^)u}G@x|tsYz&|@G+P*wZlV1WQ22n|7!vI9-5s1EJUV|n z@J~JNz`yPPi@Tt~neJ)<&`_YD_ZQG&-&*iGAJC?W7xz0@KsQTDfMh>=fo1a%vIjd@ z7!1F`vY7+_)MKE{GzXtayjTv>*LnQKc@PboNCa<+Y&}rH>j7@~{r~^p-b3+FG4DKK`P@5tOcvy{rVy`g9(Dkpbbq?t+#-xZ_*yBzQQ03mV;^{Sol^W&+C*8Qt*l z0rdEWgl9MFmHnV`Ch&bze?S*ay(qr>>p$pTEd`Hm)A(herZVV|$rn0rI3d?0!7Qha(e*GsUJa2kFy{QpwNl!pPd zr~S$<@c0p{Ep%xT=r&1(K&0^paNcPBU+MsKQ z>p&UNqxnAzXqQN}1PkOqqZeDQg5vo2i$4jVje$oDFTv80Pv>(`<Giz; za*j_gs|*_h!@i5$;0nT{)Ah!S+YX?sSX^(QoEKCo1Q~ctoA83$4jd7$x4lS=dI?#8 z4w{u^co8%MwCs(wdIvaR-LZlutQV*JK4Ke>4gt4Dz!$!QZh}P~fP7(i0P5c6_e>t0 z)*c|wh|9DsOAHo`vWS1LG@m*FQgg;ud)DL+X|}E zU!;0~qTu-Jg)e4DqO2JOg|CO@_Y!|lCeh!GoM}NP%Nu|O5hV^mY6+C{RyuEjr-PnF zd-U42|Nj3Ulv@6u1KlYFu6Lm20yuxd%|8#ygrKw!3yW^B`8y60FyH(q#Qgb~<|ESH zen%b#h8KTcfZN9b3;7s8$xN1$6{-Co?*KY!;rNU2hoI46uscEe5iMHI7iWqtH5WZrf?Bq*pwgrH zhYCNqg{^quFlv1X3J=JB3h;SU&?C)J?%4os=v964>pyrs=;0SqAZE8|Hpt>m*9pF@ z-%8bddUZ9=fbXLN`y14PafZ0hWdUdh#xc-j+7qAN+ykJ~$Xh}4QQ%z+$6Z%|hDv<8 zQzwA73ct3R-~m3E`WPbvgXh5)_O2k$gNH<3g4>GVMHiqo0iZQ z@9H2^yL}gc&4i4cybuP7f$ms8{=$QshrzS+0I0JKx?0bp`G-hJIV80CTl_$kbT_Nd z4p0m5xKF3+3{bQ8=)Pb7eY#y|fVw&@4d69W$Kg%@JNmfm0Z^Oi#cCH&o-dsNwj1Q? zUuv)aJ9ZvuJ;2|x9yDcj@P+(KP}dRCKJe+RUGefScr+fIzCF4@_pIN4v7`%<$J9W> z;3*#3kY+i5D`<-==&D+e<|7`67UW@2iYnv+dF#ju#*$!2EP%T4o(JF9`*c2NJy5#M z0~%Ye*Fe_!On`d;w7?4%D=%I-gQCQB!b>So{}${%@X3v!P>O(rQppyNZdR@Bpb&Zv z3Z3P9!Hz9)0(%up{f2OnSzP9Ko+ z3tqV3t)Hwtkm@IXr25I71C&O|sh7?=f)dB^*DGHz2ZL6WGQiyf>Tf~Ub#VA}CrN<1 z$^0##8}uAI|AJO_G=qnmoCG{UXE|J6!C30B0vt34O0_{j)BFlFlX`^1r}G~r@LChr#o4}qq|tZr}MvO^ON5%o(cc@4=(vUIuHA{KH+bD3oc5I zzvyLyB!%YRjQlMhz=HQ*aD4pvA2dw%0F<4Z|1$EoW->A`_;%|#emly@-|`T&hxX!M z{*F{e1_uA$5?w~{nArCh4PSr$hh`u%Q0i3n?7ZuF@h_;f75(=TGI9nQ41N(V47T;P z5$JyT`<|WmUYMGKrs$4>l)m~4O8wtJPVYSOLI=?LS1TEEjAOy1H_)9+Ua2lk42vTkcI*kpg`epWC zP+Wj7;$C0^QV&}5Tu}?3VR!Ihe8Jzz3fXS)Vy+jcmj^1nK||v8Utj^i-}?I>Xu$IQ z3uzSZ#0r6Z{?Zgu3ZGjCZmh){!WwI`t{;)wbfAS6)qUV*-5pR7(QC@O1vHimDk(m@ zfEoty{b8Uj_|Q3JaMRSIJ6^!2J6!@a8HwDs1MQWD_AB{YKs)|kn?b_|R13Y(RRon= zl`bCLptC6MJN~~4UeX3_Js;#|V0f|04wOYe1&L4RPjHzBEf7-=yyyeV9S1doOV^^5 z?4@OBbC%HdI(YE(-ixgYpi1Oe>w)@{2&+MtG3)}D?8x?Of$hLY8XUHRlJtAi# zXz4d-|5l2JHe}U4f9nI#`p{mC{iLl2KwY`tEG6wPPOJobxuqK1PWb;~2I$1y}h$oF3_X%h7aS9%DbS_Rn#4n z50AgT+VGpFBp9@gj?JU>cB$nA!;`R30w0$H8lQ3mkKuxJomc+#-?8&JsOgdd_REKt z@4-zKP1rp&i?tm)OV<`EJzZJBG8x+r=^8s8sANh2C zkM`+h-SZmMb%7Oj@9uv9Z9RdWbN1i{sJuJ=G5~y3AEbN)H6lSb>44m$40g{d(Benf zDmoGVR?vPh#FzpoSUv86`aGcx|dlkap#ZWCk7v$L8aVATRC$wZS}-kMGk0 zFAGmy;n7>e!1#i}3e*hno#D}WAFKk>I`4E{@#2{!s0=#}iqw*=AQL>gOFO`7JUVM9 z_;lv3cySn{q`P(kq(Uq0e|ZnIj1GL71Zdn4bU4z*-<}u$LCY}@P&)Nt{QTnde{Rsg z5NNRQH7GEuT|g=GFl;>oNN5FE$$iis%)1R>+1D>TdQCUIQ3G7!B1oe1{)=@hLGuRS@~*_ir`L4@*hgxJqQRq=cNKWr`W^q&LofDg zvoX9B11)1!^#WD0hdg>syFqiM%Z%660EJ;y&TroHMIK( zKY#HTsLKVKiw2)F(OLS#qqp?O3;$pL|DQze5F*aY`Uk4)u7XBy&w$Erl#zYV7MtdO zEc~tYpq5H^oB}vhQbD~a#G0kt3*c(&#cgwNQUFz1pv_sJgNR?KOTGTz2|6(8`(aQQ zm4E7i?>8(j)GC9{8A0CR6bl;dfc8?L;~n5}hS!Mwx}f{;I-v`tKr5y|?H5pg>P0e= zz00As;Ce|=?aSW>I)m)>q!$eyi1h%FJ}}6?U!YBI37_tK0nqFXT6F~~YfIT2za3*N zaq{VW=+g-rmIp=YK~SOr^|Zm~F`||FQcMh>c_h%yqtL@-ng84 z01|OZW;_hwSQCSk?4Z7Ao&+QSuQ4!yR@_T~8+y=oHPQ)G(5nZ#gC#(XWXM9MhaR1f zoobLK`4n&&2wJ}iE8JNjC;7Kr;%|)x-S5@S25E}3^0#_}`A7;|;OqLqerYuUHy58H zd88ETix^XQ^5bs-U#HSs4QfGr^67lW-vYY#{>4mju%|jfoC)Cc^%8X9Qp=^%MV@d+ zlumoe59-f?rq@cRfO?si9)V-+oJTjS_!4mL)KG^tGq+j6`e~lsV$F|0oitYdR*Xa~fLudbk0G5Y)yxIY9w_1ywC^MsKYk1+DLfX*iXB}@L+ zuPh77%X#?y_6G_Xj-qbf;2vVQS%n$s}ccF zx-0;*`CH$!L*x>`{1Ps3n74Fsf^HT2!@}RXhYKYC{)Gcrp1)-cXb_lr;m7};$B+C6 z#Y}H0c=+NZ=>9C^?K9By_F}s+B$7H0zj*VLo58d5IB0vxPF7Hs`N7EF!UJ03fAGD% zPv;L%Tf!dVR`^aFP^|gn;fe*gFXKd6t^@(wgz z*Uh2=NoFkkt)QJMu-1}51God)8Ukvqf!gs53=ALY!L6_6zbyQ%YnT`qUdS(iG}JzT zGIzJL!fw!D7QB9K4&CwJr@M3q=#q*)dre;?qa-hiB&j(D0Zi;{nf$Km2=jz`Mjd z96@$K-O6A9y5YU07ZU3p2VdAgRw?th9RlV1J+NIi;K)yB1Rb^v&c~pXo$&({2M0k- zlUPvW2)z0O)EI@-)%-1SAkl8tjHRHQbl#`acLS(-{ctsCjLUZec#LZv2Lppgx9%#cyY`S)N&}@0G0w3ETSTy{>ed5>_)LLFgPB3DGzQc`gXnp1w+qI zP;bw&b_aipGq_ogQrLV2`Mddu1!TSmR=h&u-{boYAIl&7eRIGqmmePAFZgJFKnXt2 z?-zVKkAlLXb3dpA-^l<020ooHJigxm?Fl-N#vjg_R42dyTK#>%!}3IlCTLMA>Yk}4 zP-O@YS8yP#2c34o_4X&IQ~q)hsLYy>=Ex2jyqME1=FX zVmsbx$aXvjfi!-N6KVV*y!o{dFP;P~&GzU#0rEb-{s|9$w}YUR|3ZH*IK8(DfSNc> zD?u%g<1eZ%Vz!P;Q$Z(%fZOT^3{OTIUVq+yGjox53Bq0e@dLs7&cR3O=#xxGQ)F4|I6SYdvVX0q4ufpf)M2;3;MI z?M-6@r^qk-z0ORaNcig0`M}5Ug-_=T{tnQ(C?CxSo}I@$55BYaWIX11@t-f_Gw|wt1>HG*UC+6v*dhi`T#Dl+oLp=BneqWe(FN+R} zb6$dKThRDd?2eb-;7kB5-yXl*3)5@*Buwu+pt8Y(KM!0~Z?AxqV~{P{pavFZaSfhgg2yH(DYO`Y znqy!8{r~UX8>0fwvT+}w@meAWnG$INT|Nhn(+41@fD+bAbx^GVt|L=GE&?Za{uV)y zXg90NJhwBXIH+7BQP9$&#&5)Sd; zLeQCX@Dfi6+(LsIfzr%k(E>HIj=r9UHY$?&3!FGQ@A-5-f4LEqltC%t79>TKZ1Cu2 zHJS?w5pXfLela*iN&-=eH{=3ft|mM%z$M&UZb$*}>pP?XhybN9lq&D&%j`cOfB%2+ za2a?SsOT`PYg{k`)-@K>2Q4c-|N6F1=kwRsKy^{c8gM__u^Fb=8Ls%H9=I_N8Lt74 zZH9Svo`d&~Vf{t)E^_lT#uCyX;7-Ods(Ymoba&Jr(ukoe$@xZuO(ntzM%x4dCsU;rIE04_Qke)I6RyaL*66Vky86z7!5^6TuUZ;^rd)h|Xl}%gCNzpg}fB{P=)R>v*9m@cBPd81T1( z&K7tHI#3rno&?@Y0P3~>=0{TrDqdcyf_(rUw*%ce@!~4~XUHuLI{*Lwe|Z>DpLle$ zI!*(-{N+Ya|InkGH4@^JmkXhM&gl^OiBNteIAsaEY=o2$Ng(g`nm%oS4eeCweEk37 zi8-i42syt8lIFnc5S#xq)-lt-ad>uKY5vbtV(ZZzC(!(#xzqu4ic0h2-!CLU z#}$3Q?IC%x`Jo78d;*lj9smCSkFhQkbT0dgd;k9%o_u{3yc!g|ZTm%PDQLGJa(@(Z zKEK1aW9+3IpeeZ4Z>7>6-K;WG!ChZ#xa)UogXc{=U_EEX(wiRLtXsih!r)=)#!-6G zqx1KR63~9cZqv{PMF!A#hU*+o29Iu2I|vuFlEWAxq5=~+`a%&T0@`%`1H44*;cwWr zR`)%=--LMfMJ%Ygf}eaH3)$ZS4nOF81bBiM+@;p==`I%lE#~y;e2&(u_UL960Y{R- z3!eGlBC6CJt(;p3s=vUy_#T3t0lJ?6snxXg4XD)wYNvPms0jFW*QiKjj;A3+Xlabk-j5=sXCnBS0;1P*>|krwXL_25(Xa z?^En9-Qd&t>%|2&(1Fgr8$d&ANQ*cRfCkt2drpB1l9O=Pz7PaWD}X8r(0u}6*R_J0 zNT4Rreo#kt7pSWSwi@J&7eWYYOYD6*e}RuBei6e4+GP@~;L-dDw2JZ=lD!8VEY9(_ zfIGgR_D>Qc_ym~_kUPMmEU#@r>k&czZshB|7P`iDS0t4tCr%OJa&%lRYdi2^} zz5V~cPd9_%ffwA9 ze^|g3Ugs%L+k_o#D=3l}JVD{s688W9|CgGOMmMDVYdyf<586Th@;0dNInNknat?XD z11LX$C(S?=8RXDd=n-@p9^F+aXI6pcG&^f|fYz)*>LbwdMaV%jKHb#MSzYU$72a2`gxJaxLiSx)na%sXIVs zmqfXC{&j4A3OoJo+i`aO7SOT)ANY0!{#Nk4=SvtEpzAd~x>*lS0maWZP`}D<_OJh- zRg)gA2ORmQ9s{4M2#s%0MhO1@|37$n254mff9o6Y5ZMv%5ZM#{){USP*3GIl0bJre z7KRP>om4|=A3$`1&X;loIj=PlJah>?$%qwF|AFSaK7f(IAMO0v8r7a&pIToxI6jJ=Hpu^A+%QIN`TOUAb&yooW4Bs5AnD|@I zgY)z=&>Zk_rCmbhG;Q zfg@K>2o||-R6x}kXq*}vhg_vMKtt4Tz_vX{G~-d$Ks}QKwT_RxWCHD_1ds1{fNyp9 z|NsB~7bi8rTlQW){qz67Ys*{y)&-!v4LUx~)7nLagTEEDamb^ab!I=TK{4KWNJD>h|c76pdk2dcHXK-Wi@@UAS9JF>B2c$X#9S!0F-I@^lasfLJ=xk~J zR?vPkpYCkXvKaxN&fE*&%BH0owEX4U5k~%2&_Xj%0~WHA9+VjDVDov1IA`T=0aYQO z>ht$$r0UQi1pk2F2WkV~t)d{L3CxF}Wd7ydmOwaC6255dM$$;612rm}?R#0CS zdHkmpv~JL&o7EoTb|(JT%ixp+>cPL5B>(IGOYo6S-K_ump;^{Ng`=bgY9_eB>S^uD zQ929c{~oaaSxS2$+d^L);$dTWxg1pMXy}4dU?Aw|iC$AFepvEcpa|Z5V+j#Af{S-3 zg7O%o{z6|5hG?(B=i@v&OHY8J0Xhk%i!upk13I|`JP8Ln*&Gzqh*lZsykgKesKiN7 zF;IFO)bQkiuy_0P+D3Ob=+1JVrC5|3_g z1@K%P_}-)-aW)3SwSOMSeQVGY-JC4my7)z=^rt`O~2aU{sJI2W0x(-x4fVu*lzOCQ* zTmLgLFo64Vph^O?h@s^z`1(dr{nB~=MMf7ZXe$mV=R(HsLG$OX;H5Ply}Ywdg1YP9 z_@^FnH9YX5hKG&ewIjm8VAHOHj*dy5JTV z#9yw4PhRZZ16qRu@eAn2GybWdYn5Is+r!4-YIp#74NCIq|Nmdi<7Q(3pZg5oPXjuQ zss+^Bgdd#5#ornZYBYdn*hN95Q0M&@sSTi-p1&1TE`#G66cPvSftEtt2QNH)@i`v6 z(qRQ-$rFg57?~LuK(o~RtxBLMg|7kv-9goSn$h#(A5eJ(x+r6nWfxJk%%gq2f4CL+0_25Yth&-swxKRhT zq6O3hdEE_ZKf)6U7k}$V@Bq~J7aO4J>=+psTw9*-x0ZwI?auozrb8vnK@~sd`kstk zY>+Lg`X~Q`?@mt_U}Jcx334WA{nLvRceoimK_?frh=P0$JJj)GEI7uXAw4+++{yso zy?E;7n?KO{1r$UbcaYM}Ziuee&p;>DT>K3SCD0{R;Q5O$o|bp``_{nqgVy1I!^a8a z3d=jCZ(sI>>*Z%*1`2#fi z*m?g2DE)v`PMiTA;`7Ld4e=$kfND9=Vox?{a1$Or-qFn}(g9jTg*aB~FX&jQE8v}N zGnf7P@A&-=WMIWZ@+4&AaPvcv7xzJZNTksRe#Cj#p!Fr5o!>y6E!e6W@F;|YM>p#V z(Ah8D1}_%${rV4Ddgu%qWCQiAK&RY*E~tlW+~uDNI-~!DZ>ODSXDEXsgHRPG$OT4;}>u?;R`i=r-MsBzM~$6e+GJ zz><+3-K<@C;2kHWO5l98j|XI2ukD&;ybLe=x3DpIbh2hZRFpgh#U$w1gUW4spBY80y=36x4VHuU(gb z^hM8tx(l6uKwZ?58qiKt@UUYibg;1ne4cFQ4UdaId|RJXa{4l!;qL&=*LwAeaCo#H z@Zk421nO>PeRl;-ZT>Ii@wI$dlj37}!js?sppWJQ@GOIGr#eWXXQwN8B@cSQL&^c4 zPTvzRjSJHqc z3wRqr+3=P}uc_)H*vjlk@sIys98p3V9|hlu1v;Mwvei{V95BO8N9x9sg^kc*FdfDV^u zJ=Xv#VGLfd9eMrV6Lb}wwMQ@SO3>+Uy`qPX{Qv)=*XH|wk8a4BBObk?d|)ZlJ+pWj zUMQUdjjTbA74hg5eGEE!tJhSZotNPSJE~L%==7OhQ}e~V3@_fCMbRaD6XZ%$X^_-K zRH;v(Q*U}rpSFR{SAj@@PXf7h2&~0>IxoYEc}U`iKv(1Rn(BZY&;}8Qp2;D~ehI9F zaT+hfi)^SAXzs8D8W<#C!WYDnV0_JECl2ns1aByk~# zxbZ?>h8N#XgZ=H(`3QP;jOh`OYwlwR%Yqz#0wN4mDtZ%iG+D3d+zdX37i%F>5#Yd$ z^5{){;L$63;?V#9(H^~~d$;g1Ko)YuzHB)Sx)KaBKY{N&5m5O8l3&4CA_AIW1ec`X zqSJ%l@6h219^DM8pi>l(&MHAP&Y|@uR6mc$!5{XZ(@ena1(?3(AB^CY%p#EWlwkWh zf56uRgZbU%5};kzFW-y(`j1rhfy{x(y9$b3|-pu*WLK#qd8!Kd8d%4j1@#h_S>6a`L1-$RRBUN_{;#uY(J~7XmMSf;Itx94C4S z#Jmp{2hFB@eg5-5Xy>V8j7R6O*q6^l!Bb|SeoQx$$H5o89?c&Zn;$T~UJaTL>d^T0 zAFLB(((dOVlfX_ra1q2r7`ov3&;OuBzn#ZkOcnhF+T`QWc|7)|rv}(?NP8LPeM`1=@f0g5&q+{ zK)|P40c1ysK4|xNiBZe#QWwx(E5xai(E7I9K>>8e5mb5U#TQm@Kx1Depc8>TjvxCA zIUHZuD(fpaQ`7z^5Ly)!vHE<4iX#nmN zL&6^v-#ZO?85lfzMT1iK820fqFfhElwh(3xNFJ7+K?jpSa^{QHPvHG)paxUt@fXYc zI6{;-PSL>RY8FQI-3V_mf(Buk4{XS0cwBqv@!7D)RDAp+;g^&Y&pZIjX2lW8?h>wFVtzhst&IFDL%kTWnp!L)Z_Ie(jpFKOTdUl@UZ@mZ_-v$S` zPjBrG571s3(6X3cj^K4#o}D(J#UKYfH2*p7-~xLhbOmSu6lnG73swVAU;YrNG0fk> z2^s_ftyk-=J>b(Fx&plK7;;uDf9q_JWN(Q*qi3hteo=@y3p_eQSG-vG;3w#Q-vyw% z-#nXtF_uV!?sx=cgXa%_{`crET>&cJU!Mk*hle~sH+Xc0GC=n&_5I=w}rG_~D*Nb5N*Z(~`!7eT}Lc}M=Jgp1Jz0F4~ka`B7d=2Uk zIPM08CMaOQeJsoS#heZHdi*WmjTOD_j2@OZiuiYc)Vy8=8}H`dCf@w$e#0-<(r2Jx z;ola{=(yLOfq|jd>uTe}zYGivr92+J?o2NH`(A+*cxWCrJPC0<_)745kihroJPx|z z_(iWCczlYbWQIp~=nl_L5fxCQrKHQT`L8bMw&N0i&*tBZCEPxc69wK~{|P!GC*X4xD!z0;!pkj|9Uq#oL>Z6 zgTnLhOVAzx&_2CJ18_5`^Z1LGe6K+l4;&H&-MR{(RPt zfdUL3jT{Ud3=I5&4g#P&?f@>|pnW-Tn+R0CmAW~6I}YAU{l8TIh1F_MW2Rc-6ThJA zix)bpfBgsDO7H@FK*}fnxD#po8V5m#xk2*32W*axtMsTxcd-Ph$66{5UM8~DqxBnT z#TRrR2UqD5uo*9BDuF8lh<>p9L9R{)bymTxLk0#01L#8Q3nlvKEBDHDJ$Av?V1h2> z-~%0fjc`xw%USz>BAv$qIzK)Zc9R3htWJ~@FktmJ?7lZp(16al0G&nLZTdV`kpVg9 zgHAV{T?t;PawHbCa0RrN6x7Rq(FzjnbiLr&c@#7QTxtoL#{o?%J}H&;=w`JmQ(yqK zl)4RG?5_Fs{{`DG@Rd}cb<5qb4G3KPt)NAx;F%3G@GJwXZ|mDqIgf7E|D_=9??EFu zH8sEfzuu2XUx+yfuF_hM-qH&my|pJ^n1L1|c9)*;=qwfh#|5iL>$lQikM7b79-ZJw zVh5cn@U7IqqmdhwK+vYCz$?L;k7&SF)PvFvB)&icX(wKN`v3YEw0+Te|HTdvf3Zh5 zYdFH4SE@lLPw}^aZVW+kBYz8M#okNMAcRLZt2$Uccwy)gsCv-B($M)PkLDj-{4Jn~ z)|aP2(@GbGUc&dYJq53Z@&FH^p^Qn~0H3V`_TB$dA&_fd=^&ra13JGDwB#JLB}cmC zKIq(pTOOU?L4m~II>G$qe~;F0{4MPuMmHP$L>PAd))MoV|GynkfZTWFaqtCy^MiWO zl|}rm;44&`j|=#8>-%)4bNF=Tp77~Ry#S8L1VluF(t%kCJR&z&{rdmn-*-ehfNgK$ zD$(}nX5~Ss?5qL>WyvL^U@ScfEC0Z$Eees^#67xMFBF4p0SBvZ)vy1rXMon(AkrDw z{51$Qnqc$!Tk=4&4hUuZt+Aji2}@FsL6=8#ho120HoXu99$0*lumF@5Ko?Y+ZiNc@ zf`yO{M=!Mj?Mp|bBaiMd0nmj_r92+pbqX&}fJekZXLLjtgBw99pZP(@l^Py+QN;T3 z|BJfuKvV4C8x}yz z)(^h02W`CC2NwUv558E@15~2Bf&!AiWin_S5j3M_w8s zwZC7SmICd$KIYMR7!)30>zV)m|NpuJ;vUb7e?Xfdzu)rY_qYN&-K6uHN9T2Z@MJuw zsrdcA2fxQ}kIsLfS@=p&Pp$Kp;Ykn9L!iYHVrdgRF23`)_@enBqetf_h-k?haG5U# zG2i3jI}o?zJ9IvD1!IY%hvf(UW@d2EeF6;!Yaa6Gys(0?^ts2y7q9O@^=W?KZ|w(l zmo7i^===^}k?-Ka_<_G;8v_Fa=wv)IM(Fqhynhe&!hO(Hu>2msK?A>?|4I&lCrKZ8 ze81(v?|H}r$pfO~yB}1ogZ$ii%mbVIUj$1chxb&vtG-zH29{;fV5Okjg{A~QspixuM!lzPKP(f9q1v;y#`6;t!^IstFoARX-;v zb+&@e4FIL98=!k$I`4ya-W++My%Zrg0W<$$HgC@R#xc- z&|x_OpdP44C-~6&*w~jj^MC#aw-3Rq9l_)H%|H10Te(4@*A44ugVG1s%qa&zJ5E~; zlt_Y7A%6?#Mrx1de~kQ~{9LLBk_21wLS+6=&|C|Div`%AVhND2#EZZ4pu&nEVbDdD zpaU-Ji_&1IoE20s{J;7|eYjsfNG z9bi@bQxCj;JmJM^80V!E`266`?=NP+g+Lp4AmRGL`5XA|Aa8+}pjkxt{P7FzZ=fpV z{Yj+DM?g0m27wFK8y?M%|9BjHVehGV)RXhB=fShgpm;p{5_DTKxSa{@?|_#gIEFcb zdzOx&kc|ZJ9#DiwC+N76&*xpR053;{beJJ$>vbLkbu*!f$3fmTX^78`y9G2o{W@wYx?0_~y&uQqqT z0_u~2P8;~oSmNx_T)Tmhzl9BSh+((u2GF)l(AnNA*h@J<>-1V1LHWPicLnHzG;ntl zd=3M6&2HQeP^f_n`p3xM(gv!1n*TBLw|oO_q6D8wWCLL_^S5kbWnh2??~GC{(7KD( zGLXrjOPg~+4A=}W7k_IkBSI}~zWFj}_t0^V=Gp~};H999{4MgFpd|>$8TngF!E3aR zgO^hN=ZBun;<^B`Llk-<59mTY4^Wh>_zs?qY^a^VP{IYyMJ-oB&V=|8vN#wTC9wxy zRDI`W*bj-7V=wkHfI2UrZKuyYI%5xjRe{3g>IXb- zSGvHb^ZyH$J>cj8FVF&&r=a+40j=9P=DLC50(tE4%QW!n0PuV*D0RkgFfhPVr#2`rf&JwO@*#@9a-sg( z{uPo;Uvh)$La;kPJ?aTd!RKVP6oQ-s&Sq)wY^K8o+8ho#RqHLtSg-||YzzzywHp{p z)j__SdH}SxX38Os3yz&f_*)Y|?m$YyC2a8QcH;slY>s+1|7R?5faK>h;H6GS8Tnf| zAuMppeaqka5?rFahnFRwYzEG6FFt(%rP`w&-L4aSIyF2&l}^iRuzUY8mv};wu`MWS z!EU|50&y#Us}u`pM+__(`~f+$^FEUKu*jeE1r$h!!SP?>1TpU(6G$&3f2$ozT2cTR z((Sqc)S!d!v4dwXPpCoNt{ono5@?IFSAxU!NCddb1FyP)%&S2B^ACKyKQ{WRP_@^A;IMfk3gTM93Z%`tFb^iHVe}Utvb^#-QOF7tmr8^**kn=BS zr2UysckKeuj^!j!T7fKLzn6f#? zA>jf`o9DpkiygG`r1dsGEHAZyx-no+w77#RF_4)pmqBp~OKjj$3zoZYf;UluvloBs zT+rGeq%6`3Dtf@nd%*2NqzrnHnSmi~f=74kf|r5dQWhLPVE4AZ1g&TT$1rFT6OtM^ zKn?)aJ|K_qw}MW00ENb}pRfo3>j#C%%T3_n5$KUmT>PyUz>X>f<(C(?w?WD@kh_q2 z-2AO<;8k7kK?VBuZJ@|S$?C13jk2J^2eOJDw7(8=)1)RO!Wj8mKyxM@ps;G?1=$C3 zDtN$?zg7G{Xk`;9-A_PX2KWV(o;PI`2@WjqMIgSNe_tm32HhXk4b66r;3nUTo}b{%2g-Oae}FErL4-;iC~mu5CqPU& z13pQ@0#XiyfLgxbG9VY^MoEd&o}HkBlo=ObR6&Nr%dd~1!~`l6!EvDZ6?Fc?zZd@@$#XBrK}hMQ^#sTZYd~czVz3mt zo&enE0Z-OK#t%Vj1CV<)kTFEY5^d15pS}m`j#w^GQy6V%6x7c8&JG%%FTMC8OB~b$ z4VC~E0hJ!z(HyW*Sz&-ocUeGCVpe5To5Ix^C z{`V(6ERU7Qdvt!<0h%O$bbnvjduU$p;5_Vc@HF_U;nO~y;OpIQymau*a^@R<3uynQXQM9zXb^q}D7kwcca;FspfMWI z>`aLa=o$qH(8>=X&+bytcs^qZ2dJG5G9NUZCvoiOfABpXp53*er1OIP7^t>5=Fxfo zh0orf|M!8W%s_WhAZ_G+Sv&{iNrvV}0{pG!;5zCDONk=5Ap@?dUdDpfPEP>2U%;dD z-s?k<^6wMBfSC58fG4Our&V!&){)<07F8=0kxeH1*tta_g zu7DWevgH++^^*~@wGPzcrbfvoons_(4K@BC7)k`uiKCSB@vJcP@BS|^Zbiwu!HV{ zj?WGF{OUirw|@M^RwK}Y#1Iv@@)w{P7JaaS=boKMU#NhY;FT$zMxeRqV=vc&-20hd z?iaZH4EOB(5508Pr#E*3biHNjhG380*aaTVZz7OORM1M%pr0@PdvxA^;q~(cXw}dQ zr=KtWdv=?DKgQqyI_Cg1f9`Sc9lvL3?cr&d}=X+PflL4-V2X=v0^}X=^ z4$@{884uG4%5M;jZZM6mh9_MO4}i4?fDWewYZUqpvLAHYGpOrY@&V+E_b=xB0g2v! zG3C#T|KKwLK$7gAUO+QVZw0%@!S~EBw!Q~N>*0tfkKStV*$fU045i=;I6w}C*avo> zV~9s@X$RQq7Y$!Qc07M!0ky;6~@pz>@E{{2`X*D^EU1hp55gF zFJFTq=-hXd(iW*c15I3l#?71GNHjlVEVTd+>#};Z{s+%L?u!H^F@qO&3BUfo=)4OW zF_eepH`u;L{?=CTa%u3~+3iv>56~Xd`;aNywr5~1pn9%b*rO9#7;=@~23vC#JgIgN zHp+YK+cAeyb&u{~fp13~O0__%_dGZ+l&nWKa4Wb)4>IrIEB@w3?B9+!lw5<%s${)-!OIO$8xP+>r4RC@?F@+V4u%KiEu#W6K;mrlc4_h=oUxB4}U9YX%=Y8fWK7@6mX!qO<52FG`9(h zF#cB1eR!ZqbMgQ!F+Ac>>gmz#Cg8z&fxiWGUhfNbP)D@$=u6Ofsc?JX>81rV7XK17 ze-CPRK;rZDPMA9IOey>8O)rGLzW5KhpAH;H;PWJ4_kwiZ_h^2j;M1)u8m@poTf3MT z7?2``8+5@8sKS0>2(_k|3B36nlE1(seW0!_Xh^E195nueWaBwdpA|KUOamR9*L*|) zeCGS}U7%av;Vq;6lRs| z$Ce_{bf7ydeqg#-_*)l%P9cPbj|fCp3uwDIyidx)-@1hrGUC)C3>trzX8;ca^!G6{ zFo0Vxkck72*4q`e;5Jap8c3ze!ryWUWIDKwpuq|n76xtnT?b-;+X-@@ai?z4tHBBk zKHWwyn;94&_Yi@?4}35a*rJxtpdoCC6CL-0nl&%7qaogl0@see8TtD`8{a@4Klm5a zEUHnF0JV{(>;~nl`=F|AB~%=A-S3N<-9P`od;^}f0Eeq@>l6N#=gbTYzTG7%96r6N z7d(1nPk3~?UVyZS(H)E2mKSORwdE5)Ej>_B zlp?j*kH2U=`RTuBXDqmrAmGt@yM!AY-|t`KfFz*pLA0Jn4Je43k0|(b!uB=B9-iRQ z{GXY>bsDH+25K;RbpC*((lyK|sq`ER0|R*5!;5Y;NO&=`Fo5qz6o6}~hic((0UgHf zar_v#+KdLPFA)MoM5`_fbUs}KtlLFJ0CeQp3Gm3?4@Ul0KFEHw7its0Be$(@LGcSZ zeza8|6#LyZD#&f&4=ta;3za-{;R}^KJCB0aD!pU`rR?Tv0Y?5-6>w)CbcAUKc+}?) z3x7))$a-*E0@bwO@%q+6&}bw$Eo}k0r<=7i5LD?|K-#THP4G&nwI4C9?Si*!!QNf- z7nEh#L3J3sZ`@KU`Vuq+$^u@`&d=X!0~)u1k5_`44;rAo4V}l)qHizARgjDg&(QDI zg1b7Pda%11TE2kJg>e9_$AT34p!-)LF?Ue~9CIzopx$(Mv;ZuFXGTE8CxZINI=?|f znV|CuYE(e&_7}531CgNfXFNLZfl`0>4$wHjtL8`GLl;Y8K;uZDg-UNrUBJs-z{313 z$}FHUeEwE5kY%7UR~N+S7JzIxX8|7-l{R|Nl<_$748Xpae9~I{`HCsSk-{Ncrs1E$SHvDRcP2;~n7HG-?|k%9#k*D%-^~Sq`L{+ux9|36Rjsf6>>K#2PC1roB{R)qFzh@1sT}9+u*?t zupzG@OpwtJKx50U;IU-}P(Cgx@@W45pTA`yXfS0pRJ>dCqz}Y>`JnMTP+vY7(o5q8 zyX*%)f6FD%-bzqJfQr3UN|5C624wnSuqiGK46cT6UxKdH0@=gg3OX_Yk}p6-6MyS6 zPz4XlozS5v(EhXEpncvTGwMMR3md=o=oSt1hPdZGD11G-MKk>%{PQ69z^W52{?Q|1Uwq^x*E{>tFx>zuxN6&06UTE>~WHCXGG1S)IHf z+*#m3!9Oe|wUC}LXzl@2GL^lITR4-^w!=syZ4peU_#AIKnUbkQW|Gx-${Q`9R_)e$+M!)|5hgSNawD*!5 z6kL;07i=Mo2O+K4Qvlzb(p`^!WZnzDZ$JNo8cMBOL4&j1#T=l@7qplTR1rfeV9+Sq zi?9pu3Yhx~WH8OA^Sck~VA{kwPz8(_Oam{c^oNh2vHG??DaEn=5js4j09&_)SkDD< z#EYW`KmC6VIZp!IN8SqJF9EfGLE~;#;Bhw>P+k=Wjk|eybc_D>f}~y0P%=new6;{v)+iLHBonVrJ?g zP|FiE$;aPf0iF^-9K-@Tmk?Z?K+YL71TSbnSfU6X8al>aDh)c>LJU4y&%)mVx&Z@P z9yR~e=Wh{%X!Y%U2VGFh-(n4JoHO#bIDyV;0G&bsxg6>n=*lELxO$I^zkNENdtUtK zaq)*w=O+*FLbq$6u^v!Uo|PSR5#%q>%COFB9{e8P!E*-&V9}4DlhHU|Ha}zpp8#Dd z1s>l5uXlUZe2~$z^Mfbn1;^$Gj3uu@Bao${FnJIUzTOQqOef`G`H8=|2vpx|Ui0ky z;L&-_r}Gf#D9C3X7hk=;1FolF1tklA>ke?00;!Kc?S~z;pw7;H&;slgFILxrmMFXj zaTdIo2j+YSab~=jSPNd79lGKZe`M$k_@I;l=rrd~{E@y3()cwFed3Qh2wF^i$iwnb zi5F-+-@z9)%@5cir-7GMAO=r8S}&Dqq6|;)xAsGtoX9uD!TSv;M{uWMD10e2>F0mY z{2g=#7<6VjXh2({_T*QqBGq<<%!no zdQkcTC}=%8k2OD&_h|md#osCk>JT1v;BVal?o|1xfW~Y1TW5iJ zt^yvMC-_@HCkP>e;{R(zP=F_`(=tDJ7gSmvy`={{dTV$1bf)frtmioe zDxy710R-;MkA=O=$>&cVavP1@?=CJ)i!A?<(w!0C$umKpiEJ z0`Pr~t}9;H!xTVvIlQz3$1bEF*PYMt64cX$rYn#Q{Hlggg(x5$Df=l+4)Ye?f+ z{H@CWU^9!7V5Q&qTLeIJov7m_e?k3%V-BTBut6?QPuO_LBXAM~r;dxD&D@=bUfzW) zYJuhN7ohccFMYvI1&t4jGCG0d?d1{hcsFdk1nO=N=y=LZI3Kj~oc(1SxXf^1@HqIA zzxg5iOGg-A^Amq-IjAvl`5AcP;t;5?3yyD(ZqbL%kZ`O)4sVZc(N0H*cnWCz+M`?a zCp5f6K+)fM3lu)!%HT6-HC+qj#GQ{moriol55g-0S$O*wwEmfd`oOdE3it>mP@Pb$ zB3l;seD} zD`@-!Jf#mhxBuXCI}gU6{GE_FZr2qrLT|qU-9NelG|wLo($k5aEQqV!y zryhVt)xW=Jx&<1N2ao8K-vUi+fJ@IilCS^2+zV>Ff)2z0ErAMM@gf|gw7VAM`xo9| zwcu05H%NlEWPuhY9C_&l&5yA84ba9%$Yv&8P^+lK-=p($^J8X@=HE>GEziMC`Pd)3 zKu2Pqe5ug@8kU3PZ;$S93DB6iN9RY!ogitC?s5S~a5MSj%lL1g&N(E#wtg$wgIJec z0$LiuQep_|oq+a9xe54myGg)I02x^>05SI9$(IsfW1#kRmcDqQehRd5qx1!Ma_$p< z4SC=fHn}s zzAUW+MHy(^rS*2n8TbGv7i>q!4;KEGK#*z8Kln@6cyxOUcr=6N822&1{0|vmTMVk4 zJO4N~KVkQ1{a?Zf8W3oi2O4$;4F-F3*6w(r0J>YVyLJbt*b@P{17u9MGpL^9Z*>Nl z4yrssdOW&C4?BRmWm2!xAngyxaHl^r=p;RqaS`xIi{M074q7U2;n8{1aVNxQ;8X_j z-`CHelm_x2czh7lzW3-Boo)@X!&$%tU*Das^zXV-<1v&l)yw4uoJ~|Cv7657$T>xiN(PmqapQT=cCMiJePWVs&KluDE zP=+f}2M@4;<19xIJlC|N^*~7qING~G!4=N|-hu|n+@PH3EaB1oi@B5yJb`o{#n+{o zJ|I2KM=W6R65|*f`!e|xC`K4yM!Y@^jc0J0fMoF3+d=JRQAwzaK?kIHbc>#{f_T6S zRC0EUTH8Rl)}Y?szS}6hKg4|C2anFDu&ds{gNdx5sX!;B0l6sH?YXWVy}VZgctIQX z7pg!v?7whL00l!ScsL~U59pRSczzX!3<2_$ZhCRw>)n4)Q2|P4@X@@|^&Y*xKfvRH z`#$nAFub^VlA8gf3S92N^EYUZJ!peHXtuHnv{nYPTn<#Kfv3JfLs|Fv!9!WC;O&Uu zZC5WqgGwvdOEi#tVjK;*Pko;vFQ|8SJoaV!Np9FZ?4T_u_dQ_ami#609?id4O3#9i z767%ALHVr27_LoJirH~gUUh3xf-!A z9YN!B(H@=09b;l&s(_7w?6-9ccZAH9UjvnDusN^hHxiD`&lyW~!SMqb?EME$v#iI> z!F%DPm7xa$yhu9-yGPQa^B;JZ_lv`ez!Mta#)0dJ7cSs?A&x?O^d%9#oi7}lAFxA4 zcC$P??>mBSh=VMk03Auy5)3Mkz(?{&f){x*^0$KSQ3W64xEv(c&FTS8c@{50gE6r7 z3Fs6nR`3cg(1~4$@e#<8U7&Gi*cwFeA?-i-OPf7GOBmmS?0>llelD|X%m32Npf%>- zjwqC@M?NnVKCIUYYLdYHdwC&>e?vek20P*Y-3rg&pkdy4P-)U#jWoFE1KL;6kOM2o zj)T@!N&0lV9`J2FP$~c}R9p|dc)uRh;ix^}(Z~;4kK=LN9X$N#`2QMsxz2y+0u*rg zfy-}j_<1ryro_Per@-Oo4z{0_!xEHLEx`33Qm5xv|1Mhv01?>fbFB#_NZ%qfURe_vv^+O;`;6oW8 z+xMVz9H3Y^0&adgfG&h`>HPd+>s`>YvE#3oG@tr!`0d3pVJ-%632XQbwEtQdbXfza zd51yffrinc^;qZimm9YIM=?i1m<#M4(3m8sJkm0u%`-Qj| zu$<=vvJZ6Lq9f?MMc4r7Z;$3TC_BYZ7#;xakS#R@weKDIryd0@Oq_DSk>e;oxE<%w z&Dw4T-$>13`|JM;|6QQE0bGwcLQkS^0e6EzJ4Z@An*TAD1fa_xNI{D_^uWd*o5 z3z{Yd-4g!7@i3^B9=ZcmWP=wp{{Wv0`oFXsH1x&_x=%ULqqFn?Xbl@|A^kp3%kIVW zL!c!lhhIm6?z6i8qGAbTenK8x%%F_JO$C+Q%||rA-8MvWLY$9)XzG?u234^=;Nw3I zdp7@JE>Q1H;( zfgI$7%=;Chy zmGz+WUy=3(r9wAQl^x(_aO{L_`hE%OgG0-y7v75?zP}7wA^=|9c=9i375abI&adFh zEui`L;7fjw&Qr~g*ul5tAm$?=<54eVz{`a}^*amn!b~py7Vz~~4?x2$@cD1o&VMf- zgZt8u^2n$2@k@}^FN80GCyz{w;aO^pi$5% zuKPi~0sagEyeW)3G-#$>rKK@z(9^Q!kM5Sjy z7Q8tQ%5uj+tNu%r!Rt|5LA!5SZkGmvH(j;-22Xu_dm%gvtPol*xwgD5H2^m(!3}>& zk8V>XNyve(FFe7P9)2wWsn=oct!(=F_tAuj$_eJ0S&BR{~qyY}(7faaSZ zn*$)1sD6K8KOd48#6e?_kT~XV1>O1vioX_3Q2W8Nn;mr4D(r|5F8)>__>eH@+6B*U zF^|rR(4~(2tzSVS!Ju*=1ngpW0kB`p!JIHqG2q#Gg}>$eU(j?VD8YcvXWe-P6qd(c z9tVv_`gHyW#Vvn}Hz<*UI_uzZ2gn$M%D?}h(FXQXNzf332x6@ue+wtH9Dx@G;2okq zouvm}WbOeK21h|1k>;n2FF&H>PjJ&6e6c7b{6J|;V;(qIT0jjj-_Ac^C7^K)P^e6C z-T(3pQhtW6(S#N;pz&w$`puW1%R)fu>Ba52um1Z&!WOC@w4)ldwi;|MWHZaGzyJRq zbKS?_()s#jF{t?nFF&B;-7i6BK7q`G*|!Ah-(#-(8Ndd;3|c4IB0YGqAa4pOksgAEI}r)1 zWjV;;GoZE;bbi&d^Sfghe17#xuutb3si*KkmXOe!Dm&8w{Er0?qoxgL&YK4MRZIbo(y&c95OF z1+-oiw6T+gzeNW$i`-nhK!m@=5Hthsx`2_tl^wi!cmWT8i!V5aMCWONxZ?(4BmhTDu+Pp+K?AkgF2s}%8b8N1U6B~4Vo4~uG#ooe}Ka6m_wJxkNYF5*CwLm+Cun(7=Q|JZ z9wX2V_j5rrww=d4!F!j$!&h*VJ-}{c{K4N@@%#V(7v1|o(_Y73W`hR^7(BW~4=O|A zYYTY&Vz=l`H3)wRl;5cW;ZFhaA=`ezhZKUx0l;IeFOmE4=RG>NR)Ei(a&7SG^zHEI z1fTmdw{M3>cjyGr9B;SpjF+HoQlRr;d^$m!IDKclc(@NV=jc1b z2eh-b+qc8B^Y}~9rCc8Ht4Kgo(2PI%JHYGrdP^7>Urq%L0U*gA^I-f}vC^lvhJg`$ zbj6D^M?m{^j(c?aHoz?M=q&AcQL+!Tx26_k$%_n-#o)B?;_P1(H#C6U0GaQgYzFJ_^S6NG9el9UR8SrPugrV^>Y1a?;kARz?DiG_&8s-> z1O*Rl76o*+95kqs!IPp4p#6v?MxaHL{4E;bnhm_q0CW^9cx|{2*euapXr2L$34rr~ zN4Mxgs2FG~F}y$a;`AEO)+dbuu;&#UscO#yib zr8U)Z3Dakgct(2Q;<;DfhcYU&=%BEok2#!ade&{{KfT+5$KI_}?G!0G;_1 z2U_adiQ~+tqu_r11kibyh~qF1zqAF{7_rX)X%h%{kMkUOar_!+Kpn2B z$}0DH*^KGc{_9C|No#%q`-T_J-TaGyih*@YIB2j4}p(8I>6t06`Z6? zH+XiIfcDuP1B-v-Z+#24;qgn*ToAaN2Alc(MJxF95K!+6RCA|;Cj*ax*M_#l{Qv(S zv^)M1SS$FdJazw{|52_T3i=N!0J0@~dTS57n0Xv@PIfW}_^Q9$13taE;FXGDs`3Jf*a53m=scz7!#^*lWxyYRo%>YoDQ6b>jc?7g>6EvUqA2go_?$^zk{OP}M zXO4;lIN0FlIe^Bc8z+DI@7c(s0-9=k*#pTG8$gG3gGLAV!S^)5HlZEx=#AY0nnZvs zhXD7Ig1~MA4==NW-3D?tXbn8F+j{*$ZbPiyfOJnm$1R|)-^hTj-*}k-?jC{0c@f<| z@DBKw!k}@Q3E=uQ3sS#=j_U+(OsE2FOyF+;r52BFUO^eqdOO3HpsB+N9-YTPew{k$ z)Bl&!hyn3d5WfQy3y}33r67JLnE(7m28hE3u9!gQQ*c7f`vS`Uh6j8tzw%Ex@UkE5 zP>}pV35b25BVatbd1pyNxJSVu%F8Vc;col)A3kr?{)3a@Mbj?We$ zT@Eh{54_m13_O{)g0aNWN~k>a5( z0v>!VRRAs3I(hg-GQkOC)ZNQ!z2?$Eq{@z)h}B<)eq z&WBRaECysz2k3rR&}7qnSJ3Fy;T4Rf5gy$PpqYQr^#?Dd6c`ZG;~w1>FRuGQQY|<~ z9R&~Jye$p&?2J(XuLFk6H^H(FWR4bgNvlWe?aI}l{CfB>Xxs+8Ja7k?dHD5YQ2!Fr z>t&tr>Hq7!i1kEY`#=4EJr5+`%?w^z0y-a>3wm0$Be?Q_jCX(*QNx#ugGRGnvVzvQ z!N)J*bC02*Gg?D}J3$*SB0M^4XLR~bKpPkIu>4-^?b-S7#qv#{xeCBzs zxCeCby-#oH3ZLHE8K6ZC;9H|VfyQ`M=7VkpEj0iQ7Jybpf$tncTkZc9((Xb&`)z_p zcjyd{p$23G{T-@AVnH!Swkje&mzz zUxNA}Fnz7J`8%CJwGX1#dGWW0<$eAR&LmPj)~*4+5lgVNM7=pq~b7SI_R zpxI;So|y?CV?gy=djm+F>k5zF(hZ;sBhx{%MBTM39KnGCwynE#!;1x=eSQ_7VygKN zqerjn2GC$WDB3zhXMpC4IuChtx^}$CoC}IN{+3IiAZ`Yq1!~R6z|eZT#LS~Rc7~7T z>tdA`DH}kcC-7PT=C9_%jGmTvON9BiF+-BkTTjco{H-h?>!A0qz0fZQwF62!K%194 zU3Y-44B4~q|NoZ?U`4Qv8>L=|{s!0wt)RoTKzlR&Kk_rY&`S9E|K%po_*3USNHA&C zfxHh3rjmo;AOfF2zY26l>5B|-FuHDdc?WbK_ig@G(0C&(k%7_{cxCa6h3g=laL{5G zkZqpt_!(a8iU0ZkrORLNya;0n?~6P8L3SN~2^#M8Xfy|%!Sv$9T9C%$FQ=n;gTEyM zG>jkp@Bja9*9oBUm>;0<|9JDo{}*LjUVx4qa$x}9j{q9lht4sAmyQU$XgkZo;PIUq zWV%mxu|P?rPj@nC8D~kPcdv;FXdJ)gHUnt#=_Pm>1*pdR3>wh^_ie%BKcFFP=+;`$ zy&x;tOI(r99D=X6_3XUk*?dHzbh$^b?E@XqO<~CrFT{;m7(heT5Eqp6gKU4@32qO8 z*0*hguWw^1UG<4yz(D}CP&bWV?_d>E$xPSQw~)pJ$Ubnk2Y04GTiW>L89=h&69GKB zS#O9cFnDx=F5BA|2wQpfW;y7}RnUFKw#CxC3?7}OH(qoYu`qaam)>{@I`bHo-oTfd zfR@8~Sf1c-0XG9X4|*JYY44$V3N+3GS{=-J%H!ZE@DWUhUPgi%iruVJguzSQ*kpO3 z$G%rD|A1Vjg6d;%nHmDEQ3YQ7JdG3?$pR%lpzAV0;o#%dYoY*N76m$4+VB$SY(UV( z!!Oc7qe@6I02+UWEq}BF1q*29ALN`%a6jUJMClffUfTq1UWOO54MAc5%%j&?0-6F! z=71~&tzZWACtynpSxUE|2mMlyZq_YAVE?Jf!2CCR87M#*JW#_6bU`F2lyHXE>*bL8 z-J{p`wInzm9(Z)RzIgG+02~(&Ji1+9yyOH`MaaWdko(!d;Ril%1GJ42bU@Du&~Y2c zwb2caZq`IlRCLyYMu|K+OF`!y_;ee*cs&i&1O_)V7wiJHnnAZ4fSQ@eXC0`yLMm+7 zxnQzXeqFd365rXny_&e6bklY_lI82Ty=A)`6Fx^IZ^W0L6W!Twn`cMuE;MZ(0v) z|ANy;2ou@H&u^Jxm z09}*~J`fCaacT1}7XFswpbl*3A5X}=9;Kq7L+}OQD~9;^TR{5Qj$HC?`erZ9IiFff27uv<4VGcbU!umUxs_SS$%PXalR5_EPq$UOcQ zAMgpeh)u71K+8#*|Ech|f;O;%`iK0j$C)5Tw;Tc=iUIAI^Ygc6gU%i4{QFu05r3_> z`CAz{85kTv$44-rjT}6JoE77NI1vQ03>Q4#4Nv*4pfi&|jt3oc3K{?h_2psV3!gvd z<8S>5p1`V;K+ZK!p-T|>TVH{ODO&&YgAX-^FGXPCZ#e`}!pPrR4%$cyzO`i?sOkle z=k8@@U;sr@y#VMCeo(bL2{d8WT_yky@s>XDJnbZ%u}s#{+73&3gzLl>p5WL&{H|ZrzQ1pb7u~ zpyM-M=!$}8{9B(ggBnzjd1a4Y*EK$%{+;U#P-^UD)tCs*0v?^N6JGELeEi?-yT-Hg zIA|hs9UJHnl~M+fU5`XSMuG0@37z55T{{6Z-FuJ!7T%pgr6 zcE~O79-#P9W@11bE5*X!A`DT&$lv-Nbo>xFe*S|d0KxI|l@UFD9{>6O-xt*Ny#+q; z_WO$&pp%t5k3k#;T5seDPS6{{F$X$r{4Z!rHn?a34W4-P#%}QGEZqTa$=(MY*7;)D z1W+XcKHENe3#bwSwTqvFntF(i-;0NKph~0wa$wFecF;J=H_$i=c>8Qf6OIFOtU(gc z19M*9fv@*KUUUH39}CW>EfJulW?;vE0ndMf_R%_n8X}-TX*C0-v2J!puumWJ~*h3G4i*9 zmM4NzEVSgwg`~R{S&+lP=6-)MQ|QBU2-*({ zbZ}9n0iL)2&)*^sp0|g(grC2aA0*NF_vKme+%CAh1q~ANw>|@vX`pR>FKX^VatLVh z`sGXTX|+h|mciA9K-D>e+RUJZy3lqXy!_zeZ@CTX1b~~oplc<;yCzydi<~@~f3Whm zeghv%{k`+viy2?Q^WC7LZ3RqA>pW279JC`4l21K)MTI}{f|kXAZ<7RHBk9o@I^%`3 z@h@=J_38W$TB!lquM;{0l#4+9DWA^o2n{dZ8G(i)j=gL{N*AEW`~Jd25FB}}IiQTt zE4ut6FGK6?(t{qotX93C-0nI7R1A1@y3Tm14bcqg|AVUp(6PplJh1jRcr7K!D^^Sl z42G9L1xKRt1Up(Z7t_cSXQKp!G{QuGx5x$_($EWjqN9c?fD+PXmHkgCF(DMEF z|No$Z0CbxLD8GS{$$$RVy`U`J8wxI#dTnQbOmF7?2x_HtyRHFw{TL|ef)^Fv{P`br zR66L+1#kj63Ol(z6ueLn`Q-Z21CZs#7Sq5d*T0%VIY0Iw%dRI{0|O_7k9ak!XUxy<=px*W zRTqWECG#eux?}mccq%zVK;;Y%>3{l)cyyZS_m4i zbpV~3#plso&tZ7-<>9ZOGyytSiKWEKqxru`i3_OgE0uF-_|H?~;nB^S$*RC$c+#WW z;^lO(T5$UD=w>Yh+0$+DdKYM14Rn4ED`@`5;`J&h-;x=^p9STwWP$LzKzxvUTL0JC z`hXS!T>$M1koD*e<7ocRRH_N?kNSX?X&-;70=CkDVHc=IL6+eD3fe>gT80N+ngQC6 zapNH;1FSv)nGbFggZp#AoxfZE*Gq#hL z#apJ2|631~dir*os5Jiu-Q2JTfYbI}g8}1PUjxd5+D0nM&@07J-6JE;qdW(ipu13*JBC0ct0K2Tw{Az&*G${t(u~ z_xKq;@eA+@-{EIS&&Kdp#e~-bamJ=w3n49!Wp&a+0f{F+ikadDem_xt_n+D$EHw z))I8w$tq#c<;f2{dQD%w0u2;^F4rsjFAp7Fk(mY>esEv_&oQ;=fg0M)pcD0cAS@C7 zmS5m%1GH*F0K@{%5`P2LKi#b6kemUEKcse>rYR`;BS7so(2zgqBty`FCyOdT(_4^} zt$jM5fzCaF9&HWo;DXXtf5prH&~yZz4>tl8pRj{*xcFPbL40t7;wZ@9pyIS83tTe( z;Nx!vjpBkPPLQI@6I2B7w}SRzfSbagMO28cN{JSz1mJJ&fEdA5A_Z=vfM?n~nn4|u z7SLE7cw7yfVnO40(a!Hc3q)TBLfR#uweg_+aUzgH;3a5M3KSmT!^~bjgEakIKn-x# zKt^!6@Denq4j<138OhNNYGHtm=Z1$wYdI(+T)<~GGV-@R12y=-?Xx>q!0odZ&@F*J z-Pr;@orv?69)f3QkFxWFZeDo{zIny5^BR8($k(9wElmQAOtvP1yxYy11c^MPh$}D# zHMqf(gRU*#_*()%3ZZ)sp_>kUI-k7+oeK|lzehJ~;9qcJdI`Gf06ZVa-x3T@JrUpz zG${2LfLP$vlLRuioAoCo5x%SfWpY?~2Hw)p0y>-YWhZEU4^f%0K+Yux&E<%{0|nS& zke^EGKr@j1Eui@Z$Sfr2#t6_XB!BCAPi3p#-sRxU&N63Bc|84ev?=4gHnJ^z{yG!hIt zoB}#73@euSOP_%X9Z*S9Y6U88Ko{x$FO>)T_l537PjuY*dU(!-FW2zx<=5OZnU>w}081-TdGKJc6bXwSSy=XcN=69tsfTgV=R zR?t2du#+IW$zOm9&2Cf8r=WI@;iVS=U7+1Yhaod}Z^0+*GWhhCUVzP6cyz{I@ag;r zzBKKHau>K$;Mx3#vBVUTzcfKP`r8q3hvEr;E9hEspU#h9-QX**KsOwB#$I^wq7!Tn zWI4uc(7uPmjQo&;hd{Hh?_W&Ug|EkG1(moSy}l+4}d2CblK z0BqXx7d?JpXMn<@Wb(_;@bbaO@-?Ie1D$FCz6TmS~Lmjm-uu( z+s_IbW-m^LUPJ-T%bNE*JCArIe|u506149EvSA%`N5PyZ1RpdX>EjFPL>vLlF}Ivx z09~WV-wNs+LFWg2wGk-^d4;haD zEr4rf1D)u73gTW^ImN}_a^v6s|F0Lkm^mFhSprcHEl)0hrbRlRg0{wYUiWBzBLO)` z9duvvCw>7h&;;UvG=BYq<>jEQwC!5p-9&=EFIsPxs=fg269H{A0-XnRz@zgpSRv@H zaLAGrs5{JFfUZeGS66lev|82cZWcmqC4-u$j$ro|MgaI_=1iV z178KtuW>MqKb-Z^C4L6@w1X;WWcJ`Io90LC&99i7e=(Mod4LlZxWx?`Wd^N2^5`sm z@QGj0_r;4=$DjW_x2%ZxhjzmU7aiMl}@+@AsG-w?-6(7BwyUvN!$@!zHM5x5Ts z-ui9A{9@Z(P=n_X?2u+J*kmOqX!-b^NzPXx>;?$$uoHLny&lL18w*# zcYzxIsPm4Xl^1yCXkV{}mN$?L-ucuq+^5&J<{mGDW0+5`={inc2FFmJ&hL;yNa96+ z3LC>d4p2$mYkTu9sPDnL_MQU63k#4q7eu`19xuZSb&voLL?GuLSYZuFA-@V6XvEK> zlQs1osO`+k_8rt1GI+5~>-B$+ZrS}1PjS?PLg%&~Ib_1UArVW`4By{uo^!LH7o0xGDFy)cC+fNB!GwjFHb6?R^R7gDHFyXS(X_JO4S z+kw3c)73B)Eami*hvCH&RH>ycU?~w1UWOMZQKh;*fTiUA@-Vzu2ay5?uTwEtya{B{ zG$ipXhDuna7o z_l<|)MJSTEWjR<};1>_W3tJ@dhoxX~RghDTg2h?uK7%r=wMVb1{#wui3V|0kny>%E z;`>7_SOX&)s029r?CT6zK#4N|V>kGtfD7>MP|*1r&?VkN9*svp9!I3$!!OQs zqjU%-fEG|M07X#eFOOc+wmj(E2x#EOu;BxA{WoOHj~CS7>U;|7Fmk*&BKi6MKF}#1 z;Bg#};|>C#_BQB{-s27uVCHcL1rYthN*6S|>ns6sDtJ634UziOAm<^3fJaX{zrXnR zA2e8c-={l)?)>Osd5^zE3N-fE`N!4pfUDtK{%y=Yz157( zFAQuv%B4MeMQic}8Thvy@JME9@?gAR_x}O3-L)$U6dJvzomW7U%->&#OnC8s2Pg_& zM?msI4I@61RXz@25}E3$bQfX+G!JZ#DLg-pk5m^MYvvqgcMWXi~lcQ zf_Is?FfhQvu_v1!yxQkU?~DI0PyhY@A0`nE)pi;r0a^|Xlem8oV%{c@#7ra|U!f8+ zK@tt1NzsE(**!b&zXTo71k>FORa62}6b+h`?Y!@}7Zi0b=OURUu@+*9FG!gQ=$Pci z?JxfG%R|;PgV)dbc7iX1xB|*z86KUbGdz-m1VHkg0Z(iuLTuRJr_8rVFoxdExb1{yf)0z4z!1G!HT4t4gX!dApW zR`fBrbUpw%4tyj=?tfz|G$Urf6x-lwlkn4 z*ZBYce*p&mcF-0M571r1|Le=ce0ozab^i3|6?I?5%V2l_>{HO}Ta+U+1K4xWfwxyC zte^#o-JziIW=PG;-`Wi_7U{ZN`1*XG-qK4Ro&P*LulRI+f8iGf+R$_#)UZvy@M3`p zD}!gZj0))FHuV=l?C<}3SRO7}4D;{GbclafcEYNfuCxg+wAtT-Z;E^gN)KrhV2Ulz zK?1X;^Tq$y7hha$2IXeh{seG-_Uyb08F;Di=ynzG=$7~B^qt|+>DtikD$)FaDaE53 z;u(+5&=a7e?P51{x=!%0{LJ4BTIA}{>$={v^ZxPHn*aa*gNky`&M(JZLA%x&K!+K1 zx^{SU?kxas$m<2IYI*GlY3Fz(U-0R!-2hr@+YQ=d^v{>^`-|nqpybXBTIvT*?)IQu zYWae{RS&eF)$%!iGiZ_ybiWE{9{B%@bf)+JTMzK}`7<*xH2+{MUFFEX4P2Rl#vgrq z%NaXd*ZXvqZm@~wZz*PEV5qOO(co|S2oj1QfaoYTPx^FfzdizLKikCcw}3LOO)P&a=me8)*D1|E7@IHr z?{uBw(Oo;kqqlTDIP1SyWW>tg+xgws@;QH#AgC^cmP^o3{N3%U0BR3-bjllEdZ`aS z^$E02x4U)&q<{mP@^TqC!-CHJ)P4zCSnJa5I>i+KgU#=Oq!Di7Gh$_M>GqxC3Rx)|iSouKVCAPg4L zVq##hDdlfD3X*~Z^fB<5dxz_BpU&Qd|DY4Zj>WvtHe_Y+>D~+CznloJt-~&}I zv3$Va44Qv(-Sxwom6XaBJ41H*^Q+<}A%`&@lC|Jm$gg{^5m4JqLqNH#nF*nt#;u zw`~JeVV$)bUd&>8|KFpxc7vzoQT`Utfrvicz6~DTzB4>KZ$Ps6i}vr}9c!(iF?djE z@$$#-|Nnh0A3`<+g2KPLq{y@RIGeBKAO5B^X3$N#=Rr={2dZ>l{HWt#@Mx~x!Q#<* zoWIo_wC)^iMd=KW&RZ{T{e&3)9J~&^cEiir;GI_14E(KEK&wf+!R6I)&}k?PFAsrI z#5ULUFL#0#w)K`XgR{Tovm$}lis1YS+C}MW`K3hIk$)ds=b`2ooXtO2%3e17QYd)> za*_}`P8%Xjz{NZus)y8ci>%fw|q3ey>JIP7<{Jv4siJgY9M9 z_X9QZp^o?IeB{Y^?1dE6{pz4)@Rsk2_+HC{?sh*xi--chBB{~hiV)$D?H^;VIswnm8{Ox1;n7{chBLf5fHer~; zj?ncDzcfp)_;h}L8Tkv8zBNm#8-D5Xw@!my%kk0{9G;;KKAq2A1b>3I%Rrm;e7Z|F zfJz#l&VS&d`je05FHm_jPnVV9B{yj4WV0Ouf6FpZGaWP|2PrcCzsURZ4qWhq&hGP= z;n^$0?$H^$;U#FxK4?V-=nlT-fB#GCyK5)3{x7XK?g~0GiQy#+D2BVC1?lIPn?T#S zx)JHz_ZTn3i{Pdg|6g7PuULQV+xf<)8xn7=|4YO{@hjxpTgT|wU{?zYB>t9k&_Y!t zBmRJl5C9o5;m`m7-M$k*O}r@wT2Gd6fKEhc1_zK8KX{2rx2uFpcc}!pDD&yAozZ-P z$+7v_-{yaeF8nSZK!q=8v&Cc`RtC`B;69zNJUee>G5SE#B`D|kbpCV<^XYu{zqH|n z4rn1m^AUy4L#+q+JI{j_stSV&21I!d_O{_ApHB0aKf&RE@VE%b)lrQv{=d8hJ`dru zPd7MKfD-vJ*Yz4Nqd=oL+YWTPPI!3$&ByJtco|;Ef%MJ;9V@lu-#bvv$KUD$N|v2^ zFI_0M=zJRN1Ky9r;n^MF@j}Fd1+)MSbYdQ-5a`m1*dK-mP96r2 z2YGa}t~~-O=?_$BfM!cSdGKo;0BuqH#2?4HdMkMS9%!qg_DjEYu=8C&o3I}+f>e84 zeC5G;2&CuGC;o^7uaANA-wseoaTq#3<xH|RKkce2P9Q1h+xKBy${=nWBKeDNaU<$qtxucePc!^n_M z=?fQo&^|lR=D1rRKOSxS{2#Po%kThF=?iKvfaX_014_NT`;LI`RA4^J%dn3P)X7}P z^y@!(yynGqdC=V4a*zVhSO{parX>$F90J*|=h0lRz)->pUbX^i55G7LZnT5zHL&?$ zc|MPBcL|SV2NsWB7Y4?|V1@HQ?GD873^cw#cVv{PK}=Nz>*{vk@aPusX#VxT1higO z!0_8k;TJ3n{PGNta0MF{2)cg|WFMH9Y|X_G3z|7y1+oL)zXr*H&)SCWzvBQ~!{0I) zR9$q}OL%ntb_6Xyt!H^rsQU6hX!opV=TTSdbe7sg&*VEE2Ol$o=iNNJ-335XiOokC zJ-S6CJem)4cxZllQTrUU`x1N*<0k%>|6MK9S?V-ByWKfFx=kcJKxM@-aGl}P`Q8zv zwfQi|i%zJ*`s;gGY9qh-D zV2^Hh1<;UZs7Lb;mJ&CQ&fhQiszGC8w_FVm7@qX#JO*Cr09u3T#{K!fN3Ur=sN>an z$fMg?!K1rE;Kli;j0`@VprZ<6Ve5}T6S^;tSAG8f0(5g2XgsZ(^}5HVC53u{wA>(F)MAD-Zd_Y2b4JeesC!g`W0gd1t26gg2DzGwmcDkrYz-FI?p=mw#Fd_g!mtS~v z9s?~H1}#lk>-PzH_bwznLFuoQ?PZ`P7sCVx@Q#%;b6)%hFVH*;V!&4F^YXWDp7Y}W z>#Im3j9~YJ&VDxh?-=IVc@Ew)1Rtzm;n4}YYtMB7%8-TOf#a^AbN(4#=vA;VG*^o- zdUhTu6#)6E_X@ZIY5|=$=Ghs`09~ac_WIp_NMT)jz@xi#g-37gfh-1}Uf(^woiBVk zA3BD4bl&=3y5L1EXvU=Zh(hau($sF(J)m72tp`dhK^qKpL7mI9uik-{E`bJdq5C@B zJbF`aKqB2S7BZ?&)^8UfSuv>>KB(wK|MgE z@f^nx(7-rk?1e`KRM%*DbWYvy9<(>(9O&w|ULJFg&b>R{gQkW;51@sRN3R_+3i`wR>WWd|Goy=P!xC|5)><{1ArCngA=@x$xY z(DE6k{R>F>Oo%l9Hi)f7OqmBju3!XdWroNxegKD@M|UeIB)ocMG&~uPd0O7%Zvw5B z1&!ao2kk#w3X*l<-)8aJ8Pc!i-zMDK1a|2!uuH`oe}Pg{M!!r zFfRdn(z{ni2W%|pWMfw=8TYXFPg+cYw}$0WDo^egitYWCdtl3iwcpN1#I&T{?Z2pe3i{ zuHcT-i?hls435n;Dk6-aTUDOFki7`WZ(Bhl0-eua%)RsOzhmbC(CWA5m!K-5w{(w7 zr)$Sc&~3?}bOj#z0}ZlSx-Q{w@dImnv=203?9%z)@qdU)1ZX52w7=h{^U*%gKrXU4 zXumcn?|Sr#2F~DRaOwPMcmT2@rL%U%iv)ep&{ipEcjgN42+)gnN~{bX$*y}m7!QMv z(TMWteCX5p3FPt4`!5(jf!un$`9}mJa-R-n=ZG%WYahw=A|NlL5?K9;YGR)gCspn1C#*k*73)`_5AZS#=`Xo(7{ znjrD+ksJy$>P3JOE5pm!|DeTQ3=qpeMVQvdcmF$G_khMvKuO7?xpo2re~Sntq##ZQ zg_A;eC}^x;Mdz^>9A&HwFF|M3fcDXM*Mg2E*$!^K9&_Cu18S>2R|Ew^=pK;!JO979 zp~%Yc614G`U!I{mbVuifi$4r6tYlyiVBl{t2lcuvU-LJE&XDrxjO_s3?$cYkr#p7Z zYdwB>2Fn|edrLvF1B$iI;~>X?BCVwpG^Up9y2q38xUc2=Vpn)zgPbts!#mIrZ0UZF zZr2H*E^{2H;ROld8}Hx!_n6_yc>MM83CCT**Au$%Z?k?0I+@+0I~H^bDL76+qm?os zxA%hwQNZmbaI_>}07)@|q(GO%fYKRgSz~u>#|xfYph!OOvK%yKo?n30+;w08?-nuw z)mkMyt=~!vUUrv&+ex4U+26yr7KoJagEl#q-UaPJ0mt{t#Y}9V_SDPl^DM|qz(DOO zkZF)r!J2npyQUC9H@4@6+=kliJ~TUnsxBdmV> z?il9T`Ol~GIH-cW>KNh(Y5t9bc z=o#mecmH>R&inD`H8tJ^T3d1d#Zh_CD2wY3pU#&)oxdO#n?ah*FLwO~jl>+*_vm#! z;`r?dO9{s@*CV+ey{<<=tApD=+q6(G(r1_qDbQgAEdw*_eIkaf=m z(6snH(CJSv13&ynnJX)m2c4jZlvViU8D2Dh0ej#jX#4JqZF%4!XHavi*ImNnJ3D9? zse}dG)@?md!iBj1B-EqVcGWc=2KfDGu0LMvcnc~QTz{N|_9sB?l@c>>L$<^eY({qg zhexy3{}M%y?s@@G@I$to8F*-ZdU@*(3(|for1rDmm;ccDS5PZW*#O#po`uQ^;lkjHg2?lI=>#>wJ*SF&*a-h9z}hmoQ6 zKpp62K><+H^zaL5kWC*z&Ui85;s5_HtUse1c?L?)pfm`c0d9W7@j@F^Qg#PRv>vFi zvvy*swe;xr;_#T^(QR_jqxD;byhnGC0B8v)XsxJ6x5%NBpfH?vn}q>d{&mOx0Egkp z!=1-py!(P;8MHqGvJZ5V8r;t9pq01H)u4mkk|iLMJgo=#J3xnVI9j`?u<-YSMgcvN zZ-9=%=J4pYx#7|JzrqE6oP`5OT)?B7<%S32p^6xv-W&!-l+&UsEIfKa=R1S1X?h1v ziLoy)I=}os0o26+_dviKE1@#mok6>Kz~#@2+o|Bgh+cz|ASiuy9)EEn6|~&?D9BQ< zV_r}0JpO|D%m4o`?tMh}ZzyO_04TMVID%7R>wyvrkKOoka+zX(Vq0^wcUN0hvCJQSD-Y`ntKx5^-S0X?O43vNkBPn2Qr@@?$~)9RGxeT zg)+F)09qm3E!X&%fx&>Gq`L7ph~{rm23I=IUx4;$fu=+L-v{MMu*U>Ex&u6XEMJwF zf)oodl+-yk*NQNf@Pn4gbv}P_F*WY^203Gi~EGxWrZ z`)@(5^UxC>mWTLTK|88IQ6S*co#FAi4{AQhJkZ#~BhUeG()=xX|NsAA2`Y#ATRGO|NsBL1Z_9~1nEV~xZu?gS!ck@ zZVV5+=!gUL{UPxOPTQbmw!620mf1og06b@_;n7*T0dz;DN9T34*4K-+d+#7O@q)IR zTV}IBE(Zh8WFCLPDFrF=4L^Wl=NP!i2dx?amocF8&LMtj0bL&OVh_0gcONvy!3c74 zcjyL>?$RB;ogaKUUqZ@#P$T5%SLkVqU_0)=SSrcN0P6pMuC)e-QFnj^s6zO52&q2! zc8C#F1Awc8=0_;CK|}2k2L4u1%NrB{;0Wb!sbOG%c*LXE^eg!AsrxT%Bv~0=BlQnK zfxqJzDE;ua+JmR7z(*CaK7aQgeBkkm*PyN)=qQ_GFAVO2qaW-ckIwrL-#~o!;>#CQ z4_%P}RZFf&9XT^lB?LRh7uJzuc=7u!I81sz^@06qyA&QpkY; zly|X@8^YR8@cISZ?t;}{pz!IAR{%}j`g=70W+|})#bO> z(<`|5zF$Uo4_b~y8~z7f16nKe^8X8tH=wc(DSwB0g63|a8vsDNFJ2tI_3l6PcrlOe zVgZlNLnW#n-O=D1?^QvCp>O94m(GWAWvM|bFr*L&gnHxY5?(fmf>#a!^Hu(N#C2Hoo>0K4z>OFuIMs9o*RYwHbh#)}sT5GTBN zjWk{a3-1@jpmqZ6nrh=$e4<=3J}^=0S%7cahn3rx^a6(ug7-L(>+-oxbw z@BV{E|BOLHn9!&yG4$vzmH>_67<%=Jn1LAnp53(qKAjI=I9~>}r1<+Ghg08w5qtxb z2tWf)9?i!jO3!=r+A`ebVR&Kvn3=(+^OHw!u>{Q2?I2TMZv>}Lk6zo~r;(zS=P^>W zPKM=gP+P9^DaeoBuvUVTN3RFGl_2TSda^{N+sPu<<5w5rLq^9Zy&jPU4o6#(7r;DNr5$?$;3an}`~v9%X39)rd>T_?cz zU~z#G_n{il_^Joe`LEI?&%YhvD1Ee&fq{vEzjYQ9Xqi*B00Vz(Id~H8{R_JTkeWvi z#P4>U;nC~6!n@bR+!ZvA@CwwgwRsKNtKzx!TdM9TDJfWdK@6lYlf}wQd>uu0-9aZ(cEARflz60{di)L`50yUgKZLp&tiNoObfUWfj9)=eo z_n8@9g3fw{ngg0Wh0W7@xbQQ)n4J3J|H~(!j!bv$446z9NTw1ba|$#acRn6`5Xy?Z z;7oaD6)aP_hk$y_tS=y$bp~8qKjg!I$Nj%S&7$7a4KH*5{r?XxKf_%+&pU?sb{+!_ z7JPMto>FY#0Y3ckyGN(*ffpuMK+T#X9-Rlj9abof1l?cc*;^{%`P~)L?=S~%p$GM_ ze7b!Pcy!mE0NrwZ!!hhd)Sv(Vqawlgr}v_*Vgv7UEtNp74_-ur%GJ(;o|Z>SW`Q>U zt3tXKptheaXvnFg1+?cE79gq4{0uKLQeX?H=1u_F3>h2ibUpBb?>Xpj*8`v-ca-D< zTJL7N`53qyUE$Fgy1}E~>}G?EK&9I;Zsje?KU^Ktl*Gu3mcg zzqvwy5tN)uvb$a9^qPQ=81MWJx*qr70~U{i?`<6Tryh6U-v&A%d;x#UcP0jg{h-|Q zg2VCCf8TCb4$tmT3Bvb^l{?wXgZ4(QRkCf3c8tCVi(9p&{1}u89)Db?JQOB?5-E^>~xiQA%x@we(?De zNZ$D1(fP^a;3F1~gD-6Oryk(nb^y{m_h>#O-~npKT=Qsr23bn_(Zli#wq>MeN?$iV zf-EDw0;<{AJeqw(elU3SmZc zFq6l@hb$h+mwY;9_&mFP1;DQA=3(^c1|0FBJ-fR(Ns9^DQS9-x)6&9yri_*<4Uf=&>u^YTc(?c4d>)$p6g z!N)9Ky)4S0Q|>%ET~|QD6*Q6#PHwR~Je!XTcrwR-0JSc@rm!%0G9L5jc3t7yS^mS* z@_6ahZg86E^8%F#$*!Q-;4nOC_$`gU?0`=%3+O}?hS!pw-L4Y+f-D9e%?CL=nvV&1 zTAtu<5eI4Mmf`nkyhpPj3L@%TjP|a$#VA@Lz9$t#|P3Jp3{OED32Zdv+dvJ=vrA zfPe>R<>^6>#)ptpbIQZ=N{JBq;^WsZRUs+n2&kzBN--=y7<_tNRQNrcAAIobJn~W! z6g0iI%MbA|yf|=^nc<}es9-INdh!2dOv8)+FT)#9hJeBC8*rHkI(s4bh3}jH|2>;) zR1_FIyF*kYN(x#JRHTB2xe`2*Z-BkqY;%L5!V=WKx(L2SG6ZyO(+$wR7Y}C8mD?2@ z9@-YDgGzd%e#c!37tUQQ2w^}qA@iwB_bx83(qhKOM8X-H%E z#ad9Gi%9nw;&LB&Du;oA0d!AVg&e|hpn49g`@RQ(-RA&upEO?g@si-aiJ)~vpil#vGDhTcBVmN95MRm0giiLP!H+gW0n^eL8rZSyQoMY#u+`jJtRCBZ+diBa(Hx} z@L>E^q3_e1W6$W(jpi-Lcq6Di(|m*jT$RPXOw@n*f5MCIK=|OHga>m3Xj{(f1Bmwf zi|jz?cw^`B7whl;|No-vF7kPB;Is@~Kl~TGV;5C5$EDYc!mma;Q zRf|9q0monLVFwNLyaz3E5IpnlKj>7a&SNjaUW2yrJ_k*Qbzgn=A5>I;`c2&)7SOSH z{+43!GQN0FXA;8k0aYZR3vc^6K=Tj1tQ+kF874GXYm`?QdG?0? z>pa%{BD47if4PohH%mk70sfZF%nS^i2R(Y789ka`G4i*7?~&>}%)gBprnc;gNAoX6 z{uW6l1_p(^sv^or$ z#5nTpAY#z!+d;HJtHTWZtwPKU44o&wUs%D;-@1p)}s5+jk9QPnZv=x;Ws|`SC^mBj_NMN3ZEwsCI8QP=LP!6(|N*K;u_P zV^WZtKtZh?^aTcxaWha#>@{uf;M)%N_Y;8SctCAUZOgAX2^t}{UP zw}Or*0UfOb8o&bC>7#k?#mnC;pheCYp{e)~w9zyaRIASb1s@|TE5l3Bp|zlLjDK4( zqetiA36SIf>Vf${lf%oO$oD^i=G;Mv1eC~N35&mdJ7{5KujzklL56OYHc)ajVPs(V zenAl_L3)GwawrLszrFtN|No!`Yz_=Qy%7>Vo%cYV0^d yA5UTCLtf!4}!cyxz$boGNI6JsZI`_Ay` zl!%Dx4qecCiN9qZxJs>+c&Q3*!hq&`dTp(Df%<q?{Pyw*colOoqvvtZNk0e)IKTj>+e&Oa|oo`S|P?!U-+`XAIkhMfWR7c{5e%?+BmJ_Q+ClP(bgCQ4!#g; zeo*h&c@(_xyalw@!{gvfvF3;MohLk+f7bK2fYzeBfcBTT{RbT_3aVney(K)lK~p&b z9=(MUjgLU#?C~A6!GHlYh*=04rQ>f|2XbyNXhic8NEF1l&EEo=b^z}{yZ<6L5VUHC zzx6Gsnb>?pVuuI=blnUnR9qMszye6)nP3-pbAw8`&U4L=b0K}Is!85MCwpU=vUY-LN6gOUK{QnO=9~CsTR${^r znneVy>jBR@v`qW=A7t5YmQoRqPFCKTpsPP_fXC7y=gV~7e_`+xv>NyQ$uxfb6UDip z!#1CFfX3bR4;FiT;*Vtg&+gSKr__wj} zc{CqnbmZU1!srenTr>}qvU^xwEWK}tvfUhP9*{)L1;Xm#U((m2rg z4`e~sYjIfn0=&HF1*`vy|KD$TNFD%6$98;@SM|31Ctj9$GlNlf75ayqZP76O;^p3O&?K-&vi zg#Z8l4_*iN7PNN5v$sTr5!Bp~@dIV3(i=XV4_PI%sbJ3x6wU zBLLj;gP?QO558eSvV9Q?%ytoIxOg@nVFBAe88nm!T8D>f{~TY4{V%J*B{KN@rQ@KL zvkcAui%TNw<(vPfmSi>m&nq=O4%&mvunV;7eFuo>6g!+Y0W=52(EPu&RIHN;JSG4Z z=oC8)wZHj&=5Z#_V5Z@L=KuU<0-cAzatu2_d!ApPp5W2Tdea!xO4!kP==GDd2|GZ0 zlwWU#&&MG5-yr8fW#uz6bPKm$D&YZ_$Ix=;g>e(;@=@^QrUys`bL)Z9dpkg5d#`UI zO{pQwgN}$RfUfL8-VFG{@REn+zmnV+2X}zZ#B#j>x=qNVJ3zpryFdceV(bhCP2MYb zbOtND0Ifa)Ex7Y41dTkp-T)1HbUT1Hvgvvzm#DBfT9&9N)Hs1gdpbXWhgJ^0uqiF~ zXuVV#>e1_Z!=uv`bT!Qlk8W4c-F474u|c52;viG0uzNv3D^MVVO)om%fBFwL+!M6; z*s-%jMd9^4*!TeGXf&`|kV`-=ej(-m;{WT(FE)F<_zxK#d#U>gbeR(*J%hsI<@7u7 zaXkO%HE413L ze+?L&Xqzhs zXrFVZ0;qB5%lO5oQvp&IG0K0>&MUh>+hL)(Cjw^$n(d{lzJ1;hbO zhk5k+E^swG>D&3h2ULl?_hEeZg83q-!R0ywl-3|k6pwD-3E+GR8j0-Q2`Y#@I%_*% z1ClJD+~Cp8nzcfnq1)5KgYlDZ=MPX_@6%hl!K1f!f=@SxW7vz^M;RDE!}I*DpbcW6 z)t2BTl)a%dJUT;Hcy!JHn+v-2uR9d9`T??uxYP#J%S6NgVm~x=j;YlIloNVw{nqm^ zxEj8Fk#Y>w2yvEpDFa#qA?6M$K3L0F%7YfNdi0vQOoCPE-PRxednA7VFS~tic;LnD z8w?DfLDEjpS>!KxuY(2_!23TAfd+0Sgo4%rICh?fZuz+mIwHoWH%|gI{sk^SJsRJD z#;;sDTS2QYe7fBPd^&qUEg_VcG(5ns>AHYlvlX<7j$gACw9}bi)3t$L({%#BpzA7+ z?`)tJWC@E;cb$xD`?S=M<@6i z+!qV}f|i;?ge;u}ynB6Y8C<%-iak4zdH05}GC=k>gZ$*vyBCyRJ&v~q{QnO+M}&c2 z6P$uwLH%yf2tOz;eLH{pcD~4BfNVc};aADX-~n3r7U|h}G>*T857bxh{QiP%709t~ z`8&Ypg?F)M!ID9*QdUjsOVt5HU=Mq})8h!(reJ-7m!L#}AfBx243=9n5 zC3v34kAkY>7mwMv7+z1C09tDJ;`<8F4%1?RmoGrOf57b)P>_2xJ1a2a3-=OBEMb1D zoRPt^^JqkrM{~9UWL~{4*qdwhRL8nc7CVw?N0BRL| zy9!R^FZ8Z}hA65fK*MQHS3w#6CO9KJ1Jx}TZ~y=Q;*K+p@n~>2uK5kh+|v#4B=-eS ziQ4*~zpn^&SL(fJ%)3LD;jA#oX0iX8zpqkS(x&yVT6 z1#QfBgT@U&W1pY{gFU)qFMx`-ZQxytzghTOLAC5|kcFU%8EJt#XbC^4(1z6VjD4eBF!5^FDyKmbR3D$|2N~U7JDHfer-gybmtHVqdm>hu0sS$6r(g zf{Z)9g0WQbg^tP3{~j|u7!OxY1}CQ%vst(pUV@hNLDJ(3ZIhq>U*Cnd-$0>pLltx~ z?%|h~|NsAoXi8(@VtBnDJa!84if98T!wUhY7tsD#=TlI5^~VEzmh(TB5_^cM{)?d7 zWKKe&0KB6NwD0pdXuURg3vA~x&~hkokeyeSv4Hk-fcO5z9)9tanG1R78&ThZ>wj=! z?*y%@C_pX+L1%3DhECwubiDvB_rN8h>jr*J*8}{5uD4!10L3!KA=_S#$m`j_=7S1j z(0vr3wHTmlB7@bRP8S{Qf^6!=v-CkLKss%i!_l*~=s5)A`M_S40k!$9xZfGUDOa zw>)}nC$9kYvt4hzSg{|}&kj)$0Hx{I%aK~wko7jMh9_Tw?r#Cv5AwgOAvDTfg6>2? zQV#8(g4HkEbLHG|*FG0$MwJXC5f69|K*QSK@4V36#k0 zzc2@zdI&tW;n8}jk_mJuO)PjlyhrP|lH>5fAdwPz@IHsFulGUAVTcFH7`Yf;p8|yk z$c_~kLF=cEy`BYg4>bM3_K8B0$Zu#(jhrG+7=q4jgVf2O^&W>jAk{eTiu#51H&7*8 z47z>7)AAU9i!~zy!;5VUTnwPP419Nl10w?{%sD{|Ut4*YKsUCzOL#!4YDg*sB`0`N zWCe{cOZap{>TSkPuAngb2v-v*@e+%e-LC_E>KQE|i1Xqio8uEob0~Z6Rxy1nLGQ*Fuhh9+8cm&jr0T)=X zkpS>`;#5#Y>|r?-)Y5?L`|$v6nra2zya0)f7ymgK3=hEWs{yT<0Xyi$hlQYOFk1jx z8@~kKH~_B1Kvg+3e}U@67iIrB;o;YM09+^npf^6;Ph;ypfFcaN@v-;br~f|PTS0yWw>m%r-QQju|M34mr~&ZZvGeGQQ}K+D zTWn{6j^|#T1liZ-(Y+U>33TEV#Pf^eL93;}?3bs(bvC%(0G-eTx)~NcYRBL5@bCZs z;JyR*|NsAAUIuLnin0L>s&54~d_0mrK;DRE@WgTQ|6QQLMvrEjAOAry&)~uDdgw4%DN=tF z+^;)-7*wRZ*l-Xsz6Unn2V%arN4J|qcL0m!uR5#N{}l!vpsg#(|2?{Set9(i{156x zItX}li~R8Dt`qR+Jm;Z#>ZQag(3U1pP0ql;c)j(1{V9m8U`xCY{zu-?3o7qG;-I|j z+4&E&J{{DP#Moz)vK&+=9)D4@jDx|mJ5B-A=jnEnaOtjK0oUhCKyAL}-z@wszZe-9 zJd?kp4k7TjvVo>gdYuHor;{P({m*&eJai1#)W1jPMZ<5P`G23z<1hADfqEj~1-yZ4 zK@kSJV|&L7(-n*i;Mvd@zpYt7oAW;}Cm{1t3}G^nBWlAo2q71X{u0BTqC znl79Rp6D~Y?bDsRV;89N_+lDZ!?(`+FJeGrxS;*wWzhW9c^o|DcvRrUMtjiA-gD4w zoET`1(DHssp+~Q2&|F^l?A;6BS1h1~Jq+O0RvSPKxb9F6P*Gy?3hd0tLa^NsTNU88 zJ_AjMH2+{JodDj*<{T!3RHp=QlV&Ln=PW87v;nKUqq0eOv#R1b8yu_qF`%%kTf*$MSV;<%CY~ z;a$y#8DDGypB(~@4)^mf{(D;9Eq&x``MypTG{pbyh(f6iXwpK!SM$A3=X1|q6ZRJm zTwj6?f#5*(c^aht?!5k@;mM2to}EWtw}JWt2Vd|vKd66w09tQ)cHVux5afPW(A>#W z=t4Y?-qI7`{Wjp;?I@WF)V2p5_|W`|1$5W}|I`B>y`dL8l08^nScv=wFHLp^jTL~` zXCfbEHW8FcVdqSOMiZgsUg!mn?$Q$;pnmrA7h6GB1svm-XK(@ScYojffDyb1-m>LD zsp<;}O>kcJ>3sI07d+tvTIKjc=^SVQ>5bPD!2W$93{mv@CdB_O2TDa=+}HT|->36g z=kXVzpzHHM8)#m<*7*7V^{W>w=8$q4xjcatCLA8kRSFFJEt5cXYw~|b&|R#b!6&Z$ zf1&dj6sAXATffz%`1P9neyszs4|H$w1ekT8(<5Fy0^c_Y9y%yL`{KWk<>wM3k8a^_ zhZsvQfvR`~@G#`OFO6#12;liK&4#gU(e2OpwgPZ1=J1!waWNgxnn@%`QP|km_UqfG00dXJAdn^ zXi!mAA@IUt2_u7Nx1Gm~@5e!d68tUdAY%`{=Wl*q?_v3azegR^=6PiO`M;~-6VJ}$ zp1p3Mfu{p6UxV*>fy6f?{drm*;qSc+Dto(K4|sLUJZSjMQ=2_v34VPl{{n|5!9;j>2?zE z_|61zH+a=dcM)VR4#e?f`~WW5Ky!Sa-L49r-M*lkC|LMg^ucbd5b)_d^y0^2MuyJg zpgt&Qd9Y9CJJ04Lj4zl#TNgn0$@~ZHFfnob{NJ;i4ZK`h;Q#;szSe01{Jo$p=APYd z3NJwivVqenXcLd&e?+V5N2)KMW20o(TlW1m3#$UrxegASeTc7>cQQo0Z{ z5OhSt2YubNXLp^z%j=+aOw&%-eNUmFlbIn$=9~wOpE-v3BtHVx;u4J}*5FTBS;x|T~NAs!chgYWr?0aX+dpc&EqZ%1hhg7OQz{0j*NUHj!-BKN`)bSFpWVNhiRnI!1|-M`Zb z*-Pfx`Q?QKl7i=+-6kraRQ34~s5N#k+A*f{cA>|LqK9A0S zhW}qOeMO{a(1A!Eoli@oU)%v@TTpw84OG=RFo2Hni+y?RA2Y*?#%<8{I4HfmnEZ(o z+j&M{^Feo3hJp8gdvyLQ2?8}E!0l+z7I3?62bSK7{~pQbJ(_J!{V!E*{a>fp{DR42 zhDR^Up$X0J89kaU{_{^c*!rJ;{vnU%7aT1YOJBDBFJXNd@a6x1a1243?;p1!yN4O( z9?&`nMEeWm9`KkqY>Xwur*~<@|Ns9%hrdh!CDqQoAg)j6bL5Wn4e$W>29M+5acaXfcmbc@wV=`Q7fMUs{RdA{yzuG# z?gLs9e8{60azJ3`y%!-nKm+wlK}UspbWa7j2%Nsai69s>jshPWERFJLJOXh!?C3)9 z;2wR$KGL}>YdbY4<7E7wHuzFUvZr!Vpkfrhr? z$1umvYtZ(ZPw!Gt*aZ84mbCx&Xnun-z6Om1Tp?e04piWj%ARG!7)(+fVO)2H*HYv+e72H(z~pt4N+6lA*ye=BI17JR<&J&?Hb z*8l%s^G|T;`~)tp-oGdU^`ua`9RZMT2lAxB1n}0mK1BWj?SG#F8rK6)S9o-81trZF z$5w+<6hx>SECfD-@I{^us7-s{r}GymyaSFw!dqf1Vt+PDehddqsDe8kpxg*r9Nf7T z)VVb4EEl}{->?^?6*LA^V&Gv3c2J2rG|zc-vqLxOfCl-&n{@bF zSAeDzAY(2by%2K_x`0ZSR#1RL=P3DGmV!zw$WA~Qr$E4^yBFja(A+0vUd^Mo7c?T} z)7k0)D$W`Iz4*ErG|C6zg4@%Og=gToGSIA&AZWioCup-<>pxI0x$~$;H^k=F+ohm< z@Zz&3XyEg(XEz(@pg7OuE8wOgXq}g*b(lbHIJlYk6*P7Qtp|^LG#{7XZ;b}Ipx3r+ z5)Z?R{*|C)12)(2|4T>E`FNm{G&=9U2>r&w@Om-mT$0mwnHgS!&L)NQOMF}3mT-f* zww?E1Y?$}%e>XURfNFIo(8LPp(DTDDrq}*NJ2kAtqwxqRJs}DLP-BQ+p24#_OyK1= zQ1`x@Rig(qoq7l~omvB%PPLH(Z3XiH?G57a=r!HS2f7e~HLe?6<{2J%Ap@3Y^#uv^ znu>v?EesF5V3GUq|3$tgsK>#20U~+21ZL=SSx^Q5_angRA5<5GJA(F*LHA(7_TpkK zMqX5aZ%=s-TH@@}`3jU9Tswb&=T47<=3ISXwa8(NVP5cDY!(A(zOxsUj$Zsd`u~5F zPdAv;dLXhi6f!;m8WEZFm6-w5kg&Q0ifCu}sdcI-vyG+pph5#ZSV8;7LHF^#c>Dk3 z|JUbyI-mP?o^SybP@u!0UQFKsDG2yCe)#{wO9SitN2nucPd9968?=j{aV6+bxg#7d zpfhto3wJy^4?){o+u-R8DLlg*L1i+$AcvO89-ZLY6s<^kp#pBPy$4TYdv+eh2sy+| zcI)kuBxup=+W8SuGx$Iga3f{91-j*$0((b_v z+HC9D>B{gDbRhbRJ8CEuI%2&BHVdep0o7~q9^I@AAalDNBz$@kU^}is3kMP;d|RKC#DLPKm^x?`8hJ7`93uQ3>p(S6FF0XC$^nn#;8GPlc*=PY+}{LE*R+6kxp{PhwIYQsf9q24 zYK$lREzdv<&8M%qpz-Ny_|~Tvd5@a#O|X?dK#1ymtI4TV=s zpw_2HcL8K*0?cWC!vR`tp(Lcf0J*yPm;^ug zTz-#U+kf3W3@^kNgQ6823WncaCV>u+g0<%$b9Tr}b@*Fffn0>KsT1TW(BxFLz>DYY zpoySlftR3zd!Y7$=6#UwF9**HfyOnU@}0+D1Q>zh@%ReHl1z__|2-N1@OOaLxkH1} z5j1ztz~52}nud`F&#-{@S$8K$ybJ=Z8m7Aaf^1n-Oy-ZlK%FKqHZ# zAj#py)m@+!doBzNFRIxdW262yzzraI&&%rzFuKt1A2O3A@09gqd4tyT% z(Rm1TjK{V=|NkR(hTRiD7g(d$hu~8wzzyo=Hx_7_>cx|3pnW#reN#7|GBb3#Zh&p2 z<_GWp@a?XZ@C7ZS0qw>2?2Z-i=`B6t!}#0N@_w<24`|6Qq#gYKMb<*_NqPJ&pnKh$ zf9Tc6H2>h>?+4wJ;F0Wl#FO#3r{(>kGoTXuzXA&bXtQaj>yFk-{H-3~%{wUjhh9U3 zc6c-&u>jXikf}yQ`Q7}&zWIk;`BD$iM8O9J28IF;{>6uir-GK|8UFX^HDP$6`3zL? zy6)(9-2mDNbBc+9;YH~Z@ap3opvjG$Q$cLdohJt1GbuVtH+(+^>KT-)dTM^Q#&5y9|D6Xx z)1fWJpmuYz>k;2>9~A>n#^cRD_4xazF)%PR|K#BB1C=Yij^CSqsPeb(1ZNk~GB!a5 z55!j~D~#0`=6*u`MSz#y5=zyJyt{^m+h>c0)Op_V|3$Efr{#VACeSh`56~E8w*lxB7tp~`h!BTvdH|ix4r-Tn z*Y5Dpy!T?sF&2iG_dyHRKnL5yZS(1Tv>&t<8f>;t=R440js{@P%PPH*!yjPuusm4$)|2t9C*%2-TA*!b6FfT4`*gl~;i?4ch#q{&4{GW6+Wu(e zVR#`pmzm+ECnOm?Zw0jpd^f!KGY3=}`fhl+57eFLwLJ%xC|%*v>AT^@eXu0xfCJwR zFL(U;|Nlj=EJ||Xu(18xP1}zwQA+s1|h!ECZ`|i>C6x2>AF$c8~N(5iHD1z&f*q6J(cO`-* zI7?n3Do5yfnm1nGgN1kSdREAIT^Fb~p$Dt~;Nuyg@Y~QmP|9A9Zgx;luVpf*Jb-q7 zK^NgP*Mg2sod6PTuARWh-*SkFfx+GB0bbCF@~%5PI*+&Bt`h+tHQH->wTXw}#nES=zHjXgk6zwwY2b6< zf2Z+6&Vhe1a|x(M10Q3u0W?0w-y#oc4t3XVc(HE+=vWBQdDX}HTR|J#KpmQ!mEeTb zdJvRMyInV|UN%p zCg1p5uY>#zxx`@wXwC<;zVwB_M;3qb90L=it z?gyoN)+4p@pd&n2K&}t$7I^V_KB%{Vv}BmS6?A2vNAnR6q>5z%_|UoM3=9n5wv!)d ze@VALhetPSbS}3iku)fxB7qv1iEW?fR*@m{&{h8B`BbezxW86>gaUc z0KSzDmOgzu|Depc14Lw3r>V?i;dIgTEED*A5hkhTjm; z__FQw|No#xcbUGOUtWR_u7~*-yq*TO4xhgz_AmVSL{K>h(xVHCiIx!1Rd$e=Ppk$d zB~z<^e4x<{4#@S8CA^@BcVO`C{P$7=G<{_}>m6t^{bdQLMC@kOsYWChjemU5OU~_h zKm7OX_TzZD8l+``#0&U(OW4LY5AYmei2`gKtoa9Hi7aTnIp}K3m+OAR=6O82-2^;9 zcT+uvbRn;Bg7W(D7i&Je_z%joC8t59qetiQlP@bFnjq}~aQhR~_=L|#f#xRoTRwp@ zZ|86D;V&6yKn4Ql$G1E~Qo7@Nny!0;k)6KF^sydWXX2{db% zE#c95+%q|r1r%GsPM}4KwHzM3CU-&O`=FI6`s@C|&Sx_LNhg=Gcy`wccyu22IQWeD zg#gGt$We%*pj+NLkH4@5(YrwU85kH2cyJy9ty<&t0N*+O|Nnn`55+^^8KYhoAx3cg zgNN!t`LXk!;r|zPw;@UY+ZPBO_W?vZD}e5aumLUn=bejE9YE?E@P5=_%>Aewpt=FH zF$c0AmBSF*epKGlC*YYG&(1$3w;*etE_-yB34lX3?=uSnXgKhoPj|KgXfzNU?w}bu z{+3Okal!5y6$S9c1CUw1|16+O^WMF<1}ZCC50rHJcBiOF_;hDWcqY53usB+~vhcSS zf--!s45-NnT8qO0S~tJ}x{1g^9MY=?ja7n9-vLPofF#tR5}@uADEPpgG-&Wa%M+i@ zXNLb@*xdq!*YOwIK0|0Z@ag?7D&PPFEti-8TKoC`g&0&_A5`79cOdo7pjB1iU7m>c zI@qeiFQ(3h_Ge(}5w;%m#cEJ#)eSmdQ5ckhyB#b}Ha}qRJlK3v;QJxahFyNwgCL#) zh{wXf?|KmVdR|z4{`AG-|NsBTf+oE{myaOqhuH^S-yG~=`MpHfqx18N&?ZowcmIVh z$o9_rFTm%icNc^9n?*yqSd*WDT+9&d(fI>(`U$K&LDcV%y_x78E05!@2UHjs7+U|= zi-6ZUfs5rAOM^f?G#3U2m)`pSowaK`!S_XaCLj0dRyp?KdGUw;-L-2#bp&Xf!nZq> z0lbFYr!#d2XsLWlAE<)ruH|U{&&1y%3!W%;1r^f=n*TGG&hR|$#sM140xyxV@o2XF z7OTL(P$~gFrrx91Rs^)d%6Tzp5iIMSSOo^(UN;W#1U~41h5H`8rpIFy7+xGY`Rcz% zuV`&NsCi)891mJv<Vrk97|#j*GA|NC^O?sy4WISL+M1NjqVCuGSb%mttmbNO3A z%RIpK>LbK@5743|$O2+E{#MXJHSkK**436TKqUldht8tq;Ns=QEl~UPFnBKcWdLNV z0Mu{qeEz~g8g#qKVbEH)mi3^Tvpbam6hz>wI9ow0_#m!lG~3>bK?#>X zal8yKv=@QHp*Vg8j z07ExRJE-FdI{((A`4A)LVGqk|rB_;SSE_<whG~l1HzpdK_qh+<(K{FDe)O1no4K zdiXU<+62Sf9^I}7JenWe2f3is!PW3B=oA6SwH+_^X@iEc*nB(l1ROi#Bv419^FW<$ zw6$XsK(`mX2+v_*;NQm3{NTQgU+LNx7L(uoZ$1sm?5`KUSk3(Nf9K)XozQXwbZ>YG zXruHgk6zRCSlEcYDcgtthW}r_`t$$4OXvTW2B7M2q9F8q0C1iH*H4|7J$geoc%Y3} z+%P=wq6K^n)(Ma9Q1IoT-K85|9DEEKMoZn{)156~cmT9tqg2zgvlX;}*#mjQMQJ(6 zW3VB1&@?bBW&^LqRim;Pc=?cl1v1=nP%p(dpZP(xm~d7_8m! zVqyzuNa?!==)hjr9WR<%-u(yNb>jmW@tIL71e#@{Rmf!iCK^rnbmpA%!hBl;4aBX=DIePB6>k&{#gMS}0 z^uoj+_5AIi^KSflRk*=-WH5pTYAm1exBLKg7dmhGX#VnOuHC@E-;xdGs{=(;eF23mT4+0ej^;f75x8SCA*2`CAXNfQ|t@lHt>N0vz*@ z5i?kQ<w!A0 z-mrfj$(KBOMJ__axA_Gl=;j0m{wbgZeDe=_G{53-XgOc{+^6$5=n50ieOxa=7nMWR zgIw$Zy`HSwbppueAXkF6ydpUfGENU(+v3q{d#eOA7_t>KUj*92`r<`5XiNmc?+#r7 z-k0S8O$4AW?2T(I4B%6KK$>4(1E^=$9U<}ZEV%RJy8}FHdfun=pO5A*AJ9>lN3XIl z_;ma3fDAZ+90|4%yvg!s7s$^x{H+^6#w5EQdClwFdGY1bKmY%O%6>_R#Xfk$<0vO7pM!^0 zc^J}m0hJ4&a;UpP;zeT{c&%&+=>Fyok8WSkMdKiipqt`YD?w#OU93lP=n;?Z(gnV~ zHX_|+EH96OYNqZ83Gj5tqe74uLRY-_-T`xa=n9W+4-T(xo`)}Aft2>z?u9A31XdKf z;w5NB!;2P9&;aB87kg?^I%x3ry<yuJnpYG+Lc=qW04C2c9bgSMEQeXhF zg*=Xfw&a4A)57|NFK#ojF?bw5^dD5VF+T9%cRJ+J$qbrfftDTJ2+bWxS=84x4H zr&sk@2romhN3X1b9;jOmnz3Vjl?fUhF?i85@6~^gZr)^2it4s)Ndq;K7+xE;;`GTEosHZ+%q;e}5a zi2L2A*K|n}55o&vF!#MruWld68G2yubDv(-BdX!DJuF2tHc=35B*gU8mqE|q>n|n>=L5{uwl>)UVJbFb>_JBiN3#4l= zR0`rUQNM3ssV_mi3@;X;N*R9zOHHijVR-R<6T~i%fuJ1JD_Z*T|Nj>cAi{iX z6%(xlEgS1KUEa>a@FEr>1$M&6qhKd|mEmQ0;R+E4hYn~KrdL$?(EtB0^pJ!-dPVgg zgLN3z@i4p)hDd=;5(iC}_L_=-T>X0^*zaKR{6%2(+wyoAUOYw;KRy>Mep`i?;l*hr z@%@lMSro|2@M1HPxHxDSr`MDvo|oapY$Wmf&F?@7@EjgZdQGnd z@G`vUo5caj54%`F<#w;>S&R19>toJX(eA&^)aR7??~ZU;y#2rA|X5!(b3vjd6s z+P?QyV0e+V1hjRLbvMWty|yR(AX)RxOppU*MU%nxTwDdn>ENtsoD9mE%q!SSOh7$J z{+1$8tFHNn2!G2AW(I~8jQp(u%nS@RJp3&yKr-E|D^oxPodxJEQZ>p@L^2D)sWhrh)RB-7364>egdZ31W& zM(cKnxe9P|@0Rm0yeI^lYwgqd4;I|@+yDQ6k+mLVoi#W?&I6qq*K2C#$II{{2qq3m z7|nD3|M%%N)#?2I|Aje1>XS#WX&NZKE2D}npUK1Uf*&FVv(8}^IN9CG<7Ig9WgXa7 znABBBidJGlf}Eqe8dOnyTML$gIVb%z*lgBf z9)=gUp;FKiwdWLA>JrFB2Ov^lmtJWHi?e`yumVZ^%_Ok+H(y?c7ZZ@gTP}dbC#LZ* zyr@7DzXK`cjI($cUL+uit3b@xi{WK>;ejN6<^|ZCyJb8KFAN~!NaeBz$aqPJFlZpv zr}I%X)RU$jO*{;aG0=S?FTbpL1!*UCS8%*!0yn^+?e_|fmtM$x)`@Z8eDl)e@BjZ3 zJi1vMq5L!8^C`PoXC^}A_dxlbP(BM(y=6Q^{tHxI6Uy&_@@FPMhf?lXVBIC97Shv9+G{Q3R@pZW9M75D|^KlA6O33zn78}JLJg9P&w_yzM7 zJi5aSJUYV-_yxsWy4gKC-3<5z{RH?0-4t9~50tWZ`^&VREb-_TYrRy;-t8vSdZ0ww zquccdV*S1A$-{{86p!vO0gqlc1rO~o4v$VZ4iCl)9-VFiug^f+(cp{jdfgQ~w8J?( zI^7}i?gFppzi|5h{6FZv;!fD+MbHAeUQz8A0t~Rh=5FTZ7c9*`Sj%;h7gj*yrJBQ~ z6MTUtC`Ys&DCPF(ju!A}y(HtPjHHHUXKjfEZXs+hq;BNt~ z=Kx)k^Li@0|J@zU@wy%1zi-a09Q-YyzL-aMv4%&oGlxfSFpo#;HxGW7Ppt>)Ku4GP z^s=-Wo_sA2>Ss81yR5PJn0$v=4* z^_zcil?s1zW@#wR^XQINc)b#u&Rh*aDiHkym+oW{*VZSX zH388aubbiHeW0c8pdd*3|NpH-~rMBZ9(3O_2 zXCdwG0EHLWf8m~;*FAbg7d#bUfUJ;2EaOGlgL}g8fah@*&~yVsvo%+_bT>0{>@t~>a9eu5`9Y>s(!mu~Rs{Pp6)KhTC0e(*X&(5SYj zHH%8O@19~7&rTMV=7WqNgDkx{>USF+c&P$T!wwAH&H|ue9A1!J-PIgWhb)7d^zYyQ z|KOuvO;ijowH_!@@<={mcnLaY>+$^~w4>-@d90Y-gMa-;kIqk?ogylR2VNclFO343 z&jLy(D;oG)8vp(O|IL|&vDDM>z)R36$)NZHoh<92?aTpkqTzv;yJ3;$;yPa89F!Hy6W<5bSvqN^yifutYL?mCF4 z-o3c^7ZN<0;4v`Q1D=-mO4vYQ1PLJD?lJ-2)^DX}4G)0N^@YSM$S{aIp@H-6MJLo8 z&{-4UU}j`dfu-LYh6i4r1PuVe$}>;_`rtQz>zcoy)soQ?FRQ_I8N&(={?-|P|Nn13 z!Qs(eEddGlPG^=E+JFE5?+#{Ze)PRFm<2S$RRx}D=TT`s#n>6l;?e1?@G|}H|Nr0; z>?LS^{zb*l=l@~$g?jYz9(e>Vk3dHTg0GbY9~lTO(^1CC!TAAn%P%-P$b+*(qX**& zyZ;Yh=6QCzad;#<2zYj~gASEJSszjaYF45yJOmw;gAG}aUU4vE(fYbE?u;DB# znD`;dK0m+3;wd1&4TZMKG%m+YXHDR}82$bGQ% zejb+IXT#Ea=@ocd2Zb>xt^1>=b&z7uZvN&|Opv6m@e-8TK;}Y{J1FzK==}B^aXx6M zN9Rw_at%-wciE#?^vit#hGt8Sa`kRTg@K`zA2jUUY{^k}9}*wnH45Ot zFGzV|cmUkAI0&uD7(BWw1q=^(SXOcrzwzii(fY0A={H9S#?t$Sm%ce$FnaL29(sKl zbkDXUsJtrCsB?paKZxPZ^hKsitDgy8|l zZnowZtj#}I`P)0CQClP6_;Unb#|w~96Q5UTsnWf0NwxN*qp}l{w3&8@E4~)KSw@~2i$%MfwosbO*HlrmHI4D`z#dH zJ~QYBwePAWRy35>dUXBIrYOkN**ad1AfsO-lW_eKxt^@0No0D0-gX*uB zp!5B9DF6Te|78uRT!qhPgnIOf&bb4rk3e}8k>^#zXpyWiOH%kKp0|QL^gl=aRSHmYO1WMOI zQvM2#(k0C&KsQ=TfJ!9a|Ns9tC$qeF>^$U z)e*hP5^%+(mpz)RIT%V(eR`8QK$(C6Joo}?ioEjaPUe7|C)Zuf;bZx%gtOU>mA?gi zQ+D$a&?YHR-x^%BfzCaE#IuY?FGO?aw-lVuvHOB4XkY@qOE=nm!qZEXb~INr&k0$P!G+!=IGFT)GY zL`H^}f53SJv`_DTr|X>;PxBZVx?S(Q3<4zpbKEy{P1v2l%3rFW9an`+|Bc8Gox3s1)msQQ`M!e*B^J zWSty1tHatq9?2J)4=^5QnGEV2SRSl>@6j821vLBD`Te--6_DTyPG~*6m4Si5u{$&d zbks}dy%&ooV;Q1S+ES_j>MixxegUNETM zDOW?OhhgQ+mj9s8DHVVvzUPJq!2Up4pTXaH8WcIODkk=D8t6P&4p8F4i40XR}ZCg!QtH<&G8bveH$`A?AyIY1r+R_y)G&lzO8RT zy))1#1E@g+Iwu-@n=j~|3(IRICZGj^9v;2E7hbf+fadr3`#|^EfU0VK(E2NZZw{O+ z{4F;@iLu-Df=4n#r!$9Vx64rmk4|UEp(db}%#9u_42+rgP-_udzdCk@s3f#rs#6D_g!s*g zqoG8`5p+)pBLhRJ5M;b!1vu|P^gCL+sKoI1ftDJ3bbEuY@DSLi2Ab>ZeEy;#hmm0i zi1V@xVx*m1E}`8=-T>?zoik>X*d9COz=-V z(ENhwC1@icr1#?nO6J|s3NJzZ5O6-|b{4U87T|By0n4Dc?Ig6k0oAskgB+55542t? zk@HCY1Z|ufUh??<4ZH-{!}4G;Yv(Ec_17FbMO2X2X~6m+9E=PM{QciR`>H^#xj%^jAQQ8nC+_`EW3%*@}+f!Vz}8wM4hOOm~=!M`!5?&@ot`{S%fK_*=m%7Q0mg2MFfeo;cj{%)Z~h@sAKv=E z?gB`?pJ%TdBV=ipqvk=lfBCl+{P#@0>ezgg(X;cIV@HXIies+`qvdr6{`tpzEPwD% zIs~d999piGUh%d3SJV$JS6n-DR1|zIzn9269(Pdz*E5C(Kvjka=!hqz%;VARd&05X zMMb1LPy##%$?YftD!n9HFO{BueY!JT=A|UKnE)w&!0n?@$4=0#wcwkR-f(n>b99&U zcy!yl^d>R7SUxL~cInU&cd<<7D6&8sN_Jpi{036-v$L4zMd9n`|3TMJw;m`F0}UB; zGQ;#0pK$3+=6HPwa=pf0%>EPj{%KGYftC+ufKTD?j^jYC!A^iS5O{VT0$mf}sd>x4 zS49X^+Qr^~4mzrjzeNc&;Lv%@uUAI_w93n)Gj@fCjt0B(iuM8 zz8xN&t>9HEy{;=fI$axlI`@LkoPmb3Z?~g|PxoGs0-sLb4#)1w1dr~}2_D_04L+Se z9sdVdfQ)E8P#5Jf!?*LFC*yI*e4!)%Ha5@ZV~ifXQH&i-polUBb)76<7d`dvl~Dm* zPYmkK`Mv_XwsMPKTIUDRokcplD zLAS@I#)8&YeD6H`;`E#6XlGq0dNd!&03QzpYBz!kRFLg27QK1?e>dphu-6w}Tzdx2 zBCz|vA@L7BD6#nsN4GmP{(B=>EbkSo@q_LaXZ&V)ujm)(@(`XE9WUV#tq&UQ10^>O zmrfmaN6Q!$jv^7XL;^0S96MuFI9@-6q<{yA7A83Tg`pmMfpCC~faSenRZu$t*?ta$ z{pN7{Js6LJS7E(-5&7!*e~3$jP+HGO?syJy$0KNc7wQR0|5*I5fZhKu;QqIV+yB{- zKi`$XgYh`OAUlZdE5I-4F93H3Xp#e*OQGv`A>jdc2fY6R4iB8}!5$w!p2OWkwfOkw z80wS!&N0NZ*G2R{W`oZFm4OtqAftgJbhwrjjbh=D*A(DUQv58B6T;fp0Dni;J-)nFP3t*-U3FC&hsy{ zK__E^&-?LDwh|T<2a6JBm6E5H7waXvgB2VZ&$?K?s^bHdG77I@^&yBS z(R!dX2HLANJlX9m18RKBxO8SKv>vEPY`s*$%6Xv^BbQS=OFP|*2P`uFT zEb9Fs92JH7xh|I33iZ>wy(M1HKJE-UQ<~xB z<$wSGcLvM6Ufj*U<2^eA!{r~%4;cAdrZ6xtgzf?ffX6@`JHfrN=AY~(;q|J`KUqr( znt!sD#=3MqRQBco#Y?nAH#h&{Q$=@RN|g&*x&QVvxLau0?Ro{&*Z>W^b|ZC8`CCD|xIp6+;Ia*J#{k$~@UT3ntKIzL zU+HPktkO3J4hR00ZU)eK@i8i(Lzh9#EEaGBw)5T#;|HM2DZmoN9G=}VD&VrF2Yz{Q|APa( z3n@iK0JPTf-AmAv^NzOv|Nn!xe7!hyA2k2&0lMSo-~W)~H9=)c4X9O7d_w)F<@UK7l z`UEtcdGy*^g2heBUHI1@0~ubr*wygl>*WxCg3iQi{`tSO|MhZk`Q_5>rQiyh?)VH! zS}xsg3Z9*xJv%RXbUt+jO_YFcV03K$!Bk)9*!+{JKAV4=n+o`(z~&$I^-`c^0L}Fx zjNp^d>$yF8MfaQnIZDLIk$;<$%1#z=KLbhOPEhg&Dde3DR>vB-45T#60QRda};Vwe>)qxM#N)hiA8tXE!K5 ztzRqxca!S0K$RntBflUsh~XvR$S>$E0AdCyIPwbyD}b0$29ErK(FUOL1?0JNP`rZ6 zTkzfv=s9tq21~qxhvhZ?X7Gh9pp9wQJv+}d{}!(=PMhG^U7{iax>XI_X8-2{S|aiO zg;*?TOGGb=9H`0e>udR!f6{@@L#^NHELskfn0WTOGJ^L9YaXA#zs=*nNAl(7!;C(b zKRi2+I(GPosr2%&^G`Ztd5#~n{{8@C%f-?gAnRCKE|vB>cE*8j*Mcm!fE1(1?Ol&< zb`Q`hYkhF{Nz;SzSdofHw>yVNr#V<$+XK|OQuSawRHWe18P0)Nui?(&ar_u)ZU?Hg z^r{DBSuj)?v_0<$x;gP0sQ7``3XN|fK%MN)si1}QKHX&=E}g9>{{H`ue2d))P+fb< zL-UtM<1f%{N&M|Bpd&;&&-8jRc1)fA_y7Ont!Ms1E>cS4&pYUGymbehn{XhFKk+~s zf58C;M}9#T6-RzSP>~BFL6PdB0*X%;6$h|*0GLbwlLe0af-Neb0t3tdZ7>HjKqEb1 z2Iz=(FaxyZ4$Qa!8r1{o0?pWgML^ruz~}f`Kz!K&>NE-Sz_kV-3ktt&T~GUy`cW1M{h6ah6a!BsUWSsogca@5*+`BdH8gL zr8~jF;M!d$;%ZqZz~A~1)V}C$1*!G4JjmY+I{gH+FOum{tq*7 zv3yV}3o#Zn0^`wqSj4mWsF0)O@!I<4Y8J+lGvLx6+gwrO5m3T_7TutZf{*11{^lQ` z@%iq(ARoDEo(H#$Ji51nxIUo6G(JI{_TpkB=z3~!pg4l|Q6Kk#`?+ZUOYr@bozJ16 z=F<)KpGS8uC|w@o9_Po|KISy%Uhs1->D$mT@C-YUgGbM z12s7>?f3<%BEWM+^KYVzmch#-*hI`uoygU!vb1x0ZPN5aSZT! zBgf7o%_kVYIkPgl@Vh>M&xe3&{TIt2^Ch6R%7M}+j?I4AMl|0$}@K5tWR)`J;s4z3Cumc0EzJLubNOa3L z|K{Rv-vBBrdPUzJ6kzDQ;o14ev-2y;xOlfa$2WIY1^(9AObiUYF$}EW8Om%%28P|B zbx+^iEExGggU$@i^*l`c{h&+T!Qloz^5P}va%f0AxpbF{xOCUccy!luyvPSP<@h_q zSwM}T5EYJQD`x(dnIIbi*g)HYT`o8_|NGD1a*c_B!Li#%MFdpyYqEeiH7XLV|M^=} zSs55SKxGVQ$eN)yg3Hs=M@4|Y1$4McZxq+dli;$(fdN#dbk|FO*X;ZN?XUwKi0~eC zuKg=e)AcZD*lRARDD8Gp;Q$?Y)e^)48hPwt1TS0TZ&}R(VzBVHwt++rGdX^9QDJc? z$${+X?|cUud*^sD7iw5V2&h3W(0qWAfBoU!2=3P|(Dsh2;eS`dZ(zlsfxBFodKHj4 z0*;Kw9DCgvL7S3WK-=#eJCB2A?_C%ec7viGG_-{>kdZc_+g$>**oYStePBP93wT(5 zD833(>Y;he@DjM=R-m%u1=tCY@*g=c65ytS3QJgkfEuTFTsl9$1TFTO(0rJ^`G)|1%g2BJ|AUV9 z`42e@6+T|j8^gf+@(Oqm7wm4s+u$ZJygW3#{ZbAx_zJP#qt~6ov-yYyY(A}90(3F_ zZ%}YHA7JsZd{Fup95OFogUw`c1>KttzA`ZqG}a1Eoea#N1nHw90!p$ipzWo-0c@=& z`CCswldSXw7<{_J1$?^e zIeaaz^EV&)`~UyN7e3u?9*&(yn;$SbHa}(Ta6RtYT_EDpnR~$1vOu6j&ZqN`PvVdXec%P|*s`-wn0L8A^jZlfSui zz6Uj#Tu;2v1dUsOMvXhqxptmqJnYMO-q-Saajb8$hls1C2ZmKMgOIH9Nj~9fdA4+g zE91G>p!-5P55ENMeuT$g^IFE>fBnJE!>-*SAY(5<*8F)k z*QjVPK<{-n~fv_5Xh-xEK=q^Z!3c z8K_&v-vX*6;l+jBFHp_G-|_6<|Np%)5R-fGQW)8!zvGLj#;1dYuKE53_*^ zDON^)*BdVnf~6c7z{QeFcbP?}o5hRwKS6D)Qj5;RFBgIWBu0ws<&59||L*{M{^#%i z|2q$XlCH&HaA<*&X$xp}r}G~F`j5^3jQIO!f<}KptI-_!*Sn|)fZU_O&>O+X-x2^a zFoNl&$M66DcYg(Cd%NHN|HIY?g+c0{#y6mJjxw%oc;K761QUO&GN_R5cIN;kWRK2P z&>W$Ujuz~kDXsVj<11+9ni>6{9hrS$0B3!2M8j34=SyL$L^F9liW*j=08(cKGD?a>WZ?bG?p z@qd7aW9I=-(U-yos3rVV+5nnP+~*HENgK>|>^ufe zdEKC*rF$#LRL|rC9=$9L9=$wmpy8;_53fZgG*_@NmI`?^9}w}dJi*@*3p$G1+Mwh` zH`oJ?phXV+>ko8-d7x^lUziPa#fMyOrBa_|WAbl+W8XtqX9CSXSi?usMmc7S~m)6 z7kkVAuWb15(JR9IqTLBJJ722d*nEu9)w)E5g})cn&hYGZ_3%u-=Fxf2vAbpphezk3 z{{aTA2PzNybpC&lYzJ~0#4nx4Uxe5(GC1x7Oah!$|1oANf?ln0xCH?j)T(~i1`vU&kBk!a5~Ee8*mu3N38|q2+w2|70Xso65wxH z1P(KB2zd0`FnV;iLc-)Yf74d56xdAPPSA3uxu9h3(-|S)*?dIA$8sqs_3*bI1}(4N z3r?>5Euf`39^H^!)q0>r!lQdDIG1!Df3eaQJfg?nvISgpfKw`{u!9teFY`dn8F>2# zmdE*9LFWb|@;QGCOLf}K%ND83Uo9Bq@)2Iun&neP(pdx4mJ@Szc02sBHZ>Jw0|C2utD=We~Uh-bp$%l z-J`n|lt-b_0Ahlo;U%at@aTr528ichf~Gb+I*<8u&UFBl1R;)$3_jgpHYh!I9`o!x z23-Kx`Tj-NBT#|{%eEdUO>=DalVAfEnlSBOt&z3!w}6fy0WFQ|Jnqvu*8<`#usvtM z3VT6ppKgc@C@eu&C-`=rf4LPr`f==~I4FyCe)s8|3kr-EVOC({L2RGS`!C$B7#Ut( z|NZ|zxR`&r0HhdNV|9bG<;!$XC_#!qpU!J9${awu(;*3a8+fwnm`~?>@Od(zg+-uS zy_>xy*gTrSvB|*SvJw<^&`{=Y;ReSUBw{=7z2LBh#AT}q$d=CgkaFq8MoUJ9mvJD| zA+^nm1t0-;gaA}srzInU$8m5H1ZP2QQ2Vj-KU6jwq)7s#sq_AeIFM3^X;5h&kO-3I zcfbDsN8|y}`O_Yqb3uvg<#ebSQXm5lf-i5o@6!p+z%ST9ra*${#V-p`-uV9FlLaHg zOVDAU&}!&qD@4zWn@|N8K?)K<_CadU7Y8grMKm~l8~%Us31lWDae*@tcqR~{5;XID z86*t~Y-!L0-7!#_3pfEhaa>6p_m1< zkiez$n+NpjX~($OmzEE~i}E4mA<}w;ho|7vY#bh)%-!A`ueV2oC(w}QBO&7hKE1a5 zn=lt|qi@b|Y_{Vn*Kq7+^Gs%G_W_@m`xP>!hL zZw&?&Y0XD0(9XI6oy+*e)$lFo{Qephuz}9+p{-&U#uwoJu@EZ*gG+A)*Xui=@_Jtc zD1~<3e_?$ObR2H$fzqkI-Dw)W-FXV#-W-nIEGnS3J`1=dZFzye_YMyO17z)_$H7M| z9*oyJ`F%R`IY4V~JW$W$*#JuH%||ReI`5;LQF-Y;=zb{2ZZ}W|yw!vi)EF!SEw1M9 z>CX1>=q%mg(OJ6!bQWPV(|=I^%eA{yr1Mbo1IFe@jGe9vIzpGbT9yicZtr;YVyY_x z186;0x9bYemIsT1UUqVTuUK(mU}&ga&QO{KJ_@$;CP=B_0hi8y zp!1Yo1U`iLoWFHCXd^|p?*`Y-XRe*keL8(tfQ<5Gd{GO8;2|CtZ^Rja17%<8PJT)z5gh2R-*BO z^(bh|kqZOEH)jhLesJRjMM>%1ePW;lgJJid+aS9g7#zR3fkwM@*+8qzEWmx{Iu1tu zmN_g8ps~dk6AlK3ea0XoI`6+Yej6O}C;3}tL7SnH%Q!%x;CLS_dVs%`{Vymy@-#eq z-FTpDI6)q1e!AK?u=NpJB{*L-T zpygq15}+CebUvnIbDhY4{#Fn0*?Vampl&HMf2$=UD6I1YTwCAr_nqJaZM6LVS_C?N z1sYO!wfxK9vYrog&wW>`_vd17+!)#!(ih_uB~rfdK1}P_+1`0 z*Y5c5(wVw}zXf#4mt!}?q}R{{^c|Fde=+j6-r|7-w{LeHXb2nRVcC~=L2d@EGXh;E z)E&A5l$kA`^0yoX6R23 z-wWu@ArH_v)h*DKo2aF)5h#0T{sK({cisdqD~BJ62cArP8GQ$oVL@Aq_bEZjf|u{X zV;zw4qxpvdfBz>AaHj2>4;s4tp}^lh4OFK0iiWQi03G!PUzY2_z~I}P#^Ko;rs321 z0G#h!x+OrPeXZX>z24>nEFPAJN?*TZhaAZZ+PCmSfWOrpwAc=^tLDY*7trAC5d8W7 z|GrR2*n#rl!t3C{o7Or`SOi zp&JKiS+c9)|JTBh@iR!iea_#~2ntBhr2w7xUi5#5IHBa>%O~GK(dfXi6Fj?g4Rq8s zs(&?q{r|sD8{}ViaFYuqFY#yNnT9JOQ1;71xbFuOnh5Gl3F0i z%b1cgK$03D$!$MDZij^bJ`-s0ZoUff8-FY3chDwf4wvq1i|$|^k8W$1-UJrV5Uh*k zqhc*+xypFS#qv?n&(2_;&TB8s55ih%{4KM2LFFuSw=;M}A)?XenOtT7s%3890NL}h z9_$8iy#=a{O<5Qi_6b9sq5(P^2{kltgQC3oh=pe_xUNE~e1BgDd4^%1AXM|~EC2t$ z)c*l)Qi8`>uc2k>2|xb-cj*QlY*xF%qw}Uq=f9Vc;JghgeHk3P!wf+6wHBnz$CzKZU4v@ zr!SYAfuZ@BJIG}xE`x19$=@mmIy4G7q+L4yL8|PRncxJ@u+IqU$H`z#FOP$T9bo$y z-m!wJ9|lGS{+454CTJ&N>vK@483ffB1=a|1)P^r$M}a)q@syK+q0{wH417hGu+rnu(4%4AcJ(lsS9M8^A}KMkp>&PKEVab z=FqnJ^2Z>9L1Ut_U{yIP0-dfqz~^Hx0IRD7+u!i`|9?l&wm1F`eoh7k&*oYI2L9F! zTnr4L0|7hl`*!C^^cJ$dsDMZRxz8ZiLv$y7hFa3P<1;8xJc3nfFHU@d$;<<*cNOsI zF5q|>_xb<-37~cyBY!IwE2tf(;n*F<(|NG@AtV3d3;dG~H2+fI_dVEhfWO6_nSo)S z88j$lHZz-S-hx(TYvr& z!urMVDBbx9tuehX5;V!#qW|?j{?H|G#Uup9FXnnJ6e-xNZRVZh8Y)`CDGIGBE4|AGy_e z|3yAT(*gcg*N>ot=muG*3EDi^UBK}o;1Wo%jssM1bl!Wx2#Vo@pu8gf5iN%JTeCj@ z|KIJpVHap7MDq~DSs0y<|L_0*-xmN4`)`6Gia~+)=snn%;F6*YE_&uYT2O+fR2cYMoIr_9 z6r5&3xr||-57aL7)O!3zDr>k+gu71n@ER0S!Vg_#uML6X)W$y#u#f()1>-~0c6UogZIy#b6b zKEH(p%*l6PM}dp^d(6ni{QV0sHA~+i0?+atOcZop;=T}wnJ<*if`ngIzx)3mK3KvB z76S!V$~$l)#j(+kg#k1s(|NzQfYY(FOytEYcz`-UECHv(EqDL_hos`p`@I3|FI-^G zZJ7$15)^$0DotD%7(h!U*B@&BVZ`4LIvn<;&}Wc@1A~j^E62_&pvBWq-~RvaxF6JI zap}#O^xIMMJpcMrE}gYITn+y_GM;^{2X2SMQc?`ep4LroK{;v%sA1{Ic+}PM4}Z(7 zx1dty6|7)+u^!s9qWJ*}IIr`!WH5o+$owrnObiVBq@iK-?=&ckT2Jz~ zhP*{fcl@o(!RZNB27qc9M~DcxtqX1pw{U^V;CY}n4r)Hj2IXvhP@H#SrawQBq#j5z z2Rz7?2Fe4V%>({-z|J|q-*NN}DBG~Xd{_(7==T;i#| z!3eGjP>OQhunQEkV0UXCddZ0yGJ&A{KIn8$)L=6KNy>pFgD@qBN8e0P7L006tV8$zue_n$71+czt3s?-46QW*2!V~I8ZP01qU_Uy(#_;15 zP^xm>u5Pv6-FTRzX6p`WjrrI|5-9)HWUH~;^?%zX3z|4#7g@}Dn3X_=+d zcY{arr_RtF9@*a{Ubt*QxE8eE88YVK(dq2a8Eo>>3)HIk=Ef?(-`erz|NrJ=uAs(g z0N7P8n?WLI?l1A&XAX6{7DSajXpJ7cm1Xrp7$Q9N+yDPNL6!2$q?iBy@3Vqx`g$DX z;g_Jh&i7eD#U4V$Kzng^f>vC-GA4A;K*!kI|y9~6|P#oID zihVij#sB|^^#=PqAf`KZUU|`Q92DK9vE9WIAn$EF1LpcQJ4-NvCy(F1h01d*uKLA}z?bB--KUaVOv@7~AXrn!7S9I4b z@UCdkeeXM%K&tb3f4||wxc9x+O~RwI6|~&Tqt`9Mqq8*wG`T0}EU^>R6!Gc2@6-8> zU$7ZuFTWr&zo2u3$8l#+!<2zv&|8CF&^v=)up5+0jyr==D8q5*3ee2a@n&$xl7WHY zv&T}5e!*Y~e! zodu3L*D&~kS5!oRMS4L?t2{b;9l)3TO$9BA@#&lky87Z+^B$1>$DC~#d^*<#`~~gY zxa-k**t5Hy!=rmENV`wxqZgnxE1(kQ1SmIl_kz_~p672l!NI`rnZJ(Nr}NQg{<>b! z%HGaaACR5hTS1n2bngX)RT}^8gK7NNm|sYMj^FIw3ko!k-mMa#!T!!iFPI>rAZK~> zZUrr80NMHG6ex4{f)-bIgUtl3=K<~V@16>B4ro3^05rhK2=1r#f)c3JS7fcF#^Q1G*RnEU(YSz+iY1bb-m%Eg*OF%4W|LVBnW$Xs{7uD6w)p z)*||afq{Y1qxn}ofBSXN>;Y&rU>Q3D185%xfBzPC28Larp@8OttROw5XCUd)v0)Eb zCqwBG(48qBjlV$MsL~am9r^28K?@WeJHeg;1sG@=6dX8?{MW#8(6#EG)}aibv(rKu zJi4cz0L6-BC6?A66Yb!*4ghyo!11LHjzqztB@VCt8W?=9*?#uz& zZUAu~j`R281Q-}R8jpYyKQyC(mXY(zGoYF4*&Qn2*}=uFX${&b-J03cmBI=+P_?hCpo3-e4uNN~4K1l>8;ovPv4>&oNNyR`zG z;eJ8SV*@S1@a(oZ_F~~WP+`d5S_xVTmdv8!(Yv()q7p1UX(L2B3N+i^+Y4IZ?%8~V z#j&}T1G1Y1v`hq)$$EPyfT+%1P$uK=n+mEwTS0l&qjN4Ok9PhBS?STe6_nw8I)8yp zSAkmo2b8QpmUnLjX@^ORLM;a^r3WoE09jz&3i3!XyGJLO0b1<=61Hpwxf(1CVl*FS z1Uu6*mZQGC8{&>`usc5U*MT+ii-C3U3o^f~gB<1O!oUD3tbBT*yAmEjL))kG8z>Qb zcGq&eFa}Q)@V9z{=Ax2aMI5_b1suV<(%Lw|E#bZ=oD2**p^ZkL&TpSRmUeIb0cyQ` zt4rwa{QzQ}ED3W2-O0k>)4LZ`8iLl+>%Gk5Wnh5Ke}IqqfEHLjo&P{9oL+S72bDpt z0xp&xYJ{4rEyU|?I$9p9Wk2o=8jEJ|O?DM=u{==12jw4kE&!FL9*`{;pmpYb*4zvX zFyUmR1MQ9<1m#GN@83KukAp(+qX+-`^AKNs;Q$?h2il#hhB$Vjdn>pY`2GR5RS0x2 zq$mIS4<4PLJUY3-iCGD>Tob;Y29#U`_}kN2!4(CEM=$TC$>2!?=sASYkOl=mD5xE~ zU0G~FN4oI0EMx=CGR3npF!ToeZ~i6E-wv85^VlWE$OtORp!fN1`3>r*v-9^wf!1p6 zVnC5}V`X3f?aS;(w9C=#10Bo)-Xf-=0;=C~R0MoFr-JS?^yq|a@#$@aB<@yFO7`dl z@4)fsge0rpR!|&zbhd)(FwnXbaPC4->OAk-?W0n_c^rI(1Lq0f)&u-5 z$Gi7}5~yRRi;76=fBrtu0#DHG@GYSA=f156N`xGbyQqLu6Nmv$ZQ$9Qb)YV8H`w2x zVW8GF@W==_gL{CMLH~a-|Y`b?{^YxF6`szn>)- zR0F#(9(<|(1JtSni#Hz>0ax2Eg~4JB%?DXt27@LQAk7_cIpWj#{5_jK#L+i^XD%GwNyUy=dT4VtNYBK50?MTpATMnOWeEm`c>`e!T&-`^$LHifLhJbF*1E+#O@xMNl25N|amTrMO3M%zIU=C>oUBAN#Ui*k?ed~Yz{uof50CDKcOi;5Jvaj3& zA_Om4e|dC*_W*#70?^n6>V3RFkj9_S+w+i*;dm=3SAfdUW38b2i2<4^p;^hJ8?2LG z5S;z_1$#mMdHEMK(b~NiR1|;{3#0~kxe;_j2CVA)|DyKD|Nk#Nz_kw8#~;%8la68d zcm~KUxR1O3{QnQ}@k?pYMSGo7LCN>!(XTLJP*}FU1D)W+{2w0t@Q|MbazW?$7fh<) z6+56357cB4@Zev6=;hCE|Nr++VEFO>f8(S7psAGBWQfQgun4H!Y}o}`S??_H((@ZQ zwM)F5^cijo`0BKKFuOo?qHA}FiiBr(tpuo4k$Cav)Bpdjoh2#~FNMCrbs?!Y0jk<({t?roEg6nmvNY zGqkmVi07BWpk@(h?ZzF@))QFC22B~D)C4ZzUK)c2?VD?P7+od*J2pNCWmm`M_YIEC zwJbdREz(R33_Cy#$(MHDKt(d>hF4g#!KZUB$krF^pFm{@f2%xb_N{v=C^h+XgQZ+S zBX*#Zu0c5!RC|DODk%N%3vLGGQ;;x7Iltg;Q2z`h%K_T$BDfh;WbzB{2IW|nZt(K` zyuczQ71tar)!s zXYeFftpYgiAW_=wE&z!@YtV2%I06H~g9xrHjQp((UqL$@9l_z?)62WPM}XnAD7f7V zI&8?p7F0p=w}7s2>^#Ck5q4XRigu(5e zV=Z7o#!`LI4t$a3DiOwd>E>oo(as9C>-7dl{{143jFUk^uO~yKL|#7z?@)jJ0B6>dEbMt_C|@t}>~`hg-zLzoM;L4re=BGj z!n37igFMrBd$ZIuS^c84!swEXvjL-1t1ozT?dQ%Vjc76wK_VDby=h^Gh%HYv?*r)TC zV|Oj+v_QxI;RgKMLJvAN>=6U|y42M1SPPiR2)?Zw$zAm#jNo;4VDJ9x1bNpaz>#qq zC`EZT9~JSjd|kTK2QoU~)A{-3oj?Eo8=eFWI~@A*|NqPTUqJIVy`Uw?pq5Wx!Jq&C zL75iR!U5%04M=W<4xYgBQBiR0F6HU=RB8Sv&)*L^z>R9lkU!Wb;+ zv~-)TRMQ2MMFLrt3-ocZ^&+4uhc|CbE^L06Qp8g&RTIPvdi z$$)s~C8*j2d+zl+sD&?Y{Q3X?h1Q(s{~bYRI&v6Z>I^pM3@(87lwLmk1d2&j zWr9cN_ZJ+KL1VMbpfc?)c)jrJ$ME(R$UKkM|0U|6g~QM@+&Nx=mc@Z*Nn?MUd}+Dx zIpREQ^z$oV`sZvp5quiYJ>G0E2dC9E&rLIh@jT6185I}m{daDmfc zfocbc0eiu`-3Q>(KA^zvybr#U;-xy3&#(hDU{}J~ z?at%D3SxS6_d{HCvV_;8dpc+@q=)7y(9I^z`#~;aC}Hzp1$6>Fn)ibohQzOTU?}17 zNDepg=oJa_=w-R!(Y+t+IL2cht^Z3WdUSq34k2j#wf-;R_ef^Rv%Y&Q&(M0HgbOSR_D|?>)~k=@LD>Lw^~Z~^5)2H62VxH+?%xY{?7Z$6 z=G%D;G=O{7F$8)xj|b@d5Y~BM^Y~kqfdl?Fe+%gBSWqvaWhv+|gw6-wFRW|;Es_M^ zWDQ#J;M1Ay0Xj>`r?WV~h4X<+XLUm7q2taepz6K((Rat@Ck`IRn?b<_65)3}NHAveR&*I$U)lGpzwnwz5SpeW>5gU5S#EEbc|k!s7JSG z*CWu)ei0lVovig>rT{qcK*!G!`kO(w1IosLl(gP1QH8qee=vtfx2+pUv|HYzQ`Y8@ zJi`n1c_8C&mp(eqYVZg&_XQg1i~V7E;3PPIx^(mV^t!Vco^jIryg@;@@_u8+5LB?2nVp4;T$E zAnh0P=yujHyyVe(pyaMcx5W$4dDMoNS`WaK^G^jWa5uaFKaUA&|IhtQprq9KG#GLU zJZPhNy^u#|=!?$#9-Zg@2Woh9hrZ}M-gyrkxG!D7!t^=o6)kKMKv~(z09pY5%>i^s!73I82E=$TX#dz+&_tX(WIdE`cQ2^n z>d{>d8hy;@_U7masqToibv~z4}O;)ttabFxORue7#?_??${lw(s`}<6eIuY zbKs+KKRI@X$~bnGs&t#QcU}Zbd<4~Z{-+!}ePzBmvnrHGI(CODbn~=#UIU${dycXB zrvkt4HOJ0S1&?Hrc2En{vs>h1vlokkr85VAALz*VZk~1*%Zqgr9rqc43NYk(ME=&N zpe2>fM=V@W_xOR!FQ4ve4##gtSW4I%y;(r#(sw(HfJgm|S;3=z{o0^y6rGQnPw`kf z3zV|CfS4?hO#v@K`wpu?9p%nrtp`dwUAxU)L3__n`~$TivIRir)$#Z30u8@*mkWR= zJ32pjX#Vi%blvbmmj-%33n)Y#yWJ(gM?-;|C9kGM$j@bP(x-TXfV$5Z0TXpA+#s>`|DUiYs&xg zx2|DjV9@jyFa)2qXT%0_z)`RRR)YrDI`4UO9)EFr3TWxlJJ1AM02_4Q(i+gzMd$k$ z|5;$0Dqqe77ZDB&&D9(N{O#937eRoob`o`HKu%a`@bg3XTPA_lkN1Q2C4dJ2OZXv2 z9<CUc?{GmY5|?u4hkmF@lTH3?9D$|OJ!byQa7l5<{QF99E7}1<;w?tq1BPJiA>5zBzC-l<+xzcVz(8EBq}* z;O?$#jHNRVe}59F!P^}z@v{66^86;qT+kTT;+O8AQG*HKYi_GK96__9-%5Hx?d<>j ztxe!W9lB#5s1E>2bw}s?2N%G+po^;;tQbmIJUiVq9GmL|82S4_r95aA!Y)wJ*$rAt z$KMRvUFFm5x&svVhhDVJ0ZqXj1jjw-v=;EG28UkcgM}e`8bMd5ICcwy0s%CoVE|f9 z_KS(XMF_N->=J(~=)4Ed?m_|2?n(|1%YXbWpyO~rgV8N*piT?u?w=e+a29F>9gpPM z?JnTi9nRtS%@MSFeJv>0d;@P}2c7ffp?SeW^Ph+1F%N$C4~7R`3-NE`VFG1zDm|^B#aqA>jIiv zL1We4EDkSgK;tTq`V(YHx3hpx=S!E)N1(%eT)OKlI^8ThIzPW~0Id=0thR9MJoeHP zWcIfs(xAf6Ri-I=;$86j&h9XnlRx}90TrH{b3BcL;Y9)XSsN@rwXaBM!K z@Nyw2b2Qh3_5uZhQ=01z$L4y_wVeST9^Fm~{4L6$0O<_f@c)7bXz>c@oXgJRFV;wa zM%UO?svRXE1VL9k35dId>fivCCA}?3`0*#eI*Y&ne z{RxT_Zw|=hN$2?&SJuHacj$pswu&->Zh?5@)A_Rb6cZ>^eLBy-_y=0O2PqObKvtlZ z`)@&2Dl`fBbiP7esIR;pY`;&pH^)9uOABONJi^kQpdsE?(D*bY>R$IaemkPT-(vaa z|9_qa(1}H$j@@x*8CZ@Co&H)k&Mpc|1W}K z6Eq89cmPyVGVo7<+?Un-gRx#6)Vsd|+B4Js6MUWqxHP!T0IGbLN*r4clstR6^%rP5 zhl#%x)FpK6c4Tq1bZ6mjod@zqwnU*K?I5)2=BVs4k%PbG9q0@rP{!bI0gbpd z|E%ZlzXeVwt~)>*0Xxq_yz09F9B`l`1|qtBH~4h>t^nEb_2>Wp%?BA@FLLY-WHCGm zK0FA#YWcNd>$g%NXJwc993>`>-`qi)3{F54H~s`w2PImLou@m0I3E1XdijBG@@>b? z1MbQ$GdW6+w|*JL#{~s*N-&*$b|NobX zpwZ)QqMYl7>;nE)&`ks{LGyPFj~GiAzLWqN1oD;qPtX_$xV$JaZ2nna9}G$#1cReQ z2NV=1h*Ddsj4eJKLD5wz19HRcAK;LM1Qvg5{{R2~UzYy{CC<_pFYDm@E5Pk#Pta^6 z_?UK|-mMIvq!H@bd3Gmg!5HMOM9^vLjc+WN8PJ#3eD+xF+xoVI!}GW+xD(&)%;VDu zKAF%3a`Yd_DIB2LuFh-VQ8Q34y>lvf$GGM-pU$Z(Kw-uRy1nwliwo~Tg%(7p8?2`F zfMe$o{?-mA&~z+laTkMc=Le6@n?9Y_U@LTddiU=510SaK>HP0;+}Q!tt$V>(1v*UP z2*?F$%nS_O-~~Xf2kHbpx~GDQWYFah{H@iX!y&rCX1H`O1vPzKTc7avPXSvATJ6W+ z)A`Zx5_ksd|BJhzMfcz>1+9lcw=7JR0JYRwW&Zw$+&<2E0Xj8vq1)LajXw!AGvlnX z!hpY}7`$p1JhTAnw|08#9CywEx$}5)1Be3Und8l%zCDQN0qx523py8o1_y*+Bu{w$ zzuVaYsZ*QApBJ6r(H-oO#-DeD~((e|PC#3TmXdw*IddaOvI(8pZ>) z{kl?!6#O zUMyM(O8or&UQ7%OplOBHQ{Y4anmy>A3YxZRe!$fHNP+VLCpbc0dNMOGq)o6c<|)ed z=$;K4H1KG>U83Jz%+dO-^o2*a^@|IA&;K8H237nFu+as$!qV%Iel*JZME=$sP}iyP z2q-7Hbi!_xfh^epwU|Nua_bi>x!#$J#cpQAr^5RK7 zSPg%RJjle(R`8i9o!>w+?x52cI{&+LEm2_7 z|Np`oWF6@K5lHxV_bUAT|DW^X%LcH84A2bn;>cQ1dfN-i@6atmpaC7IEa-&);>oaJ zYP|_gh}8OzbRjRl;BE~FcPZ#bS$@IA77*@Q&;>#Kf~!G$uRrtWm$vW=ZjOLR)lT6T z+?@eor!L_aTwDQRhi>5)oZP_(Dtc2u>zP0E=YvlJ@#qGhj>RuHdj+Ve06I;Vt@!|B zr*lSk>kiPQ{?tAH{{KhKO`zkDK+WjZ|0M!1W`NT7aqzLP;Ia;yd~c&QUZ=VVa5z~2hGE3@-M^8*FW z3!Px)FW3M3|KGWnN9g4%(E4vsgBdisuxU0ZMfZY244hL=*4uPfi|hc6gSGxI73?n7 zY5i8p)$Ofec%bzp|I`DW&IT_*C#gYGH7Nhuw}FHI<ja&!9^_StZ~p5 zTTOm>2B%IDbHwIQs4CCqz{3rcmJ%r8Or0fS~lW2B!g! zZg2(d(c2Bm%pRS$AXBz4)Ruwkj#g0W*#Vlm07Y2~^S}T9cYt<%z5EGE+YlqbJI8OK z8ua4XQiy&~p4923=bVil3J|5&BVeBAl=oY(z=_OVGkX4?K2NK@=`~`5kn| zOHLEW=io)-8o&Pk?*=c`fYf)6dqBdd`Sj&m@Wx|soP*jOtS?@-!wq=w6V&sP`{inQ z($(<5%Y$G4|A&t6ceAoQkpm6S4Rn>zi}MxF|AQ_B0o7PZpq$;!n)6tWq4S<^=L?_CpWOm4a-Ty^JuFf8?6y&P zvF_>r|DYSL!NpMX5sA(lP&YuTWYGTOZW|SkZeIaVb<|yY;sxm5KG3m=B^O@r1&wO_ ze|;P=xC0wf51&7}3YyCXg%H9KpveYghnRt`SY`I?WJ7Y05!gY$ z!47IZ!hx_56y1>a0!Y_m&*Pw6&G7nG+5`{K=72|_bH_kC5y9?!jU2`x_kr##==|={ zdCjBq6zGZ#VV`b?43Fk_j2@i_9YI$|yMQLc5c6lCrF$Wv9-S9J={n4{x8OhcbV}FO z19c{zoqs$)7Yv;Bu)J2p`&!Ad`5j}CoQLJ%VsVe&g8x394~SVg7mdViKs#0fjrrisI*n2RtqBfm^=GBeER$H0nc) zAXydAxb1t-A7S)hy!T=ysQUx*=<7{s6F@htz*^p*`wc+x2lij6XD4`D z3FyX<&!EIavHc*sLCsu9qS*#94{X2YV`v!1g6H3m(+@c5fRhbGJ=}faKE1Z~IiNGL z97BD2bB}=X;1|$!T^b&pp*zqfrd}Ju!n-r}h)1{Yj$NQuf=}l=m(K5w|F5(jC^hhG zJ`P%4yeCJ1!PD}5iGpi)Ig4YrJWL@-lS^mmk$Xd}ZJZmKx9j zNTBtKa=-YuvGoS*Z}=ryrrG==(eRRuWVwV#H|xi(d<-6)jQrc!nqMe%IzsNx?F3ET zfzRz@y@-%M0Fr-w4_cmr<0sq`RNfqO4D(6;-g(~eBq%xhcAg3L={)Sw{Kld)bd68v zDYRgCu@Ag^xHJ&7N;B8L*W|lTZ|Y)2by4fAO>sfp{AHsax>AL6t<<=#ZhVwhVIZcplg&%u6cB`UI2LvJdXQt7pS`5e;?G@ z?{q!z|MKf?FHTiGN7|nSj_=Nkj{MsMT2J~!LAY_JF}Wp!=2U1|<4)4`YALh7Ghr};LL<&hrUtVKxLUcj^! zm!5NNxm|M7v)6&q$MQt+0Z0CA4vftY?%M=|Zg*sr-O9({c-%<_Z!Omf^{8VD%(R_fz!}55EayLhJ0gL6S(pMhctdBSI zF*tS>ad>tzy>v&^_n<`spnA)roAn@Ag%?-_XrG8jw`kiIJ_e6&)_$;8f;c?7MSH+Z zCXm}aJA-6Ax<#A7B2F5folZ6$-K^DMZjgazr;`h~xsFmrg3BLJr{zDW%60*Dq~v~q z?l=El%wc$-!JdnM$^qo!9<1J@o6VzJ)a#}k1OGM#{%tHw9gN^$_h@EgL{<#)2Pi(l zl1S$BZ(~Q9uSS<|1b5iWIUPFeAX1?o-K>|d$uV^P^5``^-VK_C0Nn)G`SgWs?tA3h zvmxa*Xi*0&|6{Wsy?tVMp!t7&xrj$M>#>`144wZwKk{#9sQ_Q81TLSz`7gw?6Eqe6 z*`?cE#KqEGpfr?!o0yN~vtnERZOowcL3R2by~T_m5jBs_Pp`Ql<(H4;qhc}sZCoDB zhZqk&;9xw_>&2+~(b4im{ZnwuBbtBPA;%cdbxDx)>e2bjrxSe8!>4bc&d7n+3y@k! z5dVSQ6AHc#*|+lus0`%r=$7K&#@uqCLf@lXbi;K}%&;&yb})E$yE1t6MnK}nvon?f zRQ`fy4z^fIBw z|Df4U$pfmB85tOKCo(cHASWqs`U5B9M$k?ahH`mucjEhT28RC(r9z!QR2lw*<_91i zZocs!Su-p>g2N9SpWlyxl$Y>=@@x%`c3?%+ECPs<|?9YzlPQ;&T+`o9!(II%;^w-UAv z4UgUc#ttrI7g}R+p*`4zX%iqmJNQBZc0zX7g4@>6OUA!C zhWPcWFa~=-7Vv=Dp{B1BVC9Kpx0?v4o9}4pCQ!l$>J@>yZtq{XeE$F6V}>W=QD4jF zC0?GEcZ+r5l8*nw6gm$%@^53;yil?ao&&+>slmbnB#R*fiihSS9MHT2Q4cD-5ZM!) zAHeZ1Ck&-$2a+=(UO9?xE#1e((^CYv%!h1E`#mK=(I1 z|A3Mg*qhft&1Ue`vAwcMi2@8hy^BG^j$j{m)}DA_2U>#OdHl5y+{hcczji#&J&KwvH1G{U7;{X5uk^F*`MZoa^iv~~} zfJ$c#kIvd1F5T)Lpe^{_c0Qf12Yf(RHGu{_Jv*<1kK#K6x|^W$t54@?&(3qNec|qP z{C)&oyU6}<~RS4EbHlY z-{1U0vV1zoKnD(nl0KN-#}!^TLGx+1>jsz3kD3QTlXWhg3ZUjN%9*l;Ctp8-$Cqd4 zWzWu^9-U8vJvvW!i+gnQ`B)z22M^}?Sl%qI_5k%BZ@kv$muL8POreCc@f6srFBLjC zIxm8jZ8Us+@aREYS=-A*Bkle88mM=b_#;myg~Y-P#$P0Ah_HHl|P0DJX-%(YIyXv zgX$oU#{ZxdjzzK_y`uBd1dx`wdGxX#4dnwZWp!Zi=w)5Ihlk;?M=$G5keEj=>qjWP z3M#$}N^6Gkfz^3J>D^HAOep^ll-~&DpM&xzLiu-~{5Meg2bAXA3$cG8)Lxi=CaAa= zlwJrmXD5_?2&H+U@|@ui_ZdQI_nX{c_p(FfEurF(P?{SmE(fJ`p)^e12+DVZ(wR_w zoltrsl)eb1KSF7kIgU_$K~OpoO6Nl9YAD?grDs6tHBfpVls*VG_a~Iz4i!HJrLRKi z=TQ0wlxEro30E;FeTfUgk9)|?0BIk3f+l6b^T(hp4<5K`d;^-{04;n#?vu?hJmAsm zDsa5jnRW0PS~b2c3J_ z4c6QIL!ZALwAQ)v5U6v(JQZ~KdM8-Qqg%-EwokW_Pj{7oPj?oFNAFb7b+Mq8UyS^H zG2lbvmxAt<_vvhv09n{M)#CsE|1Uw)UuhFudV|?)LGAA{K9}BTF30BI`uu(2;8j7t z^j$iqf|f(__rC*OlhJv=qgND^sP=(oM_f8vbwJ&iZD&ApXaE2I_v*D#Fg);Lw#ibjp3e->P6>SmaVF0g{@nAge$iMA`;ei*unoJDcb3vAXDq46Y3%TCl#eL9; zFrZ2n3k2WZyh@iH2|6a>wO8DFn} zmR~-d#|>}4-~(-@=mf117mi+v` zNAquepKh=cNB;RoeL9c704+!I>3rzXd6<721L)YmbD%jDh-t4S!R0moHfE3J!;Br^ zOZLEBpb{4w)zTOI+ngC~@=63ilCSR~8cZIY=fM&B@5QD(&`jAuAI6Wat#3=+`L{VU zc{CqpYB^B4pI@G#^R$cR<712rF9ksJmGTU}ozHx_!TH6f8=QN5E&n?5Pde(#zwPZy zPz*!U)eb#928LsfOnM&82bt449sj;w26iV@7t{<$5WU`=Ho@@r>zOZ(XMzTgK+|3D z_2Z6^@m|l)Yd)Q)KtujV9YcJQp9OWCDwi<)b1cw0Zb?P?AL*!s-^~0o88ZwwlL5x!_)>2=j}3;0))%2=W|e@DY|wC4+E&-{Q~4a zk8a!MV{!~WozGragOBB^6Y)uY0Uq{z1{#iKeEs5b&h!61mbE)dx5Av<1X?`51C%z? zI+7o}=l@^YLag!WO=fiLE)#LIEE6b|fdtUe z;;7bd^(sD{k9|Aezf=S#dr0OvPf%NKQz zL3iHP-0cn!@aXp70NsCk!z1~SM|Ze`N3V&4XE)1Xk6x2cpd)KNy6ZT6K(~t@e8A$^ z@Q2B`p^q3Lt7~{#m{(wjF zCCAuU5B~MnJQ#m?^ztxybe;fZEl@u%`H~0Yd5F3TAVs}A;viYWOO6eH7^C^8AM#*4 zWq8tq@fU~>@&f;~gRzW6@L@xMpBP%h{L;mJ3KnMz$y9lwiiw*p!>IBeK$|= zjUXYA?prr|cRYtjcesZKWMT}IXQ3?18^xZUoqs($zqlG+a@+|Tl=A7dWdip_S@$Oh zFz|2V@aU~zZ1^c!?%eQ`uRPB)nWw{t@u1!RhoJtENAm$zFl~9G=nAM8h0^H-&DR`Y ze*FkhfAto=a%lMHUGCrfQljCfXL&vUwv(R8JpDe5KkfcMOq&3j%>_B)^=3#p3SQyw zarxQzV+;*K45bF3aV8Z8{#HIF1_ltDlYzhWCul)I^AQb?;|D&Y^=v12BzrJ=^ty1c zzKr@0x_`s7nMH-svzd(%n(sY2f4l^(JA$=mx;+?sc|1LmPeL?-#;w8iU$+M%|9THr zs08Or9#C6R9@Ni2!1NNdP6}pT^8ps*^Nl=`okT311o&HvL5{S%&)<9WkC6>`2gEX&^;Ycd%*tiXg5}IkATeb?G{n-=?vs}ITLhr5-9pWX$~XMD_n_ge&MpYufw~N%C@aPUb;M2=`Ggg4XV}?t&?;fA- z&rs&E9I6aL?)*Hk4QG@4`k zFb*XLS%Pv<4RU%1`307Lt{EP9?FNlsPzb($1)9J9@%k~pJOeD>q(k$~b4b4F^I`l5 z$~Stj@bx%;;1j64Xg*?rREi+-AFll5hm@ZzA&n~w{Q1cXoS!^E=@N8SBGla^=O0-9 z0NuCY0m>hsWiOyecm+zkp!~t~@;*2hfa3#{US6I@@X_+iR36EYIPtVR%phMI^3GQdNWw$4b<@s6x&rVkc&*q~NzMZZgTsuR5cqAVO)lQzx z2N6;@6s*l+IqV*A7ne&!3P*24mja>-1P^j2=)a#?Sn_> zhnI2SCJ+{vvZB~*4q83{%8z;=20TB4R&c`H@7sA0WFRj%hk@b=ls|n}fI0&%ouP<4 zy5$aNHw`3@f--059-nT|-WuN(ptNxgyaXC_-w7mtdUpPYt}XKH1P`Y+ztQmMHuLFL z0vYVFYxOD!@abmv(L4rPpm6XviwFPu%bu1e_*+0#Znx>ZW%3Ljy(~hl-%8j!zk667 zFG}|4m2vRtJPw+m_c-{N#iP^r0C+gr^~8%K@z4K*uDbQ;_C4Uy3aZCEgPP@fO9A+5y9r`r`|?Fn!z<(N;W>xmchL!gf8JpQu$|Ns9x zK7uwgw|ZKhDB%Vf?9<8M(HX!2-jn|_8=QYbJv)Cx8(ZK7LXIKO8F>l*ZA>2Bz7id- z=Rplx{thc91_sa0FP@!OJvz@B9(c_Mu5Uo|Jsy_FYK%O3MGQPTuX`MPZ|}i)9W<@f z{QRHC#a|wb*L{0Me)@JZ`C2|G;VwGo(OdN2!}3_|Im2(Sxh8mkTA7yT>Ww^lS@=Lp zzQFpAgO*f)_5bi-Jnq?R^V6r>-q-Sdi3CW$$A1sYb9Lu@Egux|zLtfw6MQWn6l-{Z z8d%n$5}-3`M1p*KMK1bU{w)>+-)-J{ppFC71orH;Ip~=jB;eWY#L;@GLcp`z+X1q< zUgV+&vlE9$a=3s;w?9ZO)}z-X$g?}x!G(WY=y^~Z+OheS3#k3v9mWD`N_!-md3JsT zod?$lI{c}gzvV9j1A}A3FGffHX@@|0+Jo`DEC04j9*o~zG%vYmp7Kb(v51x$YJUWm2c7E|V_@CMH;2&lm%jYEq%@5d1M0!0S{glfOnqM#~uvmLE zA7}Km{8Jx(M}Kz(7mV>Tmx4 z4@&c`2TG}-7l+N#>i66cY8!Q>S(0Q<+y?G2C%?AuTItw0n^qOiH$uW2wcL2@x zF?e*kPVndk_e4E9Ya4ue3mEygF?e+D1%;DGx5zQiUKbTm68ZsJ74Qf&7v<6I+u+gN z3bv*5oChe(w}R}dHTwqcb_jaPP zt)OUmtp%UoZ2ZN*3_7wXMTdc*@fSlA14D^ux3EX&4UgXF3oVyQb)g3lU-#$^4)92J zcJSyFIq1bs>wKZ*QpvNIpi5FgQ40zi zA4~A$O9^Ovc7|`Khze3$OY?%q!5^Sj)*(=Ia(Hxu^R7qhff5eT!3sf<&p{WkgAxO% z*N!&8>y-rBiUdxU9=)l^%ep~UgJTmMXRtU0-8Etc8Le#PFl1oxXa=o$a9{w%MDuHd z1`CFgFQCwU3F-lZjPUF&WAo(S&*zyO#sm#t%U)2~R-*uoWshc?bN@?(Ji7NnqTlBH zfBsg`NT>%RcqHm2=p+k}Q68W~f*cT@pn%Z4fCvj50m0wG1}fA#kH2t@c>e$8&wu~_ zgUs{kcAenaTgKwrEeCa(M|W)l=)6{k2cEqV7ks-tUU+oIPDu0MuR8!9%+54sVDPZ~ z!QXV*mx004@+W^wHAtk}cZNsj2@lO1pj_1VF$}bMFSO%0GpL~eS}%O7gvF!V`G!X~ zGSK8xwA=)|Q2d0CCa6Ws-zO8!z~FeCfq@&edfM0W0_Z?PhZ~-q4jdkxr#yQd3_LUs zfuh8bU(i9o19VW}mM{i}XTgIs5B|JE z9*mdy#lVMHdvr#;0GDu@2SEmUw4UVeyB`iRi-8B?ybBF*p8R>|K@I|Kn*%!=YM3McHa3r5+kZKr zp=@wydNvvp@~(HnQ6`3F;po=4|B@R@_9H$1w-6g-mM1VB>Yq6Nh64%6`H z6gl4Q22x#msXJ@|D7o;1%D$J(zafdt6|@L4w85wIr$;xWY0$kF6yYzVE`k~*t_`3x z)6#Coz~I?i#{yFWI_&nRN9SH}aRkxe*?f%k#nua;Gs#T{AHX~h z31H9WV=Ru{aerU|?d}W?Xz;=uB?l|BKTyw9r3z|j1X@%0Ia2VG(MzaIikzn6#}XJ7zbhZb-Fq#q(!`nvHK z0~-TF=@p3NOVByvAnlI)`^`MMeJA+##xWUQ>iiB)XWfn$Jepq`*fOv)Fq9~QkDw`W zwuLzA07!;^+X2Qy-Hc!brT1Gem7cXMRN!w}rNh90qW2|OZ|M{VyQ;OAkx{1s2#| z&t5kckM7VJj-Wym(qsYUbIn8GlIE8KDCvP_z6_D_xJNf6VRr^_cqCu;0OjrOt&n0b z;{zz2gL^c#5}BY0#()Q)QpuyU;D<+Nzza|kg(Z7vo_FkaV*OT>k$=BjXDevc z0=Tq+xE3pds#d^4nAP^V0L!^W&du5)&r&SpwqG=KwIivJV2Sj zbq1_<*c`~f0IL~%EH8r!J?9&sqh~#mA?|KIY~a(G{lSM3B>KRk+qJ=?)A@x*H?#zH z{sFQC6a;J@y{2E&K?UJlP%+`ze2g7Y7Wj0BHn?`nIr48~a5pNf+8Q2elGFc?Q(z z@aZ-=;oZwp25!?cyLN!vYT)v!H;fT9j_uLy@6Z__02;@(4rJl)IjITSD+LY+k8VV0 zTWWzq8&t-F7OTgC>ljFIgCfYm102}J51J1!f ziyIFA|G#)#$;$9j;~S)KC!F-uQIg(gg|S_ z_R9T1p#f=?pr$=gDg%c_^aG^S21oz6dCNwYI{f+yo)N6=b|Uel^nc+&IjEe6%W z&?Mp74K5KHJbT?ZFseOxI+1%J2|9Yd^BB1PTWkS#=>$+dhE-e12B5M7v=M~pvIArt z<1Y_Lh3V0WRCGY=-p+s*;N`Zi6MQ;L8(yTH1f559^ku{sNPL0|jc!B}<-Rq@2@I^D z#tl-<2`aZB1s1qyf))fmof!%qodFUaodp^%y}x5OF&<(f8x|8m#bBrFgqNLvU|O-X zWtjO}-2Fjeh0>N$ngFd|O;up^E2164Oj0|B8Lb^-4L`ipbppRUxR28O!T?eQ;;t82 zLG>cIch#Mt0I45AJ*k&#p{*iM{{3vw!WWX|WsZCF@ z3n}rBGl28{B~Qykppq8UGK~;`72>cmsWWy$gM}-9%RvWFz#bkL7>7U+0G!jxuC|XPv<|6&RhS3 z6+Aj`fzK%dUBLo6XX^Ni$7eu0g+02#W`IuT-eB zu?nQ|kmY6mR&~&h0;F++m&e~ja)3{FZi8p9DQCHx+a<4rt3j%VSND7|e-2 zpi7~UUD4aSPO=g?I(-a*ytai2ng-t_SUa<8S>9wjSJn z1N9uCowbsBs82ydk0FQu|My7#;lW(n@VXEb11Ns#LD&cP(_Rfieky=m9N1!L3p#n< zSp;l1q#J4JCQ#bw!T7_+^1lba(+|+-(aRIi9E@V~V}#8___ReF>?m}f^0!u4F)*N6 zcM4wel{R>Ee)h5a2iZ~J+xgm~b1P^isZaM>P@;M*!7tC?+4vLgKUE$g5#^}*&yEzWr0Alj& z{0gg^puH++^AgmO^0oZM-`oJcr!jVd55yO~o!5Lp2hM?4`FVEU@#qGp!`Bhu_C6>p zHG$3`^XUBHYWNMDf-i#3=!Fcdxq`C%KTvhmJr$f8JMX`Ud;wmU)hcfcF1s3h8LxpV zDPK?keuX4{P{Y=x+am&WM0jhY3@C71XZUtL_0fC)sz&>+$$*9eTp?Zi13s3y9iYJg z*BhV|;@g{Q;FDY|;@Rm68Y2Qlgl}i4f@f!~1n7VoXam!yGj)Pzr>lmGWw8K%iy3&> z1hgyQMfU+v$kjIZB!BSgWibbNs2OzNn`3t-GbrGP^$VU>O00mcTAb0R@Gk35s;BU#602LK(0gSMcg1-gS zOM;dbd-p<8GpMxaWswKDrx~0NyJIK#c7B1E7q%~9krUbgE(EH<1qiqh0NLgXS_S#e zxATt=q|NEsdDo}&@@u&Xo}K@EET8i?fzB}Y?2Ut#ZIAhz&!{mlxOO{7fHq^beiH+^ z-E{`&bPvrJ;4EA$&cJY-5z0|s1I!vS45i}_!=nGos{@SwbV9vCd+yBxMd z50=P->c`744hz_vPZ}U|EF3ND_**xECeJX;Sp}+LksB_npyq(W$FtX!36yr5 zW@>=TvQh@Hi^AkUZVzPyHMt%6x0OPjWQA^2Jk%)9UN;usWHV?P=gD}?$MOSzv-5M% zSYzx4kVQV7@M^B}FtkZl6ynia+R(ihG=1plGOxlPDMXTMkNrL&3qqy5u>ix`tLJ@Lah4DJ1ATli5Iy z0S)6oOR0t6k`O7Bd!R}^Kt0;t09J4)uTuw`4-VyhvJ4F12_2N!$^fS*By(I)&4I+0 ziW;_Pj`gHz+#HvT< zO-Nk&Sl2f2H|v4CjBJ=ZreXX|C)JRWV#_jc3l7O6uOCAK1jzyXO@F}A2(D})8_oG! zZDc@84gT^s&jjVyu{5WEnuoz1bBMXvi*^3N;nfqXPHIyTQ}Dp3TRYVX2yb zzuRArPLX4WHM)M+Q$kXHCPtfq>d5=y$k6zRN!JxTfCWQ05(cBFx)tF%(?F4r% zJ;DC(wLJ{d+bMDk;%}sh6W0b$OBWRl{uWN~o#9APX7LCTWuP1lYR&!rs;Nl)6>Cx>6nw}8>&z1E$ zqI60itGGcsTQ4^M;Nov_1W6+&o`{EN{<|VU(0^<0fc@8c2Yl}~Qebhz4FgXYdsw77K z?i2?F5R$`+psIX8hO}%)mkx$XLqZd3&~g5jB0Z2fV5dWR_mPqy0dQXj=18Gcr@04)grk@2JV{L29RmZZQ%Aj*d>tgS}6r`8cu&M z-VF(?V2BUEjZkY)nrV6gcNWB;6wm@1NGB8KN3?(shnnRM){5lHvU{NG#z5;hK|>Ir zC7EqdoJ86kHRh-m%|0$Z2_@GX5>=pyhW~5e^66d*S^)Ao(2;-fM;HG6-->x*%ep+f zU6>>sy9;z&_!ob3;Gc91bjAs<2WW})!G|oK-9B6r9-0R|drNp3KyCcy&Abc@&4(F5 zFhzICU)@!ca9vW%Q|K#i19Gf39mY~_n zzpX&0`5EKu9#GZ+&Fy+NA7kqLXt@=%h=sprJ$PUdyrjT`fB!+yQUuU8G5(ex;4%iX zrlp$&bb-o${uWbk6AC<$)m^WV2D+K1KTCjtfq(IL{w5P)P|Al$`s;x1V4HNX=d1xN;?DY`^ok_;ud>FkjZ@UFa8sKXUc7mo*pw8_L1dZq* zC+ujLQc#x@T#LU1?JI|RRu0+_YVhc;oq*b)07at*|Ng_EHkD5=3+T{O29M4ko|eCg zZ4AHh??3%ofM1>gG(OGTe2mf4@=&oVbe#Izv4+y;kcCgB&p`?vwSFt%XnqG$RCL>; zdnL|8@;YeP-~EP1r#pv7ue(8Kyui!t;A4A1$4&Zz*NT9>2+4x3{M-3F zEl=?`zXj!?&J%|J9r^cve9fOW!LmT0lo`A%7?(c^1WF&Z{x9KZeh=}7C;$G7KAIPx z%bI+8Wv+rx&jc;ig0GYJ;9q~pt5-(eqmvmjYk2}Z2C!BEGzI`#91%TEjH6JtpIi}Nh z0(6bkF%R(3XyElD(6JzJAEgsK&-{`F+U5fX4rqEGdqa4-JiH;?1e(%9nrDGFguxjA z-UtRS>w`CfyLqmITfDtI*APDP=oa+o4A1~|^5E0**E~7}!OH|XT|qlz-IzRjZGU+{ z!vfxhb?kQI08OiaQl@J+A0$dWd);^(yX#m$Q!0>^0iM0i7eHCa$MQmvw@W8@{KN2@ z;U(YB7q3-e`vn?*g4brWq;N1WSYGFE$>9L4b$ej|(j?Z+(fAXzuB7xPXgNspD@Gs7 z3&pP-;r&(i>yYf{3MvNOSPXANyAYt`)cgK(gF0%Z3w%3&dUhUl?Y!>OxfDDy(>)iI z?xCa0KHW<}MdQoKpgXV@ALQTvp;*8JG|B>6aLer4;n5u+;n?l0!@u|g|D*#g2TBCI zds!Sn^FvKWlN6?v4pUz&$ z*jVX;7mttr|L@Zc;dg@-fmSiZa)S$0M^HOmT#^gR{fl`}qZx{i+`9aoTxKzSCF2cW6W5jv@eJfrxU3%Y*Dqw_*z#Rbr$ zqDODQh0+g}UIL}BK@CI?%ZeBLt@c+zH9WWj$-j-k#*V-Jw*Ui!jSYX>KhQy5&0rbU zmlDt*0oe?i!UrwGf!dDTZ8iaQ+jqi>F3`;|+TcDks8x6H7fWXZ=AHQQ2zvi{8I$?Pvr~# zmNG5y;6xacN3ZEl7trz|un)lF1l=On{y&1{e~)fw2UzRFu{noHfbnJTWpE=Jvft4W zu|i}kXcabep~#CZa{vFo*dNZy@RH>U@_kVr-QFKOl7k;Ws{@Ztp6jq70kEj|50FrI z@B)v{!!LhchVN4a2OrXkgqbW@(-CwvLT3PnXKxs2vnObk(gTmqiWfee5g#Cnr(7qz zJoW_a1@L*zJ}L#UeBKGp=f2%8Dj6Q#;GL!SMh)Av(bWVYxHR?&l6IzxZ35 zKz9G~>3rEC0IFntAOr3F(_f&*PcNtd@&zp@51ruATROv|x3&Z7x)=XWfC@$M5ILwc zyag_Od?&mN2ARPR>Q|x1(@$m`@dVE6pllDy@0}GdJV5aUi9Vmsgb(0FE8w+mt`lB5 zJ_iLBcpr>sw;wFJe7oJSMboW);H%mAJKjG7kNHEQMDvy>|N5{555^0ysBwdZ4kTut z8bD)a$1~LM@F)PCvFq7+)TeVQq<#Wd3Rt2jVIL@Tz>2_8ln(AB?*;YfJT?FM@~DDgr*j(-epKh@D%Qufe`_V!96?9G#gJ*AuN(N{>R{|`38-ivwL3c>?UjW^$7NP<^ zT+suxz@RM!v>C6tMx}s(zvV0sX!YC;kMEE88#Ze*FnEC0rGv)c>OCwE@i#5dW?(S9 zy@H*8>S2$AFPOmxb>DxHA`Lof-9@DWvj2#`r4ppG^QK4VEyHgw)Ks4Te|hx$|Nj%3 z4>7)+^Bv?}NcjT2kEmr1F9Sp4Pf$~kzZG<6mPax;7F@bL1X@q>_ho+n|KGPa$Bzfv zZ1Cvr1tqZ8oIaK>`CDuRK*zl8Hw2x(;cEG@^p#IHc&f~D&?y4w5^2ZI zYmhPwyqNmj#M-r?=$2>aeTefMd)@xKbbivj!FT|4Of|UDu)M|JstVe4CJXAfK{vC!TzVEu zID7zw!;2k9U;*$SJlF$TtzFyj@+#;GzT++`;LCMiZU^fxZSb%xkl=5*p#o}rxX$o_ z?k(^EHHbQIxO94hPAoD2)muKA7mhn$04)bX+6U2Vd)roy0ov3*g zL;e4VzeSr5)FTJ4RC*bD8&)rPbUO%mKw8eA!qP+Y11L-PWr{H{9A^VHi9zcqOTn{} zZZ|wS-8ej&j~RfL*}s&!_W!@f4n*aC+Cw|G!vnJa_l5`m{^KvzZvFr7fnNQ?7T$XB z??3O^dF`dpwg3OE1^IhG7pg!PXf;^4@VD#-Pb9d`0JR!4A#JK7>d?*yWTV9;PfPGd zi{Kj`ouJ!&LmNDr4;y%NLmN||m5sqKyn98;Kz(V@(ninj5+MnX&gvhawYi{>fo}f+ zUGj4r-0;DcoL_uA1dB#{@SJ1pgqJg~{{Qb|`I*1jUI(;!_v_1>PyYW$q#ReYl;Z+g z_4Mk>|Nk$qih@?hg7#;3yDo6;{N)Qec4{rCF%C)3zMWrPJFoe4gL?>|RR*wCCQ{J$ zn-6^T1UOxHgATY!b{4U87AScF-s%WC=@ZK7cBr|NMQwR6+G0 zWbqx^%1Lm=7x4fztpRE=JNQ6?9kxpD_^JQ@Usi)`u>8T_JpBwPWdHLw^_}_uA2g8M zB%%P>deg)WVk95-?L6>4}IlwW6mq)X%qTbC22~8;v4Q{m%}c?9-bmerUnkHV9Un@6*210(VZ>X&Cug09_jQ4!?eZ{Yt&GxO(Hh!ehj|72XwX&bQa6i@Fda{*2zPV2894<1d%be z;br}4kRiy%mVu0&;lb?M@X{V!TOzrP3DO?v+jZgpf6x(#BFrA0H(rB=F+icq=wW$* zzh&Nq|Nr^7fu{dUp1)l9=>Pxj22g8nB?AKkBY*3(XaD~@@^1@eX!vEx-`1zjz|j24 z5yWoq2CZ`i9U|oX|Nnnx5B|j$`J2l@r6Fjh#q+}d|4mLIJ0Foc&&;@wG0^n)6Z*9#GZ|Gk~ z_Qp;%m^aGBJ>XsdjmU$1(PVNR&5GSeK?0~Ia$Z9=kx2z+B7ggTP-h)(DkNZDgT#=% zmT?qXD2RdU6xehE$PFlqTsx1yU|j@B11%>(u0Zm+3fNgl0>bD5Oy~k1kAPY*?=j~B zK-;*L(JeTPM|Er3IW*@?Jp%R8a&Ym3&r3!N!Cq=nLN_Du2wM7cdkRWD;-D1Q_6f9# z7@GRtg8~#SkZ*&;po{D+zw@^oISWsO9#6rs<;nm`hW)Ax49$>axDZshp(Vp!kQj1Y z?KuoehM@E1kivR7Xi;tF3024@cJN*1twNxd5z@AG@NRa{-gU-99-WX=E;~azJbIfL zK+9}8!P{wHUN{H}N369x_wN7yK?fo8w@w64NV!gUnScKO|K=AiHq88OpjBF=?8$B3 z3)-d5P{QNU4Q9RABMaY^3pz*WWhx}PJ$g+9Udw^TF?z#6-FQa+Z65zY%XqB#`CGq& zYM;*Q9-W^&!0Qm|Z^2pv;;794{^l#kz#AJppiO}Xh^D~dX|SfiRnP|K43AzL2aki# znP2SU1NBrO+cB|gm z{Oa3z$EO>-4)A3pxClUst)B-$m5Uoo>m~j^6HxTOV)W<@31au`H4%f=F`XY@dxQJY zp1ts8OSOy+78Q*At%CC4)l5vFU;wRVVsfx3VB&9mDF+q?og~N%lJWo@F*Efv$lq5T z`M1?FI9OPeY(Oc$@*yta0QH>KgQkcMa`-TQ^ni?hf({CG0F7ya!yUAY25e#`0Ud|S59^P81>NuAApz@?b%KXyJzBr< zw@e1ldAEYbJbXKkdUk$rfvnQ=)I8wR`NK!^g{S2K{{F?vpay*I3h-iJKXCp78{yOW z!tl~-X^-ZEV4r}GE8*W(@!!Fs@;`rT7|3kPk3|n!E|su&bh@ta=mueMi2-V0z7|GJ zOU0_#o0Qd4py>$I?ku_uJ*@ze1|XfJW1s_wHXj9DD}0Q_sh3CVwG84!63^zN;H65A z7OwyKTW|3)Fm#>*ZSM8y{N~wwjL}8&RqLhtTd?HOYszB?8ts3}_+RB1Xtf$BElDXd zFf<=x^6WJUgQ@HM_}Ub*uO2BKl`=Y56fp9)g8DF?y`iA{-N9)I9KCS|P!r5?lo+<# z4=Nv!(y}hPfDF0-H@d*DeV|bVAC&^on3_-LT+mnwbPxqP>gCfp6&%%&@i*}J^$VW0 zpfMG&VxMlXvuUx6lPnq6_Rm7g&xiFb!Rx6 zIw7FfR#XqP$u3&~)RP5o(`5VrPwURuHix2h^Fh|bgT7!7C>oK1J|11b4_&|(EC60N z0a`4JyioR41*llJk%JDwfEqD^=ppuRH^@d1_5L*4`lt!UC@jLWc`c>k_~8UXoP2gn@6pa z(DSho$nfODu)d}$C}cX1`+z#BX<)Trw-a)7ixpTcQY75k1?u7c;BTII1Qa@8Qy>mb z5CjeWKuTuZ4o;d5c5q7&SUZxzjk}nAvd{svX%%u*P$#%016sleYGy%?BcSOKTHU0kZ;8(||h zy^w4;;bk*8sbW*@(>eD7=s>2pbw(16I{mAk~LK9`6tVd&BF2Ud^1xVH}GwG^03K^ax3r z&}0ctkI=*kN|v7d>rX<`<2R3PaMI`RPe-ICNO}Zkg;#6;|3_HVdZ6jaUqcE(g`m!!Oa+~s=Yy~ z!Rh=WI09?IIrZfu@Gwni1OGOz&U2R^I2?G#>cGG4o1-$zHvZO=paH;SH_$GwIcjnY zpkX-`(7X+FJiONlJV3_3joqiW9Mlp;Dc6Lyg3CKl76uJTBDbZ!Z^4y@p%eQr=B|O2 zP_My-J}4d`haVlk57LWNtgiwahTR7(5>OxDce+Qf?H*Ooc`nDXr%;zp@GQ~`cDSoT z!LEu0hoK8(j_G9yxK#+N+(Dyk=^dax0eCp94LqI!l|1JID@>ss6!2Ugzh)~auwEE; zfC3I&N~ZDWgToLd3x7-C80-0y%?gh3!UMFg0<>z-NAr|Nr?6)ybL)TpzV1z+VWGXCDKb#D z0iT2D)43Fs$9%fif|dk1g6_Hn56Js;Llzo#f=^3%UFO*BtHHncpdmzNG3{{MIF zc2NOuE^IN}5AAq@7k2n`Ui0ic2<>=6(=xPXh803H=7BRJX!Z$OD?|F6{2kB0)st(3 z2c#M5q4|Tz4kxcL0|U6jxnv*6X+9vQo#byZ1}`B2uQUOj4qf2cc@XLruv>K zD?CtA37Y+HS<1}7;Mg6oz_Zt30cg4kwCc1}5HjfqJFO6UQlT2`fWi_U_yL7dp!Kf3 z5f?z(^gxl>c>}uY^^!+-g@Q+NfPhD*%|(yy3Joax+Uqm0gY>K!O1|)Kb6DWpdH!Yp z22jL+O8{sD`hf0x0k1~^haWi9V9|JS4oEe)_JG#GuxKpV4oa~Sl^UTFMT zg0#ZY9ysFgIl&L76LP_=bWq%Z`*_5sr2RZlmuQ1c0GIFJt4sd9_|OQhb{G%8+ya`R z!N|{rpaUv z(+$jA3=D`#49IlDdrt6xp)12~&}u)>n0F(n3k4tOZhqltc+vw>@ETsSvEp~S__Fgn zPOGc-Agqq(Ls-qriD~su4s@%n30hsf2b2}uAR}VErb}c&<81IEaz6Y^97IQ*9I*IN}hKIfpg8~HUIy6H2bjpV0if$ z)KoznzKT*IMS;wPt_pzF^)D}hr~koS@7EZE>+GDMN&cf)2G`T-K`GIP@x|+_D0X~X zh331bU;%Ji`_=%RCv$~N_d(`K=JLSjNh(2Y9eDBqr<~?gkQj3KO;R)`ra;E91= z({oZ_GgzTzJtzr7&rO7f+2nU1ha!hrG$IPVZTkNoE!>(Pfy9ubKyc;%|M2xjDAE6Y z1!#!p7Ju_QPk4gck`l)dIU!s!Xp?Tb+8(j5(xCtJhQ!l~eq%VFi z`2Rl&YFp&XiYuTHxxwE&|1zjb0?!;lw*i5d3L@X8Cc zG@tpO-}UF~UXSk3j?Tlrop(IQIcpYj=)_vK&;{X5VS1t{|82Q_e zf?F@(?zkua{xD|nYWZFf@D3mFilmpbK;urxDQo*OXiE;%FmfSw3gP4w(E0}OfDo(! zPzCNUgC~|?Cyf$4cW{CoS^=Aa4M8fZC6f4k@%P;K)5`Tu|Z)<_AM+14<`CBzJJ*Wx{nDmC;PJW5+pp@VsHNc|8m-22(P{K2FMFYp~E#F zIT8z494*RNN^DWugU>;Cfp|6i7ZOBrYY{`2U( z|01CX)C=-pya8Hf+2RQ(4o)y|QH{u7E9c-9w^M+sg{A~+BZdvmIl+h-D zM^-^iv-AAhPQBbS7Zmco9Uhk8Yz)f=JSrZVCyeOLH){)7xWLZ{?Bx+^?hZ0-S1zqW1#6+MvY zH$=bW-yD#;VFkp8IiNCtnStTu_ur7Poww}&|Cif8LpbH1{{Md|y%02b6WZa?{NodU zE9<=f|6fi4Rgv)6WPZ7E8ASaQkowo)yhvhMfOx1c@)XjBnaFC72> z2%eU1gO<>OZrFsxB7X~{w1rv+vBZ;qJtY2KT7z$zb75cz^#twNc0_!lTo5hGVx=O7jmE z{uVAq1_u8A_Y9!UIAik>bb-vw;Kv$aibiVNHj`Hy7JmsVL$V2mj zhvl&%B_GgY!_H&iOT%9Ibox#JUoDgYX%_lU@aQ}SI!UK#DX84+JONVR(fP?o^MMcO zzL8GXj@Js1bxfd>;X1#8a@DQ^P}y(@wBVpA4|LHw|27sC3#QV$psi<~y)`O~9=%?S z9+t<8H9fjrJ3JUKycR~Rw*p;h3q`TvrqKAoTwxc`ud^3-x>yTu;o|& z7GDsfyUN40+sOiKbm#;R$hAn2la@R>OFLd@OaYe_6F}3yGEfbm&Z|%7H=oXzFFNxe z(%{bDG5%KdzyCoK>Q;;l3~3V}>FgNz+_qOfo!=e*hp2#3X9F~4HV6It|NkW$-2Xn^ zwGBSq;8NZLv>^q26g=pHzt(U3t)Oe&4G+A00NSe#O+TQ>YYG6D9Hkvdntfn*pnL|c zbZmY1@BjbTNBHF#e7cu{E&%Yf{8AF)*e|3-n)toY?uu zqtkT)NF^kQLOWhaP6pKnrQkVAQ1F^VE-!?nXV31Y4WOh1+NW;j(Rs^Ldlslr0Eg{2 z&~jSHL6jf^Jvs$EI&XPEw&Qzr3cpau0i_CN=zvY=i4+fQ5%9gpr9vJU7YV;mdh_gm z+61Kg{y?{~pM?}oJHR~{R|${Kt)TMq_F4&B44^PH3KAn%dodlYHFqZg&vW2JR7yjlOAYVcP*~ju(agj&oXV1?6pj!k% z$&SIZJKUq&Nx;%c1hf{pbOxwo*^mXPuMhiJJ}$cF+xgq$ICvZkbY2B$VQ=SJPy|EI z`E+cqQAuIvZx?3=&5gLIqt81oD;TY5wM)Am8`8Zh&5f<W$z>$<|H6Fl+i+xgVD^9s0p>-L=h z8him4JCC~ef;NpnOP*6~kdh~a6?6>A1W-tW_E%e88a?Zw0y8xAUJ1|F$J;paKS5?sS9qa+MnRTD~i?Gz4En2~U3ft+Jr` zhsGnIWQB5d9_T)%TRxrdd^*3sxRe2kUC^P9ogaKOe}Mei7sm!VT<=}c!q;n{`^XT% z-Ms}IX`sjhMH*;q&%?FbMVv|rGp^B$KTt_k+u+-sqvGM)yF~@00@O2Vwg<^{ zrh<-__3eD;)15oxwJcKo3_1(%wFke`4X|R+<+c3Vm>nBzSQz+Q`#|X^*-gaJ(oLY` zst4$5!%se)?_PXQ14XR|13S>_MFogbk20<=}SN@-rwVeAFmX)laRrl9DIzNEZ5hy#gfJa7}-!p