From 2c82aebd60f7da08a4d6ff976e6d99f97c44a4de Mon Sep 17 00:00:00 2001 From: MCorange Date: Tue, 14 Mar 2023 21:50:14 +0200 Subject: [PATCH] some docs for devs, added a few examples, implemented syscalls --- docs/linux_syscalls_x86_64.md | 318 ++++++++++++++++++ .../x86_64-intel-manual.pdf | Bin editor/vscode/LICENSE | 0 editor/{ => vscode}/mclang-0.0.1.vsix | Bin 6117683 -> 6117970 bytes editor/vscode/package.json | 4 + editor/vscode/syntaxes/mclang.tmLanguage.json | 2 +- examples/hello_world.mcl | 18 + examples/rule110.mcl | 1 + examples/seq_100.mcl | 5 + src/compile/linux_x86_64.rs | 71 ++++ src/constants.rs | 9 +- .../{linux_x86_64.rs => linux_x86_64/mod.rs} | 53 ++- src/interpret/linux_x86_64/syscalls.rs | 13 + src/parser.rs | 8 + test.mcl | 19 +- test.py | 3 + 16 files changed, 516 insertions(+), 8 deletions(-) create mode 100644 docs/linux_syscalls_x86_64.md rename x86_64-intel-manual.pdf => docs/x86_64-intel-manual.pdf (100%) create mode 100644 editor/vscode/LICENSE rename editor/{ => vscode}/mclang-0.0.1.vsix (94%) create mode 100644 examples/hello_world.mcl create mode 100644 examples/rule110.mcl create mode 100644 examples/seq_100.mcl rename src/interpret/{linux_x86_64.rs => linux_x86_64/mod.rs} (69%) create mode 100644 src/interpret/linux_x86_64/syscalls.rs create mode 100644 test.py diff --git a/docs/linux_syscalls_x86_64.md b/docs/linux_syscalls_x86_64.md new file mode 100644 index 0000000..4fc686e --- /dev/null +++ b/docs/linux_syscalls_x86_64.md @@ -0,0 +1,318 @@ +# linux syscalls + +|%rax | Name | Entry point | Implementation | +|-----|------------------------|-------------------------------|------------------------------------| +| 0 | read | sys_read | fs/read_write.c | +| 1 | write | sys_write | fs/read_write.c | +| 2 | open | sys_open | fs/open.c | +| 3 | close | sys_close | fs/open.c | +| 4 | stat | sys_newstat | fs/stat.c | +| 5 | fstat | sys_newfstat | fs/stat.c | +| 6 | lstat | sys_newlstat | fs/stat.c | +| 7 | poll | sys_poll | fs/select.c | +| 8 | lseek | sys_lseek | fs/read_write.c | +| 9 | mmap | sys_mmap | arch/x86/kernel/sys_x86_64.c | +| 10 | mprotect | sys_mprotect | mm/mprotect.c | +| 11 | munmap | sys_munmap | mm/mmap.c | +| 12 | brk | sys_brk | mm/mmap.c | +| 13 | rt_sigaction | sys_rt_sigaction | kernel/signal.c | +| 14 | rt_sigprocmask | sys_rt_sigprocmask | kernel/signal.c | +| 15 | rt_sigreturn | stub_rt_sigreturn | arch/x86/kernel/signal.c | +| 16 | ioctl | sys_ioctl | fs/ioctl.c | +| 17 | pread64 | sys_pread64 | fs/read_write.c | +| 18 | pwrite64 | sys_pwrite64 | fs/read_write.c | +| 19 | readv | sys_readv | fs/read_write.c | +| 20 | writev | sys_writev | fs/read_write.c | +| 21 | access | sys_access | fs/open.c | +| 22 | pipe | sys_pipe | fs/pipe.c | +| 23 | select | sys_select | fs/select.c | +| 24 | sched_yield | sys_sched_yield | kernel/sched/core.c | +| 25 | mremap | sys_mremap | mm/mmap.c | +| 26 | msync | sys_msync | mm/msync.c | +| 27 | mincore | sys_mincore | mm/mincore.c | +| 28 | madvise | sys_madvise | mm/madvise.c | +| 29 | shmget | sys_shmget | ipc/shm.c | +| 30 | shmat | sys_shmat | ipc/shm.c | +| 31 | shmctl | sys_shmctl | ipc/shm.c | +| 32 | dup | sys_dup | fs/file.c | +| 33 | dup2 | sys_dup2 | fs/file.c | +| 34 | pause | sys_pause | kernel/signal.c | +| 35 | nanosleep | sys_nanosleep | kernel/hrtimer.c | +| 36 | getitimer | sys_getitimer | kernel/itimer.c | +| 37 | alarm | sys_alarm | kernel/timer.c | +| 38 | setitimer | sys_setitimer | kernel/itimer.c | +| 39 | getpid | sys_getpid | kernel/sys.c | +| 40 | sendfile | sys_sendfile64 | fs/read_write.c | +| 41 | socket | sys_socket | net/socket.c | +| 42 | connect | sys_connect | net/socket.c | +| 43 | accept | sys_accept | net/socket.c | +| 44 | sendto | sys_sendto | net/socket.c | +| 45 | recvfrom | sys_recvfrom | net/socket.c | +| 46 | sendmsg | sys_sendmsg | net/socket.c | +| 47 | recvmsg | sys_recvmsg | net/socket.c | +| 48 | shutdown | sys_shutdown | net/socket.c | +| 49 | bind | sys_bind | net/socket.c | +| 50 | listen | sys_listen | net/socket.c | +| 51 | getsockname | sys_getsockname | net/socket.c | +| 52 | getpeername | sys_getpeername | net/socket.c | +| 53 | socketpair | sys_socketpair | net/socket.c | +| 54 | setsockopt | sys_setsockopt | net/socket.c | +| 55 | getsockopt | sys_getsockopt | net/socket.c | +| 56 | clone | stub_clone | kernel/fork.c | +| 57 | fork | stub_fork | kernel/fork.c | +| 58 | vfork | stub_vfork | kernel/fork.c | +| 59 | execve | stub_execve | fs/exec.c | +| 60 | exit | sys_exit | kernel/exit.c | +| 61 | wait4 | sys_wait4 | kernel/exit.c | +| 62 | kill | sys_kill | kernel/signal.c | +| 63 | uname | sys_newuname | kernel/sys.c | +| 64 | semget | sys_semget | ipc/sem.c | +| 65 | semop | sys_semop | ipc/sem.c | +| 66 | semctl | sys_semctl | ipc/sem.c | +| 67 | shmdt | sys_shmdt | ipc/shm.c | +| 68 | msgget | sys_msgget | ipc/msg.c | +| 69 | msgsnd | sys_msgsnd | ipc/msg.c | +| 70 | msgrcv | sys_msgrcv | ipc/msg.c | +| 71 | msgctl | sys_msgctl | ipc/msg.c | +| 72 | fcntl | sys_fcntl | fs/fcntl.c | +| 73 | flock | sys_flock | fs/locks.c | +| 74 | fsync | sys_fsync | fs/sync.c | +| 75 | fdatasync | sys_fdatasync | fs/sync.c | +| 76 | truncate | sys_truncate | fs/open.c | +| 77 | ftruncate | sys_ftruncate | fs/open.c | +| 78 | getdents | sys_getdents | fs/readdir.c | +| 79 | getcwd | sys_getcwd | fs/dcache.c | +| 80 | chdir | sys_chdir | fs/open.c | +| 81 | fchdir | sys_fchdir | fs/open.c | +| 82 | rename | sys_rename | fs/namei.c | +| 83 | mkdir | sys_mkdir | fs/namei.c | +| 84 | rmdir | sys_rmdir | fs/namei.c | +| 85 | creat | sys_creat | fs/open.c | +| 86 | link | sys_link | fs/namei.c | +| 87 | unlink | sys_unlink | fs/namei.c | +| 88 | symlink | sys_symlink | fs/namei.c | +| 89 | readlink | sys_readlink | fs/stat.c | +| 90 | chmod | sys_chmod | fs/open.c | +| 91 | fchmod | sys_fchmod | fs/open.c | +| 92 | chown | sys_chown | fs/open.c | +| 93 | fchown | sys_fchown | fs/open.c | +| 94 | lchown | sys_lchown | fs/open.c | +| 95 | umask | sys_umask | kernel/sys.c | +| 96 | gettimeofday | sys_gettimeofday | kernel/time.c | +| 97 | getrlimit | sys_getrlimit | kernel/sys.c | +| 98 | getrusage | sys_getrusage | kernel/sys.c | +| 99 | sysinfo | sys_sysinfo | kernel/sys.c | +| 100 | times | sys_times | kernel/sys.c | +| 101 | ptrace | sys_ptrace | kernel/ptrace.c | +| 102 | getuid | sys_getuid | kernel/sys.c | +| 103 | syslog | sys_syslog | kernel/printk/printk.c | +| 104 | getgid | sys_getgid | kernel/sys.c | +| 105 | setuid | sys_setuid | kernel/sys.c | +| 106 | setgid | sys_setgid | kernel/sys.c | +| 107 | geteuid | sys_geteuid | kernel/sys.c | +| 108 | getegid | sys_getegid | kernel/sys.c | +| 109 | setpgid | sys_setpgid | kernel/sys.c | +| 110 | getppid | sys_getppid | kernel/sys.c | +| 111 | getpgrp | sys_getpgrp | kernel/sys.c | +| 112 | setsid | sys_setsid | kernel/sys.c | +| 113 | setreuid | sys_setreuid | kernel/sys.c | +| 114 | setregid | sys_setregid | kernel/sys.c | +| 115 | getgroups | sys_getgroups | kernel/groups.c | +| 116 | setgroups | sys_setgroups | kernel/groups.c | +| 117 | setresuid | sys_setresuid | kernel/sys.c | +| 118 | getresuid | sys_getresuid | kernel/sys.c | +| 119 | setresgid | sys_setresgid | kernel/sys.c | +| 120 | getresgid | sys_getresgid | kernel/sys.c | +| 121 | getpgid | sys_getpgid | kernel/sys.c | +| 122 | setfsuid | sys_setfsuid | kernel/sys.c | +| 123 | setfsgid | sys_setfsgid | kernel/sys.c | +| 124 | getsid | sys_getsid | kernel/sys.c | +| 125 | capget | sys_capget | kernel/capability.c | +| 126 | capset | sys_capset | kernel/capability.c | +| 127 | rt_sigpending | sys_rt_sigpending | kernel/signal.c | +| 128 | rt_sigtimedwait | sys_rt_sigtimedwait | kernel/signal.c | +| 129 | rt_sigqueueinfo | sys_rt_sigqueueinfo | kernel/signal.c | +| 130 | rt_sigsuspend | sys_rt_sigsuspend | kernel/signal.c | +| 131 | sigaltstack | sys_sigaltstack | kernel/signal.c | +| 132 | utime | sys_utime | fs/utimes.c | +| 133 | mknod | sys_mknod | fs/namei.c | +| 134 | uselib | NONE_NONE | fs/exec.c | +| 135 | personality | sys_personality | kernel/exec_domain.c | +| 136 | ustat | sys_ustat | fs/statfs.c | +| 137 | statfs | sys_statfs | fs/statfs.c | +| 138 | fstatfs | sys_fstatfs | fs/statfs.c | +| 139 | sysfs | sys_sysfs | fs/filesystems.c | +| 140 | getpriority | sys_getpriority | kernel/sys.c | +| 141 | setpriority | sys_setpriority | kernel/sys.c | +| 142 | sched_setparam | sys_sched_setparam | kernel/sched/core.c | +| 143 | sched_getparam | sys_sched_getparam | kernel/sched/core.c | +| 144 | sched_setscheduler | sys_sched_setscheduler | kernel/sched/core.c | +| 145 | sched_getscheduler | sys_sched_getscheduler | kernel/sched/core.c | +| 146 | sched_get_priority_max | sys_sched_get_priority_max | kernel/sched/core.c | +| 147 | sched_get_priority_min | sys_sched_get_priority_min | kernel/sched/core.c | +| 148 | sched_rr_get_interval | sys_sched_rr_get_interval | kernel/sched/core.c | +| 149 | mlock | sys_mlock | mm/mlock.c | +| 150 | munlock | sys_munlock | mm/mlock.c | +| 151 | mlockall | sys_mlockall | mm/mlock.c | +| 152 | munlockall | sys_munlockall | mm/mlock.c | +| 153 | vhangup | sys_vhangup | fs/open.c | +| 154 | modify_ldt | sys_modify_ldt | arch/x86/um/ldt.c | +| 155 | pivot_root | sys_pivot_root | fs/namespace.c | +| 156 | _sysctl | sys_sysctl | kernel/sysctl_binary.c | +| 157 | prctl | sys_prctl | kernel/sys.c | +| 158 | arch_prctl | sys_arch_prctl | arch/x86/um/syscalls_64.c | +| 159 | adjtimex | sys_adjtimex | kernel/time.c | +| 160 | setrlimit | sys_setrlimit | kernel/sys.c | +| 161 | chroot | sys_chroot | fs/open.c | +| 162 | sync | sys_sync | fs/sync.c | +| 163 | acct | sys_acct | kernel/acct.c | +| 164 | settimeofday | sys_settimeofday | kernel/time.c | +| 165 | mount | sys_mount | fs/namespace.c | +| 166 | umount2 | sys_umount | fs/namespace.c | +| 167 | swapon | sys_swapon | mm/swapfile.c | +| 168 | swapoff | sys_swapoff | mm/swapfile.c | +| 169 | reboot | sys_reboot | kernel/reboot.c | +| 170 | sethostname | sys_sethostname | kernel/sys.c | +| 171 | setdomainname | sys_setdomainname | kernel/sys.c | +| 172 | iopl | stub_iopl | arch/x86/kernel/ioport.c | +| 173 | ioperm | sys_ioperm | arch/x86/kernel/ioport.c | +| 174 | create_module | NONE_NONE | NOT_IMPLEMENTED | +| 175 | init_module | sys_init_module | kernel/module.c | +| 176 | delete_module | sys_delete_module | kernel/module.c | +| 177 | get_kernel_syms | NONE_NONE | NOT_IMPLEMENTED | +| 178 | query_module | NONE_NONE | NOT_IMPLEMENTED | +| 179 | quotactl | sys_quotactl | fs/quota/quota.c | +| 180 | nfsservctl | NONE_NONE | NOT_IMPLEMENTED | +| 181 | getpmsg | NONE_NONE | NOT_IMPLEMENTED | +| 182 | putpmsg | NONE_NONE | NOT_IMPLEMENTED | +| 183 | afs_syscall | NONE_NONE | NOT_IMPLEMENTED | +| 184 | tuxcall | NONE_NONE | NOT_IMPLEMENTED | +| 185 | security | NONE_NONE | NOT_IMPLEMENTED | +| 186 | gettid | sys_gettid | kernel/sys.c | +| 187 | readahead | sys_readahead | mm/readahead.c | +| 188 | setxattr | sys_setxattr | fs/xattr.c | +| 189 | lsetxattr | sys_lsetxattr | fs/xattr.c | +| 190 | fsetxattr | sys_fsetxattr | fs/xattr.c | +| 191 | getxattr | sys_getxattr | fs/xattr.c | +| 192 | lgetxattr | sys_lgetxattr | fs/xattr.c | +| 193 | fgetxattr | sys_fgetxattr | fs/xattr.c | +| 194 | listxattr | sys_listxattr | fs/xattr.c | +| 195 | llistxattr | sys_llistxattr | fs/xattr.c | +| 196 | flistxattr | sys_flistxattr | fs/xattr.c | +| 197 | removexattr | sys_removexattr | fs/xattr.c | +| 198 | lremovexattr | sys_lremovexattr | fs/xattr.c | +| 199 | fremovexattr | sys_fremovexattr | fs/xattr.c | +| 200 | tkill | sys_tkill | kernel/signal.c | +| 201 | time | sys_time | kernel/time.c | +| 202 | futex | sys_futex | kernel/futex.c | +| 203 | sched_setaffinity | sys_sched_setaffinity | kernel/sched/core.c | +| 204 | sched_getaffinity | sys_sched_getaffinity | kernel/sched/core.c | +| 205 | set_thread_area | NONE_NONE | arch/x86/kernel/tls.c | +| 206 | io_setup | sys_io_setup | fs/aio.c | +| 207 | io_destroy | sys_io_destroy | fs/aio.c | +| 208 | io_getevents | sys_io_getevents | fs/aio.c | +| 209 | io_submit | sys_io_submit | fs/aio.c | +| 210 | io_cancel | sys_io_cancel | fs/aio.c | +| 211 | get_thread_area | NONE_NONE | arch/x86/kernel/tls.c | +| 212 | lookup_dcookie | sys_lookup_dcookie | fs/dcookies.c | +| 213 | epoll_create | sys_epoll_create | fs/eventpoll.c | +| 214 | epoll_ctl_old | NONE_NONE | NOT_IMPLEMENTED | +| 215 | epoll_wait_old | NONE_NONE | NOT_IMPLEMENTED | +| 216 | remap_file_pages | sys_remap_file_pages | mm/fremap.c | +| 217 | getdents64 | sys_getdents64 | fs/readdir.c | +| 218 | set_tid_address | sys_set_tid_address | kernel/fork.c | +| 219 | restart_syscall | sys_restart_syscall | kernel/signal.c | +| 220 | semtimedop | sys_semtimedop | ipc/sem.c | +| 221 | fadvise64 | sys_fadvise64 | mm/fadvise.c | +| 222 | timer_create | sys_timer_create | kernel/posix-timers.c | +| 223 | timer_settime | sys_timer_settime | kernel/posix-timers.c | +| 224 | timer_gettime | sys_timer_gettime | kernel/posix-timers.c | +| 225 | timer_getoverrun | sys_timer_getoverrun | kernel/posix-timers.c | +| 226 | timer_delete | sys_timer_delete | kernel/posix-timers.c | +| 227 | clock_settime | sys_clock_settime | kernel/posix-timers.c | +| 228 | clock_gettime | sys_clock_gettime | kernel/posix-timers.c | +| 229 | clock_getres | sys_clock_getres | kernel/posix-timers.c | +| 230 | clock_nanosleep | sys_clock_nanosleep | kernel/posix-timers.c | +| 231 | exit_group | sys_exit_group | kernel/exit.c | +| 232 | epoll_wait | sys_epoll_wait | fs/eventpoll.c | +| 233 | epoll_ctl | sys_epoll_ctl | fs/eventpoll.c | +| 234 | tgkill | sys_tgkill | kernel/signal.c | +| 235 | utimes | sys_utimes | fs/utimes.c | +| 236 | vserver | NONE_NONE | NOT_IMPLEMENTED | +| 237 | mbind | sys_mbind | mm/mempolicy.c | +| 238 | set_mempolicy | sys_set_mempolicy | mm/mempolicy.c | +| 239 | get_mempolicy | sys_get_mempolicy | mm/mempolicy.c | +| 240 | mq_open | sys_mq_open | ipc/mqueue.c | +| 241 | mq_unlink | sys_mq_unlink | ipc/mqueue.c | +| 242 | mq_timedsend | sys_mq_timedsend | ipc/mqueue.c | +| 243 | mq_timedreceive | sys_mq_timedreceive | ipc/mqueue.c | +| 244 | mq_notify | sys_mq_notify | ipc/mqueue.c | +| 245 | mq_getsetattr | sys_mq_getsetattr | ipc/mqueue.c | +| 246 | kexec_load | sys_kexec_load | kernel/kexec.c | +| 247 | waitid | sys_waitid | kernel/exit.c | +| 248 | add_key | sys_add_key | security/keys/keyctl.c | +| 249 | request_key | sys_request_key | security/keys/keyctl.c | +| 250 | keyctl | sys_keyctl | security/keys/keyctl.c | +| 251 | ioprio_set | sys_ioprio_set | fs/ioprio.c | +| 252 | ioprio_get | sys_ioprio_get | fs/ioprio.c | +| 253 | inotify_init | sys_inotify_init | fs/notify/inotify/inotify_user.c | +| 254 | inotify_add_watch | sys_inotify_add_watch | fs/notify/inotify/inotify_user.c | +| 255 | inotify_rm_watch | sys_inotify_rm_watch | fs/notify/inotify/inotify_user.c | +| 256 | migrate_pages | sys_migrate_pages | mm/mempolicy.c | +| 257 | openat | sys_openat | fs/open.c | +| 258 | mkdirat | sys_mkdirat | fs/namei.c | +| 259 | mknodat | sys_mknodat | fs/namei.c | +| 260 | fchownat | sys_fchownat | fs/open.c | +| 261 | futimesat | sys_futimesat | fs/utimes.c | +| 262 | newfstatat | sys_newfstatat | fs/stat.c | +| 263 | unlinkat | sys_unlinkat | fs/namei.c | +| 264 | renameat | sys_renameat | fs/namei.c | +| 265 | linkat | sys_linkat | fs/namei.c | +| 266 | symlinkat | sys_symlinkat | fs/namei.c | +| 267 | readlinkat | sys_readlinkat | fs/stat.c | +| 268 | fchmodat | sys_fchmodat | fs/open.c | +| 269 | faccessat | sys_faccessat | fs/open.c | +| 270 | pselect6 | sys_pselect6 | fs/select.c | +| 271 | ppoll | sys_ppoll | fs/select.c | +| 272 | unshare | sys_unshare | kernel/fork.c | +| 273 | set_robust_list | sys_set_robust_list | kernel/futex.c | +| 274 | get_robust_list | sys_get_robust_list | kernel/futex.c | +| 275 | splice | sys_splice | fs/splice.c | +| 276 | tee | sys_tee | fs/splice.c | +| 277 | sync_file_range | sys_sync_file_range | fs/sync.c | +| 278 | vmsplice | sys_vmsplice | fs/splice.c | +| 279 | move_pages | sys_move_pages | mm/migrate.c | +| 280 | utimensat | sys_utimensat | fs/utimes.c | +| 281 | epoll_pwait | sys_epoll_pwait | fs/eventpoll.c | +| 282 | signalfd | sys_signalfd | fs/signalfd.c | +| 283 | timerfd_create | sys_timerfd_create | fs/timerfd.c | +| 284 | eventfd | sys_eventfd | fs/eventfd.c | +| 285 | fallocate | sys_fallocate | fs/open.c | +| 286 | timerfd_settime | sys_timerfd_settime | fs/timerfd.c | +| 287 | timerfd_gettime | sys_timerfd_gettime | fs/timerfd.c | +| 288 | accept4 | sys_accept4 | net/socket.c | +| 289 | signalfd4 | sys_signalfd4 | fs/signalfd.c | +| 290 | eventfd2 | sys_eventfd2 | fs/eventfd.c | +| 291 | epoll_create1 | sys_epoll_create1 | fs/eventpoll.c | +| 292 | dup3 | sys_dup3 | fs/file.c | +| 293 | pipe2 | sys_pipe2 | fs/pipe.c | +| 294 | inotify_init1 | sys_inotify_init1 | fs/notify/inotify/inotify_user.c | +| 295 | preadv | sys_preadv | fs/read_write.c | +| 296 | pwritev | sys_pwritev | fs/read_write.c | +| 297 | rt_tgsigqueueinfo | sys_rt_tgsigqueueinfo | kernel/signal.c | +| 298 | perf_event_open | sys_perf_event_open | kernel/events/core.c | +| 299 | recvmmsg | sys_recvmmsg | net/socket.c | +| 300 | fanotify_init | sys_fanotify_init | fs/notify/fanotify/fanotify_user.c | +| 301 | fanotify_mark | sys_fanotify_mark | fs/notify/fanotify/fanotify_user.c | +| 302 | prlimit64 | sys_prlimit64 | kernel/sys.c | +| 303 | name_to_handle_at | sys_name_to_handle_at | fs/fhandle.c | +| 304 | open_by_handle_at | sys_open_by_handle_at | fs/fhandle.c | +| 305 | clock_adjtime | sys_clock_adjtime | kernel/posix-timers.c | +| 306 | syncfs | sys_syncfs | fs/sync.c | +| 307 | sendmmsg | sys_sendmmsg | net/socket.c | +| 308 | setns | sys_setns | kernel/nsproxy.c | +| 309 | getcpu | sys_getcpu | kernel/sys.c | +| 310 | process_vm_readv | sys_process_vm_readv | mm/process_vm_access.c | +| 311 | process_vm_writev | sys_process_vm_writev | mm/process_vm_access.c | +| 312 | kcmp | sys_kcmp | kernel/kcmp.c | +| 313 | finit_module | sys_finit_module | kernel/module.c | diff --git a/x86_64-intel-manual.pdf b/docs/x86_64-intel-manual.pdf similarity index 100% rename from x86_64-intel-manual.pdf rename to docs/x86_64-intel-manual.pdf diff --git a/editor/vscode/LICENSE b/editor/vscode/LICENSE new file mode 100644 index 0000000..e69de29 diff --git a/editor/mclang-0.0.1.vsix b/editor/vscode/mclang-0.0.1.vsix similarity index 94% rename from editor/mclang-0.0.1.vsix rename to editor/vscode/mclang-0.0.1.vsix index 12d4476cd72ecf7cfc12fca3cf2e828aade7b0a9..9845bcecc28a4bb9b2a345eade1f58a7fb457942 100644 GIT binary patch delta 92121 zcmZsj1zZ%*`^RPP=sLQ?KmlnG2|?0UK;aGn5xW7q1uSe)gvUg%Td-RMJ3+q|7T7Je zSo}YGa~y}izpvMLJn!e3XJ($6ot@pC-MxFha@Y5Lit z%;gf_`AMgjEzcPH@K3vEO?K;7K4&LO5Han zoiA~Dvr+4?Pm0&A*YsPM?x)(aNzCK?jf2Jr7ma)#`*&13Rm)`t$ZHhQ%*@^R70v8rp-%koBg=aigHa#NdE+Qq)|MEg$XcNK2!zdb%TXuB}K|Mwk+ zoQ3%kzpyLEkM48OT;ks<>6BA(TFO{2RafIEr;npdQ&Ki9lvItl+4-2i@!eMOBmTRv zW@|v3;_CsGW`O}EUTK1yqrn{;_j);Y`HT)0N(Wkb`*}EZ9JQ;fmy?~p{;YOuJE{*H z>pXfv6H#NkYdWKgLJalXEt1#AS?!otxoF$d2b!zgeMg#^_?@@Xo#a@uyl>@-%Wh6- zCoN9hcAaRoWPOHrxABdYyX0t;uhjVNoIdfwNzJnH1rwB)&8=AP{dt|`(B=CL(lh<~ zcWGC#Cmfp)c?=jdHF2WR_apPD;u?7ousqfXtK6KQC0Z00fVMuANNTd!JrykmIg zoOMq7wyo$mdq%ephYuWQrCpnIW!>4Bvk43QcYpG9ZauO3+|bKmt481NklXcH zVqjwFn5=~^?K*at+~Mcm+wT`m3NGp0x6RyL2K|a2+XRp4aOd!lN8cuw+Wh(cJVA1{ z@snp?{Pcj{jQ^e^}%xHEN`(-l&m5b}?s`mOR5v^x%czoPd!l z!((C^_uO|p*wxKlaOjjxm3qd#+oG*D)1&6lgy&aQtzCQ9Dz0a^_AT+?oU;*cx>^=I z_A}Vl;fd$73!SIj**$LUnqUjx-UDtNYUZ(fLC?f>!lSoTa`rwwk{k4Xugh|!Y16s8 zY#2<3I1MM*B$845#jU|KsA(zkA}&l;69#w?*fEZkzNi&-)ghy1c1i zq0vsE-Kc$D8o_t;M{ljk_gKYs*b=eg#02%NYo59rskuJCbTvj*J2p`>G;qR;q095% z7WcMTXlAjbVBq!P$DQ;q&+zowHbrHtZ)3aMp~6>PB}?x$*ILv)!|`hJS5BaQV{5;( zB(3CgO-*OtviT+QD?RPlN9*B&6o;cxXY8kE{mFTIZEC#ArQ1%szu39mShp(v=;S8$ zw-1)}`PlJYheNuNE?;V+a#RgBU;k}b(WHF#;*K-DC-%8kv1;n?OFm8C_BEa$*|vAy z)Ci&3mYPcIa{YrDJuTn;SQwv>Y1(%D{1~&>huxby9)BR%|76%Vn^%_;9j=VFoL>@? zrg|ym!`U$-_YNke0S$t0yY9sn*rG5Prv3^#cvF|3| z?KkC;@cMbHN%O^5&-Z(C-E~`3>(f~sl;ey~ZZaJy?l^F57o};B-mRV0-)nJM95_R&N-rZDHK;MX15v7K_sIoHf>c%(L^IXlmeD>lJXi>%m3-Ly``; zZjUc*Y`Cg}`SXh>JnlK1+m-aBWb5|KGhJd@Cm&2#iB_6-X^ez3Od3{kdFkE>8{bqt ztxlLUCY)AHaJn1tODVFms+wo(jNM`!QBHzJjTCz;S)5wk(P#yF=W3%y*`aDjIrDrf zs4%nKYpEV5NE0+IykC?i+V<$rol8G1J>R!yO3f1$@j)Y_VI{ZwkMcBaV{`w_+RT%I z5z}lto*>Jq!U4J}bJAvB@3XI;?FOa3TT82wg1#0Q{7yX=HGcLX>xwIB9nzB)baCF1 z`}sh($%m&b%)7QLqT4=w=bOH#hA-FOs*<%Z)0ms;ueSGdWan?LX%`y@=v3U^-8|bg zt!7-?qTFcGN(UD8dD!aLbYYR=%D;f>Cu+c6 zWkp6z{N$et3k9=Qb`p!$&z+OjXz%rT=O--4-)1yU>&ezVmKOK_zL6Mvw@6jH{^G%5 zrw-SbbsD0&_w1Slxzi?ltSKLUBx&D1{jEanb6NBK_KTK{NVs#@s5&VzWbd~8i!+)9 zP22pkde_uG^6>Tw1YD;IJEeI$FkKq_Xc;#jMBc8(0)zT!mCZ%93Oix zt#o@}Be90a)E9>07#+Tn-?eur{&D+7I_E$-`W+Ho;ug=gu3eqH@H z1}(WW;e1QwFWJ5~md&zJ&mXf{7`b7z?$4eR<0fyJnYPpaWVOoDL19bMgUhz`cx>77 zL!V;T(%nDXNSfd%!r+6uRM8t@`cy&EoL>k7;cm_Wsj{O=R%u2mW!}@*mv{BrG^EKP(L=*!Z)a;(obBLsSafVe|H}KNm6ME% z7Q5Y(eEIoUJKW;Rla3SHTujlO*DhskqfV+vlGO7w#|{q*t{M2!Oz&Nf&hh46NkjJJ z_}m>e+bzLS?e*1l@d>BR65e$YG!b7&-toAyd+D%4>$l8$^XXNij0C^kFVm9BhFA}` z8rsa|cl6-}t9%wjZ;9AGC%R3u0u{Z%olQ(j&l^46I;ho|r6XcYwy$?-+{N{2SI6h4 zCrvYIW3x0)wP{#_=_o7fHP`Ylrgm(Uu<+UZA+M%Kls-@Bs{Fz@JZh}^)zGjFdrhzW zovU#~chjw!UVfULXZZ-#i_e|1Tf1{Ye9N>KchoB0&fLHC(s`B3qfG*mORh&>ITRhW zW0qHxo>*1mN!M3OulFohk2X{;JF;MwuFyR%IOP4}psGh9Aq95rJcflPUFoZ*TcT<8 zv1IG$DLqz9Hhgz>^WIJGl9pcD+A?=U?9dMary&(8^Sv@$G(Tovo>DH%JdwHXPDSk9 z(ofdnFKH^@3XeTfo!hG9=irC!3j#A%g?dd|k>zR--C^meqo2j)cl46(HEVs%yQsDC zrRcJ`D+}C;-5f>^^=^FRV~2KCd#;#RpQ&u4tFEhhu=T_KN}W5dxt_mUbv~_rbl{3t z=Yj#dREkS(^o;Hj`E1!y{j1&G^i`HRyxtV+7OXBV6D{rHk~Z$}C#a+$8Q?VdBh;jR%)*G+Z1t z(|^6)m-$_t)^BRQ)_LxB*NCI@*KIF6A`EQbesu5wjc1KDM9FL2)^0pCE7$(!=J%VF zQlob_8hF}qYVs%Hmd*~NjnZt(Dw}Bc`LCbp=Tn`IZ++BvzuLejyIZH)zbMI%dD+Wn zXGpUpj+JFUKZpFMe``a({|5CLxMEfH&8C&F$4|(78x?M(*YePnB*V9Fb(O2GZ+7^= zX|1^Z=vWu!=X%?fGH-sl+CMHcuA|>+<3&*;U+&$vQ@zwa-e}yhZHtPId)HjbJMNZt z{6L38Klkrnt*7Uq)NHTC7PT&3ny-6rx}Y-r)QW(w;eFS{Ju=L4cGgaA@*qfS(31NL zOoyIqJ#2T^!rt~n@^Za7_AL?wlt&D>SZIpzPi$P?$Gt~w|AQEGWA{N_)Dn;8@9c7 z3F!L9bhMX8d%?BQltW{RpPkC= zJouZd?)S50i(GeK`&JN;=HGU5+Ncw?t*3e&_p`KF6Z9*4i0=1k75;%Ye%Ffln+ArVVJSp;CbgyiThuK!&T(i#0%sW<{+Wf|1=;ydEhO2~aSAD1+7WiY&k2FJ@ z@rAmbE**<+^kn)}_mXkKzm#F=ueHOaBxt!;$cPT_Q;%&N6I)&yme%Wj`omr&{$Dm7 zn;N7fSgMy%eD}%DujT*c|LJk$#@EEllUnpDpRqZyd_c3pb-Ejh)@_cx+f@8Pw`0pA ztM`e&t$QjSv(8XrHF>P$^^v#h^CvbP<8U#sQQFGIQ?0#R-Jc&%Ib8hmcC+V3=K|sn zXIlOm_ax8z?e=*N?w2j@dj1)-FhbvK)v(!(LgzGz-hTJLHcRQpvcwR}>vkqTX1snQ zxp1X~^IQKz`NuQOnN^zA-_@q2*89UecPydx+ABE;?O2dPPelB?atLn$g zp;M-f962GqGVO28-5)>RRy3)s7&N(s+G1VT2&K@+Ro5!N29urybUJ>J)eogN3XrZ6?lSNlHn$6DtSQZ)YrM`Pe_v;B? z9i|(3&T8BAyh`t(3+4#7=eB$3q<>y)=4s}&DdgtR-{NMQrsQ6*>XGKT*D@>Ldgia0 zMuAx#;&f;CA@R0ZdsgV#-nk`ueZWIFJg3pFunsFLSA9G4^~a>2e}BGI>-**J!&&7? z!%kd_ACaWlT@dQL(pz(QVR1IM@a3ovZ?}nJSeV8^~U1j(a^@ZaMQx9BRFxZI9r#QOn9!*UhZjjn) zNR0dX0V_Hzy&+6H9p9vJ`}q|%7G0wfXb$8$Z0%%~Olt*S6KEap8;3rGL8N z(`=6V>zK(igtsa`#N6p?VpozKX3op@kRJIu-1ZKr+pf`zDurFqee5D@#{3& z=qfNJ+k6X)Y&TnF%6b>0L(cJ?ZD{hb5RDm;#+i}EN=O`%07;0XjHH63ilm05j--L4 ziKK<3jiiI5izGtQL()ewKr%!!LgM|JAekbWA(m%oRM6RT#?+6+>tzxJdwPRS|NEOwMOzm@E8+ zG`s~vgWtq>+w!czWvRl&&Ato+LG~%mNGGzh64zExcOQqU-o#jPkA>Mwgr=m^T&zV+ z-^N&TN0qaODz~7aZ)3Dt)?FsyUXS!2f0+KW*Q#kIU~oi%

SsdI;62;%!W0TXT3&9Ayp-JX}@J7OA(S*YRQziQmPTb4QJ- z@%xx&**3;%^yp=R78N!T3u&>X*qqBUk*X+dhqEfJz1UMk%I}e5lsS*%xYw34^`)L> zbcEO3w#_bYW|y6urbez`V`Q$1AIF<>OYER=qWBLnj$D6x-inGRNi6C72V~piCX-oTSiO9$I>v)D^sUopPxVoy3)3W8)b=AXe)pFtEUEYq z+LF)1mVtHFG=C1KP9M-Q6!|$uNZcos{yUrsL^>APw)2FfGeM$4=d~pw%6gd~%+-L4 z1=$iEP9;KWLrJs5CbaProZg6Hr1DdY9~TuZcadG#L!G)zM1@d-HMeiDTtkaL$M|xa zMm7MdRQ)-|n{yoBkY;C%Q>DS%dTLSnG>MP~d_g^*OsKQ5LWEW5-P`KHn!jQLN^jdsNF9D4lIDw}>H z^jmbitR_cz{gU1FdQnY`Cl|Y43Mi>2CW;F_T&Fdm$e%IF^k|X9kj04miQH)?8|b~c zJ|zu+GM)U1aK9-1hr0YiNxjcxpQ>z5)xR(d^L}BV#-6PMq1?W6(!Yy;Bb>>6Mq>X=2#h`L2Ep(8W<^F}d{%)PDPM!av zOAkH*a3@zsjKX8QMMf1sE7Gn-silwcw=-F^l<3ohS|~@p;6e7o=PFdIEVdN6HaOac zzlOF&j=9*2yZ=`9rv?olif*i49Vg7m!BIZ#y;N~W?7?|{;s4BD`5E1!BzELPKX{qe zYAC5^r+?Swqhd*CmBc!nc1=Ugfeh4^cS#N$e2)03sMe%(PVB^u{L>J=;>2#;)!I6! zL0tr57w(o4RSCrIv{Qfz?G*4rFV07k|MlbpWGnJ)&_pdg`lupqNv_Ib4chTH#!}R} zfxbdtuJ_?=4dsFgtyD&(d`uNcjWTNFXu%VAN>D*<@~oJkYo(+{sY7uZOK$ktfOQ``D)^JlxGj8oi#8M z&r*ZGc8uD2ewbtVLNo99D8%QlbFz3U#vpM zHPCSnC(B85iqJ%dMNg$7E%;fh38#{2OwiRrjEmEFA%u1tz^%sJN(&Gc^2%o7_GtS{lPlt${3HXOFvB3G%ATUneI*$Q!z zanOOzd?(YT=!m_!^g<@Q-mQeQ$1@yBuXM!L+&3w1PWifG8|tQu2A(V84W*9^<&9I)q~7W{EJ7MoHBX7kMdD;`1V_Po;!#|VfR}^lsD@adRP|9S zGi64cHN{PI0~=(fTmx}1>xyT*X|5_M8HkgWeo?A{cnEjCF^x132a=f~0$uLNyJ=1- zhByM9T;+lW?OIiLz`QbqleO-0oeE8H!qFXS1iZ1e0#29J7xcqUBXp~~KX1^4 z%3LHS^o`GA7|2MVD^9PG#vpMaj4U!1dvcdL^MV}XkEN)ZvMj?)^t_Sr5sN% zWixB633TU^6?B!nPI~s(%j+hjD(Jedk2hjxS4~ssx=vxbAX9Nq?)VJ3VT-ymw}?LR zb_Zw6Ri5nJE%iUt3_8uZa$O5{3cqHCF|aC&qReqf{k>_TL3ZXKmvea{<`yq!nh(UO zQW>u~vXYUY7N%O1+Nu{$Iqn#NJ{EBAyPD|=-}@+2Kq~rWt_22N-WrDguEv@{cO39z z-ul~KhOI3T&53t-!JHz`_iVz}Op$lxM1!tbirqPn`wArBLQhKyv4WrIhYHwctFt;i z)Q=a@Dqh#7k}_<>_Vma~+=jdJm={`8#AD8e(iWl~Gpu1FdB*V7r<@Aiw?-RJz2r#< zb+Qq+;*!7c!g%idcmB5nMSka$sl6@CM*L#rs4XVDDqQc{VB|YD7W;9>I8yRMN%@UY ztf8`8P$%mqaOtL_Knk@5x>R!j;}GjbYi^^yf=<*_9LSX!E0Clk-tqb>r8QE z!jNV-GG4gwLVHTJ!yI1SOx#-OC>7a>qo}j1K$~>iVPeX)Lz~mwz+J&=UUPI)l!pS*ZGnlV$Wwt(3)rl0#Ynm%O7m+a5Ro?jSExP8 z9pEk38RmKm%$Vv4ulnj=uc9pfI^7Hh=<A1v<2qoQFL&5nNn&`7JA!XIfC)Q2a8BFVU!Xx=9vGOv z2Fh_qZslOPphG=8F=7gbG7>OUV9nyfdBO9}6o&tJVeA|V!3km+kFTW4aa(TZC|-!9 zMXkg>oM;Ra@<$6aS&%%vkzv0Kuk}Vp52Covr4ixJi?jTfS+Vj66Whar5=d{MCVbRI9{RA=(P zJt=>Nz$DinJ~z)|AZQkPb8;uxulI-j(M%pkl5QJRbl6<#6C&(&M3mA6IqjVl#&m%58BC^-oD{c1UG&n?T73mDSD7;{7Or3AG!r{Ue;D?CJO zuJn_VLc~ir^NqYxLY+b}b%boDj8O3+?&KEI3lq=he78|ixVSr2hheT*N`>JF!Q^nb z^x45H=5W3{nZd$#nB@MG3Q;6#kG|8|&1<4)%`U`d$Uv03r#-4#EWD6 za_=n8$psco@cnMD+Y7Zi>#RV zZaDm3T&1E2MB+_1v5(RTDvUq@6C%)=v&wkIT&}d787z)OyZT&bf=LvbRD6R8>!P69 zf0IUb7mLZcJG#Ba9bQ?qIIXp8fnhW|2D47yL#BHi1H%QCOfao%FxRaV!_fN)(|r?Tn)~#W zs(OmMQTkIH3t19`;q)^`G-A=f+0U7Uf+-+7@O z{r!%Pn%4`Jn(#wTOvpA7{%mUGM4Q$oBJN)liDPdJ)~ug$8^o?RY%cv$AiaLo4cn+B zv~cimrhESj$3Jd)i0B@V1%DN?bnJu1?X6WHWqnZl-9oDBj{_{ZFUFCM3KMF1;gw9t z>W4!wN0n);`%4eC%KqY5+SMQH8c%gzv5*_7!3@+igvRt>0GfGCi;<*(C^%i432z6Y zDM=zGOdbTyC<7)`8wfQ?e=w%_o`!N_K!tb{AbXj0%1*hi|I?Usa_6%3HfT45>aBGXJreO`PCR`nuQHqmL zm9E$eWwYw16qG&4Q9(C66`gU%Nlpy;*+4|rBViclBFCz8y^J5TICts%S zHWnQ)CV&ZCfY64j$HLYxkc!4(DjYFR9HR7!3ddp2-WELAS()7%u4{gJonI8p(3os5GceheepQ^cxNJQ~hQC&N&6 ztQ`AuMKVEmEP8GH6sT>-G4-^u=uGuanD_2XLHE3!z~d&=ZGupZtf#`zeF`JPr{ah| zj;nEAT|5;n-!q>HM$^!~@e7!cJPl^XiB8GL25d5qtp? zy^MHqz3%ZsQ!1`N@owoTKD3gNv~;-AeZ~vXT+Vxz#~}mNDEY>OX&D$3WxttlHv_$K zP>J-Wi@S3*9RJ&dGN;3bp9(Kn({g2HEm}JZcl3h##|!E6bhN&`2GcpuK=*}-n2I|8ycyQXkTYlS`16doP|?Nyvx4^mz~jo>QA^qTsaF>`QY}CLH+IBR5#o_?KB$= zydC_H5k2~zU{5D!qXgsj|LAfvu}C)Pq(IXS8|l)*j>;O8o{5&7{2yI$Tii@3oQs29 zV-8#{iTF43<(h=1G@jQ@?EbGVYYNVYXp4{@%t2j;MK?5nE(lkYUFJf^#maTo6!Z&0 zDxM3Ujy>hrnDSzkRcYY`Ty&lMg_BK-c`(pQP%uc3M*tV+VgyJF_5YoqCGu}D^&IS_ zVBWHqvN~1HL%X$-cx*MR*`F%C0C|B%C$+gP3P+fw<>x#AlIk*G|vV$Qbi#w{QlI>EQWM8*XAW1D$ zR48jH+}n1NV_VY9265>kCzced8K+OnveAT#kqke|7PsQIWyl3p>aq-#np?^fAKDly zv7z#1$WU>b5xX3mnsF;92lql3hG9$};BPMGST&Oo?tQ5z{G%Hb=50t)AJe?~H;T6GjX_eTB zX_HqWUwN1u2XiUynNZyh<;Sf?7|T1zi7H)PjS%hXBqu6#B1%=4IUBeJ&RTbGsMDi| zd8qemURM*xbd%y#jVXz5&WJoMo3&Lw2pB%$C zxefV`QPpGC{qlh$(iuLQkE{O0vv|Re+zK#SS1pwbhRn}@1;}7Q3_Gq9cT-9rrS)Qe z!r!*cUKQyRVz{hxDFPRyx#BSPNvE+bb(YWgg;Q#Qd*v>uJzik1Kyvao*RaYuiKyKKfX z{_PUEAPdyf&9Lctgkirei1ECOazQqtZf%i{l8;-&(>U*2ymm6DRKct!-&HfEplzsD z<4Q(WJyJ7faT5Y^<(s!fM-fyVzW?T3wwA&S>}&xS7nH=g+NWJjq(!h;>@~ z9pE0#>bV~6+97rlM7EHji_O(#Bc{zxnC^0{=lU%E2Y8-}yO7c%vv%R8ru4}0!(ReZ zw|d@AaMVL4E!vHPNowV@8&-QK)bl_=#R{1;uTYFz6NO?I!J^gmD2!W_M`eZLDcr&* z{BJi}U4$B|;I4FeA^K?A9?lyVE|mi5nz5!PWtD5_vY>z7 z57V#T{!wbOaE?0w#mxO1Y!;z5l4W2MARb@9XW!oNlTES_wkyI$>%7nvWL_obJ}@S>?L?IREA2g$D5MlF|oBE za)b<>9ImOuYC^|QlWC*sxdy#GhB6{1%g~8Qn!3z%@Nt;#Nvr3YbmBNnz2?Z!!V`GF z>~aF*tIhm+)K)NIiA?%)LhLEXTOpIQSHN@XNz}gY-g>0TpZ}c%&mPFo+((*vw6PR3 zP;4ZftNbtr`=t?79-nl$S)W~*0}e_Gt1Q{TZ%*POwHPWpB&*-(i(gNbRy0lCgo z=>?TzBQH0&ih|FI2XSG~_+MX|)gBL}zMh5kt!mOc2ak`w@xR`*^BhifqtvMUA}XqR z9*cz=dQ2E~9!=P3%L|@lYpbosdiv9OcxmD+$3hCf02d?i`0Ap#Ema4@@W=(sqjUSp z2_7O|gpJW+o^)b8w*MmhoLkA0aa_lp{BJw{=+mT?m$3fXc|d{KT*lSQr85+DSv-In za+d$Kr^?GPD>~1FHdk)Cd(C}&h7bVIl6FXD&HJlX#g>peiYwq%koHBI#S4uAv$8nehVCqVR8mOXfIZE%R z%M%B>tfQkr$vo+!r$DZh!{>W_Mw(wofX;}uBTM_7Q|y9sA$Gk9!AqFboy@=Up)MH6qKS&{SP z1lIw#FrL;eQXsmEaChudC64*_w^8crET*fzjlDqVUECR2At&M7f;Do%fKu+jSwf)# zsknr7bX^CUbDqcLIyK5arlUq}?!sfn$$v3=(1mMrsv#EA-@7Ql=Ip;X>kO)lZndPe z3bg;*1qB0}d$UvX0Pd);$n!{7fhPwD0=(>CN5ybOP8tSy!hzNZE-QjQl>gvXZqu_lb4AXpFdrG>4 zV<73FSeF+6C$`jU_=x_L?mt!mf+)j(kS5)Jh#7gBu{ zt*;^y`Rc0C)LR%8W|f$!m?03SBc#1gJsCJ3a3f6b~33jNLPajqxj7g zn{eo?se-T9?dz2)6q$!ZS(n~di_#+mM8_j*a4Og|#z7EfRm z6C>kEPq0RKA73x2QrKr$Rels}={4M3^Cd}U)hkI?i=00p(hYal2nWgxral$>35E}@ zH&>(APZ3}Hp^B*EGlcfdFd3@b<>4qu8ZJZmBM=VV=QumJPOe8fbo2{OtOV?cjC{lKCVBcV$R^KLL_=RAWFInRsLcXhO)7hh#@$#@k91kB!``5bPK#xH?i&n-RV0&M zyb-q+n5~vdE)?+=MX$<}NxR;PJp}vnrIH&>nvPK8c9W1&e&V5x>pL_ks6eXpqGLbN z#w;MN)jG<5huu#IJZZj@k@xS>md1rrU(G20 z116$~4`|E7ef7vkaO^<6q(Z;vVECI3+n0{1esi<#f6pwH7Qm zTQ4cofG1d3&HM;oiDioX;z#(}c~gcSeZmp%@Cgw*T%m|&e?pk79@HZ*!OlnZk_L5t zh7c5E*OH!dgPCP_(k>ML6G_?;rEAMhK#!u5g=^-42-tUC%cztkfu zeuO&;&VG}jsGllL{EbDro=ZKr@*4}2H=gyNi>FAPT>rq4pd+Y7cI_^$ z?2}8hXc5mQcCKSo*-4~BA9xs+$U|D&OJqowzT*zI_%H5YKS+|BVkfRUcc`CSuHSyE zTMNti17sQ_>Rk(eZHLJ%(`vALRXPMO)*_a=DbO^{QI~itea;Dzh`IX*c|dIsid1R! z9;{HSqb0(e>k`~xIwIBdZ`Dh77us0~wE1x<9j+wtRQgW&N|Gc_@SgMpl4jJLlX!7A zaVfzI>72xy%lX8F`<%p+#t0;>shvRL!kxiohCtGawhJUq+$P)`ilMBl9O(=2aF5+rRp25Dk9wxngm;sl&TmPB%u*cYxUaUfA*uo~^?iT{${*3F*7RgkkXMsA=<$5bSaT!)^F40{(Zi>ZSu z4A=E#I9U}HI)m#sRY`BI$sh(>s-Y3~$-H1jWoi;N%1}d?24F9_jCA5U+-5>#g`O(4 zQAZpm+*KfV?&#rGfI2Ghy+V%l=&~tsIPm{)LOB@B;IejWnwl<>_O?_q3 z;Pf@^?n02n&yO74KhSG`dwyNWF%3gy@qf)wp>np zxVtyxf+|fi!bsG{2;%+RF_N_9-ebt{g5-gLKFuk>4(TLgi8W_m#qd^Ri7$8iDHWJV z97)FnqjvKLUT~)FRe0P#%LEme{(~pOId>&0GD8r;OmPgn=a{g=6cw^kG}0E0PL4$TZri}-VGo}8 zkiV_O3$tjdtz;yZ)Qee}HO81q?8}7NjS)1B0Zd5mkGlSBjQlBs7)fY?L33*e6D~JF zo3AD_!MiCUcV{#c);2|JdXHm*W;0a#2l)E z2{QRsInXgX6tV%&w#{&G7&S*BlNK}K(IP|H8zHlrV-OwAX4pC#l@6?|o2s5PM-Tj5 zM;Z2#a7tQ_D?7ZHAfkRPfbXrBV*`FwEZeaEg4ey+Ak}5tp3~;v;SkXPdr&*zn$2t8Zi#gL~o^$4w6w^=?-4g7N^A+ELV0K3i+2a9Jy^f8)7y76%7#`c0|?- zyW~1Ea&8F{zLybf1vjU4JQ3`d6UF`D7EaKOJ|Ndg_k-giACFA2%V28Ljmt4&RYz{YK_pvUz zqWt$?_{f{*x?yaDeXaXjNU?6nGqtuJ>~h1j7Sf2^-6htPUu!6P8;f56kdZq)SqOMt z1m~(IvvG$9UkxUFbH~s$(xD6wNfYYoA@NZ9Na-GuXfD%$8GP};sGEzexveD4DbiEY zntP1BxV*626Pg1)OtADZ(xitan9-VhNz9cVQLvY!7dI1ob9vL(enz^~YZFde&!FWJ z19=?F6=HiXuP*V$g>(>q4qVj=>b+qMKWK%Drnh5)zc(t1r-jlCx!#CkbtGRyY^2}S zNl0BIjkGAn1LbqA;o@$zg3iA+I)IZXkltb=ZR*_#3kB&j@~wQ9aj^;pk6WW{EfN?> zk2f-=4)bv-mg*-KlEeqrw|dKUIuy_wg-f^W9^iEeeH3)5{fvb4#|KBNdjE!4L@B-) z#OgB@@eCuJHhKJbwgR^CLnOlIGLq^i3FaQnS5Q~@VKCY(Aw7Sr! z2~PsxeAQYegasmFS^*O_2cn~AI3PV+h!qquWm|Pl<-i|0DCPw zxMBMhvRDSeN$?>BBHdCUT^wcyA%F8Da-9jko5GQseS-P~ORUHt7%SwzloTxK&bd8h zY~d3lRr=K#eJ?#kUgD~U6TV=&=`-=lMnDLN)oVt^g`hbDe$dEJgsbd3hK1W z7(T;LsV$|3BHB=?Qz-u8rv2oNM{r8N`QNtWmV--P_b~Xp@s}s9NHbTg$v=O05p-!} zOnR51&B)fgS}?Su$GCE=;D$>MUt5SkkWEPLF^Fc7v$g4MUh|ZBGIIjE(p`k$bWciL64q_$fc_!P!KRxh6>XV*1WFBC{C|Orn%iv zM9;a#RJGB?jFKX;s_fQH(n@f@0ScUJtWEoP(@qN%O?S*U#>5i=uD?u?Cqy8y)uf0H zM<9S_Rw^Q$NQt+g_v(7&FNn^om(=KFq@=YVYn^d+xv?qfZZKA%4+SW2LlfMC^Nd2w z4{VU@^yy(B_9HDc$B4*{lIRH1wldwxC^*@=U2dpCYTMyNx+&SSJDj-gQqU!Lmv{<_ z3K_ADMzGIym$(VG7AX*`9uhCXfCCET!hVdJqr-7vO0SWZ_JG@shvWuYbfX6@I~-2S zNr>Ru8M&ZIbD~k|jdOCMie1zQ*UF0u#4QHVI#H%TtjjP)=Fi1htsn*k=Djke3}sU@ z`tcII^|}f{`U1{9#x~tJ%ztgvO|+=uF8>B2e{OCkhHf`D>hiiNVu?SuK!*v>wN3C5 zf>?}h>0_;rykS}^rb~)3!A3GK6WrY83ka1!Hz-O$H&ue!(lc6tT$NyYRuMB|8;dh| zS~4%V(EC^nx5cp%SMJ*wIq~IsPm~L|AJY>v{pSn?a;YayX8yAjNSio`AE%wEKz7BU z7IWwFB#BEnLX8t}>)_g91mMM7Y|303k7|b=WB9;P6GQqMk7?VygeQZz%!_4n_sw-|BjhaF3JB~612wGF;+v6LZ)6U5{I4#tH%?Ni*on^9Qd(YFZ*<^1 z>>QU7YjSWy{)tJ*zX;pM<#>%-d=pVbgS(UVe-!kEztJ93cT_yJ5Au37qKtl$4!Iuj zs8Ju3+8K`+8E~QrePPjrlL9L1iX%YO>qho_&szmRQRMIwdC~tP|}Rse5M<^F%T(!Ae>% zT>s+az!c!CjtqBkG}WN1DJW=8OGfJ6qIBUjo#jN8vYbqDA=5VAQa7?e@YJZ!NJ%?d z=xnM@-Xq~h=*n{CkHl0VaFe^hL%26Scu#H=Y*x6-u_kp0j(4CdqtK|9o^otNZlhuN zw3VEwQmc^o=5%f}42SqC;P*bJn$%(ptY7#mV9U^WJ32lF)~`bqa7w5to^ggEj%~+6 z*En23rxu0|JH+F}b`00OJLA!-lFAD) z+9lk@*uajkr!_y82zr(zjf{LWkF? zL=zk%f@a}r!n&r-m}lQ0Aci+jFS z@MK2PZ+ArU?_nlPhP5!4*EvyYj;RT~&%|6;_f-)sx;+`CRAHenGteb0u?<)&e5W9D z#YzPo7Texj71sT7>qUpL*2Owo`h^W4zDdZJx0a8$8R?{94I4LA(n_g@vZhLUa(Gy> zWGb#LwWr}cGSPqu_w>zlY0NbA_?Q-q?Dyy;dlCBXG`L&cn&H3RX0q+<(&fHq8gw0f znQps}nL7P$jkoBemyYvz-NHa#hg-Di5^cJihTigPuR!wKnW>U7>Gs9a08OV?psX#O`af-Q^fdc?`k7PpOEJ-)6WVBppMnR*^gmfVh zOB88o-DhLicBk^$5??+D|L&q0G@fNeko4*AY^(vQCMb{-W6f|kJ`LviylOBiopBz3)+Is1T$^hQGYeAG>Ei-NV$0!$x&w=$Bp8zXka0vre) z+ZD*!1sJELio|Lm%Gj_=!N$uNdpMN15!>&-S(`Vm{d9n~Eg_V1FY)7?4X4>>8 z3}YpD5%8RSJdWjt9OQqS@!xFm;FcX{LhHpSt6wn_@NpJX+O!yXE}mipA7(M4TAsL; zG7_34amQpf`YnUU;?)k zhg|3-CL}J!it_puCLCXillbs!>|jh>hR*?Ax@x9DR@vw+ubT>Za5kK8xT8RhW}}3W z_Y_E31?G=5{*`@)We8gcUW??X2e|d+svk3>F|{oa<3ylzJexlXpVMLwx0HKyQ|crai~IG@$+4H41t6{x}* zUKLnhujVV^YlIu`%ZZX#;yFZLcP3nQGuNfpD-p`4UW`O~p?3TMP6?}!tEG)miB)IZ34z}pP!$ndoe=IV5X|Ez@cn(572 z9P;hf;E*5Cjj9UZq!I#)(CRhF=ht11+i-tyxg@jE;CK5talP>t8&9&5&4rY@7LPH@ zdg8A;LRqhr=D~-0-+zrnYtccs1~$a*oPCO%h}blZ`k8b2GVGd<8DZpTW&=TbFWQi{ z=flQj9K#>-;rYW9UT~(!0>mt5rd$y6x6EZ{h%*Jqm4GX+0-St1=J3DGC}|xc=(3y% z2iIXtpIpTRgY_7y+ww_iE3RZltw%+y*E3l7pTrRFMi zpS=-Lx4r1oEt}A%r%M#{mn5dSo8iX$v>eJlaU;DKkjU!>ol(%$pG}K--OaPS&YiTk zAgG!bnUK5%O%1us3!Zdy3y#YlxmzWDxpDt7N0m3sr5o)qCEZdW((QHT+u*hAHp5BV zFw>~slMA|(UV(vxZI&XE9(SZ8*5OPZG6R?G2L;;;^c`JN3s1OBoD@5~-D$%K9C_e~ly1yRvJW&YWRRTHIAeAB< zl+QI3NKz3_%>E)q%J#s0aS>`e$FLz0l60-+y$2oxjO98VO3g&@mhyO&l^nO>Mm1)F z+g?O)T@$&W!+$Txkaq1w22nFP)?mA%)b;_tYp#GJ_n~_I?HNg5hhVrmTd30ReW+t@ z%YU)fehjw@&JD3TrR+y|Y(4+Q7x%-7MQa6YdjNMIZu&GNdL$i=TMnRZBm5fbWV=1p z4??FK_^+;Rx2K4bd4sOO3I>G-aaGtVtRc}R%R{J>c{>H19&Vw@4^g~z)A?Uq!CO~$ zW4QV-`aQCng^+4L#IciJx5FsbH0obH2C)lww7VSpal^%OK}3m1pstQ(r0|HO4R~!Hpf}$(v=g4 z&AGX9qDj^#G0JBykrQPab`rx-d6@z^eG>j=k^-?P#)8RVwE~&5%0h?Iis61~o&vsD zjEX-drBf0Kw|0Yq;_rG4&Gb{SAH7)tUpj@NMB5Zd%2o??YFPrqK_z$_0WER61~RDx z=Zy+Q5>SH9$KyapuBcSO(76;IuVZm2&pM|Rfz!j%Pfi|{B6_#3$q62c@~8E#r?I}| zuFJ7HWu3;U>+U@T(&nB87WxMgv~thDxZnw|vZL@bC}P_)Cg?sxQ#FobB_{nM;(ip% z*}Ud;G2Acg^XD@peSsUDr5GSX&O)8@jp1!)QC=~o&tv>U$MaCDokP2)|5PA@&Y`S@ zzZJ;ob7;=6S~+Paa8$A+J!5>QsI5-C3fcZZ0B>yQX~aI+wemdfBx?#Rsp`2UE@RJQ zOUqfIOmgGj2cEO8TWa>1lZ4 zCAh6N{>K7$B{n0D(i7q9OK_WjD?zkeR&f0ibo+G_9B~;IHyc<~U&g}w*L8`dUc(nW z^cpMrft9bIvE4sNm3m*nbEYuQ|KVo;Nt)<2+?#J4sAy$-745AE`v>U|KEh~7Td$(2 zjXM6L#F^qMN?Y0IfB4p$D6QeX(Z-|et+1W(8lDK%GR0h%2D5f^m;Da^4kg92Lr-3$)v~|h_wE)dYvjAy@6(1Zcs#subUukw+yYliIu>#|Io&^2Ncns42db# z{D;E&9I5A8^!F-;Ox#WILpSQVpWx>+spLuuC+?FXsUj5gfHW1z{OWK!ivOW9^L(>ush@J+^h-oeapjiacC z_@wAv+yE=QgDH8NavkvFuBz7ktxj&LR*D~8opcv-%n0>*{WUc!b<+BTDN6c@+;U!j zLQ|^87bM`_R@2IW;ve#J82@crj|vzBYbzL}R-kxK9Xaviu-fD+$MRd>!z_GNPl34U zp~zn*uv&5t&O(itPGoDPLYMDhk}FaqA|op`iuc6YPFnu7J-A=QKl0<0O%?KuxsQp@ z)m&D}eXJT@TPUbIS|AG24^?1dvgS&y6m%&M5YL0Qa$-Pb4{$0uZYL)yWNBxGZw@{L z&TqlvIIhBl|7}KrE~uV#|E=`l@T-Stkxw|&tqwy&zkS6cyO2k~=3N<{)&=|9ESqCo zt>E#K2!`)ILZBr0qC+Lln4c4<=qZ+|3o6mB$%(wsoSs#pU3N)K2&;l-OCKia^g;Xl z6JxO*sR}Ne_hWcLUsO&!AK2hAaCv`*V;-Z$;|4OJ@G-hibFf@cBcmtqe0T^WHbbm5 zY2p*K{LXMj0*9lYXdRqZJ%Q6id~k)YT+^q>wK0VkoJc$`4zJBV$9Tzk3Y*FJ;L1}; zBG+{^={>`h;ym2peg?DU&yeTUSYBvBkz@H`@eC!2#xv6GIhM5t@HG`a66>C$o+T5R z@as8NDy5T{AbEknIp7m3yxIK8R{AvSDS~_B1xnt7@1XKn?*Z@l@sS z9A0QnIj_;M#Cc43&kF`icp;7(zm)%VrfqLv-fkJQ*pZEXQhy8AuXA`}M-e$7#=)q_ zsJEy{F)_UNEh_tCB^A6wA&D!|5vK2Ox!4ZxTOfivR-vz?qhQuMWZH;LrtdJ8Lb0`! zx3_(dW2|kLb#gg-qD-5yibKVnVkff14>2M6GivkXFcZ#v#tO;hC`J81 z`)$6Um8Hkzf(oU7K@f(YVB{{Z)+uI!*H?7y)>0z3$D5`yf=`8&^MV6quZuOLRzHwo^bMZ$l#%2)&oWYej=P-D|w+gt^SFJxL9xg#2|V6ltnD!7yP_=&Vo@82k6Gj@aX@|zc8x#zf{UMp#y6A-IPFL_0i+B)FFjc7z4xmY`@td*$cY>0K`HY+ip zrDUx^-&0YHp;D|l7bIjjMk&^lOH$#5=2WN@>%mp3GC_ljb>|;JL(_u#^8#KXmkK9% z!CQwH#N2*eQW7F>iU4^ZisXVaT@}DA8Xr&<#>Q}O4EbMsN*4l#8#7_2k+mjW;t&3B z!dP>qhoq+*8^>vyF(=u|FuiKdgtyAEZrm_SCWNV=tXEb{h_JHOrtK=R=zCi^(I8b- zG=6t8IZ>v5s_>W7oRMR^+QFW0gB|@JS!W#()$;c7%Mpa%$YN1X3nHSp0>in z788pKE2fLBu7p;ihyrth2;DY;n|Evp-Hu>I7YN4t5Ia&ug()VgRZ)SaPP+2i z+)4_3ujuJ4##QGr(3tUMCt0}4O6F0SGJ82=C%md+x;bN~MKuNXSEcM3Qhc(yV$y1O zT8r@NG9=ldTh=twu3~~@tZOUgT6SGot$G~=O1tPvYCY>IFw=$dU8!%9)Tdg1x{$DB zL&el_MR$241y;K1%4m*F6zJaA(@o@cLpNtLGh-vVxlxJT42n6c$6mWYD)F8h<-FJ2 zOf!kzocdpNhgeq1fvi`Yk`2v4`W^8KT+5+ji+pPZ;@c3NayfM&+K)D7hUMBhaiMBE z#XQeRf&%Ro7}AbV>&uaQ+gvh-4w5b;uC~XiE04+eu%rugQgpW5WL&I^0<$|4(}dhu zcJHQ`q^{(iE}0|U731wr!@H88K=}lkz$kabOM5BCp%>X4zr%oXV@W#e|J-$XwZ^@b zEGiF4-TEmoJrB)o=>Q1=#j8AAa@__=pwmK!D2>H==`T3%+UWj|y!e@&L4qtxa}Ql< zD<|>BgQWXCFuI5_f)wPJ`AhF|)+b0=ihO+#E$_^(5yB3x$;z8gZVwXl?l-Gq4ru zp1NXI_foucE#>?>7r&2KwUqcy@WOEDa>Yzu=9yhQhOv^n2e^bzuJUvh&wf%(O}(k6 zmTSZvALz8zznau0NzdJ2ra2(x zp#~gQOrjq~haOQN%%5g(%?}qZ9W^siTF2uGjQ2nLQU2C~$#rZ!CmocP=XCdm#ejc3FYO zfn3+)dHoouYpB(@rbw3{owZnhl?L#S4<+?2j0^GCEo5y9lf%gy7EIU;y2ri|XkU=p zyEDzQ2(903Gq4t2f@np7cNMcQ2v_3nE0A`N>h1WG9f!t(7b}9DnGek}`;>>C%_B2zL?pO_h25fMzFgI`!M(}M9gk%I|ks>~OjImEYMQW;(=X3r}^ zt`C8E^+qu(LP+raodR+1$i_Jo@nyC!NE6LNY4vaaQ(#jlZL8{M1? zr8)0VYR7%?%qk9raRYqxT`@JjQ`FyeTs)k+aU-!YTvt&1^TRWza41C}XToZW{}Shl z>3n8p@p2R6a>*@`;W|(4DjyywhUGF=UJfFsvOXEm5wRj>B2)6sT$EAnFPDDlGNw4Ch-sY@mZ)Yz~ z8!JwN{G8e>6>~;VrF}V+MS=tg9CJwE!yUoPMfA1B#Jva|$J>|SUOZ#5E{BLLfyI8g zl-A!R2w)9&1r~UC*@_D#sKM!ZEST^}D#X#lf|(RaM$!4q4BJ;DacX>iGh-_%mqh1V z0mZZ^;Khl$GKTcZo?0o6m6JZs_Vn_Q0T0ryag>Z?%6Q{-N6C!!Rm@W#f@Hkv&y~XQ z9)%R05#VJn@PrNRUdjSuK{<5-|jV>V$l%?DIZ2a|OUj!DnMM|=u$Q$Y9EUHDLyEPi!e!Q2F z^t)&(qJNYE*Go}2ZmPUXEh8CUv7#LD)s+=fV*p>vQAMkxl~WDMBN@#%BxFIBmd9Pc z7^#L=F=cxnph1H6)MnkJ6FJi%~e#|_7!mX zMO6jTDqz*Ex&rwsGM2eeLjqsXzanY{SP3OTMn$fOvvrgw;dN+TCFGr@VkPqGTuJ`Y)du2_jNC5_`yBUs1j$Uc2{Fh8EUDqHKgWp)gqcBdUK+lLCP2>o%R;t1Kv60o5bb+Z1u9J{fETC?3F zTG$auYx5-CKx;E!iJLSa3=Kx>9 zkq)3^&0*@eH0(eIN)p&NCcOJLDiGJ008QkJH&XI)6PLx_ z#$@-;R+DZMB5{4Y0xgG7KOQ$1&qmGt4zpMh^%XnuK zU3K{B9j%z;vgEKQnOeA@Bivi6C_1|ydpoKt&{j{3>}o5pTh9ggt&RfC>v%hghl!*v zW+3&%dW!CDz=3#P+)4-1>U-OYlLqo^&`2@mb>6J}h^6tIZ=#qUu^7F@J6o9mv8#x= zjnQYZ7+uTTTVp|Dy_q#{j-710!j(*7b85;rPJy${si~U0#g!5Ox-IbH9@ng7Mzlcu zcY6uA09p{^S0)hNlG63zt*(@eX-QBQb~1vLPGtDFB^i2hMI(i<5oO}2xkZW)6XUpK zhILhGGvmnbC>OmnRH%nHlWXHBM1yz=@u{bxC&lA(!#)x;(#{!w14P+YkUEz5bRglB zR`|A|zXC4(iQThSxUh1NVoJ3}Tr5d}@vU*aBD*qV!h5Z$vJ1l%n9_#HmY6n#_!wI> zjCR`)Vp~=OnLsv?Foxp9P1WUh3HW2N<=pW~scKu?$~8d(Uop2Wg>#*xz#A!PGg*PO zDSR=rRy(q4In~TKimuZr`;K;$z58@UXH4^U5+@~{qdoLoRwYTx-)B%peS6C2A{4Wt zJ$02vHzCDV9caIc=^P|z-hsIZow(hB``||Y*Y?pZbf9|}O^+Z+T}RvuTO_7-qMzQ- zkxrjo7ai%0vn`jLzo?eN=&4U9>DEfgG}C6TR@zRTiEQRt1zL9|vd>t0*@s+rccySN zHb_uVICUZ0Tr9klp#KJM4l(S4?}_^rv%d>>4L4RzO0joWU1@En2@L6q$wjA?;4g~y5Um8TDn}KYByZ!dPYglrW2Bh-7s6|tYU6-!?`6UP_#RZ)IUQ>#&xIKSD3)v z?x^{mQ<9QBP+MjKQ+f~>zw=7+NP^uaP%eQqOko;5{@GJ!BW5S?OvH-+o(xCdAmy++ zm z%i7^l?g2clu&8i=uCSQ$fbQ3^5!XZ?$$pTmLEFJXE@{+dAbvDs-Khj!2g(|JqQK#S z)cQLUC@=`MeovL;`V)Gsxi5b`{!SZ2A-|eraZhPi*9K7w+n*`zphU_uOt=mvD8mxT z!1jd_Bq!2=+({(LXG~1wV473vOC_Enf!`|yo({&D^w$bhN&-xLqrki*OxAd-z`8fI zfv-vAZv9R%wT2)*WCA~j&}Xk5LNglsUWs8!YK=ITdpN~!o=i+18-c&5^MOKg*J5t_ zqZIoKr=i5Z&wmmGh_s>HEV~TFREbY!riAwGH^?fIhw+SlOiz784I@N{KbsYevIwgg z!euy7!IrhSJ&Zu;zDkuQn%_71>n|n_$D>={MA4Cem=QW#@q9R0F8*$2N?LUm;UjU# zD2=+Ua~FF@kXhtUsZv;IBhmlI2n<>&X2K`Z&Nq%EfbUJf#mdK8IF3SX9rNN+4C5d= zjiTtqG&5r>(nb-=1HT!zc#nn|nZ>MQEuL#WY+P-}HN{yu@v}O)onwmP6miX8No{uGH3v87nW*ntr z6lqj@J&s;x!8l6w{5KP2bxaH$Pblk+C->pZ-AjwF9eixWn(?S|Wc)A2PS{L3Cq{g1=;si>%!bInos0+2?foURD(s3fUl3VKkeG|!%GucSnSiU6Z zw~**Q36f1lizYD@al`lE%d28Z1YcjcX%Ax2CH=k^BK9eu%NxBH% zx|H^ytwq!n(tosM#1sO5Fqef+NG<|C(vI|QQ|S{JJ5MDlQ>Ji1>Zj7=TDnVRf3Z=5 z>qg)w%DemUDYj|EU@l+MoX7ObzTL2y8GCQGkNfr8*q>o?4jr>c}c~+myNvB zarK*tj`tvZ$Wr8{*?c?|xIRNV zX9DFtX|rW#GC`Rt(q`(4h+Hq&X|!x6iQ~P+ftkAIRy@h45Tq(8)XHP^e_bCR7N2&) zxos(EZe$teOe*eE3YNPURG_}lm9Q!$?g-*BuOPYb+9Sy7nB$OQk^3=W(-KV#R!{mo2K8XY;wNvKCV|sw|*XBTQiK z0t(WY2@Prey#zTU6eu4-Tz7xbn-&6eUWmPGzhxX^xR9D(Rl-7hou@A=BT}IUMJoDs z2^x96uiR#mQ+e2qENP}$)*R`>+cc^DpCuh%l4etQ5%j=PO8ZtxjC}e)Lz=n>CrU;s zI&?98>9s{%;opBVrL^?YN<48fahqC3OkGXM9xtZH>BJ0*1gT}oxaJaWw3n6;|BHPM z9Lz2kJM3A4d3Sb&nYF6L8FDCD-lfRiSjys-a^+kqueA3rCAT%qy~w04FaA{9?AV@Sf|<8s<`z;bGmsnF##{Nc+f)t1UiDNkiCbYm~| zZaHZOF-arS-mXkTD!YPq%!=6+7?`wz+Vf-wo0L9UK@)mw0+m+c+%cwbq-4QL+QJ;B za3uIyonZf1Nw7Pz$4xTzR$(QumKkIf>sHY;-x!$yVY8a%y-!S8O@=L2qdKLIRBfWQ zs4IU1g!39MlOjy`NYH)_8b6G{U+iB)+szOS)*|448{xGU!)uuQk@>nb@NpJjoS2-O zxt3CnZYVabrA@O-WdrRpPN(RN8@P+>H&B8SOdm-_mM5eb; zk^`Hl@;I?*Gq&9~Q!Qa}!gZ_cI5y+LVG}qi!DPO-A|?5^Pzqfu1@^@IxQcOGXaa$J zD@TqKTj5EUTsZh)3!(Zh*;uO!B5f-noVJxlHI_xnTY0FAX(x*Az+UNp2;(OcnEVeu z>};I7KejE2H4Mn1 zdoggv2>itGy=cttCnbL3s+6>55tIa>`v4v+f|4MqKaF+#K3u$FV#*GH3AFz8%KY6v zT==a?!Sbx+T_MaYUhL>}3OOKGfj*7#dQ>^wxx&SRocCdqM_co{}2kT!xC=nLZ9 z@WbTED!?OL?MDvtyv7=sBXo{6M$5%%k@~EnHJehGZ-#;d6oQFooH2gf;cZUfNwY~RP1O@bso-P< z=1Z{91m2$@ACDKPjBirG?PWOy3oJI`liq|f4P@wp1zJ4@SmWdda~=OT-)dkYbU#ujC z3%H|OA}U-YpFN8S?am9-FAr!Jsqk@2xOaGj(n9?&60YZxZLAGhCe{7L?u*Rzm0YfX z%fDptpAqWrAoo@Dmuyh_s5pytRWLIEnh%M-zN!lq9kS7q{*`+5 zH%YzbTE5N7=^>lwI0jy$tz0%SC$Hhv^esy4d!44M-zr>hP^KZ*83Tn1mm9RGYu6d4 zzmxwr(?_%l$l)>M6fRfvmTP`gfKo$SO#?rE?SAZqY?Ov|OxSFpGIMFRHEBr@F|= zw=w0nU-&#G^}XAedSwDpcL1x>lw|T9Tn;^82HC{xJH%qIiK%`UmxpndjkNOcfRBrM z^geW#ur@lR=q&fp$$eOXmiK4_e0kQG!0A4Zd%N!8^u!}(rmWWOr~*Ci6Wb8c-~lB+ zai6R8k^0~30p(bHTq^mCeh+Y`_X!0u9uTyuCly$8g4UBKnwDPqA@1ZmrRe07#C^&` z;{L|O+JcVV(iNEgh@P?o`}(Ne=TZ=LRtlPFb{Xo0DW2N>D-JxTXx%ST zfb^%NI%Q-E3GZjbYUCv;E+jTwqF);%8II%q#qdd>XI$)VBJDZdRM>M}NvqrH|H;p( z*3_#~Q?IqTrn0E;0yliGi#xB#Z|)01xyS_Gzd*hF4JE1d61DO-B?u79UsB93CJ=v< zYh|TIkaNDm^<9}t$2*g&GVT?g3>LRv;Yo3OuC^mmrTT5D(p1aFF+{H@M*M4{f5HU9 z?_kdOv~cbx58t^k_9d6!kZLC1@0F>(+#`N= z^>}>Flq>VhQMyV>i!{7!!?JISL zzGLh#Qn{jR>~79)3}~u$$Qdve)@~eDjvNja;2aBCSpEt z5pr~~9JG)wt4Mgp?Rdcl;&z?$$>|T@exQC^z7ReiX?3@azkXuDNAh0yQj&h+zmLSv z@JfNY|KUi^*9zQvi?P-Jk>?W=^YcGuI1atB5Qn^>qPl(}5DVT~&<8(p*$;YWW}L-0 z2l~&_p9vu!f&W6iC4R;;rw>NoMZ$Xu-K-7)dx(m5(nN=Rpa#OeV13+2rI_>u2P^%j zz=bcABMaXGk#h*^KjCfBuNWQmo8im!lBxAs>12N8U4#1<1){&<;}s+D5m8^Lv4!6V z91GmO6S&dUTkzJR5o7;s-x)F;|1J~xh{E5|tNR^~M*dXH-0xhdjjTk^pS(eP{~h-l zWl^B&4>Dlino%QwhbOkRn?U0g%?6dPiO6n!}_}X&f1y+}`WY@%G73;I;S)^3R$fQ{7i)nKT|N1{` zN?`&MZ%vZn!IJb9>#g;X+Tu_JY_p=Sg)7i9tG<-BrKkeCvZA)5xB?!t0?V2tiSQ>@1W<{f+oJ~-?sWS zyjtc!nF{l+*g@Y!%g@VU2YeV}@Xab>9Q8p~?L?ZRo@Y@|6Odi3LtLRjQ3*o;wlsTJ05B*AAbJlbo%b$?#PNMK5$lr&MPJzB*Hi3tbeb zmmT9vyD6|-g5Et8_?}%~QuFMoKyrewX@VlbMenJ#>ZRz-F2u{Nw*vOAfTMjR@DZ&f zxZhu0UE5s=%*KHVxD3QpzD=}+05@FhmZ<3TLA1@zZWQc(l47>Gk;-|f0^O4-nC>fc zSiU((Wi?z(%|RW-=OAFdBPD2{bs8mq{Y3gmnu>9F=$jMW@UhColrc;P8n@5(%t;yc zOcYad(!iL^uaFy$>)81@s#Ocdn@ho5B<;f%X(@}(r7xl7>1hVmVsL_=t(q>sC>8tm zk}_Z6mRldfs3s;i?sRA4bZ))3IMdtDM(oT@$=38&j6;7vzEk54V?RhSvF^0f^@9~~ z9*lUe6t7M;Guebo9-P=PTrt^)`|)Zr4>}7+DCXyIvPqLn7^b1>?XAMt?sifNu7|LQGLU}Jttw`s8g*$U7QKeEkR z+HGDyU)1W7xKn^DX2f3JIv*`S#IN$GBBh!qd9>&0M1sZ=_^wf4xhF;*tySQw1Y_1I zP~QvCVuJ#E*AvOLUig*B!-2GNV-p|4bZ99CeZFEz8}r~+Sn ziBkG;1?m+f+h-gxDbv(GNjuqC5YO*$&ZK0%7t|N$kc^^!dV}`yg5uWuVR;?#lM2q4 zs5M7_lIX4|M(>aLsn<-p{U zxe$gL@Wxm&Eem02^Fsx;6~fP-yaSdJmp}}(dnPIba=BG{C4UQwoswkaVgycwQ5Wx2 zaM~26c7i{O3PG~l{~%j+Ve;woNiqTA@mU6*{y}>A5yF@ty+P zG%<$+EXr~7H$ILtSrI~8d6QGo&Y{$HfV%=6LMdu+9tCzv(7{6ihcGfZ!_18|6_(%M z@_~F{81_bbD%tih8a69cjf(c+_~~9yftKM^?_oa$wuPg%v5*3GMe%b>kOB$CxM_NY z`ezjrC;i$?IjAT(v<&`V1@`ph5|^cHXXu|YdofV%q9|Sr+1hZktc=#Nm>F;kN-;`! zF2aI|i6CENhuokzNz)_EGH&F>DGVPXFqX{d<=&FSp=1??o>?Q%jw~%@4YjCf`Rgl0 z1PM;Ws07aZUX|b@|2K zNb)&aLor_>^^wf&6)mZ6sy(ZvxZ1V+?Zv|!^azJb((r1FqNQlpSxRxm@2;y<8kNGW zr}f31D12O5iV!s6n5HPyzDu=M9MdF0{V3cT-P8=Siq}nOLB{vnN1|{emtM-6YI9=c zudj$Ltq;{&wvfO_>~D@Ad+*`L(bDK@UClIiwlWkew!5fMhHE#F6FkarmF+G=>Wtn> z&9N*lo@OFA2D_pC$kwJLYJQi`vSQcUzH^7k$eb8?Jgx|b)T zGvgEpALpM`^iJ8b3+WEM|&fn9_BM1WmMT)0A#d1@d0P z3N9J6Ar%OWV3n2xmn(3EaB!XxOqz{XAM#+bQbkOr%u{r7MG|CZZI(=suz--)e1Xne zsdIISaIK0r;gzscdzk|3mttpPC7j*M;qg-JwZh*<9CISon@XhGzDm(ymGLWStpc~# zV0m(7QaSTcdYLL=J=aO3z09jJsj_ZTba)j4-Fb@wr#F+=q$;HP!Hktm6~7fmK4RxT zpFZcrIIF+@^2_qqUw^KSi(=DfcSTmp>cH-KOT{J_=wi4 z^`)!ZCRbd5h;qX%o+?%ZM-;B$@8Vu>br$)*95n+B6eAu?7uv5Ys|Z z=lTh9d{Ki`otg5H%*j)vTJe!ojcSrgoKf`TnneF-h63UD{H?{Knp~P^nbVP}V6utm zT3ory{!9Yse1P;T;f24WdKKBBE~d^gGhm`wc~qCCF@fiQ$^5K~ ziE}*T(`|}+_4H-5z2D7%qZhtYzS&1O==^9sIl*;4b^miV4n-Rpn zs#!2Yo1v4thM6g&J^l^sMT;85sD+Nae%3VW*b3ec7S;CEvS57m+#6rlwqPde(Fv?; z!NeIDBc#>|uuU;wusR1xn8S#um=&wC4EkWPkN>p;4VAP&ETBpg30i5}o0^iuV)~px zf0z5>^j)eYL3qpUsv!XZj z3dkwSwM3Cyno$uZk4WeQlgQ&`yuPk@+KHQ73mz{e=-64GM_i4=#0b7H6tAx@o_EG* zlXw`7C(C$!lGc&8it+j(TEbBI+e92|g@L$X5;PFiTkC_hJ;N0^)|w0P><9^Ji#*et zxr&T-jP(s|u$FDCqCdZ2!A3$i==&>Doj0xo4(1#lMo?S)6aL z_v8ycZ`$jJYLy=e*G_u9Nbf+gdOucRLkr^4y(5YDJ&{bTj4ChYC3EqOWX5U*{*%Ae zL|hkrHWk$$EIu?d6FvoS#(8HV@BhV2+sXLyxo4IaniNZF`@So1s|y{{M=RmlOzN67Q?9L|>nw?-3+f5eXRs*xH+Q(nJ-H-rB`NT*r#@P1l&nCtUbKxW zyl0kbb9>Rsv(HlCLoa=4ZHEyw)~cr}a@F5l6pl+2`0+RDLzgR{>rEEf)(NY=TrS<$ z7GmLXZ$dg?y<%>!E5uxRADA7RBoipSHx;r`U$Pk92Uo9eQS`As%<=?qbY)+zwAvh4 zDeaBuOSiLVy8?In;={uo3Y6`q4`;c@xqkW(acU>AUfz#9I`3A}&;5w3E=_^``wKB~ z*dKAngNoVEUtaedTPgEcd#I3;a36rU3x`!ort<)5{`fHk!j2)XaVM4&WCu_MTaU|F zdkE*_h1^8yL;82)Hzmprq$u}KDp|Rc$VLprVx6;QZ3jL*7Hj$v86OthW;`gQ=W{ znPw(JYhGR)NFvSI!Hf=OkB}fp1SL_%1|t>NJtELSe3lGD8lv12HC z{g+H$rPi2bIXJ@ zJ#NALIEFL74n49K1&5P${*x98Erw&UUb=WQPM=RCjpSO~Ih+WcvSf0PpowlcW1-V; z1Uk-VEtrcVsF(xnYBt*m8_C_LyErhCNRAtctEuNLq)$eY?^!lJkJEdJ@;3qtiuh63 zZ1?Y<42u&-(X-#aVWz{x!pbdNMCZ|zB;lr_&)x{+1Br8qZKk9(x@Tz?+Fz6#L;7&` zCQD}WgFqj#b_`(+<28{fYY(yVF;Oxe`e!^;J7g?IhVz2Rtnlq=pygq|bEQI~7g8Zy zWV{Hp6|ct9zs0{aGxkD1j$B5+lT2ALL2wiJcN_z_@8b11eJ5@552gC^dtgqna6GDh ze+jFJn1gW<4ij+tvaMn|O(0Z*TopJofhz9EtAUC7wwebgc1+Yqiun^!_YPDVQwkM! z{C#e)`y^aV4>F5vMVCn^e+ZLIVbLX5H4Cy;YRgiGC{~&+RRkeTw)YRE>AWt^QoYhQ^=xW4Kr;cVy5EHyJ3>4 zB(BdVP)DYs(|nX)0fvaOfv&labqD*C$`hkwPosZCKq?z>Gbs0Oh-!4 zeNkaok-1Qx-=*RodyeX6D7ohheP!+0c?BlT&{xz}T$iA{$hQb5{AW^I-$cwzeOGPi zeJLm@^4%}&EY|WlF5_WuSyITl^b51dUc{&9gRNL!ouV%xTSQKANve3hl1{VmV~*ZN zcnYHS@|^{fEV%E)fBuu<%j@Iyo-ThL(zpDFg;L#F`f^%HCe9Y~3ZncRdMX%W%kdPC zXX%}_I?R@tWwfEZB6>F7ykK_BOplyRYijLdX84NGZ0gX(-^@g5Cjt~$IEUc&Dr^SX zWlQoD;d99=H*-$X=QIwz0~ew2kOKAMKxm&9sMXIiXtHp=PG4R&bmG^B2%^VkVlw@0R1} z^5>`R%S@L_0U|t=8_J+rwAm@si0Sx+#I5)|3)!WGlxh~s9ZcGlwW2)5nm}%`bOwRR zNF^|-tSwlqFD^W{_%yqZa4$-0;pcaOth^_{ikhf?4z zZa)aJ{Ji2JRJ8Uyd`j8R#dNC2o+;3537y0k-b^p1AD{CkD7)CU1RtC6+-YWVE~U21 z^McvL@a5={+~1AobWU7~<%c|mnzie{3u0z-sdV{+q&-BuLlIV-FT-pbPGXWw@-lsl zrvGLke!dK+k~Gn3rMw=O>!Y**Srpi^oO}9dKK>#lIagrig`EPuB(QN*AVY$&CJ?$3 zk6UGz5`*^1MQJ=*NfvWC>|PqGu?qFexfNKkiaUK@4+U=LEn+7eR^xvS4yTv8tyW{L zN3aBWQ^JZ^i_=AlIEr$Rym>@5zX$FBIchBA+-sX+a;JZCyiR3L435q88*C}J=8+OLZ^w3diho@62Wxt2Wb zCtEN!pJF*3*t#iaajZkT!yF|`UB{)kmM=oc42@=gt|Mu|b&9FIo?MS?RA9k+{8_{I z7^Lpo^@MInh600s7O@q#&+^CP1I@sgO`8p5^Vbs#h13ls;pTK_Bk4)P)5qvoUb1XN z@k~}pv#oHWKEf(N+}_Bwvu-1vthbYbrrJ=xHYOEXZo9A?fL6eRewOvZ!t?`p! z*QH`5?tW&O$3GOSav8}mHrvLNW!HbW#N*mpF#G?Z1&--x!DQct>oq%@85TjXAr})V zr9y1Qu5AP}=b+z2_U)+OOf#u(ry1-%@LQU;9T(2?a_U$5+&kp;!#k;8L}y9d=e^V~ zV&4u7<~;qIaNmiIVZ569rO{0iiO+u#b|Ui`HF0Vu71ZRdkrghx^kubtAI-o?^xj2p zT;Y=ib8;6s&#)2)juA|6?+^zTOk=na$ETZ_#NAxKN7<%hV%)^l-DK0gkYdsTLflk6 zR@g)Idj^?lM=^X4=1*|WxlEd|hr9VEPB%A!>>_$EQ%5UGDaM%l+ivX2FxL6Xy%>AX zF&Sn*p6tcgR30D9Ooe?g1u9!Gv-jaE54^v1UP)#jXN;RuRoPGVIkNk}%q-ZC&LLJ5 zNanRJ#8G_M&jV?&-h!!>O|G4j_RBw^=XzX&I>`5^u~^!-J!CUC&7{~bl! zLsapFLBEMzhp<;L={J$%FvRU)Mnc3Nrj0BZt$?ux4jsn2_awzMpB7>#JdSX|Bu%kk z{yu_^Hr>p)h&dlPb;$Vrt2;+1`L&s58Iz?)Y0Ptl1@j{Xv$Y4&-Of0Qw%c4O3lR1T z4SCpg#-z@dquix;%u{suF&yTEEThi%QN>Ny`Z5Bfja?*Zz4n$Ry{EW;*E`O|cbT`{ zCg32>=5OjQ?j1+>5U;t-bo2?FTEx3MNgkVdlRp|PwC4|_sVT6Zax0h z6B)frI*xbjQIK*mWNk<`vG63d_=30KlIgO62IRGi$zlIfj2&Kzm{a;*+J79ab&2M6 z<`e_VJUdKa2i-~VXaTBNZa0NS`!I>KSEa>)U$RTLI1#|KYHE2bTCG#|9)2MjUoa!LoE>k(xG4PN{ zb{2nL9p8an1w7PgI?Z^e#>MwyQrAXBgm=@6wAdiDj{^6lSD4pHY{>aSB-+G382)Ybqo^`bshG{1;m-OJ{bImG^p zxf9Y28u6K#W7!}0r zOHA^tyu{$ZgB6{ZnCb9k>E8+LX+Z%UlZ8A1L5?g)}?p-!Jh} zsQ(olF7=-TER(rHeeb59mmuIOj+gnYz}!zEe8%@GCY>}<;Rg4_ge#2xyIF;16Nzz* zHy&Qa@tf8bvS{m2)4PLm*O1M(v5+NQqfnjfCF7fNL+>DNU!$?Uwjf&Ahq99UIvHMb z_^r0`Izy8hBIbs^Aj!&G-IxFBwVSR+6;a+b)c9djZvW*BS;Zy%)Mm5i_6F*=mQkxW)@1d0Qh)Z;|{*JgQ$MNfFFewImvHOQ|(y<7D8;|eIS z>K4s$l&1o(3WVks={ml(R_r#-v8RusGYf~>h}+&2XUuJi^TpSKPSG1Y#CNH^($9jf zeh0Ig0xTHsfKYegWWe^7J7|XmTF4d@3bhl#cd^|k$V@YlAB*;yyJ#O{^QkPy>$}wT z(_jVa-6IYULloF}j}rC_Q{Y-?CzqV1U{;+xbuvwv`szvTUc~>PGr(qtsud> zc80v-`g2SVYN*n9y}&?+Mhcv5NW;!)%?|VFFVNZ8SkafI&dw%AkkT}iZ67bOIjiX} z!d{-|z-F>$N{gUz40wYt|HLa$ARd3my&><*trSzf71i`=IQy53d4GLF-r;RbvbS_- z4@A$m%mN>8r?~KTSorxC3ygh?8EkyVgp2+iBfqGQW`-MJCk0&IA4XZ=Z1QjFC;Xc(Tt4eVQ~Fb*KYHQP2S{!9 z0GYs`)#6}|&v-xQGksN;;R<|`VE+gSf<&V)IGuBp0!bsOn|)t!ami@KIE|)XXOp&Z zWr#6B&#!VYHBL0p3_;?|SNe`e;}r=1hN*`W6sSLe>x9#?UBudNIJ9`8q8%qvf+QP8 zrN-KK{ElqyBqeM3omS*FMS(5f$tKMNTz(Ln`BRl7;Ro52o36ka3EHzEOnQ?sho-`| zXKtZCxzXfiYnY^y=h7`+eef%4OMa4PPIih(S<*b>Hpx!!IK$wnZDW&|B)u1e+RUtP z2-4QFQ4C_{aswy4u^UVZt*s2<+7lCqw=xv9Vk4B5p@`UPWhiddO4Qf*Kfh)uu2owq zQ?$@N8-IhuHI0-nmnk!mS@a&vGiE<`)LB$@#crj;xUtTUdmyLB@V%Q$9^9<*dTbuBVJ=$ys$wnwYZ&CEh zY=#Ie-#-f2*pk3wy8`jHNLuVrV4svU+oiz%om8W@9q~V~TQR-uh|jV;3OMbdNv;|} zVISM!beFw~4z|ZcgMA8&vM0gq{R-T(rv!-y6e#Ba7=BRnbTAmSgNNjAkO)2``xySy zt{qWK6Gy!J>zD+E#a2f{I0t=Ha6&b^6X`FX5R04);bPTEU3S%wM>-iitk^H$jQWt1 zp-wYb{fhcSB%0@Gm3xpge)*&;Fxr`Bm3~HnnCu1{@x<8>qU||rW=d(xGZb*npbf9d zj)yDHDaPd-VX$#A1o5W1sEeVE{HCR`d)((j9v+t!$ma@Zc~yb_u7s%FH3ibI(g4_U z7^FpBS4_AYMT@$jz<3Gv-BjSAo3wIEfuosR*;6JF|5iCDT9!MCUX}ynh3_ixGl!vs zR*oH_@`eDg73&{yp?Tf^6_uemNt*aXDICd(w$F0~{BjYMs22((=b{>}bFjR$lbH)I z-n~*F_zmt?$!#d39e!hGoP@_T{5qDK%3yV`J6EEUJBe1kS1O&|v3=}=0%0ErV7fa2 z@cN_}pFH>x@mYc7Jm^mTqQH$jSXs^KJ$Y$0X}n&~OFgILg*?OSbqU_*rTDLZDD}D? zfQLUNVDq4LSXNQ*Cl__6PB?eegOVGVF!3jqLq0>4=E(=@Bqh8GE|=2l=st}spm_a=6Y^C)Jo zdzfitxWyZLF?kieDo>bcWSG+j+RsDL6Z3}IimZbPM^8x)$*1UTKE!Qkeg&T93*+MQ zC6Cet6w}9-nC#(TL+Q^IU;Mf1r9jz&)Z8g%n51N0K|?t$!cT$u1;b3ELSH{}Vxz86 zr-L6k)nWolCOGIvRdWc75qS9<%4#Cm2vUM^VWvOVSS8^TKxFOkl1AwVC9SrvHU4IQ9wGh0E zt*T^IL-0Yz{Fzitt4cMm4x#kP)fMw2#K6Z|YA6sFN*^<~mIAv%$u5Z_B4tANFsxWJ z=O#f$7+vFlFuKOqzZq6^*H_~3a1u6apuqn6VcEpzZZxc=;dnKhZ~RFUkHcxnqnWXj z;8jB!@9$Aw>!S1)Oal}(gzyDsn(M+g^isEn@ac|YMY;E$WD}80W?#$@X~k>7VpLTn zrurnerWvL(ic!FJdc~ycun=AxW*`%LQfEYQs`Ejt0-42$us55Eq@-*FlASF@(Gpa& zh%iL3pEJCKAyj;cAlgIXrNE%|;?Rr|_;#xU{mA|jSf0+w889iGAPPi6Jnk%sAn|u3 zVTAxxc@4;Mf6teW*DoL*>icqPq0_*xvE7ziM<)w)UFHIZ{ z_EX|1rOB)700mx3Fqxf3GUM810A+?Lu(}Kt9X(tDyRz8N9HBtxvIH_?qyk6Fk|un# z0(}Mk5AMMqU2Xc-*qAlu6<2_l$6l`ZLG1?q9{3 z?v~Y{0ksuAHPJr3G0b9gXH%0*du~<^)vSrDUA8E&q9)DI=^q8+Yte<-)uKw6#Wj{1 zrj(YsO@V{8Ncd#C0$#N#qt8wS2G-{O-etD}nYB^V?NuOc4}n}YfrvM*gAdF0D|%KP zVz(ttfqZF{^;;dvI_7|4>et2il!FSaks!}u1(FY8FMB<7cO5Y^)}li_YPr=h#T==J z@u4h4lJ(|QpDS?s88fhzyB^%trL?#{9p{;|O7=i1_C2pa<~b^)b_23WxuBTT2INrw zUj=?NpolHmgD-Q4ZD^>XmAzsH_QHJ{Px6l%QX6GNt43U>A&t;4cwMQCYedK^-%#LT zBMP@9Qvrue?pU=Olk28iib-vZuIn8IzBR^5k-MU36Pixdd-Aui*l?GC>~BJvX7?47 zc8^Bx(G+Ij1C_9QQv%ZYp#*;7%mdovDJkysL@~))xSjB8#x3vPrxwh(W(-}XK3B|Z zy}@3*Yi0=5j=r#98t6#1_oW3>ShQQHCiy1t*R-oxdlbepG5)p zmQ+a(PS=)d{aaF(-Looi%{ttLxkDD*wZu{m8^xB7GelX95O?CZeXihtZ5qq0WLoEV zy0l?-3cR!p&n2cjBC&`k@k&QU--_pA?8Po}nIO}NN~_z7IP+T4$jo*P&mljCV(LCm zv?3`B^o=st)`rqnsbW)W0^yu9+%!5&X^jfsI#dQx(O$99Tw0IK9nPoW+hF|(kBgF7 z*#>V9=20MfTZ;XaZRS#v(3Up(g3m!okkM9NCTud7U`;-JEYl7vE%+vsWWqhe`ASSX zdYHqWW`>Jj>h$0%QBtRId+aswQDCbC3s`X`B{@3)Ru@#@bwNz^??B5Q!OnCkhOy_! zWK8YxS4^pnh7wlO#JP@!u#^CNnKSrTH@vMQMZd%bcA4-;N1S$G2fGCEohVyH)~rde zzA&*m-3gO3*vk%+5)2X68KP&1Qn?u%ZYw5BrZqds-S6EPE3NAyy)UMKV^<2-lI3qw(yc2Ud}c~FLvcBz%po3h#odF9yt^4%YmX!4 zZ?L%Aid}c!Wf}CW=|)GEqm-hDlngfxE?Ef6hIpyCvsAco9+9?ES~350r^LP3CojdB zrNdp+aMF0gFWG~XpxNJCbH|v2mI=52P1Rjv4qAe|y#c;W6qwwY+UMW|-o*CCp}tHxOP!m& zxuQ5{+X%Whqja_VP?i9_VwUxxO71hs+?QDtyS|KkBSk7d!sb!4Uo$FwF;}>SRB5kW zF#d*$lKm*aDQ2Dfa+%NVN54~siDp1bf4se{{uizKqqU0pW~p_gKUvjcf?0w>0|4Ea z1eRc|1P)C7O7Ls|g|h9YK;3~@PVKIMbN6tzj1R>7F+CKMV-N}NG3zT6GQtekjxy^j z!M}rWV<;2861?h3Xv!y&(1!_M$xQAA^LtdeIguj%Fv-3p;=lsF-!RzFQXAPvOdV`! zrTO=jI81CS&x`FcNvI!ThFF>!nM7x~rN08tlW0qQ1}M;Q2&Hc~P=Rd{WE&&_6_*U? zkf<8Qpk!QqGgyHZgK62NZ0MffB$G*@A&QO~YA9tDCNhRnOGl>ts+oU=qOxkJI5(6_ zCUCg?4Ha#M5tC{o6gV=B+gYVi5`=IXF@-KNoG^?Ut(XzRndnF!tH6sfWc@^nAB|JF zRv1Af4vbeIWISSK`?%*$P>kludurqL~w}bel@Md^!r-6{jm^{WPw++M{9OW-8{?46eG3lIfG87~3(}t2ax5 z4r3^G)!7QXo{hb;W9WlN%rP?-gT-oN@ps%@C7L`Ie}~UA>5avV{{jW-k3*7Wp&9VS z#c_zQnHcx+h%-}_IC&9$b>euk%(>XixQJ_C<^6Fy*%_89y8HxEMK4z%Rf3@_6?n0N zGBXkABJxcnLH$*VZZnZ$)?cl_K?yFdQ6Odw6&f^&kn~`mgzSD`ti`Rh*kN9fQ}{P1 z`tc+#jgXBB%-%r%&URT-_tk1Ld6i;cgiOC`vLRY)%f1K+GPa@UH3d61yA;!J3dQ$g zFN742-$gd;m8Gdp!Nj3GiVoX@Q?s5@?1odJud}FOsv%O&5c;t27-k2n7p5{zx`l;R zQ)#fhrx622!bb4p0N41+#WeZYVayo7F3(FQHNSThV4eJyn_&l9bwK=Y`J$sC7 z<7bd?&91kOG<%ImsfGw~til%faDB%GU1E8uyWyl>6K#O!p*_=&I- z8fn-C1;(e4_rgmGq|P-sh*v3G#v?xc$=HjQ!VsF}X%G`nrHh3M&sjWi7+(}#5C)Gd z75n|>BeFDEU_!%Z8N#zX*=<7iXBi^0%y?l$r9`9IxRhK*+?h)U^s00*XR${zaV-^d zrbRKHtmZH`c2I1ZV<;hp%%MAts(Qsgn^e!^T=;cAq(2OP;ui7 zuxZg>gZYGf8s8;eWGE=6%%@sj_gCQ2e3G6Uq(JlnqTMS=fmsWPc7NWQEuzbNJqmlQ zDdG@x-jf&Z9#wt&iV1QP0 znj(jMDam}(B4QOZLowyQmE_pHe6hU9dSS2@-4K`x8C(2inKF1lw3`s9; zFS<+S&;`YWT_BI%NnAsBSK{-TTV};+*h(6 zt9Z~z=GC%v;radIImE!#*SoZGWp ze?7O)5}acp$*t>2o5DF3>q+aj!BA04$gRN84RkjDC)@x;5ucNIJb>M0T-bBc(gd5`W2L--K~T4xf;q+a_F2ETX{KO*D>8oH`*T`GX^z zM9M3A)+U>=7ZE9XZZ~w}I_YJR@`~&|B3wn6uCay1;2kJFwWMQf@P6X<4zzC? zl=jb^Bw^mfRn*%FeLU8J-q$U*fH=7mBP*Mm=|LSfxJyGb6f> zqSRnRhcvKpAJvwRFSV!9Atxo#dcF1&pJOJb`+i!$;-N}>WIy#Zc7y`Yhf`0+_1PuU z@YtJUE2N3OX>>0S#KtscZ61%6oQJqQC&EG08H+w^&0R#D1LzN#Y$2O;fLsPnH8a`8 zvjgPchxophK-nH4xAYDFE9-hhUX%a)FP*tE zcQ$dlf$Ry(x8TdHM=%_>{eQJ=*W`8-&eK@9*ybn-CwBg+kYA)7CDZeJ{-kpVzhguv z^MInKSeI}X$;YS&wh$fX3GSto?mYab)Il^kZV1*&pZZ_=+9`vtxN@9URx`sw=5m5^ z-9Bf*B%ELpW!(h}1|3^bH%|+)mp8PRCn&>)>;J3Zbv=T;XeTL%&mFVOO(fi-nT$VX z@OFv*W9*S|_kWe<9gJX5e}*NQ$?4pSeNT~%_5DA!oJ7A<>)0ulU4s87R>YS(t|Tta{5d3yg>IHeuhYU)yD7u{^gHM)B&>eQNf0T+93Mj?b zqe|F|`F99Or}NOx-X?l14K?FD<5f;9xL~L$O0nTj)IUv~Ho1Uai-JZW>j8u8ywkaYjCP9ri>zvxh3xd~61FlbE@H8iD)Cf z=+JAtEa@WBuJLfy^gVaZW!F%-QcoPX#vrLy1NmE2G`mjlnlw>h+jT}T({$1ZGlI=< z%ku_K)Q`7dl5gPXfi`BwM)V&RYiv25TD`Uw^oG>zHe$~gbve4Y6#JujR&OUY1I5O+ zL~P|vG8x_8f+>53wvs;+fAetkg;b2sBw~}gDUjTugndf466_z#B;__6cexnuht4VWu%QzDwTeHhu{OmtLG8M$&yCm4jIf@dzyo)alCreOCv@grp zsLwq-h@Bysp4#bI@;6HS|Mu(XQsoby>ddjw{N0*Q-j_j~XO?kCU1$cD4SD4Q6elfK zvR@7Pe+wS4)GRkPYo7f1)}C~b7R|EghuB!f3q8pgn|1R?lr@^ycar(ltn-W4kLdlX zZZOlvw#_*Ro6L-{SqEzew_7lwPiUT9_NaO*ySId$YS)XNkn6?0X4*-7xyFT}J%z5c zU(r>ca(`dQA~IS3i=HyDe#27^Amtg2W(|)t>VLjfna9Oignh(7;xi27Ij_>BJ(IUm z6G%QsXR+f8BLQO{F!)ofqX=Hy%vrm@lh6f5;QgPI-HuBNoPEwMa^E!tio9TWvV||Q zz2sS9@(VH__S_8Y#g7-nYtRcbV%MkF9~PZD|9dL!L^q> z)93jR>n4`JLTwHwhrBlgq*z6|i=VG(cZ;;&#Dbl_8hYYubXR9FiiAs+$Xue^2Sa}G z>NPbp(#}M`A;$HcBW=Xz1#}?BuJgu+|2GXV#qodDXTKp@cbxyEZNGe*8i%|!I9rtvZ{8Zh#lE)~3d~_vwh>QTa-TAeBZ|MH1nEXu zm`HkO2(?-*T;7xD<~tIl=az|L8SG^IUt8ZD5Jl3w{W6l{B8Y$_K@1=QDmf=fiXbS; z?keVpIS0&H5l^Mgj5#Zw={y6NvtUk$c*Zjz=B(e-)9Wz!`~KRkr>d)~t9yE8daA46 zW%x5s*eL?4T`_L;>C(H5?t%wSsD6j941M2YDl}@$>w3FFX(ct-R#13ycvKT#oL&C` zUR8Q?WXcCrwyGH;oay!l^!pTFPI!Jqzqb$I#LSQA_h+FL@g<`UIYpq=twVi{>D5Q5 zIuRkkH7VE!&Jef7wf}_nwT_f{hP3z-9?Og3WyrTrsBl$F8ItxHwSGyGA)S(Z5j^3C zXH4-8@a$)-KP;#4FB$d8=nDqmoHk6jv+!>__S=XqFz|CaBd~Ea-B*u1zrxBxJvlPr zD=IkGn-gBWq5IAy42}<9VQn^|Res_M%m0R3QspF6DUKP{H}Fp32p0`6T=)yev}g!Z z{^%igsoQr5*1?g;8Xk^T8452|J!t&F1gJ_to0^Qm@GSq1OQCdxRIUovmfZw0exUHt zQPrie<;xMHQmkIQkWc==6)**-EHfK^{D6P6aLV#etn~*@qWM1&Q*?aNq6nq^A|qvU zK`{$|TM6%v;-@YNvs5+3zFTxkX)D|fPP|!u%BMo9nssg-u?$U=~VJ8Vz(7oMwq7kpb@u#3}p03JN=+{LOKpA#&X!v z3^GyUD8)?KPSBmmex1lsf%NdjX38eQ-_s?esbGe!1dKgk4!kv50dw!p<4DLnn7h&t zGhLYiV=ns-4m+5`J>9TJfR!3zj`XrKVDcO3X3jmLU}~hGiA{V;O3w zSdN=^NKF_!Hvcz%*-F$`e3|u^H--i=p^->aB2(fo^uk_JHrTxi{j6!Fg;I~&I^q`J z#sb3MajJ`)=OeT(kRe4oFr*chXyHq&-%5gj@nO0K-bkicLP;Mi;#TLC?}n30Sve&R zte1G_|MA0nIIBFZ7Ru=&8FF>r)>`oOjY0`V!qYBjoH%3~SfR+?BQjpL6{Ha>^h=2; zU9-Y~TXs^0G_Q@zJ?lD0Ce&6&3wLhH*e`3NXCm&?C2OS%#aM%w`;Zfr4=^~DLvS7K zu|~xWaiF8MGEMM*&e=pxXVSNSX{Ir3V%=e5y9*a84+HB3e9?i5> znzA_WDmeEeIyZ9_I`_UUYB2pOO8VIXO1QQf-e@{)=aW7@!wn>DJCJbR^|Fi@uoppN#K0$q^Tg%vV&R3bf! z1BU)eecS*q*kdFkV@Wk$Qvr2XAw3=7Wu&mFLJm2gC%&0UNQiJA3(ZXZJtw6J4RKWZ z3tO<-EFo7MQ6Sn*hHS3mj}teY;9^@x89c$kU(7tEz$syHjj^-D3l|O{zf4_adton< z9@kaYr^Sy|7PPxA8n76P&kXt52&Kh^JS%6ER$%3s!AKW|toojez;;C!Op^*ve|a8;%YnQ@%!P#@k6K>o)1$_&A; z6$h8L^hdHkd$v-+zR*0Y50jpz(8Pwg4|+8~kB`id2whs(K-pO6-jO54YJWWnI+%_{ zYdb8?)o6&KzMVNQKNJ2bIgRPDJA=n}Ww2VX=tU_WN@p6@)8CS;8o?{teK^viw|`9< z&XD;UCtg4 zC$_kwAr~ic!fO)D9(@_AtQ$ks;;9_|It3PE4ph)!2IIsv(b9s(@b3`p5@TlTc_`zA zE|{b}aG}0hKocXBzVzc-ZA9*P!19bG94T4sUyGiOfKM|!t#R&Y*K|9Y)(rKGIV$5_Zw7(Y1qZqfXn!|;<$7S&T=D3-ro{%9s zx~C&Uy^qoqTa+SvVdpX*rI%J2`yWYWzHm(ePEKaM0%sYL*C||lvwWd<@@Wp|_DpX~ z)_yQ4@r+E+*w`9LDE%OK@2m{Y?Ui0H&mY3O&dJbZf6RN^a5$h;&)nYW4XBa{j=Ug) z!voOG?JvrZ8GX{R>mUGv-HK&!<3Ly*S|USM2BN6TC5{*bfpACaK~~{}8@ONx_DgU0 zTlXBiCgZ>Ahv8H^81-C0l0vCi%j^E8G%^dllFN98$Wy4{+0d(Cw7&l>2{FL#P&j)` z2n0*+bNCerNH}PVfnC`@U7-lC*8k=YxlnimYs?5fc-HDM07BJMgw=Y&g<86ydoB)u zC5J;%!6^|AqL6{_HL(m=fO(v)e z$6#@O!H7`Gf9|g!&%u!S$Ycs$GB|?bBG7YzuNW~*c>bCf^ohhxtJix@RQTf>YcLcA ziz896>?4QmqA&~G`bjBK%8`P;7F}w=9?OsU+fhLUW)uBrbWn&OgMTa&5QID&s|mBC zarKuvaNfWtN(2i=<8`E8T^Z6a1|}rdlOY8z0cQOEvN{Ik1Mv>dsuatwtRH|k;~2Q4 zrYD2zQ&Q6a&AhLKl<>5v1nX0)6PTdICm$)Fh}Ih_X@T3@Nk1-^9E%&u+yG8&k4005 zhcd#3ibDcwl4%^O`VlT6rZg)A&urqe|M)m~DLzW#=~F=*#z~F9f=~6*D64V3gY3#4Xu6w#$>b&v$0JAS~M#87pg;egSY07@dFs^@02RmrUa;* znOX&WOMo$T+lc^$x5NYT__hH?IIReZdnKauRyi+q{;!~dk{)?HJ4lL4G484{pRPm*9z_*VMzpXs zJl|pjM@m~mh0Q2VcqPN$=aV=wF&U%s6N2DawO5nz{Lvn9Z;WV`f-=Kr&=IAw4s~jW z2gSK57_a}$k|B>$V5f493^_DAK#$@_;|gfg299>0C*$R|fyS@Mqa$fl=LU$6Avh{4 z71GVtNTF#+Y5CM7g6SjGH0cyTprxUqUDM zX^*)+MTMv1)mM>_8&8~raMB>F{kaP2{q9ibOlVntJHUh%Z-#|k)v$1N6^xT|)OfC( zQYs4ObyS83KkxEF-8*7duPo!lp^g|fx=%RK?=i-IlUp4$7gDoM&`HlZ@B1^Dg(NP> zEL_2ni=EJ%y_A`WSDVI}u&Ub|#!w3f-?861I8_>ND~~eafy-ZINN8sagm2#^Bpey; zFLg#=UqsTF9vD|SozZV8UEt*t_%z6n{4UBwVIOkCFhZdl=t7OU!V(>Q2{EEkT~SdO zmb5f7M)b}a$)v^S=%-!LlA6f>BJmn_L%Ua7$dD=B&;(Bhj+6wdbScL^(26R$p`sA1 zhq0o+U{i|ij#mq~{oMn$zVl+B6B+k}sw2%f z(WxgC%<$R5wf6kj24732!yTujm&X5R-*D`5`%FDfVPxLnWrp@f(8u7 zz20y*?!K#TRfn4kZ*R+x;^Amg>|Gh+Jp$t;sGK9oBbDZ4v^xMVi)@zOH3FtJej($1 z8G$aGg5#%H)sT)CHsJUvMwFbuv(tNgyXSKZQYGNi?~Ky$jTg*)tw%a{gNjE0jFelh`@MdO3a>E>uO#1O%H zGc-WJ7!0bRGN9}yE>S!T;Q?_BI<7vJd$_DM&jV&Y7FHaTP;*Kj3k|oh2J}nizOfiT zCy-9&7vQNKq*)m89*4qhb*or~Iza|BVH`%*Xe<%^DsX)qM#6Ng0s)|M!yr@g%7(~a zI5A6uU@Ff>Cm{n^6*AWpy6!T;R|r6q1Y0Wrr*(!)BFCflFIX#LyyEdneHuR=?zo4w zA`KEC7$GuIV)v^B!x2JfOi>fyi%qp72#Ychb_ibHBxN}JdZ77lN>4lB$Ry3~m#FC6?K#h1hLx)%S^U^ERim0|jt zp$x{glwnU37&0qcLQJTrn+oxb4F2Dr3=XFW6l6iYrbF#h4Kn6(upttt;})e_$z%o# zSMu3!1YMs2U#wrl3$~nzHM4aaI8iziou0CZ6RERMw%2A(h#s$)g&P0UApLu&Y^fVu zE==0OWbjx%2aeX>5>$)&!)8c8qYRWKt$;A*~B3CkSUZajbGNUc&nR zi7^tkO+p&vEryP_m#YApwHUXRxmP4)5Idn;)GBHyx)O}Fqy=cDqCdXi6feQFJnouI zKpc5tOJTI`bs3y<4Z~aX&LPIzpy9z%8_Kl^)g_l@7-yGm@FG=k_;NhC9$bcn@B=sh zKfIV4-|vQy`9iGc{#NGBa%D@QjX51zjaf#q9M2;r@y%fZi&CDu0w%1gDdY81;p#A1 z3E0?D2LI|bH(~!TI3(1Uk36G%Nbe2NNQZ<5^8UKVh9>31E#I;^FY{WkD?QFf&s9v6 zAz2ecF(Bq*HXphQn%+*4@rqZWHv?ue#EqJ)##M0uZChTv^d5}5N0FPR~0QE|pn8JxQo;~^ZW z12lp-_w+d&X1xxA%kyc~dOYuBtb;vPt2r@tRVYr3T8D}3y9QCLhlQ8cadz+Z&^LAi zBRUAao7gW-hS-3KXX!>*SQ?EH9<%|nMXKmXGSLtKV(^hcBO}@i53qxaNsQYK;}WsWel=#S348GI>(*|RS^T34$@_s3gVT8wl(+|@ zB1?d+_M+%Uea34*EB9is-Ztcf znSL0OcN|BQiRC`XtTyFv(LMx!_1*^`Ju#DzP$9OaL>Q3Q-_Vn8Ssl@(Wq)JPU$thi zA9akxLrSgv&|J%wAzg(Bb=a>rDGuNPv)nFBhjd3`GI+QjBedTP#2jKYVh8)>;NQuNO4Z^TR;2<=|x>bkusq`SM zPxX*sb82}A6?!$1kPzXR7bi-*!wjhYVX!+jl@KGcYK6{PeHd*H^5JlJys8cv76O^* z%Mq_VQP?|J2onzabHr>Pkf10Oy$(UG_w>3D-r5Jb!vM)^mST?Fq)#_**4h%h4xJqpoBQ4)edbren2Yr&C<78o!a&m#WZ z`WWmSk8Rr%{7-XU^Mu z8l{w77~w^>XE19{?aGOOzr)>s@U zhF8Zgg6G|jV_JH39v91EEDiw9Ba953WMQXpul5RJg#&b0sbv??lsg*Y{RPZbI_o*7 z-?}jIJG+AVU4%)oI9{6-*l`gav);#v@q1yC!)KW7S`3*sh$$(?V&-}TiZEG|!Z1s^ zSqzIaPce&a$i4*kf;VR*!h|N2pu^{vO9+nMD?zL7f0iLGm+;O}_)Ug5enZ9LStfs6 zLSw!DM_O08dfY#M!V&z4O!fi(`6XCZj>D9gfYW7+gyu-1p&_(s$Yrz#*IyN~-!@$Q zZtW%nAcKY^Xnh4{IXW}MfyUJhx1xzx(6av_?FBR0GII-T12Hn6c zp5zv;OW9Y!sfQqahMd2OIum0!u`N0rd#0~}-J&H&MqWcVtZB^&oz~%IwCM(1{Q4Ri zvPH#V&+Cx+(S;M4T~PO0XN2#pxel2-eK{P`7eye~(Ii=D}d?K8p=JDY;5Y{*UMt1*kidvC(*cf<%6GQNdA@mRwMXDYgd z>#y%Eu!n7v5PzZj-x8rq7xtl@?zd6*f&JWN!*1i6%E2ye=D!yQ;C1wBo)y;Bj@EycBYu`nEW{5w!F@hC%@(aSqfu@~pkmg3RW`63tltCZcraDXf;6JHW; zMB@%%vT1r3dTnlVxU3BKm)u+7HOZh1b#7q14|im|tUGWXcnG7%n;z4IA_i1hhK?7D zEGR>f8RZf$RPe-su}pBqWA1lcIrkuA{U3+--GhJrspN!BIc)6rh7;N4aQ(ON1Vs)kW{se+=D1*m0K>MqrGH%8Jo$ZBkx-c1cs~5_)^y&q^OD5nzOje-pOY~~new^s9mu^8n zUt(Td)}JFyx|wTwbw&kL8RHhjO1bN&<19utNgBQajO{9yUSlqB8jafTRx0fjKGp6S z`$tQBY(zMdfzvElF{iN-EZ=q4s1m#v$OWQNsZW7tGpuM9gC8Lq$ZK4_*zIOXFB#H* zx`c=u-I@ruW-!Eu?QBD+-)qR|=P;zJa4MJmx>F8C=;j@<)s_W*k9h;RLknd5b9e+5 zH%*i?R>&fWrB7ZZ&>Z#_u*;tkjFsCBcrM1~GX-sbi@2CoEtwd5>#1ZoNdv_ZTI9fZ*{B5)WY=jeqS`SkHLPw#az-n2~((O*=l~StfP|BRt6X6Yk8RyExJF6P^r(f{hs~t`J3X_w+f}39<;~styp-+m62;>y`ic7d3cCoOj zORQPs*?dE|R8Zyb@RnET;X1l_fXe;G-Zrr7MN_Uem4Ab#Nm!=WQ8lD%UTV#k#l-J0 zHWe%K44(HLubWwV5}`*wzN4ahSczxs^dHIq90oc62kyE~SVq@TdC*+*NZb>DLib`z zj_6uOn$pwZ*`|=%><0D{9e1{4KDG)LYa}h3sC~_YW0|cBrti&z2Xi zsii`~Av;bC(o!K--hmUBwN##37Svf#c@iFXJcR|$A|uZ^QlChGzC0H$St+Ojg^LY2 z5!5hJ;}Y?ucSsGDtyUJjt^q?1)>xdrzi=y_0S=U%7>R%@J=pG;SRKJC z@+k4@N!QL}f#Ufa@N(~jM>0(@Q<|+0KfO(o5Iri@hZ*CNWk`SlnzbvHAS= zNrWy{7^oTxs&tNo8mhd7#uA?TJKR}p(X#T3;xAI4!DGZlicOrhe^2nq2M z8X{PfnLl$3#`K;HJWkFxLn-rY4qr4wzns(%^Az~x?x|3P2$qQPXQhBd3f&Q6%7}Lg zm5-oA&?qBXn!|6di1lYgzB%keX zCQ4rwiTb2#0b)K<_SaU`r%o1d^V8LwaI{qE(Gd$MAG$_D0)%%OVuGbANO*~i{jA^v zOSB|+BPXJ2LCd1eoLEsy6)bewE)j-gY^CxLCjZ3{e0tuA>nqC&jvKL;Blq@1>d;As z1Rr3C7dh8fdEn!Da&6ThVfG=0dDFLpk+t{(x{WnF+Vn7o;}4^I3J#$^M_WU~%_`W2 zDjCwXkO|hOd>fSkCECD}|BgsVq|o=MMBoA7NTe~Zqp2{Cc@1$x@Nl)NVLnjyBXe<%J6p3mrhUDXib>N8fzlcqXjG6;Uo36JNP_^-L(6Qz+0 z3_n~2*W$a4ikkqAMB;l^G~fk>bIW_as{tJL00uq`+DTlXZl{bs&FJ$ zeKgsxk|Q_jtD=O@8X~cQDqa|dO#4h0L~SZ<0NIZkB&s2r-SG`)Z)}JjJfb1I-b7lG zeIqoe^IOg?c@t?xISko?wERpT5OXs90P}U-Fe&AHs193;5uIX>ZFhqUj(wEzf4Hea zwUC$G9nBQ=WV>TV8I2_VOmo>+)b;ZdT5Q%B6~=#+!4n#z0Rz5Ch&|mrf;mOufjQ;l zcMf;*P{jxXkky|l1A+6YJTRA(X^>VwV7PcebY(q>jHjYtF@p=6puz`Lh$&_M#BgBJ zXbR4)_#Z`hL+cz*c=kyZVN5l>R1sP|Dcl=P0@rX+d6X$aQgG3{s|Mvg%Hv2K(R*);>Q z#+Y_CSGiJFGjwc}B_~cdL+?DY;zZZ>cs{E1#SRAl=1{uVhQoDiqQo#}1ubIm(K-xn z&vvik*OtP3G0a~2MB$tkA5?S7PX>GWMd{JvH*FQP(FaAh1F_N^9?tdX2Jd zw9{XeDjbhzzpmsSfIIlj1V%X0$N=bA*NPKo1E8aEYfj8g!g_7hE|9=LSTHz+8#yo# zL#HHFA}lB*743T-h-M#XCxaWdgU6DC01s_1gEs}izClWg2vOA|AsF4TturT7jF{Mu z6Zlq8k8TI!vM|izh-nDSy)%FjZG~aO*)KBjhoI}sM{x=3P^fM{krM|eU=)lAMfJlb zk#`I9kz#I?Ih9X@RoKIdqrF4Xs^S?ko=+HR*f(2-M28~udq)@q_s*4ITlyIWwfAxu z;!4Tk@Z4@>F9(sgDoTeO=3`)GeaF+>^>CC#4n{dkL5(BO340b+p^gi2A&eV>i*!W< zF4DlfYAi$k2}3&)x+C+!WKNIfJr^#Fs{1p;>6WB6dSvn5dl<*4;iG4hedzy z;YdNes;L%HasqCO@RKF^B!Ij3Z^rE{eA~}{o6x`m=rDYeXd(y)B}73NBjLi~iLl@^ z%}-SI69Vvj!sLq*F*^jegufz>airjAlm+{2p`ZgTA@4>JtyF%Le+<_hKCvJ(@Cl9H zR(Midf07d=$1wxqV?<5*(h641!ZQiez9k9ILpjIc_s&Ux7vsT11N#X7;1Proiq?2= zK8+^~4S|P*8pxFJC+n#3#mwPuRMr{;SsS-gMuaEhTIz;1#Wt#@^!Y9-7Gpe)C!@gh zG6~iMGc`*AeC8p8eJSiA=7TvYnAcOtsSTP{k%H^03)UCgsCo%!o@%6?VzR940FT{j zgTmohXJm!lQ&la50nZrGl*Xsw>1<0XED3xrL#)$)#J-S_Kp_eziAx1|XhK^keNrKV zJ5@wEAl@I&eff&RonEmyon=`2%%m&v;K!7Ra8>kE(`w5|+E~$SgEzo}c4*VRFPu=M z!*f>OIWa69);-pvogLxEWW8vlOkx@0KBS|HQzkN4407ty9`Fy`WHiz`ROAq?O_L7d zbkH-5_Y!xS>b%T4(O9e>hWD7J9Uze6SX}^3`W0>RTMCEMPSqu~S)5r@A-L}EaO(_Q zF{l0y99TD6K`-^xIHNHG6`Q%p%4Iu)=f4n(eggxsXE;g;0i@ZkGCfC$mx-mWG6Y2s zEaZyDl(QI`*ouFq)BJJ$0 zYDDE-@uH>3#3yEcc`%+ua&=y~piZxj=+N{`jF{HS-{E%*KJ$NIM>RZE6^%2oGiuqa z{=G1y6jU%7u6)A;j&=N9pa8*qe7tw+0)bmy{yzeN!i!!q*sd#lakj4v8Q&Eq>i3tB zK*4noBRr|qh-l3$(W@KOmyM8M%`9=1!Bddrj!8RqSB0{htw`i_S4FdoKO%8!H!`a@ zBKl5PHkTttbE7qpVlx=rAcw=gb)&HW%f{nJ2Jb~WJf^uxFU%V5^Kjv1^u*QvF;@on z%Z;|CS99T`2R%{b>U@b8D9rgoB6O)Lj_yD&2)Zng@wQp0ovBH0z%`LwueU0QJ9QC5 zhAd%7Z(%WV;q}H~YS9M{9K4Yer5i99cl3c#AzL`2(-)J)G<2SD!v z3ANx0DPka8GBe%y)UN_Y^yffa=+kAu&y(<$*vuW7kkvk2B|G*MuEz0$pgdcKJ{SZI z*xjOWlo6#2#$w)xGgZK=)6wSiau7Tx+WT2z=~BNlaO(T%7#X5@9fzRGVP}68)uH?$ z=*TA;U?}uvoa4-)Djhn1Hrj%+hr*tl8kF_ZouPPPj645Jhc<-{gMpVtpc!o#hK|T7 zX53~pw*=mF8V966K;BHg+2)xd>x{4t`ZY)sO5f~zuuQB1C!a@YQ zGc^c6jTD;Ip}HeglZEbBOC1TYYT|f15@r6d=dg}_j3tdU!`0Jc6e{>e6Gy2AVE@JI zQEaWIE*Bc$5Tl1sa;y-wMH*J7O+<=aVvNXs4B8upz3~#fzaGBC&13Kggh5O2`!QG` zHFA?7ea2##&c!Zy$mBJK9hGBIsN92#v>pdH{fDq=ra{#NRo%RROh@94<;plT;V4#a z8PCTvM&qNnY`}-TI852NtNrQCi67aRubNQ^FWAcM|O1kJNLM@TT*;4HtLn z5Ti}OlOcwW2VzY?^vQJrf_B$WMq`R_QWrA-Fvj>o7*Jyh;BhJrhfP7~xrfGX6LYJ0LhyOKtuM5{kzuNx!6d$lm4 z%`;VvYuxYEg3L|h92jIy`m}%`H31K#xy3Cam zU+cvh(V|JHHD?EE9odM(+h(J6X&#)=nu9@<-INn|yI-CUqFj;JP&W4=7(UmJ=5kv3NWq z>a!8=A)K7TiN;f6^=Z=#_2jxbP=>9K&1G=eZcuY`e3ZID7{B)-6WCofjCADF~N1N4W&w zXy(%EC3t-OdkMz=@CfFmUi^ zPQ&H}C4j7~4oiZiCKt6&q3&J&UGhH(bedNl@ft|l3+0kX%OBkk6}IXA61v1N_QN9!xyU!!U#Y_jLr_OZGNjW6yu17{3HOhB8_?fn2!hnWenQ_QPVCzN6-#hh4&xYY#AsQH z19BMgB`r=f$4=ge(!+5k4ucPGgpr+aV2wz0f-mhiq0ZuN45>?A-Qx84965d-N+tG| zU~MYs6^9g?OnM*=uhB?rQ=QE)VGxd}VaTA(Sahj1lo4%&P#gxsz?GxoOo&$E+W9dN zlR(%OOad|EXw?>#3!R*sVaBh$){}6*XjJXiZa#?#wH10z<-&EgqN=4c7*Us8a&U~2 zc-79>3R5@au*w|i*jDsw#sW@QZ$oR_bB-Cuau1wz*??Z}2hqteUZ1k|pc{3KB%~%?+yhTdtt}yl z!`h4Se#M$21NK6nWdlwmv%M6>d+`82v|)8bhsqkn;~A4J!KChk*$W%}F7Tsaye9eo zekS1K_PfB(eXv&TF2NzfY!8XRx3I>j0MP<<gVMygH?w4Y}=y#z)=^cBWqY;i+1_ zoH)E+<&C8BmHY7(;Y%RLvi^a)uZGk8qgWmv*dA`_zO(~21hN&JvVWjyGd?OvJi7x> zH@Te*8GHZ}=YVt>a_#_3x9T7v=G5dM47FEtB>51=<${AK^<9o&k4|l}J%kFAaLx*= z5Q1%m$&)3*k;)H2bH-E|f=xV{0I)uXQ8a7;=j9*9tLrfhQ9|&QejyBRy^ym-q)Q>j zsSC-F1BFmO{7(s~MYCtJ6}BR1ez=&y4JdJOya|Om~nw}OFQ2sOFQc=HN4&;B^ZYtNmW$UcsX!Dt^JASK7~UML)r2xAI3fjZ|E z%8+h@+5Qo>qhiwuC_Q{c#(Q=G-tjsvLt;;&(SMwy`KRy+#Q8Wj#O^(btGUm4jufAZ z7vntK@bN$Q6rS2Tox&8d;UeQIg?Bf(R5u+&s*Axn?x#_u!EFxrzZEafBsQ7xZkKXi zSSdObnZ(=#|N9(SUJj3lNmT>SFlRjE@R&2K)1Pp{>>OUwZ!zSrr!vIuDXzpbKX9q0 zpGDE6XENUMv#Lbl9fCnw15w^juy{qU&#CNbU`4zU4Lk=E?!4y6{&Ol{tq)XrPL(1& zc*n8K^KjV)Y;|Bo_MAugtsl7mUKQhOfYk-~Z~sRbGUNh0H2#wexo`n0YU+{sCCpl4 zDUXXNHQGpq%({q1^+WDpN#^lIjBR|isY13W5;W1t>S8o=kEM)fZ<(NpHy497|6u|P zYfAzxgeW^k_)-577_-EI6L(8cYbRGm^c5C13(?wTY7?~`~+N7&6;Xo|sImRaF(Mu~lABp4p7UNL@=Y5Tb)rTKq4ES8bGRS|F zd=1}qPmE+-sh|X?PZN_O?nB5Q$Ayc-uyYgrET(yaj#Z z7s-$XQxWCsahtV=WbnN_NSCftyhlQUoY?lw!On*H?%A1ow?HWab8_Eh~lEZ<}Rs#^wZb z?)8|vuzSZ=8P8;Ef+=s47)reAE*iZL0i|Vl^KsgqU`A?p3=N$!z$ zD>AsK9QTWd2$vU4xsM5ag8}V)fK{w}_weRmXOM`*F?JZ41^3Y?HNLexz(-5de{o|m zZp?{U?ukh7mdiSf9VN2iUp5$;bDq`%+?y&8r@%_}^Gj6Ff7hW*6kPNGSHepwc%T|7 z97S-#163sTdx+LXL~{AU2vq)l8={QgJ%rAf7937`glWMEF$YX%(IZ%Lu8Pp5-p3F) zpZplsc0)YE19n%waTJfe*_1P$UN zjA_FOho=}b-4TrV9M2Ag9TIEPc@s1y_bKW+jMzjCY(aOQV)Vyg8wx{KDibYf#HnYh5Um2lzpDZ%>^Uaz z={Tz4xhhL=zyS?R+U5l&toaB>e1VzrR38q8_d&CNyg-ky#~BSw%rOh&W57!wo`X1Y z^(CrF!m0C&eQHRe3AL^O+Yl#bR$}RMdj;+&vyj7ELuhg)1igaOP9bSGgJ-?MZ3%}j zzf$!Va>g*Mw{R1wx+@VbC4S$0RSD_hY=$(UknBW5Iv;>ZBlR_4w}~8H{u&KvJed>P zEfI4s-YD$eKxXz-=6*ycQ=&cfe}m4SKSPGxe1nU>=bsYNh;NZmzeUkD_)a1f-SHM} zJ%KZa7~=IwWlo;U;g26PU`$yc-V}V_u~#}AI3x)Sdv1C6>mX7Di(-FVKj;lYzfm)Z}syrYMzs%U8(#d#<&`125H*WQRsog zfiwiZU+=GFMswqJ@XhoSjBvR6JFh5=w-A8{pW(A_H-8s6{~3;}yz@JpJ2qYOxOsO5 z?vq(xP`Ki5btwphqen`=p#SFM)FEcoz;C!md7b%Hsp>1roxov35^qI&9b||*gZ3AG zg==;_lJO=e;kJ2sxE+cQxI&g`IrNDiCQ#KUu{d_uQ1i!6VwKjEvTCa*M#b@k5Hn`5w9BR6rqW(M7Xf{ zkH*4N4I=7s)K=qYc0HL2AO`g56ar4xYNJ+U?XId7JYCwZ-_nrOr*Vfg*MY#<|DOPk zwK)w9W0}B4LrH@LozPL^I8YNAvdp-p<|BKQE~JfWF`gGP%EPc{t`eb{>umHO(>8&@ z&8fGZ+DEGvP0&~S(9Fb^Htf4F(h0ZX+*bN(tlNr25202v2ki|2c4|v02I|p5c{}!t z*}Yv$d;S@)nIY7Nx99Nw^p@td*bpisI&kENA&jC7P7E|sBNAK5iBcnVoG@J_5_zhY zX4KypQnhJ8lhi+HdQF_<;V zi|SZ{({8dv;1ajQ;5>_z$NE^+cxDM-tzE?lvsEp{GeQ;Atri^cYz>FE)KWJS8vMlw zXS!geM(!6Yl=^SC4C$~NMZ?)cy_i>Go)yXu-zy132)B_aSt=i18=mn+P5~Q)d*s!I zg?}SU03#}DV;G!6CIA~eLwTB|;23*rc*YUw02q>Q4cYI=1i*-I*6LpU=Cgb3UezC&& z&5Ri02#3Yt{ANa+aD>Bd;-F?m*g3(kxj1r}5d)ksI#yyIE+f2(QgrCF6SSCMGp>X< z*9CH^NJ5M$doLO!z8fy63(Mb~l6bn*;S@63m)C_|N01r1ff{Ln&cFvvongXmWQNut zRqdZ=sq6&dp4 zGJ3UNBRrm-s)uffLPlpMz4B@bG9|gf4kRD>h3Jsl6&myJ$Pky^c#FH>iniV=lfj1d zVengISZ<(hM5-q#$bC~E%1oX~NG=soX%F zA&fxYWTv5<9R?ttHR{|D?6+?;YTm&3feoR!CN{&{sF8K4zrPL*{FH)?#bJ0F5OWaU zWEx}lA61@yWJuBzO|YCQ^dhpfjg8Ito?8+}^t4hskEk-^X0;m7d5Wk_gaXioh{ zLIQRN42h6Wm!g;!%5UMG{ zb}&!Se#YTWO`yyj3r4K`;U=)6R#2X&WtdVL+13baegGvoz#gDqY?+I1o zu<1tr1^xnva7rzz_Es)6@3gftFbM+vm08ga8 zYBMq%1XqdUO#FfqgvG-o!i?_vqRz>PfRM`j`vGZzFbE0RK9V)b54C>6 z0WcDrIU0}m$k*T|+{&g^{_0jV%pb&Gxr`X2UHteqiHaBHm5mnR*GQpd-x8A4~C*UV$0}tsJfl-@Dcm1M_FMg zSoD+=)@hi?%EM4*&U219g`>=q_oNk}u1ldGuq}0LI361AevlA-&DQThF6<2+o4_ zNE43@Lc**V)Un-5#xwDP5-|mr_@33i1)9~esZ3ytcbWk$YXO}jd^lXvJk5$eGDPr| z5Ce*d#WY&OPeKsF?GGmo@J*{thhrhV$NzVpRh-&Om={nTuFIqqv?LCev<;H+Zp5KG z>W9h@_joucK3s-OiHC#kwvZvAEzlDW<5B-t%vP*#VZT0kCqS8P0!K2F(vYwv9hp;P#cqQWDITgo#O6;YHsI?zruNbnjDeftii5N_5-jXB8 zaoduOhz>Hipd}uU*CG&$2|B9Nuq#ZJW=0KK!Qhi>39dua8Dic`Ld@xID=4ezEknYR zV8@ew90~82W=ETnQ0iNjgqYFyB)n~&!-U8xgp3)fTB}0^{n;{P;H)%+;dJ{ zAsKUYQm%v;(ePv_Yq~&&9NUffD{&~jOlBR3WbB%Xuuhu-^Mqv#@ubrxn8~mTr%mfp zAh=9~mBLTt%S*wtLu?y({6;<}!t*gm@m*LofeOxIyzFm=3-W#%n<_*& zS#Z40+2gLklyPlg$_Nc|sx7Kna*|%RheJ!QrRmV86IkuZnS%C3wnJSRcnV;=kaV>L z&1$Fi)%r9EMSlp!uO;7(ipMeKROsXYu*-{ojgXvMH3$Re$Mx`KU1kS_SLf3vBOs<_4+w$)oS&q z8O>Fq_KjUNVNKg>T?5v{{m4sH3yMij-<~t3Vw3$iZmsxLukXI=?{Wudy2T^+HJJ|U zEoP2NT6gwFi{h8DeSN1dpV?2p<@E!x4sV<14oNZ2U2fjaa;f=Phq(3kzGc2F+NtE= zx9E1q(jytO+uzFm_|RxkqltY_&4>$5dT3#))UD~wE>EA|C?7I(#I4f6%)5yboyP|p zx-&p>=D@4}?tS+=S20q1VTFqSh3rk2a>`V%v>mof`R=Od^ytjjGlrMX+4#bC;|^2L z%>|>}A`7-HDqY@EJm-Luk=|a5>3vF+4`t+~Z<$n8oYCd#RL4ynQz`~*>hZ-eb?}aM zG1JE_OA5Csv|Q>V`VgYKzQKr$SBY7wRec&1UifR0?bdyv>bB*(5AM~y?Ry}1czJ_- zkJXMpG~3-g^Spolv)7TcJT0XcPc`ZPcF!f1Z%G54=ZW|0p58US?fa49(dosux{E?L zPHld0+2yk4chbn%HuTKa^IKlrFZy8JNvAyU#GPx;FYG(7nKaHcufMm-U!RT7JLxpJ zzW2@3ZMXfVy)G#K82;7z(MZk2ywvKr1rO%@(7IbZy?2LhZVz5;^?Z}iM?KbjvCA#b zb$trQz4#=FTXxAReY(Zhx#``OEo|+Pzi?FA(?!pUyDkx{$$memeDmtvca>}LNzYvl z{ds#bqTHvhLyGwxdDV8vgmvjnMRrMJXS!=WdTppR<(b#Qu3HV3g*>qM!Y$A%RZUWD zraY=o+d)6=R){P0JBEj6z8E}Vu2kA>=0T(A&6PJN8?@hc-Hnh|O-#K9lbDk?!=Jd@S_afT3FFdZvi-8h9VM?{#4BhK%fXi!(zV)noeQc-izE z)T4p;tK&@*x2Lpbr=fZ7apO5tE3V!4JXJE|WLI-f?}lx!Zn{6YSK}3G)suSu(CYqQ zn@-NR)r(_t8Xq<@UA>u$T>Z#grK$dw9_I@zA1-e1u9dXgr&{7)c*d!(*5gH^$22Rs zc-7lTz1%d_Db&=iy4n2)(^iQu%RKjdX;LvR#OLsissRx>ch`$vrI##Cu*r@!{kzdg z*P-j?AC3n?HfYhClr^xj$Lik$9)Bmb<`YF@FXLDjs>Big&34LLvh z;j{nd?fveY>9+0lxn?WAOxL}&c+dT$P5(`K>2rOIvxe-db<2|{1{a>ZI{mA5UArAi z+5b^FnB&q?(kG}nC0!kbhRgqKsQ0?X?CrNV#ZCFJ<hwa_dgta3=0{HCbQ{vFQGoryPq%{aUU2OmYyNX} z&y+O>`)+?~k(&A}#pJk_gOi<6ber-o?*<;);IQYX!;k6b7p|`8drMlH6fvYx`yW%% zPMW!B9oW4maZ_}l`iA)dDhs98E?j@Sxk*+ppR>6gQV;A(x@taVNaK66htBGwbAEH$ z)mLWzO*|6EZ~N8xSI1`qVycQv2Rlv{-Td$K2d^`OPF1>fP8njkud%(&I`Ng(ZNtaB z+jz69|LUBAvd2Ary;pVcPoSceCmhveoen%mD~tx=g?-l9w@z#P zr1RodDI3&8XIi(p?_S~|DQ>X$*3$&{?4L#AX-A%K3uqgwJMvZQ#;x7kZ84S>PKw!j zqGf*Q`N4PX?W5;smaUF&+GT!E(S({CM%GJjvPXS-y=4b_QZYjTIGuex`5{;jaK zCw{&h=HzfuE5Uxn2Gx{jC%uEB#}4h79XT+$WzfK6^WK?@mEYb7ic}diGFi1t)|LtJ zx9_Z--spYM`Yp?h&J1bTuwYlxfribk8*Ljl+o~{ehx2*W!+(Ef%)TnNO!+ctqO0aI zug%>{PVE|Fzj5=EwOs~#t#UPW+1<`5xX|OphOREkO)N|%j8bX2f{J!IZTn;^PJ80$ ze{6W4dsb<8!ghDOI?WXFl8g z>6l}i=eR$;KEv?ip&nnlx#yL1y`1N{bW-x0!1oLN)9#BW&T`!ODdyFc+z(MVyE;bL zdRu?$r1X2hHLrnB+j9<&9F+{;KAbsSy7rE>Q{Q*jlH88ZcwyG9alFKrSU0uZh|B^G-**PK6 zxK{_)OpL!jV`M^?dtT9v=QeU{8N7T~zuzc07a+_f5-9B$; zJ5PGLJ;eRXsG#<Bb6WiVh{hZj{dda5;GgEFnuum?Y;To0lx{bC)w}^bR$)WA4Zxv^%YDZ;_Xwvo2 zYCA2`NIAOyjj_oXRawBzAu$xW|jdVM13sx>ERypTBR%KFIuduzbF}Kf_ZR@OlQ*%=K0>8a$`>0%> zyXnp;bv=_gv2)wM_T1JyR=DV)DIaHU zA3vS0o$hX@6U>defF=IxIslvzIM z@ya^nSmoPYLjzX47+a<>&?2*>x&y71J8RG(f2-Meq~dh_novnH<(kMz9SeaOn4 zO1Tx|jExL>`n}AVwcl{jtQi9q9CbAA5|Lu$HLG#@!nm(VL%N<%4(NF?zn^lDp4O_R zr-B^&w%NVYd2EdC(U2~CjYnVCUo8q<{>($8x7zyXdGqdg>@w*a|91BP$FuznpI#dx z{@u^u^0w_42X}r}cKPPV4R4%wxz4zL<3?=S?lzO=al3}7eC}l)J7j+MX=S6#8?^tb z5g)p%_;u6pYNx-Q z)7jnHt({BXF#phL#)C5R#C-y}oau8XUa*erskb-ffmZ0LYkwjnuG6wUxfY~N`hE3s z&v@&-<_S?@W#T(a0eq@rzHOld-GnFy?4hRN$ouMMCF$^@qY_vv|88OdiA)u_f9`~`!4zF_EVnXNt-m{2F)Xl7Z`Q_KoPJLq6F4yo|~ZdZmUoor=2 z{P_{>F#GhSS^Zb;ZMS`?q4m_G`Rl#+goN+ySh4?y&dFCZ_bdpn9FwG0oqgcSF%@^$ zdnS!Wv@cCEyRf&gpsbCX4YOZVmtQg@%_(B@!P*j3S_`PbhxIb#<$c1G(h`O`BVIy+~3F6fio zCqKwEzd_QH(yCYYt^9j9M0B2)aj!UhOGm@->>GZuhMT-?hUMEVUXpX}wTa1GHT93{ z)+MDbxt`;~r#V14e#@2tddh0eGvFF^B{_`}yy^d>C*6hp6ZVOCYmw%pV zJ+)og+gF!b8MXgB&Zm3%xi62l_4oXEFE*>My1B0Q!I1Qdtfoz_My_iZ<IF^d3JK|0$iH8&d6QFhcesQOluqYTJ|**}V_?bcomf z(|e#;f=d;b8ZLEQVq6-yG;wL+(#EBOOBa^}mmV&CTn4xdaT(#_{hHu1 z#bt)e9G3+yOI%jCtZ~`kvc+YGt0AsNxEkYXf~zSmdt45<9C10}YKF@hmkTaeTyD7B zae3fsj>{957p@k#ym9&9^2Ozc%O6(&u9mn0akawL8dngmU|el*wZ+vAR|u|9TToJgs;p&d72ddtyX-RT}2$wpJSS?QN_fNj5}F=%|%chdW>_sM3o})F}UQF9|g+k2L2p z%>)fOT$gZPD&5=5nmgFIPM2OV zTa6}HL^^Tv>;)RkU2+rzP5QIUR7{I9P+5VMk=9(0J9%_5Gp8q&k-9XeGBS`Wts}vl zudjl-^QTA;<j8j5L>;(#cQo6CPNH(-T^W<@HAut>cu*?lX#D8a;iWRG-H+N0-v-hf>)*Mbk`!?FDTpi9&*!& zxl$vR!GB+1b#JiTs(gqpo#3r5CDh1jr293}o9jA3kVk$+In)v%`|`D^N{_!rx^m`8 zwLo6IPF&h79?0u-hd5S37r!B!33KIEPo~IBsiGH(;8z9uc0On@t5$iLxA1i6Qc&mg z?1MV=s|q1}O6O&Y{~n2((bigBdfYa3s-E3Ti;}-aD$~#JNO^O6t(GEwAlOs81o^}d zcsiIP$ZkI)J-Mj|c$w0EMh0;MkJRW?)0gCF)8Y$gYPn~-YIxq5U#q3j)$la?RIQx8 z=d>P`2gOO~CvT`(C@7ZXsZiK2WHa*&o$}$DQu0BHGvs!z1jBQ7hGjByG-Z_)rVP^j8U0T!RdPVNoU|?H@m&ziSoL)fA>*Y#1Z+g>L{euiRzm@&sYu;L?h;0*)JjQ(l1!CU zv5P=CqaNW+}pA_nJOjYV6iZ%I%Ymv1Ycvtfpo}h+MPg~Ym8PJm9 z==v3EQftu=>pHGU;t{=cC|6smOg+>Q_VGrF%4~JSJ;c5S#ZOeSp`j9~E%}J0I!b|b zLtWa5(!_{#m}8xd9jR#`m^KsYP!pQYqhk|mP?3hTi)e9Toz#%*pI|aC_=BN2Src&_ zom8W=ovLI@4>ggRn^K1w(>w#IC5_UO>WC7j)^Nn9Ly}}Al+yq~KIWBEru~mHcbbwi z#T#N6g=!+H7Vvv&!6p017T+CJ53;g>EyF zYUz2`vwXHmu+-1Yf}y;`Wje^J*H%HLL8I5nYFed(E_AJSDd-Yb1gp~ZZMBJa@CKXq zFavZ;WvbAXdW+0+y zwQeECKgxy}pGQ@N6gs@F6=$QaKne_{zTA7;`b3A&Iz(pPQ1=6vkRw3TBew?tio!61})ByHD&jXiKg)Peq^2MFRzl{ z0E>Cm>d|$ogp;u~**KX&HD-!jMM3j9d-_-zX~;aT<#kU}6m(c#7*NqUnKJ2_L-$~| zf({D}Z_aI=K-}r0If6a8gzT)*?iE>_D*0PTy|{`D1(IfgRQpMRl(vd7poF*>W%_G@ zJRYwUbovy37Ckq)9U4Vu30>SOrgQ&Krb)45a4XtoDYfQKuNIQ1(h|;3Os*55Q?f!5 z^Zg3CKr5*yx8^QS8dH}|F6y+_3VmuEjj@t8p|txPZdvOvwWy!~ob&;27tJL;V)oVB zUBpzttB>;P_$RF7MK&T`N-pK}Nn(TI|9UE5YijnKv!OmF=q2(pY_LJPDK8WZzS`g> z_VRU29okBJbIU#pf+Jn|!fDb6TeyAyO##Q)Nn3DBe=3m6)g0EIb}&@=BVc<9{L4uw zwjpq-5_M}L^`U}lPD~dXq8faa6-a`LNRv7=f?-c>1-wWHW!rt4kKYz;aI+EOzo@5R z;MN#J?Te8D+0z)YowR1;qm2mbDAgDVwP=E**^WFO&S|>Rji%BF(rJoe`J_fz(NyZg zZFJ)`bCgP`sHwCYZMR3D<2{(Qs{?w@?dD9d@)C*Zqyqvz@5P9&x5$K?n_))i=ZL)K zw-B%z-SZY%F&*awomqf_Zb-{o-3DHFI!HmcrEb-~W=OgG9!+L9aIle)R1{J&gK{_BxUnB$6y8z*Igwj2EQ zk})CEP3pmYt`P!yiQw`FdSMH9gzMCcx0%B=j%BtZ;!rO!e#pCx2h^8paE=H3{f=Wc zKFv{)m3^3SvN@`_R(SoiecVi4MgwYOfX#nT-9}^~x6Y0>=0Z7o@2MO-i zVC(TB3Awh%ZTz(ls`K2V*GJ1Nq@D1 z4oTD~VU0+eMt6mQa~l{OS@W+!P8-zx;&lr6WwuC<7KS6qfVN0ty;0DKX~ZTppS&A< z<8`ezDd-k$M(fC9nbi)uL0c4b-`Zh>Jm0E7=7eCF#BFCpBNU_Q&<-Y4??hLV_nZTv z@Dsa}VXOA&U2(gZu(dr>f3Fb&a}bn#D0S|D1nxP^=0FFu#ETlizayHC_A<@GeW;Y8 zj;PFM2N{{t83R1B6FSV5BLXp@>XA}A((eqX z5Y(t;m^6^9EL0%Z!_c!^oKqmZyTZlZ^9rQAE2^sfMMf4~!j=r$!im$o#!oyUl-*6L zLmCmVd8SBQiclnsD=c9n5bpNt3f7Ifp%#E zSchzTN@puQ=Kpl1FFg_B+7hzsDeXdukq~a+uFVU-A~CNGc}N~oX$p55w{RYEeljyM zmm!4QCyab4t)08%b9J5!@kc*ny0y<0QQHy(`P~C6pa1giS zC9{byLmlMy!i4mM`u38BlXonzg)~n-DU{EgQ~#=<>-tTxd=%OnWk2_g86^L}G`zhx zM#AbU1=6CA)Jv%?J?$;+N%?(H-KIYjv>oHInmJHI3gYoNUH(&0Ym=-m;$Kv)Kpyvn z3;W*+WJo{Q-2J0K%KM>z+!RsY5mFhY_D2V9uEGTC0T8rRnXqR7Ms{9}5I7KlA5vqQ zs{?WSl&Ld8HV8Rph?($ekTi((BD}AQ;5z<(y7>RM!XCx-t7q-kZNGLb2p&)3|+EI9fTGv=0Dpb{k z<>I8Yg>HQI;po_zw%d5tRHNRzy+b zQ17lSc-EC3^Fn`bCJY#lM)*}DydDotgfG*KoB+*=mQ1LaAnmBso7PXjD4RbKJx4o; zDXbH5tGFD@N8>~3iBdPNx(ySm6X7hS9WOXg%p`P{e(jlXXc9DcIx@j{GO}qD!G!-N zqv*>cnQ%a=Y((POxD$MyjHi*3UJM6JLBkCmNn@r+`*MM!`M>U@JQXfSCNN>dR0Npx zA1~NY<~U^uJ)4SFYKG?#p14fIz2|m~@P53q4rNY*y4`qQZB3=q5UM1R2@#8xm8r#a z^o7VN3S{(DWmVcV1JnEZ>1e*E)0oaZNvcZA&0_T^cLpZqZ@li#0zv1ew2JhSq>U&w z2?N?cRdA?5uagkLf0+VNrc}b>sC6=M>#K@58FSNzA_ej>8TB!vM1ib&pe&~F8Av+# zi2`0T0|oPZp+Lf3V!Zw24f8%I;0`G;eD$@CWLBYH??{2&m+Cr7I=?Z%4u#_}#Be4` z`k(>Ln1u?I*ID}@i*Gnp zijf|(v8@nc&4h^dDhB)(dt+IS71qDvX`&|1&`2Pfa^tWMhVQNstj{+ndaK_k5C;B{-d)z?{2LUpVqsV_hn zOM2AT=~Bew&e)p`#yxNN0>si(#tcdqN{uP}k_?*@o+#|-Ux@e#@1bjyg2Clqv5hEn zA+URl0@i)iS&Q;RuyY>$J61~)P;Z8N5Gz=Ag&W*wG_i~=3NVnHW)Jo|ZlY(geWrPxwVgYUx?OqaV1`*cgv z@VN2iivoF4iM|1AXKv>&0XL;tOEEDv`l~>`ES0)&bHr4cDRraW8meYAd>OK?)Dnmh zJy-@mVFrx&rsGbiW6y*Q>8Q_k9hoq^ld3H_El29^odse^`=9jEr~S(j^T%+8|13wH zUrQDQH5#6Q9Cn}Pi66P0Rn?&D?a(nQGLY&|p@6Y%7lLloHxqdGSsu5eT_G^M&66MJ zc#^=azrg?XrB#H%^7JAT)K_3GnRb~8Ux>8w>qWe_M}!y0F+ zfo}yf>>8qGL{nBGo>U%xZ7X0CD$jxwy*0q;p*(I+Y0=6dYE$E8BuQTFy z1BOd@l6OlWrlh?UE!X}YBRlleYbt5gRya$PkjFM@0PWOMH=ygg(H2JAfJb7}cbjwq zCt1q>?ZAQ(ZHH!B9!rpW6ba-#U>c8eE(*A&lD+~f8IWX$bUGJ(oAh>IHS=T#B587; zH}$9XJ5g~V*n#AQiKXhstS`LV33n%-G5kp^HepRVVi$0MI#uSt`t&ZW%QdWdA%FsH z#D*-ALAzmtTfQ8h*p0=~xTd@ih)p+@PsYCPmo7|xj$Y{eD0c((EK79T+ znUUW~nwoq>Ml>&9YR27}E?{kXl8=!XHJ6d3d7387W8ahT7{5Tk26XZyJg!coZUrc- zRRI>jr?LN4fRfGG$N%-GuLZCWKO&{mcyBbgR8yDL!o*X2B|Qn@Rh~oO@dLD!d7p9vJoBAFe&gc=of-@I9-qXwzktQ$auyLh9K}e*Sv;_%oyA>C zd#*q{IhUPGh&+e8>WPC)IDSs*sia92=cJ>!MWsA*qb29@JU!$^jqp-Si?(#Y-PG^` za{XD(aGwisBKjr>YINlSV$H;}_C-8c$@^ExMI@-gZTO z3FSua5(HzaP)A?OyMpd<(hoVEeET)u8;NT@0Domn%=+yUZVt?Wc811n9|cCX)M=IM0yXg zVzn)ns?&%Y2;NLZAXq}(faif40`cYM>eL99I?6P&7zLb-1%})OPqygk=uky5Qt9g} zU~MxUbqc!){NAKK)}kC9V+*R*i4jE{MxR>r2v5uIx3FrT*F-@#`4$@Sxr3Z!I_VhD z;+-)5bPH{8F|dxtx3W;C{KwcHA9Ncof;tK=@TR$!jxOcgMy|S1^|1jt-N(3VdI#QC z#n#tp(u6zc#yuzei<2kn;4IP|xZ9Y*bOkeYv?$;%$niM}WW`;CK5o81)amP8cs!S? zKqBr*-SN_Y#y#m^?$-)l;X-@vp_jX7p?1;!67s)~=yF#JI!#)9A8wNOD3IJDyn8k- zLCIyu8J>CqEf7IhPb55Dl996xD0lN`bt3is~I6#7OIB zs8Qz-LD0aPWIT8re})q4v}f3@19A<&!4F*iiPr2nbZ0v&==R*edp-G}p3Li1yE5I$ z=Xg*t>MjUk^7({H_J0AJNj(`(dLi{t(x<&IqL1IQS8xS43e6@BaTK^jE z9Y!#Se@HZek#xrtxf-W9qd2(Q)0;x#URc3>=?OS;4hl4eIAAz+A zt$T}hemPZvXqTZsW+gFFFh^H~3X+k24nLe`lp(!k%D=knWoWrYGX<8jDYcSu#WP=VN_qKxucrT=?mG-|P+6Vo_POkJmVd@@tO+BEzp`kUJa z^tZrOJa(hfs20i;_z0CK-;YW8z$aOwpj-E-wpYC5b@$itx)`ManIEOiX~{7CVK>~R-rTdIlo=iQg7H24858C`uh;KA zzQUUq){K1JHTe-!vtzY@$JMVHzWf!THF(E_QB~NKY5fhMseVu(?-OggQ{gux&HX6o z%*d(=<#hWjkoH^|=F#s`SJu(LRw2QV?>vcBxsJBCWiZ=N|(iUEo(Z-aI3 zP)OH$g?#>pH)=|KeqvuZ{0HJH6j8Tol%`Z!qRV=C;Sc2Ctt!XMC2FMk6W(`81i460 zqRRJfoUp`skZR;_nvES-c?Y`l6KQXoFl<$grhR9|3o@k~il{~z?&2SAoduoxg>-FS zVsZ=pg(SUg7)kwwB>r~1Amcpj`M)mI{x{MLa^n5iQBpI6wC*=@Z{fm7S64~R4xsuU zxYG4xIOGrJQu_|PV4fbaO`AUkY)W~5uyMbplRz{7@=IZymta;#>@e{7zpzq@uccU< z{lM|4>pXqfPfjWKM`RO#*Q!J&hpI76)>f=BxgWG9kEaX-rWzm0Lm6)y5BnNTf4YVEH~aQr4Q zA~z#6?IdNHIk_s!eCU$0%$d9NhZ$I^$Xakd%2cT;v!*Z=JuyvIkvVY-uw%%RY;8R? zy3CVS*lpm6ktz!C5l=$AFh~^{Cp$3VxT?%ksS#DE$|7+7FIY`BfK!enJF(1>iqw$H zh$tqwtIL{m=lU`se?+hvIUdE7ldX>Ge%qhnh2=4(Y};H#i~@%a;&Ck3Wh4b_%4}(! z82;ubFyWh6)|MM_hY2wn(5$}4gnb$^AI_qL37VQRFRtVvFG#r;PZ<1FiW0x~j?>EY z#y!4R6M21o!Bje0C|k$3f}lYOTC!%G^E*aPXvqRNz4uHo*M^|;Sr9ZSMH_{5{H{Qr zYRlZYYrh4eL4i7Gh_-(jS*RmxA-ax5!Kty&YhxK^o6 zt#oBhq86%kNQLI>$~;7zSP?zYm3fQ&G!;>VmcEz*BuG6>Tc5^kH*8FcB(jzw6TKR# zTp|k;shb%v9V9&(peJ(|RcFH;6AjO=J5d0Vid;3cCL+FiQLl7043{1Th#hxDZx* zOZ5MN4Hd`%o=kRBAX}Xbb;!*M!KgGBa2rkqyIH)SG#i;NeYe6$a0^f%@z$83WGxlQ zMQe=B)4>YlV;e&)YHb70R&52`fs1S}2)d+WEA!>ojpQt(3W|<0LkWrJp*dgKp?YS;D(HM0qIy#LDv;cMhGNQTh;Up7C}2q=lq7wS zKx}A!BiQ^LA`nE-2<87YQi0fxHdLe7#xVRfRsrWXMkUM~&q($JLtFA|0voL<0x_U9 zO;F_IBu0W}8XA#aQ#4AW6oHu1oTf-+KZg-if-*g5iV!X=WW>uJExmRz6BgMc^`m7> zcx#W+Sa0Bk*7ZJ7kx+^Q>gaEMl>rUY#41nKQD%N?2UzJ)A~+vd+RdpaLrq(f7;Vv17sMzAS?%rv`|kvh4ztUYAko7de6 zs?mAF=iRnU_~ng?*%ZQrXdlEpxeF5x`k+*X5mf0XvmpC!$VUD!Vdo21zk4t&i8Rt6 zryOL1Rf95(<#kP^Ot;-v=Er5pnDEyZ*>sNK1$*l4hi3ZOn+bV-&?Lw6!T`<%+q8bN zW)v|1^|ja^_2n{?nRS_koV55OUe*4{M0F0stpbpG=sYH@3BbZfL^lFZKW)?asx_mc zbw>IW(-IXYp`|TleU*y%KQ3e&h)Sqfu3*&WO^gYx2!!+b84CDGARixItMT64TggJX zFcJh)T66)QBOPmnRAW{#T*2F%Tr0S+=1-y)RU zt35%0orMz&AInGglz0F5Hdq8Uyv*>*HW(s3pEKco8+2TUS4?QxR_4zIzh%PGw&=L? ztC)~b>aU!sZ;XTR-_ewVH(-L&Z-)r_fB#>-I^D8EEso>$8-CR3sVG!tLf3wxGD=?Gs@bfbf;Ihm}Ft@$!(0#9)ouA^)qx6qv>%<(YR zCihMVbdv`ob338yl(pc6*7Tzj8llve31d2=t)91Hf_ad!4t?z`<6rdIc9H$Z4QtEN z7j!`nKN!MH#bh^gwF0@l5NMub@#jvzVZv7_#)m3Sami#h)K!K~ zc2koVBDq{`2CHNUd!rXGSWx>YH0isY-KpZ#2c1Hp=eH# zObF`5*Xu~y8!vOB_|qoJ6g1vMopO3%8ErnUKGr46XcTQ`VtuSm)1xt&o6PtZmqjC^ zKC}MCsk2RRXetJtJm&nX>oeCxjY6$3eqY2OP@$K z(uzv%m}rxZTZ|>S_L1puCJ%WWN{MbUjd7O}&tN+5p&G z5i$H`0D8j;WhQ*}LKI!&cNkqMhamGr!8Z<+r_w0?+Hi}(vA`P5LDY;o}`4ZGSq$y>BKqqqrQ_c`vvvKk1HfiL~JAb zGjeGn>M&{q6Go3jw|%RIZ9%U@%mYrNYj7ee=6eDYbjRZ7Dy}EO#o7OO(wslv%6?%( zQvdt({*!opf3C+=xn14yRmo&5%B+)EYWc55$iEJmG8uV3m@mi67Mdyiu7>>QJ5;Bj zXloYLs%w8*LqdsDkZ#Ko=B_Bsw28vkUe&zr*wUIr4cQMuu-v9XJGNz8*~0gHv*>f`K{$! z#*7lCV^+0NBaaj&h^crw>R3xxfjB3j3#`#sAcqaibZOkzNW2M2g0mG(6?C^e<7&Ru z{m$zO@FB9`yTr##i~W#9_hjfs;wMA|U0O13eS7g;GEZ`6cf&(#7c(`w-pWj!%DzX| zY@vx}AYJd!f2~4h;AZO8@n5`l2Fl{sxjx1R+kQBZYm@>{3%c^UK}s9RJw+Bsj`Og; z{gzkQb>kJj6gU%$vZU@z*we#Il{#<5T|aLoY`XR2u{%Y`%ry8<=p|$`3)n#_U>$rf zFQNH7Z4@O?RsK_Xefq%T+x-=A?N{;=nvOR>l$?cje>#H3%tnN9lrS4zJYp_xDMoWJ z0Thqo75D_5Ct(ZmHRQ@UaJU7B`fIQ@9b1U(MRS2)jTLYJH(@+g&PCxyrpPS+ITW&R z0vYRi9=N3%k|9TU)9SrH}eB?0$E7bXjvF=5j z%L3r0iy4ksg4(Nl2X|sNwnf)0KoLucW-LTFl9gu4^mYLTbhniXMB$C$Lag5HD0v}P z@4MIVCjJyR7umPoDEs$?S+{KJwn)~C^WVraV+b)6ulmW$ETF6Uz`bRQNYkNmxi z6zwxJCCgB>EZ)pmbG!BnSd%s{fnn+)IZ1avqd|X`U^+ZML|-Wc)k zc<5pp^8Hv)tHQgW)~H+SrO2em=~{{(Xeh*ZatT70n6wlLtPABTazA5cM86A>0!NLk zxm9&ogASiD)1iANz0eu?U!ZBe4C(MwFY+owIt^NP7Q+*tR@WFT;0<=3Wd;SyaAz5F zLBTrpA{rrI6VrNNIt&M2QqWCH$J+AS6$SDzUDkq2yM}YrXdsv6P)FSo1Wig^j;?v( zE+ZxP;2FPfB%#XX@SIV?uzdzX7=(jPyo>1>SbiHm;{_YKn}O=oc*z9EOw1F1U-LqD z?s)^MTmkb^BXcqRQ8L${g+ZvCJZPw>M{(NHk(AT-=596INdBonf`W+xmz4tbfa<_04c7<#xXV{Sc>rRVSV$$t{w^6*%vJs+?ALNi^ zVF=*2ZC2uSmwXnfn<+wEnQ=iD3UkVp`mREj_ny|i&<|OKT$bWHs8zDzN^>ZF6$X#% zN}099tKQ;4-HZ3)OwKKkW!<~?DXWn>+($u&aqr3<@nz(ppSe2w2@3h!!QeHpwr|7h z9BB3$)b#ImOekH0;1+gZLeN^&-TW|Ku%!6W<`UZ76}if%(qn7kqIb7{b*Kba&aS5d zj?KcFXZBLSOR{Aubd9%m>H9Bs%f{IHIj}zV;JV-dV@)JjEWVOTNMk+Ro~gmv z>t)6YH8Oplio<$F$0)hoG-82{zq;CNrSm4S3C$ht0Q|Ebt&V-&}p8 zunA7Ct)o-h@l05ejXGY%lQ!7)7D)9b)YXVh0#T)y%@|f?UI}7tK2ZmXOOlVB)drApxuNcT;_;;_=Vp3b^*Zit{%G3~LnD_JffJF!s)G z#ckrvDM82Xt2W!kc(d<8=%1qf~rI(BTZxHkA0sS)O>1^L7;0?IIIW zx1&1@y37l4oFxX=c9|!=JtVW0)IW`ub(2>)QPNJCHg!3Sx3wiZ5LeV~1-$1ldZXV? zWd7xjfc>~;C4!(!wdV$FZu5t9r8-=|BW4h`3*%#Njj(4IHYnEMhpG5nPd+u*qtB>DQ>0JC~6(5S^H(KY>9#mo9Zwe%}3Qf@L2__u*0gqm} zaO{E~vZ_gfpL5Ga6MU=|h=l(wof_-To6ycKdy&g%ydKz&Eu52kWg0YcFOocIKzsKw z;>)Rsm|(LHt)`(N2-uz1#Cgo^Gf_j=H)B2EUTya=Q%pzs=cFFLFOZ>}y10 z_RFHVlXybgkIDA;eiSUzmO0*Y072AEgXoRs+&Mcz=gWCDVuJ2LgrnD#32yclSg#7l zjh^6#kN){JGyDqQ`h&6BM4q@Q6YtDq%hcM<^do#za590>& z!$%Nm&N-exjIfsaF}%m$qUM~V!x3Q5Km}aa^-_7=m>{ORegqw@S6e153AWHCo87oE zh3CPhRfvG)9nF~w>7+o=$8Zd@DwzDrL~LEx!RpX(%$$Umd6R>Ev(qjF>d8?$#@>y(6f`cd%v5<1fK$U z-j>D-jc9QJG>+*^crDl9Gge;H>J+jITg3}9?htlTPvb>%`6+C`sFLkzu)>YJ&W^H9 zWAlc#@PZBHY(+`saj6y}0I%%~civ$kKMR2m4|%-s6nUIQ9xDrx`=1)Ytk6P}U-&t3 zx3Nm()fI(sw)heD(1)Bss&827@p$VQ6rcr`X1ow_)dB}+=3_}1zrB|-8J&gUPkfPf z7K`nsH<-@fRe8uOG%-*GQVtc5(P>AKc%|-In?J0Qm@nh$Dp~$(D)yuPIV`M zXMoqu_tq)}bcssNjX`C~xBqHN2>=r43mX!8AX< z4mF}{cMxIygWe%y>wFoI?IcTG`dB1$RVt^wMY3S(eFF`=WBflhdUWLmoL5i$hZ~W9 zF?h4dH9Wak)>brZTAgIZ9-*~vBHFV_b=*i{4LOuo4x6p0oU#DRQPjP;=+j)rGjGY- ziJX?y7{%X`br5-{3o2tOxrHhX+NeN$Z=*6d=G3G>f6}G=J2H*TJ9yMVty~=Azko|6nb?dhu|12QfV?{zvIAvVK{E++SHXq|28vA;=dXp?6__=9Qvy?OoLH zls9$Anl9bI636r&OcUNK^6U?m_ndyceOa*R z?AKa}w@SQ^+2XSj**)TCBo!-lx_%!|p4agEv^=pb!IS4FRR#655==Nt)fLE2v6Yxg zOE5D%)2P7@WLT zmP}au7{z~J!-Qv#u@ZRNm%b(Qh{WTLR)lvi8{MDN&&BWiNdW* zP#`D9Sn1H>X1MzrzCsDdj8)Jr`42sy&nq~|`L8}!rNgffmiBlBEP0KF^O~SQM!bei z$wWp9UZXxlRXK7T zlg$fFX~}vkRWcrnsP>j4D(MD>KbIrHtBp(ut3ZNFo0+hq0s+n2$^?~42+BKn!GZc! zqOKP0Z=v_GOGe!B6WPX3%F3YGCpwlrCcrOMm4PJZtaeg(l?i8GZ50J|-l6 zM(IW!V8Wx%$fn&PCir}jxhahyy)TG<@exFCuY>3}enIqVdCcU+7v$RgC=*5>!%QG= zaM@SbygnvioPGa_YD+u8$nJa?o~_1c*ZT&;<|i2rFF=QRRE-s+BoxrD$yr$%Wm4tpx#Pg1$xVeKX7%mQXne$bOrNMr@z1_zB0V(FLJ=|QOo1{^cOjt{=tMN zKdsa<>>EAj~s1)VKU2Z@gs!>hI zjEnN(28ft2j)R|BDonV>3;1~}xtW6~syY82SuO-=Sc|Fi^V*)1C5kfV@IF$mv(|!6 z#Rxt33y-6<8E&DBAnxn%LQ}HUvsR(ox1tPai*l4XPS2iFj*8xx$GGUDh zf*5MVgzqX*KCpIIjf&>nOc@I^vsR-#Rn)~NGe#s9)~ck^H%gBhszsS`ODq`PZE3Ae z!_{D@ZNYt zo*_&a6>5!lGrGug2HyVho>#TE#_0+WrH^zwc@N}~L@6uboFwW~W>>(NdL>>cp_ zk0(DQQ7yRa+05QNX+j%$;b9*p{4zw|Wqo;}7uOIw97a*jbi@e#Vb}m(Xhd4Z7;?b_ znGie3`v2HE>wv13u8qHJP#UqDP(T_)M8rVs7MpVbF|Hlh9oQ`o0&h{I2PUWpXR)mSCXV%x zbPKJ2FHy1}Eh((8Qrl9HG{^cY1CE6N(*`P#Hi(YXtq}Gb4OPtkLKKt@pQXPkqcG0} zz*&SB#(b$!N@Y-C!dY^R0?}i!U?{~0sdIR&$XO&NR&$*oe|8){*BD1J#+68(NHsB$n)Ol>$R=vI(KUF;PB(Jru_C&SmMhSC1#QsU9j7Pr zN>Ykftf5Vn|3M`BxRd7yCI#*^gmkX`?u-SQ8!2U>VkBtDMO`w9+iA3X{Fm%|D) z^upexqYA9|Lhbc21?*4IVfs(}HP9C;!DxL@-1DM~+&RGz*SQ24__5nTi5Nd|phQf7 zMNyGef;NzKRvGBwP3_&ipuo3_gzBs}NwQs1jH?e77j{K~zCJPG78^xFA3}9r3c9kr zjjRDrU;G=zV=M`V`VyO0Hx;<%OEK=MLC`Sra5gM$cFzK;r=55nV4pA_&7jw#Li z_LjjkyB1$1S3=wmX8f`Lt`x#b5}>j&9bHDJEK!BK(eg7$m{prRX^~?3C_n z2UlD1&7Ph1zl4!_NGRD{;d>!zIWd$m|AwQP;?+<}TZvDGq}Y(ORB4#Gd?amRk|h(I zOER%qI*Y-==nkO~OdFbp#S{`n!su+X!f>u@K9%ZR0dk*`U%B9`?Z|JUbBdTU1U|T+ ziLnvu%V54$Ap?^VPDO3xi&L4o!OXcLuGvM$a1yx{RdiVwS4S1Xi{X?l&PCDAWn-#p zKlrdoChb?2*0Y{ZQzf`mmf+6tQXn9LxaycdNXgxZnCxOg1U)UBS%i@(qj~e`lM&d- zscDe5fq8{wQpyqOY5oelD#s-^$NuRM1sYaBZBr=) zPK3HT2;2EQwaBOtY!Ko;`C|jB)G&71YUt|9lNneV>?ovMPs7$Q~R3`f?Y|>eoOI^)97{<1pGGRm&I@!mX5)>1n3So$1`wWy2&t(E$eS~z^o2%gj;-4qjFC#IrSu7?8q>QGqMo(hEbLf7y(Aha$f zR`n8Z>XBia&Fn8~xX~OV>F>Q2eXuU28^GpYQYU{szyVe{Nzl0-?f>6F5_pN7J?Qn9 z>yhxoP{}ma9EQtZZ_&LzX;OKgFV*&qB6#QO|r5fT(rciWZ zL&Ds0jsnLT(qg>kDd5%!@5atoV9^3{9Mp&$7c5lF(MGgmu~>nPOAuF+V`r(x7;m#w z(TR=G(fIC7IsnMVUe_^J;#6ateYEmVy0liAbpj^EgtdgjW&##xG{NFSzIT(dvrTZf z?gjM^+3kr7HNj));|4s9@i zt1(0%oxw&*{B&fuznlc_Vzf?H65~rOEx$ztH(POYIHum}Fm<)6qJ#B#eyfH8qxIMg zsH4CwJ*M31DG*T~N3snib;DRvZ>q28n?IMBd5qXD&XHHib;;+ z`e7MkCXTrmlV8}yW9pn<(KX^Jh94bSnwTGt-RdnAcpXpFy0ugwA;FCm6fMxTZlf5t zzlhq#7DP>OkI{st}ezP%Ml?t`;~-v62) z7Hmy|55HyEL~Luc2lo;8S~F1P>KT(q9F{s4`$?v;c50xw*M_dAZ$mJf4N+iy8w%ep zNrEQY#}SH*{R>0SM=7xRFZ!7OI0c;AQqc4X(qJ*st}SsbJ5d7asU5v#Ut7vnda{WL z(Z)_uAT^n4?AngFj+kmT9Vx=(@IU6`_kWhfBYm1#|;5iIPAqlZr_$=y?K zHYwe3fk%26@etA7usD^iY`euYwWuSKx^b`Y4UVPwhW{HT624kzmGYWI0(;U3wC<#= zeojf6cSr5G5u|k|Xf@9(iFFUa9V2MbgETxdT-=izPA(DwT9b@IIH~yzKTVjaTYT zwl@sGOU&s_w#}|fiI>RgjjLC#EAMLcp|wrAp}>MZNNV4dpt$$|U7E3hB3*(ocEs$@1@p~)(QqK7(?d#bxXg?kK(ko)K+@jg=m3J(|Dgo_ zqS{CSCDBxQIh_N^%f``&UHVs9g z<}0OOKa9NJyq19SyE&Ag*tCWWLdadi*aMgyP3srHCQWgXDmKGGO-TgOFR|PXdF4OX6mC% z+KSVb?lz)%3q+fxsGsF8k(Kx`4hs=HOPNIbt~Z`0^S2Q!9Z&2lXH$|NdXbD@|H)}$%4(;K zVBu71Y;rCo**Go6TKt%bZUgqolld8#m}$6ED36ILt3Cb=I8-VhRoed|6;g6K!P}MB zqzFBoN*Iw(F=wV@=cfTQw@6Q!!B9GC2Gp1WQtm76%^;r91tlmU5(~L!7hQVruEunt&oyM7ItSL`%D_q$KMPGSj;4|^ukhyfpZoSnZT+636{-5Qmv>0U!~-y5fpL7 zRBQ^S4zZqF5X$u_xHQUDf$V}F)xb@Gzl3ZF?h5P{1o@HyG_#m4vIGU-RUb!O&Bjyq zmM3Emabh;3uUpC-9{BI&ufMqKNlWkggJ8{_gWe=hVKIj|Z1keE|IERS)?Ts=6c=H0 zak&tS4keg4m&jZ*g8OsHd5*V|l$(c74SWc6^{%Wh?%ck^T3 z1wl)X!eA{M?zva3AW@GfsmGh@%IHlP@GBq7mB^}9R`z9uZD7{^=iC(ZUlQ*Q&IbBDoOq| zG_gtI&1!i=&Hq~6+Dg!|jynqs9dP-<8frhUSiA=79&1s*um1m87w_#I(U`dw&$iZ8 z2`{6f4X>xb!ut64b?~neR#}H)gZfI=r2*+Dufz9Z4HOd@E#o2IeSegS?|;+TMaA{R z<7~9(v7YDZYa6NrAJ$V8J`OWfY=aH7xwys(Y}kMozD*R!wh^`OMvx%E`KC(psu^wE zE!!{uu52XRbV=(N+SY1XxK;uQezlkhNj`Qj?E2ZgM#5m#5D2?(n-cc z)X}3eAs3OUvI&E)bgDa#*hCRlvC+O90az3D7CijC zl}_c(;~@zuw2@W4jod#PnY3+OqtrJC90Z&@9^9fw8wn#;KzmH~mN- zvJ=Iz9hBmOk$U4Jq_L8YW}i}-{^(AMB*V$TTn>V(F+~ zJ~i8ePb+#zMGuj(C#IxD8`enER+4&A8k^C2hm^fMY<20SG$MM_I_mGG)OR={LAHej zd&x=PTY-0biKllT1?ucW^416(`_Y+J?IYpdzDoRYAFXaoKLzTh11k1cU~xKDz8S%1 z31$sYlC*(zGJOVC0tPB(bq1OIV+21lXgKW#DM`$J5_%3cCftu&mJ!$wr4Y^su#z@J zi4zVW<^V-QiMAc!I_WQ_9iS=ZKFA}@EcJhm;S{0IL6U7w5{nPUG`8p{QV-HZiyWek z{65Y#$njS$h-9X1#j1%3D&;~vpp&YfxNt>Rc!BJ}b zun{ajiljad5vAn21gDLl=`liIbApt3h_w=E6BTfoM6~UWllyQZvtSbbgvoo7p2x|( z5|1Eds?EnqwP%uuI)Tr2C+MDoCQH!NqK2p>xxFV)I5_F z;87#kf09b9&VE5sQuq{CNJkFWkf7fw)Fv6h*;BMtYhiJkT=vT!Z*g}9h7F6SW}U{n zq#0tV+qRTVlJB4Qh4Snb#hz)G+LlQw}k{f@d92r@c>qe(=SLbjG(|pVmq48 zv!tZkMS@o&Re@s{v0}+{S}Ae6M4J6Zkhz4WoOB73gO`YgHxQq@gl=t)yEKAqBH%Iw za^{dr$&9*8Se6<=`f^Hl`!cCxmn(7L6^s|=&`YU1R)Xh7aQ6z{?cnfBDG9quo%Iws zuhIsmtfrsvguqv;!9kceV4hwj4+{>$yg@yN z+k#AXk83eO;yZt|Mx2d#gWiB%Hc_FJj!$&1liX#!q(emdb*5lhM&NdX1V=e2^F~Z7 zi-jWk27N3&jp&TGp_RYCLAu^)%3Rr-lq-^BG-Xky-y}L;jo|4`g13XC8l)uZ7EN}@ z76lgEqBAtwszA4GT&uc;(aG~AKRym%!d2; z(I`WSyX|++A@V;!e9y>y-%s@)yU%035f6yPiv3Cv+D4psKtTE(P)xCh#316J0z)2B zo;OC|c$nUK>mf!r9a7@chuw3Dsd;G_Q#&!&Zt#eORMQSC*_224)9{D_Pae@K?T;!@ z@i7HCVgSu8W{d8R>G`i8Q`eo2O9f9+>mQOvo=_m}B#v+Vhg|cXG%zVoNdAxdU&K5i z-L6wgb@LO-F_8o1q!Ih4NaD{Z(Do^kfU^qhdy0AOoC2=rsU){&m_Ki1UY&P$62m03 z?!3}D_l$98`~?Mqo?|!eq5|WeOS_jO@DQ~w8JdMS-ew zpy_+O`1=+99X5houZh)kPB)d34Y#PjbyevOBVS{$%`HU_%OnCPUSrQCQ!$0IFmc-m zzT76ep;?F*-&W!?S(K^^XQ4`?9&hm2@2&!a-{8ngBe()!p~j{+RBy?*_z}zzsWQnp z37#9l9SQz^pd?}Mm?0}g6weT7KMX);aZ$LvXS7-N9);EasFdH{ zqnws^-?jeuV9Wy=Ae^D)9CznUr9kIysxH{SC0j2)=*gc6IGHtR;R@Vwec6 z9DCA9-MH_>?VAC(i!I*?)w-`D>IWD0zNy@Ddj7zt7vCh)Ok4d!{`!amKX9kte?(4e zotsFuD8@wOCnf5q85zrB>~tWRVH`3db$0(G0pD*(Fv~#~to5@os@jrxd$kznS-o|9 z=g0{pQX@^r5=aN7VP&B!sWo(zz+H55!g5`CbJ5cR{plQ1BI%75x=`(BP6e`SBpAr4 zBvPW+bfvT?HZqkUO@dANjB1tuHbXW@hPoEB7dO8CdiOQZ65~BMszjzT$ar>`N%%nvJ6E<5&}E8IVm3$VNC; z`bow^oXv*rkpKxw2>$-XGd^LMkrRhT z^9g|TGrD&%E73nKCZBjN>9AfV+D=?gqs>*x1^ukIq}hxm7g4n7FM%7M%2B(Sxd`$l zwp_}Mu~!4BT^=nsi)y(^HEocj8)-H}uh4Y@uN1kzG{ZgAbMS;lrG6N;Whf z637p3HEKLtDskW(P1h)Kzy0=m-L zg~19uAL3yvZWSO7XND=pr=YH!c5#FPV+&&P;7A2-6vSkQ(F*t%q9mI+Z>%t}8(v5k zWZ@__71A}){3a^Sr!Y;jak2!SVnktD&9i9|G}DI7R2oS|bXFp$2$E4LCZ?3OVYUSB z;z|*+Ydlv0@1kV4fTs^qGFXCMsS2DcN_;Ob78b5ZUM=yk5kW2#r_eIR40fReUwAj{ zil66PF!_Cj1ku`rRZ63`D`fRG3M8z>z!_Hz*z=B9nk?)_Io7R{nX$OUjX)0HpuizF z+(_M|Kz?^5d$%ai#T`kBj5%10Y-^^Q z7<=`3N=R|q#j5?Hp(n-ZUL4D1IQL$HW5sEpR}U*t$OC(CIPG3a5hxNni&E+-Z}9VrC!S<@{<36PX6i*S2VYg7zZaIa zU02}D4G(J()|{66(2E4mZz|fo1RkEqG$trPGhTZ~Z1QFdzf^)4q_It*H-7kf1NuBr zAjzBhxbjGX7_Imd`OAw`A4)g=nF>de4+U!fN`Yaosj*BSYK-ZGp^|>S@o-er{p!B> zviq%~NBEK|`hx;jeQ|yc-(AaEP4Z)4Gu%N}^3%C!j(louq{FpdoJc3Z#2<8&6VAWx z1K;^!+3G(cDopl5e@gjXQ(&||+3d-tzzqp@SsT>?P+M-Rz+O8~YcVMRw>vs0=2`%{ z)p95h5QuK|oC>ta<;mOGKy*`cNyc4V3&j1rc@zlD>**jDs`+ZQ^C@Ob5Fw1tZ`755 zz2OWAeS^v5ZD9qHBv@Tkfh)n(EsHb_YCa`tKjn%kFr*{{#*^X-TrP>)B`*bDmcX&# z5OTiiqnIpTPe-%c<+&k*X@s9iW+!i&^NN2Zof+_(P6_hNrashaR0`3#Ad@JYcoj_X zQcID^q>_KqwtVr5HRn*0d?@wbve;0{{id`Toudpf|2q^*gUXoE_N57fzN})n*Um5c zm&RgzdBtoiO{`x=O2Di0FamQTN`mIvr7H55OGj1g-YD|xRqDksQnLqP!*JSp?lPoK zsjfh030BuopzUo|N8c)g?lVqTk-9~~b)_sUM07ZVWR5zbVOeaSfYZ9ym7usNR+fHp zr=A3jG^c1`QJ%JNq%1WuprHZ*Wn&b>eQ#k= zz8pIH^oki!j^K@mlfYYCf5;T~kraFJq`15;UK_@FRxXfijiI>=oZ!NHDn)uD<2GISC$B zBF)B$3PeOPJsHKhb5gQ!il>vf{fvQZYZQJ@O;+^VDD3)8Q=nF5>>i!23VL@2UUKKl zHVc(Wu$!~1WcmNCOfc9T&H!pvA@wefuac5QRp?Ho7AjD85vA_z{DM@~jOl6K4}Uxs7`68 zY*t`db$ltdRe|!`JZ;tT$2>L2K7PBR8`U7Eayu1RA;E=R3cT1&PKNc8d1{g%Vy~p# zMZ=nSGdW#>6*U>>T@NVmvnHk8dr*PqwU87#tUy{V?4}(N_iEFxtZVB6EJDP+S~@S$ z;248J%i20$i|vY7vOq41t4)53j!X5X+LV)GaXs?Y)uAxEIipyDjddvIv$GO-i0pOg zD(}uqP(sAjB^t*$rdWclb@8=7OPVCeQ4a%0?kdo^9!=yuZ|&;obXpu|(8$5PNPXOl zd#pgW`nnKKi(6bD9~N>7jZ`Sm0EN((3OHsFP;Mi0i!lxG_rog_?JOL>Q_c4!otC9& zmuNEl@K#tfq#ZlIXD}TWO(ov@rkFF)x{|zyX~;GCCR@EV)fJrO=4B^_HN@w)Z0*)m z$F?p_xO&?j88cKe9KrNEX_q`+ED3Ey(s_BzXs^Zusa9Sy zre!`a9^*Df@j?MJ`eb9O^q+!e%#T7|oblEK#YUWbZ1gc)YsNXpO?9P2W)tSGt%DVq zT$0=m_va}^YZSFzoP69=S5`a^@p2M#nn7QdG^_8S+iAXG^0%~@(u_7WubcvlDtcv4 zX-=_vRxlB^qS}6*_Kj>#;u?{PzSNvHz%7`;iNtE;%l8iK^y0>uh7Ds-^r)_6sWCL8 z2sVC`-e%Wf*@5%eCFrJOpeSBjf%ZEWLV2qr^?f7lSeL4(r>FFJ>MF&^dMLI} zr!WWgDAr{cIccn4eJ?gIibb(YeZ>roCFUhKb)hM@teF4{CPA?}e^EXTLB}RaFsUgS zFy0tl-w}t+n@yGMM;xwy;8VVM#^`Qwk}M%6$5YmfcrqHyJ^`(DHN?3D4v>G*ff?00 zwg@mWXIhZWza33X9uc2FDu(x8I+e9lKFpU1G6s6t3&+lghx0MMk;x&FJ5$V0Ep>$~ zR*7jXbq$1V7qaTz3Lm|OnDng0?N;=eNkb*mRJ3bJqCTzBnaLOVt#u=Lg*>&ju90Zp zM(3~H<(vH0x`yI$87>%h0rt=XO`;~V~Eb^I0P+5h}EO{@!u$sO_J{*ymt z6}3;i12i|1M@;O58&Ut7XnSGX8K&4LGiGdOysO36&&H&V!oCaDGn&tzjZ99_LSqv% zLu|gaky-QUs41f#T^NfBS+JOoQ6;#I&PNpj+D@#$!X9jfbaT3r?!DFj(8?}s*?C+z zcO!hQ>8StDOm;D(8&&v~w)&?mqIn7P*w1M8-wIB#C2YmeL`u9Q=6}k5BvSUXY^wOD zVba;FikjLTuRd}H$^TH$Yt4*>%h!X#HHtTBd5G>k=uoQ?%$T41;tGh*J!B!F8vvPUn{_Zz0@cD;y7$0P-I^UO zLA}`}oW;No)LC$E65KMf<`(R@Eas|>?5W1v3Gz7nO zk|`l-uO}$CC9`0?VoLTU^{q4oCQ9&gvjQ$#OXLvYed(T7{m8ENRz=t7N2$7RQy_Ue z_BQmx-r?r826r z`oW_pNiPmw7^REVUK@T(2&XgNPU3MD#(|c>G?#P3bWXf!NgGAGOBqcCg`AQ4CB&%0 z9EoT@2Ahx0DyIGzVmket0;|X9!dQJhd<^Mq#*)vw3sO*6oExhPFuP_MHj|n&7Bk~7 znG|%I)h!cXDN-h7__Z$}hro|Rd!|t#V;nc1UbmGtz(>T7r&Tmzx?s%BMI0JWuWHQG z6B83WfjU^pBNP+!AS~XvUE8h+nD6&O$)Y2CoJ2-WANELji4%r%fs0K4<@<);wntI3%X|1HlY z{3lcQUpd!dhP*`Ofw)d#2!j z)e>fO7jMiy^I;-ksH(7Jym`YZ2gWSvGu}QdTu&xl!5~Ffn#wbz-_sI9y00?b^bnH* zyMXehK^j>wmAV*i1V5(g>S-0qDoKk7A9rzjfv$*i_#eB1hDMs?)?#5TpX|bKA%Sw7 zP8NM@{wZVMu7w0($aDgbe}tJVcm^xW&P^v=Ni6!2j*y+TfR5BQPmxRq?cy}~8zH`? zGS-%uiFyCo;>|3!@2Ee=hh6+;5`OQ+CMJhebaAfyhqFETw%wS*RxCK@!*|t-85i2m z!debKbvKteii5L=<4MNAS-P&88zbK=U8Go)0(tC#1Z6~OrZ2~4529-t;#y2#r^O4C zj9VgscG;IA=WJc5aGFS9K1iL)uO!n_%k@tF`in)gbrISq4*fL(2T^wt&i}cm-ihxb zYL2dx7R#xib9Ci}?_`~eu%1gSdsvHBsXEV;IgFa)CNrYM%_WnZd=LAJT{f3qH^%KZ zvBuq({jlc|vrv!U?Di?#p^l%2$(NqL*~9Z_6e-@niCsPn5Gua?56$2csK7U~>DMtNTz!Y{hbVA&p{}Mjj@KSiQfa7fA<=OWp{~J^6O!4ph?esg2TT}2PStFxrIK;N zbV;|-n$MHJrKQAQ+jC5UATjuqucOF1PTsT(U#;m$6P-gGo<)gYFQ&wYE=t-(uxGjvIGQ(gokYhO-3Tn^oaJq(PBImFcE z*s)^|0~6!_-q%)qm5O;kh6U)>B6FqA*D}l6oG-OX7h;*y)|{FqDPMbY>b0cS|3RH~@UvEDHnCNz zi{)r1bNw}|b-|WJoXx3WClx;DlnT5M*+OgP=@ForcA$VFuWzBFy)2}F z|5iH4;UWrT7WLxzmY<^1i$tnK7Al4aZ5b@jD%yrtfuYpiwSOMa;_ zatC?$>nHZ_;+f*q{{A-N-VW5m2P!6TC#L!Q$RIAXpSbmQW8%1ECtlq#(sy=Z;@|yB zC&xj5Yf=7hOpInvcWHFt5tylxu{oxg%)c=j&c^Oi9JY(pD^4kpewx_Sy~tyx<-5os z^|_=QYXjcM-(oDpMmO?<0?E4>QQCe~VAv;I%i2vQJK2={GFPkUf2py`d(i2}*5W2+ z{vNI*&sy($|dnvX}da%l>9e%sx_`WDjs-UhKRn znF8g^7@KsMZQS9QbXrO#s)`x2Go43wL#mrGP8l%w>zOe>>j&6~E*TUzxRDvXS1SI~ z+>FV+AM?>MW=vNdNevGnNA4%YyUb;W_S2GivS4uUu09|q8(fozeQUGyJr1DLwcT&V zvR7L+-F9o1TiiZ?!H|x>MZ)zU*}vz|J6YaJeFNAC>mbRe@Iv3nIEnQ=ap?L%@(Jo= zqH~MmrI?T!xIsrLFvg6z zGnTBM9VY9llNEhV1lWm$Dg5Dio3m(qgshkFT3;IZB{M$zG5EId7+!8a!U*Fv-AwE0 z5wiNhn}1Wf$fLCRbl&_+X6jL01ucx1{SvsHWMblzs^|F9$BZv`Ys5Nfx8|A28XUtI zyIK9#KC>vmf%!=+>jjVD;CdDZm@ExjtS=~Bk3;8MYNFZYaCLyasJo2vE|iD<8M0b% z9KXMsYu!DrE3f^t;=j`sT}6Hsce7!~fDK9RoDyj6miMLvH}y6@w#b2vEvlB3bUr*GDBkhow)ts6kV|V z4il3{5wn(MF`lXXtUf%|$>`oLoWIm8P`nne5a%A#JxN8%&boV)?#MM*xYJMecPL4Yhh(3E0`_Nd}7#2 zD(uf@rm)~9<(X_NnL;A^mM%}qEnTQZ9&!FAcLfplfp((XE#Cb7kVK$3icst7q_mwK z0@=1J6UHWoiLntQGI8A^rx|lA6aV*`GaTI*9-EWXdQKJhLiF&mW|z`3G~@)ASi$u8u*Z6+65@) z>_ghitUv`yJwkVOumXRV3}lz|7TDYT2zwJsDtc`QCT>eQ_habZytkFv#5^YKM@uQN z?J-xiBcTd7|3ePLODoX(A7-Z6$|!JEO1#1qDECCiN5i7W6COj%D6crHr!>D#6%}ar z6r<}R6*yff&_*18NiL~c*l7QMOVf{LRPNL8Y?B=c`8E?_;1@GdV#NrpcRg15uxFPjv7W#IW zk9vvuvGo;w_a$$b#=qp<^P2`HCRAJ0P=WMD_+0%JwkI}H%-mPlX30F9`1lGpGMgwt z+G{K|drg7&G&M1-L2jmiQx@gOY_3382|RQPoXVmGTj>?>eZw8lB4P1{h@{5_+KcC% zaCylaT+WJDD$WVelSlAE(Qvb4@fKNT3nlxWfWP(L;_vkY#VmeHC4X&c6u+f%nzUxU zI_4AJ>4GgdUiqCa&fWu#07Q(BwdLEQV7 z1b^j=%PpJ>>G>Sz1DDnP9VP8ArhXv7w@wPUb-|~>i4?=~UtE3BS<%j21G5YJzkU^? zm6Vn2s${GGrL%i?lc0rGJyAq`Ui9b@>vO<(3mwZCEe)mQ_O z{EeDP8_)l~;^j9AY(LTPe}nJvc9VYnpG~kxx}Z4uos>ruJHuL+kJUCr-TwzsPoHei z?eT+9ge4pPzwm>W`B47vCxUW4b8aul;zW7 zW0lN0pf99_&qwYn^b3d%Yn+X3uDAuF8w(7gju!f0?c74c|A#H~d|;7k_AZo03hLww7Q!3*mZ6Kzc?Y&M#JmDp&F zEtfRKRNREChGPv4owK+NrI@!#$#!pM80IT*V-QD5SC+WzoicZ*u zIX_$SugKaOIkpY6CAZ-_6v(tC_JjUbpo|^Cf3!=18FobF_-+NV?C?2xj{+O_V$y32 zIkmDUr#^cXz1*GzR_O|84kSp;P#|MJG1zv8SxavR60F=WS~(H6zopLO0}AAIB=wI& z3b-Dju?%&@X^$g{x#)ixON=)M@9n+&Y;pfcjNQfZw>AFh?StH7Z=n5}nD0hhe`(pu|(On`S2Ply>` zr?F)8iJ~)}!n~GDwdabdl8*|G=R7sp4i@FZv!5>&aD7ctc08ww^5w^w{Gw!jeK+k1 zpX=n;Cuk4(Bqu*1^e;fCJ1r~<;OOi3v;sb)GPcFV1xWT>v@AgMo)pjrYE{^^Rq8FT z&Rv6{DaRHhNHI(@rK!aQDb1G8D)+Aisr)lv6nOQO(Y|FN+c1v!f77=rq!Fu4u=kFY4BZ>?3<#C{iYO)i3G!z>ke zT0~z)OR`d+Zc%-tmS`=8D=y_Ms_4>kV?FG_To*Mgr$NK@MWB8-=}@TQRTQ^kub9>?|Y2 z6Y~Xe7tZ*p_0O-EIR%1@6SNEN82yV4Wu#*MVhmF?*-%D;{>7-~rR*0Y!R2CvXgOQO zNDy2c<1N@KMuK5QnP;+>2XnpRn7Ye8F_Qi$b-ueO;Nlj<#-pv!>FYrSvz?R&VRUv6 z$|KJ5pT>t$hC~BAh`U2;^rAem<;i9*($*MHGEekUU}}jV8}ZbWRO!Box$75{OGJCY z?DkX4E&m|n9PW@8cG|OIxC9y6m7qd~2TIVIJwPj!pp~5~K|?qmtkU^=(^J-#l)zg| z@uvK#Aqr%aB7~pY;+d5XCE&rCH;&cxp^oyEHmIcd>N%UwM<1Y#4EsfdYGL6jeG6ZG zh($3m%~v0*b&pWo)N+)>#SgznlvB((KWvB&T(Bnj;dh(zCYtS+D<}}?Pa%3&RA90M z>5&TDsf3Sg&t>dO*#mHtGk*f~aa!fdN@ZmL`m?JlkUbDEteOIgs^d)8K%5y|T`}`( zz#Ny%vKoph8bnjiR!eLOlJy=$rKH!EAeL=d(t-$ZnP7tH&EqwxkQK~TY<4gK$y49N zl-6oD5EiA-HB8wIJ-S0l$~uTu$)%`|w2~y)%c^7v>_e!6wT%=w+c?O4qBcB)R3BNf zEENkkr336UP2wI&*{dc})`B~{mZgY#`{ok*h{vUmww5LVTEZX-`;B5qD z$kkT@KM`FHw;vlpS~(ueQeb=qg81GD z9#z28CS#PuFj>=8#G7(s6|<-!mcJOmw~AajR*Lf#F&`U=`LW}b)-DOcCMZy_66U=p zD$u7AlB-5=NdoqyHN!Bx@Ha@LfvQa+fC4G_Ot^3-djb1m%{{ruI~)Y@dvba}8YE zzC?*T*C64{r3xIbK~OyS(n%&PRui>TeCZ^?5D6}=6vJ!N*sn{FZ?yuYYsq-Cid;$# zjnfwv8){Lq7V8u$h zgzNIxSJZ7npW(Sh6Z*{BCi-BD4kD=uv9f8(B<3jlVoJgGncNf(YDzRN-&V=?H^uAH zcU4w}n~_z6dkQ4pXZT5KMpm8fD`vt28u@L>40@oLkmdww;X?)XJ)$+NEJ)2QZB7nT z9!c6mJdiq*pNJmu`T#Z$=hE`|sRAy~xqKV$gbbt8u^3Wqd#+?Tbu^G?FBC}B>BBAV zi6}U6RmarpRF)EK)a$deOB8Xe{?^1qaE!`uy*^a9#4^7A`@tm0E+)q6qqLqM&6owB zs96r;aTbN*$bQFXGa0k7ikjtD#axM_PKtb!AW%faljU~ zxo)D;-(ZIV2?q`gmyrDrkDhQVpa!oTvc3w zGakV<;%5hR?|LXk*O6?ua~8eS-6O#lF9}*|LEiE=KqPg-Ksz7h%iT_teJ7Jm>DVp* zV9o>SjI~+*idoSa-7x_QWbXn<4OF0A7oz<>NP&}GaBvl~O=;y+NHC9!yZm~xQKc(& zG$KUFCU(Vy7OKGWu6Xy@2KP$`B9(;AjF z0V{DWk*1ZxY}6>W;@l(J;_rD>v+j5?kjbe@VM%x9v9m>w?o{@^3c=ZhT@MQWgt@6y zafqaj*n`qn`ww$c$sFoIra3Ap;N6q_5~CCt)01kS$GlXkrB}h!tDYnb;F)YM;$5Q` z;ui)GA~yCS;bZpP>qT2DSWEtv6a#xxxaT||mEcBihJ_zI8=tOe=b4y<_IQptklGsuBD*8C z{RYYk4G__TV18d%8VyH#;vm%oHx8!gJMH6*mNrRQ-XTi%c{p`YXQ%>+!-Ad6rgVKr zpxAhrlI7{&cLLMrlRd9C~3>ln0;gf`$yy0!ih@aHimfjout6fF{u4#iUN1WNHtc(%f41| ztiB|NjpQ6lK+>lXP*w}`5#m_x7ClAxv2<+9aTsbhUGx}B6erD~ZFe4rHzQ{%=I}V2 zoij^<0I@FxX9LG0?j;m6c08GNVvLaD$iISPjVdK3qEd_5uT(iVk!w6(U*{I%Bwb>miDqY1BM6&B6tq+& z5tDE%e6a#?OSldjdUC$Wq#n9d(JdyEpcRv0!>A;|@|6m>O`+7i`SxE*Mohs}Z?=Y) z;GP7Z*a$#^O39>|!5#ocU?q01Cj{&S<}A{a$tiS$l37nB$PG6tkhGm3cb&?B7PrmB zpIe1x# zGRlS6i?g4|qQGoyt@`*U?IgzKCLq&h>kC;r`IZ!mKLwW*cV_DYEZg-pqDpi0B`pUm zFrYw@y09djb&lTG(s8#rWjj|NXu0!+k;?ch#7dkk7m{7Hsn4#KBj@sLe;NDb&eNBY zw4Jy)7iZXk6ed)Zn@2-<+(Lnc^JrZ>Qb5v5o6|=AmJyxjGkI_Rmjpo~Xo22Ny1)Xx z`Fbbq^>7m%t}WbR0J9dA$}SczAdmh(e-U=7sPz`GH-YOy65i!JrDghpDI-JjvS~3c zZ0Fn=2r+DWDLb)oA$63ezZnxWpp><6T!hgNtZ_3bIu9;oc$M!g`Y$5zDMQR;I~LJ9 z<_|Y9`Nh7)EM;QN4&S$r{BN4&I{C$>RE#Ve^WU=H3wOL0%jzBXr$RoF<2Ws7wv^SH zXp#kq^&iUEh)IQ6&FHp-GIy9_CVN^qHor(-LXvLNOmsQ%a|uPPKSMDIGfRbw^dhmW z8d}B-YtmA*tFb-fGMe3~rL@5a4z!WLdl}#%r@t)Y_IJDlhtnizYjI9wNG^Igh3>Oe za^7Oya=OfkZ3@`0&_`%nI1xrl5?9ch4{{=m1gBRprC!FNcdNK*3t5TLEu2Iv!K{^7 zE0Uo=L|XxW;K!_yKx)IPRIIGDLcE7>~`f+ATxJp z0Z}WB>}IlJRf<#77?3ja8$e3I&>X^H6Vlg3m9)(!>TV1RRi)}`55!lcILlKq{vv2I ziGzJ4XvucrEhYDAvy82uO7h7c$F^k=+umF7DTej=n`viTx8QtuxB~WDX%dwp6o@Mq zYAd>LC6B5V6_c?Qdp=bpU=d!e(A*+HCn2w~4Vy<;%5N?zr+wlCFcVXxW~hTm zo*B!#>FsEju4yKV+fM1ye>27T6c@AirDCqyCdGmxcn2=7`px7Pr|Mufbq9W0*EJ~` z=?!_~^N0dFF_N8Q!;GFdiP)VK`g^n)Q=}0_=&8=)ywv{8VPPiiJbyFll;m76$=q!h zno|VpLs>g09i0C++D@DhW-cpg_!!u&TdbAHu?x9{-b@~}o2NG2yT!71nUuZwf3lVh zA{@osI&_q$QsGqWpNT7L+v5IYoW=Ux1f_hu8J%Mf&lqA_{K+_oDcu>l7Vp6h_2&BwFny$=S9hx~Td_%&_L~pp@O{W|HL;-x6s#hQ-4a z(Ln_6!{(6wW(tc2(0mO=9J`Oi&Djgf6u;B^=+lh`D#kTkUrt^g3}S$-$T66TN{pm` z89o7+n@;+!gO$SBblPX+P_aKlUt9!d(4w9j!Q>2vw?dkfM=Ovp z2A2$r{L=Pw4`w@7(eI>=!+3G;fZkI?9{?wavjCFk-T-6vUW#N ze7RGB$&H)mRg36fOPzmt%Pw`Q93xcPei3z?$;FyuOcd%JP{8pxlFWk=Bxo&8$X`CM zIi+_KACFVR-OftJTLhgT6RYzIB%k0~bpC=#!ZfvDyptLm9Z!<&#T#Za-AM+qYIhZr z;Zxd5xSV1Oy$#3oMVu@A@u}BL9^1*xekoPZydRh`uTF8ib;>EdFE5ezpVD{G9k%61^HsaA8eKF_IKS~{EtK`wm z3-adZBz4^V5^3g~!>>aQCYh6A{Biz(=%*Cj=X7srmSovQ;vznmH(Z+%&La!t1aFh9 z`|POf;_NEfxn$y6KZwrR^F(JGCwO1ve$3$lS1^{_0;-8|7btfT4)K;Cc}!`RY~5!7 z&3h5EZHq{{hZe#i-WT;X#Pf^jmUow+f=HW*Zp%wB!;AgNSc&VBcJVOLb|U&R0Za8Z zF;1e+%3mH{y-Z$@{FN;D3Rmb(fhJ(sKp;>n8*E~-3%9F;`Adiy^JH3VE>+x>S21?F zwAgfw^4MI%kB)pqAip=w4%@5(sSm^Epi>eIor|*OlfU0N&8TcHhNLOg|<2c^6l<4>JK9F=WCo#eVlt?94mA zhwPY@bV2X!T;q?P(QLFyl6_y^^F7pe)rQTGzg0wymA|~ReuOwnNV=?`8G1Qa z`@_2)b4(&bqs$|o$`s}2nP@}H%q5yVhF-YPjQ-s`k4o9*#Rgf*wf`4^+Dm^)9K@V| z2!QYMUj#eyKB4@lSN$diJYl45wa!4urfO)sMMRFL6u;936J1;kdP=UzX^Np4m(d}dsFpDE3^;cw|1^Il-0{CP#+c|nWOE|`FgxcZfOlc8zNm*2|OSt>u|Hz;_B z0h5~No)yfbY{N@z+`252d5BjpY4i6v&{~2YH|T>ECNsPkZqM4hLh&lcpk34#P01>q zOKf`mSnXKPL{VWoH zeDjMaAj)?9H9#NEBJsZehM-MlwQ&uCIwR%E@Qf>-m+SQa-* z=WN65M3Gd=Z@4^s{a5ecT<(tsxz*lGbI)5m$mV2XSita6pG%Z_hyAJS5cVFENx8y^ zTT{MtG?+a0iV}luP*Xd2^Z8P=TPBFne*j5thYQ zEN5?KMnCz=3%{bm{Tq|Zdz?io6C3mweIu9G9n6?--zd?Nu9Epnd!8tNBY0NxtLZ%= zsdlA@u=v3{@<>h<{jLudw%rOcTX@{eVb)ao*rp$->^6w}#hpGxKGp44gUtOC*?$=I zzjMto$bMfD21wcC{w7&=@y#vPIAM`p+Bx8lhP-N!)byTJG`6HRZK(Rce{7i6Vz}Xd zF?2+jt>`?kx$~?yv8;6&E-S2{_&g%aNrYO&@_9T{d&vy2hz->W9#FvdAmS^CS^s3A z#WvQ~KTv{1j-q?#Gi zwK}EYTV1{r;8MDU(-puqCmt&ctLBKNHGi7yE2u1GNV&{-kYE zw$qM&fAhD&I?hR(+R99+lN|x+_Ezk-2P0!o=QyA)->Kk9f(y#3lp^urJKTR zPfgT8w97;tOfCbVWJgozzBWsdVvi|m|Mx%zVrvGCb`DV>Bh6sNv|$S5j+r`?O@%5- zP9KF&^~vUHKcT_M%CHGND8lB$F>@&Us0vSytSpdZ-Kfe*^k_JP2ac`^-(;}&n5uB3 z3UJS{94@s~>r<`@Dtl%tkVpo$ z>HuNdVg-`F1kXs24IZ8CR%&~l*E9$}6s_w3mndts9=)`JiHmTPjMNFWaFCFXD`J$0 z9xb+p(o1nAOl24w$#!H`9p;<0n)7n^2iwx2>UgAaFSfRS4PpYW>njTc3PZ3f%d(S_ zys80p8q|OdEO%6f@$I)7di&}c$Rr2*w8|uKoZQEe=$h(gg69F5?M7#7BC{`tWW<)d zZ1AAo#364v3n0d{%m#vR9Qpy9)3@Wnrg^sLk3~50tra$>(i3?6F%EeObK&kI!v$A^ zwV{5bZJg7#(6b!gKTJS%BiM%T;MBDPj01o%cIvjmcC4}O@O&SzgZWb*a>CjkjVnIk zL~nZxQ@A)*5<6-Se`+elF-4zRu|H7?f1>%t?*!^hT9=*pA1A zqq20aNr(Z>c81xTnJM7g&M3phLPo-bSC)*Zl~-GBLgv;X=Il-BDHK~(LXFvb&`aor z<98@``O}gy{1+5y&h&lPyK{mR93S?#-C=(x~ zK%UltL3;*sB&;s_^!#v6%%}_5&XJtBT^BD|RWv93+)+m(To~`J_M}91kavwc285re z$Q|uA8E+|fyj$`UVd}>Q7!q68gU%YfuNXWk1$`pF9&}aXeZ`Ph^`L?&oIX5|U781a z@lqUL(-Qi$(*q`+jst2QYPHY-r_C5=Y-i+>6@knr*GJ~7yKwkSePk8flRA5%bJzA% zV+X1?BRUGZ5z)a@-B0-5k2CECpiMIyK#g1d8G`tH4bQ7^BOcOUHip#O4^sEH za;XoQ8FlHSpW0k__d8t-P)E~?&yY#?hs^6e9C_6_qc+|3hYUjSNiseSq1n^}oG3gP z0zZx}84gt35HfiOIqV#u4imZ`;>63Y8C6%&35AR`Naq%n1gK-^QMU|NRa~Xn;EKaM z@w-N9+zEAr6F0jU_aM4t+Kp#s4n$T#a0ho^?1L+PH;=G!}?4mpQ{eNBsGTG*P=*ie*o z@hq3w+$RIEfWsiO^c+Vzg&~Wv=Q-hMWsCT_VMs9T0!NC9(b0YSq2K}GNY$m7!-v9= zDgg(`S;KlnfJnpPa7Gl}2r;5L{WCnO>`0X1ytvFa9{^Q@8Y9EkI4sWK>;V}8w2dJ? z*A#-^8>5BhUFXQaNIa)+%Q#UM2{Q%WrwLJ*7Y!JgQLjpLtI!9G)kk>xfXn-Rgw@4C z87`Cd6gi!eVj==kAV-q~kKRIz;cAZcQ za&Zndq~iN{x#%|qFV{uED{w_Y*s}1oWLC z9}X8Ks?8`f0mH6o!^((0oxiVk;sGyeHd63vCZbiJ1SycLL<~3ELu4dcSlpNs7KzZ` zEeYAzj#eO}lVF7Yu?nO(37N(Z^i&EGZ$UH`mZ(-L3Tx7a5m=Bl!@{&*D&8n1 zO5}~c8i&K!$6*zg7Am(&LrNzEVUg2XH$!foqKt$ITQo9JjrKJ|$uXT3h*@(C=YzW{ zkZIjeSLrkC#O6>svpZdE2i5jAhh1y+;DmQim{R&wUONpkm$Y!ZG#GbjZ!WX7PpCOx zcuJa|V1g|NaNgH6bj9ieWdf(S($(I=!XXNzfFXT`b7brYWHv4Zeb1%^@@YJh!)c>J zO(Z`UzBcN`coq{mFTEuuL~B~$*>jkrKt8s>lQQ-f83_>Z-sYXuWH=W@cRHB5PFJ|jYDL~B&M#sW?}9g1%7tu<8nN*wWC1d~eB z!vSpoyDjGM(qVWIZ!_fbYKBCU>6%bu>Jf^^uVq`n7jYDX!CTv+N2G1!MDFDRmvpXaZkLah#XbSLAD#E{g{SlSnKfJ`CYKx%wDe%=8l zam0Iv5%FqNVDo8CELFpDGx35^W8>l{yf>JHU2!PB68m9qw5Nz%zG~qbC4i-1;>Q^L z0Iw4!U0#CmNTq=Sx)(X3(V(GD{K<*Z%dqz=eYiSe;h;wsG?-2?c52IE4Moe zWO66;yXpwpDCc;)6FQG4+(Kj|EE5CI{wE3q0Ynh-_qhUjo{3a9U&%!64Fmo#FihOUuF<;4RDj-N^1@db*DBBgT_Oi^gZcrcy z4mC2;+%inX9tFM!*R?w{E?n?s{)+CXQ7gE_Gvrmlus4-cRk%kF7z`in zsz{&c0Yx6xt_<6ddIomEqI+Ut&5miLC(c8TyK{XTf`s>6%C zuiB4#GGc^8G@^5TkilOP(OV}iuP>&w8~dso=p4YmzNFVr-I)5YM1%XGN6m)UIVbAk6zsNb*R_D;ube6&iMy1d-(HP-$S>G*-bs`!n>4%F=EIKSX+XajhJT0pQgF6kC4?jH(BRWoA?f znKT4_EfELd7*a9>>filUX4jz2-7#3S8VWTC?}1@ha^a=mPJ4&KAYb!1f;R)Md|t$f zikE_B7*gF@!eP7=0(7jXWSF{>jz0MfS7!V`C@1IFcH4Cw`bw9!~y&i=$x=Z?Xo#(NB& z>z}^LNVqTnQz`b4k1r2%pf7(Sw5iir*vh9|f)_-E*P`o<@SUq59rK<6m)o1tIL2Sd z`7D{$g8kvRIO!;aipS!qPX38HPvSXRlHJd+b(sy}V7Ump&HXaKVYfP6}K6Na^;q=xG&q(KN$T-0PkHOJ3q2BUrG?uQl0(qZ} zn)$*dPb*Vh8c!+xs#uMBOhEecHD#V5!8fc%UR|`n0mkxjQm{TvfI)oVo;L~2S~OA3 z9py$&gj_sA>T1z&VO$s^{K$I}o(XKwgXkh`k$(MXrfa-0l~2OdIFK?Yso`=z8GBHj z;?OdZ|JjJi$nH1z-LdSz3lnk@WI~_3e?iBr4YxYRuAdIW!%@zXw*G=wwqBYHtEjZA z=%Dhd^gIv6g&tGX?Sv$_n@v*V);0~2!}Cf-7p9<4oYR$HmrS%9oTXLdITf&gU5!bY z?iFncwcL#h5m&Q^yFV3l&K8qVT%ZU@@ME zI@2MYyQ#;RZBm8dd@| zXCkLz>;I2{4O7FxqG=^F%_9Gqn8q2XaY2LGEF?ACST*VFo}xWXV!X8#yg-^hhdt%9 z0gv4zCvl;#BSn1X+#HTw*jxw@6X<{dC0g^jkOpl|7CC^A9aX^JkA<7j=o~y8U5_i^ zWhcVj$$Sprz*7o1>olaHfv3>@v;tmnhL?-eBxya%4 zxmc_%xhoUyBza$cXELo3lUS>N4eH)kw4q+}07t%8!2LgluElJT&wr5fbSW}umzo1g1Pt#2JbUbz|Tx0%-O?* zfMN^4OGgL|mVe0tbq&f|fEo|Pmpmq*X@fS-gPsFS8R!}XC2g2u(>27=G5Rugc;E!I63)diKeQ7l{)Ws zrR0}CBM^6wnWM)Nz&55GNlnB;95p{ z(5vP6=rCMGD}O_eFItX4QtJDgSD?h>*fp2onHoG{UipCitQ9bZKL^^%;5%A4b0v0} zFa~0@S_$}O1eXTfO>h~(V5l{2OJtB}%Was~gzD)dgxGzPfj z{e~|y2Otn(=P|wi{8cv>h^RLE=XA z|5iI?#DLasM9!|iE08Z6QH3RY6iBO0$iDg?w0$ckmcILtJr<`3Wm16{kojhqX(Gaw zGMP@Bu_XP3h^35}cLDXvJ%#zfwaw7yA;Ok2xaJlV>GEbty&$LIFXcVu3qP>L;Jma8QA{T_0a263w$$Z_aj3SOHXuyVlPTDw1v ztWJA&prfq&M}eGs5DC|tNH#HL8*&YIB9k=SEzde(=Htj(xLpUloSkfyiA&?PaCN%1 z69(#zTj6CSdKXF?h1gLH$=L-{4SgdMMwIh5(ts9OV%({=8)dXYKvJ!s5%vFoN?6#V zqe`>Bj!eJ+A){o0rMr=L)@Qo78*BW7-`H0S)#)AnN7X<{KGkwRa1WNFz(l=cTQ8)ID=(Wm`?pfi88VX!|Hen^4);XdRO ziW}D%lBJ`urA7N#wQF(2&mqc^>W{)p&u<@Qy9WEgo9Q6)%xG}83@aMK;2X{yF4~W+ zz`?FEVNQ(?pwyq>yT!@?+lba2fB{V4tR*9j>qQw*t%G>_de!4_zIPOE^YDx^r0EBt zW8eCfVT^K2dW4q@%OS*FiML)!K?F>=*N10JlA!H``%ZL$eD}+p^ zMht0)iy-kvsb7TptO=A6+$B~7nX+Jp1R>-IW*hGyql3BHVRcvG3a)Ht1$+;WvY~^A zQNaCh8Nnr7N04}bV}{hDf}`*yd3glmb?y;V%N&=uE8&Jhn;03fp!P>0V-zPN;X;EZ zGGRy#$FPi9jceWIEQS}M11>oR{eMeRz-N3r)jpdA2j;r3~B+17yMl@^2k$%l# zqk(A zaG$|1w6Nb9)PK%N{AqX+75u$Dm;M1a6hhPr-;BLh7Bvu2b0{8NqNq zSSHNqx`U{F?sd<@Xd4h=X%B|__i-8r>d25QBRKMEBwB?XSmke*-x)6gafC`xkU9^% z+zU-#9 zrJ2PjrteOUTqs88iNG=A617Gcj-$k^?5QPqywBiZFe4rpMpdT|CCFv+2|fl!T*Rnc z^R!Ih3-v`9cXugA9$Zw1;V_KrCA{tyn{U5HS@YvR($Kv75>#jnHxI^patX`d zYL;{nAVvR)qTAVWV$PrFINA1`DE$*}H&{>-%W{l{(Jn)&I9%Cu8(Z-+E~}%3I(0bl z>!bd5IVQ~x8^kiNW61uyS9l3R|b07!Eky5vkyASE}j zT;4J<+LBIPN0lunRpt3jhB?4fQSc4cxYMc%jJ|Vp>~T^ zTI43$c+qB=Fs6TQB8%yJ6iCc1n5YyXmsl3R-U55aeomY^0DYuA2jMpKxqXns5x0?G zQXwOH2x|_rUtcH#PEm7x_P5S55&bhQjc z-+jr6kbCG#x$tCToMrc5BApM6a3hD0(KtwW07I?qUr^lXBZosjp`FlI@D&CTftaAv zHy|CZL9^>j&>EkX|3SacZW0ZrzxyyrU0sg!`x`In<_0*-Be~2>xesZaGnb@)@T8B; zxRuFJ0lWMSg?pRGNUVS>?JH7U`5R>{hELu<*qZnJ2kjJ5gA?QaQRB*BD)G6fyD=2|0OhxErp^zsF_irPcG&JJ6Z&-b0Ur8GwK?MR5Gt&~uGvFuJ;l`H;GKsk z_!^>(zr&MV79LZR$~|KYDCrUQ#rBZpBfN5>V`30L@e$fZ<0Z?%Ir=fQv<=MW5Uui#~Oh*8n(=g?!F zMgf-?WY};wSl1UwGN7x>3#ZYI@TG4RgGcq1;Q%_+4@Q&R2x`9suc*I*H}fTWq~AaV zqIw0Rw;REbdgMDX#*jX~R=cPIE4?r7j8gEuF5%ePiZiIi(^tqpevHgBrYt)a8imd2 z6JLX;!tz?1FFvTSLr)tRY=l+yJ8Z$cdJS#nO_2#KzyHMx_S;mBxJ-{h{D})lb@^YU z@|vxHaT>2WZGMmMu9ZJeJe|XZvfrTn?#+`4+>^Ef(-P^}Liroy*7;YNr#vm!@hx}> zSd%mTkO{8c`#-1U&cDUV_V_|3SR#FNWAELb8IF*uNX9s(K24(|Pe&L&L8 zs{Wn2tIlD{e}{?ZvxjZ9?(RwN!5xW}{X6vUq(|^vl$1o>5LIav-TQzdmbzdxkn&pm z=08>LheM-G==4(f%}Htdd_dYqYZ>fI-@$jV zJiuAAKBKE$!No{qPO-SS!%>a^&;YU&B}3 zeZHfp5qccm`du9<%*D9LL_ipjV>z1qh@FKTJND~C4FwTF>1uJwTtRFo%yi^Lfm5s= zy%$6TR&b#Sx{yuR6@4-0x#EYm>5BfszS>;WqMC@ixax6YWHqsoFc)!ap%dL=1VV^e z>WP^`AAb(!>xsd_riPp-35YeP>iQ_=N+XW+*M}B20%@f_(%iv`M^@o)jbkk+%m8Bj z8q**{u@22JfS7SKC$NWOO)f8S2g@e|(O$S8%i;34SZp*rL_cj~2>1aeM}}gC@C~;| z8j7_@l^ly3zuBGIMJ+Ye$jAsXamkz)Z6rnr@t8Yl1&wL75vpv1X_Jh6F%pA>m1zp( zP)`WXNJ5->ireXljiA0-So-$%clg*J!1Y*9jRM*X6>A!o?AeC5`2AknyLy`rQ zj~c=eaVYBClwByan!)XG5fl^r+X7j<8_tOc6*_0?7)G=g0)OVsE%cRFU1EMFTd=pA+M%Lrc?DoQSL;8cSrCy>2^0JZPc~ zjIm@lC(3N_RA%mDghnttz<&KG-&TwkwrPoL2V-mUcWsEBXs^?j?%9eBY5XDBZIPYm zse@qQTEL8S?NN!ThbYED^d#RSc&z)_qhvE2wAUilc~%eYVdps&up#|%1pRJIF$Qa? zAzIXefF;i4Yt!k|vRW8v<|~o?M`4SKBy}C2UQLR25PJw4PO_99RN{cTjypyEPGUXs zc7%54&v0VdY4oK9jxcS+S%&zL;3RtM?4pZ~BJRI)68&}j$nh@E_ZZA zr|9`mflPCSlAkIN6Z-6m)*kkV%lNuswcNF~h(p;*q=X@@9?LTE!bdIP{4~~>wz?sU z%qN^}R0oy*>j&{Hwgwd#V%&P+3yb%7%4KFhi^Y9Cb&%>s1!6%x>O#3u&$vwf^H^&t zs|%UOT152%sie#fxnZaq;Er9?@z1&R7I&EFy+lNkV?9{q%nQaDs-vcKko2*h7$Z2o z;?hO0k<;KtZLvY;0ksxYz;0yWfdzeVr3qTC*F0I5`e^QnTH<7Vl=zR9$o&X2H1q`f zmw&k|5Cq!EL3oIRo+zUDjSSZ!w+0a0@lJuPZh+qR@V$&UQhhJfq4x(F!Bs%^Slt}= zLT1Z9(mgM6gwP*>_PxX=w89&9n~xa#j41gUi&_2QA3a^V6+6lYrmFRgXEx49Y$D9B zAWW#-2i;L1e_ye$&SduEx4qZWdL?o>02V%jeGe4IGx2ML$L6F7 zL+ojGplCv~8bPL~wF2>QM5LRdN%#m+-UwwF)l~4J1Mw)`w3U$<;eowOm{2_@+{Z1w zD$RqC6h~a8f(Ay!Sx~DWH09GE1yT@%%r1s15Yu2ZVaIS8vDLbQu>e<7f|29i2+k|& ziWy}|<2WnsRZS8S;?LXTEz%dFdl5*wpaX4hjA@o@W9WJ@lM~N7#~IVesCL@9`+~+0T+^5F z+UodFL1Vn0y(6J=`2a3InGuVIapG1aY!!$r99g!(QLxb1Y)<4xp^QZn$TAjHD2oyk zgf~-V!jf7?BbQq<6v+3PFa`GqiG~U{XDN8!W}`ArF?fu0a~SMNLt~KsdM+cvXxewS zaUO$I2onjUht3UB#bV?y{}pw6J`L?4eP%ceU4)Jcn1~PKDL;j{#es)o&JwSG99q_C zp-iaAISG5z-??zC5nB8VqC?O2<^&u zz+7{ZVCJbiWQ2uIhtm1Dl84EZ?20o%2u-}kM&px)a2sKQw6FpDnqfr`8N446f*4#R zXzZwU3Xq$)oQENPx*8iQWQYqsho*`_)O;UGt(A&W-SGufi|EtSI9Pl^DztQ@f>g1e zpebV9#-wfrb$Z~|MJ8I^)z_3dL zW9unq5Fh&OxZ07j8FKIpN6w@nySoVDm@f9xd6t(hhEr)Z#9i3Knq~C`Cge%q($VQX zE^?w%3v~KvH(7(>4ENJGTgs@B%6+r$w?LvzcNDA-Q{i^kvL)c>_Z4t{OO!h79|cnI z5Z^w`TA@v+Jg5vSeJ2*T!n^GG!^#5HsH_zRziyAJ!pW`0ro#NkGVDZWT4Sxzk><7* zLn-Ge9Sw)e?WIF){?yro$S{S2NwL$K29jMld4f-dsB z0}~6R>@Ha9Ul3&i0qB|ki)B|Ne5m1YaaT+;rFI<0;BTE}I80FWVuT-scY}5>`fy@- zH)!Y8pA-7spwi(e#Z%&|^CfAQ9!P?B zM@4R1dWi8X@Jp3PJN_0@t?n`C-moeIQ7SD)YjGgTHa) z?wWXfLg z5vi0%L$JNzF$C!yvC^$v)W9Lw0bBAP`0Q!yc{^L>GLqG8Tw%Xt+loVX@;Z4-)j-o`FI@lAA@Pfqv2@n9ateV zLBKH3NYRj@MnJvDlB)2|5vb_*KP$tL!u!iw#=`an zj0mK=UQMjXVjNOc^JYjR^7Cn8L?anu=EINxx;74-`GJ;*8IL`fzkE5z%)f~t9U2eW z0~m#wtYbF1c}ql29*w>Z^=b7J#EwEMz1P87t$YG#v| zzPONp$+n*a*{Qhml@Tjan;6rLh3FPvHeq=2;5a@R8vWglA!=czT1rA4e?ie5J9A>!FX)k{a5pI{sB8f0Gtvb!ZE4Y1 zdkRt?9>I9dq?v+Ls}Ul98U%MvffdZr!5N`H6}EjpNh`*Pwi_A8m9jRmc9@EK_1eOa z+GIKn#eLq+iOgwGe&cRV{4os)m+oamYhe}QPO?Jt4>!@Le$!E{=|wVP&Ta8|E<9H& zd#ArUDhuh8-3+|0;!bj;{|uDtc!m>)W{APMdcB%b%<%*#0)TqQEEU=e)aN^u76g<+45$VDz+{G~)yT1n; zCK%GV*+_E<$Cwy$em0tTI*u_h!Zioh&5z{7{-^{K3d==%FUUa)WW><+91%XR@r><4 zIZYDGXw*uuohQNsbt_G~ZsJf96Dnw)fQ9xPRAFH=88PLSdp!ra-pA!=vS4|O1bmjA zj4V?(f@jp4@tnz}4d9$yDE&)28G$cpE{5riI8~&T(Wj8PsPd+c9GNv2og=p^C+^Ng zvwrTuiNJXnzMA&o#H%dC(fD;9G`xWWMl35J7F@$I)6mb&=A)m_7%cM)C~iKA`FR*e zXg;(!G=>vT7;$hMCsr)L266na$oa`61+wT@$T&`w5hHrXWUkFtAgK!=^Ey{XB7{xz zWx{|i=V1HAArB@xpU2^hJT%-`+%Ui@u$d8sD>!jAAGJ{tjQ4akN7Qh170#?B%cXcW z_7ZyJ1bnDwgvmmf?C3#8cu4wrb06SEc} zLC@oyc(w?`F}l5!RrAHzYae}@6N}FvE5yRa2(nmo60V%%upNwcP)VRjM!0QRvwVMWob}fZM-q$(Y>_&ogWutcJsJRThrZ+gR!!jtl;ug(a zCbkoLVJXFGX}ug(#>oJQ7_b}?rKOxGFGKggz8r=-caI}pD==MXhQ$_3*#B=lNsCv2 zeF|$FhP+sTM!SfW4I`5CQG>x)&oE+LKI-4_6(@{WilMl!{$4(2+MWJI8F+>~1;;nM zagMEoK7YOAM9o!boV<^m=*fuw-#M{&6*TnufaTf z{2Jt1h{KgyBt$5}0m?Oa%8{rK`3Z~xFjZiPE z7bk9QMA!SZFDEwjOT;HeHXgRxgj^P2xL^r#HlbZYhj1c&Xrd84+Jx$M8O4!NqmkJ?)2 zkcwu+SqvPE_-hNE`f>9(5xf;`FdS}nj59kA)qlJZ)7$l1MLWR@u5(g?t*9Kn@JmGa zHrVSht`lLLdE1bc3jTDAc*r<=*K(qG9kgm%0Im9L*(?2^g zUX65jAsqsXRH&M~3r61ffFt`KCL)v-J9mg3;%f9elg@s~c~5u2<~~n25%n}tMM-;L ziFUgobLTCGU%W$8n6ePz(oX6|#=DJ+I#>-#cjF-{|HKK^7pN8WJG6aoNQd`>owEls zZwuojW6EQ&C+^yn;rqX%!8YI|kBo%vL1rHiVOooX3L&@ygAqmENjNF92SeGydJ1H> zN0KE!N;4SSG{RnNEXdMV>L=CUXZo%)9&U)Q;Mx6w(Pe_C0$JW5N$bip?+-|C^OAYC zRQd;0AL1h;Y%>++HS*_(Z+MasP2C4Oh6XB-JNxit8zH73(@2u(_OguwHQ$fyox)_; zie~M>X5|_Ne?)x2{TRS5#Iauw=BI8&tqy>*t_?$QVeJ8Q%K2?Mu_XgWkK7{J7np9YqlK5pklq4!v>pia?I!m5Pf{~W`gNQP*zetC$=ym0}*@~ z$M`5JIr%q6bP?*VW52kd<0u;8jzpl4V<7T3a`D1VFy8pj9q`gUh=TyjjzQ0qEu2?& z465zi#)*jI7;$DIU@t3V*>TLmd=aqsB;Et5dyvIloI#NetlFGF4(*|k|9*xU8|RN$D88}_NrqH( z5<2CatqN~CmjplfQ)n^6^Hq7{PGOKgTLrF;cy`(c`SmH3XnVbCGU-c8@@eqAZ&c;Y zJPi|mzf~2kbq7^>c^X=XWmS36XP7bXSA|RdMy1;5VyxM521N~dP*ouJVUk(iS!8+j z;s0Uj(Z@$gSnHQ#NF9C_84P~>f29tb6;lM;r~j81a1Mmrtlha5Rk?3C=z4ig|u{Uua) zQXLs~qMn!VjP0$bKrUZG2|4vSvcfaD9c(4`L4Z zE_h{mTn4XqfXuU^tjp+HaX|{?{ACnW9HKz{uAn}eFpj)RNH(GASI~x~O=ZN2Ol{#| z^Y#kru|G+MO(^6lGBazgKr#lmufgAFTdqQx#|Rb5EE9cA#CQ4~_(EiI4e&g~{nWxS z!b-&N)Djl7=^7LsH(r4(&rX)U;Bk+<+Sid>Jwd@AGcnnSvaZ8epC)tI;sy+I5@t-333J*o9l1*WUh{7tN1Yi8p36++Sb76FE}6;U^j!3?`bkhf;U=V`5G0go z4A_!p--O_wh!mn{Ef46*Cu00eFwYX zJ275NjlBQqIfYfLXTqap=& zA$SY%h{~`h|8*7D9>mrUQ03lD7%!T#9$*-XPhi9- z;idE&Pni$lur!VGA7K55b9w&4l@umWpX_jOMe;xOdxShxX&k-t2-CiwAHi%M=`wYI{9F9+4fZ3TQf|z%}?~8dWy~+(WNrnTDS}!aY<)cu+uYaOl|6>gnOsh(CzLi#xye;_Lc^}`_E8H zZ1<{CAa<1G;j}gK6Bf6;fJ8*ggT#vlwi3M**kbg&E3Y@Dlj)1zPXM6pkfn{uP7I<9nR=uF*51vtMD!Ykw;ciwEdv zhni?`U+gy|&A}{=C55yV6@G(tUOr-oeV%cuHQ9bg@{^d0alnRNJ;S&)>pR4zKCeIv zUZj{)vslaw4a$+H@yiNUVL3v1bS%d^;ZbEYNO=2N7F#e!qrbpM<0H(*yiHpcu!cfY z%))+@o%KGYI&-?fAt4j>S`%Ry;POrG${OJOf4(l z;nY&ELKJaMt7*It>0)IyO+!-YYxF5zPvei<*((5*VX7Y4oyI%wsGi1NS8b?G4(Tx6 z7YfRho#C{iCHjy$XCz5^(ck)-Al+7`S}Msv6QJu`J(UNW$T!e5(KWAILDk~JMu;JD z7?q^Ob4}n_GR;sEs2iH1gu17u+L5V|##7fLRf%tTg`s$|5wdt%3BPQlX{Z~TrWB1Z z1~jR41!O}Tj5RU3)!Hhdx+a+Wx_gyxu{)pmDKLSIZZ zi8`C;uqkGy?r2NYP(>rmQJufKYvo}##ICbOW2t(k zn$g|rka)l(*7W#~gxR$SLyET0G=_VRj)f+ee|apnfb`^E|B-f8L5UH)|AWtFc(XoL za1+Yzi#D*aL>u_@{SR}Tr6x)D!+&wl{&>o5tdOXv-+vQX!7`)z{|DbZAk~Pzu|yFA z{=>}5N_C-WENsuO)~J|nRuze+x|ga#`gwy=ahFOy(u}T-G<^qFNu$p^P9k)>4^rZ@ z2P2X6!fIOsiAGQS4-?KPKDsZKaXhak9+6Y|6+%YzbR}|-c4H>hL=NVwmCQ3W@pzQO13Ngw?6%be3Ac?nVP=Oh z?WH**+6i$uFk`22rxQM!n%wE~mK_E!*Xj(eLyc>+Frqs48c)I5mLqjPVT~Y7q-WVf zaFsKM54p6!{j>YoRD}gdc*J<_uAJvl3k7be!w44|TTA0FOs>a?;#$yavL`2&Hb7Z^ z4k&AN0z=>ymSCqxV;nSrI!3hJLDNRaZ>?asG;e_*%#Io_;n)NPJjM~Ft(dGpE;wp} zg;moOh`SSva|>r6?BHgXTN@8f>GBqa^m!QqmmvnEX`VA?eJh<%hf~Wc3)xa4qD6x5 zBqXj-u%et%YBKheOx6#(Q8Mzk3+(oFg8~V6Mftn1_aw{YxZ>?`bgztS)ZUt0{)p-fl3+^;43tgl=<#hCOkn z9Qpu=7T(DJn^CViFu&*dA52q<4}&9Wb^togtvb-m`T{RiRaetkcu-OyH?%Ht-Gpll zd9J1;gl6!#Z%^tXUC+xrowK_pjKy7%i~+)s#=66V$8g6XGmnInxFf4?cN9qddN7#H zLyq`8YoVf$M=fks~NBKb?Ig;N%g9fV)I~lPn7@)O;+-=a(n0&vq(4$0841GsD zTasl=41&IRYNB-SsVgXJ`tGUm*6lK@0y4tKaHPhLyo&lZz*rMJN6FmO059gi`AW#Z z3&T&pZE&1kRUdHxy)l2$cwyjgu|o;%^1@4V!7e4Vb$3exQh7teZhMrt#v5gf_@e>} z(>;HvCB>AqtWD-V;O#o8rHW6rG^FS5SnFlK!%4OYKF~Mml*DwWUZ*i>F7ZM3iNzA+ z!wx@cMZhV~@>(O{$%oEb!`;9W(X}~+^6}S@{=Wm(R+pk(Y*bh%n+D~-YPvb^8 zerUP|x{PQqtkmaVls_6LyB=L^q;aBW{^(N6JzC+Co?npH4u3Qy7Ck?Bp+fCAnZV07 zzLm1!dpCr1alAs{d6QPsZD+VihVl9}WjtT92!I}~6F9LtGQ*ap2WaedFyIDg{OB^{ zTBLApP$P6^+h&}IY7WIlzr%Kxv@YA-2zds#V7x9uiwrK)EfA?Es~KTWX}w#SQ(>Sc zN@(0mMrx365IX+!zA}O>rGBVM=5ci4f

uR|FwvO@A(sHK3IZi#Y5loEXSVW=C^^ zHE{F}Mi<^aL`LF-gF|J)g6<4!Wk8GXAV-T3j3DbqD0mqm(6P@*1u|n4%7?4Fw)_hr zDBl5>mdm9@jDaOfWhbYFnG95ITf%BOT#q?{Sbf*CxwGM7p~V~nrH@xu+MfNBB)ISG>5Bz zM2tNS4N4-QlMP}^F?PyHXvu>!v#sD3jge2|lbpAqF-DSSSmm)g4U9xt4w0HrVFcED zS|n0vP$Cm5cD3Y4N^@O+qHp~U1ment;m5QCQ2 z!TLx>p2grPYxYS-u;I85Es$HIeKl$q3ti@61td#v`i6p*=b*8-#G-4w{jT7>h(&3( z0u5?`(tb8*Z9)lg$a|iy0$C9U&HL%gh>aqYlvO-R+hr*8OmJ6UYa>#}qgt2DIGi7k zw^n`)nJ^~3CMe^htpX97pbW$bl=MIXV|wM#TI-)Ct>-T^K|wlQe$9 z&JY=CC5#H=gkNH7LwcVCjgoODnKg@qBqu|o{!t2KbuyYxr>O$5Pe9>A-{A&l>lEnd zoFMZosP|kLqbGwSlQ^sjz`3pb6!i19IFQT=l91>$m=%%5t@(A!_NhqH0OymH0yTJq z+L4SmBE2%ti1wvIv0NNNmXuGzxMa}`(+`Z8l@KEu(F}FUZ>NBZn`t71QwSNul9n}T zrI*(cz2J%1+Jc%khYg>I6)eha4&w**R3NXKYhnef-W7ZV&`;p#+L&*Vlue3EzL4-nMQ(54ktoeK;yx47|~v6JCB2}7&z)zPNcR( zVeZ(NZ>iA;Mba-`K&>#exM6R;rKUdhXoa@@vVs#1D^Wkh5P)AoD;N_|3ndx1*2pD& z6U)+$&bP+!pWPZ-hU}7&Xu%E4o-q*c-G*sS|E1kYm%avn*Zsy{J7ZB$mp& fXd(44nJ}h+4jN1IH0w0$;{FCdHGkR$n{xjHL5lR_ diff --git a/editor/vscode/package.json b/editor/vscode/package.json index 6a1d61b..bae061c 100644 --- a/editor/vscode/package.json +++ b/editor/vscode/package.json @@ -3,6 +3,10 @@ "displayName": "mclang", "description": "Code highlighting for mclang", "version": "0.0.1", + "repository": { + "type": "git", + "url": "git@github.com:mc-lang/mclang2.git" + }, "engines": { "vscode": "^1.54.0" }, diff --git a/editor/vscode/syntaxes/mclang.tmLanguage.json b/editor/vscode/syntaxes/mclang.tmLanguage.json index e18cd32..6fa3308 100644 --- a/editor/vscode/syntaxes/mclang.tmLanguage.json +++ b/editor/vscode/syntaxes/mclang.tmLanguage.json @@ -123,7 +123,7 @@ "patterns": [ { "name": "variable.name.source.mclang", - "match": "(?<=^|\\s)(\\+|-|\\*|max|divmod|print|=|>|<|>=|<=|!=|>>|<<|\\||&|not|dup|swap|drop|over|rot|argc|argv|here|syscall0|syscall1|syscall2|syscall3|syscall4|syscall5|syscall6|\\?\\?\\?)(?=>$|\\s)" + "match": "(?<=^|\\s)(\\+|-|\\*|max|divmod|print|=|>|<|>=|<=|!=|>>|<<|\\||&|not|dup|swap|drop|over|rot|argc|argv|here|syscall0|syscall1|syscall2|syscall3|syscall4|syscall5|syscall6|mem|\\?\\?\\?)(?=>$|\\s)" } ] }, diff --git a/examples/hello_world.mcl b/examples/hello_world.mcl new file mode 100644 index 0000000..b206a6d --- /dev/null +++ b/examples/hello_world.mcl @@ -0,0 +1,18 @@ + +mem dup 72 @8 +1 + dup 101 @8 +1 + dup 110 @8 +1 + dup 108 @8 +1 + dup 111 @8 +1 + dup 32 @8 +1 + dup 119 @8 +1 + dup 111 @8 +1 + dup 114 @8 +1 + dup 108 @8 +1 + dup 100 @8 +1 + dup 33 @8 +1 + dup 10 @8 +1 + + +mem - mem 1 1 syscall3 + diff --git a/examples/rule110.mcl b/examples/rule110.mcl new file mode 100644 index 0000000..1b597f2 --- /dev/null +++ b/examples/rule110.mcl @@ -0,0 +1 @@ +// TODO: Make this diff --git a/examples/seq_100.mcl b/examples/seq_100.mcl new file mode 100644 index 0000000..a9a3bbb --- /dev/null +++ b/examples/seq_100.mcl @@ -0,0 +1,5 @@ + +0 while dup 100 < do + dup print + 1 + +end diff --git a/src/compile/linux_x86_64.rs b/src/compile/linux_x86_64.rs index 6ef26a3..c01f994 100644 --- a/src/compile/linux_x86_64.rs +++ b/src/compile/linux_x86_64.rs @@ -196,6 +196,77 @@ pub fn compile(tokens: Vec, args: Args) -> Result<()>{ writeln!(writer, " jmp addr_{}", token.jmp)?; ti += 1; }, + OpType::Syscall0 => { + writeln!(writer, " ; -- SYSCALL0")?; + writeln!(writer, " pop rax")?; + writeln!(writer, " syscall")?; + writeln!(writer, " push rax")?; + ti += 1; + }, + OpType::Syscall1 => { + writeln!(writer, " ; -- SYSCALL1")?; + writeln!(writer, " pop rax")?; + writeln!(writer, " pop rdi")?; + writeln!(writer, " syscall")?; + writeln!(writer, " push rax")?; + ti += 1; + }, + OpType::Syscall2 => { + writeln!(writer, " ; -- SYSCALL2")?; + writeln!(writer, " pop rax")?; + writeln!(writer, " pop rdi")?; + writeln!(writer, " pop rsi")?; + writeln!(writer, " syscall")?; + writeln!(writer, " push rax")?; + ti += 1; + }, + OpType::Syscall3 => { + writeln!(writer, " ; -- SYSCALL3")?; + writeln!(writer, " pop rax")?; + writeln!(writer, " pop rdi")?; + writeln!(writer, " pop rsi")?; + writeln!(writer, " pop rdx")?; + writeln!(writer, " syscall")?; + writeln!(writer, " push rax")?; + + ti += 1; + }, + OpType::Syscall4 => { + writeln!(writer, " ; -- SYSCALL4")?; + writeln!(writer, " pop rax")?; + writeln!(writer, " pop rdi")?; + writeln!(writer, " pop rsi")?; + writeln!(writer, " pop rdx")?; + writeln!(writer, " pop r10")?; + writeln!(writer, " syscall")?; + writeln!(writer, " push rax")?; + ti += 1; + }, + OpType::Syscall5 => { + writeln!(writer, " ; -- SYSCALL5")?; + writeln!(writer, " pop rax")?; + writeln!(writer, " pop rdi")?; + writeln!(writer, " pop rsi")?; + writeln!(writer, " pop rdx")?; + writeln!(writer, " pop r10")?; + writeln!(writer, " pop r8")?; + writeln!(writer, " syscall")?; + writeln!(writer, " push rax")?; + ti += 1; + }, + OpType::Syscall6 => { + writeln!(writer, " ; -- SYSCALL6")?; + writeln!(writer, " pop rax")?; + writeln!(writer, " pop rdi")?; + writeln!(writer, " pop rsi")?; + writeln!(writer, " pop rdx")?; + writeln!(writer, " pop r10")?; + writeln!(writer, " pop r8")?; + writeln!(writer, " pop r9")?; + writeln!(writer, " syscall")?; + writeln!(writer, " push rax")?; + ti += 1; + }, } } writeln!(writer, "addr_{}:", ti)?; diff --git a/src/constants.rs b/src/constants.rs index 7f02c7e..26f4a82 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -17,7 +17,14 @@ pub enum OpType { Do, Mem, Load8, - Store8 + Store8, + Syscall0, + Syscall1, + Syscall2, + Syscall3, + Syscall4, + Syscall5, + Syscall6 } diff --git a/src/interpret/linux_x86_64.rs b/src/interpret/linux_x86_64/mod.rs similarity index 69% rename from src/interpret/linux_x86_64.rs rename to src/interpret/linux_x86_64/mod.rs index b686485..9d3cfba 100644 --- a/src/interpret/linux_x86_64.rs +++ b/src/interpret/linux_x86_64/mod.rs @@ -1,7 +1,11 @@ -use crate::constants::OpType; +use std::fmt::format; + +use crate::{constants::OpType, util::logger}; // use crate::util::logger; use color_eyre::Result; +mod syscalls; + fn stack_pop(stack: &mut Vec) -> Result { match stack.pop() { Some(i) => Ok(i), @@ -12,7 +16,8 @@ fn stack_pop(stack: &mut Vec) -> Result { pub fn run(tokens: Vec) -> Result<(), &'static str>{ let mut stack: Vec = Vec::new(); let mut ti = 0; - let mut mem: Vec = Vec::with_capacity(crate::compile::MEM_SZ as usize); + let mut mem: Vec = vec![0; crate::compile::MEM_SZ as usize]; + while ti < tokens.len() { let token = &tokens[ti]; @@ -48,14 +53,14 @@ pub fn run(tokens: Vec) -> Result<(), &'static str>{ OpType::Load8 => { let a = stack_pop(&mut stack)?; - stack.push(mem[a as usize]); + stack.push(mem[a as usize] as u64); ti += 1; } OpType::Store8 => { let a = stack_pop(&mut stack)?; let b = stack_pop(&mut stack)?; - mem[b as usize] = a; + mem[b as usize] = a as u8; ti += 1; } @@ -118,6 +123,46 @@ pub fn run(tokens: Vec) -> Result<(), &'static str>{ OpType::End => { ti = token.jmp as usize; } + OpType::Syscall0 => { + todo!(); + ti += 1; + }, + OpType::Syscall1 => { + todo!(); + ti += 1; + }, + OpType::Syscall2 => { + todo!(); + ti += 1; + }, + OpType::Syscall3 => { + let rax = stack_pop(&mut stack)?; + let rdi = stack_pop(&mut stack)?; + let rsi = stack_pop(&mut stack)?; + let rdx = stack_pop(&mut stack)?; + + let ret = match rax { + 1 => syscalls::sys_write(rax, rdi, rsi, rdx, &mem), + _ => { + logger::error(format!("Syscall(3) #{} is not implemented", rax).as_str()); + return Err("Exiting"); + } + }; + stack.push(ret); + ti += 1; + }, + OpType::Syscall4 => { + todo!(); + ti += 1; + }, + OpType::Syscall5 => { + todo!(); + ti += 1; + }, + OpType::Syscall6 => { + todo!(); + ti += 1; + }, } } Ok(()) diff --git a/src/interpret/linux_x86_64/syscalls.rs b/src/interpret/linux_x86_64/syscalls.rs new file mode 100644 index 0000000..467f009 --- /dev/null +++ b/src/interpret/linux_x86_64/syscalls.rs @@ -0,0 +1,13 @@ + +pub fn sys_write(rax: u64, rdi: u64, rsi: u64, rdx: u64, mem: &Vec ) -> u64 { + for c in rsi..rdx { + match rdi { + 1 => print!("{}", unsafe { char::from_u32_unchecked((mem[(rsi + c) as usize]) as u32) }), + 2 => eprint!("{}", unsafe { char::from_u32_unchecked((mem[(rsi + c) as usize]) as u32) }), + _ => panic!("Unknown file {}", rdi) + }; + let _ = std::io::Write::flush(&mut std::io::stdout()); + let _ = std::io::Write::flush(&mut std::io::stderr()); + } + rax +} \ No newline at end of file diff --git a/src/parser.rs b/src/parser.rs index c8814a8..78c93f9 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -112,6 +112,14 @@ impl Parser { "!8" => tokens.push(Operator::new(OpType::Load8, 0, token.file.clone(), token.line, token.col)), "@8" => tokens.push(Operator::new(OpType::Store8, 0, token.file.clone(), token.line, token.col)), + "syscall0" => tokens.push(Operator::new(OpType::Syscall0, 0, token.file.clone(), token.line, token.col)), + "syscall1" => tokens.push(Operator::new(OpType::Syscall1, 0, token.file.clone(), token.line, token.col)), + "syscall2" => tokens.push(Operator::new(OpType::Syscall2, 0, token.file.clone(), token.line, token.col)), + "syscall3" => tokens.push(Operator::new(OpType::Syscall3, 0, token.file.clone(), token.line, token.col)), + "syscall4" => tokens.push(Operator::new(OpType::Syscall4, 0, token.file.clone(), token.line, token.col)), + "syscall5" => tokens.push(Operator::new(OpType::Syscall5, 0, token.file.clone(), token.line, token.col)), + "syscall6" => tokens.push(Operator::new(OpType::Syscall6, 0, token.file.clone(), token.line, token.col)), + diff --git a/test.mcl b/test.mcl index 365e313..b206a6d 100644 --- a/test.mcl +++ b/test.mcl @@ -1,3 +1,18 @@ -mem 255 @8 -mem !8 print \ No newline at end of file +mem dup 72 @8 +1 + dup 101 @8 +1 + dup 110 @8 +1 + dup 108 @8 +1 + dup 111 @8 +1 + dup 32 @8 +1 + dup 119 @8 +1 + dup 111 @8 +1 + dup 114 @8 +1 + dup 108 @8 +1 + dup 100 @8 +1 + dup 33 @8 +1 + dup 10 @8 +1 + + +mem - mem 1 1 syscall3 + diff --git a/test.py b/test.py new file mode 100644 index 0000000..0dce136 --- /dev/null +++ b/test.py @@ -0,0 +1,3 @@ +txt = "TODO: Make this!\n" +sp = list(txt) +print([ord(x) for x in sp]) \ No newline at end of file