From 5b57caecee6bd3c9bf395d992a05362afb7ecd33 Mon Sep 17 00:00:00 2001 From: orboditilt <45944072+orboditilt@users.noreply.github.com> Date: Thu, 15 Aug 2019 10:29:36 +0200 Subject: [PATCH] Simplify mocha do only disable sigchecks, add wupserver, sd overall patches and a improved .rpx redirection. --- .gitignore | 2 + Makefile | 37 +- common/config_types.h | 40 - data/launch_image.tga | Bin 1354796 -> 0 bytes ios_acp/Makefile | 80 -- ios_acp/link.ld | 23 - ios_acp/source/imports.h | 7 - ios_acp/source/main.c | 41 - ios_acp/source/types.h | 29 - ios_bsp/Makefile | 80 -- ios_bsp/link.ld | 27 - ios_bsp/source/fsa.c | 81 -- ios_bsp/source/fsa.h | 10 - ios_bsp/source/seeprom.c | 156 ---- ios_bsp/source/seeprom_asm.s | 9 - ios_bsp/source/svc.h | 21 - ios_bsp/source/svc.s | 45 - ios_bsp/source/types.h | 29 - ios_fs/Makefile | 80 -- ios_fs/link.ld | 26 - ios_fs/source/devices.c | 150 ---- ios_fs/source/devices.h | 110 --- ios_fs/source/dumper.c | 322 ------- ios_fs/source/dumper.h | 15 - ios_fs/source/fat32_format.c | 326 -------- ios_fs/source/fat32_format.h | 7 - ios_fs/source/font.c | 49 -- ios_fs/source/font_bin.h | 1 - ios_fs/source/fsa.c | 222 ----- ios_fs/source/fsa.h | 42 - ios_fs/source/function_hooks.s | 101 --- ios_fs/source/hardware_registers.h | 9 - ios_fs/source/imports.h | 38 - ios_fs/source/main.c | 62 -- ios_fs/source/mlcio.c | 11 - ios_fs/source/mlcio.h | 6 - ios_fs/source/sdio.c | 107 --- ios_fs/source/sdio.h | 12 - ios_fs/source/svc.h | 29 - ios_fs/source/svc.s | 68 -- ios_fs/source/text.c | 90 -- ios_fs/source/text.h | 11 - ios_fs/source/types.h | 29 - ios_kernel/source/config.h | 31 - ios_kernel/source/instant_patches.c | 88 +- ios_kernel/source/ios_acp_patches.c | 59 -- ios_kernel/source/ios_acp_patches.h | 30 - ios_kernel/source/ios_acp_patches_asm.s | 11 - ios_kernel/source/ios_bsp_patches.c | 79 -- ios_kernel/source/ios_bsp_patches.h | 31 - ios_kernel/source/ios_fs_patches.c | 102 --- ios_kernel/source/ios_fs_patches.h | 30 - ios_kernel/source/ios_fs_patches_asm.s | 40 - ios_kernel/source/ios_mcp_patches.c | 9 +- ios_kernel/source/kernel_patches.c | 51 +- ios_kernel/source/main.c | 40 +- ios_kernel/source/redirection_setup.c | 92 -- ios_kernel/source/redirection_setup.h | 29 - ios_mcp/Makefile | 2 + ios_mcp/source/logger.c | 9 +- ios_mcp/source/main.c | 25 +- ios_mcp/source/mcp_loadfile.c | 128 ++- libs/libc.a | Bin 909796 -> 0 bytes libs/libgcc.a | Bin 1521600 -> 0 bytes mocha.cbp | 325 -------- src/cfw_config.c | 152 ---- src/cfw_config.h | 37 - src/common/common.h | 36 - src/common/fs_defs.h | 62 -- src/common/os_defs.h | 25 - src/common/types.h | 7 - src/entry.c | 14 - src/fs/fs_utils.c | 184 ---- src/fs/fs_utils.h | 23 - src/fs/sd_fat_devoptab.c | 1018 ----------------------- src/fs/sd_fat_devoptab.h | 38 - src/ios_exploit.c | 116 ++- src/ios_exploit.h | 4 +- src/kernel_asm.S | 239 ++++++ src/link.ld | 35 +- src/main.c | 201 +++-- src/main.h | 6 +- src/menu.c | 259 ------ src/menu.h | 8 - src/system/exception_handler.c | 145 ---- src/system/exception_handler.h | 14 - src/system/memory.c | 181 ---- src/system/memory.h | 42 - src/utils/logger.c | 89 -- src/utils/logger.h | 26 - src/utils/utils.h | 47 -- 91 files changed, 611 insertions(+), 6248 deletions(-) delete mode 100644 common/config_types.h delete mode 100644 data/launch_image.tga delete mode 100644 ios_acp/Makefile delete mode 100644 ios_acp/link.ld delete mode 100644 ios_acp/source/imports.h delete mode 100644 ios_acp/source/main.c delete mode 100644 ios_acp/source/types.h delete mode 100644 ios_bsp/Makefile delete mode 100644 ios_bsp/link.ld delete mode 100644 ios_bsp/source/fsa.c delete mode 100644 ios_bsp/source/fsa.h delete mode 100644 ios_bsp/source/seeprom.c delete mode 100644 ios_bsp/source/seeprom_asm.s delete mode 100644 ios_bsp/source/svc.h delete mode 100644 ios_bsp/source/svc.s delete mode 100644 ios_bsp/source/types.h delete mode 100644 ios_fs/Makefile delete mode 100644 ios_fs/link.ld delete mode 100644 ios_fs/source/devices.c delete mode 100644 ios_fs/source/devices.h delete mode 100644 ios_fs/source/dumper.c delete mode 100644 ios_fs/source/dumper.h delete mode 100644 ios_fs/source/fat32_format.c delete mode 100644 ios_fs/source/fat32_format.h delete mode 100644 ios_fs/source/font.c delete mode 100644 ios_fs/source/font_bin.h delete mode 100644 ios_fs/source/fsa.c delete mode 100644 ios_fs/source/fsa.h delete mode 100644 ios_fs/source/function_hooks.s delete mode 100644 ios_fs/source/hardware_registers.h delete mode 100644 ios_fs/source/imports.h delete mode 100644 ios_fs/source/main.c delete mode 100644 ios_fs/source/mlcio.c delete mode 100644 ios_fs/source/mlcio.h delete mode 100644 ios_fs/source/sdio.c delete mode 100644 ios_fs/source/sdio.h delete mode 100644 ios_fs/source/svc.h delete mode 100644 ios_fs/source/svc.s delete mode 100644 ios_fs/source/text.c delete mode 100644 ios_fs/source/text.h delete mode 100644 ios_fs/source/types.h delete mode 100644 ios_kernel/source/config.h delete mode 100644 ios_kernel/source/ios_acp_patches.c delete mode 100644 ios_kernel/source/ios_acp_patches.h delete mode 100644 ios_kernel/source/ios_acp_patches_asm.s delete mode 100644 ios_kernel/source/ios_bsp_patches.c delete mode 100644 ios_kernel/source/ios_bsp_patches.h delete mode 100644 ios_kernel/source/ios_fs_patches.c delete mode 100644 ios_kernel/source/ios_fs_patches.h delete mode 100644 ios_kernel/source/ios_fs_patches_asm.s delete mode 100644 ios_kernel/source/redirection_setup.c delete mode 100644 ios_kernel/source/redirection_setup.h delete mode 100644 libs/libc.a delete mode 100644 libs/libgcc.a delete mode 100644 mocha.cbp delete mode 100644 src/cfw_config.c delete mode 100644 src/cfw_config.h delete mode 100644 src/common/common.h delete mode 100644 src/common/fs_defs.h delete mode 100644 src/common/os_defs.h delete mode 100644 src/common/types.h delete mode 100644 src/entry.c delete mode 100644 src/fs/fs_utils.c delete mode 100644 src/fs/fs_utils.h delete mode 100644 src/fs/sd_fat_devoptab.c delete mode 100644 src/fs/sd_fat_devoptab.h create mode 100644 src/kernel_asm.S delete mode 100644 src/menu.c delete mode 100644 src/menu.h delete mode 100644 src/system/exception_handler.c delete mode 100644 src/system/exception_handler.h delete mode 100644 src/system/memory.c delete mode 100644 src/system/memory.h delete mode 100644 src/utils/logger.c delete mode 100644 src/utils/logger.h delete mode 100644 src/utils/utils.h diff --git a/.gitignore b/.gitignore index 919e10f..62c3c97 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /*.elf +/*.cbp /build /ios_bsp/build /ios_bsp/ios_bsp.bin.h @@ -30,3 +31,4 @@ /ios_acp/ios_acp.bin.h /ios_acp/*.elf /ios_acp/ios_acp_syms.h +*.rpx diff --git a/Makefile b/Makefile index 24dda3a..fb0211b 100644 --- a/Makefile +++ b/Makefile @@ -10,10 +10,10 @@ ifeq ($(strip $(DEVKITPRO)),) $(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") endif export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export LIBOGC_INC := $(DEVKITPRO)/libogc/include -export LIBOGC_LIB := $(DEVKITPRO)/libogc/lib/wii export PORTLIBS := $(DEVKITPRO)/portlibs/ppc +GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) + PREFIX := powerpc-eabi- export AS := $(PREFIX)as @@ -28,14 +28,11 @@ export OBJCOPY := $(PREFIX)objcopy # SOURCES is a list of directories containing source code # INCLUDES is a list of directories containing extra header files #--------------------------------------------------------------------------------- -TARGET := mocha +TARGET := payload BUILD := build BUILD_DBG := $(TARGET)_dbg -SOURCES := src \ - src/dynamic_libs \ - src/fs \ - src/system \ - src/utils +SOURCES := src + DATA := data INCLUDES := src @@ -43,12 +40,12 @@ INCLUDES := src #--------------------------------------------------------------------------------- # options for code generation #--------------------------------------------------------------------------------- -CFLAGS := -std=gnu11 -mrvl -mcpu=750 -meabi -mhard-float -ffast-math \ +CFLAGS := -std=gnu11 -mcpu=750 -meabi -mhard-float -ffast-math \ -O3 -Wall -Wextra -Wno-unused-parameter -Wno-strict-aliasing $(INCLUDE) -CXXFLAGS := -std=gnu++11 -mrvl -mcpu=750 -meabi -mhard-float -ffast-math \ +CXXFLAGS := -std=gnu++11 -mcpu=750 -meabi -mhard-float -ffast-math \ -O3 -Wall -Wextra -Wno-unused-parameter -Wno-strict-aliasing $(INCLUDE) ASFLAGS := -mregnames -LDFLAGS := -nostartfiles -Wl,-Map,$(notdir $@).map,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r,-wrap,valloc,-wrap,_valloc_r,-wrap,_pvalloc_r,--gc-sections +LDFLAGS := -nostartfiles -Wl,--gc-sections #--------------------------------------------------------------------------------- Q := @ @@ -56,7 +53,7 @@ MAKEFLAGS += --no-print-directory #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project #--------------------------------------------------------------------------------- -LIBS := -ldynamiclibs +LIBS := #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing @@ -64,7 +61,7 @@ LIBS := -ldynamiclibs #--------------------------------------------------------------------------------- LIBDIRS := $(CURDIR) \ $(DEVKITPPC)/lib \ - $(DEVKITPPC)/lib/gcc/powerpc-eabi/4.8.2 + $(DEVKITPPC)/lib/gcc/powerpc-eabi/$(GCC_VER) #--------------------------------------------------------------------------------- @@ -123,23 +120,14 @@ $(BUILD): $(CURDIR)/ios_kernel/ios_kernel.bin.h @[ -d $@ ] || mkdir -p $@ @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile -$(CURDIR)/ios_kernel/ios_kernel.bin.h: $(CURDIR)/ios_usb/ios_usb.bin.h $(CURDIR)/ios_mcp/ios_mcp.bin.h $(CURDIR)/ios_fs/ios_fs.bin.h $(CURDIR)/ios_bsp/ios_bsp.bin.h $(CURDIR)/ios_acp/ios_acp.bin.h +$(CURDIR)/ios_kernel/ios_kernel.bin.h: $(CURDIR)/ios_usb/ios_usb.bin.h $(CURDIR)/ios_mcp/ios_mcp.bin.h @$(MAKE) --no-print-directory -C $(CURDIR)/ios_kernel -f $(CURDIR)/ios_kernel/Makefile $(CURDIR)/ios_usb/ios_usb.bin.h: @$(MAKE) --no-print-directory -C $(CURDIR)/ios_usb -f $(CURDIR)/ios_usb/Makefile -$(CURDIR)/ios_fs/ios_fs.bin.h: - @$(MAKE) --no-print-directory -C $(CURDIR)/ios_fs -f $(CURDIR)/ios_fs/Makefile - -$(CURDIR)/ios_bsp/ios_bsp.bin.h: - @$(MAKE) --no-print-directory -C $(CURDIR)/ios_bsp -f $(CURDIR)/ios_bsp/Makefile - $(CURDIR)/ios_mcp/ios_mcp.bin.h: @$(MAKE) --no-print-directory -C $(CURDIR)/ios_mcp -f $(CURDIR)/ios_mcp/Makefile - -$(CURDIR)/ios_acp/ios_acp.bin.h: - @$(MAKE) --no-print-directory -C $(CURDIR)/ios_acp -f $(CURDIR)/ios_acp/Makefile #--------------------------------------------------------------------------------- clean: @@ -147,10 +135,7 @@ clean: @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf @$(MAKE) --no-print-directory -C $(CURDIR)/ios_kernel -f $(CURDIR)/ios_kernel/Makefile clean @$(MAKE) --no-print-directory -C $(CURDIR)/ios_usb -f $(CURDIR)/ios_usb/Makefile clean - @$(MAKE) --no-print-directory -C $(CURDIR)/ios_fs -f $(CURDIR)/ios_fs/Makefile clean - @$(MAKE) --no-print-directory -C $(CURDIR)/ios_bsp -f $(CURDIR)/ios_bsp/Makefile clean @$(MAKE) --no-print-directory -C $(CURDIR)/ios_mcp -f $(CURDIR)/ios_mcp/Makefile clean - @$(MAKE) --no-print-directory -C $(CURDIR)/ios_acp -f $(CURDIR)/ios_acp/Makefile clean #--------------------------------------------------------------------------------- diff --git a/common/config_types.h b/common/config_types.h deleted file mode 100644 index abe9154..0000000 --- a/common/config_types.h +++ /dev/null @@ -1,40 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#ifndef _CONFIG_TYPES_H_ -#define _CONFIG_TYPES_H_ - -typedef struct -{ - int viewMode; - int directLaunch; - int launchImage; - int noIosReload; - int launchSysMenu; - int redNAND; - int seeprom_red; - int otp_red; - int syshaxXml; -} cfw_config_t; - -#endif diff --git a/data/launch_image.tga b/data/launch_image.tga deleted file mode 100644 index 52620ea1882965267f96b5dd6f75d27fa21fff19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1354796 zcmeI*t&<$dqW|Y>`yVj8^uPn`hyxGZh@T_whQp3nzl3Ay!i9n&27-cuq5}sG6crQ{ z6crSdnf%Gj?ozAgMf0Xz&CD}Vr%!ctR#w(iJ=*VNWmWyhfBg6VvH$sh|A+tYzx&Vs z`26{ci2wlt1PBlyK;S_OeEjs;M1TMR0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ 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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF{G0-xKYuY1AV7cs0RjXFJbHnj pCyV~a?&tsf?f?33|M!3WAOH2g|8M`(|MS26*Z=z8{^$Sr{{e_?u$KS; diff --git a/ios_acp/Makefile b/ios_acp/Makefile deleted file mode 100644 index eaa8bc0..0000000 --- a/ios_acp/Makefile +++ /dev/null @@ -1,80 +0,0 @@ -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif - -ifeq ($(filter $(DEVKITARM)/bin,$(PATH)),) -export PATH:=$(DEVKITARM)/bin:$(PATH) -endif - -CC = arm-none-eabi-gcc -LINK = arm-none-eabi-gcc -AS = arm-none-eabi-as -OBJCOPY = arm-none-eabi-objcopy -OBJDUMP = arm-none-eabi-objdump -CFLAGS += -Wall -mbig-endian -std=gnu11 -mcpu=arm926ej-s -msoft-float -mfloat-abi=soft -Os -LDFLAGS += -nostartfiles -nodefaultlibs -mbig-endian -Wl,-T,link.ld -LIBDIRS += -L$(CURDIR)/../libs -LIBS += -lgcc - -CFILES = $(wildcard source/*.c) -BINFILES = $(wildcard data/*.bin) -OFILES = $(BINFILES:data/%.bin=build/%.bin.o) -OFILES += $(CFILES:source/%.c=build/%.o) -DFILES = $(CFILES:source/%.c=build/%.d) -SFILES = $(wildcard source/*.s) -OFILES += $(SFILES:source/%.s=build/%.o) -PROJECTNAME = ${shell basename "$(CURDIR)"} -CWD = "$(CURDIR)"" - -#--------------------------------------------------------------------------------- -# canned command sequence for binary data, taken from devkitARM -#--------------------------------------------------------------------------------- -define bin2o - bin2s $< | $(AS) -EB -o $(@) -endef - -.PHONY:=all dirs - -all: dirs $(PROJECTNAME).bin $(PROJECTNAME)_syms.h $(PROJECTNAME).bin $(PROJECTNAME).bin.h - -dirs: - @mkdir -p build - -$(PROJECTNAME).elf: $(OFILES) - @echo "LD $@" - @$(LINK) $(LDFLAGS) -o $(PROJECTNAME).elf $(sort $(filter-out build/crt0.o, $(OFILES))) $(LIBDIRS) $(LIBS) - -$(PROJECTNAME).bin: $(PROJECTNAME).elf - @echo "OBJCOPY $@\n" - @$(OBJCOPY) -j .text -j .rodata -j .data -O binary $(PROJECTNAME).elf $@ - -$(PROJECTNAME).bin.h: $(PROJECTNAME).bin - @xxd -i $< | sed "s/unsigned/static const unsigned/g;s/$(PROJECTNAME)$*/$(PROJECTNAME)/g" > $@ - -$(PROJECTNAME)_syms.h: - @echo "#ifndef $(PROJECTNAME)_SYMS_H" > $@ - @echo "#define $(PROJECTNAME)_SYMS_H" >> $@ - @$(OBJDUMP) -EB -t -marm $(PROJECTNAME).elf | grep 'g F .text' | grep -v '.hidden' | awk '{print "#define " $$6 " 0x" $$1}' >> $@ - @$(OBJDUMP) -EB -t -marm $(PROJECTNAME).elf | grep -e 'g .text' -e '_bss_' -e "_seeprom_buffer_start" | awk '{print "#define " $$5 " 0x" $$1}' >> $@ - @echo "#endif" >> $@ - -clean: - @rm -f build/*.o build/*.d - @rm -f $(PROJECTNAME).elf $(PROJECTNAME).bin $(PROJECTNAME)_syms.h $(PROJECTNAME).bin $(PROJECTNAME).bin.h - @echo "all cleaned up !" - --include $(DFILES) - -build/%.o: source/%.c - @echo "CC $(notdir $<)" - @$(CC) $(CFLAGS) -c $< -o $@ - @$(CC) -MM $< > build/$*.d - -build/%.o: source/%.s - @echo "CC $(notdir $<)" - @$(CC) $(CFLAGS) -xassembler-with-cpp -c $< -o $@ - @$(CC) -MM $< > build/$*.d - -build/%.bin.o: data/%.bin - @echo "BIN $(notdir $<)" - @$(bin2o) diff --git a/ios_acp/link.ld b/ios_acp/link.ld deleted file mode 100644 index 826cf00..0000000 --- a/ios_acp/link.ld +++ /dev/null @@ -1,23 +0,0 @@ -OUTPUT_ARCH(arm) - -SECTIONS -{ - .text 0xE00DB660 : { - _text_start = .; - *(.text*); - *(.rodata*); - } - _text_end = .; - - .bss 0xE0261F10 : { - _bss_start = .; - *(.bss*); - *(.data*); - } - _bss_end = .; - - /DISCARD/ : { - *(*); - } -} - diff --git a/ios_acp/source/imports.h b/ios_acp/source/imports.h deleted file mode 100644 index 229134c..0000000 --- a/ios_acp/source/imports.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _IMPORTS_H_ -#define _IMPORTS_H_ - -#define ACP_SYSLOG_OUTPUT ((void (*)(const char *format, ...))0xE00C4D54) - - -#endif diff --git a/ios_acp/source/main.c b/ios_acp/source/main.c deleted file mode 100644 index bf081e2..0000000 --- a/ios_acp/source/main.c +++ /dev/null @@ -1,41 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ - #include "types.h" - -int ACP_FSARawRead_hook(int fd, void* data, u64 offset, u32 cnt, u32 blocksize, int device_handle) -{ - int (*ACP_FSARawRead)(int fd, void* data, u64 offset, u32 cnt, u32 blocksize, int device_handle) = (void*)0xE00BAF74; - - int res = ACP_FSARawRead(fd, data, offset, cnt, blocksize, device_handle); - - //! the PPC side has a way to check for a PC or WFS formatted drive by checking the MBR signature - //! it's the only place where this is used so we can just fake it with wrong values. - u8 *buf = (u8*)data; - if((offset == 0) && (buf[510] == 0x55) && (buf[511] == 0xAA)) - { - buf[510] = 0xB3; - buf[511] = 0xDE; - } - return res; -} diff --git a/ios_acp/source/types.h b/ios_acp/source/types.h deleted file mode 100644 index 832bc29..0000000 --- a/ios_acp/source/types.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef TYPES_H -#define TYPES_H - - #include - #include - - #define U64_MAX UINT64_MAX - - typedef uint8_t u8; - typedef uint16_t u16; - typedef uint32_t u32; - typedef uint64_t u64; - - typedef int8_t s8; - typedef int16_t s16; - typedef int32_t s32; - typedef int64_t s64; - - typedef volatile u8 vu8; - typedef volatile u16 vu16; - typedef volatile u32 vu32; - typedef volatile u64 vu64; - - typedef volatile s8 vs8; - typedef volatile s16 vs16; - typedef volatile s32 vs32; - typedef volatile s64 vs64; - -#endif diff --git a/ios_bsp/Makefile b/ios_bsp/Makefile deleted file mode 100644 index eaa8bc0..0000000 --- a/ios_bsp/Makefile +++ /dev/null @@ -1,80 +0,0 @@ -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif - -ifeq ($(filter $(DEVKITARM)/bin,$(PATH)),) -export PATH:=$(DEVKITARM)/bin:$(PATH) -endif - -CC = arm-none-eabi-gcc -LINK = arm-none-eabi-gcc -AS = arm-none-eabi-as -OBJCOPY = arm-none-eabi-objcopy -OBJDUMP = arm-none-eabi-objdump -CFLAGS += -Wall -mbig-endian -std=gnu11 -mcpu=arm926ej-s -msoft-float -mfloat-abi=soft -Os -LDFLAGS += -nostartfiles -nodefaultlibs -mbig-endian -Wl,-T,link.ld -LIBDIRS += -L$(CURDIR)/../libs -LIBS += -lgcc - -CFILES = $(wildcard source/*.c) -BINFILES = $(wildcard data/*.bin) -OFILES = $(BINFILES:data/%.bin=build/%.bin.o) -OFILES += $(CFILES:source/%.c=build/%.o) -DFILES = $(CFILES:source/%.c=build/%.d) -SFILES = $(wildcard source/*.s) -OFILES += $(SFILES:source/%.s=build/%.o) -PROJECTNAME = ${shell basename "$(CURDIR)"} -CWD = "$(CURDIR)"" - -#--------------------------------------------------------------------------------- -# canned command sequence for binary data, taken from devkitARM -#--------------------------------------------------------------------------------- -define bin2o - bin2s $< | $(AS) -EB -o $(@) -endef - -.PHONY:=all dirs - -all: dirs $(PROJECTNAME).bin $(PROJECTNAME)_syms.h $(PROJECTNAME).bin $(PROJECTNAME).bin.h - -dirs: - @mkdir -p build - -$(PROJECTNAME).elf: $(OFILES) - @echo "LD $@" - @$(LINK) $(LDFLAGS) -o $(PROJECTNAME).elf $(sort $(filter-out build/crt0.o, $(OFILES))) $(LIBDIRS) $(LIBS) - -$(PROJECTNAME).bin: $(PROJECTNAME).elf - @echo "OBJCOPY $@\n" - @$(OBJCOPY) -j .text -j .rodata -j .data -O binary $(PROJECTNAME).elf $@ - -$(PROJECTNAME).bin.h: $(PROJECTNAME).bin - @xxd -i $< | sed "s/unsigned/static const unsigned/g;s/$(PROJECTNAME)$*/$(PROJECTNAME)/g" > $@ - -$(PROJECTNAME)_syms.h: - @echo "#ifndef $(PROJECTNAME)_SYMS_H" > $@ - @echo "#define $(PROJECTNAME)_SYMS_H" >> $@ - @$(OBJDUMP) -EB -t -marm $(PROJECTNAME).elf | grep 'g F .text' | grep -v '.hidden' | awk '{print "#define " $$6 " 0x" $$1}' >> $@ - @$(OBJDUMP) -EB -t -marm $(PROJECTNAME).elf | grep -e 'g .text' -e '_bss_' -e "_seeprom_buffer_start" | awk '{print "#define " $$5 " 0x" $$1}' >> $@ - @echo "#endif" >> $@ - -clean: - @rm -f build/*.o build/*.d - @rm -f $(PROJECTNAME).elf $(PROJECTNAME).bin $(PROJECTNAME)_syms.h $(PROJECTNAME).bin $(PROJECTNAME).bin.h - @echo "all cleaned up !" - --include $(DFILES) - -build/%.o: source/%.c - @echo "CC $(notdir $<)" - @$(CC) $(CFLAGS) -c $< -o $@ - @$(CC) -MM $< > build/$*.d - -build/%.o: source/%.s - @echo "CC $(notdir $<)" - @$(CC) $(CFLAGS) -xassembler-with-cpp -c $< -o $@ - @$(CC) -MM $< > build/$*.d - -build/%.bin.o: data/%.bin - @echo "BIN $(notdir $<)" - @$(bin2o) diff --git a/ios_bsp/link.ld b/ios_bsp/link.ld deleted file mode 100644 index 161d815..0000000 --- a/ios_bsp/link.ld +++ /dev/null @@ -1,27 +0,0 @@ -OUTPUT_ARCH(arm) - -SECTIONS -{ - .text 0xE6010A80 : { - _text_start = .; - *(.text*); - *(.rodata*); - } - _text_end = .; - - .bss 0xE60481F0 : { - _bss_start = .; - *(.bss*); - *(COMMON); - } - .seeprom_buffer : { - _seeprom_buffer_start = .; - *(.seeprom_buffer*); - } - _bss_end = .; - - /DISCARD/ : { - *(*); - } -} - diff --git a/ios_bsp/source/fsa.c b/ios_bsp/source/fsa.c deleted file mode 100644 index b092ba0..0000000 --- a/ios_bsp/source/fsa.c +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include -#include "svc.h" -#include "fsa.h" - -#define BSP_memcpy ((void *(*)(void*, void*, unsigned int))0xE600EA18) -#define BSP_memset ((void *(*)(void*, int, unsigned int))0xE600EAB4) -#define BSP_strncpy ((char *(*)(char*, const char*, unsigned int))0xE600F4AC) - -static void* allocIobuf() -{ - void* ptr = svcAlloc(0xCAFF, 0x828); - BSP_memset(ptr, 0x00, 0x828); - - return ptr; -} - -static void freeIobuf(void* ptr) -{ - svcFree(0xCAFF, ptr); -} - -int FSA_RawOpen(int fd, const char* device_path, int* outHandle) -{ - u8* iobuf = allocIobuf(); - u32* inbuf = (u32*)iobuf; - u32* outbuf = (u32*)&iobuf[0x520]; - - BSP_strncpy((char*)&inbuf[0x01], device_path, 0x27F); - - int ret = svcIoctl(fd, 0x6A, inbuf, 0x520, outbuf, 0x293); - - if(outHandle) *outHandle = outbuf[1]; - - freeIobuf(iobuf); - return ret; -} - -int FSA_RawClose(int fd, int device_handle) -{ - u8* iobuf = allocIobuf(); - u32* inbuf = (u32*)iobuf; - u32* outbuf = (u32*)&iobuf[0x520]; - - inbuf[1] = device_handle; - - int ret = svcIoctl(fd, 0x6D, inbuf, 0x520, outbuf, 0x293); - - freeIobuf(iobuf); - return ret; -} - -int FSA_RawWrite(int fd, void* data, u32 size_bytes, u32 cnt, u64 blocks_offset, int device_handle) -{ - u8* iobuf = allocIobuf(); - u8* inbuf8 = iobuf; - u8* outbuf8 = &iobuf[0x520]; - iovec_s* iovec = (iovec_s*)&iobuf[0x7C0]; - u32* inbuf = (u32*)inbuf8; - u32* outbuf = (u32*)outbuf8; - - inbuf[0x08 / 4] = (blocks_offset >> 32); - inbuf[0x0C / 4] = (blocks_offset & 0xFFFFFFFF); - inbuf[0x10 / 4] = cnt; - inbuf[0x14 / 4] = size_bytes; - inbuf[0x18 / 4] = device_handle; - - iovec[0].ptr = inbuf; - iovec[0].len = 0x520; - - iovec[1].ptr = data; - iovec[1].len = size_bytes * cnt; - - iovec[2].ptr = outbuf; - iovec[2].len = 0x293; - - int ret = svcIoctlv(fd, 0x6C, 2, 1, iovec); - - freeIobuf(iobuf); - return ret; -} diff --git a/ios_bsp/source/fsa.h b/ios_bsp/source/fsa.h deleted file mode 100644 index 4faf6b7..0000000 --- a/ios_bsp/source/fsa.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef FSA_H -#define FSA_H - -#include "types.h" - -int FSA_RawOpen(int fd, const char* device_path, int* outHandle); -int FSA_RawWrite(int fd, void* data, u32 size_bytes, u32 cnt, u64 sector_offset, int device_handle); -int FSA_RawClose(int fd, int device_handle); - -#endif diff --git a/ios_bsp/source/seeprom.c b/ios_bsp/source/seeprom.c deleted file mode 100644 index 57a6433..0000000 --- a/ios_bsp/source/seeprom.c +++ /dev/null @@ -1,156 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#include "svc.h" -#include "fsa.h" - -#define SD_SEEPROM_SECTOR 0x4FF - -#define BSP_MEMCPY ((void * (*)(void *, void *, unsigned int size))0xE600EA18) - -static int writeEnabled = 0; -static int dirty = 0; - -unsigned char seeprom_buffer[512] __attribute__((section(".seeprom_buffer"))); - -extern int orig_EEPROM_SPI_ReadWord(int handle_index, unsigned char index, unsigned short *outbuf); - -static int SD_EEPROM_WriteAll(void) -{ - int fsa = svcOpen("/dev/fsa", 0); - if(fsa < 0) - return fsa; - - int fd; - int res = FSA_RawOpen(fsa, "/dev/sdcard01", &fd); - if(res >= 0) - { - void *buffer = svcAllocAlign(0xCAFF, 0x200, 0x40); - if(buffer) - { - // user global buffer for FSA to be able to access it - BSP_MEMCPY(buffer, seeprom_buffer, 0x200); - res = FSA_RawWrite(fsa, buffer, 0x200, 1, SD_SEEPROM_SECTOR, fd); - svcFree(0xCAFF, buffer); - } - else - res = -1; - - FSA_RawClose(fsa, fd); - } - svcClose(fsa); - return res; -} - -static void EEPROM_InitializeCache(int handle_index) -{ - int i; - for(i = 0; i < 0x100; i++) - { - orig_EEPROM_SPI_ReadWord(handle_index, i, (unsigned short*)(seeprom_buffer + (i << 1))); - } -} - -int EEPROM_SPI_ReadWord(int handle_index, unsigned char index, unsigned short *outbuf) -{ - unsigned int offset = ((unsigned int)index) << 1; - - // check for valid eeprom dump and initialize if none was on sd card - if(*(u32*)(seeprom_buffer + 0x20) != 0x70010201) // PPC PVR - { - EEPROM_InitializeCache(handle_index); // could actually just use 0 for handle index - dirty = 1; - } - - // don't redirect the drive key as it is specific for the drive on the wii u - // the seeprom key is the same for all wiiu's it seems so nothing to re-encrypt here - if(offset >= 0x80 && offset < 0x90) - { - return orig_EEPROM_SPI_ReadWord(handle_index, index, outbuf); - } - - if(!outbuf || (offset >= 512)) - { - return -5; - } - - *outbuf = *(unsigned short*)(seeprom_buffer + offset); - - if(dirty && SD_EEPROM_WriteAll() == 0) - { - dirty = 0; - } - return 0; -} - -int EEPROM_SPI_WriteWord(int handle_index, unsigned char index, unsigned short data) -{ - if(writeEnabled == 0) - { - return -5; - } - - // check for valid eeprom dump and initialize if none was on sd card - if(*(u32*)(seeprom_buffer + 0x20) != 0x70010201) // PPC PVR - { - EEPROM_InitializeCache(handle_index); // could actually just use 0 for handle index - } - - unsigned int offset = ((unsigned int)index) << 1; - - if(offset >= 512) - { - return -5; - } - - *(unsigned short*)(seeprom_buffer + offset) = data; - dirty = 1; - - if(SD_EEPROM_WriteAll() == 0) - { - dirty = 0; - } - - return 0; -} - -int EEPROM_WriteControl(int handle_index, int type) -{ - if(type == 1) - { - writeEnabled = 0; - } - else if(type == 2) - { - writeEnabled = 1; - } - else if(type == 3) - { - // erase all -> skip that part...its actually never used but would be only a memset with 0xFF - } - else - { - return -4; - } - return 0; -} diff --git a/ios_bsp/source/seeprom_asm.s b/ios_bsp/source/seeprom_asm.s deleted file mode 100644 index 311a34b..0000000 --- a/ios_bsp/source/seeprom_asm.s +++ /dev/null @@ -1,9 +0,0 @@ -.section ".text" -.arm - -.globl orig_EEPROM_SPI_ReadWord -orig_EEPROM_SPI_ReadWord: - cmp r0, #0 - ldr r3, [pc] - bx r3 - .word 0xE600D090 diff --git a/ios_bsp/source/svc.h b/ios_bsp/source/svc.h deleted file mode 100644 index 98b5cc8..0000000 --- a/ios_bsp/source/svc.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef SVC_H -#define SVC_H - -#include "types.h" - -typedef struct -{ - void* ptr; - u32 len; - u32 unk; -}iovec_s; - -void* svcAlloc(u32 heapid, u32 size); -void* svcAllocAlign(u32 heapid, u32 size, u32 align); -void svcFree(u32 heapid, void* ptr); -int svcOpen(char* name, int mode); -int svcClose(int fd); -int svcIoctl(int fd, u32 request, void* input_buffer, u32 input_buffer_len, void* output_buffer, u32 output_buffer_len); -int svcIoctlv(int fd, u32 request, u32 vector_count_in, u32 vector_count_out, iovec_s* vector); - -#endif diff --git a/ios_bsp/source/svc.s b/ios_bsp/source/svc.s deleted file mode 100644 index f391001..0000000 --- a/ios_bsp/source/svc.s +++ /dev/null @@ -1,45 +0,0 @@ -.section ".text" -.arm -.align 4 - -.global svcAlloc -.type svcAlloc, %function -svcAlloc: - .word 0xE7F027F0 - bx lr - -.global svcAllocAlign -.type svcAllocAlign, %function -svcAllocAlign: - .word 0xE7F028F0 - bx lr - -.global svcFree -.type svcFree, %function -svcFree: - .word 0xE7F029F0 - bx lr - -.global svcOpen -.type svcOpen, %function -svcOpen: - .word 0xE7F033F0 - bx lr - -.global svcClose -.type svcClose, %function -svcClose: - .word 0xE7F034F0 - bx lr - -.global svcIoctl -.type svcIoctl, %function -svcIoctl: - .word 0xE7F038F0 - bx lr - -.global svcIoctlv -.type svcIoctlv, %function -svcIoctlv: - .word 0xE7F039F0 - bx lr diff --git a/ios_bsp/source/types.h b/ios_bsp/source/types.h deleted file mode 100644 index 832bc29..0000000 --- a/ios_bsp/source/types.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef TYPES_H -#define TYPES_H - - #include - #include - - #define U64_MAX UINT64_MAX - - typedef uint8_t u8; - typedef uint16_t u16; - typedef uint32_t u32; - typedef uint64_t u64; - - typedef int8_t s8; - typedef int16_t s16; - typedef int32_t s32; - typedef int64_t s64; - - typedef volatile u8 vu8; - typedef volatile u16 vu16; - typedef volatile u32 vu32; - typedef volatile u64 vu64; - - typedef volatile s8 vs8; - typedef volatile s16 vs16; - typedef volatile s32 vs32; - typedef volatile s64 vs64; - -#endif diff --git a/ios_fs/Makefile b/ios_fs/Makefile deleted file mode 100644 index 083d180..0000000 --- a/ios_fs/Makefile +++ /dev/null @@ -1,80 +0,0 @@ -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif - -ifeq ($(filter $(DEVKITARM)/bin,$(PATH)),) -export PATH:=$(DEVKITARM)/bin:$(PATH) -endif - -CC = arm-none-eabi-gcc -LINK = arm-none-eabi-gcc -AS = arm-none-eabi-as -OBJCOPY = arm-none-eabi-objcopy -OBJDUMP = arm-none-eabi-objdump -CFLAGS += -Wall -mbig-endian -std=gnu11 -mcpu=arm926ej-s -msoft-float -mfloat-abi=soft -Os -LDFLAGS += -nostartfiles -nodefaultlibs -mbig-endian -Wl,-T,link.ld -LIBDIRS += -L$(CURDIR)/../libs -LIBS += -lgcc - -CFILES = $(wildcard source/*.c) -BINFILES = $(wildcard data/*.bin) -OFILES = $(BINFILES:data/%.bin=build/%.bin.o) -OFILES += $(CFILES:source/%.c=build/%.o) -DFILES = $(CFILES:source/%.c=build/%.d) -SFILES = $(wildcard source/*.s) -OFILES += $(SFILES:source/%.s=build/%.o) -PROJECTNAME = ${shell basename "$(CURDIR)"} -CWD = "$(CURDIR)"" - -#--------------------------------------------------------------------------------- -# canned command sequence for binary data, taken from devkitARM -#--------------------------------------------------------------------------------- -define bin2o - bin2s $< | $(AS) -EB -o $(@) -endef - -.PHONY:=all dirs - -all: dirs $(PROJECTNAME).bin $(PROJECTNAME)_syms.h $(PROJECTNAME).bin $(PROJECTNAME).bin.h - -dirs: - @mkdir -p build - -$(PROJECTNAME).elf: $(OFILES) - @echo "LD $@" - @$(LINK) $(LDFLAGS) -o $(PROJECTNAME).elf $(sort $(filter-out build/crt0.o, $(OFILES))) $(LIBDIRS) $(LIBS) - -$(PROJECTNAME).bin: $(PROJECTNAME).elf - @echo "OBJCOPY $@\n" - @$(OBJCOPY) -j .text -j .rodata -j .data -O binary $(PROJECTNAME).elf $@ - -$(PROJECTNAME).bin.h: $(PROJECTNAME).bin - @xxd -i $< | sed "s/unsigned/static const unsigned/g;s/$(PROJECTNAME)$*/$(PROJECTNAME)/g" > $@ - -$(PROJECTNAME)_syms.h: - @echo "#ifndef $(PROJECTNAME)_SYMS_H" > $@ - @echo "#define $(PROJECTNAME)_SYMS_H" >> $@ - @$(OBJDUMP) -EB -t -marm $(PROJECTNAME).elf | grep 'g F .text' | grep -v '.hidden' | awk '{print "#define " $$6 " 0x" $$1}' >> $@ - @$(OBJDUMP) -EB -t -marm $(PROJECTNAME).elf | grep -e 'g .text' -e '_bss_' | awk '{print "#define " $$5 " 0x" $$1}' >> $@ - @echo "#endif" >> $@ - -clean: - @rm -f build/*.o build/*.d - @rm -f $(PROJECTNAME).elf $(PROJECTNAME).bin $(PROJECTNAME)_syms.h $(PROJECTNAME).bin $(PROJECTNAME).bin.h - @echo "all cleaned up !" - --include $(DFILES) - -build/%.o: source/%.c - @echo "CC $(notdir $<)" - @$(CC) $(CFLAGS) -c $< -o $@ - @$(CC) -MM $< > build/$*.d - -build/%.o: source/%.s - @echo "CC $(notdir $<)" - @$(CC) $(CFLAGS) -xassembler-with-cpp -c $< -o $@ - @$(CC) -MM $< > build/$*.d - -build/%.bin.o: data/%.bin - @echo "BIN $(notdir $<)" - @$(bin2o) diff --git a/ios_fs/link.ld b/ios_fs/link.ld deleted file mode 100644 index 6028580..0000000 --- a/ios_fs/link.ld +++ /dev/null @@ -1,26 +0,0 @@ -OUTPUT_ARCH(arm) - -SECTIONS -{ - .text (0x10700000 + 0x000F8200) : { - _text_start = .; - *(.text*); - *(.rodata*); - } - _text_end = .; - - .bss (0x10835000 + 0x1406554) : { - _bss_start = .; - *(.bss*); - *(COMMON); - } - .io_buffer : ALIGN(0x40) { - *(.io_buffer*); - } - _bss_end = .; - - /DISCARD/ : { - *(*); - } -} - diff --git a/ios_fs/source/devices.c b/ios_fs/source/devices.c deleted file mode 100644 index 993279d..0000000 --- a/ios_fs/source/devices.c +++ /dev/null @@ -1,150 +0,0 @@ -#include -#include "types.h" -#include "devices.h" -#include "imports.h" -#include "sdio.h" -#include "text.h" - -void * getMdDeviceById(int deviceId) -{ - if(deviceId == DEVICE_ID_SDCARD_PATCHED) - { - return (void*)FS_MMC_SDCARD_STRUCT; - } - else if(deviceId == DEVICE_ID_MLC) - { - return (void*)FS_MMC_MLC_STRUCT; - } - return NULL; -} - -int registerMdDevice_hook(void * md, int arg2, int arg3) -{ - u32 *mdStruct = (u32*)md; - - if((md != 0) && (mdStruct[2] == (u32)FS_MMC_SDCARD_STRUCT)) - { - sdcard_lock_mutex(); - FS_MMC_SDCARD_STRUCT[0x24/4] = FS_MMC_SDCARD_STRUCT[0x24/4] & (~0x20); - - int result = FS_REGISTERMDPHYSICALDEVICE(md, arg2, arg3); - - sdcard_unlock_mutex(); - - return result; - } - - return FS_REGISTERMDPHYSICALDEVICE(md, arg2, arg3); -} - -int getPhysicalDeviceHandle(u32 device) -{ - u32 handleSize = 0x204; - u8 *handleBase = (u8*)(0x1091C2EC + device * handleSize); - u16 adrLow = (*(u16*)&handleBase[6]); - return ((device << 16) | adrLow); -} - -//! read1(void *physical_device_info, int offset_high, int offset_low, int cnt, int block_size, void *data_outptr, void *callback, int callback_parameter) -int readWriteCallback_patch(int is_read, int offset_offset, int offset_low, int cnt, int block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter) -{ - int result_arg = 0; - int result = sdcard_readwrite(is_read, data_outptr, cnt, block_size, offset_offset + offset_low, &result_arg, DEVICE_ID_SDCARD_PATCHED); - - if((result == 0) && (callback != 0)) - { - callback(result_arg, callback_parameter); - } - return result; -} - -//!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! USB redirection -//!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -static int usbReadWrite_patch(int is_read, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter) -{ - return readWriteCallback_patch(is_read, USB_BASE_SECTORS, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - -int usbRead_patch(void *physical_device_info, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter) -{ - return usbReadWrite_patch(SDIO_READ, offset_high, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - -int usbWrite_patch(void *physical_device_info, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter) -{ - return usbReadWrite_patch(SDIO_WRITE, offset_high, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - -//!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! SDIO redirection -//!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -static int sdcardReadWrite_patch(void *physical_device_info, int is_read, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter) -{ - u32 offset_offset; - u32 *phys_dev = (u32*)physical_device_info; - - if(phys_dev[0x14/4] != DEVICE_TYPE_SDCARD) - { - offset_offset = MLC_BASE_SECTORS; - } - else - { - offset_offset = 0; - } - - return readWriteCallback_patch(is_read, offset_offset, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - -int sdcardRead_patch(void *physical_device_info, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter) -{ - return sdcardReadWrite_patch(physical_device_info, SDIO_READ, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - -int sdcardWrite_patch(void *physical_device_info, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter) -{ - return sdcardReadWrite_patch(physical_device_info, SDIO_WRITE, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - -//!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! SLC redirection -//!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -static int slcReadWrite_patch(void *physical_device_info, int is_read, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter) -{ - u32 offset_offset; - u32 *phys_dev = (u32*)physical_device_info; - - if(phys_dev[1] != 0) - { - // physical_device_info = 0x11C381CC - offset_offset = (u32)(((u64)SLC_BASE_SECTORS * (u64)SDIO_BYTES_PER_SECTOR) / SLC_BYTES_PER_SECTOR); - } - else - { - // physical_device_info = 0x11C37668 - offset_offset = (u32)(((u64)SLCCMPT_BASE_SECTORS * (u64)SDIO_BYTES_PER_SECTOR) / SLC_BYTES_PER_SECTOR); - } - - return readWriteCallback_patch(is_read, offset_offset, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - -int slcRead1_patch(void *physical_device_info, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter) -{ - return slcReadWrite_patch(physical_device_info, SDIO_READ, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - -int slcWrite1_patch(void *physical_device_info, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter) -{ - return slcReadWrite_patch(physical_device_info, SDIO_WRITE, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - -int slcRead2_patch(void *physical_device_info, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, int ukn1, void *data_outptr, int ukn2, read_write_callback_t callback, int callback_parameter) -{ - return slcReadWrite_patch(physical_device_info, SDIO_READ, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - -int slcWrite2_patch(void *physical_device_info, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, int ukn1, void *data_outptr, int ukn2, read_write_callback_t callback, int callback_parameter) -{ - return slcReadWrite_patch(physical_device_info, SDIO_WRITE, offset_low, cnt, block_size, data_outptr, callback, callback_parameter); -} - diff --git a/ios_fs/source/devices.h b/ios_fs/source/devices.h deleted file mode 100644 index f3d2061..0000000 --- a/ios_fs/source/devices.h +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef DEVICES_H_ -#define DEVICES_H_ - -#define DEVICE_ID_SDCARD_REAL 0x43 -#define DEVICE_ID_SDCARD_PATCHED 0xDA - -#define DEVICE_ID_MLC 0xAB - -#define SDIO_BYTES_PER_SECTOR 512 -#define MLC_BYTES_PER_SECTOR 512 -#define SLC_BYTES_PER_SECTOR 2048 - -#define SLC_BASE_SECTORS (0x000500) -#define SLCCMPT_BASE_SECTORS (0x100500) -#define MLC_BASE_SECTORS (0x200500) - -#define USB_BASE_SECTORS (0x2720000) -#define SYSLOG_BASE_SECTORS (0x6D00000) -#define DUMPDATA_BASE_SECTORS (SYSLOG_BASE_SECTORS + (0x40000 / SDIO_BYTES_PER_SECTOR)) - -#define SLC_SECTOR_COUNT 0x40000 -#define MLC_8GB_SECTOR_COUNT 0xE90000 -#define MLC_32GB_SECTOR_COUNT 0x3A3E000 //0x3A20000 - -#define MLC_NAND_TYPE_32GB 0 -#define MLC_NAND_TYPE_8GB 1 - -#define NAND_DUMP_SIGNATURE_SECTOR 0x01 -#define NAND_DUMP_SIGNATURE 0x4841585844554d50ULL // HAXXDUMP - -#define NAND_DESC_TYPE_SLC 0x534c4320 // 'SLC ' -#define NAND_DESC_TYPE_SLCCMPT 0x534c4332 // 'SLC2' -#define NAND_DESC_TYPE_MLC 0x4d4c4320 // 'MLC ' - -enum NodeTypes -{ - NODE_TYPE_DEV_DF = 0, - NODE_TYPE_DEV_ATFS = 1, - NODE_TYPE_DEV_ISFS = 2, - NODE_TYPE_DEV_WFS = 3, - NODE_TYPE_DEV_PCFS = 4, - NODE_TYPE_DEV_RBFS = 5, - NODE_TYPE_DEV_FAT = 6, - NODE_TYPE_DEV_FLA = 7, - NODE_TYPE_DEV_UMS = 8, - NODE_TYPE_DEV_AHCIMGR = 9, - NODE_TYPE_DEV_SHDD = 10, - NODE_TYPE_DEV_MD = 11, - NODE_TYPE_DEV_SCFM = 12, - NODE_TYPE_DEV_MMC = 13, - NODE_TYPE_DEV_TIMETRACE = 14, - NODE_TYPE_DEV_TCP_PCFS = 15 -}; - -enum DeviceTypes -{ - DEVICE_TYPE_SI = 0x01, - DEVICE_TYPE_ODD = 0x02, - DEVICE_TYPE_SLCCMPT = 0x03, - DEVICE_TYPE_SLC = 0x04, - DEVICE_TYPE_MLC = 0x05, - DEVICE_TYPE_SDCARD = 0x06, - DEVICE_TYPE_SD = 0x07, - DEVICE_TYPE_HFIO = 0x08, - DEVICE_TYPE_RAMDISK = 0x09, - DEVICE_TYPE_USB = 0x11, - DEVICE_TYPE_MLCORIG = 0x12 -}; - -enum FsTypes -{ - FS_TYPE_RAW = 0x8003, - FS_TYPE_FAT = 0x8004, - FS_TYPE_WFS = 0x8005, - FS_TYPE_ISFS = 0x8006, - FS_TYPE_ATFS = 0x8007 -}; - -typedef struct _fs_attach_info_t -{ - struct _fs_attach_info_t* next; - u16 fs_type; - u16 unkn_flags2; - u32 zeros[2]; - int (*fsAttach)(void *dev_struct, int unkn_one); - u8 allowed_devices[0x0C]; -} fs_attach_info_t; - -typedef struct _stdio_nand_desc_t -{ - u32 nand_type; // nand type - u32 base_sector; // base sector of dump - u32 sector_count; // sector count in SDIO sectors -} __attribute__((packed))stdio_nand_desc_t; - -typedef struct _sdio_nand_signature_sector_t -{ - u64 signature; // HAXXDUMP - stdio_nand_desc_t nand_descriptions[3]; -} __attribute__((packed)) sdio_nand_signature_sector_t; - - -typedef void (*read_write_callback_t)(int, int); - -int getPhysicalDeviceHandle(u32 device); - -int slcRead1_original(void *physical_device_info, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter); -int sdcardRead_original(void *physical_device_info, u32 offset_high, u32 offset_low, u32 cnt, u32 block_size, void *data_outptr, read_write_callback_t callback, int callback_parameter); - -#endif // DEVICES_H_ diff --git a/ios_fs/source/dumper.c b/ios_fs/source/dumper.c deleted file mode 100644 index 9174cbb..0000000 --- a/ios_fs/source/dumper.c +++ /dev/null @@ -1,322 +0,0 @@ -#include -#include "types.h" -#include "imports.h" -#include "devices.h" -#include "sdio.h" -#include "mlcio.h" -#include "fat32_format.h" -#include "text.h" -#include "hardware_registers.h" -#include "svc.h" -#include "../../common/kernel_commands.h" - -// the IO buffer is put behind everything else because there is no access to this region from IOS-FS it seems -unsigned char io_buffer[0x40000] __attribute__((aligned(0x40))) __attribute__((section(".io_buffer"))); - -//! this one is required for the read function -static void slc_read_callback(int result, int priv) -{ - int *private_data = (int*)priv; - private_data[1] = result; - FS_SVC_RELEASEMUTEX(private_data[0]); -} - -static int srcRead(void* deviceHandle, void *data_ptr, u32 offset, u32 sectors, int * result_array) -{ - int readResult = slcRead1_original(deviceHandle, 0, offset, sectors, SLC_BYTES_PER_SECTOR, data_ptr, slc_read_callback, (int)result_array); - if(readResult == 0) - { - // wait for process to finish - FS_SVC_ACQUIREMUTEX(result_array[0], 0); - readResult = result_array[1]; - } - return readResult; -} - -void slc_dump(void *deviceHandle, const char* device, u32 base_sectors, int y_offset) -{ - //also create a mutex for synchronization with end of operation... - int sync_mutex = FS_SVC_CREATEMUTEX(1, 1); - FS_SVC_ACQUIREMUTEX(sync_mutex, 0); - - int result_array[2]; - result_array[0] = sync_mutex; - - u32 offset = 0; - int readResult = 0; - int writeResult = 0; - int retry = 0; - u32 readSize = sizeof(io_buffer) / SLC_BYTES_PER_SECTOR; - - FS_SLEEP(1000); - - do - { - // don't print single steps in between, just if they have an error or every 0x80 sectors - if((readSize == (sizeof(io_buffer) / SLC_BYTES_PER_SECTOR)) || (retry > 0)) - { - _printf(20, y_offset, "%s = %08X / 40000, read code %08X, write code %08X, retry %d", device, offset, readResult, writeResult, retry); - } - - //! set flash erased byte to buffer - FS_MEMSET(io_buffer, 0xff, sizeof(io_buffer)); - //readResult = readSlc(io_buffer, offset, (sizeof(io_buffer) / SLC_BYTES_PER_SECTOR), deviceHandle); - readResult = srcRead(deviceHandle, io_buffer, offset, readSize, result_array); - - //! retry 2 times as there are read failures in several places - if((readResult != 0) && (retry < 2)) - { - readSize = 1; - FS_SLEEP(10); - retry++; - } - else - { - retry = 0; - - while(1) - { - FS_SLEEP(10); - - writeResult = sdcard_readwrite(SDIO_WRITE, io_buffer, (readSize * (SLC_BYTES_PER_SECTOR / SDIO_BYTES_PER_SECTOR)), SDIO_BYTES_PER_SECTOR, base_sectors, NULL, DEVICE_ID_SDCARD_PATCHED); - if((writeResult == 0) || (retry >= 2)) - { - retry = 0; - base_sectors += (readSize * (SLC_BYTES_PER_SECTOR / SDIO_BYTES_PER_SECTOR)); - offset += readSize; - - // if we did single sector reads and got to a point where we can do multiple reads -> switch to multiple sector reads - if((offset % (sizeof(io_buffer) / SLC_BYTES_PER_SECTOR)) == 0) - { - readSize = sizeof(io_buffer) / SLC_BYTES_PER_SECTOR; - } - break; - } - else - { - retry++; - } - } - } - } - while (offset < SLC_SECTOR_COUNT); - - FS_SVC_DESTROYMUTEX(sync_mutex); - - // last print to show "done" - _printf(20, y_offset, "%s = %08X / 40000, read code %08X, write code %08X, retry %d", device, offset, readResult, writeResult, retry); -} - -void mlc_dump(u32 base_sector, u32 mlc_end) -{ - u32 offset = 0; - - int retry = 0; - int mlc_result = 0; - int callback_result = 0; - int write_result = 0; - int print_counter = 0; - - do - { - //! print only every 4th time - if(print_counter == 0) - { - print_counter = 4; - _printf(20, 70, "mlc = %08X / %08X, mlc res %08X, sd res %08X, retry %d", offset, mlc_end, mlc_result, write_result, retry); - } - else - { - --print_counter; - } - - //! set flash erased byte to buffer - FS_MEMSET(io_buffer, 0xff, sizeof(io_buffer)); - mlc_result = sdcard_readwrite(SDIO_READ, io_buffer, (sizeof(io_buffer) / MLC_BYTES_PER_SECTOR), MLC_BYTES_PER_SECTOR, offset, &callback_result, DEVICE_ID_MLC); - - if((mlc_result == 0) && (callback_result != 0)) - { - mlc_result = callback_result; - } - - //! retry 5 times as there are read failures in several places - if((mlc_result != 0) && (retry < 5)) - { - FS_SLEEP(100); - retry++; - print_counter = 0; // print errors directly - } - else - { - write_result = sdcard_readwrite(SDIO_WRITE, io_buffer, (sizeof(io_buffer) / MLC_BYTES_PER_SECTOR), SDIO_BYTES_PER_SECTOR, base_sector + offset, NULL, DEVICE_ID_SDCARD_PATCHED); - if((write_result == 0) || (retry >= 5)) - { - retry = 0; - offset += (sizeof(io_buffer) / MLC_BYTES_PER_SECTOR); - } - else - { - FS_SLEEP(100); - retry++; - print_counter = 0; // print errors directly - } - } - } - while(offset < mlc_end); //! TODO: make define MLC32_SECTOR_COUNT - - // last print to show "done" - _printf(20, 70, "mlc = %08X / %08X, mlc res %08X, sd res %08X, retry %d", offset, mlc_end, mlc_result, write_result, retry); -} - -int check_nand_type(void) -{ - //! check if MLC size is > 8GB - if( FS_MMC_MLC_STRUCT[0x30/4] > 0x1000000) - { - return MLC_NAND_TYPE_32GB; - } - else - { - return MLC_NAND_TYPE_8GB; - } -} - -int check_nand_dump(void) -{ - u32 mlc_sector_count = FS_MMC_MLC_STRUCT[0x30/4]; - - int signature_correct = 0; - sdio_nand_signature_sector_t * sign_sect = (sdio_nand_signature_sector_t*)io_buffer; - memset(sign_sect, 0, SDIO_BYTES_PER_SECTOR); - sdcard_readwrite(SDIO_READ, sign_sect, 1, SDIO_BYTES_PER_SECTOR, NAND_DUMP_SIGNATURE_SECTOR, NULL, DEVICE_ID_SDCARD_PATCHED); - - signature_correct = (sign_sect->signature == NAND_DUMP_SIGNATURE); - - memset(io_buffer, 0, SDIO_BYTES_PER_SECTOR); - sdcard_readwrite(SDIO_READ, io_buffer, 1, SDIO_BYTES_PER_SECTOR, 0, NULL, DEVICE_ID_SDCARD_PATCHED); - - return signature_correct && CheckFAT32PartitionOffset(io_buffer, MLC_BASE_SECTORS + mlc_sector_count); -} - -static void wait_format_confirmation(void) -{ - int timeout = 600; - //"Press the POWER button SD then , else the console will reboot in %u seconds." - while(1) - { - _printf(20, 30, "No NAND dump detected. SD Format and complete NAND dump required."); - _printf(20, 40, "Press the POWER button to format SD card otherwise the console will reboot in %d seconds.", timeout/10); - - if(svcCustomKernelCommand(KERNEL_READ32, LT_GPIO_IN) & GPIO_IN_POWER_BUTTON) - { - break; - } - - if(--timeout == 0) - { - FS_SLEEP(1000); - svcShutdown(SHUTDOWN_TYPE_REBOOT); - } - - FS_SLEEP(100); - } - - // clear the lines - clearLine(30, 0x000000FF); - clearLine(40, 0x000000FF); -} - -void dump_nand_complete() -{ - wait_format_confirmation(); - - mlc_init(); - FS_SLEEP(1000); - - int nand_type = check_nand_type(); - u32 sdio_sector_count = FS_MMC_SDCARD_STRUCT[0x30/4]; - u32 mlc_sector_count = FS_MMC_MLC_STRUCT[0x30/4]; - u32 fat32_partition_offset = (MLC_BASE_SECTORS + mlc_sector_count); - - _printf(20, 30, "Detected %d GB MLC NAND type.", (nand_type == MLC_NAND_TYPE_8GB) ? 8 : 32); - - if(sdio_sector_count < fat32_partition_offset) - { - _printf(20, 40, "SD card too small! Required sectors %u > available %u.", fat32_partition_offset, sdio_sector_count); - FS_SLEEP(3000); - svcShutdown(SHUTDOWN_TYPE_REBOOT); - } - - if( FormatSDCard(fat32_partition_offset, sdio_sector_count) < 0 ) - { - FS_SLEEP(3000); - svcShutdown(SHUTDOWN_TYPE_REBOOT); - } - - slc_dump(FS_SLC_PHYS_DEV_STRUCT, "slc ", SLC_BASE_SECTORS, 50); - slc_dump(FS_SLCCMPT_PHYS_DEV_STRUCT, "slccmpt", SLCCMPT_BASE_SECTORS, 60); - mlc_dump(MLC_BASE_SECTORS, mlc_sector_count); - - //! write marker to SD card from which we can auto detect NAND dump - //! we can actually use that for settings - sdio_nand_signature_sector_t * sign_sect = (sdio_nand_signature_sector_t*)io_buffer; - memset(sign_sect, 0, SDIO_BYTES_PER_SECTOR); - sign_sect->signature = NAND_DUMP_SIGNATURE; - sign_sect->nand_descriptions[0].nand_type = NAND_DESC_TYPE_SLC; - sign_sect->nand_descriptions[0].base_sector = SLC_BASE_SECTORS; - sign_sect->nand_descriptions[0].sector_count = SLC_SECTOR_COUNT * (SLC_BYTES_PER_SECTOR / SDIO_BYTES_PER_SECTOR); - sign_sect->nand_descriptions[1].nand_type = NAND_DESC_TYPE_SLCCMPT; - sign_sect->nand_descriptions[1].base_sector = SLCCMPT_BASE_SECTORS; - sign_sect->nand_descriptions[1].sector_count = SLC_SECTOR_COUNT * (SLC_BYTES_PER_SECTOR / SDIO_BYTES_PER_SECTOR); - sign_sect->nand_descriptions[2].nand_type = NAND_DESC_TYPE_MLC; - sign_sect->nand_descriptions[2].base_sector = MLC_BASE_SECTORS; - sign_sect->nand_descriptions[2].sector_count = mlc_sector_count * (MLC_BYTES_PER_SECTOR / SDIO_BYTES_PER_SECTOR); - - sdcard_readwrite(SDIO_WRITE, io_buffer, 1, SDIO_BYTES_PER_SECTOR, NAND_DUMP_SIGNATURE_SECTOR, NULL, DEVICE_ID_SDCARD_PATCHED); - - _printf(20, 80, "Complete! -> rebooting into sysNAND..."); - - FS_SLEEP(3000); - svcShutdown(SHUTDOWN_TYPE_REBOOT); -} - -#if 0 -// debug and not used at the moment -void dump_data(void* data_ptr, u32 size) -{ - static u32 dumpdata_offset = 0; - - u32 num_sectors = size >> 9; // size / SDIO_BYTES_PER_SECTOR but faster ;) - if (num_sectors == 0) - num_sectors = 1; - - sdcard_readwrite(SDIO_WRITE, data_ptr, num_sectors, SDIO_BYTES_PER_SECTOR, DUMPDATA_BASE_SECTORS + dumpdata_offset, NULL, DEVICE_ID_SDCARD_PATCHED); - dumpdata_offset += num_sectors; -} - -void dump_lots_data(u8* addr, u32 size) -{ - u32 cur_size; - u32 size_remaining = size; - u8* cur_addr = addr; - do - { - cur_size = sizeof(io_buffer); - if (cur_size > size_remaining) - cur_size = size_remaining; - - FS_MEMCPY(io_buffer, cur_addr, cur_size); - dump_data(io_buffer, cur_size); - - cur_addr += cur_size; - size_remaining -= cur_size; - } - while (cur_size != 0); -} - -void dump_syslog() -{ - FS_MEMCPY(io_buffer, *(void**)0x05095ECC, sizeof(io_buffer)); - sdcard_readwrite(SDIO_WRITE, io_buffer, sizeof(io_buffer) / SDIO_BYTES_PER_SECTOR, SDIO_BYTES_PER_SECTOR, SYSLOG_BASE_SECTORS, NULL, DEVICE_ID_SDCARD_PATCHED); -} -#endif diff --git a/ios_fs/source/dumper.h b/ios_fs/source/dumper.h deleted file mode 100644 index 6bd80ff..0000000 --- a/ios_fs/source/dumper.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _DUMPER_H_ -#define _DUMPER_H_ - -//! debug dumps -void dump_syslog(); -void dump_data(void* data_ptr, u32 size); -void dump_lots_data(u8* addr, u32 size); - -int check_nand_type(void); -int check_nand_dump(void); -void slc_dump(int deviceId, const char* format, u32 base_sectors); -void mlc_dump(u32 base_sector, u32 mlc_end); -void dump_nand_complete(); - -#endif // _DUMPER_H_ diff --git a/ios_fs/source/fat32_format.c b/ios_fs/source/fat32_format.c deleted file mode 100644 index b78ff31..0000000 --- a/ios_fs/source/fat32_format.c +++ /dev/null @@ -1,326 +0,0 @@ -#include -#include "types.h" -#include "imports.h" -#include "devices.h" -#include "sdio.h" -#include "text.h" - -extern unsigned char io_buffer[0x40000]; - -#define PARTITION_TYPE_FAT32 0x0c -#define MAX_PARTITIONS 32 /* Maximum number of partitions that can be found */ -#define MAX_MOUNTS 10 /* Maximum number of mounts available at one time */ -#define MAX_SYMLINK_DEPTH 10 /* Maximum search depth when resolving symbolic links */ - -#define MBR_SIGNATURE 0x55AA -#define EBR_SIGNATURE MBR_SIGNATURE - -#define PARTITION_BOOTABLE 0x80 /* Bootable (active) */ -#define PARTITION_NONBOOTABLE 0x00 /* Non-bootable */ -#define PARTITION_TYPE_GPT 0xEE /* Indicates that a GPT header is available */ - -typedef struct _PARTITION_RECORD { - u8 status; /* Partition status; see above */ - u8 chs_start[3]; /* Cylinder-head-sector address to first block of partition */ - u8 type; /* Partition type; see above */ - u8 chs_end[3]; /* Cylinder-head-sector address to last block of partition */ - u32 lba_start; /* Local block address to first sector of partition */ - u32 block_count; /* Number of blocks in partition */ -} __attribute__((__packed__)) PARTITION_RECORD; - - -typedef struct _MASTER_BOOT_RECORD { - u8 code_area[446]; /* Code area; normally empty */ - PARTITION_RECORD partitions[4]; /* 4 primary partitions */ - u16 signature; /* MBR signature; 0xAA55 */ -} __attribute__((__packed__)) MASTER_BOOT_RECORD; - -typedef struct tagFAT_BOOTSECTOR32 -{ - // Common fields. - u8 sJmpBoot[3]; - u8 sOEMName[8]; - u16 wBytsPerSec; - u8 bSecPerClus; - u16 wRsvdSecCnt; - u8 bNumFATs; - u16 wRootEntCnt; - u16 wTotSec16; - u8 bMedia; - u16 wFATSz16; - u16 wSecPerTrk; - u16 wNumHeads; - u32 dHiddSec; - u32 dTotSec32; - // Fat 32/16 only - u32 dFATSz32; - u16 wExtFlags; - u16 wFSVer; - u32 dRootClus; - u16 wFSInfo; - u16 wBkBootSec; - u8 Reserved[12]; - u8 bDrvNum; - u8 Reserved1; - u8 bBootSig; // == 0x29 if next three fields are ok - u32 dBS_VolID; - u8 sVolLab[11]; - u8 sBS_FilSysType[8]; - -} __attribute__((__packed__)) FAT_BOOTSECTOR32; - -typedef struct { - u32 dLeadSig; - u8 sReserved1[480]; - u32 dStrucSig; - u32 dFree_Count; - u32 dNxt_Free; - u8 sReserved2[12]; - u32 dTrailSig; -} __attribute__((__packed__)) FAT_FSINFO; - -static inline u8 get_sectors_per_cluster (u64 DiskSizeBytes) -{ - u8 ret = 0x01; // 1 sector per cluster - u32 DiskSizeMB = DiskSizeBytes/(1024*1024); - - // 512 MB to 8,191 MB 4 KB - if (DiskSizeMB > 512) - ret = 0x8; - - // 8,192 MB to 16,383 MB 8 KB - if (DiskSizeMB > 8192) - ret = 0x10; - - // 16,384 MB to 32,767 MB 16 KB - if (DiskSizeMB > 16384) - ret = 0x20; // ret = 0x20; - - // Larger than 32,768 MB 32 KB - if (DiskSizeMB > 32768) - ret = 0x40; // ret = 0x40; - - return ret; -} - -static inline u32 MakeVolumeID() -{ - // we dont have time yet so for now its fixed - //time_t rawtime = time(0); - //struct tm * timeinfo = localtime(&rawtime); - - //u16 hi = le16(timeinfo->tm_mday + (timeinfo->tm_mon << 8) + (timeinfo->tm_sec << 8)); - //u16 lo = le16((timeinfo->tm_hour << 8) + timeinfo->tm_min + timeinfo->tm_year + 1900); - u16 hi = 0x0BAD; - u16 lo = 0xBABE; - - return (lo + (hi << 16)); -} - - -int FormatToFAT32(u32 lba, u32 sec_count) -{ - if(sec_count < 0xFFFF) - { - _printf(20, 40, "Not enough sectors for FAT32"); - return -1; - } - - int BytesPerSect = SDIO_BYTES_PER_SECTOR; - u16 ReservedSectCount = 32; - u8 NumFATs = 2; - - memset(io_buffer, 0, BytesPerSect*18); - - FAT_BOOTSECTOR32 * FAT32BootSect = (FAT_BOOTSECTOR32 *) (io_buffer+16*BytesPerSect); - FAT_FSINFO * FAT32FsInfo = (FAT_FSINFO*) (io_buffer+17*BytesPerSect); - - // fill out the boot sector and fs info - FAT32BootSect->sJmpBoot[0] = 0xEB; - FAT32BootSect->sJmpBoot[1] = 0x5A; - FAT32BootSect->sJmpBoot[2] = 0x90; - memcpy(FAT32BootSect->sOEMName, "MSWIN4.1", 8); - - FAT32BootSect->wBytsPerSec = le16(BytesPerSect); - - u8 SectorsPerCluster = get_sectors_per_cluster((u64) sec_count * (u64) BytesPerSect); - - FAT32BootSect->bSecPerClus = SectorsPerCluster; - FAT32BootSect->wRsvdSecCnt = le16(ReservedSectCount); - FAT32BootSect->bNumFATs = NumFATs; - FAT32BootSect->wRootEntCnt = 0; - FAT32BootSect->wTotSec16 = 0; - FAT32BootSect->bMedia = 0xF8; - FAT32BootSect->wFATSz16 = 0; - FAT32BootSect->wSecPerTrk = le16(63); //SectorsPerTrack; - FAT32BootSect->wNumHeads = le16(255); //TracksPerCylinder; - FAT32BootSect->dHiddSec = le32(lba); //HiddenSectors; - FAT32BootSect->dTotSec32 = le32(sec_count); - - // This is based on - // http://hjem.get2net.dk/rune_moeller_barnkob/filesystems/fat.html - u32 FatSize = (4*(sec_count-ReservedSectCount)/((SectorsPerCluster*BytesPerSect)+(4*NumFATs)))+1; - - FAT32BootSect->dFATSz32 = le32(FatSize); - FAT32BootSect->wExtFlags = 0; - FAT32BootSect->wFSVer = 0; - FAT32BootSect->dRootClus = le32(2); - FAT32BootSect->wFSInfo = le16(1); - FAT32BootSect->wBkBootSec = le16(6); //BackupBootSect - FAT32BootSect->bDrvNum = 0x80; - FAT32BootSect->Reserved1 = 0; - FAT32BootSect->bBootSig = 0x29; - - FAT32BootSect->dBS_VolID = MakeVolumeID(); - memcpy(FAT32BootSect->sVolLab, "NO NAME ", 11); - memcpy(FAT32BootSect->sBS_FilSysType, "FAT32 ", 8); - ((u8 *)FAT32BootSect)[510] = 0x55; //Boot Record Signature - ((u8 *)FAT32BootSect)[511] = 0xAA; //Boot Record Signature - - // FSInfo sect signatures - FAT32FsInfo->dLeadSig = le32(0x41615252); - FAT32FsInfo->dStrucSig = le32(0x61417272); - FAT32FsInfo->dTrailSig = le32(0xaa550000); - ((u8 *)FAT32FsInfo)[510] = 0x55; //Boot Record Signature - ((u8 *)FAT32FsInfo)[511] = 0xAA; //Boot Record Signature - - // First FAT Sector - u32 FirstSectOfFat[3]; - FirstSectOfFat[0] = le32(0x0ffffff8); // Reserved cluster 1 media id in low byte - FirstSectOfFat[1] = le32(0x0fffffff); // Reserved cluster 2 EOC - FirstSectOfFat[2] = le32(0x0fffffff); // end of cluster chain for root dir - - u32 UserAreaSize = sec_count - ReservedSectCount - (NumFATs*FatSize); - u32 ClusterCount = UserAreaSize/SectorsPerCluster; - - if (ClusterCount > 0x0FFFFFFF) - { - _printf(20, 40, "This drive has more than 2^28 clusters. Partition might be too small."); - return -1; - } - - if (ClusterCount < 65536) - { - _printf(20, 40, "FAT32 must have at least 65536 clusters"); - return -1; - } - - u32 FatNeeded = (ClusterCount * 4 + (BytesPerSect-1))/BytesPerSect; - if (FatNeeded > FatSize) - { - _printf(20, 40, "This drive is too big, %u > %u", FatNeeded, FatSize); - return -1; - } - - // fix up the FSInfo sector - FAT32FsInfo->dFree_Count = le32((UserAreaSize/SectorsPerCluster)-1); - FAT32FsInfo->dNxt_Free = le32(3); // clusters 0-1 resered, we used cluster 2 for the root dir - - /** Now all is done and we start writting **/ - - // First zero out ReservedSect + FatSize * NumFats + SectorsPerCluster - u32 SystemAreaSize = (ReservedSectCount+(NumFATs*FatSize) + SectorsPerCluster); - u32 done = 0; - // Read the first sector on the device - while(SystemAreaSize > 0) - { - int write = SystemAreaSize < 16 ? SystemAreaSize : 16; - - int result = sdcard_readwrite(SDIO_WRITE, io_buffer, write, SDIO_BYTES_PER_SECTOR, lba+done, NULL, DEVICE_ID_SDCARD_PATCHED); - if(result != 0) - { - _printf(20, 40, "Cannot write to the drive."); - return -1; - } - SystemAreaSize -= write; - done += write; - } - - for (int i = 0; i < 2; i++) - { - u32 SectorStart = (i == 0) ? lba : lba+6; //BackupBootSect - - int result = sdcard_readwrite(SDIO_WRITE, FAT32BootSect, 1, SDIO_BYTES_PER_SECTOR, SectorStart, NULL, DEVICE_ID_SDCARD_PATCHED); - if(result != 0) - { - _printf(20, 40, "Cannot write to the drive."); - return -1; - } - result = sdcard_readwrite(SDIO_WRITE, FAT32FsInfo, 1, SDIO_BYTES_PER_SECTOR, SectorStart+1, NULL, DEVICE_ID_SDCARD_PATCHED); - if(result != 0) - { - _printf(20, 40, "Cannot write to the drive."); - return -1; - } - } - - memcpy(io_buffer, FirstSectOfFat, sizeof(FirstSectOfFat)); - - // Write the first fat sector in the right places - for (int i = 0; i < NumFATs; i++) - { - u32 SectorStart = lba + ReservedSectCount + (i * FatSize); - - int result = sdcard_readwrite(SDIO_WRITE, io_buffer, 1, SDIO_BYTES_PER_SECTOR, SectorStart, NULL, DEVICE_ID_SDCARD_PATCHED); - if(result != 0) - { - _printf(20, 40, "Cannot write to the drive."); - return -1; - } - } - - return 0; -} - - -int CheckFAT32PartitionOffset(u8 * mbr_buf, u32 partition_offset) -{ - MASTER_BOOT_RECORD *mbr = (MASTER_BOOT_RECORD*)mbr_buf; - return (mbr->signature == MBR_SIGNATURE) && (le32(mbr->partitions[0].lba_start) >= partition_offset); -} - -int FormatSDCard(u32 partition_offset, u32 total_sectors) -{ - _printf(20, 40, "Formatting SD card...."); - - MASTER_BOOT_RECORD *mbr = (MASTER_BOOT_RECORD*)io_buffer; - memset(mbr, 0, SDIO_BYTES_PER_SECTOR); - - int result = sdcard_readwrite(SDIO_READ, mbr, 1, SDIO_BYTES_PER_SECTOR, 0, NULL, DEVICE_ID_SDCARD_PATCHED); - if(result != 0) - { - _printf(20, 40, "SD card read failed %i", result); - return result; - } - - u32 lba_start = partition_offset; - - result = FormatToFAT32(lba_start, total_sectors - partition_offset); - if(result != 0) - return result; - - memset(mbr, 0, sizeof(MASTER_BOOT_RECORD)); - mbr->signature = MBR_SIGNATURE; - - // setup primary FAT32 partition - mbr->partitions[0].status = PARTITION_BOOTABLE; // set activate - mbr->partitions[0].chs_start[0] = mbr->partitions[0].chs_end[0] = 0xFE; - mbr->partitions[0].chs_start[1] = mbr->partitions[0].chs_end[1] = 0xFF; - mbr->partitions[0].chs_start[2] = mbr->partitions[0].chs_end[2] = 0xFF; - mbr->partitions[0].type = PARTITION_TYPE_FAT32; - mbr->partitions[0].lba_start = le32(lba_start); - mbr->partitions[0].block_count = le32((total_sectors - partition_offset)); - - - result = sdcard_readwrite(SDIO_WRITE, mbr, 1, SDIO_BYTES_PER_SECTOR, 0, NULL, DEVICE_ID_SDCARD_PATCHED); - if(result != 0) - { - _printf(20, 40, "SD card write failed %i", result); - } - else - { - _printf(20, 40, "Format of SD card finished successfully", result); - } - - return result; -} diff --git a/ios_fs/source/fat32_format.h b/ios_fs/source/fat32_format.h deleted file mode 100644 index 1a008ac..0000000 --- a/ios_fs/source/fat32_format.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _FAT32_FORMAT_H_ -#define _FAT32_FORMAT_H_ - -int CheckFAT32PartitionOffset(u8 * mbr, u32 partition_offset); -int FormatSDCard(u32 partition_offset, u32 total_sectors); - -#endif // _FAT32_FORMAT_H_ diff --git a/ios_fs/source/font.c b/ios_fs/source/font.c deleted file mode 100644 index 91aef28..0000000 --- a/ios_fs/source/font.c +++ /dev/null @@ -1,49 +0,0 @@ -const unsigned char font_bin[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x18, 0x18, 0x00, 0x0C, 0x00, - 0x00, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0xFF, 0x66, 0xFF, 0x66, 0x66, - 0x00, 0x18, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x18, 0x10, 0x46, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x62, - 0x00, 0x3C, 0x66, 0x3C, 0x1C, 0xE6, 0x66, 0xFC, 0x00, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x18, 0x0C, 0x00, - 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x40, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, - 0x00, 0x3C, 0x66, 0x76, 0x6E, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x1C, 0x18, 0x18, 0x18, 0x7E, 0x00, - 0x00, 0x3C, 0x62, 0x30, 0x0C, 0x06, 0x7E, 0x00, 0x00, 0x3C, 0x62, 0x38, 0x60, 0x66, 0x3C, 0x00, - 0x00, 0x6C, 0x6C, 0x66, 0xFE, 0x60, 0x60, 0x00, 0x00, 0x7E, 0x06, 0x7E, 0x60, 0x66, 0x3C, 0x00, - 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x7E, 0x30, 0x30, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x3C, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x3C, 0x66, 0x7C, 0x60, 0x66, 0x3C, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x0C, 0x00, - 0x00, 0x70, 0x1C, 0x06, 0x06, 0x1C, 0x70, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, - 0x00, 0x0E, 0x38, 0x60, 0x60, 0x38, 0x0E, 0x00, 0x00, 0x3C, 0x66, 0x30, 0x18, 0x00, 0x18, 0x00, - 0x00, 0x3C, 0x66, 0x76, 0x76, 0x06, 0x46, 0x3C, 0x00, 0x3C, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x3E, 0x66, 0x3E, 0x66, 0x66, 0x3E, 0x00, 0x00, 0x3C, 0x66, 0x06, 0x06, 0x66, 0x3C, 0x00, - 0x00, 0x1E, 0x36, 0x66, 0x66, 0x36, 0x1E, 0x00, 0x00, 0x7E, 0x06, 0x1E, 0x06, 0x06, 0x7E, 0x00, - 0x00, 0x3E, 0x06, 0x1E, 0x06, 0x06, 0x06, 0x00, 0x00, 0x3C, 0x66, 0x06, 0x76, 0x66, 0x3C, 0x00, - 0x00, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, - 0x00, 0x78, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x66, 0x36, 0x1E, 0x1E, 0x36, 0x66, 0x00, - 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7E, 0x00, 0x00, 0x46, 0x6E, 0x7E, 0x56, 0x46, 0x46, 0x00, - 0x00, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0x66, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0x00, 0x3E, 0x66, 0x3E, 0x06, 0x06, 0x06, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x70, 0x00, - 0x00, 0x3E, 0x66, 0x3E, 0x1E, 0x36, 0x66, 0x00, 0x00, 0x3C, 0x66, 0x0C, 0x30, 0x66, 0x3C, 0x00, - 0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x46, 0x46, 0x56, 0x7E, 0x6E, 0x46, 0x00, - 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x06, 0x7E, 0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, - 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, - 0x00, 0x18, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x7C, 0x66, 0x7C, 0x00, - 0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00, 0x00, 0x00, 0x3C, 0x06, 0x06, 0x06, 0x3C, 0x00, - 0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x06, 0x3C, 0x00, - 0x00, 0x38, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x7C, 0x66, 0x7C, 0x40, 0x3C, 0x00, - 0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x00, 0x00, 0x18, 0x00, 0x1C, 0x18, 0x18, 0x3C, 0x00, - 0x00, 0x30, 0x00, 0x30, 0x30, 0x30, 0x1E, 0x00, 0x00, 0x06, 0x06, 0x36, 0x1E, 0x36, 0x66, 0x00, - 0x00, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x66, 0xFE, 0xFE, 0xD6, 0xC6, 0x00, - 0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x00, 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x00, - 0x00, 0x00, 0x3E, 0x66, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x00, - 0x00, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xFE, 0x7C, 0x6C, 0x00, - 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x66, 0x66, 0x7C, 0x60, 0x3C, 0x00, - 0x00, 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x7E, 0x00, 0x00, 0x00, 0x18, 0x08, 0x08, 0x04, 0x08, 0x08, - 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x0C, 0x08, 0x08, 0x10, 0x08, 0x08, -}; diff --git a/ios_fs/source/font_bin.h b/ios_fs/source/font_bin.h deleted file mode 100644 index 949de6c..0000000 --- a/ios_fs/source/font_bin.h +++ /dev/null @@ -1 +0,0 @@ -extern const u8 font_bin[]; \ No newline at end of file diff --git a/ios_fs/source/fsa.c b/ios_fs/source/fsa.c deleted file mode 100644 index 511e9ad..0000000 --- a/ios_fs/source/fsa.c +++ /dev/null @@ -1,222 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#include -#include "types.h" -#include "devices.h" -#include "imports.h" -#include "fsa.h" - -//!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! FSA redirection -//!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -char* FSA_AttachVolume_FillDescription_hook(char *dst, const char *src, int size) -{ - char* ret = FS_STRNCPY(dst, src, size); - - u8 *volDescr = (u8 *)(dst - 0x1C); - - // copy in a fake volume name and enable flag that it is set - if( (FS_STRNCMP((char*)(volDescr + 0x1C), "usb", 3) == 0) && (FS_STRNCMP((char*)(volDescr + 0x24), "fat", 3) == 0) ) - { - FS_STRNCPY((char*)(volDescr + 0xAC), "usbfat1", 8); - *volDescr |= 0x40; - } - // let's do this for SD card to, for future SD card title loading maybe - /* - if( (FS_STRNCMP((char*)(volDescr + 0x1C), "sdcard", 3) == 0) && (FS_STRNCMP((char*)(volDescr + 0x24), "fat", 3) == 0) ) - { - FS_STRNCPY(volDescr + 0xAC, "sdfat", 7); - *volDescr |= 0x40; - } - */ - - - return ret; -} - -int FSA_AsyncCommandCallback_hook(int result, int reply) -{ - int (*FSA_ConvertErrorCode)(int result, int reply) = (void*)0x1071209C; - int res = FSA_ConvertErrorCode(result, reply); - - if(reply && (*(u32*)(reply + 0x42C) != 0)) - { - u32 devDescr = *(u32*)(reply + 0x42C); - int deviceType = *(u32*)(devDescr + 0x70); - - if(deviceType == DEVICE_TYPE_USB) // TODO: verify it is FAT USB and not WFS USB - { - u32 command = *(u32*)(reply + 0x1C); - - if(res < 0) - { - switch(command) - { - case 0x05: // FSMakeQuota -> 0x1D - case 0x1A: // FSFlushQuota -> 0x1E - case 0x1B: // FSRollbackQuota -> 0x1F - case 0x1C: // FSChangeOwner -> 0x70 - case 0x1D: // FSChangeMode -> 0x20 - case 0x1E: // FSRemoveQuota -> 0x72 // TODO: this actually removes the directory. we need to do something about it - case 0x20: // Unkn -> 0x74 - case 0x21: // FSMakeLinkAsync -> 0x75 // TODO: this is an issue on FAT. maybe create some file which has the name of the link in it? - case 0x16: // unkn but required on install - res = 0; - break; - case 0x04: - if(res == -196642) - { - // FS_SYSLOG_OUTPUT("FSA INVALID CHARACTERS IN CREATEDIR\n"); - res = 0; - } - break; - default: - break; - } - } - else - { - switch(command) - {/* - case 0x10: // FSGetStatFile - { - fileStat_s * fsStat = (fileStat_s*)(*(u32*)(reply + 0x2C)); - FS_SYSLOG_OUTPUT("FSGetStatFile: %08X %08X %08X %08X\n", fsStat->flag, fsStat->owner_id, fsStat->group_id, fsStat->size); - break; - }*/ - case 0x19: // FSGetInfo -> 0x18 - { - switch(*(u32*)(reply + 0x228)) - { - case 0x05: // FSGetStat - { - fileStat_s * fsStat = (fileStat_s*)(*(u32*)(reply + 0x22C)); - if((fsStat->flag & 0xF0000000) == 0x80000000) - { - // just make every directory a quota -> probably wrong :P - fsStat->flag |= 0xE0000000; - fsStat->quota_size = 0x4000000; // max quota size - } - break; - } - default: - break; - } - break; - } - default: - break; - } - } - } - } - - if(res < 0 && (*(u32*)(reply + 0x1C) != 0x19)) - FS_SYSLOG_OUTPUT("FSA TEST2: res %d %08X %08X %08X\n", res, result, reply, *(u32*)(reply + 0x1C)); - - - return res; -} - -int FSA_MakeQuota_hook(u32 * devDescr, u32 *commandStruct) -{ - int (*resolveNode)(u32 * devDescr) = (void*)0x1070EEDC; - int res = resolveNode(devDescr); - - if(devDescr[0x70/4] == DEVICE_TYPE_USB) - { - commandStruct[0x1C/4] = 4; - } - else - { - commandStruct[0x1C/4] = 5; - } - - return res; -} - -/* -int FSMakeQuota(int fsa, int client, const char *path, int mode, int unkn, unsigned int size) -{ - int (*callFunc)(int fsa, int client, const char *path, int mode, int unkn, unsigned int size) = (void*)0x1070BC9C; - - if(FS_STRNCMP(path, "/vol/mcp_devmgr", 15) == 0) - { - mode = 0x666; - } - int res = callFunc(fsa, client, path, mode, unkn, size); - FS_SYSLOG_OUTPUT("FSMakeQuota: res %d %08X %08X %20s %08X %08X %08X\n", res, fsa, client, path, mode, unkn, size); - return res; -} - -int FSCreateDir(int fsa, int client, const char *path, int mode) -{ - int (*callFunc)(int fsa, int client, const char *path, int mode) = (void*)0x1070BEBC; - - if(FS_STRNCMP(path, "/vol/mcp_devmgr", 15) == 0) - { - mode = 0x666; - } - int res = callFunc(fsa, client, path, mode); - FS_SYSLOG_OUTPUT("FSCreateDir: res %d %08X %08X %s %08X\n", res, fsa, client, path, mode); - return res; -} - -int FSChangeDir(int a1, char *dir) -{ - int (*callFunc)(int a1, char* a2) = (void*)0x1070EB7C; - int res = callFunc(a1, dir); - - FS_SYSLOG_OUTPUT("FSChangeDir: res %d %s\n", res, dir); - - return res; -} - -int FSOpenFile(int a1, int a2, char *dir, char *mode, int a3, int a4, int a5, int a6) -{ - int (*callFunc)(int a1, int a2, char *dir, char *mode, int a3, int a4, int a5, int a6) = (void*)0x1070AF08; - - if(FS_STRNCMP(dir, "/vol/mcp_devmgr", 15) == 0) - { - a4 = 0x666; - } - - int res = callFunc(a1, a2, dir, mode, a3, a4, a5, a6); - - FS_SYSLOG_OUTPUT("FSOpenFile: res %d %s %s %08X %08X %08X\n", res, dir, mode, a4, a5, a6); - - return res; -} - -int FSWriteFileIssueCommand(int a1, int a2, int a3, int a4, signed int a5, int a6, int a7, int a8) -{ - int (*callFunc)(int a1, int a2, int a3, int a4, signed int a5, int a6, int a7, int a8) = (void*)0x1070A7A4; - - int res = callFunc(a1, a2, a3, a4, a5, a6, a7, a8); - - FS_SYSLOG_OUTPUT("FSWriteFile: res %d %08X %08X %08X %08X %08X %08X\n", res, a3, a4, a5, a6, a7, a8); - - return res; -} -*/ diff --git a/ios_fs/source/fsa.h b/ios_fs/source/fsa.h deleted file mode 100644 index 7939857..0000000 --- a/ios_fs/source/fsa.h +++ /dev/null @@ -1,42 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#ifndef _FSA_H_ -#define _FSA_H_ - -typedef struct -{ - u32 flag; - u32 permission; - u32 owner_id; - u32 group_id; - u32 size; // size in bytes - u32 physblock_size; // physical size on disk in bytes - u64 quota_size; - u32 id; - u32 ctime; - u32 mtime; - u32 unk2[0x0D]; -}fileStat_s; - -#endif diff --git a/ios_fs/source/function_hooks.s b/ios_fs/source/function_hooks.s deleted file mode 100644 index 6f99b21..0000000 --- a/ios_fs/source/function_hooks.s +++ /dev/null @@ -1,101 +0,0 @@ - -############################################################################################# -# FS main thread hook -############################################################################################# -.extern createDevThread_entry - .globl createDevThread_hook -createDevThread_hook: - push {r0,r1,lr} - ldr r0, [r4, #0x8] - mov r1, r7 - bl createDevThread_entry - pop {r0,r1,lr} -# restore original instruction - pop {r4-r8,pc} - -############################################################################################# -# devices handle hooks -############################################################################################# -.extern getMdDeviceById - .globl getMdDeviceById_hook -getMdDeviceById_hook: - mov r4, r0 - push {lr} - bl getMdDeviceById - pop {lr} - cmp r0, #0 - moveq r0, r4 - bxeq lr - pop {r4,r5,pc} - - -############################################################################################# -# syslog hook -############################################################################################# - .globl syslogOutput_hook -syslogOutput_hook: -# push {r0,lr} -# bl dump_syslog -# pop {r0,lr} -# restore original instruction - pop {r4-r8,r10,pc} - -############################################################################################# -# Original NAND read functions -############################################################################################# - .globl slcRead1_original -slcRead1_original: - push {r4-r8,lr} - ldr r4, [pc] - bx r4 - .word 0x107B9990 - - .globl sdcardRead_original -sdcardRead_original: - push {r4,lr} - ldr r4, [pc] - bx r4 - .word 0x107BDDD4 - -############################################################################################# -# FSA functions -############################################################################################# - .globl FSA_MakeQuota_asm_hook -FSA_MakeQuota_asm_hook: - mov r1, r5 - b FSA_MakeQuota_hook - -############################################################################################# -# DEBUG STUFF -############################################################################################# -# # # # # # # # # # -# DEBUG STUFF # -# # # # # # # # # # -#mlcRead1_dbg: -# mlcRead1_dbg_stackframe equ (4*6) -# mov r12, r0 -# push {r0-r3,r12,lr} -# adr r0, mlcRead1_dbg_format -# ldr r1, [sp, #mlcRead1_dbg_stackframe+9*4] -# bl FS_SYSLOG_OUTPUT -# pop {r0-r3,lr,pc} # replaces mov lr, r0 -# mlcRead1_dbg_format: -# .ascii "mlcRead1 : %08X %08X %08X" -# .byte 0x0a -# .byte 0x00 -# .align 0x4 -# -#mlcRead1_end_hook: -# mlcRead1_end_hook_stackframe equ (4*10) -# push {r0} -# mov r0, #50 -# bl FS_SLEEP -# ldr r0, =sdcard_read_buffer -# ldr r1, [sp, #mlcRead1_end_hook_stackframe+4*1] -# mov r2, #0x200 -# bl FS_MEMCPY -# ldr r0, =sdcard_read_buffer -# str r6, [r0] -# mov r1, #0x200 -# bl dump_data -# pop {r0,r4-r11,pc} diff --git a/ios_fs/source/hardware_registers.h b/ios_fs/source/hardware_registers.h deleted file mode 100644 index 95950c4..0000000 --- a/ios_fs/source/hardware_registers.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef HARDWARE_REGISTERS_H_ -#define HARDWARE_REGISTERS_H_ - -#define LT_GPIO_IN 0x0d8000e8 - - -#define GPIO_IN_POWER_BUTTON 0x01 - -#endif // HARDWARE_REGISTERS_H_ diff --git a/ios_fs/source/imports.h b/ios_fs/source/imports.h deleted file mode 100644 index 9532d33..0000000 --- a/ios_fs/source/imports.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef IMPORTS_H_ -#define IMPORTS_H_ - -#define FS_IOS_SHUTDOWN ((void (*)(int))0x107F6C94) - -#define FS_SVC_CREATEMUTEX ((int (*)(int, int))0x107F6BBC) -#define FS_SVC_ACQUIREMUTEX ((int (*)(int, int))0x107F6BC4) -#define FS_SVC_RELEASEMUTEX ((int (*)(int))0x107F6BCC) -#define FS_SVC_DESTROYMUTEX ((int (*)(int))0x107F6BD4) - -#define FS_SLEEP ((void (*)(int))0x1071D668) -#define FS_MEMCPY ((void* (*)(void*, const void*, u32))0x107F4F7C) -#define FS_MEMSET ((void* (*)(void*, int, u32))0x107F5018) -#define FS_VSNPRINTF ((int (*)(char * s, u32 n, const char * format, va_list arg))0x107F5F68) -#define FS_SNPRINTF ((int (*)(char * s, u32 n, const char * format, ...))0x107F5FB4) -#define FS_STRNCMP ((int (*)(const char *s1, const char *s2, u32 size))0x107F6138) -#define FS_STRNCPY ((char* (*)(char *s1, const char *s2, u32 size))0x107F60DC) -#define FS_SYSLOG_OUTPUT ((void (*)(const char *format, ...))0x107F0C84) -#define FS_RAW_READ1 ((int (*)(int handle, u32 offset_high, u32 offset_low, u32 size, void* buf, void *callback, int callback_arg))0x10732BC0) -#define FS_SDIO_DOREADWRITECOMMAND ((int (*)(int, void*, u32, void*, void*))0x10718A8C) - -#define FS_REGISTERMDPHYSICALDEVICE ((int (*)(void*, int, int))0x10718860) - -#define memcpy FS_MEMCPY -#define memset FS_MEMSET - -#define FS_MMC_SDCARD_STRUCT ((vu32*)0x1089B9F8) -#define FS_MMC_MLC_STRUCT ((vu32*)0x1089B948) - -#define FS_MLC_PHYS_DEV_STRUCT ((void*)0x11C3A14C) -#define FS_SLC_PHYS_DEV_STRUCT ((void*)0x11C381CC) -#define FS_SLCCMPT_PHYS_DEV_STRUCT ((void*)0x11C37668) - -#define le16(i) ((((u16) ((i) & 0xFF)) << 8) | ((u16) (((i) & 0xFF00) >> 8))) -#define le32(i) ((((u32)le16((i) & 0xFFFF)) << 16) | ((u32)le16(((i) & 0xFFFF0000) >> 16))) -#define le64(i) ((((u64)le32((i) & 0xFFFFFFFFLL)) << 32) | ((u64)le32(((i) & 0xFFFFFFFF00000000LL) >> 32))) - -#endif // IMPORTS_H_ diff --git a/ios_fs/source/main.c b/ios_fs/source/main.c deleted file mode 100644 index c5c0844..0000000 --- a/ios_fs/source/main.c +++ /dev/null @@ -1,62 +0,0 @@ -#include "text.h" -#include "sdio.h" -#include "dumper.h" -#include "imports.h" -#include "devices.h" -#include "svc.h" -#include "../../common/config_types.h" -#include "../../common/kernel_commands.h" - -void createDevThread_entry(int node_type, u32 *dev_handles) -{ - FS_SYSLOG_OUTPUT("FSA: %s thread created\n", (char*)dev_handles[0]); - - if(node_type == NODE_TYPE_DEV_MMC) - { - cfw_config_t cfw_config; - FS_MEMSET(&cfw_config, 0, sizeof(cfw_config)); - svcCustomKernelCommand(KERNEL_GET_CFW_CONFIG, &cfw_config); - - if(cfw_config.redNAND) - { - sdcard_init(); - } - } - /*else if(node_type == NODE_TYPE_DEV_UMS) - { - // instead of hooking into attach at 0x10732FBC...lets do this and let the system do the mount - fs_attach_info_t * info = (fs_attach_info_t *)(*(u32*)0x1091C2E4); - do - { - if(info->fs_type == FS_TYPE_FAT) - { - int i; - for(i = 0; i < sizeof(info->allowed_devices); i++) - { - if(info->allowed_devices[i] == 0) - { - info->allowed_devices[i] = DEVICE_TYPE_USB; - break; - } - } - break; - } - info = info->next; - } - while(info); - }*/ - else if(node_type == NODE_TYPE_DEV_ATFS) // ATFS is started right before ISFS for slc/slccmpt - { - cfw_config_t cfw_config; - FS_MEMSET(&cfw_config, 0, sizeof(cfw_config)); - svcCustomKernelCommand(KERNEL_GET_CFW_CONFIG, &cfw_config); - - if(cfw_config.redNAND && (check_nand_dump() == 0)) - { - clearScreen(0x000000FF); - _printf(20, 20, "welcome to redNAND!"); - - dump_nand_complete(); - } - } -} diff --git a/ios_fs/source/mlcio.c b/ios_fs/source/mlcio.c deleted file mode 100644 index dc1b0b3..0000000 --- a/ios_fs/source/mlcio.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "types.h" -#include "imports.h" - -void mlc_init(void) -{ - FS_MMC_MLC_STRUCT[0x24/4] = FS_MMC_MLC_STRUCT[0x24/4] | 0x20; - FS_MMC_MLC_STRUCT[0x28/4] = FS_MMC_MLC_STRUCT[0x28/4] & (~0x04); -} - - - diff --git a/ios_fs/source/mlcio.h b/ios_fs/source/mlcio.h deleted file mode 100644 index e9edd3f..0000000 --- a/ios_fs/source/mlcio.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _MLCIO_H_ -#define _MLCIO_H_ - -void mlc_init(void); - -#endif // _MLCIO_H_ diff --git a/ios_fs/source/sdio.c b/ios_fs/source/sdio.c deleted file mode 100644 index a841598..0000000 --- a/ios_fs/source/sdio.c +++ /dev/null @@ -1,107 +0,0 @@ -#include "types.h" -#include "imports.h" - -static int sdcard_access_mutex = 0; -static u32 dumpdata_offset = 0; - -typedef struct _sd_command_block_t -{ - u32 cnt; - u32 block_size; - u32 command_type; - void * data_ptr; - u64 offset; - void *callback; - void *callback_arg; - int minus_one; -} __attribute__((packed)) sd_command_block_t; - -void sdcard_init(void) -{ - // this should run *after* /dev/mmc thread is created - // first we create our synchronization stuff - sdcard_access_mutex = FS_SVC_CREATEMUTEX(1, 1); - - dumpdata_offset = 0; - - // then we sleep until /dev/mmc is done initializing sdcard (TODO : better synchronization here) - FS_SLEEP(1000); - - // finally we set some flags to indicate sdcard is ready for use - FS_MMC_SDCARD_STRUCT[0x24/4] = FS_MMC_SDCARD_STRUCT[0x24/4] | 0x20; - FS_MMC_SDCARD_STRUCT[0x28/4] = FS_MMC_SDCARD_STRUCT[0x28/4] & (~0x04); -} - -static void sdcard_readwrite_callback(void *priv_data, int result) -{ - int *private_data = (int*)priv_data; - - private_data[1] = result; - - FS_SVC_RELEASEMUTEX(private_data[0]); -} - -void sdcard_lock_mutex(void) -{ - FS_SVC_ACQUIREMUTEX(sdcard_access_mutex, 0); -} - -void sdcard_unlock_mutex(void) -{ - FS_SVC_RELEASEMUTEX(sdcard_access_mutex); -} - -int sdcard_readwrite(int is_read, void *data, u32 cnt, u32 block_size, u32 offset_blocks, int * out_callback_arg, int device_id) -{ - // first of all, grab sdcard mutex - sdcard_lock_mutex(); - - //also create a mutex for synchronization with end of operation... - int sync_mutex = FS_SVC_CREATEMUTEX(1, 1); - - // ...and acquire it - FS_SVC_ACQUIREMUTEX(sync_mutex, 0); - - // block_size needs to be equal to sector_size (0x200) - while(block_size > 0x200) - { - block_size >>= 1; - cnt <<= 1; - offset_blocks <<= 1; - } - - // build rw command paramstruct - sd_command_block_t command; - command.cnt = cnt; - command.block_size = block_size; - command.command_type = (is_read ? 0x03 : 0x00); - command.data_ptr = data; - command.offset = offset_blocks; - command.callback = 0x00; - command.callback_arg = 0x00; - command.minus_one = (u32)-1; - - // setup parameters - int private_data[2]; - private_data[0] = sync_mutex; - private_data[1] = 0; - - // call readwrite function - int result = FS_SDIO_DOREADWRITECOMMAND(device_id, &command, offset_blocks, sdcard_readwrite_callback, (void*)private_data); - if(result == 0) - { - // wait for callback to give the go-ahead - FS_SVC_ACQUIREMUTEX(sync_mutex, 0); - - if(out_callback_arg) - { - *out_callback_arg = private_data[1]; - } - } - - // finally, release sdcard mutexes - FS_SVC_DESTROYMUTEX(sync_mutex); - sdcard_unlock_mutex(); - - return result; -} diff --git a/ios_fs/source/sdio.h b/ios_fs/source/sdio.h deleted file mode 100644 index ce7686b..0000000 --- a/ios_fs/source/sdio.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _SDIO_H_ -#define _SDIO_H_ - -#define SDIO_WRITE 0 -#define SDIO_READ 1 - -void sdcard_init(void); -void sdcard_lock_mutex(void); -void sdcard_unlock_mutex(void); -int sdcard_readwrite(int is_read, void *data, u32 cnt, u32 block_size, u32 offset_blocks, int * out_callback_arg, int device_id); - -#endif // _SDIO_H_ diff --git a/ios_fs/source/svc.h b/ios_fs/source/svc.h deleted file mode 100644 index 97213e2..0000000 --- a/ios_fs/source/svc.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef SVC_H -#define SVC_H - -#include "types.h" - -#define SHUTDOWN_TYPE_POWER_OFF 0 -#define SHUTDOWN_TYPE_REBOOT 1 - -typedef struct -{ - void* ptr; - u32 len; - u32 unk; -}iovec_s; - -void* svcAlloc(u32 heapid, u32 size); -void* svcAllocAlign(u32 heapid, u32 size, u32 align); -void svcFree(u32 heapid, void* ptr); -int svcOpen(char* name, int mode); -int svcClose(int fd); -int svcIoctl(int fd, u32 request, void* input_buffer, u32 input_buffer_len, void* output_buffer, u32 output_buffer_len); -int svcIoctlv(int fd, u32 request, u32 vector_count_in, u32 vector_count_out, iovec_s* vector); -int svcInvalidateDCache(void* address, u32 size); -int svcFlushDCache(void* address, u32 size); - -void svcShutdown(int shutdown_type); -int svcCustomKernelCommand(u32 command, ...); - -#endif diff --git a/ios_fs/source/svc.s b/ios_fs/source/svc.s deleted file mode 100644 index aa07b1a..0000000 --- a/ios_fs/source/svc.s +++ /dev/null @@ -1,68 +0,0 @@ -.arm -.align 4 - -.global svcAlloc -.type svcAlloc, %function -svcAlloc: - .word 0xE7F027F0 - bx lr - -.global svcAllocAlign -.type svcAllocAlign, %function -svcAllocAlign: - .word 0xE7F028F0 - bx lr - -.global svcFree -.type svcFree, %function -svcFree: - .word 0xE7F029F0 - bx lr - -.global svcOpen -.type svcOpen, %function -svcOpen: - .word 0xE7F033F0 - bx lr - -.global svcClose -.type svcClose, %function -svcClose: - .word 0xE7F034F0 - bx lr - -.global svcIoctl -.type svcIoctl, %function -svcIoctl: - .word 0xE7F038F0 - bx lr - -.global svcIoctlv -.type svcIoctlv, %function -svcIoctlv: - .word 0xE7F039F0 - bx lr - -.global svcInvalidateDCache -.type svcInvalidateDCache, %function -svcInvalidateDCache: - .word 0xE7F051F0 - bx lr - -.global svcFlushDCache -.type svcFlushDCache, %function -svcFlushDCache: - .word 0xE7F052F0 - bx lr - -.global svcShutdown -.type svcShutdown, %function -svcShutdown: - .word 0xE7F072F0 - bx lr - -.global svcCustomKernelCommand -.type svcCustomKernelCommand, %function -svcCustomKernelCommand: - .word 0xE7F081F0 - bx lr diff --git a/ios_fs/source/text.c b/ios_fs/source/text.c deleted file mode 100644 index dd0c4a1..0000000 --- a/ios_fs/source/text.c +++ /dev/null @@ -1,90 +0,0 @@ -#include -#include -#include -#include -#include "imports.h" -#include "types.h" -#include "font_bin.h" - -#define FRAMEBUFFER_ADDRESS (0x14000000+0x38C0000) -#define FRAMEBUFFER_STRIDE (0xE00) -#define FRAMEBUFFER_STRIDE_WORDS (FRAMEBUFFER_STRIDE >> 2) - -#define CHAR_SIZE_X (8) -#define CHAR_SIZE_Y (8) - -u32* const framebuffer = (u32*)FRAMEBUFFER_ADDRESS; - -void clearScreen(u32 color) -{ - int i; - for(i = 0; i < ((FRAMEBUFFER_STRIDE * 504)/4); i++) - { - framebuffer[i] = color; - } -} - -void clearLine(int y, u32 color) -{ - u32* fb = &framebuffer[y * FRAMEBUFFER_STRIDE_WORDS]; - u32* fb_end = &framebuffer[(y+CHAR_SIZE_Y) * FRAMEBUFFER_STRIDE_WORDS]; - - while(fb < fb_end) - { - *fb = color; - fb++; - } -} - -void drawCharacter(char c, int x, int y) -{ - if(c < 32)return; - c -= 32; - u8* charData = (u8*)&font_bin[(CHAR_SIZE_X * CHAR_SIZE_Y * c) / 8]; - u32* fb = &framebuffer[x + y * FRAMEBUFFER_STRIDE_WORDS]; - int i, j; - for(i = 0; i < CHAR_SIZE_Y; i++) - { - u8 v= *(charData++); - for(j = 0; j < CHAR_SIZE_X; j++) - { - if(v & 1) *fb = 0x00000000; - else *fb = 0xFFFFFFFF; - v >>= 1; - fb++; - } - fb += FRAMEBUFFER_STRIDE_WORDS - CHAR_SIZE_X; - } -} - -void drawString(char* str, int x, int y) -{ - if(!str) return; - int k; - int dx = 0, dy = 0; - for(k = 0; str[k]; k++) - { - if(str[k] >= 32 && str[k] < 128) drawCharacter(str[k], x + dx, y + dy); - - dx += 8; - - if(str[k] == '\n') - { - dx = 0; - dy -= 8; - } - } -} - -void _printf(int x, int y, const char *format, ...) -{ - va_list args; - va_start(args, format); - - char buffer[0x100]; - - FS_VSNPRINTF(buffer, sizeof(buffer), format, args); - drawString(buffer, x, y); - - va_end(args); -} diff --git a/ios_fs/source/text.h b/ios_fs/source/text.h deleted file mode 100644 index 008cfce..0000000 --- a/ios_fs/source/text.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef TEXT_H -#define TEXT_H - -#include "types.h" - -void clearScreen(u32 color); -void clearLine(int y, u32 color); -void drawString(char* str, int x, int y); -void _printf(int x, int y, const char *format, ...); - -#endif diff --git a/ios_fs/source/types.h b/ios_fs/source/types.h deleted file mode 100644 index 832bc29..0000000 --- a/ios_fs/source/types.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef TYPES_H -#define TYPES_H - - #include - #include - - #define U64_MAX UINT64_MAX - - typedef uint8_t u8; - typedef uint16_t u16; - typedef uint32_t u32; - typedef uint64_t u64; - - typedef int8_t s8; - typedef int16_t s16; - typedef int32_t s32; - typedef int64_t s64; - - typedef volatile u8 vu8; - typedef volatile u16 vu16; - typedef volatile u32 vu32; - typedef volatile u64 vu64; - - typedef volatile s8 vs8; - typedef volatile s16 vs16; - typedef volatile s32 vs32; - typedef volatile s64 vs64; - -#endif diff --git a/ios_kernel/source/config.h b/ios_kernel/source/config.h deleted file mode 100644 index c515791..0000000 --- a/ios_kernel/source/config.h +++ /dev/null @@ -1,31 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#ifndef __CONFIG_H_ -#define __CONFIG_H_ - -#include "../../common/config_types.h" - -extern cfw_config_t cfw_config; - -#endif diff --git a/ios_kernel/source/instant_patches.c b/ios_kernel/source/instant_patches.c index 25e825c..55ff19d 100644 --- a/ios_kernel/source/instant_patches.c +++ b/ios_kernel/source/instant_patches.c @@ -21,7 +21,6 @@ * 3. This notice may not be removed or altered from any source * distribution. ***************************************************************************/ -#include "config.h" #include "utils.h" #include "types.h" #include "elf_patcher.h" @@ -39,64 +38,61 @@ typedef struct u32 cached; } ios_map_shared_info_t; -void instant_patches_setup(void) -{ +void instant_patches_setup(void){ // apply IOS ELF launch hook *(volatile u32*)0x0812A120 = ARM_BL(0x0812A120, kernel_launch_ios); // patch FSA raw access *(volatile u32*)0x1070FAE8 = 0x05812070; *(volatile u32*)0x1070FAEC = 0xEAFFFFF9; + + int (*_iosMapSharedUserExecution)(void *descr) = (void*)0x08124F88; - if(cfw_config.noIosReload) - { - int (*_iosMapSharedUserExecution)(void *descr) = (void*)0x08124F88; + // patch kernel dev node registration + *(volatile u32*)0x081430B4 = 1; - // patch kernel dev node registration - *(volatile u32*)0x081430B4 = 1; + // fix 10 minute timeout that crashes MCP after 10 minutes of booting + *(volatile u32*)(0x05022474 - 0x05000000 + 0x081C0000) = 0xFFFFFFFF; // NEW_TIMEOUT - // fix 10 minute timeout that crashes MCP after 10 minutes of booting - *(volatile u32*)(0x05022474 - 0x05000000 + 0x081C0000) = 0xFFFFFFFF; // NEW_TIMEOUT + // patch cached cert check + // start our MCP thread directly on first title change + kernel_memset((void*)(0x050BD000 - 0x05000000 + 0x081C0000), 0, 0x3000); + *(volatile u32*)(0x05054D6C - 0x05000000 + 0x081C0000) = ARM_B(0x05054D6C, _startMainThread); - // patch cached cert check - // start our MCP thread directly on first title change - kernel_memset((void*)(0x050BD000 - 0x05000000 + 0x081C0000), 0, 0x3000); - *(volatile u32*)(0x05054D6C - 0x05000000 + 0x081C0000) = ARM_B(0x05054D6C, _startMainThread); + // patch MCP authentication check + *(volatile u32*)(0x05014CAC - 0x05000000 + 0x081C0000) = 0x20004770; // mov r0, #0; bx lr - // patch MCP authentication check - *(volatile u32*)(0x05014CAC - 0x05000000 + 0x081C0000) = 0x20004770; // mov r0, #0; bx lr + // patch IOSC_VerifyPubkeySign to always succeed + *(volatile u32*)(0x05052C44 - 0x05000000 + 0x081C0000) = 0xE3A00000; // mov r0, #0 + *(volatile u32*)(0x05052C48 - 0x05000000 + 0x081C0000) = 0xE12FFF1E; // bx lr - // patch IOSC_VerifyPubkeySign to always succeed - *(volatile u32*)(0x05052C44 - 0x05000000 + 0x081C0000) = 0xE3A00000; // mov r0, #0 - *(volatile u32*)(0x05052C48 - 0x05000000 + 0x081C0000) = 0xE12FFF1E; // bx lr + // allow custom bootLogoTex and bootMovie.h264 + *(volatile u32*)(0xE0030D68 - 0xE0000000 + 0x12900000) = 0xE3A00000; // mov r0, #0 + *(volatile u32*)(0xE0030D34 - 0xE0000000 + 0x12900000) = 0xE3A00000; // mov r0, #0 - // allow custom bootLogoTex and bootMovie.h264 - *(volatile u32*)(0xE0030D68 - 0xE0000000 + 0x12900000) = 0xE3A00000; // mov r0, #0 - *(volatile u32*)(0xE0030D34 - 0xE0000000 + 0x12900000) = 0xE3A00000; // mov r0, #0 + // allow any region title launch + *(volatile u32*)(0xE0030498 - 0xE0000000 + 0x12900000) = 0xE3A00000; // mov r0, #0 - // allow any region title launch - *(volatile u32*)(0xE0030498 - 0xE0000000 + 0x12900000) = 0xE3A00000; // mov r0, #0 + // set zero to start thread directly on first title change + *(volatile u32*)(0x050BC580 - 0x05000000 + 0x081C0000) = 0; + + *(volatile u32*)(0x050254D6 - 0x05000000 + 0x081C0000) = (volatile u32*) THUMB_BL(0x050254D6, MCP_LoadFile_patch); + *(volatile u32*)(0x05025242 - 0x05000000 + 0x081C0000) = (volatile u32*) THUMB_BL(0x05025242, MCP_ioctl100_patch); + + ios_map_shared_info_t map_info; + map_info.paddr = 0x050BD000 - 0x05000000 + 0x081C0000; + map_info.vaddr = 0x050BD000; + map_info.size = 0x3000; + map_info.domain = 1; // MCP + map_info.type = 3; // 0 = undefined, 1 = kernel only, 2 = read only, 3 = read/write + map_info.cached = 0xFFFFFFFF; + _iosMapSharedUserExecution(&map_info); // actually a bss section but oh well it will have read/write - // set zero to start thread directly on first title change - *(volatile u32*)(0x050BC580 - 0x05000000 + 0x081C0000) = 0; - // down display launch image at this state - *(volatile u32*)(_text_start - 4 - 0x05100000 + 0x13D80000) = 0; - - ios_map_shared_info_t map_info; - map_info.paddr = 0x050BD000 - 0x05000000 + 0x081C0000; - map_info.vaddr = 0x050BD000; - map_info.size = 0x3000; - map_info.domain = 1; // MCP - map_info.type = 3; // 0 = undefined, 1 = kernel only, 2 = read only, 3 = read/write - map_info.cached = 0xFFFFFFFF; - _iosMapSharedUserExecution(&map_info); // actually a bss section but oh well it will have read/write - - map_info.paddr = 0x05116000 - 0x05100000 + 0x13D80000; - map_info.vaddr = 0x05116000; - map_info.size = 0x4000; - map_info.domain = 1; // MCP - map_info.type = 3; // 0 = undefined, 1 = kernel only, 2 = read only, 3 = read write - map_info.cached = 0xFFFFFFFF; - _iosMapSharedUserExecution(&map_info); - } + map_info.paddr = 0x05116000 - 0x05100000 + 0x13D80000; + map_info.vaddr = 0x05116000; + map_info.size = 0x4000; + map_info.domain = 1; // MCP + map_info.type = 3; // 0 = undefined, 1 = kernel only, 2 = read only, 3 = read write + map_info.cached = 0xFFFFFFFF; + _iosMapSharedUserExecution(&map_info); } diff --git a/ios_kernel/source/ios_acp_patches.c b/ios_kernel/source/ios_acp_patches.c deleted file mode 100644 index 4272b69..0000000 --- a/ios_kernel/source/ios_acp_patches.c +++ /dev/null @@ -1,59 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#include "types.h" -#include "elf_patcher.h" -#include "config.h" -#include "ios_acp_patches.h" -#include "../../ios_acp/ios_acp.bin.h" -#include "../../ios_acp/ios_acp_syms.h" - -#define ACP_CODE_BASE_PHYS_ADDR (-0xE0000000 + 0x12900000) - -extern const patch_table_t acp_patches_table[]; -extern const patch_table_t acp_patches_table_end[]; - -u32 acp_get_phys_code_base(void) -{ - return _text_start + ACP_CODE_BASE_PHYS_ADDR; -} - -void acp_run_patches(u32 ios_elf_start) -{ - section_write(ios_elf_start, _text_start, (void*)acp_get_phys_code_base(), _text_end - _text_start); - - // hook acp fsa raw read function - section_write_word(ios_elf_start, 0xE00601F0, ARM_BL(0xE00601F0, ACP_FSARawRead_hook)); - - // patch logs to output more info - section_write_word(ios_elf_start, 0xE009801C, ARM_B(0xE009801C, 0xE00C4D54)); - section_write_word(ios_elf_start, 0xE00D87B0, ARM_B(0xE00D87B0, 0xE00C4D54)); - section_write_word(ios_elf_start, 0xE00D6DE8, ARM_B(0xE00D6DE8, 0xE00C4D54)); - section_write_word(ios_elf_start, 0xE009A0C4, 0xE3A00000); - - // patch acp remove quota to always try recursive directory remove after remove quota - section_write_word(ios_elf_start, 0xE002E170, 0xEA000021); - - u32 patch_count = (u32)(((u8*)acp_patches_table_end) - ((u8*)acp_patches_table)) / sizeof(patch_table_t); - patch_table_entries(ios_elf_start, acp_patches_table, patch_count); -} diff --git a/ios_kernel/source/ios_acp_patches.h b/ios_kernel/source/ios_acp_patches.h deleted file mode 100644 index a28d329..0000000 --- a/ios_kernel/source/ios_acp_patches.h +++ /dev/null @@ -1,30 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#ifndef _ACP_PATCHES_H_ -#define _ACP_PATCHES_H_ - -u32 acp_get_phys_code_base(void); -void acp_run_patches(u32 ios_elf_start); - -#endif diff --git a/ios_kernel/source/ios_acp_patches_asm.s b/ios_kernel/source/ios_acp_patches_asm.s deleted file mode 100644 index 74b9001..0000000 --- a/ios_kernel/source/ios_acp_patches_asm.s +++ /dev/null @@ -1,11 +0,0 @@ -.arm - -patch_wfs_partition_check: - mov r0, #0 - -.globl acp_patches_table, acp_patches_table_end -acp_patches_table: -# origin data size -# .word 0xE00605D0, patch_wfs_partition_check, 4 -acp_patches_table_end: - diff --git a/ios_kernel/source/ios_bsp_patches.c b/ios_kernel/source/ios_bsp_patches.c deleted file mode 100644 index 5c15ddb..0000000 --- a/ios_kernel/source/ios_bsp_patches.c +++ /dev/null @@ -1,79 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#include "types.h" -#include "elf_patcher.h" -#include "ios_bsp_patches.h" -#include "../../ios_bsp/ios_bsp_syms.h" -#include "fsa.h" -#include "utils.h" - -#define BSP_PHYS_DIFF (-0xE6000000 + 0x13CC0000) - -extern const patch_table_t fs_patches_table[]; -extern const patch_table_t fs_patches_table_end[]; - -u32 bsp_get_phys_code_base(void) -{ - return _text_start + BSP_PHYS_DIFF; -} - -int bsp_init_seeprom_buffer(u32 baseSector, int dumpFound) -{ - void *tmpBuffer = (void*)0x00140000; - - if(dumpFound) - { - int res = FSA_SDReadRawSectors(tmpBuffer, baseSector, 1); - if(res < 0) - return res; - } - else - { - //! just clear out the seeprom and it will be re-initialized on BSP module - //! TODO: maybe read in the seeprom here from SPI or BSP module - kernel_memset(tmpBuffer, 0, 0x200); - } - - int level = disable_interrupts(); - unsigned int control_register = disable_mmu(); - - kernel_memcpy((void*)(_seeprom_buffer_start - 0xE6047000 + 0x13D07000), tmpBuffer, 0x200); - - restore_mmu(control_register); - enable_interrupts(level); - - return 0; -} - -void bsp_run_patches(u32 ios_elf_start) -{ - section_write(ios_elf_start, _text_start, (void*)bsp_get_phys_code_base(), _text_end - _text_start); - section_write_bss(ios_elf_start, _bss_start, _bss_end - _bss_start); - - section_write(ios_elf_start, _seeprom_buffer_start, (void*)(_seeprom_buffer_start - 0xE6047000 + 0x13D07000), 0x200); - - section_write_word(ios_elf_start, 0xE600D08C, ARM_B(0xE600D08C, EEPROM_SPI_ReadWord)); - section_write_word(ios_elf_start, 0xE600D010, ARM_B(0xE600D010, EEPROM_SPI_WriteWord)); - section_write_word(ios_elf_start, 0xE600CF5C, ARM_B(0xE600CF5C, EEPROM_WriteControl)); -} diff --git a/ios_kernel/source/ios_bsp_patches.h b/ios_kernel/source/ios_bsp_patches.h deleted file mode 100644 index 02c2b0a..0000000 --- a/ios_kernel/source/ios_bsp_patches.h +++ /dev/null @@ -1,31 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#ifndef _BSP_PATCHES_H_ -#define _BSP_PATCHES_H_ - -u32 bsp_get_phys_code_base(void); -void bsp_run_patches(u32 ios_elf_start); -int bsp_init_seeprom_buffer(u32 baseSector, int dumpFound); - -#endif diff --git a/ios_kernel/source/ios_fs_patches.c b/ios_kernel/source/ios_fs_patches.c deleted file mode 100644 index 53f9ffd..0000000 --- a/ios_kernel/source/ios_fs_patches.c +++ /dev/null @@ -1,102 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#include "types.h" -#include "elf_patcher.h" -#include "ios_fs_patches.h" -#include "config.h" -#include "../../ios_fs/ios_fs_syms.h" - -#define FS_PHYS_DIFF 0 - -#define FS_SYSLOG_OUTPUT 0x107F0C84 -#define FS_PRINTF_SYSLOG 0x107F5720 -#define CALL_FS_REGISTERMDPHYSICALDEVICE 0x107BD81C -#define FS_GETMDDEVICEBYID 0x107187C4 -#define FS_CREATEDEVTHREAD_HOOK 0x10700294 -#define FS_USB_READ 0x1077F1C0 -#define FS_USB_WRITE 0x1077F35C -#define FS_SLC_READ1 0x107B998C -#define FS_SLC_READ2 0x107B98FC -#define FS_SLC_WRITE1 0x107B9870 -#define FS_SLC_WRITE2 0x107B97E4 -#define FS_MLC_READ1 0x107DC760 -#define FS_MLC_READ2 0x107DCDE4 -#define FS_MLC_WRITE1 0x107DC0C0 -#define FS_MLC_WRITE2 0x107DC73C -#define FS_SDCARD_READ1 0x107BDDD0 -#define FS_SDCARD_WRITE1 0x107BDD60 - -extern const patch_table_t fs_patches_table[]; -extern const patch_table_t fs_patches_table_end[]; - -u32 fs_get_phys_code_base(void) -{ - return _text_start + FS_PHYS_DIFF; -} - -void fs_run_patches(u32 ios_elf_start) -{ - // write wupserver code and bss - section_write(ios_elf_start, _text_start, (void*)fs_get_phys_code_base(), _text_end - _text_start); - section_write_bss(ios_elf_start, _bss_start, _bss_end - _bss_start); - - // patch FS logging - section_write_word(ios_elf_start, FS_PRINTF_SYSLOG, ARM_B(FS_PRINTF_SYSLOG, FS_SYSLOG_OUTPUT)); - - if(cfw_config.redNAND) - { - section_write_word(ios_elf_start, CALL_FS_REGISTERMDPHYSICALDEVICE, ARM_BL(CALL_FS_REGISTERMDPHYSICALDEVICE, registerMdDevice_hook)); - section_write_word(ios_elf_start, FS_GETMDDEVICEBYID + 8, ARM_BL((FS_GETMDDEVICEBYID + 8), getMdDeviceById_hook)); - - section_write_word(ios_elf_start, FS_SDCARD_READ1, ARM_B(FS_SDCARD_READ1, sdcardRead_patch)); - section_write_word(ios_elf_start, FS_SDCARD_WRITE1, ARM_B(FS_SDCARD_WRITE1, sdcardWrite_patch)); - - section_write_word(ios_elf_start, FS_SLC_READ1, ARM_B(FS_SLC_READ1, slcRead1_patch)); - section_write_word(ios_elf_start, FS_SLC_READ2, ARM_B(FS_SLC_READ2, slcRead2_patch)); - section_write_word(ios_elf_start, FS_SLC_WRITE1, ARM_B(FS_SLC_WRITE1, slcWrite1_patch)); - section_write_word(ios_elf_start, FS_SLC_WRITE2, ARM_B(FS_SLC_WRITE2, slcWrite2_patch)); - - //section_write_word(ios_elf_start, FS_USB_READ, ARM_B(FS_USB_READ, usbRead_patch)); - //section_write_word(ios_elf_start, FS_USB_WRITE, ARM_B(FS_USB_WRITE, usbWrite_patch)); - } - - //section_write_word(ios_elf_start, 0x1070F87C, ARM_BL(0x1070F87C, FSA_AttachVolume_FillDescription_hook)); - //section_write_word(ios_elf_start, 0x10700EFC, ARM_BL(0x10700EFC, FSA_AsyncCommandCallback_hook)); - // patch mounting FAT and allow all devices instead of only SD card - //section_write_word(ios_elf_start, 0x1078E074, 0xEA000002); - // patch FSA_MakeQuota to not store command -> command is modified depending on wether it is USB FAT or not - //section_write_word(ios_elf_start, 0x1070BE0C, 0xE1A00000); - //section_write_word(ios_elf_start, 0x1070BE00, ARM_BL(0x1070BE00, FSA_MakeQuota_asm_hook)); - - section_write_word(ios_elf_start, FS_CREATEDEVTHREAD_HOOK, ARM_B(FS_CREATEDEVTHREAD_HOOK, createDevThread_hook)); - - u32 patch_count = (u32)(((u8*)fs_patches_table_end) - ((u8*)fs_patches_table)) / sizeof(patch_table_t); - patch_table_entries(ios_elf_start, fs_patches_table, patch_count); - - //section_write_word(ios_elf_start, 0x10701F6C, ARM_BL(0x10701F6C, FSMakeQuota)); - //section_write_word(ios_elf_start, 0x10702764, ARM_BL(0x10702764, FSCreateDir)); - //section_write_word(ios_elf_start, 0x1070278C, ARM_BL(0x1070278C, FSChangeDir)); - //section_write_word(ios_elf_start, 0x107024B4, ARM_BL(0x107024B4, FSOpenFile)); - //section_write_word(ios_elf_start, 0x10703F4C, ARM_BL(0x10703F4C, FSWriteFileIssueCommand)); -} diff --git a/ios_kernel/source/ios_fs_patches.h b/ios_kernel/source/ios_fs_patches.h deleted file mode 100644 index b3e71c6..0000000 --- a/ios_kernel/source/ios_fs_patches.h +++ /dev/null @@ -1,30 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#ifndef _FS_PATCHES_H_ -#define _FS_PATCHES_H_ - -u32 fs_get_phys_code_base(void); -void fs_run_patches(u32 ios_elf_start); - -#endif diff --git a/ios_kernel/source/ios_fs_patches_asm.s b/ios_kernel/source/ios_fs_patches_asm.s deleted file mode 100644 index 83c2d0b..0000000 --- a/ios_kernel/source/ios_fs_patches_asm.s +++ /dev/null @@ -1,40 +0,0 @@ -.arm - -# patch out sdcard deinitialization -patch_mdExit: - bx lr - -# patch out FSRawOpen access -patch_FSRawOpen: - streq r2, [r1, #0x70] - .word 0xEAFFFFF9 - -# nop out hmac memcmp -patch_hmac_check: - mov r0, #0 - -# null out references to slcSomething1 and slcSomething2 -# (nulling them out is apparently ok; more importantly, i'm not sure what they do and would rather get a crash than unwanted slc-writing) -slcSomething1: - .word 0x00000000 -slcSomething2: - .word 0x00000000 - -#syslogOutput_hook: -# push {r0,lr} -# bl dump_syslog -# pop {r0,lr} -# restore original instruction -# pop {r4-r8,r10,pc} - - -.globl fs_patches_table, fs_patches_table_end -fs_patches_table: -# origin data size - .word 0x107BD374, patch_mdExit, 4 - .word 0x1070FAE8, patch_FSRawOpen, 8 - .word 0x107B96B8, slcSomething1, 8 - .word 0x107206F0, patch_hmac_check, 4 -# .word 0x107F0B68, syslogOutput_hook, 4 -fs_patches_table_end: - diff --git a/ios_kernel/source/ios_mcp_patches.c b/ios_kernel/source/ios_mcp_patches.c index 5eb518b..3f8a220 100644 --- a/ios_kernel/source/ios_mcp_patches.c +++ b/ios_kernel/source/ios_mcp_patches.c @@ -23,7 +23,6 @@ ***************************************************************************/ #include "types.h" #include "elf_patcher.h" -#include "config.h" #include "ios_mcp_patches.h" #include "../../ios_mcp/ios_mcp.bin.h" #include "../../ios_mcp/ios_mcp_syms.h" @@ -45,12 +44,8 @@ void mcp_run_patches(u32 ios_elf_start) section_write(ios_elf_start, _text_start, (void*)mcp_get_phys_code_base(), _text_end - _text_start); section_write_word(ios_elf_start, 0x05056718, ARM_BL(0x05056718, _text_start)); - - if(cfw_config.syshaxXml) - { - section_write(ios_elf_start, 0x050600DC, "/vol/system/config/syshax.xml", 0x20); - section_write(ios_elf_start, 0x050600FC, "/vol/system_slc/config/syshax.xml", 0x24); - } + + section_write_word(ios_elf_start, 0x05002BBE, THUMB_BL(0x05002BBE, patch_SD_access_check)); u32 patch_count = (u32)(((u8*)mcp_patches_table_end) - ((u8*)mcp_patches_table)) / sizeof(patch_table_t); patch_table_entries(ios_elf_start, mcp_patches_table, patch_count); diff --git a/ios_kernel/source/kernel_patches.c b/ios_kernel/source/kernel_patches.c index 2479af7..b094a8a 100644 --- a/ios_kernel/source/kernel_patches.c +++ b/ios_kernel/source/kernel_patches.c @@ -25,13 +25,9 @@ #include "../../common/kernel_commands.h" #include "elf_patcher.h" #include "ios_mcp_patches.h" -#include "ios_acp_patches.h" -#include "ios_fs_patches.h" -#include "ios_bsp_patches.h" #include "kernel_patches.h" #include "exception_handler.h" #include "fsa.h" -#include "config.h" #include "utils.h" extern void __KERNEL_CODE_START(void); @@ -40,8 +36,6 @@ extern void __KERNEL_CODE_END(void); extern const patch_table_t kernel_patches_table[]; extern const patch_table_t kernel_patches_table_end[]; -static u8 otp_buffer[0x400]; - static const u32 mcpIoMappings_patch[] = { // vaddr paddr size ? ? ? @@ -76,44 +70,12 @@ static int kernel_syscall_0x81(u32 command, u32 arg1, u32 arg2, u32 arg3) kernel_memcpy((void*)arg1, (void*) arg2, arg3); break; } - case KERNEL_GET_CFW_CONFIG: - { - //set_domain_register(0xFFFFFFFF); - kernel_memcpy((void*)arg1, &cfw_config, sizeof(cfw_config)); - break; - } default: return -1; } return 0; } -static int kernel_read_otp_internal(int index, void* out_buf, u32 size) -{ - kernel_memcpy(out_buf, otp_buffer + (index << 2), size); - return 0; -} - -int kernel_init_otp_buffer(u32 sd_sector, int dumpFound) -{ - int res; - - if(dumpFound) - { - res = FSA_SDReadRawSectors(otp_buffer, sd_sector, 2); - } - else - { - int (*orig_kernel_read_otp_internal)(int index, void* out_buf, u32 size) = (void*)0x08120248; - res = orig_kernel_read_otp_internal(0, otp_buffer, 0x400); - } - - if((res == 0) && (dumpFound == 0)) - { - FSA_SDWriteRawSectors(otp_buffer, sd_sector, 2); - } - return res; -} void kernel_launch_ios(u32 launch_address, u32 L, u32 C, u32 H) { @@ -128,12 +90,7 @@ void kernel_launch_ios(u32 launch_address, u32 L, u32 C, u32 H) //! try to keep the order of virt. addresses to reduce the memmove amount mcp_run_patches(ios_elf_start); - kernel_run_patches(ios_elf_start); - fs_run_patches(ios_elf_start); - //acp_run_patches(ios_elf_start); - - if(cfw_config.redNAND && cfw_config.seeprom_red) - bsp_run_patches(ios_elf_start); + kernel_run_patches(ios_elf_start); restore_mmu(control_register); enable_interrupts(level); @@ -155,12 +112,6 @@ void kernel_run_patches(u32 ios_elf_start) section_write_word(ios_elf_start, 0x0812CD2C, ARM_B(0x0812CD2C, kernel_syscall_0x81)); - if(cfw_config.redNAND && cfw_config.otp_red) - { - section_write(ios_elf_start, (u32)otp_buffer, otp_buffer, 0x400); - section_write_word(ios_elf_start, 0x08120248, ARM_B(0x08120248, kernel_read_otp_internal)); - } - u32 patch_count = (u32)(((u8*)kernel_patches_table_end) - ((u8*)kernel_patches_table)) / sizeof(patch_table_t); patch_table_entries(ios_elf_start, kernel_patches_table, patch_count); } diff --git a/ios_kernel/source/main.c b/ios_kernel/source/main.c index b08a605..c344e11 100644 --- a/ios_kernel/source/main.c +++ b/ios_kernel/source/main.c @@ -22,19 +22,11 @@ * distribution. ***************************************************************************/ #include "types.h" -#include "config.h" #include "utils.h" -#include "redirection_setup.h" #include "ios_mcp_patches.h" -#include "ios_acp_patches.h" -#include "ios_fs_patches.h" -#include "ios_bsp_patches.h" #include "instant_patches.h" #define USB_PHYS_CODE_BASE 0x101312D0 - -cfw_config_t cfw_config; - typedef struct { u32 size; @@ -91,34 +83,15 @@ int _main() void * pusb_root_thread = (void*)0x10100174; kernel_memcpy(pusb_root_thread, (void*)repairData_usb_root_thread, sizeof(repairData_usb_root_thread)); - + payload_info_t *payloads = (payload_info_t*)0x00148000; - kernel_memcpy((void*)&cfw_config, payloads->data, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - kernel_memcpy((void*)USB_PHYS_CODE_BASE, payloads->data, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - - kernel_memcpy((void*)fs_get_phys_code_base(), payloads->data, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - - if(cfw_config.redNAND && cfw_config.seeprom_red) - kernel_memcpy((void*)bsp_get_phys_code_base(), payloads->data, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - - kernel_memcpy((void*)acp_get_phys_code_base(), payloads->data, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); + payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); kernel_memcpy((void*)mcp_get_phys_code_base(), payloads->data, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - - if(cfw_config.launchImage) - { - kernel_memcpy((void*)MCP_LAUNCH_IMG_PHYS_ADDR, payloads->data, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - } - + payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); + // run all instant patches as necessary instant_patches_setup(); @@ -132,10 +105,5 @@ int _main() enable_interrupts(level); - if(cfw_config.redNAND) - { - redirection_setup(); - } - return 0; } diff --git a/ios_kernel/source/redirection_setup.c b/ios_kernel/source/redirection_setup.c deleted file mode 100644 index b8ece68..0000000 --- a/ios_kernel/source/redirection_setup.c +++ /dev/null @@ -1,92 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#include "config.h" -#include "utils.h" -#include "fsa.h" -#include "kernel_patches.h" -#include "ios_bsp_patches.h" - -void redirection_setup(void) -{ - int seepromDumpFound = 0; - u32 seepromDumpBaseSector = 0x4FF; - int otpDumpFound = 0; - u32 otpDumpBaseSector = 0x4FD; - int writeInfoSector = 0; - sdio_nand_signature_sector_t *infoSector = (sdio_nand_signature_sector_t*)0x00141000; - kernel_memset(infoSector, 0x00, 0x200); - - int result = FSA_SDReadRawSectors(infoSector, NAND_DUMP_SIGNATURE_SECTOR, 1); - if(result < 0) - return; - - if(infoSector->signature == NAND_DUMP_SIGNATURE) - { - int i; - for(i = 0; i < NAND_MAX_DESC_TYPES; i++) - { - if(infoSector->nand_descriptions[i].nand_type == NAND_DESC_TYPE_SEEPROM) - { - seepromDumpFound = 1; - seepromDumpBaseSector = infoSector->nand_descriptions[i].base_sector; - } - if(infoSector->nand_descriptions[i].nand_type == NAND_DESC_TYPE_OTP) - { - otpDumpFound = 1; - otpDumpBaseSector = infoSector->nand_descriptions[i].base_sector; - } - } - } - - if(cfw_config.seeprom_red) - { - bsp_init_seeprom_buffer(seepromDumpBaseSector, seepromDumpFound); - - if(seepromDumpFound == 0) - { - infoSector->nand_descriptions[3].nand_type = NAND_DESC_TYPE_SEEPROM; - infoSector->nand_descriptions[3].base_sector = seepromDumpBaseSector; - infoSector->nand_descriptions[3].sector_count = 1; - writeInfoSector++; - } - } - - if(cfw_config.otp_red) - { - kernel_init_otp_buffer(otpDumpBaseSector, otpDumpFound); - - if(otpDumpFound == 0) - { - infoSector->nand_descriptions[4].nand_type = NAND_DESC_TYPE_OTP; - infoSector->nand_descriptions[4].base_sector = otpDumpBaseSector; - infoSector->nand_descriptions[4].sector_count = 2; - writeInfoSector++; - } - } - - if(writeInfoSector > 0) - { - FSA_SDWriteRawSectors(infoSector, NAND_DUMP_SIGNATURE_SECTOR, 1); - } -} diff --git a/ios_kernel/source/redirection_setup.h b/ios_kernel/source/redirection_setup.h deleted file mode 100644 index ffe175f..0000000 --- a/ios_kernel/source/redirection_setup.h +++ /dev/null @@ -1,29 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#ifndef _REDIRECTION_SETUP_H_ -#define _REDIRECTION_SETUP_H_ - -void redirection_setup(void); - -#endif diff --git a/ios_mcp/Makefile b/ios_mcp/Makefile index 7eee27f..fb2f547 100644 --- a/ios_mcp/Makefile +++ b/ios_mcp/Makefile @@ -6,6 +6,8 @@ ifeq ($(filter $(DEVKITARM)/bin,$(PATH)),) export PATH:=$(DEVKITARM)/bin:$(PATH) endif +LOG_IP = 0xc0a800ea + ifneq ($(LOG_IP),) CFLAGS += -DLOG_IP=$(LOG_IP) endif diff --git a/ios_mcp/source/logger.c b/ios_mcp/source/logger.c index 6cdb417..65e17b4 100644 --- a/ios_mcp/source/logger.c +++ b/ios_mcp/source/logger.c @@ -8,11 +8,11 @@ #ifdef LOG_IP static int log_socket = 0; -int log_init(unsigned int ipAddress) -{ +int log_init(unsigned int ipAddress){ log_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); - if (log_socket < 0) + if (log_socket < 0){ return log_socket; + } struct sockaddr_in connect_addr; memset(&connect_addr, 0, sizeof(connect_addr)); @@ -40,6 +40,9 @@ void log_deinit() static void log_print(const char *str, int len) { + if(log_socket < 0) { + return; + } int ret; while (len > 0) { int block = len < 1400 ? len : 1400; // take max 1400 bytes per UDP packet diff --git a/ios_mcp/source/main.c b/ios_mcp/source/main.c index 60d6f36..6493bac 100644 --- a/ios_mcp/source/main.c +++ b/ios_mcp/source/main.c @@ -5,7 +5,6 @@ #include "ipc.h" #include "svc.h" #include "text.h" -#include "../../common/config_types.h" #include "../../common/kernel_commands.h" static int threadsStarted = 0; @@ -15,17 +14,23 @@ int _startMainThread(void) if(threadsStarted == 0) { threadsStarted = 1; - cfw_config_t cfw_config; - memset(&cfw_config, 0, sizeof(cfw_config)); - svcCustomKernelCommand(KERNEL_GET_CFW_CONFIG, &cfw_config); - - if(cfw_config.launchImage) - { - drawSplashScreen(); - } - + wupserver_init(); ipc_init(); } return 0; } + +void patch_SD_access_check(void) { + __asm__ volatile( + ".thumb\n" + //clobbered instructions + "add r0, r7, r2\n" + //app.permissions.r2.mask seems to be 0xFFFFFFFFFFFFFFFF for every application + "ldr r1, =0x32\n" + "sub r3, r3, #7\n" + "strb r1, [r3]\n" + //this instruction was also clobbered but we use r1 so we do it after our patch stuff + "movs r1, #0\n" + "bx lr"); +} \ No newline at end of file diff --git a/ios_mcp/source/mcp_loadfile.c b/ios_mcp/source/mcp_loadfile.c index 7a64c5f..58c9aea 100644 --- a/ios_mcp/source/mcp_loadfile.c +++ b/ios_mcp/source/mcp_loadfile.c @@ -18,6 +18,8 @@ #include "logger.h" #include "ipc_types.h" +#include "fsa.h" +#include "svc.h" #include typedef enum { @@ -53,7 +55,7 @@ int (*const MCP_DoLoadFile)(const char* path, const char* path2, void* outputBuf int (*const MCP_UnknownStuff)(const char* path, u32 pos, void* outputBuffer, u32 outLength, u32 outLength2, u32 unk) = (void*)0x05014CAC + 1; static int MCP_LoadCustomFile(char* path, ipcmessage* msg, MCPLoadFileRequest* request); -static bool replacerpx = false; +static bool skipPPCSetup = false; static bool didrpxfirstchunk = false; static char rpxpath[0x280]; @@ -74,11 +76,11 @@ int _MCP_LoadFile_patch(ipcmessage* msg) { log("msg->ioctl.buffer_io = %p, msg->ioctl.length_io = 0x%X\n", msg->ioctl.buffer_io, msg->ioctl.length_io); log("request->type = %d, request->pos = %d, request->name = \"%s\"\n", request->type, request->pos, request->name); - if (request->type == LOAD_FILE_CAFE_OS && + /*if (request->type == LOAD_FILE_CAFE_OS && request->name[0] == '*') { char path[0x40]; - /* Translate request->name to a path by replacing * with / */ + // Translate request->name to a path by replacing * with / for (int i = 0; i < 0x40; ++i) { if (request->name[i] == '*') { path[i] = '/'; @@ -89,46 +91,101 @@ int _MCP_LoadFile_patch(ipcmessage* msg) { int result = MCP_LoadCustomFile(path, msg, request); if (result >= 0) return result; - } else if (replacerpx) { + }*/ /* RPX replacement! - Only replace this chunk if: - - replacerpx is true (replace the next rpx to be loaded) - - this file is an rpx - and either of the following: - - we haven't read the first chunk yet - - this is not the first chunk - + The goal here is only to replace an rpx once. Reading at pos = 0 signifies a new rpx load - these conditions detect that. */ - char* extension = request->name + strlen(request->name) - 3; - if (extension[0] == 'r' && - extension[1] == 'p' && - extension[2] == 'x') { + + if (request->name[0] == 'm' && + request->name[1] == 'e' && + request->name[2] == 'n' && + request->name[3] == '.' && + request->name[4] == 'r' && + request->name[5] == 'p' && + request->name[6] == 'x' + && rpxpath[0] != 'd' + && !skipPPCSetup){ + int fsa_h = svcOpen("/dev/fsa", 0); + FSA_Unmount(fsa_h, "/vol/storage_iosu_homebrew", 2); + FSA_Mount(fsa_h, "/dev/sdcard01", "/vol/storage_iosu_homebrew", 2, NULL, 0); + svcClose(fsa_h); + + char * f_path = "/vol/storage_iosu_homebrew/wiiu/payload.rpx";; + + int result = MCP_LoadCustomFile(f_path, msg, request); + + if (result >= 0) { + return result; + } + }else if (request->name[0] == 's' && + request->name[1] == 'a' && + request->name[2] == 'f' && + request->name[3] == 'e' && + request->name[4] == '.' && + request->name[5] == 'r' && + request->name[6] == 'p' && + request->name[7] == 'x'){ + + char * final_path = rpxpath; + + if(rpxpath[0] == '\0') { + final_path = "/vol/storage_iosu_homebrew/wiiu/apps/homebrew_launcher/homebrew_launcher.rpx"; + if (request->pos == 0){ + didrpxfirstchunk = false; + } + } - if (!didrpxfirstchunk || request->pos > 0) { - int result = MCP_LoadCustomFile(rpxpath, msg, request); - if (result >= 0) { - if (request->pos == 0) didrpxfirstchunk = true; - return result; + char* extension = request->name + strlen(request->name) - 4; + if( extension[0] == '.' && + extension[1] == 'r' && + extension[2] == 'p' && + extension[3] == 'x') { + if(final_path != NULL){ + if (!didrpxfirstchunk || request->pos > 0) { + int fsa_h = svcOpen("/dev/fsa", 0); + FSA_Unmount(fsa_h, "/vol/storage_iosu_homebrew", 2); + FSA_Mount(fsa_h, "/dev/sdcard01", "/vol/storage_iosu_homebrew", 2, NULL, 0); + svcClose(fsa_h); + + int result = MCP_LoadCustomFile(final_path, msg, request); + + rpxpath[0] = '\0'; + if (result >= 0) { + if (request->pos == 0) didrpxfirstchunk = true; + return result; + } } - } else { - /* This is the second time reading the first chunk of an rpx. - Therefore we have already replaced the rpx we were asked to. */ - replacerpx = false; } } } - + if (rpxpath[0] == 'd' && + rpxpath[1] == 'o' && + rpxpath[2] == 'n' && + rpxpath[3] == 'e'){ + skipPPCSetup = true; + rpxpath[0] = '\0'; + } + + return real_MCP_LoadFile(msg); } static int MCP_LoadCustomFile(char* path, ipcmessage* msg, MCPLoadFileRequest* request) { log("Load custom path \"%s\"\n", path); - -/* TODO: If this fails, try last argument as 1 */ + + int filesize = 0; + int fileoffset = 0; + + if(filesize > 0 && (request->pos + fileoffset > filesize)){ + return 0; + } + + /* TODO: If this fails, try last argument as 1 */ int bytesRead = 0; - int result = MCP_DoLoadFile(path, NULL, msg->ioctl.buffer_io, msg->ioctl.length_io, request->pos, &bytesRead, 0); - log("MCP_DoLoadFile returned %d, bytesRead = %d\n", result, bytesRead); + int result = MCP_DoLoadFile(path, NULL, msg->ioctl.buffer_io, msg->ioctl.length_io, request->pos + fileoffset, &bytesRead, 0); + log("MCP_DoLoadFile returned %d, bytesRead = %d pos %d \n", result, bytesRead, request->pos + fileoffset); + if (result >= 0) { if (!bytesRead) { @@ -136,10 +193,13 @@ static int MCP_LoadCustomFile(char* path, ipcmessage* msg, MCPLoadFileRequest* r } /* TODO: If this fails, try last argument as 1 */ - result = MCP_UnknownStuff(path, request->pos, msg->ioctl.buffer_io, msg->ioctl.length_io, msg->ioctl.length_io, 0); + result = MCP_UnknownStuff(path, request->pos + fileoffset, msg->ioctl.buffer_io, msg->ioctl.length_io, msg->ioctl.length_io, 0); log("MCP_UnknownStuff returned %d\n", result); if (result >= 0) { + if(filesize > 0 && (bytesRead + request->pos > filesize)){ + return filesize - request->pos; + } return bytesRead; } } @@ -157,11 +217,11 @@ int _MCP_ioctl100_patch(ipcmessage* msg) { FAIL_ON(!msg->ioctl.buffer_in, 0); FAIL_ON(!msg->ioctl.length_in, 0); FAIL_ON(msg->ioctl.length_in > sizeof(rpxpath) - 1, msg->ioctl.length_in); + + memset(rpxpath,0,sizeof(rpxpath)); + strncpy(rpxpath, (const char*)msg->ioctl.buffer_in, msg->ioctl.length_in); + //rpxpath[strlen(rpxpath)] = '\0'; - strncpy(rpxpath, (const char*)msg->ioctl.buffer_in, sizeof(rpxpath) - 1); - rpxpath[sizeof(rpxpath) - 1] = '\0'; - - replacerpx = true; didrpxfirstchunk = false; log("Will load %s for next title\n", rpxpath); diff --git a/libs/libc.a b/libs/libc.a deleted file mode 100644 index 10cb849cece0e7d380eadc54dd496eb95f1275a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909796 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≫fs7D$(S@Ar}6*aF^10#W$|Np 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

Ne-ilJg8v1~NT1gNhT!-7Tf_}e!{30J zK|f>M=b5#DZ0eeY*DPAH$m_h`OcQ#YSODO3A!hoo->|Kl+mbeK@9A6DW$y0a%|M-< zy^C(a|He(JTkMXco~>%yWL)TBQ?`es*{ye6LlnlI-i@0!&|n^N0O;DZVFS?ZJz4zU zvIysAI=hU2^SnZ57xzYWc5dV4i-2N@z;I}W)03FdytOq2m-Sn-cS%atZMmxxH#H(~ zL(#Ws%UyllTexe=THLbf);ioEETd)6Ezm3N9w_eBvTxRJhU#39jH4a*QlEgDf(lP0I8{Q=3gYix}i*7H%ZJK52nMOxt`nBj3gz`67JJ0z$brVB5MaU2W}{>Hc8 z0Q8;F-yP)mpfm!l3He>H&i*#7ORYBfvwx^}Mmc?&_+i-MdzwB4g&gUcpyxvq*Y;{R z%wc5&A}pLfjW-%y3bgb?NJYB2#$^BKM(wUkeFb*vhm;zx(^v8S9Bwy|K$OxEf^StB zIZ^<|z6tZm{3Zq0yaJ8);ja~1m4>Id!mvHf46j2R!)`1{7Z1f}3R=IB@eW5*{Ut2= zXWu~k8rl}4$+C)>fZ{%rdC)0o%lI9QGVZpm>fCHOmTgmK*H(*oVp(?%(t3q#Fzs^y zv;`Wn$l$94M}DX3x^nNPUpB`F$6Qxls>@xGWPx{f1X;lI4;VitIR{|m0pvgv$Aw7O zd3?Uz3rzm(pVk?duY2G;3z~IY>m|)DUx#G`oNIN|%sA_%u zT3IFOVEI^=pnLiHbtgFwJv!U#+&*kaF5k2{i;eU=HBH|L!tgKa2l*NKniA&UNc+*- z$Myb~Khx#k%8iH>9gXTV%*$bY4;gN(91DERna8Tr&~7L3t^?+Rr!V&s<%|S{()KZs{{(e_F?lx@ify%WyiVT*^#-^ z(3t)-OzqI*$uyz#uX}O#L2r~Z`K{Nq$z{?}&WQMj>v+?c{|S?jtlW{UD zy-#&--n#9sz=%2XoIt?h+0=`N26}_}y_|!3SG4_hzH%W>F|{si^A=8km@xZ?Sxr%&sV{Z%$vJVL#l-v*Z){C*4SWftO$(R>~8uoEVKx<-{Thgmm*l0Ww~O`7wbi zPhJN;k~~?Nt>bH-d+*c_j5WS?RPCzOR z&tk*>VSAdH-$0y+Q)_vsyY@xYJsqN_|4axcO;-q~`<@U^_kj>j_k0K!qbXFfKHXIr zQJ@HfDZ{EM;P?$IAYs3B)H-R1fKxtGQ|VYGY0+ArM*CAnh{KI?Zyxk)=>uKk(0?3w z8d}5ql;h5C-UYot{NLiZ-v*rJGt;;a_o3`bLH3+za{5csp)xYKCcq5_LgSdlT$~u_ zce6Tf*p%J2X-nS*&)V3;pbX4>81v5j21pL;WXjHi)#N|wg|SC}n)5*3T4>T|#Qsh+ zakS5gzuhp?9ra-y+}OE00H`L!C0=6H<|Gt})p^hDZHw8k;S2(icK& zMlAOvn3TFSway6+z z#E~w>CxSV5Joe$%YnR9cO99nbbE}J&UOSHam>SznMp`ir249E|0l`=B>MuZ8Y_ zUIE<>jeNzBFCXFZytjY%JEZqu51`qPeL4EGX1~V0*hhSDd0Q!O`q^2Ibva*+y+pkG z=U>HKg!!MvoRIrky(!rDZ0t^STxDTu0rpbxKJ*`956uudHvb*ai{~>Rnvu_3%{UC* z!JD4JJbH|2AztnX7}iU0kDFh3^d128`-<~+>%D<~)K zx1n9R1Dm>rhJFqBLW^hEp}ewuUm9Z^>@7VwErb1arYyl**bjvL*f^MD!aI0l+Kg`= zvGbR>*Oq>9uhO(s^v+C$!8XV z<`a-#Y&)r1pfk`Z=r(A!v8$k)p;tq%fnEkpwE{Zm-oE~mHyIR{G2eXkbvG}+!OTOz z{u4-s2e_OE!EU(u(>x#Jef;N^d%v`<)41KXwbS_h<&B+&Mm;YFUB{`aXtEzdz|UUe*EnSwu@Lr7*lMW3+#y zqq{Q}Z9uy*VjsyFi#BkN0pn1m>2t=S4L<|{tAZ+}BV<2a)TFaW4zwAIUJS_eC83?U zt;t2$VLw7mX?QgY*ML4w9Sv~JyOPqKb~D9-ICSj|IdM-s6>=9N+7`P`MgOYUwFu)h z>sT;>z=*S)2o;CXDujpMumUpD*pl@MD)Fj}^*(6vTAvK-r3^7%XhYQ8#_^%PfJj1qK4=2?U=TI(&ZvQv%xrwhKf%VBFIJR|s4waFxIgfvW|A zmyN%*0y6?ppN#!Rfjt7V0{aBsDe!KAIf4BGcMIGja6sUGfnOAOKww_rA%TYlJ|S>W z;FAKM5_m*lLEv$L&j@^8;0b{z1->Nkl)$3E(*n;3d_~|{fv*aDP2lSm8c~Dq>L&zm z64)#-DR8F1SpsJZ3|O$KWk? zKUD(ZbH7#s;j^3*Il&Pw%QbOG=uy6tP_Gh4PzHnr!H)|>e8&BGfhPo>6!?4IN65KK6<#ine zed-pw=7O^>d9Lf&vBYTf9@Y7~Cu)t!pZ!aS+3BOkpMX8;+nDon;Hf%AVMgWjQEPMb z))h=Hh7=&pgj5V~t})p^BOGCL=jS5!Jw5h4&3Hz_)OZQO6RKk16|VrzzGf3N%Oxo| zx?if|cf!=F7@&q1vNFc7J(~ z_F?lx@v(k4oo8>>L@|rxfL+hfb+oK&cM8Ljr-3o{dx}fpcMn&e}MZY z@xJW<&d}NOz*9>vw4UM|EzS@pzV&cn*0*rK-gl{AD9rlyu7dadV+DJzZwJmmB3#}R zS=|vdU&XV=A-`w1kcX+eRJ$-rHPq7R5!`NqqbK0f+w4l0+{Q%7KVxGD5 zf`1BUw3{j&o_93gI=8xma>KfTzPX4zV2}RLq|S)-Fx=Pvd;HSHT%! zALpr2J|E*<{rmE%^do=|pf+Is4`(zpOz%{_S77D}JG@5RXJFn}Lm1c6fA!!|%)w#~ z81tjmgL8N`@O_n{3EQhaoAJ){$MB8-?g;450A^-YkLPAr?@dEzg6h46dDVNpmg>F9 z1*LBVM@rvH{ZEwftm-3}r`+|C80KiZ5Pw7Mp3a+_{9Sl=>RzM~<@Pk9CXpA|#ubAGqTUhyd@wrp(=|s1wa7>tyb}O#A`JxYEfvrQ`XSnU^~m0sJiPS9(zAxLH3}(Cz%~uP5#{ z`LllsF+2VB$@^jd4D=Z7dSX!gEAYkOwCkhNr9e+VgiwZVt~Hx~x=}mrdg4XciJuxB z4V(jw8yoZ2K=Td5xCx6W!wmJ;8!;yJPrz<6bP}57LP$ImUK7VLe+8|I;f$oh_B2a5 z`w2u!{2~C@`GbPDAUTI5AiAUcI4|HY5cg}~{v_;I3l18C(+lb0Ke3hw6me*d=Z#W# zjy0%=*Az16;-UPS%uCv>7dV<`S_1&y2s7vWjbfoeecS>W51{RF@LL>wyMzB%2jA`B zzwY2)Kz`d`r*{t?2EHtW{}13RfX|+8^ZTsh|9eti)*byK^S*EQZQa{E>^JJ(wq;$9 zeK(8teVDf8u7i2z+~FPDHi3X1*7t1fg$aicH{jTy>~a#Eleo8au3P`P?VE7@x*@Sv zc*U=KT`#OSwalTC%n8HDAaSVCBn2Cy%)4FT_^r(yVXJzYx{FbIIU<2`So zsS3dT6u#VSK$IEhqWqkNsC|Y$)+I1&=ZIpcTik;c>$h`Lu>rCFqSzlowSi~8r^dOX z82G4>uqbnLugRQN!iF2q$efm>EB=b5O9Xa~j&=QV_)j3-%Vmy;`7_(>$K2O(;q7I! zmW!gUDU|_~pERosAWwyr(!Cd!P0(Y}p-!0aP@jxqcyq-}!0@Q&qatZowEqQY^+R0a zB@ENu4;-?wrVO3ko0sk0wry*qa~G|P7L8|*cea7i*^<$HK1rUvz&$1y5177otoj1_ z!|1nMX6}%|o(1&l&{y)yawlG;gZ;i_GuQCphC9tYbGIDsB&of5Tgs!a4L94*Nj6sx z+Vy($YktHep#OsSY`+F}W-s?g0yw-2<|N*sz1n+N4x%VKsGPn`q91lEq1l$RevpoJ zcfR0Sp9;XkO6#1{m+=Z=BAAtq^_AvD;$8sMG|`G?x;yLR-f`HC#1qc?xc4&XM&b#l z&*PIf*FdY%^bta4s*1NDIRP+qxy^nKrY{NY^m!62yJgU-G(5!>hV5x)czxnXoEq}l zD0SZ*!o_G9oGeEFstn61f)7UjH3eM1p|JxJ_De_hQECeKBp}pOcS@gtJd8We(IzA-3!6Hc%qLydk?C&!zBxy=MvPT55!ug4m$!M7dwY zbl@BCy%aO=h41ENU{Ab9Aj+BTtJjZDNqUs)G-(&@j_F8eT~evG=<_xHiaI%H)=s>O zs(3e=a{3VV%}`%GO1B2gX``c4S-pINVqtnxK`Z zXm(}WVc3P0@{cRqMx#T0G~p9ck*>xMFf%-AXPo9e2RroxqoE;mWR~}1*xf(}QJOx& zkj&!#SR;QaqnJUw@-^qnx_FWlX6D2({eOr%IzC!W;qz)oJ$Q*G?Wwk1})HQ1&7=)IP$7% zD%svmw_=zRVNIpAbzEoSdg|na-51?nzA=rtp@5A~O!wZRuQUa6po8pJoKLd7A`bzUaSA=F?iJIw4LOXINLHnzrRcXA6D-7GyOn-gi z7l`B_VdUzRDK*D~<>I>yW?p&-PFq2U4v%qE=<~en^?dymD;Z`#%O3=fx zr?niR1iuR)cPN*Z;jdlyw5~aFCB6p~ z{JxYWTHk4QS9^C9?ed@8WmPv3OiRGV4vs)57<-6N~*1yOySINb^rRzaNtCc7fmP<|Yik z|E#GW_OFh2N3nk=`F*zVGv&8Y!tYlCnGLP`NU)S_)kyqqA8_gJ5{8$Dn7X@^{f8~i z=@=k5!}qfg`lxbXxZUTh#@OdLTNkyDV_qXR(w@*P*QT*%4>^!F_a)<9y>`y;qBDp$ z7*b8Rr2Kd6l2@kXEMGyjO!W ziBZy;iIP^X%_Coy)=4Y&6bz>oX*A<6q_<2nI0x)glV4##h(J* z3FtBUM2X#?Sp=<0^Q*YRuszKvXCLDSqrz?z-6uLEGBU~-=@3%$q|pDgr0twO5<5tp zy?5NQeS?BnxKx#Onl-a=D(Rl%>UHFq7gV~!?P-C01tD(xFtxfinW=_LA5+#iK^ zqp+V2eW~{9pF)mt|I^-%S$NZ<0kl)9dqH z!$dGEoh$Q57e(f+2c5`Cn1;i1#(_S*Y9yK01G)nASTYa%>Mes-rTI`?Vc4E#$~=}O zRoHE!WnRC?F!sxgN?O2iUq7_o6J9Gj;~p9Z*7|&P!p;l}wY%s_JC;Wabf3UGMaJa> zKO*oIk!?WPcVv0g=Crrt7VX=k$hh`#-J?A6IRWrI*1U#!{wHKS7@*))jl%bFw#%$L zWAMFM-_)=OwN5*HKPnyTAN^=OWV{jh-g`UF2@E3cG59{tbk2iTrTJA{Vc4E#mNV+Q zQDL`<=6fCQVZWkPNek-bfXx3IW;1g=U^?=7gga6(r?XfFXOZS~T2rlZ;dzuZ1tYCd z+qXQ~PM15+ z8~^6K?wLC?O~RNds4FcPp8Mr&uSfu_1$AxDLKeWlTM0UGPk}heepl-mbwke?nfafz zjB7e%J!mb+TA())ug(9M8(gEz|D?vVzi&_7_{FYQpXI(j>`$2o{)QarkT(D^H~eC7 z1hOMmnLZ^}eJI(~urJva-+5Ime)KZjXH>*lnarw&UCFL;E{nZ?1?*+z06^1Zl( ze+=heFt1#GC`eQv!drJ5s+j*x~nqms0a!o92aFE%ciD)g#FU7vE~Q^ zaLQ!ehqGT~o;#Owsrq4|K+T0_`gJ{wvdAdoK0MCpwW5x9yKs;H?dEU*>>v^G(ocPV zXr}D(>ytfvdk`SQMY);1e0h8t?&U){CAs#chbbfWlNOER?m|CVC-Zcz8{-+fzE!{G zjWp?<)jx^rUuouFl-4yz?!=#mdkUJeM)_eRxr1+Cr?hUna%VI;#z8-XRHS2FRYf;y zXKvSf6n5%|v>LA?PrPr#?FJHvQaZwrJc;FjpM|FUpiE)8Bn1b{sfrK4v{W%b4KHM6 zjA4748QyFmB2FEIaJnxG;bJuWPTHD6VnXRLh<-yu14mchP=2Vq(DBd=4Un0Ha`y^f z3A=z=E;@f{i7STD;M6*c@Xjt%LVnT=ZAu!QUJX=Ady4UkP`T-pKSU#?Cw6O`XFyb&{ z9rnA(zcXd5L-{7}Q_xGawe9vcz0o+*d`Oeq&dYxNW{g3as#oA$7(36wyI3*j5!iRO zJMeBy(TqXN{(Cb9Id9i)Yx}D3Icjyr#$Qlq||ub_Wcjx7NvdvBIpL7*}lISAG1Cup;c+TiYpA;hs|VK7ytM0 zal7y_(`}SV9Qc$R=4~+DbJ_>OlWj2Lo|7fxx+i>`cMQGi@*vyD@{acpm3IUeSDs!t zRCyXOf7wsUJwx;O0Ys_%b@`2TnV)Vfep{mf3Dmme^4n;1jE8;*sYn-v-#!mI^+SIe zugh;=fm;-Q>j&Kc^jQ3cw!_S~0vM(7Dy}eWA2v@kzv+Ep_2X&NF5YgRQA1xB2iDj1 z;IIk$y;QS=_X3!u{rg<+)@{7qYwWqb#f$V|jVSHk=diZO`9YWwM_l zi@S4EkiOVQaKDh9U#I%GIdcx$ps~6av=4(;_CB88SxB7T;U$+&*|s(#QOw>~^yL6#KJS zGYG)f=37lddVfvnq<*oyo6GC*jUUX#C9h4@hf-KSu=!<~ny?DZXY<>zyb$iBG3xO;TaOw4o7Ler4kF(pp-g$-*h+^Ub%WpQoH7NyDbxELdei}q=Un+IJTvkd zGOpN@K|OloVyVMuFO4il*`>y+!+#_74z#H6Z(5Is%IELAThkfz8&xI5a5-RY%!m2X zv%pC=#`wXkJxdSsVhM@ z06oU|Vd_huLI1m^G~Swp7{c~pvp2!xb)7tzZsTn_1B1``^3Kk6-Ro}I)VY0A*QVP& zGd=)`|0Jd(W@9PBjN1YC!?FeNkigRxn)Mji#|7s(XZqvaCY*~)a9#!O3GtseBKRo_ z8(6R4-T+zyCBBALf_GWixIkc5;BJ9=flmoMA@GcalQIGe7B&R}(}Z@v!?tysdZWDq zf9=xo%n5qW*NurLW4-j9o!jf{zO&C;*tM>2owx9o-rfm$*p>XxddjsMDt@o9(mFf` zmNe@e(`a-b1Wi)}I(~nKr@YMYM&kc#P(d_Kkc@iYmBatu{h<9gJ&4kL5Qf*|7%%G} z)66np{Y^qs9)#jGd{W!*12+v1#*q~~*UP`iT~lymbz>N`PfYWM{=w_) z+P-=7U7e& zUg&tTm`Lm`&c9}F>BQ%clwL>;mQLLE&Egf?_7#KW2a0oV{z5U=bVYGjdr&%xR|1aW zm4Ktc;F&-0><*oGmVM{!}c_@{In-coSMBwDs}I&XnmLvhIFqf;P?$IAPl>vfE(6P z3*eN`lLVh_cp6*F)IDhp?*m|ZYCJ!$%j+f2*KJEP7RJL&{I@_OPv-UOjNr(Fo~|Kr zXQUf8m+A$Z(PTsB9N92{-S{_g<}S&P_ddviZ1GrpZz+HA)3{YUR?M_7FRqX8Dz5jv zV#d!EcLC-AGeNAl{@HkOryncsI@)Y>CWhI@D{{s4vF76XRI9G z_u|Ws`MB*Lvl={kc+kUa5=QKT@A}VEJFhDJ{;lV+>=?jzR;BgMZQn`5YBiSZIIaN+ z)Ozm9j?w5+@JBy{RHU10O!kj%)NcF!GVIh3DK%b4c9@$oqsWf42x9=6vV(bMxg-S# z`>BfOV2aY4*7VRL%?xih5vZ`+M78%S8wRw!2k%?vwQ=?Vkk|VOvHGn`YLRxDF0D~V z>VM~5-mWCQIBtPVmHi}NSDsou0p7DOf3%cyxWymxuzCWs^EY{Zc~^=n7FSeec$f|M z;#kdit+ZpcUmYlTrF+-l#onN=I3Fuqdx98bL{I7Ipt%@J@wE#tmMid;;3?GuY3!a4 zRu$)`6UBZ*w*qttr9-&QUcsWd?-;ecxW^Fs#!bIXmtM@{acgCV)zmDN)y=HhL z@xp}Ovi{-L_S6#7LfF5tb{4me?{?u4Z{e{w@MO#iY&o0q7w0iv#BDcmLdbaT)|i&} z8mHxx4ZK;sl=l*PG863qR|dJ_Yi?!0N{zWO{XCY}YfukVsl0XNwc%|LjUlf`eR0u| z*Q3(0ZiegV9^fO@QMWJmyP(s04WkKz(CN#K>t)6h@IRKk-VK_cVML;ocNJF{wx^lp zyjmQ?ZWAr9(?(w7c@0fS(i&=GSHXW8)@kTjLjPe)W;?KY5<%V^G5605zdxc+lBjFl zNRh!bqZlcB@O`FmC-gGt7U&LCC*mjvJ%J!$U@B=WIWf)?2qW&M1h3-;;9*{`JAr_N zoyR;skJ%G78qcqVJLf9K;`y-rV31m$U7jC}4)vmr=SdfZ=RXfR`cep|ani7T(RgmzT-0{$I8GWiE_26!c-inQZv*G;|0TR?hgS_b$MXVt zw!Awtwes`crMvzpGihHwNbbmA{NJ$iE4D9>`Q4eR#18C2EB(CJv^eMal@8CV9P5bB zz^eh}71^dsel_LI03F7BKVSMeFZMg&`s%?$uT~!`G!^g1?Rjg>?zbb=hl`2IA7l62 zj=`zbFAXLtmvbkdnP*yqai$Od4^?LlHWhChoK*c%D#2ZGm1C(m=A9al&i}h~qt{%_ z6|mFN`%8q$8~s+7cLYsm_Il0Lop`}uSAbnRS%eMq?Zpo$xkPOUi z&3G6)J|4q2F*oczm}&y#uExu;8?kwBf4XV!gQ+Ck&FgxwOTxVwa3*NxHQ<%Jh6hu# z8ukY>8y*a1Pw!7Brvr~Ym3vKt!uP12lsn7ghzE~@Up z?y8+h?z(via{?^et4vw`K6cf7DcM{r%UrSk`lTwyRDa%00 z5^fJBQI_!kU{cC5Kv@PT%OuJ&DP z342>s<>d^(Cyg73_E|-XFxuE8%{l#~UT@)x01NH`qL+njXduIp7~Ox1QlvG(dbm z=)Ly)A^h;S&~Jj*H%>I`Hvvt|@KVUGdceb)2+KX$P`eyoy?nA6<$rx~Lkelj zHkxn!K(@(zN2Hl`qJ$S8nV)JRV{SO%_eVZ|#nf5s1gq8A-KoUh{-9~^?o`ubc(oDs zP1q^MI^7J|T&uIYQEyRarxWf5><^N$-Ke*CWfI{YmHbUYT|m5P^Gal>d~c>Z^9I@@ z<@=IJ@-*_$XX^;Q3wTb;b(r7qis^q4zk$D+iw}}NaQoZ?C=c=?c(AT)AFP!vcjGw3`!$dGE9s4dc6GAoQ@fV@r({K!Q;s>VT@SJ{6!#~0; zLceFy^PoEmJx0H$=?G{z-=#|Pp}4}ZJz{~S`Y|oCgWkQ zm7Tb^JMPyz_$TUc+iwc@m-G!szTJo&X!4??y{~Tg!N%G{kC-#ty!Cdz?kHC4ZtpZP z%)%!?AIpCV{VT#}VA}%t8k$((vD0YQ0plwy9$#hY;%hBkyi44(f=f7w1@;DsMB2gz z)Nh90pg8>V6)AqBi{#c%JTkc@+R2*MMdRt$#S-WC>u~dCKJDZ7Ox|dWxtR`6=45I& zWMOW`zHodn^*Yz~OL)PXw-}QaZQ{b}K(Gq3n&ugmJlyk{_{)2z#TnjZD8L_Ku8s1p z`fwU<_BO7{YPj)q$|J$5@_iW}{l@@nc#W_-3tIFqEnW4IWSZej18!d7dt};5;)rW< z`QEKJqfKm-I81uOaiGtcuyG_;*N0(mTBbjpcVc|iM+(biH}vf4Bh!l}o}rQIz4}b{r+1vnD0PPs^+1$dj!~|{sG~SSvF^27FMmhVE$6DKD2$9$@ zEfXI~zd`gHDZOEDgWwOujR3l?xIpAHmJ=%D7v3yB^QqZow5{ zxAttWdjxlV&$>-`WS8RVoOvh2W9F9vD_70fwFLq934TD}6M&qDdP(rJ7B_1}p!bfvKpW4q+pzx8u*SLm? zv?LMMHGoYBXFmGL38o$L@ig#DN+(lCFfIv7#{rAxHhtqy#sL2l>$-zzC;aMOq!l!H z3G7h0F>A&}m0$2CmyTzSKyH7ZX=A$~{$4a?hxP^WrKPMA;qa0EcI2D4OPlz@{+Snq z`R5D+d1`{5h5kCntbY=w1O5$$kMvE(7}{g_lD9wfRGqi|^H{TH5ilWUNB%dw4*MK* z6ST;$k>r0Y4fn88S?0+9SUOAuv(kajjhPTCmd4*)XjP=6cGetQE;45^0a$p6?r zxJHowJaym)pr!n$X1OHA9FoTkdtkR2T9wADxWceK&05a-iu_dMRqevGl;$Oh8=%4cY1!rG1!VZ1E@VS2}pBgSR{QatHsEgMX$DNBh#Vp=W#VMox!ruqIr} zw#`U(bLW!0xZc@oZrtzOaL2kH_VarUt)ZxyI(s*-yRBQU=)bjR>n(T?K6F!)jhO8n z+o3?(8=9%}Xjj+{owc~n`VD(OEpUbH-}_y*zwX~{Z*ubU;yx(whO^P zVt@!QR_ot$2oj~;T6(QqiWzNBUSK)^ZAb~zE;qzcepa%$9VU-DlE?m>jFHKv-D10j zbr{He%v*sY-i(%kp1*SwTo0=$d^4jQ*@x1zb%k|91~lM;L-0&RgtUWfaxTh?ukBm>&p$8}Qd!dh$n-ky2(i<*Dd zH!7E}*T8NTH0!w5OPXE2CS6!*opt$oG&7wxU=Rv1_=uhKy`T8qxi^A9a zpc{l9i?7*|gv(Fkg>{_@+tbW)4um4?Hqm^oYprgdhTqbtB>ycRZ|f$*c^It{lAY_h z7vs!2-VHEfsyNSBKHfR zqaI7{=Rk8cv?|T7;tIp|G_#!7ieuPqqUFB6XzTXpF#Tk{r`{+yN77xJ8i> zCqPF%mW;@QW+}8PjaPAnVSAcc&OPE7cAID!u~x=(u8iOuk5Ner<^xb>>8k-Xxo6yE z42T&i@Hb^fcy3DPq^#=*@?)OJiw=a(I7$t4%9icn+n+ZG8H9>3rq?z@Cxb{O=z#LXucU}G-jV=Yx^g~ER zx+wg8E9le@{b{@|e?JPhDEyrT-2gQCoAV9ep?KQI~^LRW4+2)mEdL6pWzh;AFl--+#}r7|jRoYoYnhp_fP~AJ^sItvhufRrAFFF}ffFl! zXYXCT>v7d{uQ$ccXaL)?ft`;iqnB}}tJzm^EG)>r~jDW`?&+D2P+1 zL%0}6(0`+sp{aj$jOfd!4s$Fa~G# zyHhP~KrJ##p~QokdDYux%;+UcdzBmO&Hk&g<;K!+z1{2|s%u5<4RBfB`CM7+{o;&# z;Kgxru;GP*KYd5qpO){4`OvW)Y3!Uzc`p|NbMr&x=4Rgh@MHM#Vkc7QEakZa6!$elmcWeD%GO*xY3|?t zFEjEPq$lHJH&*l4>~2=>Hu~Fge>zso;dH~Ef^n->0^ZU6r`POUAV-;++{m7Np9tIk8INx>#wa;m6c@-pk;3tpwB1hmS?;z+R@Kfwg(B+`V;HTJYpsBT)Fl&BctW#n8 zuz8~S$)55@yS#pD_O4#Mu_CFM38?LAcXz~_Ra;w^EF#YZ(RPT{uQ=OwHHAL3S32>@ z!P1M*eHFK-Mf0YQ^qz}r`=2MaCOsoa1S z%BiJepMA1)?33Rp9eeJn(y`0G2|BD!+FO^HzoDVO+B`J$m#?7zo<-k3V{eHJ)|Oth z@s?h^{K?YOi1TU0`E>Hh(upMEyc{>WCK2c5h_j=ubRvT|)2T|nfH?7{#If5D=VuY; zClTj!i1YFzrMwr@_F2lc7WaAF-oB!F1sp{_=>6GawzokjEE<&;9Qoh}aHD)trSUrQ z!4E(XK|c7)K^H+j_`RTuARl-_%k1W)d}xMd`jXJZQwpsLzl`>O+kDo-lc?lK&b10?(bZ!Z;7#g!StJ&(*bCahA!u zX@yaFt~T~&0=dFyd9IG(M&`HfEw@MEx7O6+@$}hekJQGY?>!qQ^~|n7?%2UiS{GFh z*b^MJwhqac6CRi+A3os`c0Z5XL-zkvjn*Er&ys>3i#Kx`kU*9FZhJTy9pj)MLaH2e zl=kq;pi@6Ej@ll+2)8Kh;S-=c3(fWr)10RLPYNCf6ctBJdds_eS|kwWmwG`6=XY2c z!o_F=gO;hWLt;YdF^GOcbswqEt9@ua?Ofk}jyzY+^eOMx)&p25vSSeJ55{JHn9!L! z-@Zki)dT{o&=&LN2(yEpWdhyIe(^GUa?I=ip*_l@8U5s?sqySmSk$H+{Q0vYL8(pqWX9q>wUKbrTlM9slF8OmiUj(xC!4hkDZ8^#|M35 zc{gq@$_Me&FBW{v*MD@zT61Fe--;W9Sn*ervGNXkD@64RS$j$iX?yv8+!TGV^%?lz zT-}FL%zQ)jCCvZt^*OKaRSPMmWh%@c1)R)umvaGcq@X+P64k#qYXFd+xZ>k!b6fOl zSVQ66yIS~hM!*8Eoa<|W@FJveRE%lmw+I|Q{dL%0`J@?6&(zTrv3IsNVW za1b6&;7x0;l{ap{pc(59f2(l;HipA8wE5Jf)to({9CoW7%sge@&U+YcCXrVcSCuC7H>z&4IRL%_Zd6fX7n4A%J-ujP#!Pm z=HOl3EN?5?gYrZe9_N32+>&H(eC-%yI4JAin1u41!n82G)%yln##7<%72Nz3haaB4 z{$VY?qUQns7WjcGVS#DCLO0Ku8%O3=PuB8=I)ybG)ZJS7VTYH7iL$txW~38q$bnrO zw)K?noZ|Zhcx9j!YtY3+te z-x`t6wulDOH9^l8T;zW|4?L`lCs;Ubuc6bpNU!D;%=EK}mXtd9V?3%zNB55jBt2C8 zF#hHmqx~Zd^~$Vij?^Xo98BWJ*pY_H8MDTJ47)YP#r`QBA=?E}jm?PW1Q4*1d8vTu zOG2}pLT%!tQ@{^EtJ3fkKL^6I=2hM32X?V9iUo1#81qgg?(vNlHMkf}V%V%OOjRyU zH*J#>2rNt+Wz5{D0TUwq3=4g4s@UP_Hhu1Gx~xA&vCyDu-$w8y)>`JhJnwo3U*+Iv z#jFzl>l|Fm#(X5W>3qK8w>$JZ9DKKf4@mhRH~F*ka^_uj&dgoYZf54BCjvI+4e*_v z?3kDvuwc{Ey#*IvaaW}6t<>(mvSe~K76`Yj-<;*XNrJv#Mn8rDZQHhGD^JPkOYpp8 zK6{skur_Vmih%38Ie|Ux&NAj{cds4Qo)Bd?oiHQ#5e)T!`^)h82r(aY2_fY~3t+$4 zBkz~e{s1mkCp;|nPYK--bm3@!(&90g-v=E-cnm*=@Gc|VWBsvSUk=`i9Y7a@FfZ^B z!XSRaraxA+>5si?(;Y`Xn9lf08xQA_8E?Ex@Qn;t_CR#^{nF-alyTp+OUE_0IY?%b zy_hYKSPf_L_nfWd(N@3T^ZoqUi`e#@8NBCgY0$&G3;Hx6`|IF!hIx+D@a*J9zsdI& z_D0__c->8(TDY#SZ`-C@w)b`SG9^(JW!i*7-7n1=o`&@*WerQtbpnKu%7%ajOE=?GCrRQYFN8ib|{qAX@Ul491h0c9O~ zOLK`D9=w}0Fn&!x&2(>prqVPT1d+RVDBY$|Lg_O&!(u+D^yCA_N{p|zJ~-sr`^XtuJ7{L>M_j*n2h3rmHO1*Y)!lzVdZkN=nUIR%%{3=YECZ8fh z{g6__bGh%!aJzv7qLhv>REuMG10R4U=dtFpT#|xoUV+A&@%LV6RT`e+3d8ncGYihe zL*duBN5dh#skUkXoV^zPZnLGAam+zxP2J2QoXt%BEKm*4L_XX8!u><*!u_U`7CMc3?IDdH^HyEJk`c-k%-5&kXlGZ#|4V zyJEX^*PG}4r;?1g$gAe8@(eFm?a$yovdk_@(TJ`fb(JR z$2Q{3Vt;B@9J}T)I(^9pO?fs($@k)I$^HS{Nj8wI_UC4TK3~c+P8PEK| z^4i^BxYI1DX~5{M#B>pd`32IJ`%}v+dkXfhHH=`H7TmXnyTLH3@5kNU{lQEPud)V_ zjc;@U>xnqFoZ77{A96=a4`bD^ZQYo5I>|a#!Q;n=5oe!Eg?57M3l`9AXbbs#| zHN-mot{4@r-@17-FY#OW)?57%Mu9$CR#gcxIC89k{JIi)3^~T0V4YGPb>!HnbSe0z zA3`WYH`ki21udZ+Ip#+k-T55dMUZ3hlb|~bO*zIqvs}RQ?&vOY9CrT~v?|T7;tIp| zG$TBJqd11$CQ7bJufgvdQLcr~J}^^Ib1bl#g!xJbm+w(?ul2-?f7z8FOP!tehA>XS zZm7Q(%#LyDwkUM2ms=~hnHbT7H}`w6Tw9<|fFs$?7VRvp&z=wL{dt&;g}o1Y15uXm zK|ADUxvK&FpEf-W6s7;OWL&$R&poSI_NQT&Bi_Z$dH#96!_j{VN|hvck;3*N7xc;wdo`QZc*;vckI+bn1uxG+wvQ^C;XR$ck7N zbUA3s3i2JxB`LTm449!}XYp5C>3~_|rDIry?Zf7Yk_}8Bl|8Eo-qjtB8>~HLJ$4H( zy;hb#$wFiA2pZpc=X1so=tCq858>YGV|mYeF>iV4o_mId&g0cj$~IN{U0i-5O%#6W z(0~ML-EsM8G`bZ0(GMXN>7ww{+c}0{zDMCFGlr=3*FmTGg|SYB?P+Fs?6*^e-6o2^ zr0wBO9{o|kW=3nK6&%2DVI^>!6+so-| zVwIZ{_grP|5^T4?gY(L1^s#U9;tyE+xY#F)9jSO3U%EJm_hLco-81yYJvo%%`8&SH zXriV@x?E3J1fZ;nRi@+Rq`@aFG=PWhSfYrJk-_d~cvY3rT>-2gP( zx;Nv^m2l^swW>5;#TAC_X=XW7?ofr@CYm?bgl6qKJ2zx;M|yAXrVV#V6KHlKw;&Ax zG-12IRfHd2RC|CkQroz+Z9Fr|e*G>0JHOUmIl)!nj_eGK_2ax}>?W__g?vZi7*5FX z-Z3-(_H$@6^Bfl^y=i%~E1;=zQv=_6!cKq>Jzc&&_?61B#688G9SxO2L#*15`GZ{I zW0GiGq?T`6|VVmOt;9KMrt_B?Nc`|(XxjmGDB5G0{l=e3^F?DlENA7Q0+ z*yZ!l=*X+|Lr6usD183spi@8er|~*`?oWkV6h1!zEXM@)lji(>HL=XBz zYNyW~OIC7ztek5EA77lmFqVwHj_*J|8;kE&fF`W8PPu$H8lB5`q>I9L|B+)!^0F$; zui^^B_F?lx@mWG5s*NRWN7vXkuM63 zZCV^!lo?0TUR52Rs3l<7o@RzOOWeb56UAF2jUzidH{pqe4W^;82CrZIK75myHG+=A9tPYf8pn3pko zYyuP+Wj?vL1v)KzZB~l=T5;bfCnWDCo$RLH(7AbQSCqYuOZ5ypH_v{snGP1l)#Y98Rw7|2s3E8~|H4)Lf{T7dGYkJ>ioz?7N zUIRZZ(BShBf1@7}<+RK=ZwWl-&1T$W=9%$r0kNOIdkHufu8MVn%H=)QKh;`yh|h;6 zuJthub69D;a(OQuCW2Y%Qeq~gN<&BCz4f3|KQPw9b9rwc+@kOv`C37yYrVv*=nhz7ftaRiz znw9VJFh}9lVkT?Af@qtE!3_x*IiFO}xqAn|i?SPd&6Do>T( zu!T~x$&TvN(_WO?QJmaG7I6M6jg#hR-*E`0dNBD)X|3l!fP*oWwGFY4V2oVKKlem&Pa#oR z>%H-;=lwLG_XC^(svK*(r*fnFBm`U zmx+Cw*ni)q^_p0DkN3XPuBo|7e&%9vJHh>lLqp33@5!M6e)IYaR?Rv-cf&tCd;ZEL zpLI`_)_F%RCGG|R$9CjV@(t-|o-erYj*r?XjC^ z!dGrVtBv*7b>S@`og1VO)2YDv!#+Cp&xl;xh%j5Avna;dfO(nwJ1jW*f#$ZflY*ZX z{1uD)O@z`|YgS=_@5i(lcf5oYncP9BF311h<;Wnv%gFO42O3|DZ#*OHB zxA{iz1GtHex375*aGr5s(J9bU?oPq&V*bm!=J>dAs!3%j`e5PPziRf?hj0VhL-r;v zlP2DX_Bd`?LtK23q`H66Da8FF#>c$vLO57c@$Su8S-%T(h<|$ZktaZiVEhTjpw#c2A(^j}lROejC&?lX6p@pI_r92OE( z0Nn+x=gqHznRV!kLSJidg&x=JSta<#Q4Cqw>=$}Sj~Ks!-g?7!$|#{nT&Dc&EjXTc zo0ON`hwOQG0#Cz(^)G#Tp25Rwz-*RyIDPoWtzo-u>o)av(-98|XE&Mm$8X!zW60^V zZ`-=fSvVWAx^wI{2v`lrf%aFuASIsJL)Zd1Pj2Jd4>R#61U`kThc=hDZ_(agDG+(* zEnU1Xz}(LDjM%><@Qn2rL(xpbd&R70m&O2FP=$%3UKzX{bi@(9!B?Sph<6YVx7mDg zbF4P|!h4%2eLF8m{%SOs?t~BoKzVPDn3eb1fU|z9Qu7C4(FCn@_-1uV!=tRAIVG;7 zn=57lx=~+vZxwb{)`1TIKdmyFFO;K-eQG z=RAArheal56vD3^U3@&|HL(~G_vd7D<8KgpES_XOSa(%vc#10w z+q*m!b|X)P(qS?Qt6>Gi^*<6%DoqjvKr_oB3Ed<(dX;A7f~{e~ygrTotJyntR}ZI; z6bTtOc;L;YO;ju={xJ5tm5ry=-H+3-1rU79#kJs;Rd?Es~!t@?|T-r z9taaNI#~VYo7Id5t7aL*)rYutbEc;j*IwM|intJG|67c&PvW!hU8C^N<2L>jvnNXH zA>|HvNmPPgnS4XOXZb4RjEt=_3sBaU3HruK+!kJb4{7*Fvk(@Dx`Vwx^lp_mVh<-6pz? z-zcN>8JZCJKy!d^gzgh}&H@-^++`HryD7VE)0Vys9A)?3zF`PEK)_@qH<-}AnZ^-$CP2@{jgI0bY<9Rbd*E%LkMMNiK57`P7sS9>(Tt5 zE5m*r_EBWmMw<*H!!V(5WKI&0GA$$%6QFymH)DEt!!H%{OWjWdie`KVU%v(MnnL6* z9!if%occ3<;5bsBNyjnvrVvckX#~t9)TI{KjugyntBex&RtM+zWctH5kMwRbLW;Ng zn`ZzzdnpKw9i`%?&DrhSx;wLdFylR=t=Mn04&5>F1q!M_R^Cv~yaAIlo<=sJ?06HV zm&0ry;S)l4R&L6K73o-pxG8hdqSkTULN>lz{$6)wW_ex8EA7H9;pVo?i@#jXB<{g& zCl{A9wD%ypE-sXFcBkQa+&AJlNR`$}N3O*AO`AkZy&tJ>78)< zh8g-cay3JjBosV0ykpQDD~~ddn9{paqV!3;3;gAc^sdo}?^w9}H4ES80)L&;ZX5n$ zyRJ(4T5*M8`>=VU#u_RYYy4$+$i{AX3vJh;@!Wi}WU1cc6^Xabd9!-7w(BS0rmjFg zI-q_Rm!BxBqwv$}P*^l--ErHi(dgLb(2uq~q>IvC-4XHwV=Z2{z4~pqMQN{cprdBL z_s!ZXID7A=_R7AYDeV=Gt7v=0{zh$w`=(xd{AW);oXNQNbKsiZk(UyT)5(xt7_!j(YV4J8v5V#gLtlBIH4OFOxWk~xbBes z^yWVyX1ASu74~Up@-^Er($UO$1mZf@!JKBDq8pXlPL4+Bwv(ib(oX&ublSEuK8@FD zCw-e3bJdbhTE%Q5h z(y6?W%NfRewV|~&B}ddE$(s|dyupdGTq*zT6OcQvl~;Xi2&c&6*nNy0#rA~Svq&6p zo*4NMPP08z$}e79jAIV`K*7h+pqXcOdWCW$UQWp;n<0D5t5Bd{41brDSN-vIm7+OW z0{Qg(;^OQScN5Pn9nE4_Z^olv%w11{j54>%sQ*$S6R%(%JmhXFW5qItgHT4z@P z4=b&E4u5*1(WT&-eh8^Z7lA+DmY0|Y5ce4TX|g?)2^FRJRa{}%p5_EJ$7EDtw~6M@ z+HKnNx;(IsiI3k6CruZ%jpsJfR=iZfniUEm%avoELA;Wd6OA3XT=djqes8jb(sLDLNI@+D6vxlc#ezRfKavgVC_I;q{| z8`C)P(_zxa{Xt*HNvBY{`kAg;ny^<$*XFq<9!`^8gC8wjDWnTyCX=od(iM1@96NXa zkoijIt-SG-x0y}y0hJ?f61!p70?oRr{6e!MZ~QLUg_ZJ>BX35fV_N7((q!l&$Qz&S zd^jH(uRFH+eb7be4-9~=06m7hNpygQ{UlWyui^^B_B5lMeT)N)3cF3TyxA{fo0$@q zm$Zf}0QN&45O+E^k>2#bo*fIVHc$jwhVLy=rQC{9DNLrajVk& zDy}eWPczGza~V`&w~6k9>7HtIwX9-+La}|?2(5dn&zWDw7_qarCW+Vst07{2j#OGH z{V&KSQ&*l6{G{N>Z*4#IHY^dhwMUUjvDdap9HJYJK_(70um%B!`i8|QiAkKWfRj3j|3$JS zV+C1KBpFQV+pOQfHg+PwG?3WUwz#*Hl2&QRzrKY0yM9UH5;qm#P)gkN>`JG0h})RN zZJgHj{=d(hnbpx^MeEk-&4+eAJNuiN^UV7^&%B&DGn7am+_&(0(k{uVR^!MP#X~co znLxG_`Nf21_@+d*j7ul-LHrmwA^cZ{Y_WbB@2-Z3TVxBb9+WH)wiJ69t(7`;{W4<% zO@0GT${2JPvy^jEJ@NgB+oFJ7p39g-RM7AFmOYE~{7z(##P8pZ8aVM-GHt%$?DZuA z+mN;CP2$B8nLHcauaP{&WIi|VoK8u*#*mluZYs2;xxrLUPQ39_bT~J7<1IhD z;^yNyIZ3g2f}$fQraFr5(FAK(akQ%JcgTBkZ(!y^|J#YVjkzWAp4@-0#rv!)(N*_7P6Pmvb=K1%!Nw4ZCArXNN2 z?ef#=@XkL`^#Xg=iFBJyeOaiS)bo<}Y;ri8IjOBxj&0*R5H4-7%t38B>_(bL9cE;yI)N>t?N8x08-3JA zn<(VDjTU;lUb|E0YK@IHDfDtmpL*V*=~s(g&qGOp`h>2GHMi@|W&gl`e?up--+!O+ z-`~*D5PcPS23&}aqBZ}Xb@bM=KTdd%oqP`G&4|dlte;)P+9ynp(v*?gP{I8=;Z( zkNJj938}H4&?%>1^aY(EAS_4A(G`qM>#!sLlpLkp%Kv^&%geszJ~=aM;&&APeQFk^ z?2mt>-Bl{vf1jEqyeLh*WL_ECjoZ2IBMRvS0*Qznx(AwTr7B|ej`kd~XdrFOy8&tx~U31K?l6LOJ_!*gv45uvX z54I;#UpbU`KC_;k0Q+vV|6l|5{Rvid{5zh8Gkj&LPWxcDq3`$k;i)lZKWf*s%fCk%BG$y;%U5+yzV@RCO}r(uAvJ0!V>T3?r;{$+FFW+4T;k{w zX%K-6rrsL#s!_3gCDEu_wA6J}KbIA38EKhSC1xMK()7g{ zp0-PGza5>>{uf~0kFM4B4`EhH(KDOkBYFP|dHI*_Kk(7~UA_19wD+}HcXjl(wcR5R zmEETjC!ucX=<0<;0Z&lmNzJwrm?gbZ_JWKS)a+}M9yRo9_l$PWYWqQb#^)ii8@brs z(tW=O#))<^6pzC$YuA>&q*N~E*0Nh^x)t`WNJcKA+&u0DVs)vNmGxG4J!keG%!b_< z_k7%;miS`%waLgxIuT(-DFWU6k?jf4nO90%Qz-oN>traGvBD!S%DKwKLl`6b9Gi2i ze?GD^sdi|cIdi6vM!kjQ81-LNh964gSXgMHS_>Zvo!Dog#ZKp{)bkn*7@jSWW7c?d z(niIPpeUg$LylR051sKN{!F~3a!gLZC_|2gjzTB=AaYCcDfx|SyU8oo@M`{wGXl&e zUW{W@&|S zjjTPq)PFXzFKa{3dGc0R{0a}lyZ>U|cp(GAye;bjeamHUJ;ab!f?W_3G+|5L*$d2WS9 z<0PHDw)-z2H%{pGD-hATAl5v3dXcpc~TF8U23-2Nu zX=UN!Ab%%%N(2DhLxZL)-KtxS*zv!N5-6SLvL4CXTU z*4h{FgRvN13Ex^j!P^uyq@^Ub&Zoq!y& zZxSMvsNZ(8%d3UGV|=>FJfWrU{%&#`eC@4{vAL)snX4s|I*ky@9^mvfh4VC>eG)XCmHf89QH-2@ik5 zvO^m(&eTjM;--_8M-C-p?&iUW_x(XTKWQ*L{7HG9bf7KdBgsPU6IO(9uFPf9d{vpX z-Q}sU3IE1I;RtaOf4AkWOGz3yT{T4-`Xvn&+%FpbqDjMpBWnYAv>{XbLGn{{Mdjg%APr>K;ZyD444 zc;johS4;YHnf?k%ySp(J#eFEZ)T)@aHOo$bbT~|&aeErKsPC3CZr_qd@WU%^JD&gW z4;JwC317FQ*by+u7b{LZVG=HPk25|(?#f&LNAlaQTp(Yd&WO8K=9|+k?@q?9%vIg>rTKlA%5Q#c zJnF8U8S*@eq*<>F&eB>uRD%g*7go(?R+d74sA+1!^9n0 zOB$9~w%e8sk&a{D&U8HgV7E<}leTbAm$$RK-Y@TTm3w!0n6~=6vc{R;Mw{F=#8=g~ z`MXQ-C-L+A$KFmi>UJ{UztfsLS56?M{ZQBS`Hv`!&^9JxkL5d+Jr0kk_8{%R-PA30 zTBYjrp+KD$3OUs_3WdLC7fgfuP@?Lb>yuM6RJl@*&O=s|GJB`kUCdIBfx5iVuglT$ z^2@59y6m@)3`t#!)<`||+uq+IbE^Bp!-N@HtK_MUxAYnDB6IW1%kck?)Kxw4Nj>GIoq!L45tYY6 z;b9|FydmarA0DcgF&Z)h9!$x+t>C@Lnl$q(%zfTKE%(7T!82Ja51&gJ$-0bwUh8g! z2M;A}rGqa8Fzd+b(A@4 z=VumC=ExZf+3Z*%uY7lZJ)bz=OI$^HC1#OR#6^4VX8j%6B=Y9Lw6sh5pEt>x%Z8Vz z@)ACY!pGs6nM9@BLrGeZg${F6tIAzRIS*X&y!S|4#>gSbm!`Q_$>6owkl{_$*4C-E z7V?few)>`Ml;y{{?@Z)|A5R-)5_i+xRqlh`^kGdRCskkL^Xh2XKqvQ~70U{H)NN9{ zYQd|P=G8h*%(U~#K~)a$D{23I+DW1oc}+Q{C49eJ9tiMjPzDzYuIAStkVfHycTqkO z_W|OA&ii7VFcLoBjg|#`M}PFD{GL-;$X$1FcU@DZ`#=+YqvE?mQa9{ilQw>nl!5y| zHtMFcG1^A0N8+dxTR*?v`!r>q?hlRO!F7YQ?ZME<(z89IK0ZmE-ognIJ`dJO-0jq^~aIn(uX; zl+9q+jHNnTL%_m%z995kx7vOMSEYmuI3&-XGQU;->u+>BLYn536|+w=(8oG1et* z2U?kj{erveF4)2I-$WZ_@@wn{gYIJ1}r~1D6m&zzS`L1z9Cs+UsPhJ$CdO& zl4d=pg*Qm;yyL!Wd2>r&S5NzAn)}+jI_18MzWciFy07{EyE?i$@4lr%)Du-CHrCN^?zebsOOXQ_3 zVU-~-L#Lq2peI_llCmrARKslI#W+R<-Nh{Byj@cSpPesxX5LfnQ1S_8HmQk=!MwK; z##W-nyuPy5kmWikL{`f>bi=uVXt40H+y_NFhcyy&aDRkxV zFe6RG`;AC&8xaM#jYr1le_qBQY+t;b5k(Z0>4Oi)BR}S;O zI!FIY-}^JK-=Ux1)0A7=YUdtUQR!Zils$7XcO7#j>CgAk_aDsCzt2tPwmKm*2B80+ zoKH)?zem7KQTiW9M@oeP2%-l_Uk~>Y{oT#_vbQ~9eV4JXYBpLFj_@4mW*d2 zLL+Q9f$X$TYX1g|oG6i<j-rVNO}{@ZcDESZ!6h4)Sf9dSCA3<4$-uYlVmR#KR-~*+}H!L?R7i%q7!DaL;YchPde_B=6q&g5Az-XpH1GER48|kYh`&unoW4)504fCLH8TE)$!R z%j}O0^Il?RDt4)zX^?m9KX;R{OU-+BEte`sh8*>dp0!?krvEPfq`LsQD_@dc!QLGe zFYi9q)rWHHW{2{2R;Qc2eh;T2%#lQnU$lk!@$mj^A-6PA;Wj2hxqS(ldsVs9uUQv? z4s)eDCrg@RvoKE@=}*cU)lYJn#TBo!uXDIIQkY&FMaK$+*WkS`uWDX$rDWj#)3c`#B;)?ijMJ2ANj_VB*2jSP{UQ7)V4&g76@L5A% zGAm%8k&o;rFR=;o5|QvLNAsf6S}pMqM_9^-dWZ~vGbQO}y_P+W>}?#`i96++kJT6Q z6_J8pPgcmL&TPtqx{^8=Lwhrg_QKJlMke_OjGXgr(X-Go;%whV3I zS#s20kxuAYA2CYZGD#FF?Xn&u`HiDRUIyZg?7}_?ZIp@E*bN5VgXVv)JT&ER8Tlu| zj|~T+wxW@J>K0lsB))wfS&PUMe2D%@Lm z&-xN$kZIwKk*x_eE}?&mjXa!;1fRK$j`X*cBhWw}QS^in*_w>dcm0(4RU|h!zh&g0 z+H+iBPV{fVevkCX8mrp-KXTBY_u2G^xXZiF@3}8Je>OZVR)`;T{>;wQUs7?^T#N|FC{W$T)Gk&qUg$y zA-|NpzG-qY(K^o|X#Q{X#l=D{ks-ysz0x=971bROOT9d+@vz3@f}?$NZ+B-oee<>E ztkbe&M?fJH2DZPDPz!G%o1LmCJH_~U;L%l=`2U_S70qsGJ%r1R7%;4?;&9}4yf$w z0p+XPz~$BuL#p0Mir?92(qAKc>90GNTd8lj`dn_!wc~H@JJqdevS)ztcgmLi0=#>` z9A_QKQnv@?Q%%-XPL7Z_Y+jY%iVABelba%7$xmXROuLYHEs@iB0lbeCa6ps zE#>3!=n{AqKZ2r!t{gu80(8cY_%rdA_KV-1fo>2zQNNgi<}$QVCSGGV7<3Ps z&llgCdP|POx5YgUaX&@!y}nY)4j+$lFKnzXtY682A6+f5vutTH8w?;n7{k+(tf)FyL*~-ATc7*Fz#EKrZQ4p`DLRFy+=1SX zW_>NP0lfxIdx~_RThY)(7NZxT8`1O8yU-2jIp}(H9l91BLr0hvpF*ENA489z52FvE z52E*@pGQB7eg?e@y#u`+znFiK4sV5S!!M>8&wqH0?=Rd(7#(B72)CBlmyX)Qiv#9G zqvrAAG4A0;pEf+7_!`i2M*W8CN6m)*Y#6S?UoAR@j!<8xe1D-6n2(`H(1+27&bu;mY){Nucho25~t2YpmTWHkzESNiZ2l8*=3h?J( zEBG_83H)bpDfm-x3HS!M82mAq0{;uXk1do78&;#d#!{9tH2R49wR}qq% z=l%|y1AZTz4gM`y5B?44fZqe_z?Z=p;EP}__}5?@{3|d9eg~BO!+#0NJDqQXvd8$F z-hh1y+y|Zn_kbtBzW|Se-vEz+Uk8tZ{|6ia{~UC|uYrfbuY#|FUjYw+e+mwPUj`3? ze+(V~{|MX<{vntJ{{Va*d=lIZ{vP-&H~nX?DEK(| zFt{E3JlGFz1Gj1c zfvdo!U@y1?{4}^2>;hBZN^lW)kIcDqYRnN2F|G*P8AqK6%YKH$FjC6SSn^)K8Tl!F zE2@GvUqM^1c#1YT2+}?)XxHJROygq^xM-fqyHaWEgkV)V;0b72p(WIcdFXmH^pRue zgJ}3AlE#g2A}i2~(9kIv7su}@^sDGB`Wf_gG~tVU2`@o6qGzLP(GlW4i6*Sj5E?(B z$I+xU)QTqT&^+`E(&eI|vHQ`)Z+D=Z&T|m8>ul@6?IT@I@2Zv+&hqw- zHm9q{X>IRmlTE(z>9%>+-P5J~-P+m5J)Nt%``TI^PQB`DTj{VXxWl^js@ohMbOpm} zZM(OC!x6{$y+voIkbvd$S7`OMWZfkLtclE4n?kk3IXIINTZGBF2 zhn#0~zthsy*-4t(B)`^z=2kzgovT(ZBL}3hWkq`jQFL03ZM}W%ooaKkqhob?+CIIC zEGfUxuI%b*b98>xJtab~m@QNgS!Ro|Wyrz3g#zTH89?m1l|9s)u|oTh)8N^?oVCw$|`=f;tRVdoAzF( zmCBKH+~Q|k(qYP?y;D+uw_l*Q_Kxvx-P(C?b4NSr?74f@%C^ov3F9Me?9uMI$7z?k zWB+!WM9@jZlhUZ8 z){c(0yPG?lUOBc1bqCGkimuL%`~3+0CK*hxlsgS?K~L8`WURZryUqG=bKitOgoA0LmE+;X)(tsTK_?ZDREuyb|c{^F|Xu~zoSGIMn^6QN<@gJEs)@yyNy{B&#`EP0O zX<5~-n#$c>oo!aCr>n24rK`g*&__G(>7)rsOHu9;&xgrn`--k^hqvf$D}{x9UeX!0 z-oL7|MRxV8w!s{=qfJ_nYWh~AkqPRd_||P5dC@K9+1b3ZEx^>p_QI_p%ep$+Ti|-B z2+CmDs^!ZmI={M`?`>}HP%Qx2;7bW-dGpG4DpXo%vFe>=_ZRb`2}bjLUk`#rRgQ=e zr&q}i%GH-4wCEmRAgHW$USXaW%S>VlBqYFdJ#EWZ^-2ktv;~-u2NK8fzWbUHC@sxG zXatqw*JU(XRlj~ZMww2FGMzr$O{k+{?zUp0Tbest+Bzf+cXHHVn<^IMGtI6?ms_d_ zUg=uZ>kD**3B;rR#}*?+V6tz0ST}IRn!YFw${T5kt&VPsl8;}7wYr|J*5>l)LgjusKBLdeXU8N)}NK7;Al_`j2RH$(%o)gzh-cWDYF;g)WMorR`x5 zRY^ZSMyZY*my$XExOCF5i=V6gP=v0MaY0c@yz=}ejY5x#ZQzgjUQr2+=!M-3P>QZr z><=+(Kgv~TM3t-!#Qp|18EY72=mZ0MO(q{D8V5ICtNfyGvEouz*Q1Rx;TijzkVFej zkWS2!e^X!jxy)~s($Cc?>f)fESDf@8D?9!x;{m%iszR#3BH_nxU~yqoc82<7|y{G}1PdKlno7JdH9omGF`p8#U5Cl{;fxh17+@#Tu7r zT&l52W2?p$8f6?T;dg87)3{pW8jWd<8#HdxxK(4n#_bv(*SJGtM&mAxPicHcg?$DUgxJ%o3EZg!<-BzWY_*;ijy}%#2krH)B=K<$c<(vo=$Fk0v3$b>E3ElI&>}(O5FB z4nK?gY;+W@$8TpFS6gYG2bIu@Dj8RgOP7FF{0NFlqc0VMR;pvgT>35Uleif_LTchI z882He^Q@eAY0p46gqC@PI^MIsk1+lhcpLaz`J0_tg!@t6y@p;_=V!`0 zhH&;jPs^CAVg`CO{bH>jZ)G=T(ol60{nXgBMC(WGQTRsE8g=2T2%2Zr$nWYtH15?W zD6s^ZIL6IWD?CUzlQL-Jx@e)DM3~|(<{06bv|P}@%`@8F#D77PPj>-y7xZg0abEB$ z%@Q7uJ?=drXZL06_$GA5ksY^(bM&o>r&6j;llc#14gKg~X} zFK*6Mv-0fsq|cW2evQ!INc$B&;S8cib8c7u1OAy~CMTE4(C#=}t5E2ZbEoW#C40_~$oK&I$dLmHIrpjh5xs#GUaS* zQ>Ntqj|iW$0acyF-c)D2w+)2PS$>>nHc_1w3f~HZ&->1=*Gu{3?yx33nHjXcni*7Q z!cmsI+kB_x?#WS>SM7C|P1}=S8=vm)4-UNp-felAI^TzE!R^;X&UgctA0DPHc>_1T zN}YwUADWs$c5|lPqnS*|y(d${8CUW=>urliZ0gh7mLbi4y_h+T?Z2i;|tWR2W&7jf?6HYXxsOMQ@z#euNb z6ZV}_kCGSfuM$oT;+Zs7cz>0exy1@C&u>dz;`_VE5q~Cq`EAJgOrqL^g)F{V+799I z-u4}by(b21IXldLl6v?mw}TP}XJN)`Ik)ZuayFUd9slGx9(~TT3*NwcGVb2JU&>{s ze8+9NWG{WdbZ_8?Tix$|_e*Y5{=4qya+8(*P;N5vllE=@mEg;Szt@i2)PXhKl`}9C zljXd#&;rK}XA&*&rO4aX&^l%3j55x`)O~{Zfgh09&J`E_mE+L2@(%tz^QG^3G~-z7 z;dj42mE1?x+h2k=f6apy+59wZB?_;_q(8WDpgJ1QCLWmzufpGXwXA%*sB(Efv| z2WUIs3v~{Nv^Snl=J^kBiwduh_euLQiCr&e5*f}f6uv}`1!P^JP?7&YMr2*h<%Kgt zLB8<@cF!lDl|gx@WL@FRNzP_OMx5F2y~19hrB+JhqR6z1WdFvOvYca^EuP8Ab9Ejk z=dc!NA3yrx6Bg&3TC_>ZLCK(ZzdBkLXMRBX|70|O@7_vYiszp^T{!a!&;K`J)KLDa z9FK0ZDs?#91K}KmZU;1V_@6<0Le{-~wcFx^d_G1duEpFkcL8)?m-hLi!s(3AO1qkN zOG4UDrIe|JK^fXF6wZ9*BFo-FST$}7-zX2fd$zkb^r*W|zGJ>=pAPFO2}Aq@!|~&P z+ettExxP#ujsHthSKf})u+^#(3mA?-H5 z{=N4iA7W24w4$wEA#Ig&A1!!V#ww@tAIxwLt~E2iZO{>(hh~~G{xs>hnRGak=jRG%dX+!y-oUqF;zs*J zJ|^rVJ8U(kl5%|wmMzL`idp0}>9J^YrtfvVC*p+R3128)--j$Y^1D;*BQM57#det@ z-+tSBL*gYZDbk|)iZ}NYXKpRVSvXT0Z13at?S(V*NBfC0oYSf5Dr4%3HqD-yh7r=p zey3RxsjC3*s=X;bZ=QMg>xI)l(`~JSHlq4!nd3iaSzqN`(jD#|-8M@4YpE+}zCay@ zy@C2QluK=nGey4YrszXzTiuPE3$iE2xc91k$p1Y?#<{o5r7mk5X%nsP9{a4%Nz=bk zUUiag)wd{~tY0!(zo&l=&0mhz@9BS&XJ&1}xKqD%QqP6;Vw*S001@N5FQ%kjUu*tXcy4gK9JJjOJ{dux83KgaazZ{{&~ zZ@ypG+1}##GC7z1SErYk&}Ql1$Du8JApejbu8a|ia%W)XRtaCFH8UkU%$PyO2I_26 zWD+uN{#bv^ZH>$t_)5zC&X0)i$62>C{~a@aV0>NcCUcWTrg8grCF%T8e(Txd-V=8Z z&cXjxS@`K-k)M)`r|>Ij!0%II^B6xY?U^x5)@_=$hv)ZtPgu3W`|h$t82+7^PsZEy z_o>r3qwg8wc$hf$1mnovZp(avv)4H@xmnH6Bl|Lm26*dQ!i>up3H37|mUmKsK(?Z{vb=-r;w7wdfdn26{G{`PI9pT>kXae~h^vEs7Gb zmOgT8{i9%`IG`48+O%o&!@vL4Z({C1N6_;K_c2)O9?aIP-dR^(-l{Mm23e%LLfo&s z8dney^Hs$^+&WfSAHQPO$}48IT324ais#q(w9wtCJqjqZc9`{RiEBDqaqWQgS706W zKWD$f)QFU!R>oYiuKKoqs^tJQ6YN)*I?n{8(bib9t~xGV0($XtweL^St=3@(Nc!Y? z$$o{YgScIaHcDtjm+V)V`Z8`3hfzW!YAQOgemPCdOXPu8hE9<8Lq^ro=4Jn-45=)+ zTSw9tM@u;c!n<$;yYPWgCOl(*6XIEDf^=fm^<(#u2(e52t=hAuxBCKio`-}dMd|0^ zAU)6HtSc!c&x?xqE3ojqsKj1WJP+hgS#;Wb5*}6-i7{Z8wcfWIHz_34yGa)5ozg$e zPhYWa^z#q;WPYJyX7uMP{rux4_LdU+r%LR^qWpZ47)P8@{G zj@Y)qT6JHS9C_E--rd6v%;m+^>%00sBeZh+BBoWH+Dv$TpK0%0-es{buGbPh_BdUr zWwV`1b-n*i)mo%6gR98x5sk-vv?-IRb$&Zi?~2K~LfVEx@6gnCSU)c#$;T(+# zjSU)+8R|Lxg~Fu9MvV(Kl1}wJrE#%F_*A(s)!3x5RpSbc9U8ke(iW7z)f(4mOl#br zag#>MLDBbX+^+F)jXN}EH15*)l*VT?4r+W><8F=5Ys_lguknD!gBpi49@6-##={z2 zjUyV5YCNX#xW*G2Pij2nBb=)88IEX-YK&=&Ypm5cLt~vrM`OLl*&63)OlWM-I8Wnz zjY*A-8W(C@q%oy&vBo7DmuhU%xSH8JX_D`Uq+LhI&vfjvFJIZa5pQDWxzJURKEX=p z#J!Sm6h6+Xj@X|;3V~HeefKE&m*-LPp|I8WA3fpQtM&8h`MzDc2noN&@x!Uv>W5qN zlzzUS_Ym^j_30+z@9o$pE!KA87ypxneEQfXjk_3f;U43;_>Ud%{l!Ljg@gTqdY|rs z4&VO;xJx*blfL`pexH6a;anu{gfBQHq7gb}PiuVE$9RTrj&3MU`V|tt!ahxDU(h6Hxm;?_jKF+ZKF#}|Ojgz{BHs5>>fDGt>tFfx>h2M_1A%)z z5*3W2f95tdagUr+iNERIi%DyEF|9Vknm(Dzug%JOvwh({*5EU#*vR3eJ&kqDX{`4O zo$}voRmd8Nw~zT^+A4la>%XtE)Hk?e-Q_(&Q;f0u@UOzy_B?F9J zS;vT_V@eq_ntJokv-IbbDsD-%J_}g5-HejNbq9Jj`YEas*=0Q|_JC|q2T)BU8|F2f z(|7RoD)9}(Byn@To5%+ETjYY=`@-3{@bOXxRN1V!Rp;+;WL^B{if^-y6*xQhl+5q* zx3JzR=Rpw;bpHyko_GuMDw3?IOr4kVY7z?JP0`Y}gig$*yt)aupfc^Slvl^26Mhpv zf}(`33|>`pI^#$DnRrWh)%rfq%HY+IwA(a#B3_kN7egCm;x%@ILHD5feDmsJHGgCN zBfD($7wwHCg74NFuDRA3RTJ^xHRp7Wlhrqd2P>_Ln~8M#=y{>lQM=maw9pl#tFL*P zb!8vlmswZJcOcf4%lNABKk)I#B%+csHS=6w65ybfDQ{^DVm7jHJUW>hOWU4^uC9BO z26Fl4WXwF>#2buL=oX^qh(RkwH!36Bm7EdUAk4y3J#^!o`;_gPmdIM zH)T(s9@Q9A_!d7)gc2*N@#N(qD5MREmiiq}UT)`EP^q?nL#ezRkFHc+3SBw!^3S0w zM_wL*t{i!pg)WVrNM0tP5q>qwv@KpS1EgfnO9uI zp4V>n^T@hGh0B?gypx_TJj%1FGUpH+ImBMEjqDj1vg|ySGt3$Jq4nzS-mto>zT_G6 zk7K;Ib|kzS&Rj8PSmrY7jt~DlOA6sF%==p8x{<(LfQS9PX4AHs zy8!)lN&FV?%*ijxa(8P|_M}&c+z>hA9rNjB-GVc#<$j<@p7ly($iIxlZ8(SX?n7^$OT%w64xoSkKrYRF*3%Qx_s@Y3}hKgA-<=Pw95T8Q-l_p8pbnfKRjcV z*S$9^+q)Av#C}lh|AO3+J$`aGnHskYXGY`2UCs#mJNC8mZbq5^_N_0Y>?YM}{XgLy zQ6*!WNE2>ljBV`g;yIuU|CPw7ap^?Ph#x_eqAN#6mARH+m${Y@&JuY)dIA|0p{4zM zWt6=HzoJYTDGS2B)NbUzd2Z^+*wt`AS@?sv643J+ySTRC&tpUwDar%<&nBt{jY+}c z`d=rjwq?ky8*VtKbM|+Yj$1@d4RgPt9=n7^UaV!!Z*3-FZGp{seA(Sb}%2YHQ&G8d&7UXB64G7pL)MCP5d$DI5|4zh{wEv)Z&pHGUiF9+y_M7asOe3 zmUqYn{6{1WBkP-3hm6OzaNZ>H;0F>`e7&RgO4cA#M)vXT3j68_|C9;;tuH66L$nd2 zOdBkb6Jeo=qhC&K%o`S*@x4&qmoDI;Yev8DDv`c-C39U1yxASbLt(GNcUlI&g*Fi0AbKKx6TZ9*ZIsEc zu^SA!i&@Iq(GP>qL^zb%|0DcXulOw>6XJfPbZNd)_ECN`2mg1T_2hr`&QG2FFKevA zuMWMYtVLdLRu^SSaw2{`$FobuzHcqAMatPFDLcO)DQk`Y!+X(RM-X#{`RW>5tR-4o+yN@I6&X))(kkf9AF&!}$$y|NekflZ*kRPp&`~_}?`$HaPMv`Tp7} z?svjZO#IMizai(R$hQ)h{|R$gn}75cUZdPay&EO%SX8OJ*pFK|^5RwHd-Tt={Ze@` z9-Z*K_z@H(bmhp4e}m5W5q~D$(*9Y}QHHz-OF3lFA}?f2EOucnu?P4!ybHU7Hp;|n z>;{AGLG$^N50XAnyT*|Z@9-b{nUMZk&g(Nm;Vd@^EN1v6GJ$?v$%i$V1N}IMpp-Gr zpLcHWDCU*+Uy-cVfb5>WH`yvzYIMke@Ud>PwonNZ=>#vgni!jN zcdWc?bek;Om~$C*e#gnTFmF?TMP=GZDQ{EP<&3@6{rc3+Ix&;`>37k+T2soX!%w_IlItmh*kW z1<#D(>lkON3}heACpl+`b#dYG*BIll2FCZ|$xXu<*5lJtJ}K*OaxRwe9_KyCTKXjS zTbDlOHed2B^?h^mbRXAFwcR^shFlOD!VC$@SrN9Ic0z7;+IGU(>!vw(;THB6G}}qH z$xch$Zj)Lo8#eqbal_+`^{T!i-ww++z~00DJmH5|+zjuht!ZnMk*Ulhrf0e(O%Y_s z^pWkH1;P4%{=sg4zL2r}v$!6UGXfkXYrMz(HG*LzDl#X69D2ihobw0PH&x~`R+YD@ ziT4b|A$zM`kwd;&pY_FBL(=AKFXk2fA@x1`AwOMO7GB~FY&qc#eCEV(hBFo(m%UL= z*n7#bxo0?vtb7;Wfk(WT9dQo@+^b|v!*}RB%knH6^9~~`>o~&=chY#$V^4<4+Xi)B z%F%p9q6&KzVSW{JE#_LVuEq*|Ow73duD6pq+%{Be&XmG^7Vb6PPAB5MM48;K_J8zC z*fO5tIcMuQk-Q(rUsDI3cL?`8@I*O*@8jH>+bRw@p=r>BHZX^}!@A!;cPw-{uUTe5 zdFoe7SJeIIrl+Exa>$~Ov((-&Htxy}+_smv9T;nu@~b>S+o!*;T8wT&A3~(JLPwZ2 zgl#|bWcEC{6nA)x;;yt9h;vZmE7on_VzY zz7}#W1m}^(n`r;<5I%a^vOWsW%K2r*w&rn$K|XEHeK<2BXWMuK*B^G_e|O*XesxB| zdiZYH+*>#UXT94(+uLl-pv~Prd?ELU)0S!Xi#RXm8P1l7b2dipkwVc9B2F@*!tI6gcP4fv1Gm;{KgNI}RA2z`}K>o@TC@&sknMY^Mu z!T+9su8n-g!pQQ9%}$hhk@qi8OyFk;VRLR&Lel?bKm8ZBo+bSs38r7C{d4%)H9`1E z!bfhZ@E_CROJ4p#%u?p!-!JbB<nQR88`5qB<4LbejuHTRCzT?T96|T2{OJIo31|- z{&n~4Bac_@Bkf^#+02{K>*S0T()r>quH!S`&dXls%}!kEnKI{|t1}k`WJFC(;S75R z&U{1j5Sy#X^xI2 z9UFBzGjHafGrz6*ehP6fcyLJBRv>)X3>E|Z!^ND`OK>Ph4B!5 z$tB(soRhcIde`?h$K$WbxQ=tV^6Q9iofBiMCwpry@CK46-2Jtj+csq{XZ!4zv9Z#3 zs4=qiNBfKY(H+ts$#|J`3|I%ro9vrYXNJOGvTtRUH<*mLjC+}1N1kR(sM8gvzhsPf z8oosK55zg=%c(u`@KnyAEs0^bw(XYW{7{^y**6YEy__Ww+omaO$n-Axq^K|)npHd^S;vL+DQ zg?ms5t*DYUfpO`mCl!83`LYxp6?d(gnhODB=#!k_-6Glbn^TI8YNs*>?D7e zDx?1=G@?@!LU`2u0?EJjqg;hXRLOgR3qFKflRVJM&cnUQ6I;&%<0#cs}0PvBWC8yF9yzp{j0>_x@%K=~+($(y3#q27Ds zd%-U4a;^zL3K=EsMJa7>Bpa0VB=a4Hh=JhqyG!h9(Nx^D|1}sB=m-T@A@4<&xA*k+ z-PPKBzkI>Lg^(>P+c=N~aylcVx-hbO2@4M^6w|!*sLi6#stjD%A_qNF< zDa_pyAI#I&)lu?YNZ(5T$e(3|Bk4nJM>E&6MrdkvAZ=dG2(iVCyDiTIlm3|<_A%cs z^{vjBVa}#-iN>WGn>4m+T%oZ;W4FdWjjJ`T(U{h_LE|QkTQ&A;B>gJ>$2IQIn9;aP z<5L=+(Kx8_S&h3jKCdyWalgg`8V_n5(s)SYs~Qh$bTy7>JgV`S#^V}KXgsO$l#kMk zC12r)#;C@a#<<2>jWaaXX>>H!Yn-idj>d$>295JH&exdK*r;)##zh)a8W(F^qH(Fl zCXKBcS7_|e*sZZo<7$m-G^RCf(6~wCR*n4{w`+V{;|`4(jk`2HrSTb!gBqXJxLf1% z8nYVrYdoOwpvEDMhcv#b@vuf$YK&=&Ypm5c zLt~vrM`OLl*&63)OlWM-xP%CysaWivu~R`hH+q&`z#9K3Z z#!gSm3i&8?qCF+&_)Y4Y&e32G*u4Dh@*c_IJmRE`p=I1$olnc2uq5s>Z;Thu>1WO0 zByJINpM=cIHC@r|S7A)~OZrBYwpCOSZ7LZ%hN)-EK}XRtb`Ux-&(d}gjG{LAQ2ZBK zQ6*!?ap`FPDttjv65gfC8i~PFk!* zzKeHuVfx9Xq~|F#eZIX3okp)lccWLJo6z(Jb_%@^okY(=C(yIe4tfTf?AuYag*plL zgU8WF(JuN`^bq<0I*Z!!y**&FgYco;kiz6$;WcnBN;hrm3@Jr4yJJOKUx+z)bIbutUS z20jnI3hoBECo1_YcnBN>Ujm;2hrp-6?}EF)gJ1@H0o(x|09k7+d<)zT?g#t9y{y-} zBL7&c+aUQD`G@=Sl!++HQIy?>rhaV7(O!h64DBp>7kVptK6*BK1{(g5ds$VPOIaU8 zLu);YhFiTwTaZhtg+f~cBUjCl$E{>da`g)r2Zrys@Vq>)4_u*0V`#ZY0ADtW2 zed@N=Ep5!9yVP9$L+wP+%02O1FYaF}%su37cgv;Q{+;T}o4Hlqzem3J{$B2tcR2mF z!&=bObx#}D&$oBCSvPky_u#C~w_V)Uv$DODd&~**qdj*MjC1Q%x5>5Xt?eexJNvr2 zyW3iw*}d&|cQ$vtNAjuN?Qqk2)-SoOkY&eKaWc%d?|kPda2NbY6Brkyz=}ejY5x#2>YF_A1^uEJn|@X+K>42 z1vgmIk4N_5wnPZDGWie;^y8I>updXudNZ;}l}j9yatfohs@jj?GGhZxcmb!eMm!5m zkWS2!f00|F%=5>6tFrUlekx$sMwOTfEaKlNu@@Eb1=6c5L0WlOy51=haM7sH>}h^_ zq#Tu!LO{u@9i^0=aYDU1H^%2QtJfUaU2@Z;%A>43SPsDo)@!7#D*GIb35^XJ=V_d; zF{!ap<3f##G^R8z)<~VJ@M(7nn>4m+T%oZ;W4FdWjjJ`T(U{h_LE|QkTQ&A;+^%sK zd6hh7SX-c;r7kCvf7$m^DLAO{S&h3jKCdyWalgg`8V_n5(s)SYs~Qh$bTy7>JgV`S z#^V}KXgsO$l#fzXlFm>>V^m{IV_ajc#u*yPtMcb)tQQ=epLLga?%uhb^R-AZKm$oG z&d)~o``Q`x?s2lmzTd!}-)U;igm3&|_-e*7X5ViZdxiHCf3F&AE&u8^$@tFl_wpXf z`ul$$V4uHQhiQs1?)k@D#;PzhzY6`$FKPa_MwPJtN4rp}q<;yoz?HV4`V=GQXgj6- zi~7b*1)%?gR#Zv;LTJa+&Y7l*?GWmb=}3C|E147vx+BDYKJf$+~N=S%wqk^83J z)+jlz=X>4$+or`lpN(EEILfnqWu47;b@Ai6a^`r^%$s>Oe0*5lL7S}_&M?PwQ{1P= zUL*E)x#^~g%juhsywVgqGL#PImROb8FM)^o?k#J(ZQbD@?TyT}hBN)Px2~J@(`>aL zUXvdldq&-KcjXr)yuax-;Z6`le<9k8#yoJV^+n?jNC_VRm@t~ z&;Hu5+G~s4;O?SsTlVACTK1HW4m&p*O#rJ}7_F^SvpYWgLw_SNNdsw3RZ3*^G zu=njr_FCxg_~q=9X^pZ6Iw6Ccsw3ZX!fs2Pu)e!M?Je3W_XV?uhhZ9W?`PcgL>v}- zD%d}<(<$D?$UtBjdrzYITjY$jEccYjUP0{aS;}S7ly^US$+Gc$W0UL$rcBwdyN$hf z#5uf#LV|w?uTIjHSeA&moBPAV${%rU=KPf=hqK<iKz&lhM;m)gU1V7bBUgqw+!>pyVFT~xd?yi+I&64v| zj=Y==QT8&(nMt|X;+HmbQu0N3VQ;4uo0+k~ms5m<7xTlTe0OH!-eI*5S@zT{rymhF z&X5_DGqEFHPe#JF*)J!1R;VXS!k&~*#$`|R&+?nnHsM=aEbHUm&U77R5p`FjrBC@f z;nccY`>S!|JI}PND{z0T>`|pHY#X9ax=pn^=%Q|i;*;21_G9UNo^|;}Y3c`iN7k0Q zAa3dbx=f~u`eEIoo3@jRcsrBP;mn}rKGa`9+0#}jdlDpb`r(u+*W55S&(v@iwYw!z z?U()J1#X)AZcW)+mcw^!mH3-P8BLKgI5NaO(ZlRn=e&uj+}B3_*>C0$Kl=hyxI_1I z>Z;CtXi&;n`0G2QfxEm0Cy5(&o~!+tzfZf8=U*1SGUtK9TeS6l+HOkr-T$TcB5S*M zsP@JMp<8vc2!cRax_GubfL{Pp8a<$8GAGeEpRAk8n3}b^qN>)$21&awo#YU!*S~ zpH;HIjW$O;%3Y{uP6WgD+sbHM(6X14dw$_*XrGk3-0(|WY3?qJOZymo$HeqKzc8Wp z^V5ce$D{cb%FdoQ;qeSw%8NSRoEDy?4VCb$oGT*yF6&Y|6PD~5oynbqv=ce6X|nsE z6F%~iQ_cO8st(oOJ7p5>r(Kd4c!#~H-*+tdr&{OZozxTcogk02-8b`2ZLn;HKcjeu z{hWnX%C-g`sVU)|-;^>h;T_2@Wn#&G@RuYm;Z=8?l0U*f$ijHcUF+M2sejydOIufb zQ7GKPb8-8!=CAj?b;rR~L)NH@Xk*DZc+w)=o6s`$m2sQUon;&xHU4?5lo{idjDyFe zOW;fV2%;3-rM_AH%QMj>%9A}PL@PjZC%;6Qg&ns_%A(Kp$@+Le4elwm)jYNwvH~S7O4S-8+`Y0zi*Em_wA8W zEMf7yLfRnyDwb;8;QOyQ;L}$g6)cYP`?^}od3SolJaef~Iph2psWIdH$^INj`d)c= zO26AGeJ=8I5q(U`?^EbUGnVWlW*o`8ANl5En-dpVI`T5|X0dez?|x(qae}fqNj;F) zU!=oH%Bn>FBKmWACgGM#FU?YD!wcDOEZ?cs<{wgh>LTy^Dqqxacf`&N$~STMN`A>} zLdNSCZX29&A!GU)%dW^bCKCB@q98JuaW88Z=^DlhH5+#}&7kk%j#g_%K1~_^hLl}m z(a@%~(d?Grs~Osm-jv;t*}^{QV-vd~6xrdx^ z?h#rX@6NoPsYUsX(sw$Gyzi;J|5}X|o-B3C_kZ(r`8bkBN!P}0sYUCFll;A3%7ifa z-XOl{bxKtF@%&mH){82vL=EFT{LaO16hHHXmUdJx<2ce%FYQgj_J)#-jjcr9vI@f~ zs~Xyx{949j+pIy94%LNrZ2)_VgNY?3xe8>sZ&VD5TL_U3#nTNqwyz2gzi9hZ3obB3RI z#~t;ps>~nqYqf0f&mEp!V?}6NS2X(N;|OoZ0&%SLzOUvVOOO%&idl$cB>r2~Fu`RxmoI=_XT8{9|P1+*78MIyaDIs&G z;J1GcWwuAPQ}|kV_s`(hCu!%BHd$vuPR%B7&$`PLuU{pANw91^`JXdLbS<)kJJkx!I z^yTpxr1v1{pF#d-c#rU%k&=hxX??f!@ePtM=6hAoaeOW5d`9{*$+NgiyC2TXq`Xt; zWO03hFeedagOn#`_F#Olp7_}_@*Ll_rr4vfrPUj_vDUTIYApwv+oV4lUQ+p~^@RB- z?M=!iEaCfg@OIKp8;R4-ZeWkadt4PiG?dw7^USY`!{qJ#QtqZb_;n!Pz{ws_zx^09G&96ZT{z0mqj9y5L)S5De4M4w?=YT7 zIIM}m({a{}_^$Q=zi;5X&?TgCF>4CZqmOWw$u{Yy{C1$qe<$^;+Z=U2hx+C0<`C^$ z)vZj-O53({3uM!zU_-YMhOX2k2kiSJTZ}!^_ zeY31HZ_QGMp~u{Zq`sOa(eK-8-S_=Uwnk+v^{ndq-F0csqF}7ceqPF8k;j;Ww0)oSN?M)#M$S?2$3c9Pd3vwNK+-&E zn6)14UmjjO<-;#n))TqRf=2j`Z|m+}j4bS={G%fOXjiN)Fcz$pd4F>MjK{3lJB44M z&9kP#nsxLASq*y@ASI z)a?ZQ;F(0QAEYk%hW=aKv>WMPD!t>LoBD-^$P47hJ zBKOntc$TKU#>78-xr6pa`85=V_gyzd+;W+;xGxzS_pH?tx9|!5)erpi%zDbu_`K@N zl>9^TUAv6Gl3De@-Yh!YQER8?lP8gXANVdUc}WPDQOqnuGxNjeVY z9~z{;?M5ySG7jx#EpU+c6{kPx4P4t`%8T?|B4y?ctU^W%%6HMM@tnRRfAia}h41GG z-%~%lZ}8h9?Knvq8vS%jTE~tR{q&1$^XY|dv|Yxd!+YkEw;M0@2I{w(_Vz_Yf;Z4W zc{)k>U1VIpHxSu6?8c=(Q}aX0evdz2j63kw~CD?4Ln;b`GjT-WhQ;yB#E~q zjYW6rutC=s=~rj7%q8xambX_9?;ovG%JK62=WiM|<5;Q3n!*{*E$K!^57vRN}@TX<%(;k#?yn#!1_%crFM8^0=GwGWEj#K-TE!cSIKb zf229;%QpMH=S=UkyGZKcA9urldiSXJ4o(oPH|5 zJZa@?&3NpRUGBQM>rK5H|E7L&g9{q*^CkH8Vr1Ezd~G~FJrn;Fb{QAcy+*Nl19xPM zf01QIj^zfE`$dM4r=Oef$eZf_YSjA}zD?hEGv)BXdNgB^8|?vXl_G9c_~%oo3A z**Ad=FVk*bx+UQZg{DuH^4yns+x1eG!FDWsC}TRQ6TePRcM2~ket`#kUOCk-;pf-A zA6c3d*}$09N$LKig1&JHZSvYcz4~Lcor%T5gUnwlkY{9J>KgP`^a?a3GL7U|mn7X;xm(VXszKOryZSN0phRNom+s&M^Tgs2V?NpMq)erYtZ+otA zTH>zfE`_D;EpyY-eoR~N%dhC?8rmtmT=;dF<4XTKv@Wwn>WlKf4Ecf#JLTQ<*M-9N z%(ai*^!FMm!)yQ4yOyPW`F7hXpgzm2@uuUJ^;w=3vX*r-wDN3C2Ho$|2pz{b4J-G7 zLg6own=A1{ziS*&h=o&neFa_+^fa|Ab$t;BN9s8?7&R7blX#doTO{ z*?S*2sjKte|2s1~yUVh|EPs>`QpUI@G$A@5Drspm>S}09<0K&sNk|-IA(#-|3L26Z zZ3b8sk!@GOgm|%x4K_42x0}Sa)@$2QF{K0(VlcIaHnTHKMPgf;Yg!VQo%{Zr^L%G# zhefe9znfQn_xsw}&-Z-K|8t)6oO7OYo^vLOkBN4$+k@SF(JJpZQU0x`p78nx(6fjtXs!RFt$s=i~ZP=bhC~bI3B6CiJQmpKf|@t zAovZ1xdoXucLOFBJz{#8a`pLD8D1gLs#c$0g-W^FCAFbjd`|J9PfROYj5gv6u{s z!FiKBj~ITe)OA&4un6xgPH&Q3$Ui6p%6vfm#>c|)Roy~^(AC`I#i-79Y5o{x-Jw3) z@m$)%VE&>6>rFb(bYW%YMKfHVT^%N^7j?={Y11W)JJffJr)f^n!&pZApqeQc)sCzG z1|Q(N>Ku350(~1+Ba^NicIkRMUxpdn*3St8`hgJ{RlTlU`0m4VXR*OY&F>PWU-{0e zJ+_zkj?k+5mr{57feM{>a;Z?LW?Yde0XxntT7mlU*-<@mJ3O(8I0Y+WNVB zJ61K%>VDvcE3RJ|1lL`E-C7+gu}ph+eg<@oZd|e2-8X!}P1mo!?&B*~e=0mqBE$<= z)tGa^yx@Y@V0W57gG1%mY-Kqg^_tE0E@-v)hIP5*0jjQmT{}PdZ{jDn$Pt}62J)O; za4_;Oth0u7xzoCvhu6CFId|P7!MS*4O!3otnLTe}9N^BcR{G-n!t`CiyTXg|<2i>h zLXdH<{$H41t*y!3T>tr;bzs83yZ;JL_8&A<{5(@odS?XDTRmvz?}y05!=#D*OLD}H;#xaOv7M-14pjUWuM zTgJ5`#<@3L_vt!Qonche`1&ZmoZ4qMYM*RTVEe)f6wYqO#Alu44Y(_|P!FA}1oYhS z$&1O8ViR1~L%)B`??xSYLHMOAhv5z6BS3{{4 z%iNXTS}9rCvwZb3l-*W-syo1+=L!pHf^-W3Jj7wfaIxVMLumT{icZN6i+87C-f*|! z9>WI=2MixHe8}(-!-C;nLulXS>ww`wLwJ_^{*2*a!=m94!=r{T7#=r#(eQ-fkjDt= ze%lP*NvA{7cY(~L<3cdDfV!9k=7Qi{nQ=c;NPe6dcW=bp)b78lUsgJsGKPx{ml!TJ z%o=tZt}F)xKp_8{T|P14}v#i zK8t+n`&p|wUP4IuC>>|L=)X@OT}sD<9NQ0sy$p+lgm=D>^edbR$9;Mx40)W0Kc#o# z6vL$9X77IDZq!|5e}thom{2-MXJQX(axznnzal*0{b^jOdhSRV60S2(GsLYk6OY4A zL&8`7ItWKNX||7V(t5Vj6W%29rEPVS$j>{3r0Z-U={QF?KpKRP7#{REc>!&a@U&xD z=Ytl@~v_2<-~LLBFy@}BnYk) zu4X&3aBblD!P)B=_Q_1T#UC^tmOqU{Rd3?oN=K08H=@VFVFqWizwNcU)2*_N{Wz@G zuy(psvVq$9ASCK%VZQzv%)&KaW7<%ggHwM&C%^D%vKNg(>&Ei2rI@GjgD#wZxzqdk zW@f1G9_oM8qqy`m%)v+L_sTwW2VJ>$p&o^Io_q8EUj@ zcfG6pl4emG;h=s-sv{M8{q=}<#nUXHQitu93w3^ zBGWM<^n*IqEyA{&hiP4mpF}+ ziPU+>{aTKE*U1vK)*Ko1_rjcW1ObG7CFh4k9UQx0M+a(pG8 zGE^6qUc>g$$Wu<|PP{~ZgnH!e40uXJyfXA7e_^~0a#DJh!LQG# zjdg_q8HV)K*v3xhPVGc~gnH!e4BA-mQQU=oDT$sYnxOh$xvd{7uU>s7?dw(b zy}{5}?W?k@z&^bq{b!1GxCDJ$azbTi;MUV>?M^BE`E7f%l|6f?5BD^-J=K=@_$&2q zS?7D?Ur1+-ZSQpM)PCegs3*(sOxoTi+=YI4J#E|j8g^&W_O{|~fS=l)@~m=6m^lX8 z6I;MbO{UFznBUMri1pv~uJF{a=&84Rt=eKZW}aQw-?_+?2_CjN_{W*+#>^ZE=Euyd zSC2Jlrmea$b0@x)etvGueDPcjmhE|^esRvlmsrPmCjDY8cWS#ucY4=jdGxo?rO}>| z#I(xJ9@g~H^U3E}&rfPBthUU)vTXFock>Z+=G$~PMQO6`52>Cge^9zU!Oh@X*$dDf ze<~k|Zp=o@&mgF7TDMJRzuRPVo^YcvH)H0%VIPX$ zhcTJ`-jnl}MPo%aCl$4J@Am+}TeP1*x-V{za|Qi$bj_4b_Rq*}WUqj?OOuxY?n)_0 zUz#{HCm3+L@!_6~QeS`K=;vePu^`=^1p6GCBJU02>}v~R>~BVwc>H&Ge=L%aevm4B zdNI(DAa0k(YNCZuj(8-Ap{jq#-X)&8`8(bQ+J-)@sX#XXtoc4bwJP+tkB^MoCH_SxUKF{L@rKjFSu`7ZlK zqsi~HuMXXoAZ~QfYIGo4`V8*YSD>+SzL3!VY4&VK%lTY_@9QALpX0tGI^go>|25fr zL*Eg9k?-Oat^7jXr}y*CZ2UBO1atip^2LU}{J zeroRY(lBm|UCOsJ=sV&G+zs%1g}x(Rz|92IKUGJ20^Z~Q1w|lMojzAgV zvH4qc!1|I}nL2ylcZ924H?3yX@Do}B^MgItiCnXM?WcNHT+_4m#%r$eK?aXN4)i5D z*Hjoe!8yS9caVqsB9lozA&9Wd|#tNxu@^H+H}BXn}r3`_UuTr@)_cv123* zegof5M~)oIs6UC1>QCP1`jdAfpLuKi+nGpoLz=!Mp}wT0v@Q|32wsex`jSQBb?QSp z^7&Tm2{-TVw~7^)!IPH3{{s50MBDT5EWf`@=6?8#WG`MH32c5IzDl~rAtxI59r}UC zkpZ#yjj#(rd8y;IQ;O%l`yT0X_%s*dmBYxAX29RC%y|AjLpmqyHRBu<{K4M~mljuN z;^_0l;qT1~ZyVulQrJ6h_@lOJwOlS{#b1w=Zw|BppiMk+(lXCONxQyDKSjKLd}Sm2 zu|K`*i`$F$?rpU$1)kRKsWRPJiLgm>BL*TA2nl1Z5#-n<)O z2fvtJ{1g2Qcn18rX^90P{tT(Qa!G(P*M%3yT>$mho-n_)5B5_3UGJ20F z?ynidDCX}wg)wCD+o=lm2YX-{>JPHK(+{W|bvH)jI4p`aI+fc*$>=Yg6HYe3SDJ6s zj*K`X8U6p06HxYJt*zC!>(lU(ST}yvhra?Z39`7Uf5LXqz)Mc+PBbe&A?;>)KaXGd z$WFfoUJ`8LTj)n_!+0BbN$}H<6F|?kCyclD!CvaW>s{p>`m48lt$9T#CrE?|vKO^U z_c(K%oZzOKpn$hiB?b5!Q%*4d?XRNUA}4qi0K9isSr};i&$GksA_=L^3JY$`{{wBhkG?+mS@NUTgQpf>V1LW+# z@9_RuEamPeXH14(AiB4)7-wblw-=MC&lfko{m$aHL|ZYJj28cJBJzNg$peyYm8X)r zdwoP6Fe&Nf0q8z+pFQKnd4R>gjeKvC4#i#X_yXg)e<&B-dg1fZc_H2= z%7?QA(h03ilBR?^<4@y8$_{f|<#so2tesVdTl6RyE3%_DEQd<38#Df>bd?)3{;>4h ziJ(N;F|PXoXKvQb{nMI@Z)=##yKyV&m`u3nYr1-BDI>cn7cZYstB-t6W6a&SVQ!xc zY@R>S&GEfkbX>gNlE$I9MOXSA`xtW~my(W2TCyKxJx-VHw%2{$KagfHNWJ}>jy>m7 zmC9ZCs6WutIQBfjwj5jogSpQw`gct2MOPTpach;Hh)eUs( z{i;9VZ{)$CwACKWj=hE-FgNoa%9&jzFstw9iSD$qWv4ffJ$4)|E3kfK)OgYPe#rWg zLmne48~ViP4#tWjXM3-`;ifZLGn#X8c=^&9$p{WN_9?zUdGsLt3GKQ+lo2q;9H4K> zpGHoQjFcw1`_@k&1CZSL1EHKi^HL`(c-G0Cr<6XOL{pNYIdBK=kZrb1E^eFvFLmd(l#A*kyq?$~G6ecQ z_?+)&=nvpU3S07ppqa2GQ{c{WlPP2Z<907;m5B&Boi=yld$V z6s*@a%9Dl|tqXmW$Cywf+R z93?l1Qf87HsN5!w^c6StoY9%`ukvoqDUE$ac)oMQ-OW{)T}mhEFF31r1M6GgPDJ3{ zF?e@0%6Sl#QYun;%EsuNzvk}pQx<=I_Z@U8d-hOI?rGpLu`FLTrg#M&6Rg8c{S&s2 z1|D--cj6QB6Y>j%cLqEr_#btCc&)X|1|Ac91G_WeG11+)%kvYDQJz&UYJM`u_}LRv z*@^DMC(LhX4zd2b-W6WjEbHxFYaSBbGd_B+ZcTnb18k5Ck|yPM7QY3CX|g@iX4kE} z@e^mVC+OAP-Lkl`&APP+)(l|q(<S=8AJ$w@_=oiwg-p@C4*bW}TT>pgh+}P$%=dQ8M%iWo@`S0N_R_oL^ zjeWSE^ODr7k@L-;bE$0~I+Hos*~L+9wmlf<=45xJTh&(mye!XLEXQ0X6RF&l)nIL@ zKi4ij-nHjDY14OdzXJ+FgPiHFGeCX`Wv#)dQ;(DGs0jm6t~ZY$pQ znJ*TXG4JR_o|W(U+v3LLxWV@a(K(!dbuMRmmM4!FZ%8q(BHqC5*)3(5hcJh)+?_}; zx8kf@-I2gKh)*XUDL?kMN#%{n+~5<*N0@sx6*qBa;w`BJXBD+nZXs>A^tV=S(V1x6 zy}+5w@=w_AyqwBC$eQj(u5>qhce>Nj;zv`lVvaMW#HVxzfc$SsD{nI^pH1sdhoJJ= z0qsfAeHK3n^ZS-6_r18VksETyCvjpEXQ1AMI=6u9w7O(uSNiNnI2t z!ndcEGj0;l{3T?KKHZYT+C4SU9cB4Ed%30+7iW3qh$X zsc{ZxIu#PG{oR{Qvd)2wsW4A>RB`@yT(bH}x3Y(i^g;VmN;3*k%u)7W_Tp|9Wip@h z1-D~AqqwraUG6z2uOCc2y=%d2_KB>ez4ScYms;>_5WKOn>j1nW#W`Vx1+-_*9UXwT z(stkzwCiZ;*ZQ@NkihK}(SBvu_@m^zrL+NFzNuB`pVGz>YoFSbYJHZplQ-J5yO(CQ z_>J21blON5P8dJyF!}xLcOn0jRknq=V=jEo*ec$hP}!0uANJAPqO{-W*Eq|buv6?q zjeKM_fms+36z+B5peKtGv~enfNEhkmG+RC#NG zJ(bYxwv6g;N@dsn2Z?8$!a_cVd`;(LXXEgjcf(Ut?rh5^lNsEmai{$@9~8Y-?q<9U z@1&0r-*U8Ex@DlL@?`evwjg$%Ph&rOqN00opA=uCESeq;Vmc#I=QY>v0Kz@@;AE1; zZrtGRK6of=T;#8R9(!X`gHPP>MCBj*uO{vlxKo?LE^Jf71@dEUiu0bIOk7QzeTtuQ zO+f$0U4HM)%%)F)r>1F->8-yqdQ3$F=yjs$X?{WpsJ!zHTc|%JzI$2UCMI zW&1|OGk7@j!_w9QacAj^u6cqm$fM3fPD;1%3Hl}Is1O`M=26`GXnQeN*y_G<55hg1 zwMn^VtX^|<_4?~pH*YCzOpA|wEA+F0zIjtV&Dp={Tf zH(vM{Wtb!_jD3bLdAYoDKHpBOOVLe>@}_Y@m^amr@}@RHSUbY7D!bmfmb!u_eO*Bt zluhu{Rf_3V@lz+vkGGP4L z*nhdPq01-X7jNf|wc9Ai+xp=%>c@OpkXHII#{b-fKzMb1B=@0N`Eu51J}lSbrc|7= zN!5q3KL~bN`;koLLTG@#J{{M%gz(=A(%0`z`+mNle*O)WU5iuf5$J^O7SOH|#{&BH zF1J@eefw0!SJ|~!XCk|@@oCqXsxIwLp5pp<&Z8cc_LRbM!|Z2;HG$F`Ic)dUBCDao@osBkN^#W36g+F?uuy|7)}v z-4T}m8PjI9`t8?@HmlY1$D~c}g{!Ac`Wo)98-s?quavRRT3;vC-x|wJTeW%z{&$aM z2S0n8)#vsx?W@(#j!wt$^QUpQwZYvB&{*f-VdlN6>jSE5Zze6btIlKGopTRuNn_zs z-vDEH$4BUAGmIe;8ecLt_Ir;sCV+pWD&No=@2Ph9Wjv4#20y1g=IQaJ-{8z$?vy6Z z1a@(a?V&$~c`6^^-j;^6e?j93^$*bbHK*}Izn)r4US^kW#Vzy>Eq7@yk00V?9JZbQ zl`)yd4jPyFzIEu))7uSS$b>9>rr1jYoE7>B$06YuMB%F)YOJL=zEnN=1?E+6E8Uz8 zN)_5W^DD}bvDXmeJB@7<0XTawfAtfD5!W}3A2=HvzQfphgY=7D`e)+PI7xjy^D{RN z`YPqeJV{|N*6d3couBU1Dupkf+ChlOGO(-^E=sd@%_> z^!MR1mMi8`ap?5MLGI#$Ke4W#i6QF|uU$?#FL`cTp;>*I>Vke?9ciXNNOe=k|7!f> zQt-|2)ekr~w}f|Nq}6Bkkq-FT=rN|!i9VI+i8@la$t5Zi(VE8Uj6c339{Ai|%89W$ zG?CO;R%3R`^HZvSl|AWRI2MiY{c`$p#+RdM!IxK!9)5-L)p%ZIeXeucFrFWLJTpL@ zY;b8He#)A@S2UHGM>^hbW!rq7$~Bx*%)FetJ5IW`O1{(Kyf7xYS1&xhH%P>hf5nPQ z|L`8d=p6U=HO*Vb4n5KOMsXt>}O&&Old2~OdG1nO1I8)ol;ds~+ zF0Ln&4Nt1^nKSpIc^6-D>HN1}cKH=uS6-!doT`0WcJ1=+6)W{^*7fWa`bA!T2G&Mz zyrFy9+GRhLLx#uLgFSVR@^4R*VZ-{#>vtpKT!is!)Nee>|rf)v)3VW_TGJG52pZtc8+{s@11%zgI_H5qAT93)}&;?>=&)H|FA9D6* z@Q@9Cfnk1ymIv8RD_~6UqV<~&eoCLr4QsH|5AyBX{K6*;FEpQmBwB9j-RYh1W6G-@ zvv2D6MrX!;lG32Z>?h6e#!+FZP_#4>x|I`|!##QlJj*{4DoHiQu`|gHIIi3mVK_4QAE1d(1y46pb>k zQe0$n$l|-X!Txs|%y%}J|FFUQ#|`EO8_a*zVBSBbeyz69f5M$e%A2lY*`{(E?wlFfLwWPc z>s&}HeE@4#=;%{_i0U<;xb~XmH{D1CI@8p?Enl_lMmbVs-1~aXCzo?N2M!hZC$3$4 z!zY*P+Zy+A4PRO1(-Exxfj%7#!jC447LOuw1tS^Sx3HU~72$U5W`VeKc!(W#e2*?- zlptKp@~^PR+ef#0d$k9hAs9;;&NGCUxbF)L(}vK9`@YbS@SU0TI3ym2tamtEYM3=7 zz3%%e!_|hQ%Y9#KxXy6BVa~AEaI+!#aQ^xYw;S#-+-aCM+-*oXIe!lr4j4XY_>kcv zh6TgDhWiW;7#=h{WcZBXVZ)-~5yPW~FBl#-e9`cP;gH9sz>pWEyQ$T%-7sM|#c-P8 z48x>hr{OHa*@h{@d4}^17Z|1uy9^f^E;7s*E;d|ZxYRIf*loDVaJ6BN;abCWhU*P; zhP{TH4Yzu1CS4umwdDXqGf-!YivGuSBIW?kYV!7H5wF}$;Jd@!v>*1Z=?qV`qlvQu z*M27Ey?w&`C1#tMe9B*fbUP$|hYxzx`#JnNC_jhfOW!((N2vbg7pT8U#MdHhr~4Bo z45!%lX=Z-L=VQ`~J|B~bU;JP)@hgAfS)7yi`S7PK_4ZTt2JVc^DMLCVlYIhnU)4T= zxvBYn2ze&^1SYRiXBW)VKX}i0&Ya*Z3fjYOIcj`?Bl`Gg+u${GTBpOhC9Am^Cq9i@pWMS3!>kot-$}CRDZ;xYHv@Grnidg*}43+~?UFq$<6I z1(n{!yh=H9Ideni>p@()FW5JQ@w)U}&U!CtI@;^bx_FknGKWt`Dt9JQCIf9}O(?DV zQ6!JT5ArqUaY`5YP+X)V#&_aP1%#b&dz20(9wFU{@&@h`W?nbAH}Qz#u)O_9Yx>&% zUVQ!dZQ6f<9F8*4`6fNg5%aA7rBfZ;XNbmtAp7 zK3-gr)m?E@kOwqrO%XTDZCxEZzZ8v-fAWVs zT6-1-qVe8TH}kXknzu8*WKQq*OE3pQ=9`_Sd1qzUXAV|&O*~lX5BC=2+#Unw*yxH9iSG;3@cpV*m6FaRLoCj@bKf|xcEp&H8 z^W5UKoH+xXat~}!T$yugOU(2CoNvK%&m@~G-y!|%KSf>u-LUpZG;*)9E?wd22sy#O zOYXp&@>`W%@8GUK<N7C`gE1J(~mU#v1qjNxsiRY|^XeaS19 z9els$1`4dbhvC&>3*ogixM@jKN2xl0;d_AFBmDM`*tI<5-&=N$d~4dcj0vuBCl(KcCQOVXBgM|Dp8 z(a8>JOYbaCck-uB?mebYiQEQCKe7a>Ej+GxWAKF1^c?Lg`Uc#y78bM|3!=EZ&QsX4*9}*#YEE!$(7RVc$c$ebluv z+B$8{^$X(ZmG2PWh9qYqu@*MTwYh`p>q_(;t`DTGsb8V3{gCo}UU`SdQMSWJ-5uXs z^6)8{tLM9Np)A;EAztY8DdA<5lkQB*#R%gs8q?KQts)Pt-Xp)|E%`L=kd0NpRN2*5 zaNh{0J`C)TDdRSu(>{Yd?pR}$Igu!D`JZoWaO>di# zM@AZb6SOg-@>yhc$V`F!zC0@M!XAa^ z%ACBA7Nt{Vb2IlgA14hizVem_=tD-Oh5Z*U|8n~sD_8aox^n(jo!u9?Be%J@DRpb< zifl^m%+1%$5BPtN@EyZ*p0H2 zSMfU&L3CrXX%aj=&fU3j_U7RynA(@>Bo6Jp^E~@Iqj@%E84-=M9`bL{y!v<6GqatQ zTXV?Evq|+WlqYgUN2kB)+CwoLs4mn_6s~AMbXn?~a83~&{{vClL%hto zZe<^3OubT1P3rF{Yc~#kHVEER%0a)q5Xf(3wH|d(d3rl^l$pj@L}Pc|H$Hv~YshRXm^rGnL3&oG;T8oON7(6p z>JxnbXTGOv-@V)KmZy)8wpFW#a2LdA$FY2-m2Z*B`@eiP>G~#PvS~{9B&C1C&h46jzBK zjHJn>#nNT8)mB-OfG4ZmnJ-edrG+_nSEkC9GJSt#Ur}Rq&J!rOu{~oG<{c@{FU-Qb z-Cp9ep#k_~L1%$|iuWe4uQc6_$8W+cdjEE1S1j-Rz-twT;&kB3?*`cXFYlAJ)1E zYm3cuo-Oz249S6Uw8ejL>GJ)-_sw7ZT>RPcheY%Jo$R^zH03ngrLj8vKHA9p)prr@ zr$^{*Xq$bzq3+x7i3UkubEV&vA?Zz%UVk^N%3kSWU7Nn?O$VrZ(Q(3PU_$7J@?b7J@d=Gt6ke^Kt3xY8H_ndwAACGu4V1I| z>*+#%Hf7Yt80QSJW=Z{WKX+YS%~jh!@*UMxg1SnPwqTa(t8_;`Qo1Y=DQ+5I@1SUr zb5(nB^Bd=iwxCJ3SE#u;NM4; zgUZ~MK{c~B#aJPU zv#Qdy^_MG9B87oz~Y_qN2o@ z*zr5x%rTH>Qr^MHKe^S@uwHpucPZS;4{}XC&RwT}cmKom&Br8na?dkqFaOSSul}Fx z^t-HwA;HM^Nzd_ae%x2N(W5oQI(L)L!TfGn*b}-FTH0hYHHlH-!A7AMUoHu-VIA_E z4B!5PU-*RKh2~R`#K=v(JH3bhOU!*} z&$)O0G53oI296ROF!%ImqwGIS{d5xgLbI>Yy7^zz;QqD-^Nt4dt_Jg$8q9yzVE*d{ z^Zo|&GY#g!2J;U_nQfhN*_stAuUmJ)C37#ngj4)(x}KX5m%AlFZhZX24L9mu#Wibg z#En1ot8qEfPXFWcGF{?m3z_o6^5mN3Ty^Nbp7H7=UY9Q)eJ1%Qu4PT~lSBQV@N(+ zxJwL|8fFc<4ObbiHtaE6Yq-vEyOY7?S?xHcN*pmcN^|8e86zP@Ik|e z3?DHp816OPXL!Kypy46IXABP;77dRW9yNTy@VMcNh9?Y%Jc>1{T;olKt%mJ}3BxId z(+p=ACJj3cXBo~mOc~BIoNu_mFm2dnxX^HsVa9N=;S$58hFQaI!&Qc>4SNjN8m=>3 zZ-b_8V?D++n!Wko>xEb{p<7e86zP@Ik|e z3?DHp816OPXL!Kypy46IXABP;77dRW9yNTy@VMcNh9?Y%JZc-5(m%e*u+^~LFkv{w zaGK!^!=z!S;Vi@1hAG2&hVu;<7^V%o3>O+MGRzn*He6!3)G%whrPy>Gb#T`e~J*}Jxe91i9 z9N@MHywaJ#mtGtm6mlke38pS`1JrrsSb4TH2Us6|FY=0{){0r<%ppJ4TJbFA#hnb= zSzk&gnWwsSfAqJPYb^=+`>M*Wna`B^u6_@0*+-qq@=N1qDTu5E-INXeY1T1=$_`}X z$fzc}wcY3orOn!Fkd9Thx$o!moqh5t-SPM1;wtP0-hBn}A}2^@nQM2KHfpcHoH(+X zmZHuax-}P6kWC;5BF;qjQ=AE~KZt#td98HKkx`)AB6&RFl3vzuw4RzrKPt75A99a@ zSgALseGyINVw$;g8hLD@4H+)-+obkTNY6aV+7{#S=s|c{+W(?^N8ZD4Ax3xOc89s! zN?ktU-&+TGm-!WbVL1O^W9!1x=czF*Ehm_wSRO+=w+>qOt%dgB>}W?VDf;`_{F44# zY^~w^kvOA8>SR`F8FHvQ2AV`G$Rl<-n#t$U->ZI}dYx6_yeaMdK+m}8Vcp*-`t)w^ z#9zeTe^0Uwy~pzTB!0J4c0D=2{Ceb)eaM9S^3;DJjYtDoQF>NswEp5Obf{9e)mqJV zbkA8=i*P<*GDTb&;?UX`x{T-v2f@}b%;`bwZM?G<8v7tf*s&!_@8IFI=_Y2_1H&Ew zbmlnARcn~Pqqr;Edyq?Jp!-4-XK+BXN}qJeGYbi0XX*86g*iuSJLQ{{rr2)Iida0D z*B+4sVM@26;O1KU7*`oMLY1S{+1Wigaew#@v>%M8};Y7=egUCHW zgtd9O=6kIXNmtS+G5lb*JQ|I^Xoz0j)HhnR(a z`Qgg8H1){dE2n3!I!rDiUuoioKY6-Qy^C&KoT5R_(m-9Nf1{8i9M*Uv4~maX?MtR6^?l|&$P8OVqtdaHnY)@IQ{S9wno7Fk=qyF~7V2e? zPjom~Yg!z{zmi8+k+w0ZH%;A04_fCKjzv>!p_*?dBWpKFV1aquV_+3eT{1&;3fGBj{9jq^yq8*TkT$_+6={ z$#)EJ-tzD@&|2DPZE46~#IuNFym$<8WE4kbC-e*rdKx3n{MCDj3p!>!Lw)H}EFi*j zzErJtLvwE{-2|UGLR%#)=uqo1;tRzM9mwPp8;2Cm$!PJ`XDM$QP7$(p+_A zK3W%QR%MgYd~%=4d!!sACl!~K8D*HPl^JF970Q#nAHyd@nu6XI+J44*o$e-RntDn! z9le#YmunX(8{2!0mTyFbYKiFR6%lV!(eFeN@z?adLnS|Wn-p+1mdazbbw+0(( z^SR&`ON8UfiLgTcLpdFzuZp{JxrIG4x578!Z7x5S5AingA>G^A*v$~{&%-Ow?{;^- zk#6aCYfLrIwQu?y${;KK?x~ce+fVD;l^d_C{8(q4B>oD$|04d94LZH^%7j6Aebws1 z_EMswh;AO=>h!n2|K4zq8hpB)wxc!nFM^y&aN)a2*CgCSdvnh(#S=Qa2OjqrG?;FG zuD=7CKri@i@x7jCWn)6;%xKPlPHH+){HW#>bFT0_DV3s~v4?KX{e;m=Kd_td+<3)@ z!MJ7v=Y_a%;CU7f?VUIhEp56JN@vvsk;}+$Lhjgu+D>`l=iJME9E=MiI_GfsJe6~? zJMa2e>hyfyrrxs;8c>^>|5I&K)#@L-Oq(L^SJ|ej!#^6cO;xMC^=*oL(`LtLd(|py z(%MH%e_5@*bu2fO?={%24&5=PeYJXRLpr{G8h1+?+zn8dr}Uk^?>VV4 zQ3GA4liFiRI^V^(F^F+D**&aumioTM*+CjpW;G6{&kZ!bcYTZ-e@aLFR`v6z+EEwK z7kv|R3uvmDdK3MkE1qTVWA!&rlMmKuQ{C8$AJ2l;nA>WcuKxb&Cot28vOmQ7Q?I{0 z#Mw2OS*26Y=TUzfBMtOJCtvh#QZ3=xT%60rTu0*-jS)`Lv$?0sFb!^288QbmKj~KJ zdzSo(m*D5B(k)5G2%nKmfUp=(zgcI~oa9`kaLgNgm@=a+s(g}u{=(P}KJY2^0kmWC zHs=cXR_s2>2y~v2&V=)0bLI(*%d00BD(yO_Da^OhOx|oPaT0z!+P=>24YJdCq~q!I z595TPJjvdVsjl9uG6=_0#Pub)C4Il(!W3VX{(CrndAuOqY-ljmt+7DcY3Q2oAEV9u z<>}@?>eoq!?iYQ(n-}(_89!)@m7Y&q_{)*H565WG!ln#m{?Zp2E7bJ6E4_r%t8q*4 zF2YMvF6qivr_+6>$~`Pg(W(!hI(KC{BtAL~T5mp&^TAxX&;0EZgL|*uOBrk=@8Yr4 zSv`*(I-)QY7X3D98Deg$a<{z^>~Z1jH}$2|VL*OTvk2=t#iKZV-3C^-PNy4vYu^qj zEBJ%LVysF1(5Euy4Vt_jH}t^xkT9vIToj#d#%?chE>B`wsV}pKG{LKrjER_6_Gvzu zaD5Vck?9wP*2|6mo|hi^I@06Xy3_GSZ-%%T^ErL^_R1}cF^d6t8`e1pqj&`0-btHC z{x^TfNP_?FZw_J1<#!Q3N%t=1r*+{=`5|iw-p=nbewXvRf?pTEEBRf;Pmkh1lQ5Ry z?pl7!`E~PK!EYr$J+t^pukt2-$bj5WYt=tf`$N2*`vokW&bwedc0^CN#Q z3}FX9%Y%$le!#!1-s}nUTbBpfoP%63QsiYkKZT*RCHOV$D|uZz-~NbS_=Mqw=2MWw z$W6UFy%T;U3F&DS%rC8TrQ! z+OW%Tq2VIKjNxL#C5Ft}TsT?7Zo^fEs||Y$;X}^-I>YsbIm2GV&4ybI`wh1n!Y^Dn zI}P)OyAAgkK43Ut_@LoKhL0E)4EGxDGdy5;(D0DqGlqu^i-t!Gj~c#Uc--(s!xM%> z9;qUipJQ-<>l=Nm3COdEC?E;L+Zm@!;zxWsU& zVb-wQaFyX|!yd!6hU*O18|FO53a~8l)I>RGeYA=E>I{XZrC#^D33tx^fL~v2-tE^< zTX3g!)HdRGh`n(9R*&tJ-|N`F)K2=PlP%p9jWy1C$lGf@SMDc}Z-=DY;by}#xnq6zl2@ZEe(C(wJhu>hMt8nW+M$lajQ~|f8W=|90|p#ut`gs;(80?p~~b$6LZJNbox-G1AQE1 zJ&HRO5P#D#m!2%TxxqV_H$_VuGilaKVn;V3Yu%V#fV=sXjhr2|G5wCpM$UjHo#ekb zTA%vh3#Ly!C5}F|)?1uT^(L=V9Y>FvIb%vyp1j5P zu9`kFI*iD%kX;|F`DYEDxq6|~)+L=zExI6*shGZTFsJPGjei6xoqxu9VG!d?N9m3r zhy7w{IvX^CXjeI(LmtqtHDM=jEwMfwzn#g=?fqIuM~5hSuTQJWX83QEZ_4FG!bQ&A z-wrR?D_IL?547?=U4F=~bgG|&2d0X*{dP-nQ_pRZn}{~} z{;!o?-{`S=L01|19JQKJ~+s=~tyvM6Qd2z#n8HZaYkjQXgtL`aneT?ucwat24*8aqfB$q%YDC2zcHc08Jd`p zt!3vyKeaxSHaz7B{R3;|5zZ>m&lW^ZC{4lhRB4azr+CiZmeZ%&_fej1Ws>4HSXVAk{$UPU9 z-pShAdxJNTUh*Qk&$51n%yG+?&)$^pc{63iw|;)E{c(=K$#0d?qjZ-ykkY;Uo~c8< z@8P%OWqw)g^po4u{ouoGWBpF&{?&YMeVKT}aK?&T-$MKU4x;PZF8#}C<>{@F80Ye^ ze+2#FRBZ4AK@57CI=|t)MJ&_}~qq|wH-iv&e@rvpLc`$m0(Ab-i54SxFuab^1 zZR>wmcDcjjQ5>PEPb)L%u z+D5-LlID4YO@0#NSeu*g%H54!7{gaj{u5^+$n8|6pLCpCT%K)K|2|SiL*MXeraz_& zXAeQZ8k)un+W#=)Xn!K2F^s~e%v4w3tJN*<{=2U?^3V!Rt4?PBpgQ!oiZhPhar^*< zOdm=gfX=1H1jFAXtXNo<@LS|C|eu9u&&=gA9Z=# zUYEDHc=Gfh_>=lHlg@jUPINhcNS(A+NGoA~lXv>y0^=L@(7EwNLE|m@{*zy;vm?J6 zdxUnJnLgsL(e8I&#*X;tqo9f6_5Ic_X+Pkdzvk&d{ZdwYA!4<%XFBQYG3<+mIHNfq zls{eTi&S>>MZpKzo5&c5zKFV|>^K|C^+ohm$&on`{DN{(|K-M{z7NWB*VfScG|ppu zvW&ccm~=v~$@a?c6`%>%&d8^9)(f4cvpxgflBAsBiyF@aD}270uUa`t@0f3OW5nTq zD=jLxK9#Ul&a7b$T?(B%CtgXsA0=%y{-E(0_80Q~?#8gCD-HeNZ-f?Azt9zW;6tCn z&-+PNg!Ih>#lKm*R9%aors$(D{6?5gTlZZ(DlFfhA0r&r{YLlIq?hr9`tB@iV%4vV zPV-25NW0Sb!l`K=;QLUfK0e&NtybsNYDVvj$%9`SY5y0F-Trg5|Dk_!ZaFhsWk6mp zEUxNl5kDr}i`_W_oON&IFqQOlR(2H!2AAp%qLI4ApW{J|={>6R1FF@nxNp6uI`m!n zQU9Pi{6Y1lztxHnYjZ7ptf^M1|2zUAF{ z{%!vMBdCAW0sQ}7x4L6zU6C}|d&64UIec$fhut`SEQbVg$C#>dt*ql9-|8Q^)zh$6 zc3O8S+{%xHx;)NZr+;_^u6s(V6YlWk#Y+(M9;k z{0nAyt#q$NC+<-p@~EEOW9G|ACizV)p5)WZ3~-eFhZ@Yw8_XYTF#m3Y`Su2LSQf5Q zvD?vL|AhwgpEj8Pa+H}hv1`_>L>1a;9h+LTd++QHt_@YD=ghsdK|30kBTCaKK!0+L zX+YN$m%~La*1Ars5ZtW%r$TzhlZsgs}C z{ATe>LGsAQ0%T>*{1DR^nGbn$1hYHK8G3ZAzF?V-402&!+D1D4Hp=u4Z92%8ZI)-7%nzkVz|^WYuIhL z%5b$|kKtOwb%yH=bB4W!n+>-b_8V?D++n!WFmJfqaF5{wh69EV8a`zBh+)BSui-w! z1BM3;4;emVc-XLLc*O9i;R}Yx4PP`oVL0SbY*Y0UYcgy#Y&T38PBENjIKwb$*l9S+ zaJFH}aGv3O!v%(E!!E;xhKmd{hKmiC7%nx;8g?75GF)xgW4P9Eo#A@JoMErwX2Y$9 z{f65OcNp$8%p2}D+++BF;eg?Th7TD&VpuTTYq-zwfN#%D>AorbdvXB(yr=NZm7Twq8(T{vBa3k??;W(*e_E-_qcm^JJ+TxGc0u*Yz% z;X1?hhB?Dt!_9_U4f_qZ8}2aNX_z;Q_;ghKCHF zF+6NoG(2K>)bItvXa6bxn7Ag(U5&5)@$B5 z#vR z#Co?niy}0)t{!<0zX@BCBj4L-L-lqq_df0cm8Or^>3EZlapY6qLVx4d`*)pr5vM)1 z&!Fz${uXko1nyUj*58SC(q@9^4kwV~N`EJS z?z7wzov6DfntlH()6i}@bqr?p%6dEUPdmOmskL40TUUMwKhaEjq?4B-egEjzmeAQL zUhBiwJ<~33-3_Mvk}mFfYyS#5#>CBD@$@2iK&Q!{qPXcqzNWQd^a*GqlT%UdQRclc zLwd8^o7`ENk?EzL(5ce>wA2|oF~w}UUF#Xo29f(g^k;v09`&`GHk;=T@Wsyt=%erY zMv}OY*GZ>adJB2VEN|Gl}1^d$4}MAycjb?XuS%)im} z5WO@ECyZP4vEQxZrKQuiT6$#UYjLp`xw&*>E!?Ac`N#a4V?jhT z!akPNLfy{|T|Gp4yEwPO=qkfHZziNG(J8c??y78O%@Mw(v-q9g-aPkcXV$=nG77IW zLwfE_$f+~oJ=)C=2hBH9m(WSl>7t9i+k*JN%1v=4@_qQ&eG2o5Z#_}z%XbkkYoKY$ zQ+sTz9+hU~eQGoG4V)vunzV0AxC`6Tu=HnURCfK^PIUhGj*jb-NqAy<6{0!GiMvXp zbzNNkl?h5lT{q^T{CvIA7AO;VP-fxeeEx0PQ&ZlX&T;1R z;W+u6Dqh}K5HFhn4|%6}9ByKjT`LQGPklR|l};69nO;PB?6tZ|%e~Q-qfyFlb)0gU zO8#k!mH5S#K>TTB(J*0gdv>7E|@Ez#$ z$rNW(XQ)@|p7JI>wfj}Lqumd`sj};R3vmZObm>Yu|rvAna|)rGrrHHwZ@ zrmId*UUW?#k%q4he_ym6hC#mAbCDrl(Mp=Otum#LdJ-KcKfbG#E8o%0%kCkJ-yp8t z*3Y3=n97%IEJ;0ar?_}vDo>aZ`U3ThHlB=#@66UXfi~FaPh$Y`?fgX>{M`jD=I}Fw z|0MLDDrReX)fb^xJzxEu(m}b+rhj~c>O_4a{ZE|y`F^o0olt*@{p4DDHzw65<`gfq z6!wYIKW9xbA^r2ZF;Z}2$->b1+2z~!iL57PnuseJhU>z+H#NI>OS*}?%nHkZxLd{^ ze+3^>nW~TVb=n@8j*gVell0FiU*-tXd8VID?>@RYkyaf0gUDR*IB0wD|FSHu1#0`C0oJU>{@56!!I`Z;Ilo?1~l?7xhW`1ef{p@%8xZ$e5w6 zp?uz=a9GdID=x-}=+pTzLqoYNR=N0m1iA~}&1>LY4P(;aY?TRlTR@&VsrNMNZ$X|j z?FTr2#`kZT1(efIaOd^WU7wfA+kNBX{C(pZ*AC@zGt2EWtlb@sAKcSdhjrrg{D_P5 zcbx9|0`B8UPcG6I^nL%za6cpISxEj?knVfMd&P5o`!QbY#v1|Wy+BjD9^Ik5t6iu( z#mg$23(U2WF8?Z5Ki7)x!~HtKp3gm0@rN15kq$pjs8(gL`;M)O5S3ob12 z4$7$(R*be)m|t3yiIC2K`uZg4m{M2&w2=sUqFLGp>3|NPfx2;H@>n|n@~ z8=jU1s?|TPZyStTo+q7l{!I2DX8~Mjv`Rmq^JcOK+o~tuLixd4uJ3@yUq;#)&$AbS z{)YYm{rCoY<_wI=u0q%7{79Gclr}HnNBDHwOB0yjr^#PCzcfFY=Z9^Zdi}5Q2lmZ| zVbqtwez)J?4EaNK`0Hcxhidh`A%B4X{*~y2{L|lO@{Z?nUk!Eo0lq+Aj68`INRxe^ppC_{23&6j#*v_wQ9^KK1}%)%S7hLV8zP zN4MXgr@sBZO#g=NL|y+@9e%i;ZYj@W;*T-TF4z(TKVnQ;*G4n6QJv?Xp^Xmx(rL={ zk2H23Dc6(QcLZO`y1R1VA)nScE>F+AXfyL#_1iNmGauj17z{cr%%(r(-ibVU9`O0Q zs_y(4=t%TKKCS;2-KHA*Z=H)W(tlTnH?rT$ok2rgs9(uj|3v@oWOFgsCe&}=I+~X0 z0~eCs-#kq|HTJ57N4YWH@?!z2<)yMpoiI6qDMs7BGQ%0*+4 z&3Wq+>ieDOHG^Nj;p?Ic(fza4lmAee`9$|9x~*3K^0fU9`-tl4_SN+}!{Zxh_j&RI zzf0w7{7&N<^_SvzE)U{&Bk8Ap|7z^|b#oN@=8!*BkvCY`Rfqpj{8qH+!xFz$yG}L1 z&mN_YkwuKflTLCsM?K99k1dz0o_xB&-94dv7g_IiFRw<A{a6IQ zU1hh|HAv}~AkFw~3-s;gJH&H{JkOAsd36059kj_& zXLMlJc@)x58>-)HxL4s4#=^?X`LoN+o6E>E;e+q2%v^eol-G z$;pgrDmmI&0_R;#i!_<2*mujYO{0)sM>4)hb zvoZQ&=pgbSZ6o*Gwqk4fBgn*{QPvgqP#)}ub7!gkD`BVDn-6aw4rHEc)A)NI_-6XN zyPcm~67HU#QYMRC^!@l@9G;Ne0ok9|DIotYe9{6LYhs~>mgL-{1_ZL{P^*l$i~ zT=IR&f^;Tg$gGfoJ9)LvJJUPkZ#UoOo}HmDijPotZv0*BO)9>OcnISb6pSH>~3f&2A_lXGVkw8Pedulr{bS zsk~KpS{|#O_ygRH8gr>1f_`k=_2XYx8+7GI`=+f&9naXDhQ8ndVLOD!j-B?G7r9LBqZSKOF1*^LiF@|*p%J zB>tS-h_-zEG;a2iAGM+Ra;x#3(#G6+8{f5V(tI9g-TE@lLMvIyR_VwtLLSK4ulgCv zedZ0bNeAP~%^grnZtk_8+9@(@*wtW?-z? zi<}sJbm*>I^+39Az#jQ`Mq>uPr&ELQ29*JGQ_j&Et3AEc<=fK;UE=nA8e8BWUZ-)8 z`v0UGV}#>H+R;a#fgE&Fg-=Kpy_2{dj}i}ksyh{ZoVHWklwyoh_$c)!I$1dQ_&XlQ z?e|1;&{m+dk#5Ox+}LG08$}4mt-11k_MmtddBe{)Nr&-W$)iVjFS2gQj+3R;YOASr zxZSRD#!U)2^=;JIt&D#+LqC5?*lzAlo0=f{#@{05u94zaM}H|xA7gmmUy+6;+-Yq< zx@}G_)m9z;6BnP>;h>|z1Mgt0tTi{=8zLFv6FTebC&xsz=1d^5*Dp7T0A*8WHAtwFcowC+;4m!GKj=iDXzyZaxeZ$2iuo9pe) z>jL!)AGwpgbOeM7m*>3A`sZH#KiTP*=|KcE^8LI&;obbWuX3ZOgI~S7?_tjJ3!l)P z(DERwH_gD9=4CuTw#5fZUxJ^?xGua|aMFN%LA56gulAww1ZN6Y-3ZqOR(4~^ZLZw_Nic!l)nLU) zF4IbTsm;9?Ep4gA-mPN9G*;Bydr@=iFw0bosf`v}nk>xk{rR5fJA3x98-|*+{xs*c z-~D|5|9_tEpYxn&qVZ%W|HMvIetIlC-4;5XoAg&c6LFi>RaRnXs=t5a z_PVmtWG43vjN0ejSi^_Ri39r@ODJ_DjyL_g9^Fba$@(z`6~cd>!$D+p9XjR&;Mzy|TM& z^@jBy;2Q+f+qLcmK5(!ED^{;rxiS0-qPN%OMsm`vUc)yHD{k*u-MzB6ckS(WQC#(B z=hlV#!1&|=RbuN_>6?djE4!(Hef{8kd*$ft+prSkfoDnnGiVLvI|KNJMFzhs3W7uujW7uc7$?$H&e#5PX+YGlG z4jAq<+-11iuwb~?aG&9$hWiZ<7#=h{WH@Me*zkzq6NX0(pENvX_>^JM@Py$>!)FYi zH9Qq!YHldUT;CpILt`k3g82C1H5ez7VH$8&Yq{K~E*!<>(iiN*8f5x!YaIWDz%O`7Yt55n! zSk5%cSGm*ZM<=I!GQ{b1hU6pv8RX;e?hu=)m)y;rhNnZk*wW8j6uM{bGGx3IeltPOvYa6YQ_k zhd76G9!hgo%O~p}lz#L;cT?O8r_*+q%I`4z*BoaR&gPsE(5Fz|GqtTekP8&9I~O7M zGTfEvOs4aRlPBjMF};*CY`w{oHxK25;In!chis?r?etqeI^(jz{TsrN^9!!RU$X0O zRNP7E&EOrt1kS7Vu%_)0}7o`hDuQk9Sx>`G4!4FxS9YPw`EcS`uE68m3p6pFd5e@zHbZ(|GV) zKh=36Ev?1W+P;Zd^4lAh89aeru^c#QC)m~Io$u)gDdx*J~ zW3H!=r9i&vJAdNkh=z(zuBhrpZx#0e=us;Siawh~%iQy%G)FZbxi_9aG}GxlYvMjj z?;KNnTT#y(-_6#)mEv-=i?&Q=UXHF8boEU~1JEMzp+C*{Y*7A22AbfG^Xr+!&~!%= zC!rVVc9cwaAXY#-m(cbTs_e^}Ivcejtyl1G;A8cOq=3jfLAX*SVlDsGH zj|+nn_#LHrypu|8Dg5%U4c)iydfk1MKM@4wquiC<#C_Ylf?LAh$qV4wjcUVFBk1g% zxbrVy;N6WF#U0NyGC#&L+>0_Z29@{p9pv99xheP1*MsJ_-Uen`N6xz zC-`5SBBKlt*srf405M!uxH zndc`<4fE)Srlk66=&|nP(0$$9arUIkUu5pmZ!UkM5z)uDg5;Y@{oK=X+AS^3>27b) z&`fkm?FeZ=>oI*R*`8UF!+0P_a^Dx)xobRKnmMR(J0-tjcfP)OZ+|2GAh}NUb<@zh z(VHcCoX6J9r+)vhyysPG$n*Z=AL;pL!kpeL{7d-ftNvl!uMf?foSamt93@_my01Hl zUc^TH5;GoKHKj_?VLazBK@hQi@;0^FFbnlJuu*WNBkH-6(cK#rm~ z&kNI@4-$ST4DUcb^@|;@ELTp*Cka1L+1N)gP)DoZ%rIRyWmHZ^@|bIR zh;KPwOCF!Jwn^SVZAGrb)sH<1_up!_WZVCDHkrDwBbh{wdj_&^(_Gv$!-}giG*@M3 z{xAz#?Ipuzkeb5^Dxw(2@M~*$5 z`b_n^)5`p8`Qy;r=5T*gO7ZTI@2eC>J&9NO4DTd57=tG5Bg4JpV2j%m&g@9nyLWln zpni9MAejs5k*cR|@a##`cl5JAEHto(#6PF?i2W3MrEjpGvhrBt8fmMO>p~X&3F5ME zD%3eWOj`T4v0q|cENvg8PSOXad41+rH7DGjZqJOJwyq?!mXrqq)|Fr8ceuX#o{#d4 zA@Aq{){x6tPxz)Jr}npLU13kyidl?Vh-tyJlRt79g)D0jbuRFpuA{E}iF8o@8hmn5 z@H%Myovb@r2mcuIUd)*d>i6jEEo>VPo!=<#xTbw{*pz1|gLTTspR#YnUiI5_uAjoD ztU1?z%Cd9)d_E3e^76}%WLk@xtFjYQho1OKL-}#~_<;iaFiG4A071FU5?jzFh z$>3>?1@F$_mCVCXPuIs7SIMTp^9%ZhZ`aVQCgd(EeBY4f9bu4De8w%1EDm$JWqK~) z`;j0wJ)GM^L$e&O`g?^l*Z&`LU;5j=$Gnj)rElVHz+J{Y0XH&LdiR)aRi3F(_TyNo zY1V|HTbuaaCUKo;2i=`o4<`}-|0+IyL5ldy^JFBh&O#~T)|3BNN?UmMlgd^|a|r(= zen%)%x}y$~rhe$w$*fO7-OwzsQu!C4N5mExnBpngZN zuwK8txSjspk!c~X-&fz0PV3Bm_M*I_3XqSf>`@-%%e$*gTlwqAV&t7J#{Y)h^&jOR zPnpv@-X-E6^f~-Z-@Wvt7z3S`rU%uhawfDUR#&~Slx*zEr!$H2*IXG|C!5R1GQ9W7 zyL}^j!Ft;H-S|3*+<(L4=w+inq0fK zc}Lj6JIw;`8}-gHPn^7X6Y+Z7-dKF4+?OV9Ce&4k+zNelns;kizDt-}?CN2EI@mI_ zoKyc}-MsJTTg@eI&&#{o#8ByGXK#3bc4-_R=9PuUnKq?4tJZ0ZON(=Q7ul-)4dpkM z?@)Q#(}ZQR&b!~Fc6qj_Ww_&ipz29{FNujynLx;#JhueZR#T_CwXJygN^Qw8r%79$}pQU0VH?_VbE; zVuRKp?YT}I(cX{u-*#SNp8dVAms>ZfGxa^mxKQumj~18Z>%ot!-O#A|BH{M8$U4&2 zxlRtkty9lGI%fTJr|^x@=cm#Z<{6ARQos6G{U)5ReyR^L8jYjs6seD7F?sKMfB9EN z&o`Y3>0`dnhp)mvNU!xDesT8W^mPJ0;r!ttteJuQk^kseLV3`?Xso}Ebj)A(4jvvc zGM2i35)ahaLt~6_(5~?(kFDq1SJ02G^^C3d74^(DesdVUru{%a^(f4GnuT_V)vW&B z{y_aEJNv4-1iHd!5KsJ(ahX(Fl+*7I%+`5;ao(jdg}*g0hF5A$Iq^04(I?;|tShvM zx?X;D@t$HsiM671UqSm0&ZyZ*uFmt~vDTkWPc6<=OT9EX80q_m2a8-zhHMVaP&i+=-<_8$9}CdPL5M~sr@B%RZprs{{(Kw z6N>%tOE(9R$#gXF+;`*Umba*WBRu43CzI&(WwsZ)GbxQ@X;p@PIg8HIH%?})OddyX z`;|L(OujPI)7n^`J#&rP#Jpk;8R30z=Qlf-@p}u4`*lwEbNWVol(s%X&O?2m_Glho z^CidEs3&!HybU>xzlhgYx;dY&R7UN~)wc4M9??Jh^5_1C#*{b@kan@^Q`*ixggIpW zzK}V*n6^QWmB+=upsglo&dJ}Zys$5G$d};%NLKffJ?Ul^lgT#636>G>7-YNOJYu-cs z9j|5%Yi&bs{qw)3y3}tAL_0IWxt&MPad6QHKRN?#yF4Ou`;7aBg?)nC&ojT@&YVW( zsegjz4E6p|c^BjE%cBfeUJ&F&17SMd2Njr4!^k;(^*zPyIo9#KTPsJc(QdvLko^+e}_Ti-|Ki0(0<)qi1*w^F~6{iM!tQ5w-ab>pjVs;c>3 zqI~0dy6~m$UYdGIo+yle4{@oB?J-8`5R0E2dXM8>P1*w|k-JXtd#aojHD7)=oadE` zw1~64NCkDs2Q&l|cxyiqzsbBGm=a7yM`Ah%y5@9ux;@y>oeWM(oojda&)Z`%IC{r3 zX@Dq9ZTgbEB&HEF$J{B9r-d`os7G=2ybh!I=Zlvmj?(bnPLIp4HMG0`zJ4l4@vaTS zTA&1%f9MSBr|_5zPD>|#SNTYw;>g5ga9ZxiPj&H+;^>LV;I#Z1ejN(1$Hx;|8x(Tc zX`Dx~OvcQ_s2yocOa|wbN2t!l`1{A_=iTQZ9jZ9dc(Rj!;z^5a;i-cWH{o@QBW~i< zEsMAbuh)3#vGff&=L+3~PwtPniKFwpdlaAWsXHTX{H7j=xXtP&M12^)>Ls_Avl&Zo zXhST%+|`Hv;BVx?L0v{3+&*vTiCgV#_AxXlJQ?>tXsMeXwl^-*^ZGD697OEzh`HfP z;bZx|H|Aa+bKf0vKM-?26mvfkbMK3}xpxU4EB|vb_ZMUCqcOK+%iLq>%Q5%g$K214 zc1xBee8Thz&2#rSx5)%~g{C*$cx_eGr}Ns|vG*e9(`!0RFI1vuW7q9#L;a*HdRMRR z4n~U!tyrGL@}Fl&JDj`Cu-$N>Va{-o;bOxjhIzxKhRY0>8+I6W8m=+yHtaF% zGu&i&w_(5GR>N(E+YJW{cN*?8+-+De+-tbc@KMA4h6fA}8XhtnG(2p0#PA8jqlQl! z9y5H(uxNO~@TB20hR+(FGCXZK93ouNjZdo1u+gx|Fm2du*kU-#Fk{$iIM;BVVb-wC zu-$N>Va{-o;bOxjhIzxKhRY0>8+I6W8m=+yHtaF%Gu&i&w_(5GR>N(E+YJW{cN*?8 z+-+De+-tbc@KMA4h6fCfg!G&`9XL9#YcyOOhSyoU>#W^%*6zBFFrC(F(NlesVcM|S zu*GneVaBl4aIWDz!>nPOVY}f%!<^wFL#wBBy}Ei>J?pKW^~=nExgqs-@j4CH7 z81@-%GQ8Wc-*BtpHpA_P1BN>dcNy+BEEw)J+-LZx;eNvdh6fD~84emAHaueZgyB)c zCk>AoK4n-mJYjg!@EOBr4Nn=KHXII7TORdaL!DuxVUuCnu-UN1aF$`lu+?y`;XK2v zVVhyQ;X=c`;k;|0-dcwyYz?uI`pP|t^s|Kh;d(WhdP+u3dq&lJGVvX5Gu&=CV7Sw8 zm*H;1f+6L*^!p4SHQaA_!0@2qA;Uq#!-hu;pD;XX_@v=6!>0_3h9?YZzpKYHhR+(( z56=Iz;c$pefnl9tqagu`-;_3NHf%ARWtcH+HJocW&oFD)X4r1H&@gAX$Z)aY62rXV zQp072%MCjWI}O(ub{qB>_8D$6yxXwfaI4`q!|jFxhC2;+8SXYL816OPXZWb$e!~NX z2Se0ZM7naPlAmNlr;<-bNct&4(qADYeHy$d2RJ=c)_kSt`H_?qu& z!iCe;ggCv?aB&!aI`wTOd^+(Yqd8+?xWAjRjU%+&hr;;Hl&gJSb1wXDqnUnrHQ^T% zFjv?b=6CTy>Mu9>y+$}3%9_t?3iF-0Jj}N$OZr3*yq0*EP%pLTk`|8SLaW~;yUm|? zE_@g@{*u+a_WH#xgZGnoZ^{}lO;Kdx)r+VSM6MOO1weLCm`ZTd%> zt2%{`a(A2S&|M~So5*x!mvI-BM2B9+z9S4ibMLLm@|FzmB=kLVAt-*fkkUO6cT(Jq z4e&i;&l>LCUe7%??|On;xieZ``cRI0#UeV;f?3F8axc!EVfg(la+z8E&Lem3MeeQK zceLUCqSKk!5fu5Bmb*Ce4~UyaXG+$|dg{JUI!33VJ z2Y7$}dEJ+XVGnSB#yf!wb?W5%W%geh5q&s;c_i2Br{sW6@3#e}itNo$+tFG!3?g*cC^;0s?=6xG!+m1Ya@HG+sL(Z8P{()H*(G{EGo*LIAMX%dd`yTA0rcNicH)nmwe$b5 zXj1l6p^zbLM|sbZA~F~m<_GdO1;#qJoOdZpm{X7O?XBtf<$fJK2Tpgi(|?=zdZ_<4 zag_O@clkScSGbFEpf!CbooMrUqT_cdc4QawOD<#4#Gbn>Xn0q7L^mz+40_LPdM<;+ zoUo1isej(-SK;>;nWw6szN^n~VxDd^{lUHDo0Dz}{GQ<*=V9oc`I#19rOv!tLT%ug2Gk_JBS^ik_KG8-gA&pS+AP&?ku+!tSg zU%1~-K3mH1es*I}2R$Sn);Hw+S;^1So&m`^s2uUTJTy%CJ-LU2)E_ejuYMT4#-#`J z9(Wr3MLcWJ@nrZ7G#5|@SJx%ztXG?mVNBB>zD;@4!;*9H=ofUo=zDs}mkqM6b->5? zo*&&WPjhcsd{2Sj81K;U7P@x8>yYuws|{)kvR0woLn)U{@O^)s+ChIbPzT=MsE=|Q z2lqWY@)W!e%e56dGt@~u^NP2W?*%`<;`8)1rhphB+@eYppq-+qIiY!m ztmko!bLm`NzDp>ZF{C_rQt9jI;FHXcPoer*Ix$LjFegsXm*k;&L%yGI^ULNh`l5Fz z-x1wB3o@EFs%t1WQ$Th>bsA*eE@-80)G?b6>n=UD`DLXYe>t6eKULoIYe&L5=i$*t zADYLNO1sKL-|ff19Buh%L}#n&&-}}Y4zGhI8bjJU`x)XgC&PS5qwn2mzo)T0VR=Vm z)VBjW--@I=PJTF`zSX&*cY+!34{a5~c7^26E_(RRva409Tjberw-<5|a08OCL(tL62QN{ub!?p29%lUi3gefSzd8xwvIPs(4>^%ZU#w z-ylo9CnBHY@;$!g&0o-XKtp;@*(JT>>NooPebUJs@{-iIrF)8g{O0Js5A{vC{%2!M z{W4a+cd_SNqO|2b6P_tQq<-np9Lgg5r1h~~JPg`ntcl}vaxspMrztLUT_^;OM?R9y z4ZUAHC$abV&P;uZewraU4dl^gu>KA`5%g=HNnTlGdmh$2z8JcgzT}m9F^wWi$)@h9u^AlY$@6lS#{sWqq+?E?l z>6)FDm!5if!C)47VCkuEE6p0*O1j0AE4>(P`mNLvJ@vsV_Oj@yzy6r^4%$PY&#(Ji zZ1T%{9y?5b^uQw~z)#>4$dB*PezK6Ge&Q{Qm?KHvk2<}4q-oaP1AWxnwf899lg^#& zuhV=lupis|_5J`ok@^i?$8+NPd7twV|Q^& z&h*#k_Ez^e_YVe-2g%*YEh2+m*hC#)tMP~DO=NC%C)u~8m=pC6b=1v3uQl()pI|(g zUxiJ`zkV7!^4xVR$e+2ATUs8G&sb94BAPz)JIo38XVfKFexmrKr+j0p3A z^(NF)$$XRkU*rkUZ4{FoQI05t9mQnfNtie$QN4E z9(8ar<9j9R1Y?laTwu*WkFA>v((&67&V@y}bM-W99&E0skCYGdU~@+E;FQ)htv%Fn zM9-ssgV^#2=Ye$bWHb-H&m5#|$qM!$-<@;c!5lB#8tT$j-n0i9#k%tS(DME4wXJ`s zH}u5%`bc_FtgPQqf0uUj6q(D}p^Kf~X2w8y4K6Do56ars#2H2FkoNM-u?%_dcWrq* zNc`7ujw!8^H`Q;P8hus!@wMeWU${HckD{$tz<22H0(IIS_FMFKA1JrHC#A8`80Hwa zo5H>e$J=NK8Hx009huB?WHVwqoO>J%g>4ztSKY3!T${rFqCHR14@+q~{3B>T&d#$i zT3_>0cp2YFp+8M?e5vNW)7PB8nEsW%=IGf){fZ0|`pb028%7=&Sv7Psd;KRaAM#-S zv4?ZxlMl~kVLbenBAf1YIKRJoM*Y>G>){|c?AO4M-bT)d7^>aWJ*1z+F#E=>k}c)imikWxiEk-=JS}5;_t@!E@1@_pzUJRVU-RC`ctbbI zn>60qH;z5#NvCJZjrZnEu6%z#b?l&yq8D_>LF40&d8NYd4|v@`Jw{crOwY`9;JJ-*)Si@k(Q6vJI&Wg`VPkFY)eUJ z?>v>sx2NotNTYqE$D9?v(OA?W7s^~8WFBToLtNvftQ+XZ3iqVv z(p>;==-9?O9_k1Vf+eht=ulkH&7MNzlqt{tt4*xKc07>vV}N;_W1g?%yI=N9S}*RS zyi%_G{{I*SGLD_7*e7iZ`ip_D>j($21=7X`O66G?OYln5knu zkz5|@N!YLOBiGNYaiwrQ8SGR2h_AH=9g3NK(fC@&(NEhkR=LQS|6yc4u!kID&IGA< zi#H<^_rWp4D`$6&HPcrSDj*{f8}zBA5y$LXs@+J{E^^gibCl5qd{JoGze|K6bZ z^xtLCdlKz`+_|Rm{3C>qd3J;@IWrAENnbB1e>5F{OZknIFG6?R3FJAO@{O=N?{L=S z+W}-{OWN})?6M%R`-#J-dEqMeeHZ-Ak0FWOqcm8=^1S?^o|P(Q7wM zAB|g2_RqtgVjQztA0}1KJW6{r#Lo@&X}t(0vxaGph|!u|Jp)rO-HjxFOL1AB#2Z*& z7u?KQDfPR$E7dx}Zx0+lyn;G&mI}}N;rU5tg39p!7`xxmdtK$HXSh%2>@xdTxo^*e zd{p;J?)S2^7tB*G;rB})ZQ_%nUFw?B8IXRYuN^OzopV~XjqG*&-hz3_yc^;?#N9Fc zmj1p!pq;Ge)xAmbmrE--d$LdZR*=}|&T6xN^$Mk${YKZWoi zc;fzZ=QsPkbN3eP=hHF0v}agzM(-`go{Pgbs(z_Z*ZgNn_hwilIK#T%Qe+%nmtid* z{zZ5%`}SMwRUg0iRQuh2UG;$z-5Drt?s z)z7;;^NxA!<{fi-N80U)*>4^ihd!o_^rPqhl~2cMlfJyAJo_~r<=HoO46!d{AMkeF zJGpyJzWpV32xOMN$7siRlzJFA_!=)V;ZO~n@_z8Q}Aml}X_DGX-H|E|ENyj>J z{$qu~ubIE>jX$b0bI0V;FYVX9`tK=6d*6oY-kN)2(F<#GKVgplah`v0=rQ+xb6m!q0L;+nqjUcpQECi0JL|>D&`NXg ztUviS(z-DqUCzCi(0xBA6AbrGiC-bzBF53{Z2lg1o9OR2%YKwQZJp0Ybk1`hrSB0= z|48?r^v54TYkX&#&v6d?z&LHbf^ptD(&n?b9WUG@efRvfOD4%0L|b$2?!m1`k+tYs zy#E*{Pk8FcIzj&1l%L*f6t#~Nj~9P;=MLg&y{w%1<#4^saqsm!YcY47rpwsTn$sh{ zpZ?kpuh`FivA}zD-A!{hG5d3j{d0e*cKUHrU*pazpHR z|L30?=?{H_r{C7g1>t;j@5AWN=inb>@s{Vm;_nWW2lr>(Yie(O_P5}9x~KR%@OI`g zbZk~d;2RvlDhmM=jowhX8?UCGVrSu`#SyR z+oR04fU`_+VrSaT1?V>@|6W?W>N(QvFZOeG;Wq{t=WWH6S@jNx7_72#<{KH zv#Ph|5^Z`b^HO`bx#DHutByOJ%{kqJd{uqSIzXA(1N6au=E6b7_W=30^AL0U7SRLi z?OgIg2SWI+uS)mT_k6)(;=#|wKZ6{+dn0+M9hx8TZus_&T#MQ=!n?(z{+V>r^{}5l zJNr@W@Xy?u(st2v*k9IHd&4=M%M z;4gK&L(n(a_tU>?j(`5mpC^w2>z9=JCB>Pep0Sx!Is1U>P})A2B<`}~q3-2-X zRPHLwY7E>Y=)(AV&c&{}-GS*g^BPc(^5@H`n{R$YW^QNK2i~`~@1}R%lG)hR-NgqR znYL?RlWCjZKL1)*$7@!0tz5M>NRVJoJ<)Dhy6Bd71P#f?#Kgq(y5_{iiAz!~iAxig zB@n-x-+R}(zLl#$KDKbU#@on!eqYz7zF>am%D$Ds{8hcZ!TeAMwMV6DdkJ+>w`SCA zd+H2h-@(1Ez>zUS7)ym~wBjKP63j7o3gl^pJB@nOL3(1}!HpYFW1uuiC9?eboi+UD z>!lI%KoQ#}ir`6f&27N#?QWJGki>)h&(D_d${TUb`3fa~S{l{Ji@dB(dT|<4eZLJr=HNRo(bapBHhP)m640hwAMgxtq+9Bca?an4FBcv4#)z zZNL^yFL(7JJklS|VQmSc5ICV484GUB!&dL7PUR7gagVuwA?AKZ%)Kn;UaP+2mEt0L zMg4PUEc}Bp_x6~(5Oe=g%>9{|`%ujNc+CBOV(!0B+UEyv+jc#YJi-kGnzde`&C*qy7L(&tE|h!*Qn zYOC+8>aF%4w2e|ui-vJ+T+siH#}f? z(D0BU?Q-!B8y+!y!tki!lZM9(pE4{Oo-jOV_>AGRhNlcq8xDt97Z_quJ@n0w!zRPD zVY6Y2;Vi?9VXNU>!+C~T!#2Zq!-a-9!$pRR4VM_^4VM}&GhA-iVc2Q7#<1J4$FR?E zli}Tl{f1i&w;66X95CEzxXW<2VZm^(;XcDh4fh)!Fg$2@$Z*i`u;Gyq#fBxL->^8G z-wm`|-?B82zrJBGJBM$$_!b>j)7hrr3yb2d1I`U$5t89o)_MV&#AL5J-{ zT#)pl!}QTGp4K7hvzA_I>8sW^1rEv2VcM|Su*Kq&hYQabwi;5d>NDN) zpRqhFZ$>fnZ_XL6F*N^+DPQR>CLf23L!7z9u+MN`h?gAUTMFX0P`=_{I?wRg5T$oo z{;#m|UO~Oof3G+d`m3)MK8t>r{`^_wFMOq?zufxs^0vTzt8jUDI3AbN?;0Qd9D~x& zUTXMM_^n2!Ido_8AzrbU<&t<;Hiqsi2g3AM?N)w#`_Ohl-#%oozdqD!UCXx*mu}VO z!0rAu_I&$L{xI(u-W3GjyE>QF9RcUi2Hhc@c!>87Z^_h^x5{LLlb<8}n#$$=Y&xUJ zEY&v!J9U3w`4Q=RB=c6fg0o|$s&|w#I{HT{ zKNzAu(Rh@RR+-A1GAF65*D_JdGq`Kzcb7P;*Q*}fv(%ODQQ6sm^6Q><_31!{EO;|_ zaLLkUCuf&Bxj9IcH}eiL4suo8HJPsL;FGK?doj@5PnB77Zha<>Q^$#?*(TRuE~I^v(qZ`?qiH9# zoLjeOc-%f|?nwMei$?76cydn~#5{qa{Hi&D{nSXh$?!MDojeZ%51ZT_3F|Za@QB}} zxqePCM_zH9`3h~KKk4k#L)?pNPQV}jiTOVP`uLB?<#D%HjdNUaNLSB0g$8gMX_-eE z~#1s&!!AH+J?4v9BuM)Uc?uVpiHI7Paw_TQck{voV}HKi)chLV$|aY z+>N1UX>=ZZZ?jkPAKF0PU3y|WQbR57y+WhOsYnlZ!_z_V2e6JTtnnGDOkYes9F|jU z&wmfw%y$6jSeXMP)Z34CA1+`E!7mpt4t#-z2hy$AhigYMh2 zkRSHzcXu23)&pLc>aUJ%kowOjwy{pQ`BojP*M;+-Lv#N}{C=;-xdmR#eK-8|kwJ9( zvd--2X)W{p9rvVrNAlzMPeXC6w-ru7&5V}k8-rd*z%&^L%j8pJ;)v=km{7R)O zerNz4t7q?G?)`qe56Pp^%Dq#je1C}kO0D6=^*y{x9N<1TzgTM^?;2TW z-v4&inyJ{iljgk_j3v?+%_r{buPdP!koFo+IP;{|nxReNEsj@+t{A`6+f*mUae}*Z z4s}DK$1Kf0Bm-ZlejE67=oj{#>VRBX2Du28zxex=Gk>G;Dc%n4?O*ve`us;~H~sqy zLoMiDWpg>y(x~q%W^tcghkSmces>TVfD}CHvY{i}k^k>Wm!z-qJ~vis8~5@(^Jv?) z@}5_;!UOL={$ccbAK4+@nx}@|&A4sbo^*P}Sq?&f+7J;o?siqMrPYK_By2{4xzXeo5TVxVX0kzmdFuu(AGQ z*~WVI7BkpyqzZ%R^5tIrw&2%^-&W6jsNbD+zx}N^_y>H)`0KQDf}1PoCZtWN6A!sP z>95aVUrK*G$9n+Y+iSnVd;e|yygy*CQRtvgnESXj&#@1b_k8&<<&5Iz_&;E6u{NGT zM)b?OEgti{+Kzr}N4MIL+SZ?hP8w&Rzi^uCgENmYCg^EB^JgHuAo(Hc)LI^q|8G71 zg#q46ocW*Rzr^xq&sWWV&Cs^rzLK%{@6?y~nrAyjZ+sg9{9(!`suX$+Oy30kI&=)k7r=N1r&j4$Xr@i4HmvZUX zv7eTH?F94eUpO~5a%RkopzKqRv0Sr0p3f-mxQ0DSH0+|olyP9RUo>3yi@L`Szi9cn z{ueDd*KbsQ=PCc9mUGizSoy_mY4lMuw}a#~^z%2AKLl^q_p-m@s3rL-hh zS6p-xW82?UZcj75e*GB!@bP7iSN#j`T{UN#OIN|uirG|g`(Uc{jsdM(&BgZ)Of=H@tG*yo!pY>C%n4OBGd6VuD<*ZHS17@Gh$xvoORCC zZyvA)Wv0I+18>UYC3^x*7AQ;nHef;&jMkl4dX}Z5B zp*|*$9r#bc?;_|}Cmo9g+dn|X&G;lZGO z$G{Tw?;{tYcdM1r|hTo;`CmN1R_Kjq39^ zq)~l-DcpYqzZaf+)0~4d?%P=LBije$SbNj(kz{cxIz#D0^1UgXGde>&|IO;&hk2zn zoH}q1kY2-@&No3>&dR}L=Dlcvc@#`>>pc7v{>2`A_#YJifgtgV3a4&m;!m{n^@_{d z&N^864*feZnwGeynLppLHt^fSI=hdwfqrEzDrSr8v+&2iy4kl!YmhrTKay9w!rybq zyK%nC)t^1e8%FBOZ(s+s#pzn;7%4xix(~89Q{0QKZC6MSx%O_6{`qj&Kb$v$gxmjU zuS7raO;?cBH+-6B%Afw4NSnUx%20iK-7Skh}4d#8t%xzNNn&>DAi|7u(^+L!4p==wRVXIAC@n120`_3LZm z{fhisOUeaGak%%J`(q)E$iQgXbT|&00Ok z{Bw6C?DHM3YNg(isq$gkuSdep%#VcWZY2^{(SFgVi-)~G?1PNvay#*w;gyZ0C4-Id zM%~Bgw_lK{LoVr&Voq~Od!dWPe^+Pu7IbjQq{><8HAbeZxaj!uVCo$1b*|h#n4Loy z^ASE7@SSR=sBtAP?r8GtRV$y<`68t49?951)BK)K)vw?Ct)ec~bwKr@p6p4_lqruj zC(~5^?Lp>G$d4K0dDNx-xYujl;&gf39PWeo4%+ntcUab^(!Y#fr2o(GT?FR>XeV+O z$mtAVbTgItr!xRkIPvR2^{M{=v$6W_uR4cW-$Huu`;+Is!a6a=*&uiq`*Zec)w2Qe z{`y__bIu0e5B-cLs`T*Omvt6G7H}9@ogc7YV%&y58=ZeT<9)yK-2cLVYrG%ITO>!q z??rIFWd3q~kbZvs{+{NI&M;Z(a?O{0zlHMl&(DUZFrScLqaK>q@G5@u;`vJ%%eRgS zz{ zu>U!EFb}iRo9*V2#sjqpGC88WUeZl#hk z{w8A=Hn;!Kd?(LW`Eo|@H3IRvx0A;0!$}vQFZ#XgnVZUO(Y@7kZy?Sr z!t37P)|BUwCk^CQ{Quy}Vvi54!6Tl#M)y;U!CPIKBlSm~R&&K@i}?htif6rA@j(54 ziO=(GW7Of&SRLLNt@pi;HY===IG z&gikEpHI=ICM{A(W2Ax?(1Q)hcVXsW*vkio-X&P$b7hivxvctUG~LiFA* zsj?*t)Phmn(iq9aMDo*nzQk1g{NwZU?sJgDiW7||yYknwm`cbkC2xymH89a-aHU-6W;u2#BEmBIeLAl z`RE_HFE__{IB9FL9xyy;c*t!TMf4vZZ{k-+-bPWaJON>aIfJ$!$%GG8y+w` zXn4qQ(D1O~5yK}8j~YH{c+BuA!=m8{!;^;37(Q!w%J8(|aENt*Ar{Spe@po_(Q_UB zB7RUuy@XnuRge04hFQZl!=)h~&>HRHS%21Bf7TD0zx8MR5p!FA)?0tpKWYBfpY_(C z^+ofy{;WS~ZtKr_>(BaA=5PI3Z~dtyS@mkL{%mM8cave-u-UN1kiKx~GKQ^&)*lVl z9}U(Y4Q&?QZn)4eXSm34vEdTKyx~&AWroWQI}AGw*BEvi_89gVZZf>vu-|a2;WoqV zh69E>4R;ytHY^zKHQZui-w!M-BHI9xyy;c*tEwiwPb%ow&B&NZB8m^ExO zY&TqJm@`~txY%%sVcu}5;WESJh8>2ThHDJF4SPbAF6=9*bDD6;T&DMi`=<1fP+l@k z|42S^T3zU#M*S6U8s%x;P9uNGZBE``#l~?!PxpLL~4cDN#`g}UB+h2bzvGmj;=b6ar zU>3CLA8kgdDet}#-@7`&+$92$YUxW?tuRJr{TM;)f?8W>srsZ zTzn8Ve`R0a#N=Om@WSv3zy5&dE$~ zOkR%6a36QK$lBzC2VgKmg*R{3yK3ZKkRM669RJFK16=l9g8c8c(p!#CI9@nDm3IgF zu72xKu|x90#493`Q=G+}Y~As%to+mP?wa58Eo7u4G$?P$C~stxvJd)iT#={jlUy}e zCt6niL&c)rOEkGW$)CG)^37Sk$6dbA``^P$npFSt9%L-v@7mBq8xrM*TpKQNZ9v9> zZ^C@G5$4fJn#=nx65LyHONw50k z=zg^>Ox{74v4;r;Fmo~NZRAd1cgP+|{)w&TrVl13{a(ji3$oogFK^}dKSEYq3vW#v zi}O}^(^SV>3)kEu-pV`Ct;fG|#R1QY9B3xAb-lfIW&a{Mc|I$jvzp-tjFwBJ3(AD@K}x;jXP>3D&6w9+XP z;p<^tI?&@@+#an5apCjXsjABb)ZszeX>1q96^ZW-v@JrL@PFDD+#d|i4=eme^>cgo?_M`3BUBG^{{RaQlU@bf|c=lYL znQLS(hkSTC5DyezVo&vRz)Lh<)yL1@7%xfbjL?E<#Au)tPxcru2^25-xIx7u#!JSH zCw`zbLOsf_243RyBlt8*=gW=plHk7)Rs%0d_7iVE<~;kOl*+sk;~!tHcYBQb%dY+t zZRm-Hz1aJsjPVLxuDK^2!f0L*(*El14ZXb1bfCA5@x2d8-QGv@K=e%gCqbv}*##Fu zr|sd_x|y2paf0Eo=@j{#LJ@f_{g#FM7G`RB_s^`1oKz5;?4oodHyM=f@4c2OYahm;O!fK&eoj3Ml&PTHgiPMVlk8g)}dyM+a zu71|M*AoqUv1xXm(QH-rCLNZkv2>4fhcw%@scZEIAleYmrCMmz(X865x?>#8UK{>i zU`V*nV3H%gX)8=N1EfPam$WKeK!EDu36QY3}HWud5mSG@OkX zKgVQ`ud8|dqK}_{aT*;jUY5j4Bh;gKwa{oU@q8Mk^X0~A^pk|uLZf#RZvZ12)qYm} zk~Vh=v?tYs1v02UzTB#ZS)%??`-?@Be%xjmP3m0X9#vZR2)D0Z-^Xv=ujtyias7rc zh%}ARo#VZ8?d*S7@9i5lzORO}f4gb3sBwK9lh)YBHvOFKVb$OM@naUJwIxKTWj)OM zj12v}`u`)X?WYarTMxCD$XHtizP%AIXN~&Hu737wQZ($vqCJ1!^|U9R;2uYNyr>-I z4%b6bS+GL?&s_^i@76-4(^^Q~-CB5^-;ruHJnvfA?pMy5&Y7piS_`31ePg2U4SwFv znyr4!!13sGSvWT5T@w{A`uI5*r_=G`Wl5|wLOqIC%bNI`#PeyC&X*fs6aR>?TGqs^ z#M_TKADy-l=U;o)%#c=(ud8#g;KtpNHTZ(>rCKlGta*EH-^xA+Rd6n)I@)%$D!wjS z%^0n|-tR>#(YiX3njiN8Y{1f$;UA$2J zsV5rtQmv)6oGp=q?^(-hvJlUu((%^Q8!kkSp#8=Rk?RRwUQb8M=0xY3=8&HFzPA&< zT4+`4U-a?w@Mn2F9cvwr_JQoaAG}@toRNbk8unt-s$Wk>?{g#kC9N8S`(9|YZ|yo> z$aJo}%Ta9AbuQhK-xqf^ZT?SZNPBri*HSMU4Qc6ZlupLAh#`ttgE;p=OywEFY7 zzGj%W{uxDg-V==ads@v{cr@(Ard7Yb)^e{TY718A|G9M9Jl1+zz4z^2yS}D--UTgRmgg0RK?`ypLLM<{!-Mw91B3Qw>6zlf9ZVxQ}uDW9) zd*BT{UF&Pu1K*hSC)--y*(B2EzOxCYmaj(kc~5qp^!uZ;NxDIiOGcL(vV!h+bNTK> zG7geIKJiFVI{QcDp?`K|9CD0_fBYPY-#_&bp%yys^BEcXIT@$p@#4klSn;lkx z7J3!c1uOLbTzci6=>^u@-c_~9Fjc#G(ix<}}=uWKD- zdS02s8!t%yKG7OKzv{OZ_#U`1QE+;g(OnYC-p6I~(Q9yeh?PZg(bxQf@qUK&okZ8d z@#wlQ9Lw{{KW!sk^zm~xPS@kbi_^8@)k4>QL_DSSk1scVH}!2I)N-ahK)eD*XIkC! zs9)0NPJ#Bg?*#dc&FbUJt$LUx>L0bgSaj^i&F_ih?_>4-o6bUW-5D1diWR+g^+JwX zX-$?t^sxFu$BusC`X&fOh5-gK_)1a#VV zuESlZ9pcpy8q*? zr+GqOUQfflZ*;G#^*`f!F8mjz$B6eR`u+Ey(^~GDL}@6G=YNef%350eQnjXUabA|2 zcv)^Dq>3$oXvaUEZsKRtm*V}+zjpttyBj^euFe57h`S^F;ex-P^Jmps_P=*-T-%4* z2M6a;>JsXdp$_%stsT-?aXQrb>-1MRyV8?yQgOLI`^TT*d$Ch)(ue=X z+bf(VID=`#h&B{Y_BrM@`bc zs(bw0jM3}3@v@{+8lj%8m>THS>1*?8l+KqMqu1d75>^AfCifGsfDyf_&FYu5xs5mB z3Q~FgsjvLw%k^%LQGeNeKQH3o9}Ro4=r_JMfQ*Ahm?nRZ-M6u8^&J~~yFvnnntS^; zZn(=;SN$kDZZ|s4nR~JDn(MMvDal&)^EY0Qe8;)(q_j8S_gfdSc4}{sKsQuyav4(D2F#m}yshbeE&J)IqC%RS|Pv44H3s3m7NE)o; z@`UdaRtrxUBwjy8JmH1jQ|Ab0N>v}<-l~ULqW)3)i^T){xOI4%c9a(uo&lgy$Ag5+ zNm`5@DF$XXQF^4dRF;8Hg#1t{l zU`~b8G0_B)e}b|TZ5Wj;lfx{*EX5H1Lggp&q$6IUBW{-5ykhA)Zh33)i!0X$Z|hnW z+_G|Ga8u7l@UGw&?^uuN4sN>Ry}@l=J;5)p?hD?z;RC^e@&cd2W!6e7%?Qui9^;4!3MrA1uA2D|mNT zXRvh59l_f+t_^NOeG_3)H=%Hc#OalVc(e^b0h%p7z3 zGtn;G(Z}<``1(M+gfC0+y&bx7`6n$CEkBIQnK!F?abKR!S2J_kwc+v>xVMt-x*LvESYh+E;yBW|<0 z%J_cvescT0>M$9}U41Cuue07S?p9e|-?-AteHBLIUuW*?t&6>zpztAo)xG-Q=5OS| zq4`>UaH~(>W*%OSvjex<@4sp4weWDS9qQ0oakG;rSrPtPb0}Og+Hptk+V$`CUXndA z`-)X}+|DK&B|IxQd~f78*hc5%U3_ifGhflOa$_H^5ieIGjsIK>W2fIj3^IILDP*0w zSmU`2qj1K~g?G?gn`aK`TZir4NG91n`gch6|I(FD@ zxX>_XxX5s^A@z3g^M*?eX@~Qt9S(gvI?cVtu-mZ5u+MOl;oXM)hFcA{8E!WmFx+Xl z%W$`0!EmqPKEp>1_ZuECJZN~xaM19u;Ss|p438QKoYbjwU^Yy&=CHlySe8q5a`! z;Sc3U@LS4^Wi<3XEN8K__IpFLk~`PuT#i4xcQs2~`@(;9W{<7ADSF2385=?IH^q~E zj=4RL>&G2^JTHu|yZzBf*nPaL*@b%gF;~fAkK)P1-jf8M#LuTuRG(jL{R_T9SS{x= z=%}V|VwV$dF2+B;T<`W6^_N}!x7Y%sVK3G>&98q;+&L{=$6ayhu+Ujnc62?_0&zZF zY^3vdFs|LS!G9m%WE(fu@_oP!)e~VYcQC=xQFJ}geY>CdH@+w7>)OQcl)kufh@vr# zeS?if$hrK$jLhLHES{$^#nb%pkGH=X57DHL*X|=2`gt}Fx9px?6mKjVdwtJHUdrM> zMAFFZ^NZ8igM__R5$y5tgtqo8B&l-yF{-oQgK2uk_L#|o_;JlveSCgZ53@x5Bjvb8 zM8niU@o?W~E-M_qPrX}H(EHWV;H3LOzRo+=t-H&FdJ(^0y|TNzH?UQ1UC-@nyK9nK zxbA|a7WR&!hRH$W_pZL_S*>oRTfUv(CbHh$TI4%|Pw}(KCY>-%x0Jk%m~y-jzKtm5 z^8q&`YlaGMZ18U>xRvDB@3aDbn=fg|lNC_$32z{7F3h(lDDUjoRn!EZE_~w=Oek;d zkEKnMcUYd2G)PQxz0QhUr&Sogv+CYESFt$!6s)fQMyK3Cwb>p&qhhOV-6_KJ7*T>| zuHuPG=9t^hR>g}xewN2q+wtOMNvt$>D%A~Ab(Sk%m8KS3@7EVEDUo0eLP`=Qd6w9i5z~q32nlterZgMW7O@&51F0n{2iJ42n<-XEO8+IMjjl>yZYevtAg{xEe`2d z_5HT01L31i;Hh#+bGL@xVJBgqA9ITXyT{_+ghTC3TmIFZk_)#}XJ5$KB*o?RXW+Gd zrTZ4?_D=7&v1=Vybc*GFpvw}T`$JtC!zt`6G*_kyH5cY$*1*E#?x#w^of!ESm_l;1 zORLxXILLI+S6qj}&TM*GA*i3eC7ZaIxY7>9sVHl=;LT*M zUz2{;{p$6ej(yX36BaE80-a5sZY{E3Qf*MV#rx4hbWeJQZ)+*vBVy)P3~gQ7nobv6 z-LFvVMxM1N!yELhTSutt1oHT#>PMOsX(m{`TzkW{%hl7l%Xd#x$u~_adZSIlXf>&7ZR=2(Do+lipq13zy!KU-XW5 zVfndP#}X&iZhPtsW9!(2H2%=$`PQ+d#v=N7UKv}*#*LRHvC>={X5!*8i>i<6r|{T1 zmdxRI6~;e`BNJQ4lB@Ak8U9fmJ+XBx$*#unE*Ho@A5R!r$LjVH^elc%;}^PJZ4ke^ z8{;3JpLctV`pfReV>gA$JsGphBFinaJK|Qj>Z8YppAMZqePVyaO`OD`h@13@qY<~l zpNzN_ej?&FYjxdJ`Tlt+*3I~rKbQEz(xK(bnESQ3)j!K^9c+t*zX`Yc=kS>8m6 z^WzeQKV$ySn*XT~6NFugNsz{2JKGhx7l-K*Tf=mEGopMGyAfzpIQc67!~w&DhEKr8 zS@SjTUa9aRm-ccq&tB>G02@~Ju3o#AO~CoI!{2cIh1@g-=lp_sDF}Yct&Kkg{Qo8T zLb8!@@sH;(F@B$9tlc?9am7azPxd+HW*h6Cg@zs!SI_G(ihsU%S>h;-P>=E(i;u@| z30Dx$r%^gzZj6ryHU5Hkat(R(V|4y_p&N{ogg0UQQ9Ai&3I^n9f+q!6W1nEm=+--hlDcXsJ2?|gLA{(3LlQOn->++RaspVh*b3_)=V zk{92|CQ7Mnimx3K$^IZ?d(EGUJ=IG@Q?2TFd;HkMXezac@H9qrp*f&eRuVAt?237xI(;14{M%V zS2HxZx{lq^)AR31kI7{2WqM>>cwVMQI^k!J9vy+5pB|BBY`YN6ISZ;EDb%t)Cg!?D zyUk5B_XeB$l?3-JjT{skuqS5}vNJF4&j!;9K?1)z?quArQXj{y`xWjgo{QN3dA$3L zpN4yimuO9mu5aS?dg5#9Vf^M|&bOv+SK`Ry*Nga?I$pf^nyPrUtf~K#c(tsl-yvQt zYwAJb9mSk)P2EPE=-%A77w=I|)L(Y>^HPfu4STWIR4)zH>}w-N#8ce|nEO@ubZS^7j>zHPh2$SuO5m1hw?$?0V-6=Wo|0vvV-iUXKr~{aOuPB zv2Y*5-9UIy>JKuWcMRp5Qm+kyD@wUH%_!ZRCEmOQ@#;u7pLBmx%Dwqr^2cu;?oZ>s z)7)v?{~h-S340axPm#x!k+44)%1@n(#eP`({nFMiE##G9f`aqC; zJljk}{~vApXa#o_9S^sT?BCT_4-?!xZKJ zIn((Wx~L62fq9DC^(CRZevu(GQct*(?EX2$dglL6Tl?#qM(R{w7uxHF8N*W%e`vM7 z8Pn?LLxc|MnRl~FxnI!SyyzqSLH^-N<@L&q2cbEI%Wq97CwF=-S~lhGB(F=!3%-yzi>Auie})g#)23SqYu*B# z688<%=W^UTvEM+s|B192+{=sz-ZODI_ziFw__d+JMc)U%ihBw86>u^5 z*Z8ylIs0Ys2jG{$?|@$;4(a4z^)U@Q2)zzp~~a2EI%#Q#U|&vB>0Ka14iK*auO z_|s&@sD(P;Yi-k9Nz-2V-y1)I-}SWPQv5E%@Au1l+7DY>%abZ+f0uslB~HEk>i0B0 zir?Xeh=-#J$As*1UoOnw|%6g%=FNghf z^phXg#;rqzDHETrocVEiPeT*IU!=;(KZAIuqpc@eg*8iM%*s1 z0o*4s#S#B0$FLu@vW{RM90{wIr8@1mIBQ12<8_-c^`WS1>2U$65E!Tn7)70kKcCU5Phn;)p0 zd8N?i-DSwX%*ABFahTeIJssNB)~bIacD$#Yj`;aB=OAl;J9M&$vXbRJ*KSh1pqVMy zdt{#!1h2t88+WJN&_WCK(|%g#0(T~m{mNX>|8!;ehmo+?VZYq+(Ek6G?Pjk$)^(>gjXfOzr=q4JOpkB zKMQUH53(2dJ@8L)-whss7yf_jy$^iVSAGBgxqlKuNZ|s(MjGX|O*Lw)7aH48nciAd z+)%GATAWyJAh1-^HbUBBhu>XF+R~P|w52U}VD2Vb<`-R@=$K#Tt}QxjsbZxYtLScS zxHDGv9Xh^_%|L$7_xZd&$;~Z{bhDe=&-1wN`}&;E`G3y)ywCshsRsWPeJ9utc7R_1 z+reF+`TIHir9U^k6Fq&E;m?9gz#U);{3HB*2+X2i2!0Aog4=liDEKJ)W^gN*03Sxy zz6#uez5#pyjDx*{S#JdV1nxc!Zst8QdiY-ASqW}J58n;n#U2>T+iu0{4)n*-XPC#l z75XFk#^3S0SAL4;FF>D%egXXq`d#Sb(BDAchMtE0gkd6cACYg-?RX1x4fIjyy%2U^ z0fj%p(72TuflJVT4Eyt-cSH0qLWDEt`_M6naONC_5AI^UtVk zZFbu4@=k6>?b$=w+U&Id&AWFx8~$GqKg00Y`{~ASarBl4CPOW~hNf2sZr*bu7y}r`$uZj-_d{6gTq19E3mJbnd!52A;X2`ZVMf?3+$7vA>=kYiZWV45 zW`#S1JB7Q1{leYCJ;J@hoN%9Tzwm(Ypzx6Ju<(d5FFYz75*`yC7oHHF6b}1ntZ(@g zjtZ-UHNu#%R#+#j7siDR!bV|}Fd=Lfwg?vplfs39E3p<3J z!Y<)D;d)_4*e%>7+$`)BZV_%3ZWCsOJA^xhyM+D1-NHS>y~3PupK!nMfbgL3knphZ zh%hfaDjX6X6CM|y5S|nc`)F0%%0ChnRtal_F=4H+PFOFD3mb%u!X{xtm?R*~OqN-A zm2y`pca?HiDR-4}SJ^E4Ey4vt{B!;+6fP1j7N&$tgiD3XglS=$uwB?8>=bqh*9q4P zGs14+CgEmbuW*ZSt8kkzE8HR6DcmLO7w#7B5$+Y{g!_d1g$INOg@=TPg-3*W;Zfm` z@R;zp@PzQBaM(u^^OpaUqQWX+jW8yx71jysg>hknuu<3~ObDBWEy4xDq;R2dk#Mmv zC0rt0DqJQ^3)_V4!VY1luuHg3xL%kMb_+KNHw$}(TZCJM+k{!+4&hGWE@8iLw{VYe zuP`UvC)_VQAUr5MBs?rUBFqbq3WtQpgvW&^geQf=K2~|csE`-N4^=h7n6Oq@C#)C7 zg$=?+VUsW+Y!{Ba8`ag>}MuVO-cCY!o&L6T)U;i*SK3DO@OABwQ>^36}_$ z3YQ7f!Zu;MutV4>>=LdMt`}y6-NH@6&B9*c7U5RmHept{L%378OV}^mE!-pAE6fS^ z3HJ*R2oDMm2@ea82=l_D!Xe=?;c?*!;Ys1Jk5fEhR9Gdf5yphI!a8BSFfMEmHVT`B z31PFaMYuqi6fP7l5-t|*7akBQKc*-@rYJwAC_knsKc*-@rVPp5F`@Efit=NM@?(nf zqel5rqx`6;^4-;7U~;HN`B9_%sB!thy8jiyeZdo1_rH8zi?#_&Xx%^W25RIWs*zJ2 zoc&E!m8|zB+UMwmy8Zggv$q1nu1+P(nWugkuG(96)@CO!KCLNn0+FZ8w^ z$lPFPD(i!`H^A(hc{S$uOJ9Y)lKlbi=G|Jt3G?3ON8SDa%-F~Dru{bGH#0Tu_p7}S zYY}hSYx+pmduR2?$ah)ij56={&cW2Q<}Oqi_4|9JubOTwPUKS5mI05Lbfh&~E{6CA_}}yGr8zQSDoKmD{)C_N=gX{pTgT7R#~sQG)aI~_CjswjUlUKRQC zUirQ8-jUPqF7{o*eHe+20}mv=L>RVLmbKo~i-@DOX_VI+5BcR)aj<&i^jj&f%cb9k z{>{YA_H|fXjgM?!$9&#B$h#QtUd}t)*U@ZyGGy;kD-+(m0efHMT_g6Q#4%)fRPCqN z+6m(|+q2=`&nCUazFA9%?-IffPft0!*A(uE-%37)2j1(2arvnIfv-s04&L%Bx-HhjY{EZT3rTHE5^I#IZP(@x;6p~j~4_;es`|KL=>$9xGUq#-o zByWRt_$J(LAPifFe+_mX!~9~*Z5{p+o-gCs*5R#9|2^!{hT9rq1AN)M#o|MHEdF8Q z#>Jy zJ(hQt*RSSXBmR8H{Fwot(=H!DPyIKZKlLsAb8#R(PZQ4>wELgtdH);xBEwgXoMKPV zWhV)bHa&6z`+tGImT$H;`b1El=^y=0^~kBO1ZLPhfZadEuRp@xq>b5W_uo5m>I;}p zl3&!XQ=cpLMW|n=SQCs;zfQ3x7@>ZhVomU}tit#>ar!8Fmv8v>;d?#L^;=~AilAHx zv#WaK)I)^%5YHX>!y`8m!4=r&D-_dK z;#VX7{vL5?Fngr66+eF$zw5w{fwkam_~T?7{jO`VZ~NRTS?gtu@lI7aOd_r;qPkRtr|;D_yGFWz#PAF`0*k9+6#UVzxF8J6}SoO+4_er9`MvP zD&rJ(d!0FZ;K|Q7qwkjf=cI8hX-@FY@g3oG67JRbIZJl_!R+84_21TpPc2~0{#E49 zWZbyDr^I~~ZZ0Qm*Z+%Tr@kC}^N4E`h~Hu3!Ar@L$+(+I9H!t_bOkA({*gE!a+H*x;Xb7`9)^v}8+%7(C4gCFe?E3jJGV%=1 z5wlDDr_u-gHhRCjM@IgPcwE4G`7ZhUr63>im;H&SEH53e&mI|OO?l*h6V4{qh=;*$ z@L$0U$kz|tTKLbwb?8rkUEt3O$@4x+p2c~#b@n!pyqtOgaokE=Zv-DEjLCldhG{!S zY;E_gh{3tgKk@ug=oZ#!>3f8>dtT&mf9?3OkMoXIrO2lt+(hnzJ_$Vp{R{Mm5Xp;t z2l}k%lv`__$9nTd+^&UK=VtBK)}+11Zim)u&HE2n_f8Wo>>2t~5dTAe20aY@G4^i) zzX0K{tvB0xa>(owhtMO?ebAlIJ<#2lUk%;?eTwJb0DlhM4-xm!H=w7WA3&eLd?on% z(1Sd`m#{jao6&CoZ-o9A^n2+40{Um@r%)eu-v)jWvlTpF3B7sFSLghnIs4~)YtEB% zo|^OAobS&$Ip<&IJU{0rbNvJ+1e(1n=n}~E5ePN4 z*~ig;Gc)x%$n2lXUIIJjCJdp>zmT~LR1iPrc$_`6kD6xv`-|P9|7U&}T}1^@m}W3- zIe&6vdS}OQI#grV|DYa+M_#dv3Wtm5ZO7xi5>?zUf(M6^LO^|=~-t@Leg9=sQndwIr;g`hUX-eIi zVdbc09?+X#mUh%sZ-yWDm-~7d_-p%DUwhq>s~255ckD>a*djk+xO9E z3p<3J!Y<)D;d)_4*e%>7+$`)BZV_%3ZWCsOJA^xhyM+D1-NHS>y~3PupK!nMfbgL3 zknphZh%hfaDjX6X6CM|y5S|nc`)I6Y`TCNtF*hrm7U2S6Qn*mKNVr&-5-t%g6)qE| zg>AxiVTZ6&*d<&iTrbQByM>#Cn}xl?EyAtBZNjW@hj6EGm#|;BTewHKSC|v-6Ydut z5FQjB5*`*F5$1(Qg+sz)!sEgd!jr;bAETa-2jhcim9Rz_6V?jrg!RI>utC@;Y!W7f z&B7Mp0%20PP`F6ASeOzn5iS)j6Q+f2!ggVYuv6G2Tqj&F%m}-Mn}nN%y}~WRt-@`> ztZ;{Lr*N0BU$|SiN4Qs*6Ydl47akBE6dn>D79J7ig-3-aJSV>^NVm!H^J-`=f;$J+ zuClLlOyCZX`OPop?wrsv*MKz>qJ>%QO=1m$udb#%eOWC$n?A_%j9H6Y?Cv}FMJ4wo zRT}RZ#fR+6t0}&`nyM;3lytXt4`jVc=EUubN;S3?Qb;AdP}Yszqs2S9S7c)v;tNb0 zliVlgMVQC)zl6#tB6#L~1>=&FzY6`xm!|*d!K0%ps;9F4V+8*7;!qW2{T8!l&zDFa z^fhwmOO@F*Rn~v>a_;TeUtll6D|layiW6}p{MH`|1yL;LIrvm>1eSoF!OP{UZRjx1bpAg3P z`AlEl&$E79P;Q&mZ==5Y$|CL2Z|m}Ft><6y<;>#zQ@8E@F839+F6lFdx~urM){c+Z zRhj3!k^e>BXRxWfuG?3TnXj{ZDLegpGEj?LM?9LU5Xw& z_f*cfD{fy-{lBt@yK(kLzosgCN6ntu!Ow8uAN9S{?iC^)?n}(bjRDNLOVY`iS;zq9 ziYRPG6(RcqKsL_2%*c2D2g?Q8m{Aq*SGioE{c-i~TynwcQ>hAgzFaPx&0Ye>=El&J z*}K?1`G00+R3;Zf(|8xSF`GfS<#ORIm`y+~MC!2D3z=N7G+VyJq%Wzrk)6CVSre!r z+&~{->3e$)@_7fssMPG2B`3}!j2+PE{eh!jS?#i_?xNMizsZFqLX&Z(?-p(o?lP2| zxSe|gouD}9y{uk#YM$HrHI3izSC-qm8k_|EJGd}Gh$ z?ePNMm8yWJ%In?P>{;D0H-@In-URBMH^F(D7j>UrFJYgfJ$7HkqMJCXg7l8Q&_n6_ z(&t}RJqyY$s`l6>>Fk}ar#8!jm%@(8|8vzjvsbDD{wl9? zXS0{UvAHocW%edg=hk8`aAWR*aLd{{_eGouv~}V2_|XrYtF5#4;vy(eLAZfFz|!~j zZ2WEcX{yxhmsJNfH|o`^4qDsiRLqB$N$Uiu^^qIeysq1+XnZiu!0ykz;l|Ee*0^i< ze9JXthw+NZU#p|UfAlLizMBb*i|4hpXe;1E+Q5n<R{H`?pQRt|{0QC`GBNtkp1YHM5Y8)h`+aQs z*Qblmx;u2P4BwgJKKUef!?V_kf5pC;L&d&}hXQ|}^SpbD+Y^mHdNv-(-Ds94=()Lzz^o`9r(eF{``uI!ugf+BKZv$`gjM=kqBpIpIBVn9&apc?yn&} zoORx~uy}VO&KO{d{C8<7Zp!(2;rsokmWJY{{^$$SkuFO|nzZDIZ?E^`o@mU{;QKq{ zu%*S1``7mlJpFaz|9F3~C)Ze#SMNJ#8Y(LvEZ&`7VDYhVDECRlp3Yj!Tgttr_-wy7 z_(89!;@SR?%hwNj?;@YC=G||a-r`c|i8V21sh*kbUua<$w`ZCLmUBRfJ#QPfJooXx|c0BNgS$*@OxcjZb-JPMq>%4IB zu0&maQ>vnHSGu0D({sh`owdbB^xc9-5^5h4@o8~$$}4VwHpY#j&R%!w1@1{NdpkznStQ)T z)o&i4tQVmF6Uw5Y(35you?P3|jRoVt$d8mCA-S^O3^?KbXh<9J@E75x%XO za_`8<_Xd7&(eA=qt)A3{2H!g=#Jg|9e_x@FRr354dE01tNS@Rb?~2EYcf}~H4D0$M ze_ZT~sSDR#d_F_&oIy;sb{8jG2DQ!$fZPuR$PBBvg9Aj?{eBpOaA$mLWvdMIu?Hg`XK)~-vf&7B(;IEyf#(V zC#i0s>9pp|+UTH7wX!K22iRR@<5bYzmi0-Ty)*TN61X-u^L$^Ny(J|+TKvr1#?gjm zA5~#^roPLfPB*pXESWu|Lg2=|3*uMScd6Kj=~8FI{|oFHmdxKxLRy6KyrX)!3o$Hy zG05^M0!dBo;^FIo4h;M&c{TnK$3a>H19QW>=sLX^=Lhz!`8GF!D%YD?&{v7#*z|N+ z98Qsb4tk4!py$z7_+K7gN%~x3ZGLc6VQ67l{X|7~s&Dj0U+)LP^HpW~-zw9;uS~zJ zOy63jZ!goYDbs(fOuwN_e@~hIlV$qPl<7ZTrvI~XdcUvNxn|X^^z`gQ2R0hxJ4LIO zukGSP3W27LPmGUs1?{7_UANzG)9Rburx0;w9YoCiVI1F3SjnefRekjZYi*!>u6d~Wm%XU_ z>Bo4SSx*1r8Gw@LmNC+#!rC10I<3ECuUYm7Mp`OzGtS!iaaE`jVhkUM5?G=F%G zLZ&W+O#VtmDA!S$Ou0IH=B}(wa&t~+@-Km13s-HDvloQLYv-Stm$gY=l6MzFfigQr zWo?qTl6MwHpv;b`vNp+Mreq>*QW!q<4no!@8ChIoP+6N4>Ec}+3RDnopbxP0z2)Di zq9Ck|DK#(Gm*&%%#@promD>+^!i7nA!5W$A?JJmOe{{}E`Z{MB-azkvC394ul?pj0 zh-Eb_z6h&+-*OXI?{-Y2e!uaG`IpC?n#dS?%8+G{=W}=?l67+U94hqEs&MqbSg8Q4 z9Ifur);M0R1+5%S#>b%ss1c&=adpLVumxHGC834TB4{y`f|fu_p=D4SYJ=LL4yY6A zg4RLnp$yawZGtvKz0ekDE3^&DLOYG?Ezkle2`z*cL5rajv;0qW+5zo^c0v8nZfFm*7s^5Vp#9JR z=pb|mIt(3w^3YLe2s#EGhfY8zp<%0{P!$w|>YzB(2qmBvC|=WErrrh zJJboSgEG)2s2AD_Wucu=KePwRLHnVD&|xSK4ME4DlfDRxR)I074vIsKPy%X!lF%Y3 z1uccrP&?EKt%EYqCa4$M3T2_4P(QQ>%0c^~gV13p4-G-bp_9G{uc!iJP#qM98leQ# z0wtkEPzqWKrJ;7H6IuslpiNLOv=z!iJE4AP50r!ULkFS5P#zkBjzcG}PkP?l|DLHA6PYxg5FzYJuiMS3+-s7C^rNy&19&LlPqS9?ADez7u35-y``R$@fUUTQDa1 zo(+yjzDM#slJAjxkL0@z$Ryvh!7a&mAD$)o9?ADezDM#slJ7pBP4YdG?_Cd(d@l{P zLMxz^P#d%gS`GaU)DGPMeHi)()B)WH-2~kXbwVG7)qAv@A8WY&Ep3HMHzCv@ABXY&Nvy7+R7HEm?+^ zG($_Cp(PQVukhz9{P_xhzQUic@aHT1`3ir&!k@43=PUgA3V*)BpRe%eEByHif4;(R zRrsw6zg6M4D*RT3->UFi6@IJ2Z&moM3cpq1w<`Qrh2N_1TNQq*!e62AS19}y3V(&d zU!m|;$FS~ut9thRF?%-NwK0c7{Bu|%B%hqVR#+#j7siDR!bTyy$w z@Qy>eJ`R(@g~CO`#lnX=hPT?+Lzi_v3k8rOrC)_98FFYVTC_E%QEIcC23y%tigvW%(g(rk3g~L7? z`&mAOqrxg-jW8yx71jysg>hknuu<3~ObDBWEy4xDq;R2dk#MmvC0rt0DqJQ^3)_V4 z!VY1luuHg3xL%kMb_+KNHw$}(TZCJM+k{!+4&hGWE@8iLw{VYeuP`UvC)_VQAUr5M zBs?rUBFqbq3WtQpgvW&^geQf=KAO0(@{dG?Rl*u!Ojs+d6V?mk!UkcZut}H@HVa#X z3xrAGLg6CeVqr?SM7UJAOqdq73EPDo!cJkAaGh|yFeB_1ZW3-5_6oNMw+gojv%($1 zox)whe&KH69^qbLPPk9FUwA-xPxFS)gRoK9BuogKg)PDb!lZDaaFKAaFeO|fTq;~9ObgqD?ZOUWr?5-7 zPPkr}5q1kV2{#LSgGJRm$MJS03UJR-~s zj|zu`$Arg)Cxj=3!-oF))h#!%$hdMM^V@STe=+yNMQU9yv)MDHvsG7d7fv!%yg!yG zbSIMBDPwn<#EM%|>?`ZMlf6-sY#&S^m9~!BEAn?`DtHHZ?8%C`{b9xK4Ew{Em4}~+F~9PjowFDk{HXihC1*p@?7K;Z2eK)PSChgBb8f@Fdu8ulGjJ%r zcW_2^xMEA9E%L;b;fn4=8~0o!B6qwtoVV}3%;fyXzQo?ybeMUL;bt~ig}!;v?r6fS zxW(P`;}t5?BbdLexP`qkTN2F!+#&Zl`l~#91@;Az9&;d>kj_OqGaG0*k|^ZvAF>Q`Vd&P%fgKfKVT&;N_++15i# z#$=TV^l7LH@;mwd^Ci-2{19G;zEqiAQ#NgBZqH@U!ZA07DCghB{N2HogwY#5B^`e*q0Y5C+- z%!hhu-GG(ni_7#j{oIe!^>Xj#Va$%)+qAM%(v#;deZjX#Q{&A2Ju1tWuf1i(jW@4Z z1N__HrsJER(&qzUJn>OnypsI9XaIdqaUd zkvGn+J(tPev)W6@e?xmT|3>S*y%3ej-q3IHUT%2u?HQKI-jFT5OhEQVmS8Urne4SR zTfW4kkAPB9>)~A;=)iGu@htCy{5vl5ac=OuTwfBN6SP4YIp-KoM7AO#ePxM2Av=5} z{j1USLklHKZAs55nU9yPl9f)>-DVPU`E4uNVRz$-ak5dyV=}VraK|D7u<}I~x-%Y| zr0?}*pLZBpY4M~#@4n}J99cOk>pE_@=_6|JdEiFWEG>2tN) zj>Og#-lhKDvXXiDUqb(C3VCKc6wJRGkCv){zpQT9bHHC`vv)prtPY&Z9_^CzF9Dh| z|1Ne<{-1?qbV=u!UuJT)Iq%ZAnZ3IqxAtNhl$m?n^BrtFa=VYt)%IQS;?C))y z*R%1`ug}AVhsk>52_q{9lS%em)*iTJeqN6%S7zwS+Jm#&GhQ+`0Z-BIIU`S%wFfWB zdDskLTYF&r*0Zz+wx8zTbq*b8zM_%^dE{Q859(c@pNRYq>{K~J@a}l^Or^*f9ysl zjRUE?c2qvwuHTnJM$aMdt(;3`bP|1_g7PcthuQuqR~ODz@45nygaJ>L*SoXXE3bEE z?@Y41yxu*c_yxfS;gs_8^U*#E&q266j#H)Y?b-6# z+AUM2H;O~10&|l&rc6Joeo6JzWQnP``dw3f?dTY`u1w!xc8z2|7_a+dUcX=FS7vXy zkJcqC>3DSprh35GR7~Sj3$GC(Pikx~0zPo}3%2Mzc~PT2nD5a<`d}^dG~A3&s1G)N zZ?MkD+kDtycD5VqjmnFcq;K{sAqz&!oqRu=EHGZ6+|JnsFUC%(3i!BO7M#rJHdR@__}Rv@>mUJim8=TM>nZD+Wv2MM^r8TG```oxpRY? z-K>*)u0HPEL{Q--Qr|+UGqlkO=59I$vq?8kGMN3xKN`&EcxJBV>HJ>K@!HvOJ9lko zdTR%s&V9|z-K0G4Gusp1XP!tJ#y)c=bM`$4JE*S->oXVoa`na6Cz)SKGRMQ6*;#kT zRJ6E_jp5sq+`s)leV*IP1Uyp0ALVWQ5zOMyx!U;M*eO*3&z9Hgv)Qw{X>Ni#YW6NJ z@zBhS%G>zA;a%XytOwzi)$5S8Z4;^2dF3e%N|JKV=so5{9o(FCCQnksm6qZW_&z7f4p+=csI?h~kDYv$+y`gi>4L5bIwg!9c zt*gg$V@Bgza_37k*;dcf67wHIM!LBY(mN%L+_>yT$&IPg4but8sYnWYdC26{zcChxT09p(feOM6^Z}N>w`a@eT{1MiQGbcv%#W4m_2?!D zO8qjqRw6f@CMZMa2E#M;R{}W}tjE192q5M^SUFmJl9FSVPN$stm>j!lOmw|KkOgMt zk_`Fi*2gkuMENFs{20J@tHaTxaFuRGIu3l^E6=8r2{^<aU&oQQ( z|Ki4UFKRBR>kMN$?mqmxI}41bY+N*$JwTtr=59K($u48{f>|r^!8N+(GzvcQQ}p?`O@sF&f`H`~UrX(GIbc z!CB;r8*f-$KbKrF`BSRSCRfg8uUxK}y^BjcH2;js=Zk*9yFeD1^&s5xahTPgiHyT6 zAM((-=8KME=Qp811>pwz088K7v-zKuVX4_KTdu6vII3K(jOMA6BmPl)7ai%54{kmy zm`}1J^iDbRU>w#~G77VtuBC0P3Yzd|<64B{f$b77hOwPpHw=&er{$fh@qGar>rqrD)Oz=Bbf z38WWFrnB^sUaVZYZ0?JYOD*$X%>L+?H;n5uahFx`{zRMYjsEfL-*MdbKC_>hx#V8^ zw#tRY2e=3KfvjiePiEYkt>WG6;_S|7adxU|p#P(-hp56Ov z_a;{rzZ_#eI_}>U&3@-Xcam?C^PQ9|=TGjz-+L0AK_N_AYx`uPDu4CdN$#8rW(C5+ z?$KcW+t%xt7e8+CF*}%jm%D*&zB^*>fBbrP=k>8dPqxkC&s=>&u_qqKyqfbc^aJC} zmnS1`-H%={>wwL~GhEy{dM@a1xI4FD;Mv&T!Ree0dMJTE@sOPlifpib;&JwglTR}| z%LDFy&NURb`R8)bf1wbL&mQC(*gSukyRUcB|9s5SnO~K&JFDyHi>`;(K?~7$G2dTX z?EA|@=v(NIE~0-*zcU$sp7xyn=Q7fG34YD8b4>Z}WJU20{CkXpek*<2%AuYpecISE z%WHq`-~SfPV2aj{1%uCxj2tUXze_vo8sy{i#6O;2lBOT*&PknT>lnrD@%8SE72jIV z-xUuR@6LI}yVJzq;vHZA%-x+;PjZC}Zd>x3bCtxqW$=9#Ry1d6Ep*#m(y@rGy%wKN zT!*_xh`YK|an5tGPLXROo}72eg$j3Yj_7JHPF$Bh()UyEc`r>M;2M&RFBa1wo&3ES;Gv)xJbI|Dze8pfW3cW1-Nl%mZs zk27C4{@vsqzIoMN*oN?{>El$J9nw=x9vD_0^Uxud*m;2Y{0_hNg|FR`|DEV!q8 zFz?p7M)hW2^|%4PXfAZXC)-o?gM60_9;q)rld!X6@LH~su<8r-+zU<}hL<0wZZvZa zaS~_ICKWcOSZhl)4?XB5jPC}sz3^M_b+~D=wYtyX_R|M)na}j(>Ib$khU0xC8)r?A zJvo@qg!e2Ts=e^%NDJpGB4IGh`0z2({vqry9LUbQq)-u?Hn8!{$e3^gvcvn)5xdiy zJJlbuGZ*P_@$r~fcx&8b+CPzwy8LSD>Gl-&sI&LreO~m7S(mN^=~*!N0V?zMTw=!N zTxeDgYj~u)Fe?$ZclONtu)QzL%5~4?{x-&#V5 zwHG$T>}(c}QEz*^olm;&Y4L4#OXGHnOOCj7 zQl4Ityq%Q4GZq@UoA$%}h1X1WJab1rL^|4iezD3$A?~M#XxrMXUOmFfoy08 zd2eZ>9rE+LupyD~^Bg%dn&-*-!CE_i6RWJ|esa>0sMwyXn?+enr+j8+6A5p1vL;5k z%(^OJa_}O*j@~iH0N;vV z2kXt>c)a*@>^gY%=RVKICJlZ)HfiX7<_tE(;M*AIXYF48r16|rc!s*z(II^n~Gr1c}jskyK@K56jr_@u%eZl6u_&;#Tn zaV1}Agm48-AF#(*^_L#cjWXE;_Mxz4a?tgVK|?O-x1ieI1SwKhQ}%Q zCi5RZ-#MD^^~h22!)z}+*Z6_+Tde=5hYH=vXmNF--SU|{ByP!wg@Ig56rYa63n`vc z3!o7~5hvHncuMcF@S z=9tB(-+YU~)rn-a7jk?s@NDu=gM2FCfz3)+GkpaJ`L#J0wKHnGZ!Y%zRgAQ(qn?B< z%~r;)ZcxVN2Wg^=o!y0gS)ab&#ep<9drtPB`WHWsI6vpopKBa=KQgSFa4a7!oTpRN zt?*x2oC~$R#6SEdc+AOt@}!cwv;}!EnX+(mcz$0fT*Q7;ezoT@r|12l$(4O?*~j-4 znjrF+Jg5GVZx5Mlvb>IDWAW!lPCctM8xIq{U$@CW+DkwGh|5&t{o*$2Ao*cwh3D`) zN12*@G@ckiMmiZnSqJUhsjsHr3VbQg^fqHMn_M;HK~i+LdKq1~=ccvdp*j)>wNb_68-FA z-;!PAVG{m`J#X#X9r>_@i(iq#J9}eh-?eXdSo^jwLmbB1x4U!1*V^R7y5~mQH}A5* z9e#|qM^Dne!RJYfcm5u0%fiTRYhz=sAN&k)CY;~$+cNJh@HF|K-bon{za(v*+ZPnI zw#}7utrxX;&SpO<`WE=XWMd=!gqke<`~L1^jpMzZWDEHK-;|cy@WWOXxIG`Y3kb`7 zzt+N-wLP|AI(F^*JAQv|_#evL-YvKA!C3jK@5eYM*`+8+ze%OUMGV+r#KJ(l8{DxR`lo#$!Qy$1c@|E)V zvhwmV^4RrFiHo(>(dv;A;>ovV=qu$rk`)#|?0??x%Y>dO_Fa>8X@f85hfs#h{cle< z`20b?F5r)aqy3+01;-!ZcIvG7Be&k~uQ=ZLDg5a2d#vvhuQC3&e1kXs(eL*rlKJjf zh_t%?6YlF+FR--S<)IR_0#pet^eZJ&*6II+jjKph8~DH{wdtyzE|@d ztNYXGH_U*~D1$cg!?mr}&zbdf;xXEVMVLJnqAdwy2YKTaCK^AMs3L+EyFWoc^KS&nvCdytj6sjNfg{pRhf5 zi>O!hL56=~{1thhH~C)9`W5c9_Binv?iL|aA0tm$BN`XKKT-Us&&W=HOhs)SRkb|D zAe(=tPcpu(uyz93ZL)oLnZKWO{(7Oyd_RXTEH%d+?b|PU%?^In%pMtm=gaH&=|3Lt zCSmABhy=ZUZRg42VeA&R*jP{0aCv_CJ#Obr!d31lQ zN4Yl-GWSFOhCXV7{$HpXzH1)Hy(LGQA20OesPCQh?QP5wGr33qHNl)s-2ZOVM)Lo! z-2TQFn9-JNN0V-xi2sZQ zhSysCp!yoI}CCR69C zu@kXA9`U}Lb}s#+2XhrB^Q_#MQ_4{0tZ^nf$j|?)_Fz8v>gPP~_naN%o`vh~{}~y1 z4e_8|8qXJ$Z3q13{FIDK(?t_Q>hwl!f=BZ!(X!Z#jLYM3eQyXy5rJ)i8B; zte#;e-u>6_jpyCd*SwH-Pcc3lU(c+}iHqvmFMf8WvMO#&Q4fFd3O^1>`iAtUdXjt_ zYPTOY8 zhFsoQyR?n5i1p#gm*Pf~LI3(g+VyqCInDirjE7$d{5t(M^9%X-apE-<{bs*!o?4(j z<_6$i~oi;BMkA5j{<>EDenXwybI{HFCPH!kq zaIM~-SN`GK*>7Dl@ZHp2-1QfFzV`Ow{pp6{{meCgxA$ws`#b9gzmWFV`w~*j3s`z= zPeSZG<2~bpnR(<`&!unYOll)@s8s_GB)(*Qvg!2Uuv;;ce40)_uFylAdk)qFb8#ah zzt{nNwq#ksJtoT4+ATF{w2Tkk^ECHXVAfiin$ZfksoGOO$4d31eWW@etkKxshd z)jh~xsefk2RN0=1x+i#-HUp`^o}toUCKnK&aF&NDknQWX_{AXGLs1g$D|Qgw(Yrw~ z3;g5p%nHY5r_`Q3oByVE5ed^1W_Xi(GipB)l)IU~-2Y~kcW})9bXqj0%p98DQKHAc z^Xp3VnA<7M9MtJd7S$~`x;2d49u zF8>ajK&f6u4-Lz!}41?+HSb@#+&iA^l%mjH{BPE?W1(99jlge2hPe{ z)^JtWIvncV%62}IW}i7;zV^?F-qtfK3)sGC+2<=dP$w^OLya4kMd{A%LPxr#`fNyU1 zkD0mEVf%($c(brqxJ9^CxJ{T95}tF1{|`$+9{?;}xRm9Rz_6V?jrg!RI>utC@;Y!W7f z&B7Mp0%20PP`F6ASeOzn5iS)j6Q+f2!ggVYuv6G2Tqj&F%m}-Mn}nN%y}~WRt-@`> ztZ;{Lr*N0BU$|SiN4Qs*6Ydl47akBE6dn>D79J7ig-3-$KH6QsudJt;TH?9-5N#8Z zFLQWbjX!blJi@(@_Hb$(L_am@+q1UmBI?2PrAT1IWx}+7Z^Cr^bMM=I{fq^E{h5LN zi}7d1R{tB1Gf4N#(a+5J<};7@=Cv&}NxZKm9IJP=l+z{PtVX`b1HKG@On-hYqafmE zZDAwvIG^&cZ$6&CgKJq0^A_JXTsH5G!3_-7Nj=xOsVnBs)yEnqat?Hcf0(S9kSs6t zy>#oV4}3Sam%YOuvi%>7ed;Uhe%KAO!?p(`v@b^gx|ewmJ7?MN?u=y|-eO~L`s|FA zVljVw$lPO3nm#`38hyWau-G^4V6oTVYi#>c+?cs1*24INe!uOHN#Nd_%$S=ozkP4q z?csRYV9M47y*aklVq?nuef@+Rw+`jEF$;kg^WOG|{D#?OY=4w^RODC0r!fBz<=fw0 zes#vJF*0WVip@#<=y1HU_&wtPUgr7kN^_4ZYu5y0_T4(m)&9M%jQM}c{6i&UweJ-B z-cswQ(;wTDFU@{B{dh6vvAFy(`4B2T67%vKxO?`y%=1lm`(z$Azn_PxY+lIBZ5<=O zArUElkGp)iQFUCLgn6yEj=dz2=e-d87#U{o!=7I)s)(H-K0D9w&f?uWL7He9yU!9%;J&NG964~# zyjxUar>W#Q@UH|b@UNoGP6hQnT2taq&lN|on}f1rW))lfXZvp1XuO!Ob@SrCaR&al zn)(0u;QQSGtkSJ-*t!Kw!Td&?z55>u#>InqkMZ=FzS!5)Xme83&05y`sLP4E!EDCv z-HaMPQkUK_INP)NzJ|f29(&|McY}5}b^)}y@PvgMK_(PtXQ*G{S76`f3MW19g*)#>@oJc#v$<2p?_XtKNq%)Af}6@A?pwx9CH0!Q@%~!o zVTJ;G!Q24#_Uo>WQP-(+?w)3M*Yo!XZv*?eo?(5<_OFeM9Hc%*3vWe#4H2iV5vM41 z?Pt`hA6wdyamz;#ZRVWUguCbH%>uoO_2qrG8-cY5#r3_5@_Hw^jCHgZF;nqB6VAtl0P3F3OEL zl(90y?fsVb=9c{bAkVh{fV~Xq`r^aPechFI>9RRmWOhC2ebA-%TCbzx`-yPm-fTF0 zUw?S!z1h%oKR=4d!cOzg}*<<;;S}XG#6L%G^PAANs?0i#h*x%#I=JDbqlMfRlV~7}Fg)+e z?C*`2+2m!&c$~ch{|L{69_!o8ZQYe&?m8W}wuSs;KGX5(n_Yd#r#&kRt0(5K@jwy2 zEc8r0Kc9g&ues23ytpwz9SUuA{JAL;G9IOE;vRD10*_XYjJ(T{u|e-Z6x1#^Y8&562=+4QRi@BRGcw8>KjvpMcohmQ}E zS63xohr4(A?TCGDubSF9dFvRuXXN-~+LyD^QOt~RcUC%t*_r6yax+o0CI3dafgfiI z+ujA{{}EhLs9sPxcx_D>-Z*dY$z5UU1M3y^jrNnrlq=;FEzsX^@`LvNInTSMkb!@@ zVUYKyZ5`*)!PzzNQL2ukDOZDRWG|xe z+^Ihte4khSoUL6v`T0xXhk;_>66X%avy9D+WX1o6QE$EHk zzgz5!WStviE&X4{2IR5%gTI*njpeQRft}Iz%-XS`jUIhqubnj*o2{wf1+max9N#(%G$RlqV^o#l!=D2 z{nazEXFN#$OfI}VZF^zn7@rfbb_;{=Qcy=vZ7*(#c}Kq+r@qrhbd#?=Z)OimtTDea zKc$eQk8)qHwOOPuF`2p_Ex!B0M#`M_CuVC%iyZ&3eu-cAYMk@jV5b)*4wI>if9v8! zJSfw@le^M!!gGTkM6Pe|ZD7B|?c`IFi{r@Y_fbc#v$hL=Zy)2g;Rp5Z=8|`xFdig+ zmBn6{hr~BYe7(tj{-@oZjlx~FzIv*aFkJhW&!jjzYWz$-JDD`RzPy}@8!c{Q?Im$K zK-n7~$HW6u12^OcYr50EVSN_!Z?v38hF1r6oEham@Px;j^9bvFC46CSHm0nO(a#zF zfaM8xzFJaN^Q`V4{hpOojIv4)H?Pskt8ia7RJbY@%5UtSLO;UFs+zKl7JutP<1Kj7 z?bRqPt2tIymJTy3Zt&c=*Oeb))A)$II?np?qWnh2Zoipz^{IHP)vLH)e%PUWk`{_`TmRUstE;GsYW=4|wL^0dG`|Fz-92Sd&ZIcLs{=i5#Q_w*AnI zO-YmAei8pO-Q7QlG}Gr#aDV?*$MOHP`8e_Q$z;sVFta{sZ6V*C;Y`Ldm-n2{U~hg; zoIbI?=8o)uchGN-vDbqAXgvpGoMDc+FzIx$0ux~+q{6H8CNaxDnaVtcoBhu7rh3yn zdOW{MYkj|jd&kePwl_UGR+{95ugcc;&S%^^DT|S{Wr6NFM=F(_4HT{WrU& z%GUPIYA=CZbHhBDDQB<2e|G;t{45-^XZBGxw|B-hyQ@0s&NwUXZ~E^6a^qeE@he-i zoBk)5vMY8}1@=nfW@a<@5Y=8DU_-AKviQZIvNgMxk$-^~n3ieWo3cM5Z4OEu*)#sz z_v)RJd4xEO>M?hBQrZidPo`EnCHJu){W6acw{hl{9#et&7GLZ1_#Z0`4?D5FCFXi` znO=d$@*_~D57yN#!lCI$73nQ0C#NZOYlfAhmU%#Lep#NQVvA<@@x92``-Q;sYs&P$ zQKo-)nI1{#D=S1)s}H08eWXl(YngsSnf~4~{exxtzB2vi%k*C<)91?ctm(P(Tded4 zyy2J-yGP3G4`JWRGdTNs0=<==pMU<@&lRm}SFOHb-KCe$yZnu|2FB{u+Lf(0*`h zk9DqE-r2Qg`Enu_tit(TnFU$qF^Kc%8eZxB$|Y%X3xz@IEFYM^uLs+-7T3Z2yy>k@ zG{R!k9W%EzxH?1f+t#E)hlNLkdErqZ`R?o;6CM|m|L*-s;joV;{_K62I^eKMSR;fz z-TPW$ozUWB?&87*p~cDuSgbRd8;X>ge;bLJ*xJ0;AxJ;N9wh7yX9l}mw zmvEhMy)Yx}7H$%57WN9a2)7Ei3A4f-!kxlh!hYdy;U3{$VNSSDxL9G*M{f6Nw6|gf+sLuvSbr36>bw|g*${hg}a3P z!rj9CetnLd^jtl+wMVP(cFxx7c{Jx^1?e<>WwXB~SUKd&gGn;Cw%5w7DlTjg;+K2h zBuohL$GvY6E)XV#3x$h>i-jrS5+U(&{wx!wg>AxiVTZ6&*d<&iTrbQByM>#Cn}xl? zEyAtBZNjW@hj6EGm#|;BTewHKSC|v-6Ydut5FQjB5*`*F5$1(Qg+sz)!sEgd!jr;b zA6++>a-1BMzDiglj0tOnb;5dKT-YFN6gCMH!e(KMaDgx>Tqs;5Tr5oaSiR5Z$Lga# zPFW@-9mc0MxVN?DnoiI0bIl%qt-6MMuy*V`{INYJ=WX-%l$>|acQ=*z*xr(O;3EzGwfpMz?yh$ zGhH}C{CkzX-z`1ybb8WdYv|TJuYCn;0>~T6rU#{&4Z3;4X#eMK^bSi0`v@Y$DFwxu$6z0R zHj16-VBX~`^WCw@+<(FRIOiy@arYx|w?>G$h6r_M@_L^l@Ivrhj`m%j2n=cOt=+6T z;6GR8!1x46VU+v(QtR!TsS^#OB5yO31;x^{_;K9P?MD%lB4osqU%=~)g?r+Y{PWVx;c|w2=m9T>U7Jh)%YjF{ zO0&nDZG!NZ5{9iOE`fjG1@A!MCwDpgA0q54{ z`S6dr;Q8N?PO=ughB>KwdP9%04qeC~7g*1ff3=(sz`wNjs24epJbpE}ufTb-f$Vh7 zE_n?uJ}KhEo*d%Cxl=#R!Mt}6XY#2vhGP_w~ms9!NxI-q+9E-05M;KI!w<>3<2z z-FS)eV(vB7Sh({AcMLEu+ZiFhM(-H-G`#RRkGmP{EYxk3|KF#{tKO9H2ywX5cqrge z{B85=0Wx=Ujx~A>??xSG+y5@^n z+9&FZtrLreU=JRN35p{`t?1fKL)azW5wVWip$@)WQ1H52sLSg2|WALb*k*+P!mKFP2 zwpv?O*bqw&WvZwbYR58O)pP7WvHA($$XnP3m?v%?84gKo6K*F*`AY0w#Td3ZG1zT2-Dh4;`Cmt%lKK(+D}_hrwQ-8v2ggt zEi=)D3lecFbC$}Ig$v@yzwoCVZ+vo0{*j-)>>C-$z(*PJQKKPc`r5+1>?iQT0|mQt zg8L;ly8c5pd?#zp_l}&N1Ano<;=*u#WBiVzkJ@^*Z?Evyc!GL=QujX8QAgPW5@QW_ zI%_1c4ZdCOxVVOWeOJYtUF=Np>qBpfI9FLc0Ivm;#DR2EAGW7mU%~2w)rEm4(yZg0 zddB!~tZs%sYVm@{tR7M?PE_J*?dc?2FynY(HlH_LmKF?0T&)%hsvx5%~9K1=9P z_|Ban9CgEf8o6UF&RbII=3sX+@}w6c&$-*iKfC|;#_NQe$gk|L8D!m!@_Z`@?>?M- zmh*GyUt8?^CTB$*&$8#o*7l8OvyNxs8P=DGL$;MoXyGmd9ZoSA36 z^=IMPpTM)M&stpiiHGrQn)8ua`1Xrae7;RI!GCx8CxgJPJL0 z&zbY<<{$N;CQskd_s{A_4DYYXf#DE39S!6Sa%zawn? z)Nbi|hI3`A`%|d}$pUPrYmK@y;-P9?qGjP7K`B`ISOXhW^(_s9)Y8>qAoCShJ6H zS|8tq-;>-ta8K^b#h(0@Vo#Wm!M|s^>+`zPYt`1KepbGoK{P zZ@-Im?QZ&kRRi1nv!@eY`?@JsOAHJyyT?mf0f5UsT-{0^SnEiog(?1LP-UHd2zv=oM*#zm0v-f}axY?b>n6iQ~@$|nlw5wJqz71BOLf0VpByF0r_!rYa(p^Z;;Aj9qK#xmmtt1Fa!eIPG* z|9;BJ@htqX#LB+-u=dh)GH$wyJxA7O?(ygcCK`#y!)F`!x_JpVR<|*rKR)67KJL<- zkspR1a&`3MDlg9F7>DH&0|#zCP@Houd^mi!l}V7-7B|Kd9Ues&j0FKMxJHNia%Hva0gw7ndEnTu4t|E9a^1-X{Pe$K{RE$~7O z_NEaRCl6fT;al#mfqyPe@SXtVQT#th3EcljX)b=ugD!(?_V$g?<?=9bT>-O}1Re=3EK_CsiOy=z%GTV3 z%@J`k|1$O@6~xc@#OxU#p=KT8Z-;yI|ID7zJ0P=X{-R#Syy_YE9hKb`@UlO^p4^x_ z=ZE2RC}I!3dKvpUytFh1L3&HlV6R_ZLz0p_Oo3)V7PlB=3s)unU9cGa-$H>3{0sCi zKpdN$QhWA{|DkSKmbuNhJ03g$#%b(2O zR;Fjx%U3c_m+3!TrZ>6alHkle{&9xOCwUj_ z6MA}_x%LU^xc=o=Bu0ncu;&eB04evNx#Y zw7eU^$tZg?pI<h@JKQYn z6_WSv{Z`>NVOF?9xKp@G*e@jSo%=n)y~3PupK!nMfbgL3knphZh%hfaDjX6X6CM|y z5K_J_9>YGGh%|jTDy$OL2xG!pVV$sE7#B7O8--26gs@rIB3vL$3Kt3&2^R}f!X?6` z!ezp=uua%5>=1SeyM*h6>xCI%w{Vkiv#?jVMYvVCO_&w#5bhN267~ys3-<{33Uk7J z!u`Sn!h^y?!o$KN!o2XPkI@))xE^u0*q6Q0W&T=zlz7^nwkYA4c}0!ChF=x+_q0@z zKX%@|n)n$`Y4Qn&TKWvRs_<&8On8xtn^-$7#gF^wSc)y=e>l zJqXi?|4e(2J=S-yy!*=LV| zo!PJGPB5qC)>q?TBgDCvTm!^7Bo~AJKla`SPVTC__y5kn-OXl!$v;?dH3KZLYJdS& zS-nvQSzv8f9Wc~rQyE|bi(OzPQKQZ69Y}x;?Dj4a+K5Rr*4XCS{MxOiy(x|U1_&5q z(5To_n%3Fb%ymVo)J7Z0X6L>?=R7kzJ4pol=k@FBckjIRyPxm*e$V&(ea>^9bIx;~ zqq#H2mYFc~Of99~9St;ALSH~*t3Msj`F$P})F^X*>v?w`_#nCrj3IM;H^_drjP@1T z-t*uO;2ST})h_wZb%n={PfzqD>5T5CO}vWh-z$#|UB{>G7lj?$IpaS@I)9Ph=oIaG zV78wa?Ip5w=2>i`zmGxhG1_LVr{-OszmGm!^K55zj1E~qBbu}D`&Jm2YyO8hpPzx+ z5BA~lT$Z_p*?yp{7;|iMK=!g|ekTDv`LQzN-#BA&(Ob(z0a~m%Qvtsgmi%YjS~_uD zTSN!J;(JeZzdL(mnOBI{eqY-94CCm0yW8_h8<=2kJ9~{-gR1Oj4=!O(jrOzu6x7`J zpR;CwKEq&0dy|-N{-feqIjy&K^DSd_XJ;~|eKSS&b;dS8{n9^pe}G;jVdjW7=Ys<8JTJ&eXQ5&I*MmmVe`hrw z_U<2gAR9e#nzE|zpOi*&+FQwd1o<20s>u)e)%@T0+4Gt#-2air!n(oxOPj<)vdpzj z|A?~~2CZJ0d-wH18Eldt_RK>g&flS${qt^bJNrbxO@822;rA;)r5T%!3&)=v8zby} zgpJ;Tt8?ZBt6|^m_R??Ncf{U_7dm<%-cM4u+IzpIv~}OJ_P#bHmszYv25) zWRu%BKa_3q`{rG`|3drW32(yueJDJXZ<5~_Jb8h5Hg=mAF=t6VG54BJ#59+-IqBva z;STC}WQ=(uo{ePbJ3jj>^c(1hjncnl zlf>Hz{divB`;3K$=pR@!3z1&ZT$v9;C*fmmEk|vi^+xtf2B9NLlk%uOi2P_Dt=8aZ z^NHpvExL8~QJ&4vz0$&3AG$20fpuj0CCx4DXKfiDySt|uJrcDu=mEQs`JUo6=&!Ip zUh{vHH~Gjg|DS4QPyFfYa)TF8Mm!tka_!IAsVJsq?Tx>iA@*9X(Hhi!hKrn^^g?!+ zqf35IcEN||oaj24|6k&{(}8;>|0jxD&tB=fSMk0n&%So;?`@qpt0}}hGUsP;_SH~Q zdQuU1{(QGzKF7Yk_YZ~+ZD4P3xx9t-2;>#jM~Za==4^xDf{A79aferF4?1n@pG#XW zVC^rpe*9CZ!@P5Q-0Q!CW@hy@gtMr$_4Fg|yN6PT3CG*NcKhB_wfo-xj(3M>AK7MX zgiP#9WGC*~uKn)couJRFkB2nlm;L*)FU@>OsVyFzcs!Ya=9WX}^NMHX=|h5_S7@~G z;Ggv{f4{X#;|R1TbG69@V!@g`5Bp7#^R@A&>H_#8S5tRctImGJwXS-+&; zQQOVXMraFkRfYEtHn2{hevNXe?`yKO#gMbTs`aqqNIXS5WUe{MoN*9)fWd|OFY@8- zvs&LzTRT<$9|%Hj|1{|=;eW1u@7fY=QTCO-NBZZwJkQ7t+VeVXdH6(q9>j;lmkM`i zuKjVXCA<8nFQyH{8^PRn(}lbFdiLIOPx%CGlcVTMAj2qp%1m|jch&T8@1OfVn>;i@ z)2b6^V_9*=SgVNbr;zDGS#M&kMKZzkHwY_IDNA^;IXkAgzS`4esfK^UzsdvHw%1zk^!LRpiT760R^<^ zBcC8z13Z=;}aqUM{C~k4zrCb*BAaeB$;G&nr*;gY#Q1zf)yEUN0{6 z4>pP)6YiUwor-e#PpljkkskCD3S;9dbdL5+-SVB|LG|f%_9@EcVf;5eTAuoAeWU&X z`mpvK(AK9OpYFy>reLzKgXq? zy$`SVPUq%*<4}zoKa$(s&%U3vSD$C`Wp(d2*SPgQSK}u9_?{ZK-tVn(+pQ~fO+Vtl z`jfk|PWJD;cYm3!sa0t}mB5d=ME^6l*7V)a+*j1O-&N;M*SY)Z+;`TwKUU}d?K<~{ zI`<=W?yYt1FIfFl_U7-bd%wHRO@ux%vCsYEt88=r%%=HU zZe3~ivOju9<+idM_6wHZZut1k&T=)2Xj(fP{6t_6Wa)ZUWxKw+wH^8Xu@>FzDYw-m zRafGU-+S-V>^9$5lkZAn(AJ4_G!eDcZHC(ocNmTtQl`$|Eb4VM`%H(X(uG3+z!Hykh=G+b@C#&E4+)^NSykm0c5sNqJ# zO@^BdbB5atw;S#-95dW$xXW<2Vcu|$;a59yUB; zIOS2KD|!n@4Vw&G4C96i4O1W43mbPhFykB4O52QhCPP8hH1lPhRY3C z7-kIn4EqfS30Q>*C4}30=IS;pA6r}jCke^tFS4jYadZZssF z?)_%NoFU=6=i3c;7>*f|UiW^N;ci3HtOOAM2SorYb8OAS+o-G)7ey@qMS zWroWQR~Tjt`waUH2Mh-dR~xP|Tx*y$TyHpJIBYm-xY2Nv;by~};WoqVhC2+$40jst zGTiNP4*3&K7Wr!F-lU2>mBy3{UDBOImcG~$sRfzx)F-GGDMUz}i^y?}-O zeLQ740F+k(`iv9**}}Bh3&=7=kez@{i0Z=4EZymS-rRf4{Sy9&Z(fU@UwqkR$;&GX z^x!M4(O+`un=X5^^Z#nr=+E0Bp}4w6U$qzTy{nj4X0LlZq5UaZyVKaaG^(+D;N~PW zKg<1cufrP*>%G=Km{0CzFcL0(x?)oxIK-GfF@Dh76o_q(_c8Ahj@2;?ju2(z_<0=E9p5m491pBgLJ(#g&;Y&7h4ytdtev^9JgZD+8<+U|#wzoK z*EZqLlWfBVxaKK0iH6XBPq_91?JzGH_w9qT-^^|X^L~7*Hj|u&MuNx6W$4)1ywqGQ zbj_t4@i51>c_yyLhuL>@fOPchy`FQAU02e%P__<|J<#Y2>|N-d z*^}bt;=0)rl7#j`6S*8`apqQ$zILq>e4hPypWC0$ejfdt@r}#}@;s7D_3ev`%=gMK;l~?D&tB5Qemw1M zXC0M&c!isM*rh9y_~BcB<}Ff=0H%Cvxl= zU-mp53hVjXh>N-D{4(;!+ISASNokEBT)ZkBhd;mgn3%k+M=8~PaRbxeOv zeS+N3R|5A_+GA7N`mT-aw{^5zdL{u+O!Y&6!Xa`7nh5p&C%f;(H8a3 z+FQP-^i2Mv?j7|{8p80`)s%G`^dS9*D@eQAGV!D;Y5TlOoA#qWn1`+#ehkk|!gJkz z^t;hXyBAwK50s}jORwb6!DOhA4YAie$X5J4imjUQ>}h%W7-)Wsb&u(XES_vlJP*2b zao)AkS-mV@{O0aE{A^7lrv}A*OVFI zu*T({v9~?KK3NxLin3vEO}blW-d4h_2@ihfzfm2l?D_VqeA_L1#Kn<2=235W_JjEe6s=+sq+bBs#1Qqa7vNxq3MFQOu==hl=w%_%AvPXP|_(XsG_=EnYKkLgC-4o;p)_B?1MY~#`i`>euz>YGoo&PE-j zNl%LUkS>n#IJIZj-pKn#(nfy8uXw+dej@rruA`4q z**=`4{0MI(mBH@{_!w7^v3#S`;N8&aO`=1}-pP5CDSOPJdHQ4048KnIEXd_9oIt;6 zVoxet+WMxh7-g_X{hrR;g$Gc+*QlQG6De(737^X+zlE(1-cfcbXnC5w%FvEq%QBvE zY*T&NxO#*?vfe7$mpV*PE)mwjX18UPjp8HR*NFy5=Th+z>Ns|YvqnzDTi`28S+{g& z8!H~8;k5GS^Phr0s4db*J(J#E-yV6+K2M!TKMg-kZL>8+?N!cI`dnW~R6XjK5At z!;TLnbJ&^S%=ci9>`ZtWcWNDe5>BU9XHavtvik=AqARPDioTs>?cIz)Q`n?{=Le}; z*_!n9kiV6rdkgO};v=*82YiEm>R(*lZGGI8r`moeT4v|jTiTHSF zYkst*{;?GiqRnS$AEX01aP6ZiH-=J``ohjhyfid;+<25QWm8CPWHt?y%m1UcZNRU8 z5X}7Axn=z1eo_9Xxa4l)YT2ojgl6p&w2r!y}mk&Fnv?tl>j<%tMYq z4$C9^qoV`Ag||r$Wj5`Xr+-pfoFAB-_uxN>8FhrXY+@0`F&~&o|dP- zEIJ`i&_X)rcrIsuQKwh(3>t$*L=QumfPNuY8cIezjfLJz`79S70n^AQo)&qg@1RTQ z2>-^b;4SYy8GX~{9wv+~g;DI~%y#Ty71pJqE*uNP#ZTOXbAjhk`9Aqq{P2kNwSM7e z*s7V{f0DdQuC3&K&x!mrm!~y$mHzGVytQ10#;f0d=)``ekJk9Pnfp3kkxt0w1byGn zDPLr;DR>ex8?xr}LHKQ|56YvLXI;opEyz$Uh5I8nF5geiv|Z|FsJ`un z|5o9QKXt=Xg_TwQy{5GI$s}Rb_Hj2=`Z%R^cKZ!JSlfPoLH`z=#lOqbkJYu^7sO*D z*9UVR2!cuEteSS0rrqgmlr-&b>a8a!(?68_JyWj7q+>TrzN6hTE|DBFwb{{AZ^oTT z27g(FzFPddi#t0Q^UAi(q0-_#oto?5nA` z>-%=}IBWX$^7L;}Kk938zKzKSn(xoWR~@gl{=C|6m8ThZmanV$bAIqkIIq6nFHiqQ zrF@is;$I{B5e*dX%eBxCT+Y4g2WWGhgbh#3cNIRIiHJTV`+t`6LZ#a`i^lGwElLg< z${Fvj?H|IwHvaUTPpke!pU;<%{kXLFsoDKQxtu>~|4=UPs->@Au78+5yNhc>=^5_&_XOs}bwCw23sYT1>icZn~GE__(xi)w$ISyrC@ zn-hn3>}LvVh9;!9dLsUE?8Q2NpFfGeVx7M~nqb}>nLxU>8#OK=z1@B^CrwygujJ<#%Iay@%pfsA7V#FXN9Rx*f_onBdy9$ zE{>d!d^nQWSbCE66npo8Y#4KXsPao)V;5Dn!YGp!l0n1$c7F@>KzOM&!!_5~4dx9sX@3>B;P2QMpMN;7j9!Po3wv_g7P-K2>*7v`1xe0sOe{(PbQ z^9Oj>#=CCjb5q3glNj?~eA}(C{hUJme8SOHtRd0XG_M@zY{LZU&t$DFx;bsi?=$M> zcuu~v^g$WgRhBC){d{jjmv&jmCL54XUy}U3k0Aj5BFH_o(@=`K%zppjLes>D+&qld zjkZHK=-EOC=wuUil0850cj91vnYz{(;v3)v$aVC0tTo*mcjwa;(;41{N_@kZ$MX-R z-=%qk_KRQf4*It&@j4xD${?w+6FSh69o@X!_n&4?r8>_;zoNdHc{l2>gF1b;!Z~hC zR-XDZ%GhMFsc*x}bEU<a;=JrCQ$L4}1e`;QW_d{`Hz~IA_1@pn!OGJ~AI%Qm5 zJ>yDq>Q2sYE>A(X>O=ExtW#K@Xdyn?z-&ZDWDY4&GtLRUp?D*737tM41ZzO#g%!)c zJCc^XaARrl{=NyFRVn*Gl`&3tbq?SI$M<29#fW=m9^fQnoT^CT@fzxX^@+-j z=XcN+98Hs-p3>r_Q=~02!CDFFzNWPJcIb}&ow;9V4LW0PcO>Zbb4bvhn{)g5q-eQz zeoVX+zujt|(En!$`?$7IT9@YCktfwwJzb~U$Mf&a`}w^9x=s z54HX4@QLyYjX}dz8d;%orhb>G4yn(uql=-`?6RgEog^&u(y4RF&TejmF$dul?n&5O zh_5frhwS6LH&0_JsG!!ZEJl-c};avR*#%GzN74As-*pxc!}mt8_vbf zvu`UI$|*w~Dcnpi^JT2ZiZ|ptN{jEA@`=2RC%hU zm2hsSEk)>O^bPURAB;#xK2Ezwrg!&)a*vuS)UsrVfBz-k| zcBhw@{+c;Yx7I~?jAf9&*n2a5oujcW%#+XTLG3QB6MY?_{*xOEnIvGpY5=S>8+AhGz$lmbT8%7aqU%VfJi1S-9!!D+>3_3m2}8 z-wjU<7w=~6g>NXMpp=gX#Z(a5$KGCOhcQh4GsQ@}EPhyeXFT+15R4Muz4{J*&e@5q zHNFoSyb#y=;!$iT&MVxM9439pXQ?ju>UwN+MhfehuU{s440~_T0O`7w_wZI^9e5#h zmK>+A<(O|Is%LKz~{Mvc3`5n$&9I zc74A1;kWye;V0n@g>^~#wEV5qiD_eF{zRtH72gJLQ zYe;)W^@5)ybI$iu$M+%s4)OeRq_Z8ry^K9Wg<(f`NuP&fe@$GDo=ImEf3E+CkmneA zh2OHLia4}(=j`CU1Nr!vlOvEtRIjw5B;)LNJjL@T`QDB1EB0pT|H_2lJ!^e~d3E|= zIbC(ZYf=8qAtpFh+*Bl;|q#gElicz5;j@f@AJ<(6A+ zWqz)$bYV&|H8QwlA+0ARqNUByPgaW=&iR#Yfa<=&X>(C}--FF-hF-lSGbPP=MA)F2YVc_DZogJpL(fTXf#D zNoOfp9JZVBFV#e0G~ZoDH%UUKPW zoo{;ctPyY1&8bgK4ul)%B&ULr`pZw^mvsZVX@^9ZbkMg76Jg$hlbN|l!RUk9t zc45gW|CR?iFBryI;ASq@8C*(VoNEqOO?Yn@;L}c?ReqItEAHcvkL9P^AyfTQ+%xvM|IuPI;WsP(Itl*P;sx7HWl zP&W{fC-S)BD@9fk5nyT5o8?dN% z-ebq{Z<6mNK?}nQ{dKdQh*33M+x&OwyyeAIjT)FzAgWB#> zV~o$t?GezDpRA59d}|^_+A&Od7%$ zotu0*Txysy>^3By?tQOe+HjfSa>Esd8N)uqe!~I7LBrLCYYf*KW)0UH4jB#`jv8(> z++?`fFlV^UaJ%6S!!g61hPw=R8|Dr7816OPZ+O7)S;OZH4;mH>4;fAxzG(Q8;bFrg zhEpEJURB~i(%Ywp<%0Gn_?+9O+KF2wiu=i4|u-zx~O-* zZi(Rbl|F-AmisyPtuNzrD-ksQf@i_^|C;gX zcS!%WtdB_Vi?xfhh(`XI3u@GS&g6qZ3uEnnBJCQ(ezUaoZEJi!{k%0}@MS))K3!T* zA`Sn8xqwjV(>jYO9w~i`Ipuk>Ll^w6!hQi=k$Cox~6G0^eb6ZvlR=DJMT} zKAQMT5904Z-1iSk|0dX1F26LM)7-q-l<|4}A!%csDif5xo1|P)4Vr7mzuAHeLt~LC zN(H+6&vZ5II6gg1yN-XRG@sOt7bQ^p?$zdRPLl7o`M4@r`|X^KGwGPKdgi{?PwoAj z{u)0WHTNefbK1A|izwd8)!f98p=IW~Ib;5Q&U5%Vz!k4~7xni|duyKcPvipDCChIc z&mBh}S2Cy5F|h*Q(pCFA(+z_t(2warH|)jExa9X_R}=JcqU&V-f2rr2P9AS1oD;>ZXO;K= zCfua?+eiT&=+o2i(@+ESfevu^JC(YwuV2+WeD@Sr$M8?pGyFH^Xn}eb&8pt1?-TL9 zAHdtCBP+X>x4O8QC-iZLk11}#ZhRq#+)}tF5fMM7?}!v`PPz3)^%dw(e_--6tb@PL z%?~=>`WX6w_=^_$k`caB{}EGPVDY@Wl1IziYT5&RA?pRuZgJ$)3kzB3_qucX9ler2 zbfB+1Y5vOPZ&?0*e1bOeRfP?mPZk@NP!26R!}yemrw76l_YE*NJ{T`O1?^I9E_`bv zY9FkvzrC1ce*Zz*#j=#HdAj=C z`~CLB>2t%)U14+6qHb$(Aa#9kxE8wl%Z$~((< z&rCe6wS#hAJc+gq-@gyXm3Ta`FIXL*y3f%4ku{G$`V{bu)0Hc!9HK2*-}46_eo z0s4&doZn+p@~b#RtGb7Npo2jAH>`i>*`J!M>{kelKRGx?yb0D6Hd>s>WQz0H3zo)| z=$v?e8#$<7&m{j)?kQwAm6_7_af|b@(x+)}_jvh+{eThr4CpVukaXg&{6*HXGSoqf z> zCLWZ&1)uB=-Z+sC-b25me(*~)?;gf_aHa~n`&Pup-LHJf?@6z&+3!wykvQn5D*jK| zK677vw&wU}dUs0y@y}0Le*CjaI1c~A<1cMVv={EF>S&xgvHzKd(mu-gfgJoX9xYyh zT#Wuk5gU`(pxx@p4wx40W{mvA@Y{w`q> zZoFM#M!b&6bH$dn#))fN8qt@zOl=3-!|D$?W3v1=^3Ss%f`8~aT;o?`p$L9sg#S!& z9qWFPWSMVv^E}M6y~HUymAm*RHgWA-`X}`4+Q4%8amuh&{So}(I`SNj5l@WsDk;m? z1viS1CW07yabhF6o{3?~cO=0%Smn>F?Dy`oQish{egK+A8f?b#`(ivS5sSe!sq-WG_d!;+5{c;Q{icdVG}S9Mv;IC;hziwa^hE>}v)?)Q3FsztKH)D_KKSl>(F>xq1-zi_rRDZ?hUo5_dc8biwt z@o7HaaqOv|%-^xUgx{lQLz`m`fO0vXw4xi5fNrP%Nogx>PLm$>F(E}we&~MKcnLcD$4a_fze$=&?C>D7GH9V@{8U^AoxzxE(if{sU*jvKPw7GDr)gH2YSL38ebmkU zrR!(Yo5qBc@olbuhkx+B`hWPv^rtE75PSmu`ONE7=I{$WXJ1C9m-xDU8_Py{5B)k_ z40yy$U26VGJWzE{8-o^tF4aF_tbZlBLb?Mn>Q-_^3|d=&OylNHwq!|1PUjT2OwgOf z?#%`&H{BywMMLNnFJPWU{E>QTE_SEbw}LHJ#yr&XCe94IZ0Wu1T8c%^MC49eg~PIju1E6HQR z*;-}tR60B8*L@0FdEV~-JNJK2Sd#0|7hyh5X&M<*KjZX8^-lROVr##-d~`o<#}f)! z_@$#k&R}=rzn8x+zoi+yuS98`(l^6HUMNp}opjRA=DP|537vf%6mLpUw$s>be%oC7 z%J4YnPMk9`GWQ&BXS%7h`1F3|3A#dttl@pv42I#6VfdoP34cl1sEp!PMyL9;C_m~e zF8-?HYoybahdVFz<-e*=uWSpyP%h7s%aym%x>cG`o}X86%D+O`X$hPIEneM!g(PM(LpuYsn~ zmCH7YW=Qu>N}H(nN_@oO;$y#_`Xv9I=7Vz3(-it~-~3=|F7@xuYy}m5dY&7rnFRk@}pm!Zq=Eqc$U!%`&Il2Ef0G08s?588E)os!OjAuFV0n`TeWy0 z$x+;uUnRVX`#6mF^w;{+J>iF*HP3Q$MRwJ=c^~bmaq~X9yvEIYojK)x_I*RD#?AY= z*%~)~G#BB1^3VHIH`cg$b}D7ye)hhVb&#r?XRUDMs+;e%W?OaZ{hAuL-8zDb;lO|O zCwE0(>O^*s8+c#qU+(IU^5k#khojc7URJ_(o^Y$27FNDcrSeO-|3PbXzOSDPz1vqh z_nmd_N?kaj;GOAeRsFB5^FL7M{$!ndsLuURotqU7|FiV|VV!%d&iz=O`-wXDGj;Cg z>fGaX?jO{-|7EtD>b9RxUr2T8e&(hfwyIvtZgc2Ndu`w74$4MVeH$*pANAFR6}o7eNjTcy+9sZypF{t9adT!_BKd zF}U)E!PR%&a0BsFG_X+p!j!YVa(5qfx6V$qJ8{)L?Bn&S)q{7)26XKito~c~1)5zq zI&T#YyXkyA%QJZ7|JC*K^bvj`gL(0*)`wb~i=N>eKKRP#j z(cxOdtl@e?c!7IAY)E}L_eR4_hMNs@hT9COFXw-U;h5o0!(E2E4fBS34EGxDH#}fy z^&fuD+y@N{hKCF%4PP{T$?&k@5yL5uV&6({Bx=}X*kTwrTxi&8*k+h8Y&YyMTw<6s z>@@5$Txysy>^AH%>@`dqE;C$ixWX`F*k{;pIAAzvxY}@y;abD2;d;X%!(qcw!;OZU z3^yC*47V9>H{4-3X1LREuW!$hBY|t@(I&$l|2}H@j#|E>mhWiBe1SG8{G>HQZ>p$#An_&TyOIcEcTpV}?5ocNy+B%p2}8+-tbs@POg7 zhR+!uG%Oe%GMqGg(eNe1!-hu;r#wpBQu#GR4Vw&G4C96i4O1W43mbP zhFykB4Yzr^YardyJ#Jj@v5EA`-OTqoTevyv`>VO6^K9Ibca`qB_;)yDIBYm-xY2Nv z;by~}A@RHKw;S#-95dW$xXW<2Vcu|$;a3GrbB}2-= zJwIYN<*_9&j2bo>@`te zu|(MJ!&|hA^vg|n(rH~Z#gG_0y~T%n`U)TJ>6?7Gr|%Dfi+Fzq=~DW2R?@{nOWzrr z?K%G3`zeO*yl+i1J%FBLEB;<1?8USm<pAwwFMU(Z{=HY!t-b8B zH@$j$8DZMd{9!5Wfm zd*p(`W4Vat?U+MkE^{cj3wxHPP}Vr-b@5}J!9O?kz`d}*As zEE5UMIpXI2z>=ySVy-~BkSFq@G#5t-?|6I} zdbe7Co9pI0?@P^TE|;IG**C8B))l4Aqq3PkhxyO1sQkc!@&d|^K(#!Sex+4q!kq3) zE`7I+hDyVunmhfG?QOlj`0fMPP05qy)JD?6npK>0I>)pp7Cn~)`DU%h+o>3JbIMx+ zZ?|vM+iR!ZC?BW0$U0DbJ@f4DeK8w^iJQ6e(N6SHE?dyr1>(0qScB z<*|)#)^aXl$GFZxWle$g+mJ6eFw=a3vz_MUED)_UFc;rxST02z`%Y zg}2Ow&*+Nv&D>X>RWO$1{c`h%-#I({{hS>4YhU@Qg!5{!2|g=-6|DV6HsNdCuXNuu z^y>XLErBIG>*H12x|&D*vr0V8R$k31-bJ~#b8YrES%IExWhknR#?wQs{eyIu*Ce=SFKc@+bXQmqytk zq6|jTS?nA?Ts$kKu*X>w?3PU_X!uUny0tFJdRCmUoerI|lj7_nu1#OS@zYH{&@d(VDn>0a=O_dY>=cT*SaQIT#B{lym14e8@d z4)luGRq9^!M15bVx@1kZapLiKgtiKl%#2tEfLe1W|v(Cv(U zF~T7J5Op#pI;zkqb*S{w7MxB9b$LnJ(-6E&`pzRCS|onu)1`D?vW)bR&LsYnew`nZ zA`j^mg#CDF>j$2zO*hXo@YuI0PV}Mw5lq34e@Gql*4Rr|9-uMkwp{Ll{+oO|oBp5p zCy%~OQ3k9lpSV4dhJNB2pkM2!Y%1pg%Ql&FL)%|e`PcTf3n-t`*0(GvZGHWc7-hdm zW%O&ZSDnWnHi-7+vJW}E9nnjk{3`zm+D)4L=E-|r^>n7fEZlQ;xNu+Moh@U$f zE5&yvlF$Zgsnhq7r>y1a9wG5y4?iBI{C`&QzmELh&Hku+=_4M%F1FHJSa(UJa9?uW zp@$SMXG^59d2(gag*(3P9Z#wbw5N(VZZDpNz5-=MIX}i3wkq$h@l56YRn_r$4X;oi z?dw^*B6z*8v%xIid{%XZt@Jmlj`(g_=@Dqd+idSGt;*1rOxnynh$@O<8`g=00Kf+Al(w@L70~;xBFe>bBCu;!l}1s*Va#kTxQX z$ny(ITd!V2*n`M^+bEya@FMt727WZ!OqryRCmatWUtQE^xcIKoI5J$#Sr>2ak}Ola zJD!@%21Dd;yOU$G0rq8`&0_I3WKz%Dpfk!VC{)6!q(`#XKBudwG^C{`K{`gEg-eXY`4zDa6_^!1zhgEqFKE8}cJ!$YIU z@zh~*JAR{+8_?SuNtx^wzC!)b3BExmB(d4PX{vm4V8du+pR-5HxdHD(f7bPn*pA1Z z8hVQE40Ou*?WBY9zn;D`N!h1+cy>Pe_wB`z^ft! zX&6)*ko)1!l+}3dBaP&V^bq!zWKZG#RJ62#et84qBP%cR!8jki1M$p@!_A{!n+lWWz@$IPl|d?5PsU_XI~IH>g!eCJ3ZpdDX*oI zkHiy&m6;Z`C*r>pq->uY^JSYCU7uUp`o0`(54v{cOCOMfmQxMTNGExPrj4Fw%GB(z zNBWf(Xf8FmL1(w9ToaBqjGh}$K+j8N$~8gzQn`*gdiHH8754eP5uMX&c@7q^;py|7 zab*e}UB-9fA? zc6_2Vpu5I7;heiwp87|=>#DQIp7wfxA#}7D_YsaC-;H*S|7~^8-M4tR40}S?Gv19> z$Gg84tb8;GVbj<5gDyQa<4xMZR#(?spIEBAtIa9z^l9WZ&zJ{PeUpAa=860|dXdA( zus!T+YIuxx?CA!+S}y;#E7Q7gkjd7cIIQRr=?XdeD3|XPedzn=gJ`+5^>OSsd7AL; z47={|xzd&#`8S%V+BOcQmG%lfls05Zx8%~}Xaauac-+h$t#bK~;Ima)fFJz;o+cZ5 z^b_IvAoCs<{}%0J0p&}dbm@7Vp%iuJFy)?TH`%M@`=j$h-aah->OFCtp`@|pKU0?- zq+>%vL#%X&&b>1<-4Xwk%l=-M?%yIsOP`e>Z*a6+SHWUGR<- z^kdk~N_7-&tPeBz5oKe2it#kgBk?>fol)5uPrJ0V6+7pzo~NA}_}_XUW%qGxRsEst zRpCx>CAki9rMUK1+8J&9U&jMEOQ;gYzZ(xMPv3Jw9*BN6<>`1JvdbqX3dqrQ?MUCv z;+y62Peq60-%ae6ELEA;KxYtJYHFAHuS~Sf3FCgM^l8qkSbSr$^yySv>C@Tvi6;i3 zso%f8wD{Vd;>eE{jc*wIi_%DlaocZF{|V%ATs`oF>? z*AZlZm$;@%BOh^dN5ynX``8(KiO0t$#UIeGY+O)C1*OH8khgDKKfc-9Aj95l*F0>t zk29WecF3M`cF1P&4bm{GHt>89!q#(IeZdOtcX0fHzL>t(`T=;v2=AF2p&yu1KTsSQ z9Ft%9sraY-*3%a=mxJGGA5OnlgZ@*tnAN@yZ9sFWlhHsTN`VegO z*7P9?*Xh7InW#LCEm84{G<`>MQvBjXG}T<5{%_FI=!xFZe*aiJA011^*zZ|PoK9|p z2GRZ0c~s0}GEV=qTuSpw$eQ^+%515Vk;=#V@xysSX?Q_e=hnzR!twojd73`FLes}~ zp2QDfRsHOu+>j}5Y!EN4^m*c`r41^ZBs9R@Gh_ik?)M%?GZa%Toq<&f_>Ib`uNlS7=0_hoG8=U;t)6O8@q z`mw&vQ`mGr;VEBT8QhZ9ld%eOPNuLSLke%QCOtJKc;W{vr8neA6&B<~j+ z_M3{=BwCILr*X@!XM+8w zN5AgkM8+yP-Tn7IRe4t#JNom(US9tT;%BTnbyw|srH#64qI~)(hXIuVas8A0C{2{7 z_(08k#MDjo?~tL?PuqOO)CW&eb`NQsGt(ZXo|X(3@n=SSkMc?q?%J90r{n@RuRz^Q zPmy;wzJ;H!Kn^+8Twy!q-YQ_)cW3oH$`c8Pl@Z_f$qcK(>{=V_+f=J=s&+4p( zr99KvAOsD(Md>aKUmGcWIPKba;igQ4cHTfcm+gABbFBwe+qrAw>r$jAcY-z^`l&w? zB-7yK$f>`dkt4&mmlp5c^s3u+dHO5=`gVOx_L%G1b$omAZuYuKroL7(HFKO*SvY{s zXrtIWmt0MM^Oq;4qp9*txmI{}`A=%birLcQw+xjQzkY~(U&A~}&Ae4W-w|{Z4|OjZ zKn`*9SL$aR4Scv-FXd^Cwczous-It6>F1#%cnAHx`XKns?EYZtfM`SE`u^_N&*e{k zDy{zxD6oP*blA`h!y`fRi7^EAGFfby)$A34fV{L%GGt_)8QKI5j^bg-|` ztubXIzORq5WDD}+jT+-D+LG*xjpUclM-Ev;e-+yQj{Wnn&x}mR zTt#9CexP{^>;@z$(**evEg#cdaf3Vpcw4Bl^WcKPoRjZ@EVPZ06ZKAcRfxEb^2lkCH0%zN~4p1V1#;(F@Pjh*9^ zXTX>@fM3OlKS4XMjGsfVEv`%l#^)XYvCaSPrQhY8iRXjhuF~RXdT39`{K&P;^+}GM z{Jp4~FQcB~@{hm%g^D*zfwfmCfyVSEYUO zT=EHPzs_d!1Z7KK8Td78_FU1IF^?VUXAF}j4fLl!|1o8rR$bHQHJt0_bJFSYJ>T5J z^W~+*@9A*#==-HU@~Sq7tec|mJ9ZW80@&X<_AkUqJ*MdYD{B+D*D+sRK63xbcuq5C zTG5|l|KUV3vG%s6hY8c#O?e1en|fO^WGz{&QkDcLZH^uzw(KA)nZanDDHV8}}P@j;dzS6WowV$c)pCk=8%;f2q z&e7QqpQL=^%!${m2{M06eX%AOyrj8$m7}8pH%9sSIgDjFC)CXs60g>|(vJH}j6n6(j=3FVs{KF&`5NM?+3 z-${96M?HUlwX}t$t&#RZK3%bupDNrF!d8Be)tH`e<`lCDcybUr6moW<{<*kLXNe+j zol6@ZPP9tKA^m^CIXJH=WK#46SF}6Ylx>;&9Z%Q#N^oct|EfFeER_BruD;@B-ZvHQ zxdd4)Fi|wTT%zBiz5HZ2Kgye!DLbev);Sf^46_i^YS@ zR{m!Ez2)jTz=wp-{2jDPg)p9(XWvfjg6ATlP1qRQ(vZjOnsR8 zH1%hxx_<0uf1>`2xHXrUgtn7>vzt2D1-&sg9Mt~Vjm5L_vaRr_@-hCzJD$Kl>2rN6 zXZSI0_O|$!TN$zEQoItnhnI=x7tuBNlICR8AG20S9E>%_LVwPhAGY#;3x1?BN)zry zRz4AxPlPc?jPh?TPrqI9Aq%m7mtOAe^iLyG&z>`8KQHou=h<%j?d*tjz8ug zB)=thkw0XYkh74BualM)Aa;`3}w{R(pcXD0H)y;Jk zS0&C@8;0V&iR)&rKCYEqm2`G+ue5!XYrwA8gZe3aTGN$RzBSR&xAJ4ZdE4qMu6uXl zu9X8T*@%?ry!7>n&WpM(y40odVrN7;2=T#rF}z*Atoz;X3L3&qp*f-X(S@N!p)(?_ zp)*5ggVFlGesAQG|5x&- zI?y*^E`Bb&th@F9D(Mrw$e-wm-vvGVd(qwcfAXj68ZPkJh;P{`|fgH({Kw z_M@MLe}1ih|AzmhF9s-|m7m-#=1B3e+^t+GUFPQ2|M-^>q(<=sES z-8l2sc@`bESDvX7_=zXEpSk}_o%>yN?&Wpv+bD*E1Uow4m&eEI-v8G+_k(rrt#$4% z)Vcqx&iz+)?yuFkpRIF~HvhByP1d=8Qs;howp;rN{LgJ1+@7x$>?%SFXC~&6jsx%C^SYX8Nm!?{8Xl2YWHGdhhmd z&UmUZ?O$ul|Kn9-{*{fQvuygG(2D=rFGW!PReZrhnp+&t9<^B6G zRq`6#VcL}T2ZR$|k3Zby_kW5Hs6HbH451b0e$McqVZrc_AvELsy=eH7;bFrghEpEZ z4COz{jYDY0VT&Q@bZ+wFkn}nv%??SoL-OfRc~y8z43mbPhUCw^Uuu{#>^AH%>@`dq zE;C$ixWX`F*k{;pIAAzvxY}@y;abD2;d;X%!(qcw!;OZU3^yC*47V9>H{4-3X1LRE zm*H;1yx|_hy@vY@4;Vgc_?+QE!-C-LV64Y%**yj2kXA zY&C2%Oc=Hsb{H=4*wF9kykWbi?*{U(eJ>59L;J-Vxzr9C2R+@(KJ(eQ=kUF3&A0Rh z&es1al#guwpPKY|8uxOawgXXteJZED1mcd9PPMl<{?rcVnSb@0bIIrYKKu$vm%{wQzHqx*6ZG7f?QQ#TtGq`66_=;Hi-U*6}FUfK4S+_EIhKBLagUuK_C@-3ZR&i|{i;oo{h zt-+0YR9Dq~M*r|3_M$Lno?|X*jCr6qbL44s8iI_U6G}Rr>+xLRY%7&UD|Y#r$HR|b zr)MmTE=$EvG0R*vdr-9hgt?hP_Mog_9NaekJh}2EO}%O=6=@ws`l@L&(R;P;L80cyAsEzr|BeV zY#L*T^D3@iCXccoFaH&+{kG}A@oB4lUw_|JnDO5DSAgAsyz=7|InV|)Hi9TBT77J=68wP z#rbZv5%yc9NC)~~vYj?NjMCO`ZWH~}Hn4vu+s~QEM5|jXX)^sg+177(Aqf7EerS^9 zZu9a=^I9KIeV*CNfsO4-xe)J9NoQjvoqA3hCrex3v5tz0a zndglMPabb2oD;>ZXO;K=7HmAIdBb8;a$cm6(tfmg0ecXky>qDZ5PAd8Q74@LIfzZf zyxX7X`C(Q%QVr;`!V4qWYTX8r|9WUBE(Mm9Gdol9rFf#nvqQ z6vAJFo|#`ATuAz36U)i_eVI^<8IJJ%gWB&zyNmovecFlRF#KI# zQ@KwuZ!7)qnYB2CpF{U$qeX0elHV#%P+v2#M!d!G3biZhFLJfgL_IcY9+~vZ-YdFk zan>jkGrHsG=KE*9?34!Pd=soqDgGXnrRt|}3vF-g#;YmwpD5qd(SMm}#hx+(%tULG z^!VGDbB->+rnKg?$A2w|z@yHZ*gK5g{$RW)8?^Vix>DYlUmsjT-iAtBU(*f`ynp;5 zZ1wLQk-gl*(p!rR4TmGL#ovl8{=Flz#s4GT{fsir5@&Q`Z#FwIG=#no_T;huzpq?o z4bg{drdf^UCP`aN_Lhq7_;Ve+&2=$!g=5tP^;CiQg|ezwZk^6uv*-6#KnoQw-T+K`swX=2@psFQu*h z2L3x^&_irhopR8qt%Hyn?RG zP&QQ@mX1+IdwU+1TXfF-Xld)$_7Kl3e$Mj;EH9SFW6$Dmv-#7Sg5&%6%UV7Ll!wSr zHcUHdT7XT`d9DnOJx!fpdztn0R`G)H2GZ1CnpuNwAAfR`wUA?fO8C7Nep5~O{S!mK za}IU!|BznRAE*1&zAJS}y*~(@iM}{5fHNT4Sbu-q?|&t(1;y69+BABAdFVE1<4oG98Hs~?9m-Xg{bBW;ItvzFpj3m;~BWW94#zlKX zZ=AkoV(5140jGOtU$m(-<&>iRjJ8l0RoW`1;%{WFNjCFC(Am%Fmh+6Uo|{2;Kgu`^ zS>cr~`90}{Y%=TJTHFJ5&+5N#Kgs)rCwLw`!L!=%ULpQdkke+RPv8Dh@fU{Jt9UK6 z9fap`=0=0`A>jSd;`L6CSnFsx@g#VrjGYgC7 z!qW=LNMSf1VULs6RTma+9i3yg%3EZsT>eOVriMnbi4b~cu~+Megu!>Uad?~MQ$LW+ za((OUmJcW3*&){K^2?MjzK1_ck2Mb6+P;5hw>(Q&g8}~9;jDZmiN_u zmbKAuxb&9G+vtZ9r7a1qUHZLmPiM09L5cbAOu(BG>G|lD(k64*5Ej2p*f}TY4Pm!e z{Mn@q9qESZxd7*@j2FBgJG1mtMb1W28570`&l`Dm8ttwL_XgYzxUuapC>i)(7bf9F zmMg!(B{gB5j^7YrVjoxb?q}-$I38av{}z7HpD+KEa3h3!C*jPTDM0-Y2J$ZHCob-P zNLhqqxMN$Aso>^(ON>4F&>gnH^FeH6w3jnAr0bC&tQDdy!v2SeToxWxUQT_iKt^XB zI&_P|q0ahLrhJdgoJ`^8y?mqee1mV4o?rFyNAL%J-0SrroSdV2^m0IozBdjZ2^W@O z2beM>+$%iI)Q%xCqLFv%Thf5;P`sZ$9leGmW948jbg#C6pTM6l?qshtd7k>Q{67$c zensy|TM7Sj?0dJjn!cTWu>3vBcaBS&eT!fArA~d%@_;^s#_ltDpj_#T3dzD9N%-UA zS61?)KFE!ox1^OXe?|*ZI`w?6OFuHoTW8XXUV1=YoIQ@rO#DfuJ&$ZAzl$tyXX|VM z$!^D&595s>V~x^nh1Y*O+5 zlyco*<@);ia%IeO-1v~bNOjvI`HpggKj^GN`J0h}@#FV2yLvu)fclA-NIO`=4~|OT zoxVB`{kb_3txcuu(&QlcfvLW{(IZ%$(WCEwfZbXcV4Rp=gH5uAD+^E&4Y=ac6-{c_G& z*b=ZuIN`?NgvA_98dCu!51(N%qxtvtJlv{d^6rAKv79hZoYJ_kGH zzmtcaJwK+7mylL$s+g_%R%h?!N-qZmU*KJx92AW4tfu^reT#6DJX=~b7D#CfVD08q z=ucw+syp->LG>5=7}WUjinB_?^l!dB%*ZDv9vcMLA)h0w1(mVEkI2)B#s)uxrkW~s zHmf}_7Ge+L6#8O6LSCZYrXH)MKaKHx*-fplFNe}Ph*oF7FusI-89(UE4V|f}^3oVa zdvh-ST7?$9-u_YcB8)<7+OIa65D$P?agNQ=GpWm~X1$|-qFw!rw0+6TlB3YC7DVk3ctR~_#eC^QN#b>XXT?==eJyr82`JWa4YC02iKyoU}`d+9!v{jr}T*HV_1bWeY^*qTuPw$bY1g3{tkGo-tVHYVQYnh}T`iH%<=cy8s*Tw<0sQlsae2R`_Y-ee|uaPdWM_$?fL<*Iiu5__Q@U zM?hzB9KFiLIg@_&%+<6l=!v!}o^^rzfqzpI=GCtv4R5PW_q|(E3rTy|E2Nut%Xv4x z@Ac&ik3~L2zcPymOlOrAJ{Hktatg;%^(dYE|^c)8>`_&D^IR(ptG zAE-EQp_k>5 zb>hrNNJlg2<{YSRWNh49;`Hf~GY-TjznoIurr}5-G(RFiG>8QaK_gl(b9gqFIsa3F zQ!xe?cid?u|Ig!MoD%f8C;!Lk9i8!<%eVg*wfj1~qs84pFgMFPs)TZ7euJxtOJyf_ zgo|Hmi^uAJz0bzHuJqN56SomRC7je~*6|-Py0=PiT42o3kk6NQxWj z9nqz@w8g)c2P{%7xRs&oHlom+a8 z?q~k9<}@}J4Ar?mRp;JP=iXN5-cjfN^E&tcTj$tv?|@2iXHpl z*zETq)v^2e@ItgpM?V!kC)Sf4y`0dF{hPazGkQ%GJN6%6WhUGIHTp?alkqp)a_h>~ zA9u#+omqN!ThTVU0Y#(LcgpZQcc?bqev?$2R^Bd4_4XiGRaHK6o}IaRcjs;0&sKZ# zUgXD{syC0`RK3p-89j-u`pSFsohn)PMcU!@mBjyEt2%(!I(zj<0MhFS3V~a{7k`mn zNob*=c$eJxahNb{HzZv596sTY@Evv<5|48)HB1?H8}=CX8m0|Nm-}wH;R?fyVV_~Y z;eg?w;cCM*hHDM8hU*Q742KOz4L2HYGTdyKGu&pl-EfEDnBh*tU52|2^M-p2_Zsdu zJYe{&;d6!u4GV^c3?~g=GyAAV(dkps)?l(MO_^jb`h6fD`hKCF%4PP{T$?&jm z&ygmEx^48ROALDhr_U1^2%KJ1Bx`QcEj_1*g&(o-BNl$d!jDY(aH1_f{Aj!XUgzm3 z9?2J?ujruRYQr^#YYmCl`CD%|WH@X%YPivGli_B=oZ&XZ?S?xH$&U+vr{ONc-G+I? zJ%)P?_ZuECeAe(e!-IxaPSHc=wsMNTXzrH`4;vmaobsryPU-uP(%+N*xeLG3u*-0% zVal-Eu*b01Fm1TZaJk_M!;E2{VZY&k;h^Da!!?F$4YP*p4TlVe4Mz<(8g4S&Y?w2o z+@*Kc5cTxeKt7$D^ot%Fi2od6-n$#g@42`eGv+2-=jOfqHDx_EAN21f533xT4;vma zobo8qU+?D-=;&T2IhV6zOhD!{ShMk7w&waPlFl9)--18p8UPH>k zJzr+H+;D|q#<0(@-*CWi&~UZk8pE}QS;O^)Lx#hKqlOy|HyLg=%o%Po+-|tTaLjP0 z;V#47hIzw1hI@OR%$tx z*4f#e5|O^d%Bg7u_I!W$pV?=h?6A+;rO=rBGuK@ApX>gAU)TNrejI+<;b$B!IXvX> zVTYf0_=v+VI(*dOmn?1y9L_l0;4ls<_ol4FEe_9hc%H*KhZi}#*kSUk_Bb7SgWK%+ z)ES-DJQII9e?Idv+fHX*Wyf}1oP8tR2=24{ojv8Lex(_Dz2DzVKHesL z6;pfRcFvIslP{&KnefE7&E(&hpR(cTT&~KYukQ%x9sa!LA*5UH z>}$T;O8QUU?aX_e`C;fpPrT-x{qvVj;QZ@~<^Hs6lJl?OTr+W6MvF?_R%6Nl&WY0wHS+tQcCQlA<1~D&usq^|AB;>=y$Kfc%S2`qQ1+ukqZ3 zIjTe}^>#q?a-q?Cp@NL|FSp-gbI$_$b zSE>8aJqc+2N}&8^ojww88Xh5Y@VwdMsJ-+GZ?SWfS+FExc3P9ks9$9|62CF{ zIx~K7tgao%0<-GcuNN(G>ov-YQBDK@jxuYFPU*4hJN7$y*KhQnle_+Er`1$H`i(eG zg1uGneIpPo0+e4scNl^To&8GLZQ8hYO~+Z+Z#2{Nv$vcx-nTbaEYCX$GU+nGth>L8 zOc?F{i!Bo#bamPQ_HA1F6EeZyz@RWtqxjca9b@myPdp+ev*15dCdBSm2FYZCVOp)i zAr$;NTTCW+Yw|M@d0?f@>njgVj1g>GUPaw`<@=lX7~zCGs69ql>I)D2UsWEczKwEY zhPPrkW{fa0M5tbf9xV;3)+VTl$OAt-$ekD;B!A=Mb(}MtkO#HpL968?^Z#E(9?bA* zcKn}69z=!*ei$%X9(Y?Dcp`bg9op&)Kof!Sq_0f=_N@ zUXj;YL(;QCZ-h63UL*OTd9zow#uHCMkORh>Ur5eGmFK7UnnNwRJf7u8SW0vYjn4kb zO%Pvm&{~4`BT64{e9d7Pwcw&<40O4Ar@fJ;Pzw7}i|BEwZ$rIYo86P<0u# zJeSFbIHT+yBQ zm0q?ud2+*jpTvxWXe;xeTco#K!mVJXoiktsig z&ij!+A8$;igc^G%kSStg6NF@n&NixCvVhDH9yi4`R(Oz&Qa(MhlwKa;Goxe{c-ijV z@3GF+yci>q%e|^FN76H4nRBC)In6#mWfG;ch(m6&ht>41KOdXv8Qpyc^BI}|yP-N3I$*E5E!i2j3$t%ildJ2qOZo{+%cToK}sAR@LgIz($_l!UBC%5FxIqNz1=J@to zHkk8hcGS2?XQPp0+|w>8ZuVmOk(UMC4bfN&$Z`HU;B9?-#|IhMp!3jP1|G-brN?O( zUS*snF57b0t38b;+m1T_9(g{D%eGo{c|6LGu$1T)8lC-*%2Dz=>MDwf@GRUyNW>jXN#)OZZct-JLMPUFI@WId zuO%~X^z8*)LuTlG&>#nlH*Tr5eiI+J)S}B1hj>a@N^}XvE#}OK_alD_Ln=0I30{kJ zp7U%}=HJH~u{y?HG%9E26h@8m!=NZ`j*OEgJm>Q3Jn=bKj+om3Kc^Z!=c>w#s+5R{ zj2aSSoOK>|hGd(Wd?na3W}U|!EK4+2IkC?3bG$GA8jVAWv@Ne{$dt?~2*k7F$&{yj zKn{EUh|82(bc#cMynGN{5}ERPuJgRdpV<}tjbz+O3bYFF{7OOQVdG3mr2$6pmDFtq%oIyyd{f1Bda{d@|ahhr+c-$fn`W#*pR*&nuESzsOL^tNDO%g% zJ((u0?`Unu?s<(~-@)GOa}BHx_%3TsVX{Y-|3u{$>`S~M71{f;Yeib`X79|b6>&ay zZ-G6tezR7@-S#6V)`3jZ9qX*_VdG-|YRSF=&XPyt$i7f>wW#uZ8QA;6rGtq%&Y~K zoIQEhKH9Ps=T2lj`agXiZ6LCbraiQLePoaR#6B98Iffcb#uOuTwPeg?(1?e{Q=Uhp zKi!%Ayn?ngN_qZ?$r!Ug7A5p_ibHxYFBDz^856vo75@@#Bc7ESl^w&41{=QT3^i=x}EA z>A{g<{J+&JN6d z^KBBn3(ERXz#E5!E}gF#{7}%yyNUmf9cL7?)o&s+>b>WZc~A7kxEu6GZC?60`@5f$i z7~{ymu*>=P$n${Kt$!iS(jBvCeSq-Q4?OPHe@b=?6;d`@AJV#>=360sjLuc7 zyr!q@e%lS}x_I18Qgghu>kB6IjzjQ#TxJg4uCss03D&BIcIGl6GHIY_-n>0}{K^FN zUsXkY7!{KVde_RxgK=a+(B}Mm|S9%4nnZQT=4e0AFwO3=hMzmTOGhO1FFe z0Nc%$na1O#6|MeMOrpK(4RKx)4^_@8z)$@;6h5-SC!2QHjL!6)WhI#pe?Ln$%%e(dc9`<+VYHwF(=XK|Z zvGgW*Fk9KzW8bLXtGS0cQ;!VDO&MUE&po7>@bKKht{_Yob3wY8zpd`pTu{dzF8jB0 z_13v~yt1z=7KZv|^X(1B>n4no8OQ%K<-mJNysh4s-&5Jw7L>0beYcRlHlMx%Y2aHB zefh4}BW+6G@hfktV_M}hqd!zk-eeA8w*eSO-h`XvIifso#pF#*I>`+Aak9hEC6G7a zCrA94*nPZldGl3V6UZBLZ}JGVk~cItQ!ZI&j*J^JyRj<(Uio;v+2g3a^eSiZzm&`Z zFZZ2$=*plfJ4HKL@=0SMDJ!3Nc+MJar-Hs(=E^i`383^9jXbmOe8}E(LV=rGj6CFA z{e=Cx4INvVTQIMRH;!lWR&UqRqqXe=P~I|cV^GG_hF7I(MrW+R8WhKHf6#WmJ(f+U(hQ&LF`Ub z@OA9GAGC%>I3}aaeslsEm3k7ty})>5qIPKJ0$%z2db7t-`>1}hWR9=5E+<1quj!h( z4vVzg)~~y+E9l;G!=^1atlz4%!Mo;+Nx|XO4!1kJ37YCSiV(V!tT8NKHlcUn7R7nH z(rf2I@a@cUPcBorqd(Bx2i{JVcjPp0`S;50++n=JbRcQ1LsY(Cz6q*%(9g_U4?A;# zp9?V#`pI$3ztmY(`F0Q+W26gEh+oI!-`&-atj4$1IRDn76A#Ldu$1VM@b4c(=l#f^ zk2lW0e~()d{(T6#9$-BFT?WlGz$+iGH+vklkLo9ze^(p+_59jxqF=>-ga zfZB!Vq>uNDNUu@Kx1l&+)uM~@mFSZ2)yJSq!dIV%E(u@lhOP$~kFQh)ZzR65=gl2o zZ7^M*S<_uiIu`*E{<^L!5r4J%*OQa*R~W?kt6T^&j8jAL75r6KIgrl`X>I+3d;<_Z zE3K{anc=tNn9ri^vlgGtqmGjBStoQ+Rg2GR(Z%^pbV>N^Uw;N&5N=8tA+q`SbC{`RLQQCE=qk=z4+i z_z04qS$|IXc)i)h;UgASe8gF4T>k~cyxy z59YAd_(-5OBs%HiW5x~GMU`l!;yhT3E)T8z2uq1B2@ie(I`2pRe7tcU{0eSKcyK>- zJ-~Q8DB1Kz>dTfz`!c(|WXdJNW81nmC+Wk^pU7M+yzm$v>$U42KRheQ!&@zt+s&R* zz*#WyS_9|H>cEXUr}Z55g;{H!^_4GH`S0H=``!NWF0=1@q|_d;UlbM&|9Oyi^SLJ0 zNq%-5k2AHF@a9jTOTwE^ zK-U9|$D5ZyqyEJ!pAT>LIBFl&Pj>&fDaxC0q2g}`MtHMxd!l(V-w#bcg}vJNcs#h<`S-}Tw>S^hqKosO=#uc@A48Xf2Pd*tSt3mFpz^G8$vSfy z>{MF)X!Tu0^gh3yz~iXB^a`)dIY!+kizoelr@t4gae`6G1gg3};>-)Iwap~@Gl2ro z;>NtK=#4V;jCmJz>O;2M;Al=!`WtK4b!^(SMIXR5U%jP!wiL&lsx;A<`?Wc`NUbB} z8D{8x#|weQ0J6=zQ`@HVl6BT7f#fBqoysIosd zm$T;c7#Hj)?N}O?dh%Mwo&OCA0-Spw2u=Y{$GiyKh}N7(bQ{~j_kPnz*=9-TnubH!)`x5&_!zz1I&gR?= zXYg)OeFPbw{vV$8fg|N#`N#KhrU$v+gIgCezMZrAy=GszvX^@Tgi-mF*_S%K`3h5C zy>5@HSou_2hC0qSe<*l+-KVk*&BV{yp3wFSZRzsG`PSLDwr5hewl|R9hMmP?Kt0?> zy}!FL2yOv?0KBt&aqe`&{LrWSew=zP2)0r5F9NX2e-_jcSKS_lm&mI6`)s@t0aM_g z24rZ%^3iE&cxc4jfNWPfr|tso2Mz&8XpYE;#!lca;0gG1^@yK%zI1+M+7QDL*1(%K zSP)IqerqrN^u;4-nSL1aQ5&9*e@2Tn&&Y9x0XZN)`i|iY(v=~c>6caR&d;sf+cvkn zGe7s)J7=ZKdxPR2X9Lt$DtlMoWBT<%J{;T@q;Cs?cbDJWAM)--)0qTPUO8(DJjYos z+UM?BVR`Rwzpr%5{8VN3qJZ#1+Ivv>Y%WvYrEx+|WA*do_Z`E-FN*KVdueBTpQP=5 zz?}6ezZXBNgY=oh!#{m?_xwzmb|SyD?RAw;WsMm3&bD)+YM253jn z1h{V+{4kwHG0=I3f3odA$UM8dH4~4oa(B+WMe^k!_1`Le^X@7g4DT2yUi4^b-O_`c z7flQDqUM_9Q;k={uFP`WI|+7Wp6R?_37*Kf#Kmjl*@0Fe=nasyf52e z&L7i$OS><(^?rA;iS&K2(%0Bs>d)On`kpAQUC{64aOpDI{9g9v37fWAM>;k{!ro5U zm#Y4i7v2`mH3s27lg2vUSzmM;rxeS359G?92>5Q~smtUKUYX|82yadGVbM3Vs?8DJ zx=PMs?u@K`Wa@4o+N_?3l~d$U>P9sk6cok#jJmA{AQ_r!K3s^&6U0%7E9my*6)|v%ik*f-vcuYynkQ@vY9#w|3>(`g#T#Bd20IR z=2AYOKbnC&2veNVP8aj*;Oi80ov9th%)33=dA@AqM`y2_i@CGr?9Juq+aD$!ZR!j6 z6?4H(=JK{a{W*sa`ICD)<(Ydf2>u6crGfU*q<&^j-_&{8{`?)Y;L+^5e1CRlerKg` zYEu>-B^^z~^~;sM#ZQS>nS+>m_GL#MH$O+wR{EAd1KqXIJ*YAckxPcR@6Ma`bG0XE z8=(E3uLEd%;F;iLwo>JbUX?BjxkT zH_6l8BYA%79`a|$3Z_h6c?|d438RrZF=cyrZ&2^T>5YW*zo7d#H1qI3mo|pnJh{8H zE|)4DY_;sHzkGve)z)TTnpc~uS3M{U$~FAP@GF0CY7pK=SdFE1 zdHDRTi%O4Pv9Giv$6HYsJ?6r?Q(?$YG#nfMNiW*?2jcPXR{d4(%-&Vr+eW)XhMO^x zcypQQ`*<^|sPJe{b&bQX+(J1LN4}-fcSe`maCzsuu9qBrfGdOeJxlGjyiRAB59HwS zAoYnLGy8qTa5h-{56$UXKZYOjb2#&p>cPE7ynoVaWJ8n6kvMf1ahl#CSA9^|jVk9z z8Mjk*XOoVc()Q)ySJoPTm@9q%l$9NA5m}iJpZ$Z-jN4S6-)HVomE}S3Y z^>$W3Tl4+;K;`Z%;e6ah zeno9x{Yvfr?3Ht?=@@?brHS_`uPhwtQ(k^veOcw6Y>~RzTj^W&6zT4)^euW(Wf$RZ zQ?@FH2ZmqCJ~#aGKianU($lmVGY(*!ta-`jD}60{YK;X{htTY6WY|p{n<%T6fy;x` zmr8B)LoKVt|D}WT8LOZ37=6S+F9%DPw$g4}mQjA4rGuA`=}wx4D8qS5x60Y_)}oao z_5N}hngb*C{_>FAlx|=Ds(b2vp6b7JOIx~fXIsv=^&vmjw*{sC+?@l(&ws7d6V#PH zlIpi^%|q~JZ>4WxiT>fv(#=`=jf?utIB4C{bZJLhU8yiXZR7@NQ@TnYIqz%GKP3OQ zOke&AY5P630iS-%UlFSWbUx8Mo#bC@{koAQgmj3?D^x3R7j)G;q*{lUmo8dexKTlNor@$Bsze)psKQ}s$*=I@z2ky3|t;I(XQS!Sju*a2P%ERu2O%$qgz-V?+sk8 zc{d9e$i-5JS!>8VR?IJh=gxa>_@$qed)|C~`R44jNPHKPCl}60o`^3+eB4RN-b8(u zX+x^_=QKVe4|kP+BVXT0--unO=JNq-Ib3mP-ey#Wf35R00PVnoT-l#_<^vCC-Hx0G zM+kcE9lyM2AA07RMm@88_wL`j{SUwNHQZJ^yL$-pPT1*MnYE~RmUTECv<(o}w*bxr zIsvJuTORXR?y_47ME%6gQJQmHxZ~MDX5!xj-Yx^`*8wG4>AEhW_i_95d3v9xbD{M# z-p;4-9WK0Rda$aN$E(r3nqL*M%1m)94~jn;x3_yk+!xxqrIW{4&gMHbt!FO_&K@x? zlW`JWYzhLk>kz01q?R$-y3cCOf5z!g18eQrskyZ2%)=Pyij9BKi5FCs3eT-6&w3ht zRLM-oW2NqqTo> z6MVRt;J6 zxNhw>u4k;+`Z0;aZqZZNp)sJ50a1s4t zV94Pk7KeM_E$G7gocVE9BrvB6*wLg@D;-|tFyR^dHiuU`e5J!zIo$4Wr^6c@rhbk8 zE{D4vzR}^E9PV*=m&3aqCcVagufzKtzRTfz94gr8y93vP1ZHj!_IGyOt`$ss_)@!+hi}Rjr)ejgx}*jF_rMbIXnAVcWBEDafWL)Ys<5Da;}TgV~y#jrH(B7Ob0J! z{VXW$3F<35bK18xZ-v?Y$-taRDfI-^Gbf~jx$|)OI6mw3h^Zm_mvQ>oI62*q{al~{ z(6~u-(x2|k5};D>^(ZA;sn|HVCS4v{`4N^e=cyVDvrW9R*d(#IPc*M^tk z_RAu0%F_wMFJ7hRq3Z=Ccr;E^ezVT(^NKNzTniMpS3W#%_Bd)E)oYL#H%G!BbKGdy z$_EUw#+|<29&zJ92{xmYXm=J`T<(vA$QBu3#whnumCEk{nf*H;$OLmJdOVr1+<%fL z*_r6YCh-xOAQ=FUiRT-hBfCTU?Agnqo__IkWBH1l_9FgGJgYVDp?%f6t1p#0BoD$u zxxl(JXD<|%XyMo6`3@_6LRI;CkMrwFD8!%R@#~&yNLJ(9Vw_)V(dF?bKf+R?TWECl zPi}%3zXrNP=lzJ%#~b6<;0L%R;Mdf{(DeZ0@#}JEs=R^T$BTB9irPo@lg+PJ8h*8R z6~u8$#3~@dhwF80dfd0_mM@*qJ@RAT1}h`D}TV&(?1?(J$eDF`(XPF=rXizkqjiy&A9ITXDX7 z{wi6&*Ev?d$9VW?SmX{XlZx^s?P0m6EmLMJOF!7?#>lfPbJ+83GvnlJrP)VTet#mhyt17JK}K4gQb{`+-ab6Z(5?=lhbP0Gl)L0-1FTV&~FEAc2 z?}FwOz$>3$Z}vE9AJtDbFYh|JOL)1Z%$T=wkDc=}CT=S4>38q9*m*Ade09i%`XS!5jJ|P+ zUvvJAvF}kcPG(-~-=}o**Z+MS^LDh)ti{_`QorJBf!e0%q>s;Ei`Ye#Z^v=oE=Gya zdphx_^ukg_APH|j2A%hVwi;f1Jp2>flJNEu(DeZ0@%ClVGyz`ue0a0RQTwQVvUxjt zS4mu`_}hUfZ<ndLgc!Q!p!#SoV z`qrP8XobHZJ#D1lv@Kb<5}r-#-_|VFm4&)!L7XKywjXH{F&j`<9pnTRH~|4ysEx2 z2aLz7MQEa`7OxhgMCd(ToL5DcgjY}WjkZ8X_lqpf$y^;FS)n-oW`cZu)5>)^e1FIZv6K0*M+B0gcX}oc4>v{gsnIv~+Q%}UlvGy+J zlgqf@c9rh%=w6N1mUwslz2Z^sVsh>_Hy2+0mCC)jD{-HzezS6WkNEf32R~@|_(Pnt z=3Yrxda&5by@bLd-4)@!8ux)_ts1)PK&Engk+5=2oZ;o}kiCDTxo2f>J9l}47Vhn{ z4rSh2KXs6MqlA6B;w$xJr|RtcZLBeHHrL#{z^zH+?e8aHunLU z=l;7nmwqpIcJJVx1nbj!FQ+osu8-mWEec!Vp2-lP{NXOeH;enHIve|>KLcF36+gEs zUAiOl*%u3KvW|YB|#PJ2jVXScMR`?F1zKPXUs{k)A|LPoZQlrL-YI$N(hlV+cM zMrCimS^pzVO|0daH%b)F@hdySmrVZbU&iTUdti0@u@}!Z0Fq0hlRh@*PetVy&eics zOm^0!lYfQp!ZCCSWM>M_@_x{b#2b^HshzkbkewOUw#oU;2{d2w%D3B?>`AYL zK(a>Qcw;QtWA@8^Si+u9VzQ?uo!XlG2utk&78;%Xlbhhg{<|v_Crf<2MfcyuaiUrc zjLe<3t}~BFk2g+RzG6ae+^&j`(;{=Hlgc&Tap!(nfDmhRbE_HUOYPcZ<%yGg;)%*L9pnAHhxaJ06eTeYcXO8etdKY%f0k3?1z1icaz4QvN-8n|xCW~j?I6d&+ zk8N>rnM|Nx04xIR-h+MX+K?!dk#YIRu$;>}BZG7d)+Ig?Cm#QHnQ1R=&g|tx`=~ST z_BqmV*Iy>sueTi|AKdtw_ei@!c%1&3Z&$XN_eeQ&u8CT+-qT9*E@`P<^L_IUsX4P= z@$Z!0%J~8IAPG-z20cGe)VG)dLvtMW?>%ZRPN_{x#bw7P?9{BrlN}Gqb3}Q*h|7*z zbb0*BkFb>J78;%XlbaweJN^zk??;qA-dO)0il>sujuLb|z~YjS zs-G-b;p?p@(!aYWO3ge=a{ne^WIWFGyd>vgSDZhg^RV4)b zx9oX2yUq#k76bFH3iD-+&rh!08JO>^!ILjmKJCxZw)6JO@C%hYS--p7z9B%rKZScQ z)whRnf41^SLEp6yKmQxyn6rO+3k>rB>wmm?VBQMUos@q#j(Ph&-vGhBjl_BTe%$5) zk+7uo?KsZcwdmr!ExIJU{WIv2@V3&CfVa~shhAVj-rf%l>{L}gzf}vTiP}f? zlg-=r8QzY_o2(LG$MSG<^h!#Q!$my5h-#e&ru-V_RrfKww{#}q{nizJGM;G9=W%Yir^p*?S=Q97%qX|@Y7B6W!jK>NS2)bmpt%NDTAxZ5|zt_(;A zZ+S6x!2cXiSD}R{or7(x*A>mXm~R?!)4qY;%Chh6un*FJ-?Y{XmVTrd=6B{B&)b`C zC~f5Zp<6rBmEG+|wkcjK>vVsPa}?&=x|9)TCk9E!9O!s=1mMhZ#7*HNr+!2|YENUi z4a26{r-Aqx)7Wrjhio|iRBl0KpWd<=e#M80TOsQ9^Twg@j$e5i9yR&1 ze;KEb$8;lW}y0h zj(5K==6-*~EdMW#HanAz&(FIW2u$%;73opz&sM}MO$zYAUevLoi+8#6O13uQOg z(ccqur>ymsM$l&5?f%fl%^SNnc5FKPymQZAVIJ0|3u2>a0L8j3o3Dq$y)6M!$G7I{t?SpzpL^hFu z2AexJUu|EpVAE>jbzR%Hu3yt-JJ0SdSDT#7WooHDvyB=N-oTc(FnKoSBEtfiA7;ua z+;8vP2TwV32}zE9NWJSWf4CSLAYAD%;p&Zq@JiT4?$nR&;)m3O?#_ojj&7H|Yp=I1 zjQ=9^Z^HdP?#RpkBhLRJ=l>b!f5_1vcK(kz^NaEq83SlrY}|SKiq;9O>vhG)0Q8^q zS-}zdr<~^LL!V+?UhKE~V7xDk{YgXj*z*QDk1)8J1{PSKS<)McC2Bee}Tes{_SAWBn3wPf;IQxx>yW@b~wa|G(q6 zuL@`{Rh4nNSYMS^+iGy&WT!Eoj-AY2zR|WvDK7_OeU*4%l=5_WY^4{L65T?hvww0E z#OL)t#m@T?r4KLGSA~+H3HmCNogQe%8~cl98sL?W*PA_#+DG-1J@zkpS&E$O-g2#p z{wDrM=JVZKHfc~l-a7q>Z`=8*8-?G3N%g1xT51`PH9GrOi+@@iop?z8MJIine^z1_ zRlcpn`KK0LoPR`@gnzDqE&=}pI>(=Ye^Oo0^#bGZ4cy5t%uOBww;_Go^ z;9kzbHtL=#Z@)JU7JC|rhdA|ZuX7H`u5xc7tMPPmu?@I5l`gSBRk~O*#jHOazBe#y zYS!FKTKV=&)sAzxdwV&De1LDv6iNSqhC#y7_hxkdm%QnnsTS7i8^RCqt%G~}n=}Sb z^9Bv;U`@Qg8$6oMn{Q2%hm$$m8D&JPnIp$^`-#)_Mskrui{((l;@CQppt!KRuEnCWTO4OV#1|M!N1{ajt zu_wH5FdrEFUEch?_khlAznMH_2d|<|h-VP@kn#vAE8Obzems~uwCil;_q1m!pJ>-Q z-J+56&h4Dfw(fDa^7gi%JXBB`50|Oi3Uy3ba(FH-!v|T)S1=; z^9z)o%AUO56VzLe)(!tp%vp1vnYO2P!9EBy zJ&N~w+9mDfBDI&fn71Ck^P$usBQ5M-#_3N3OP)GaFWFfD8UQa7r9a)7ot#a*ggL6b zyo~iJHRjn-qp2!tAe9`On>w+MXG-335&I6 zY0fFrkL#Rscn?Rzz%1pMJ}V{KQRB@d>ocwAx4Hw9N&2nS7~@UTZ_#IE8|ZtG_c`Rd z`mJ`?Z?z+@3-v?$wFVQ^`TYju(9yvU1!vJONIw1+di7nIx=$V8dt%6-r}OH&rj&2Y z(RU%Me$&YDD|MHnnZ9aPvDkn+aTWP)i+zhMUAi2(cRBr2K>w6A-;=U>^*7e6K1h2? zq)%@+Ol1vd>URnMG3{&oS}>(qaS;b$&nTU7{%4>MhxQ*(+Nb%n&whVi-?VKQxH3q8 zpT#`++lRlM3geD*{-|+y_=kh^mB>T(uSWdgNBv1PoRR({KTTnMgEJ$8+tr_#^P|(r zS0K4O`|5U+Cj8bDhWYl0(ud4f-dV5Ge$|sLBmIc=mqz|K7ejLw7dra*`~uz2A$>n7 zujG9jeXou*mnrWG*`vz4+E=WwWL5JeG4uOlW=7g6mC<4s9wRoZOni19 zq}siVJi=`s<=!p}Kh0s5lccY)J<~B0qP*>20_w%AV?5~kqvvgZ6E0#|eI8k6jmzvm z^eWAy9s5T17gQ%%&7YR}mH#C7D_2bH-MqPVDjHIN@^9K^-CezGc`xJeBJ22nPzowb zG@ltQmj;T+&b|Hi9Kqfvv#g0^e*xA+R+-YWe`;q^F&UNa!7j;~$W8JbQJ()|GRmA8 zi;z|Mlr|QXQHCyoj0*bjC%<0#cw;gu_%;Ly#;>XSp*sMKBcsw+LPNW*Dj#pv!fB%R z(yN?Tj^Q@hGRohr%euI{%z{s?G7eUT7`ErpekU!^9lI(5XPGf*0pH3uc`$1t)t9!C z@O10a^CmL3JmyTl?o8{B4eKKF7+-Ssq=z*Hb5>@to3AdY^nI2))dkin+TruA6yJW! z4t=^eQ~AsR!{4kM6d04>&#Z&$91nC_zc6>8PaCx7ftIl5P~Te22J?&Add11O&faw9S@SMNB_Fa27(-o_o^?r;O+uzA&S*c}D)ZZ=~!(plWYn3L}w zbu}rCtQi!ZW3jFBr-h8>?4^%)X?@_N%4d3Qy7wMnjG6~>8hb|5e2UUcd`AXL=A6$+ ze0)=>w2pBYdAYe5WbRmL?nhVM2}gUF-veu$_Z0PdJfF4cH2JfC8K;lQyUcyq7k~!9 z^Q-i+`FeO4c2VW|JSOjI(&h0iKf)+Omq6ZyUxC>9u^!F;G4u8CN7yHjcj?EWI{=I$ z?=s!cxKBr+vuQV)*q<*4PeVC}?T#kuHp%iX>~v$K>K;+nM!LwwZRMXEGkJk0G3U;K ztXa3AW9zo{-B{ePu6xUMYn{J>lY8x$CHEe2_^7oHTdX`udpy&lSXtbJD1g;%scqhfrX?!-39xTf8Dum1Zs9OLt#7M*xC!smuA0iOpu@t1(l zgM@Rh)E>f1z~^SKNA27zpI>kGIBGAw%Gvvix=k{l2Y#=|v3GSYRdZaky}H?h?$~h+ z{>IwtxghUv4JYB-)(e)oOASfZ%+gQA=PD{xGq&M7mD=-R4U03!djBOmmo=CySgbs&FtBb2JO| zc4@4X9kriQ{$024W!DZba%091v&X?VKJDHY`zKB1Pk!vz4}Uu7H)T^SHZnHqkEV-q zof0*VtlI_Cl-6%BmKyx1c}r)m*@L-?-T*n^_iV5;`$E{AHu&qtZAy7nPe%5HOBrPA zDtmfHrM+@*kM>jkb&#`eW$Lj)eKKd|+oQv`xxJnijT^P5m!>W&?Cpf)zj1i@FSPbJ zSTcJ>6(2tS9V;Q3|AgnZ9c>Ns5sTt0H-Es$z3|HsU; z>m{EH&fUvX(ZXlxr^t^m%Frd~kJ7&hvGZd*`gmjW?DQvaO)&1P z>x8ZZj5F@6UkS}Bz$+iGH+vklmp;R~6Js=^qHdGj9|c((hsF}9v@ZB4zD35!pL4H{ zot^ponEOSe%(1n-(OXBhA4{^HN0Y3`@JRho(l9&IkUGkz`oNl`%9Fi-&4|Fn%h@;(d{c8iR~+?54oFiukIaD z_A|AAG+5d?6Sps_U#OheM~ce(47@58o6FQM!%i|%{e_c#Mjz`tQk!s(DlZpfeMe0? z$$$9~Mj5&UeMjn(5IaA{qmMV%cci|GYl6Nba~H`_c=kKsk%dGHhL4- z#~ZOS+NizslyeICSariLrSPS^yUJWD>i4zkTilt1YG2~_nfw{lR-2Tn`#WOhOJnBC zVrFhTnEd&DrqTC(VttX_R&p0(%qElh^s8A?*{%szl8(tyAG6bB+KKj(w9aDsttVVR zMfsb(CEB^}(&(;>?#`HZ@{7mbRzS&6@L1b=!|W6?3>uE4>z}& zyOdqb1p@6aH5c1CyVkDvExB{T-alu)Ds$`_ap~4}HQcG?)djgv8R9;<&Jy_Z1P^dO zU401qQ0A=&$y={KPRGgOr>K0YA?wWjk{q<-$hx2iO;mY4jmf&2bhM|atTS{8WL@wW z{^ZvyA8$<71wVlxfvii>{!QGHb+2-sDy_1s-UCGM<3&44MeU>d$&y{Z-t3#$w0$3Y z)@oWtnUO7sf*Uq=c5evQe57mX_H}0c)mj+Jm3F+U{>`k@T!k(Ct~+#*vrRW%z4f{i zcU6An?2hj4tsB>F?_R&n6kfu=vDQ#sb(s)+oyNu;Y1O6Z#^XimaFp`xF3yX!=)_O* zBP=DlB)oVHbl#8r`FP{J_*&dmskZY-yh=k<`Si#xs-J9L^y7pkAGs>cz4IW>5fA!r z98%ZE-c{+|vQ|e2$GzLxn)e@HOR^3cURkGfNb-xP?RSWe46>K0{ayM{^^vpL8)aUW zWgRNVT*{sotn}sDcweBcaz_{M4z#=d(Khi+1I^4=_KX=YFNq`@|`7MC6@`Tfy? zxyxDkhk&yo+Ml&%lM?+MzxQBvSMzAc%`(RM`bF$C?--A-8KaF-z75Cux)z;yQ+_;; ziY^IX{~+QAZIyRod>!gONRmGGFmz7>>SL8>c)-XtnbUw%>4(u&$JXe5em#N5QG4kX zUXOE(x=j|JYg{0;+pRsldY^086pe?h`43txa`Oi}-q$AR+TgnN*V#SMOt(^R>mfb3`wE8H8=`i;inbM|O~JR~5M@r*C2%)P7lDzIk50-O5#FHi-^ByjHdbd@2^1)zwj$;cLDWW(VsNH7F%wOrr(thHd%7+{0iv)({G)9nGDQogh>Uuhp)ZPM~q$}(zR zShw52K+7sMxZK2M~j%kWG! zoc7bWSGu?vzjN5To^!ArXba~YETm>D9O|67GOBm)S87o^llX`vLV)zE4q~{5EG! zgHajT`7n%y{!r?><=3f(A{x=kPJZP_=5rkO;Wc57D&K#pACx|C9W$a^X!Yh_Zi07q z+3=lHM&Ua@#>$5m>$@{+aQzkMNyyU)tABB-z7wY$2AaG9N@gJ35HTx$uUr{gBZg>L3fy#G5#oBU7sg%l0XHWI{hM0s zA%t_Ww{K|Kb8{j$nFdj|CO!Uq)kT>1W8dq>29#-P5#}eH`6|puFb_HNM)Xn{DkSah z+OJu&z5D9r{ye3_W1qR~*tTxt#wz8SZ6DdVZN#*G`?`;GjTlF{MGtGPB>u%fo5M&J zW4_PgP-TpJ*y8YVx97duncE%igod^f?sn#0i&M^jD(lR<9KPS-lEcqioYuIH_|gwK z+;1`ejCK6GS>0PZHg8L?cG=qMKPZ!Aj1ya1VT_}99Djx7xkM-CupZWN<|O zZrvio**xvmdiJtO5yxYmJKbQ5#r&(SNX6uFrhpyo?ihI-pChU5MwOQV@i|g0x;&oc zXQ>NBbZWO=DSdK>&kYv6)Pul6qqBda5v=MmqNVEcZFJs`EJY&~lgH-!7gt&*^Y7_| zBl0*++KiLrvHAq154*TL&dBa8z$+h~H+vklmtNsr<{V`fi0`Gmd#5#4^J0un-papM zarrC%RRul25rrY@SB|eDuLJ+4BVyGmWf*k|p!Bvlc{^X0QpVlw(IN~bO%Sm(^>utS z*jbFR&)UM&W***`IJ^oyvPxxCr+R5~xZUon29(Xr5t;STuJuXQX_n^wG%ktEN?&CP zb{VlNEly@tzLO8im*zXX>|%U+@~8WLoPI6{*zYy%wFG{NYMcwc%YyDAdcDUXdGdPU zaMOr6ELy$ZK&;aA3>3M0-8btpFAtG{8Y43=%b!$1E)L?$%S1=JC_)=DPUr1^$<$fq z+lzywfG|?n|CllAKU+W9qY*!8+@8bjpPXAM;-b2}7q(;Mc`;P$k0I}mZJ z$L()%`;K$FE8;cfdcH+ql1F#VP}>qki# zm2o)MZ`HTMFYwHG{Z>jm7FAw0#`>+AbgFy#as8H|YmWq|^vONeZ>0`kw=hB{8bPez zN_`hQ#o?7`q+t7`CeokdlRT!eQSmF{$P#0wk29EhH<-FGc)7zD zI$UsgrNhV`Lr0%zaGS%c9lp}xs~m23xYJ?8j`4>$GPuj(ZijDl_$G&UyLW=`Cl8B( zhn)EdhYwqjVF4dF3yi&$@4lu;1_dK4_=o zUIZ5^eXa9|KYbg8HDLPIS$a$B_o01K;{#~4?yI?0)~t{95qr- zvll;)$#S@vF1MdQaxF4()b4h*Egq-ntv zpaGcXU?x~F%K>YC3k0V+po|t!Mhg}?I2|mYtQIT*&UUa2d;xGF@J@hsX5ccg;0g!i zV?hVd30wnw1R!4vHUnFL9l%cDR^a2noes$B0>K|S_$nA!INQP^!d>)3;72S!zaMA= zwgElBCxJTv!aBVOd=~f|Ks!49i@=wFKL!2_cm()!pdUC0{3UP*_@)DR;`HwTWuOAQ zVBw59p7N;&sAmH+z?AD5Edb?t2JOwjo56yDgG<1IcAx`T2doDun=>ezGd2NCS~AteTAS5pLe;C;aV z0~`RTrzt;SY7hb`fOccxVlZuID)Py|<>1x8T7a^ddb0!SX{vy9PbJM$ks}7m;6Zvs z!qwhzBjFk#+{R0Q_X339NIn{gqmg_x{tiI6jXMCsG(fnGltUxs(0B+Sd;^5vNchtT z-vHrH6I|qgc&1$n5VnC|0}BY-KtEVOc!H*P0R`Ya0O@L?jGFM<^dSI$O{B*F_0%Nz zO9xMY<)8F4k)G+qJDqr^fj9&%5;NT%J@?^$W z0OFoO-e(ZcOyuUwQ-Jdv!0R&wD;!XUGygB32iOJN3Va;s1wIYHyE6%ICg~Ss&jM%@ z*`*H72NPbF@C;lD{&o8Bc3_wt!!;I8p3O6^Edc&bCJ!fH0U#?+-U`6)CzJk@{{;9m zfcAYdaT)k4@OOcKurPNT%Lmf|WPsq59Iya*E3gSd1H*#kJX9MIfw+{FS0H5Zb1YTgwf_wfP zfO5-!h9OD41N`4FI2|}62!8fv3j`m$Lb$KwfQ0~Y35Nd-_!%qpA&>^@fO?<_m;XBs^;deFy+khRwEx;#$2Y~;<5a1GEC9~GhK@R+}U^6jOWv|X)*j=S!$#0FdaS6otW2O0p{nN+G49sFa`moj9AZmQz- zD&sWE!3taSsA)IxM;oasxd|@rs>Ug|X?^@TKQbE{;aPx7n~c-G&EMtHIpy;q?9wKe z=}!|x4oxFK|7g|%vf!yeB)l0%F}DL=`S85io7m_pOdOzv<`rG`?)5m$OIA zbJ0&L_w?&rjV5R5N^c=xZX1^O^y?jrOnE1B-4Ak3s~9w$%DVhuab$jvU5Yv6&)x_! z@3lEAGHNZ;w_kOD;#a5AE73GK5D$n>X8I??6P^!fE2EU>mzbAbW}VsR6=Pa5w+Zmd$Lq}=NA06} z36Qus621{IzD`V7I7&uU6=um8Ph-z(A|r0F94ETV0RPsrY_ID|!iWC4MlwEJZW2Y$ zsko5*QzCrWB7Upf-Y=eO(t4734nCY(IZ(({zR<5Vw=I+3G%X1@Y-0#=<&mElLF;ke4zcJ>_ zqvln$cx)bFs4l3N6FfFjo@tfWoDp-Cw9p`=9B40<~T70MK zOTu?oM#7TTx3PHNR*Nq0{0K{lE=k|^e?aH`$e)ilK2H2&+>-QdyP)dB0G`h<*bT2gAdlj$YXQuqHx4*>Pq1~su_5I8P^#&UL@6BZ+ zew&;Ulm6ibo=g!`fRmx=b9Gm56U4gm&>Km#CryJ`$n|bp_ z^{^OV4r$DroSFPi^XIF!ZtPyKrPp!a=vX$PHJ{*-QLrk)Bx!4UHSnuvw8=T#} z{zmS}O)ig4qrB86>H#U$Q&jo(qJBtv-yUnxX)i%-csx3dgB70YPfFp9#e1hykv=TZ zeHie5WcKNcrcL%A2ei-Nm7#Ne$F_AHo7HuU+a6l;{zE%S&fAUIchu?!GD-S@8hwx6 znylIPyf$s{qt}@h=v(5pYMaz;&ex({jy1pP_LT{iOp}VQ2R?iid>?|71Y zs_zig>O1bkZ7jaQdX)0~Buig@7di@=1%-&&X$_M`{fcR$d@F;mGvf!d5uZK)%#uOA zFY$ea_D_w$$mW=90>|0OEISYGPWuHBJYTp(pXdf?C*_T_c z`5yYE15fooGB{6XW%Igw(^T1S&Y#L{cDXqlQdp-9HV3J?{n-}zsqD(~KCkh68fQbz zeMS814gICy4D>k@#va}^hkoGk{3FaCpD(B1)Hrx~lkVpHaG+?u7iq@515f225k32Z zgS-i>_vM3fN7j6Qk+|ma&b*0_Fa||ST6&sy<_oh3x4A@PVh_WogK*PYizTeTBCNdb z-;=H>SOYXTMg^8{gG8t_G}3oFaF=YnB;oGxr6` zmA|v^fRKihBzKWPoXbPKCi8?h#2D>ClRx|C+jm?BX{@jQb{rWLlx#57f6q@b8B~)_ zZC`#o50ua^1iX@)ATEQ%r{0ffeY|lQq`7z!8Km{K5-^SoNNd$TD0tAxpt(LFS*uwTGpl}#a_&oG<`tvNUMAhxb0Bt!u6PzUSVVd*{!K z3EFMhuJ^+*bIzPObLPyPIWzO--qf7Y-oK{%%)(ho{i&Nhe{Ms=-1_-*lgU~)OZ`8Y zte-b`ZoP|NRY(+_OLXgcqQ8z4?R0z3})w zMDI2{NksqK!V3q8IQ(F*7hZmlh(q=+FB}{qdbi=H14L^0&rL+{HvGDeh{N00y1{Yw zlN+K5ayaDQ<%Oala*j4s+)9obCcQ+?yA3CT7l)b$y)f-9ayZO{ymc9J8V->&kH|Uw zAUPj3jGbrer+Cw?gOv;_fhEYU#8GM&ZN-e>nXH%D}}y&fI{DyMxkdr zD0JX53Vr`+3jLsvLfIsR4)#&#C&Lu_57hhfY6`vHMWJ7z-rqb*VW*hFk(CtAyOqKv z4^X%~MB&6j3Qt}^;S(|xt{I^4v_lmB$mtZG`7DL&kvDG#h0jP*_>Ui^@S<7@pK}d` z&pVOAEnlMW1+P;0!h0xuQ459J-=c8OYZP7w{6>`fbR&f?KTP2v)U~yV!k>GH!e3ZT z;hQQbe9MCrzI_{o?|>|KBkw-c_dp?qzxfLaKZY`U_EGp-H&gik^ip^~>N{`&gKZZ=Npe=`i|9?NG@UJeS@Ne#+h*L|E$S_6n=TW3|3q>j_C{lGDMLuwV zA|KpJk&|Xn^`L0Ha^j=1h4d0_kY9U2FeK|!ge}N)H4HUU5O_9%{+~-kd`@IzT(yJ7?rIjML zA^+~zDRM7(d}9Yi9y&;oN0w0JN!0b!!xTZAA_uoo?I7K^drD%5pMK9h((SGn8L|vb*py-t-x8-$;UbBs&*F`A0{X&Y~ z^b3mq)t^)Jwqc6yY^La4FH!WK7K+|?2Sp#4OVMxMOVNLPi=zLum7-53DEbu2KJz__ z?(d@Lzr0M*7pGJ7-!@S+vyY+&^C|kunH2r$^%On)EJc5XI^GGc%*$Ym6(+fA{CHz+o*kzyYmqS%5jQLO1@ ziZ!1|v5z-UZ0Rt?&PTZw`zh9TGR0OuPO+}J6zknavA#(ZOQHOw(<%0uD=4M0vAflvn=%<;{7U^5%b> z^8R>$@)izL-r{`9TT)MXpV&fq%busa3#L-u%4W)IyP5JFt#F8Pq#;kn*-pr@X)HqrA^wM|sFrdIc$f+%5fyx( znF>zaMg`OEqk<2=Nd+HSNCkB(si0v$70hd*f{)%q1q*&j1!vtz1=~ibV0%3k+_Z%X zzVtj5+=lY$7Am+iO$C4ZJu3M6R4UlLo(dkinF{{l5EVQ&j|!e#O$ASZ_x}O!?=Gf- zf9a-z@5ia&#RF9E@-!;Q4p70ty;ShZD^&2>=~VFZYpCE?4^qLe!TaqNDvVr0g?Ud= zVNnGYmN!yiVjC46_W~7uU>X(HET+O~uTkOj2dMBPZ&Kl`g;ZF74HeG2hYCM>m6 zfeO#MfC`&$p~62Ip~9taQQ`SbRJh_=D!k}!Dr|p+3Oi>~VRt_jt_R=#=~OtFp~6oi zzPyhLuY8aSuYQ&aKU+datall zdKneXPE*m`!&LOKYAR}6O+|}PcJZ53blwyyYC*ZyYpLjy`>E(pCsENwE2*gC3MyLr z6ct@uNJSfGP|?5u6UC|inex9(RC>Ed6c;Ub?#U}MYr@*(e0&Fv=imN zT0uqkTtr1*yO)aY2hBH8&%==Gaq!*q1QmS?eD^`_XZxt=xkst!``@FYAAs-6;G4ah zir|-v{$nK-*YBm`xe+R!-$cb{Y^CCbcTn+JBUF6OR4V>NGZin}M#bmvr{Yf~sJLw= z6|e56;?9St_+sET#HqNyg^CBaQ}JKiN5xmXM#Wn|b8RaXf9_@~zWyaDzA;I~H=j<$ zU%7&cZ-0V{F^3o5Glh!3hPv;&m5LvHgo^+EO)CCJ(Ck@7#e46f;%^_K;_u9$;^!7q z@qz28`1{XN@xK9=oleCEyQ%mm_fYXqpQ7TQ$Ef&q(7f3}#qhZ$^eUA^YN@2~Tq-HK zo=W1+Q^`3GQ^|QNsHEi$Drwz8C4U;Cl8f%3lGSHYN%t-)>FuDBzA03a+D|2yT|gyQ zlv2s&C#dAwW-8ehp^`5QQ^`%6sN@!uyX|o**?9?-U`tc-wMVJs?|}aX>idUBsN^x= z_spb{Z$C^W-+7Qq{&^*pd=LEo@4Zy=Z_B9UU<;K%?h>qpN?vQFlGnFT$**3dl3&lH zQm2DTqm!sKf0#po7U4R=uK=`T>} znJcMuAyH}b%T&5#3zfFSsPuv)m3|8JE5U13F_m`JQ)v(KdY`4zRGdmL0sgXEsdV#X zD&6`^D!ukzD*ZwOmEL$Qm45LhD*bXTmBROw-th#L-d#bZFP%=MKfI4hM-hH<5tY8S zf=YjZI^TGkO5f_D(j(uavhZ9gE7(D0#jjFXyphVPFQKyI-=wk=uAs7-Q>bkEBr5yJ zqf}OZAC=85q_X*4RCdOTRE9NN+2U2Jn%b%yRPd-Fte|kEVtd zDckTGm8B400-m2~rm`W>Z(TuUk6cS-k0HHhI+g9+L}gFkO=aKxC6!^^lzsnlDtqx6 zDtmbfl^r~n%6@V?mA&!{D*Jho%3klIvR@5T*{|aicji(&at+1vo~L*zQM|l`;)%N` zKKWUSW33af>8JRI0iW_J#b-89ylxZ4PrHTUr;kwl%#$hJ)J*ZSw^RJwmnh!yCdFG9 zQ~ZW(UQGG8Dh&mlVHlA;sYf z<4=O-DZo!ZK=Efmci>ive;@V!;0%gqS5y4p;}k!1BE|pXGK&9vnBxDLp!l!Pr1;y{ zQ@Qgdl}A@odC^`fFRP{UiUBI0^d&0)z$;Y#!DUoF^$seZ{wkHvSV`seTc~`_2$jzV z{TWYC`JyRQzW7!uKbNSyWipj7zk;EypYOQ-Av^j$iJnT%5O*h&O=oG)$LTi ztDnkuBmcn|l|S+Zl|SA@<$HEe`Q8kbf2WknpS_66pSzdJzrUZ#f3SyKvx`h(h2PeJ`-2K2kI7ErRM?H_Bo;{~fV()rNJiVO~-#tJH^ikr# zN=m$V2_^pR5lUpNxdj+_krYUjwASHekqr{u%QsOt)Q&o63RmEPXs=|3xRdP91 zRep)8s$Zn4$tO}(61bCqJ9(I@PKi)e?a5R%`_HLr?tN5s#(t`5OiaM9&b?*RGeSI%g-H);luA-_( zAj4y?P}QE(sp{L?sOme#RQ2pGs(OABRlRT-RlRfyRsFD^s(y4cRULYZs$K=ppCSF9 zPf^u>f$v+ZsX8=7)zQOLU4R(#Y<1qb@nw=)pKq@Rt!eM=ZM&qWy{#Wv0Z^v`^(p{41F{Acn4(Hj2^#h&# zmu~34SZPBo&0MmkyM6uIPFDv3N&jgYl~NeI#>xtGQ>XCNs@C}GIT~LrE8ttN@I}vz zA+MgJ@zt^dzOxm+=;Sf@>Ny%;Ei2&Lpzy_b8H2B$qw&?U0={z;z8HFA@YQoPzFJnm zcdo)0qj(IydXC0d%L@3Ortrnk9D}c(qw&?U0>1MUzObz^`06HLkKBBX9F?!0<@3ed*o{T+&X>FrH1y4^&#OEf$KOj$T1P@|LD z)_1P$z=ly`I{*hje`;_wApGCa6_o7oulRkdQd$C3Q7#F@6ed_23cB$hhI0?t4ReIa=;~OSir!p9q_7L+v&x<0`3*? znst3%#(IJ1+^EX9rlTJey`6qL*K`2x+^EA!zLCvf?|@J3f&nuI*BT%b53b+P55+58 z2Esvj$hNMYO&wkC!oyn@bkz4;=AqFaM$Vv{HPAn}ehqR|ZuQ)67zHY_OC1$m!Kg?n zqoT_n6<U6)A00FyIcDRF9I;8(j+u8&~*Q)d~k4|taG>VQeP zi9v7|sNT-@eyqCIbi1Q{bqZ@{cXT7=QD6+obu>~QdyF=L{4`4~LosKTdi4 znp!`xtZm6T%Uj#p(7;6+)YX;psz*Y~cUjv&JI{k_285>iHuSC8Ft~m|;3eo4l#o}t zuf4x#;L{?nOEI#!oqb4o_6(_0Yj~bTqQgxg9-oy`~d{)0R-Hc%omZ#R6t{`2oE|%c!o6Y zitsL_%2E-Y^MV>+DH}KP&}7X6=vIN03UsJIce_$1r2-u)0O1un2(LmKcL=ZMY5XC) znitdn+X*xeAkaLUmp@Y2#8e>AJd^oqVlov_G>9#N_3)5j?y4y`YDGSqKVbDsm7@BIKYyr?{i^>)OeP>bmLSPy&RN!NL z5qyju(?Etn=pwALI9>kMULL zV|-=#7{AwiOwdCC%I1x>h#5qol9Nh+ve?)AgGmzA`#s}hf{s>DKJ%2eE=e&MSdI$@ z=IMfg<#@!tZFs~w7?@}(1*aT%G8a@ULatg7K(!)(fk$)81}5r)YDJpAPo*@E?}EX| zalv5dc*Mc@;IhHs@radNI5V|H?Av@FoJs*yTLe&T5fdxAVqzUsTZBnft%&DXr6Pc8 zMF7=`m{{S=#5x#MguI{{F6URmrBooOfXRG*Or`<>YYYy|lL2=R4l3~ApbifXsuA=) zb3t#wL4BwViw=M33@E6J^MaZf3hH4fXpc+j*Wpt75az{>4#nwsa8Qc}2laSxP?MlH z_yy_{^h!RAK&y{owLXT``WRO0bLkC!YJD!fl8?c!Ou&O|49XPj!GS4xa9~S<-ZvLP zZ@|H1Jje#4wU1%7eGIGZV_0pUORvc9(i?CvLI!!Grq#!=S|7t|eGIGhx%3Kum)?Mt z`ZzlnlDt1uYjX?x1J=z|>T-z#)-JIQDiyh=rdH)4)TUu5>$-FiN`<0GP=|+5hl^Ll zr{LpTrBW9Rs&v6XnJySq=Mn3yf~q`XKewyDea*nejlp6-AcCPN5W!fKMWol0B@Ed2 zogyF25pG!`eAg`zzT=h%-y=(ezezYHprnwGd%yqZxb5M7? z-l*<&y-nTidXtdvdtA>5+5?v>5QgHq+YQA5VOC-&j*Dn&;UXqNR~#CqDFzKQU|n%& zn3=CB4*43KG8C6G6bFB%%}7|y8E~+NboB%RU6ZMHLvcXpodbkfiJ>?yqUni?mc9fsmM48?UAiUYl_CloLdhT=L*#Q~u!4hX$_xQM1F zE@C2d#i3!EA|R*%>xx6e%zRC8$k$*rO1D)Y^zi_M-Yg*WW^oa%6hXmP2PqQ-C`zQ>g$pPko32ZDsbZl_U0TZ(W@Xi8I1kVmx-^$8EV4ETfiQGwu3DHvS1zwx zG)?ik#XuOk`U6Ew1axVTK$RxO z=tZn(tg4|%V`2c2g)&rWE_Bc)LzU)Ihbc_W8LBi_JCMw1k-6Rhh0z`q(G`UvCc;o9 zRx5@oc|oJAl2wXDbCB3X7^4ytx+ktkP&E7crTdwHnRrFq+w6G!ysqv}WPXrUC0Uf?ksV^agA+ zv%_pA5N4G|Gr5S#)U4HLW~xiK%~Y3eDY#>&H4FEs3|Oxb^qK^qH(;ZgsV>7dfiSBy zn#n~>re>{1GdqlCb{NgXWl^nJ9Y!-juhj^81J;|_(PcCf2wky2m{l6h+bo~1MvVCEC&Nzu-p!CeuV+bZ)kwZQEAZJfGlXSg7X`#;QS$_;BrV3v|gdJ zWKqwxB^~b(rQ-{5wgQx$VnAjoK-nz@RJHlZD>a5b>TW%OBb%IHL=P;p6oK^ zEH6M=icn7U0xC-l%DG-ZWhp^D-3!QU74U(bsTTE^Pc3UIT0QJj=qy>3BR@%|ocaYQ zOAzJkFQBp%f)hhiGUX63C}3EP?jLd zDPcfmDMUFd45)GlVJk#EGz^N`BLsAoiKwTCYFWGSwnCI+L|IfhNeobyLX`8wfXY&c za;g|mSqj0qpf#VX$BRKxTOpvc6r!Fps%1@ua9IuLdBG`8i!+TSdQmA8$ut0+c_g1}F?Y zu|QIA{$gFh`IEbX%OME5!seGll)%eKe#%NUKv|NQKT-2kV*IY@qAW3#m1@A=QV3R- zmO|8(YEU%rG78R8h`Lf$=q!bR&XPr0smh|tN;N=PJ)^8t11d`)%1Sk$${~cU5Ot** z6txwiu2dDe9FoA`j8Vg7O`Nh)mF$$2YJjp7qO4Q{DoYGyr5aG>5W-f7x>5~_+6qxu zstR2WNoFC_D1?tkN zb4wS@Gdgu{`GT>eP%9IThRr3OGVN%zxr9@0$!N5>M9Z;RcBikLs#7N-jdM=b@suLx zcAYv`&w@I)d^uI8Oic=FWp>iAxkjBbM`^UVWK(7;jW*Y)!@QBpAk-;Kcpi} z=N2!g>eLxbVWLc88aCIcQ*Q8Rw7L2fGohR>HQHRgs@&|+XmhGgo!oTlT>Yv}aXNKw z@p7t8o$JIGuiCuNNC+>17u4Nv76n-GIjsK9_747xkpM5nC!jhNn6vS1MlGA+&h_o9 zdpp}YH+8NV9Kg3}2in(MEUN0R@A5t*xW1jgXXn10Sl`{&)7i-%&0^4{2*57nw)f(r zsO#GYdM;6kbgU3@{iQwYJKEOt^|kf!_hO}JD!MK=8fTy9dt_&K4lG){K!_u7%i4QV zoo8)Y)7dxBvw=TS$D)e7#T)w9bar@vp0lhoHMma7EIGNjwhjGl%Q^?T`!`(b*Slx~ ze`#$1^n$dhlR>3cfxlqc@-_(R(=oi9VO6SyQ2GGgm<`x5S<43g7FvI2YG6ZuXWJV7 zuOFW}ARD7GLqpsG7c6ekYgyiYNoSjdRmj_#au+c1T9LN8xora*+GcZCDT9q_feHur1Lo$Ce%dQ)v{ zI|ukvYW|>R@i_5E6@4Q2W0mk{T_z@FV7!l+>Qs!AbnbV;gFhW8FBP3KX zLP7;2Bvdd$LIoovR4|5w&6b3~7!m?wNC=D}Auxu7%tzM-^RY07gv>{$S#C)Pj3FT~ zhJ?Tv5&~mL$b7823<;T!MPo?VWJw5&At5k^guoaQ0%J(XeDvCxkA*QLWIj4gt0f^Y zhJ?Tv5&~mL2#g^i^RenOBxF7ojUi$40@G4}F(d@WkPsL{LSPIDnU7vO^RY07gv>{$ zS#C)Pj3FT~hJ?Tv5&~mL$b7823<;T!MPo?VWJw5&At5k^guoaQ0%J(XeDvCxkA*QL zWIj4gt0f^YhJ?Tv5&~mL2#g^i^RenOBxF7ojUgdMq3|hk&IHDg5Ew&3UxK6#>SxIp$g|&9z#ZYqd1jYH1F9 z3?aeC!kC%^AB)D)9IrMEH34O6j@KJDl`WJt=In(E)MQy}^8!yVS(*bMLn838Fs6v$W6@Ze<5i=f6J9pjC{uI1aI~pxIV}UWSDetKIp$g|&9z#Z zYqd1jYH1F93>|=vg)ub;J{FCoIbO{g3INK~9It0>DpPaJ%dXKD)HL9w=a^yvV@L&z zArvr%Ou!f-F&|wb=3`+D%`qRHrrDAZ7(+r}3<-fTBm~Bgkoj1384@xdi^h;}xg{Ym zhJ?Tv5&~mL2#g^i^U-T(J{HE1koo8|O_qef7!m?wNC=D}Auxu7%*U$BkdXOUG=_w& zmW03<5&~mL2#g^iFouN8N3WgvSQtY>=A+XrUu;?mFouM{7!m?wNC=D}A@i~7G9+X^ z7L6fclO-WAhJ?Tv5&~mL2#g^i^U-T(J{HE1kokBt^8N*%l%C^m%@jhp;0%nx85n~zZ`>?C24`$h49>i@(M$2p#=;n!L1S>ndfnj6OMjgYFa~E}49>t9 zoUxuYI0IvF2FBnFjKLWggEQ8924`Rl&cGO)fiXA(V{pc*$>7ZEC|w)C7@UDII0IvF z#(Kfv42;1U7=tq~24`Rl&hWYhXZFLo%)l6&fiXA(V{pb?W3pzH!JAPAb4D558D+A! z?FBQ1#oo3UrZU+BWwN)82Gfqk-ZmSiGT8%Vvd4%w^o}{qVh@z59H310K$+|@>`nGS znYstcWDk_d9w?JN#=glOD3d)MQs7<&?1tVOff)OrK!3Y_rSd@LGULQ9#vK{1rcI}{sbb~*1+Y${t$OPMHWOKK^z z$x>#MrOYNvnN5~5n=EC5kD(~=u`s5H;A7EP%H+M2p%b7?W%6#yrZSbuyzClnK`mvX zpebsrrOZ}KnXQ>Pc||! z$oG{xWsVm39#f~xA;0f8b;=wz?0Zk0GFKO{-?P;UY>puWY|aMcnuwThE(PZ50_K~O zHb)ouzEy3S?_PCejwbj{R;SEi1-`4*DRYb<@U*4(eXd?SR~H1H*PzWQf37YFT(H3* zM;CxLXB%>L0rPd6Hpn-K*W&NppW1~#4WHuOmiJb|sp6LNsqR||j4zy3t6vMQn>~MS zL&Mzq`M4NdS6ho*|9{|<$+>m-&wW-EUU}A%#ZJf}|8ZzK(h7oZjdEs#OEI1DDf(b& z@y7gf=$s1*=$xkO9}S(|w|IB~va8&87~HZ&u~30?yhAfnpI*m*vwLQ0px=wTWoiI7 zr)g#fU$dUM8h4^+E?9Qn%=UqS{+`u%=_2J;H{t(207{lQCQ7ih36bU~BGNU8nJz5g zW)aJX^Z5BNLO#NHbTj$_8ZO8DsyQJZ$*&x+&Lf;>uDazCS`WZ~OiT_1Tzt)=;l;l?CfA~qFty8v*G&A>An@8ruB&(rr#_s=kGU2di_Y}) zOgE9W=xWeSWG$Kj-9*-+EucFdK|Zn_5|*)wSJUrxEn58!^Jothw(*}RPWAAMh3@DZ zZ!KC^J5OwvCbC;{^if(sv5}=o$C-8H#M6o9W?RU)g=lKFoI-^}CykbeN}Y81=5V?; zzcO9xj4lm1bxVor(iKi!x;}jRkt1)8E_Fg4F21=gU3-;_ODBnWB^$}9*^&$+y%Xu3 zNZ*-lacYu{PEF00nv;+Q-T}Vm&QbJB`R@9Y%F`7!laCzvSvF0fEaVEO$*D{eae8!V zzEhK)RC7`~8J~?hMwb=?PSi}@lFT1nO7R+$MLL3XWDDxuz9qRcn-0~wWx>BPL-fj# zBX1+03L*QypV}Dyk0VDOKlE5*EEA?1GYjHjrd>cp#|68^l2|C;8E?PX-`P9!x438g zAVlC%r|cM=TsubIS@Ld6Jdt7~Y7uxx#^u?Xd8hax0Sjw(#@bnaM9_~%SKAlN49uGO zsj~>z&5yCObXEb^h#((H$8ks^!J1{>jleOth1(HFFm{&Vhk;v;ARoz3!ZKFzoMwLV zQS)+Hx10f8dH`x!rss)&ieUD-Yu!XAOXdRR9slbHNdccF^SMzp4TlWE?%Prq_w==4 z4ybLzF$3>dMFvvhBMd#r)uDA8I(!7@*1FtT&glrZiufK89~ALnSiuSCI~HL&SE)=p z$#LhMy4m%fdz{d`bAXlPpVDC7acz)jQ6@R;ENqVx&qJ7VKAhcMOAA-kQg*pJ7oD8- z=A!ArT$IFIl$3K(*qe){hLpJoIG&4=TfDgla|d`O7u7m7Lzq*R(@vy!B7H}8xl@x| zR990oi59lH_6o2y<0%_k7#Bl$^K#wwoEtUu<>kDB*x=PK?8 zW;I>RMbkVO$7Fm;2KUZ+h~-?hK<4vA;m%dwTwzaD9$uS@G$8jp^&q%%eZwN&@5Qda z1Kxpr?mX4R__jeXQ6{SK=Bau9s((WBRI52p@w|k!(TwsIaBJ)H7bu@BC;*s@otjrUkM*$BZKAD0b zAIVR`GFI_w`rXb8QvdtJJWwhtVj=+Pcv!^POpF1h95@YcrUu^gf`t&$6Zs* z=O2UIXF|5xXWFV*Q`GZ%BD;Io_0w#>rtM;nbMmolyXty_ZCG6oEP!&4K|4MOvE(Di zk!i;RAmE`ijvYIy%`s0owhcQTlg_YXmrms=`I&nY9>|Scp?D-6$EqE_0C)&tJUduAH*p~PXtc)oV-X<|!&uRTrRm)q^8{T{n}Z(pZSjh{Bgcj#v1@t7EAeA7H; zqCB#XjqyDuoiV;$x=A_s8RMH;K+~9m&KTd$8=x6N7-xKkHi0IIARpNd3Cmc;tLgXZ zry^6m^=gHv$b(%!b$uMHir2_1821MCrfh#z7IPV_ow)gP#U3^8c6pz+;5da$XsW?l{o!co>gvN?$+& za<|@Gr@U&NOm{BA3{Hs0l@Gtr_x843($n7Ne#C9u^+R3loVtmxA84=EN4Pn1HZ2}L zJ0BsAFbN@vFdd;5VID#wLNh`O!U}{{2;B&M$K?8kDxa*E;}C*)LXg{O0l;(WJFS^pk^gN`h$G2QLAgm4ucmX& zMT#8mpq69bWdwkA%7OVrgs^@l>#qAnt!d3 z`E5w!%+7~zf}Pmx;LX2fX;~O^b&|blaDL+%XR}-?v`boS9U_kE`;_UI1K` zTb6NN*-vRWx9n@j`M7GoY$tHlZdt~;WnY`D;k;`iyF>r@5w%HvR`&5aFgA# zjPu(2M;gwn_iudM2V~iw76JDGw=CnldcUFJys{7ZxGA#i&;ALxDQ;QDd1ar_a9-JO z`M4AOvd;o{f?JkxUfJg~oY&qtKJG+v3QirydHQf^=o3GCnRzb2?gweP-SCKt?zTWe#Li2(T0NU z!0~!wB?7lMj$oX7l>rs~5dM>oY=?wptl~M%{HBOZhB+h^nDc8DnDga2m(!fzWaKw1 zFz2sOU@pV$;768cKgk@-Uk%($%z%=~vKFz4T_z?^@N0(1T@1?K!m6`1pf z6`1q)D=_CDP+-nKsKA_mNP#*34F%@>w-gxpPO$2DE4d57=nJf^^>BmJBLFGczQf-L`MNd5>xmcJBfu0z5%Ld_)#jJmw})YFgiO~5ru z{yzieJ)1253SicmfI|-8C4fc!A@Fus2ATh1z#A2KA>gYO7`pW4L$Cf&C*UtD`BwsF zol1VU0N$g(_XFMwSk@0+IsdBUe;@F_EATG>|0aOL1+XW8vV6D-aJiB{3-E^&_*}sA z6}TO+YagEcVf20IJSG1x0fR=$AHDu@fR>yI+j(#$1my75OX@CQ|We7-nz^Z6n@245pb<*R4;d~tr~ z^X0R=-0~VZDqlUz=Zm92pD!N^=H_eUsC@M-pD#`oeZEM0Pd*}Ex5Y)wYdVH`?Z$DV zhaJPsr7x8ux-zDOQMf{A2Ga`Q7i=BKCPZ4pgh?_*bLd3ly9un~m5#J-?M@76} z#0N$Eh8Ks5MVu6IgNU0&yi&w{BHk+En?<}!#KR&!AmT$Je#?u)aS=}w@jMYP5%DS! zZ{oPEH`U$WG4XrzbLSt`Z`JoiQHeM;n2wW+*vPWl0;JdW}Zc#Xky41Y+#a=qUISbdn5ALGo){mt3S@&1=| z#+j2#H%TFsbiB@!b#it$LL(={Bk4HCx5E%l;0(8-=zb|Mz)EV~Y5lNZz&b zVD~p{F`)gsR=vF`Z)RaVO>b-ey^i-5G2UBn#(IptFY*3($2h^>NwuG2dAy4O9gO#O zbG+jQ$AsUD`t8l{q4?5txO~A-aUJgEmcKvV-8ogx$z%C}_vd#Q9-eoY-!a~KKnLT! z7mI9u#Qcs8_WI7X9bNVA?Yr@Qqdv;JcRQ^0Oww`Rw_5-Kj={AH`*HbTUSsXz@cMTMVZ61=<)E32ARoz3!ZKFz zYMLE`2}`?n%L0(PmM{++iOUyjml9Et2fJ$*Z{Yevy92OC#ATVL;lzr}?&z{tAjimAEyIoj!HyqT2ZAGJa2Y8mIF|m+^bLQ#l<$I)XStD#Wa`OIC>e7?&|$?{Ee_t*`$9GtKPSksRS2207+=s$$Vtb;vc7CBg({)T zO6Y46WG-i!cRzjCWTxL8-<;Wv7qEw%kfa~kah6j*6m#Z*whpx1*P~ZQt{feTm5qXj zq;q9JUFE3D!B{RwUzFqB?d%PU$+_u*ki+#3<@tQM|G3W_@MPN8r=08;LIsEnGz^?Pb~B$)Rl8c>+3Hl}(=*s;Fo}EaxnsW6|$Lra>(EL`1^av*%9-emlZAelM~@ zG7_;PV#Du^NoV*ymu>=nFVcs48bw_k$$B|f_Utk6a_@SMYM-^0YYmIi+ca1-)pi1M8V zyb-XgTal07;WYSjfOn((fXM%{0pAUHFY;H3{0B7H_2b?>`i_45*=#s-?~i8(Ufsju zZ(-vPXa`up0Ng)yjqmc}k6rs&gFW?rmX_h+@x{H)^&P1$EP4GRT|o)&Z({p7gS|l( z|4D5>gYoXe;{<)+G>Z7J7l)D}=5-tL-LKPeyj{R|iFjDV`$c@ni{0PmK_8wbVDuaF z32zhe%_4qK#QQj&Ro5{4Xx2P+^W_2MMBX=uPLHAz^?VX@XWwXg_{iwCXYw*r&P~Rr zTsXD7fr`uLP;n8_pu3()t_o#`3%6yTIAvS*h6|`1{sI2P8QpR+zl(oD=K3dZU_X%g z>ge{7SY0Ud)e*p}D0BC+?W53M<@Fg}2OJr_pg1(LcS-mZC^5S`bA9HUEz!)~t76%! zqSs`H3cs37S6!XmJo&zC`bXD~v=0B~s+Glg*Wupt=taEV$oT6G_^`e#`?gqnD0>Zj z%H}xMTNHwS-!(kYQoIK~ejjM|un%E5(;0$~cb+Etv(W*X`!DcU&yy2+0W{AspN>Y( z=QYJ-u?8rHZ^Ig(1%6--`~a^5s^TM56B>o@$=vY4J2Q7gYO}Xzu5$K#@J?SIcWuCB z8c?RnT_22~9;WB@nN1Jc>wg5=hPv!kbKqwZwM?Jglc>#X{@|S^J+CL=_wz>x?PlK( zp1j5iVT}cU_GWen-%FSSg>jogOjCPR=8j}&v;s6(d$=@Pk}=jD)*Z!}V)Qloxez`f zd&8=s@|#v|!CLJ{tV@u1QZgxAWW>19s#>Zwz+TV|XD zeTK7FFH2^xURje(cQ_-Z(CPVDS6x8ik-HjyGqTkkgAUdocVyGGYcdzC3TM960)2V# zXu29>=G&pn1(|T>Uo)ZP;#J|AbW3T?=6JEB$&t5f?7Z?B?~u1E`^5~ut6h>!FN;`9ws*SZn320=^qzytNkl4E1pYV6L^sqBGZ8OgE9W)*;X}in=(G^>VDPwYCFJ zBjh8*5V*Z@1mnCouNF8C@{#-`EMpa~rr+aQE3{p#O~e_455rv8Ux$iC{z)3_u3gp* z_G;@Az*r;TB|r@enA`9$!gPd}yx465V5eEYn?!t%h!2SPbuV`BPl7&lxq#(bK;%bQ zxA@HlXL@Va^-c6ludZS4QM`BJ?2n=nbqz3@8Roqc=FnjWG3J$F=SQawN3i!F!angC z#9MIQ@eJmu(vi>ak7REc9&&C14tqpC7YV1K0rs_h@NvK`Z2^8MVa_ajqApYR#3<$_ z*XIa+=oI*jr`Tt39b32#*!-dFO;7P0@#BNH0na`vJxn~0;G6(^`(ekMJ8FwDHynYV zaPUp8w?|uu7NK6uYi=Ds!uv6dhfMDGzz)jyX#{>Y@FziD6Mqx%R~-f3D2)JNK{F;|UAXUtVD-6Vyfud*2V-7l|SLUkl zJPa$0hVkaA$hDyPhaCJAl$(_DFrcR2<6K2Ii@B&+R4CyD;Cuu*mrXI?X@KJh*NXC| z8ZcIVT0Y<1yBVQD(0?512NA@5J@@O~D!d+f&nWqyLHeKq^IY|o0)GW+VVNbrdjZez zVRvp_JK$~7)^>VvuYh|6>`ii*Zt;nDcQ@C$(Tlwe<(iIuQ1o_!Kq3HlZq#8VzeCSv zuossQMQIldm@&B400$sHKWr12r>R54J4F02KCi?5vQNPKacszNM!<&z{Duefu;G07 zUM~1Kld#NVn0Yf?E8s?k-Fbg-{f2&Ql=;`3@y@$XlgHf?`;LPC9<%$tp*O!P^D)+) zVm^j&JRfu3Xd3f6&+lpA5HEnR$KG5=^B|UdA|heTbs-+#Y(wMBb<`^viCEgdG1rYr zXUugj9s1sXBtK)WqphH5^r@hGk>*&L>q2a2LkRf@F$8Wex64?Ux%YJV-D3GjeiD|k zidWO`b*`Hy=AJT9kq5hTgB<9Zc@FXxBuJ^Ul*xOQ<=-}0hE z=6VS0jiHenPY#`eJ?(|i>1gK6Gc(IidEyorKh6V&Mz5+1Wv@DYr}rC9Xm-Ua-#%PB z$=*=SYn#vre&Y#eu=n(A$IV-S1|5U8vl3#-XDr)!6$D9y@oZri_Wwi zrkjZE+ylBsQ71>TUXE4UX#qThFrMw~2My03@{#-`EMpa~rr)dWtQ58*?|gZ%YdgXi z0@JDQxy%*EwHKt$Kw$gfwsO3J<5_ic#dj~f6UK4v=rsK475ACQ*&<~uJKCKbf(;c4 zTPlPt@u*ZL@N79QZjy2zO>TPpQnN>u2LU^eXJHf1Evh`V-(2 z&fYK=zdc8;tQ?Al-E(C=7k1BVqsQ_+pfvhRK4aKpnCHqQ!g%(0Kr#}s9HXW^jzwqM zBhyX99@*bEiaI%x^>VD*;|{<>2>A%_V2|#*qj;yxeVC?`#+HTZ|a!uGVj0XA0Qgf*VLURKR!2+ z^;)>W^fe<%+^d0-M{3IXx3Hn|-L;#`>v8Yx@G}b$78MemolVb}n(05|q+#5d8BWHX z;Tj^2A6QdMxNCO&X7)GO_lyoj@mneG@~pynayj75RiV*6i6a&5xc3E~;5Bn(VbaNL z4=){AQ=81DE6YcyE`&8=a1X8}%6HLWVyAqjn z(H7VL4Z&Zb{@}OKXo%~;+46s8cR!VM(lH7xOcsyE^N%>`2&eP$+gX{D4skj%8jpsZ zw8QDpDC(|D)6mHCNlFhDZFyjIl6Hds{a1;<6M?%)BQ;f_P%;_{L7obHHy(cTY5330 z*+5^FqOBpm%jBdzADylB&ZgO)j#fmDz|TV8G{pC~SpJb4r-kaFzdBAsC!<&K@1~x= z%^seyupE4x!)GkQ-7S2-cG{4$yJ54#Jcpw0`OIj#me2E@k$7EbA@q+sdE{_iS2g?z z|89u9GI>u*&_*T9Wz;@!%i`>vW#``)!Q)Rui|U<`MRV|bLGrlKm3)71-;AjXlkw4& ze1C5*r}Ob`+IUU+2~J0ljvx-zE==yqEUVd-S@h8@kHA-DuByjx-cOWcU6SNGg_%1; zb#fhpKE{}MBF=f)8{*rLSL+Oy?PC2bz!*LD_5h)KAeMZ_n0sS=AmA|0-0OcgLh|Fe zj~`?19h1(OdtJH-%)O!4QAZkXjIs?WXEN35Z(?tFf z1I8UJXFu}gJ^oGu-U#?raW#Z&E2axJl&~(J~m1rwM`exYvsvP9r!SBIa?=@KzCT z7jas|vfN7oKJ3NrutT}fwF172<5~4}^3QHfXdhNLNB(KV3HipYJczX4NO4ChGvy=c z_>_c&dlbz?IXqTe@oe) z;O~v#UJw8MqwEmo=O>a^!jJvtI?TtT%N0Myb9F8JOYxqNlTKit7fEM_B0KT70j_+a zzxK!;_@g~c1E0Y2H}HJ7Y0hXr9nbfgoXY0j{P$kCFGlW2 zer7cNEf*Gl|D{;@`!BnczyC5r`TH-p?^7Qx_wME#cKh+jk=vN3zaHU!Kp%4d;ja3a zeFt5B;XU-jUfB=OSJc(zks}Yex;%2^@3PP%_&*?Yi+j!uo6(1VCGfkHK6`m|e+~ED z9iz|HaeO_>-L(K_a18p|Hz1aLA|he@))Rdc_-2H0e69bDB*{>S zHr#{?8)c=4WxX7$zLxz&8X+Iy9rpK8_z;4n`H$r1BSb>QtLgXZYi}05OWeV6B#dFn z-$ire{o#`|*!69=bEEk!{|=6Z6?brY(GK_n+AiW+VUTnvF_OLI}qBQA{D*u@}8P zvwX(XTi_S*4hGH&adzpx=WO4R!Ctl9vmhZ}V}0P# zO<;ZCekZz7VJP`=tgH`0Er5p*@)6!)?-9b>eGK1~VPn8ympDO_cV%WkX809e^SLp% zm0@1%;CyNJQGI*hwBOEM8NB!I+EPr~(z(2+7q(>Hkuhw@8O`{<=UBdL)(ZW~Cn6HY z-aT{(_$0zO>uX+PXpbDnru~dXXW9?bO~iiEpld{skF3|UpJosYA><>xll|;N{xN-5 z#xNmyS7tio=1?o*W)Zu#G^>7&_?z?Y5$(A5HsAl-S?)N&PZ;jQ^OE|=G4@;i+gY>f z{XfPxp>y>2`{?)4NAu+$Jbk~9g5UqfvXA3nH2Da>TRWOv_kJJY)pO{b=c(~@|9k19 zwl%$%rFy)3Vr)p`-KRONUb?S|{ANf8tTSKyS~%Lm_apL?Qy0YJqb+5yBH>WT!2>o`99Vp|+<9e258Bx2ci za~(Gpow<%gD>?@jeCc5CV_)ciOkyiu`H>`N(!iSjH+|O~2dmE%h(Y>BVo3 zo>7u}j_wU^ZPdHjdE7PxH=c$x>|o&N{KC<_clnZO2P3QS-8{@SxQlmm{-M$H41R54Hv`AxVLZRk%7v9j_O&_A$D%XGInzyKocDsRF-N^zzdFtnfcp@} z^9x%+!+Qbw$aY9r#wuP-zuR#w^`DgETAupyAQqJtBc6`Hen5`#K{?3B+Y`*4cT{@< z>l?E?#%E`|G0kH*ZJ-=gey&9c0fKC1JH)8uCbC-!X#`y?k>$8)haNP#p6bCT=R$SZK^@DBr+&<^Eb$9mmb@sa) zF!$y0yOXt01^bOg1lUxA`0kc_EIa;r(mY8%q4m)|bA5z6#?q!D(xxgixKI5**Oqvl zDW5THDfAWycubFHOMQ}&h~@Y)ZD}kz)0UWSBDTanpi$Jxk*t?v)s`@JCS*&)pqq~% zAIVR`GFI_w`nP3E{I??AC+pGvivq;q3t>(ZMtL;O9uIKE|1wd{ZB>_v-CPfqXX zyyW7Zfd$LXOZIp6cDAQFlMVHMlx&zeZ)QC$fZVg(8N}`O4@E(CT5HpJ=TIz^?-V!{ zk%Uv_92cJC9PdnaP7Kk^)Th@Cw68`y(C@|FG6n842k>!Yn%U7l&`vW~r&2U?&4zXB zI@bdS#xvUo2Kswe4-RyuQ0;^t{#}{J2cP5c(}0lVgm}iVJNF(t&-)y>JkxR7+?%%o zr#?)}k7;*f(Xm}{8IJj3I)AJo&3PQ=_vt?DQs876BwZSgO<(snz@5Vx;*s)ktlH-g z;Oz)}rpt2;w>K_e#dn4ohpS8eBl-CVkx=n!`rX>6&mY2YU&?;-_Byy6DF~Fkk7rPU zljD2!?!!K8y8Cxyj^_OL==S#qO?w+zg?E9m4yY-T!4@8T+NM zw5joItXbj3NjaWO8ykzRR+QnGAEuj#ja>{nS%%BWdQBVq3i2jmV*{WYLKw%!-1kuB zcm}y&FQ?T<%ELG{{oA&&L~x$Kf3v2iUI-CKjPqlBtMw@CXx>r%uIRWgw7Ro4`%CyO zK0|l}bJUAy^Jp6H%ZYP@(=nf2hwp#`C*A}1&J+HC{g^s7$Fi{``iR$Ybjk$j8ShBI&z{Wg-LL2yr zBTPq_CgK?!w+-q>H{QA3Z^PzbUwOB@Z*y{dqZ|A+i0Rjo$a~-Btos43&B^civHs*7 z!)f(V@oM_F?bj5W69(l;k=y3hVEfbGwx)eecjtt@!zn*YKCv@I{r(L5xj*dnVMOV0 znKtYw^ag0yZ;j`>c>kbXUr(O|6A2s&(w-KRmsGLrrNVIbI!#-ro)1(%Vw z!2ELA!koT<7f9%nN*RV_y{0YjdhaYI5RateSUr#6dRHN^%yPdUN1AOzwgJh|4*Vy1 zAgQGpwjLB#>6w{QughHF@4|9^a(N*$N`-B0>)LzPyB7o8w#m)u~IA3&P`#=%d?H(CgY9jrGlF3lZ)_=05^^#NEeyUhj;o!WkLx_hKK5ob$hiyos!Twt{Xu!Z_=nZ~`T{`4Whrsv%e0|sgE36ru~gY$Fgu4DHGF8#Qy#}&d#=@ z?(ys|37TWc{=9wsnD)m9*1r9*+-!eX=d%5Ebin7$mg~52?QhOe*#Ae{*2;NO)}j?Z1O9hVSMTl{2@~FN&;OKt?80%2j>CU4 zH&dO=fm+ySE$p+_;k?NZknc#qMkBD%dE&RHXlDO#MAE@dU;hKQQ(hm+XDmBi34)2( z={Cto#L`|&-#HeYX{Ss#5j*`m&`rcne+asX*y+Qdn~0tA{B56x@Qy5}kr+i*wdQ)3eP=e^f^Td#Qs#X4(7lEaT}tqcwZ3m0(}%jgcG&l| z{|kKRDvUY#jO9Z+KoCb5Z>_sSG7|AvK6ETP_JitLm+2R9rn;~0ZA+G0 zqg$t|>)%&Z_g2-f>ig>7#g@db#?Y?zPPNau0DYI12ZXU`!3%aMMvD&m?K>h%%yX#EbUXyxf)QlFsJtW zB2F>HTo+^H+O;Kf=rPG!bY{>UBZ0FgfxDN0wf_1IuYU^WirUjRK4i&}FDW@vhYi;b z+&E2scILKnj^kzRV|N_^zx(>yr%L^e$BLdw<6?}txJP1q0Au9~*uVe#JRdW&1932C z#5iA=pZ^yblR@*(u=^OFdG725rjIn2G7iiO4FB9mH=Zxc^8n48APYnOMLN&1Uof<< zZ%*Rd1l(syTFetOuiE=c*N+K z?S>-LcpmSCK1sdTe_6ciKR#tCQ4xJnt_*?%eUU#Y2^lk@FN&lqA)eJ2DY^uGk$(j7 z7*~|!>x}>YQy@q%{%0Qr-86K}_@5)s+e72OzcG6JXJ52HhUOT=G3II27hyYfS8J~F z8J9$R%KV($7ZIC{ik^f1a`4Lmu#azjagMo!Ip%PVE1Z8`OoWl2D4)zC_u;Y z1G^+4V+s~rejtjjgm@MPJ<=t>p!Xo?7*~|!>tN9PItUVAQ0=Fg25k%mvuwvbgh6jK z8iNL8Eq*{`W|SLva0Yj?1}mQ#OoqW>7lYsh@{POj-J)7iod;^1nDxFKy!ms$Vix1Q z-}rt3^UVdw!UdmWImcu03cNEaBkMwo9G9D=F~f|){j>9GUt6svTzJsmf+N=Ry z3zua)`v~+Vh0EKf?!0@Ctjs33udu7J(M$J?qF+H-Q`zGn-O^S&?HMhQz$n2c`%@bu zOs^A0&c>cmVuby`05qSE&r8h6yTY1z8h=G-QS!dx7Sr~(;;Y2$Fecvp9@19dmS3Jx z&vyYb=CfcyNRx|UAN!9$J(wJyQjL#{d#TZ#nreqj*l`0 z>ie~Fe__ZgE?!w}L0geF|4QeLwn^hMrnDn>Jc^<#As*wthsyjUd!|1Z%|LF z|KxowFJ-m;Z99SCx?LxJmc}4PnoU_F@(!3Qx*SD1B0#-BoQnnq^(eCnwyWwXmX=g4Lqv(i1#-T|?y4A|2{}@K?V)2vk zlQ^W5d|lq~FA$c5H+%$i)6j9e;RtAY8H-~|hST?#>dP1v7P)^IN80HMz3B&$^ znB%xW#r9+?!Q(1;(k|mo6kR7ixl?+=CkwBL^du`qF8vwvVSwo)e7ZaJE59_^dNxK$ zcm~V=IEdd1ElM7OraT+0*$Mnfzry~L&sTtU`04D=;1}-mgI&^tb%C<|1K_A+)=r_Ra9Km9!jp)Q+MnAu{98q#|7>bh)GUM?oiX7*Fzb zN9`{nEXk;S0CdyPaijJSXnJ|n)~8<`YiuYWRiufBaFwZ|pDSA&D1j_ZPX-;iWoOXtuMrnad0)#*S#5vXnV!6(9d@Q>$2eO~C99|lZ$HJ@t|p@` z++mhXT#BDYT=H)t(0I-znK0Ba*>M=XS~giFTUA}-&XoP+9oZL~K@~WiF4u!ue2sT< zz8-8`+t^($*7uJV8e5cEs%6IqYM&_gH4e?@=bkHj&0D;3?O-(r{Qhe_@NoNf_Qmr6 z!`o0#qS&^mTnz7nAKNh7v$R3lU4Hx^{A?xd)5UNU9oseI(4-<=5)6~imN<+j`MMbX z2ZSZT@K-?>K*wR2Ww!=el;kUJF>Qa^Sea+#C?o4}RB)y8U5S6l#mX<7l8VJzcej7PqdOG)eGwi;CU)leXmIEsD;?8|jkZ?OxC&!5dGzCc)c5&?Uj! zFz8+>-qs*4m6VZkfJt`U@MhAMHEE$hIA?r?kJVqs3;9;TmZC1=pYu?^b;q9D z!_T3{;qB_Hy7}^vzs1EHPXN?bUH@cl)Adg_hcKQ6lhEUs2j2PfL_@E#usiF!ulCTe@%-x`XqWEdDkZ9{{ILxUk(cWUkUnt{&mn{x1c&% zu!zUZdsL0;KWQH>h95(45t=w=8zUXkmGR1c(W1 zUr;@6u${x46Z(W=4t>I)>Jt!G;-Fvn8R!P;s&CMAs((;@OGTgb`2hQc!oVMa<_l;G zNDuVIetdlsva**a{mE}!r}~Lsei0?Jc;~H-&nLs=2O!XZy-b>#>IY6m`HdYzuap^l0|E;@^3A_84Xmuax6;!NEsQQ(#?K0*g zC?>iCXx)G8OWuE^_kX7Mf1=$~pouxzoxo;F>{;XTYj&e8IpV3bMWZ&7DvloP)n2Q8 zL^2YL;u$)P9%o~}eFb^U{zuz+yz5`A2NfS*^;}sG z0?23N)p&Ai9DLqnmb}*7(L%W%R2imZIqjaNyI=Eeg@L)lyk$&>BmRqd*5J6fXO(zypf`#_0b7F~Jr8+bmfPa-bD3hJw)q}OX7 z1<04-GlXHypvZUVUlA15GtM0@ny;1O^cv!VkMy%htClJHjSFVyFZTR5fF3-n*Ee@~ zR?$jcb4O=Q9F=C@@}M}V=}whq5ovl&ki0!nr9m@&xUf->9q1IdW}qR9{vTC zM?pU?o^y2pd$5XLZFw<+wEqjrqs%xGf9|M$H~Ke&S-wAb^Vv+N_h}5yBK_GRq(9`Q zUtjJq{R0Ra- z1`aZu7r|N}{O_Xw5bFW{IoQjzqs$Su3UymV8&LVG_N8%I<}>R#7nCdP3S)D}ma7{P zESeCzz`q+ug&|I$>IGQ+>HPdf_H#9ZOVBUidA_wO)5tE*)UltyJWD^HYr%V-svPF$ z|CYBlNI4*%Z>u(pGGJXagS|ih+OfM>$URHY(B|o;uEZay<)s3>Fex5_R z-?!_7&##`nZ!7Bt@+EM3|F|l*u>Ka*gT|ZWvjQj2FFaftL_frSE3B6${H1Q@5dPEo zpZ}csB7N1rG%Ex`-G?R}?T#EQj1NMzA}y682S?JCK+8BZp%h&wPR5xt>nDwg zqasSajvU+%geQ@M^Ou3{1ayoXoPQZKzXB~v@)ft3wm&^tHk6rBSMud(WsVzn1x3#A zN%YDztC;$x`55#F^o((%>=Yf^t_nY?O&{_;{e5Wq^HvpQ?lR^96Mo3Jk&X&~-uST}C+Ch%R>AWYKtBXpj5npFb&S)XH+)r*JaiG^YfKpV3ALuev=KIf zu*)#kAiq|;#^F-&#i1hfn@Kc@6L(2MYPQ14a0q*dqKn(i!fQ4#vm-3(t>uCGuF- zJE<}Y^V2+QY1xWk7G+2}#wjcVpQ`znqqFJ@>KtGFpybsCXS0o!ijUn0{{2qSqby5G z2C>Q%X_eHe-{!dIU3j#((c}Yub=L4?jEDD$$p?9?2hB#*KgyqV&FA+NUr9fvuhT9r z(eI$cC0$J~WBP2)@Zg&ecax4=@*As);AQY`7ZlO1ie>PKSVLo5DWI*W_7chwc$czy zm!;-iK&NSA@+>3IvYTi90xygFz79EJqq$M*L1|0&v)gv20U2PU(3$tA+@ac&JO^Z` zj&+Cp-ix?JyWL2f1^Mt+5#%-Z-NFi?XPS6lRlgU0cXkE&skt8)SLpYeMH`ugd^bDD zHiCTCBc5vel5WR*kcZHzXGR^*eYdotJ)gqDe0-e`(kvjaVWd&A-%0a&`dNj4MEwBrp(;9s!uRsz~Ce>Sb?m!uunuj?2qx>dY#EiSFJ}$ z-v{3OuiST>JND!Yd{4K08v}U1Lz5x?nwTqL`PJX&;hkonD@#vV*7NiKo5(p**5KX$ zjQP(UduSip0G>A-7Zm3I>=P*O!?R=hef2x3cR}3=_Dz4;hW$>Mn>)6)06egrWs&z^ zv7KO#_{)@0rLC|pW50%HQGHy4^3kD|T+|Gz`n^9uS-%R}>AWs4_EDaBj?z+j&K1D! zg@+3pFP{JTjBYQuu?w;-+YH*&Mz$N&!++M#Qkg`)3;OXt``8X8|4W@py5{}!=KT>T zz8~ivJ-&Yvb5o`ap1Su%&s*GUhyyjRrE`B)UV`Qg+S_j!_;ToeYJ5AWK(}X2EP29F# zKOpKz$x62v6TG`}KWxky&C7ew8rkWj=IJR5QFihXpFF<5Mbr6cm&$#QF-?5`3FCfV zo0(x_Zq)HIn~nRRF-^RTiI+tgQ>MrkbU1I!V?Np4#vjkE+<`HlGyXO0&gG41^2?e0 za+Aj2#LMA5nNHuRe*eC4V@~Mw`asX}={sc1o?EYe~*see^962 z|0Qj*SunqWk}(b4fT0^ubd;U;bs;;Y>%i$cFd9|`8tt$r*MZTZr_vUU%1Nxq0dQpE zXhMY^YJrkbYZZKHmr*K;?ror9>xiSf%%q1NN-3td+Sq9@FY5Ds9T^SwlTWuN z+3VL|jF{gV#9URW`P7q;e=6DLU#^8&2CqKNxel&nLauME$6<~Lb5&|x!>lC*pjC2! ztS!kp6lElY>G=}S$XcSA-(nof1mPN^npXjx31_+6!`T_SU!e8Y@SsOA3 zv9O!nZo(3Wi#2vn@TwUN7<{e1n>7ck#%5ySj$H@KKiv|H$KYn*88#i?XnBF zhw^dAR%&hyw915xtk$tj+$DUT<(R*eJQ~YN^Rjk^xVhSjQU>zv$3U;veov8}3U|}v zdu1WZ*OsX{3x5UP8|m#qdaN6%19`@NmJ$7#4r%4N+;ot}cBFxKmipE2M?aHBUtAhY zf9d@EohTD^TRrM)x4b9wg+0t4bUT~BfrA6Vl|SeEG@l|SbpDNg%&qLNxbI>;$0Xim zGE6IcmjNl01!?vxS)290U(4G%AG>Zm(O@(D?w_Du~!#JvqTmc%c zoww$L@UC#PZG~}J9*s#%eg>E;(Cfgz$MQuR`%{`a|AqC*dO*1yKv-KnnXupMP^PLK zHI_VtGM!$KKcA8D_`H}q=&nrj_i-)W`I(MwF(bRw9GDRGdF3a@i zKfJf%>hs^9g-_0%8+KMU;G<`Gmgzj?e`22?H~rdl5QjJ|Q1~=2mD?lCQYMwEbyE z`Soo!fp*xdwHEsZd60s(gk@^nB`4gh#p**F2>UfB9J8EMed8VG8*ax$!tSZonylW{ z-08T4J^gUIJu$%~)H<%_nsjF1G}YWg8Px)rnCF<)dhN|xHs&5_<(@Qd$oz`#pz)u^ z@dd_v#P}b_1)Ow013d!$obi9&(7#~Pd0D%C)EQ-Qe^AqLj)VF6h|6?+lp*u;H|caa z*TM9CJdZLTHs)7Nyr+$cd{z7(nedminOUR#xh~B3na##TdZf?b{ggl6OPNSl`9ERY zNSFTEy!Ou)jC-STo9E2lV*HT~-zOUw^Go`Dv*vlT=6SP7SJBl>Iwy_$Wt~nA`S3Zo zUd;S+W#cx_pS#7lCrmieQ0g_kqNovm9xI@ZP6ntaE7msn56dT#j^tS8?*cesrGT|s5;=*$GxigV3xUz=(E z%?|GI8UpWC#Qb&+yf?-wy{3WraK(cn{y5@duV8r_$4J=o;1@A3Uj$F8)?Be3Q&4ND zas~(f7z3Fe_TYtKnqH58CG0=a>%*kOek|-2EEE}r^+E1SRAV02hlja7EOB(2li&#| zSd+n;>QS#?;&88_itoe$Pd^U&vh`lYkY~nwT#jeVpFHTz&K)f0=MIi@&H1txpO1BM zvu70LVt8^%FMLPx<|a(j%kw(#i1*TCIo>hqc}=;6?^tBnnDp=-#qhnsA3cS9$^W37 z^|O$Ubp(F%Z&>c&2O$>}$$uz*hhchMqp*zYmsa>vtOF@N66-onsiPIgqE1@_U2i3H#scwWfEKzjo|hWxd~S9M7xYRi0JKCaNx_zVLpJ*zYa*TzJ$Q z<~y*xV2uUod)V(#(q-ekLt~IKhgqv#F^fG6CG1I~Efn`}F*4|$i)c@@^^yu1SP zVxA%WsmhCMs9a~q{ypaP$E*wFqt?5mF65b+FT-1PQv&}vtLlt#V)Eh5#|J?tShU)r zE)yv?sduw?fO{oCTRdgG<2~>!1-wTg2Y!1LWj4&`MEhEsr2G))ZRj_0bH|#a&28+- zYhGgsW&efGTmQXj!MLhNdFBg`mf6MMgb4t$jQ8cY9(c>>G2pQ#@zD_I(TsFxY!8L&O~$vfF?f!JnQsb@l+5>F7+Crblnv4T zxzF}+Gw@*dkjAOoCCe9ecs=ruZC{}KUr^UWja(gT_+_S@XPv8eIQHadmTmgb?Ca!R z(5@HsYkW5q2YE7%ybEsfMjI@vGS~HO@SK~)-f+^EF@9lx(y_t`#^d@c$0*_zd8z)p z;a!`NJpibCGgk4Pblo8@)-lGR!h&{)I>Pv&Wl#2%bH|FZZ@`QTVclcyO7DZ#Wu@zo z>6&_S(?#3R^d?;s9@hN_xNbZTy~x*&p9K>oDrYQ?thcNR-m-`=@L8vl^%%TB`NrkQ zdXaP`&@&EAC`A{_CGcPvwIl20Nn_%`rfFz8vR*#nzT2hXuan4nhv)++>171$RFjTqIPgpp92a)*I-wFPDqPmaJz^uy#7zYRh^PwyYPf zJ8OAL%n){~n!=kMx!MG2@;wbVy(MBV8qHp{SKPYRp~6H1RWE)%2OC^>buSnDCdh znJsDm>_+3BFy^Di|G04@U*?m2S^IOHnr?o5P??j){~qI>G43afyQa;)qJADN8&Pi8 z@7H&W@!x06hmDE+DU zWLBUtA}Ca|RTZE)V{Ns#*X$(!t$TiJ$7FbIW9+%-4PzyJ#d@N$^Qn#Vwbi+bx<7UC-Xk-FS{5b!iNnWd>Ce_d&DJCCON?7u$!551B`wb3 zl1$QUDU1)}64Q2aw0gZ~vXCKjC;gyWBI2tQ; zg`>7R8F6p1U%PBffkv{7cKQ2{`z}7yMG4|!*&2c8=tKR zJpzsQQ1>IU3=JN;80$8et8x7iP{up1Ny<^|rkL=lV`<^@0{))K073q1C^t=h$O$C~L0p}puFBG7On=G_Zui0#c zZqXBIijRtf#?kaeVn&&O@8M3lK1|~;xDpwL9M?M105uf7( z>1cN)fhqXeN;q;?5{RNBH_tf2)srrXB=Cn;99SbIfxkvr5=kHc-3)Y`Brpz|F=$cp zzTy_s_P6b?mgK&|WL#FW(VoYz6ev~D2J3@Lhbu|JZ0VORAmE{h&(_BOb$fUJj^%;_ zYS2g$D^XO?dL|AgBn;&aC5(w~uzpoHv)+D((~{*e?lk1?FzkqhE{C^F0rS|k=wSz$ z-gOO}j}hOE-}SM}vE_H3V4v+*R223f0YMV%ACQEMDec_FeiU5^@fe3D73q>-|4%?C zaTrhXb!Pz*o)*f?APwp`>{me3%h=bad7`l&p7xOso`l=KfPLaMMEk@7>`$!I*dH?3 zN83*#)$l3N-nP9-Up7N?SB4C$UOpv7T?yY6jSd zV{x+B+O_hj$RxK}_!~ROVw37L2KY0a3c&5`dgngz+nxm-Yn{9s-;?iKFzzf&qq0xHa+|nd z%6nK|%4+-5&h#b>ksWrXVo=&Y&nYG7T^zJ)%Oikc}>v{z-ZPBN0&InCg^f}R@C(;%j z+msDK+M>^i7QHWR(P@ib9Oqzf*IdU`+M?4Iy@*=$-j4_;o$}GK4LjvJ&H=82En0KZ zX^T!m`*l%%I!t$*8} zc9!2J6KschStkv+@oOnKq>hv)+^We71>9U$mHknh%{~I|$56`bLwKX(E;{bFE^y1f z1A|@fc8y{0_S<*w-LuQvaqFFT$XkmAEvZ7w@*MlCc35O zpp_P_(%#)ZA&QQ;W*nMSq+6|Q`j27M?rl(CgrCGArR3}GP5K9fCFv8s3c4yZ`vl^P zrk3#R02c`2*yZ`;pQA0YK+-EtwAQ~8(iKLWkknBz3n7ewwz{sobB z>(+Jg1(Cjo-SPP+@3{WO#$Dq$KU&sbgs4@#Kf>7jM?u;9d{FV4z%9n?p+EP$PtlIs z?r|wy=34eo+U314qmf93L^dhzo8)A)kJ=8@&W z1N=UzyDq18J*^Mw*I?g%W%t%*L)xI;F-Kab}8DFoV&x9M25mIiQM4j_6H^J zzM!0aV1E8zK+i9);ENRF`b#I{W!z+6z}FFH^C+|bwZ7F`w(8ftLB=_PoBOF57dQGe zn>XSM417=IhyG8U3q+ao8BAIwhL57G^0i&lc<1An)`Oczc#}TjpkAarX>XNphjPXH zhvoX1U9KqepjIieOnK%IUvnvH{_JQGJlr&%MdhQ;A){g27{^7=LGsSxFo~!G@*EjIJOkTPAgI{@LJ=k-R-fPeN zOR8S@)dTH!9A9WCp`O@=vTQ@YV6`FruGbaWhVE4FdRO=YWnmNT_G&^`}rX8ry_V}f7f zx$&C%?`~UO4_5zTJy?(TJa`G-6YU@6z5lCkT3FtEPaW2Jwny+a3%=_kZ^yf${9Er@ z4<5T1&&2obYv}h~YrStD!roD<@aqZci=6qN9G0)v%p(7ysr;{Id1#Jfq@&%D4RSBR&sH+#Ieb7Q9mjIUF=M)-TWuxCFlvVn z=;QO6IEq^Gb@+h3_aHO@A26^6bTiN~e89kSpt%xSl;kUJF>Qa_ex~^VISV1T)rp(s zqf|i~*z-%3ds@j3>dgCXa+{q#0kQWE+}s_WdR49u-^oJ}{FuQV>veqIoThHif()nj z5FbL3twh)ljQgZ^`HXt6-2bX^|H!ys(DWJ9CDY4nGVaHX`&sSIB8=f# zya)5k2F49Kx^sitokKk?S-Bk#jz^a3HDc!@)|IX{*Y71cH__KNAJNY5Oj`WTq|NV4 z8GZ--e*xp4@H`c`70Ieh3Gh4N__dJ7S>|CZ zQDdm_AA4(kKgN{b@O@s8grFf<%oEH#zcVeN4Q&d={-8=*h^_BJLec!#U5 zsqY^JFY(rm_23V##QUt~vm$@A-Gkt@9$v|3z<93sM|`mjO@@C0-+?+t zoRL~)@R53ue|x=(=emLK_t?dAhi5qEdw53j7TLxYk7NE-48MQNEcu-*!q(MpE%M!w zccJg3YDadyGhx0g<61tC`gsIA>?3clf8r6pezUjaB-)zF$(0OQ%nWUrLPze=lkk1g6iW8!7d9u=>FcBps{q@~;@JgdUD@74T~FdK2JdF$3*WiInd z#A|HoG`C{rParQ(qJJ4jA5}#k#c{F>&HgIj74K>&Y$32 zzFq&_;r=GxkI#mAl0j>p#M_T`pZkKqe_($8-w>|m5E|pEEUrZweXHK*@F{9uWQyfbn;6IVx9@E%H#`U4O_iJQ1$Z}AZpz)Eyg0r|d3{>R z&ZfNZZl5{>W%V(utoF04+;VFCCg%uNUsb>VcP@g7F@60Q=FspyYW@s!1iyYE#&h-F z7|&7fYFve>%M*1qz%dnbKAao4MCL*2!EcgJA&)V@`Lt_1?>8x9TXQ|Rh3U?se083} zCy+83m(=%mWV-mOlmBo=l8J9G_EbMEiP;~!F5B8+sNy@6=iWd%Hr`grcN{U zkKG1*9Kn}g?ebvTQ+2M|R|^|Ui4DzbYi#Jc{xvmEb(yN`UkemA@IE88$~d0|?Tmw0}ss4e+gkw3(moFh*629a+pkrK7lCLutlKUSZNH7=D{~YLMpyTF34uIw=Xi<`{xW%;n zZTo9I7c$lTT!@?vO75pFuvxpU~kx=#~2s<3@dx zzwl2Q_eE6C~;p9jx zzf$VvzMI?=eRv2D92k`Pnic0pTKo#-p)&foN%Vc>SH^9A<#NNX{Lgj6uQbN1-UYi9 zzp`O@a5MOo<6Q5##EctDmj{oSIs1L+N5P-;d+0OOm}0)tYzs?(lq?X z40*B3Axq}Ke++;x@@wy(?yo%^a890c3QO#CI`blmUsB@&%LM7|!ZY;Mb_N)iccDBs zuR=O%tk?4kh5p)r_b}5p^BbCH)4UbOX#Gxbt9SY!>%$vh8e#lgZkm4R{~vFBNX=(l zRp0;Ma6Pzm6muIJtho*F4DZ30l1Cz*18-Vu*Cop6!p1K0TSri4T#I2{sd`#c-@n;>#rkpN`S>r?)O?f< zGj+B`@!6PzLc3(ya1N*s&;FL$Z+56JJ)bq8<67_En$yyCuIIG+YHCia%(b#f)gI>O zH`IX>wg>o)vfR{q3)e#D=f4WSKT|w{S=)l&Bk=nJtZho1|9$cD3E3Cep&6AkrpqU= z*WOK59Q3~mqohd z4=|sx{kOL7fx$VAIR0QmS9>|VAGrJh$I(T;?}~kZsEEEJgF07z1!+&wcX%5mA!7=L zoxUTIu4K}uNyYRM^c~)I&`BJ|lYE`N!}}z{67(J9WxXnNOy7|?37QL_MM=Km7Sr~( z?PprX$hZ0e3n=<2ShphzKMMV$YDzE;KkG*2a{narf&Jqyek}ePym1A*NC3WQ8axAe zYw`&*SYs=XU99(0aX#?YI{0hwWoB-RJoXIc1iyYY_@o^8>=nx&eEedIS6Q|^*!M=^ z3l-mlwL znLKzhdp{M+V2P&n2bt!)8PNKe6WCC^RT9@#!;4~9Ln-j;CuQX!aT})#0P&! zo-$MWz+|@e?HSBZf>*?|_(3JNbbkJ)>iO_2a|cit2PSiN`U&}c%uPK)ejoAz*0X}g zFF~59TQv`5czoJf58hI#8`evQI_bCSWY(?|l*<#fN(uGhu}+qqJnWghStXPW>qF(I z=8~i81Zi-Ns;{Bvz4V?XJ?~}eJjkj&OQ@2cloxqs-8H7{ws zC(CbI-c!kMD*en7q;IXKVqG$P&v$!1aX1zpq{2Vk9H)o zT;}KBYv$VC)7V)p;$7C)@81cT=oysB2+CyNTTvDRsFy+RsjA=q#}^wpNcL5!Fsb)? z@ToVV9Q!pcAzKV)uojxXlxwbhAMAz3GhMl2?(p=WDX0Dh)fJz{zJ#R+L)o*u)Ost{j3-;`t&mmi_124VKd8o7VTr+6f%LWaW8c7cX3!5F zd{aI6+Ar1*-h_P$71k-%f(3))3oyuj2=!C0ZAIIhE#g_#y7)h`ABF#aHDgQFNSX{4&M?<=kP6xZnY!^ zlj%{r`^5O&g9Lm_Klgqo;9CZ2pqqh?;al?4pt%}al)SIF#kBox`zfeW=FWEs*t5rhmzx z4SUQ(l;kUJF>Qa_ey01E;Z}d~!H?`Ec<#DO_KXhUVHBP=pH)2Nfu}t1luz*_t-(w2 zgrX=w6JOGIzNrV~G5ks0a+HZZ`=}SC)i~ zDg2Ae(?!vdFJm0x&q$Yqr@PIH18XEtcLZTcc)H!7t3t=|bT5FWmoPNg#?wuN7-Ib? z3~lQIL+Q5y(tD`UZYt1hKmE|`BRY*I55r&Z4(kFt-E9iJicL@EE@KnHjbBT_A^nr` zguBmMO2K9GwP#c6Po)$TzcZ_tN+~FlPN?X8sejjwHmU!{Zt#>!DXlKb^WF>xdo}iy zRHM-BIYmhi=HMrlQcysh@N*LWy~JU4kWxbYux_=K(iMJEDMi3x%uX0er4-$-SR7Jj z5lJZ_hFVfe7Z^&VlvGMV-%)|?VJYP%YjHAek6F4lX~u%iMyC-XU7KtlA-Y+c?4>=M z?Q4^J!^O#PZSp2-aq`v2Q!4cXijLHhO8qF4PEre{{vO9uxH#FuleIV*i>FlTw@0Q< z<54R0w~t4=P-s=?xOJ72py?(2v`hVa!^O!^>c7caoQ%g$D)pm|ZPf`wsnp+&p>Cx9 zUcylO+T`AFagu$dnmN14TAYl-P%8DOQa{>F1)A-rN7p8AvKA-fTJ-5l{i&3KmXJy* z$+)a@K}wN{VM|JBO$^84DV0(HhfsCmu-J2oO4lY;Ni2qw&SnSY-aUdJOG@bmKdF== z;4o$<45d=a;+9ebLza}197Cy;l1eG)J1Wq1xvI8fu$Z2k zRP&%_U`f|fP!LgTDZR7<%vqZRc*3PgPfIEAvX&;#0-lC}r#$eKo|`maf|26soW)bP zG}*$FwKN%zr_+`Cci>Kw^xP!wVo)3lxfbqdrUXg5dyao2{A?v>I@~i~QFJ9lW*nMS zq+6|Q`j27M&OITo>HTKCG#)u?lNfx$rAbw1BirF+ElnoC&uL2iTXAl3Ha$0KjxP~2 zaTqFt##T`nD%(V`3!RH0(j~#rZJ-m}!5XH=_MN4NQRmsYNdP8XnpAbCFk~%F#$qUy z`ctVN*r`Ah`@Og}Nhzf@jTPIXPk(JPl~T|W(zVItYm>diWwlHF?zu_e>8zfc+>uHt zI53_{DV=A{PNJ{rCH!=dQe;`hl2W=Ek2a)I3hLNa>DuIZb-N3tln_JYGPRV_1%^^7 zC6!XpZYt0{ETx>?bCc=XBw9l%r6iY9dTEb+yOiRdo5Y}TcF#?wQh$o4uI@v0RVwwL zd8xmbFyx$@1Yq2Alf;m7M-q5+5XEt1=kI6{Prla`dyni!77Q@VrF22m&cu;&z&o|{x9u~^Pc5 zr3g5T*$G4Gxykl1Xp!9RLJWnAlk6+i+T=~!l4B^9Qc@`e?WO|Vt5V8Gc7E{eo|_yj zHc%evxykh0Bv27|haPWt>7^ZD&e|lvbJtz#@QhSiN`cqeJvW&*cuLPr>T2MBdTtVh z&}nU@_wlr=9Z%NMWc&{Q)0Fzv*p!}|Om`%A#?MLMs+YziXKfOL&z=xJ`nDu^Sxb`% z@N;@nf8(x#*QhP}UHz%le|l1XFJZ`8n*?AcLJVoCA70kdWGseKsXvwaF-}yVdsynX zmL_9c^y#lnrcw%8L%Jh5`HtjX8X?-H{#`rTr2eycZZefpfTnZ@B{}>~QvNw0rG)rt zNhz&mmH6@KG|x?@QVQ`ymE|9~6lx!u^+CIPLsA)jwjwQ+dqYxL`L_OqjyJT>PLrw( zy_y!I7)I^hkaQdTBo0X>J&q6R;pqu=p55+3DJ8@Z>uY2?rIao(lu9Y7l!A6sfoA*Z z#oJxbqR;NR$#iWJEg_Xsl1nMQw8y?(O2N5FBc_CFlV|tbWGeNicv>vyCNUW84HqX{ zc(N8JU+o>qjmn~5S0N`NijoMGGajYqCQ&9)QhzUvN9}8qI5%m=qfqKUo98A|sbAp< ze@bvB)~G2_r&2!(0W*p(;IEf3)V?-}bCU)`tUD$3r{^a3u=0{BjwfvMlz6E|wGsZy z4AUz3&@Qt~QFLzu4eKI~?lO~}%w{pY)zG4t7xk5st+W{SerSn9H)*Kc8L*GT?_DZH z{|OyU`-B+ttw8gcdsXVU7AIr5s?+|GODd(HB{*DGx`PsB(uvFB4$58{Av#F?;o{^F zo>h+!*5YI=p3)tZD7H{_I`hSzQ&cLYsFGML=O!uT?~#QSOG;@itiv}U zbDE9ACkCHCTFWi+?|re1L`862S$=nmTsvD03z&4YySrI#fuF6UGThxPQFN5Y8As%D z(sh#M-Q6trT5({Fl;!^vVeck^QSy8=?GfW3+|$r8BSv-@H16}kt4&Eh46yB-+;H9S zYAHCRPLwCystF4P+%nfduaOHfD!p)*Co9ccv%}lIonQS1xcEKF(6MXh?#Z2Z-*p#> zc+N7vlGM;6B<<$B<=BN_?kscone-(o=ZQh$@8mbi`9(esqW=q(^tmqPMnF-3&O@`!kdAhD9NY{)TS@zJF&9P0 z`eq!ORHSp;G{arYeF%OM2iCA%yO{ed!jfQa3Ut%ZahPK{xX%Z#HYMf20NZ}1F*g*8 zIerJz!Q38=In<}ZTmjFhFxSmF&$0F0jDy~bF6PLOHiKD@W8mE3S%tmxgbyvUQ5Y44 zKaPv67u3-y@wd&SBZjm!7k^Q7#1P}qq#~W$z8UV~@3-J5abOMGxQo9(L0A&}RY5lm z9f!XHXx!(6SDTV@V1R8u)A%dK;*a0ZbnrK!@rQR&_#-c>@RyzuP1j-378c7oEG4Vf zlwCX*mr7Rey?n>i)ZKU7x_4@4S4ikIKh6*&|ajFyk zidLj3{Bc}Nfu0XWI?ULIaT((7)7a6x^}#bpuh7ueimu{cZc1p0ks+<8T))D{aBrvHD)9!`i{mJm`=aUDm*@ z=Iy#U6FYWQsS7No>&K?dX>`Kns1+WC%PpWug3Dc2TC_?Vba5F)=i-udNpSgE&T{k; zE@l1r6u9iLfQ&P>rrz3SI=cBL>Daoi#>jLH*%UgADBN9!uq3$K+)7H>qHq^Q=i-iZ zNpSaC&UEw=?qm)56u9fKh>Wwirrz@IY)3a|a>quy84uHSWK-rG_lm|&BMO6K2up&& zZB|;eMqx0D&cz_GtzXBvRaetvA9g7 zEK`haMyJ`0A&V-C!%L;C&bVWF^%CxqNLd|lXI7NeTExQLy4`$>HI=d~Bt=_0VX$bC zM`19PvN~gsl4mbrFo~4a0fS~$S-qnxWhEc`(sku@T^V?&Kx4+NSJ##GNlAS&IhLEd zx|=f~{zxBQyX{Q!dru6_9rki_hYMc)$KG@GAD2$la2tE0>Zx;(^XP8 z%I|vLT#8lm#$oSu>b&HSy>F^-!5%&_bRL{xzL`a6RMcoRiE#G3Y-OC&ARX=OiRsQl zQytPq_|GsZcfBi$t^``fp-Dx$By)aTUzRwGC;2XiU7n5p{|9uEvm=j#ZW=o7?8s)& zj6jQ$e8nxM?Qh%9^g8s-=IqEDB;x`t_8I2z*s@-W-m_zB@7+75cCOV+(PdOCq%n17 zN3BC^a($XP7Q0=20mC11v8&H14_{mJyoc1?0@Wox&Tx^&Ao*y{fgnAJbg;Va^V3o(=be|+-OlgxYPNV3EHO8SyMY<$7gR@^aA_G-_MKU5E1|HtayfvR^vjiF zhvv8-DhjI=5EP)}uzHUqWK6+~i`6JP;?2e?>5^de80eB<_3uEJ1gpnEmjtV0pz9^9 zZcd0*EM7ZU)yvuFdlXhT@x5AD)hDClu)22LmFtq<(UUpUj@9d5tOqmM+QI1~wf*mT z2spiL?rzg||o~s8zX72F#Q0>6`K2r~hOXdz&3v)+jF+P`(?)c#PVA@|FRK07!Cn8=3 z@v`-xnq3`CdkmX9S{`Z!$Iqvt>1c^f1@q%k^ov{aC1;hhS# zPmO15kCijEM@xOR&lPjEBc&xU^Ue2rUgN)wdw=eE?`Zx8>_42P{cVkh#=S;xtuJXJ z{gusH!E4t1Y#po0{!O0$8PB_@c4Rt>yvCb>=hZ$}MZfjt$LgP$_Ui|$c-AYvRlkuu zNVPb3czVs;;o>m#NFhK@ha_qUAwU~Q2SP~ANJ>9Uk3Y9*#Fl1)$6XirZ_UO^FMy*j;U*J zcyICUox6AL*t4@Zy6)}8(aXm!U*}zmHg(00ojY#5LqYtKK9FtLw&}g^_WCn?~ z`p3))5SutUqWW*U137aY{1fz#xs{-shK}K7a$f>X5A~1!6AAlAY%EyVKdw_-4g4wH zKl%sxUakI7pIndYAJZAIbOsFVrUK1=f_p94pA?{pqb#&hujR=KBSou;-MAJ#cE+V> zudJo$Y$`>2-X>`eFe65u>@5gm3yK+el+fQYjj6l{!)73b$ft zrI6tkgwrdr6fJl7g|l6H>p_$hoeZaEM2h}^B}ESyDLQYY=wD5xXsP&CyWp-m_UuMw zE3hQN>OCfc7!h2e7e(h{m2|5mF_=t`+C3qaO3}KI5=+r-Sk>DVqNM0VSY5mBDs!D* zlACTbk1P@?`WlgVAw_R^1yXd$lA%lL79&}5TG)<{`f9ZZo)h&s-w31S_AG{)ox^79-Pg@f8 z_biF}JBwJNen!Jg{mU5Y^p&|9LKF0r{>xTcv_|xmk#tU9spt~)l^O1pVO&v?ud_Ok zxgG>bBt{Yx01&7p$@`U>oe2xE1QiUG-q)D(nX- z*1~mZuUZdsMM~8T&zn#8kf=L$(Lj`vp3WJ4vJ(hpD`Kl+Z%I1ZFEMWEF{3zeSE`Pp z;|Rj^X;PgFocg8uQPux~ktD)@0SyYybxT>Q=x|7#i2D?yk0+e^MUpowt-~G?-d?b9 zLU(O=p#jRi)0&sQ)gT_PU9C@d*hex9yyh*uF3IQ_FumU^-A5ud8@3A~D=^uhF2~PhSbV+a;fG!D6 znP)HIv}`20Se&+RA_*@=5S(tryIE45z8N77r)$^BwX2C{!1C=lCyo5Mp!vtJ6`Mu zZ3eVi#9M=WGRTMaRVR;nv$aRZm+HQxoWnkm0qhg$ZycHS8lSr_!@VXo^e5P7lE*%i zC5V%0egOMKelW>>B7Wnc0%o{$-@|<-oc#i?P{2NN>?bc`Z%c{$Pr1({k9{5mz0adi z;Jz8`^H>?~^DyaP562G|@r=_L+M%e3{wcQ&1O@0AKEmHE2^lk@e~P3d-Wi7`l%h+} zKlz^ov5BK2s{gh<9R6RxKSBSLeFSvV&@p^OZUi)!LW`336}OnSzimI$Gfrbk`=|Cz z9CBfVKcsnnpYLY(PiiAaT>q5LI;FEtXg3vT_7%N7>!fath-=Yf-K`HNkYc^6mSS`2 z)KV(NqMc|JG5TaH2rfX!j6RY3GhFUCm10qtRN0mUA#QlJ6dY0~5`L-~r{q$syWp`l zyhK8{<1#X|M<4Z-`FO0J-VCvpVm}Z{v6y|jgpzE%n$PJI5u34Nm?sj`6A`E%X&bII zJAtqyc#WF*b@3WSM~=_p7SkExF7cXph8SBn+!RJs+O-?H zITbM$C(S~##0*n0S39uv_nVMDA=N^XHBxPxBCY71YAa2qNA1j_E2)-oMM=KSEV}>CAV?zp zJ_EXG=s4;3X3+GK^t&su^y~I#>-L(9JbaWRSG@d9csIL0+m@t1OQqjb`bE2`K=-Qj zJ8{Q<)TbDd-Q#h!Og9&k%s2Zh+ehef0edcZasg(xiai+Da+KzrE6@CMeYc6(#Z%nf zQNTIl!XiIsyag>rRKzHhB_U(VXyA-OUKE`(3Msk-qmcJ`a|_n&(k)m1xXor&Kq100N2AI zu8HSU%xawvc;19M5tTC*hpWuq1OFs=-X{qeQ`)YJ=O{WC&!h|6BJ50$+Tkj_&%!SW zp1%XSBzS%dbOCf6o>_LijAxnU3d=AFp4<0r=nFvbu4n@a&zSjAcrL@w!gI2_K(6lU zu6+Np4&(G>J-B|B(lXX)AvM1qJO8hL65}?c%SxtR^*)ai0sARkQ)1@$-F%3++y1Pw*A!_w}(u|x0rGJt@0oRTC8z< zH^$r#-#Ot9-R)aH^!*_yV})~!*9zx1BQ*=>iSH3H19uXBJabDs&ec64z;~ebMKpd` z@PKjb>zKq$QYG{GK;5-*y}pB^#QhYT>oetVqfht{W}2`^1p6)m?&B!-W5y|``FOfH z(^f^_Av6rHVz0%ty5kG|$%C~c<5@K;_qlSWxfT00PLw>{H-hwD|G6)q-N}p-Xv&=F z;w;!t(XU{Z4EetPG0c?lj*u+w2+3fUEruz_j5G1 z7W|9n=l{8Ri|1qC2WG`eL!euN6IA6U?f|&}`#&zg{*O1Qdp+uf>isZ7_S431O?r+0v*I-l&H8ZvS>vNKUgM`IW9+4Y`-}D3 z^pbjw^kJMIFXCCXLxLHY5&dHB8H5#~W8@is7Bse!KEUCBBI$rTyI)jv3Hn8!{T<_q zl6;+hQQaSspkK_sfP@0*n0_(Gvb!2ul;kUJF>Qa_{%ZA$7wU}tL#AJRn>SKyhcNcI=^LlC$vr4b{vE1q1YuSmncgMB!b+ehYp_l98`@DPjIoV1JB;Na>B@W&4d=A#Uk0b0|Brr=j`l;AbHYuC_ix{m^X&uGW0YO=o-Qtth z-Swfh;Wtj=r1fNYKI78*z=4I*dLGjHMX9vDa0E=Hbv?4$BjtH7t+zp4?`#1#a!P4E z5zf23uVkW+W02<6%&Dq4X}wAbeXAv{{~9E5NbA=>P!IkTrneLlIrgb&iJj6qXY9oP z>|xiLplw#w0@xcMZ_Z=X7#o|2r1T<$X{nk;U1)L{|N2@;Ry^Sg>Nkk)MmNI zMN8q7-YK~^ZkgpQVIF&6FjH_Ws0E(aya}@a&jsEWC_%SQTl{15W>;dLE;IdCBC%r+ z&Y+UojWjPOKp>U>B$V0@Rw<>=w4`?B{?GMVDO;}KdlB9fu1| zXX8*dgn~1lt!CqT8PBqJrb|4x@18NYo(P`7adz4}lkD!3tJj_0JwF!w%#vO z<|!0k?U4bVWA?}__Pwo}65zQC8q{U%_`J_bi&hzX-0?Yz&K;jgx7tdR=}|jUV=6lYK4Ym<2uaj&6wSY@85i@n3EYW&XlQrE7)I$eYBW) zDhw{ix3{oYC2#hssBir6dwD0nah>`m&ElPv@@7~mMn&-hFCe@KP05k%pLDcyoS|EI z(&u5fm0-o~KceW|{)2Q0`VW5qbc`!X@^xmV{0$&TGAmU8T>u?3E0ty0^>Y6)V`ing z??2i%lgI@o(tiNWsvmg-#e}^i-j|@QS*e@S`%F+E2^4v6wpYq&RJxbccK%CSUS;fp zwJ5rDFNrBT6qJ;m@`2l0nNyvXl%<5TUkeoi`@E&ClOH!Fy3gdyO0T(8dR>T&O=0z< z(yJ+o%ww)B<#fCrsPlw!d23uFOWgQt8!QL6O@|WTc9eUb%1*$LU_Z zZcKkz^0ZE9&Kk+Jgtb{pubgcj9^?+}REkYJ%X|=R6LlKPg;qghD`~?n7h1K6U>7=< z3nkrZiMZi+)Qc0O zcrSd3brDOwHCCljIb)I&=NM{~`qF3-4obSjJLzb5q+WjrezuZ+#OZG$>74#X(Ix0_ zlr)>5zwtkahf5;$mO&Rl$MF$0(DZVDQ+wr7uggk=7niIt{mn*WK7(SS)cYgo1yXMk zo+90gk?zGnyQx64KamyM0_?;%P*J-c@6D@+vk8^4+)Dp-EMNPJ+k% zpp!VThSIIGCgSmaf+To61iESHI6STdO)uf`vUoi1>VU`a{t)yp3XdarFO5fiWk@nS zb~StCJ@4WXdmr*LON9GA@{4>Nv?Zx1+!31v=(urkGiYoTg}W#^V#mfE>5|~?L!e87 zyU&6y3GSvqmjrh#uU^94P(1GTbikdy%meR&`c=4NU2ELwD?H93?n-LxOL2!9@UkiH zI`0WQ2XQyi0e9hD5$(9s*Fq%1T{^Ro&TOEws6e9~_3X@sTFF-px)?jNkxEp1r*`f^ zWhPeqJ~=rjdq+zuQRy?h;k(zRmKF~l03IJz}fEcTRC&d#NDtr%s}X=EWc%<~bVWKBTaV%q+; zox_ytwni>Bj7goSv=FG4bR=Q8Ww!^tWUY9Gg!7>nt`+03eY+^d6Zljhch-va5&L8~ zOlLOInGMy9y!|jr+N%Dgjh~IR;$Fg|tQDUMkDV5a&2f3JeP%-+kxz!lbY{b9f(xvj z#=&%EV&Uxebi$okE$+bCsUy{AaV8^`sB{;a z;tnN1$!W3RZlV+J%xZB5+-*xd-lY;%Dp3I^73f};sPutHb-Fl~gOdw75}jxChu!m2 z_zvnoJs2#0FBtTo%ijx@7kJkA$sotG#zRkj*Zb!8zFYWa^9J?xlh^V7$GIPSuSXo7 zbsRbm&K_?@YY`=Dm+pG<1PIvsvQ=?yh;+2`yb;}5XsUa(5&p|Ml6%%Mimrs1j6;)( zbgPw3|1pf(y?N&t{3H%3C0}>_>hBPiwMM=Km7Sr~(?Pq#D zd9yilb&+ITphey1{=tvzRfmbg)5gyAu;KY*lw+PZTWo^X=dN@VbqYBauN%y@u*vXR z=zv#XFK^)#XO4l>zdY;>{#V@7YH&J8oYsHrebbytJ|A#eMtz8i!s#s_V3o(=bV?F3 zrnE^Hr%`lhBMWd!x+FOLL(nm0g5&2~GphO+&}wlzH|NPRmJg+I};8crJOw z;B+J2&Bm!Zog9nPtGmMKnhrR9GtMTL@Fld_?*-QmegE20@p}iZD|~;4GD{q1d56GL zLCJgOu(#yD9xi*pZ;tp~j=PrCID6E~@jd~}tdth{x#n%CBT-S!tS=D*loXpJv`f7 zHrO4No1><>NiyQK_op{oa1e5)C#Zz>GR z-RQhYj+pImKRRxTD^C);xcLroGlj-GOT~IMySyIE`i)yl#m23LGTa;M!CO|=gC{pO z&_C1jy~FOZ`BQv>#}{Nzt+T(aPyB|pJPDgPjj=_|MNXDTfO^6vE3^;U`QP9IC9$IEZK^TQwB`H?B_@@sE+ z@8vtDrtZGu)-$oDUbd=OYRaAENu@_U@;d0r66L)#@+6lY-Rn%(hG(!x%*fLwJ#w)j zl^*?z{ePeFF5mOpAD-HAE6l08wYf`dckkSN`P9yR!0E(}sU6rvDg5?at7q(xWb)ju&Kgs>kUCMG zaH}bQp@3V^O)rrihb6o~ONTuI(Vuz8H(d3+rIH@6SU+~(_$3EsNLC}&%;mRkW|uh*ERkgVeck^Q9?)4T3^U~3GQiV&cqHt z^L-1(E$<4ay62{s##Z^#UHsVEzBxe7vSUx7S`*xi7aX}_bluu+Fne`(Jn&S9y#X(p zy#e?(dnJBv0KTEVyz|}wd^^3Yz9QGSbr#t=?JqIh-Hr_c|Z0zPD7JYjcl@4(AF&YE z7yJM;wi2wleL)l*@ys|hsYsWkFZdszlQ@hg`8s`p&*w<<{mb17BeeeS?6UuU|03bH(WTtGnq7(ixs~h6gRK0?occWI#4UV#yjuU#tBA zSBzeHwr6-!$glP;$JwtJ$7Za=d)(@^$Cz-hfncZ0ifo2g%Xx z3&QV}FO(dwT-((wQYty7k|TK93UrT3j@xhh@TB#5^7yZKl}cvnq_XthcWwCnc+MYtnJ??$9(|h`uO0rShL7~CGfmI2mMolm-+j^^Kpi8v459!4GYDnDCv;% zTx>1WEL_sj?ygbX3_n{*MY!{lQFN5H7>6bm>5|M#eiU>Phw&s|XI`?a?~_-NPTagC z%Yk`_l6=K2rtNRr&-D7gzH>gDhXj!Bx@(wO+r1HUM^TkLpa*^7$8+e#3yzKF3?;f<>ewi2Gm?_zO^vJrjl7PZnH{)CM*lEu$q!JKnpDJq95Dtwk=2WA` z%_^1FU(~1(Mdywhq)Retq_YdU%-d%dcI{}JUAVCuY^4%Vt2Lk6)@fe{M`%%}!j|AG z#g>%TIUxas*y89(j*Rt4vq)1(KwV)im4HxgNmVDjvFt@f;f>rg>nm<7i;`?o2}nw~ zC7mgsY`Ys?Ed__viO?${UMLVQ+$g;|NI)Up+9jYaaF$9ysRV@fRe@$7AZ@P4Bp~aP z-tlv1r!4^u7O}p%itDTE1JAn#NZyZmvm-&ezKRwCl@$&xZq%T}Vyp8(0=mF@VR>K6 zOIdAy+y3gWui_xJ5rK+$62+BSpXoje*vbQ2`4n5N(ZACg5OI}aYr(k?wFcDV*a{a| zTiCJ|SYz)DIRmo`7^`xh!Fbhdt@EVos{oT$YTS~si~TM+aN;c87lcpF=rU6O3&x}f z{{=LVR$Mo{S_+PCq@DJeJDf;1<5uMCg7um0_;GAqS9|c<*H_2AjE^eDr^b9Qf!3Cp}Box+u0!t^nrIL^ypY5~n2T_() z=p;K$dtDL|yq!W4N{+Ww5=tc@;GzQEtCG;39aDSn-Z8avtv=NnJA$n3YNyW6+RiGR zD81Oc(YqJl=e+mH+0x9DJQuXbtA3?cy7$X)r{{vQoO?;KOXp_L*-GYQ-Ca6SbR|S) z9GX<5Tdi#Rk73mAotv-aj?*_d&u2M9tCRyhZ2POc-Wmc)K4>i*TM^GOvONseCtPE3 zHrmyk^~)~K=B7*D+_B;?&I4usvRd>s&X#26j+OFXtCsY6An)G!`T451h|l5idwHUw zq@ytqB*9xn5;CT=Ef;T5bS~aVmjrM7K_?i6HEh%F`SGtHEXlc`L!g_6Cbz~>iRHrg zcg{ele&~(x7bWj2ZZU0t+L_)O6KIE>Dg5zXUaHIFoY0yH_cF2YTh)9oa_mK#Eez^~ z+E@&(>*^lrK^KE3r@g_Syu&LsYg_S+Tiio?lb5YMS5W8lngRT3@Vn9Lt9`$a`vM;D zWYsI3{D!yKze&9juPQ1ElcOMD+oYB@MZ3FpI|)BqNqciK8AVq@WX7RMMY<%IJOVn2 z!+4Ufi^-=DmIRZJg02cp44&%VY4QfWGzM-I3_7>@$p@#|w_3QQ4FI#-@lj~wrIU98rP!7Qu*Xed>uKJPc-`M+2r#$zQpBMnT@<}4xrSeHCpP;|4K=;0UlD246Qv#LBC+A3u)~7?` zc%uzneF?&Q-krOxpD4{>opOGEP@2DQ@vln`SqO=mlN|&N`#Wk%%%r2;os-=RKUu1kK%iUX@kgQhzt`&sxUnUkFYT@^ZJPB!y1&|Cy9O5Ru8 zV%q+;ol_XD8(u91ht!Gkgj+RNp@3WF$mlf`F(=E<>QX70qa|zT6QOZ<8tZP||D=nj zx#=R-BTM=E4PN$ltFrz$Kfj3A9*0$F>p!VKjxuadMrGH)LJU!}4Ump@7gJl{XDewh zE~cXBTuhN}wUr>#qjoWMC;SA5B$s?$OdUg55=`v_-83}IfbYroWqYI>%~({HVHb-F zrsQjRDXZ;IJJXZC%nmzK7?ZWfVZm7Y+M|2|w+&}%(J>ZhrP0&6FP`g-Sa-ylW65g< zMX$aMXVT^E(zv7 z3c4hi`y%L)VD13us?fyPsn!-*UcEGqIp;#d32OOXZ4u9F&6(*Fp>g<1W%pEeN4u#& z6Z671br^$Qt8Y_UoS9l&Oj|VS>C}onJbUMKZL!x|v|3z@YtgB!amwc2=~T+F6(fr8 zSp%9Rd{2}N;qpCEbS~eM${Gt~8|9EXQq=~*r;|LNNY>b)E1u(*%?qjXm$5iYWer_= z@&BDLM?8s=`b=ew#U^WLfE7{EHoi7-StSl%sjQL88fZ5a=yO2UNLw`ODPEc(iWYz=yRn-Cp+PG_4;nUuIle{ zcT@0WDRw9MjqlHTT=D&Ltn4*|ajf{3J+<;%Ta`Ik#Y*sftySOpk=e{rthP66pySEY z8@!y4)2CQw&z^h;>D}OGvNw9(rStRuA~el_tH|wXDSFT{|39Cfubl@g%a5Q1ii(=; znFax8V#!HxJ%V(!yDQ7j!p~NurE+Ijqv+fjR?@9jDd<0@_y4o^{;_dfcb;H1n~rIR z*l-eMqhvKs>m*;8gG{v*#-wMx6KXx!jTFBS`{M_0Sg%YkfvnPESg#S;)PE8H0sXfq+XTQ<(2a@os}0l(adtY z(~f3NudPKhXP&=sJJy@3Wsz7b_8Rb!vn<-lgP7LWR+fe8VTA%KW>BeB5vdinT2DQ^ z>fr^hTPXCGm3db7k+Ai0I-+$%S7t;9txVGqts}ZJBRUSl6?uP#d-F^!nWR07KA;YN ze{?USaEz)k0*A=jJ^c~5Mv~9fiolKVT4y_|9N*c zUQX79G09eu%{u?_p=N0xbZ2RA_9h#fy?y&P_9Nfj>mPe<XW~kxLTXKg<01V z8;xd-`(xkHRMdUnM)YF67rlt{qO0Hf)dbmwo_Vx(-kWO0A@=2H_@bGC`Bw@a8 zU5ice<+wg1A0MS1&k?Cdz7QYMPpos$OuyIlA^j&D3-KZSJMeW;ihM})O1=+8Nd8~h zmfGHLx1)OYTVq~q<1Zs@$UTwcc{wYD=cMC9BJeI<`dEDG0zRivjJ6-=l~3>5VWxTex3Ba-Urda1{(8_}B#T-@EZ zzAyfAxktjEhgZol(-OQMOy8wPT&^0(MvJ%zF?*7Ag4ty4UJzy<9!8Ev1Mjljd^n0I zJO6w9&uqta4{g3X7CrmgMs4h8z1rA_zdM#%xscpj7k>>faQtyBa(s}F?FY@ajFA?$ zZIZF%;;&^hp)Gt((`HR-p&Vet5cybK{9VC5IftxrJr{pJ!?6(jeG`0L6yl9zng1{U ze;0p~*jFa`n7+HxtUw~z)(qJ8;Kypb;iqknImgQgdwzr(Q*jQ+3S z>!K84bP+sd!sxQdL<^(Kjt<+xZ#MEUSrr(9QT4N{pB>|dV~5XxQqFdat+IGFddP^L zSE~%GNbbt&5so4upTt=OLx{xjSzE5e@$tD5N3F6xD{#lGvUcJ~$+gPDF{@VDPQ=C3 zDoZp(d-c{xS!D)nd+`j7Ei%@|DhtP&T4i^0h2^pcNYp+V`B@wbk&!-Y%axHnK37JP zPpvZR2G#SkVat8XwaN@e7jPM3w8c8X=*eJ=s#T^|nHf9fwaV7kPv3?3wTV-2w6pj% zVq+S=?#~0m*ocrktz6&V5*R|H%-7{YruO;%e0;8yAzz4;`3d-Vu8@4M>!1HmU%x85lz3{?)nK4YE3ZTVhTetiwc z9w&n#;bU!k`uV*r6#nLN#<4M?0eA1%<296pQN(7&!)xt5GeA1(3GodYfuJj;Zi1fGuz7XlL z>oh$8>e8hn=pCcwLBqqYA>z}+y_s&@^}l0HbmMA^`3~;wp zaWUrO;>?3Q3_&JV{e0}OtGrHf+<;Z3Gl2L zK=FP}qwHaw$h9Hj%14IL9cvRVuC88cMprkm7WxF&HpgqB(|B;4hu|sf|KFz~#E<{q zYa3J1wb94jJnn;#4|j*a5Q4k&av@XuaOdN5aYw!o+nOCe6NeUf55R2+ zU6cac)%Sv@Ot_oR!QHaK-9G$Q;*PqE!JWp4(HEhlG2#k%A%=(%tA+IBOnb-jimHW_ zNF94t#i(0I?ZiRRXCVdqwbeq}Qt;%>t)R9c24 zA+Lknw_FR!04mQy3dYsET1e3hUKzWCvP~_dLD@D^7LvhTo`n>QJB`z7oECzjg~I1| zIpee!*3SAHELI*@ms&Ub?f)6kr#XN%^z%x zkGM~p{uUvT{PZKxuVkpcfJTVM_BlDj)S{iZ8k>*L^{tUF#JBb$_(FVZKLuZiZ|&>g zdl@Cfw?@Cdko>>0Ew#PhZbv(;u}#OmHOt?}n-(2xN8;lKxVW}B*~G@`%K3{cmoHs1 zKNSA%2}+oQDD=O9V~BX}BSWpH8i?l-i;U?qXEyPOx<*VghD%JMUNG_8-GIvwZv`zR z-eNw@Ij)Fbw%u6MD)!kVW6;H=kB`{mIjl+K3&G_#z$fSMJo#SN=lzGobGORD%kf(# zTqg0`t#Qc(#11Z31((2Nj7#>V!DV=ycQ|V+defDWzkO(7f;c1wum5}@epkc@&soAV zFeRTnJOqv@6k=^F+%2V7N*Xf$UEKNjc)xAjkuL;y&w?)mcdvpkL>_j)_cBV6JY;{B z33qz}OAF-X1;41NK8JXc7**Oh%g215u2yWo2nr3i!U zlQLnj5r9Fi5q2GyYv<> z^>`%D0^cn7k%}u5im7is#ici{3=WMe-zIse9*;rXbs%0|Mk$JERnFr9AZ2mo6nEaZ zGB`A@d& zh4Gw4l>^=&GCMm=Ug@Is%8{;Dj`2d2(1&cO{umllC>mGppRv0aed1bvrqB8+vGlmp zZgcvtyNz8LVMDa;cqg{wWlh3?ZJ8ayT@qKOMHv%sTDD#p;POY65l@L{EFHud)2G0i zMU(?@`0-(K-_}CcDo46jIlccbCYNxZLNH11giSKu+_@e;K6)&84r>zm4#chGgU49h zH)`EYZ-@K)te=}Ur60J%ZtpZEWfr|3lm3YEK7&d2eT>O0njC=1BSXnX-#X=ZousZ) z<}j&G<0AxfOXRjl#+QpZAD@dk^0{L=4|C6gPjJewm+y5wjIZL@F)|nuKGya;j$z`- z?(dUp+qHZT_u1{8#+Y?zIjbo=H1OT%I@#8{{6Hm{lFb|d#CXyYn1)?^GA|# zf32DG^lzM)dH%4m@`~OlsWazw<~+uB3kA>d)HdQXgU^vVilMPr(6BLJw}q*%#>ss= z*tTS4d~xgg@%EtYc7JSHrC##@iK3R(onD_zZ7W2|to99$Y;?F%#>eMM8S)*luF28H z;!2rsU?0yFl2Peud4CUv5G{{Lco~HVDVnY8{yv;CK=ONdz;5rflnJn`20iH}iacmp z4TDLwtOjnn*^w8&+G8=x6Vdf%OoJx`b4%8>*p%_*V$R3sVvc<7nC3NI%sq>JA(&Ik zYHbj6CW1UMU|9`=Ikl`X1Pdt-e+}y_AO2>+6N0~!*0tF5;m^nC;*WeG_*2U&>G%N4 zY7l=WdW`$)SXM*ePc198tS|&yD0q&S(z04xYp<syfw_E@qsa29h4k|7Nr7vk{a zM~0ch@lGBN5hrdChr2kxHD}=p`S7?12Hsje!8xAD$2PN$al4K}YQ>+~hm1Yf%JT6w zaVpPYO=_Wp;PDFhHXvzY3NyAi@&7BbFoXI3BQ;Vumu7vWAl8|vA> zPtGgC6HWrn*>xxG7yjoQ2os~7*z+lSL?9`%4EHG=9!`L^`qoZq4 zrLOZ#!kBn*u0<7$N42PYK+MBks(s@mwW#8r8|wt(u9_BA4(@Ve#)%wE7abSM!5zV! zT2vW$)uKXQlB(V{vEwJ&%2I4mss}-FVawaqJiw3<)1=+j@Ed+g+4`c+}Y2;CU~KkX%o; zrMCCmZ93WAZS2Yj8*)$Lo!E|ttZ-mk{2<)5H;zZ8esF?^(cqY_(J5-D)_o6Me^u6 zc*-P?CI;mZqp~sa-X`)Wjl34)XTCXeKlcfsJVzp9#j&C~Gms)GMG~0gRg#3h^)Y z#T44aMjge_U5m5ER*ZPLibu3sF>=Rp>%7>GdIb^*HKJYtrfrTX^9p3CnHz;(Hnn1G zAm!nQPfj6fx+F)#QY!|1k|$NJV}F@6tUN15@MBpq;qpkWnA3M^-cJK#iCAQz#lic< z_9(BU=;Hqy1uI4{HjV$sSTW%kQ!7TT7>t`13h`b>D`tJIy}bN%8r>|?y5^5Ghgg4C zn;7&RPc}At`}S|V)Qqmyo3}QPM|H+I|3}2WHcv$L@ARVj|Ael(wh=|UB=$Lve^0KO1E*!RKLMJbXX zv=C`M2+98|+fv*6?e%ra|q@x${;hfj4u~+K0baA&tXj>UkK*D3qCoA=gIfF z^9_E1VgdL3ze_>Be`D*Earo zA%YwmubqhQf$liI`DwJDithPNZwe(EhYnf0wlNj!k-H$4`WWtokPmwt*DB8vEY_v7 z5K5|qJTuW$Tb`xS)FRBO7ec)d81F5E|MGev(ii3yjp+GpN)cuNQmZJ|kT@Dhv`$ru zBwC{#Z~ZIuOBba;gR6!VF%ef=ilhaEgki8H<;7sBT?qL!GiuZgdR@@Z=Hd4~AVJ}Vb8 zwfK=;|Fw^gzB=1~O}+!xHF=E1jldPt;FNdk1fPn6_qs9G?|~sC#(EKaU6cYD zHFg6$Wx~;v8)K!6GBMUk{8qtHcx-jJb*Y2;-|=V+@zgr!E?ny&cG^qkE^M5bs&Bl3 z`FW#_t%K-up>fl2R!hV(Y6{1SJas<3PW3Ns z$NJv8wl39JHo?AUwQO+Xf+)|&94a+9T39%m_#|WdL9;ERMx_QiB!>ivJY=^CH+Nh5 zGQJEpwk0$4%SC7QJu8 zU=g-dMwt$DDtX3mx81%YGRnk3_u#vyQ5vkpvI)hQ#zQq8igD9I;WMC|md$f3&xFTA zx2t_!>qWaIKBL-K^3=BN{EI+A7p3xkWq<~;&m;I(BGJBxqu|)5;)q>0Kx)P8viJ;f zv^t2R@Hpo-GgeU^jd%=(nun0bQqhc6=pf2#*WY{{`)C0O^;sdZ6SckHZtt|E;$*B^ zUn73j68!Mq(n6se3XX5i%{?+i?vd!9+<5|aOml?SVN=Enc`y_^Nr^QUjsfzq?Ruma zu+JtLFRmwT!Dd2R_?o88nzVot;z>ILJ~;=?^m=a0hB*+9k-?CBFKb(uJCE%yN|7%2 z7I?~pp-I=1Mhq<{7~=gB3~Brloe@YHzpR3lAG{V+t&`kwuhvPJWVndl>!K7%h8y51 zlVli(vBcI%d%(&Mk5#I5f?J$Y9)2isg*=*-S|{kBDU@njCkcLdZ$+~Tet)Q1CjyPM z&cl#eCy6yPy4Fd8p+4(GV~{B(iW+L2l-)YHuzo%~201@F)XbH)U7yu&9@-ecTHA9A z>%=Cn^%}LS(fF<3-MaOA)>xA{`Q{Hc#z)*IJZ(Y7qjl96z(cKrPaXPx$j7$p&-xtp z*(ClV*PrF%YvN>{!vs;py0)Wm!^F`~}uJO@J$2r+MnsGtaG`!q)1_`HL%;u`m9qu)rqv@eCAd zXvAW09CQAWVb+<|#`CZ!nWKnDWRR*6lh_v#lc*Qi-X*x4jqgbE;lt${y=0+TT=*_VRL;JE1gk)dSdn=USY`_RG!aYzha|M|kGzbo7JLiuoa2=`$Mr3iOR z;IT=@zl%E`AMdw~JMx9#?pg5hTp{^h7k96MAq00F@V$&uggf?EnQ*r!1b18$>f&xK z!5!{zj62?I!Ci1Xb$)gjc^KVraYx zsFjsST1uXJ)?f95XqQRSgjrcwC+A9<)pq<}@hVaP1@;WVS1`<9Mk(^G9|TXCEU!Y32XUFj zl`~v=;>yIO#+7f6JXDXzAnrPWxT9WBCfpTzJczq2uAJe{6IUkgG_HL6b2jX>c zXE5#h*}If9%wwFyl`~1>i7Qjm1g{&`xH5-cF6G6v)XLgzR#pz~JaJ{>E_l7M&fd+% zoVzm*gAI#Gt*p2+#=59NJd9J|E0d?AaP}@`AM+!-vd`)OKtDB z+noOEZev$Q*bs>y@5FYztVuYqEwe+oOXAA!ljFQ;)_P?MmrLo=5N!2_m6udg3w-D;MK(XVxpn z>m_x)G9RdQok^dMJIbmu;ZEYpTj6eturl=>d%ZGomxh&#akn!w>G@6%U9TL)GlFfM zRO8C|7^KQqCJc(lV=D}95mu(%VXs#v2Gg)|AqI6Oz0RZu9$F~0UBy-+Mx51`cklhT zv6UrDLkdUqZCbCaR#s+dtCbbzTd$;*mE&4BVdY#aD;$?!=UQ3exKk@D7j(|fJPbB09`Q1}vQMq75wfy!FlfTcxmH#%2Gz<^D+|w( z7D{QYthM&qYL*DQFqSo39_)cPxF@*=k^dULyImMlrez@HlPn8hpdDTmQ~s=6$kY-q zb=NBU_?kG6=ddP`??Bv2K6s4f(Tjbt-RMi$C+Cn;zSo_t`x6{HMg~K|$J$;K`BiMc zj6%P|y(sLLDYK0*u27wt@keC~wOr5I6*ukuc6+B|$_Gup!S~A#;E%Rq$}zC4s4{Wp zgq2h2(!iO_IT&M6BFlwX{Pr zQaR3PAN$p(@xP^*l&EqcCO>v$n0K3M4s3L?As_ZQuBT9nut$vAeS{{nGV{3VsMU^e=nbpei zJ+|Y@i9D3Z@}0q6Q}fTu$cgG4*Hb8py*?edUQO&}(PRsIW|guBdlFGD!k&6M)YF0I zM9VxYN*PZ!)|K(z6^-b5wXW7XD{Hu+!IbAqSL-U#Ds7L)h+9{wH{Fsl5=u^I(obVl zW!6RB) z$a7ee$QR-(e;#~t4$qVCb$#VO#IX=x`3vCdq7?Yb$KD1{y3PV^`Cc^p$lhPw~5t6;DxJ@sz8fRRT|p@;Z2u zC~g3r=7x&n{(4Y8)tZ}!Z#@wG`6oa5CynXlmCrwWu7md;G?0OPrMPESg#S z;)OVyyJU60JDCS5SA;zBXzU#@gvg`E&& zy8^xtjQtFJAsG86__`i|hnJ|{jP3qVA7?CASvm`p7L|lt8rd|Q{3Siu{P>BE1 zdIi$d&}zl({M)b8E09?8c6@b|yaG)3OtQQJX-el}JgF5Ecb@ski;?olDdf?x)QUj| zO`%ZZs!L~K5yy43%cNoDS}_JcytiV-1h3yyE9Uf_ngi6p{UH`vXqoVSvF&=UTi9ol zS}{p)NI!7PZtt|`I@gLZ7@Nj-ixm@$F|}gUiov*Pp%Cw7v|`R)ZlCF#I3dxPqGCqe9A7l3`IUWNLW|x;|tdpX=Wu-vR5IydI0Y z9`+gR3-ND#4}2m1t&8C6q7?YI#%_QoU2B83{J&`Sk-gt;@3dr?>h~eXpt*Eu_0kdZ zYZyzLK4q{Zkr>5Nr*rw-j%Zm^)?FVrZFhcv;D|NH0{Pf>wJeT(n`GQ5ma<-vK8g3h zEONIkODQ&+%PFqtO-*H#L}H3?r521@Fc>#26g~swIX;Cp@qtIX z&|S-=Di%!OT>tIPCZlBd&9@Mx|39LCY^{t&&J5fsNGme!IQX zmW(qyQ!JS_e@7CB5i2GbPeXYG2C{-+hV#N^Z=4zLcY{~J9t%E=OSCQ491G-Q+qGnt zu+JtLH?GFz!_taT2WUX5#*tRP)nr%2q;Otmd}VP=uGH8-3UbHlY_HhaGWmJa`Nvv+80^DEtILnjQlX1=K(n91%gkq&!s*M)r2fj;~Y>98ahGPR62S33CkT7()X74fL>B_a<)Nb*%g?O%2M&)Db?UG^2BcswBpVaX) zz0U+Vi!i0}O^t72+_X@rrV3wK{jp(^;N{N0;W`Dbj>>Iw0>owTmSrqAo<<7=98Sd+*X;&r>5an3S%3G(Bd>q(#! zec2c5eA)y%i?F2@jaoDqJ1vxwTQnz*%{+e?a-e8L&p$lO-2U3QJ1d53&Ng3vY=IKu zsa`Ys3q*#oeWi}}`+CjV#+CQH0l!#;vak!{HnSKRLcUn&G#El8$f{h()IJH~<8vhl z`9dVfH^3)ShhHt<>&_1NdmIayDf0^Wx+q06W%huFMM%C^wxzcB+igylaJR85BW%b$ ziFaZ<9?rsnZShfX*KF>b|4Zk1jQx}P!^!o{2MBSX&*$+Ea=(#ac4%MMkMy+X=b0Hi)&wP^=vpW|cy1ayvRC z){sJ%e9s%ZK$m=siiRQ4Tio@d#K43p)P2au?FUh~E&9(zv~3bS$(>i{1QbMdANDWwzyi#b%w> zeVKI0$8vSaWNTK1jbDZg?JacB?k+4d+q2`p9=Iu%njp-h;F)4 zV zV<5&VpHT*@OD9g82$QLrQ4YN}NO}2u(`PN%eV8N`rEG=CMdvF88!je&d@d%*7lO%W zz!!qa-I!5s_0pv@TMy^Qq*w~iC^yubNpe;NPGE*Oa++u^1_KXWae#snBk+V0?`q9n0mWpn95sm zv3e=XC`a#QiYd(~XNGriMV|-tEqcUAvq_bHiY~Svd)Sueu8&W1F_^AHM@iqsd$4VJ z=Hrf(zLevlN6Yp-(fvst-=!1sZl9w0NkdvNIa(JpV5!z+ZX&ASyx2?GIdMzwzH7z! z_-Kjn9M&ZA9f(`W2amD1F{5X(PtGBye6Q>BEuWU|Y^yin-o&?pJTXp!ISC z{Zb|z<>kbN_0s13?ehfOxlD5Z0Wyi1D#go8Ev&hjaQepX&mqiZp>5gTQi({Ia zMJ~~A45~Dy>A_SrVw&rDS>%8z%_5gdje>@H1*+i{2+bn5?TlCNenVrLeY0LP<5i`# zt~7(3W5tAJyc+VYb2)PaXvIWo#iU|Ly=)$h>n8S>e`e--65KTZL*^AQ0nQ>X+x9ca zrSVNQdNX#mZKcsEEBf!)=$tqp9 zt?Rad^A<|UW1Qg`+=hY%Vb&P=KHe9?Sffn z&A3;R4@w1+JL~Kq_Jz!jS&q-nK4d0{D?NOC{4G33eiQjZX2*QZItNYf?9IQ!v5?uD zFN3d(QZRcn_7Rq8c1$x{_xa3o>&didtU)`6eUSr%`NO3kwI7>3e_2Dc$bDZK#ah5(_RGuYWkuT4ZtZ{uf3(p!i%xZ+%gques zRBzlx8RO>DQR|m$yjLOm<9X{^Z2I&^AD^o~k}pJm{5JS(`7Gb-uKxK4@P+7)-v?h8 zrAU9ISEfw*<9x3Em}HEj^_1$5nlTQ&5k?wEt%T>{&Ss2@*R)B-xPP{bvQQngK;yH5 zPJ&1L)qE0@kJ7{SReu)yY?7z8>uvDyxzd7sA=2VY;0uu!KLKBewD>CcdMHKGf_+z| zEL1~fjKktMHwzUcqnj~q>BODQ7-!>@8RHIqVi#d`8skmKhgD)`FADLw6;^$j;9RWw z_*|@N#<)z|j_*-@>-S2;(__In6*FfI$?iB*#yBjvbFqps;AV__Dm-J{a9LP??OJ8= z`(Q>p(<<>LN_y^5Ka4LvXYp7c#XE zM?O9mN8}5^(HZcC;D~wfLvTbdNf)IEM{j|rOgNg%#nEb-agp~h#ZhpExNYL-TCW+w z`&S?F%-@QmMBlZtQH_ljj(|pO?D%Wp%Ci?-5-RZ z1u|N+8?5{?VJKe)B^lrPWRPZjvqtIGO|?uaVVQ(yd>dv~Ta;s&BpKgSD%92Yo4=-; zmPz@2zgecYKFJWC>213>y0;gvD$*E=;;7O%TD@cxh<+S}W_TOUQ`Ri#`w?0chIIG*X^Yt{kX)LlAjg2^-Y>U;0Cwc{lJC?1y zW=jH0Q~NA_AD`^3I|xZBp8fp`Le+>`ix9E>OT%EhoPZ#CgApS999{Jd6% zp}_2I+s}qL6>WTHsn7*skM@fX?yl$2ji}bQZx(sCU~k~tq7hRYeh4* z;r@k?S}T>XRzfqj%{}@^Bcay)FFyXnr)p!CP^%#;TfdaM;jT})c07t+!`%A6#WcCi z*PGos+VAT%Ya3VIGwRw`!-9)QdZL3*N<;eoLUaV5w9bsmSW&X2tu^SR@8a6tZ?|_^ z`^wAjiM3zn_#^hAq?%V~hBn1jeE*6*@-nhDtdkU1ac7KmQLz+gVHLqul98@C_S*ZD`q!SR~GWgE#8|DZ`|kP zLZ%ko$DKRi<7?tPp2M0%z5{V9`QR}YH`e(g_Q^Tql<##juKg6pj*-ET@UgbN2Vci_ z7o`Ya?2|I-gVVWdn3Ifa2k~1|eNZ#5p*O-vJqMNW90X@vdt@kyaov>|zkO(7f?1oc z_1;@&ef{SP6C>_lW=19ypa zn!1;=_hA)4oA=3U0Hkwf_ z!A+f2h=sC{@TZ?X$>8I2B?I|FB*Wd*tjZMc$;)N~&8p2C!uyw6_?l7ePFncEnw8IT zA7u-_O!&!Ly#UQB#t${<6hCI+La|jcT)yXx0js2U_>JUkZzI3PdWsJzL+opkW1$4+ z&sj`PPd|Nf$j9f(A@YUDp=ZDsVxfEwd?6OfMeub|iY$~H;3*T1rgANmB&!-dIVp}b zs~UPEjMO@*gmt1>)zt5c$98No8DQT{>!eJ6t9=v>3C*geI8q!XPY^sz>^0UN z9OY$I1CBzostsqU8i!2gDA=>3&tsH!QHrdTx4=^Yd6Z^W>+_g} zXI9%@-W=vB*yxRXjsnHe$m3`^C(9?~kqJl^<;{8Ik%xy_$@9xT&)I#Dmw*1rPyR_` zdU@sZ&z|dGE=uF_%K4S{+Dc>g$VVHqGxIY?qN8{o9gb(R#?!7Iya#M^Cl{YQ7QJh1 zqIO^Hz2kdo@2`EJzPI+l+J|Znj72kRU%b$1pGMueoYbq*>a4ubiDs7Dopv;HdTlM5 zIrIF53oFlI-yc2?MlJqoSp1q%O=o(k#gB(++zBC;N*quDd%uRI8P#;waXgCR51nvno;f1p=L`Cta{t*(b{izHm6rywegMb zAgfxh5pDkKH|llldtdK3@^XISjg9X%@7e54LXu1_T>p909P#=13l^Mw(qtAqA=0E{ zU5ibhH1YAd(u8~=(uA{EL;~60>#ouK-*7Nwwo4CuU6cZ8Qg47~4~mfdzp^d0z29y# zIO}d>S4P;7dlK)&c09C&1KYNhvyeO6CCR$R8GWgC7MgYK&f{(ZxSLSiC3kxkmEtbJ zp@oZz;4aC^)`z>$tZefS4`UV8l7|9E3oss8^3G%ub!1(VQ8dm$eP!h1JGNYqXQ^u~ z9Sp?Ta@@n&hdjI8SZPcJm*OsDa2wkt8KU-DK=Db4CGe1sQi4x?^0ED( z*%r&d=c9Hdgpbda5O>p;-NXM@Bq7)*Rmu=$`MQ&=ZRfYh;D*I+XYv1$aKC*S+!jyV zoeXXV-m^>axi7f|av$Q_)!>Me5PTlDuEnNLgY)sZ_#|J52B#U^Ovg_pwW*R9NnqC> zo5KSc+|D2IXK-7-6q3R1WN-#Ion;rtaES?ebV-RnCu#Fj@Uq{uMeh0dJ_0_<$s)c( z=6b{ziPy`+)yFSp*CO9%P~;qL%kOi&67*g?P6k85$9hb5qRH=Vq3}10SDRy%a!~#U zG{;`Shg<{AzBac92q)Y8yqNX9@x`s{$J?Td#Mi>Xd!qYKoxR*X(>WQOPfbU(j%W;@ z7D~xSbZBNX9nm_Xt1+S%Ps}`j7_;_uZa?nV)}%hDN<5=ObB*aUTA$GXd<&)QT1Q~^ zJRQ+GqN_2YLvwNIh}IEZjS;O`v2dTlNcHGSXdR(hvGf_O&u9R@g;H`oIy66(j%Xdx z6&cZinWA(=>xiz%h&B#s^+)4=ZB432S3~R2>`7aXaJNv( zZW#vVG13vOBf26ZIxwq{j%Xdx6&cZ*(+4*yh*XcRgw_$7(?_4t`iutdTPP*hqeHXh z=!n)4U5ybPnukV5w2tU%jOfseFFK-iL|0=(YaSKcr!Z2>uo8N7XdV@PM(Z;gz;B_H z+%gQ!KB6O9M|2fN^wQB2fh%X{=4Xd_E7qHC=0s%qZ6L#TboI$!O!3%l01J zeIdy$L9KNYjRuyI7YO%Z zDKtmP4#*|NlFFs-$Y3dXiEtm5LbIdH%@6a|l_=-kT=T?I{aSBox9E8x`AjD3LSZ()8V2tL@}v!u*}7o@b`Q zYqp_eTy6EKp4tldwU&;WiNl2>dPoV8=LLX-7~d_@!G5}l#p!whLZySxx_706kI$73 zRqz6o>CKJ#UVyds5%c)#*SG?69nCkJ!+6zh40_f61MqbCmz%vqW1C+YKeXA~H@QnZ zYz<57_^>5es;PZZ^C2JG51MW93Z2BZP2?rH*z)nY*dkwu=Jf^eiMGb?lkassY(K`a z5D!}yd@KcCf%xAp6Sf+;9=7EaTg*zHX;1!rqtt$nOYF+3GO38|9U8`+#EBQZU5+X1= z(hlGWR?N8K$=n3ETGfiFG@jP-@f4VwX$NDRU)lUh{of+S`ORJ8!EU4w%4V#)^9MA> znTxH8#5mWN1zUYF&Zjj?lr{9XY^pU=32P=aOVs?4VP?eCCI)B3aGlviwE6n{0;R-L zy=L?m2=Q*d{@9f|+VAT%Ya3VI{RY?1pe*cywP^Deeta`!4uL1cCwAVt7Mt{MkzAjc zkI(gqkuSt2_HFQqAC2E9-|Nnl`3D?3Mg~K|$J&mAejnRi6k0gtS~v+57D_ry020v1pRBu_5;)-i7V0)}qbl&Xl=yj_1yzq}EPo4y*Zxhw(Ajk{`!! z!godYNB1V{I*akP3vgzSPr0YAwssKx7J{?oxQDY38AC44e0(m>$af&STs$UuO?NE- z-`#HiAM(8}&i)R3Avk*(d|i|xoK1nJOgL-i;%qg>8K0FY&O$S5Db6~b%jZt7cUIQW zeZiDB55XRv zi2nSOpZt@?^zzE*pFP((`spVdmsifOwAWS|vqwJKn4OuQIT9Vk_&eNQX`en9E9(#5 z1Gc%7i%%Yl-ZeH+yRY`%@jbQo*FI3+Tl-+`L$wFSqM5ZXUg)$>qwZWz>Q!ms>NA~{ z7dp|*a=X)xW=^lIMKfofzi?sYIqbuQXWBcaogK7r=+pg$?s!rON*~!yN7Zg%2wV6_T57$LUKLX zmfGHLw|Cmx5W7V1rL@jsGL1hrn+G#1DITe(&K)@$ojR4Y&t6zRj}2=n_1al;-Xyw# z{%%-&6RaC3sYMl$y(Y4-#zu!ezokqV4`LIgN>_sWU>gVJ_rj~K( zV%5jzVwHR$SbY(Ef^UAce6NeupW;{uR=*Cu9!e2b*>_dK>hvI1ms6}R4`6lK#VW=? zj8#6P3|5~C&mK3NO#LSptC&v#uRc8Xqb)n}TujM_M=}tLMR;5wqeX%X7mo`T51Yd0 z;*oqIcsv8X5IlYtd?9#bgrJL3fXA`7z*8m<;$()mR0OV>tZ}?|DTacx#?1}msgHg= zh#`3CM;kxvS0N96#@+!#2!0-u3z=GQ;o`@~=i-NaA^153z7YH{A{K(5Rq%CDituwC zJY~YqL@s`k1xmcPDSm=8#VLN!Z7Jn>))haA{IhMh(ZWx%AgK>O;o0G~n*n$l_Ei&J z^Qrn~4>K}GTNc^RQua5=jZzVBQYc@@$L$AExLrpfEhSa@>61l1K35izFGLnS3%(Fp z^eXs5WKjovU6dkObQ3&w|H=Q0-F;;5x7$1I2gzG~zGgDRP2m@%vPd(-_1&MXHq>ig z0k8Q}N6jLnfXr}1dE-15{>WP>Ar`(!0ZIZs)nwb13JVUr87Jix5r{-Jut7+CM-oI2bn8gysIC^xb=+j$+R{r5PHhX)=HeZ^C$83JLXj}Wx z*FwY#$biMlqkfNW`omga2Pi&6ym?M+2EcUA{*RxHLiM3V=5R6QC&2w zBFV5oZj0mztr}O>DbgqLo_ZEfl5OnD2pb};<#?>n2nUV}Qn@Q%#?{i8}4RYrA*pY zeq3ce&HTpun_(z4^P6JG8iLUu7+Z-Sjf$bfVu?E=>D007s4IY>G}~K0hC;Kw4fpn) zoOdfscQw8eTe}8}ns)>pF@-`8fQ=`{SIUH^{P;?i>5czGCX+PN8@eNiG{#a5i$6Hi z+fG>g8e>t5KeoE_Bm-wrmPs;rEdDgZ8@1(3GK6M$+qSh5sl}ft6l$#uYFAaUR@z2~ zaIBT&^*RrK?9oSNXCFDjaOA^HzNRYu#QsKOZfD|@U)g-=Bk)4ccX!FGuzi-^=JTX! zoHE~Pd8cHuDL+n`WpwL{Q))&xYvga;RI8;DR!eY3x8_juh6mPZUOOH|ul1VI-^N+o z=DS%Iw|n1^EN&wnf0?!b5ISk_?qS%)+F+U#9v+npPa+<!ylQPXEw$@?V>%z|AXGRB6QfnqSgWGMz7rX_?WuW+~E535IvWnm< z$=ue5uh7hGLs~im@95o9evS4Tm)Y>^I7c#ZT4|m>xkI$7`;+ z>>DBZe`Q;0d%xYLf5zRmVnA^~NbX5|Egalx?oHl1de_=XrZzqsQ@ItKsqMDPtt2~} z$}N>!7@JclP7Jgnax2Nq)+e_#Gh6()3i(h^LM1#2!I{|}8OoDz-CY~=+lLk=Oh&eU z#`^lt7bZqrLeK{(B+}lUxw!-e^3hVJ#y~!{A2i#dH9UcBn?$>CH83BatAUa4fOSD$ zkHww2`8@W8cn*FDzGEmt^7~lZEBar+b`PbpX|FT;nRv22|oQ9*pObp#pjg4C&z-p=i(3<*tVBF z>S}HL)`-hW$~++t7BzbmItb&?wWi`3+GX-qgNgm| zdx=Kd;|CogB@c#Tb&^;s(l-~UpB6JqY=%6p;$7`Lrh=+pbr95&LZN zNd_OED;dZaA{m|mUx;M*9{55e!$t6QQHmtP4e*p{h0s(^wkTLBX%;qGq?x6XEN&?D zX3q`xZjl^oe=o2!@;C~y_Q%oxf~Bo+v;aPvd^lRLna~zK7f0j^!O`8c_REB$d~1I# z#S!meiX+XshTaGx)v_v~Wj%f3L>%ZWigRvXGQ9gonstrP(X4CegeeqiTy+#f@tbVQ zFBx*Pt}Px7&bqd34eMUuNHr|QQEZu27)NR5wLT5&={uHrEqX~~D)Hkt#7cQgp3%;W}`}kZdg?u4aie@iNIy^tFzn+(Q4YKHtWnOE%q;ZwLxC%W3A$VFcIFibTCm)}S zC-Q~h>2AhV%B0)n$5nDOuK`b*c}>P?QLR>gHLU*N%xl|?t^A80A+~}nHzRMcP!kuT z@0Ub0(8@Iw9Cc?b#3r9~@bS6QfqWs-L1QaPujj{B*3;~3eX*6NL$j}K+w%Vaurx91 z8Q3(olEilGl{@D#EW0R0G0L~VQzk7dKen>I*2eE7QBzK1D^HtOMcr;s^u~9lY8$<1 z)MNdMqmjqaaz2hskg^Cz`erD7GZdb`EfhY7<$W{MW8KKiE7&JGD4Kn3ZVyo1;lZ{g z&*HETc4dT(@oXzTeou7&sk4{cXF6Exbu4f#=8<8nmD;2`6YScFD7yNqX7t;KqULM8 z<0kW3^QAi4@9Q0}ZT3F#qs=SL?#6eU_aK&uw>eKPT>p909C1Ig?bDUJ(} zI8w;RwmWO=BKFxNqssLo`}p`hJcl)jdAvI4!^PSH__NG&?y&j zPlSBf0U7hkj;#dgw{sw$qlp^dM1W%c; zx0s8)B!k-mert+7&ESUK2qTT7R>CuJ=QFsyx4ugmed`)u>YZCcF@TnQx;_gcE zIAu2DBw;D+=B0U6v*24`^7IF-h!Fcw=VluS_d%S zLMgkiBQSfAj%Xdx6&cZ*#|Jkmh*ayS#4|cHkB>g1^%)J^w@^y1b%bWg(Gjg9x*8)o zGzX22XdThj7}22_Uvxz4h_1$n);ub>Phq5%VI}nF&^#*ojMir~fZswXxn&rdeMCpJ zj_4|kXv~fdepB#J*-77YGbbXec8_lgzWU^^Ca!+#R}&+ih1AaE=gXrrX`Xj{=53Yd zY6-_}^5xO-@ws_)$alcHAg{;bX4ife`y}@c+2woPOo*@ISV$(s4*0q#1(^`XZi1&w z?>otRs~p}JeCZN?CyDuWOg2Q|$)pP@npHA4zim7JMWNpWV!{M4Cm}6StBNl}~X$jCD|TQAR{QrEd}L$5Y_U^!aA9 zkx=XY7axD(Q?)S>|LCDwG#!89!_bXEeXrTO_KVsWWEAwicXzM#rgn?&*N{#@?ZcMj zPn-Y`JC=NGyE#rzVxLWN6Wko9K0fMiJcl)jd?C8u7r-ay@I3imSNHodj)mxcUGT9K zV5<(6Qt5t;oGjST{gy@dW4_Ex_tQD@yni929^4A}yJ*dX&5_>$?F&+3Vz)?$Jr+cK z5<;z+YFjgHbC3JAufQ4lJAfy62kPn_NP(u_0dxh&A~mpB%}TnaD&DsA?ZW+d3S1vB zF_=9g-C~s;On9kNQbc-;Q0WGko>>0 zEw#PhZd09ex3McDY>a1HvHBMeRoRE*f>!RD%9jr7tCx<%XV5auq{GumfJU*@>0CZ{ zdcCv4*Utn~UTkK{I$Q1={bd|ShU$VN*1Y%RQ!GW5!O~hjmXhF1A(kF}WSH2@TZ3}x z;H_)DCajoUWx>!_FXY1&J#&Jst#EZ*E@WzX{<<>C$JfMpJcl)jd~|62ZWklMx-ggpvE1vKwYk39PR`-~U`dE1 zFmq?{G_G;ZigTmQ0!C zl-H6ma>})2g7iMMWYm(uIB%hp-I6isqY5R({Ptoo*Lu-z(Yh#!g~Wzb|8aOMrc9A~ zPb}urIdg;iV=*Rim10R_G4cRFeK+Hp6~NMJK9)?%EX9&yNwF0Bqiye+M=q`9W631z zD#p_G)XhF7CiNP*G#IgB0Q-VK)nDM=Pi`7 zdjU+Uu%Zz?KR49Omz(a)m)|_JF^()W4a~}%{N1fvzrWUd|9@qTj5L#P{s6}g-+CbW z^G|;APa4z9E1!S%T<7SgpKM%SIlt0gTWQQ5`DkNyW`5>KbQC>$xV_RoeJ&1jJ$Mh; z=1wj?c`SO@*hKBV+Iz?M)ZSnFKz(oRgS8LU9vF*e*1mY5(>{&5b2+J3rG=}{bXH#I zL^I3nPCJ@8y|xz3oO%Ajg_Y;94;P+k@0bR55WicUi zqd^ZORdg_$#Tk#(Q|srBoQ+PMN;b}3SU-;qd+yBI+4xLo4EJ)T6ts&8)(w;_PHGaM z72)*J=1|_ccZzY^jDGXOMvPe-tDm@tUpKmVJ%s;Gh~tvvdh*xnOx0pG!WxK89n-d}TC1 z^1aDc_G#~Do7bB*hwWoKg)t`5pO()HHmy7 zSbY|Jat_av?{%^IDvpI9mP;p@RXbJZRx}v%lJ0Y*zDb_ITB>pD4r;{D~zYyjBiUP0yDnNJ$huARYlib zn{BfgNk!F)B z{gm;xAA8sqJ;ulP5%3U8MSO?M^<-@GdU<&G_{Hp6V2M71BIj^hexHknui@C^WH2Or ztZn}yzqf_L-z@&SDYRXk?G@~kYoOWJ=Jo)g18jbFi1oekKZRWxVMCr#@lI@KD~e#n zgk|~IffYq+#Uyv%+#0oF&=GlvxQYE`k`TEu+SN<4peX(yG6@l!>1`-a`9O{lcm#Ty zW5hry(!2;BEZry>mU8D0tzMGFMD$==+E#Fux9#Svrbl27xvF>FilPSkTS&A7H_}9F zC&ZFDDHk%eXeq8G~8Us z(Evv^FLcBdifh;3z`inN&hcnoNS-s8-EHYaaCW!t&D@3+1ILn$JfO7(E4CaB43CF zb2no#Wx|vv7L#Uo+k^hJFs0euILHD>EtrZ}Fi9|`*n-)v)-|bGm&Rhccybi@xZ)XQ zWy+f4)4C)W<7i!>+1<7si{Z+m-SB>E_OFo7Uo4syYidK}WBWm~9Xn3ZUPQ4;{I;&P z<>Pa;E%JqEThD+`G&Fv{e6Q;-{vM8n_=_)suZvQIr5oTW6PA1)0SU(R$6}ri%j~xO z_lMFWFpu@z8jHbr(O66nw&F)hnXu)F#jHy(rau<*bP|jy())B>x325PGogh-d0OUK zWt!b>r`K>#;f@Q9n}#bLRP)OB9aHlvQ>5ObdF5tz!wk)13~S!@xaPH&bBm~4N<0YG9Q?71c#d>YLOcQ$kW0DQ-LSqa6ieIlR%>>*0WSbO zGa{e1@~|y|&nEG7xgItjUlS+u9M&ZAg?QMW1)rS5^W=M758JCa7UE&+fUk>EgeT4s zC=;GM-s;@!Zc8ULyBls_5NSNK8eV`qn%!-}&hGY~HM?8u`D)@RR1rlS_v%6ts%~|w9#C0{^>~7HHJ{9C) z*qQ8ZHcs=iyZz}6{9?`S7J}CnZ>~i?ytXVJHigf{EBQk3dIfwTc-8D~=qS+sq>6^m z?uG?C352)I?)Fr8cDJF{%Kg(|wvWjkGO0!*o-vgcmXOce&ix@)*n(Wh)Pg-%ruz6? zjFK+|qi4Vug3<4SFGQxE2VWPZK&Fnp1)eflVUu|oKGw3VZoG#wtMsYxtZv)IQIge7 zaa30v<$KyIf}=E>TR)CMv$+kI+56Xn@+j(!IEL7-LOxl<;~}z$*>P?1$s!-0D~re% zB8yIeFGLo78+;+MXcc^2lp@}d* zC2vz5aXfJqiI5LZ)c->8v?LcYwGU4|J{M2q3&E3m*pm*=^{}sH+1sYTmf=aWx0zvD zSgD7-3LbV?E1}ujwrj1>>Yq@nKT>N2&kjCSsd?42=SWqoepx6KOZQANgl28qwzUGQ zf3)8;EQr%4GfftQEnNW37bYNmm8wsvwN> z77AskJiqgFv{!IkJQQg5wYfb&kOwwD6+R1xL*|-(>O^RUwry%z%+NOCQh|3`NVTlE zC&pG$by13>!gcVJDeH|#%Stn|^=nyAF9l{f+^)r+WM&(29MR7!)D}~2HtQ23Y#I;ggRuZ5wotZUnSr-6y5z*33EM%?1( zb5_WQCBYGETGQlX+qL)?vCk&4yj?8$_*^WJFT~>442DUs=jPE_yOd^Gqg85QNwcik zgLR9xS}N7BR6?_?ZBxU#){91c<`f7b8uS6LqF=fwMLyt)U?|P1){mjktZIrO426^w zL%VaW*Eur+`Y{xoO>KK#XUV2E;#NK_KOy!r$<^n$pE8SOD=U8i$8GXi`3p7^+QR2r z`Q!_+^6zF`zfAg^$LpMCQRDr~^f}F@NysN9mcS5_iRlTskg4VA@A`s$e6ExrUx<{r9q$h8;kyeg zmOA_7Fp7};zp^d0z29zgF0s3fT^V6R?n%58+wqVU4s6R@=Xe)g6Clodi^*(1U^cCH z3$|CG8bm~;HarVOcd2BrM-1@1rm)mDLc#WsYoQB^JXHJ7gF|iNV+Jllw zo50Lz^N$YoUe6nTY{nVWVw?&-|J4orqS4Kk*1&%!B;&!=g-sIBBk4BrAii!UOXn#^g>05LTE~iKZY_pB! zLD)*RH2e=SUUA9$_`h&`2yPcOTiU0eoN0GDm(QJE@2squ?hdN*ycT#iro^#Baxu#N z9IGrc#@Kdasted>lZ-zXqYE|@+QP>%&o*n)0!j!*&wx+PK{LIci_zOLi@NmI)^dKf zv_;L9rZ~FTmj@tH9P#OajJtW6o|Z4=W=mTE0YkB7)2&TX?vWQ;3| ze0;7fB43Cs(rjr-ujfW`moMdJOIthInk5b05k%@iuYw01R!UeVjk#^E^~8!ENCwT4rYm}U9=WPW zhTJS^uu=kXw9R=wz>sE1qpwx1lqvK9wXL`_*dcI)U&lw8JZ3&Cr5*p=#G9UJSIL5& zfVcT-mNe6UZk6YOP9q3l_F4V3XhN+1CFcu$R=o!>U%u@qa{OWTLKT2~;GH7}aq~G&|bN(H)(EOn<154@-ihA}lS+g-lJ{kz6eK z_*^WJFT_&O>}YW}N4eS2mh-ct0ZW=4E$OzxPqkF4VX0_#G>xNVV7{AilrlxvJsMVS zb~MbKJT~+EVR(BB{l9Pw$JDz2#mArcRBcRzJ#IiPnvOrSd+}@6|En1W**R*ZpcANp z(kC2u25L}MW_;ylN5ia1#gJP1$wI~vyDpN%gJEzO%94J-0L734j*o!Qa;2qIE=L^tMpSKB5CNhUtjb5nYiH9hkpMN3@RU zii~K@q=g$5MCxs=hSm|7NlTy6`iutdTPUU1qr-Aq>4?@5U6BzTm|;psw2tVCjA+gA zgc}t^sz+Bt>j=#8q|a!5Mg#XPl(Os5ff<){MC*vI%7_ljeWW8=M|4$2bP{4ITFs>+ zT1RwMMs!#qN_5Z!}0>@h}IEZl@T45rAJ4!j_9h4Xw8*_I~79ekFJLIE-+V) zKBM&+4cNC(%I=R2%v_@*T1Rw6Ms#2v86D9&qAN0@1GBp5h}IEZkrA!=RdAz%NG-!^ z=+S}sRrDFH&uHMjg;I9QFfc2Lj%Xdxl^D@WM^Bsx%Cj>!zuk9A{2nznZxE ztzS)y_*>id;O+}CuLX%(3v*i-s_Q$Y^YeY&L(aaounk$h~s?~?Q7 zGOc3H(=PtMB22vvo-*ltd-LAZyV_nBOi{njbUw}1g6;?+_1sp$&jl+cEVIQ9XkG9M zOzaj3!Ka3hPeQ0ypxRbU+uY!OuRt;}|4w)Xpmo*NDK8QHnIKo8YMeo+P;G;3+Ii zkm3n`VJp|Qfv_w|JEL`tYiu(`jCuvo6_k>+ zYHSHXE9L_zLZZdVw$%21yM3p;0&DFf@lSEJuGn#0Bq4T2>l#0>+1ppwSd0t_)w<9V zd6=TsRVGY%wJw7xSL+JGl*VE-7K3r#LMeMJCNN9X-27}Kq1OE`KK{g~YGan5t3}iJ zPpuu%#^Ai;$%S1a9r)A}5}&`j#!T#S*6cU(vF*+`Uc^3|q>tVC#y-9#PUbnRN#r{a zw~`MYV|nyqpXL)igMD%iIpur*2yIJ4ioS>K5I+|#A9YcR{KhxHQ>OXGQ~C3aFP+2h zBymsSjyM5DuSied@KcK#!@T^4*Kf6_{)^VF>cx_mqto1 zt>t4WFelgcJ!|`7xpb`;MVd>12vg4*I)Tp}>V1~pI7ZJ}ne;r*e4Ay#6aR-y&(n-x z=#C)L*h@9M0D&37=I0(6#tU%M^#c6np^b5@E2ET{{N1fvzrWUd|9@o-X)*cc4{+@8 ztp}n%|KunCq%pm`^7&`ab&h`e$;RcC^DFJOmB#Fmk2Yp!=4XyXM=|yew^!Py&&7u6 zgZF@K?&RW=$D((QP1NqIy?1<1?ftb6)c4jtSo=`zfw5?2?TZ&W?bE0`my>!`TDba5 zXXS-XG_&09w4<5RYirTWnddKDSa}ZnaN(JDr*rw->GjUaTF{U;OnDmELF)oO4eTU% zIM=_(Gw@mKT5O7i?s^7%d`)u>YZCcFJOf_>pPa+<Y;@{WvT^pp`gv?T^W6HWvzOavI_sB)Q4PtyJCbPZYY#tK)9$ZdQ3kYW$ z%YzVJP9RLLV2oXii~ES-gD8UGr@}M4HHVS4|KwtLvp0@4+>_CW%T)ArNN=@Br?X8MLs@P7LhMR7M%iLh%EXx_(EjSD)_o6 zMY8BRc*-P;Ch}#GEO1El)Wmpu`l+L#+1s|AUGyW}YrST)*_*0w_M)*7$5X1CV{G{F zMEx%WPfOsl$%iK&pNl8*h2ZH~@P**%Rq%!2sRO<)N)euJf~QP)%Js0XWtrQi@Ov|v zq?y~$9YLfX_QV&$XMp(UIF^Wyde(zuub?fM=We^5u~{vg+{c4$%WoN9+`7KUe|Uc? zA%ZivZP!|%)vwkH?gu3XM+FP-q-?9zUoOeuvHDlrxMw8Zzf3ZOW^CKGwF0Yuw4+h% zS0SHv#p59u@>wBjtw;|KN)uPQ6iburS`=*}?c#gnu~q~_yuTTSLbJ4O+gh3HZuX`j zkJMU8Zk^5tLO+@&#Wn8HPNum30YF_FF4Y z2WDea4B;% zeXZZ(*X(Plpebmm#a|JNKM7D4W{aBN35$Q^trgBn5uzj}5ed}P4XMSCj>wY?wD`-E zAK7iw&}txtu9pl$p4dv7Wv$;Y9GYcq`xt7BxExXpjXZ|Z>}vfO z3eK*!U43qE<619@MjS_~&kf>e#Pqo|s~Vq~ndeNis-ZiANG<(pSo)z^)gBotThn!S zW&Lj-T9`1|)c!N;>px$Z7;!1Vj7vhk_{tI(LNYTwAr~^WtjloMuK4(xIFIMBCXw$z z+)6%pjK$5&^gQ;-Ipmb@b+f+w5XX*@!I1E=wr7LAfbAYifz@AUpHwN6n)QZ`kW6Z8 zl1UBYBF>~Xi6u4qPhaR#**r-IKvy@6jey4lkj`0s># z7+nTK2u4rJg-k6Na53uRb1_Q35R85Sd?6V9G5A6-+6CY1D8wkWANI?X*|yey)%l%& zX!bOYb&~W^yn&0m+t&AaRxihACLdttdb7~%X$@JAb}&nrwsrP2qyjjbd=>g6#w+?I z&Ys5cA-G)(&z?4vOwD;;$-WI3gdn-L=$<*k_ZBITxos zK8|~y!e52vrs2*@CGJ9W zJ)b|s)%ARQO?;27>ya-+*Sj5llP04Yx0d z)Vp2<@A~4=;EZb9wO+&%pwy}Rvd(~y=L*U9x*oM%`A&l6_L|^`_b>BK z2WM8>=3F500w|6YN4XKCYP^#G)=EB(l0`p_qE&Q{Jo4}`(b-@2MQ86rMC;B*UvI~I z=G0oLhP4u!QEi(ut*_R`Z;iNLm=agWr(N+l`HHlw-I%wwOj$Q_S1T;H(`;(IznOLw znoVunR?5WwT@b5OD`hagavtNYi&EqZehWNh!cp$ZIp9cwmHk%A9m}XT@-a%4MS~bx z4aCs(l3~avizG+! zZ0w8HEBtXlJKn$tnC*80dL%<`HZ{zqJT~+E;YMM^eft^~w5#64sAp7D4QqQER+;A6 zdvKIyRO53nvs8jJstuJ_;2-;DuG}BpJK`~Z`#C3VYGm|z8X9{CjSx$JUd}MJJY!us z(OzK?*1a;b>#khz}72wpEwu6+Drb}g_( zpFxpxxGlfWl`CJvvB$|^NcdRWa)sa9Lg8-~`ymexui&^`1I@lRw+9FvVDqy>tnZEg zDeTG!8zSrDo!Gu7y8qPK%k48AyjJ7RXH)z4noUjaPJIcjy(kTYX<~cIL$#=lIAdj)Q+Sct@72L!36lhx`kWKCUk+adMQ%P#IvlrISW1~+` zJBwb3@3%Lb+Tzg?WK;WBH}EU(?0o*qE9Yl!$DIDWcXu{;6AZ~y(y@r@%Qzl_(UWo^ zQ~NOL<8v`ez7ULRHZ{}XkZhE++sdYP{z#TuZFvy3A=%VUhGtV!Em5^ZjMo-QxwXWT zM+0-3>4?@5U6BzTm|09mw2tVCjOf7pUOJ+6L|0@)Yj!Q%s36jLRTa^r zN1xI9jIPLt4$NGmBU(pvMMiXB4jCQMI-)Bwq64$K=!n)4U6B#3`BiYEf=Io0)vyc$ z^Q-7HTA$IteG8@RzK+1GBs!vXL|0)%pE!2nM4Y6za8=ga+)&v?e?5?0wD+Fwh-Vn( zvrEX6PbWCT=x%(A=pN}j)Z!DjcEwG5zuk`N&NS z+;-{QrT9HlypGAvd*YZ$4x;#3S(B~|sq^wtDSnbMY{!6B(V1P8f}C+<*TGYM{3P!V z?Zb~rMWXmo{9p)2r%)tMBe&%l?`9(XHjW)5gCXH#J-YZw-W%G7ACvf`7(eqvy%X-u zLH+G;SKk^MKZnhbt5aS{;ke^{;kKK{Cz`7u>$KvKMeHQyd zu=FbULa@{UUl*lF7Tp9-nPgGkTSG6MOWqkeh2NU$awg?UA(qs-SL+_*riDVhi`~Gn zL~Ov65E^?0Ex|i?+HGO#t8sE454J6NHe7~lSSLx!mBJCdee3?+YTZX_-D4={q2N09 zmq{YzTlcGNBC$`qG6`Pp0DkUO{3w1n_Nt4YwL$!tbTY;Gd2}f6@>@C9$s3!!4}WFz zrABYF_lfRiZ>ql8i^fLWT2J4$n;@_*`dg7cw~+9spQ1dw7QT;{1)j+^skUS_gq=T{UJD7kPDewp0jG9WE~@Y67ShzS>&@&+UDzd4>MV$ zZ`R1}%GNElP%2=dEa_UvcBgas-0Ahs9f_gnY)L#ceE#1u%}mL&P*w-mLN4iANX3tB z3F}&}L@UV0&%j#9rDM7lQss}ONGg7|!q323$faYt7V^S{mFGIq%+XIjIkR)J$ks)C z7QR^btZAW&#qZ8CUb4nFn_|tn7QTxcE> z1;_jSy89c})J$=zElO$*tALuS?*97Ebbr74{#1Qc-vXUWALJ6~>d3wNAm0X!{{H0u zVs~58_v`hI_BMBmg*?_73whv99}C&`eb(FX*8Qfi?tLtz*RC`ed+jQI85ZlL#-o(t ziN6=tiDTT!<;N2HSV#nYGd_vh6f-pfn?|)2`|q=)QFX^pM=T_)6IcBBSV*w@x~bcU z<2~9L#0rzy4@qyU3#R6yv)6t^BR8!S8yzhTp2L!fbS_qkkA;k0m+BS^2`eR%NxMPP zl1WJyWY4G<9}DSYA;C9QWa3}OUlmZN1+RInukDO22k!K-kXO@6i9WoGMA(X2R+h%j zch|DI#zF!^$)v1TdZe+BCq~;DH=Z6tos#5Dyqrydp>DB|z>trHyozICyc_~nx@lvZ z1Vi0oA%P(u3%QZ~kbb0b>{Za_gUt0)Eab87v5>%#kAnxdOk@vEa zBpzcnM@l}3eR2*-<$8X$mIs$;q15~;^A+P2r zV{hG~<=DK|eaE_xuufcKxu#RCYuB-2Q6u!RkUkbN>Lc2``00p+gmvPIA0G?ZOX>2l zkZv=!JdPJxNA5La%kMywC68IRSV&kYQ8%O(3kfU55mP=E(#JxA$E(QfnG)|(H~I1m zj!XYPs%>>{cO-bLbb5NPw9(3uHw(Mg5;mkqEZT|fZED8@pE*@~aOsebg}kah;ON7U zBbfOWZ6i~BEM&y19X~qf>vf{Q+>TzhTmc)MD3F6Faa>T!z1>E5EgtV03keMQSV%ug za*da+Wj|!rM;Ze|-C`kuAs-9rG2}7iD2KYmLIOiR7ShK;MygB;NDrb`YHh9QNPeX8 zgG-P_-PVN!j(jYn#xm;LGh*;;6!)DlKu zTbRT`(n4{=k?)7}{gB|BDsrYRl)0-J3;Bd!x!#YK1R}ci#=nXESsIzr%|cn|jD?)L znz4``KYry1_N8xL{B*=Z&Rxw|NRJbgY}R9UZ_vJ;`_}bG9QJ9s3b^j`SyzZm)Jh9%D9VJMyuR@k{C! z3%Sr43pwXwAvLDzQT6?go5H%kim{MhyYkxA=GLw{Vj*FjIL4i9z`BqgKOR4u8$TVf zkg!f%@lz?MnS=Fpa}L%LjFe9l`Z-a3H>+s#wl`U;Ze!P4!iHFk(N1hf>?#!4)+1gl)=7=zeEy{G5!Q(#mVDo%?|TH_RFUb85MJws zg=cVF=ViT)L!Ak{+eU+JZ45xV7|1yv1LsEflx7lj+Nkf%F*Sm-ZOy<}ZE|?>QowIofmd=HTe0tFG8(P zo})JhM<*R;o}=-(dL*w$Zwjp=>B90H-GiNR*mLxz;Aq!4I@S&WN*P}Oq)^X^Mk`9)hJuH=}R8fv^ znKQ2b=A*NN&2ZQ4zg=DZ|CrzW$?RYw98!HAfxkz?iY)^FF3{{orhd9!1pd5sEmm#O zjyAedat=!-((R3E@ei-ZY_1Ejh<$PnDdoQA+Vs!k*qtOulF+f#W_`>(j_nYcYh!Fj z=6fk5+j*2p%Jbcg$`(qwp0+Eh>ihM&!o|#O?fTK=GxANM3*q2;Gp|Mu2}1twDDk0@ zJ`@*f&)U2#wWGBo#~=92Bc~t6BreIu#PR=CpV4LUGbc~RC*r$r=YK`i>mW<=f~+9< zM@e_l)xzf|+VR={^2*2Sl5d{Jd8)r{qDTIA;^+weKI z`XTj++i(BF;>g0$&p&j0>9%|BE}lC2@X^}h(PDYxBgOJ)WpqN_27Vrk8lk8;ym=eQ zrVr2EeW$uEHyB(W+&Hi+cwg}T{O;fb!3Tp6<<#in7av)w9YMKtDlU&n4ObssI{Mg> z8eOO@)zs*b#YHvx;G>T`a`bc9hYOEx+#I!R2PN6Cc>n}1vXdCrlgI^grT`lq9N^eZuT2CA2#&b1&dzWhD{&yg_g=Kc~8ow@T9oLd|eq&inr8Y z&wER)yTs{tPl`-}XljF$v@LDWHG*w}w83^yinr9fHrO4T{iY3?UQU@@(Zpt(Hs~6Q zw?WwSUX*qZr^n{jz-EV~R*Nl=b+PHA3f;^!Pq&g*rtjWHXZr3* z=iZ8PmMxq86rDXf}lg*;|@`o4JdcWJd!cUu8qO4Yj_Y(Di58*X+^o6^wU3X=0 z8+%wjQOCdZxb?V=alGYmn{<+|k6Xv}@+#?O((gLP4DxoUP2R%u^2z?jthD)TeklW( z%rPug>~q2FJWtk=$PrW4+UQC+m*=o#BAtt@y%J;0F5uq1WbHoCyjxkz_sJyhDB3`S zU~X$|g!7m)S6SN{bCyQdCY|RdW+~5G-cr}~`K}aZAE@JL`d7|+%*Hq|$Ax;#a@^>| zY1314I_XqjAG1EnH)?|&e!QnY7GEv8nTc7$;&YpS;7VcEduj4jd?k;&rGH1n}54|-+XZwSKe*wFG%|5XW16_uLe1+A;#8ca11mq z(&#?zTCCbMNE@B0L6XizgZvWcc&;S5uNhnSeGs_x&p!#e3&_3t49cJxN0ub_m2D~Y z{jBpn7n6hfv8&ZTe^YYr;V%923wr<<+1Cr+o?%zLF`Hx`}){*j$_}DF>%F0hulR!{cZh?+ag*eNj90g00I}>(le?j zkte3t#ztq#T++G7+-vD+eYY}K`dZ~3Mehw>7jqlC))F@48wq`+LJ9?ryLehf=63V6 z_K>*};@*K<@<&VNI>)$QLEPTHf+y-Hw&MU@b~p`>*L=AJ3UM9x!Dw+8|V1lThaQf zCH#VjiYT(8tLMf!HvS4~k$vv9DLUYG0W{wF+mc#jdqC8}XC!QXeJ#>CZvG15)_ZNd z^@n!LTYt3&mtg(bdoa(s2E%xBfPT_2(W_e}(()Pk^1g_2;5R-e&+${NZLF zf{m_(^LY+SCerPVYVi+`F`IMZUdw*_cN^(cpMkuy=rA0gn(uSNWBnZZ?Txtl zh0jP_{kqnldtCjM!fw)Ue+jSAW7lK1(*mUDX3JqW>A7DYyRNbISJDFPZ`>B6#y$SA zd0f5c#%=+=TijmDe*5+2vN8JYJ7sRtb8q67?Ru-<-Z{Sh3gY&5k6Vx1t&3Z;<6dIy z*T=1ovDd`mx>fJF*&Lo5=NS7dZ2g@8H+k#NTYujAV@Ja2B+lNHMr{!n_qxW}UqLN$ z)@zYoi`=?eq}g$QI_bGLacfwAjguKDq6+>3 zGhgjQJbykc1-fQgQSV_d>{q7Kcz%MiiGAW;u-*uVW{LIY zN{|z*?+lB;Y%y55aV*4f1w8*N@%%y<DJB!UXbGLLEBqK;1V6%uCU$LfCU!~Zg54j1&H=mXx1e*tZtiEGt0NP;ob8bB zrI2iESjx{~-)>|{@_%JpN`1dx-zco|`Ir_2s}DTT4%EdMsF8OEbX8;>r%{-1FPuVd zCyUHG$><+<;&f>CHy?fPrAGL*cq2S9@cc?aJr8U{7Dw28^C!4oB+p;QHO>z-!un9-8?*T)=-3AA z#C`JNY|yw5%=pJDcpBSh2e5ruZAUxsUt>DRdE95^=d%je{k@f3G2c9;0%UEFv=_l5=p5RMXl2+sXnVC6FM}pa?ZsQR z_F^G!FMyi1b|UJX?A1<8O^v6}<<-k=?Zox!x~q(xrK686snLbnQcaB>SzJ`34?gD2KfrZu`wLqdit)0Vdc|Jq;RbR%jJ4lcup<|hoov8A@Rb)Oh-vQf+0y6O- z{{hw9Gx(8fpxRdFc1Oa=Iz2C@-8Z_pcKv8u+NkJSIJiyi&@|Mjcd{2pPp9*fzS+jn zJJfbsp>O<&8fg3{^@}#^uz&j_^;S;4fGH)&5e`y9-DR+WaDX8ttaL;J&tb{L>+Owd z@ehwNnP zu8I=Gf?Dp~ZIcp7AL1_1=-On|YuF1@SJ&zr@K#^DG+N+?O_B|t-sG{U8k#@XRNXoR=I`YUaR)i(%JScp|x ze%n`mUbwES<#!mC-@R*=U-KRX3oo+#24VRPC6?bmXqMl9yvo|^siO~%UI`8M!{8js z5M6`46me7hV{0?s#9;@S9t>;OVpZgoA=9mNhD?v>_G;JU^_UHr9()4(9AtXHndls3 zdVU^sb>tp0J^u=5veaf=vdQ!$!WgJ&lj%{Vrh{SRyspc zT+=l}>v;Yik|Osz(CF5){9o*DOZtAjzR}iSYeg8dPaz5Z<+F~A?JrMX8(a+lSLoOG zxJsBK?{U@DYTHD(iUV^KTutpyhpUN%+@+6Bb$BY*QaXXVc$l@E9n10(h<@xv$v^@Ldo%cnorN z&@uPW1M?uslpffcW4=QVjHjfIyo_U0CF%T)5Yx-P@*V^4F#w-ek+bSCm>R!^9s_UL zfHRWhEgQTDYNC`Jk$8w-%x1D|YJB9_vYDDp=`q+S%Vxk^HZkMiH}5T*?wEQf;Zu22 zqV>tPl=^gNFY@ZF{m`X~PouNAOLB!y^@oZuEVl|G_I2V@GH&h&>6@)6cb48tr`d0rWj_p)x z^-Ld+!dcMRfSkl+j;uX_eJ&E`o6*^8Kf+C>#Iezt5{Gmy66Z&tbCEc|1)Yn;`5EZW zBU9q=fAhT*l5K!OQl36PzAH)ce`Q-reLw5GUNt$WAKNG`Z+mj>)=0kL1=a3mJ9hG9 z5^G7RzBbzSz_p069PANeIp{~*wvU`!NWL!%@)DDYS$j`f?9ZQ)}Z7B?ei z>-cZIw8S~k>_(Q$G2 zMf^C(cpqbl_rzq0u{?INYmDWAgFePGes8^gi3jo}Eh?sRT(o|Le{aGb)Q@%H=ZrsN2?Oj4bl6{uq>Bh zS&sZZBKGt8tUk0XZwOT$mgRL9tBC2ihqL)0x?dFo#(3O-S$u*};oP+ugSNmdKF7e> zl5A3E2?P#OM}1o^l$1mulOc7ibcWQ4=(?fIi0@E;iF*h#c|WZCd7IZH7`cu%k z;OhkF>c~B;z}zL!WGQ~CAb9Gq0&93u#dTHNyfo2Ls=Y=-U4E?Pde+|vVl5v-tmOz| zEh{NwEuTWHYGc~tVC7RT&IC9g5QAC-)EQ9z~zmtT7?n`KloaHYpvPETCrQOSa< zK|d=q&nKmjoSH^Y~IjdfS>B_bA8ldlZ%UCx> zaDgQ6HHh9su8xAaM}O2Nk`{6AZsIkVN$EAX+?Y$TZj`rfz*KSa)(zgnCbw>)j+umLLT;+kd zL5hBD*3fLiQRFJN>ZD`c9G&+#_UXwcRcv&oR3V*r2~i8=PuR?SaYtVCW*rvR34+!U!-?}INSoG(e?2KHau4G z9f?0?^12O=PvMxJ1Q({3XQMOmNIDlhejju$c>Fc!T=4iJ=*}Y(kNnU4zlCHwk1|Qo z3MCvJB}x9TY)h%{m-i=gnCi#av1@K?_lr7yrj$zmaCC$Tlx9&0Iu7)4&|q?8p)@@c%i-y<-7{QS>$=#A4I!{f( z)Ib|;o|?hgmHfv;%#6k0((CA%Y0d|6ta4&8at%6aom}m_&pkA=8e~OdGc~>nXbQ+Z zG(NSYU5iy}XH161XQiX2rD=Q-orA`w7#GQNCCPmajZghG2wW_}5Oj6qUK(E!G+BzD zoV96ui!u1hc-|4@TUlz}Ql~h|=}H=Jsd}{ogJA(y9_A6~Z;vNqR3+K)#QnrlFFei4 zg_2VE+QgHM&cqYxT=4WD=v?shH0WIL^f2h^$UX3sdkZvK!qboqPf3g+zn_jHA7h9Y z;*h)rm1zrVtg=7V_}A%FbC;^uP07%lSL%gOsprBtzOc_F#4ZgXHVHu~;vyjqXxC!Z zCLwHeri37!i-dRxbS@I&TcC515Y!y&$h{=Q+n~vkk8PJtLL_m81w1cCGfk%&eYZRv-5Y3b1}?Jc1nBC>y=2oR&}2zAS!PpO zlsH1_7$ajdrBowrr&G-+*tr(!#raay|Jw|y@2PXo(<{*5n9_M-0Pmd1^sp7MPjIy! zrtXT)Ui%T=Ha!A1I^sgd6zN3MNpsOSI!qhvU(chok7rWb% zzF)6z)EEo-ZkE_wU@DFuq%HzXP560Bg)_Xxx<-R=>HV+JYdAt9zxdITND;JRj`X%ycSmKxHCLKV~q{ z&0GD(M`s6KfaOB3HAa%pRNuS25|+@=pkIKlj@(NEfm<>qftI>UpaqFBJb~w38*ww|7GpRw zk!o$#`%S#Y@k_h063+Z%#BCE;BX)tk0bp<2#k0%6?y@>Nv>Y_=S2(6}#O)2Q4P0o) z?iX{tuzSO6!3E-%UXK=b)tS{T5S#c_d|OF29Dfr8#4z)EI9|qaJ=t))tP`OwbS92T z=Yr!V=p1ky>;#<)j^6^^d1T_4|C#TlkZk8sCMnNYW?H$DrWZ~%NA3DBt+dX#|PaS>uXl?Omu{`mSVtKSOI-zdE zdl;)7tsOZYvE$9#KsJ4N?(RF)b-BUd`ryWaUBUZ;_vd#99|%4ed?=?z7r*$(Qtb%J zrBiWvOlr9L=+e>0uFCp~Cz5Z?!iL{tIOc-i?`YRzRd~~s!!|l%kms;uBAp9jGFgw6`jn1UA3KN_;*i)zlc#6} zF_q(@^(*{#6ZWt!ZM=={7SIq+z3BEO*Aw36^}6A~udf)duL#Z3Wu3N-(JZ;fqSq`J z7uD#4k3RCq(a%9zLFA3rmX=N(KXQ60T~Bhim_x5w#;r*Xs83Q9YjGYME}A72o>r0; zs*o?Xm=Gafq5_WI491#saLy zf;t-%g62V5jqerha%csk1DYr3?ZG)Kv+(wyi4S2FCg+~R_BZfNo6sAAPz@y-W~tBn z8Xk*3XY@<{VxmMP4<{*q0u>hx^9OQ9QVRc?8m5hol9cDLWFlQRiE7MFp*TyFoWt|v zzNUt`ieoMs<}X24NA9Iz-Upg2#a2CL)i7hwF5!7~4bv$`G39#4cXeX+!-+Lmga-x| zVKUQ<;O^oRrl;r8zluCO*Hwe&=izk?tH3Gh_h42T#24?y_5_c83hN<<(X287W|aY+ zZ_Al8-1M=BmhG=38*cf%U2uCrE|ipl9}~AWI$}@9E$Liv`*)z@xsv3*25y5q2wZUc zD(LFSy>NR!XtIRc$8ESxVj|f_>$vqXk$52v$yRq>wK2GBZYJ5fL;K8UF#<(@%B zu*ZFRJ)vnYaB>?BwlzICy0~`zXj|H-=t4NSP3;&PFOBPidV8%pe7WP~sS#d$r4)@Y z*&=a~yS48oU%=Gv$Pq45;x6r4tO^I1Qo=^ZmY(NGi%+_}$dY)B+0^d*IQjSuS;omP z$a;&rKsEwQP3psnuP&yxL~NwTRE$%t#m`YgsU!E$ymIe=Mt^_OhG2JF()a82jq-Fz zTWH5r92+T^+OH2SzFL@iF8ug&FNBEcI@k9xk~&YwxAAhS-!P@GwK!gy(uWxL!c=8^ zsu-v0jx%@M^+!QYYZiiN2Bx+hrWZnVKVy_}o+FI6*yv)>zu4f~ur`8YE;``?FQO&+ z2BuDEqce3v(z)n_i~-aChuqij9H<|H&c$Y?J`4In>ViSV<`EKCE4&a1OgYW>wsJ+DMiCDwJsZ-sdbUg zMeBM9bS_%gw?OBjbuEFej@(1*%DoL5y*-lui`{KW->=s13DLs{Tb+7F!mJa>c~AXmghUj62>g+Edpcu zdW+-Z`_p(4yk+Ap8}NA*nf#u?KG9a(&eT)u1 zl|$l~0`{%Y7t2(Ri`K97yWE65tV{oljn2>Bki0s)D0z3$9&BqPw%ucN#;5(*vBl(_ zIu)LyGu^|2e)*X+W5>MK;k6FnzKWdDKEtu`iSaZew>(FCj?O$sPo^0=_;kjJsMof*rhv=C5e^BQnS!~gUYR#fxQ;F*hezcTn!tcdh~ zAr7j!IQYal#Em_TRajPbPKP^_)s8Oy$t#0>9yeA2H%YR^jWH&RmKZZFHCx=+!#JiV zvF^;cF&mv3H%7X>+68$%W^Zoni_Jrrkq{XCtJk)_ z_$yfd+%I@*gd?+9)hzeMv#Po?TvqvT8T04vzNvw@>GqY8hI1cWUA@#?RKZ^;wS6Zr zoaZWN2d~fV#a!4E`FJku0P&wYR#*RX<2ChT{XS}Itc3Kv=oWI%u34H{q?@J!;h2ao1dJ=v#<#ebMp)Pd9A?qxe zLgc-yB#FnEO*#Ej?2~gyD%Ue-uKE`obHH%!Wzf};iCN--?}h*0#PD6%mnAv{kR)mfAi7zUTTD2OI9X);CmNOUr-lc z4^@QW@Zt9W$AgVJ`cUH=v-u|I*aoy#AH5Gu@yA@bbXJ|k>Z6UrYCGD2{~FU_O$*#-<>#|p zBm4JOa>ab}6z9l~+l}UZm?Qs>!HC$N$YH+yd(`%3SWp4hvk1Zh?h)kvX?6A2+}Dij zzwG1o;w|uwB;ta}Y%gBNKDHG-+KZqF8a)YajrJla>O`mu9Wl>(g8iU~xVVf!+efZ1Xo#~(oclpT4Xua7i7XZEaxF<> zNE|DjA#ox)2Z^J8gqtQ(D!RQ$Fhk;~-{Po)#L4{(bamuj5@!xHyOAZyePvrpeZO9( zRcLNw*IL4ce3NJ=wj=fz3T)G=6q*H_#96FO@RU8sBgj>j8cv;JnV_L23urrOsLP!= z9h|jmsQY#_!ljYM+2KEEgttOdEp3N}I-qN)cJ1`5gN>)2EJj-DH#lq9EVSHtth6Rt zYE^MHCTOK9xR+XLRh>;%V}h3YR&(V9wAm`P)a@%jFI?AEOFaxN_1-ltwRsO$a*DLn zL1?Mb%4^V4|3TAI|6?C(sh7Y%l7#n6E%i+hu)XNfW(31>p`;W%7;T1?&S*0ty1m*p zc|B&sstrDYeGY9#@CDF0v>Ew%(AAN9wHdE~CQEI`C0m=Z5VsjXOZarv#(oFM5os~n!9WMj!g#Derec|?YIA7ab)4>=N~%0gf*v&r;a{+w6=J(Sf2Puu{>HColv*ozl_z6 z){Y#H*zD$QAe%lsclVv@y4+xJeQ@KzuHb#a`}4bl4+I|!K9p0Vi(h_&A? z-Yb!DuS9twjaOoNCQaX&ddrk9u##peQ4WS!uQS9*PIxG`fYwHhOwvG7F})Df{#_)+ zyj&c~ALMecW?$&#elW0e%g zYIxM>St%*XX}l1ZyKeg$t_JE`1XDUs*f3SV_i(`!rMsSlw@pjPMn_!em?E7Eru@3? z@msg7F@3C-tQN(#k(ioF=V?e|38{BFWmUTsbTAxy`Cz#3?7_479~=z#e02-Rt&#Zi zM87tS6>-!BWA|&SS_NpSY z4Y&@O?F8j6^}0NAl5)?WBADksy`Ipt7dW|%2HV=)FVV%d>qpztMnxCG!EI_sYt+#p z$Jo(ws{Wweol;|LSz=Hy`fs*5ug)M|RGn?bp{O$-#FI5os3$HSDJqF4ZQQ8XS9FH` zvVHD1JD`1M`C_IuGz%IRsq(mXEmnnNOwG+kXG#^)?bWWy>oFUndDOGm$8#mgeNAiV zZ$aQ<4Sf%Eb>tq_P<{k7SsHVGpu07+D6yn-c;2;SO}yFY zOuUiK1#e#goeSQ61UeVIQ5u~`Cf){-`CbaiHUx*H{4i>0u3Jg|Z)-+S1u zj3QB|<+gS|ixf*P!~(>WvJ%(X>Z2Vt<2n~xah)Te*D>fA&zVXNmOA8M6w6sbEN3N( z<-{oYfH7ReoWx?S+;~e!9AZ@LI~}pvUE()+E@QI#Ts~Iuy(HQ2dLIbr0U_@Szp;LE zvMoGCKG&1*o{3i*orzb{?bR;G>oJ@1@rT&wg4cfpoeN%mC%%%mAB7+f&1Y9A#J{D#LcI=+Gt?js#>oJI_1uol1hl4?XF zsR>vChTEdWT%bp7SIq&z38a_@p{7B zyk0jv>_4$~Es&^BYv*uVp3k%`zl>vdkRVAy$5Qi@j8@16H5+=G{H$<7*==X6yK_PD~_camqYaDZsFu4~&cOID% zhX0%IrI2h(tANe?9DdmPNRs=?wv_sQ)_Fa)_DuRQHaX_DcE6|@k#7{8jDr#TM;rLT zwr)Kh7Kzi%dW^%d)B&8POC6`!&6!l=M1mJhjM_EQ5sXB93~`$yh}*1m#BFLZo0>NI z6yi0Xf+j0kX{vb5|FVJcn!nPt(!cLxt@L%_H5IfAm^Q_;TY$tpj z&_dFa@W0V!Sm}&5Bcj`@U69vfHrkBfW7y}=W&{s`&Y{hS+JZW0`3|-t^SyLyGk%8s z`hS-Hi`{KW->=s0IQOA0-*Tb;~HpMT|r~Ns3*_{N54PP!4k&@@#*qk;&=Cw{(m#yEwnB7^nF{SP-2t ziO-xyd}amlnYUQtGY6yi%qv!r*TdxFIIbrfCT(;kCQ0Xl$!j^r zEK42;>lm}samUyk-X}3Q?ME*A*i7(3pY)4?qi3$I2f|xPYt4RMw6|W;Lhmo*={9L$ zqcf!i>0G3R_dvuS%kF`Q<1-`8ZESq1l*R)wooaOpwPN$`Jr^SG8P-uBTSJBTGeo~O z%}cbdURa`J*OLuPHaZhaq;tX2XFJ-m6jOQ6Y;=2ftI z^A>A(R5gSQ&1-5RmB(Q`)f@sHahbG!;Bmm}5M!8;X5?(+?DijE)u*q<-UhDP;5`oL z=`Z5j6p(vi?0(SbNqF7#nA_-x6Q0A8iF7U)^B#xjbt${YA&$#rdoY4L%o12Dr|~rS z_)H(43BIW!vmIbx^8hm21?Dy8MC!7tFuGPK@;s5d~8_XXdbkmL`-KCw>h*jFuSd}L_hb5I%jcj ztx0r`x-P(s?&rc;^$n~^)P&w1gjjbdiRpyTEn3^Ck2Sx#@DfUL8I#$M`xy3-6MIRe z7kRRlY*NWaXG$f~xk#nI2c1YV-d^r&Xnp}l@VIDxE1;_*_t5-CKu^;7Sz`7KCX=i_*wwNZg{ZgHJ6lW8=+V4)McyKjmx`NVGZ#oky9Z{FA7F)mlmZ zZ)-pj)w*hb--?H1EBg70B7Zgim)H_HE@W85unG+p0T!Nhp;AlB)8rKJ83 zrFJw|#(~eG!sz^5aFBD@zc)M=D)kNUPjenWz$Mq~i!8q+wzQAs>ny&9B=QN9DPJqt zM}8!43O})abFwWwx`b^#2_Kqxw9%DtGS6YjL^>Bd(qkg$@I1M%Az#&B|o75h_2Qz_7{tn zZ#C{otj1l5)ws`Fjf-mZ!ABo?Zz{orPTN9^^L-?e77fUT4%CmZygV$Ny^iHa*-g% zd4H-|eY*4;wBZf&)lEP5#q#a_VfI& zv-lp8Y}n&$GcMR$k_#oJ4SO~^6MLj{!QP*O&INmE`VG$Gn#3OeH{VMk+0LU(Ql9sG zw-y9ANteaNU!`P=M z;VDxF+UR&6p2L!fbbF&({KI3+#;iE%YuG2}kW%hz_TT*_j=9LdZ-TCl+)D;h{xM6E z`^vVI`hLB>(N4~sYXbr!=6%8wQC}Vy+hkZ8FZpppDMNAn9B% zcqL?E9rx~q!6Im~gu#~V>(E2v4z#H69N3%mBc@Y%^}Q!UsVaD#_@}PLcA|hxd_et@ zbgf2AgQNGS@?>ndW%aSdvP!%ep|`BS6EuO_nP}nvwxDN|TUIsvGbNVQ z^mHmuN4inaL+e;p*VD_<@^Gvqv2Tf&`oFSN$6PSWGAZMM!k;Q zOS9Vpnk;E{x7w|%8Xh%zMwCHxI?c&*Zo8^Hrlt*Kz$WC`@RmRs4UOXo})JnM?0-c={eeSbhbGfJuDM`yqX`c z1}S8q(_vc-pkLv=_+zYwGMD}In8)A-$wg3I`bSom1e}3=V;H-ndj)~G-Ied zM|+OWJV(#?kxE{V2AB4Y9z8SeEkn=IeZ|p}-ZJzY-B%pF-&=;Bqx*`Zr@Uq8Il8Yn zx{}5+oUT-gajNb(bH`nO6y(Gak9QJ8vwUbf)az!vCT4dFIm6q1_!6*;~QPcSkzb%~@^^V4t4kJ)1FMHaasVjC3wBVGn^$;>dV^xvv?A z`7IoCi3wW*T^+ecOjz!1&}1nlY*+V~FwFCI@+2NLilrSHn<$mi*rgkQr(z>~Pu=5* zpMWXv@zi~Wj?IIoc&awWgc45^X{=(8rw9bye!9(1@8wf0&-4)l{U@Im+vHO@jZI!j zH5a|Q)T!^4!sbu8O456v_r0gim5H{9tSV|CwCR4-Z>Z}ruc!MR)~>~>=wPPqXQMN9 zKhnAAeqR8ci|+Sb(7EV-bQ(Eait$&~I_wCaBG>}s4dgtBVC_YQdP0C=Hadf6sQ z(^ua+Ft}AD#4a{-NwP@@Z_R9aYo^9eEY{4-)%OnMy>~!R=Dh=KXUL1xz#=s(el?rO z+qS6VX?#45cc4;A<-LBV)0$CXb9o%r%*USRe9|b-$z0J}#HtyI`6c?b$*dxdx>z;$ zYu94cX4Tl}Osj@;E>_JM(79MOe+D`itL7=t)scHyHGC&o@@S9Pt(pj9!+2g;HRF?M zJO+L=tRD>vzNsRU-!nMN892I}#!gS^Q(iHp#zi%-x<#Y|H48~L>ELS7%*ln4(k2~j zbf$D5or`q%Ea+UM16Lk!kq#$7S4Zw49degIgJm~cN&atZM^e%E>vgJg<~DY%C2S0= zZAI!|#Hz9n#|5q2Rj^72tfey%pTuuT2{9#l6~_kjTEp1mDSmmzZ@2!Lf<`0X?%j?b zAph%0c*XP~+vtc1p2L!fbbF&({KI3+<|;WJPx1R%2TzM8o>Gm;N!ds9R;PR#UggR- zTg;N7&t8%ZTdw^x^Kzl2v|-CeXJU(VF4&^8o##rD`v>M>UW^Y zlC0WemsJabEq+VLs)^E6GJ?%TR(Wg2TQlIBDspD6nTb?$WK7SbSNNM{u4#R!g3T-;z?ITuvb+HU?7zzTY$X2(V2(rtJMRn*>vF zM-4uyU@G03^XW#Ob+Ky7uxi*x6R+jDMLclcs)=QWKB6;?Rg)!bt!LGUyb`OXB3hld zYFa{My^5c2IOA5$WGPLrV@jX0k4sy_hG@|5)~{@{R{Ghh$x<)A&8j)p9+x&beg*qH zyWnXs^j?CepJyYi5Krf} zP&}Hhv&i=|bv{?G+g)v(w8k%{&S#@5;e7HKOD59ojcV}^k1?BL2_D5hIfsd3wNJKq6~{{G~?*xi=&{d#?)F}2&$-+An09FNAx5_qvEr_+p%_I;hc zuM>PzMIJf{bXR!M5h1i)0FRttD(o8x`%u_BOQx96fXO zy#l_kQ~NGn>)P~IOpTwDsD^|nm(qC!q*v5w_NR`K(C`R^TcjU`?^lwvWTv*oR#q}w zN78ZI95*nBeR`6X)YP_Ybkvx54ofD|?Tu>j505dM+SaukxtS$x%QkWo7EFzAkZmHd zG?B(5kaE;!mzg!_5tzn|8e6W9v&fg8Bw~ii#1{F-1zVg6Lr=s3lZh=Gorx{dxnRrB ztP#CtWt&+8mP~{#_Gc4Y(8~d_^ zDf@VV)2%o({tswf`_qlVnUTmEC+~ozPi8Rh`()Z=)h>Js7fZ(0*J8>l8=WbuNate7 zT+2S0EaA%DCv&G8###=Msn<{cm9wHZ7F zS;Esg9)ec<8NVg9u2gf`R!XV*IxYP(73KS9B21b6GxY1b;EVk!dfE#8Gg-oyy?^F( z+(Cnnll0N-Z`uDo22E#KYn_-NKeK;=sT>!rU*Yweu!r@0a>Pb=3yu?0z3BFVhS#I) zVdC|=S^E1=tX+$ApGKB*xGm3Tj=uadj@?0mBncf$ZPZte_pKsl)~cCGwZ`ytMXY)! z|JSRXW0K>w(fWK%G)iMh14+e{4&3h|9cJZ1NhzFWYF{=wQ~M%aHzb%NV;%&Z3lg3N zoy$1nhe20I?llhiEzo3XWXzCd9P(lkd&X}F&1)*v%Ep(Eqd4}=<0$WO)ZHtvd2kfR zoC%Int*1OaovJ_Pm!0xRg?)}8zE?>$S;XTmvglU1P*U1tk&VujMWl0)MGt_^MHYPx zbS|>!80hNAy=2jwpvjUf8nnuyIL?gUm$E3;3eG9V-E{F(f4trZi=oUy)8}~Fg?B8; zh9~NOE_ga17fMPSo@{g`o=E3{r-wl2f~RkR&IM0PpsOSI!qeNJ$r7Gyp6bOU#;kzn zC7x2vRqOjQeP1T{ri#oqAd@3Ar&F%ryb)Iapz3qUz*b+9O)_vlxq_Lky=D(Tjn$6UjvS9z;^u82n?5{u_nqpx z++c8haO1$P;C;dS^Sgr&1Ro4OlvAUNUwmY#b_C_pskl5QHC%mk>F8riYILEtR8ylz z78lj%gO5J)$kESXA1*vvTUt7G{K)C0qp4QL?6w*J->W1WhIrfsLpCeK^qkq~ObmHz zrCY?Zd@YpuHE9=pBfGUy<8gjpVkp&W&6jVj6wqI(RO13H|FBT&b3A!#C6F^0Nj;zn6f{T_VmI-NTRmiq!so1oqe%7+G zG$!Bf6JCoS6HP1C=#}Y8s?lLx`ugMeu|CI=i`6gIN-r$U0%v+6?wCw0%|?6IeuU1n zSV)(3t3OLvviJ3`tp~_&2&<)%a@@@2VX3utS$|vq9!s6p%EREdI&!bRmA62%NwCz4 z6%#B?3Of9#N_@rM$y+QLw^%Cs)67bF`I=T7E9Nz=yw|ksqrtK?=6*d*D{^L`5fte# zoo3ya%eDR)Bi83Q;(L`u%aG~aj!xc+)_<08w2t-PiVaJw|H_q|SGHp|rX(gzHA0o^ zb3D=SF3E-`S~en^*7K&#$%T?qEPK-fV52iV0HkyA09?y?FtdawTdd{c$+cK8eoJ@& zX2xYyjJH}0uI;|*t(J^iEi)6TX1MUNU?!h;8_~knLXu57aKDRmn3W49rA<26=uGKA zIv45iAn16mB)P8{6}eSMg)Owlg3XlE%#xhaV(He;f{`qKbS1_gc^uiT|16EWw^{!S z$@*i77i5{~S$C|+kQmPM1LRP)687%(3LhW59b$kHsvfMN0Rt8eXlE5%zW z(MVGI%sHYZkDR33Tc~Uf$)Lx8O_tKFlI&x^N$E`MaQj{%FJn`KCdbo_mq};&|Dt2A%Knc1VtGEU~-fKJZgd2(NKoXl5n>`oFSN$6PWGgT~LyN=w;>VF+H zS;EkOW#*TKlWXhm;gM;njF-ih_oFEJN_r+giZbKMt@1{qmwVI%jhp3`xRrx zYgl*>HVrFFW9-+{uxd&BN2yNfP?7n)U8F?Sp7!q z*W^UX`CdgQbCO9u_A73*XpJzLRtraqxmYc8(b;Q1VilNHi;d2-T1e+&wfNYt_?_Eg zzhJer)&b+Ugj|}K5UtHcF8R@5el!^Pri#pVAd{oPCdz5X344zA9G!WNo*HN4oTTx| znW=JlYJyYXjh9O39&G($f3fH}+H-W~IeI$Hh+WUoo})9*(KBg$rJkcbM`xX*CsWM} z>N(nTbmloa)ylS>qdiAwo}*K(G3z#|SMz7mG^Pq2|v(C}` z(~P~FZmk{e6chGV$Ltm1VAz~jXZD8bOd}jp7w>*$@Zz7mGT7&H@9oiWVv7&s{CqC) zVe{IxShdB6+33vpFw(iihtb&Jxsv3*=ByUagTQ50i^oA%NA5MN#qU6qrMWEkSZ1|2 zRy%nTj~YEIV#D@Nr&+b4k_uNrxeKm}jj+7jxKPOxQ#ZUe@Zt{4BEl761Yd7FTP!!i z|DoQvXYi)IVL?rXg`jyzshwd-<$_XFZ-n{!4P2{FJ5Q-It5N>M?YIA7ab)4>=N~%0 zblW|57f&61_-JkMXt6x;kz#qYGCHAd!~Y+v9jzTX9Adkndv&?9QZ#f~!o3PUs>NgMqHty-*H`+np;x4!8{jv(1%p zVDUZm#=Oek6so-JSN)5{GQNQ%`Of4o@?Dbh`%ob-_QK*ZIU^~BuS_i3=!ij{!;*<~ zd!t(X!(+@dC)zNfzJh&n4k_inCKicV7c4#lx;ir70r{HmrI2iE*vRj~zTL=@$la+WVzANBvYCMfkw=$Iqcl%7-{pO>p6wUP!mg9M#pDyHL z3>H*^!yNJU=1)L}S=Soj|59(R6jT!!ZG`i=23o%0UKM;jEabi(ssWw0kMSvOHhD?D zvx!f<87F+6=S8$6ylCRnMn}HkIV_n-=Yr1{Kqu$$Jh`ul&nAw!;Pc0zt0VWq=dGa0 z5CqKe2XCkf={<=Wtt|&&0)-aqJEfBuVI4>N6MezExyCb0+6Im`b@u zXBvs4x~w=b7)F*AG`%gL$?d{dmt>O^oJob;!A$NU9qTtI+k%J#*w&M9oGB@6bVLHr z5k!!#8zM|i?jh|QRIP~k7LK_{iY3t1k$Xsr+}ohZlBC#Wl@#$RI0ZZ}HMn$Zbzb%g z9-LP?U*95LM31K!f4YR}KRm^gwh5lnt=l;xqr6-^5$a9TB5H&c;A!A_cnQyK5lrcA ztW8GoTTmu3uP3AK!f`#>WR#7LvPqXwq;ru`kAjZpN|O7UTHCWAaFJ1ufv%3+OGdo| z8vXsreX+YO>HGEiMtd7}TV+%{aU0uD$f#+*hG#mDxwm36ZpBQe8fQ~!jWctS65aZ6 zi_Lkpiay*`--jEul1X!yXKUypDdyYS$2F_Mv}SB{rlcU9i=?=geYjbgGuPgSiBxY2KrL-VL|0XG`{E`4Z@+Jo#;EIOxq%uE8{yzvSE(0!bP4PlM5xK z$Q4tb+2~ApMmiUH_7%{%$g>}T&PAR*1G+kLFL|~LG+Dx&eH_E-xT6%$%lAZiHj`%D zpO1O)BgDZsRb;jUnd~F2jEhaNsU!-&KeO-yZ((|}CeP3)# zsFfCy?L5jP<=NhF#DygJzp^c*zMpkoPqbeB*hY=AVcZc@%l|yw5l^=$@pOqcHd9Iy zTV5F#-OUMWZ+G;aUZ{kOor~gg5U&%*&TVhS&h@!08;(Cu^h;h~A|H|8l9VSd$#cDA z*?n?GQVKtr7LSdtg!6a~OD58}VD3wxlXG~U+}G?s{XUMl_?w>uT^+fXznSk#u!Cyr zzO3s>o`?JN`bJ?)zT2>+|8%hyck!@|VEb8QIW{>nk;dn|W+S=aEZEb5v#`>NmtzcF z+^-YIt**t&eWKnyR!$8tUQX!xSO(I{mn7fS#N!+YT<}-pH9=w>z5qLajG zO0~Z0bZd-{i#Dfz*{RLJI{|B{k2NvkLy}Ds<8c>U-6|JKN*k_hbSADy=Yp#TK*w_> z$$d@B=xZQw(Zr5{u8!P86U)5`nk;EzgH}x}j+^86r3RL2McK>unorjo;YipB3;70T z&+2bHd9QhF{r7Vm>S8U9nJYwiDwq6vw%(!vEA)*;Q!b?(fs@KN-DOnUKwHe5mk@cj zEG`0EGi zC1xu)k9!kW{NH>p$^{Xaf zbAq!gIVNbO!$WYPQVhbuD0ZjMc=+P3R-t`DHd!{JobQn_7WZ zHd6HcJi;d4i-$K+K&Ft>eXO#nAD85K~hU^WY-GyjJG5GVo0mIlEd} zCDr)obaS|M#vz1zo@+cYS#N~Ive-z34H(z0?l1y%FvPzNYJM zJX_eqQ8&#H^CSXi!66kq5tf2RgtILXXQ%V1d^6K;#t~*NSX zVC~DG)BlIu*YsEa5OgkBI}bW$VvYZs@1>AzYZ_Xx$>CEKE&1Kzuy0&Pv`JWB-!vsna4K2mwx$} zTqr4}JvU{Zjjn|Acn(V@(z(dIZ-GwE;dydjQ|A2*j=9LZ?|`n3+)KY422GamHzzXA zSRZns7Izi#St;XYSptWt<_h+n3GbNz-&B#=4rH>wXd>Mz;g@YW#h!`Sa)Ngv^p+Di zV?8NC&gmsZ7C@sXY0XV3Vxu#q2WAOM5i6g)I zwvWLBEA&qc-ejuLJC$_WSEt`P+;daoiLye!Y%%GVT}8hv*0A&avScgtR2T8%A~EhG zwU%rW!$xOH4AQwsj4y%CMPhs(bS@I(Nzm1idq|A@0BEu_#@gO5yB3pI#4}TBq#Dgr zxoi)^ZeXmUlD=8QICQaaLg}0B>sURVPsu+_W+@f4Aiy*LFo!c@NxRo$vXY_su4;dLwui;xFacqg2*U$B6LeN=a?OK3Sbt$OB9! z)~NBjU~N7+d+kSf%=G5j=uE7U&IM~%V&<$m?%hMSZJPD%7HVs8d;FHbR=G7&&t;@) z%30}t*Wp+10BzmB-bUdqE&3x}Ex7wfH@eDkKH_2~FOR3eX>LTmB_U5%W@J$st zyV~1Knlag)qdiAwoul`Ur&%q_bF}B^%yaZ)nz(Dv(Vn9-&(Zt67nB`U&WU~<+J*EH zFvW4)ah<_8gsgj`nN*`sf@mY5zp$thKtn&yXLsXY#&|jQcvKd@s0fqY2}_@!n1OUU1LR zeZ|q!<1)vJ*E)J?93=2sN5-{|=}AAX!}l2isePk$Oz)Q&ynP$(+i2|#Y}#J%=~VMD zu6ahB;t*bLizK}sVJLjtA6rtR3$>-18a=YOs74=r^pQu7eh&L?yXWrF+S1ag z<3~;}c|Dqp+&^vfjLbsq+i0zYvRAzxooPM#fyLU=XHL}~TsnB?!GoiZj`fV!Otscq zFxS>bW0jGMs<_%*#;QH%O8;B)kW#K-f=?sN*LNcNA2R?15$!$d%+uID z8x(@(L8U&py8188MHT!7#=h;u%mI0!>AOHIaZG6laBS9lWiIE_dRUuNwf|#?#xEV z@qIi;#`%%1+t@%e=JRi~b5OO84gBvo<}z!*FF;pE?lo(`VbHuES(5x;*_Kk@uh$h` zoVhLUGCCI<@=atrf`eQb$N4RVW~uwE0Vj{2JQ42ih2va3=>DDIGH|(!{Ug7RRTP4!v3+)E zIcOphu@P>s-w>(*IR3vKaQtTDHTCCmeWlK##-+WYEYJ{I$ZiFBH zP9vOGjSI6Zk3t4N(S*L-c%rloD;f;|hrz|4FRSNQ3dlhYdUNpRPjGIu>e1iUaSr74 z>`>zyg}khMv@@(iepiDAI5xPK^1G_eUWe^ZscpdhKQ~uSsOCylH4drmD?cw>him@c zO0Jl1o>BqZiF}B5;&715-wVdW_C&52Ko8i)=L%$2FSH5&w7U8#_pyCI{U7?cefR}< zM3Sw2co_t2515HPOZyP;xSj;3M*Co;BgT17g7t`QuXaHmV>a4{fY*0uAA)}aI*0Zl zUj|(rxmWw}B51PIKK#PgKE#VF#j7f5a{I7Ld*FSazQ+}OUPUIp#V#zMPJHB%lXR_S z_R=`|z-oW#j7Bo z2FlDffOM?ioNOnWXuvi_PnPz=N@uhe5uHPO5qu0cb!abwhd}4hUgYOMS4ZyEUi=I+ zS!yp{x3w4X;#TSao>y-l4!g7u-U{_rDEOv|Ow4D{3LPs~#?#CdG+mMLIxZ4Vt(X$8 zIj_`D!-3Vm3(vZs#+t{_1up!?h+KKImRfPiEf>!P- z*rY?Ukkt@qFn?`jay-!oS@atFGhLAw5+^LZ-VIB{(N9-^r7&5o>gtZ!yqaTkcHtdM zl5c0?iQmBmPY2{eNh!QyT4y#o6Hlbut6h`VV>W#LidvKlp1uV-7d$P2u8!ObPj7=J zOL*F4#Z%mCU%>McPvtbT=Wc{-YT?PtCczO)@-i{Ux?#CkWsZrZIh?B}!JLUD(z#&C z%cl5k+GSJR!7j3CDouP>g^T4x$w@X{vdX4Vp+B5`(n?)CSx^^O`d;rV#-AnnC1#jR zIVB#%Uf7~{N>73r6I(Vq6I-Nn!PXZ*=OU-R3py7$RR<*`D_e4^Xq8iO=ky*t zFXdFK)f2r}zN6}Ws$=7mtH=fVMR$wXg1 zT7!?=(Mv)ch{)G|Y!bpoXG#dtxkw0a$;9t`9ZRN03ZfbkVrC+pXW;U^Y%!kt-YdZO zE6Jv95kr!R57KelTQb?ww$`y^A}l4A%*RvmkJ>U>*Zq9l3`ElY0j= z`umgnVs~58_v`hI_FV6_TQD^~&@N=kr~PTX1Kxu177X~Nip(}3gBDC{)ZGEMIP95; zG!{&7*pw1$@tkX;YZ1$7#A5$JD;ArvoESaR7K_bTZH&nKebl%uaD8y&z^>qZ!Ta;OgAW8B3_g@oql;gB zWT|!p<j505dMeZ2pOeR2*d<-UgI>0`B9I6l@RR{Ox6K2|%sn7yA&o+M(C$;2%CooE&H z!t8mTtR=yYiCG&RamRB6f24E4tdG@>U%Dk$`j5!K=! zTl?@b4zq3O(LO}6)!OA+vejrGtaL{E5Yaib4?b2qdFhr|?PJHg#%dq9)5mJ-+-k2= zUYfYksYMRnl+eM1iW2dqC!xCqJBg)Ubo)TVb3|V9dfo7_#n&HgX{rbA^s(CB;-nNK zy3GDVT8MfQG#b(=vLw6F8PdsHoM^tJ1&iJnHbjGv?e#oM_SwN;an|B5P((3;TxY4_ z+{bEX+f!7<_mU($VOpK{fxyM;d`2#mls4Sj=uF&_uA3A!Jw-nRok(8ZTJCFjineO3 zHmuGVr2K}&=;5TK$3e%ckJWaVG0ewmgKOesYcF2KVaj!8Vv%&L8*<(ngKfxpE1l6^ z_*iX6xh~($5~~d>G;S{r;G5~~gOAn53vo!^3RS9#_e9KRa7+V6>7-i!qq2V@MGQ}{ zD^jJ)5uc1G%q`!XR|<1czNZnEF&}1S?+%V|e!d&#G;vZ?5Obzr_9Cpz_AJeYIs%V0SL{T<6L!v}2l zNqEP^*MSyAToF1GU!-%v*F&Il!54Apg0Cge)scJPEB7{NvV<>7lmzgl$9wNDjbH63 zi58xGyf<+pc|9!6flg0?5fe)`IulEzbHUPQLFa;{Ejkwou%yR(?=MZHiIVW~-a1QL z>)qB2Dr(dNN!^rFY>Qp6by&L=t2S)e=uB*p&IMaO-aCHrmUwSqOON;7Un=`(iN*Mh zx&0CkK<`ArF(=<;QqC^^PmzJEJ;F?dn(?xH=|&LxLrTi&H?OB*HI+tiM+ z{iUh>iLZb~ubHbVrBv~$Z+G)7Fg_LD1}rScN^`0x1bcK_{W(dg|fvBG4^rvml~ zuGYiUUD4TVKQ>I+=uAwJ&IMCG{yTo>miTX4G!dqDfsB|MPvb4{@!vlF8+=nmW*d;f zzS7o6zC&*D-<4Ez@dmS|MH8>Oaw}F{nUqym+G4+D9Y4l+H|H7mT~ueWjvq(mAm;n+ zwY7VTiYv4K`W_AV)q7>4?>j#et)wC*WP|g z7!Kt?Qa3fpXRyD3Oi4msBpvIfb@pTI)06P6X`R{VN;sM4uw){g3zlC4ot(q-7%J~}-iF7Mi^#J^o4B~St=-Rg%*6KO+D{3# zJLYXzY{hf$0qqDf|BH@qAJ6UMxyk#&f5d~Hginb()>$%y;<*p`c_bbl7JqoFrRlOx z=hazrd!*>s-0qNyRR`SO2O9QC_RuD+YiS$Wq?OLlCjFY*kgn2}MxP1WkrP$E8MdYG zhr29mZo}G)LCSA9f_ykB?`NsWVjsutD=m;P8jTSIUJ~{%gp@2-82Lnb@?h@0?pwb1x@9*{L{U4#razK@96S+`M@+k%Rez-COi!XynffE?T=YjD_Z`1Y zOWZfG)fV?XQSwm|KJFVV^JU~aV%CX%1&1tkJ&yKc6`5^-c*?uUnrCoau7PS>o!cD= zf=Z{S;L`3J2{POT(dn4Um?Si}>v+4aigMB<#lHAwy{{0yUT)clzfv%3+%lpT7 zkR{7##OnQvJDzvpdHKEfB;_#6vHcTMsk{z8jvTMenz~s?I*-^eMs0}v#7zFRVT^I# zdJc$zX*9DSG&Qr|d^CTl5k9)y2v1yx^8ajvd;e|Y?7r_d!u$V!_TC0Mj^n-)?3n>b zh=RD9H8(Q+Moy2}&HqOPD_(k&}B$TbJmBf4TWwpZne%1A# z=_yQex(SjR465GLR9E%CtGlcI-}TXM$?bor;^v&v@pNbDSgND4(}|V;>lw9+7Bsf| zIevTYtGHfiaxWIJ*8G9eBm195T~6uOlZop3)Q>=Qxuf>&@zQNh2iCFvw@PuusT5KF zPN%c@U(a-K@9$zfm8cw{hIpz_DHfdSI`)q^U9mfyE7Uj1^*VN}asAthUZXD0(Z>6K zp9RKB2$F8!1b|4m^GLUtTrc$nNVh;ZL%J!r5YjEibp^aug51~8AkovIG{^+&Dj+t~ zAWs9PmDZ`BZLC3#%R2S#c-|hwZ!z`pgi!0$d(&dBZ8$4kskSCO0y5dW;=!6za?l%gvPmMf+S;*iElU2Szo+7-V^bw~6z1{hk zn{g_h&wVs6*mAIJnR? z@ZZ&y_-IR2ZsvXWQ|G0R)a5v-$WhnDhohDvYv8Lh7&neP^;1vAt83u51D?Et@8ahj zq1M0;N86X?+2*`s3wTEgyki8sg;yaR3TVvmigUg0>u4g{@?;LmlsSK~T)o;Kzc#1RRC zhbFI}3?i*G;}tyb4}$k5uLy!m<6=LrAlwFDg*?Y-c%|&xTHQtgYiq}4?R^e#J&0$S z`gDqL-%uYKjPh-t26l!6I|I7DI}$59>*J-A{gi=|nDG`7rDYVB|B! zBqHb*{eAAMxK7y@qO#qNS8A+3bs7yMn15*}-M2!tcP zl75=OZPN9TE*N;0hI9qnCYGi6k<$;MV|?L~JJU{9{n8Ryctv@q*w?iAT6b6mDw4KLa@73jX_=p0#^$ z@`D7>L7tCkTnfR6w&VB|Vq06xW8Mq%U3(B|4f&;EsBf}ge2Y1hx6QDazX9!dIV@)7 zWwRFZw6l57p#ujd4$e56Z@B%|&0{k&NA}%ybY>#bY{Evof;b`}h*wyPxv_Wcc{E%r zdEtXCW{)xC@Vw*;XPNpf<}iDF3`d&35j#EKlNK{Z=HN-A7fpH78hg^}EoWTsS79>{6cic^)-oLF-XE8J(+H&?%=+kIwll z=q_zR|FzG8{;M{&po_p42|+x9-eT$!&Gd;iQjtzYUYq(v5S*z`5H5^9F$B0U`o!IU z3!_iu09QbyK0$9b+a;;Cy#a_ z{nLvOKo9Z9aZYF+hjquy&kGlq8lk8BWz0rG2 zX~%Kj^4T=!maHtfTT>MmKHJC6#OLoHun|7wObl~W*7I8iiJi{eqpp*{eggk}iR~w_ zyV_+Q_AqN&ts^L-1=&Q(IFImRUl0s3q)Z^3A!QWY2BSXKX;`feX9|aqGR{kY3n69V zUjkeKv6+;~0*37(LEcyLlKRX2$D}GV-<+zXR-^zHs%Po$ASt822fq<8J%~GWx{K+S zf&Shot7(QKeMK>rIS-AlD!JJPG%71=dO)LD&}h$keA8fK#dREf%fN|Y{+OoKf3BPP z@5=m)xptnHF^)cyARO1E*C_ymq1Pv*BAp5@n)Dh3XVNR-!qDrN0T+f|e*m~J^!jzc zokAqNl1H&!k~;6Brv&kxZ6!h8SMrkj%X!TD^7^Fz+{L0_YO)ODLcbg5&&$xCoOdKu%@rajAXB#trL zm>NSR%q}M$!#L`3z&++VnCIoek-p`)jjg)8Qwzi^29thwqiiiAaar(>$Jgk*;Pm6j z`-9-7NxwmGq(NT8l!0(z==To*C)e;gxv$|RcK#mc!qD#-z!eai$=e)Y*e(*}zLJ;J zU+zD?SoA9W7O->Vxa@5}I&DO&15sA+EcmO%w_!d6bmHe+%!zRMogmIXfS!Cf>6D9* zshrc;zTf5Ah(3@Y{bte|S6Gq07>O^0msbEynzt{TvQ%8SyUjp9YQxE5L?FN#=bH7|;_&{U_9BF3xT z7wl1)0t`88Gl}zruPz=6C7Kc^2+ou^gbO2az6`i966Xhi3nOv94!Bc@lsJ56VtG>M zg-am2$St%nyn+*Cp=Huhye!$lY!nM^V~~aBc|z;FEU?5pt*_+PJS@}*IhN=5upHNL zJlE!0;x4Bah?@+imUs)w!qDu)>gw8G5X}a`nKVndFf>c;FAUB84dBAi?DK#tAU4wy z$@ADQ66Ad)FR8!We|)j6vR&duF_*R+_4ZXr;emP(cj$D4>6U>^UnCF8V5AkZfg=_4 zpgiY}z&guu)B>~8{hpK&XLT`0Z%P7I8_qc$;vu0&1>^Yetkjpcu_d<~{UjlXM%kB1 z#4beQ7~yzqT5@)z0*%rj`03Jre6eXXc%;G`5LYwG@qFaVq|HnekBQx%LCG%mpS9>} zBV^fh9i_sRNfw_4^N;6V5C0lD^bg110EJj<51_tL5TOXrC zt$DW?Z83V$V05U}+7_cNMlTwSwrh^jRUv{M>su^ZN2qUnTOMtBG^jq0xCr#%f@dpq&M3XMuu}A40s*N6|8_&D6K1 zHO_e~dBhggqk+*wQD%W!t;1>^EsxQ|QRYNijJ6ov>KKiWv+H@gOnUo=2Q!($zF};8 z+nY{f(Pi}?<*Ag#Xp7M;kJ0^h?w!@6fu(JuM-L2G%g|zUTVeE|wG1srw-rWbtz~F2 zx}7k3Fl{YEi_z_a(bY99J8!z}w#|pOH1l=f>j-*DbExkL&Ra40%5}LUb{W{t@BjQ@ zZtjf=*7~i+_e0--RXto8iF2E(<@lZ_$`ciL%{HE6IivTj(Oi3Ma71J&te8BD_iVNk!NY*TZiCezqej&Nec&&b_5)_B;6LXiYP&b6 zlgQ&&3&^nTs{whns9y?@=enQelIP+dgrD#dZ!r*#xzbeyeZJ4gU$67k6_{$Txv`0{ zyY`Ll-E&~-?g@Mnu$JBL%N{tozjm%~-!B^94xHY5_^?-bH_(ZDDs4nFGsSAo6-;yZ zG%r)Gq_6FEyz{0|D~5X01N!4(q4>vE)p#7!BYv-NmTUg8+s{8%z0`3Ue4>jy0{kN< z`~zjnz&mbcd5w4Qo1`A^@V*I(V^{W^^u7st{rzvWJ5SlKTGaa!eC1pS(vuE}*Km+V zY{pYueSsuGFXrwhL2$eWuVKpIB5vS;4m`(b?ic$a%H$e?%6-lK>;4(%K1cu^1dgeH zM^v!bRjMlL0&>t9i;+ z%~N*Z1$z)F^ZdLe)Y`4yv}`;binq+$50kt__{!{4>D=s7sVXm7jqeLK)KTyaK&_*E z$j@hl$IP8^oa=u$H`nGmN*?_sL2%XJC#snA+Kit(E*0riXv5?uL2$eWuMyrrxDC24 zCOpSz@{>!kA7&BvX~s`n!2AND1bJV{OX@G@F&lK3KIuPqsdSXp@*qj?;5|mZ*U0~@ zk^ecJukN?$=P!NSE7wz4#uuo+Olw{PJX8A18gv2ml}(!0Y_IW}ZkCTA`gu*LRdv1T zOcXn4-u~I-H5K=*uw{I95O!`NpYitH)jEo&(^PFD@EWy)4D^~&(P@O&_`ay}!#3wP z;~JNkD8_=+;5UhLC?gMO#&4bgj6Vo1nfxXQj`!d-Oc@9lhTnV{aB>Z=llz+b%MWla zjQ;Xl#O_i9z^t?;w{@XZ`q-F%Lvc=d@FWcqw4vlf23jJlHKv9wf6^swI5~`SZ}&N zinZTRBZozQi(g8vdMWX|PZQ6GwZH16IK2Q3yoEK3-*G$(e;X|P7Yo3%_VpU(@pck~ z`q`d`3Luc*&}@XzD9PoC~9`P=5P^$YN7p34$Xp<26hf2p2|Q zc@A)L4X=~?nihQp=fYU@Ujf`%#AbZv5x`uizOoC~GRU*4OpEC&cP?~9qLD>Errxxw zuK=&YS@L0ch+Pq4SA+n)@`%)lT5zY&EdzsnQC5Upgn2(%NWSX4pYjNIMaNggL3Wge z^j%jidDrQrB@g(uA}M)J&-=-$c|Z3%&b9*DwtY2kj)6*0DmF5vMEoAg!bn6)2!9Z6 zZ%V`!lkDbdYvnmd9-85oQql=PuQlTGV+z zIrU_|Z^Zh?(4tuIM;lE1(chQt*4p((EfKeB-!|@DoA(3$k%_YYrZxD7@&s!BfzQhp z(3+NiSpMN@*id>UBrN|>(+Gp-4L0N--YlQ6{9_=>YNw0f0nCa;?w{LpA$kbL+Z7L) zD|&N#Xq~q)AIanGBn0Ros+hV#7ox~f9$%yLLR<9w`-8|>Qx6G(<2`r{QwG9?(L*l9 zNJ0_!Zf2RgfXO3DkoT3mr2cXqvq43F@t?a?ddNcO_S~Xhq~XZIh0g71$YZ?OJ;1H- z9zf_SLs8bDUAnnF(4>IBGGC`;*gdd$)Z8B0J?3bGH@C-ezCSnj!_fj-yM6VRag9q% z6k|bZ+CAq`7KYyh&Dk;eO%R;PZwMEL-+Wm=9}*RWhD}f44{$b&C-CclJB!$i-;f^) z-@swL4Z{K*k(}DMJ;R5dkX`jTJ&RN?LNsEJf~;Nz)*iQ zkKlq=>s%6xo^yI`F5s=(SHsTZ?IZ+f*s3^;hE0vrA4Ib>HS8cbQ^O`)7!BK6^t#m( zo;G2wC|*Psz2Y$uE&8EMH18qzX=DgBrzdD0@`!j4D;#vmb$0`F}Vdha(3&@B( z5co^6QYWYH*w9-TX%w@eHLv)I=qx>G=5@HAIf}UhWjN=pG=}an7{xlO2RQg>F|v{Q0NVs(-NbYI<-YIqT;A{P2wPN3UV#J=?y0rREIYPJ(b`(+B=z0FZ+b1Ig71$76HM z?ei$}2ay1#h8_e*$;@k*G7xTqI`aN_j?r9C|EDOEYX~X#HGSa!1Lwl{z`p~yvxv>4 z=Cgpg(Alt)xRyblRb?O*%{+=~0U7Bdfxi?|Q}+CsX)qhsSToP8&(a_F@A)%6f6t%s z>YhJq^tf6^OU+$+?$2&L_h%e0SX3m6_!96N*$>F%H=tOx#~ApInroOxgY+OyG4<&*A@>8iC_2q<%oo}{ zPp9$r0}9q@ycIoxI*rUB;@&`9Nk|@ZLlJM;zC1>79WPmxmj;hXSe>Tv=*6>WvkT=h zl-Ufe%wsNvP9ysOnLGx(Me!KXY4T_rKW_=S|4$a*feGzV+!dhH>~Eyg$ZA17S4hn@ z6x~I18J~W$+^fUWZD>D<-6TB5w=d8St_PnXuh~|_TemN-If1v6(4h|uUeiI{C5_0G zv_Uu?oB9mpyFUmWnfgo+9Phzvm@*J9j6U->fRk%@o!r;dXRgG#F#62PfIExW%zke?!~nX@~kS;V*1R9h3Yf&oQ~srWq%;yHJk9_)LU}ej=EFxoV?a+CVAec&)EHe z&>$fKX_&ZW=Mc5J*D>V&K!Z^{1GfZ7(eXx76uSa*pCD61-zt(5`vrZ8<8)f0_K1WP z=}Aw3NKn}~D0gV?%$cdS_ded|qr@QTNf2^4N=#B@kn}u_bN(Qb!IYjsaA{o3YnU<+ zE{yd23&6=WyiV?GN>2!hS=s_MzKKI>p}eGb@nx4Gu?%<+#iH?Ox-02E{%(M z4O0ffh0$I93~+J{uao;4x{EW1b73t1?*i^DVl&<4^MJWf{<0s}GRU*4OpEC*_bya- zX=M42sW)|mzht%U($wM)!(Z$?BRkIs=#@t#ucFt3JS~Z6=mzn}QRb&T|1nO@4-IJ3 z_cauycmSjpkP&{W3X$)0R$%5_Hp)6UeE%oP?s~Zf5>w3sfSlazX%(UjU>=!ZooH-#5%Urn5ECqa7F@R28e1b`kyVjnSza6C4BKpbDFfj)s3Y%>=NQd7M&Cf0Tti5?uPG`21?R#@%CmrDY$hpP!0bYl zAorELr2cXqv;8LZN&mT4TW349P)Rv|?f&>)y}yu1%8ZtjXvezoxN)>k&z6B~I@)T) zR^}_plc@R1Tru|=-q7+D%U9+}@q`P^uzck_a~B)(6>m0CSiaI1ZI$A}`3mO`T?%~# zmc8OBb470-B3k&CuULHrSYTKO3*sx3#|%qPU-4!THRCIJv<>x@{%9)_hoXELWu$=} z#Pt^EnLh-r3VkNtKk*9EgXp)3U=Nw|ht`>%L*L#*YW~o+_U1DM^rr;s>kNin)WPyJ zVl%twd0y-bLPMrq6a>e6@EWEJgbQOA{T1Nk8eS*&HSD4oR}F`;i;93di`dLAIt`dz zh!W(!l9$w9&SSQxcy9gYTFovhEZ8n;;6l{<53K<@twTF(LZoh-)AmtAPa^oufL*a@ z_a6eDJcM{7q6DEIraq5eJcE25kvyvSGs(hq{; zJxE_n83?yQ9eIB|$7qg#zL|4{AaARI&(vovm7(ro;<^GbJA3!bm*&yZrAVQpE6WJKP~O zjBooC;0lPe%xU#@ASQKQ-WAyd%ie}4LGCMgN&V&i+#2BUb@vVD3%UN~Cox)569JiC(Hk;4kR)DoaMNcn1zzB9E< z;&T|9+h488I}rRbX)Xwk_u(~683-4K<~{{DxrW!teNCGCBb*CEb58)SfY^-Y)&i!L zXf7K>bCVv;QR+}*%SQ1yW&89Zl5jNFap5%Aom&F*=1G2Z1VRwKkvE2+w@Fn??N9LD zq_-eAlimmyhTc92xG?ngWx$1@x5oijKx{^DYXH+q^p**tw`q^w*hW2D2Gi*%o|tT( zcEp6Ex9)||8$2zLb_ zNy77Er|`U#7@0_3h;)?kBj?9a=u12gZBApfawG)NSPB4PXzWg@NT-79rX>^vXVMtq z!qC|LfD1!ozYDl9H1;sy3W&{UjBV0NG}aSDW7_Mm5zk8+8;s<2NJp6y;k*`!#@c(1 zUkdFlA&9ot0w4@+?UIUg8bn(`a3*aLE(~pb3~*s+>$dM*_Sdd(@@(T^9gYX@dP1N*g$)l(ikP*Ho=aqO6 z2%MMo?<@+GU)rl6@@v?76|7eQ_|i6Bg}&ZMUWEnDnycLAIOVfx=auW6^fT@Vy$c=1 zN3r_CO*y4sKa)tHY_V8GQAD-Yle{|Q@*-* zC|uK&BtdYdwnn%OzB*YSqqzpr&YJTYDPY#zxOf|~0E4#H*B{B-(62X44mVphInNS` zNO$l+Bsh+=1ZXekb({JRqCNIm7}}fh)y2ag+6#g+X^(JWXzw=w$7?0XeN9i_HvkaE zQgQ)TKx}3yr2x}PUWi;{OKDu@K9J9n_68z(Ar?6IL1doxrW^9kTYbpc;l<;Q)8=x{ zkE21f)`LC@Lu=!J^9R9sQ_cm!nY2c@FtkR^&;K5BUz67U0B~Vw?G)e&h|Op%37A%* zwSc(~FzM)87iT+5deAhISbI-Ur>X@B=9kYV6Iz98#$wcv4C$R)%-FD!RgbsaR z>Y3z`Vd(E(sYs_n2PXXm!I|_&xG?nh8Nh|1zdr?B82Wn_a0SF>^tTZ(twev@gJhld zSmf}$lyzC_v9KNs;6mGYEc(+?JQj8*6uT1&us@GTsU|*OYE$I+2}B*7!8!oBepI^XQEix7Nadjw>(AUiN zQt&z}|E_{pE|pycIX*2R$hT;BTxz_l;2JbsEBO`!c3heq(=+Dje}!)`(;LNZUFfcY zVd)KU*lo$K+xLhu!M+OP&*v_H{t)EP4}#-;cnwnq!iDkY+g$}!b2$OK3QmsIuiMY` zN3pCIx@&G&nzQTn*@=lB{Dq;laj(m(|3S1C1ZUD3;lj|G9lQ3LJYej4a;$#cer6zw z&42mi+mhK$kn^r21nHDkzBSe<*P`KCNv8~yZ}sc;GlSMEVZ9Q--L~;cWU`UG5*Kyd ze%7~cf4TBRwD}CfjUq0P21$%{I2T4s+wH51he29e5S*!{5iX3DX4ma|4Ii{_U%U`0 zfWZqfkdEYqxTxzM>*-584{c6kv~nZ_(O3!qVQB15sYs_mG!_JB(iq{w(3oAf?=^VP zx<~Okke`yq`XYH9F6z2{gU0N-eQNe$Xls|(#nt~H+6sa*X^U`SXzOEunrDD=u5S&SOgbQOKJq9>lD?#pST1YPf zAdH3dS-=$#n^{Qf0MkliLP2|Fi1&d!7IZh*8_E078)dHy=k=g9#Lu`X+5HxBE`@z* zQn8YIy(j06If*v+@@+!fO9+y08vzi8&hk=`P6gjhItzj`>5On;=CWnmclyO+?u5JZ1La3=i`E)4zIwfbJ82d&i?FGUVuq`!>yQdlnqaG`Cy6oZ3N zycBlToLw~s?9U@oskbYEkj^w+gOG}15qr)p=_kD*%jyc^j+*bf9u(~HTXHllJ0NrQ!bu2`C;1ik z-+0SSvA8e{ykE@eQUCbU!FmC_hOm~4YKQm~k^*8g>F^q0T1h$tc>yNty#U!rU)r&j z3wn8eu$D_WO{@KAsm=?K9hNW8Te)=mt((VYW{&K;>*&lxq%jyvOG}lO>bwBM=_q5D zLs{zum@k%8Nh5l)UI5Q)5U;gayxqJ2lZWfP0K?UFg<)iq^#WKg0B9qR*s@-L;Y_5t z0M*gXP+oxV&i50y{dacR(-MNLf1W2CBi$&3j0%(>ELhm)6%XWguJ_ z-|#5lBc|_=YC|S3qoL{htF&D_Q?t0lwjBZT+*~;2Rzuj5G(p(h!=h z8X9R)A4tjU$X0`ljjcxsj}!V#rV8O52;8;EQi3;w+XNV1BjaYQZv&zPo?{%Cs@27F zcOc3&%*%bvxl`@3o6u12u&fNUdNez{X|NdG;(Bynq;FnWt;1>^p!qyv%UXtg{gK9h z7r5hF$?ZKll%!|g)XdRtmj^9j5jax5*OA(DukV<8p{4j0XiZIUEh1X-uk{}4%SIa)meH?Jv%lx< z_*Qb)DIHJk`gZbcSDViQw`;vU9^oG!Zo9SK`jcSfozV08(?TI(WRvv*ST6wZCXYyY z+LE)t`}?Ad4=;3m5Wb6?Dm%_xn@a|2vJ!$cEtZS6bv{iiCl%>5$O8}rN6X*u0U%r$ z55OM4@mdLTUvtc2$*vF59su?sB||34sPsZ-f|HKgoQBx05`t)m=fluY&|V0p7cB_R zq#?U!LbUHD1g)l+)|Nl}mozjOWgOhnkdTK;8(I98hUQx+lW461V!NzJn${l;7aFRL z(}b~57Ou~&P0`wKb6I5dx%qUoKO`N!3b>i}TeGoH`eoRx}nDqdgH zQx*hgdddhF#@qbw02jvF{7JxlP(K?Jc|NB8amaDx3y96E{FedKO4dn7z;0CI+RDe{ zD(hq@+PJ<@TPXTzAcyR(Zftl=uOfYgp`#q3eL?Wlq@$b`UM#bzk7mZVf=+bGfz!_VGx|@FI)^WRNuzN z(Lwy4l9$w9?my;2S2M2~TP{RK`a~5WuZD$u=f&D(QNRqp2rzBV_^}0x_ zCakq@t$pB49+CR1*b&4f>TEtcB>p(^emli~j8pRiF0O+?-lrR?%6;{#{CqoS#g-v_ zuul7~E{~;hrM33GjwePivKQGiJT`ZA3$o&^wU5Tq!K4B+-<%4hCZqrsDrIS)wLdwg zE@HnyDh%~qUTc53r6Eg0#Jxt6W^gYbAUyKP%~9uoj23l-EyYn zzWZ3|fs|WvuP-bSi)EeSTHc>%1EwdMR!tb$G~%m^hr)MF*%Snq*4Hp)AlwFZ$d7Y_}21C&BT z{g-o}go_5M{NHv`dp6Cz981NY31j9Fgz4ETIxI&i#>Hs6yl~XcqEOZ(vfitLl8N z%QLo*U8uIqz00|I+qU1k*4o`rbT-T7v0#oKHrH(DrT zU<*p0fQ2&LCnNS@WRbN{tc3#H$!q*+Neg8-6J>XXg^r<=T)R%v`hS&`(8x|d2TEzB z*(m|zkdwwb$>G5$tLH5Zp_gmHjzeC23uRHzQ2jc|;cTQalm&artQ@j(Xz|OT`gM}S z!;!qrRli!O*~bmOe{0uCLX6R4q(g!pfiRxu9dd z$7s$vz6WJ;4GsgnW}m^iFkZ7ZTPHbLzfLlnw!4ekS;wT4cA0gYP4{13Yu~Puv|85U z*Rtx?NoLanm)F|2>m)4=Eq)rRTPK-K4@I)}7i_6;Z6w!7+8te}&VZh*rP6o?@{iCs zt>irm*wF=+%9!d%deM8fWYgIwmcJdBwBwS%n>-@D6|FcfneB}>V`YK>E0<{wQ#Z_Ymw}pt6jCy?394@k<<0-BeUv5 z!rn&r__yC;jU*xL`p9r=Q6?dE3W#BLa9I>IRJT4d+us{$48_VJph7iR8d{<>RJT4d z+utAQD`5+sb!^v1f&%UO$mTL>k<2=tHr7Y>+x=SY`bY}dwz2m62QRO+Z`Vg!Yk%=u z`}ON1`?HsG)^W+T>mw}V$Td?ki_%=zW!LGWaT)}+nFRkaTh`30 z#ui{?*w)p6`~`gB2y&=yePm|%@_wDgu8;IO(5{a}J2cYg7Rl^m&{5s`$bsG{o@Z<2 zTPq*`uh`HXusiy%-0kYIX749f)!b^MqkAcQk678Iyy(mv{Gxl@Hjj zb1USv+EruiY7wmM8aLKQ4)#S^HNVhtNPL6U(vY=KsNFR3{hmYlqM)Jr^^t>_NMk4q zw(>0vSu6j%p0Y(jL-p$;2L~g49c;m~j<-BearI6}t`l!_y>1Q703F1#G_8Gl1j6Wb zJES6=ij`qn`$2HDP<(7sl4J~>as$U;D)E~*(U$CW;j+NXkh0-zS znUeeN`NX|O<0t1(zBsJ>y7iI6=_or-3@vy(G8MBkC+(LdKr79@cEs_> zR-&iC@kqT+QjbRt_u27CyG|0g+cq;Nhci)jp|G~MwY`D;c|=-SEoplX58ActmPZ3S z+lNPIql`0H9&LFvus@I3x;%O~%J-}+Mq7+-af}{L+dV$*nmQn9+h`rb>3(Y&T0Oe0 zFnYjRh8CmS3ZsXtWoR+FtuVSe2AM+W?H?Y@WUvnzhB157X&`&`ALXf(wG6Fg2<*=z zwyLjVxHr-myv1mX(JhbBb`;$DI)J3@^!+Y6%yqkI{`Y8_VVXnCz8YrS{Y z*U?T|M_;5}3oVbfJi66+bYGwKM_V40S>Y@%JI-9`bo$H+>;Q;;jqWeG-q(ps zZlX|jQgfBto%xB7VnB(5xcr$P3*0) zw|JqZ^Yq6L%#7WIbmoYcPRbE#-#jyM?~Jo~d~9aS*?iaZw6l57p#ujd z4x$VdZyuYOIkNArqchPwfQ`N!nPVgAAS=SnRr*|g&#^j2wlm>)Z0^N3gED_0EQ7gs zOAws7cMIV*s2aRK*2ie>-SQhK3$u62HvsoRL<#bIOno~;#$DtKh)q^RCQ^WT2ciV2 zPx6xb%l*e(yKUxCR13&RpQu9Q&$miHcXb@~Z5(q(NAEs(baZ-bX77=)Ju^oSP9K)f zggI+aQO}m)zDTpVvyoQn$JUwjr@mzD_M}Q~`i0WzY+}_*@vnduu@iEa!(A{unoB$J zcse%wl(UBUl6&p3n2T?@Xc))2e@?~rrNvunJzwp2lNRp;3|F=`qs4-+E*=V=nY0)L zXVN0!HXur1eT*h8K7+C_wD=c*3qy-v0Ng1=(jwoP^uYIL9^@b)K_2x^$sv{Z^%bc@ ze>sm?-*ye;KX7q z7V1xxIs8TzX)VPRw3dnD3CmVzCWoQ5*xGrt=JI=GTh5eDr#=U{xTo}3GOqN~BK8c_ z^v5p+RCHeL(gB?`w$q6{>LwG9QZ_<%wy|!y1N|a__{Ct-<93u0ADhwReZ1Hggf2{a z41yy~`RS2xVd(KGz=fg5KLcDCdi*@#3W&|T%|0bP4o3Mx zlpSlaV=cg&JR*5PEADeJ+#hK?JX_r}J(PsmG+)BNx>8nGMq6EpI;(5;sbsq3UU{r^ zTUTm>>p1-`G(YA2fFyT1{jxgOaoJmKSnH6zQw&FaxJ)L!9 z?()KFtp&ERhDRKdApK}+c+}E~bBx3V!twYTofmxAj=Vnz-k2I*5L_A;^BSfMgxjEw zyg!~}G(8@7qfD+Lq}3W!ZKy!dN?X(bIWDYVtd;u^!lA}EUs^wbw+ zo$^Ax|F2x*4W8CQ7ib z&V3cvwYPf)i$fk}TsaHJt#BeX=gF!X1=|7a+L^LhWr z$2=JJCFNPh?uj_+4a%W06TgaMuEcG}R1lldex_g7r0` ziGitFT>x?JK$L5km*+EO(nC0RBLQ>}IHvv)G2SUXi3k&Ky~hF7>r)1v``j|+m$Mv z&ZJ^)$5OFsthDf?i{EF~meRue+?)Ci5T!+=S>y}#5@6;yXsXMjsrI&PlHjHig0wGM zKVh`5?NX6WMGG>uuOK*TP=4);aACBsH*;LHm9($(dfmKFzsb1hV5GI!7jay)L&il* zE~a|BIm8hshBW4m#8($bKyx{G=aQWz*Xgk1qNF6X;vfwD%@Eobg6J;@&ZIxWg`vMU zb6m8Q=uZ-6RxPddwSEhSxW+(Dh4`jJViyjGgXHMc)Ck98 zbG+zYl=(xDRu=?kYITGQqt$%|aJ*K6+}HGJ|0w{%__Ut|+$lu10pFAF%l9{FFoUuS zo!L$8ib0-LWkBF&-beF_0Z1PSyh3-C!5@I>Z(OeP+r`J-XlD21zUungHGuCy%rf0F zJQQiCZ@a!$w|4WS(Owf9eV0k!n)H_f4DqiS{q6SE#Y4d*)2k5#M;hWaOc@9lhW>sD zaB>Z=llz+V_uDuZhW<_fu7F5-BQCRD`2HsSvAmUJVDS3d$$bIqYlr$G?fG&M*4HYp zhFxC^)NvZo;|`wCf%wH>(&KiN5g(h;BfZ`JAar5UV-Or^%1@7k3qy}~eXZB(!Ru=$ z_XVu49m?2U#q2C_pikS(0v{TTvh!m$(k#2!#`)Hk=j~YalDV!nh4n^1St#A!wSI$} z#JbvKZC!1wx~_JqSzolQBm_yDaR7voHV;chIt`LGL2#zDAzT<~L#>Y2N|5`S+TY&* zAdL3+Jm5|tQrn}1WxMeGP3@0T_(H9(TW~FdJgdsUdNT7Uss&`Ej|BdF*4M5k*4LP> zS*))e$kX~7mbrOh=4K34zo{O^JK}tIKD{n4wE1cc;*bRCKU1S)IpG+I1CqZ+=LHYM zYDcjOf-j~<7X)Y07~wYPx|py&Mss%gD9Xan*rxy&hQ=lVS3o39oyWq8pTqf9vaq^@ zrsl1ug@rYShecrDfsV4hQFclhinOnU^YVN;y1r0yQ?9I&ZF8C;&yv9QW-w`rJUa|c z?NC?O{(@*K2+pJ_!iAx!djJ=Pral9>Ff=s-xB_A`n)(r7T8XCCoQI}ljV$|;G!bKp)EJ5~-n-BlvE>oFZk8S7g@m0E+t7Qk zh}NM`?mJq)ZZ*+jSv zx-KTHkJ0oJ>_Hi?l_2*uJ#kBS-7ILSe%>=kptKQft@8l~(bihP2z?Q6 zgY-T~_qrfBZqil|oJm`R3qxCW-K^K_!Ruy0TlMQ^hci(;aMoL3y#+wAJRdC2hQhHKC0Kt zvM=Es7>+a>eBtArZNHlq=|e&g9f@{DSmLPUO)p!}IHpNQL2xD=Er#*VR-&Wxjdvc^ z1D@==o-MuUblT?@=le|1=N>UxF>LXd#tTjz~c`-Z7IGV z_*Ot{HqQAfU|NZmf_KxRhnGOMSjcbIoYUS}xXd0q*2A{X#f3BVRyl zA~_Olk5-x?(-SyDX1cnzmHo&*XP+twGUVGfp((vZTi4SupWd=A*0-Ma=*_cmW}iy0 zDY=;4Dc`AdwdK?P-;B+m4R9VxS5n61t zrggfurj_s3Bazn8uy3MIQ+l-Dj78Ih3XR5l$O9z=(O(Jx>?7hL@q=(YHa!qQ^LI@8 z3xZ4Q`k68;hIu}%B>RHr`Ai3_Y3)t-_WCwhX-aF+WM9K?#@aQl9&+Qq5k2mxp7rRA zSyLC?j9tv+a=`je-q({PS@YTus7){UmQz#P}Cb-H)E#**0h2i z`+XDen$e^6W>{|q=qry%dEA=bjNSp?r;VCnbi}WcH?Xd@23S`KYh3|F5H3`jOnR4B z|AniY(j*AZlqQ4=BTcMzrJFpWbv33hqo&X!5!O}jP=v9kh3^=Yb?ND-=x@PRioN(g zrO(sR-eXeMy7II?zi06TaIt{c%(K`5m_=he;Rl*nz9y>wUB^2c|_8EYg$Ns8Q(S{ z%`iHf7KdG^@!r?wk3Vgdb*<3EI-JVVS<{*V21uYJU@)zrbtogIFrH6h?813}5YBB% zj378uVh}Ej#P}HC!bptY0$do0Q2-oc6Nv%a!)q(14D!BSuJ-RQ_aAd?$jqxsB{m~CxvHGv{&7v4qIe3lWhx~ z=~^Dq>&e^Ot3WGLg78dJjtOlwlVdrlNT-53CVd6Lne;`tF!Z$taJ*K6+}E^xmhSpj z$g#Thuf6Gh|7PFKXlbEe0xX}h-;LGCY0?&Xw9psvmNdw`=~VzXstbbSCT#`5kv@10 zQwG9?p)I@qRW+9ry#5umRk!{XwAClu1%;4P)~jH>3P71kM;-XXNJg?bU}dRajQwYn#ayvoTHIu*Pz*0ppp{Sj>UEVoop zADO0o<@*oh$<>1!yl)Ot8;b%#KQJx|X*m0VYG9j63(jO}z{ z54h==M~_QpjqM2fM?w%?<^d3fE>B2BIt`-BAUKmQ2^WSgIiG>oN|5`Sn%-XlAk4gn z(||jL*lavD2bc?8W4i;_GRU*4Ok#c>MYVv8^pU`y&oeP1^B@|H$Bx(5*b1#~N2Q8Z ztK=6#3tYI&Ojl{uKO4N{uEdPh>p`cfrz^!(@rHD2Wu}#x4Lur(6mWU5$V~aB>>AP^ zqR7mFbdW2MK=#6gGgN-^ok%8Zh`lLwH5%BOlB5l{!9RD52MA=29st$(oiZrmsYF?4~))>~_ zYOjd3#?&kxAdL#5>6>1XJkBN&iCwfF2*+d7OL78b{veiy=_Lt*qeaDQm@*J|t;NsT;_3*MY&l>Y@aNcx=ZAOM2LdncE^F5e#UJ=t8E0m6zA&pbqt1hq3@D|tq?iJ`~+G(CV@# z-F2xoz-|_F*RviTkhKlRxm+2KZtGd{+XYdON?)2ZxC`gP(BQqkx_Bt~Wzt{}oJoU( z3qymKLaRH4dy@wF-fWko&iiO2L43Z@wZS=D%OGu}GN|0l`|cN-CdKe^uOxepFS8vBYwm)-N_VcPNJp%aH{44UMwWEkgilNfhSakWZ3cAJxUfM3eNIgWQ# zikLUj-s4{E3kk$K29qAMC?h^LlZjKj*cSx1OnMB0OXFHz!<2z=Vd#--gykAuC-*h2 ztQT=Ej7mKy!Xs_bzL$0lJqsyYxi^ZS}oi^ z`6+Reqbdy4dHg|eeLV_!Ec!|i+_iuqO*Mntr0Wwo!ulG~#K2UoE`T_9Aj&n&%k!DC z=OLWCkpMaf98>@9n7nTukOT(hddEKJ^gJ^Oq&XTK>E=eE(}e+nX6!0$)Y;nDi~R#oI#uRAhJ)D#+Qxa)u=AU4C8HdUO%5#qvW1Z z)>XnyIx*Mjj={6Bx|noU7u(*8LG4XK5Y4fVNMnrWqq#iJ`$G`T<^4c77C4jU2p5Lt zjss3)Cl0IinVRHtI2Xo?@d)4wh|Rnh-GFH&n%i_fFNR*r%)TV8Wz!MnINC8{)z8FJ zYhAUfb(QV2{sJIq=wST?t?n<#W+Ht5$?|B+qe1(5MCxg+=>f|QM(}`HjJ6ov`WT&+ zsmvkPA6SgG7~S$1J)Dj(=gVTW#pu?@=zf_1WqC9@t7)*7VXN!W!vhgK<(5ZV9u1n$ zBet$(I2>i)XN%Dmqgx-Nqs$Mr7;Q1S)iD|$Wsb1dg2iZy(XEfs{dR-}ofJA)%do}u zXl#gM{n4S(8Gsg}TOOmU8?0IHT^P)^7~Sd^jqhp$m33&gSCZAEEsqA-=Mh`hd)M3B zXD!1pyjfr@k8XL4wsY_JG33y}Vsy)6^q{p2L!&bQEk?IIMi1M09TuY&iZ3$}`VmwBBufwc>jO{X4K)!O_&9BWqc`8+M3)r{GjhEc1Sjo*hKbV_)qZoId z!1qpK#S^zZQQWZMH;cz}9mP9FI*b1$*KzI>PWs$eZ+?yYJH2wrObT$q)WF9Ys0VzZT%j|1idh!W&|B`>MJ+<)vO zYO6pMEb{o(0y5Gka$b>#K;XQrpkR@=KbzycUCt-HgZJ~>CN2s zkMH~FfkWe?lN0-=CXS#G`SE@I`s~qpr;qCMs;ad>3GRuLL+nAk({WZXUtoRZCw`}(88Pwh5)qiYL z4EF#`a=E(Cv5g(LS9j@wq`Kd^uR3Y3uEc94_p|Fu?!$;Pi2HHx-H6*$voDc%W8CH@S;FC z-iOb}6hXml@Q%F#79twFDAtcMeN7dP2gWMz*dCOH;6;h8fIE%Yj2FEMm{#IN8`Uar zYz2qs+KAYr^K8Rg7uNQpbyy1HUf`y;kY-QqU&lByrnM zo5)rJ&oL0Ed7NMdfjedRgTTEFg{0SJaFiFkM(Bt25nm+m9OE@pwYqpNXpb(!$~_53 z4SawHI`F&$A!hMGTBLEhr0`+l@buok8hc1t{xAkPLepFD$O9~&RkKSeZ!#otID_BzaaP;7z zBk({}O$^H)>TrRXC4~=r_uV_ace*yBX7OQ(8qHruS+egvAGo4>Ly(Rx!fj z!_vkFj9-k~@r!vl;4fHG`U3~yEk5|Wf8Ozu!iR~&<2B;~lPIjbSlak-_k_iVc^FV% zu%!6Iev1$Fy+1#X%OB>UKwZI- z!Ur{e;o}gNKh)s@GfN5|Fn%#^$1mpLfWKgA;e$7RF>c2%{3uX&y!7ya;};quth}hh z1!k5MK42};#6e7e5Ea7W!_vlwnIlIJ?tum&PHT$~OB)}!R$AR7 zw?1oyv%JmMRLVL^B9$B)Ybw^}@TU>|>$`&B zxUP%W$oekAHCo?gtf_SVo$nePsydh&Ybu>jqAbLk%J?|o3W!bCRK{Nh4BJYAyszXX z^_TmPx%kY?OIxaIkzrd`1M&(zr2u*V`tFX}mvbi$j@`9?Vszr(i9J|(J32ixw&xzX z%IVoV)jQ~0!qjvOus0*$2Ma?(@rUQpkoz-kIgy^LoY^>6cD@#`>~!W{xejZd-L6fQ z7p{q~0FI!{N!*TA;g0j(^0qVgSMGD(QaN@_{69XGJM*8=4#>a#bK7!zpDFH|d)nPT z@LX~GTyf0^uU%d~k&9u!hG$D3Mtj9`CyK{X9hKWVV(Z=1=iamJ%r94NQ}w>Ba;LNM z#ln^E{u9T!3iYl1L+Dn#&vV7}Rj2o-6JK;U^nLD;GjDm?{dV`$?l(6*=bmwjkG%JD zrGkTX++7Z0O4e$#&Q*nFpIcq%{^e@folf$v=jP6pipyQZf?V_cxw(IIoOk1$bJ>zR zkV0F$yS($vyUX{boZ|1Lx>;AkO*v)f-^MFwgOYnC;_l9p`*W#x;7jpr8@y*{`M5Jx za&J0OJaJ_K&(wMDtEdlazAL+cNUqblVs7qVORm$weJjd2=dEayHRXKT!Tnz=J-F;d zrOCw@<4;~#=S4>Py_#tXpo*mn->YLg3Q9qEs6wh%Mu?O*GFOA)) z(FpBaAFa&eNx6PoR4>`@!oji#ol)CGZ-&1l=k+-ia-;j*Wo=jpdjzX;BPC3Pg za$Us}A9@zN?dv7?wiCr)ISoGPTnV0cZuZGE;9RG))9ENb=yVl-MIrKAajsPQdFP69 z&WZgdaJjV0S&q6_l(!ei|Gr-uajy6&$BCCuOfmm=CHFMsiF0N72TQ|*#ddzKI$Wu1Ue`pZjh_lC0Lti*L+;`8!aJ}=t>?e*XAu4~X9 zYl`_a_HF8YarR`o1Lfb6_F(GaiW5WIB+=gv2)LuN8vRsI@38`PzcKqb@yY4Hd#ym) zh4d<<$@q!4yz@$&hpbDot^Kg?n49}i`Gj-USJs8He=MJP3vor&iD&r-dH>{buOC?t z-t`KmjCigtK3B;diG3e@678JBd9-tSP01zBqF)|AgJ&r4OS-E%5_?ms&#%O}rtpZkKd zlE-!F|L&};xJ9RQhx3-%#|z!FkDpq5?h$9Dy7!aG9jo1`6$y9hirJIJF5G*xd@_%B z8F4BfRy6aL*(aSGp1))Eq;t!;lkr^Tp(Ne|c!c-U@3WTuiuZY+ho3L~lkBGjI^2Qx zU&eN*xSQWqKDqK2`F?DZ^2sf~2>9jxcA0&$FGacq4ybzpZn<}#6xxt9t=doScNN>G zeDdAD$huX#{k*ST@op&lY4D0G_&(^zKdJn@qW1**u6(lgoP2K34dFjoKIwF`uGv%0 zcHOtH%|4pmI{QF6r`!GG-riz4N4I-NU3*LWqut9V55B8XEIMrO+4q);z>Vb^AFlGh zH`-6NIoc2@aN_iQ1x7UhZA<2m4C%Hdu`XorKq*Qwc4`EKC#n#xDOlQiz~9YHs7z{XJ5INJgD zhR)j%hsirT`0O#=W3c0onvUu5)PIoC>A#L97 ztb7dhB-}LWNs}K#X5c+=u2@(fpZ#^>6ZUX=5pCrld6wBH&p5N6O*-nCj+aGgrimbJXze0c1_}4UqXLF&N#a@ zz5N975M@`DPo{R`y~w-37wY)g6{{g`h(~DaF5oZr+ar#?@pIm_sjKk(Xg_B+@cHj5 zZVvS4?8f7St63@1qRdSblJ%qr5YZ{@`;I;?M)u%$^)s zTXv=rc$UeMy9Vu(PN?#4=ifQ|?esdxgOSP|PQ3H+k!*Q&ItI9%lr7~G>D@@XWd>F@ZJVzGt!NIdR zl^4Ir{5G}`V0O$tnQ|&uJ6)s?*nzPM?vpr%)U$_k%mWTI?Jg@nh<(6LPIb>dneX~O zz)CxzlYHV7GGUc>rb{taNz z$7eTI^(Mgl$=uw3z&>m1aUFQd+8Fxjo%9EI{gzr+eDJme_`xZ;H)K@`_g`D``ssgB z?FPF3J>tVBPsad%CEy=nTPD!dHi8DC&AkQKHQ~J4*=RWOpSEk9+p8DL1 zxw*eYn|C1(-7=L#+ui8#t2b~y1-SwIQ*BpkGt_kl>h40_2l<@P$EaJW_5?rs8rq6F z7N4gJ_5Ww$5aG}^!29G|P%ry{vX=5+;n?g`>$Av{M=eLaU)1H05q$qQzRUMV-6h~= z4}2R59RDp~I)5u2g>+mrv`Toz?jd_#Lc zcB4x`IZSZ6YxQu6iCbfyU2>8Es z5b&(H_KhF%nUVej(m2u|ymH+QXpG1?EwQmP`vuZ zB;=j*wgbet2_B&-P-@9B+B>xAVG3NE}B>iL1u_oUOAJBV> zzmn=)?Iu$R7y8$2PW=7A-7?OXr(g^H!4&nim5-s%kHd#kdYh`_+o%h&w6F}%N`F%F zHy!6#`2&SyWj8il+v#-TK40f`zY4Z8`?%sgi%oUZP3%h#pAIDfgit8+z%df zQ!-Y*1$_C2WNh|1wB2DR_V+ovxp( zwf`}^H~aX0?DZI*J(UFReiQV8eq6T`{g`)>CvH>y_|^yW9l9@*fd7~B)hpti=u6=D zVf5nHNL(}0M!2Se}>FbIi5{}2$=)5`!ah^rq z9|+4}_!R@;(tzbPOc4~^2Jcw?^Bkk$S4=|NkZY=NJTUx<$xoszgkSOMalB#*uxtaS zeBUIZ;aB{L6KI#eL%9S#+j#>TO5Q=>m}mVAYvbPexAGYAjLyFo$KOTF={)?Sv2NrU zbbT?xGcf-FB*@3s)ZpVOo!%v z|06sa-nS!LyT1DtA3W;l#yhIO`p|ye1urZ0Q?9DO^VNX! zMA&@le%db^dk^xv0oV1OIPVu5Mn3P$%dX5p3AxjDA?T$w$X0_8c0Y7@hg})Wp7ndk>9H%^cahZ~DmC z=Cts$0??%Frwo$0M!ynW)Xqj&E(bm$&OLrqO$W9Gj4-00pzNA^r$)Ii_y=82h` zZ?EQddO0;}Ae9`!a~?Qw=pddz?}h6<>z=78ye1#4K{1}HQLzkC=$qe!p#cmc?;F1t z;3`EcaYVyA#<22{8RR&Ip|7}IH{VBY8X4W*_|zS@-nx5R<5RdQ@Wkl$(cZz)nM0%K z--fqjz1y9!yAI)*q!(*Fcwpkdo~e&l8xqaB?WP-yipKU$PuzI#o{6cMeX2Qq?{$;v z74IdDt0tz89uN$xwF1gU4;>l3ePU+v$f1u_@4M~LfvNoyGl18i+p#_OjQ_5>{3EyT z9K}Oc;h0D7*WddC7}lRTGPZ}e-*fMn!pqSEV>5duHQZ4T74$p+4RzPV-TQ#t*cSZY z(J5WFXKere(W3_^?wy+0Gvh-)-ge{=p?r<8bL^uNqYb)ImCx(LDzt$Q0&U_+t-RLZ zisIMcpS<&VoqkiNKlW0H0(D-E=>d*1Jw*`)HnW~7u7|{MVp}ov2YDC!mWF@XOXDe& z<9vK0SS3@`aSc=O!uJ9`zTa`K#kd*yFP|fRFA|nN0v9+_7w!h8U(x5ku2cP-as8a+ zpFa(_M8(cFZ-5;KdaO4=oHVT>iM2dU-qt7Vh7K&e67xJb(}%ew;a#G`j>xRr{DC_ zt~FkI#eHzK0q%-dz5I&PUVa7cKaBD#QT~3U)MzaIIOBOX4iob=#V-lxl-z~l2g`iFS663>@o z`W45yfhpQWrA4pam9O*se(a&Ih&klGKYe|X=IrE@;*~**v2Cw#mX!<1%(+J$*utq! z%+*T9bI*CX~K-hg-; z;uzv##0L-`MSL3Zi-=!C{By(-;y)_?{j0@T{MF(r#Px{1h&LeKhB$_J81VtbM-iV! z{37Dl5dR#pgy_}r`soK^ub+Mt@oB^_#`w&yyC`!}=Az8?%3isy=)7{>yXWZ7!MnqM z?Tx+8K3UAcx4DDYT{@Vw=TkcGy|mxS2ScUnCzYUAI{2#2fnARGIfu8$B7eZ)qJFnQ z&5=-ug})AcVA#Z6J5c_4L=rt2IpIJ@rcE4s8D;*Um_7;&n>Y|IJq3nat3bhl=Bh#J zGi+V32@qiw%6mp;39n9i=Ms1arT_EUVY{gJNFp_C-A?d~_@}&U)W6)kPRdCZvBX;!B>o$k;nX@+oTb^5YS zf9$2y(bs|R#K?O97XwduC-XU--|aZ>Vt!ob@56jr<{#F17mvjJ7nq+qa^3XNsVNwO z;pVjU4MzE%RHs{~D`AZQzWt=;FTlT#??0ulP~!=ZUlrFmO3(e6&SxnJ8(=mDdTEWEF_%cg|69?1?XY5_vgL**WsPNf#Iu zdvSc|+qlR7f#WZt4Q@dCdq{6W`W(`|xHsqSJ&$|8i2E%^U$P$6F1QY3L#pj(@GY;7 zQX$t-*>y!6uwN>z>y4yaO;RIS$D_E**a_#z*HK=hztL+VH)eD4)!sKRD+qg>mZi z^4XI);)-f3Io9Xdj+}3Vu`4xZ{Rw@KpDmB1IA`fZ`Re3rNPidic!2H5e&Bo>_OJi_ z^mS>pdja!8IA;>`N6_z%bAR!81~|*{)imd1T}znqi5%y~{l5ZJK7RcJ#pByCAF*~1 zTvNpfJhz(9h3B|I-|MaZc3|J=wm6~BUuB%f_uy1p-KWoY>UaFP^400r@GKwX{ZLPJ zoEv4^aldPbZ@T{zm18|CP%%xK z=TLUZ{3`F7xi=(j-|@K)${z_G`oOS7=s!^3RO>=Y9h-1GzDDPvN;7oI^jH}YqY zmvsdHfMXSOegBN}-$a3T9y&hUt}}4Haw7idT_5*3hn4dmpHneTh+YrbWDi@it2=+@RCc#_-UHa>K4 zr|0vp72h&;@b05ycTenu=Xl@VeS5a^JCMH1n7@5u{|7MCp`G)-le_Tja#A%BbU39a ziXMr+Siv&3cMs6v|L^YnLZqtVIDYQ@an-gQbu9y_i42xd8Eu74_F*6)1Bpp|Yhhg1 zMVDrCa9vXp+_kktHxLpD*@qQ+^dWlcp<=*&SjY$25)2GxXC0`h@S%r{X#0H6pXu&Z z(|U>yocW#KIlp`U-E;5x-gCd_P6z9C=+OqR?{MkSDC=;FzwGs!&MsB*@`j5~-F9~A zg45F{ps&2&jk@!Pxueqv4_4XiTnCC>%g?h;$ra^Gqkx%o)>gXqhy~mz$Yb+Ev6!H zk@!{3abud-bB4ZKXq?JN*>Ss1L!7cD@NtEkXm6gr03Wg^v^ibqpuXblKB~1>cxYh$ zlAfukPcBRP8gProOb>mLsgJ__b^A_)Wh{?a_Oiw1g_w=n|5NNa>Y@16G5h#)mwlEX z|GT*1wlA1i7@HAewm|>UA9fFqu$%g?^;`t@UY4E`kMtVjjP?%*zyZWN2r^Wu(vo7)Hm*R!a`(!0`i ztb0DPabtwR+nfi|yd7LF@mv3BFs_8l*VZT4r?VTrF?QP+OK`p0>%yb0)^0T_Q_;d73sAGl{QmZ;A~;c)P-Z43GZ-@Ykuax@1&&D&}p zk@%TyB!P;-wH=_CDKz0z<)QZGyzbkI zW|q+h(Qbvj3;6~8F3G{NiQ6e0`n{7%NLQJi`0ZYQif{!#?)5Ihw=u1H{WZdCiIemB zYfiFGI(1C#L3Vlj{pjb>FMItMms1fv;N$nut1+FRbJRc9eyfDKTLTia!B!G|3F1erxdXfwHW{=&|`NN;lQML*!H$-q*+f*Z1wy z|JQp6>nSyV0os>$EkfME4g~zSQ1(9XIF4{bRxK`vFEj?)`}@n)fkVRw**iRV_*nUf z=sQ}Bbx;$`p8)0eMBjAodc4Lg*N&ARF^ty{zU+0KbERK(cvkORRxACckH5v^jdY!B z>@5FL!;?6@tB>+tQjXPSqxcP87QEzK+xTuTd%P@qx!ubhUQQZYUW#<#>{PGUsrPE$ zt*7%&Pw(L|lJs=N>k~jz>62ccW~o~GO|SoA%#-T|hDHuoh67rE@VD*VsqZo5WJkKz)!h5vaU-nA zzJr>X>opPFce8aA90+dPItmW!HL0zv5rdmdB+P$~IdqqavZJi6x-z?)=Sms4@64e^ z_R`vYOT5>2`K#1mVwY`uDH8jowX0 z_$7Ebo%!Q73cv;+nqa_jz_!x$vxs{fS;j_+wmzPt&{_w>yj8 z>(eAcdnLKI1ecy6DTnrm_o|W?SOWxUDJ^tB+Me-u4(0lgGEUG9y5`#>M&&r$*v*{;l)+=7g^EVx3RdJ7?w7 - - - - - diff --git a/src/cfw_config.c b/src/cfw_config.c deleted file mode 100644 index 5483232..0000000 --- a/src/cfw_config.c +++ /dev/null @@ -1,152 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#include -#include -#include -#include -#include -#include -#include "cfw_config.h" -#include "fs/fs_utils.h" - -static int split_string(const char *string, char splitChar, char *left, char *right, int size) -{ - int cnt = 0; - char *writePtr = left; - - while(*string != '\0' && *string != '\n' && *string != '\r' && *string != splitChar && (cnt+1) < size) - { - *writePtr++ = *string++; - cnt++; - } - - *writePtr = 0; - *right = 0; - - writePtr--; - - // remove trailing spaces - while(writePtr > left && *writePtr == ' ') - *writePtr-- = 0; - - if(*string == splitChar) - { - string++; - writePtr = right; - - // skip spaces after split character - while(*string == ' ') - string++; - - cnt = 0; - while(*string != '\0' && *string != '\n' && *string != '\r' && (cnt+1) < size) - { - *writePtr++ = *string++; - } - *writePtr = 0; - return 1; - } - else - { - return -1; - } -} - -void default_config(cfw_config_t * config) -{ - memset(config, 0, sizeof(cfw_config_t)); - config->viewMode = 0; - config->directLaunch = 0; - config->launchImage = 1; - config->noIosReload = 0; - config->launchSysMenu = 1; - config->redNAND = 0; - config->seeprom_red = 0; - config->otp_red = 0; - config->syshaxXml = 0; -} - -int read_config(cfw_config_t * config) -{ - FILE *pFile = fopen(CONFIG_PATH, "rb"); - if(!pFile) - return -1; - - char option[64]; - char value[64]; - char line[0x100]; - - while(fgets(line, sizeof(line), pFile) != 0) - { - if(line[0] == '#' || line[0] == '[') - continue; - - if(split_string(line, '=', option, value, sizeof(option)) == 1) - { - if(strcmp(option, "directLaunch") == 0) - config->directLaunch = atoi(value); - else if(strcmp(option, "launchImage") == 0) - config->launchImage = atoi(value); - else if(strcmp(option, "redNAND") == 0) - config->redNAND = atoi(value); - else if(strcmp(option, "seeprom_red") == 0) - config->seeprom_red = atoi(value); - else if(strcmp(option, "otp_red") == 0) - config->otp_red = atoi(value); - else if(strcmp(option, "syshaxXml") == 0) - config->syshaxXml = atoi(value); - else if(strcmp(option, "viewMode") == 0) - config->viewMode = atoi(value); - else if(strcmp(option, "noIosReload") == 0) - config->noIosReload = atoi(value); - else if(strcmp(option, "launchSysMenu") == 0) - config->launchSysMenu = atoi(value); - } - } - - fclose(pFile); - return 0; -} - -int write_config(cfw_config_t * config) -{ - CreateSubfolder(APP_PATH); - - FILE *pFile = fopen(CONFIG_PATH, "wb"); - if(!pFile) - return -1; - - fprintf(pFile, "[MOCHA]\n"); - fprintf(pFile, "viewMode=%i\n", config->viewMode); - fprintf(pFile, "directLaunch=%i\n", config->directLaunch); - fprintf(pFile, "launchImage=%i\n", config->launchImage); - fprintf(pFile, "noIosReload=%i\n", config->noIosReload); - fprintf(pFile, "launchSysMenu=%i\n", config->launchSysMenu); - fprintf(pFile, "redNAND=%i\n", config->redNAND); - fprintf(pFile, "seeprom_red=%i\n", config->seeprom_red); - fprintf(pFile, "otp_red=%i\n", config->otp_red); - fprintf(pFile, "syshaxXml=%i\n", config->syshaxXml); - fclose(pFile); - return 0; -} diff --git a/src/cfw_config.h b/src/cfw_config.h deleted file mode 100644 index cbae12e..0000000 --- a/src/cfw_config.h +++ /dev/null @@ -1,37 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#ifndef CFW_CONFIG_H_ -#define CFW_CONFIG_H_ - -#define APP_VERSION "v0.2" -#define APP_PATH "sd:/wiiu/apps/mocha" -#define CONFIG_PATH (APP_PATH "/config.ini") - -#include "../common/config_types.h" - -void default_config(cfw_config_t * config); -int read_config(cfw_config_t * config); -int write_config(cfw_config_t * config); - -#endif diff --git a/src/common/common.h b/src/common/common.h deleted file mode 100644 index 538b5ad..0000000 --- a/src/common/common.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef COMMON_H -#define COMMON_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "os_defs.h" - -#define CAFE_OS_SD_PATH "/vol/external01" -#define SD_PATH "sd:" -#define WIIU_PATH "/wiiu" - -#ifndef MEM_BASE -#define MEM_BASE (0x00800000) -#endif - -#define ELF_DATA_ADDR (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x00)) -#define ELF_DATA_SIZE (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x04)) -#define MAIN_ENTRY_ADDR (*(volatile unsigned int*)(MEM_BASE + 0x1400 + 0x00)) -#define OS_FIRMWARE (*(volatile unsigned int*)(MEM_BASE + 0x1400 + 0x04)) - -#define OS_SPECIFICS ((OsSpecifics*)(MEM_BASE + 0x1500)) - -#ifndef EXIT_SUCCESS -#define EXIT_SUCCESS 0 -#endif -#define EXIT_HBL_EXIT 0xFFFFFFFE -#define EXIT_RELAUNCH_ON_LOAD 0xFFFFFFFD - -#ifdef __cplusplus -} -#endif - -#endif /* COMMON_H */ - diff --git a/src/common/fs_defs.h b/src/common/fs_defs.h deleted file mode 100644 index feda725..0000000 --- a/src/common/fs_defs.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef FS_DEFS_H -#define FS_DEFS_H - -#include "types.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/* FS defines and types */ -#define FS_MAX_LOCALPATH_SIZE 511 -#define FS_MAX_MOUNTPATH_SIZE 128 -#define FS_MAX_FULLPATH_SIZE (FS_MAX_LOCALPATH_SIZE + FS_MAX_MOUNTPATH_SIZE) -#define FS_MAX_ARGPATH_SIZE FS_MAX_FULLPATH_SIZE - -#define FS_STATUS_OK 0 -#define FS_RET_UNSUPPORTED_CMD 0x0400 -#define FS_RET_NO_ERROR 0x0000 -#define FS_RET_ALL_ERROR (unsigned int)(-1) - -#define FS_STAT_FLAG_IS_DIRECTORY 0x80000000 - -/* max length of file/dir name */ -#define FS_MAX_ENTNAME_SIZE 256 - -#define FS_SOURCETYPE_EXTERNAL 0 -#define FS_SOURCETYPE_HFIO 1 -#define FS_SOURCETYPE_HFIO 1 - -#define FS_MOUNT_SOURCE_SIZE 0x300 -#define FS_CLIENT_SIZE 0x1700 -#define FS_CMD_BLOCK_SIZE 0xA80 - -typedef struct -{ - uint32_t flag; - uint32_t permission; - uint32_t owner_id; - uint32_t group_id; - uint32_t size; - uint32_t alloc_size; - uint64_t quota_size; - uint32_t ent_id; - uint64_t ctime; - uint64_t mtime; - uint8_t attributes[48]; -} __attribute__((packed)) FSStat; - -typedef struct -{ - FSStat stat; - char name[FS_MAX_ENTNAME_SIZE]; -} FSDirEntry; - - -#ifdef __cplusplus -} -#endif - -#endif /* FS_DEFS_H */ - diff --git a/src/common/os_defs.h b/src/common/os_defs.h deleted file mode 100644 index 48a4c8f..0000000 --- a/src/common/os_defs.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef __OS_DEFS_H_ -#define __OS_DEFS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct _OsSpecifics -{ - unsigned int addr_OSDynLoad_Acquire; - unsigned int addr_OSDynLoad_FindExport; - unsigned int addr_OSTitle_main_entry; - - unsigned int addr_KernSyscallTbl1; - unsigned int addr_KernSyscallTbl2; - unsigned int addr_KernSyscallTbl3; - unsigned int addr_KernSyscallTbl4; - unsigned int addr_KernSyscallTbl5; -} OsSpecifics; - -#ifdef __cplusplus -} -#endif - -#endif // __OS_DEFS_H_ diff --git a/src/common/types.h b/src/common/types.h deleted file mode 100644 index e65fc3e..0000000 --- a/src/common/types.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef TYPES_H -#define TYPES_H - -#include "dynamic_libs/os_types.h" - -#endif /* TYPES_H */ - diff --git a/src/entry.c b/src/entry.c deleted file mode 100644 index 759cee0..0000000 --- a/src/entry.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "dynamic_libs/os_functions.h" -#include "dynamic_libs/sys_functions.h" -#include "common/common.h" -#include "utils/utils.h" -#include "main.h" - -int __entry_menu(int argc, char **argv) -{ - //! ******************************************************************* - //! * Jump to our application * - //! ******************************************************************* - return Menu_Main(); -} diff --git a/src/fs/fs_utils.c b/src/fs/fs_utils.c deleted file mode 100644 index d990df3..0000000 --- a/src/fs/fs_utils.c +++ /dev/null @@ -1,184 +0,0 @@ -#include -#include -#include -#include -#include -#include "common/fs_defs.h" -#include "dynamic_libs/fs_functions.h" - - -int MountFS(void *pClient, void *pCmd, char **mount_path) -{ - int result = -1; - - void *mountSrc = malloc(FS_MOUNT_SOURCE_SIZE); - if(!mountSrc) - return -3; - - char* mountPath = (char*) malloc(FS_MAX_MOUNTPATH_SIZE); - if(!mountPath) { - free(mountSrc); - return -4; - } - - memset(mountSrc, 0, FS_MOUNT_SOURCE_SIZE); - memset(mountPath, 0, FS_MAX_MOUNTPATH_SIZE); - - // Mount sdcard - if (FSGetMountSource(pClient, pCmd, FS_SOURCETYPE_EXTERNAL, mountSrc, -1) == 0) - { - result = FSMount(pClient, pCmd, mountSrc, mountPath, FS_MAX_MOUNTPATH_SIZE, -1); - if((result == 0) && mount_path) { - *mount_path = (char*)malloc(strlen(mountPath) + 1); - if(*mount_path) - strcpy(*mount_path, mountPath); - } - } - - free(mountPath); - free(mountSrc); - return result; -} - -int UmountFS(void *pClient, void *pCmd, const char *mountPath) -{ - int result = -1; - result = FSUnmount(pClient, pCmd, mountPath, -1); - - return result; -} - -int LoadFileToMem(const char *filepath, u8 **inbuffer, u32 *size) -{ - //! always initialze input - *inbuffer = NULL; - if(size) - *size = 0; - - int iFd = open(filepath, O_RDONLY); - if (iFd < 0) - return -1; - - u32 filesize = lseek(iFd, 0, SEEK_END); - lseek(iFd, 0, SEEK_SET); - - u8 *buffer = (u8 *) malloc(filesize); - if (buffer == NULL) - { - close(iFd); - return -2; - } - - u32 blocksize = 0x4000; - u32 done = 0; - int readBytes = 0; - - while(done < filesize) - { - if(done + blocksize > filesize) { - blocksize = filesize - done; - } - readBytes = read(iFd, buffer + done, blocksize); - if(readBytes <= 0) - break; - done += readBytes; - } - - close(iFd); - - if (done != filesize) - { - free(buffer); - return -3; - } - - *inbuffer = buffer; - - //! sign is optional input - if(size) - { - *size = filesize; - } - - return filesize; -} - -int CheckFile(const char * filepath) -{ - if(!filepath) - return 0; - - struct stat filestat; - - char dirnoslash[strlen(filepath)+2]; - snprintf(dirnoslash, sizeof(dirnoslash), "%s", filepath); - - while(dirnoslash[strlen(dirnoslash)-1] == '/') - dirnoslash[strlen(dirnoslash)-1] = '\0'; - - char * notRoot = strrchr(dirnoslash, '/'); - if(!notRoot) - { - strcat(dirnoslash, "/"); - } - - if (stat(dirnoslash, &filestat) == 0) - return 1; - - return 0; -} - -int CreateSubfolder(const char * fullpath) -{ - if(!fullpath) - return 0; - - int result = 0; - - char dirnoslash[strlen(fullpath)+1]; - strcpy(dirnoslash, fullpath); - - int pos = strlen(dirnoslash)-1; - while(dirnoslash[pos] == '/') - { - dirnoslash[pos] = '\0'; - pos--; - } - - if(CheckFile(dirnoslash)) - { - return 1; - } - else - { - char parentpath[strlen(dirnoslash)+2]; - strcpy(parentpath, dirnoslash); - char * ptr = strrchr(parentpath, '/'); - - if(!ptr) - { - //!Device root directory (must be with '/') - strcat(parentpath, "/"); - struct stat filestat; - if (stat(parentpath, &filestat) == 0) - return 1; - - return 0; - } - - ptr++; - ptr[0] = '\0'; - - result = CreateSubfolder(parentpath); - } - - if(!result) - return 0; - - if (mkdir(dirnoslash, 0777) == -1) - { - return 0; - } - - return 1; -} diff --git a/src/fs/fs_utils.h b/src/fs/fs_utils.h deleted file mode 100644 index 870bbb3..0000000 --- a/src/fs/fs_utils.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef __FS_UTILS_H_ -#define __FS_UTILS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "dynamic_libs/os_types.h" - -int MountFS(void *pClient, void *pCmd, char **mount_path); -int UmountFS(void *pClient, void *pCmd, const char *mountPath); - -int LoadFileToMem(const char *filepath, u8 **inbuffer, u32 *size); - -//! todo: C++ class -int CreateSubfolder(const char * fullpath); -int CheckFile(const char * filepath); - -#ifdef __cplusplus -} -#endif - -#endif // __FS_UTILS_H_ diff --git a/src/fs/sd_fat_devoptab.c b/src/fs/sd_fat_devoptab.c deleted file mode 100644 index a3233ec..0000000 --- a/src/fs/sd_fat_devoptab.c +++ /dev/null @@ -1,1018 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2015 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include "dynamic_libs/fs_functions.h" -#include "dynamic_libs/os_functions.h" -#include "fs_utils.h" - -#define FS_ALIGNMENT 0x40 -#define FS_ALIGN(x) (((x) + FS_ALIGNMENT - 1) & ~(FS_ALIGNMENT - 1)) - -typedef struct _sd_fat_private_t { - char *mount_path; - void *pClient; - void *pCmd; - void *pMutex; -} sd_fat_private_t; - -typedef struct _sd_fat_file_state_t { - sd_fat_private_t *dev; - int fd; /* File descriptor */ - int flags; /* Opening flags */ - bool read; /* True if allowed to read from file */ - bool write; /* True if allowed to write to file */ - bool append; /* True if allowed to append to file */ - u64 pos; /* Current position within the file (in bytes) */ - u64 len; /* Total length of the file (in bytes) */ - struct _sd_fat_file_state_t *prevOpenFile; /* The previous entry in a double-linked FILO list of open files */ - struct _sd_fat_file_state_t *nextOpenFile; /* The next entry in a double-linked FILO list of open files */ -} sd_fat_file_state_t; - -typedef struct _sd_fat_dir_entry_t { - sd_fat_private_t *dev; - int dirHandle; -} sd_fat_dir_entry_t; - -static sd_fat_private_t *sd_fat_get_device_data(const char *path) -{ - const devoptab_t *devoptab = NULL; - char name[128] = {0}; - int i; - - // Get the device name from the path - strncpy(name, path, 127); - strtok(name, ":/"); - - // Search the devoptab table for the specified device name - // NOTE: We do this manually due to a 'bug' in GetDeviceOpTab - // which ignores names with suffixes and causes names - // like "ntfs" and "ntfs1" to be seen as equals - for (i = 3; i < STD_MAX; i++) { - devoptab = devoptab_list[i]; - if (devoptab && devoptab->name) { - if (strcmp(name, devoptab->name) == 0) { - return (sd_fat_private_t *)devoptab->deviceData; - } - } - } - - return NULL; -} - -static char *sd_fat_real_path (const char *path, sd_fat_private_t *dev) -{ - // Sanity check - if (!path) - return NULL; - - // Move the path pointer to the start of the actual path - if (strchr(path, ':') != NULL) { - path = strchr(path, ':') + 1; - } - - int mount_len = strlen(dev->mount_path); - - char *new_name = (char*)malloc(mount_len + strlen(path) + 1); - if(new_name) { - strcpy(new_name, dev->mount_path); - strcpy(new_name + mount_len, path); - return new_name; - } - return new_name; -} - -static int sd_fat_open_r (struct _reent *r, void *fileStruct, const char *path, int flags, int mode) -{ - sd_fat_private_t *dev = sd_fat_get_device_data(path); - if(!dev) { - r->_errno = ENODEV; - return -1; - } - - sd_fat_file_state_t *file = (sd_fat_file_state_t *)fileStruct; - - file->dev = dev; - // Determine which mode the file is opened for - file->flags = flags; - - const char *mode_str; - - if ((flags & 0x03) == O_RDONLY) { - file->read = true; - file->write = false; - file->append = false; - mode_str = "r"; - } else if ((flags & 0x03) == O_WRONLY) { - file->read = false; - file->write = true; - file->append = (flags & O_APPEND); - mode_str = file->append ? "a" : "w"; - } else if ((flags & 0x03) == O_RDWR) { - file->read = true; - file->write = true; - file->append = (flags & O_APPEND); - mode_str = file->append ? "a+" : "r+"; - } else { - r->_errno = EACCES; - return -1; - } - - int fd = -1; - - OSLockMutex(dev->pMutex); - - char *real_path = sd_fat_real_path(path, dev); - if(!path) { - r->_errno = ENOMEM; - OSUnlockMutex(dev->pMutex); - return -1; - } - - int result = FSOpenFile(dev->pClient, dev->pCmd, real_path, mode_str, &fd, -1); - - free(real_path); - - if(result == 0) - { - FSStat stats; - result = FSGetStatFile(dev->pClient, dev->pCmd, fd, &stats, -1); - if(result != 0) { - FSCloseFile(dev->pClient, dev->pCmd, fd, -1); - r->_errno = result; - OSUnlockMutex(dev->pMutex); - return -1; - } - file->fd = fd; - file->pos = 0; - file->len = stats.size; - OSUnlockMutex(dev->pMutex); - return (int)file; - } - - r->_errno = result; - OSUnlockMutex(dev->pMutex); - return -1; -} - - -static int sd_fat_close_r (struct _reent *r, int fd) -{ - sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; - if(!file->dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(file->dev->pMutex); - - int result = FSCloseFile(file->dev->pClient, file->dev->pCmd, file->fd, -1); - - OSUnlockMutex(file->dev->pMutex); - - if(result < 0) - { - r->_errno = result; - return -1; - } - return 0; -} - -static off_t sd_fat_seek_r (struct _reent *r, int fd, off_t pos, int dir) -{ - sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; - if(!file->dev) { - r->_errno = ENODEV; - return 0; - } - - OSLockMutex(file->dev->pMutex); - - switch(dir) - { - case SEEK_SET: - file->pos = pos; - break; - case SEEK_CUR: - file->pos += pos; - break; - case SEEK_END: - file->pos = file->len + pos; - break; - default: - r->_errno = EINVAL; - return -1; - } - - int result = FSSetPosFile(file->dev->pClient, file->dev->pCmd, file->fd, file->pos, -1); - - OSUnlockMutex(file->dev->pMutex); - - if(result == 0) - { - return file->pos; - } - - return result; -} - -static ssize_t sd_fat_write_r (struct _reent *r, int fd, const char *ptr, size_t len) -{ - sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; - if(!file->dev) { - r->_errno = ENODEV; - return 0; - } - - if(!file->write) - { - r->_errno = EACCES; - return 0; - } - - OSLockMutex(file->dev->pMutex); - - size_t len_aligned = FS_ALIGN(len); - if(len_aligned > 0x4000) - len_aligned = 0x4000; - - unsigned char *tmpBuf = (unsigned char *)memalign(FS_ALIGNMENT, len_aligned); - if(!tmpBuf) { - r->_errno = ENOMEM; - OSUnlockMutex(file->dev->pMutex); - return 0; - } - - size_t done = 0; - - while(done < len) - { - size_t write_size = (len_aligned < (len - done)) ? len_aligned : (len - done); - memcpy(tmpBuf, ptr + done, write_size); - - int result = FSWriteFile(file->dev->pClient, file->dev->pCmd, tmpBuf, 0x01, write_size, file->fd, 0, -1); - if(result < 0) - { - r->_errno = result; - break; - } - else if(result == 0) - { - if(write_size > 0) - done = 0; - break; - } - else - { - done += result; - file->pos += result; - } - } - - free(tmpBuf); - OSUnlockMutex(file->dev->pMutex); - return done; -} - -static ssize_t sd_fat_read_r (struct _reent *r, int fd, char *ptr, size_t len) -{ - sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; - if(!file->dev) { - r->_errno = ENODEV; - return 0; - } - - if(!file->read) - { - r->_errno = EACCES; - return 0; - } - - OSLockMutex(file->dev->pMutex); - - size_t len_aligned = FS_ALIGN(len); - if(len_aligned > 0x4000) - len_aligned = 0x4000; - - unsigned char *tmpBuf = (unsigned char *)memalign(FS_ALIGNMENT, len_aligned); - if(!tmpBuf) { - r->_errno = ENOMEM; - OSUnlockMutex(file->dev->pMutex); - return 0; - } - - size_t done = 0; - - while(done < len) - { - size_t read_size = (len_aligned < (len - done)) ? len_aligned : (len - done); - - int result = FSReadFile(file->dev->pClient, file->dev->pCmd, tmpBuf, 0x01, read_size, file->fd, 0, -1); - if(result < 0) - { - r->_errno = result; - done = 0; - break; - } - else if(result == 0) - { - //! TODO: error on read_size > 0 - break; - } - else - { - memcpy(ptr + done, tmpBuf, read_size); - done += result; - file->pos += result; - } - } - - free(tmpBuf); - OSUnlockMutex(file->dev->pMutex); - return done; -} - - -static int sd_fat_fstat_r (struct _reent *r, int fd, struct stat *st) -{ - sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; - if(!file->dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(file->dev->pMutex); - - // Zero out the stat buffer - memset(st, 0, sizeof(struct stat)); - - FSStat stats; - int result = FSGetStatFile(file->dev->pClient, file->dev->pCmd, file->fd, &stats, -1); - if(result != 0) { - r->_errno = result; - OSUnlockMutex(file->dev->pMutex); - return -1; - } - - st->st_mode = S_IFREG; - st->st_size = stats.size; - st->st_blocks = (stats.size + 511) >> 9; - st->st_nlink = 1; - - // Fill in the generic entry stats - st->st_dev = stats.ent_id; - st->st_uid = stats.owner_id; - st->st_gid = stats.group_id; - st->st_ino = stats.ent_id; - st->st_atime = stats.mtime; - st->st_ctime = stats.ctime; - st->st_mtime = stats.mtime; - OSUnlockMutex(file->dev->pMutex); - return 0; -} - -static int sd_fat_ftruncate_r (struct _reent *r, int fd, off_t len) -{ - sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; - if(!file->dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(file->dev->pMutex); - - int result = FSTruncateFile(file->dev->pClient, file->dev->pCmd, file->fd, -1); - - OSUnlockMutex(file->dev->pMutex); - - if(result < 0) { - r->_errno = result; - return -1; - } - - return 0; -} - -static int sd_fat_fsync_r (struct _reent *r, int fd) -{ - sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; - if(!file->dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(file->dev->pMutex); - - int result = FSFlushFile(file->dev->pClient, file->dev->pCmd, file->fd, -1); - - OSUnlockMutex(file->dev->pMutex); - - if(result < 0) { - r->_errno = result; - return -1; - } - - return 0; -} - -static int sd_fat_stat_r (struct _reent *r, const char *path, struct stat *st) -{ - sd_fat_private_t *dev = sd_fat_get_device_data(path); - if(!dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(dev->pMutex); - - // Zero out the stat buffer - memset(st, 0, sizeof(struct stat)); - - char *real_path = sd_fat_real_path(path, dev); - if(!real_path) { - r->_errno = ENOMEM; - OSUnlockMutex(dev->pMutex); - return -1; - } - - FSStat stats; - - int result = FSGetStat(dev->pClient, dev->pCmd, real_path, &stats, -1); - - free(real_path); - - if(result < 0) { - r->_errno = result; - OSUnlockMutex(dev->pMutex); - return -1; - } - - // mark root also as directory - st->st_mode = ((stats.flag & 0x80000000) || (strlen(dev->mount_path) + 1 == strlen(real_path)))? S_IFDIR : S_IFREG; - st->st_nlink = 1; - st->st_size = stats.size; - st->st_blocks = (stats.size + 511) >> 9; - // Fill in the generic entry stats - st->st_dev = stats.ent_id; - st->st_uid = stats.owner_id; - st->st_gid = stats.group_id; - st->st_ino = stats.ent_id; - st->st_atime = stats.mtime; - st->st_ctime = stats.ctime; - st->st_mtime = stats.mtime; - - OSUnlockMutex(dev->pMutex); - - return 0; -} - -static int sd_fat_link_r (struct _reent *r, const char *existing, const char *newLink) -{ - r->_errno = ENOTSUP; - return -1; -} - -static int sd_fat_unlink_r (struct _reent *r, const char *name) -{ - sd_fat_private_t *dev = sd_fat_get_device_data(name); - if(!dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(dev->pMutex); - - char *real_path = sd_fat_real_path(name, dev); - if(!real_path) { - r->_errno = ENOMEM; - OSUnlockMutex(dev->pMutex); - return -1; - } - - - int result = FSRemove(dev->pClient, dev->pCmd, real_path, -1); - - free(real_path); - - OSUnlockMutex(dev->pMutex); - - if(result < 0) { - r->_errno = result; - return -1; - } - - return 0; -} - -static int sd_fat_chdir_r (struct _reent *r, const char *name) -{ - sd_fat_private_t *dev = sd_fat_get_device_data(name); - if(!dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(dev->pMutex); - - char *real_path = sd_fat_real_path(name, dev); - if(!real_path) { - r->_errno = ENOMEM; - OSUnlockMutex(dev->pMutex); - return -1; - } - - int result = FSChangeDir(dev->pClient, dev->pCmd, real_path, -1); - - free(real_path); - - OSUnlockMutex(dev->pMutex); - - if(result < 0) { - r->_errno = result; - return -1; - } - - return 0; -} - -static int sd_fat_rename_r (struct _reent *r, const char *oldName, const char *newName) -{ - sd_fat_private_t *dev = sd_fat_get_device_data(oldName); - if(!dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(dev->pMutex); - - char *real_oldpath = sd_fat_real_path(oldName, dev); - if(!real_oldpath) { - r->_errno = ENOMEM; - OSUnlockMutex(dev->pMutex); - return -1; - } - char *real_newpath = sd_fat_real_path(newName, dev); - if(!real_newpath) { - r->_errno = ENOMEM; - free(real_oldpath); - OSUnlockMutex(dev->pMutex); - return -1; - } - - int result = FSRename(dev->pClient, dev->pCmd, real_oldpath, real_newpath, -1); - - free(real_oldpath); - free(real_newpath); - - OSUnlockMutex(dev->pMutex); - - if(result < 0) { - r->_errno = result; - return -1; - } - - return 0; - -} - -static int sd_fat_mkdir_r (struct _reent *r, const char *path, int mode) -{ - sd_fat_private_t *dev = sd_fat_get_device_data(path); - if(!dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(dev->pMutex); - - char *real_path = sd_fat_real_path(path, dev); - if(!real_path) { - r->_errno = ENOMEM; - OSUnlockMutex(dev->pMutex); - return -1; - } - - int result = FSMakeDir(dev->pClient, dev->pCmd, real_path, -1); - - free(real_path); - - OSUnlockMutex(dev->pMutex); - - if(result < 0) { - r->_errno = result; - return -1; - } - - return 0; -} - -static int sd_fat_statvfs_r (struct _reent *r, const char *path, struct statvfs *buf) -{ - sd_fat_private_t *dev = sd_fat_get_device_data(path); - if(!dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(dev->pMutex); - - // Zero out the stat buffer - memset(buf, 0, sizeof(struct statvfs)); - - char *real_path = sd_fat_real_path(path, dev); - if(!real_path) { - r->_errno = ENOMEM; - OSUnlockMutex(dev->pMutex); - return -1; - } - - u64 size; - - int result = FSGetFreeSpaceSize(dev->pClient, dev->pCmd, real_path, &size, -1); - - free(real_path); - - if(result < 0) { - r->_errno = result; - OSUnlockMutex(dev->pMutex); - return -1; - } - - // File system block size - buf->f_bsize = 512; - - // Fundamental file system block size - buf->f_frsize = 512; - - // Total number of blocks on file system in units of f_frsize - buf->f_blocks = size >> 9; // this is unknown - - // Free blocks available for all and for non-privileged processes - buf->f_bfree = buf->f_bavail = size >> 9; - - // Number of inodes at this point in time - buf->f_files = 0xffffffff; - - // Free inodes available for all and for non-privileged processes - buf->f_ffree = 0xffffffff; - - // File system id - buf->f_fsid = (int)dev; - - // Bit mask of f_flag values. - buf->f_flag = 0; - - // Maximum length of filenames - buf->f_namemax = 255; - - OSUnlockMutex(dev->pMutex); - - return 0; -} - -static DIR_ITER *sd_fat_diropen_r (struct _reent *r, DIR_ITER *dirState, const char *path) -{ - sd_fat_private_t *dev = sd_fat_get_device_data(path); - if(!dev) { - r->_errno = ENODEV; - return NULL; - } - - sd_fat_dir_entry_t *dirIter = (sd_fat_dir_entry_t *)dirState->dirStruct; - - OSLockMutex(dev->pMutex); - - char *real_path = sd_fat_real_path(path, dev); - if(!real_path) { - r->_errno = ENOMEM; - OSUnlockMutex(dev->pMutex); - return NULL; - } - - int dirHandle; - - int result = FSOpenDir(dev->pClient, dev->pCmd, real_path, &dirHandle, -1); - - free(real_path); - - OSUnlockMutex(dev->pMutex); - - if(result < 0) - { - r->_errno = result; - return NULL; - } - - dirIter->dev = dev; - dirIter->dirHandle = dirHandle; - - return dirState; -} - -static int sd_fat_dirclose_r (struct _reent *r, DIR_ITER *dirState) -{ - sd_fat_dir_entry_t *dirIter = (sd_fat_dir_entry_t *)dirState->dirStruct; - if(!dirIter->dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(dirIter->dev->pMutex); - - int result = FSCloseDir(dirIter->dev->pClient, dirIter->dev->pCmd, dirIter->dirHandle, -1); - - OSUnlockMutex(dirIter->dev->pMutex); - - if(result < 0) - { - r->_errno = result; - return -1; - } - return 0; -} - -static int sd_fat_dirreset_r (struct _reent *r, DIR_ITER *dirState) -{ - sd_fat_dir_entry_t *dirIter = (sd_fat_dir_entry_t *)dirState->dirStruct; - if(!dirIter->dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(dirIter->dev->pMutex); - - int result = FSRewindDir(dirIter->dev->pClient, dirIter->dev->pCmd, dirIter->dirHandle, -1); - - OSUnlockMutex(dirIter->dev->pMutex); - - if(result < 0) - { - r->_errno = result; - return -1; - } - return 0; -} - -static int sd_fat_dirnext_r (struct _reent *r, DIR_ITER *dirState, char *filename, struct stat *st) -{ - sd_fat_dir_entry_t *dirIter = (sd_fat_dir_entry_t *)dirState->dirStruct; - if(!dirIter->dev) { - r->_errno = ENODEV; - return -1; - } - - OSLockMutex(dirIter->dev->pMutex); - - FSDirEntry * dir_entry = malloc(sizeof(FSDirEntry)); - - int result = FSReadDir(dirIter->dev->pClient, dirIter->dev->pCmd, dirIter->dirHandle, dir_entry, -1); - if(result < 0) - { - free(dir_entry); - r->_errno = result; - OSUnlockMutex(dirIter->dev->pMutex); - return -1; - } - - // Fetch the current entry - strcpy(filename, dir_entry->name); - - if(st) - { - memset(st, 0, sizeof(struct stat)); - st->st_mode = (dir_entry->stat.flag & 0x80000000) ? S_IFDIR : S_IFREG; - st->st_nlink = 1; - st->st_size = dir_entry->stat.size; - st->st_blocks = (dir_entry->stat.size + 511) >> 9; - st->st_dev = dir_entry->stat.ent_id; - st->st_uid = dir_entry->stat.owner_id; - st->st_gid = dir_entry->stat.group_id; - st->st_ino = dir_entry->stat.ent_id; - st->st_atime = dir_entry->stat.mtime; - st->st_ctime = dir_entry->stat.ctime; - st->st_mtime = dir_entry->stat.mtime; - } - - free(dir_entry); - OSUnlockMutex(dirIter->dev->pMutex); - return 0; -} - -// NTFS device driver devoptab -static const devoptab_t devops_sd_fat = { - NULL, /* Device name */ - sizeof (sd_fat_file_state_t), - sd_fat_open_r, - sd_fat_close_r, - sd_fat_write_r, - sd_fat_read_r, - sd_fat_seek_r, - sd_fat_fstat_r, - sd_fat_stat_r, - sd_fat_link_r, - sd_fat_unlink_r, - sd_fat_chdir_r, - sd_fat_rename_r, - sd_fat_mkdir_r, - sizeof (sd_fat_dir_entry_t), - sd_fat_diropen_r, - sd_fat_dirreset_r, - sd_fat_dirnext_r, - sd_fat_dirclose_r, - sd_fat_statvfs_r, - sd_fat_ftruncate_r, - sd_fat_fsync_r, - NULL, /* sd_fat_chmod_r */ - NULL, /* sd_fat_fchmod_r */ - NULL /* Device data */ -}; - -static int sd_fat_add_device (const char *name, const char *mount_path, void *pClient, void *pCmd) -{ - devoptab_t *dev = NULL; - char *devname = NULL; - char *devpath = NULL; - int i; - - // Sanity check - if (!name) { - errno = EINVAL; - return -1; - } - - // Allocate a devoptab for this device - dev = (devoptab_t *) malloc(sizeof(devoptab_t) + strlen(name) + 1); - if (!dev) { - errno = ENOMEM; - return -1; - } - - // Use the space allocated at the end of the devoptab for storing the device name - devname = (char*)(dev + 1); - strcpy(devname, name); - - // create private data - sd_fat_private_t *priv = (sd_fat_private_t *)malloc(sizeof(sd_fat_private_t) + strlen(mount_path) + 1); - if(!priv) { - free(dev); - errno = ENOMEM; - return -1; - } - - devpath = (char*)(priv+1); - strcpy(devpath, mount_path); - - // setup private data - priv->mount_path = devpath; - priv->pClient = pClient; - priv->pCmd = pCmd; - priv->pMutex = malloc(OS_MUTEX_SIZE); - - if(!priv->pMutex) { - free(dev); - free(priv); - errno = ENOMEM; - return -1; - } - - OSInitMutex(priv->pMutex); - - // Setup the devoptab - memcpy(dev, &devops_sd_fat, sizeof(devoptab_t)); - dev->name = devname; - dev->deviceData = priv; - - // Add the device to the devoptab table (if there is a free slot) - for (i = 3; i < STD_MAX; i++) { - if (devoptab_list[i] == devoptab_list[0]) { - devoptab_list[i] = dev; - return 0; - } - } - - // failure, free all memory - free(priv); - free(dev); - - // If we reach here then there are no free slots in the devoptab table for this device - errno = EADDRNOTAVAIL; - return -1; -} - -static int sd_fat_remove_device (const char *path, void **pClient, void **pCmd, char **mountPath) -{ - const devoptab_t *devoptab = NULL; - char name[128] = {0}; - int i; - - // Get the device name from the path - strncpy(name, path, 127); - strtok(name, ":/"); - - // Find and remove the specified device from the devoptab table - // NOTE: We do this manually due to a 'bug' in RemoveDevice - // which ignores names with suffixes and causes names - // like "ntfs" and "ntfs1" to be seen as equals - for (i = 3; i < STD_MAX; i++) { - devoptab = devoptab_list[i]; - if (devoptab && devoptab->name) { - if (strcmp(name, devoptab->name) == 0) { - devoptab_list[i] = devoptab_list[0]; - - if(devoptab->deviceData) - { - sd_fat_private_t *priv = (sd_fat_private_t *)devoptab->deviceData; - *pClient = priv->pClient; - *pCmd = priv->pCmd; - *mountPath = (char*) malloc(strlen(priv->mount_path)+1); - if(*mountPath) - strcpy(*mountPath, priv->mount_path); - if(priv->pMutex) - free(priv->pMutex); - free(devoptab->deviceData); - } - - free((devoptab_t*)devoptab); - return 0; - } - } - } - - return -1; -} - -int mount_sd_fat(const char *path) -{ - int result = -1; - - // get command and client - void* pClient = malloc(FS_CLIENT_SIZE); - void* pCmd = malloc(FS_CMD_BLOCK_SIZE); - - if(!pClient || !pCmd) { - // just in case free if not 0 - if(pClient) - free(pClient); - if(pCmd) - free(pCmd); - return -2; - } - - FSInit(); - FSInitCmdBlock(pCmd); - FSAddClientEx(pClient, 0, -1); - - char *mountPath = NULL; - - if(MountFS(pClient, pCmd, &mountPath) == 0) { - result = sd_fat_add_device(path, mountPath, pClient, pCmd); - free(mountPath); - } - - return result; -} - -int unmount_sd_fat(const char *path) -{ - void *pClient = 0; - void *pCmd = 0; - char *mountPath = 0; - - int result = sd_fat_remove_device(path, &pClient, &pCmd, &mountPath); - if(result == 0) - { - UmountFS(pClient, pCmd, mountPath); - FSDelClient(pClient); - free(pClient); - free(pCmd); - free(mountPath); - //FSShutdown(); - } - return result; -} diff --git a/src/fs/sd_fat_devoptab.h b/src/fs/sd_fat_devoptab.h deleted file mode 100644 index 8df487a..0000000 --- a/src/fs/sd_fat_devoptab.h +++ /dev/null @@ -1,38 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2015 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#ifndef __SD_FAT_DEVOPTAB_H_ -#define __SD_FAT_DEVOPTAB_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -int mount_sd_fat(const char *path); -int unmount_sd_fat(const char *path); - -#ifdef __cplusplus -} -#endif - -#endif // __SD_FAT_DEVOPTAB_H_ diff --git a/src/ios_exploit.c b/src/ios_exploit.c index d2b7b18..f8471d6 100644 --- a/src/ios_exploit.c +++ b/src/ios_exploit.c @@ -1,7 +1,7 @@ #include #include -#include "dynamic_libs/os_functions.h" #include "ios_exploit.h" +#include "main.h" #define ALIGN4(x) (((x) + 3) & ~3) @@ -13,10 +13,10 @@ #define ARM_CODE_BASE 0x08135000 #define REPLACE_SYSCALL 0x081298BC -extern const u8 launch_image_tga[]; -extern const u32 launch_image_tga_size; +extern const uint8_t launch_image_tga[]; +extern const uint32_t launch_image_tga_size; -static void uhs_exploit_init(int uhs_handle, cfw_config_t * config); +static void uhs_exploit_init(int uhs_handle); static int uhs_write32(int uhs_handle, int arm_addr, int val); //!------Variables used in exploit------ @@ -26,17 +26,14 @@ static int *ayylmao = (int*)0xF4500000; typedef struct { - u32 size; - u8 data[0]; + uint32_t size; + uint8_t data[0]; } payload_info_t; /* YOUR ARM CODE HERE (starts at ARM_CODE_BASE) */ #include "../ios_kernel/ios_kernel.bin.h" #include "../ios_usb/ios_usb.bin.h" -#include "../ios_fs/ios_fs.bin.h" -#include "../ios_bsp/ios_bsp.bin.h" #include "../ios_mcp/ios_mcp.bin.h" -#include "../ios_acp/ios_acp.bin.h" /* ROP CHAIN STARTS HERE (0x1015BD78) */ @@ -306,8 +303,16 @@ static const int second_chain[] = { 0x1012EA68, // 0xAC stack pivot }; -static void uhs_exploit_init(int dev_uhs_0_handle, cfw_config_t * config) -{ +static void uhs_exploit_init(int dev_uhs_0_handle){ + + unsigned int coreinit_handle; + OSDynLoad_Acquire("coreinit.rpl", &coreinit_handle); + + void (* DCStoreRange)(const void *addr, uint32_t length); + + OSDynLoad_FindExport(coreinit_handle, 0, "DCStoreRange", &DCStoreRange); + + ayylmao[5] = 1; ayylmao[8] = 0x500000; @@ -317,49 +322,14 @@ static void uhs_exploit_init(int dev_uhs_0_handle, cfw_config_t * config) payload_info_t *payloads = (payload_info_t*)0xF4148000; - payloads->size = sizeof(cfw_config_t); - memcpy(payloads->data, config, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - payloads->size = sizeof(ios_usb_bin); memcpy(payloads->data, ios_usb_bin, payloads->size); payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - - payloads->size = sizeof(ios_fs_bin); - memcpy(payloads->data, ios_fs_bin, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - - payloads->size = sizeof(ios_bsp_bin); - memcpy(payloads->data, ios_bsp_bin, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - - payloads->size = sizeof(ios_acp_bin); - memcpy(payloads->data, ios_acp_bin, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - + payloads->size = sizeof(ios_mcp_bin); memcpy(payloads->data, ios_mcp_bin, payloads->size); payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - - if(config->launchImage) - { - FILE *pFile = fopen(APP_PATH "/launch_image.tga", "rb"); - if(pFile) - { - fseek(pFile, 0, SEEK_END); - payloads->size = ftell(pFile); - fseek(pFile, 0, SEEK_SET); - fread(payloads->data, 1, payloads->size, pFile); - fclose(pFile); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - } - else - { - payloads->size = launch_image_tga_size; - memcpy(payloads->data, launch_image_tga, payloads->size); - payloads = (payload_info_t*)( ((char*)payloads) + ALIGN4(sizeof(payload_info_t) + payloads->size) ); - } - } + pretend_root_hub[33] = 0x500000; pretend_root_hub[78] = 0; @@ -367,21 +337,44 @@ static void uhs_exploit_init(int dev_uhs_0_handle, cfw_config_t * config) DCStoreRange((void*)0xF4120000, sizeof(second_chain)); DCStoreRange((void*)0xF4130000, sizeof(final_chain)); DCStoreRange((void*)0xF4140000, sizeof(ios_kernel_bin)); - DCStoreRange((void*)0xF4148000, ((u32)payloads) - 0xF4148000); + DCStoreRange((void*)0xF4148000, ((uint32_t)payloads) - 0xF4148000); } -static int uhs_write32(int dev_uhs_0_handle, int arm_addr, int val) -{ - ayylmao[520] = arm_addr - 24; //! The address to be overwritten, minus 24 bytes - DCStoreRange(ayylmao, 521 * 4); //! Make CPU fetch new data (with updated adress) - OSSleepTicks(0x200000); //! Improves stability - int request_buffer[] = { -(0xBEA2C), val }; //! -(0xBEA2C) gets IOS_USB to read from the middle of MEM1 - int output_buffer[32]; - return IOS_Ioctl(dev_uhs_0_handle, 0x15, request_buffer, sizeof(request_buffer), output_buffer, sizeof(output_buffer)); +static int uhs_write32(int dev_uhs_0_handle, int arm_addr, int val){ + unsigned int coreinit_handle; + OSDynLoad_Acquire("coreinit.rpl", &coreinit_handle); + + void (* DCStoreRange)(const void *addr, uint32_t length); + int (*IOS_Ioctl)(int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len); + void (* OSSleepTicks)(uint64_t length); + + OSDynLoad_FindExport(coreinit_handle, 0, "DCStoreRange", &DCStoreRange); + OSDynLoad_FindExport(coreinit_handle, 0, "OSSleepTicks", &OSSleepTicks); + OSDynLoad_FindExport(coreinit_handle, 0, "IOS_Ioctl", &IOS_Ioctl); + + + ayylmao[520] = arm_addr - 24; //! The address to be overwritten, minus 24 bytes + DCStoreRange(ayylmao, 521 * 4); //! Make CPU fetch new data (with updated adress) + OSSleepTicks(0x200000); //! Improves stability + int request_buffer[] = { -(0xBEA2C), val }; //! -(0xBEA2C) gets IOS_USB to read from the middle of MEM1 + int output_buffer[32]; + return IOS_Ioctl(dev_uhs_0_handle, 0x15, request_buffer, sizeof(request_buffer), output_buffer, sizeof(output_buffer)); } -int ExecuteIOSExploit(cfw_config_t * config) -{ +int ExecuteIOSExploit(){ + + unsigned int coreinit_handle; + OSDynLoad_Acquire("coreinit.rpl", &coreinit_handle); + + int (*IOS_Open)(char *path, unsigned int mode); + int (*IOS_Ioctl)(int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len); + int (*IOS_Close)(int fd); + + OSDynLoad_FindExport(coreinit_handle, 0, "IOS_Open", &IOS_Open); + OSDynLoad_FindExport(coreinit_handle, 0, "IOS_Ioctl", &IOS_Ioctl); + OSDynLoad_FindExport(coreinit_handle, 0, "IOS_Close", &IOS_Close); + + int iosuhaxFd = IOS_Open("/dev/iosuhax", 0); if(iosuhaxFd >= 0) { @@ -397,10 +390,11 @@ int ExecuteIOSExploit(cfw_config_t * config) //! execute exploit int dev_uhs_0_handle = IOS_Open("/dev/uhs/0", 0); - if(dev_uhs_0_handle < 0) + if(dev_uhs_0_handle < 0){ return dev_uhs_0_handle; + } - uhs_exploit_init(dev_uhs_0_handle, config); + uhs_exploit_init(dev_uhs_0_handle); uhs_write32(dev_uhs_0_handle, CHAIN_START + 0x14, CHAIN_START + 0x14 + 0x4 + 0x20); uhs_write32(dev_uhs_0_handle, CHAIN_START + 0x10, 0x1011814C); uhs_write32(dev_uhs_0_handle, CHAIN_START + 0xC, SOURCE); diff --git a/src/ios_exploit.h b/src/ios_exploit.h index 41e56d2..c7dceec 100644 --- a/src/ios_exploit.h +++ b/src/ios_exploit.h @@ -1,13 +1,11 @@ #ifndef _IOS_EXPLOIT_H_ #define _IOS_EXPLOIT_H_ -#include "cfw_config.h" - #ifdef __cplusplus extern "C" { #endif -int ExecuteIOSExploit(cfw_config_t * config); +int ExecuteIOSExploit(); #ifdef __cplusplus } diff --git a/src/kernel_asm.S b/src/kernel_asm.S new file mode 100644 index 0000000..3edc393 --- /dev/null +++ b/src/kernel_asm.S @@ -0,0 +1,239 @@ +.section ".kernel_code" + .globl SaveAndResetDataBATs_And_SRs_hook +SaveAndResetDataBATs_And_SRs_hook: + # setup CTR to the position we need to return to + mflr r5 + mtctr r5 + # set link register to its original value + mtlr r7 + # setup us a nice DBAT for our code data with same region as our code + mfspr r5, 560 + mtspr 570, r5 + mfspr r5, 561 + mtspr 571, r5 + # restore the original kernel instructions that we replaced + lwz r5, 0x34(r3) + lwz r6, 0x38(r3) + lwz r7, 0x3C(r3) + lwz r8, 0x40(r3) + lwz r9, 0x44(r3) + lwz r10, 0x48(r3) + lwz r11, 0x4C(r3) + lwz r3, 0x50(r3) + isync + mtsr 7, r5 + # jump back to the position in kernel after our patch (from LR) + bctr + + +#define BAT_SETUP_HOOK_ADDR 0xFFF1D624 +# not all of those NOP address are required for every firmware +# mainly these should stop the kernel from removing our IBAT4 and DBAT5 +#define BAT_SET_NOP_ADDR_1 0xFFF06B6C +#define BAT_SET_NOP_ADDR_2 0xFFF06BF8 +#define BAT_SET_NOP_ADDR_3 0xFFF003C8 +#define BAT_SET_NOP_ADDR_4 0xFFF003CC +#define BAT_SET_NOP_ADDR_5 0xFFF1D70C +#define BAT_SET_NOP_ADDR_6 0xFFF1D728 +#define BAT_SET_NOP_ADDR_7 0xFFF1D82C + +#define BAT_SET_NOP_ADDR_8 0xFFEE11C4 +#define BAT_SET_NOP_ADDR_9 0xFFEE11C8 + +#define BAT_SETUP_HOOK_ENTRY 0x00800000 + + +#define BAT4U_VAL 0x008000FF +#define BAT4L_VAL 0x30800012 + + +#define SET_R4_TO_ADDR(addr) \ + lis r3, addr@h ; \ + ori r3, r3, addr@l ; \ + stw r4, 0(r3) ; \ + dcbf 0, r3 ; \ + icbi 0, r3 ; + + .globl Syscall_0x36 +Syscall_0x36: + li r0, 0x3600 + sc + blr + + +.global SCKernelCopyData +SCKernelCopyData: + // Disable data address translation + mfmsr %r6 + li %r7, 0x10 + andc %r6, %r6, %r7 + mtmsr %r6 + + // Copy data + addi %r3, %r3, -1 + addi %r4, %r4, -1 + mtctr %r5 +SCKernelCopyData_loop: + lbzu %r5, 1(%r4) + stbu %r5, 1(%r3) + bdnz SCKernelCopyData_loop + + // Enable data address translation + ori %r6, %r6, 0x10 + mtmsr %r6 +blr + +.global SC_0x25_KernelCopyData +SC_0x25_KernelCopyData: + li %r0, 0x2500 + sc +blr + + .globl KernelPatches +KernelPatches: + # store the old DBAT0 + mfdbatu r5, 0 + mfdbatl r6, 0 + + # memory barrier + eieio + isync + + # setup DBAT0 for access to kernel code memory + lis r3, 0xFFF0 + ori r3, r3, 0x0002 + mtdbatu 0, r3 + lis r3, 0xFFF0 + ori r3, r3, 0x0032 + mtdbatl 0, r3 + + # memory barrier + eieio + isync + + # SaveAndResetDataBATs_And_SRs hook setup, but could be any BAT function though + # just chosen because its simple + lis r3, BAT_SETUP_HOOK_ADDR@h + ori r3, r3, BAT_SETUP_HOOK_ADDR@l + + # make the kernel setup our section in IBAT4 and + # jump to our function to restore the replaced instructions + lis r4, 0x3ce0 # lis r7, BAT4L_VAL@h + ori r4, r4, BAT4L_VAL@h + stw r4, 0x00(r3) + lis r4, 0x60e7 # ori r7, r7, BAT4L_VAL@l + ori r4, r4, BAT4L_VAL@l + stw r4, 0x04(r3) + lis r4, 0x7cf1 # mtspr 561, r7 + ori r4, r4, 0x8ba6 + stw r4, 0x08(r3) + lis r4, 0x3ce0 # lis r7, BAT4U_VAL@h + ori r4, r4, BAT4U_VAL@h + stw r4, 0x0C(r3) + lis r4, 0x60e7 # ori r7, r7, BAT4U_VAL@l + ori r4, r4, BAT4U_VAL@l + stw r4, 0x10(r3) + lis r4, 0x7cf0 # mtspr 560, r7 + ori r4, r4, 0x8ba6 + stw r4, 0x14(r3) + lis r4, 0x7c00 # eieio + ori r4, r4, 0x06ac + stw r4, 0x18(r3) + lis r4, 0x4c00 # isync + ori r4, r4, 0x012c + stw r4, 0x1C(r3) + lis r4, 0x7ce8 # mflr r7 + ori r4, r4, 0x02a6 + stw r4, 0x20(r3) + lis r4, (BAT_SETUP_HOOK_ENTRY | 0x48000003)@h # bla BAT_SETUP_HOOK_ENTRY + ori r4, r4, (BAT_SETUP_HOOK_ENTRY | 0x48000003)@l + stw r4, 0x24(r3) + + # flush and invalidate the replaced instructions + lis r3, (BAT_SETUP_HOOK_ADDR & ~31)@h + ori r3, r3, (BAT_SETUP_HOOK_ADDR & ~31)@l + dcbf 0, r3 + icbi 0, r3 + lis r3, ((BAT_SETUP_HOOK_ADDR + 0x20) & ~31)@h + ori r3, r3, ((BAT_SETUP_HOOK_ADDR + 0x20) & ~31)@l + dcbf 0, r3 + icbi 0, r3 + sync + + # setup IBAT4 for core 1 at this position (not really required but wont hurt) + # IBATL 4 + lis r3, BAT4L_VAL@h + ori r3, r3, BAT4L_VAL@l + mtspr 561, r3 + + # IBATU 4 + lis r3, BAT4U_VAL@h + ori r3, r3, BAT4U_VAL@l + mtspr 560, r3 + + # memory barrier + eieio + isync + + # write "nop" to some positions + lis r4, 0x6000 + # nop on IBATU 4 and DBAT 5 set/reset +#ifdef BAT_SET_NOP_ADDR_1 + SET_R4_TO_ADDR(BAT_SET_NOP_ADDR_1) +#endif +#ifdef BAT_SET_NOP_ADDR_2 + SET_R4_TO_ADDR(BAT_SET_NOP_ADDR_2) +#endif +#ifdef BAT_SET_NOP_ADDR_3 + SET_R4_TO_ADDR(BAT_SET_NOP_ADDR_3) +#endif +#ifdef BAT_SET_NOP_ADDR_4 + SET_R4_TO_ADDR(BAT_SET_NOP_ADDR_4) +#endif +#ifdef BAT_SET_NOP_ADDR_5 + SET_R4_TO_ADDR(BAT_SET_NOP_ADDR_5) +#endif +#ifdef BAT_SET_NOP_ADDR_6 + SET_R4_TO_ADDR(BAT_SET_NOP_ADDR_6) +#endif +#ifdef BAT_SET_NOP_ADDR_7 + SET_R4_TO_ADDR(BAT_SET_NOP_ADDR_7) +#endif + +#if (defined(BAT_SET_NOP_ADDR_8) && defined(BAT_SET_NOP_ADDR_9)) + # memory barrier + eieio + isync + + # setup DBAT0 for access to kernel code memory + lis r3, 0xFFEE + ori r3, r3, 0x0002 + mtdbatu 0, r3 + lis r3, 0xFFEE + ori r3, r3, 0x0032 + mtdbatl 0, r3 + + # memory barrier + eieio + isync + + # write "nop" to some positions + lis r4, 0x6000 + SET_R4_TO_ADDR(BAT_SET_NOP_ADDR_8) + SET_R4_TO_ADDR(BAT_SET_NOP_ADDR_9) +#endif + + # memory barrier + eieio + isync + + # restore DBAT 0 and return from interrupt + mtdbatu 0, r5 + mtdbatl 0, r6 + + # memory barrier + eieio + isync + + blr + diff --git a/src/link.ld b/src/link.ld index fc569d1..48f88ac 100644 --- a/src/link.ld +++ b/src/link.ld @@ -1,40 +1,23 @@ -OUTPUT(ftpiiu.elf); +OUTPUT(payload.elf); -/* Tell linker where our application entry is so the garbage collect can work correct */ -ENTRY(__entry_menu); +ENTRY(_start); SECTIONS { - . = 0x00802000; + . = 0x00800000; .text : { + *(.kernel_code*); *(.text*); - } - .rodata : { - *(.rodata*); - } + /* Tell linker to not garbage collect this section as it is not referenced anywhere */ + KEEP(*(.kernel_code*)); + } .data : { + *(.rodata*); *(.data*); - - __sdata_start = .; - *(.sdata*); - __sdata_end = .; - - __sdata2_start = .; - *(.sdata2*); - __sdata2_end = .; - } - .bss : { - __bss_start = .; *(.bss*); - *(.sbss*); - *(COMMON); - __bss_end = .; } - __CODE_END = .; - /DISCARD/ : { *(*); } } -/******************************************************** FS ********************************************************/ -/* coreinit.rpl difference in addresses 0xFE3C00 */ +ASSERT((SIZEOF(.text) + SIZEOF(.data)) < 0x7C0000, "elf is too big"); \ No newline at end of file diff --git a/src/main.c b/src/main.c index 95f7a56..863cd5e 100644 --- a/src/main.c +++ b/src/main.c @@ -5,98 +5,145 @@ #include #include #include -#include "dynamic_libs/os_functions.h" -#include "dynamic_libs/fs_functions.h" -#include "dynamic_libs/gx2_functions.h" -#include "dynamic_libs/sys_functions.h" -#include "dynamic_libs/vpad_functions.h" -#include "dynamic_libs/socket_functions.h" -#include "fs/fs_utils.h" -#include "fs/sd_fat_devoptab.h" -#include "system/memory.h" -#include "utils/logger.h" -#include "utils/utils.h" -#include "common/common.h" -#include "menu.h" + #include "main.h" #include "ios_exploit.h" +#define OSDynLoad_Acquire ((void (*)(char* rpl, unsigned int *handle))0x0102A3B4) +#define OSDynLoad_FindExport ((void (*)(unsigned int handle, int isdata, char *symbol, void *address))0x0102B828) +#define OSFatal ((void (*)(char* msg))0x01031618) -static int exitToHBLOnLaunch = 0; +#define EXPORT_DECL(res, func, ...) res (* func)(__VA_ARGS__); +#define OS_FIND_EXPORT(handle, funcName, func) OSDynLoad_FindExport(handle, 0, funcName, &func) -int Menu_Main(void) -{ - //!---------INIT--------- - InitOSFunctionPointers(); - InitSysFunctionPointers(); - InitFSFunctionPointers(); - InitSocketFunctionPointers(); - InitVPadFunctionPointers(); +#define ADDRESS_OSTitle_main_entry_ptr 0x1005E040 +#define ADDRESS_main_entry_hook 0x0101c56c - u64 currenTitleId = OSGetTitleID(); +#define KERN_SYSCALL_TBL_1 0xFFE84C70 // unknown +#define KERN_SYSCALL_TBL_2 0xFFE85070 // works with games +#define KERN_SYSCALL_TBL_3 0xFFE85470 // works with loader +#define KERN_SYSCALL_TBL_4 0xFFEAAA60 // works with home menu +#define KERN_SYSCALL_TBL_5 0xFFEAAE60 // works with browser (previously KERN_SYSCALL_TBL) - // in case we are not in mii maker or HBL channel but in system menu or another channel we need to exit here - if (currenTitleId != 0x000500101004A200 && // mii maker eur - currenTitleId != 0x000500101004A100 && // mii maker usa - currenTitleId != 0x000500101004A000 && // mii maker jpn - currenTitleId != 0x0005000013374842) // HBL channel - { - return EXIT_RELAUNCH_ON_LOAD; - } - else if(exitToHBLOnLaunch) - { - return 0; - } +/* assembly functions */ +extern void Syscall_0x36(void); +extern void KernelPatches(void); +extern void SCKernelCopyData(unsigned int addr, unsigned int src, unsigned int len); - VPADInit(); - int forceMenu = 0; +extern void SC_0x25_KernelCopyData(unsigned int addr, unsigned int src, unsigned int len); - { - VPADData vpad; - int vpadError = -1; - VPADRead(0, &vpad, 1, &vpadError); +void __attribute__ ((noinline)) kern_write(void *addr, uint32_t value); - if(vpadError == 0) - { - forceMenu = (vpad.btns_d | vpad.btns_h) & VPAD_BUTTON_B; - } - } +typedef struct _private_data_t { + EXPORT_DECL(void *, MEMAllocFromDefaultHeapEx,int size, int align); + EXPORT_DECL(void, MEMFreeToDefaultHeap,void *ptr); - mount_sd_fat("sd"); + EXPORT_DECL(void*, memcpy, void *p1, const void *p2, unsigned int s); + EXPORT_DECL(void*, memset, void *p1, int val, unsigned int s); - cfw_config_t config; - default_config(&config); - read_config(&config); + EXPORT_DECL(unsigned int, OSEffectiveToPhysical, const void*); + EXPORT_DECL(void, exit, int); + EXPORT_DECL(void, DCInvalidateRange, const void *addr, unsigned int length); + EXPORT_DECL(void, DCFlushRange, const void *addr, unsigned int length); + EXPORT_DECL(void, ICInvalidateRange, const void *addr, unsigned int length); + EXPORT_DECL(void, OSForceFullRelaunch); - int launch = 1; + EXPORT_DECL(void, SYSRelaunchTitle, int argc, char** argv); + EXPORT_DECL(void, SYSLaunchMenu); +} private_data_t; - if(forceMenu || config.directLaunch == 0) - { - launch = ShowMenu(&config); - } - int returnCode = 0; +static void loadFunctionPointers(private_data_t * private_data) { + unsigned int coreinit_handle; - if(launch) - { - int res = ExecuteIOSExploit(&config); - if(res == 0) - { - if(config.noIosReload == 0) - { - OSForceFullRelaunch(); - SYSLaunchMenu(); - returnCode = EXIT_RELAUNCH_ON_LOAD; - } - else if(config.launchSysMenu) - { - SYSLaunchMenu(); - exitToHBLOnLaunch = 1; - returnCode = EXIT_RELAUNCH_ON_LOAD; - } - } - } + OSDynLoad_Acquire("coreinit", &coreinit_handle); - unmount_sd_fat("sd"); + unsigned int *functionPtr = 0; - return returnCode; + OSDynLoad_FindExport(coreinit_handle, 1, "MEMAllocFromDefaultHeapEx", &functionPtr); + private_data->MEMAllocFromDefaultHeapEx = (void * (*)(int, int))*functionPtr; + OSDynLoad_FindExport(coreinit_handle, 1, "MEMFreeToDefaultHeap", &functionPtr); + private_data->MEMFreeToDefaultHeap = (void (*)(void *))*functionPtr; + + OS_FIND_EXPORT(coreinit_handle, "memcpy", private_data->memcpy); + OS_FIND_EXPORT(coreinit_handle, "memset", private_data->memset); + OS_FIND_EXPORT(coreinit_handle, "DCFlushRange", private_data->DCFlushRange); + OS_FIND_EXPORT(coreinit_handle, "DCInvalidateRange", private_data->DCInvalidateRange); + OS_FIND_EXPORT(coreinit_handle, "ICInvalidateRange", private_data->ICInvalidateRange); + OS_FIND_EXPORT(coreinit_handle, "OSEffectiveToPhysical", private_data->OSEffectiveToPhysical); + OS_FIND_EXPORT(coreinit_handle, "OSForceFullRelaunch", private_data->OSForceFullRelaunch); + OS_FIND_EXPORT(coreinit_handle, "exit", private_data->exit); + + unsigned int sysapp_handle; + OSDynLoad_Acquire("sysapp.rpl", &sysapp_handle); + OS_FIND_EXPORT(sysapp_handle, "SYSRelaunchTitle", private_data->SYSRelaunchTitle); + OS_FIND_EXPORT(sysapp_handle, "SYSLaunchMenu", private_data->SYSLaunchMenu); } + +void KernelWriteU32(uint32_t addr, uint32_t value, private_data_t * pdata) { + pdata->ICInvalidateRange(&value, 4); + pdata->DCFlushRange(&value, 4); + + uint32_t dst = (uint32_t) pdata->OSEffectiveToPhysical((void *)addr); + uint32_t src = (uint32_t) pdata->OSEffectiveToPhysical((void *)&value); + + SC_0x25_KernelCopyData(dst, src, 4); + + pdata->DCFlushRange((void *)addr, 4); + pdata->ICInvalidateRange((void *)addr, 4); +} + +int _start(int argc, char **argv) { + kern_write((void*)(KERN_SYSCALL_TBL_1 + (0x25 * 4)), (unsigned int)SCKernelCopyData); + kern_write((void*)(KERN_SYSCALL_TBL_2 + (0x25 * 4)), (unsigned int)SCKernelCopyData); + kern_write((void*)(KERN_SYSCALL_TBL_3 + (0x25 * 4)), (unsigned int)SCKernelCopyData); + kern_write((void*)(KERN_SYSCALL_TBL_4 + (0x25 * 4)), (unsigned int)SCKernelCopyData); + kern_write((void*)(KERN_SYSCALL_TBL_5 + (0x25 * 4)), (unsigned int)SCKernelCopyData); + + kern_write((void*)(KERN_SYSCALL_TBL_1 + (0x36 * 4)), (unsigned int)KernelPatches); + kern_write((void*)(KERN_SYSCALL_TBL_2 + (0x36 * 4)), (unsigned int)KernelPatches); + kern_write((void*)(KERN_SYSCALL_TBL_3 + (0x36 * 4)), (unsigned int)KernelPatches); + kern_write((void*)(KERN_SYSCALL_TBL_4 + (0x36 * 4)), (unsigned int)KernelPatches); + kern_write((void*)(KERN_SYSCALL_TBL_5 + (0x36 * 4)), (unsigned int)KernelPatches); + + Syscall_0x36(); + + ExecuteIOSExploit(); + + private_data_t private_data; + loadFunctionPointers(&private_data); + + unsigned int repl_addr = ADDRESS_main_entry_hook; + unsigned int bufferU32 = 0x4E800421; + KernelWriteU32(repl_addr,bufferU32,&private_data); + + // restart mii maker. + //private_data.SYSRelaunchTitle(0, 0); + //private_data.exit(0); + + private_data.OSForceFullRelaunch(); + private_data.SYSLaunchMenu(); + + return ( (int (*)(int, char **))(*(unsigned int*)0x1005E040) )(argc, argv); +} + +/* Write a 32-bit word with kernel permissions */ +void __attribute__ ((noinline)) kern_write(void *addr, uint32_t value) { + asm volatile ( + "li 3,1\n" + "li 4,0\n" + "mr 5,%1\n" + "li 6,0\n" + "li 7,0\n" + "lis 8,1\n" + "mr 9,%0\n" + "mr %1,1\n" + "li 0,0x3500\n" + "sc\n" + "nop\n" + "mr 1,%1\n" + : + : "r"(addr), "r"(value) + : "memory", "ctr", "lr", "0", "3", "4", "5", "6", "7", "8", "9", "10", + "11", "12" + ); +} \ No newline at end of file diff --git a/src/main.h b/src/main.h index 0ee1b7b..6c23a65 100644 --- a/src/main.h +++ b/src/main.h @@ -2,14 +2,16 @@ #ifndef _MAIN_H_ #define _MAIN_H_ -#include "common/types.h" -#include "dynamic_libs/os_functions.h" /* Main */ #ifdef __cplusplus extern "C" { #endif + +#define OSDynLoad_Acquire ((void (*)(char* rpl, unsigned int *handle))0x0102A3B4) +#define OSDynLoad_FindExport ((void (*)(unsigned int handle, int isdata, char *symbol, void *address))0x0102B828) + //! C wrapper for our C++ functions int Menu_Main(void); diff --git a/src/menu.c b/src/menu.c deleted file mode 100644 index f4a44cd..0000000 --- a/src/menu.c +++ /dev/null @@ -1,259 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 - * by Dimok - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include "dynamic_libs/os_functions.h" -#include "dynamic_libs/fs_functions.h" -#include "dynamic_libs/gx2_functions.h" -#include "dynamic_libs/sys_functions.h" -#include "dynamic_libs/vpad_functions.h" -#include "dynamic_libs/socket_functions.h" -#include "menu.h" - -#define MAX_CONFIG_SETTINGS_EXPERT 9 -#define MAX_CONFIG_SETTINGS_DEFAULT (MAX_CONFIG_SETTINGS_EXPERT - 3) - -#define TEXT_SEL(x, text1, text2) ((x) ? (text1) : (text2)) - -struct { - const char *option; - const char *enabled; - const char *disabled; -} selection_options[] = -{ - { "Config view mode", "expert", "default" }, - { "Skip this menu on launch", "on", "off" }, - { "Show launch image", "on", "off" }, - { "Don't relaunch OS", "on", "off" }, - { "Launch System Menu", "on", "off" }, - { "redNAND", "on", "off" }, - { "SEEPROM redirection", "on", "off" }, - { "OTP redirection", "on", "off" }, - { "Use syshax.xml (coldboothax)", "on", "off" }, -}; - -static void console_print_pos(int x, int y, const char *format, ...) -{ - char * tmp = NULL; - - va_list va; - va_start(va, format); - if((vasprintf(&tmp, format, va) >= 0) && tmp) - { - if(strlen(tmp) > 79) - tmp[79] = 0; - - OSScreenPutFontEx(0, x, y, tmp); - OSScreenPutFontEx(1, x, y, tmp); - - } - va_end(va); - - if(tmp) - free(tmp); -} - -int ShowMenu(cfw_config_t * currentConfig) -{ - // Init screen and screen buffers - OSScreenInit(); - u32 screen_buf0_size = OSScreenGetBufferSizeEx(0); - u32 screen_buf1_size = OSScreenGetBufferSizeEx(1); - u8 * screenBuffer = (u8*) memalign(0x100, screen_buf0_size + screen_buf1_size); - OSScreenSetBufferEx(0, (void *)screenBuffer); - OSScreenSetBufferEx(1, (void *)(screenBuffer + screen_buf0_size)); - - OSScreenEnableEx(0, 1); - OSScreenEnableEx(1, 1); - - // Clear screens - OSScreenClearBufferEx(0, 0); - OSScreenClearBufferEx(1, 0); - - // Flip buffers - OSScreenFlipBuffersEx(0); - OSScreenFlipBuffersEx(1); - - VPADData vpad; - int vpadError; - int x_offset = -2; - int initScreen = 1; - int selected = 0; - int launch = 0; - cfw_config_t config; - memcpy(&config, currentConfig, sizeof(cfw_config_t)); - - int max_config_item = config.viewMode ? MAX_CONFIG_SETTINGS_EXPERT : MAX_CONFIG_SETTINGS_DEFAULT; - - while(1) - { - //! update only at 50 Hz, thats more than enough - vpadError = -1; - VPADRead(0, &vpad, 1, &vpadError); - - if(vpadError == 0) - { - if(vpad.btns_d & VPAD_BUTTON_HOME) - { - break; - } - else if(vpad.btns_d & VPAD_BUTTON_A) - { - launch = 1; - break; - } - else if(vpad.btns_d & VPAD_BUTTON_DOWN) - { - selected++; - if(selected >= max_config_item) - selected = 0; - - initScreen = 1; - } - else if(vpad.btns_d & VPAD_BUTTON_UP) - { - selected--; - if(selected < 0) - selected = max_config_item - 1; - - initScreen = 1; - } - else if(vpad.btns_d & (VPAD_BUTTON_LEFT | VPAD_BUTTON_RIGHT)) - { - switch(selected) - { - case 0: - config.viewMode = !config.viewMode; - max_config_item = config.viewMode ? MAX_CONFIG_SETTINGS_EXPERT : MAX_CONFIG_SETTINGS_DEFAULT; - break; - case 1: - config.directLaunch = !config.directLaunch; - break; - case 2: - config.launchImage = !config.launchImage; - break; - case 3: - config.noIosReload = !config.noIosReload; - break; - case 4: - config.launchSysMenu = !config.launchSysMenu; - break; - case 5: - config.redNAND = !config.redNAND; - break; - case 6: - config.seeprom_red = !config.seeprom_red; - break; - case 7: - config.otp_red = !config.otp_red; - break; - case 8: - config.syshaxXml = !config.syshaxXml; - break; - default: - break; - } - - if(!config.viewMode) - { - config.syshaxXml = 0; - - if(config.redNAND) - { - config.seeprom_red = 1; - config.otp_red = 1; - } - } - if(config.noIosReload) - { - config.launchImage = 0; - config.redNAND = 0; - } - else - { - config.launchSysMenu = 1; - } - - if(config.redNAND == 0) - { - config.seeprom_red = 0; - config.otp_red = 0; - } - - initScreen = 1; - } - } - - if(initScreen) - { - OSScreenClearBufferEx(0, 0); - OSScreenClearBufferEx(1, 0); - - console_print_pos(x_offset, 1, " -- MOCHA CFW %s by Dimok --", APP_VERSION); - - console_print_pos(x_offset, 3, "Select your options and press A to launch."); - console_print_pos(x_offset, 4, "Press HOME to exit back to HBL."); - console_print_pos(x_offset, 5, "Hold B on start to force enter this menu"); - - int y_offset = 6; - int option_count = sizeof(selection_options) / sizeof(selection_options[0]); - int idx; - int * configPtr = &config.viewMode; - - for(idx = 0; idx < option_count && idx < max_config_item; idx++) - { - console_print_pos(x_offset, y_offset++, "%s %-29s : %s%s%s %s%s%s", TEXT_SEL((selected == idx), "--->", " "), selection_options[idx].option, - TEXT_SEL(configPtr[idx], "<", " "), selection_options[idx].enabled, TEXT_SEL(configPtr[idx], ">", " "), - TEXT_SEL(configPtr[idx], " ", "<"), selection_options[idx].disabled, TEXT_SEL(configPtr[idx], " ", ">")); - } - - console_print_pos(x_offset, 16, "Credits go to everyone who contributed to Wii U scene publicly."); - console_print_pos(x_offset, 17, "Special thanks to smealum, plutoo, yellows8, naehrwert and derrek."); - - // Flip buffers - OSScreenFlipBuffersEx(0); - OSScreenFlipBuffersEx(1); - - initScreen = 0; - } - - os_usleep(20000); - } - - OSScreenShutdown(); - free(screenBuffer); - - if(memcmp(currentConfig, &config, sizeof(cfw_config_t)) != 0) - { - memcpy(currentConfig, &config, sizeof(cfw_config_t)); - write_config(currentConfig); - } - - return launch; -} diff --git a/src/menu.h b/src/menu.h deleted file mode 100644 index 9e76131..0000000 --- a/src/menu.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _MENU_H_ -#define _MENU_H_ - -#include "cfw_config.h" - -int ShowMenu(cfw_config_t * config); - -#endif diff --git a/src/system/exception_handler.c b/src/system/exception_handler.c deleted file mode 100644 index 0d2657b..0000000 --- a/src/system/exception_handler.c +++ /dev/null @@ -1,145 +0,0 @@ -#include -#include "dynamic_libs/os_functions.h" -#include "utils/logger.h" -#include "exception_handler.h" - -#define OS_EXCEPTION_MODE_GLOBAL_ALL_CORES 4 - -#define OS_EXCEPTION_DSI 2 -#define OS_EXCEPTION_ISI 3 -#define OS_EXCEPTION_PROGRAM 6 - -#define CPU_STACK_TRACE_DEPTH 10 -#define __stringify(rn) #rn - -#define mfspr(_rn) \ -({ register uint32_t _rval = 0; \ - asm volatile("mfspr %0," __stringify(_rn) \ - : "=r" (_rval));\ - _rval; \ -}) - -typedef struct _framerec { - struct _framerec *up; - void *lr; -} frame_rec, *frame_rec_t; - -static const char *exception_names[] = { - "DSI", - "ISI", - "PROGRAM" -}; - -static const char exception_print_formats[18][45] = { - "Exception type %s occurred!\n", // 0 - "GPR00 %08X GPR08 %08X GPR16 %08X GPR24 %08X\n", // 1 - "GPR01 %08X GPR09 %08X GPR17 %08X GPR25 %08X\n", // 2 - "GPR02 %08X GPR10 %08X GPR18 %08X GPR26 %08X\n", // 3 - "GPR03 %08X GPR11 %08X GPR19 %08X GPR27 %08X\n", // 4 - "GPR04 %08X GPR12 %08X GPR20 %08X GPR28 %08X\n", // 5 - "GPR05 %08X GPR13 %08X GPR21 %08X GPR29 %08X\n", // 6 - "GPR06 %08X GPR14 %08X GPR22 %08X GPR30 %08X\n", // 7 - "GPR07 %08X GPR15 %08X GPR23 %08X GPR31 %08X\n", // 8 - "LR %08X SRR0 %08x SRR1 %08x\n", // 9 - "DAR %08X DSISR %08X\n", // 10 - "\nSTACK DUMP:", // 11 - " --> ", // 12 - " -->\n", // 13 - "\n", // 14 - "%p", // 15 - "\nCODE DUMP:\n", // 16 - "%p: %08X %08X %08X %08X\n", // 17 -}; - -static unsigned char exception_cb(void * c, unsigned char exception_type) { - char buf[850]; - int pos = 0; - - OSContext *context = (OSContext *) c; - /* - * This part is mostly from libogc. Thanks to the devs over there. - */ - pos += sprintf(buf + pos, exception_print_formats[0], exception_names[exception_type]); - pos += sprintf(buf + pos, exception_print_formats[1], context->gpr[0], context->gpr[8], context->gpr[16], context->gpr[24]); - pos += sprintf(buf + pos, exception_print_formats[2], context->gpr[1], context->gpr[9], context->gpr[17], context->gpr[25]); - pos += sprintf(buf + pos, exception_print_formats[3], context->gpr[2], context->gpr[10], context->gpr[18], context->gpr[26]); - pos += sprintf(buf + pos, exception_print_formats[4], context->gpr[3], context->gpr[11], context->gpr[19], context->gpr[27]); - pos += sprintf(buf + pos, exception_print_formats[5], context->gpr[4], context->gpr[12], context->gpr[20], context->gpr[28]); - pos += sprintf(buf + pos, exception_print_formats[6], context->gpr[5], context->gpr[13], context->gpr[21], context->gpr[29]); - pos += sprintf(buf + pos, exception_print_formats[7], context->gpr[6], context->gpr[14], context->gpr[22], context->gpr[30]); - pos += sprintf(buf + pos, exception_print_formats[8], context->gpr[7], context->gpr[15], context->gpr[23], context->gpr[31]); - pos += sprintf(buf + pos, exception_print_formats[9], context->lr, context->srr0, context->srr1); - - //if(exception_type == OS_EXCEPTION_DSI) { - pos += sprintf(buf + pos, exception_print_formats[10], context->ex1, context->ex0); // this freezes - //} - - void *pc = (void*)context->srr0; - void *lr = (void*)context->lr; - void *r1 = (void*)context->gpr[1]; - register uint32_t i = 0; - register frame_rec_t l,p = (frame_rec_t)lr; - - l = p; - p = r1; - if(!p) - asm volatile("mr %0,%%r1" : "=r"(p)); - - pos += sprintf(buf + pos, exception_print_formats[11]); - - for(i = 0; i < CPU_STACK_TRACE_DEPTH-1 && p->up; p = p->up, i++) { - if(i % 4) - pos += sprintf(buf + pos, exception_print_formats[12]); - else { - if(i > 0) - pos += sprintf(buf + pos, exception_print_formats[13]); - else - pos += sprintf(buf + pos, exception_print_formats[14]); - } - - switch(i) { - case 0: - if(pc) - pos += sprintf(buf + pos, exception_print_formats[15],pc); - break; - case 1: - if(!l) - l = (frame_rec_t)mfspr(8); - pos += sprintf(buf + pos, exception_print_formats[15],(void*)l); - break; - default: - pos += sprintf(buf + pos, exception_print_formats[15],(void*)(p->up->lr)); - break; - } - } - - //if(exception_type == OS_EXCEPTION_DSI) { - uint32_t *pAdd = (uint32_t*)context->srr0; - pos += sprintf(buf + pos, exception_print_formats[16]); - // TODO by Dimok: this was actually be 3 instead of 2 lines in libogc .... but there is just no more space anymore on the screen - for (i = 0; i < 8; i += 4) - pos += sprintf(buf + pos, exception_print_formats[17], &(pAdd[i]),pAdd[i], pAdd[i+1], pAdd[i+2], pAdd[i+3]); - //} - #if DEBUG_LOGGER == 1 - log_print(buf); - #endif - - OSFatal(buf); - return 1; -} - -static unsigned char dsi_exception_cb(void * context) { - return exception_cb(context, 0); -} -static unsigned char isi_exception_cb(void * context) { - return exception_cb(context, 1); -} -static unsigned char program_exception_cb(void * context) { - return exception_cb(context, 2); -} - -void setup_os_exceptions(void) { - OSSetExceptionCallback(OS_EXCEPTION_DSI, &dsi_exception_cb); - OSSetExceptionCallback(OS_EXCEPTION_ISI, &isi_exception_cb); - OSSetExceptionCallback(OS_EXCEPTION_PROGRAM, &program_exception_cb); -} diff --git a/src/system/exception_handler.h b/src/system/exception_handler.h deleted file mode 100644 index 7626f92..0000000 --- a/src/system/exception_handler.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef __EXCEPTION_HANDLER_H_ -#define __EXCEPTION_HANDLER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -void setup_os_exceptions(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/system/memory.c b/src/system/memory.c deleted file mode 100644 index d2d25d7..0000000 --- a/src/system/memory.c +++ /dev/null @@ -1,181 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2015 Dimok - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - ****************************************************************************/ -#include -#include -#include "dynamic_libs/os_functions.h" -#include "common/common.h" -#include "memory.h" - -#define MEMORY_ARENA_1 0 -#define MEMORY_ARENA_2 1 -#define MEMORY_ARENA_3 2 -#define MEMORY_ARENA_4 3 -#define MEMORY_ARENA_5 4 -#define MEMORY_ARENA_6 5 -#define MEMORY_ARENA_7 6 -#define MEMORY_ARENA_8 7 -#define MEMORY_ARENA_FG_BUCKET 8 - -static int mem1_heap = -1; -static int bucket_heap = -1; - -void memoryInitialize(void) -{ - int mem1_heap_handle = MEMGetBaseHeapHandle(MEMORY_ARENA_1); - unsigned int mem1_allocatable_size = MEMGetAllocatableSizeForFrmHeapEx(mem1_heap_handle, 4); - void *mem1_memory = MEMAllocFromFrmHeapEx(mem1_heap_handle, mem1_allocatable_size, 4); - if(mem1_memory) - mem1_heap = MEMCreateExpHeapEx(mem1_memory, mem1_allocatable_size, 0); - - int bucket_heap_handle = MEMGetBaseHeapHandle(MEMORY_ARENA_FG_BUCKET); - unsigned int bucket_allocatable_size = MEMGetAllocatableSizeForFrmHeapEx(bucket_heap_handle, 4); - void *bucket_memory = MEMAllocFromFrmHeapEx(bucket_heap_handle, bucket_allocatable_size, 4); - if(bucket_memory) - bucket_heap = MEMCreateExpHeapEx(bucket_memory, bucket_allocatable_size, 0); -} - -void memoryRelease(void) -{ - MEMDestroyExpHeap(mem1_heap); - MEMFreeToFrmHeap(MEMGetBaseHeapHandle(MEMORY_ARENA_1), 3); - mem1_heap = -1; - - MEMDestroyExpHeap(bucket_heap); - MEMFreeToFrmHeap(MEMGetBaseHeapHandle(MEMORY_ARENA_FG_BUCKET), 3); - bucket_heap = -1; -} - -//!------------------------------------------------------------------------------------------- -//! wraps -//!------------------------------------------------------------------------------------------- -void *__wrap_malloc(size_t size) -{ - // pointer to a function resolve - return ((void * (*)(size_t))(*pMEMAllocFromDefaultHeap))(size); -} - -void *__wrap_memalign(size_t align, size_t size) -{ - if (align < 4) - align = 4; - - // pointer to a function resolve - return ((void * (*)(size_t, size_t))(*pMEMAllocFromDefaultHeapEx))(size, align); -} - -void __wrap_free(void *p) -{ - // pointer to a function resolve - if(p != 0) - ((void (*)(void *))(*pMEMFreeToDefaultHeap))(p); -} - -void *__wrap_calloc(size_t n, size_t size) -{ - void *p = __wrap_malloc(n * size); - if (p != 0) { - memset(p, 0, n * size); - } - return p; -} - -size_t __wrap_malloc_usable_size(void *p) -{ - //! TODO: this is totally wrong and needs to be addressed - return 0x7FFFFFFF; -} - -void *__wrap_realloc(void *p, size_t size) -{ - void *new_ptr = __wrap_malloc(size); - if (new_ptr != 0) - { - memcpy(new_ptr, p, __wrap_malloc_usable_size(p) < size ? __wrap_malloc_usable_size(p) : size); - __wrap_free(p); - } - return new_ptr; -} - -//!------------------------------------------------------------------------------------------- -//! reent versions -//!------------------------------------------------------------------------------------------- -void *__wrap__malloc_r(struct _reent *r, size_t size) -{ - return __wrap_malloc(size); -} - -void *__wrap__calloc_r(struct _reent *r, size_t n, size_t size) -{ - return __wrap_calloc(n, size); -} - -void *__wrap__memalign_r(struct _reent *r, size_t align, size_t size) -{ - return __wrap_memalign(align, size); -} - -void __wrap__free_r(struct _reent *r, void *p) -{ - __wrap_free(p); -} - -size_t __wrap__malloc_usable_size_r(struct _reent *r, void *p) -{ - return __wrap_malloc_usable_size(p); -} - -void *__wrap__realloc_r(struct _reent *r, void *p, size_t size) -{ - return __wrap_realloc(p, size); -} - -//!------------------------------------------------------------------------------------------- -//! some wrappers -//!------------------------------------------------------------------------------------------- -void * MEM2_alloc(unsigned int size, unsigned int align) -{ - return __wrap_memalign(align, size); -} - -void MEM2_free(void *ptr) -{ - __wrap_free(ptr); -} - -void * MEM1_alloc(unsigned int size, unsigned int align) -{ - if (align < 4) - align = 4; - return MEMAllocFromExpHeapEx(mem1_heap, size, align); -} - -void MEM1_free(void *ptr) -{ - MEMFreeToExpHeap(mem1_heap, ptr); -} - -void * MEMBucket_alloc(unsigned int size, unsigned int align) -{ - if (align < 4) - align = 4; - return MEMAllocFromExpHeapEx(bucket_heap, size, align); -} - -void MEMBucket_free(void *ptr) -{ - MEMFreeToExpHeap(bucket_heap, ptr); -} diff --git a/src/system/memory.h b/src/system/memory.h deleted file mode 100644 index 59764d0..0000000 --- a/src/system/memory.h +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2015 Dimok - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - ****************************************************************************/ -#ifndef __MEMORY_H_ -#define __MEMORY_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -void memoryInitialize(void); -void memoryRelease(void); - -void * MEM2_alloc(unsigned int size, unsigned int align); -void MEM2_free(void *ptr); - -void * MEM1_alloc(unsigned int size, unsigned int align); -void MEM1_free(void *ptr); - -void * MEMBucket_alloc(unsigned int size, unsigned int align); -void MEMBucket_free(void *ptr); - -#ifdef __cplusplus -} -#endif - -#endif // __MEMORY_H_ diff --git a/src/utils/logger.c b/src/utils/logger.c deleted file mode 100644 index f4795b4..0000000 --- a/src/utils/logger.c +++ /dev/null @@ -1,89 +0,0 @@ -#include -#include -#include -#include -#include -#include "common/common.h" -#include "dynamic_libs/os_functions.h" -#include "dynamic_libs/socket_functions.h" -#include "logger.h" - -#ifdef DEBUG_LOGGER -static int log_socket = -1; -static volatile int log_lock = 0; - - -void log_init(const char * ipString) -{ - log_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); - if (log_socket < 0) - return; - - struct sockaddr_in connect_addr; - memset(&connect_addr, 0, sizeof(connect_addr)); - connect_addr.sin_family = AF_INET; - connect_addr.sin_port = 4405; - inet_aton(ipString, &connect_addr.sin_addr); - - if(connect(log_socket, (struct sockaddr*)&connect_addr, sizeof(connect_addr)) < 0) - { - socketclose(log_socket); - log_socket = -1; - } -} - -void log_deinit(void) -{ - if(log_socket >= 0) - { - socketclose(log_socket); - log_socket = -1; - } -} - -void log_print(const char *str) -{ - // socket is always 0 initially as it is in the BSS - if(log_socket < 0) { - return; - } - - while(log_lock) - usleep(1000); - log_lock = 1; - - int len = strlen(str); - int ret; - while (len > 0) { - int block = len < 1400 ? len : 1400; // take max 1400 bytes per UDP packet - ret = send(log_socket, str, block, 0); - if(ret < 0) - break; - - len -= ret; - str += ret; - } - - log_lock = 0; -} - -void log_printf(const char *format, ...) -{ - if(log_socket < 0) { - return; - } - - char * tmp = NULL; - - va_list va; - va_start(va, format); - if((vasprintf(&tmp, format, va) >= 0) && tmp) - { - log_print(tmp); - } - va_end(va); - - if(tmp) - free(tmp); -} -#endif diff --git a/src/utils/logger.h b/src/utils/logger.h deleted file mode 100644 index dd7cc71..0000000 --- a/src/utils/logger.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef __LOGGER_H_ -#define __LOGGER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#define DEBUG_LOGGER 1 - -#ifdef DEBUG_LOGGER -void log_init(const char * ip); -void log_deinit(void); -void log_print(const char *str); -void log_printf(const char *format, ...); -#else -#define log_init(x) -#define log_deinit() -#define log_print(x) -#define log_printf(x, ...) -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/utils/utils.h b/src/utils/utils.h deleted file mode 100644 index c460fa2..0000000 --- a/src/utils/utils.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef __UTILS_H_ -#define __UTILS_H_ - -#include -#include "../common/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define FlushBlock(addr) asm volatile("dcbf %0, %1\n" \ - "icbi %0, %1\n" \ - "sync\n" \ - "eieio\n" \ - "isync\n" \ - : \ - :"r"(0), "r"(((addr) & ~31)) \ - :"memory", "ctr", "lr", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" \ - ); - -#define LIMIT(x, min, max) \ - ({ \ - typeof( x ) _x = x; \ - typeof( min ) _min = min; \ - typeof( max ) _max = max; \ - ( ( ( _x ) < ( _min ) ) ? ( _min ) : ( ( _x ) > ( _max ) ) ? ( _max) : ( _x ) ); \ - }) - -#define DegToRad(a) ( (a) * 0.01745329252f ) -#define RadToDeg(a) ( (a) * 57.29577951f ) - -#define ALIGN4(x) (((x) + 3) & ~3) -#define ALIGN32(x) (((x) + 31) & ~31) - -// those work only in powers of 2 -#define ROUNDDOWN(val, align) ((val) & ~(align-1)) -#define ROUNDUP(val, align) ROUNDDOWN(((val) + (align-1)), align) - -#define le16(i) ((((u16) ((i) & 0xFF)) << 8) | ((u16) (((i) & 0xFF00) >> 8))) -#define le32(i) ((((u32)le16((i) & 0xFFFF)) << 16) | ((u32)le16(((i) & 0xFFFF0000) >> 16))) -#define le64(i) ((((u64)le32((i) & 0xFFFFFFFFLL)) << 32) | ((u64)le32(((i) & 0xFFFFFFFF00000000LL) >> 32))) - -#ifdef __cplusplus -} -#endif - -#endif // __UTILS_H_