From 543779a850c2ea0cd3589fc6fc85865d8a34c344 Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Tue, 5 Oct 2021 08:40:25 -0700 Subject: [PATCH 01/11] first draft for ac_int tutorial --- .../Features/ac_types/ac_int/CMakeLists.txt | 20 + .../Features/ac_types/ac_int/License.txt | 23 + .../Features/ac_types/ac_int/README.md | 252 ++ .../Features/ac_types/ac_int/ac_int.sln | 25 + .../Features/ac_types/ac_int/ac_int.vcxproj | 160 ++ .../Features/ac_types/ac_int/sample.json | 55 + .../ac_types/ac_int/src/CMakeLists.txt | 89 + .../Features/ac_types/ac_int/src/ac_int.cpp | 331 +++ .../Features/ac_types/ac_int/src/ac_int.hpp | 2509 +++++++++++++++++ .../ac_types/ac_int/third-party-programs.txt | 253 ++ 10 files changed, 3717 insertions(+) create mode 100755 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/CMakeLists.txt create mode 100755 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/License.txt create mode 100755 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md create mode 100755 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.sln create mode 100755 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.vcxproj create mode 100755 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/sample.json create mode 100755 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt create mode 100644 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp create mode 100644 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.hpp create mode 100644 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/third-party-programs.txt diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/CMakeLists.txt b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/CMakeLists.txt new file mode 100755 index 0000000000..cdba19e90b --- /dev/null +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/CMakeLists.txt @@ -0,0 +1,20 @@ +if(UNIX) + # Direct CMake to use dpcpp rather than the default C++ compiler/linker + set(CMAKE_CXX_COMPILER dpcpp) +else() # Windows + # Force CMake to use dpcpp rather than the default C++ compiler/linker + # (needed on Windows only) + include (CMakeForceCompiler) + CMAKE_FORCE_CXX_COMPILER (dpcpp IntelDPCPP) + include (Platform/Windows-Clang) +endif() + +cmake_minimum_required (VERSION 3.4) + +project(ACInt CXX) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + +add_subdirectory (src) diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/License.txt b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/License.txt new file mode 100755 index 0000000000..7c8b8a36c6 --- /dev/null +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/License.txt @@ -0,0 +1,23 @@ +Copyright Intel Corporation + +SPDX-License-Identifier: MIT +https://opensource.org/licenses/MIT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md new file mode 100755 index 0000000000..3b609c9305 --- /dev/null +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md @@ -0,0 +1,252 @@ +# Using the Algorithmic C Integer Data-type 'ac_int' + +This FPGA tutorial demonstrates how to use the Algorithmic C (AC) Data-type 'ac_int' and some best practices. + +***Documentation***: The [DPC++ FPGA Code Samples Guide](https://software.intel.com/content/www/us/en/develop/articles/explore-dpcpp-through-intel-fpga-code-samples.html) helps you to navigate the samples and build your knowledge of DPC++ for FPGA.
+The [oneAPI DPC++ FPGA Optimization Guide](https://software.intel.com/content/www/us/en/develop/documentation/oneapi-fpga-optimization-guide) is the reference manual for targeting FPGAs through DPC++.
+The [oneAPI Programming Guide](https://software.intel.com/en-us/oneapi-programming-guide) is a general resource for target-independent DPC++ programming. + +| Optimized for | Description +--- |--- +| OS | Linux* Ubuntu* 18.04/20.04, RHEL*/CentOS* 8, SUSE* 15; Windows* 10 +| Hardware | Intel® Programmable Acceleration Card (PAC) with Intel Arria® 10 GX FPGA
Intel® FPGA Programmable Acceleration Card (PAC) D5005 (with Intel Stratix® 10 SX)
Intel® FPGA 3rd party / custom platforms with oneAPI support
*__Note__: Intel® FPGA PAC hardware is only compatible with Ubuntu 18.04* +| Software | Intel® oneAPI DPC++ Compiler
Intel® FPGA Add-On for oneAPI Base Toolkit +| What you will learn | Using the ac_int data-type for basic operations
Efficiently using the left shift operation
Setting and reading certain bits of an ac_int number +| Time to complete | 20 minutes + + + +## Purpose + +This FPGA tutorial shows how to use the ac_int type with some simple examples. + +This data-type can be used in place of native integer types to generate area efficient and optimized designs for the FPGA. For example, operations which do not utilize all of the bits the native integer types are good candidates for replacement with ac_int type. + + +### Simple Code Example + +An ac_int number can be defined as follows: +```cpp +ac_int a; +``` +Here W is the width and S is the sign of the number. + +To use this type in your code, you must include the following header: + +```cpp +#include +``` +Additionally, you must use the flag `-qactypes` in order to ensure that the headers are correctly included. + +For convenience, the following are predefined under the `ac_intN` namespace: +``` +ac_int are type defined as intN up to 63. +ac_int are type defined as uintN up to 63. +``` + +For example, a 14 bit signed ac_int can be defined by using +```cpp +ac_intN::int14 a; +``` + +### Understanding the Tutorial Design + +The tutorial consists of several functions, each of which contains a SYCL kernel that demonstrates a specific operation. The operations we will see are: +* Addition +* Division +* Multiplication +* Left shift +* Setting a bit of an ac_int number +* Reading a bit of an ac_int number + +#### Basic Operations and Promotion Rules + +When using ac_int, we can write Addition, Division, Multiplication operations to use precisely as many bits as are needed to store the results. This is demonstrated by the kernels `Add`, `Div` and `Mult`. + +ac_int automatically promotes the result of all operations to the number number of bits needed to represent all possible results without overflowing. For example, the addition of two 8-bit integers results in a 9-bit result to support overflow. Internally, the result will be 9-bits. + +However, if the user attempts to store the result in an 8-bit container, ac_int will let the user do this, but this leads to the discard of the extra carry bit. The responsibility lies on the user to use the correct datatype. + +These promotions rules are consistent across all architectures so the behavior should be equivalent on x86 or on FPGA. + +#### Shift Operation + +The behavior of shift operations in ac_int is slightly different from what is defined in the C spec. For full details, see the ac_int documentation in the file `ac_data_types_ref.pdf`. Some key points to remember are as follows: +- If the datatype of the shift amount is signed, negative shift amounts are accepted. A shift by a negative amount is equivalent to a positive shift in the opposite direction. +- If the user knows that the shift direction and that the shift value is always positive, it is advisable to use an unsigned datatype for the shift value to obtain better QoR. +- Shift values of greater than the width of the datatypes are treated as a shift equal to the width of the datatype. + +Further, the operation can be done more efficiently by specifying the amount to shift with the smallest possible ac_int. + +For example, in the tutorial, two kernels perform the left shift operation: `ShiftLeft` and `EfficientShiftLeft`. Both operate on an 14 bits wide ac_int. The former stores the shift amount in an ac_int which is 14 bits wide and the latter stores it in an ac_int which is 4 bits wide. The latter will generate lesser hardware. + +#### Bit Slice Operations + +The kernels `GetBitSlice` and `SetBitSlice` show how to read from and write to specific bits of an ac_int number. Note that only static bit widths are supported with such "slice" operations. + +For detailed documentation on the `set_slc` and `slc` APIs please see the file `ac_data_types_ref.pdf` + +## Key Concepts +* The ac_int data-type can be used to generate hardware for only as many bits as is needed by the operation as compared to native integer types which generate hardware for the entire type width. +* The left shift operation on ac_int can be implemented more efficiently when the amount to shift with is stored in a minimally sized ac_int. +* The ac_int data-type offers functions for several useful operations including reading and writing of certain bits of an ac_int number. This can be very useful in creating bit masks. + +## License + +Code samples are licensed under the MIT license. See +[License.txt](https://github.com/oneapi-src/oneAPI-samples/blob/master/License.txt) for details. + +Third party program Licenses can be found here: [third-party-programs.txt](https://github.com/oneapi-src/oneAPI-samples/blob/master/third-party-programs.txt) + +## Building the `ac_int` Tutorial + +### Include Files + +The included header `dpc_common.hpp` is located at `%ONEAPI_ROOT%\dev-utilities\latest\include` on your development system. + +### Running Samples in DevCloud +If running a sample in the Intel DevCloud, remember that you must specify the type of compute node and whether to run in batch or interactive mode. Compiles to FPGA are only supported on fpga_compile nodes. Executing programs on FPGA hardware is only supported on fpga_runtime nodes of the appropriate type, such as fpga_runtime:arria10 or fpga_runtime:stratix10. Neither compiling nor executing programs on FPGA hardware are supported on the login nodes. For more information, see the Intel® oneAPI Base Toolkit Get Started Guide ([https://devcloud.intel.com/oneapi/documentation/base-toolkit/](https://devcloud.intel.com/oneapi/documentation/base-toolkit/)). + +When compiling for FPGA hardware, it is recommended to increase the job timeout to 12h. + +### On a Linux* System + +1. Install the design in `build` directory from the design directory by running `cmake`: + + ```bash + mkdir build + cd build + ``` + + If you are compiling for the Intel® PAC with Intel Arria® 10 GX FPGA, run `cmake` using the command: + + ```bash + cmake .. + ``` + + Alternatively, to compile for the Intel® FPGA PAC D5005 (with Intel Stratix® 10 SX), run `cmake` using the command: + + ```bash + cmake .. -DFPGA_BOARD=intel_s10sx_pac:pac_s10 + ``` + You can also compile for a custom FPGA platform. Ensure that the board support package is installed on your system. Then run `cmake` using the command: + ```bash + cmake .. -DFPGA_BOARD=: + ``` + +2. Compile the design using the generated `Makefile`. The following four build targets are provided that match the recommended development flow: + + * Compile and run for emulation (fast compile time, targets emulates an FPGA device) using: + + ```bash + make fpga_emu + ``` + + * Generate HTML optimization reports using: + + ```bash + make report + ``` + + * Compile and run on FPGA hardware (longer compile time, targets an FPGA device) using: + + ```bash + make fpga + ``` + +3. (Optional) As the above hardware compile may take several hours to complete, FPGA precompiled binaries (compatible with Linux* Ubuntu* 18.04) can be downloaded here. + +### On a Windows* System + +1. Generate the `Makefile` by running `cmake`. + ``` + mkdir build + cd build + ``` + To compile for the Intel® PAC with Intel Arria® 10 GX FPGA, run `cmake` using the command: + ``` + cmake -G "NMake Makefiles" .. + ``` + Alternatively, to compile for the Intel® FPGA PAC D5005 (with Intel Stratix® 10 SX), run `cmake` using the command: + + ``` + cmake -G "NMake Makefiles" .. -DFPGA_BOARD=intel_s10sx_pac:pac_s10 + ``` + You can also compile for a custom FPGA platform. Ensure that the board support package is installed on your system. Then run `cmake` using the command: + ``` + cmake -G "NMake Makefiles" .. -DFPGA_BOARD=: + ``` + +2. Compile the design through the generated `Makefile`. The following build targets are provided, matching the recommended development flow: + + * Compile for emulation (fast compile time, targets emulated FPGA device): + ``` + nmake fpga_emu + ``` + * Generate the optimization report: + ``` + nmake report + ``` + * Compile for FPGA hardware (longer compile time, targets FPGA device): + ``` + nmake fpga + ``` + +*Note:* The Intel® PAC with Intel Arria® 10 GX FPGA and Intel® FPGA PAC D5005 (with Intel Stratix® 10 SX) do not support Windows*. Compiling to FPGA hardware on Windows* requires a third-party or custom Board Support Package (BSP) with Windows* support. + +### In Third-Party Integrated Development Environments (IDEs) + +You can compile and run this tutorial in the Eclipse* IDE (in Linux*) and the Visual Studio* IDE (in Windows*). +For instructions, refer to the following link: [Intel® oneAPI DPC++ FPGA Workflows on Third-Party IDEs](https://software.intel.com/en-us/articles/intel-oneapi-dpcpp-fpga-workflow-on-ide) + +## Examining the Reports + +Locate the pair of `report.html` files in either: + +* **Report-only compile**: `ac_int_report.prj` +* **FPGA hardware compile**: `ac_int.prj` + +Navigate to the *System Viewer* report (*Views* > *System Viewer*) and step through the clusters generated for `ShiftLeft` by clicking on the cluster entires on the left hand side pane under `ShiftLeft` until you find the one that contains the left shift node (`<<`). Similarly locate the cluster containing the left shift node for `EfficientShiftLeft`. Observe that the compiler needs to generate extra logic to deal with the signedness of the b operand for the `ShiftLeft` kernel and hence generates more hardware than for the `EfficientShiftLeft` kernel. + +## Running the Sample + +1. Run the sample on the FPGA emulator (the kernel executes on the CPU): + + ```bash + ./ac_int.fpga_emu # Linux + ac_int.fpga_emu.exe # Windows + ``` + +2. Run the sample on the FPGA device + + ```bash + ./ac_int.fpga # Linux + ``` + +### Example of Output + +```txt +Arithmetic Operations: +ac_int: +1383 + +966 = +2349 +int: 1383 + 966 = 2349 +ac_int: +6249 * +966 = +6036534 +int: 6249 * 966 = 6036534 +ac_int: +2163 / +43 = +50 +int: 2163 / 43 = 50 + +Bitwise Operations: +ac_int: +7423 << +2 = -3076 +int: 7423 << 2 = -3076 +ac_int: +6380 << 1 = -3624 +int: 6380 << 1 = -3624 +(+7373).slc<4>(5) = 6 +Running these two ops on +7373 + (+7373).set_slc(6, 10) = +7808 + a[3] = 0; a[2] = 0; a[1] = 0; a[0] = 0; + Result = +7808 +PASSED +``` + +### Discussion of Results + +While using ac_ints we can minimize the hardware generated and achieve the same numerical result as standard integer types. This can be very useful when the logic does not need to utilize all of the bits provided by the standard integer type. diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.sln b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.sln new file mode 100755 index 0000000000..6ad4ad3928 --- /dev/null +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.705 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ac_int", "ac_int.vcxproj", "{73FCAD5C-4C93-4786-B662-A7273C515E22}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {73FCAD5C-4C93-4786-B662-A7273C515E22}.Debug|x64.ActiveCfg = Debug|x64 + {73FCAD5C-4C93-4786-B662-A7273C515E22}.Debug|x64.Build.0 = Debug|x64 + {73FCAD5C-4C93-4786-B662-A7273C515E22}.Release|x64.ActiveCfg = Release|x64 + {73FCAD5C-4C93-4786-B662-A7273C515E22}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DE911CD1-4F98-4391-BD43-B02212357F5E} + EndGlobalSection +EndGlobal diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.vcxproj b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.vcxproj new file mode 100755 index 0000000000..e5afaf4f34 --- /dev/null +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.vcxproj @@ -0,0 +1,160 @@ + + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + 15.0 + {73fcad5c-4c93-4786-b662-a7273c515e22} + Win32Proj + ac_int + $(WindowsSDKVersion.Replace("\","")) + + + + Application + true + Intel(R) oneAPI DPC++ Compiler + Unicode + + + Application + false + Intel(R) oneAPI DPC++ Compiler + true + Unicode + + + Application + true + Intel(R) oneAPI DPC++ Compiler + Unicode + + + Application + false + Intel(R) oneAPI DPC++ Compiler + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Use + Level3 + Disabled + true + true + pch.h + $(ONEAPI_ROOT)dev-utilities\latest\include + + + Console + true + + + + + Use + Level3 + Disabled + true + true + pch.h + true + -DFPGA_EMULATOR %(AdditionalOptions) + $(IntDir)ac_int.obj + $(ONEAPI_ROOT)dev-utilities\latest\include + + + Console + true + + + + + Use + Level3 + MaxSpeed + true + true + true + true + pch.h + $(ONEAPI_ROOT)dev-utilities\latest\include + + + Console + true + true + true + + + + + Use + Level3 + MaxSpeed + true + true + true + true + pch.h + true + -DFPGA_EMULATOR %(AdditionalOptions) + $(IntDir)ac_int.obj + $(ONEAPI_ROOT)dev-utilities\latest\include + + + Console + true + true + true + + + + + + diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/sample.json b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/sample.json new file mode 100755 index 0000000000..35e8bda2de --- /dev/null +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/sample.json @@ -0,0 +1,55 @@ +{ + "guid": "D661A5C2-5FE0-40F2-BFE7-70E3BA60F088", + "name": "AC Int", + "categories": ["Toolkit/oneAPI Direct Programming/DPC++ FPGA/Tutorials/Features"], + "description": "An Intel® FPGA tutorial demonstrating how to use the Algorithmic C Integer (AC Int) ", + "toolchain": ["dpcpp"], + "os": ["linux", "windows"], + "targetDevice": ["FPGA"], + "builder": ["ide", "cmake"], + "languages": [{"cpp":{}}], + "ciTests": { + "linux": [ + { + "id": "fpga_emu", + "steps": [ + "mkdir build", + "cd build", + "cmake ..", + "make fpga_emu", + "./ac_int.fpga_emu" + ] + }, + { + "id": "report", + "steps": [ + "mkdir build", + "cd build", + "cmake ..", + "make report" + ] + } + ], + "windows": [ + { + "id": "fpga_emu", + "steps": [ + "mkdir build", + "cd build", + "cmake -G \"NMake Makefiles\" ..", + "nmake fpga_emu", + "ac_int.fpga_emu.exe" + ] + }, + { + "id": "report", + "steps": [ + "mkdir build", + "cd build", + "cmake -G \"NMake Makefiles\" ..", + "nmake report" + ] + } + ] + } +} diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt new file mode 100755 index 0000000000..1b11ed6954 --- /dev/null +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt @@ -0,0 +1,89 @@ +# To see a Makefile equivalent of this build system: +# https://github.com/oneapi-src/oneAPI-samples/blob/master/DirectProgramming/DPC++/ProjectTemplates/makefile-fpga + +set(SOURCE_FILE ac_int.cpp) +set(TARGET_NAME ac_int) +set(TARGET_NAME_REG ac_int_registered) +set(EMULATOR_TARGET ${TARGET_NAME}.fpga_emu) +set(FPGA_TARGET ${TARGET_NAME}.fpga) +set(FPGA_TARGET_REG ${TARGET_NAME_REG}.fpga) + +# FPGA board selection +if(NOT DEFINED FPGA_BOARD) + set(FPGA_BOARD "intel_a10gx_pac:pac_a10") + message(STATUS "FPGA_BOARD was not specified.\ + \nConfiguring the design to run on the default FPGA board ${FPGA_BOARD} (Intel(R) PAC with Intel Arria(R) 10 GX FPGA). \ + \nPlease refer to the README for information on board selection.") +else() + message(STATUS "Configuring the design to run on FPGA board ${FPGA_BOARD}") +endif() + +# These are Windows-specific flags: +# 1. /EHsc This is a Windows-specific flag that enables exception handling in host code +# 2. /Qactypes Include ac_types headers and link against ac_types emulation libraries +if(WIN32) + set(WIN_FLAG "/EHsc") + set(AC_TYPES_FLAG "/Qactypes") +else() + set(AC_TYPES_FLAG "-qactypes") +endif() + +# A DPC++ ahead-of-time (AoT) compile processes the device code in two stages. +# 1. The "compile" stage compiles the device code to an intermediate representation (SPIR-V). +# 2. The "link" stage invokes the compiler's FPGA backend before linking. +# For this reason, FPGA backend flags must be passed as link flags in CMake. +set(EMULATOR_COMPILE_FLAGS "${WIN_FLAG} -fintelfpga ${AC_TYPES_FLAG} -DFPGA_EMULATOR") +set(EMULATOR_LINK_FLAGS "-fintelfpga ${AC_TYPES_FLAG}") +set(HARDWARE_COMPILE_FLAGS "${WIN_FLAG} -fintelfpga ${AC_TYPES_FLAG}") +set(HARDWARE_LINK_FLAGS "-fintelfpga ${AC_TYPES_FLAG} -Xshardware -Xsboard=${FPGA_BOARD} ${USER_HARDWARE_FLAGS}") +# use cmake -D USER_HARDWARE_FLAGS= to set extra flags for FPGA backend compilation + +############################################################################### +### FPGA Emulator +############################################################################### +# To compile in a single command: +# dpcpp -fintelfpga ${AC_TYPES_FLAG} -DFPGA_EMULATOR fpga_compile.cpp -o fpga_compile.fpga_emu +# CMake executes: +# [compile] dpcpp -fintelfpga ${AC_TYPES_FLAG} -DFPGA_EMULATOR -o fpga_compile.cpp.o -c fpga_compile.cpp +# [link] dpcpp -fintelfpga ${AC_TYPES_FLAG} fpga_compile.cpp.o -o fpga_compile.fpga_emu +add_executable(${EMULATOR_TARGET} ${SOURCE_FILE}) +set_target_properties(${EMULATOR_TARGET} PROPERTIES COMPILE_FLAGS "${EMULATOR_COMPILE_FLAGS}") +set_target_properties(${EMULATOR_TARGET} PROPERTIES LINK_FLAGS "${EMULATOR_LINK_FLAGS}") +add_custom_target(fpga_emu DEPENDS ${EMULATOR_TARGET}) + +############################################################################### +### Generate Report +############################################################################### +# To compile manually: +# dpcpp -fintelfpga ${AC_TYPES_FLAG} -Xshardware -Xsboard= -fsycl-link=early ac_int.cpp -o ac_int_report.a +set(FPGA_EARLY_IMAGE ${TARGET_NAME}_report.a) +set(FPGA_EARLY_IMAGE_REG ${TARGET_NAME_REG}_report.a) +# The compile output is not an executable, but an intermediate compilation result unique to DPC++. +add_executable(${FPGA_EARLY_IMAGE} ${SOURCE_FILE}) +add_executable(${FPGA_EARLY_IMAGE_REG} ${SOURCE_FILE}) +add_custom_target(report DEPENDS ${FPGA_EARLY_IMAGE} ${FPGA_EARLY_IMAGE_REG}) +set_target_properties(${FPGA_EARLY_IMAGE} PROPERTIES COMPILE_FLAGS "${HARDWARE_COMPILE_FLAGS}") +set_target_properties(${FPGA_EARLY_IMAGE} PROPERTIES LINK_FLAGS "${HARDWARE_LINK_FLAGS} -fsycl-link=early") + +set_target_properties(${FPGA_EARLY_IMAGE_REG} PROPERTIES COMPILE_FLAGS "${HARDWARE_COMPILE_FLAGS} -DUSE_ac_int") +set_target_properties(${FPGA_EARLY_IMAGE_REG} PROPERTIES LINK_FLAGS "${HARDWARE_LINK_FLAGS} -fsycl-link=early") +# fsycl-link=early stops the compiler after RTL generation, before invoking Quartus® + +############################################################################### +### FPGA Hardware +############################################################################### +# To compile in a single command: +# dpcpp -fintelfpga ${AC_TYPES_FLAG} -Xshardware -Xsboard= ac_int.cpp -o ac_int.fpga +# CMake executes: +# [compile] dpcpp -fintelfpga ${AC_TYPES_FLAG} -o ac_int.cpp.o -c ac_int.cpp +# [link] dpcpp -fintelfpga ${AC_TYPES_FLAG} -Xshardware -Xsboard= ac_int.cpp.o -o ac_int.fpga +add_executable(${FPGA_TARGET} EXCLUDE_FROM_ALL ${SOURCE_FILE}) +add_executable(${FPGA_TARGET_REG} EXCLUDE_FROM_ALL ${SOURCE_FILE}) +add_custom_target(fpga DEPENDS ${FPGA_TARGET} ${FPGA_TARGET_REG}) +set_target_properties(${FPGA_TARGET} PROPERTIES COMPILE_FLAGS "${HARDWARE_COMPILE_FLAGS}") +set_target_properties(${FPGA_TARGET} PROPERTIES LINK_FLAGS "${HARDWARE_LINK_FLAGS} -reuse-exe=${CMAKE_BINARY_DIR}/${FPGA_TARGET}") +# The -reuse-exe flag enables rapid recompilation of host-only code changes. +# See DPC++FPGA/GettingStarted/fast_recompile for details. +set_target_properties(${FPGA_TARGET_REG} PROPERTIES COMPILE_FLAGS "${HARDWARE_COMPILE_FLAGS} -DUSE_ac_int") +set_target_properties(${FPGA_TARGET_REG} PROPERTIES LINK_FLAGS "${HARDWARE_LINK_FLAGS} -reuse-exe=${CMAKE_BINARY_DIR}/${FPGA_TARGET_REG}") + diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp new file mode 100644 index 0000000000..d21b904108 --- /dev/null +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp @@ -0,0 +1,331 @@ +//============================================================== +// Copyright Intel Corporation +// +// SPDX-License-Identifier: MIT +// ============================================================= +// clang format-off +#include +#include +#include +// clang format-on + +// dpc_common.hpp can be found in the dev-utilities include folder. +// e.g., $ONEAPI_ROOT/dev-utilities//include/dpc_common.hpp +#include "dpc_common.hpp" + +using namespace sycl; +using namespace std; + +// Forward declare the kernel name in the global scope. +// This FPGA best practice reduces name mangling in the optimization reports. +class Add; +class Div; +class Mult; +class ShiftLeft; +class EfficientShiftLeft; +class GetBitSlice; +class SetBitSlice; + +using ac_int4 = ac_intN::int4; +using ac_int14 = ac_intN::int14; +using ac_int15 = ac_intN::int15; +using ac_int28 = ac_intN::int28; +using ac_uint4 = ac_intN::uint4; + +void TestAdd(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int15 &c) { + buffer inp1(&a, 1); + buffer inp2(&b, 1); + buffer result(&c, 1); + + q.submit([&](handler &h) { + accessor x{inp1, h, read_only}; + accessor y{inp2, h, read_only}; + accessor res{result, h, write_only}; + h.single_task([=] { res[0] = x[0] + y[0]; }); + }); + q.wait(); +} + +void TestDiv(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int15 &c) { + buffer inp1(&a, 1); + buffer inp2(&b, 1); + buffer result(&c, 1); + + q.submit([&](handler &h) { + accessor x{inp1, h, read_only}; + accessor y{inp2, h, read_only}; + accessor res{result, h, write_only}; + h.single_task
([=] { res[0] = x[0] / y[0]; }); + }); + q.wait(); +} + +void TestMult(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int28 &c) { + buffer inp1(&a, 1); + buffer inp2(&b, 1); + buffer result(&c, 1); + + q.submit([&](handler &h) { + accessor x{inp1, h, read_only}; + accessor y{inp2, h, read_only}; + accessor res{result, h, write_only}; + h.single_task([=] { res[0] = x[0] * y[0]; }); + }); + q.wait(); +} + +void TestShiftLeft(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int14 &c) { + buffer inp1(&a, 1); + buffer inp2(&b, 1); + buffer result(&c, 1); + + q.submit([&](handler &h) { + accessor x{inp1, h, read_only}; + accessor y{inp2, h, read_only}; + accessor res{result, h, write_only}; + h.single_task([=] { res[0] = x[0] << y[0]; }); + }); + q.wait(); +} + +// Note how the shift amount is specified with a smaller ac_int than in +// TestShiftLeft above +void TestEfficientShiftLeft(queue &q, const ac_int14 &a, const ac_uint4 &b, + ac_int14 &c) { + buffer inp1(&a, 1); + buffer inp2(&b, 1); + buffer result(&c, 1); + + q.submit([&](handler &h) { + accessor x{inp1, h, read_only}; + accessor y{inp2, h, read_only}; + accessor res{result, h, write_only}; + h.single_task([=] { res[0] = x[0] << y[0]; }); + }); + q.wait(); +} + +// The method +// x = y.slc(n) +// is equivalent to the VHDL behavior of +// x := y((M+n-1) downto n); +// Note that only static bit widths are supported +void TestGetBitSlice(queue &q, const ac_int14 &a, ac_uint4 &b, const int lsb) { + buffer inp1(&a, 1); + buffer inp2(&lsb, 1); + buffer result(&b, 1); + + q.submit([&](handler &h) { + accessor x{inp1, h, read_only}; + accessor y{inp2, h, read_only}; + accessor res{result, h, write_only}; + h.single_task([=] { res[0] = x[0].template slc<4>(y[0]); }); + }); + q.wait(); +} + +// There is a set_slc(int lsb, const ac_int &slc) which allows the user to +// set a bit slice as shown in the example below. +void TestSetBitSlice(queue &q, ac_int14 &a, const ac_int4 &b, int lsb) { + buffer inp1(&a, 1); + buffer inp2(&b, 1); + buffer inp3(&lsb, 1); + + q.submit([&](handler &h) { + accessor x{inp1, h, read_write}; + accessor y{inp2, h, read_only}; + accessor lsb_accessor{inp3, h, read_only}; + + h.single_task([=] { + // The set_slc method does not need to have a width specified as a + // template argument since the width is inferred from the width of the + // argument x + x[0].template set_slc(lsb_accessor[0], y[0]); + + // Bits can also be individually set as follows: + x[0][3] = 0; + x[0][2] = 0; + x[0][1] = 0; + x[0][0] = 0; + }); + }); + q.wait(); +} + +int main() { +#if defined(FPGA_EMULATOR) + ext::intel::fpga_emulator_selector selector; +#else + ext::intel::fpga_selector selector; +#endif + + // create the SYCL device queue + queue q(selector, dpc_common::exception_handler); + + bool passed = true; + // Initialize two random ints + int t1 = rand(); + int t2 = rand(); + // Truncate each of the two ints to 13 bits. The 14th bit is the sign bit. + // In this testbench, even though the datatypes are signed, we will be + // storing unsigned values to make the testing process simpler. + t1 &= (1 << 13) - 1; + t2 &= (1 << 13) - 1; + + std::cout << "Arithmetic Operations:\n"; + // Test adder + { + // ac_int offers type casting from and to native datatypes + ac_int14 a = t1; + ac_int14 b = t2; + ac_int15 c; + TestAdd(q, a, b, c); + int c_golden = t1 + t2; + // We can check the result of the ac_int addition with the native C int + // addition + if (c != c_golden) { + passed = false; + std::cout << "Addition failed\n"; + } + std::cout << "ac_int: " << a << " + " << b << " = " << c << "\n"; + std::cout << "int: " << t1 << " + " << t2 << " = " << c_golden << "\n"; + } + + // Test multiplier + { + t1 = rand() & ((1 << 13) - 1); + ac_int14 a = t1; + ac_int14 b = t2; + ac_int28 c; + TestMult(q, a, b, c); + int c_golden = t1 * t2; + // We can check the result of the ac_int multiplication with the native C + // int multiplication + if (c != c_golden) { + passed = false; + std::cout << "Multiplier failed\n"; + } + std::cout << "ac_int: " << a << " * " << b << " = " << c << "\n"; + std::cout << "int: " << t1 << " * " << t2 << " = " << c_golden << "\n"; + } + + // Test divider + { + t1 = rand() & ((1 << 13) - 1); + t2 = rand() % 50; // Use a small value for the divisor so that the result + // is not 0 or 1 + ac_int14 a = t1; + ac_int14 b = t2; + ac_int15 c; + TestDiv(q, a, b, c); + int c_golden = t1 / t2; + // We can check the result of the ac_int division with the native C + // int division + if (c != c_golden) { + passed = false; + std::cout << "divider failed\n"; + } + std::cout << "ac_int: " << a << " / " << b << " = " << c << "\n"; + std::cout << "int: " << t1 << " / " << t2 << " = " << c_golden << "\n"; + } + + std::cout << "\nBitwise Operations:\n"; + // Shift operator + { + t1 = rand() & ((1 << 13) - 1); + t2 = rand() % 8; // Use a small value for the shift + ac_int14 a = t1; + ac_int14 b = t2; + ac_int14 c; + // b can be positive or negative. If (b > 0), a will be shifted to the + // left. Else, a will be shifted to the right + TestShiftLeft(q, a, b, c); + + // Note that the left shift in ac_int is logical so to check the result, + // we need to do a little bit manipulation to get the correct signed value + int c_golden = (t1 << t2) & ((1 << 14) - 1); + if ((t1 << t2) & (1 << 13)) + c_golden |= (~((1 << 14) - 1)); + if (c != c_golden) { + passed = false; + std::cout << "left_shift failed\n"; + } + std::cout << "ac_int: " << a << " << " << b << " = " << c << "\n"; + std::cout << "int: " << t1 << " << " << t2 << " = " << c_golden << "\n"; + } + + // Efficient left shift operator + { + t1 = rand() & ((1 << 13) - 1); + t2 = rand() % 14; // Use a small value for the shift + ac_int14 a = t1; + ac_uint4 b = t2; + ac_int14 c; + // b is always positive in this case. This shift is more efficient in HW + // than the one above. If the direction of the shift is known at compile + // time, this is recommended. Note that the two datatypes need not be the + // same. Note that the datatype of b here is just 4 bits since 4 bits can + // completely contain the value of the full width of a. This will generate + // a more efficient datapath. + TestEfficientShiftLeft(q, a, b, c); + + // Note that the left shift in ac_int is logical so to check the result, + // we need to do a little bit manipulation to get the correct signed value + int c_golden = (t1 << t2) & ((1 << 14) - 1); + if ((t1 << t2) & (1 << 13)) + c_golden |= (~((1 << 14) - 1)); + if (c != c_golden) { + passed = false; + std::cout << "efficient_left_shift failed\n"; + } + std::cout << "ac_int: " << a << " << " << b << " = " << c << "\n"; + std::cout << "int: " << t1 << " << " << t2 << " = " << c_golden << "\n"; + } + + // Slice operations + { + t1 = rand() & ((1 << 13) - 1); + ac_int14 a = t1; + ac_uint4 b; + TestGetBitSlice(q, a, b, 5); + + // Replicate the same operation using bitwise operation + t2 = (t1 >> 5) & 0xF; + // Compare the CPU result with the FPGA result + if (b != t2) { + passed = false; + std::cout << "GetBitSlice failed\n"; + } + std::cout << "(" << a << ").slc<4>(5) = " << b << "\n"; + + int t2 = 10; + ac_uint4 d = t2; + ac_int14 c = a; + // Sets the bits (3, 2, 1, 0) as 0 and sets bits (9, 8, 7, 6) with d + TestSetBitSlice(q, c, d, 6); + + // Replicate the same operation using bitwise operation + int mask = -1; + mask ^= (0xF << 6) | (0xF); + int mask2 = (t2 << 6); + int t3 = (t1 & mask) | mask2; + // Compare the CPU result with the FPGA result + if (c != t3) { + passed = false; + std::cout << "SetBitSlice failed\n"; + } + std::cout << "Running these two ops on " << a << "\n"; + std::cout << "\t(" << a << ").set_slc(6, " << d << ") = " << c << "\n"; + std::cout << "\ta[3] = 0; a[2] = 0; a[1] = 0; a[0] = 0;\n"; + std::cout << "\tResult = " << c << "\n"; + } + + if (passed) { + std::cout << "PASSED\n"; + } else { + std::cout << "FAILED\n"; + return 1; + } + + return 0; +} diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.hpp b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.hpp new file mode 100644 index 0000000000..26044057a7 --- /dev/null +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.hpp @@ -0,0 +1,2509 @@ +//===----------------------------------------------------------------------===// +// Algorithmic C (tm) Datatypes +// +// Software Version: 3.7 +// +// Release Date : Wed Jun 1 13:21:52 PDT 2016 +// Release Type : Production Release +// Release Build : 3.7.0 +// +// Copyright 2004-2016, Mentor Graphics Corporation, +// +// All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// This file was modified by the Intel High Level Design team to +// generate efficient hardware for the Intel High Level Synthesis +// compiler. The API remains the same as defined by Mentor Graphics +// in their documentation for the ac_int data-type. +// +// Source: ac_int.hpp +// Description: fast arbitrary-length bit-accurate integer types: +// - unsigned integer of length W: ac_int +// - signed integer of length W: ac_int +// Original Author: Andres Takach, Ph.D. +// Modified by: Vince Bridgers, Thor Thayer, Ajaykumar Kannan +// +// Notes: +// - Most frequent migration issues: +// - need to cast to common type when using question mark operator: +// (a < 0) ? -a : a; // a is ac_int +// change to: +// (a < 0) ? -a : (ac_int) a; +// or +// (a < 0) ? (ac_int) -a : (ac_int) a; +// +// - left shift is not arithmetic ("a< b = a << 1; // a is ac_int +// is not equivalent to b=2*a. In order to get 2*a behavior change to: +// ac_int b = (ac_int)a << 1; +// +// - only static length read/write slices are supported: +// - read: x.slc<4>(k) => +// returns ac_int for 4-bit slice x(4+k-1 DOWNTO k) +// - write: x.set_slc(k,y) = writes bits of y to x starting at index k + +#pragma once + +#define AC_VERSION 3 +#define AC_VERSION_MINOR 7 + +#ifndef __cplusplus +#error C++ is required to include this header file +#endif + +#if __cplusplus < 201402L +#error The C++14 standard or newer is required to include this header file +#endif + +// for safety +#if (defined(W) || defined(I) || defined(S) || defined(W2) || defined(I2) || \ + defined(S2)) +#error One or more of the following is defined: W, I, S, W2, I2, S2. Definition conflicts with their usage as template parameters. +#error DO NOT use defines before including third party header files. +#endif + +#if (defined(true) || defined(false)) +#error One or more of the following is defined: true, false. They are keywords in C++ of type bool. Defining them as 1 and 0, may result in subtle compilation problems. +#error DO NOT use defines before including third party header files. +#endif + +// The macro defined in this block will be used to selectively enable code that +// is meant for the following compile flows: +// 1. Any flow that doesn't set __SYCL_DEVICE_ONLY__ , example: host code +// compilation when compiling the kernels for any offload device. +// 2. FPGA emulation compile flow. +// 3. Intel HLS Compiler's x86 compile flow. +#if defined(HLS_X86) || \ + (defined(__SYCL_COMPILER_VERSION) && \ + (!defined(__SYCL_DEVICE_ONLY__) || defined(FPGA_EMULATOR))) +#define __EMULATION_FLOW__ +#endif + +#if !defined(_HLS_EMBEDDED_PROFILE) +#ifndef __ASSERT_H__ +#define __ASSERT_H__ +#include +#endif +#include +#include +#include +#include +#include + +#else +#undef DEBUG_AC_INT_ERROR +#undef DEBUG_AC_INT_WARNING +#endif //_HLS_EMBEDDED_PROFILE + +#if !defined(__SYCL_COMPILER_VERSION) +#include +#endif + +// Warn if ac_int debugging flag set in sim/FPGA flows +#if (defined(DEBUG_AC_INT_ERROR) || defined(DEBUG_AC_INT_WARNING)) && defined(__EMULATION_FLOW__) +#define DEBUG_AC_INT +#if !defined(HLS_X86) +#pragma message( \ + "using ac_int debug macros (DEBUG_AC_INT_WARNING/DEBUG_AC_INT_ERROR) may result in performance degradation when compiling for FPGA.") +#endif // HLS_X86 +#endif // DEBUG_AC_INT_ERROR || DEBUG_AC_INT_WARNING + +#ifdef __AC_NAMESPACE +namespace __AC_NAMESPACE { +#endif + +#define AC_MAX(a, b) ((a) > (b) ? (a) : (b)) +#define AC_MIN(a, b) ((a) < (b) ? (a) : (b)) +#define AC_ABS(a) ((a) < 0 ? (-a) : (a)) + +#if defined(_MSC_VER) +typedef unsigned __int64 Ulong; +typedef signed __int64 Slong; +#else +typedef unsigned long long Ulong; +typedef signed long long Slong; +#endif + +enum ac_base_mode { AC_BIN = 2, AC_OCT = 8, AC_DEC = 10, AC_HEX = 16 }; +enum ac_special_val { + AC_VAL_DC, + AC_VAL_0, + AC_VAL_MIN, + AC_VAL_MAX, + AC_VAL_QUANTUM +}; + +static bool warned_undef = false; + +template class ac_int; + +namespace ac_private { + +template using ap_int = _ExtInt(Bits); +template using ap_uint = unsigned _ExtInt(Bits); + +enum { long_w = sizeof(unsigned long) * 8 }; + +// PRIVATE FUNCTIONS in namespace: for implementing ac_int/ac_fixed + +#ifdef __SYCL_COMPILER_VERSION +inline double mgc_floor(double d) { return cl::sycl::floor(d); } +#else +inline double mgc_floor(double d) { return floor(d); } +#endif + +#ifdef _HLS_EMBEDDED_PROFILE +#define AC_ASSERT(cond, msg) +#else +#define AC_ASSERT(cond, msg) \ + { \ + if (!(cond)) { \ + ac_private::ac_assert(cond, __FILE__, __LINE__, msg); \ + } \ + } +inline void ac_assert(bool condition, const char *file = 0, int line = 0, + const char *msg = 0) { +#ifdef HLS_X86 +#ifndef AC_USER_DEFINED_ASSERT + if (!condition) { + std::cerr << "Assert"; + if (file) + std::cerr << " in file " << file << ":" << line; + if (msg) + std::cerr << " " << msg; + std::cerr << std::endl; + assert(0); + } +#else + AC_USER_DEFINED_ASSERT(condition, file, line, msg); +#endif // AC_USER_DEFINED_ASSERT +#endif // HLS_X86 +} +#endif //_HLS_EMBEDDED_PROFILE + +// helper structs for statically computing log2 like functions (nbits, +// log2_floor, log2_ceil) using recursive templates +template struct s_N { + template struct s_X { + enum { + X2 = X >> N, + N_div_2 = N >> 1, + nbits = X ? (X2 ? N + (int)s_N::template s_X::nbits + : (int)s_N::template s_X::nbits) + : 0 + }; + }; +}; +template <> struct s_N<0> { + template struct s_X { + enum { nbits = !!X }; + }; +}; + +template inline double ldexpr32(double d) { + double d2 = d; + if (N < 0) + for (int i = 0; i < -N; i++) + d2 /= (Ulong)1 << 32; + else + for (int i = 0; i < N; i++) + d2 *= (Ulong)1 << 32; + return d2; +} +template <> inline double ldexpr32<0>(double d) { return d; } +template <> inline double ldexpr32<1>(double d) { return d * ((Ulong)1 << 32); } +template <> inline double ldexpr32<-1>(double d) { + return d / ((Ulong)1 << 32); +} +template <> inline double ldexpr32<2>(double d) { + return (d * ((Ulong)1 << 32)) * ((Ulong)1 << 32); +} +template <> inline double ldexpr32<-2>(double d) { + return (d / ((Ulong)1 << 32)) / ((Ulong)1 << 32); +} + +template inline double ldexpr(double d) { + return ldexpr32(N < 0 ? d / ((unsigned)1 << (-N & 31)) + : d * ((unsigned)1 << (N & 31))); +} + +template inline double ldexpr1(double d) { + return N < 0 ? d / ((unsigned)1 << (-N)) : d * ((unsigned)1 << (N)); +} + +// Xn-1, Xn-2, Xn-3, Xn-4, ...X(I+W-1)..XI.., X2, X1, X0 +// Returns ap_uint using: |---------| bits from value. +template constexpr ap_uint bit_slc(ap_uint value) { + static_assert(N >= W, ""); + constexpr int shift_v = AC_MIN(I, N - 1); + ap_uint op = (value >> (shift_v)); + ap_uint r = op; + return r; +} + +// Xn-1, Xn-2, Xn-3, Xn-4, ...X(I+W-1)..XI.., X2, X1, X0 +// Returns ap_int using: |---------| bits from value. +template constexpr ap_int bit_slc(ap_int value) { + ap_uint v = value; + return (ap_uint)(bit_slc(v)); +} + +template constexpr bool ap_less_zero(ap_uint) { return false; } + +template constexpr bool ap_less_zero(ap_int value) { + return value < static_cast>(0); +} + +// if bits [0, B-1] all 0s +template constexpr bool ap_equal_zeros_to(ap_uint value) { + ap_uint v = bit_slc(value); + return v == static_cast>(0); +} + +template constexpr bool ap_equal_zeros_to(ap_int value) { + ap_uint v = value; + return ap_equal_zeros_to(v); +} + +// Returns true if value == 0 +template constexpr bool ap_equal_zeros_to(ap_uint value) { + return ap_equal_zeros_to(value); +} + +// Returns true if value == 0 +template constexpr bool ap_equal_zeros_to(ap_int value) { + return ap_equal_zeros_to(value); +} + +// if bits [0, B-1] all 0s +template constexpr bool ap_equal_ones_to(ap_uint value) { + static_assert(N >= B, ""); + if (!B) + return true; + constexpr int B1 = AC_MAX(B, 1); + ap_uint v = bit_slc(value); + return (~v) == static_cast>(0); +} + +template constexpr bool ap_equal_ones_to(ap_int value) { + ap_uint v = value; + return ap_equal_ones_to(v); +} + +// if bits [B, N-1] are all ones +template constexpr bool ap_equal_zeros_from(ap_uint value) { + constexpr int L = AC_MAX(N - B, 1); + ap_uint v = bit_slc(value); + return v == static_cast>(0); +} + +template constexpr bool ap_equal_zeros_from(ap_int value) { + ap_uint v = value; + return ap_equal_zeros_from(v); +} + +template constexpr bool ap_equal_ones_from(ap_uint value) { + constexpr int L = AC_MAX(N - B, 1); + ap_uint v = bit_slc(value); + return (~v) == static_cast>(0); +} + +template constexpr bool ap_equal_ones_from(ap_int value) { + ap_uint v = value; + return ap_equal_ones_from(v); +} + +// Build an ap_int from double d, value is d * 2 ^ N +// Notice: in ref, it's d * 2 ^ (32 * N) +template +inline void ap_conv_from_fraction(double d, ap_int &r, bool *qb, bool *rbits, + bool *o, int *io) { + bool b = d < 0; + double d2 = b ? -d : d; + double dfloor = mgc_floor(d2); + *o = dfloor != 0.0; + d2 = d2 - dfloor; + const int shift_amount = N + 1; + const int container_length = (shift_amount + 31) / 32 * 32 + 1; + ap_int tb; + ap_uint k1; + const Ulong u64_1 = 1; + // for performance purpose, manually unroll the loop when shift_amount <= 64 + if (shift_amount <= 32) { + d2 *= u64_1 << shift_amount; + k1 = (unsigned int)mgc_floor(d2); + tb = b ? ~k1 : k1; + d2 = static_cast>(d2) - k1; + } else if (shift_amount <= 64) { + d2 *= u64_1 << 32; + unsigned int temp = (unsigned int)mgc_floor(d2); + k1 = temp; + d2 -= temp; + const int shift_next = AC_MAX(shift_amount - 32, 0); + d2 *= u64_1 << shift_next; + temp = (unsigned int)mgc_floor(d2); + k1 <<= shift_next; + k1 = k1 | static_cast>(temp); + d2 -= temp; + tb = b ? ~k1 : k1; + } else { + k1 = static_cast>(0); + int to_shift = shift_amount; + unsigned int temp; + while (to_shift >= 32) { + to_shift -= 32; + d2 *= u64_1 << 32; + temp = (unsigned int)mgc_floor(d2); + k1 <<= 32; + k1 = k1 | static_cast>(temp); + d2 -= temp; + } + const int shift_next = AC_MAX(to_shift % 32, 0); + d2 *= u64_1 << shift_next; + temp = (unsigned int)mgc_floor(d2); + k1 <<= shift_next; + k1 = k1 | static_cast>(temp); + d2 -= temp; + tb = b ? ~k1 : k1; + } + + r = tb; + d2 *= 2; + bool k = (int(d2)) != 0; + d2 -= k ? 1.0 : 0.0; + *rbits = d2 != 0.0; + *qb = (b && *rbits) ^ k; + if (b && !*rbits && !*qb) { + r += static_cast>(1); + } + *io = 0; + bool cond1 = !ap_equal_zeros_from(k1); + if (!S) { + if (b) + *io = -1; + else if (cond1) + *io = 1; + } else { + // | | N - 1 bits digi_bits + // |Sbit| + // cond1: not 0|X |.........: inner overflow + // cond2 0|1 |000000000: not inner overflow, *io = -2 + // cond3: 0|1 |not all 0: inner overflow + if (b) { + bool sign_bit = bit_slc<1, N - 1>(k1); + bool digi_bits_zero = ap_equal_zeros_to(k1); + if (cond1) + *io = -1; // cond1 + else if (sign_bit) { + if (digi_bits_zero) + *io = -2; // cond2 + else + *io = -1; // cond3 + } + } else { + if (!ap_equal_zeros_from(k1)) + *io = 1; + } + } + *o |= b ^ ((tb < static_cast>(0)) && S); +} +template +inline void ap_conv_from_fraction(double d, ap_uint &r, bool *qb, + bool *rbits, bool *o, int *io) { + ap_int r1; + ap_conv_from_fraction(d, r1, qb, rbits, o, io); + r = r1; +} + +constexpr Ulong mult_u_u(int a, int b) { + return (Ulong)(unsigned)a * (Ulong)(unsigned)b; +} +constexpr Slong mult_u_s(int a, int b) { + return (Ulong)(unsigned)a * (Slong)(signed)b; +} +constexpr Slong mult_s_u(int a, int b) { + return (Slong)(signed)a * (Ulong)(unsigned)b; +} +constexpr Slong mult_s_s(int a, int b) { + return (Slong)(signed)a * (Slong)(signed)b; +} +constexpr void accumulate(Ulong a, Ulong &l1, Slong &l2) { + l1 += (Ulong)(unsigned)a; + l2 += a >> 32; +} +constexpr void accumulate(Slong a, Ulong &l1, Slong &l2) { + l1 += (Ulong)(unsigned)a; + l2 += a >> 32; +} + +template +constexpr bool ap_uadd_carry(ap_uint op, bool carry, ap_uint &r) { + r += static_cast>(carry); + return carry && (r == static_cast>(0)); +} + +template +constexpr bool ap_uadd_carry(ap_int op, bool carry, ap_int &r) { + ap_uint ur = r; + bool ret = ap_uadd_carry((ap_uint)(op), carry, ur); + r = ur; + return ret; +} + +// Helper function for multiplication on x86 +template +constexpr ap_uint bit_multiply(ap_uint v1, ap_uint v2) { + ap_uint x1 = v1; + ap_uint x2 = v2; + + ap_uint r = 0; + while (x2 != static_cast>(0)) { + if (x2 & static_cast>(1)) { + r += x1; + } + x1 <<= 1; + x2 >>= 1; + } + return r; +} + +// Helper function for pow on x86 +template constexpr ap_uint ap_int_pow(ap_uint value) { + constexpr int Nr = N * P; + ap_uint base = value; + ap_uint r = 1; + int pow = P; + while (pow > 0) { + if (pow % 2 == 0) { + pow /= 2; + base = bit_multiply(base, base); + } else { + pow -= 1; + r = bit_multiply(r, base); + pow /= 2; + base = bit_multiply(base, base); + } + } + return r; +} + +// Helper function for large divisions on x86 +template +constexpr ap_uint bit_division(ap_uint value, ap_uint divisor, + ap_uint &remainder) { + ap_uint quotient = 0; + while (!ap_equal_zeros_to(value)) { + ap_uint new_quotient = 1; + if (value == divisor) { + remainder = 0; + quotient += new_quotient; + break; + } else if (value < divisor) { + remainder = value; + break; + } + + // Quickly subtract 2^M * divisor from the value, and add that many to the + // quotient + ap_uint tempdivisor = divisor; + while ((tempdivisor << 1) <= value) { + tempdivisor = tempdivisor << 1; + new_quotient = new_quotient << 1; + } + + quotient += new_quotient; + value -= tempdivisor; + } + return quotient; +} + +template +constexpr ap_uint bit_division(ap_uint value, ap_uint divisor) { + ap_uint r = 0; + return bit_division(value, divisor, r); +} + +// This type is used to toggle between ap_int and ap_uint +template struct select_type {}; +template struct select_type { typedef ap_int type; }; +template struct select_type { typedef ap_uint type; }; + +#if !defined(_HLS_EMBEDDED_PROFILE) +// This two-input template returns a number without a prefix or sign +template +inline std::string to_string_noprefix(ap_uint value, int base) { + std::string buf = ""; + if (base < 2 || base > 16) { + return buf; + } + + enum { kMaxDigits = 35 }; + buf.reserve(kMaxDigits); + + const int N_bits = AC_MAX(N + 1, 5); + ap_uint quotient = static_cast>(value); + int mod; + ap_uint b = base; + do { + ap_uint r = 0; + quotient = bit_division(quotient, b, r); + mod = (int)(r); + buf += "0123456789ABCDEF"[mod]; + } while (quotient); + + std::reverse(buf.begin(), buf.end()); + return buf; +} + +template +inline std::string to_string_u(ap_uint value, int base, + bool sign_mag = false) { + return to_string_noprefix(value, base); +} + +// This three-input template returns a number, with a sign and generally with a +// prefix +template +inline std::string to_string(typename select_type::type value, int base, + bool sign_mag = false) { + // for formatting purpose only + std::string prefix = ""; + if (base == AC_BIN) { + prefix = "0b"; + } else if (base == AC_HEX) { + prefix = "0x"; + } else if (base == AC_OCT) { + prefix = "0o"; + } + + if (value >= static_cast::type>(0)) { + // If the user declares a positive number but sign_mag is off, the way + // to represent the number as positive is to have its MSB to be 0 instead + // of 1. + if (!sign_mag) { + if (base == AC_OCT || base == AC_DEC || base == AC_HEX) { + return prefix + to_string_noprefix((ap_uint)value, base); + } else { + return prefix + '0' + to_string_noprefix((ap_uint)value, base); + } + } else { + return '+' + prefix + to_string_noprefix((ap_uint)value, base); + } + } else { + // If sign_mag is false, negative number gets rid of neg sign, + // but it goes through 1's complement + 1 + if (!sign_mag && base != AC_DEC) { + ap_uint t = -value; + t = ~t + static_cast>(1); + return prefix + to_string_noprefix(t, base); + } else { + return "-" + prefix + to_string_noprefix((ap_uint)-value, base); + } + } +} +#endif //_HLS_EMBEDDED_PROFILE + +////////////////////////////////////////////////////////////////////////////// +// Integer Vector class: iv +////////////////////////////////////////////////////////////////////////////// +template class iv { +protected: + typedef typename select_type::type actype; + actype value; + +public: + template friend class iv; + + constexpr iv() {} + + template + constexpr iv(const iv &b) : value(b.value) {} + + // Construct from an _ExtInt + constexpr iv(const actype &b) : value(b) {} + + /* Note: char and short constructors are an extension to Calypto's + implementation to address the i++ default behaviour of not promoting + to integers. (these functions are not in Calypto's ac_int.h) */ + constexpr iv(char t) : value(t) {} + constexpr iv(unsigned char t) : value(t) {} + constexpr iv(short t) : value(t) {} + constexpr iv(unsigned short t) : value(t) {} + constexpr iv(Slong t) : value(t) {} + constexpr iv(Ulong t) : value(t) {} + constexpr iv(int t) : value(t) {} + constexpr iv(unsigned int t) : value(t) {} + constexpr iv(long t) : value(t) {} + constexpr iv(unsigned long t) : value(t) {} + constexpr iv(double d) : value((actype)(long long)d) {} + constexpr iv(float d) : value((actype)(long long)d) {} + + // Explicit conversion functions to C built-in types ------------- + constexpr Slong to_int64() const { return (Slong)value; } + constexpr Ulong to_uint64() const { return (Ulong)value; } + inline double to_double() const { return (double)value; } + +#if !defined(_HLS_EMBEDDED_PROFILE) + std::string to_string(ac_base_mode mode, bool sign_mag = false) const { + if (mode == 10) { + // If decimal presentation, N + 1 is set to avoid regarding positive + // numbers as negative numbers due to leading 1 in binary representation + // e.g. 4-bit decimal number 15 (0b1111) != -1 + return ac_private::to_string(value, mode, sign_mag); + } else { + return ac_private::to_string(value, mode, sign_mag); + } + } +#endif //_HLS_EMBEDDED_PROFILE + + // BEGIN: debug functions for X86 flow + template + constexpr void debug_within_range(const iv &op2) { +#if defined(DEBUG_AC_INT) + enum { Nx = AC_MAX(N, N2 + 1) }; + ap_int v = op2.value; + if (N2 + 1 <= N) + return; + // S -> S, check bits [N2 + 1, .. , N-1] + if (S) { + if (ap_equal_ones_from(v)) + return; + if (ap_equal_zeros_from(v)) + return; + } + // S -> U, check bits [N2 + 1, .. , N] + else { + if (ap_equal_zeros_from(v)) + return; + } +#if !defined(_HLS_EMBEDDED_PROFILE) + std::cout << "warning: overflow, assign value " + << ac_private::to_string(v, 10) << " (" + << ac_private::to_string(v, 16) << ")" + << " to type ac_int<" << N << ", " << (S ? "true" : "false") + << ">" << std::endl; +#endif //_HLS_EMBEDDED_PROFILE + +#ifdef DEBUG_AC_INT_ERROR + AC_ASSERT(0, "Assert due to overflow (DEBUG_AC_INT_ERROR)"); +#endif +#endif + } + + constexpr void debug_within_range(Ulong v) { + debug_within_range(iv<64, false>(v)); + } + + constexpr void debug_within_range(Slong v) { + debug_within_range(iv<64, true>(v)); + } + // END + + // o: outer overflow + // io: inner overflow + // qb: qb + // rbits: r + inline void conv_from_fraction(double d, bool *qb, bool *rbits, bool *o, + int *io) { + ap_conv_from_fraction(d, value, qb, rbits, o, io); + } + + template + constexpr void mult(const iv &op2, iv &r) const { + static_assert(N2 <= 512, ""); + static_assert(Nr <= 512, ""); + typedef typename select_type::type result_type; + result_type op2_value = static_cast(op2.value); + r.value = value; + r.value *= op2_value; + } + template + constexpr void add(const iv &op2, iv &r) const { + typedef typename select_type::type op2_type; + op2_type op2_value = static_cast(op2.value); + r.value = value; + r.value += op2_value; + } + template + constexpr void sub(const iv &op2, iv &r) const { + typedef typename select_type::type op2_type; + op2_type op2_value = static_cast(op2.value); + r.value = value; + r.value -= op2_value; + } + template + constexpr void div(const iv &op2, iv &r) const { + // The inputs must fit in 128 bits. + static_assert(N2 + S2 <= 128, ""); + static_assert(N + S <= 128, ""); + typedef + typename select_type::type + opdivtype; + typedef typename select_type::type resdivtype; + opdivtype a = static_cast(value); + opdivtype b = static_cast(op2.value); + r.value = static_cast(a / b); + } + template + constexpr void mod(const iv &op2, iv &r) const { + typedef typename select_type::type op2_type; + op2_type op2_value = static_cast(op2.value); + r.value = value; + r.value %= op2_value; + } + + constexpr void increment() { + typedef typename select_type::type value_type; + typedef typename select_type::type t2; + constexpr t2 one = 1; + t2 res = one + static_cast(value); + value = static_cast(res); + } + + constexpr void decrement() { + typedef typename select_type::type value_type; + constexpr value_type one = 1; + value -= one; + } + template constexpr void neg(iv &r) const { + r.value = value; + r.value = -r.value; + } + + // Shift Operators + template + constexpr void shift_l(unsigned op2, iv &r) const { + if (op2 >= Nr) { + r.value = 0; + } else { + r.value = value; + r.value <<= op2; + } + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wtautological-compare" + // Avoid a clang compiler warning below by temporarily suppressing + // a autological-compare warning to keep the compiler output + // tidy for the customer. + // + // warning: comparison of unsigned expression < 0 is always false + // [-Wtautological-compare] + // } else if ( (op2 >= Nr) && Sr && (value < 0) ) { + // ~~~~~ ^ ~ + // Note that since this expression is evaluated at compile time, the compiler + // will throw a warning in the case the expression is always 0. + // So just suppress it. + template + constexpr void shift_l2(signed op2, iv &r) const { + signed shift = AC_ABS(op2); + if (shift >= Nr) { + shift = Nr; + } + + if (op2 > 0) { + if (shift == Nr) { + r.value = 0; + } else { + r.value = value; + r.value <<= shift; + } + } else { + if (shift == Nr) { + if (value < static_cast::type>(0)) { + r.value = -1; + } else { + r.value = 0; + } + } else { + r.value = value; + r.value >>= shift; + } + } + } +#pragma clang diagnostic pop + + template + constexpr void const_shift_l(iv &r) const { + shift_l2(B, r); + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wtautological-compare" + template + constexpr void shift_r(unsigned op2, iv &r) const { + if ((op2 >= Nr) && + ((Sr && (value > static_cast::type>(0))) || + !Sr)) { + r.value = 0; + } else if ((op2 >= Nr) && Sr && + (value < static_cast::type>(0))) { + r.value = -1; + } else { + r.value = value >> op2; + } + } + + template + constexpr void shift_r2(signed op2, iv &r) const { + signed shift = AC_ABS(op2); + const int Ns = AC_MAX(Nr, N); + if (shift >= Ns) { + shift = Ns; + } + if (op2 > 0) { + if (shift == Ns) { + if (value < static_cast::type>(0)) { + r.value = -1; + } else { + r.value = 0; + } + } else { + r.value = value >> shift; + } + } else { + if (shift == Ns) { + r.value = 0; + } else { + r.value = value; + r.value <<= shift; + } + } + } +#pragma clang diagnostic pop + + template + constexpr void const_shift_r(iv &r) const { + shift_r2(B, r); + } + + template + constexpr void bitwise_complement(iv &r) const { + r.value = value; + r.value = ~r.value; + } + template + constexpr void bitwise_and(const iv &op2, iv &r) const { + r.value = value; + r.value &= static_cast::type>(op2.value); + } + template + constexpr void bitwise_or(const iv &op2, iv &r) const { + r.value = value; + r.value |= static_cast::type>(op2.value); + } + template + constexpr void bitwise_xor(const iv &op2, iv &r) const { + r.value = value; + r.value ^= static_cast::type>(op2.value); + } + template constexpr bool equal(const iv &op2) const { + constexpr auto Sx = AC_MAX(N, N2); + ap_int a = (ap_int)value; + ap_int b = (ap_int)op2.value; + return (a == b); + } + template + constexpr bool greater_than(const iv &op2) const { + constexpr auto Sx = AC_MAX(N, N2); + ap_int a = (ap_int)value; + ap_int b = (ap_int)op2.value; + return (a > b); + } + template + constexpr bool less_than(const iv &op2) const { + enum { Sx = AC_MAX(N, N2) }; + ap_int a = (ap_int)value; + ap_int b = (ap_int)op2.value; + return (a < b); + } + constexpr bool equal_zero() const { + actype zero = 0; + return (value == zero); + } + +// Save current diagnostic state +#pragma clang diagnostic push +// Disable the "shift-count-overflow" diagnostic message +#pragma clang diagnostic ignored "-Wshift-count-overflow" + // This helper function will overwrite bits of current ac_int from index lsb + // to ( lsb + N2 - 1 ) with the bits in op2. N2 cannot be greater than N. + // All users of this helper function check for the validity of N2 with an + // AC_ASSERT which is only activated for certain debug compiles. This function + // contains a static_assert to check for the validity of N2 for other compile + // flows. + template + constexpr void set_slc(unsigned lsb, int WS, const iv &op2) { +#ifdef __EMULATION_FLOW__ + AC_ASSERT(N2 <= N, "Bad usage: WS greater than length of slice"); +#else + static_assert(N2 <= N, "Bad usage: WS greater than length of slice"); +#endif // __EMULATION_FLOW__ + if (N2 == N) { + value = op2.value; + } else if (N2 <= N) { + iv temp; + temp.value = (actype)op2.value; + temp.value <<= lsb; + // Compute AND mask + iv mask; + mask.value = 1; + mask.value <<= N2; + mask.value -= + static_cast::type>(1); + mask.value <<= lsb; + + mask.value = ~mask.value; + value &= mask.value; + value |= temp.value; + } else { + value = 0; + } + } +// Restore saved diagnostic state +#pragma clang diagnostic pop + + unsigned leading_bits(bool bit) const { return 0; } + + template constexpr void reverse(iv &r) const { + r.value = 0; + for (int i = 0; i < N; i++) { + r.value |= ((value >> i) & 1) << ((N - 1) - i); + } + } +}; // class iv, signed + +// add automatic conversion to Slong/Ulong depending on S and C +template class iv_conv : public iv { +protected: + constexpr iv_conv() {} + template constexpr iv_conv(const T &t) : iv(t) {} +}; + +template class iv_conv : public iv { +public: + constexpr operator Ulong() const { return iv::to_uint64(); } + +protected: + constexpr iv_conv() {} + template constexpr iv_conv(const T &t) : iv(t) {} +}; + +template class iv_conv : public iv { +public: + constexpr operator Slong() const { return iv::to_int64(); } + +protected: + constexpr iv_conv() {} + template constexpr iv_conv(const T &t) : iv(t) {} +}; + +// Set default to promote to int as this is the case for almost all types +// create exceptions using specializations +template struct c_prom { typedef int promoted_type; }; +template <> struct c_prom { typedef unsigned promoted_type; }; +template <> struct c_prom { typedef long promoted_type; }; +template <> struct c_prom { + typedef unsigned long promoted_type; +}; +template <> struct c_prom { typedef Slong promoted_type; }; +template <> struct c_prom { typedef Ulong promoted_type; }; +template <> struct c_prom { typedef float promoted_type; }; +template <> struct c_prom { typedef double promoted_type; }; + +template struct c_arith { + // will error out for pairs of T and T2 that are not defined through + // specialization +}; +template struct c_arith { typedef T arith_conv; }; + +#define C_ARITH(C_TYPE1, C_TYPE2) \ + template <> struct c_arith { \ + typedef C_TYPE1 arith_conv; \ + }; \ + template <> struct c_arith { typedef C_TYPE1 arith_conv; }; + +C_ARITH(double, float) +C_ARITH(double, int) +C_ARITH(double, unsigned) +C_ARITH(double, long) +C_ARITH(double, unsigned long) +C_ARITH(double, Slong) +C_ARITH(double, Ulong) +C_ARITH(float, int) +C_ARITH(float, unsigned) +C_ARITH(float, long) +C_ARITH(float, unsigned long) +C_ARITH(float, Slong) +C_ARITH(float, Ulong) + +C_ARITH(Slong, int) +C_ARITH(Slong, unsigned) +C_ARITH(Ulong, int) +C_ARITH(Ulong, unsigned) + +template struct map { typedef T t; }; +template struct c_type_params { + // will error out for T for which this template struct is not specialized +}; + +template inline const char *c_type_name() { return "unknown"; } +template <> inline const char *c_type_name() { return "bool"; } +template <> inline const char *c_type_name() { return "char"; } +template <> inline const char *c_type_name() { + return "signed char"; +} +template <> inline const char *c_type_name() { + return "unsigned char"; +} +template <> inline const char *c_type_name() { + return "signed short"; +} +template <> inline const char *c_type_name() { + return "unsigned short"; +} +template <> inline const char *c_type_name() { return "int"; } +template <> inline const char *c_type_name() { return "unsigned"; } +template <> inline const char *c_type_name() { + return "signed long"; +} +template <> inline const char *c_type_name() { + return "unsigned long"; +} +template <> inline const char *c_type_name() { + return "signed long long"; +} +template <> inline const char *c_type_name() { + return "unsigned long long"; +} +template <> inline const char *c_type_name() { return "float"; } +template <> inline const char *c_type_name() { return "double"; } + +template struct c_type; + +template struct rt_c_type_T { + template struct op1 { + typedef typename T::template rt_T>::mult mult; + typedef typename T::template rt_T>::plus plus; + typedef typename T::template rt_T>::minus2 minus; + typedef typename T::template rt_T>::minus minus2; + typedef typename T::template rt_T>::logic logic; + typedef typename T::template rt_T>::div2 div; + typedef typename T::template rt_T>::div div2; + }; +}; +template struct c_type { + typedef typename c_prom::promoted_type c_prom_T; + struct rt_unary { + typedef c_prom_T neg; + typedef c_prom_T mag_sqr; + typedef c_prom_T mag; + template struct set { typedef c_prom_T sum; }; + }; + template struct rt_T { + typedef typename rt_c_type_T::template op1::mult mult; + typedef typename rt_c_type_T::template op1::plus plus; + typedef typename rt_c_type_T::template op1::minus minus; + typedef typename rt_c_type_T::template op1::minus2 minus2; + typedef typename rt_c_type_T::template op1::logic logic; + typedef typename rt_c_type_T::template op1::div div; + typedef typename rt_c_type_T::template op1::div2 div2; + }; + +#if !defined(_HLS_EMBEDDED_PROFILE) + inline static std::string type_name() { + std::string r = c_type_name(); + return r; + } +#endif //_HLS_EMBEDDED_PROFILE +}; +// with T == c_type +template struct rt_c_type_T> { + typedef typename c_prom::promoted_type c_prom_T; + template struct op1 { + typedef typename c_prom::promoted_type c_prom_T2; + typedef typename c_arith::arith_conv mult; + typedef typename c_arith::arith_conv plus; + typedef typename c_arith::arith_conv minus; + typedef typename c_arith::arith_conv minus2; + typedef typename c_arith::arith_conv logic; + typedef typename c_arith::arith_conv div; + typedef typename c_arith::arith_conv div2; + }; +}; + +#define C_TYPE_MAP(C_TYPE) \ + template <> struct map { typedef c_type t; }; + +#define C_TYPE_PARAMS(C_TYPE, WI, SI) \ + template <> struct c_type_params { \ + enum { W = WI, I = WI, E = 0, S = SI, floating_point = 0 }; \ + }; + +#define C_TYPE_MAP_INT(C_TYPE, WI, SI) \ + C_TYPE_MAP(C_TYPE) \ + C_TYPE_PARAMS(C_TYPE, WI, SI) + +#define C_TYPE_MAP_FLOAT(C_TYPE, FP, WFP, IFP, EFP) \ + C_TYPE_MAP(C_TYPE) \ + template <> struct c_type_params { \ + enum { W = WFP, I = IFP, E = EFP, S = true, floating_point = FP }; \ + }; + +C_TYPE_MAP_INT(bool, 1, false) +C_TYPE_MAP_INT(char, 8, true) +C_TYPE_MAP_INT(signed char, 8, true) +C_TYPE_MAP_INT(unsigned char, 8, false) +C_TYPE_MAP_INT(signed short, 16, true) +C_TYPE_MAP_INT(unsigned short, 16, false) +C_TYPE_MAP_INT(signed int, 32, true) +C_TYPE_MAP_INT(unsigned int, 32, false) +C_TYPE_MAP_INT(signed long, ac_private::long_w, true) +C_TYPE_MAP_INT(unsigned long, ac_private::long_w, false) +C_TYPE_MAP_INT(signed long long, 64, true) +C_TYPE_MAP_INT(unsigned long long, 64, false) +C_TYPE_MAP_FLOAT(float, 1, 25, 1, 8) +C_TYPE_MAP_FLOAT(double, 2, 54, 1, 11) + +#undef C_TYPE_INT +#undef C_TYPE_PARAMS +#undef C_TYPE_FLOAT +#undef C_TYPE_MAP + +// specializations for following struct declared/defined after definition of +// ac_int +template struct rt_ac_int_T { + template struct op1 { + typedef typename T::template rt_T>::mult mult; + typedef typename T::template rt_T>::plus plus; + typedef typename T::template rt_T>::minus2 minus; + typedef typename T::template rt_T>::minus minus2; + typedef typename T::template rt_T>::logic logic; + typedef typename T::template rt_T>::div2 div; + typedef typename T::template rt_T>::div div2; + }; +}; +} // namespace ac_private + +namespace ac { +// compiler time constant for log2 like functions +template struct nbits { + enum { val = ac_private::s_N<16>::s_X::nbits }; +}; + +template struct log2_floor { + enum { val = nbits::val - 1 }; +}; + +// log2 of 0 is not defined: generate compiler error +template <> struct log2_floor<0> {}; + +template struct log2_ceil { + enum { lf = log2_floor::val, val = (X == (1 << lf) ? lf : lf + 1) }; +}; + +// log2 of 0 is not defined: generate compiler error +template <> struct log2_ceil<0> {}; + +template struct int_range { + enum { + l_s = LowerBound < 0, + u_s = UpperBound < 0, + signedness = l_s || u_s, + l_nbits = nbits::val, + u_nbits = nbits::val, + nbits = AC_MAX(l_nbits, u_nbits + (!u_s && signedness)) + }; + typedef ac_int type; +}; +} // namespace ac + +enum ac_q_mode { + AC_TRN, + AC_RND, + AC_TRN_ZERO, + AC_RND_ZERO, + AC_RND_INF, + AC_RND_MIN_INF, + AC_RND_CONV, + AC_RND_CONV_ODD +}; +enum ac_o_mode { AC_WRAP, AC_SAT, AC_SAT_ZERO, AC_SAT_SYM }; +template class ac_fixed; + +////////////////////////////////////////////////////////////////////////////// +// Arbitrary-Length Integer: ac_int +////////////////////////////////////////////////////////////////////////////// + +template +class ac_int : public ac_private::iv_conv { + typedef ac_private::iv_conv ConvBase; + typedef ac_private::iv Base; + + inline bool is_neg() const { return S && Base::value < 0; } + + enum ac_debug_op { + AC_DEBUG_ADD, + AC_DEBUG_SUB, + AC_DEBUG_MUL, + AC_DEBUG_DIV, + AC_DEBUG_REM, + AC_DEBUG_INCREMENT, + AC_DEBUG_DECREMENT + }; + + // returns false if number is denormal + template + bool normalize_private(ac_int &exp, bool reserved_min_exp = false) { + int expt = exp; + int lshift = leading_sign(); + bool fully_normalized = true; + ac_int min_exp = 0; + min_exp.template set_val(); + int max_shift = exp - min_exp - reserved_min_exp; + if (lshift > max_shift) { + lshift = ac_int(max_shift); + expt = min_exp + reserved_min_exp; + fully_normalized = false; + } else { + expt -= lshift; + } + if (Base::equal_zero()) { + expt = 0; + fully_normalized = true; + } + exp = expt; + Base r; + Base::shift_l(lshift, r); + Base::operator=(r); + return fully_normalized; + } + +public: + static constexpr int width = W; + static constexpr int i_width = W; + static constexpr bool sign = S; + static constexpr ac_q_mode q_mode = AC_TRN; + static constexpr ac_o_mode o_mode = AC_WRAP; + static constexpr int e_width = 0; + + template struct rt { + enum { + mult_w = W + W2, + mult_s = S || S2, + plus_w = AC_MAX(W + (S2 && !S), W2 + (S && !S2)) + 1, + plus_s = S || S2, + minus_w = AC_MAX(W + (S2 && !S), W2 + (S && !S2)) + 1, + minus_s = true, + div_w = W + S2, + div_s = S || S2, + mod_w = AC_MIN(W, W2 + (!S2 && S)), + mod_s = S, + logic_w = AC_MAX(W + (S2 && !S), W2 + (S && !S2)), + logic_s = S || S2 + }; + typedef ac_int mult; + typedef ac_int plus; + typedef ac_int minus; + typedef ac_int logic; + typedef ac_int div; + typedef ac_int mod; + typedef ac_int arg1; + }; + + template struct rt_T { + typedef typename ac_private::map::t map_T; + typedef + typename ac_private::rt_ac_int_T::template op1::mult mult; + typedef + typename ac_private::rt_ac_int_T::template op1::plus plus; + typedef typename ac_private::rt_ac_int_T::template op1::minus + minus; + typedef typename ac_private::rt_ac_int_T::template op1::minus2 + minus2; + typedef typename ac_private::rt_ac_int_T::template op1::logic + logic; + typedef + typename ac_private::rt_ac_int_T::template op1::div div; + typedef + typename ac_private::rt_ac_int_T::template op1::div2 div2; + typedef ac_int arg1; + }; + + struct rt_unary { + enum { + neg_w = W + 1, + neg_s = true, + mag_sqr_w = 2 * W - S, + mag_sqr_s = false, + mag_w = W + S, + mag_s = false, + leading_sign_w = ac::log2_ceil::val, + leading_sign_s = false + }; + typedef ac_int neg; + typedef ac_int mag_sqr; + typedef ac_int mag; + typedef ac_int leading_sign; + template struct set { + enum { sum_w = W + ac::log2_ceil::val, sum_s = S }; + typedef ac_int sum; + }; + }; + + template friend class ac_int; + template + friend class ac_fixed; + + constexpr ac_int() { +#if defined(DEBUG_AC_INT) + if (!warned_undef) { + std::cout << "warning: using empty constructor for type " + << type_name().c_str() << std::endl; + warned_undef = true; +#ifdef DEBUG_AC_INT_ERROR + AC_ASSERT(0, + "Assert due to using empty constructor (DEBUG_AC_INT_ERROR)\n"); +#endif + } +#endif + } + template + constexpr inline ac_int(const ac_int &op) : ConvBase(op) { + Base::debug_within_range(op); + } + + template + constexpr inline void set_val_no_overflow_warning(const ac_int &op) { + Base::operator=(op); + } + + constexpr inline ac_int(bool b) : ConvBase(b) {} + constexpr inline ac_int(char b) : ConvBase(b) { + Base::debug_within_range(Ulong(b)); + } + constexpr inline ac_int(signed char b) : ConvBase(b) { + Base::debug_within_range(Slong(b)); + } + constexpr inline ac_int(unsigned char b) : ConvBase(b) { + Base::debug_within_range(Ulong(b)); + } + constexpr inline ac_int(signed short b) : ConvBase(b) { + Base::debug_within_range(Slong(b)); + } + constexpr inline ac_int(unsigned short b) : ConvBase(b) { + Base::debug_within_range(Ulong(b)); + } + constexpr inline ac_int(signed int b) : ConvBase(b) { + Base::debug_within_range(Slong(b)); + } + constexpr inline ac_int(unsigned int b) : ConvBase(b) { + Base::debug_within_range(Ulong(b)); + } + constexpr inline ac_int(signed long b) : ConvBase(b) { + Base::debug_within_range(Slong(b)); + } + constexpr inline ac_int(unsigned long b) : ConvBase(b) { + Base::debug_within_range(Ulong(b)); + } + constexpr inline ac_int(Slong b) : ConvBase(b) { + Base::debug_within_range(b); + } + constexpr inline ac_int(Ulong b) : ConvBase(b) { + Base::debug_within_range(b); + } + constexpr ac_int(double d) : ConvBase(d) {} + ac_int(const char *) = delete; + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wuninitialized" +#endif + template constexpr inline ac_int &set_val() { + if (V == AC_VAL_DC) { + ac_int r = 0; + Base::operator=(r); + } else if (V == AC_VAL_0 || V == AC_VAL_MIN || V == AC_VAL_QUANTUM) { + Base::operator=(0); + if (S && V == AC_VAL_MIN) { + Base::value = 1; + Base::value <<= W - 1; + } else if (V == AC_VAL_QUANTUM) + Base::value = 1; + } else if (AC_VAL_MAX) { + Base::value = 0; + Base::value = ~Base::value; + if (S) { + ac_private::ap_uint t = Base::value; + t >>= 1; + Base::value = t; + } + } + return *this; + } +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + + // Explicit conversion functions to C built-in types ------------- + constexpr int to_int() const { return (int)Base::value; } + constexpr unsigned to_uint() const { return (unsigned)Base::value; } + constexpr long to_long() const { return (long)Base::value; } + constexpr unsigned long to_ulong() const { + return (unsigned long)Base::value; + } + constexpr Slong to_int64() const { return Base::to_int64(); } + constexpr Ulong to_uint64() const { return Base::to_uint64(); } + inline double to_double() const { + static_assert( + W <= 128, + "ac_int to_double() does not support ttype larger than 128 bits"); + return Base::to_double(); + } + + constexpr int length() const { return W; } + +#if !defined(_HLS_EMBEDDED_PROFILE) + inline std::string to_string(ac_base_mode base_rep, + bool sign_mag = false) const { + return Base::to_string(base_rep, sign_mag); + } + + inline static std::string type_name() { + const char *tf[] = {",false>", ",true>"}; + std::string r = "ac_int<"; + r += ac_int<32, true>(W).to_string(AC_DEC, false); + r += tf[S]; + return r; + } +#endif //_HLS_EMBEDDED_PROFILE + + // Arithmetic : Binary ---------------------------------------------------- + template + constexpr typename rt::mult + operator*(const ac_int &op2) const { + typename rt::mult r = 0; + Base::mult(op2, r); + return r; + } + template + constexpr typename rt::plus + operator+(const ac_int &op2) const { + typename rt::plus r = 0; + Base::add(op2, r); + return r; + } + template + constexpr typename rt::minus + operator-(const ac_int &op2) const { + typename rt::minus r = 0; + Base::sub(op2, r); + return r; + } + template + constexpr typename rt::div + operator/(const ac_int &op2) const { + typename rt::div r = 0; + Base::div(op2, r); + return r; + } + template + constexpr typename rt::mod + operator%(const ac_int &op2) const { + typename rt::mod r = 0; + Base::mod(op2, r); + return r; + } + + template + constexpr void check_overflow(const ac_int &op2, + ac_debug_op debug_op) { +#if defined(DEBUG_AC_INT) + ac_int temp = 0; + switch (debug_op) { + case AC_DEBUG_ADD: + temp = (*this) + op2; + break; + case AC_DEBUG_SUB: + temp = (*this) - op2; + break; + case AC_DEBUG_MUL: + temp = (*this) * op2; + break; + case AC_DEBUG_DIV: + temp = (*this) / op2; + break; + case AC_DEBUG_REM: + temp = (*this) % op2; + break; + + default: + break; + } +#endif + } + + constexpr void check_overflow(ac_debug_op debug_op) { +#if defined(DEBUG_AC_INT) + ac_int temp = 0; + ac_int<2, true> op2 = 1; + switch (debug_op) { + case AC_DEBUG_INCREMENT: + temp = (*this) + op2; + break; + case AC_DEBUG_DECREMENT: + temp = (*this) - op2; + break; + + default: + break; + } +#endif + } + // END: X86 DEBUG + + // Arithmetic assign ------------------------------------------------------ + template + constexpr ac_int &operator*=(const ac_int &op2) { + check_overflow(op2, AC_DEBUG_MUL); + Base r = 0; + Base::mult(op2, r); + Base::operator=(r); + return *this; + } + template + constexpr ac_int &operator+=(const ac_int &op2) { + check_overflow(op2, AC_DEBUG_ADD); + Base r = 0; + Base::add(op2, r); + Base::operator=(r); + return *this; + } + template + constexpr ac_int &operator-=(const ac_int &op2) { + check_overflow(op2, AC_DEBUG_SUB); + Base r = 0; + Base::sub(op2, r); + Base::operator=(r); + return *this; + } + template + constexpr ac_int &operator/=(const ac_int &op2) { + check_overflow(op2, AC_DEBUG_DIV); + Base r = 0; + Base::div(op2, r); + Base::operator=(r); + return *this; + } + template + constexpr ac_int &operator%=(const ac_int &op2) { + check_overflow(op2, AC_DEBUG_REM); + Base r = 0; + Base::mod(op2, r); + Base::operator=(r); + return *this; + } + // Arithmetic prefix increment, decrement ---------------------------------- + constexpr ac_int &operator++() { + check_overflow(AC_DEBUG_INCREMENT); + Base::increment(); + return *this; + } + constexpr ac_int &operator--() { + check_overflow(AC_DEBUG_DECREMENT); + Base::decrement(); + return *this; + } + // Arithmetic postfix increment, decrement --------------------------------- + constexpr ac_int operator++(int) { + check_overflow(AC_DEBUG_INCREMENT); + ac_int t = *this; + Base::increment(); + return t; + } + constexpr ac_int operator--(int) { + check_overflow(AC_DEBUG_DECREMENT); + ac_int t = *this; + Base::decrement(); + return t; + } + // Arithmetic Unary -------------------------------------------------------- + constexpr ac_int operator+() { return *this; } + constexpr typename rt_unary::neg operator-() const { + typename rt_unary::neg r = 0; + Base::neg(r); + return r; + } + // ! ------------------------------------------------------------------------ + constexpr bool operator!() const { return Base::equal_zero(); } + + // Bitwise (arithmetic) unary: complement ----------------------------- + constexpr ac_int operator~() const { + ac_int r = 0; + Base::bitwise_complement(r); + return r; + } + // Bitwise (non-arithmetic) bit_complement ----------------------------- + constexpr ac_int bit_complement() const { + ac_int r = 0; + Base::bitwise_complement(r); + return r; + } + // Bitwise (arithmetic): and, or, xor ---------------------------------- + template + constexpr typename rt::logic + operator&(const ac_int &op2) const { + typename rt::logic r = 0; + Base::bitwise_and(op2, r); + return r; + } + template + constexpr typename rt::logic + operator|(const ac_int &op2) const { + typename rt::logic r = 0; + Base::bitwise_or(op2, r); + return r; + } + template + constexpr typename rt::logic + operator^(const ac_int &op2) const { + typename rt::logic r = 0; + Base::bitwise_xor(op2, r); + return r; + } + // Bitwise assign (not arithmetic): and, or, xor ---------------------------- + template + constexpr ac_int &operator&=(const ac_int &op2) { + Base r = 0; + Base::bitwise_and(op2, r); + Base::operator=(r); + return *this; + } + template + constexpr ac_int &operator|=(const ac_int &op2) { + Base r = 0; + Base::bitwise_or(op2, r); + Base::operator=(r); + return *this; + } + template + constexpr ac_int &operator^=(const ac_int &op2) { + Base r = 0; + Base::bitwise_xor(op2, r); + Base::operator=(r); + return *this; + } + // Shift (result constrained by left operand) ------------------------------- + template + constexpr ac_int operator<<(const ac_int &op2) const { + ac_int r = 0; + Base::shift_l2(op2.to_int(), r); + return r; + } + template + constexpr ac_int operator<<(const ac_int &op2) const { + ac_int r = 0; + Base::shift_l(op2.to_uint(), r); + return r; + } + template + constexpr ac_int operator>>(const ac_int &op2) const { + ac_int r = 0; + Base::shift_r2(op2.to_int(), r); + return r; + } + template + constexpr ac_int operator>>(const ac_int &op2) const { + ac_int r = 0; + Base::shift_r(op2.to_uint(), r); + return r; + } + // Shift assign ------------------------------------------------------------ + template constexpr ac_int &operator<<=(const ac_int &op2) { + Base r = 0; + Base::shift_l2(op2.to_int(), r); + Base::operator=(r); + return *this; + } + template + constexpr ac_int &operator<<=(const ac_int &op2) { + Base r = 0; + Base::shift_l(op2.to_uint(), r); + Base::operator=(r); + return *this; + } + template constexpr ac_int &operator>>=(const ac_int &op2) { + Base r = 0; + Base::shift_r2(op2.to_int(), r); + Base::operator=(r); + return *this; + } + template + constexpr ac_int &operator>>=(const ac_int &op2) { + Base r = 0; + Base::shift_r(op2.to_uint(), r); + Base::operator=(r); + return *this; + } + // Relational --------------------------------------------------------------- + template + constexpr bool operator==(const ac_int &op2) const { + return Base::equal(op2); + } + template + constexpr bool operator!=(const ac_int &op2) const { + return !Base::equal(op2); + } + template + constexpr bool operator<(const ac_int &op2) const { + return Base::less_than(op2); + } + template + constexpr bool operator>=(const ac_int &op2) const { + return !Base::less_than(op2); + } + template + constexpr bool operator>(const ac_int &op2) const { + return Base::greater_than(op2); + } + template + constexpr bool operator<=(const ac_int &op2) const { + return !Base::greater_than(op2); + } + + // Bit and Slice Select ----------------------------------------------------- + template + constexpr ac_int slc(const ac_int &index) const { + ac_int op = *this; + ac_int r = 0; + ac_int zero = 0; + AC_ASSERT(index >= zero, "Attempting to read slc with negative indices"); + ac_int uindex = index; + Base::shift_r(uindex.to_uint(), op); + r.set_val_no_overflow_warning(op); + return r; + } + + template constexpr ac_int slc(signed index) const { + ac_int op = *this; + ac_int r = 0; + AC_ASSERT(index >= 0, "Attempting to read slc with negative indices"); + unsigned uindex = index & ((unsigned)~0 >> 1); + Base::shift_r(uindex, op); + r.set_val_no_overflow_warning(op); + return r; + } + template constexpr ac_int slc(unsigned uindex) const { + ac_int op = *this; + ac_int r = 0; + Base::shift_r(uindex, op); + r.set_val_no_overflow_warning(op); + return r; + } + + template + constexpr ac_int &set_slc(const ac_int lsb, + const ac_int &slc) { + AC_ASSERT(lsb.to_int() + W2 <= W && lsb.to_int() >= 0, + "Out of bounds set_slc"); + if (lsb.to_int() + W2 <= W && lsb.to_int() >= 0) { + ac_int ulsb = lsb; + ac_int usigned_slc = 0; + usigned_slc.set_val_no_overflow_warning(slc); + Base::set_slc(ulsb.to_uint(), W2, usigned_slc); + } else { + Base r = 0; + Base::operator=(r); + } + return *this; + } + template + constexpr ac_int &set_slc(signed lsb, const ac_int &slc) { + AC_ASSERT(lsb + W2 <= W && lsb >= 0, "Out of bounds set_slc"); + if (lsb + W2 <= W && lsb >= 0) { + unsigned ulsb = lsb & ((unsigned)~0 >> 1); + ac_int usigned_slc = 0; + usigned_slc.set_val_no_overflow_warning(slc); + Base::set_slc(ulsb, W2, usigned_slc); + } else { + Base r = 0; + Base::operator=(r); + } + return *this; + } + template + constexpr ac_int &set_slc(unsigned ulsb, const ac_int &slc) { + AC_ASSERT(ulsb + W2 <= W, "Out of bounds set_slc"); + if (ulsb + W2 <= W) { + ac_int usigned_slc = 0; + usigned_slc.set_val_no_overflow_warning(slc); + Base::set_slc(ulsb, W2, usigned_slc); + } else { + Base r = 0; + Base::operator=(r); + } + return *this; + } + + class ac_bitref { + ac_int &d_bv; + unsigned d_index; + + public: + ac_bitref(ac_int *bv, unsigned index = 0) : d_bv(*bv), d_index(index) {} + + operator bool() const { + return (d_index < W) + ? (bool)((d_bv.value >> + static_cast< + typename ac_private::select_type::type>( + d_index)) & + static_cast< + typename ac_private::select_type::type>(1)) + : 0; + } + + template operator ac_int() const { + return operator bool(); + } + + inline ac_bitref operator=(int val) { + // lsb of int (val&1) is written to bit + if (d_index < W) { + ac_private::ap_int temp1 = d_bv.value; + ac_private::ap_int temp2 = val; + temp2 <<= d_index; + temp1 ^= temp2; + temp2 = 1; + temp2 <<= d_index; + temp1 &= temp2; + d_bv.value = static_cast>(d_bv.value) ^ temp1; + } + return *this; + } + template + inline ac_bitref operator=(const ac_int &val) { + return operator=(val.to_int()); + } + inline ac_bitref operator=(const ac_bitref &val) { + return operator=((int)(bool)val); + } + }; + + class ac_bitcopy { + ac_int d_bv; + unsigned d_index; + + public: + ac_bitcopy(ac_int bv, unsigned index = 0) : d_bv(bv), d_index(index) {} + + operator bool() const { + return (d_index < W) + ? (bool)((d_bv.value >> + static_cast::actype>( + d_index)) & + static_cast::actype>(1)) + : 0; + } + + template operator ac_int() const { + return operator bool(); + } + }; + + ac_bitref operator[](unsigned int uindex) { + AC_ASSERT(uindex < W, "Attempting to read bit beyond MSB"); + ac_bitref bvh(this, uindex); + return bvh; + } + ac_bitref operator[](int index) { + AC_ASSERT(index >= 0, "Attempting to read bit with negative index"); + AC_ASSERT(index < W, "Attempting to read bit beyond MSB"); + unsigned uindex = index & ((unsigned)~0 >> 1); + ac_bitref bvh(this, uindex); + return bvh; + } + template ac_bitref operator[](const ac_int &index) { + AC_ASSERT(index >= 0, "Attempting to read bit with negative index"); + AC_ASSERT(index < W, "Attempting to read bit beyond MSB"); + ac_int uindex = index; + ac_bitref bvh(this, uindex.to_uint()); + return bvh; + } + + bool operator[](unsigned int uindex) const { + AC_ASSERT(uindex < W, "Attempting to read bit beyond MSB"); + ac_bitcopy bvh(*this, uindex); + return bvh; + } + + bool operator[](int index) const { + AC_ASSERT(index >= 0, "Attempting to read bit with negative index"); + AC_ASSERT(index < W, "Attempting to read bit beyond MSB"); + unsigned uindex = index & ((unsigned)~0 >> 1); + ac_bitcopy bvh(*this, uindex); + return bvh; + } + + template + bool operator[](const ac_int &index) const { + AC_ASSERT(index >= 0, "Attempting to read bit with negative index"); + AC_ASSERT(index < W, "Attempting to read bit beyond MSB"); + ac_int uindex = index; + ac_bitcopy bvh(*this, uindex.to_uint()); + return bvh; + } + + typename rt_unary::leading_sign leading_sign() const { + unsigned ls = 0; + return ls; + } + typename rt_unary::leading_sign leading_sign(bool &all_sign) const { + unsigned ls = 0; + return ls; + } + // returns false if number is denormal + template bool normalize(ac_int &exp) { + return false; + } + // returns false if number is denormal, minimum exponent is reserved (usually + // for encoding special values/errors) + template bool normalize_RME(ac_int &exp) { + return false; + } + bool and_reduce() const { return false; } + bool or_reduce() const { return !Base::equal_zero(); } + bool xor_reduce() const { return false; } + ac_int reverse() const { + ac_int r = 0; + Base::reverse(r); + return r; + } + + constexpr void bit_fill_hex(const char *str) { + // Zero Pads if str is too short, throws ms bits away if str is too long + // Asserts if anything other than 0-9a-fA-F is encountered + // literal constant value can be folded at compile time + + // Can not use system strlen here since it's not synthesizable in FPGA flow + // use a customized version of strlen instead + const char *s = str; + for (; *s; ++s) { + } + + int str_len = (s - str); + ac_int res = 0; + + int i = (str_len >= 2 && str[0] == '0' && str[1] == 'x') ? 2 : 0; +#pragma unroll + for (; i < str_len; i++) { + char c = str[i]; + ac_int<4, false> h = 0; + if (c >= '0' && c <= '9') + h = c - '0'; + else if (c >= 'A' && c <= 'F') + h = c - 'A' + 10; + else if (c >= 'a' && c <= 'f') + h = c - 'a' + 10; + else { + AC_ASSERT(!c, "Invalid hex digit"); + break; + } + ac_int<4, false> s = 4; + res = res << s; + res |= h; + } + *this = res; + } + + template + constexpr void bit_fill(const int (&ivec)[Na], bool bigendian = true) { + // bit_fill from integer vector + // if W > N*32, missing most significant bits are zeroed + // if W < N*32, additional bits in ivec are ignored (no overflow checking) + // Example: + // ac_int<80,false> x; + // int vec[] = { + // 0xffffa987, 0x6543210f, 0xedcba987 + // }; + // x.bit_fill(vec); // vec[0] fill bits 79-64 + const int M = AC_MIN((W + 31) / 32, Na); + ac_int res = 0; +#pragma unroll + for (int i = 0; i < M; i++) { + res.set_slc(i * 32, ac_int<32, false>(ivec[bigendian ? M - 1 - i : i])); + } + *this = res; + } + + void _set_value_internal(typename Base::actype _value) { + this->value = _value; + } + const typename Base::actype _get_value_internal() const { + return this->value; + } +}; + +namespace ac { + // Function to compute the ceiling of log2 + constexpr size_t log2_round_up(size_t num) { + assert(num != 0); + size_t bit_width = 0; + size_t bit_count = 0; + while (num > 0) { + bit_width++; + bit_count += num & 1; + num >>= 1; + } + + return bit_width - 1 + (bit_count > 1); + } + + // Type of ac_int which has maximum size of MX + template + using make_ac_int_type = ac_int; +}; + +// Template function to return ac_int type with maximum +// value of MaxValue, and initialize it to 0 +template +auto make_ac_int_val() { + using ac_int_type = ac::make_ac_int_type; + return ac_int_type(0); +} + +// Template function to return ac_int type with maximum +// value of MaxValue, and initialize it to InitialValue +template +auto make_ac_int_val(T&& InitialValue) { + using ac_int_type = ac::make_ac_int_type; + return ac_int_type(InitialValue); +} + +namespace ac { +template struct rt_2T { + typedef typename ac_private::map::t map_T; + typedef typename ac_private::map::t map_T2; + typedef typename map_T::template rt_T::mult mult; + typedef typename map_T::template rt_T::plus plus; + typedef typename map_T::template rt_T::minus minus; + typedef typename map_T::template rt_T::minus2 minus2; + typedef typename map_T::template rt_T::logic logic; + typedef typename map_T::template rt_T::div div; + typedef typename map_T::template rt_T::div2 div2; +}; +} // namespace ac + +namespace ac { +template struct ac_int_represent { + enum { + t_w = ac_private::c_type_params::W, + t_s = ac_private::c_type_params::S + }; + typedef ac_int type; +}; +template <> struct ac_int_represent {}; +template <> struct ac_int_represent {}; +template struct ac_int_represent> { + typedef ac_int type; +}; +} // namespace ac + +namespace ac_private { +template struct rt_ac_int_T> { + typedef ac_int i2_t; + template struct op1 { + typedef ac_int i_t; + typedef typename i_t::template rt::mult mult; + typedef typename i_t::template rt::plus plus; + typedef typename i_t::template rt::minus minus; + typedef typename i2_t::template rt::minus minus2; + typedef typename i_t::template rt::logic logic; + typedef typename i_t::template rt::div div; + typedef typename i2_t::template rt::div div2; + typedef typename i_t::template rt::mod mod; + typedef typename i2_t::template rt::mod mod2; + }; +}; + +template struct rt_ac_int_T> { + typedef typename ac::ac_int_represent::type i2_t; + enum { W2 = i2_t::width, S2 = i2_t::sign }; + template struct op1 { + typedef ac_int i_t; + typedef typename i_t::template rt::mult mult; + typedef typename i_t::template rt::plus plus; + typedef typename i_t::template rt::minus minus; + typedef typename i2_t::template rt::minus minus2; + typedef typename i_t::template rt::logic logic; + typedef typename i_t::template rt::div div; + typedef typename i2_t::template rt::div div2; + typedef typename i_t::template rt::mod mod; + typedef typename i2_t::template rt::mod mod2; + }; +}; +} // namespace ac_private + +// Stream -------------------------------------------------------------------- +template +inline std::ostream &operator<<(std::ostream &os, const ac_int &x) { +#ifdef __EMULATION_FLOW__ + os << x.to_string(AC_DEC, S); +#endif // __EMULATION_FLOW__ + return os; +} + +// Macros for Binary Operators with Integers ----------------------------------- + +#define BIN_OP_WITH_INT(BIN_OP, C_TYPE, WI, SI, RTYPE) \ + template \ + constexpr inline typename ac_int::template rt::RTYPE \ + operator BIN_OP(C_TYPE i_op, const ac_int &op) { \ + return ac_int(i_op).operator BIN_OP(op); \ + } \ + template \ + constexpr inline typename ac_int::template rt::RTYPE \ + operator BIN_OP(const ac_int &op, C_TYPE i_op) { \ + return op.operator BIN_OP(ac_int(i_op)); \ + } + +#define REL_OP_WITH_INT(REL_OP, C_TYPE, W2, S2) \ + template \ + constexpr inline bool operator REL_OP(const ac_int &op, C_TYPE op2) { \ + return op.operator REL_OP(ac_int(op2)); \ + } \ + template \ + constexpr inline bool operator REL_OP(C_TYPE op2, const ac_int &op) { \ + return ac_int(op2).operator REL_OP(op); \ + } + +#define ASSIGN_OP_WITH_INT(ASSIGN_OP, C_TYPE, W2, S2) \ + template \ + constexpr inline ac_int &operator ASSIGN_OP(ac_int &op, \ + C_TYPE op2) { \ + return op.operator ASSIGN_OP(ac_int(op2)); \ + } + +#define OPS_WITH_INT(C_TYPE, WI, SI) \ + BIN_OP_WITH_INT(*, C_TYPE, WI, SI, mult) \ + BIN_OP_WITH_INT(+, C_TYPE, WI, SI, plus) \ + BIN_OP_WITH_INT(-, C_TYPE, WI, SI, minus) \ + BIN_OP_WITH_INT(/, C_TYPE, WI, SI, div) \ + BIN_OP_WITH_INT(%, C_TYPE, WI, SI, mod) \ + BIN_OP_WITH_INT(>>, C_TYPE, WI, SI, arg1) \ + BIN_OP_WITH_INT(<<, C_TYPE, WI, SI, arg1) \ + BIN_OP_WITH_INT(&, C_TYPE, WI, SI, logic) \ + BIN_OP_WITH_INT(|, C_TYPE, WI, SI, logic) \ + BIN_OP_WITH_INT(^, C_TYPE, WI, SI, logic) \ + \ + REL_OP_WITH_INT(==, C_TYPE, WI, SI) \ + REL_OP_WITH_INT(!=, C_TYPE, WI, SI) \ + REL_OP_WITH_INT(>, C_TYPE, WI, SI) \ + REL_OP_WITH_INT(>=, C_TYPE, WI, SI) \ + REL_OP_WITH_INT(<, C_TYPE, WI, SI) \ + REL_OP_WITH_INT(<=, C_TYPE, WI, SI) \ + \ + ASSIGN_OP_WITH_INT(+=, C_TYPE, WI, SI) \ + ASSIGN_OP_WITH_INT(-=, C_TYPE, WI, SI) \ + ASSIGN_OP_WITH_INT(*=, C_TYPE, WI, SI) \ + ASSIGN_OP_WITH_INT(/=, C_TYPE, WI, SI) \ + ASSIGN_OP_WITH_INT(%=, C_TYPE, WI, SI) \ + ASSIGN_OP_WITH_INT(>>=, C_TYPE, WI, SI) \ + ASSIGN_OP_WITH_INT(<<=, C_TYPE, WI, SI) \ + ASSIGN_OP_WITH_INT(&=, C_TYPE, WI, SI) \ + ASSIGN_OP_WITH_INT(|=, C_TYPE, WI, SI) \ + ASSIGN_OP_WITH_INT(^=, C_TYPE, WI, SI) + +// ---------------------------- End of Macros for Binary Operators with Integers + +namespace ac { +namespace ops_with_other_types { +// Mixed Operators with Integers ---------------------------------------------- +OPS_WITH_INT(bool, 1, false) +OPS_WITH_INT(char, 8, true) +OPS_WITH_INT(signed char, 8, true) +OPS_WITH_INT(unsigned char, 8, false) +OPS_WITH_INT(short, 16, true) +OPS_WITH_INT(unsigned short, 16, false) +OPS_WITH_INT(int, 32, true) +OPS_WITH_INT(unsigned int, 32, false) +OPS_WITH_INT(long, ac_private::long_w, true) +OPS_WITH_INT(unsigned long, ac_private::long_w, false) +OPS_WITH_INT(Slong, 64, true) +OPS_WITH_INT(Ulong, 64, false) +// --------------------------------------- End of Mixed Operators with Integers +} // namespace ops_with_other_types + +// Functions to fill bits + +template constexpr T bit_fill_hex(const char *str) { + T res; + res.bit_fill_hex(str); + return res; +} + +// returns bit_fill for type +// example: +// ac_int<80,false> x = ac::bit_fill< ac_int<80,false> > ((int [3]) +// {0xffffa987, 0x6543210f, 0xedcba987 }); +template +inline T bit_fill(const int (&ivec)[N], bool bigendian = true) { + T res; + res.bit_fill(ivec, bigendian); + return res; +} + +} // namespace ac + +// Mixed Operators with Pointers ---------------------------------------------- + +// Addition of ac_int and pointer +template +T *operator+(T *ptr, const ac_int &op2) { + return ptr + op2.to_int64(); +} +template +T *operator+(const ac_int &op2, T *ptr) { + return ptr + op2.to_int64(); +} +// Subtraction of ac_int from pointer +template +T *operator-(T *ptr, const ac_int &op2) { + return ptr - op2.to_int64(); +} +// --------------------------------------- End of Mixed Operators with Pointers + +using namespace ac::ops_with_other_types; + +namespace ac_intN { +/////////////////////////////////////////////////////////////////////////////// +// Predefined for ease of use +/////////////////////////////////////////////////////////////////////////////// +typedef ac_int<1, true> int1; +typedef ac_int<1, false> uint1; +typedef ac_int<2, true> int2; +typedef ac_int<2, false> uint2; +typedef ac_int<3, true> int3; +typedef ac_int<3, false> uint3; +typedef ac_int<4, true> int4; +typedef ac_int<4, false> uint4; +typedef ac_int<5, true> int5; +typedef ac_int<5, false> uint5; +typedef ac_int<6, true> int6; +typedef ac_int<6, false> uint6; +typedef ac_int<7, true> int7; +typedef ac_int<7, false> uint7; +typedef ac_int<8, true> int8; +typedef ac_int<8, false> uint8; +typedef ac_int<9, true> int9; +typedef ac_int<9, false> uint9; +typedef ac_int<10, true> int10; +typedef ac_int<10, false> uint10; +typedef ac_int<11, true> int11; +typedef ac_int<11, false> uint11; +typedef ac_int<12, true> int12; +typedef ac_int<12, false> uint12; +typedef ac_int<13, true> int13; +typedef ac_int<13, false> uint13; +typedef ac_int<14, true> int14; +typedef ac_int<14, false> uint14; +typedef ac_int<15, true> int15; +typedef ac_int<15, false> uint15; +typedef ac_int<16, true> int16; +typedef ac_int<16, false> uint16; +typedef ac_int<17, true> int17; +typedef ac_int<17, false> uint17; +typedef ac_int<18, true> int18; +typedef ac_int<18, false> uint18; +typedef ac_int<19, true> int19; +typedef ac_int<19, false> uint19; +typedef ac_int<20, true> int20; +typedef ac_int<20, false> uint20; +typedef ac_int<21, true> int21; +typedef ac_int<21, false> uint21; +typedef ac_int<22, true> int22; +typedef ac_int<22, false> uint22; +typedef ac_int<23, true> int23; +typedef ac_int<23, false> uint23; +typedef ac_int<24, true> int24; +typedef ac_int<24, false> uint24; +typedef ac_int<25, true> int25; +typedef ac_int<25, false> uint25; +typedef ac_int<26, true> int26; +typedef ac_int<26, false> uint26; +typedef ac_int<27, true> int27; +typedef ac_int<27, false> uint27; +typedef ac_int<28, true> int28; +typedef ac_int<28, false> uint28; +typedef ac_int<29, true> int29; +typedef ac_int<29, false> uint29; +typedef ac_int<30, true> int30; +typedef ac_int<30, false> uint30; +typedef ac_int<31, true> int31; +typedef ac_int<31, false> uint31; +typedef ac_int<32, true> int32; +typedef ac_int<32, false> uint32; +typedef ac_int<33, true> int33; +typedef ac_int<33, false> uint33; +typedef ac_int<34, true> int34; +typedef ac_int<34, false> uint34; +typedef ac_int<35, true> int35; +typedef ac_int<35, false> uint35; +typedef ac_int<36, true> int36; +typedef ac_int<36, false> uint36; +typedef ac_int<37, true> int37; +typedef ac_int<37, false> uint37; +typedef ac_int<38, true> int38; +typedef ac_int<38, false> uint38; +typedef ac_int<39, true> int39; +typedef ac_int<39, false> uint39; +typedef ac_int<40, true> int40; +typedef ac_int<40, false> uint40; +typedef ac_int<41, true> int41; +typedef ac_int<41, false> uint41; +typedef ac_int<42, true> int42; +typedef ac_int<42, false> uint42; +typedef ac_int<43, true> int43; +typedef ac_int<43, false> uint43; +typedef ac_int<44, true> int44; +typedef ac_int<44, false> uint44; +typedef ac_int<45, true> int45; +typedef ac_int<45, false> uint45; +typedef ac_int<46, true> int46; +typedef ac_int<46, false> uint46; +typedef ac_int<47, true> int47; +typedef ac_int<47, false> uint47; +typedef ac_int<48, true> int48; +typedef ac_int<48, false> uint48; +typedef ac_int<49, true> int49; +typedef ac_int<49, false> uint49; +typedef ac_int<50, true> int50; +typedef ac_int<50, false> uint50; +typedef ac_int<51, true> int51; +typedef ac_int<51, false> uint51; +typedef ac_int<52, true> int52; +typedef ac_int<52, false> uint52; +typedef ac_int<53, true> int53; +typedef ac_int<53, false> uint53; +typedef ac_int<54, true> int54; +typedef ac_int<54, false> uint54; +typedef ac_int<55, true> int55; +typedef ac_int<55, false> uint55; +typedef ac_int<56, true> int56; +typedef ac_int<56, false> uint56; +typedef ac_int<57, true> int57; +typedef ac_int<57, false> uint57; +typedef ac_int<58, true> int58; +typedef ac_int<58, false> uint58; +typedef ac_int<59, true> int59; +typedef ac_int<59, false> uint59; +typedef ac_int<60, true> int60; +typedef ac_int<60, false> uint60; +typedef ac_int<61, true> int61; +typedef ac_int<61, false> uint61; +typedef ac_int<62, true> int62; +typedef ac_int<62, false> uint62; +typedef ac_int<63, true> int63; +typedef ac_int<63, false> uint63; +} // namespace ac_intN + +#ifndef AC_NOT_USING_INTN +using namespace ac_intN; +#endif + +/////////////////////////////////////////////////////////////////////////////// + +// Global templatized functions for easy initialization to special values +template +constexpr ac_int value(ac_int) { + ac_int r = 0; + return r.template set_val(); +} +// forward declaration, otherwise GCC errors when calling init_array +template +constexpr ac_fixed value(ac_fixed); + +#define SPECIAL_VAL_FOR_INTS_DC(C_TYPE, WI, SI) \ + template <> inline C_TYPE value(C_TYPE) { \ + C_TYPE x = 0; \ + return x; \ + } + +// -- C int types +// ----------------------------------------------------------------- +#define SPECIAL_VAL_FOR_INTS(C_TYPE, WI, SI) \ + template constexpr C_TYPE value(C_TYPE); \ + template <> constexpr C_TYPE value(C_TYPE) { return (C_TYPE)0; } \ + SPECIAL_VAL_FOR_INTS_DC(C_TYPE, WI, SI) \ + template <> constexpr C_TYPE value(C_TYPE) { \ + return (C_TYPE)1; \ + } \ + template <> constexpr C_TYPE value(C_TYPE) { \ + return (C_TYPE)(SI ? ~((C_TYPE)1 << (WI - 1)) : (C_TYPE)-1); \ + } \ + template <> constexpr C_TYPE value(C_TYPE) { \ + return (C_TYPE)(SI ? (C_TYPE)1 << (WI - 1) : 0); \ + } + +SPECIAL_VAL_FOR_INTS(bool, 1, false) +SPECIAL_VAL_FOR_INTS(char, 8, true) +SPECIAL_VAL_FOR_INTS(signed char, 8, true) +SPECIAL_VAL_FOR_INTS(unsigned char, 8, false) +SPECIAL_VAL_FOR_INTS(short, 16, true) +SPECIAL_VAL_FOR_INTS(unsigned short, 16, false) +SPECIAL_VAL_FOR_INTS(int, 32, true) +SPECIAL_VAL_FOR_INTS(unsigned int, 32, false) +SPECIAL_VAL_FOR_INTS(long, ac_private::long_w, true) +SPECIAL_VAL_FOR_INTS(unsigned long, ac_private::long_w, false) +SPECIAL_VAL_FOR_INTS(Slong, 64, true) +SPECIAL_VAL_FOR_INTS(Ulong, 64, false) + +#define INIT_ARRAY_SPECIAL_VAL_FOR_INTS(C_TYPE) \ + template inline bool init_array(C_TYPE *a, int n) { \ + C_TYPE t = value(*a); \ + for (int i = 0; i < n; i++) \ + a[i] = t; \ + return true; \ + } + +namespace ac { +// PUBLIC FUNCTIONS +// function to initialize (or uninitialize) arrays +template +inline bool init_array(ac_int *a, int n) { + ac_int t = value(*a); + for (int i = 0; i < n; i++) + a[i] = t; + return true; +} + +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(bool) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(char) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(signed char) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(unsigned char) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(signed short) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(unsigned short) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(signed int) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(unsigned int) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(signed long) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(unsigned long) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(signed long long) +INIT_ARRAY_SPECIAL_VAL_FOR_INTS(unsigned long long) +} // namespace ac + +#ifdef __AC_NAMESPACE +} +#endif diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/third-party-programs.txt b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/third-party-programs.txt new file mode 100644 index 0000000000..90daff458d --- /dev/null +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/third-party-programs.txt @@ -0,0 +1,253 @@ +oneAPI Code Samples - Third Party Programs File + +This file contains the list of third party software ("third party programs") +contained in the Intel software and their required notices and/or license +terms. This third party software, even if included with the distribution of the +Intel software, may be governed by separate license terms, including without +limitation, third party license terms, other Intel software license terms, and +open source software license terms. These separate license terms govern your use +of the third party programs as set forth in the “third-party-programs.txt” or +other similarly named text file. + +Third party programs and their corresponding required notices and/or license +terms are listed below. + +-------------------------------------------------------------------------------- + +1. Nothings STB Libraries + +stb/LICENSE + + This software is available under 2 licenses -- choose whichever you prefer. + ------------------------------------------------------------------------------ + ALTERNATIVE A - MIT License + Copyright (c) 2017 Sean Barrett + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is furnished to do + so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + ------------------------------------------------------------------------------ + ALTERNATIVE B - Public Domain (www.unlicense.org) + This is free and unencumbered software released into the public domain. + Anyone is free to copy, modify, publish, use, compile, sell, or distribute this + software, either in source code form or as a compiled binary, for any purpose, + commercial or non-commercial, and by any means. + In jurisdictions that recognize copyright laws, the author or authors of this + software dedicate any and all copyright interest in the software to the public + domain. We make this dedication for the benefit of the public at large and to + the detriment of our heirs and successors. We intend this dedication to be an + overt act of relinquishment in perpetuity of all present and future rights to + this software under copyright law. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- + +2. FGPA example designs-gzip + + SDL2.0 + +zlib License + + + 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. + + +-------------------------------------------------------------------------------- + +3. Nbody + (c) 2019 Fabio Baruffa + + Plotly.js + Copyright (c) 2020 Plotly, Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +© 2020 GitHub, Inc. + +-------------------------------------------------------------------------------- + +4. GNU-EFI + Copyright (c) 1998-2000 Intel Corporation + +The files in the "lib" and "inc" subdirectories are using the EFI Application +Toolkit distributed by Intel at http://developer.intel.com/technology/efi + +This code is covered by the following agreement: + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. THE EFI SPECIFICATION AND ALL OTHER INFORMATION +ON THIS WEB SITE ARE PROVIDED "AS IS" WITH NO WARRANTIES, AND ARE SUBJECT +TO CHANGE WITHOUT NOTICE. + +-------------------------------------------------------------------------------- + +5. Edk2 + Copyright (c) 2019, Intel Corporation. All rights reserved. + + Edk2 Basetools + Copyright (c) 2019, Intel Corporation. All rights reserved. + +SPDX-License-Identifier: BSD-2-Clause-Patent + +-------------------------------------------------------------------------------- + +6. Heat Transmission + +GNU LESSER GENERAL PUBLIC LICENSE +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. + +0. Additional Definitions. +As used herein, “this License” refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL” refers to version 3 of the GNU General Public License. + +“The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. + +An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. + +A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”. + +The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. + +The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. + +1. Exception to Section 3 of the GNU GPL. +You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. + +2. Conveying Modified Versions. +If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: + +a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or +b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. +3. Object Code Incorporating Material from Library Header Files. +The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: + +a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. +b) Accompany the object code with a copy of the GNU GPL and this license document. +4. Combined Works. +You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: + +a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. +b) Accompany the Combined Work with a copy of the GNU GPL and this license document. +c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. +d) Do one of the following: +0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. +1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. +e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) +5. Combined Libraries. +You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: + +a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. +b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. +6. Revised Versions of the GNU Lesser General Public License. +The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. + +-------------------------------------------------------------------------------- +7. Rodinia + Copyright (c)2008-2011 University of Virginia +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted without royalty fees or other restrictions, provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the University of Virginia, the Dept. of Computer Science, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF VIRGINIA OR THE SOFTWARE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +If you use this software or a modified version of it, please cite the most relevant among the following papers: + + - M. A. Goodrum, M. J. Trotter, A. Aksel, S. T. Acton, and K. Skadron. Parallelization of Particle Filter Algorithms. In Proceedings of the 3rd Workshop on Emerging Applications and Many-core Architecture (EAMA), in conjunction with the IEEE/ACM International +Symposium on Computer Architecture (ISCA), June 2010. + + - S. Che, M. Boyer, J. Meng, D. Tarjan, J. W. Sheaffer, Sang-Ha Lee and K. Skadron. +Rodinia: A Benchmark Suite for Heterogeneous Computing. IEEE International Symposium +on Workload Characterization, Oct 2009. + +- J. Meng and K. Skadron. "Performance Modeling and Automatic Ghost Zone Optimization +for Iterative Stencil Loops on GPUs." In Proceedings of the 23rd Annual ACM International +Conference on Supercomputing (ICS), June 2009. + +- L.G. Szafaryn, K. Skadron and J. Saucerman. "Experiences Accelerating MATLAB Systems +Biology Applications." in Workshop on Biomedicine in Computing (BiC) at the International +Symposium on Computer Architecture (ISCA), June 2009. + +- M. Boyer, D. Tarjan, S. T. Acton, and K. Skadron. "Accelerating Leukocyte Tracking using CUDA: +A Case Study in Leveraging Manycore Coprocessors." In Proceedings of the International Parallel +and Distributed Processing Symposium (IPDPS), May 2009. + +- S. Che, M. Boyer, J. Meng, D. Tarjan, J. W. Sheaffer, and K. Skadron. "A Performance +Study of General Purpose Applications on Graphics Processors using CUDA" Journal of +Parallel and Distributed Computing, Elsevier, June 2008. + +-------------------------------------------------------------------------------- +Other names and brands may be claimed as the property of others. + +-------------------------------------------------------------------------------- \ No newline at end of file From f747667d8268d709f7d4bd3bb8f978cdd35e63f7 Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Tue, 5 Oct 2021 08:57:21 -0700 Subject: [PATCH 02/11] add guid, clang format, remove template keyword, add vcxproj flag --- .../Features/ac_types/ac_int/ac_int.vcxproj | 4 ++-- .../Features/ac_types/ac_int/sample.json | 2 +- .../Features/ac_types/ac_int/src/ac_int.cpp | 17 ++++++++++------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.vcxproj b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.vcxproj index e5afaf4f34..1e31ad82cd 100755 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.vcxproj +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_int.vcxproj @@ -104,7 +104,7 @@ true pch.h true - -DFPGA_EMULATOR %(AdditionalOptions) + -DFPGA_EMULATOR /Qactypes %(AdditionalOptions) $(IntDir)ac_int.obj $(ONEAPI_ROOT)dev-utilities\latest\include @@ -143,7 +143,7 @@ true pch.h true - -DFPGA_EMULATOR %(AdditionalOptions) + -DFPGA_EMULATOR /Qactypes %(AdditionalOptions) $(IntDir)ac_int.obj $(ONEAPI_ROOT)dev-utilities\latest\include diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/sample.json b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/sample.json index 35e8bda2de..d49bf55b3b 100755 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/sample.json +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/sample.json @@ -1,5 +1,5 @@ { - "guid": "D661A5C2-5FE0-40F2-BFE7-70E3BA60F088", + "guid": "394849F1-EDB6-4234-9276-B5A2A9DD6D5A", "name": "AC Int", "categories": ["Toolkit/oneAPI Direct Programming/DPC++ FPGA/Tutorials/Features"], "description": "An Intel® FPGA tutorial demonstrating how to use the Algorithmic C Integer (AC Int) ", diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp index d21b904108..3f5f0c9a02 100644 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp @@ -3,11 +3,12 @@ // // SPDX-License-Identifier: MIT // ============================================================= -// clang format-off + +// clang-format off #include #include #include -// clang format-on +// clang-format on // dpc_common.hpp can be found in the dev-utilities include folder. // e.g., $ONEAPI_ROOT/dev-utilities//include/dpc_common.hpp @@ -17,7 +18,8 @@ using namespace sycl; using namespace std; // Forward declare the kernel name in the global scope. -// This FPGA best practice reduces name mangling in the optimization reports. +// This is a FPGA best practice that reduces name mangling in the optimization +// reports. class Add; class Div; class Mult; @@ -74,7 +76,8 @@ void TestMult(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int28 &c) { q.wait(); } -void TestShiftLeft(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int14 &c) { +void TestShiftLeft(queue &q, const ac_int14 &a, const ac_int14 &b, + ac_int14 &c) { buffer inp1(&a, 1); buffer inp2(&b, 1); buffer result(&c, 1); @@ -91,7 +94,7 @@ void TestShiftLeft(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int14 &c) // Note how the shift amount is specified with a smaller ac_int than in // TestShiftLeft above void TestEfficientShiftLeft(queue &q, const ac_int14 &a, const ac_uint4 &b, - ac_int14 &c) { + ac_int14 &c) { buffer inp1(&a, 1); buffer inp2(&b, 1); buffer result(&c, 1); @@ -119,7 +122,7 @@ void TestGetBitSlice(queue &q, const ac_int14 &a, ac_uint4 &b, const int lsb) { accessor x{inp1, h, read_only}; accessor y{inp2, h, read_only}; accessor res{result, h, write_only}; - h.single_task([=] { res[0] = x[0].template slc<4>(y[0]); }); + h.single_task([=] { res[0] = x[0].slc<4>(y[0]); }); }); q.wait(); } @@ -140,7 +143,7 @@ void TestSetBitSlice(queue &q, ac_int14 &a, const ac_int4 &b, int lsb) { // The set_slc method does not need to have a width specified as a // template argument since the width is inferred from the width of the // argument x - x[0].template set_slc(lsb_accessor[0], y[0]); + x[0].set_slc(lsb_accessor[0], y[0]); // Bits can also be individually set as follows: x[0][3] = 0; From 0f2484c804ab4c1e1d3e944670af2e9b9668999b Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Tue, 5 Oct 2021 08:58:47 -0700 Subject: [PATCH 03/11] clang format style google --- .../Features/ac_types/ac_int/src/ac_int.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp index 3f5f0c9a02..bb9cae2e28 100644 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp @@ -215,8 +215,8 @@ int main() { // Test divider { t1 = rand() & ((1 << 13) - 1); - t2 = rand() % 50; // Use a small value for the divisor so that the result - // is not 0 or 1 + t2 = rand() % 50; // Use a small value for the divisor so that the result + // is not 0 or 1 ac_int14 a = t1; ac_int14 b = t2; ac_int15 c; @@ -236,7 +236,7 @@ int main() { // Shift operator { t1 = rand() & ((1 << 13) - 1); - t2 = rand() % 8; // Use a small value for the shift + t2 = rand() % 8; // Use a small value for the shift ac_int14 a = t1; ac_int14 b = t2; ac_int14 c; @@ -247,8 +247,7 @@ int main() { // Note that the left shift in ac_int is logical so to check the result, // we need to do a little bit manipulation to get the correct signed value int c_golden = (t1 << t2) & ((1 << 14) - 1); - if ((t1 << t2) & (1 << 13)) - c_golden |= (~((1 << 14) - 1)); + if ((t1 << t2) & (1 << 13)) c_golden |= (~((1 << 14) - 1)); if (c != c_golden) { passed = false; std::cout << "left_shift failed\n"; @@ -260,7 +259,7 @@ int main() { // Efficient left shift operator { t1 = rand() & ((1 << 13) - 1); - t2 = rand() % 14; // Use a small value for the shift + t2 = rand() % 14; // Use a small value for the shift ac_int14 a = t1; ac_uint4 b = t2; ac_int14 c; @@ -275,8 +274,7 @@ int main() { // Note that the left shift in ac_int is logical so to check the result, // we need to do a little bit manipulation to get the correct signed value int c_golden = (t1 << t2) & ((1 << 14) - 1); - if ((t1 << t2) & (1 << 13)) - c_golden |= (~((1 << 14) - 1)); + if ((t1 << t2) & (1 << 13)) c_golden |= (~((1 << 14) - 1)); if (c != c_golden) { passed = false; std::cout << "efficient_left_shift failed\n"; From f8799b4971c7568c37298ca84957d9619668375c Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Tue, 5 Oct 2021 09:13:13 -0700 Subject: [PATCH 04/11] add try catch block --- .../Features/ac_types/ac_int/src/ac_int.cpp | 308 +++++++++--------- 1 file changed, 163 insertions(+), 145 deletions(-) diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp index bb9cae2e28..75e7748024 100644 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp @@ -161,164 +161,182 @@ int main() { #else ext::intel::fpga_selector selector; #endif - - // create the SYCL device queue - queue q(selector, dpc_common::exception_handler); - bool passed = true; - // Initialize two random ints - int t1 = rand(); - int t2 = rand(); - // Truncate each of the two ints to 13 bits. The 14th bit is the sign bit. - // In this testbench, even though the datatypes are signed, we will be - // storing unsigned values to make the testing process simpler. - t1 &= (1 << 13) - 1; - t2 &= (1 << 13) - 1; - - std::cout << "Arithmetic Operations:\n"; - // Test adder - { - // ac_int offers type casting from and to native datatypes - ac_int14 a = t1; - ac_int14 b = t2; - ac_int15 c; - TestAdd(q, a, b, c); - int c_golden = t1 + t2; - // We can check the result of the ac_int addition with the native C int - // addition - if (c != c_golden) { - passed = false; - std::cout << "Addition failed\n"; + + try { + // create the SYCL device queue + queue q(selector, dpc_common::exception_handler); + + // Initialize two random ints + int t1 = rand(); + int t2 = rand(); + // Truncate each of the two ints to 13 bits. The 14th bit is the sign bit. + // In this testbench, even though the datatypes are signed, we will be + // storing unsigned values to make the testing process simpler. + t1 &= (1 << 13) - 1; + t2 &= (1 << 13) - 1; + + std::cout << "Arithmetic Operations:\n"; + // Test adder + { + // ac_int offers type casting from and to native datatypes + ac_int14 a = t1; + ac_int14 b = t2; + ac_int15 c; + TestAdd(q, a, b, c); + int c_golden = t1 + t2; + // We can check the result of the ac_int addition with the native C int + // addition + if (c != c_golden) { + passed = false; + std::cout << "Addition failed\n"; + } + std::cout << "ac_int: " << a << " + " << b << " = " << c << "\n"; + std::cout << "int: " << t1 << " + " << t2 << " = " << c_golden << "\n"; } - std::cout << "ac_int: " << a << " + " << b << " = " << c << "\n"; - std::cout << "int: " << t1 << " + " << t2 << " = " << c_golden << "\n"; - } - // Test multiplier - { - t1 = rand() & ((1 << 13) - 1); - ac_int14 a = t1; - ac_int14 b = t2; - ac_int28 c; - TestMult(q, a, b, c); - int c_golden = t1 * t2; - // We can check the result of the ac_int multiplication with the native C - // int multiplication - if (c != c_golden) { - passed = false; - std::cout << "Multiplier failed\n"; + // Test multiplier + { + t1 = rand() & ((1 << 13) - 1); + ac_int14 a = t1; + ac_int14 b = t2; + ac_int28 c; + TestMult(q, a, b, c); + int c_golden = t1 * t2; + // We can check the result of the ac_int multiplication with the native C + // int multiplication + if (c != c_golden) { + passed = false; + std::cout << "Multiplier failed\n"; + } + std::cout << "ac_int: " << a << " * " << b << " = " << c << "\n"; + std::cout << "int: " << t1 << " * " << t2 << " = " << c_golden << "\n"; } - std::cout << "ac_int: " << a << " * " << b << " = " << c << "\n"; - std::cout << "int: " << t1 << " * " << t2 << " = " << c_golden << "\n"; - } - // Test divider - { - t1 = rand() & ((1 << 13) - 1); - t2 = rand() % 50; // Use a small value for the divisor so that the result - // is not 0 or 1 - ac_int14 a = t1; - ac_int14 b = t2; - ac_int15 c; - TestDiv(q, a, b, c); - int c_golden = t1 / t2; - // We can check the result of the ac_int division with the native C - // int division - if (c != c_golden) { - passed = false; - std::cout << "divider failed\n"; + // Test divider + { + t1 = rand() & ((1 << 13) - 1); + t2 = rand() % 50; // Use a small value for the divisor so that the result + // is not 0 or 1 + ac_int14 a = t1; + ac_int14 b = t2; + ac_int15 c; + TestDiv(q, a, b, c); + int c_golden = t1 / t2; + // We can check the result of the ac_int division with the native C + // int division + if (c != c_golden) { + passed = false; + std::cout << "divider failed\n"; + } + std::cout << "ac_int: " << a << " / " << b << " = " << c << "\n"; + std::cout << "int: " << t1 << " / " << t2 << " = " << c_golden << "\n"; } - std::cout << "ac_int: " << a << " / " << b << " = " << c << "\n"; - std::cout << "int: " << t1 << " / " << t2 << " = " << c_golden << "\n"; - } - std::cout << "\nBitwise Operations:\n"; - // Shift operator - { - t1 = rand() & ((1 << 13) - 1); - t2 = rand() % 8; // Use a small value for the shift - ac_int14 a = t1; - ac_int14 b = t2; - ac_int14 c; - // b can be positive or negative. If (b > 0), a will be shifted to the - // left. Else, a will be shifted to the right - TestShiftLeft(q, a, b, c); - - // Note that the left shift in ac_int is logical so to check the result, - // we need to do a little bit manipulation to get the correct signed value - int c_golden = (t1 << t2) & ((1 << 14) - 1); - if ((t1 << t2) & (1 << 13)) c_golden |= (~((1 << 14) - 1)); - if (c != c_golden) { - passed = false; - std::cout << "left_shift failed\n"; + std::cout << "\nBitwise Operations:\n"; + // Shift operator + { + t1 = rand() & ((1 << 13) - 1); + t2 = rand() % 8; // Use a small value for the shift + ac_int14 a = t1; + ac_int14 b = t2; + ac_int14 c; + // b can be positive or negative. If (b > 0), a will be shifted to the + // left. Else, a will be shifted to the right + TestShiftLeft(q, a, b, c); + + // Note that the left shift in ac_int is logical so to check the result, + // we need to do a little bit manipulation to get the correct signed value + int c_golden = (t1 << t2) & ((1 << 14) - 1); + if ((t1 << t2) & (1 << 13)) c_golden |= (~((1 << 14) - 1)); + if (c != c_golden) { + passed = false; + std::cout << "left_shift failed\n"; + } + std::cout << "ac_int: " << a << " << " << b << " = " << c << "\n"; + std::cout << "int: " << t1 << " << " << t2 << " = " << c_golden + << "\n"; } - std::cout << "ac_int: " << a << " << " << b << " = " << c << "\n"; - std::cout << "int: " << t1 << " << " << t2 << " = " << c_golden << "\n"; - } - // Efficient left shift operator - { - t1 = rand() & ((1 << 13) - 1); - t2 = rand() % 14; // Use a small value for the shift - ac_int14 a = t1; - ac_uint4 b = t2; - ac_int14 c; - // b is always positive in this case. This shift is more efficient in HW - // than the one above. If the direction of the shift is known at compile - // time, this is recommended. Note that the two datatypes need not be the - // same. Note that the datatype of b here is just 4 bits since 4 bits can - // completely contain the value of the full width of a. This will generate - // a more efficient datapath. - TestEfficientShiftLeft(q, a, b, c); - - // Note that the left shift in ac_int is logical so to check the result, - // we need to do a little bit manipulation to get the correct signed value - int c_golden = (t1 << t2) & ((1 << 14) - 1); - if ((t1 << t2) & (1 << 13)) c_golden |= (~((1 << 14) - 1)); - if (c != c_golden) { - passed = false; - std::cout << "efficient_left_shift failed\n"; + // Efficient left shift operator + { + t1 = rand() & ((1 << 13) - 1); + t2 = rand() % 14; // Use a small value for the shift + ac_int14 a = t1; + ac_uint4 b = t2; + ac_int14 c; + // b is always positive in this case. This shift is more efficient in HW + // than the one above. If the direction of the shift is known at compile + // time, this is recommended. Note that the two datatypes need not be the + // same. Note that the datatype of b here is just 4 bits since 4 bits can + // completely contain the value of the full width of a. This will generate + // a more efficient datapath. + TestEfficientShiftLeft(q, a, b, c); + + // Note that the left shift in ac_int is logical so to check the result, + // we need to do a little bit manipulation to get the correct signed value + int c_golden = (t1 << t2) & ((1 << 14) - 1); + if ((t1 << t2) & (1 << 13)) c_golden |= (~((1 << 14) - 1)); + if (c != c_golden) { + passed = false; + std::cout << "efficient_left_shift failed\n"; + } + std::cout << "ac_int: " << a << " << " << b << " = " << c << "\n"; + std::cout << "int: " << t1 << " << " << t2 << " = " << c_golden + << "\n"; } - std::cout << "ac_int: " << a << " << " << b << " = " << c << "\n"; - std::cout << "int: " << t1 << " << " << t2 << " = " << c_golden << "\n"; - } - // Slice operations - { - t1 = rand() & ((1 << 13) - 1); - ac_int14 a = t1; - ac_uint4 b; - TestGetBitSlice(q, a, b, 5); - - // Replicate the same operation using bitwise operation - t2 = (t1 >> 5) & 0xF; - // Compare the CPU result with the FPGA result - if (b != t2) { - passed = false; - std::cout << "GetBitSlice failed\n"; + // Slice operations + { + t1 = rand() & ((1 << 13) - 1); + ac_int14 a = t1; + ac_uint4 b; + TestGetBitSlice(q, a, b, 5); + + // Replicate the same operation using bitwise operation + t2 = (t1 >> 5) & 0xF; + // Compare the CPU result with the FPGA result + if (b != t2) { + passed = false; + std::cout << "GetBitSlice failed\n"; + } + std::cout << "(" << a << ").slc<4>(5) = " << b << "\n"; + + int t2 = 10; + ac_uint4 d = t2; + ac_int14 c = a; + // Sets the bits (3, 2, 1, 0) as 0 and sets bits (9, 8, 7, 6) with d + TestSetBitSlice(q, c, d, 6); + + // Replicate the same operation using bitwise operation + int mask = -1; + mask ^= (0xF << 6) | (0xF); + int mask2 = (t2 << 6); + int t3 = (t1 & mask) | mask2; + // Compare the CPU result with the FPGA result + if (c != t3) { + passed = false; + std::cout << "SetBitSlice failed\n"; + } + std::cout << "Running these two ops on " << a << "\n"; + std::cout << "\t(" << a << ").set_slc(6, " << d << ") = " << c << "\n"; + std::cout << "\ta[3] = 0; a[2] = 0; a[1] = 0; a[0] = 0;\n"; + std::cout << "\tResult = " << c << "\n"; } - std::cout << "(" << a << ").slc<4>(5) = " << b << "\n"; - - int t2 = 10; - ac_uint4 d = t2; - ac_int14 c = a; - // Sets the bits (3, 2, 1, 0) as 0 and sets bits (9, 8, 7, 6) with d - TestSetBitSlice(q, c, d, 6); - - // Replicate the same operation using bitwise operation - int mask = -1; - mask ^= (0xF << 6) | (0xF); - int mask2 = (t2 << 6); - int t3 = (t1 & mask) | mask2; - // Compare the CPU result with the FPGA result - if (c != t3) { - passed = false; - std::cout << "SetBitSlice failed\n"; + + } catch (sycl::exception const &e) { + // Catches exceptions in the host code + std::cerr << "Caught a SYCL host exception:\n" << e.what() << "\n"; + + // Most likely the runtime couldn't find FPGA hardware! + if (e.get_cl_code() == CL_DEVICE_NOT_FOUND) { + std::cerr << "If you are targeting an FPGA, please ensure that your " + "system has a correctly configured FPGA board.\n"; + std::cerr << "Run sys_check in the oneAPI root directory to verify.\n"; + std::cerr << "If you are targeting the FPGA emulator, compile with " + "-DFPGA_EMULATOR.\n"; } - std::cout << "Running these two ops on " << a << "\n"; - std::cout << "\t(" << a << ").set_slc(6, " << d << ") = " << c << "\n"; - std::cout << "\ta[3] = 0; a[2] = 0; a[1] = 0; a[0] = 0;\n"; - std::cout << "\tResult = " << c << "\n"; + std::terminate(); } if (passed) { From 96fa3998400fb4732a6aba345c02a82cf68d0bed Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Tue, 5 Oct 2021 10:57:30 -0700 Subject: [PATCH 05/11] remove unused targets from cmake file --- .../Features/ac_types/ac_int/src/CMakeLists.txt | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt index 1b11ed6954..0138e5a781 100755 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt @@ -3,10 +3,8 @@ set(SOURCE_FILE ac_int.cpp) set(TARGET_NAME ac_int) -set(TARGET_NAME_REG ac_int_registered) set(EMULATOR_TARGET ${TARGET_NAME}.fpga_emu) set(FPGA_TARGET ${TARGET_NAME}.fpga) -set(FPGA_TARGET_REG ${TARGET_NAME_REG}.fpga) # FPGA board selection if(NOT DEFINED FPGA_BOARD) @@ -57,16 +55,12 @@ add_custom_target(fpga_emu DEPENDS ${EMULATOR_TARGET}) # To compile manually: # dpcpp -fintelfpga ${AC_TYPES_FLAG} -Xshardware -Xsboard= -fsycl-link=early ac_int.cpp -o ac_int_report.a set(FPGA_EARLY_IMAGE ${TARGET_NAME}_report.a) -set(FPGA_EARLY_IMAGE_REG ${TARGET_NAME_REG}_report.a) # The compile output is not an executable, but an intermediate compilation result unique to DPC++. add_executable(${FPGA_EARLY_IMAGE} ${SOURCE_FILE}) -add_executable(${FPGA_EARLY_IMAGE_REG} ${SOURCE_FILE}) -add_custom_target(report DEPENDS ${FPGA_EARLY_IMAGE} ${FPGA_EARLY_IMAGE_REG}) +add_custom_target(report DEPENDS ${FPGA_EARLY_IMAGE}) set_target_properties(${FPGA_EARLY_IMAGE} PROPERTIES COMPILE_FLAGS "${HARDWARE_COMPILE_FLAGS}") set_target_properties(${FPGA_EARLY_IMAGE} PROPERTIES LINK_FLAGS "${HARDWARE_LINK_FLAGS} -fsycl-link=early") -set_target_properties(${FPGA_EARLY_IMAGE_REG} PROPERTIES COMPILE_FLAGS "${HARDWARE_COMPILE_FLAGS} -DUSE_ac_int") -set_target_properties(${FPGA_EARLY_IMAGE_REG} PROPERTIES LINK_FLAGS "${HARDWARE_LINK_FLAGS} -fsycl-link=early") # fsycl-link=early stops the compiler after RTL generation, before invoking Quartus® ############################################################################### @@ -78,12 +72,8 @@ set_target_properties(${FPGA_EARLY_IMAGE_REG} PROPERTIES LINK_FLAGS "${HARDWARE_ # [compile] dpcpp -fintelfpga ${AC_TYPES_FLAG} -o ac_int.cpp.o -c ac_int.cpp # [link] dpcpp -fintelfpga ${AC_TYPES_FLAG} -Xshardware -Xsboard= ac_int.cpp.o -o ac_int.fpga add_executable(${FPGA_TARGET} EXCLUDE_FROM_ALL ${SOURCE_FILE}) -add_executable(${FPGA_TARGET_REG} EXCLUDE_FROM_ALL ${SOURCE_FILE}) -add_custom_target(fpga DEPENDS ${FPGA_TARGET} ${FPGA_TARGET_REG}) +add_custom_target(fpga DEPENDS ${FPGA_TARGET}) set_target_properties(${FPGA_TARGET} PROPERTIES COMPILE_FLAGS "${HARDWARE_COMPILE_FLAGS}") set_target_properties(${FPGA_TARGET} PROPERTIES LINK_FLAGS "${HARDWARE_LINK_FLAGS} -reuse-exe=${CMAKE_BINARY_DIR}/${FPGA_TARGET}") # The -reuse-exe flag enables rapid recompilation of host-only code changes. -# See DPC++FPGA/GettingStarted/fast_recompile for details. -set_target_properties(${FPGA_TARGET_REG} PROPERTIES COMPILE_FLAGS "${HARDWARE_COMPILE_FLAGS} -DUSE_ac_int") -set_target_properties(${FPGA_TARGET_REG} PROPERTIES LINK_FLAGS "${HARDWARE_LINK_FLAGS} -reuse-exe=${CMAKE_BINARY_DIR}/${FPGA_TARGET_REG}") - +# See DPC++FPGA/GettingStarted/fast_recompile for details. \ No newline at end of file From 650c39528fcda4c0da61ca853aa65e025cba0ceb Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Tue, 5 Oct 2021 14:35:11 -0700 Subject: [PATCH 06/11] remove unnecessary file --- .../Features/ac_types/ac_int/src/ac_int.hpp | 2509 ----------------- 1 file changed, 2509 deletions(-) delete mode 100644 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.hpp diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.hpp b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.hpp deleted file mode 100644 index 26044057a7..0000000000 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.hpp +++ /dev/null @@ -1,2509 +0,0 @@ -//===----------------------------------------------------------------------===// -// Algorithmic C (tm) Datatypes -// -// Software Version: 3.7 -// -// Release Date : Wed Jun 1 13:21:52 PDT 2016 -// Release Type : Production Release -// Release Build : 3.7.0 -// -// Copyright 2004-2016, Mentor Graphics Corporation, -// -// All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -// implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This file was modified by the Intel High Level Design team to -// generate efficient hardware for the Intel High Level Synthesis -// compiler. The API remains the same as defined by Mentor Graphics -// in their documentation for the ac_int data-type. -// -// Source: ac_int.hpp -// Description: fast arbitrary-length bit-accurate integer types: -// - unsigned integer of length W: ac_int -// - signed integer of length W: ac_int -// Original Author: Andres Takach, Ph.D. -// Modified by: Vince Bridgers, Thor Thayer, Ajaykumar Kannan -// -// Notes: -// - Most frequent migration issues: -// - need to cast to common type when using question mark operator: -// (a < 0) ? -a : a; // a is ac_int -// change to: -// (a < 0) ? -a : (ac_int) a; -// or -// (a < 0) ? (ac_int) -a : (ac_int) a; -// -// - left shift is not arithmetic ("a< b = a << 1; // a is ac_int -// is not equivalent to b=2*a. In order to get 2*a behavior change to: -// ac_int b = (ac_int)a << 1; -// -// - only static length read/write slices are supported: -// - read: x.slc<4>(k) => -// returns ac_int for 4-bit slice x(4+k-1 DOWNTO k) -// - write: x.set_slc(k,y) = writes bits of y to x starting at index k - -#pragma once - -#define AC_VERSION 3 -#define AC_VERSION_MINOR 7 - -#ifndef __cplusplus -#error C++ is required to include this header file -#endif - -#if __cplusplus < 201402L -#error The C++14 standard or newer is required to include this header file -#endif - -// for safety -#if (defined(W) || defined(I) || defined(S) || defined(W2) || defined(I2) || \ - defined(S2)) -#error One or more of the following is defined: W, I, S, W2, I2, S2. Definition conflicts with their usage as template parameters. -#error DO NOT use defines before including third party header files. -#endif - -#if (defined(true) || defined(false)) -#error One or more of the following is defined: true, false. They are keywords in C++ of type bool. Defining them as 1 and 0, may result in subtle compilation problems. -#error DO NOT use defines before including third party header files. -#endif - -// The macro defined in this block will be used to selectively enable code that -// is meant for the following compile flows: -// 1. Any flow that doesn't set __SYCL_DEVICE_ONLY__ , example: host code -// compilation when compiling the kernels for any offload device. -// 2. FPGA emulation compile flow. -// 3. Intel HLS Compiler's x86 compile flow. -#if defined(HLS_X86) || \ - (defined(__SYCL_COMPILER_VERSION) && \ - (!defined(__SYCL_DEVICE_ONLY__) || defined(FPGA_EMULATOR))) -#define __EMULATION_FLOW__ -#endif - -#if !defined(_HLS_EMBEDDED_PROFILE) -#ifndef __ASSERT_H__ -#define __ASSERT_H__ -#include -#endif -#include -#include -#include -#include -#include - -#else -#undef DEBUG_AC_INT_ERROR -#undef DEBUG_AC_INT_WARNING -#endif //_HLS_EMBEDDED_PROFILE - -#if !defined(__SYCL_COMPILER_VERSION) -#include -#endif - -// Warn if ac_int debugging flag set in sim/FPGA flows -#if (defined(DEBUG_AC_INT_ERROR) || defined(DEBUG_AC_INT_WARNING)) && defined(__EMULATION_FLOW__) -#define DEBUG_AC_INT -#if !defined(HLS_X86) -#pragma message( \ - "using ac_int debug macros (DEBUG_AC_INT_WARNING/DEBUG_AC_INT_ERROR) may result in performance degradation when compiling for FPGA.") -#endif // HLS_X86 -#endif // DEBUG_AC_INT_ERROR || DEBUG_AC_INT_WARNING - -#ifdef __AC_NAMESPACE -namespace __AC_NAMESPACE { -#endif - -#define AC_MAX(a, b) ((a) > (b) ? (a) : (b)) -#define AC_MIN(a, b) ((a) < (b) ? (a) : (b)) -#define AC_ABS(a) ((a) < 0 ? (-a) : (a)) - -#if defined(_MSC_VER) -typedef unsigned __int64 Ulong; -typedef signed __int64 Slong; -#else -typedef unsigned long long Ulong; -typedef signed long long Slong; -#endif - -enum ac_base_mode { AC_BIN = 2, AC_OCT = 8, AC_DEC = 10, AC_HEX = 16 }; -enum ac_special_val { - AC_VAL_DC, - AC_VAL_0, - AC_VAL_MIN, - AC_VAL_MAX, - AC_VAL_QUANTUM -}; - -static bool warned_undef = false; - -template class ac_int; - -namespace ac_private { - -template using ap_int = _ExtInt(Bits); -template using ap_uint = unsigned _ExtInt(Bits); - -enum { long_w = sizeof(unsigned long) * 8 }; - -// PRIVATE FUNCTIONS in namespace: for implementing ac_int/ac_fixed - -#ifdef __SYCL_COMPILER_VERSION -inline double mgc_floor(double d) { return cl::sycl::floor(d); } -#else -inline double mgc_floor(double d) { return floor(d); } -#endif - -#ifdef _HLS_EMBEDDED_PROFILE -#define AC_ASSERT(cond, msg) -#else -#define AC_ASSERT(cond, msg) \ - { \ - if (!(cond)) { \ - ac_private::ac_assert(cond, __FILE__, __LINE__, msg); \ - } \ - } -inline void ac_assert(bool condition, const char *file = 0, int line = 0, - const char *msg = 0) { -#ifdef HLS_X86 -#ifndef AC_USER_DEFINED_ASSERT - if (!condition) { - std::cerr << "Assert"; - if (file) - std::cerr << " in file " << file << ":" << line; - if (msg) - std::cerr << " " << msg; - std::cerr << std::endl; - assert(0); - } -#else - AC_USER_DEFINED_ASSERT(condition, file, line, msg); -#endif // AC_USER_DEFINED_ASSERT -#endif // HLS_X86 -} -#endif //_HLS_EMBEDDED_PROFILE - -// helper structs for statically computing log2 like functions (nbits, -// log2_floor, log2_ceil) using recursive templates -template struct s_N { - template struct s_X { - enum { - X2 = X >> N, - N_div_2 = N >> 1, - nbits = X ? (X2 ? N + (int)s_N::template s_X::nbits - : (int)s_N::template s_X::nbits) - : 0 - }; - }; -}; -template <> struct s_N<0> { - template struct s_X { - enum { nbits = !!X }; - }; -}; - -template inline double ldexpr32(double d) { - double d2 = d; - if (N < 0) - for (int i = 0; i < -N; i++) - d2 /= (Ulong)1 << 32; - else - for (int i = 0; i < N; i++) - d2 *= (Ulong)1 << 32; - return d2; -} -template <> inline double ldexpr32<0>(double d) { return d; } -template <> inline double ldexpr32<1>(double d) { return d * ((Ulong)1 << 32); } -template <> inline double ldexpr32<-1>(double d) { - return d / ((Ulong)1 << 32); -} -template <> inline double ldexpr32<2>(double d) { - return (d * ((Ulong)1 << 32)) * ((Ulong)1 << 32); -} -template <> inline double ldexpr32<-2>(double d) { - return (d / ((Ulong)1 << 32)) / ((Ulong)1 << 32); -} - -template inline double ldexpr(double d) { - return ldexpr32(N < 0 ? d / ((unsigned)1 << (-N & 31)) - : d * ((unsigned)1 << (N & 31))); -} - -template inline double ldexpr1(double d) { - return N < 0 ? d / ((unsigned)1 << (-N)) : d * ((unsigned)1 << (N)); -} - -// Xn-1, Xn-2, Xn-3, Xn-4, ...X(I+W-1)..XI.., X2, X1, X0 -// Returns ap_uint using: |---------| bits from value. -template constexpr ap_uint bit_slc(ap_uint value) { - static_assert(N >= W, ""); - constexpr int shift_v = AC_MIN(I, N - 1); - ap_uint op = (value >> (shift_v)); - ap_uint r = op; - return r; -} - -// Xn-1, Xn-2, Xn-3, Xn-4, ...X(I+W-1)..XI.., X2, X1, X0 -// Returns ap_int using: |---------| bits from value. -template constexpr ap_int bit_slc(ap_int value) { - ap_uint v = value; - return (ap_uint)(bit_slc(v)); -} - -template constexpr bool ap_less_zero(ap_uint) { return false; } - -template constexpr bool ap_less_zero(ap_int value) { - return value < static_cast>(0); -} - -// if bits [0, B-1] all 0s -template constexpr bool ap_equal_zeros_to(ap_uint value) { - ap_uint v = bit_slc(value); - return v == static_cast>(0); -} - -template constexpr bool ap_equal_zeros_to(ap_int value) { - ap_uint v = value; - return ap_equal_zeros_to(v); -} - -// Returns true if value == 0 -template constexpr bool ap_equal_zeros_to(ap_uint value) { - return ap_equal_zeros_to(value); -} - -// Returns true if value == 0 -template constexpr bool ap_equal_zeros_to(ap_int value) { - return ap_equal_zeros_to(value); -} - -// if bits [0, B-1] all 0s -template constexpr bool ap_equal_ones_to(ap_uint value) { - static_assert(N >= B, ""); - if (!B) - return true; - constexpr int B1 = AC_MAX(B, 1); - ap_uint v = bit_slc(value); - return (~v) == static_cast>(0); -} - -template constexpr bool ap_equal_ones_to(ap_int value) { - ap_uint v = value; - return ap_equal_ones_to(v); -} - -// if bits [B, N-1] are all ones -template constexpr bool ap_equal_zeros_from(ap_uint value) { - constexpr int L = AC_MAX(N - B, 1); - ap_uint v = bit_slc(value); - return v == static_cast>(0); -} - -template constexpr bool ap_equal_zeros_from(ap_int value) { - ap_uint v = value; - return ap_equal_zeros_from(v); -} - -template constexpr bool ap_equal_ones_from(ap_uint value) { - constexpr int L = AC_MAX(N - B, 1); - ap_uint v = bit_slc(value); - return (~v) == static_cast>(0); -} - -template constexpr bool ap_equal_ones_from(ap_int value) { - ap_uint v = value; - return ap_equal_ones_from(v); -} - -// Build an ap_int from double d, value is d * 2 ^ N -// Notice: in ref, it's d * 2 ^ (32 * N) -template -inline void ap_conv_from_fraction(double d, ap_int &r, bool *qb, bool *rbits, - bool *o, int *io) { - bool b = d < 0; - double d2 = b ? -d : d; - double dfloor = mgc_floor(d2); - *o = dfloor != 0.0; - d2 = d2 - dfloor; - const int shift_amount = N + 1; - const int container_length = (shift_amount + 31) / 32 * 32 + 1; - ap_int tb; - ap_uint k1; - const Ulong u64_1 = 1; - // for performance purpose, manually unroll the loop when shift_amount <= 64 - if (shift_amount <= 32) { - d2 *= u64_1 << shift_amount; - k1 = (unsigned int)mgc_floor(d2); - tb = b ? ~k1 : k1; - d2 = static_cast>(d2) - k1; - } else if (shift_amount <= 64) { - d2 *= u64_1 << 32; - unsigned int temp = (unsigned int)mgc_floor(d2); - k1 = temp; - d2 -= temp; - const int shift_next = AC_MAX(shift_amount - 32, 0); - d2 *= u64_1 << shift_next; - temp = (unsigned int)mgc_floor(d2); - k1 <<= shift_next; - k1 = k1 | static_cast>(temp); - d2 -= temp; - tb = b ? ~k1 : k1; - } else { - k1 = static_cast>(0); - int to_shift = shift_amount; - unsigned int temp; - while (to_shift >= 32) { - to_shift -= 32; - d2 *= u64_1 << 32; - temp = (unsigned int)mgc_floor(d2); - k1 <<= 32; - k1 = k1 | static_cast>(temp); - d2 -= temp; - } - const int shift_next = AC_MAX(to_shift % 32, 0); - d2 *= u64_1 << shift_next; - temp = (unsigned int)mgc_floor(d2); - k1 <<= shift_next; - k1 = k1 | static_cast>(temp); - d2 -= temp; - tb = b ? ~k1 : k1; - } - - r = tb; - d2 *= 2; - bool k = (int(d2)) != 0; - d2 -= k ? 1.0 : 0.0; - *rbits = d2 != 0.0; - *qb = (b && *rbits) ^ k; - if (b && !*rbits && !*qb) { - r += static_cast>(1); - } - *io = 0; - bool cond1 = !ap_equal_zeros_from(k1); - if (!S) { - if (b) - *io = -1; - else if (cond1) - *io = 1; - } else { - // | | N - 1 bits digi_bits - // |Sbit| - // cond1: not 0|X |.........: inner overflow - // cond2 0|1 |000000000: not inner overflow, *io = -2 - // cond3: 0|1 |not all 0: inner overflow - if (b) { - bool sign_bit = bit_slc<1, N - 1>(k1); - bool digi_bits_zero = ap_equal_zeros_to(k1); - if (cond1) - *io = -1; // cond1 - else if (sign_bit) { - if (digi_bits_zero) - *io = -2; // cond2 - else - *io = -1; // cond3 - } - } else { - if (!ap_equal_zeros_from(k1)) - *io = 1; - } - } - *o |= b ^ ((tb < static_cast>(0)) && S); -} -template -inline void ap_conv_from_fraction(double d, ap_uint &r, bool *qb, - bool *rbits, bool *o, int *io) { - ap_int r1; - ap_conv_from_fraction(d, r1, qb, rbits, o, io); - r = r1; -} - -constexpr Ulong mult_u_u(int a, int b) { - return (Ulong)(unsigned)a * (Ulong)(unsigned)b; -} -constexpr Slong mult_u_s(int a, int b) { - return (Ulong)(unsigned)a * (Slong)(signed)b; -} -constexpr Slong mult_s_u(int a, int b) { - return (Slong)(signed)a * (Ulong)(unsigned)b; -} -constexpr Slong mult_s_s(int a, int b) { - return (Slong)(signed)a * (Slong)(signed)b; -} -constexpr void accumulate(Ulong a, Ulong &l1, Slong &l2) { - l1 += (Ulong)(unsigned)a; - l2 += a >> 32; -} -constexpr void accumulate(Slong a, Ulong &l1, Slong &l2) { - l1 += (Ulong)(unsigned)a; - l2 += a >> 32; -} - -template -constexpr bool ap_uadd_carry(ap_uint op, bool carry, ap_uint &r) { - r += static_cast>(carry); - return carry && (r == static_cast>(0)); -} - -template -constexpr bool ap_uadd_carry(ap_int op, bool carry, ap_int &r) { - ap_uint ur = r; - bool ret = ap_uadd_carry((ap_uint)(op), carry, ur); - r = ur; - return ret; -} - -// Helper function for multiplication on x86 -template -constexpr ap_uint bit_multiply(ap_uint v1, ap_uint v2) { - ap_uint x1 = v1; - ap_uint x2 = v2; - - ap_uint r = 0; - while (x2 != static_cast>(0)) { - if (x2 & static_cast>(1)) { - r += x1; - } - x1 <<= 1; - x2 >>= 1; - } - return r; -} - -// Helper function for pow on x86 -template constexpr ap_uint ap_int_pow(ap_uint value) { - constexpr int Nr = N * P; - ap_uint base = value; - ap_uint r = 1; - int pow = P; - while (pow > 0) { - if (pow % 2 == 0) { - pow /= 2; - base = bit_multiply(base, base); - } else { - pow -= 1; - r = bit_multiply(r, base); - pow /= 2; - base = bit_multiply(base, base); - } - } - return r; -} - -// Helper function for large divisions on x86 -template -constexpr ap_uint bit_division(ap_uint value, ap_uint divisor, - ap_uint &remainder) { - ap_uint quotient = 0; - while (!ap_equal_zeros_to(value)) { - ap_uint new_quotient = 1; - if (value == divisor) { - remainder = 0; - quotient += new_quotient; - break; - } else if (value < divisor) { - remainder = value; - break; - } - - // Quickly subtract 2^M * divisor from the value, and add that many to the - // quotient - ap_uint tempdivisor = divisor; - while ((tempdivisor << 1) <= value) { - tempdivisor = tempdivisor << 1; - new_quotient = new_quotient << 1; - } - - quotient += new_quotient; - value -= tempdivisor; - } - return quotient; -} - -template -constexpr ap_uint bit_division(ap_uint value, ap_uint divisor) { - ap_uint r = 0; - return bit_division(value, divisor, r); -} - -// This type is used to toggle between ap_int and ap_uint -template struct select_type {}; -template struct select_type { typedef ap_int type; }; -template struct select_type { typedef ap_uint type; }; - -#if !defined(_HLS_EMBEDDED_PROFILE) -// This two-input template returns a number without a prefix or sign -template -inline std::string to_string_noprefix(ap_uint value, int base) { - std::string buf = ""; - if (base < 2 || base > 16) { - return buf; - } - - enum { kMaxDigits = 35 }; - buf.reserve(kMaxDigits); - - const int N_bits = AC_MAX(N + 1, 5); - ap_uint quotient = static_cast>(value); - int mod; - ap_uint b = base; - do { - ap_uint r = 0; - quotient = bit_division(quotient, b, r); - mod = (int)(r); - buf += "0123456789ABCDEF"[mod]; - } while (quotient); - - std::reverse(buf.begin(), buf.end()); - return buf; -} - -template -inline std::string to_string_u(ap_uint value, int base, - bool sign_mag = false) { - return to_string_noprefix(value, base); -} - -// This three-input template returns a number, with a sign and generally with a -// prefix -template -inline std::string to_string(typename select_type::type value, int base, - bool sign_mag = false) { - // for formatting purpose only - std::string prefix = ""; - if (base == AC_BIN) { - prefix = "0b"; - } else if (base == AC_HEX) { - prefix = "0x"; - } else if (base == AC_OCT) { - prefix = "0o"; - } - - if (value >= static_cast::type>(0)) { - // If the user declares a positive number but sign_mag is off, the way - // to represent the number as positive is to have its MSB to be 0 instead - // of 1. - if (!sign_mag) { - if (base == AC_OCT || base == AC_DEC || base == AC_HEX) { - return prefix + to_string_noprefix((ap_uint)value, base); - } else { - return prefix + '0' + to_string_noprefix((ap_uint)value, base); - } - } else { - return '+' + prefix + to_string_noprefix((ap_uint)value, base); - } - } else { - // If sign_mag is false, negative number gets rid of neg sign, - // but it goes through 1's complement + 1 - if (!sign_mag && base != AC_DEC) { - ap_uint t = -value; - t = ~t + static_cast>(1); - return prefix + to_string_noprefix(t, base); - } else { - return "-" + prefix + to_string_noprefix((ap_uint)-value, base); - } - } -} -#endif //_HLS_EMBEDDED_PROFILE - -////////////////////////////////////////////////////////////////////////////// -// Integer Vector class: iv -////////////////////////////////////////////////////////////////////////////// -template class iv { -protected: - typedef typename select_type::type actype; - actype value; - -public: - template friend class iv; - - constexpr iv() {} - - template - constexpr iv(const iv &b) : value(b.value) {} - - // Construct from an _ExtInt - constexpr iv(const actype &b) : value(b) {} - - /* Note: char and short constructors are an extension to Calypto's - implementation to address the i++ default behaviour of not promoting - to integers. (these functions are not in Calypto's ac_int.h) */ - constexpr iv(char t) : value(t) {} - constexpr iv(unsigned char t) : value(t) {} - constexpr iv(short t) : value(t) {} - constexpr iv(unsigned short t) : value(t) {} - constexpr iv(Slong t) : value(t) {} - constexpr iv(Ulong t) : value(t) {} - constexpr iv(int t) : value(t) {} - constexpr iv(unsigned int t) : value(t) {} - constexpr iv(long t) : value(t) {} - constexpr iv(unsigned long t) : value(t) {} - constexpr iv(double d) : value((actype)(long long)d) {} - constexpr iv(float d) : value((actype)(long long)d) {} - - // Explicit conversion functions to C built-in types ------------- - constexpr Slong to_int64() const { return (Slong)value; } - constexpr Ulong to_uint64() const { return (Ulong)value; } - inline double to_double() const { return (double)value; } - -#if !defined(_HLS_EMBEDDED_PROFILE) - std::string to_string(ac_base_mode mode, bool sign_mag = false) const { - if (mode == 10) { - // If decimal presentation, N + 1 is set to avoid regarding positive - // numbers as negative numbers due to leading 1 in binary representation - // e.g. 4-bit decimal number 15 (0b1111) != -1 - return ac_private::to_string(value, mode, sign_mag); - } else { - return ac_private::to_string(value, mode, sign_mag); - } - } -#endif //_HLS_EMBEDDED_PROFILE - - // BEGIN: debug functions for X86 flow - template - constexpr void debug_within_range(const iv &op2) { -#if defined(DEBUG_AC_INT) - enum { Nx = AC_MAX(N, N2 + 1) }; - ap_int v = op2.value; - if (N2 + 1 <= N) - return; - // S -> S, check bits [N2 + 1, .. , N-1] - if (S) { - if (ap_equal_ones_from(v)) - return; - if (ap_equal_zeros_from(v)) - return; - } - // S -> U, check bits [N2 + 1, .. , N] - else { - if (ap_equal_zeros_from(v)) - return; - } -#if !defined(_HLS_EMBEDDED_PROFILE) - std::cout << "warning: overflow, assign value " - << ac_private::to_string(v, 10) << " (" - << ac_private::to_string(v, 16) << ")" - << " to type ac_int<" << N << ", " << (S ? "true" : "false") - << ">" << std::endl; -#endif //_HLS_EMBEDDED_PROFILE - -#ifdef DEBUG_AC_INT_ERROR - AC_ASSERT(0, "Assert due to overflow (DEBUG_AC_INT_ERROR)"); -#endif -#endif - } - - constexpr void debug_within_range(Ulong v) { - debug_within_range(iv<64, false>(v)); - } - - constexpr void debug_within_range(Slong v) { - debug_within_range(iv<64, true>(v)); - } - // END - - // o: outer overflow - // io: inner overflow - // qb: qb - // rbits: r - inline void conv_from_fraction(double d, bool *qb, bool *rbits, bool *o, - int *io) { - ap_conv_from_fraction(d, value, qb, rbits, o, io); - } - - template - constexpr void mult(const iv &op2, iv &r) const { - static_assert(N2 <= 512, ""); - static_assert(Nr <= 512, ""); - typedef typename select_type::type result_type; - result_type op2_value = static_cast(op2.value); - r.value = value; - r.value *= op2_value; - } - template - constexpr void add(const iv &op2, iv &r) const { - typedef typename select_type::type op2_type; - op2_type op2_value = static_cast(op2.value); - r.value = value; - r.value += op2_value; - } - template - constexpr void sub(const iv &op2, iv &r) const { - typedef typename select_type::type op2_type; - op2_type op2_value = static_cast(op2.value); - r.value = value; - r.value -= op2_value; - } - template - constexpr void div(const iv &op2, iv &r) const { - // The inputs must fit in 128 bits. - static_assert(N2 + S2 <= 128, ""); - static_assert(N + S <= 128, ""); - typedef - typename select_type::type - opdivtype; - typedef typename select_type::type resdivtype; - opdivtype a = static_cast(value); - opdivtype b = static_cast(op2.value); - r.value = static_cast(a / b); - } - template - constexpr void mod(const iv &op2, iv &r) const { - typedef typename select_type::type op2_type; - op2_type op2_value = static_cast(op2.value); - r.value = value; - r.value %= op2_value; - } - - constexpr void increment() { - typedef typename select_type::type value_type; - typedef typename select_type::type t2; - constexpr t2 one = 1; - t2 res = one + static_cast(value); - value = static_cast(res); - } - - constexpr void decrement() { - typedef typename select_type::type value_type; - constexpr value_type one = 1; - value -= one; - } - template constexpr void neg(iv &r) const { - r.value = value; - r.value = -r.value; - } - - // Shift Operators - template - constexpr void shift_l(unsigned op2, iv &r) const { - if (op2 >= Nr) { - r.value = 0; - } else { - r.value = value; - r.value <<= op2; - } - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wtautological-compare" - // Avoid a clang compiler warning below by temporarily suppressing - // a autological-compare warning to keep the compiler output - // tidy for the customer. - // - // warning: comparison of unsigned expression < 0 is always false - // [-Wtautological-compare] - // } else if ( (op2 >= Nr) && Sr && (value < 0) ) { - // ~~~~~ ^ ~ - // Note that since this expression is evaluated at compile time, the compiler - // will throw a warning in the case the expression is always 0. - // So just suppress it. - template - constexpr void shift_l2(signed op2, iv &r) const { - signed shift = AC_ABS(op2); - if (shift >= Nr) { - shift = Nr; - } - - if (op2 > 0) { - if (shift == Nr) { - r.value = 0; - } else { - r.value = value; - r.value <<= shift; - } - } else { - if (shift == Nr) { - if (value < static_cast::type>(0)) { - r.value = -1; - } else { - r.value = 0; - } - } else { - r.value = value; - r.value >>= shift; - } - } - } -#pragma clang diagnostic pop - - template - constexpr void const_shift_l(iv &r) const { - shift_l2(B, r); - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wtautological-compare" - template - constexpr void shift_r(unsigned op2, iv &r) const { - if ((op2 >= Nr) && - ((Sr && (value > static_cast::type>(0))) || - !Sr)) { - r.value = 0; - } else if ((op2 >= Nr) && Sr && - (value < static_cast::type>(0))) { - r.value = -1; - } else { - r.value = value >> op2; - } - } - - template - constexpr void shift_r2(signed op2, iv &r) const { - signed shift = AC_ABS(op2); - const int Ns = AC_MAX(Nr, N); - if (shift >= Ns) { - shift = Ns; - } - if (op2 > 0) { - if (shift == Ns) { - if (value < static_cast::type>(0)) { - r.value = -1; - } else { - r.value = 0; - } - } else { - r.value = value >> shift; - } - } else { - if (shift == Ns) { - r.value = 0; - } else { - r.value = value; - r.value <<= shift; - } - } - } -#pragma clang diagnostic pop - - template - constexpr void const_shift_r(iv &r) const { - shift_r2(B, r); - } - - template - constexpr void bitwise_complement(iv &r) const { - r.value = value; - r.value = ~r.value; - } - template - constexpr void bitwise_and(const iv &op2, iv &r) const { - r.value = value; - r.value &= static_cast::type>(op2.value); - } - template - constexpr void bitwise_or(const iv &op2, iv &r) const { - r.value = value; - r.value |= static_cast::type>(op2.value); - } - template - constexpr void bitwise_xor(const iv &op2, iv &r) const { - r.value = value; - r.value ^= static_cast::type>(op2.value); - } - template constexpr bool equal(const iv &op2) const { - constexpr auto Sx = AC_MAX(N, N2); - ap_int a = (ap_int)value; - ap_int b = (ap_int)op2.value; - return (a == b); - } - template - constexpr bool greater_than(const iv &op2) const { - constexpr auto Sx = AC_MAX(N, N2); - ap_int a = (ap_int)value; - ap_int b = (ap_int)op2.value; - return (a > b); - } - template - constexpr bool less_than(const iv &op2) const { - enum { Sx = AC_MAX(N, N2) }; - ap_int a = (ap_int)value; - ap_int b = (ap_int)op2.value; - return (a < b); - } - constexpr bool equal_zero() const { - actype zero = 0; - return (value == zero); - } - -// Save current diagnostic state -#pragma clang diagnostic push -// Disable the "shift-count-overflow" diagnostic message -#pragma clang diagnostic ignored "-Wshift-count-overflow" - // This helper function will overwrite bits of current ac_int from index lsb - // to ( lsb + N2 - 1 ) with the bits in op2. N2 cannot be greater than N. - // All users of this helper function check for the validity of N2 with an - // AC_ASSERT which is only activated for certain debug compiles. This function - // contains a static_assert to check for the validity of N2 for other compile - // flows. - template - constexpr void set_slc(unsigned lsb, int WS, const iv &op2) { -#ifdef __EMULATION_FLOW__ - AC_ASSERT(N2 <= N, "Bad usage: WS greater than length of slice"); -#else - static_assert(N2 <= N, "Bad usage: WS greater than length of slice"); -#endif // __EMULATION_FLOW__ - if (N2 == N) { - value = op2.value; - } else if (N2 <= N) { - iv temp; - temp.value = (actype)op2.value; - temp.value <<= lsb; - // Compute AND mask - iv mask; - mask.value = 1; - mask.value <<= N2; - mask.value -= - static_cast::type>(1); - mask.value <<= lsb; - - mask.value = ~mask.value; - value &= mask.value; - value |= temp.value; - } else { - value = 0; - } - } -// Restore saved diagnostic state -#pragma clang diagnostic pop - - unsigned leading_bits(bool bit) const { return 0; } - - template constexpr void reverse(iv &r) const { - r.value = 0; - for (int i = 0; i < N; i++) { - r.value |= ((value >> i) & 1) << ((N - 1) - i); - } - } -}; // class iv, signed - -// add automatic conversion to Slong/Ulong depending on S and C -template class iv_conv : public iv { -protected: - constexpr iv_conv() {} - template constexpr iv_conv(const T &t) : iv(t) {} -}; - -template class iv_conv : public iv { -public: - constexpr operator Ulong() const { return iv::to_uint64(); } - -protected: - constexpr iv_conv() {} - template constexpr iv_conv(const T &t) : iv(t) {} -}; - -template class iv_conv : public iv { -public: - constexpr operator Slong() const { return iv::to_int64(); } - -protected: - constexpr iv_conv() {} - template constexpr iv_conv(const T &t) : iv(t) {} -}; - -// Set default to promote to int as this is the case for almost all types -// create exceptions using specializations -template struct c_prom { typedef int promoted_type; }; -template <> struct c_prom { typedef unsigned promoted_type; }; -template <> struct c_prom { typedef long promoted_type; }; -template <> struct c_prom { - typedef unsigned long promoted_type; -}; -template <> struct c_prom { typedef Slong promoted_type; }; -template <> struct c_prom { typedef Ulong promoted_type; }; -template <> struct c_prom { typedef float promoted_type; }; -template <> struct c_prom { typedef double promoted_type; }; - -template struct c_arith { - // will error out for pairs of T and T2 that are not defined through - // specialization -}; -template struct c_arith { typedef T arith_conv; }; - -#define C_ARITH(C_TYPE1, C_TYPE2) \ - template <> struct c_arith { \ - typedef C_TYPE1 arith_conv; \ - }; \ - template <> struct c_arith { typedef C_TYPE1 arith_conv; }; - -C_ARITH(double, float) -C_ARITH(double, int) -C_ARITH(double, unsigned) -C_ARITH(double, long) -C_ARITH(double, unsigned long) -C_ARITH(double, Slong) -C_ARITH(double, Ulong) -C_ARITH(float, int) -C_ARITH(float, unsigned) -C_ARITH(float, long) -C_ARITH(float, unsigned long) -C_ARITH(float, Slong) -C_ARITH(float, Ulong) - -C_ARITH(Slong, int) -C_ARITH(Slong, unsigned) -C_ARITH(Ulong, int) -C_ARITH(Ulong, unsigned) - -template struct map { typedef T t; }; -template struct c_type_params { - // will error out for T for which this template struct is not specialized -}; - -template inline const char *c_type_name() { return "unknown"; } -template <> inline const char *c_type_name() { return "bool"; } -template <> inline const char *c_type_name() { return "char"; } -template <> inline const char *c_type_name() { - return "signed char"; -} -template <> inline const char *c_type_name() { - return "unsigned char"; -} -template <> inline const char *c_type_name() { - return "signed short"; -} -template <> inline const char *c_type_name() { - return "unsigned short"; -} -template <> inline const char *c_type_name() { return "int"; } -template <> inline const char *c_type_name() { return "unsigned"; } -template <> inline const char *c_type_name() { - return "signed long"; -} -template <> inline const char *c_type_name() { - return "unsigned long"; -} -template <> inline const char *c_type_name() { - return "signed long long"; -} -template <> inline const char *c_type_name() { - return "unsigned long long"; -} -template <> inline const char *c_type_name() { return "float"; } -template <> inline const char *c_type_name() { return "double"; } - -template struct c_type; - -template struct rt_c_type_T { - template struct op1 { - typedef typename T::template rt_T>::mult mult; - typedef typename T::template rt_T>::plus plus; - typedef typename T::template rt_T>::minus2 minus; - typedef typename T::template rt_T>::minus minus2; - typedef typename T::template rt_T>::logic logic; - typedef typename T::template rt_T>::div2 div; - typedef typename T::template rt_T>::div div2; - }; -}; -template struct c_type { - typedef typename c_prom::promoted_type c_prom_T; - struct rt_unary { - typedef c_prom_T neg; - typedef c_prom_T mag_sqr; - typedef c_prom_T mag; - template struct set { typedef c_prom_T sum; }; - }; - template struct rt_T { - typedef typename rt_c_type_T::template op1::mult mult; - typedef typename rt_c_type_T::template op1::plus plus; - typedef typename rt_c_type_T::template op1::minus minus; - typedef typename rt_c_type_T::template op1::minus2 minus2; - typedef typename rt_c_type_T::template op1::logic logic; - typedef typename rt_c_type_T::template op1::div div; - typedef typename rt_c_type_T::template op1::div2 div2; - }; - -#if !defined(_HLS_EMBEDDED_PROFILE) - inline static std::string type_name() { - std::string r = c_type_name(); - return r; - } -#endif //_HLS_EMBEDDED_PROFILE -}; -// with T == c_type -template struct rt_c_type_T> { - typedef typename c_prom::promoted_type c_prom_T; - template struct op1 { - typedef typename c_prom::promoted_type c_prom_T2; - typedef typename c_arith::arith_conv mult; - typedef typename c_arith::arith_conv plus; - typedef typename c_arith::arith_conv minus; - typedef typename c_arith::arith_conv minus2; - typedef typename c_arith::arith_conv logic; - typedef typename c_arith::arith_conv div; - typedef typename c_arith::arith_conv div2; - }; -}; - -#define C_TYPE_MAP(C_TYPE) \ - template <> struct map { typedef c_type t; }; - -#define C_TYPE_PARAMS(C_TYPE, WI, SI) \ - template <> struct c_type_params { \ - enum { W = WI, I = WI, E = 0, S = SI, floating_point = 0 }; \ - }; - -#define C_TYPE_MAP_INT(C_TYPE, WI, SI) \ - C_TYPE_MAP(C_TYPE) \ - C_TYPE_PARAMS(C_TYPE, WI, SI) - -#define C_TYPE_MAP_FLOAT(C_TYPE, FP, WFP, IFP, EFP) \ - C_TYPE_MAP(C_TYPE) \ - template <> struct c_type_params { \ - enum { W = WFP, I = IFP, E = EFP, S = true, floating_point = FP }; \ - }; - -C_TYPE_MAP_INT(bool, 1, false) -C_TYPE_MAP_INT(char, 8, true) -C_TYPE_MAP_INT(signed char, 8, true) -C_TYPE_MAP_INT(unsigned char, 8, false) -C_TYPE_MAP_INT(signed short, 16, true) -C_TYPE_MAP_INT(unsigned short, 16, false) -C_TYPE_MAP_INT(signed int, 32, true) -C_TYPE_MAP_INT(unsigned int, 32, false) -C_TYPE_MAP_INT(signed long, ac_private::long_w, true) -C_TYPE_MAP_INT(unsigned long, ac_private::long_w, false) -C_TYPE_MAP_INT(signed long long, 64, true) -C_TYPE_MAP_INT(unsigned long long, 64, false) -C_TYPE_MAP_FLOAT(float, 1, 25, 1, 8) -C_TYPE_MAP_FLOAT(double, 2, 54, 1, 11) - -#undef C_TYPE_INT -#undef C_TYPE_PARAMS -#undef C_TYPE_FLOAT -#undef C_TYPE_MAP - -// specializations for following struct declared/defined after definition of -// ac_int -template struct rt_ac_int_T { - template struct op1 { - typedef typename T::template rt_T>::mult mult; - typedef typename T::template rt_T>::plus plus; - typedef typename T::template rt_T>::minus2 minus; - typedef typename T::template rt_T>::minus minus2; - typedef typename T::template rt_T>::logic logic; - typedef typename T::template rt_T>::div2 div; - typedef typename T::template rt_T>::div div2; - }; -}; -} // namespace ac_private - -namespace ac { -// compiler time constant for log2 like functions -template struct nbits { - enum { val = ac_private::s_N<16>::s_X::nbits }; -}; - -template struct log2_floor { - enum { val = nbits::val - 1 }; -}; - -// log2 of 0 is not defined: generate compiler error -template <> struct log2_floor<0> {}; - -template struct log2_ceil { - enum { lf = log2_floor::val, val = (X == (1 << lf) ? lf : lf + 1) }; -}; - -// log2 of 0 is not defined: generate compiler error -template <> struct log2_ceil<0> {}; - -template struct int_range { - enum { - l_s = LowerBound < 0, - u_s = UpperBound < 0, - signedness = l_s || u_s, - l_nbits = nbits::val, - u_nbits = nbits::val, - nbits = AC_MAX(l_nbits, u_nbits + (!u_s && signedness)) - }; - typedef ac_int type; -}; -} // namespace ac - -enum ac_q_mode { - AC_TRN, - AC_RND, - AC_TRN_ZERO, - AC_RND_ZERO, - AC_RND_INF, - AC_RND_MIN_INF, - AC_RND_CONV, - AC_RND_CONV_ODD -}; -enum ac_o_mode { AC_WRAP, AC_SAT, AC_SAT_ZERO, AC_SAT_SYM }; -template class ac_fixed; - -////////////////////////////////////////////////////////////////////////////// -// Arbitrary-Length Integer: ac_int -////////////////////////////////////////////////////////////////////////////// - -template -class ac_int : public ac_private::iv_conv { - typedef ac_private::iv_conv ConvBase; - typedef ac_private::iv Base; - - inline bool is_neg() const { return S && Base::value < 0; } - - enum ac_debug_op { - AC_DEBUG_ADD, - AC_DEBUG_SUB, - AC_DEBUG_MUL, - AC_DEBUG_DIV, - AC_DEBUG_REM, - AC_DEBUG_INCREMENT, - AC_DEBUG_DECREMENT - }; - - // returns false if number is denormal - template - bool normalize_private(ac_int &exp, bool reserved_min_exp = false) { - int expt = exp; - int lshift = leading_sign(); - bool fully_normalized = true; - ac_int min_exp = 0; - min_exp.template set_val(); - int max_shift = exp - min_exp - reserved_min_exp; - if (lshift > max_shift) { - lshift = ac_int(max_shift); - expt = min_exp + reserved_min_exp; - fully_normalized = false; - } else { - expt -= lshift; - } - if (Base::equal_zero()) { - expt = 0; - fully_normalized = true; - } - exp = expt; - Base r; - Base::shift_l(lshift, r); - Base::operator=(r); - return fully_normalized; - } - -public: - static constexpr int width = W; - static constexpr int i_width = W; - static constexpr bool sign = S; - static constexpr ac_q_mode q_mode = AC_TRN; - static constexpr ac_o_mode o_mode = AC_WRAP; - static constexpr int e_width = 0; - - template struct rt { - enum { - mult_w = W + W2, - mult_s = S || S2, - plus_w = AC_MAX(W + (S2 && !S), W2 + (S && !S2)) + 1, - plus_s = S || S2, - minus_w = AC_MAX(W + (S2 && !S), W2 + (S && !S2)) + 1, - minus_s = true, - div_w = W + S2, - div_s = S || S2, - mod_w = AC_MIN(W, W2 + (!S2 && S)), - mod_s = S, - logic_w = AC_MAX(W + (S2 && !S), W2 + (S && !S2)), - logic_s = S || S2 - }; - typedef ac_int mult; - typedef ac_int plus; - typedef ac_int minus; - typedef ac_int logic; - typedef ac_int div; - typedef ac_int mod; - typedef ac_int arg1; - }; - - template struct rt_T { - typedef typename ac_private::map::t map_T; - typedef - typename ac_private::rt_ac_int_T::template op1::mult mult; - typedef - typename ac_private::rt_ac_int_T::template op1::plus plus; - typedef typename ac_private::rt_ac_int_T::template op1::minus - minus; - typedef typename ac_private::rt_ac_int_T::template op1::minus2 - minus2; - typedef typename ac_private::rt_ac_int_T::template op1::logic - logic; - typedef - typename ac_private::rt_ac_int_T::template op1::div div; - typedef - typename ac_private::rt_ac_int_T::template op1::div2 div2; - typedef ac_int arg1; - }; - - struct rt_unary { - enum { - neg_w = W + 1, - neg_s = true, - mag_sqr_w = 2 * W - S, - mag_sqr_s = false, - mag_w = W + S, - mag_s = false, - leading_sign_w = ac::log2_ceil::val, - leading_sign_s = false - }; - typedef ac_int neg; - typedef ac_int mag_sqr; - typedef ac_int mag; - typedef ac_int leading_sign; - template struct set { - enum { sum_w = W + ac::log2_ceil::val, sum_s = S }; - typedef ac_int sum; - }; - }; - - template friend class ac_int; - template - friend class ac_fixed; - - constexpr ac_int() { -#if defined(DEBUG_AC_INT) - if (!warned_undef) { - std::cout << "warning: using empty constructor for type " - << type_name().c_str() << std::endl; - warned_undef = true; -#ifdef DEBUG_AC_INT_ERROR - AC_ASSERT(0, - "Assert due to using empty constructor (DEBUG_AC_INT_ERROR)\n"); -#endif - } -#endif - } - template - constexpr inline ac_int(const ac_int &op) : ConvBase(op) { - Base::debug_within_range(op); - } - - template - constexpr inline void set_val_no_overflow_warning(const ac_int &op) { - Base::operator=(op); - } - - constexpr inline ac_int(bool b) : ConvBase(b) {} - constexpr inline ac_int(char b) : ConvBase(b) { - Base::debug_within_range(Ulong(b)); - } - constexpr inline ac_int(signed char b) : ConvBase(b) { - Base::debug_within_range(Slong(b)); - } - constexpr inline ac_int(unsigned char b) : ConvBase(b) { - Base::debug_within_range(Ulong(b)); - } - constexpr inline ac_int(signed short b) : ConvBase(b) { - Base::debug_within_range(Slong(b)); - } - constexpr inline ac_int(unsigned short b) : ConvBase(b) { - Base::debug_within_range(Ulong(b)); - } - constexpr inline ac_int(signed int b) : ConvBase(b) { - Base::debug_within_range(Slong(b)); - } - constexpr inline ac_int(unsigned int b) : ConvBase(b) { - Base::debug_within_range(Ulong(b)); - } - constexpr inline ac_int(signed long b) : ConvBase(b) { - Base::debug_within_range(Slong(b)); - } - constexpr inline ac_int(unsigned long b) : ConvBase(b) { - Base::debug_within_range(Ulong(b)); - } - constexpr inline ac_int(Slong b) : ConvBase(b) { - Base::debug_within_range(b); - } - constexpr inline ac_int(Ulong b) : ConvBase(b) { - Base::debug_within_range(b); - } - constexpr ac_int(double d) : ConvBase(d) {} - ac_int(const char *) = delete; - -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wuninitialized" -#endif - template constexpr inline ac_int &set_val() { - if (V == AC_VAL_DC) { - ac_int r = 0; - Base::operator=(r); - } else if (V == AC_VAL_0 || V == AC_VAL_MIN || V == AC_VAL_QUANTUM) { - Base::operator=(0); - if (S && V == AC_VAL_MIN) { - Base::value = 1; - Base::value <<= W - 1; - } else if (V == AC_VAL_QUANTUM) - Base::value = 1; - } else if (AC_VAL_MAX) { - Base::value = 0; - Base::value = ~Base::value; - if (S) { - ac_private::ap_uint t = Base::value; - t >>= 1; - Base::value = t; - } - } - return *this; - } -#if defined(__clang__) -#pragma clang diagnostic pop -#endif - - // Explicit conversion functions to C built-in types ------------- - constexpr int to_int() const { return (int)Base::value; } - constexpr unsigned to_uint() const { return (unsigned)Base::value; } - constexpr long to_long() const { return (long)Base::value; } - constexpr unsigned long to_ulong() const { - return (unsigned long)Base::value; - } - constexpr Slong to_int64() const { return Base::to_int64(); } - constexpr Ulong to_uint64() const { return Base::to_uint64(); } - inline double to_double() const { - static_assert( - W <= 128, - "ac_int to_double() does not support ttype larger than 128 bits"); - return Base::to_double(); - } - - constexpr int length() const { return W; } - -#if !defined(_HLS_EMBEDDED_PROFILE) - inline std::string to_string(ac_base_mode base_rep, - bool sign_mag = false) const { - return Base::to_string(base_rep, sign_mag); - } - - inline static std::string type_name() { - const char *tf[] = {",false>", ",true>"}; - std::string r = "ac_int<"; - r += ac_int<32, true>(W).to_string(AC_DEC, false); - r += tf[S]; - return r; - } -#endif //_HLS_EMBEDDED_PROFILE - - // Arithmetic : Binary ---------------------------------------------------- - template - constexpr typename rt::mult - operator*(const ac_int &op2) const { - typename rt::mult r = 0; - Base::mult(op2, r); - return r; - } - template - constexpr typename rt::plus - operator+(const ac_int &op2) const { - typename rt::plus r = 0; - Base::add(op2, r); - return r; - } - template - constexpr typename rt::minus - operator-(const ac_int &op2) const { - typename rt::minus r = 0; - Base::sub(op2, r); - return r; - } - template - constexpr typename rt::div - operator/(const ac_int &op2) const { - typename rt::div r = 0; - Base::div(op2, r); - return r; - } - template - constexpr typename rt::mod - operator%(const ac_int &op2) const { - typename rt::mod r = 0; - Base::mod(op2, r); - return r; - } - - template - constexpr void check_overflow(const ac_int &op2, - ac_debug_op debug_op) { -#if defined(DEBUG_AC_INT) - ac_int temp = 0; - switch (debug_op) { - case AC_DEBUG_ADD: - temp = (*this) + op2; - break; - case AC_DEBUG_SUB: - temp = (*this) - op2; - break; - case AC_DEBUG_MUL: - temp = (*this) * op2; - break; - case AC_DEBUG_DIV: - temp = (*this) / op2; - break; - case AC_DEBUG_REM: - temp = (*this) % op2; - break; - - default: - break; - } -#endif - } - - constexpr void check_overflow(ac_debug_op debug_op) { -#if defined(DEBUG_AC_INT) - ac_int temp = 0; - ac_int<2, true> op2 = 1; - switch (debug_op) { - case AC_DEBUG_INCREMENT: - temp = (*this) + op2; - break; - case AC_DEBUG_DECREMENT: - temp = (*this) - op2; - break; - - default: - break; - } -#endif - } - // END: X86 DEBUG - - // Arithmetic assign ------------------------------------------------------ - template - constexpr ac_int &operator*=(const ac_int &op2) { - check_overflow(op2, AC_DEBUG_MUL); - Base r = 0; - Base::mult(op2, r); - Base::operator=(r); - return *this; - } - template - constexpr ac_int &operator+=(const ac_int &op2) { - check_overflow(op2, AC_DEBUG_ADD); - Base r = 0; - Base::add(op2, r); - Base::operator=(r); - return *this; - } - template - constexpr ac_int &operator-=(const ac_int &op2) { - check_overflow(op2, AC_DEBUG_SUB); - Base r = 0; - Base::sub(op2, r); - Base::operator=(r); - return *this; - } - template - constexpr ac_int &operator/=(const ac_int &op2) { - check_overflow(op2, AC_DEBUG_DIV); - Base r = 0; - Base::div(op2, r); - Base::operator=(r); - return *this; - } - template - constexpr ac_int &operator%=(const ac_int &op2) { - check_overflow(op2, AC_DEBUG_REM); - Base r = 0; - Base::mod(op2, r); - Base::operator=(r); - return *this; - } - // Arithmetic prefix increment, decrement ---------------------------------- - constexpr ac_int &operator++() { - check_overflow(AC_DEBUG_INCREMENT); - Base::increment(); - return *this; - } - constexpr ac_int &operator--() { - check_overflow(AC_DEBUG_DECREMENT); - Base::decrement(); - return *this; - } - // Arithmetic postfix increment, decrement --------------------------------- - constexpr ac_int operator++(int) { - check_overflow(AC_DEBUG_INCREMENT); - ac_int t = *this; - Base::increment(); - return t; - } - constexpr ac_int operator--(int) { - check_overflow(AC_DEBUG_DECREMENT); - ac_int t = *this; - Base::decrement(); - return t; - } - // Arithmetic Unary -------------------------------------------------------- - constexpr ac_int operator+() { return *this; } - constexpr typename rt_unary::neg operator-() const { - typename rt_unary::neg r = 0; - Base::neg(r); - return r; - } - // ! ------------------------------------------------------------------------ - constexpr bool operator!() const { return Base::equal_zero(); } - - // Bitwise (arithmetic) unary: complement ----------------------------- - constexpr ac_int operator~() const { - ac_int r = 0; - Base::bitwise_complement(r); - return r; - } - // Bitwise (non-arithmetic) bit_complement ----------------------------- - constexpr ac_int bit_complement() const { - ac_int r = 0; - Base::bitwise_complement(r); - return r; - } - // Bitwise (arithmetic): and, or, xor ---------------------------------- - template - constexpr typename rt::logic - operator&(const ac_int &op2) const { - typename rt::logic r = 0; - Base::bitwise_and(op2, r); - return r; - } - template - constexpr typename rt::logic - operator|(const ac_int &op2) const { - typename rt::logic r = 0; - Base::bitwise_or(op2, r); - return r; - } - template - constexpr typename rt::logic - operator^(const ac_int &op2) const { - typename rt::logic r = 0; - Base::bitwise_xor(op2, r); - return r; - } - // Bitwise assign (not arithmetic): and, or, xor ---------------------------- - template - constexpr ac_int &operator&=(const ac_int &op2) { - Base r = 0; - Base::bitwise_and(op2, r); - Base::operator=(r); - return *this; - } - template - constexpr ac_int &operator|=(const ac_int &op2) { - Base r = 0; - Base::bitwise_or(op2, r); - Base::operator=(r); - return *this; - } - template - constexpr ac_int &operator^=(const ac_int &op2) { - Base r = 0; - Base::bitwise_xor(op2, r); - Base::operator=(r); - return *this; - } - // Shift (result constrained by left operand) ------------------------------- - template - constexpr ac_int operator<<(const ac_int &op2) const { - ac_int r = 0; - Base::shift_l2(op2.to_int(), r); - return r; - } - template - constexpr ac_int operator<<(const ac_int &op2) const { - ac_int r = 0; - Base::shift_l(op2.to_uint(), r); - return r; - } - template - constexpr ac_int operator>>(const ac_int &op2) const { - ac_int r = 0; - Base::shift_r2(op2.to_int(), r); - return r; - } - template - constexpr ac_int operator>>(const ac_int &op2) const { - ac_int r = 0; - Base::shift_r(op2.to_uint(), r); - return r; - } - // Shift assign ------------------------------------------------------------ - template constexpr ac_int &operator<<=(const ac_int &op2) { - Base r = 0; - Base::shift_l2(op2.to_int(), r); - Base::operator=(r); - return *this; - } - template - constexpr ac_int &operator<<=(const ac_int &op2) { - Base r = 0; - Base::shift_l(op2.to_uint(), r); - Base::operator=(r); - return *this; - } - template constexpr ac_int &operator>>=(const ac_int &op2) { - Base r = 0; - Base::shift_r2(op2.to_int(), r); - Base::operator=(r); - return *this; - } - template - constexpr ac_int &operator>>=(const ac_int &op2) { - Base r = 0; - Base::shift_r(op2.to_uint(), r); - Base::operator=(r); - return *this; - } - // Relational --------------------------------------------------------------- - template - constexpr bool operator==(const ac_int &op2) const { - return Base::equal(op2); - } - template - constexpr bool operator!=(const ac_int &op2) const { - return !Base::equal(op2); - } - template - constexpr bool operator<(const ac_int &op2) const { - return Base::less_than(op2); - } - template - constexpr bool operator>=(const ac_int &op2) const { - return !Base::less_than(op2); - } - template - constexpr bool operator>(const ac_int &op2) const { - return Base::greater_than(op2); - } - template - constexpr bool operator<=(const ac_int &op2) const { - return !Base::greater_than(op2); - } - - // Bit and Slice Select ----------------------------------------------------- - template - constexpr ac_int slc(const ac_int &index) const { - ac_int op = *this; - ac_int r = 0; - ac_int zero = 0; - AC_ASSERT(index >= zero, "Attempting to read slc with negative indices"); - ac_int uindex = index; - Base::shift_r(uindex.to_uint(), op); - r.set_val_no_overflow_warning(op); - return r; - } - - template constexpr ac_int slc(signed index) const { - ac_int op = *this; - ac_int r = 0; - AC_ASSERT(index >= 0, "Attempting to read slc with negative indices"); - unsigned uindex = index & ((unsigned)~0 >> 1); - Base::shift_r(uindex, op); - r.set_val_no_overflow_warning(op); - return r; - } - template constexpr ac_int slc(unsigned uindex) const { - ac_int op = *this; - ac_int r = 0; - Base::shift_r(uindex, op); - r.set_val_no_overflow_warning(op); - return r; - } - - template - constexpr ac_int &set_slc(const ac_int lsb, - const ac_int &slc) { - AC_ASSERT(lsb.to_int() + W2 <= W && lsb.to_int() >= 0, - "Out of bounds set_slc"); - if (lsb.to_int() + W2 <= W && lsb.to_int() >= 0) { - ac_int ulsb = lsb; - ac_int usigned_slc = 0; - usigned_slc.set_val_no_overflow_warning(slc); - Base::set_slc(ulsb.to_uint(), W2, usigned_slc); - } else { - Base r = 0; - Base::operator=(r); - } - return *this; - } - template - constexpr ac_int &set_slc(signed lsb, const ac_int &slc) { - AC_ASSERT(lsb + W2 <= W && lsb >= 0, "Out of bounds set_slc"); - if (lsb + W2 <= W && lsb >= 0) { - unsigned ulsb = lsb & ((unsigned)~0 >> 1); - ac_int usigned_slc = 0; - usigned_slc.set_val_no_overflow_warning(slc); - Base::set_slc(ulsb, W2, usigned_slc); - } else { - Base r = 0; - Base::operator=(r); - } - return *this; - } - template - constexpr ac_int &set_slc(unsigned ulsb, const ac_int &slc) { - AC_ASSERT(ulsb + W2 <= W, "Out of bounds set_slc"); - if (ulsb + W2 <= W) { - ac_int usigned_slc = 0; - usigned_slc.set_val_no_overflow_warning(slc); - Base::set_slc(ulsb, W2, usigned_slc); - } else { - Base r = 0; - Base::operator=(r); - } - return *this; - } - - class ac_bitref { - ac_int &d_bv; - unsigned d_index; - - public: - ac_bitref(ac_int *bv, unsigned index = 0) : d_bv(*bv), d_index(index) {} - - operator bool() const { - return (d_index < W) - ? (bool)((d_bv.value >> - static_cast< - typename ac_private::select_type::type>( - d_index)) & - static_cast< - typename ac_private::select_type::type>(1)) - : 0; - } - - template operator ac_int() const { - return operator bool(); - } - - inline ac_bitref operator=(int val) { - // lsb of int (val&1) is written to bit - if (d_index < W) { - ac_private::ap_int temp1 = d_bv.value; - ac_private::ap_int temp2 = val; - temp2 <<= d_index; - temp1 ^= temp2; - temp2 = 1; - temp2 <<= d_index; - temp1 &= temp2; - d_bv.value = static_cast>(d_bv.value) ^ temp1; - } - return *this; - } - template - inline ac_bitref operator=(const ac_int &val) { - return operator=(val.to_int()); - } - inline ac_bitref operator=(const ac_bitref &val) { - return operator=((int)(bool)val); - } - }; - - class ac_bitcopy { - ac_int d_bv; - unsigned d_index; - - public: - ac_bitcopy(ac_int bv, unsigned index = 0) : d_bv(bv), d_index(index) {} - - operator bool() const { - return (d_index < W) - ? (bool)((d_bv.value >> - static_cast::actype>( - d_index)) & - static_cast::actype>(1)) - : 0; - } - - template operator ac_int() const { - return operator bool(); - } - }; - - ac_bitref operator[](unsigned int uindex) { - AC_ASSERT(uindex < W, "Attempting to read bit beyond MSB"); - ac_bitref bvh(this, uindex); - return bvh; - } - ac_bitref operator[](int index) { - AC_ASSERT(index >= 0, "Attempting to read bit with negative index"); - AC_ASSERT(index < W, "Attempting to read bit beyond MSB"); - unsigned uindex = index & ((unsigned)~0 >> 1); - ac_bitref bvh(this, uindex); - return bvh; - } - template ac_bitref operator[](const ac_int &index) { - AC_ASSERT(index >= 0, "Attempting to read bit with negative index"); - AC_ASSERT(index < W, "Attempting to read bit beyond MSB"); - ac_int uindex = index; - ac_bitref bvh(this, uindex.to_uint()); - return bvh; - } - - bool operator[](unsigned int uindex) const { - AC_ASSERT(uindex < W, "Attempting to read bit beyond MSB"); - ac_bitcopy bvh(*this, uindex); - return bvh; - } - - bool operator[](int index) const { - AC_ASSERT(index >= 0, "Attempting to read bit with negative index"); - AC_ASSERT(index < W, "Attempting to read bit beyond MSB"); - unsigned uindex = index & ((unsigned)~0 >> 1); - ac_bitcopy bvh(*this, uindex); - return bvh; - } - - template - bool operator[](const ac_int &index) const { - AC_ASSERT(index >= 0, "Attempting to read bit with negative index"); - AC_ASSERT(index < W, "Attempting to read bit beyond MSB"); - ac_int uindex = index; - ac_bitcopy bvh(*this, uindex.to_uint()); - return bvh; - } - - typename rt_unary::leading_sign leading_sign() const { - unsigned ls = 0; - return ls; - } - typename rt_unary::leading_sign leading_sign(bool &all_sign) const { - unsigned ls = 0; - return ls; - } - // returns false if number is denormal - template bool normalize(ac_int &exp) { - return false; - } - // returns false if number is denormal, minimum exponent is reserved (usually - // for encoding special values/errors) - template bool normalize_RME(ac_int &exp) { - return false; - } - bool and_reduce() const { return false; } - bool or_reduce() const { return !Base::equal_zero(); } - bool xor_reduce() const { return false; } - ac_int reverse() const { - ac_int r = 0; - Base::reverse(r); - return r; - } - - constexpr void bit_fill_hex(const char *str) { - // Zero Pads if str is too short, throws ms bits away if str is too long - // Asserts if anything other than 0-9a-fA-F is encountered - // literal constant value can be folded at compile time - - // Can not use system strlen here since it's not synthesizable in FPGA flow - // use a customized version of strlen instead - const char *s = str; - for (; *s; ++s) { - } - - int str_len = (s - str); - ac_int res = 0; - - int i = (str_len >= 2 && str[0] == '0' && str[1] == 'x') ? 2 : 0; -#pragma unroll - for (; i < str_len; i++) { - char c = str[i]; - ac_int<4, false> h = 0; - if (c >= '0' && c <= '9') - h = c - '0'; - else if (c >= 'A' && c <= 'F') - h = c - 'A' + 10; - else if (c >= 'a' && c <= 'f') - h = c - 'a' + 10; - else { - AC_ASSERT(!c, "Invalid hex digit"); - break; - } - ac_int<4, false> s = 4; - res = res << s; - res |= h; - } - *this = res; - } - - template - constexpr void bit_fill(const int (&ivec)[Na], bool bigendian = true) { - // bit_fill from integer vector - // if W > N*32, missing most significant bits are zeroed - // if W < N*32, additional bits in ivec are ignored (no overflow checking) - // Example: - // ac_int<80,false> x; - // int vec[] = { - // 0xffffa987, 0x6543210f, 0xedcba987 - // }; - // x.bit_fill(vec); // vec[0] fill bits 79-64 - const int M = AC_MIN((W + 31) / 32, Na); - ac_int res = 0; -#pragma unroll - for (int i = 0; i < M; i++) { - res.set_slc(i * 32, ac_int<32, false>(ivec[bigendian ? M - 1 - i : i])); - } - *this = res; - } - - void _set_value_internal(typename Base::actype _value) { - this->value = _value; - } - const typename Base::actype _get_value_internal() const { - return this->value; - } -}; - -namespace ac { - // Function to compute the ceiling of log2 - constexpr size_t log2_round_up(size_t num) { - assert(num != 0); - size_t bit_width = 0; - size_t bit_count = 0; - while (num > 0) { - bit_width++; - bit_count += num & 1; - num >>= 1; - } - - return bit_width - 1 + (bit_count > 1); - } - - // Type of ac_int which has maximum size of MX - template - using make_ac_int_type = ac_int; -}; - -// Template function to return ac_int type with maximum -// value of MaxValue, and initialize it to 0 -template -auto make_ac_int_val() { - using ac_int_type = ac::make_ac_int_type; - return ac_int_type(0); -} - -// Template function to return ac_int type with maximum -// value of MaxValue, and initialize it to InitialValue -template -auto make_ac_int_val(T&& InitialValue) { - using ac_int_type = ac::make_ac_int_type; - return ac_int_type(InitialValue); -} - -namespace ac { -template struct rt_2T { - typedef typename ac_private::map::t map_T; - typedef typename ac_private::map::t map_T2; - typedef typename map_T::template rt_T::mult mult; - typedef typename map_T::template rt_T::plus plus; - typedef typename map_T::template rt_T::minus minus; - typedef typename map_T::template rt_T::minus2 minus2; - typedef typename map_T::template rt_T::logic logic; - typedef typename map_T::template rt_T::div div; - typedef typename map_T::template rt_T::div2 div2; -}; -} // namespace ac - -namespace ac { -template struct ac_int_represent { - enum { - t_w = ac_private::c_type_params::W, - t_s = ac_private::c_type_params::S - }; - typedef ac_int type; -}; -template <> struct ac_int_represent {}; -template <> struct ac_int_represent {}; -template struct ac_int_represent> { - typedef ac_int type; -}; -} // namespace ac - -namespace ac_private { -template struct rt_ac_int_T> { - typedef ac_int i2_t; - template struct op1 { - typedef ac_int i_t; - typedef typename i_t::template rt::mult mult; - typedef typename i_t::template rt::plus plus; - typedef typename i_t::template rt::minus minus; - typedef typename i2_t::template rt::minus minus2; - typedef typename i_t::template rt::logic logic; - typedef typename i_t::template rt::div div; - typedef typename i2_t::template rt::div div2; - typedef typename i_t::template rt::mod mod; - typedef typename i2_t::template rt::mod mod2; - }; -}; - -template struct rt_ac_int_T> { - typedef typename ac::ac_int_represent::type i2_t; - enum { W2 = i2_t::width, S2 = i2_t::sign }; - template struct op1 { - typedef ac_int i_t; - typedef typename i_t::template rt::mult mult; - typedef typename i_t::template rt::plus plus; - typedef typename i_t::template rt::minus minus; - typedef typename i2_t::template rt::minus minus2; - typedef typename i_t::template rt::logic logic; - typedef typename i_t::template rt::div div; - typedef typename i2_t::template rt::div div2; - typedef typename i_t::template rt::mod mod; - typedef typename i2_t::template rt::mod mod2; - }; -}; -} // namespace ac_private - -// Stream -------------------------------------------------------------------- -template -inline std::ostream &operator<<(std::ostream &os, const ac_int &x) { -#ifdef __EMULATION_FLOW__ - os << x.to_string(AC_DEC, S); -#endif // __EMULATION_FLOW__ - return os; -} - -// Macros for Binary Operators with Integers ----------------------------------- - -#define BIN_OP_WITH_INT(BIN_OP, C_TYPE, WI, SI, RTYPE) \ - template \ - constexpr inline typename ac_int::template rt::RTYPE \ - operator BIN_OP(C_TYPE i_op, const ac_int &op) { \ - return ac_int(i_op).operator BIN_OP(op); \ - } \ - template \ - constexpr inline typename ac_int::template rt::RTYPE \ - operator BIN_OP(const ac_int &op, C_TYPE i_op) { \ - return op.operator BIN_OP(ac_int(i_op)); \ - } - -#define REL_OP_WITH_INT(REL_OP, C_TYPE, W2, S2) \ - template \ - constexpr inline bool operator REL_OP(const ac_int &op, C_TYPE op2) { \ - return op.operator REL_OP(ac_int(op2)); \ - } \ - template \ - constexpr inline bool operator REL_OP(C_TYPE op2, const ac_int &op) { \ - return ac_int(op2).operator REL_OP(op); \ - } - -#define ASSIGN_OP_WITH_INT(ASSIGN_OP, C_TYPE, W2, S2) \ - template \ - constexpr inline ac_int &operator ASSIGN_OP(ac_int &op, \ - C_TYPE op2) { \ - return op.operator ASSIGN_OP(ac_int(op2)); \ - } - -#define OPS_WITH_INT(C_TYPE, WI, SI) \ - BIN_OP_WITH_INT(*, C_TYPE, WI, SI, mult) \ - BIN_OP_WITH_INT(+, C_TYPE, WI, SI, plus) \ - BIN_OP_WITH_INT(-, C_TYPE, WI, SI, minus) \ - BIN_OP_WITH_INT(/, C_TYPE, WI, SI, div) \ - BIN_OP_WITH_INT(%, C_TYPE, WI, SI, mod) \ - BIN_OP_WITH_INT(>>, C_TYPE, WI, SI, arg1) \ - BIN_OP_WITH_INT(<<, C_TYPE, WI, SI, arg1) \ - BIN_OP_WITH_INT(&, C_TYPE, WI, SI, logic) \ - BIN_OP_WITH_INT(|, C_TYPE, WI, SI, logic) \ - BIN_OP_WITH_INT(^, C_TYPE, WI, SI, logic) \ - \ - REL_OP_WITH_INT(==, C_TYPE, WI, SI) \ - REL_OP_WITH_INT(!=, C_TYPE, WI, SI) \ - REL_OP_WITH_INT(>, C_TYPE, WI, SI) \ - REL_OP_WITH_INT(>=, C_TYPE, WI, SI) \ - REL_OP_WITH_INT(<, C_TYPE, WI, SI) \ - REL_OP_WITH_INT(<=, C_TYPE, WI, SI) \ - \ - ASSIGN_OP_WITH_INT(+=, C_TYPE, WI, SI) \ - ASSIGN_OP_WITH_INT(-=, C_TYPE, WI, SI) \ - ASSIGN_OP_WITH_INT(*=, C_TYPE, WI, SI) \ - ASSIGN_OP_WITH_INT(/=, C_TYPE, WI, SI) \ - ASSIGN_OP_WITH_INT(%=, C_TYPE, WI, SI) \ - ASSIGN_OP_WITH_INT(>>=, C_TYPE, WI, SI) \ - ASSIGN_OP_WITH_INT(<<=, C_TYPE, WI, SI) \ - ASSIGN_OP_WITH_INT(&=, C_TYPE, WI, SI) \ - ASSIGN_OP_WITH_INT(|=, C_TYPE, WI, SI) \ - ASSIGN_OP_WITH_INT(^=, C_TYPE, WI, SI) - -// ---------------------------- End of Macros for Binary Operators with Integers - -namespace ac { -namespace ops_with_other_types { -// Mixed Operators with Integers ---------------------------------------------- -OPS_WITH_INT(bool, 1, false) -OPS_WITH_INT(char, 8, true) -OPS_WITH_INT(signed char, 8, true) -OPS_WITH_INT(unsigned char, 8, false) -OPS_WITH_INT(short, 16, true) -OPS_WITH_INT(unsigned short, 16, false) -OPS_WITH_INT(int, 32, true) -OPS_WITH_INT(unsigned int, 32, false) -OPS_WITH_INT(long, ac_private::long_w, true) -OPS_WITH_INT(unsigned long, ac_private::long_w, false) -OPS_WITH_INT(Slong, 64, true) -OPS_WITH_INT(Ulong, 64, false) -// --------------------------------------- End of Mixed Operators with Integers -} // namespace ops_with_other_types - -// Functions to fill bits - -template constexpr T bit_fill_hex(const char *str) { - T res; - res.bit_fill_hex(str); - return res; -} - -// returns bit_fill for type -// example: -// ac_int<80,false> x = ac::bit_fill< ac_int<80,false> > ((int [3]) -// {0xffffa987, 0x6543210f, 0xedcba987 }); -template -inline T bit_fill(const int (&ivec)[N], bool bigendian = true) { - T res; - res.bit_fill(ivec, bigendian); - return res; -} - -} // namespace ac - -// Mixed Operators with Pointers ---------------------------------------------- - -// Addition of ac_int and pointer -template -T *operator+(T *ptr, const ac_int &op2) { - return ptr + op2.to_int64(); -} -template -T *operator+(const ac_int &op2, T *ptr) { - return ptr + op2.to_int64(); -} -// Subtraction of ac_int from pointer -template -T *operator-(T *ptr, const ac_int &op2) { - return ptr - op2.to_int64(); -} -// --------------------------------------- End of Mixed Operators with Pointers - -using namespace ac::ops_with_other_types; - -namespace ac_intN { -/////////////////////////////////////////////////////////////////////////////// -// Predefined for ease of use -/////////////////////////////////////////////////////////////////////////////// -typedef ac_int<1, true> int1; -typedef ac_int<1, false> uint1; -typedef ac_int<2, true> int2; -typedef ac_int<2, false> uint2; -typedef ac_int<3, true> int3; -typedef ac_int<3, false> uint3; -typedef ac_int<4, true> int4; -typedef ac_int<4, false> uint4; -typedef ac_int<5, true> int5; -typedef ac_int<5, false> uint5; -typedef ac_int<6, true> int6; -typedef ac_int<6, false> uint6; -typedef ac_int<7, true> int7; -typedef ac_int<7, false> uint7; -typedef ac_int<8, true> int8; -typedef ac_int<8, false> uint8; -typedef ac_int<9, true> int9; -typedef ac_int<9, false> uint9; -typedef ac_int<10, true> int10; -typedef ac_int<10, false> uint10; -typedef ac_int<11, true> int11; -typedef ac_int<11, false> uint11; -typedef ac_int<12, true> int12; -typedef ac_int<12, false> uint12; -typedef ac_int<13, true> int13; -typedef ac_int<13, false> uint13; -typedef ac_int<14, true> int14; -typedef ac_int<14, false> uint14; -typedef ac_int<15, true> int15; -typedef ac_int<15, false> uint15; -typedef ac_int<16, true> int16; -typedef ac_int<16, false> uint16; -typedef ac_int<17, true> int17; -typedef ac_int<17, false> uint17; -typedef ac_int<18, true> int18; -typedef ac_int<18, false> uint18; -typedef ac_int<19, true> int19; -typedef ac_int<19, false> uint19; -typedef ac_int<20, true> int20; -typedef ac_int<20, false> uint20; -typedef ac_int<21, true> int21; -typedef ac_int<21, false> uint21; -typedef ac_int<22, true> int22; -typedef ac_int<22, false> uint22; -typedef ac_int<23, true> int23; -typedef ac_int<23, false> uint23; -typedef ac_int<24, true> int24; -typedef ac_int<24, false> uint24; -typedef ac_int<25, true> int25; -typedef ac_int<25, false> uint25; -typedef ac_int<26, true> int26; -typedef ac_int<26, false> uint26; -typedef ac_int<27, true> int27; -typedef ac_int<27, false> uint27; -typedef ac_int<28, true> int28; -typedef ac_int<28, false> uint28; -typedef ac_int<29, true> int29; -typedef ac_int<29, false> uint29; -typedef ac_int<30, true> int30; -typedef ac_int<30, false> uint30; -typedef ac_int<31, true> int31; -typedef ac_int<31, false> uint31; -typedef ac_int<32, true> int32; -typedef ac_int<32, false> uint32; -typedef ac_int<33, true> int33; -typedef ac_int<33, false> uint33; -typedef ac_int<34, true> int34; -typedef ac_int<34, false> uint34; -typedef ac_int<35, true> int35; -typedef ac_int<35, false> uint35; -typedef ac_int<36, true> int36; -typedef ac_int<36, false> uint36; -typedef ac_int<37, true> int37; -typedef ac_int<37, false> uint37; -typedef ac_int<38, true> int38; -typedef ac_int<38, false> uint38; -typedef ac_int<39, true> int39; -typedef ac_int<39, false> uint39; -typedef ac_int<40, true> int40; -typedef ac_int<40, false> uint40; -typedef ac_int<41, true> int41; -typedef ac_int<41, false> uint41; -typedef ac_int<42, true> int42; -typedef ac_int<42, false> uint42; -typedef ac_int<43, true> int43; -typedef ac_int<43, false> uint43; -typedef ac_int<44, true> int44; -typedef ac_int<44, false> uint44; -typedef ac_int<45, true> int45; -typedef ac_int<45, false> uint45; -typedef ac_int<46, true> int46; -typedef ac_int<46, false> uint46; -typedef ac_int<47, true> int47; -typedef ac_int<47, false> uint47; -typedef ac_int<48, true> int48; -typedef ac_int<48, false> uint48; -typedef ac_int<49, true> int49; -typedef ac_int<49, false> uint49; -typedef ac_int<50, true> int50; -typedef ac_int<50, false> uint50; -typedef ac_int<51, true> int51; -typedef ac_int<51, false> uint51; -typedef ac_int<52, true> int52; -typedef ac_int<52, false> uint52; -typedef ac_int<53, true> int53; -typedef ac_int<53, false> uint53; -typedef ac_int<54, true> int54; -typedef ac_int<54, false> uint54; -typedef ac_int<55, true> int55; -typedef ac_int<55, false> uint55; -typedef ac_int<56, true> int56; -typedef ac_int<56, false> uint56; -typedef ac_int<57, true> int57; -typedef ac_int<57, false> uint57; -typedef ac_int<58, true> int58; -typedef ac_int<58, false> uint58; -typedef ac_int<59, true> int59; -typedef ac_int<59, false> uint59; -typedef ac_int<60, true> int60; -typedef ac_int<60, false> uint60; -typedef ac_int<61, true> int61; -typedef ac_int<61, false> uint61; -typedef ac_int<62, true> int62; -typedef ac_int<62, false> uint62; -typedef ac_int<63, true> int63; -typedef ac_int<63, false> uint63; -} // namespace ac_intN - -#ifndef AC_NOT_USING_INTN -using namespace ac_intN; -#endif - -/////////////////////////////////////////////////////////////////////////////// - -// Global templatized functions for easy initialization to special values -template -constexpr ac_int value(ac_int) { - ac_int r = 0; - return r.template set_val(); -} -// forward declaration, otherwise GCC errors when calling init_array -template -constexpr ac_fixed value(ac_fixed); - -#define SPECIAL_VAL_FOR_INTS_DC(C_TYPE, WI, SI) \ - template <> inline C_TYPE value(C_TYPE) { \ - C_TYPE x = 0; \ - return x; \ - } - -// -- C int types -// ----------------------------------------------------------------- -#define SPECIAL_VAL_FOR_INTS(C_TYPE, WI, SI) \ - template constexpr C_TYPE value(C_TYPE); \ - template <> constexpr C_TYPE value(C_TYPE) { return (C_TYPE)0; } \ - SPECIAL_VAL_FOR_INTS_DC(C_TYPE, WI, SI) \ - template <> constexpr C_TYPE value(C_TYPE) { \ - return (C_TYPE)1; \ - } \ - template <> constexpr C_TYPE value(C_TYPE) { \ - return (C_TYPE)(SI ? ~((C_TYPE)1 << (WI - 1)) : (C_TYPE)-1); \ - } \ - template <> constexpr C_TYPE value(C_TYPE) { \ - return (C_TYPE)(SI ? (C_TYPE)1 << (WI - 1) : 0); \ - } - -SPECIAL_VAL_FOR_INTS(bool, 1, false) -SPECIAL_VAL_FOR_INTS(char, 8, true) -SPECIAL_VAL_FOR_INTS(signed char, 8, true) -SPECIAL_VAL_FOR_INTS(unsigned char, 8, false) -SPECIAL_VAL_FOR_INTS(short, 16, true) -SPECIAL_VAL_FOR_INTS(unsigned short, 16, false) -SPECIAL_VAL_FOR_INTS(int, 32, true) -SPECIAL_VAL_FOR_INTS(unsigned int, 32, false) -SPECIAL_VAL_FOR_INTS(long, ac_private::long_w, true) -SPECIAL_VAL_FOR_INTS(unsigned long, ac_private::long_w, false) -SPECIAL_VAL_FOR_INTS(Slong, 64, true) -SPECIAL_VAL_FOR_INTS(Ulong, 64, false) - -#define INIT_ARRAY_SPECIAL_VAL_FOR_INTS(C_TYPE) \ - template inline bool init_array(C_TYPE *a, int n) { \ - C_TYPE t = value(*a); \ - for (int i = 0; i < n; i++) \ - a[i] = t; \ - return true; \ - } - -namespace ac { -// PUBLIC FUNCTIONS -// function to initialize (or uninitialize) arrays -template -inline bool init_array(ac_int *a, int n) { - ac_int t = value(*a); - for (int i = 0; i < n; i++) - a[i] = t; - return true; -} - -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(bool) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(char) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(signed char) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(unsigned char) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(signed short) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(unsigned short) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(signed int) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(unsigned int) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(signed long) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(unsigned long) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(signed long long) -INIT_ARRAY_SPECIAL_VAL_FOR_INTS(unsigned long long) -} // namespace ac - -#ifdef __AC_NAMESPACE -} -#endif From 72e06cde961bd64a087aaabd6c4cd93c31d11e2b Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Tue, 5 Oct 2021 16:00:42 -0700 Subject: [PATCH 07/11] addressed some of the review comments --- .../Features/ac_types/ac_int/README.md | 8 +-- .../ac_types/ac_int/ac_datatypes_ref.pdf | Bin 0 -> 665237 bytes .../ac_types/ac_int/src/CMakeLists.txt | 4 +- .../Features/ac_types/ac_int/src/ac_int.cpp | 52 ++++++++---------- 4 files changed, 30 insertions(+), 34 deletions(-) create mode 100644 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_datatypes_ref.pdf diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md index 3b609c9305..95a2badcb4 100755 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md @@ -29,7 +29,7 @@ An ac_int number can be defined as follows: ```cpp ac_int a; ``` -Here W is the width and S is the sign of the number. +Here W is the width and S is the sign of the number. Signed numbers use one of the W bits to store the sign information. To use this type in your code, you must include the following header: @@ -63,7 +63,7 @@ The tutorial consists of several functions, each of which contains a SYCL kernel When using ac_int, we can write Addition, Division, Multiplication operations to use precisely as many bits as are needed to store the results. This is demonstrated by the kernels `Add`, `Div` and `Mult`. -ac_int automatically promotes the result of all operations to the number number of bits needed to represent all possible results without overflowing. For example, the addition of two 8-bit integers results in a 9-bit result to support overflow. Internally, the result will be 9-bits. +ac_int automatically promotes the result of all operations to the number of bits needed to represent all possible results without overflowing. For example, the addition of two 8-bit integers results in a 9-bit result to support overflow. However, if the user attempts to store the result in an 8-bit container, ac_int will let the user do this, but this leads to the discard of the extra carry bit. The responsibility lies on the user to use the correct datatype. @@ -71,7 +71,7 @@ These promotions rules are consistent across all architectures so the behavior s #### Shift Operation -The behavior of shift operations in ac_int is slightly different from what is defined in the C spec. For full details, see the ac_int documentation in the file `ac_data_types_ref.pdf`. Some key points to remember are as follows: +The behavior of a shift operation with ac_ints is slightly different from its behvior with native integer types. For full details, see the ac_int documentation in the file `ac_data_types_ref.pdf`. Some key points to remember are as follows: - If the datatype of the shift amount is signed, negative shift amounts are accepted. A shift by a negative amount is equivalent to a positive shift in the opposite direction. - If the user knows that the shift direction and that the shift value is always positive, it is advisable to use an unsigned datatype for the shift value to obtain better QoR. - Shift values of greater than the width of the datatypes are treated as a shift equal to the width of the datatype. @@ -249,4 +249,4 @@ PASSED ### Discussion of Results -While using ac_ints we can minimize the hardware generated and achieve the same numerical result as standard integer types. This can be very useful when the logic does not need to utilize all of the bits provided by the standard integer type. +Using ac_ints can minimize the generated hardware and achieve the same numerical result as standard integer types. This can be very useful when the logic does not need to utilize all of the bits provided by the standard integer type. diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_datatypes_ref.pdf b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/ac_datatypes_ref.pdf new file mode 100644 index 0000000000000000000000000000000000000000..898ec876d31baba38a7c2b8d90d5f8959a8e043d GIT binary patch literal 665237 zcmdqJ1#~34k|tbcW@ct)W@ct)Xfrc2Q=7Wm>^9qNX2v!%Gcz-;@142ty*+c!&dk|8 z`$LvarZSYJl%l?nLJ^@NQxp}aW1?q;ChINeZR>65&4y+sWF)jVwua{AWso(qvv9E_ zWcj2hGl*N+xR^OHh}#&sn2DO1*qfU1^FuqkIGGvQLVJAoRqeK36@+bnp>csP*O<06 zw_yzPIHNnGo1GLnDv<*YtUJA*+^8zJS|<7p9?a`^vwsxJieC=(u0|o~i_El}y5(cw z+Zwom7RYxnNX-(#>IyCe=TMofyty@SIT=OG87IAXDe8LSv6+d{Rv?s&yB{TNB4aY? zdc&|t0HtZ@_qa}UH%s)u6PtSgU$|iv!!8?VZi8zbtC^z{AM6Ovf6!ZPiAO8@CXfDT z2`h}Vzh{;#%1wGNB_liik>05~qr2A5JTYsDCH&1b%`Pi2v!9n495p6ANlVj z1{LcvCq}8=U<$r^E~#y99&a;IQEpt}!fQIStO%6>OpgyqWiloj134;%(qN3?=cW4K z@SETM=<@G@WzQ{@-z&GleWry>}r+CxG2w@%;1(-MJ5xI_V`JumgYQ{)mmP}m} zE3e#+?^Uf=Zx_QnxhSTYxU~TqmKq@Y;Ziy(ytEArBR?LM>20OpXJCw)(8IJ# z_RCod_&#TDT``;fdF}`YI9i%077Z$ z-;cn8q&qNx?idCDs5eW;%ZyqQsqY%o-uaIA?}sZJu1tDTDdlYPo4I@{y#e?3rMK6H zB+@sDmENThjiiEKEuB7ZPtr-Vo$>EJKml8r1^`HNA0Wc?E3g2=v&a4K_5i_@mP-Hj z4*&qbSdQ_A30L?xZ2qJBfAE%xgX! zNLXlCSQuy+7&v%jL^yaPco-N&bVMW+R5Ua+SOg4AbW}`aR5a8-Dggrd{0=A>6c`v3 zDjW

VNzA=m8)>0`!6XL4b$>z(_zKNI)Nb0Ng*C3Ig>z1pxv8BZ44)l8zJp<$-@>L1N2FmguQZzjh4pvrCvat<)er zXPag7KUy>Jug<@Q>z(D_#8|qq$jkd}&%0TW=!`eEMt47$X9NZOqmF-OK!RU-gOBd< z?G=AJXqZ0?ef)GhOExcAO!)8d>Yvy}tk9 z($%w0gAK>yXphH#>?G4JuIK)J%trR2#J-+H8~3$FjG3{0)fb;u(tXPIBwZC;}EiF7|;o`lbuq6ML1fBtxfi;67LO`+cqlEo|TcTen7I zVIKgRR7XkuWHT}^xs*h9Wzi)m6f@HQGue512q}azDH?WV>9PN*?&347YUiU*oYEiy zfIxwPKV{@o%>Lvt7~m77!012_Y#7Y!$f&G}C}_lnWaLbrz=iw-H4qr^2S8zD?Ip?0 zcnsNmRWB{~caMz*%T_ssuC!Dp^QhLe!DG<|h@gY(rVs_X`sAajcps+>qdibjt4qo$ z_u@Atd}uo&^=&lqTIkg6L{ki;Q~CIDQg6)Pb_W-4zwK#Kc{f`|i`K$Bliyof<8b#w zJnaT*n_uUS3q}aovD=1semI&rDX@G1xZzxy?{^2BNUox}C8|gy#&zQr;usX-hyyIb z_5)5O6p<*_ItWC|DlecN@QQ)4W%U(!804*Gj!jMQv7SNV$G<9`b9NaY_gI#kPf`o`q=B%tx? zYjN?Gp-dNvt6Cn+B7WCQb=6Mu{WAsLtyYT-1%_t;_Qe9=*kfbE3|k&A2V{oBtlKzI z*@rYCgS@f6V)E8;HzS)y-FeY@k*)~&kk#2yUfvu0Y8fB+kuJTc=!nHA>f%%lJB=B3 z>DTE|MPjyKosNsoTjIq63k`-DjC?(@@xnjh{GFx_X)Lk2EV2j5rjjZXcJ3p9U1d zl}|5c%?JCirKpVaa!7^qVi76U5=94ShM-gRmpgdo;(i~1rF&f3pX%0O9^ke`4xWuY zT}c-v{#w9%JbU20?J_&+8)arE4BHD88(0{-F9>_ST3eL{{pB#v&Eyg{-8%z7ts3!9 zh@A+Po=>=M&c>T7j+KT^`~(E;2sF_`Vb}S~&c8&pUOoWk`Lh%gBj|(R1dSjah`P&DeZUR=X$6g;iyf^K4)By!Enkzys=cr zxZm2FH+C$_X!y8Zk{-3v%pd?SvZg5_1a3%`@SHC09`pqmZbiAYO9c|C)+WQ-u z8XnNsw^vsGpC+LmF+xe(w(?u}ZwG}I&pU|NQI)`g0FqnFz|2uCL?&l&~oj{G*~=p2c4keu0` z^a(!d1F)4n)U%@FOMIL`D{P)b;zoOl2NMPS?TFi zXz|EP8@xvV9lGi?q3v=a-%!tanqHz+@LaMR=!f)iP?eM!lX?%`6*huLsXBK z*eZyUv$Y?9M(pSk^{mu~DvhS@#3GY3ZO0_D28(SzLg{B=Rlf@GY`*YVq~AYY-JU{- zC{s<7id5T1MN*rmQ)dcP#rJjz=GJA`fsk~x!9D=k@kav8@W&Gz0)g@smN-UmQp!_j zh@qvGq8;&8$nMYJlc_UARP;9=0A%C>-*~)+MfrW!-+W|WD_AKIvY)YwBrxY!$V`Ua!$BFpfJ%L$YqUX8FxxNF_ z-XF-4*u@ZDY5z`j>Iu!%Wp_XO<>{B;DaG-sD#qVa#ynxxd%|cW{GT}qwJpuTZC4Ma$vGcW+;55@B@jR*+%Qx*`3m_7x8Sn*HL1OEZ~r>I}VLuJ6U$)nu@ zo1F3~`m@j6TPhJ^ynIT?{JN!&{=yTBc?7zY9S$WB9g!C!2H;WOJtQQi@El4OpcdPq z2$%&Rl?z;iqY^@>lvMH{Ux_5QN+XZa&1G1~GLlAro14}$Yh}=mrv7gdxRiVZK07A* zsfd68fq{a9K|z3k{n0nzPr|2|vn6hUp%5_<3pqMhcO#-QD;bfn3M(o*CFf3oqp^sn z7}t;*2Aa48CH4Hfh5|0|si9be+b^gY@(AaMnvt8E?DYdZzwYj}QCo{*i?_k9>VB(cHB#@g|6PcIqoz73sU*!|!{|-$jaor#S>?Io);(?P zv}TQ$!=yE z=a>yC+Z_FpI(5ODx}StaP4C#k8>*zhhBp)>?nJZGo#6K5>#DOs5VhDUs`KQX!Q#z3 z%aJuy^hEpt$TG-`OEAcl{j}&D8LxPYehcWilGrcyzP!>Ajb7f!{!~!30LJa!1?X2I zaJm6Xkp^FKEzoM$T6SBr!Bo~UqH>JB;5gvoR12~Av*YuXpWFvG5TMnzUS6s7pgH#e zk#z$Smzt-UQC3SEQNKDUKxZmKz)`*A8fCM}lOFc9NG+Tl|~favuN( zeYivT4TcJevb4nr+uDsw2^D3Hm}U;e#^!`EqCpw&XwcMk1HPi)3lmn?t}^Pbis^kC z-^H@#R23R2yVsSyEBkw+atpJq1b3&F`}k~1*~7*vgXhRO=xJXGDumeVmhuveXjXoC z>#rB;GOG8sdaN%oX!kCc$TjR?H4QVkrZ-(F+q@O=+Ptp9q`&+?lS5xA^!j4+0Z@D} zP@VeSaJaoQXa6H|`)8Z`vjmX5%&}yH)xG`a zW*!9!V%&O4sy>CAd2P4`C|-www)FOV8~OBm2Q_r^J3=*uNp2Fe3Gf%qZxyIDQ$nPn zqfzYcu5f5{tVnZ61{5(^-zC&)TPMi$KE-*deW)VeJL_&rx7M?R=3U0hoxb>G^GZ#? zMWA2J{R8k?vy8JsfBvX*-_pq@<-D>1_M@S+^0rM41V(cuU~jS5yXeZG4)51v#gC2f zsIPnb*L_6FT9?z3M(ddv0n-?mij`%)5TmrfjR+@9qw zZXxW`=0m_2LNW&}PDBmqT}a=c_$RvOhCQo9-l(vrG)yq5HqHRcAArovoW^7xmx8a4 z`zIFeS<ZFa7)gOnm^<2DmLg0KKY=sxh>{8ZAKmYV)l;BJM5> z_gO2xK%bLDS!6V3C%d2g_e_$X?(dPBOEe1p0$mf~yHVkDf>tu$O?u|=L{Vdq2ks;F z{UCR_$(=dcE z&mym3qm)bwb9(tzoC*VMat`}rl(Z;w^XhLUiAYMzqW7J$ovKJ6ngCkj4NwRz@Y}$0 z{N$SALg+7qS!0{)e(X+4V`yYcBs4t_Bbg3NCJ_6it9bf%Jn7`bnlTe34`Do&of4Aj{Px;iQ~|F(X#8_YT7g({#tULGO9Vq>ouDY3meIbhD+l^ z|NmRDs2Um%=w5nrat3i+vWXNV%DS7epXYy{1ENZNxCxpZRmh(_ybo}z`c$td5kGB? zfKS8D9~R3$HAf%-5)qTqm5`BRVD4pNHKJnol;PH2Mjip84?w)7MrLRDgEVZ%Bp#Bu z`eMXxqGls+(&n_|cM#6Wa!-4JOO$NKq+Ft4na}`H!8G96Ged7!fF(S;_o*IB8Ebj* zOTa)LJ2sG>@=t?0q45|O%+N}ws^786Ycv>z@0ekRq6Z9-bRf}dF=aN{=7GFvD-Zf7 zy8T~)d?d(?t91G7sbzJQDiodsmN2wD{I?j<*`)8x9{B$;zQw6Jn^!tSL`-s?cw}dzf z=1$?UT|B(=)NV?t@xB83C4HOtlX-ZOCqv_T`+RdnUErv{LZrraHk|=NMx1RD?>ts+ z%JK9&zeI+$xCM( z2XG8BdXRJ+@HZC7jDd_n>lTZ)tLDWxWsRi&|u(NK12IqXZuW`?^q?HNkp|eNZ~> z?P8=)&B}=j?=DWi5%3JhvUHeb$Gh!4aUJkY2jq9jp=)=sCP^wcZkX#`+RqBsz0;Q2FpakQ%36+}l+_R@lH@C?CpO-!AoSCl z52@!QQoSuJK?#LLyQSUumkpg&5ed({*PF`nVOH-a*mkPCVMWGEg51!z1*y=2z2IFR zbN3^=;I^zAbq*lwQ_O@kr1}3uy-J1)54`CZgT!~OE4Z)N{y>1)()xU}d9I{9UKqPm z`K2+d#+Wkh#TIf$WwTdoH8__twifd7$?*>WUA_g@>8*^Yi;@{Ix|x=;n;KAcF*L9y zBMz5yjIC~(V4g1bHvk`29QIXvbhiAV&DVt;{(9+?*4l5v~kmU;Q#ry|I38W6)<`fGg(E8>u#GT`Ty$m z{L-4$eKaImpF(gALGbM;`*Rro)5-K{C;$KuZzg#EV>klg*;$4_};@HJD zDxgEA$7YogNJnSG#v@GqYya6kk-w|`57yKj6>W@b63cVyr()x7G7ejis2k3rYa%mu zlzT!n`3&>ha(mR8*2tF=zs{rhU}E0lti6RK)Fy?YXR4=Av1RyUkh5&Bz>J-7JeT?V zma23D#l-dAo2qnynl1OehO`_Z%rdL`&XTC*o?x)FDpBNttDHtDPiE70-kv^S_|!1N z1SHLl#+K*2yy@W5BZiYz;b)-KM!(2q;r_Cgm~}8F#R!H_=n`!^jb6OFt(;jvcdnOf z3Oazcj2Y5$VV|D4)Qj?|CL4{J9oQVmPs?_+1Vxvyw@I8dlo;D9Txp)b4qIjg#B4^> z9-&=Mm`J$DRmX;45rV3aD50PZ@{aZ4PMdw<-M9Og8jpU3_vnsRPtfYua37V3VO5Z} z6p>bSex;>e{ZGSFO4(+Z&f1rEy565r>dsoN3;Y5`W0IP#82k@+_;f@X=Gv!6lPTD= z`K_Hc#N;b_v@qIbIs*b066}+!fYh}z0UDV^N2~tUds>}@efF3P?Dy%>0h{e$9@IF-QOADQ zw`4ghce6dKPcG-!UgAv%Z@%o2K!254%bv$SxvJRz063jDy0%uV*`2uSw5-klS8n|M z@BigNEjUht&wf%Ne)jLvGYI;bJ{{Jd2M`kAQ}~P!l^g>V6A5#tF0U93yQ}}9G9rFj z?9&qf2t18Xxulvz06hRW>fvUfR)H|ZcWk3xm%wYSXb024uL6K==??(45@%u@=cO=W zE0Qd8SE(WXV}!#PIH?4M4AmBz&?bigj^Xq-rqnj*h`1IBNPj>C;+(LZ0w;?0CM;m~ zMHlZ%M2gWSFWbXcijH_jr{>_r;C|x1^DO3DKHL420l0I5Idac0*Mh#75NS}fRdAd* zJUbqWIN^7v!H3{WPc#I0xE<8es^e#%OxZdXGl{8Zqt{gSJYGOY@Rn{@NX{Z6UiXY4 zEdZL5$OzrCP}&em6%tGl5+|}YG>*cjM&8jK^c3KL2|geaSl}?J3JeFuM3l+JtuW0? zA{)KN+O9XL4~`mA4jj}%ef?anspRDkiB|>VV*>ED)HYwI-iF5m35QN~o`tNz2U9Xx zVU?%A`3l}C@-#xQSjiViz{zH{La12OMF7K!%NjE533zd2bsDVOAgJpW+Mzo$iWh{K zgqSCE*pi*I{|OTV7l1&TS$$q8K?CbEmAX<(2p@Lm&NAogs_d@|wcYC=b}vx;uHOx_D{Zt$ z(G5R?d@0&Vc^9Ll4o-VYxY1a2^O)0G^)A^IQCRTaP3$l07M897;68-K1S+e1cY_G% zN5RjK#KzS60Eq6EAEONgGhhz?66aVled$(#GiayyB}tLxh_#A{j?|kI4!|a< z=Iab_vIkiUunN@ARA}DZ?vv~r_7YN+`$|&6Bn^z5CMIMw;@N6$WA$a7WDV=N@3nKh zA5lNaVPqI$oK-o(t&MPJf=-u$6AHnw?Je~s%s=G=u>a>tI#3x;H0jC2BLkd;DsRBs z2-v$xX_92pWk)LDHnKo&!$Th23GFk0#6AqZEMr9rh_4cpKHUsGbI8Dl?M|W?7(C(u zk1Di1D0o1z6fXQbz<6PM;oL!Zn251HhZdycsfSQA0Kf~BQr;EPRa*MXvwN|Pp&#<9 zzX?H?yJujS822Vz;lcDxe5)Lrpu(K{%Ju=xDjSz(rv2P!MD z-+?|41iI`Y*dc>sYtW|8Sn>9qs$CW+6XsWc>KAO|Rd%2?vD32wNiVGjgpPCQ>ac1j zGA>aG7&Bw<2{m&Q(o)J=Fk)IPnQ>)(n_8Qo8-V6WSWTtM0beIDvU;r59Fu06A0DY9 z=}gu&a`X4W5Y``H1U}6WxLRXBfzOHNvBg)1yCb7cZ1jQyTVT!Gj^1L6=!ZRfH_=#! z-9X)x9Zb)bG6)OdMfPrKe3C`lYvRgsVVNuDYPf}?#`Joh)WYZM)Yjv}`61{QHNRj^ zIK+E^VcSkeSfSt`L(c-JzUlvufc)54;c#mUqPW{CXZd!1^1kZlCFf5r!DV3QS8C`cWX%@pYYO&m3_j4_Bn8 zPY~(42}8DA@@w2R8+%7Xl$u}`C;h_zbrN>aoX%o1VAQ)1-MY-DTpW5>lz4n7zRQ+0;jO&(xVfV z`Xqv4Z1lgjhr^4UI*}*$#$i&^KO#PY!zSt_?<(Al)w3Ui%gSOmY8l!bfmTb%{7(4x z0k9<{Ep6$Y6e8-PF1z0bLXJ!9cQ+Y66Vf-Qa0hA*NgF2MWZ^1J|8^Xno08O6S|>_f zGuFi3tP{t9vAF3J7{Cf}z$&O-6Rz-1<1hdc19R)*8h57_Pz`l+4{B~WmWvM6BS*uV zlP1;dW8KC=3gbeN+8Xv_ue_o;ybFh8A-hEVK1yT92_bk_U4}`^<#6a=-g`3x4vYCY zwFLk7E|Aq-h(fGD1FXW3ljt*D{GI#%QU?f>$*dEyUh~O&zR`N%*N>&Y36f*~`+zv; ze*_+i+dJ7pGYAXYd+2;d8xpc`u@SO;M#Ftx>6r-ipcy2b>|Gr`Lt#}IRGp0MoE?mu z%#(zHe?_s)3OrNCxEKYY%M<#x!38~|u>XJ*)Ta`8`2_O<+){3#X zLI}5ucxsyr<|O$mS>)aCSV%cVb~y7W4JR0Aw&sy~{$VbdOs+P3?F0XPmF;#Sc&Wa9 z$@gWjcjLY0#oc51wBzlHkzXLEsItQK#qHts<$NT03FtKIi+%cJ9!k{Fu^Hg2W-3#1DOyE*&bkQ>W|j*9J$6!M`pRkZMMED_=x zljP0HO%+1gL3ovz9tk}woJ10mW~5YV@=#A}k+@oJ`QV#spX`On&uU%2r8ms1d|fk; zp@~|eno#FOjIBgEq(Rf;d_UUID9UzM;iG*N1m^KWR(jWA(emov^`F_mnC4BnPBW)x zN$Y93gT3heBX-&36{OwFg@?Vm0(lue@DZ4^_ia7yE%C_5(r&Ju9qukaE;y*DXO`xI zDHF#;Pqkc7%}8W5`e#CQHpF>-wi6Us(;Kk3GfWE@hi{n+e{*`-nvP+5UA0+?HpI0M z$6iC!(ZVN)RPfDNTnKN4Vux2j)_F#rytQ!UFxE71 z6(pV;%e=Og)Q)_prQT~nzgnXo9)8SxSb(g3TXePl@OF{DXGX?G2@Lsx6wr!FCOTS} zGOLNmvSl<)oSduRpqRik>O#~Ur%00k@iR?+@%n9+;Q}d8d#=6SyRi;<*`bcpv~oL9 zBT172y$9iiQkf%XZpcm(NW6i%vtQH|_yZQoO3o;|J? zE5pg6FU&+k4=$d!M*)7j_{^MOr4`FL`Gl%S2{;fJeP3Z-S)EX%kz@-Y~cet>5 z#t$tGQ!GiZ`C}~IbkJLdqk-yxX{17g4PhKb^hj2dlC$;t{;``UNDhPU*HeG$W7iI{ z5047N;lZ#2e>4eJ@6{#ndwqz-$he-cONmuj>tF7$HJVh{@pcLMefeJWM{c|5%y>j2 zQkmnT!}kf|PRX!7&{k!fj-XsB0h-C9uBt)#_uw)yZJ^Ny-K@eEqMPzY^xxjym?Z4A zK-8k^%;3@&9w}Bls!pKkq$!`65eb~#2#^&S8Pum6Ms^KwLn#pBK3L@iA{8tKa2BS+#aFxnvTpV2*)y9oT&l))p}Hc&L{)h z*Fn73*#vb~0hG7yFvX-6E)6MAc$VAb0`j-I%*0h|%7@%D*l2Xi;8fqJsP~dHn}2Ov z3p8qOJ=2vpnU*WIsdh_T^#yfySuyUh=bMvCIWu4YoY`6watvDc{WE6yKEosh}8IiXc zI*`UffwcpSC;B~1=?VL4*U%kYz)Q~b1u|aXD6FrpFY!)SQ zAYA3U)fW3Pu64hxQWDxCFwj+#r#iu$w$nO6rtc%mhBr$21qi_B zDkwK^!%{@}w710xaZtz>yhY4jGN4Q}gQ0hj+q_2=#i1`k?_{Sr#Z#3zuw{jCGxgP? z4|;`glZ{albc&LxP*;bC${8T_Li83{(bGxk8OpHTBE?@ql*4Me31Vs_EVcs?VTj&p;BVqZenD2tI>cRevZj>K?LfB%^evr0dp~xC~WsN_N&-2 z=uK4aPHfEX<}V>ppWZTB+^fI=g9bTCIV)U_N>V1Sxd*FqYyrUDM(%a(Rp+E->`9U&w_AO5FldC6O3r1re-oE!dWpmhwhqxbuf2 zqwVW0k^wBqt*$y9)ZG-~8=~pM=4~jxTDn}lUDd7S8@Sh~^w;O8Ok!zw%E#9;*sUtA z9v*}@^mzxROd1Ry5_u8%LXGaNl4BC?kzHz=qaxyAx9Qog&P1vJ4joAr8hQB)VF$9U zONL(c=u}sYo+Wvy)Oa_%s;-}|tJcqh#}GVG-`0}0rbwgnm~$r+<}xco;+{jABh48a z>|%W!MTJa`6qS~jTZ8Xg2DCs<(1)7H3VXHCteC|($JQakw3qL2iY~6Ma{-81gLBCB z+cf)2Hpu7+;|LvGHgEXdUfj%S4gL^{onS)Nf;(R02<9^45uQU5P)~=<9C+}iNhHW2 z0$oI-!@W+dDFa1DcVcE=78hZ7noyEE4o1r4Qm|O^G(@q1XF5FE#B-VXfeTcX+u3n??-uE%u~E zg!ze%NavCgY~?)nNsho=5d21=72uD~u6S8Sj@}1pb{*lG39^IF&4+rNXdug4(=kJdf=OZ^9#~$w!=O?`%Kowj` zGJm6c{;5Fzv89BWjf3f*n&!W32>aK)JOA(1p_%^Lf%K`j|F4zkf7zDwmlFNQis3&~ zqR(_?qIZVT)<2bK?#V1K8DJ8J6(_=0A~>y((jf9Ux5vGsy*nwMrg|pxjdT5v zju*FTo~F0EY=1t>Ihh6gkdy2&q0ZZDLbEFPytC}q;K{s`J0aYwsPpV^!66EsIc3+R zbnE0tItcD7@Ag&xUfBBC9SrL3=Jsx}F46U5a+Q|rfgR9L{;1_fR|48Im9NC=9hWT_ zi=^eDotBHj67FAok8vKo11qLcx*+s4;KpUsY(2xJk518zFbv)ij;yDQ`>}~ zLx%<}G|*88rkI*UXDjA)P7o$|bDcEWam57rppcKW=7V~{U{ zj$E+-Tx3?^KF#4kR+;XelQl@3I?xh`T?XHCI+!w5eLtobVFKqpYk zLz6NI@6HLHx;;D!V&_Q6R!N=>I!hT7GcQ_w4VHc+9E5ZxXvDG?$c83w^r+Mz&zBqt z>xL3Yb$t0_0QpN92ozii)X#lshT35X`$PrbhiqW4q(?219(Zm`^~zQ1z?L~@3$Zd+ zVeiU3p|y4+O~SYbi_KvMVXN&pADC-KV7~^Os0@M3hbZ!l+2Iu8VG{Pq^r6S_4pMN& zaR@r1iqbUnN6P2K1nCQYY^eh2XS9#-FY8f()j6Y^qjsNcZ`7-M(3^7Pl&(#7IXm{2EBy`; z9^T&ZQnl!T{Y7&D~D%8Ww6csmN?p6Jx1!DXIB{U+r1!3yJLwF)I)VEhaRcU%@B z9xuCT-Lo9VzZisHUnuqxLMg$KkckVWNs5d#CY2Ns9PY$8cc+dPaNkNwo_LNv{|1u? zalwO7zW!bttNt6nF=}4~NV-%Orv^-hY>bC2)S)XB;cmF3j`B7jSWzsjFlwRS+_nLAHMwD)wRF4BLYDRv3*Af|;wH#FrmGZJj z^^yjO<1UQGYb3RoR8A`Z&Rgw|6 zzAoy$>f{{|LEhDH>7#*z+7 zV^qMJA=R-=udQ8ZlI6E3xf8J>H_kibq^hf*+11s!9NEnznqn8|d`L+s_w0NcTxm~( zC~&UN!;;%otlURiQQK4LU-}RTw>56;qHq=EXIT!K%s~!b8?;@WSUn|cl@HR9ufO1$ z+@Z%sqF4!7NJzvXW{;3xn5S`Hk^wZVy%s6THc%iPNBWU$T0W58U@*>;YlnaQ__`*) z3!AXU?YsaHZ>)|?`)=N_yu^`U>4NiwpDy>@=!Hm79ap zubd&F$9n8K*LNn}YTO}_tkK6m6-Z8;6fsRp_s_dHAy9}@3ZF5{Y+!fcbm@n)BFJ-fm`Umx zAE`)M=*^{r8$$ZR%*#N|kw4&+zelceqYVFWx*oRZkMs<5*(&yx2J$;TfUO9){xJv@ z%Px5wVyR&q&bjOWcPT6o^ zX0Q$9sXaKS67V72tbBj2E=U?0qd`Rw_2T=#HqBOD77}lcg zerg^%xkR;8qWR-{Y$W_5s-s?4RO~HHQ;kUa=@WZX2hth0mnW_|^pbQX&lj&L#^&|5 zQQz@0z3F=LlL97hw}H~hxZk!5HjanSR`+(%NpzN|(+s(NYm#RYrrhxt!;Umd6))ai z^9`c&YoUy>arN2lCJH57`4-wbqtPIoGI~HMyGus?rY##fBbVWiIZ>8C-`GS~T*KkF zTO`L#j($AZzK24jYnKezl)T?JXhR72dbSank(6HDZpnhM4A*q2*p|%0(_|gpY~+&q zM~YKA2xs_H5>Wh*Q#i?Dp9w3V~=+G}^?(?Rk>%j}f-GuXC_~f#7jI5T#1Z_|~~IyCe(}zi#P>$Q_zR zWB+c&rdFDxC;+`5#(Hs!MqnRVtR$%R510C2J^Lp9efZ@im(0fqOXL z!O?1^2=`MwFtYv2 zBI#f3_WvJQB>naO0sq+|iTOWz8kqkpo`%mwlKn{w()xjhhaO=EEt|EmEbQ_%j@E_FbHC;$ysY=<2LXbZ^DYjEy;civMg}}w z0JpEA+`}qO*G+@jcIK9&Qy|n>aXr<9vYr08!VaKi-yxUE+l8ksoe%CoA!D%HSEcR{iea}bObK2iWNLmXN$aD0pOM-2O(1!$I1w9T-f4Mx zK&al4xTOAm9lOy5^Uivv%*Cz_luFgT?LK`hv1~L#IMb(huUg9(`V3d4hFtzK2#5;; z5*FAP7No!jLn-JUU3zk{eLTkW3+Q>=1~h7#LZDKgm73*%e6M#b?}3}ShgZM?GZGW~ zYnWoU$YBG?BxXDSN>8`?#bC23UcjotX1#21;LntG1R&QD-su3PtHsg(%2SDyIfs{u326Q3JH}1bS)&W zGP@7@45cx39g3IRm{HH9MY}u`s#$@8pU;T#*?@_bLQqQS}|&zA{|P z8UcsgH4Bj0GG0&}pH!$)2}^2apxiVL=EH{$ga_feY&C!qMiBjJN`055YdV9=Ulv` z<791iTQ)t|-(O0oJ*pB?!iq}56`U@i{g2s7$1SBaHP+M1xINm^R`F~@7ESO^c&V>| z5Y+IkYJ(&wl_-Gw5X2XoK;1EYz?gw=G1>YyHj5m^xZEp*-4wGe>o3OZ7yMNXY54ps zOPdu|*gbr_&u5C$U+R85F!4zhVdju0h2G}PTdmhf%`-MgdUp%4jgX(NQNl5Gs>v!W%Gxs>OHZ;5KS>KAsTFv@^d~)u z7~Zq%ENvcH?E=#=DZ5!?XJ^BO;+P6bPzvX$0j8>vJr{oP=!o-#`0~>~p*BZ=Hd{Iy z(RLTzza_;vEs!!B>nW`EInY-KX$NP-n7tTnHQfUHXW2RBGX)<_I z$5lxsPbyF9y01~A(8D^DLw`$0I?*XqOw+NIZzV*_TkaU=j+fAv#n>ZM?B}QJUw&dn zeIO1CS%%H64H=OBWuZ;2>mS&Q$xRZLHY@l;m3I-bYtUh@c=z#iYFWE zO)cF)n2s}iPTwWc`!S+0f?;mn1o!2%ZgKcU@;E^#q+XE8QhBGe3{6nHoLm@P>W`;u zGpj$!YZlVhWbsPuuw+2j=L+SbUI0(VusuZz_!wo$e=*LDv>m^uxDME?6`^ zb}8git2OXpi@3N)-RA%$+a$V}uCWCqqVIUSZy5jTE{T$jcGfc{Et^mk_dzx8)y1}U zXB#%A#h+!uwChB5POcD}3RQ-H3N>q}#NLDc`Zd%0iRZeEG);^o(hF;P=;W=913hqrhMd7X^)J5(zU3^ zEqrmBioHymXvtW-C#6dF0&y!GI>M3dK}o#boLuimH~=W$c>lS@Vy;M&6_*ZwQ@@ z=((_lpe`9C6p+mrf(c1qeJz{q(eDOMO+}wmyZLwCs4ffvxnn|z!V2RJ}g z!}R4jn>t&{j+o^R{NOK~vr>+r#39yDjxbm5u67+oHtx&1I}=<*CcQ)3%fA%F6}OVP z7QCp@+L4;zEMl`;@v9iXl)9=?{LWf*8=L|$Bvb_|0=7vWhw;J6Qw7oprT+ygq`vbF zTBQNF=j?y|Yf4JMZXdmR#l2?70O9Y|L%;sju8HllP??rr4eJ_7E44(8R;znA6EOyG zqUGlahPOTu?j|mtu}0I;pMb}=Cq%hIwK3dcD7zGEiLsQXHMAVgXDGn4SYlFiy}n7n zFzYL+;VkQqh=pF9_gi%#3Vya6u6%H@m%xL_Z70JFL(z|*t8wc`)M8HLFEJF7J|s5G z$2{h+pBc(#nO&iDCK$Xs>xc3uCO?KKjkQB*DAsR;tSRY;haN3I@olYp9KJ*hh&>E*LRX((#Qq=9kZFNN}~ z13IGo=$H1_;1P@$p;d{i9b9Y_zVG*s(NJn;buCWay3;2amPT5%*G-1fTDNLjxnYc7 zImFGwvJ^bXUG%vr`_frKT)to6RY}%Bi+&ZiVpQ>)k3%>jO92KA#p0eC{EDQ;;NAZb z#8N(i+rCp9((fpWC?9Gn{rT*+m4^g1G5y_#C87Gl4u2>5AD-lL5kna7NhPQ;?;>G4=<2v>G#dp#4<)X*6r_*P}!}WXR zdSk&C@QmvK>_0Hbzs}$P5;g1`^#51XF#gwx8peMrY8d}r)G+=NQB$QfW_iF5-*rKC z&W+!evJD~=csc6dmJWVQf0*(=l}?VMHznmJnQ`&57?_$OG&f!4mIh+CbJ&1SAckQ) z17~$_4^X-@xY(w8)CX@|vk8TI5J5(`k|$X2_S3 z#@LfYMbYVx#oAqsM0OU+Rrzb(n{qvw_Li_at2{11@%@umw404AzmL7Y(77Yx2`G5hBhpEM@2Mr+~zes|kBTL}3z|8Y=F8CGthk*^C;hGqtzb)2%0J zpG#)mw>?AQ7Et`57V2t2QD#R;Jptgzj_zZqni58&jRJZ5$>N;M-LmR<^hR4rk?2@* zxdP_-s|&*RavsA}!%IHKqaDcAO}U4t zgOb`eglC|{RSDxwLgAI|6fT{DnakXs<2PNRBwUj#DORUb+(@kDycU-VRI*qxh5a2g z<>om8k+WmKl+E5hg@v6V7csP7^Pjfy|3zsIw*TG5|8*qI_)kfi>EB73=^v4F_LSX0 zJ3{Zx8JtiG^Jv=-;d=Sy8m=thR*Izds zc6OGbsXadrHDY~Svs3YBwsf)kZGlAmBe9id&sXsf%P#w)vX9ZH&&S}e5Mm!RoqqWf zy?;+t*AsCuRis3i1P2)#d-5Etnnh5Zt6;GvJ_J@!|)pIruW zB-Lkk8W&=0#kl5)BrMrLGVH5M%j1#pwYR&+P43%=jfF6Zed2JkSFHmY^e1a-WL0N! zOBM(}B#@sLkte8lXf>-RwAQQyLZ%K5e7aYc6b`?$Q9i2m6vSBzmGv=svmJIzgz zEfaVj;hQu8i($V#48d;BUd^zus>gzBEyk3Ace)O&5fEq1iNMO$QKW5eJS^%m^ARWZ zn_39P0^$#1B{<6Ixt|7ofMpu`?e=r|#R#(1WqjQQSkug2lbg_U6f;vS zKGKqZORXd87(>jxV{`8&s({(r!)wdkMx4eTsi%KxMfggEnUOXV<|86v&Dqp7tRY6c zxQ8H!WLRm6O6a;E^dHs}gS4x8So(zD@4q31Gm$N9xcGvCE84(ADz+^dNVIl&{v@8pu z@JzJszU=v5>I@d_;ksrtL91lzwfWE5F1=WeR2%lPtVc&FI<^ox8BOOJVrT2?Kjz9g z?}yEGy}`|o_>a+?m+zx+jOU|TM1^Oy-*Oof6=veb9G)d8y73pT9JXxBQ$<9@U(jki z7d^Nz;Fka}gp-r3pNnVK=ec+b zyQJcR$iybr9=DSJ(ctis48+SX+IfTOoKG~yB`rX#w@oMvt89Gh95YIvWgjYx-*4x1 zDE2yrB&CBjM*46JX?a4wMau%aK67O=Jgn=Ty~#_&d;{pPb!f)DFvKN~TOweK;iS#} zvK;x==ijSwIbuVR*&WI!(G1HbXgaj51>n!s&sSOd9S7N;GUp%07Pr;An9Q~X_n=)( z8EUza?hZ95Lqa&I$lOFq%W~s<=e;F!+n`e*|A=s2)7rc1k6K?8N>*&w$92D z>{VrT*_4>IK9gd7X}sVS5oQPVgZpARteWP{QltQ7I5s&Cc%s8axYH9DZe8W6Kz-#+ zMd-!1q~3(8q2$iqW;^YVXx3$PHAl8C3 z3Y;&DD&0djs8izEmL^zhCPd4D0^t>|y>3NBD|iF`_9GSKun9fIG8Rt2Op2iwMdo*n zkUScRIvFoXsH_l6S6NOqOz-in8;ElJHbS|>vW$a9cG(aBrzTJDYkSS+oh&(cPbl`M zaXlfKtVMkz#h}y*w9uAz+4<05K<+C$Z*U($eaOazu>2z*g|~sifo*k^Vxbr&TBHQu9P3ljbd?r+t0mxK@JK3BLlj>9sCFs|0vaI4 zb9!pZL2Ev;z2s(YR;lE$A^69%~%re>{oe8yns`29@5%8GcJbynj4-}F|+nC8K zm2O&5MKG`&Z7R`y(^b{{T$8o#foO=9IIk=AfxA=`0KJwe(vsMEv^I615$kC(e* z&9%c=tQ^8CLfRuuY68?t5NjR6ccTT-|M#;)lp8_<{QBSFvuKX1GTiulO9EDM7 z8gbT8z&Xh08RH_dOOeBgNCnjYy@=tZcJW~qCzFE3OCr}1 zMkJm#F5ltaZ{mF_cyxCCp|g}c+7c)Pd_wQ=9oG<76J#^x;EWn6enK2L z`SBn2MLW#GC+?fv=YBEXZA=3J7aMo*lJS+uL$m1kJCqd(_hr_tbK3)iY0~)zZp%ua z2EzPf$aXr&iE2NKP1#*S9VfMB(oHz!z+aFKP~UlRhXzbv$EV-C#!DqdpWs(`d{KId zLa(w$ef?=1S3Ppn$7?d8c0wJpw-<;Qh)dLof&M|KurW(DD%+WQ;Bg#CBHu*V~eA|o{K--iEI;X z=!HpPAE2am(C{8p(oE-f?6|P0t$5eT^%I&`@dr&nh%k;3l%Fz%+R~D8DhQ?{VsP)V z$`hpokvIdwY_MBz*A{{_n0I02YNONZxaj)w&RqE;#|Sva#t-2~B}^RMXuX;NIDHX| zXzFAv-WT4c7=7Y{!t~s`5RAWu<+t&Ub2f>oN$q@+*su__FEjkEHM?Iy=vV{Q_){I* z+4e~&@KWXv(a_r`dPNv#fXU8V(j5?T>XFzv(yF0ntIK}(qsL6FX{+~d+v9|EY>-I@ zLN;2UzB+vHWKIJ0&*#i($?f65WohYllQO&`OYqo%m5%^oNXYP`rWOO7v(?{!&%TMd z_qqx6l~@M`;JeN538^gY!W zV&GSp{3UtVzJkfAczCa|=+kc3iymVWK8@j#c)Hrk;3X^z3~?7i)#3?;p@7y?F-)R`89L>vG4=P z#yBJKAAsmzH1I!M&qU9}_A#Nanf@u)GyOZ)GyM~;ze=65+@y#1yYYd{hU!S4 zI~@Tdx+UEfwEF|aleE1K=3y@3aeCn@ns7C>?oiKRY(Wl26f2q$fBX;yqNVIx?g{$I zzBtaN$>UYQ+oit2Ga(vlRe^wJ=YsABpY+ z<-E#F1JCTQc`7VuaG-U_)~pb*VlDz>L{-}iqX&yu{w=>nt0~5}K0MZpvO!$THpkjQ z&=4UYBis%=?r}ORcF~6QBBrNvOLJ+$tScs9x#1VLaoLE=X|u|%vBewpPTWq$>NIlf zi9za}Cv~yV+3R88pGWsFxcW75)6c6_g2rzN(FhZYXL8?b{j_#zKy&FIt{C$ZrkT4d zfTSJYEw&)rkP!L%F4G?DOurrfkH)t*^ZY(0ZSV>oG_Wt}AU%LqPitlk1jcQ z#@vynNIV9TC!xYnFA<$<*=Fm!_@>ETAk_M1R97V%8QP*Tv2BxH0I#(dV!L|-y8BP; z9`hgZ7tYkz`7p%TCOznFs-jkBSTi4p&@al+lWHoNgq!T+x}{w-eWrg{`@0F-LI|Vz5?Z=|QJ6oP*m=hqOv;l;tgPt6`cQ z_FwYH0C-!twO;XHWq48_cf~Pg7q645bY#w&z+qyC)+fk<_Ej)zrQ|VwEd8cFxal`E|EG60Jk5wNw-)-ytY4EpjL?Qu< z277;E^z+BI=Iaf`FCli(cS9WHn7k=Lr4iC?TVyrND}DVX+n^?1L@+vTg7 zqNg!^{mL!L?Z)`V=`P=U(UY~iAuCyQ#~?kK@p1bZxxJEt(}cO<`+3U0S&=)=$5Zp2 zdww6&T@M-$qqaZO8iN6-xE)ig-_ zy;I9a{53Uti8zLOh}eYtix@j-PrxYm@d>4e@CnK=E$p3wJHsl8AP_-pZ|*GKM<3zi zZ?dQ$x81kXpzCGq#yu0LM|$jn8%1E7{lqkR5Pl}ncW_w!zAxs%#-C5HrU|2WRb@oT zL-&-f>t}FJav$z=jrI-MBgc**4RKRyB-gXhvG5&}OZNFGi4LA(kprYNL8ag;M{|k+D5{K`Q0UT*fm8#Lqfn-&DL|(0+nDAtD5ljyc|G3fN zakVaI2&jh$d$hLWs|Sd3kvuUeJe;>E(4)?IEOXJ4&S=If?0hI5BEIN~L@5Msen10G zGU1V(D?cw8&I7eIIuX3+xJ7*%8JY1c~y%Hu5ORW?`!7j3S)TAC~vR=FvnYZmVt*xi$Yjj=HzwJ z3(dfIQIlKz0K7^lIj1#acDX;Lr){n&LEX;mE3Hv+LX}w;&eE)5luE;Pv5o58{9w4OAbXh!j$Y*c1|fkPt~cdDF@4%H`v<}_A!;K*%D zxT!_cQZL4eJF}K<2h8S2)n0$NUVl~u;CwkaJXr_W4LCoJ3R#NvKc6>ljpPj=@J9d! z_X$ck{NRncv#5JBfx$VBC&oA$(^-SCAC8#c@65UDcw+Pu!vA(4{o8byUdjfXfwXQb zD9#9RLk66Kv~~+u&RWaYCH;TK3Hd>QGT|Mh4f7!gMnFi{55gg6m`mWA@`7P83m(FR zJ&c@i5k_sJMe?^8Ap#FtSoaVDAgqK&8R9?xE;m4p9Ysc3i~%ksJ-Y#j1V{+K`ajDc z{m(M=bGUNSz0J$Uq^DPY;eQ`3u@)R<2oEO>!bVCnk0m38zMeutdR>g9y;D6bfSq zzxq3rxN7@%mjBhWn_=d1>mX|vPAv{WS`ljy`u{)juSrO&wy~)d$?A0-{ha{UVWmKg zR7oVW)oBF$9h*u3uI>Q<*Ng;!n{Br*X5vSb8;RPZBvoCMkxvCy2*`ih9iI^F>zEc( z0gK71Q@YoX1|yQrf!oX$MSRzbhoEsV6z4?(uC)+JoOa%c_C5q#f^H%`cqW9>D}C@Q z=p4s#g49XvaN5k$nQ%%xD;^8UMkpQqbApPsMLp|79YD|3Mb)rEbG{VQi(af*j4e0g zmr~bG?HRiyKRxPK7$?ppP$oc%$mpn6o{MSkNh{6pGF-WMHdY+$P%2-4sh zIPT?eaAh~F zY^W_wT1qxS;oiDQbZ?x(Is%f1y4t%K?(airQ+V;e`S{!aWB|?f8WsR;pSpw}`QpD0 zKzvLk1l^c!xD+0HFV$gMzBb8$lhikt{$T&1cG4VQ2ja~*E*Ksae1>(11-qhMY&-p% z-w`mmRx;lH%_X!tnM(3;h>}U&~P<>;y zo^B>dMq38}QSaYVZ6-vI@_V^op72s5R2;I zyDntme?!XFPD>ZIo~agS>j@nGLO7NSFQDq5t*X{xMc~${u(YqhoWNKPCJBa9y-s%S znjc*mr;6}&aTjP`$00Aox<9HtwVEmH{>F!pOh2Gk+m zl>2zCZMRAtLJOAiizP0JTLR2yrFOF*=M5u44LOHduAwZ;7UYcHNIv()|D|1zoz0&GlyMgs{f7L3g8_vkLkLvXMUe>LII5XuR^YhHBq8}2+? zoP?!Y{N40((FNSJ~FdY^`pso*$fkbA9l^(BHsXmrU~`d+3u zTdhJ%6OHZKKF)|o5hX5%%_MqWP^0+Xjej{Zgc7G312pL%3W7So9ly$FQhu3z4QHDY z)Zzkhv$!L9eGB>BhAKLu*S^q5^J}WKSwpn$I~21-y}X6OfpYvI=(h>ybh6zVrx5}v z1taFE0Li+$a@+Q%x(*4>B1?U5j!iS{UAEXZcoRJ0!LZlOk&`C&mUJ4AkB@HSrXRyJ??VVvt~RS9V9b zFC3HMK-W5Ns&S%nRcr0$jdmVDL@>ox=tv409`Y0RfA@(;FSbYMl7m6*vHM2INQgDv zRuWV+Z;@dOfhZl62U{tHz@>MYs{&l0rsJP+qK(z8XHb5CXVsd+f}87=@d;pp3-kev zcOYfTA6BRgcW|zbW%A9@DdYAI-+ReqVk(s~nfe)U#T*k(2beEw1VK#RacLo|)2!Q} z(YnKz3-FasCbjYSvE2m!TvUA|QWwNF=!9l{5;W|R`xLZ;hG^(qjv&y8i#*IBW+?Ai zS}pl3WEHx2Qn%#DIN{gz3(?Ic0Y#(+E3IbXcMEp+*j3B zru=qNfLkYe71jJTxm~Z^2t0N@k*%M_1&jWHQxZAq*`H*WMQX`v&fvd^l#tpJ2COGFZ0J^A*3?7%orIV z+lb88YK$Tk0)B*U*ch|NFtc5k@J!|RR7hHvZF`F=`x)HOk5@RXR;)|0uc3t=-rf%d z`Ae_9srD{)&>oHV5v0ra9i&lP2CUzaG^XC!<}Vx!qM_Cv{mCx5yjQ$rDB!ozT_uhQ zNAyUBH4T?pB_93CT82^`sD-^%NE@FfXc%(SxL3%mJ*lV8a#9h$ znZNAyK$Q@R<=50}cOWRus7tqFX*`Dy<-z-Nb?}k8F){%c4Pt7u-H%)eoc;$yFah8e zWrZc8nNQ3m${}9keKacvv;ag8 z=c}5vsuvS=H7ABJoUa1w2RXSxIQij4m{ku)@7A^xldsJUIBsOZ6je5iIK^!w!r6-IwB&s`Lc* zlJ2a0e0P@Uj%?2pD&0OG*eaOZ%YnqJ&8$S=tibelaz$3b_UY6SiR>hflY&X#a(^-)C|8~E&x#InHU$_{N`y`64QCg{mOS$48yf$w>Vc7jqy4`_1n^ zb4+U(2M#?$%+cT^AzRDe2fgU`wm=}g5brzj`(>rX}|Y4U=hxg%11YMNyrQt zWWXhjkSI1x7)BwvDr5hVuq%>n$b{JUnF)dnam)>KA8AecB`&V~I871FL}um>)QMc& z7Kg}Gw4q6OO2jyFl1fehAMH^{&EqPNo+u>CrCCqMOkp5sC~-6+QU&`XtdfYKaz=IH zy$N}Q6*n|boeGU*KcRyzTz3mrCd{snDy@fA{*ukjW)!Zj3o5*lD4zgfK0frz1(qC?7fBm=HF zkci@tTsB{Q$iB5OE?}q(RZ-`BHC^zU0NVKh68(#bUU^%=+G39O_!lM8Z&=aa)m=h~&C8G#CT4@7b6-R0WH@@*2 zq|J~;A$0K(oA{-I^z^$zX?rr&RcnWvrulceiu+{7I!3~HKR}4-;L8z-i5qp@efAo7 z?TJ1jb%nHZS8HqRrWn-vG#?P4Y7N4ASvW8Aj;O>`Ox0wR9{Q=3tQ6}sF@Z^bXT928 zrMs8>_Nrv$GY?71##AEW>y?x|t(=D2BsXHZ?0U7ro}2O*Bv!b%nhk+5 z5NBDhsW!1x=8uad{`fJXax#MZK#k7|z_!f8Z_Ni6CiZCRukP*DvA>};*m88h)2|IM z#KtG|Tki{u|MeV!{sYV3$gkgR$qSCR-`q`S@8+5xrwZu2aG-F$cw)Zo^!C=VpxIi{ z8N=HNR-9Etgn>dzfMYgw!8SeYrpTq{!Ktj=iW|jS%ZZcq49ZFTIDtqj^W9s6ey%qr$H^;J+3~TQm)*Tl(bL$OU^ieYF4}d!P&Mu%3Fm+q-j0MQ^B=VvR$l5P4 z=JKbb+9DyVg9r125V(?!e3RuxRRER^#32Tly#|XiHJxq$>-h)5ZcpCCXzpEC@0Vqh(wC@YuWp|w3FZ*`X&DFg9*S#cp4Zd7y2>B0IuKdLThYEkkJh7*7F4D-QdqSEg_+*M&YpGCeJy?u!gf}a$?G7Fiu`H9- z*JE;YBmw3ZDyhCc&ZQc7kvCON)WxbYa`Q=dR0Vv4(=8OrWz{f|G8qJ=bt7M%nx4(;~-yDP{{x!Ql|1dK;gZzc^yR0xy;uDPJqK3V3<54DZq|7@Dk110I2q$jq&Zg-!WjfkA)GOxcM4)llc3U4rTiATBNsWkZJ8!4FX5gj4y(Zvh;OkNZvG zj;rHmBaF07k@Kt$f+k1AUX`l;M?a-;tN}j-p>AH;aT=Hd{ne@S`W*CEch~XDSB>7H z*b6x|^Y`=wb}c+>!qg%Nbu)T5nK{oE3NFjjq~E;qm*Ul#jRM1sO)sP&!npGT%t;Eo zIUTLx4e8%=QH1tN8{(XnF3@J5+|w-4NKL=*IHG8CkQ>WuGv$85mvtxY#;!16G?Lw|atJ>DIW8`HA_Qfv4}1lB_E%sn0k z9xooZt|sIj7{5My&N^c49MhVAWcfNj@gymAwf+-6{~wFZ#KQjnyn6p%r?Hv;sm5mc zca6>RPc-)b;4@JR!e4wob@WR=Dv)pi4ge@4!Jv-|JOFf{caXB~9R=RT{(MoYG>jh- zYiaylo3^G}F-EKE{j?N_{q(0~XU8WK`SW32+JI$Y#kce8Np7KML5Icr>*(tJ&Gh8S z=r2F>eLlXuoJ|PHY0BjC{W#5UylrJYUR}zq=j>cbaD3)*Z;xob>ERpF#dv;OABz$V_M|bhw;k^&2KOv7%poNrj{lqAWf}^od zr;5ahXe5=qH~@Bs&Dsl@*}l6Dyb(QHVHe^*6KZERQ)P!CDw;p4#PJb$zV)ntrleJT zgG-!*b_totJs{-s#fer=F%9~I;1>nD-8Ps?z^|`xL)#B(QTTG@Z{afJS{h5L~ zl|N@}18+>A3H4*4fx9_kQ(ac4>>X}P2@P|F-qgruITYEBx<(FN@N&Moy^SoFm$$M7 zNWMCwSBZF?N!v>&{p<1o`67;7$P3-0UeC&_L8K0NWW zE#12*8rCI|1UAD^zuhM`xq@ty1tEF zF*OGvQ;NMf*)Y*^J_sNQ0LiIUF=L-@u=o5q+aee>2nK}+pf=OmYeG0=E>J$Oq1G-Y znPgJPgWa1usU(L+6c%qn$vC!K@SAi5_1zY!utxRo9|6)MGQjE;Gh>UDH=|@pM5i$y z__a;MW;9W1|50)vr>nxt%Yb;zS&|O3U-)Jc+wq;3t7N8M23ooFlhC{G4#QpPy~Iz- zpaj-yo(!wo#IkTl0x@d>#V&hikrJU0#R^tIN>xyo*X==?I27yIB-`Vdw|pajoTd&j z$4ng%0W9EA{u!W|#DP!HGa=PyTaA~n`&K03C;jZ|oGgh(0Z z(M^Wmvq4D;l()wiZy5!sCWu-`;mcg6BBUVO-c8&|7jv_K=?e(S?9b+{ovU6oBxFaV-i~~rd-$~Ug_JZ zP6cBSIPq@yn4?cFJ>0OLg0rQl933kuvR!#L`H4G+xPbN*yGKt-bSP{eG@g)>+^PS> z1Ehx`>6l^n(J-GcGppjF5H(woO`70Q12rT-QrIQe3MIJRd$HlDFxT5$Y*%}y8HkMo z2mty~s&9{^#jNuj8a~T@PE|FNA`yW5w?U$Qr${K(%}IH1TC@J=YHa6Of#RcZft#(; z?E)#iICyo$E67PdNafh&cmGo&rK3gqva=a`>Iqdcv_NivLPDN;aR$feUTjjz6y=d& zF~LAoamwh$&~x}N%DlX;-H^D7R!V*r8l15C6={f(=gd@IMxTyn3j#+4Vc;u~JVx)?&z~NB6A(&$^DO2v(Bw`M6J7tM$iap#w5s#@0;7>`G$`nd)`f;5Z z4H(lqjF9t=Iq_+MZ$938JmhMnZi}?7;j$>yiCik17VAtouy_-*9{BH5PA9Wd_sQEx;&P< zLEAIB_Wl-|>neU3UcWMBe!O{uy-8~cL>~ipO$NTnKAhVLyiIZW2IhLEb%o?E@qKQU za)A6=Ve)F|`*FPq*pgt8_*xDyfYV@oZvt;))2J54X-kuNU>#|K<=Je&a+J?lXJ#@p zid?MQN_uPdPNKaR$nQw4pP7r&WW&Od2N8m1A6@$(@H?njR7TJs?&b)g!)9PQ7R%ac z-Yc6tiS{D>IeiP>401H5<|M&8Bq8rq@cgT|s6d%- z(F6ZJg>96O^11{}R|R9dGHVlyj)iok^_Ai+WlRN5!(F>P?WU)QInt+M-gSAt>1P*2 zOW~&Lh^;YPs3f!qwqmW5bLjy+=My&T_l)@={kReGU|mXbhORZ4Ui5p$8&r61t~lBp zcafc2mq>nbzS7>ke%LllyI>bgXzVEkDKp}r)eyr3U8P9%S7~eh;UgOa;?E8Dj zd6&!})7tUc7K*fOy3}}c7P9-#e4MfI73m039U{u%AX;f&8OHEdybR+{t33C!>;`L& zeZ+XVg zS*Jv@|6=B-jEhEJ-mZ`>59IFlQ5|eLlf1_!t4$|!O!}NPuWfV>f8y{9G`{3;xfexA zEO?n{ZzLD7zh5G--Zhki57{P3NF)X`hgt(G_JMt(cnM9#u!6tLE>~lkgVZI(*R zOmg%@N4JQme0An-%VlN3z^~*Dyk`1G#9`ze5I%01XKSqr9wC>#(o8lc;j2*s0tR9{ z;$&g+j6eAgD9(epZp*y6P2`_i5y{pWfBMcF0K)sM{ft^8_gdRaskrAF_(Kt8bV(M*=gvQC;j~Sl3syPJGn7N& zK_!1}(9U?mze{D(74JfQ)ro(zVlZCoVCm zE`XJpp>uY5Q=H&M)8HP{3G!eq8`%bt|C#d$k_9XC#mD%wcw0$UG6aJtQ) zo9>n)vwDnic!#dKgB`n;;2XtLjNMV|Z+?@yV4%yeorJ96e93vc$ah-hEJA#1Z7Z8% zYi8X5TqS_@KbVSs_88gr>g-!$RXWcv;yKeG!DH4Yjz!bJ=C*Iyx@6M0QTNp`eQtbM zhO_9nByo;y-kxqq37z=>jgaP}lk8PDL+)a2++jT8BOpKI!RI-%j=K?E6p~o3H@U($ z0(=)wk=mIYS9zmbXA3kr{#qvz3Te8?<2|EwA>w2@?xHVTqhylQU*4))B6PXVbxr)l zgEj_EQGsFlnbYTsIl7NJ>RX=dE-_de=IIOmX&m3*F}=d$XRa6zl668xr;64 z{$4}6HW_S?XHP$Ica`Iqsp!KAaxwjss!69Jz?m>|yl2-)+e3Ln?1r)mt04r;d)|l) zu?^v0?WC0LQKD)Gh`S_)+TPc55wPeOH1+Ypi2j;zWuLmaec<{0S z_}_YGmj61>%JNS=E6cxoR+fL_S+mt8A~!{m|Go!P>X_$gS%U~JAV&u#1RI0pK;K5f znnvyBaJw_JVHvM^juC3GSftqX)pf%offx1O{ZY*PDPp98S?Td+^l~A0Znw5{el&6Y z*6irRZk+7JE$sZE!}I@9_f3JBHOtyDC!E-}ZQGvMPA193wr$(CZQHhO~k*8 zf3a`RO|7cxr@Pnc_u^ga>FO%22nO{H9xsduv(>ek^ddG4){Bi|;EiLkw|XO*=EW)d z2NG!+t8s_gyaiWpJ3ho@G2ECG5@QuIEsO@AzS^Dos-h6BMM2`tpKf>n3$ax4(bfHT zAG6V+iAr>yuNRM=PAwNaR9xE;+(ZeQ09i5M3O4}90k##!cig204tz!~q%!%$IHRVA za`Q6M8eyv);ivj+6)ZJO}=^yuP>obMn z25y)+kg^q60{fATUSU*W7Br=_;h%wKz#YO?OVCR@3sXq-^T4 z1H8Y1o#dcciZ1e%j2$fWXCc_(#`?Qj)mw3=J_C4LG3{G(=cTxIMU~ZF#6Y6}tI4eL zCQoP1{i~D@9)I?w`zmt(x>1m>!u@sH1Uxht=Y1yQHoUE{N+SL;dN~K5I3tHfk_xbH z?}5W0JHL~L!8wARB1mG)HRH<29yiqyDdH;Sa8seM_;$*~roVjZD@VdO;A4LvX`JO{@i-tYl=q#dwm0^;fy+ z(rA(vx@1?)`b2cOU&n+eKR&EC-Pq=auL!6Wd*ZL2Q4-6Fv^u#mNi@r<(Qz>We|?vw z*X13vxEC)D}EhX~IIH0T?*ujrYcG+#HDobVPn7ZG}>s zV-vt*3!j-%eJyZ)QIp|b?t@Dg7AdaE%%xoP9NCQt+q)2PE4v6H$Y!SGRKR^Wqf;vM zBO67o>Ga{@W&SG%cIzTFh|6tBf|w^Sq*8Xq`WIJVqIJ z)U9}LD`b~~h=LQwN(vP%ER25OsSZVAMHLm>PMZ%m#uzG!td6S6;2L*Ce+%`F8isCj zgpu}Ex)r`)qHpxeD`)b|v#(9juh7WOqV6*h9IaJEBk&IWIeJi~IG&5@T0EY;H)tyC z)a_x4rk5I$eq#X|_kdw00+N>lYgdqL)iy}W1eE` z)05jvgW=P$uG5o8#8{56Jf8DU;C@zF&Hvy3+`kD?dM0M3zwLkj^Prgj&k>@`|0yBL z^1lgDmj8qh-O&1uCt|niT&fzr15*C!8sseiq!y*E3y3?o<_!nE)y_GnKNvU^^znv5 zu0VhsIvjraXhfe}sU&ip6NMyBo)~YU)8>Wt)v@LM zb8K#Hi8L)S$yuBy(W~oo=%9%9P(N{Osq5pwf&SN9E6C3zXAhdJ*#&;P7M{K>3r}V+ z9(BderbRZ>WQRWwgAcFiI!R3yt_`rybWumDdH`vxC zOj-GwzM1Bp0jUTqk}p>sc3>YNK7?R=*MOE*{oFU-dlH@Sz!DF}{n@r(?Tyx5*+2ui zk(Jr2}b^(-$x7h z%nmfbDZK5Ulc%RHL|gW^b{4%kJbQ=ig^_bQ2->>`)_SR@pAsg8z(2gb6im~_#m@Bc zy|P6eU2c-lmXf5i80cQ-xd>Cegy0b>wTjhylXx8Q7Dcw)5E7pYHgo!w)O8{bDeXEF zZR-q`doCg-bS1rZV=c072UHPmEFl5F2qb)Yui$4ZrvOD2SrC?_x@ORCv^aK3A`e5riRzm>@dE1>HJT78zYx|h6C{dtj- z5@<>4NAhUxXJ9iZ5E>uzsIk8^co8~9{LGvy1IdMeX~@7p@IS{$zLB(a4dsHg4Hyua z0RR*bf{-98&dK5mmaOe4cN8*4urVtN{Udrr?5fK8N_?7BlGUU!d?S0cW?L5#Kmj1m zpsq^$YRRQ7ZN#>TLtq?|HtOtKcE|#wdQsFC#!PL`0bdp{pYj|F!-Tp=I>2Hk5<;EW zxz*G5tmw02hCfY-+k5ZSAk6jFmNkkEnBJ3T!%wWLt=V8RG&Fwc{2m-kODq+zvxeem zt27dD{-fm>Gu~@}&%9l?a1KtTGLTzFi@#BEoY;{6MEC+i^2oDG=T|jHBbaq%kvAS{ zoXf9aX#(PW#k{9PcxpPZZpA4G*VkXc@P(8IwkrX5%82|*SEsa3di(s_Jd7&39CoxL zr0p8x#PQt2GYwEkMc`Ky8mZZ0bv;@0fu(wZX%7nHVuA62W(Q(1GGmj4+MXi$r^)*0 zIMFh)IpL3|xMA*ovAz){VFx@)|4QI-@z+jiS8$wK$bw+nG-&&-AI63NP`)Zg)FZ!- z!;c+l{c!F;nNLbxf_;!`(B?Y&A3nftc%uMC4nPmU^}X>W@D$NN+}!^b91? zotX7terZ(ceDM@OgPnkt;F(3~(is2ZV`6-Shj@h0AAweED(ZG((?nSk7UwXc%mh7o zzAada8aty~$~ILU48{VgyKZs_zm&Y9<|;f@2M^ag;9uG8V@KnbrVQO>(CmbvubJhn zJBwz+5I?hN;P*c`-E%M>1okW2A!^S66Q#W;4_G%gdzrT3q0L)4Bo`u9RGz~Ef1#~4 zC4B$t8uf9K-_dg_qO!svmrxx)HP?!x)YZzMj7Y#Yu!HecU2`u z7+)G=la5bLCi~E})+%N6hM_Bhrdq~LXZ#Z6`^JipWc7sdH1wVNLqx_?P8yUWyjIo> z8cL!Q|FroWCkREGc9u(;K|HBSsWdDa4$NWjDTj}OS85*RWxeLZUh}bPRcBH#li(#r zm{4S!g4aHbTd<+op8}B*0qRm1DsbYP5az&;6*LClbxT~HT~Wgoer>o~s~;q~z1Qs|>E0f0vt+&A`r_=MZvqL*>kMi)^%)j(YH9Cv3G}DdgIi=Xli&71>`2V1 z3G|UE&IG7c8EN&k3OV~*iKc9U84Yq52?$iOYXe6VEXz|+YYHdTe*yfC)=>Nuj*qic zZLQMMOQw`(^)X|0TowmNqPUn2ltsBhNeB9sZFfhIPG4n(rpn_&*B(b7SolLV$mfJ0Od0!1F*s1Vs|#@yds z7{hnK!Lt{hDqCQbigG=70pjJmC-m`qJ$^2OP<&wUEWA7h0fnHDQ83$oU5kGpB>Zhe z3JlKsdsPYy?uC~}{|nOlZxGr4fHVZ<6b38pa02(w3>6$Zi7l3588G;Xjf&!I52QP+ z%$j3I^3UC6m&P-qI^3Tc0-FnhPToo#X%6);fiN1lgdHFve7aN$)LC$3Qp~!}X z6;R4GT<+H9R3GoLihtVnQYK=CV9J*AAUeds3z=p%-BpHs7y~xuVqD3R02^ z$!{B93T|TwP;e}r21tQOn$5Y`QRxQ?QlaI7+(v2#pR_9@AsUWzT4`#wc48nBiCk~O zQqh7f%Ej!Ct~Ao^x>7#o^Ok58Jzy_soFy-_itEfH=F(`go=TM^)udi?uE-gU=A5P= z(HU6b*cEJrJW#;>VE2g492#dd2BOtZ`yt6OIpW?B=h`0Z*5~dcRRy)E0z9-?s!lXh);8apy!dOF9 zp1H1yS2E9QtdCG4Y#W_&m^&Ik$}0J$ZJ4PyDIzjI2TD3#MiR5W99OMAnBzD%boIAO=~!hBtO9!{ zscFmwZK+Zks+P9lmtL)ON;6LpQbph`8)p36t6pejQD)$+FLJMvg&7qJtuVC&Qo+jv zlag#zaL%!sba}1HFJ*UBmNfMfa^RY{aRUP!WIL^*N>3K8X(PIC2WacUb}86dt}(HV zR`2R%DNbV5-~|8}1v0qCkJGr$f(qy$i`yzN94?+TKT+PrAa-C?nWpxbmx|wmehbda zApDYv&7YAG0$)|FNy|=e`-;9)ya_>P zQxEtQcCUsnZDHM%#nvdET#a8`50fH#XJ#mUhOLYpq?9w|$NEhgnHFwPr zQ6;jF;Vv>euYF;C*SiXQVAoadAX@A9^sf$w(baJ*=R8C~>+DUNIG~Y}1YbkpGCjwp z_KO|7M!MV#WF}lkQ&XMRL{xe{)xCN^i z(JLUOZC30#t$T?l!_=}?XG|=Tfur17Pco}8mtBNm&%hfQ$HEddoo+0lg zat~+XMZmN|n-dF*YVj2*Hy1kQX?5ndCkYFPpVZ`FV92~(jowhFlRog}Pdi7(XxwEj zt=yEW{JU&@4Jn_3a8CY#<`5FsxQ6vVqL|DlM7>FhZIl((YcejV2UdJgXgpq;yuSyB zkkc|@F+mmzciJ=tNJ&p7vB_rOmpEPo(;X0tmaqBt?M2^elF(HTFw5Vz^~5-Y8`$S^ zqG0Z+vjwfUFFYbNbReKJ7qvGLaU!4oG5o2MZF~x8KcleM|w(HV`;3xO^6e%gIb>fe(cQ2 z_4PXO06W;=aPR&p_R}%usfTm8w%SZ$RHO9|mcpyOFzn#GSJkvk*zSXctLywlb!p$y8=c?--{LG0 zU3Ke_e{l_aF5?zY18TGc5ceJrGYMPNQ^^PIh~_;TyeBNln9b5|n0ITX5?l*(uRv?> zF?k)12eZ+Mtepa$)NE5zahGxDLkKxR_wpFBAcGMLu7VY~bAgobLm5&&lOH$oK;d+| zP7v4KR}`ahX0uiKC7tSJL>|(`9ns=VJ)wrL;tI}`nGs>s@AurQ%Ui9VBTH#jy6l$2 zv<~;5ch?~E^J?s<CxXuC8}LAu>~<0E;u|H^qnF7=N>6IG+bNZT;B3=-#i~aydFQb?RDsYHF=@-nYJ^ zsHbrsS4kRdO21a0!oEHoZi+*GrB|Qo9bqk(zUVqPL>Y_Hajb3I$nJzQcp4z$tio1P zubefz1FZ6}e3>Ct^+YoD@@l8@mYHDX>hL*YS#VnJ!tt^Q-{^d;n&>_#i*x*S?pPXA zSB=wQIog{>nU=fNsx}BVaA*ZljbLo@vxXP|DFBYpTT8F$9z_G%4IFLS2Xdqc(J zV~G&AaahRCu^VM==DUfi z`>mI6mwmOSyDh1#cRppL{j?WQ#xck6Rq?imb9t!rc?BbVxX zTm9B2nrhtP4c>Hi?;HQ`6rxen^&Lk1J-ml|V9)jmI>_N4mFjT3BuZ15-fQ>my z+%DP?0L;g%A*vP%gM5(yA7Tc~$O0>cDyBn_^cAm9j;^v-l|r3PBLv&{{F zXLk|i-$xR1&hm!kUs$vQG&`P=t31B*sXH z#{fl;hsSUm>N`vpJPr|q0FMqDBM*=MJ(3}kkg@+TL~!`urttRMzfeZLcuoN|pm<^) zHFw&X5yW&Z-8fDrHG()|x^IWx2x0=4cPuA~nm{Zu!MEdP7%`G7I|eO6Q;=(Dx2A^0 zR3S*D-@;3NhXZDsDA3qwQiv!=96R+}Af__$DYBC;yZ7%TVV2lMvlT=to=zu+g-&aQ zk1KU?N2rZIHM4=32K^G4vbuf|H)_R)miU7vnbPqqM<%A#iWmZ)ASF;}SM#HMJ}#Gz z$x8_-lQ|WMG5r(s(j`dlDkS zJdJ56J}xNyUjt`YBRy@HW;jS~h@?p)?LK$@tT1|MjIaiUVyWUQj$Fd5jBv#*$F z7gWbZ?8KymVz_EN#*j#KC?^X?)b$6*h#F~Mi!~B^K8ud3+t1>3OITcPU$d-IJS_d0 zMlq^*RBT`RyH)kXKNmTi-*uZ)3fwUXCWU7clY%8XpxLq%3oioJmJG9X7>p zCu1F0pPI1qg}3NyE|S^2q8F)cW<4fzKV2tmMi+_&E1TaHaJy1mZy#g)Di?dnQb*IV z?K>)~o+eubE;Z<}J%1EO}T{(LfTxe{0nJVTiS2sfs z+!AK1I%Z!Vw!K^RqD*2tu*Ehx0jyLvgAcy~U#mv#uw9`4^gP@U_3__=p+ydY3G&lw zf`vO+Z2R?D!Wh(*aOk+x=wc=m6Y@?SV9~GRVfzfMdc9{uOw>#J2iaJ%MZ|q53*c!Z66LrVWle;Ld$jjTYFKy4)SGW44sISiV_j|A9 z)IyN|4~zZ}gZ!5{XJ%pg9~PbE|J-gd%YV9C%<{i?i&_4Y-Qoq!f1S$x-Yu^4!A`=7 z|9dL;BbiX*a#o`Em-Jd!*M~d68xqM?UtC6aD=9C!Uzg|GpVyNz z`zd~R+lx%aCoZmvJlDy+D}L^G`(ij=RndpT7f7&&^ID0N(#(h(vy~-D-3gGsgT0=ctlaQ9F3I1xFL7T0zb5qZ99 z#z{DuGPsL-?(7434n#%6&+rNnL?7e5&rKO|(?nT@L@{K*7O4qdw6}qrDJ`0Uo|ZBy z$#x1CaoTq50q^amtOsl2(m5D0y;TuV+Kna8tN&Tfcp@ zU~+M>vx69_Yk=HnO68@-Z3xg<1BaWyZVOnU)dB!O%o$jHXsX`DO7GGm!sZpI;Ve-7 zC&GD`NK($HfHYC~kgbRg(+h@duhbU|j0DKJ$I*yRrixxqpfSCTV6Q zsBn+4%hhnN%)VKjU{EMBcs?HhC?vUTZy->lbDwVk zk80fKt`D?sG%{x*_j^8tdoWv2s;LT0A}jFSJ=$g|gR$cnsefyhX`ZK3{Z zP-IQuf7<~5qW%KD#f6W85H83JIRAYQS#~(kC|UO7ytdN52(&qz@2cd0t0+)Gu~wNF zjN&{FNCP|v}&L)g%9 z{%CfHzwO^PQc7RuU;MYt|1bM{kmb0)c>Y7YzwO`l_aJV6@!vMcf7zkqda{S!^+pVG z7O;~N_e7HPylOp&NSBgku?)4eCCW5l%)zCz;-mB4$jtN*Z;}Tp<_Tf^ zFeG#H5GiUAKiGM(&FLt-$>oPwDhc>X{AF<-bIj*+(#kdG_eax)4KNd`Q^^+YVPeg5 z6@DgQ$R+TX02UNlL@NPHMBElK=vbNvp`6F3R`M%ED4M4$Q4prvj64y?tOm%=7~-lhvPp{G`I8!)A9Zht25 z;#D8GwlW^(!;68U^~ms-uu&Sw@a7CNwoda`9FpL`*k5yh9)C|>Kp=tKq2w05LBsK& zbk{guVxN21Dt?Mbt7$)b7!URL4szo*VHiq6BUq!M0Y#ua zP*D22{spO>{2K)+c)JCfK+5Rx7|7|5FsC$@Am4yk#e@uny}v)ihLO)-fI{$6Ozqg8 ziSBGG1#F@A_&v7(HZoLz10WB-R&q1=8wDEje*P8!GSp+tdFkWtiCI=cM>&*4W)XWL z`O8TvYMdNb?q6FsL2{g7iZa-@(-R$&&i%jcXvC6rWDZR;BY3|HRB*3$b3&WEvPC{B zkN4K7|7<}CF_Rp^v`fSPV4)L5Jd6cfHEh;hfeo1B!r<&RYueqT{lK`fv!JqT8iW&d z5{W~HsoxN`7BzNtT#Qse1(#41^*`9)6bNo#LZEszA1}MU8e#f{3&P>q5jCORFKF5O zX7Ce77uecnHq+*S4`=-aP>d77blD^N{mpM*2Xyv`T~4&HrFEdf*1Lj-tJ{S15TEDq zpM=hZ74pd1uI6M3tCbp7VXlvw8`^Axg#p0wI=8+>RV!Sp4_<$=U(wRe~j1!dBbn;1~$PxUwAsS3vf?wl} z8F5t`v3zF@3nVx&`fYN^W2}cqxzZ^jAh8xC%dxqVJc35I#Urd6=F#vMwy(O8Enl=H z;0D-uK9Qn5^l45-yf8l%{jM)APkrM0WvcL&dSV2a30fuW9Nbsj$18M|lL-nd*StT6 zDXaCWAD|FzB>{RCg=4p7h&&#*{Y)P1?eu_12+tQZ6f%DcT3D^lt!OmAMR)69I4KP| ziqIuUg0FOc~Y03V*9#QCWm&;#ADin8K#N+P?@e%7bU%wV#vrmy@ff-@a5X2_(<5cQ{dM)L5N&}$yj>R zngA50$b_>?*GO;rn;=zIJk+97L;2Df-RkU+_r%^k?%hNI?1s9E#gJj4G*EN2qgwfk zmqJZ0rTtPIwq~Do)*NuAk6lw3frW7&N}IyLFa^e-p+k1g#tCvX>YJ?-Vx#5JxGgu{ z2P#KXS;E7~b}d%D{C;I(GM~8|xNXobP^sdQ;F;{I%s0&eBl=$PAU=~I~E|9+{imZt8 zH|OOV(FBInY&7^OB}uCuTohUA=8b&a4&|QAkXF-8FQqg|k2);=#{dTcQ5-t^SYQAS zanOJX`LBGF7hpHe76;r5B6xFug0u=5}j(P8(788q6X+CiGxlj z)n&=Ms_*Is=o-G^!Zw+q7glePU5Dt_jRA=(f*;HSZOIR>$wjrliR?+|q&<-JvXD=W zyhBMlMC-8itIE!WsJ|8$22 zdY&jmF=FxuBwv`i`5Ew{9;UX28}QamPTgB~CfBu$qgCmR*=W=MdUs<^cAh*rU6EsQ z7J)Rm6R5$4{dDP6_uB(K(=g!{_Cc8$+VaV)kIC!?xD7A=!_P~wf|{D$GWk&X;8{}E ziFu~z-g;S1!z*|;gCR&5WjUI-^Od+s)NT?ICcA?lnMjAWYdTfcGovjx*s%SNwkbLj zDF2=%zrNBg_{ZW6HP`gLm{%uicY=V&P`Z|gH{jhrmWC>4TR^t8?Qwe^+*;V!U@8gU z;MZFy)&&m3F{t6lSXp#U@f9G8{h^-APZqZ@?TCn&Ie(bOCN!k6)FA@Gl6WRsLJTbw z{}#&V!^LO?Z)K71yeE5s6>agzaj8C=s|4a+?1VvR8^Vt}>j*06fO_Xilh}?M5U~}T z{d`U=3g^HYJa(uw57dR>D`V3mQV})SQ#GpG0|tpTFzxf~mutv-%N=~`1Q%~F5>by- zc#hl!Ps<Dm^aC0V(suLkPW4V5a{mMk6G9tK}u+}Nu`y*iSyoX3;O2&WQxU{Kz zzha?Q|6!CLtkN{2E)a(rFS^iV5&%y~jZ|n!P(RR@RuFth#UN)a1GM)q43sE@`mgs; zV&-k`CXSLAhOsg{%e)=#H{WD6?=n8bZBYRU2#^t4+hIf7YvL0& zu>opQNC}ktQd3HZ81J;?A}1e&uHgKlr?@R(3iy>MD_Dl137sQe1JpuAytWTwrB(-@ zkpLO`YCpX{&>7FI6eYRMDF;=E1RJ}@^u}ytbZq#N08+YVrHN77)?Y}4V$_IK?<1i0 z*ves;duee2yvkbIgdNY{yRwf|ZFQUyZKqXxbFgWAdOQx~wkdTFv?jldp5rMAlDjEb ztHvrcjrqei*%HlMjKx+!gOyR5-*PGqhMpV2k)-~EY8qbAe-wrnVigyL#RFgHG zWUv(@*?jvA@WJ88n0v^T9;}9_azJx7#bot;Go`30F0E>>j7+J3D-#LbDY#WSIwQo2 zlhc_Wq(o^%)+Wi2nZDq>+-0l``aMCdelbfSz6G0abO_s-nEAJ`{N`==$SU&%B8=cc z%8v?yuKVo7Jh8{j@&ua9 ziHpw1>aE6y_;cWKDnjxgy=d9^IcpHw<-1Y44a4fTI!G6-rgDWQBiqf4;jy({OB7x& zWs{~`D66$!)_*=P}L|4y4DkI)rf@CO(VPxMu!jwK$>hnKyd<>0f47L3+YC9aV89NgtmlmfFkMEGQ3rp+k5Sw!>BAV_mXFFpFA-XsW5xOk zs=@TV17f!v{5~09Y5NC4R`(*xnd}g^AtUpK1l^Y(Ssp@U*!(U+F{fToM#Og(m4%!ijRmV!I~SON=K-UPIHb}KL!`AE?cbkYcHb??kYDuO%JWT#tDBL z96GBd_?8qNjQvt>NS{K}oP4c>tisUn%1<-=-j2444S&zu=x=+_TJH~fklg66+JRmN z@iSv>(Ik$yrh5oXJ)1KF+$1F31NNdf&u7cm-tA}}d_juzL2cPfRx)0uAlUJ1x-d=+ zcXS-ses1HhVTbOxV#l(yE0R8fFeLF(GhJH;!X==+IH}T}?OG?MjR< zozL$x{*qE}e&9J;U@%)7Ejnu@-#etbqOViyiz^L#wtH&wxYxiSo~?`HMAe#!Fkf;xqRqfX$ndHMS_Jl~uQ z^~vhoU?)c@wjC{S^X>%jbE1k?P+{#AC)_CLn*}3M& z9JG|>>CE!DpDA5E(?18!l`4}dGjRg^;iaBgQ6Ok?(`vUk7m^V%1^3P2jn%Pd6`CB0 z%f#H^AEKzeN+KrmWQ+*ZxyQx`=l-xXOS)$t!~8UqW`})G9#L6ND#xhRcHeUZV4SF}w`cK7>T?pkY?t?y)8@U~Ry z1J?tF;~a~MdAo%T;YK${pTBZi@w+Zza6h9MXpv` zv{S~D{=&Fs4)Ka4S4oM_hwCZQbaT&I0rU)HqlS}0J!W#q0v6?f*dYoa=N#Wjs;~;_ zmuBX_WE~*iy?6$8zP(CvMT8wZz^)o#G@PJEp;i?cKf7WtlCiKS3p4aYa>L$Y^=3&j zGqOTvZ+Y=>vQZ6so#Q&jA}2DchO(Fo2JsoOL}QMghcG$!T%~0EZ3<$cy#CAjcZrnZ zp$feYLV5k~o+2U2Hc=Jbxj0RM50OG4-~FHp=rDZ{Gm)9TbJd!xI`|-Fk?TPf5b!>+ zK~JdG|D6+o4EejKKuPg1_oO}}%Ek9xJAp_D2gDc2he8!B%Z0)ekp0z)V~C6vx<3QT!{5gzk|-A#og=G(y8MGU zraJ$3m14dva@jmXWA}4H#ldl<6zR~oTTT8^rcB6#b39P3P;Dg@3Pt7&gOh%k z)|WFpaZP(f(p#*I?BjCq){{-VK6NE9qBxL=ONUW_4NbG?OezkKU}`NhYv$ z&zW`1cqlmvzLMkWdq8?^raul60g4pq3Nty)z$z_di=-hj#!RUs{7Ja5WGlJkak|K< zu%?lKTDHvFjA4hE8=$JxlcAt6Uy`?f87RwaPju+vdsPXEmtg1ARN(r}Q176ARd9gdYVJQGcOfun!Z zhOaP)mBL1X40_X2Iz@2P6KP;8qq&NZJ&nxLi|d%J;zQo2w5dT(;w1#-6#QrkA1Y*^ zhY1BBtE$;FN53UK8gFN0TG33l!!5q#g@s_Ew*cX<`nPo~&Fy^V{yzv^+ zndo)q#UEI98ox(C=Yg;qGm*k{P-&e|z4#^;Lx1@0o+8N=*-}hclsF7!=aX3P*t2Ln zJVtC92wHJsll-I?$fs^R@UGDDat(aBf0eXWj7;3u4#PEl8kt>Gk$TfGlMH_(HQS1E zDi}x4sy1%l6Xh?WUEe5|hElLYxx8$TGR|5Pwi^(w%%AgjU#QXkIlizy8`3f@vMl9h zP$ImF$*i|k+5BAlbA{t#nZj%EsD(u~PP2Sg#~Jr4x{S!#8dTO19P4xW57gsYy8{*WQYRN(&YW40 zM-A0(?1520PIxKw)B^XcLG_h8&GR0WLr&qY2SNw9+aE^pftMWcubboxw~!jl50~qJ zG`0hW73oy#>xP86_8u*cQm4VwP*fnN2+}I)oPl-4E8c#N_~1y&xWyEP6gx`SCj%}L z-4ITuzR_+TPMcp&m_oX^D7QhqXZB^0TSm>teFOd@&{~-| z&O2WwWFjJw*!Bwoew#zfryhEGbw2jDLd)2nC&=bS3o78F;O6cF^yzjJ z-VZ@cId`kDIPrLGB0{i++n(Br94c7N-2nS@gswA7=SkYS3|B?u5Ej4m|1g>?Lx|0O zU)PF7GA8`&k@{qmQpLhUdGZ+FSdBCxdIh<);#;qGZN|_if(Q`-?D9DXit|Hw6?E92 zOq&E@3RqF0prCPn>#pNKbg{9-<{HpqUkxW8ADy1cp|iqyNK647r6)T{ooS!e2vpQ& zzz9K$Of0&uFu?DyVTD+!HlMAA0-Pm+NX~|-F$O<*7}`7L{LTnahp5KLe~vAkea>N4 z(eKc+Bx*ghaBL5rbj^^pa><#FWu-~)u?cP$O4K5Cfa`*)^gAAcH zGJ{hFNky7N<{seUcrncDw$-O|-(Cx;vw6;EjmDqVOA=>02r$EK!ED?@B6ah)HR-ft zkN!zs0;5g(QSg-H(~Omy9O9j!n)4+9@{$hIWN)LE8mW5gj;ncwb6#)BzKGZ(aY}TF znbhsZ`*Fx6AB}t`#WZZEed+)o{~YJq6X}|VvONPl!)x9I2S~DD6C9MH666nT99Gw0 z?t?Qz&Y<_mr!JX{3ua{-7fuM@uiDAzium#|E9j%b68gEUyt}WT*%%`gM;%WL7{p zPIwHf;rz5*tFxEV(5eS6Gdwh)w`L1Sk)Vu!=Zuj-o1E3GyPGw3S`peQ?P=H)mmSM> zc@)a(x+Q9~9qp&_Q|%LpBw!J3#Gq!stBqgNH&5e|PpIZ>cb0EU8V4kn0zkKHC|EO|IS@N`$u(2GL^mM3>*N;WpL zd$2n?jeZXcf^l_^WBudB5pLp)#I`=!;?i~knplP|*J4-Qsl}Ygif~TO!VMENlnW2x zO}0v8nBv`|0Y2d&*JemnGy8{Egd<$zTCDX-Pp`7$t?iBD!(wn*p9tK_zMhe6s(h`! z_)c$u_G^$7CF6qe5~t`2jgP)ml}_FRpL_#z=T)X&O7Ub_N2!HAkZt(rJA#_po^B6S z%c9xxPc!55fJR+Y^5dMuGHCMiBV6!iV-SNDdc>620KjNFHIAx?XNEp_`aS9S5jk$% z0zB%=Um%^tl>znpJ#-N9zIBh=ICt{gf3Oip)=t#u zMg2=&;&*~36|K5A`3 zBb!}SJ7Jq6aauF~){s23t$P^sU3;>+;*7$If59}z= zfE)>-y+F0802)np>E2 zIjkM*Ngam1o)fE~5FHXdG{oE1P~aZlB@>jANSegzV~x?bF+rW&4!5jEARkmTjaz>a zf5ob#Q{3Rsc_q6+gVlJZHRfwZxHhOI%HRBsuc@+4e+&YfLwkyBVOVE)IhQYOF&abI zOi*hDXvKAl>DM}D``N0LiUo%FdXVSg%%Y@lAluQ~PxJN=(`mnOG32)81H4yX%-Ufo zhKU*V!}(||5MCd(*8%T<>5fDq#1T7kzfo8`TL0$xZEY96e~$$5Af(A*q=`s1f==c_ zFNW{POy*&U8w&DX3wf&EkcPMVV2;-QB_r#Qp+TN1V%rExEZg99o(;vi>hbrOXHnB>4J^uTC|Gj-$;T)N2UCoh#m z>0wGm(Gw4zmsU-yway0amR4 zX@C{${|>NX{Z9g{4m35ws9It?uXN<60xx6YTMY%|y&i_vX%$isaTMc@mP(wrIaRUN0|YH#0iluOH6eiPN=iR}RMPJSdVNQ!j6Sd}$}v zJzb-@d*J$JW$&1<$`8HVwx@5L6{Popu=(Dkn}Ou$ApH0O6V3LALjzHxKNaiR-dgdb z(`t`9>fgZnvr{F+fvEN6IwV0fLa|iR$CsL7xh%SpE?__{;Ey1}01Ll+xF=X;DFA~MdJ#aB^>V;q zJEI+_@#@~f41wO&sh2ej`m>352%v5^jBaJP_I@2Ju@1Ojd@tp1PdE|`e zpPKQ|6p|tvx;P22EhY*wN-NmiE+rPtpj<%*w+FO&fRdGxyu006*r7X~Ap!}7Aaj)*NxDtbrQAb| z4;je=N~qDGf4U&%-cQ0Q)B#P=`+5v}k=zb*>A*QMy~7|d!P&hFphYDzB?HhWkse@) zVb&?K+S-gfQy!aB<4b;tl#~Yutu>a;!yY0P?J#s}$2z=yf*7EDC;c5z0uRm*Do!fx z)8+JXhw7wIRxM3=FX7n(0^feAa)<&xn}t{}(oS40?)&4r%%JPV{qb@Vw8bTD z2Y_wxZuZ!a#&U7v~AnAaoVpT~1X?`5ORw@sr? zhDE@~L?Vk*Hbx1Y2up-Rpm$T@s98H}Cw$Noy`JCMIGdXUcv{%EJdOrbhqA90a^g`R z54xH6Fslc|r2t}da_oRrlC63|4;gM!z+_}oprAnr?zWG6Q5g%@3?oa1(_7SvgfGsY z?Ud5RI*aHUz9=pVF)am|U^tz%#`n=LCMu@NMU}ZMPR4Q~6f4~@8=C2u7c0FkK^Ep1 zQ)ya&ti(|pFMVEs%z4sZ>8MYZd3-TV`j_4LFXyfVM=qS%Y$;7_0GECA+AORyHPxwqj$qH+#@sJer-C0UDvqN5mT@lLr8(JDdVQ2j z-4Z>S+R&VJsd=0jt355EBjeYTPjN_XX)JdB9KZoYKm9T0ZUq^CJIuYR(Z|sY6C*4= zNk~?V{{EK`E=2=84=G$@76u{~zhr__bQLKJ^7mH!U|^uP=da(jur3;7S_a$QFM7B_&utD3c^*=4XlLv!*)>mO3etN6P3!Sq{+D zFbz*;^=Apqe`OkG9~2f9HztGvMK=p8=?4K3K^kFsX|ir#u$(Uptc{s*8sCqsM6_*k zRY7A>D?tRIDp;Eldix)%324~lDNdXI6_;2&IXg5M{7riNW>HGL6?+Q%rm^|_Xw~Y< zw2jQg1-fC>k85qP0MN%pFc|z%+;y%npccce1Sa7buyt$^b+>4R7>?f*Z70DsZPxyIN>xGWHpqEWLVGJ$$>3N{4UIH*MS5Xv z#h+;T7~yg-3_(V^;2HvS6wVGAE8%YDX2b_Y6aF{9t$4OfdgGE=u9HSrsK*PO1bQ%l z-cAgX7gIe;rV^x17k)=F4)gS$A<@N4--iZ|XkwPiMJ*kPYHjN0-S9}W`uPz3l!$%3 z&x3yZMZXr(N@{IgAc7%+m+2x`9}4}?Df17 z6hxYJN<@R)_ESC|q5&SEy$5zTPB_O%!6jFTh&c@54IpYq8>VGYkp-LaMv3T=E$l3h z3RdV9pb(TNa*{kuW9hD-156;9QEn_m9WazqfyM#}n5pEj(t^b6g)pt6TW0AEldrr6 zri|pwUr-15H>uO5!zNFxwNV)Vh+bynQ>Y{Ji%B-yYi}RfS#_-rCPFo;Biu}-bE?8j{r?5s?*S_HIzloo`$XJ)N&?$yL5O-+q5}@vvnu+465|I=ir?c~r*$MlVBW2wmb%R{CM; zxUez7T<&IahHwDtQb>7-%>)=mtNEK1GBKhtNKCIBAGc zyZ=Pxx&MrmCUcpFCbv*W@sx8W%9h@9D>!-s!7Y+qLX&wQWBUr$0Kq*%;v2p{J~hHnV%`g!ffnWrK0)@t>gB12Kt*DNk+Wr4E+ucSSQ-p z-fNZf$HFc7V_?I74z{=q7WzXB&aQKXyGQEB%xn5ew-tPq6m&YL{C>X0k5a^S6^OP< zK?hh|%c+PbVIU0iX@#b_*-}_8=1T9fn}^|sCR8{*D@!sLn9~f+Hho!y-sduD@oXG= zcyLc{JS-1QmnKhmLnIRjWuD&8VzBWKUmbJcj`WZO7favg{<5O0q4*&U!VS$b5A3O+ z<}tn?eMCH=ri6Dws{xnVbepS@SXS+Y7EoDy$GSwSOoDp`I4jE2kv|3jOtXjWDHsnPH0lHzYtVL$W>3PiyTE%# zu4cGybGcm~SZ%*AXkUssAq8*0wtn@auzF-Hm8GqATBOG`ro@I=UZt{k1Igv@9@ESHE@uz2SW>!-Oq z%TLv?*7aNl$C^h%ZPrI}#zifpAJp3WZjG2YaWwoOZr-kRzd7(tN8wK3G$q`6@vbvG(jD+*%IiEzFAI+VURpe zp((Gl&f1cdVNn3KN!4}hwDkewPl`LbmF};zWWnC(hVG{ni zG`4@Wtc~i9sB0ipawg%I@DvQyz16x^d3=CKpP4Dg{A+Akg3-&VX?}N_lj{>_J@W&B| z8`-f%Z#{VLqP`fTa^auUQa{ZzYRJ!=X-J@N=3u;iTT}k9GK!8NMkVznC~h(H_{h$s zTyyOq3;W5yri1`@*((PLbRdHRo z;weR;(&#S@>99)G?yd1yaG?6=omig zRLtItbAg}zEptTAI{sNQ-Q3g-AlcNmIbLt}gfXz;x#4Dq112SZwjlF%HL&7YmO>uG zsvbh|2sirPOhd2GwzLwmTBSTCalzctqDkkBGpSz@?$JKb#+cKaA5?R5E5DNa-0MS? zH+svY^5lhj>rLxu4m|%lak)wqv~P5dWr1g(rf1|V0h40#q&IYa=|sv>*Dr@+#`@)! zguNw@4E(olxhPkxUqNDKIuiY&b{x`g3&DxzFe0NM=^<_{|)o zLy$?^&dr;jaHdPY@C>giFvV80pk3KOI?{)ot7`Kze%F4>_YLxI50JF7`SdcHa2ZQf zIN#ybtXhxqD}akET>_CO%(Dhx>TyaUg1gtgcR|PT1H{QRZ^o1;4CV!-e-id!JezP& z803SN`=dqmYU5OxcS<(7X9_ozK18<$q!vkNG%9W^Ro>Sn7A@{wIZ{RWGWT=WOzNaO zP}5?@6St4W(02$nS`v&O`{tI9-bkY-UMU$i_fraVOUJH8o++fj?CG{IYpOQKGm@m8 zY2!i{8dOdYYjoz*@q4z|!YIO(JvF`$Uw-d%6M87FYCuGWA~7>pMR3y&v!@UMAaH#XhO0J7rV?8P;fqJ7meGpmfp zdMix&iM58ITCgX(>KWa#A{+;#S+awdR6qyb?KN6QOA41C9OS);9$M9Dp2O}pmBAa? zhXi)6Upqm1^=zuCm=x0DQ@2vaOD~Dn+uPum!_sJ98sB?hk*NjAE9_798iSz%BN4|C zV%|1rNteEmS|!=(_@2= z3hIG{%%qvvgpILBC&3Cxz-QOh%^il>wCXsrcefURhe@*~`QQQALq{6O<^HX5B4c3U zX4!W?AdL^pKWe|;y1A3rP>g#I_>D!UW6F@|G4J)vT-ZodzTWQ>pr~nB z#1ytINVYn^9-oZ9fh^s{S6%O#qbH9~b5Al~;Ez<43jYPt=pR4MKfWwxcDDcN%ldx~ zX~g>9MH;dF??@xI|31e&e(soF7N`)g${~#%D!FPIGiVoF6anb6?lh#;*s( zb8AQO8slSJG#ymcwDq|~xa~Zt7-A4}#>Mf2e zUzZsV(={Wm?(~_wmDPtA9UUC-->xjPBHTc4e){(_7(XN)T?E6yVeX4CpZKnwsl{QZ z{UMmhKian#TJXk)FQu}!9JKgW)Evo5n` zc<=qSE+o^?@a`0Ibdw2}!(%4tp~IP=_kszb68Sq|Sb9t90E~4p)O^RNcm%vIxmrNk ztZwXWVrzcBbXy1q-!S=_036!_r$Fb^eb4b5KAOZQaYr}eJN^!F`QQgU%yjw!Cq0Uh zXe6?+&49*HfSp>y$*K3HOnz-t6HA7BeMtF&M;hbh_&Jc@w)V42F=$B5Z6pAY==o&- zoRNm*!0aWh+9ZXzy`%r+$jnX`s<2n)Kr-FOZ!iO^)uZSS4d~^Ju%o3Woe`+$HTNPC-F{dS&yF7r3*TZLLq5|D+Ot|u;x;4Pm;xnm+{y|EvpxzK<> z#!_-)4FC(jue(j6$hHH-aE3) zMZhj*8s$(fSUE>ksCyqFC*-GMnzTP;R4SaUOEr#7>L+5QV5+n{SX7RkWbienO=cy; zN=N3ex@RsDIFhP6waqyj2`KD|JbDUfX}%ieRRLEHS#{Volfxz@djqP@6WfP_F1Zg3 z8aP7_=|Uc7-scs?WrBuRKWIj(oMpWA{CbLVltW&9Em&-4&MJ230alS<7-m_&%!_6b z6SAW=o}@=7s#3UwWyt$^Xk3L3E2n7A5EjgP*(+Bzq37aSkN(`&>^YR)sf%(lUY@L) zaKeZ1_>$cRcax7JzXq5`uRk!(p3=k)HSU++XX_1^k{PQWADqx_+iwjB-P*{SyytAq z7L}h*fGK9fgEj=@uwr|30q3IIy%(Ctu+LtH(hlUqv`=&m9XKkD$==6 z!RZ-hdtqo^nd?Ij(S%Rl_5)h3^ZE5Nus79txc2x}Ls1pHN-QFqfl*_U9}&0Fof+B3~pVNJ=V0LUdm`i7Pev0@x7 z%wdwR@muDX-t%KM@UZ;G6pz7O(~I&fG?0;Ti%aUeV$tWNYO;8&FEjL)xhFS@XG6Wp zbW4!8KZ8?q(O49qqC1D21&Z#}=+o*9C%WPDw*LMCWO>Gsi)0`B!TT@`-7WjnuA3D!pDQZalbqzh8*D?&__lgdR~ zUvg_}$3RT1uH{~p&f^{`$Q8$NH?BAGtXI$C3|I&)El^D{n&q2+Pn<$#4VNZepPr-W zO{W#COY5=4YoDdytqU(g8qti`Ai<`hSJMlk7kUkg|H%OzWeaVTK_j&ZXNAmHf(0Uc z!4b^%NMhl!9kRA;H$odQ;6YS>yfGthz=ADODyBxzH9^Y?2L{KDC5!dXug&dhts|uh zGD<|)Ah^*iXP7}D?}QnkLo{!nWL-6+d-IGZS-b9!dq7F#o!XT&;DGf+)A244#B_d^ ze}_%a8u!SrWV0Cv*eYKY(6RZ*Q~^o>`Kkfu2V}&YTQ{3P7U7*IfaUbeeZCo#rn+@Z zg+Ak?^Q@2sl&t7~Py7?`zD^)BHl)833-vOLdM>ljjNQ6t(7no8UHPWRMBEpTzzS;_ zm%bg*AQGQPKGe@V3WX3R2G5oJOe4{6s^Xto8V(3XJXB?xvu60&EM4DD0=AQX3nPhl zXEta3N5YZ7-Hcqi3?lM}KlC$-MEhlha$pTpDCh>7sCRBgQ#_{LYaIJY;n9%ZAQ-zK&u_d^7E|h4O{)FH^-XHRg_VqIt|1QMHJ9!q2x!JvEC>VxSc^Q0x+W z7$txqMy*%2x@V*~vu(sBBNdA21GWJ&ALP04w`ZgTs|Kj8&Fl&>hI{GL)cjAe5a#om zZbCcyo+8A6#nkgMIExhNA7iDq`qO42W8P);5v2r%_TLsQF#?)ajw<^X zr$~o7l$wiDKem=%(p@;rkuG{9>qDxHU)jP!RrLc(sd+XcwO)tc;VZD7We>ILUbnWh zhq^FmL|=}`w!uGNLdRL$Uk(zDdE(R7FcmQX56w*RP!_NXUGe1Gthy*M935pVevTDs znw-1ES`y@XR7%RQjBK1L0a;)IiR{iBi6|EmtPO`8n1`ktKe(2^8)aaRLV}UWw8w7~ zT&VP|R=45$j^l_ed{(HmW@|k+fHCYzSOz=Phh4Y1T6NQ+=~9_<8na>3KbrD5YdJa* z9bB_0O#~zD=q7Gfx)2_>6MqjMdtLa{1&KqI#dSoAB{HxA+kSz%T<)#%gs$KqtMjY& z6#6r@ieeij=Z@L2K2+;>W~LMZt<<)UctxXNzK3Gk%fangv4DGQXx!&v*+Sv! zzjK8e?+kqy(p1LWt++>|=%VJoGW`OwrYq2TsxcnrUN2wE?-KYPnr0mV!;f?@j66%Y zmDacT<}6;bZG+71VINZn4(ZFj!gEO;yd2BKnB1UDNEQ1&GyhVy2Hd|-UatUjaKHA$ zcj;-6+!;_|@vn(RA;$dH>8$;}{VIB7kbg41JG!DmdX$-6LO_NGII+g86)2Nkef_VcnS#QU&Zmh-%qxlYxy(65q=xdnVqmYc(B3{&lp zEXO;HXW=Y0JMQIXr2J(^Ibdl#ItD+IVEMMDOZkq7*wi~Pa4?<-Vic(>%bjXwb>1Qk z)rkG)DJvLn%b%ThmYKSgVKZ%UmFcCl zF54U)-AM_U4&kk4UJ$@@`>da~+bfPs0)Y>~8q~gvq4X88M!KaEo3Nts6rbc2!i%`M zjTe<0YneM-yy1l9tWlJK!g1Ob=Ic|TFjkzhWr}C2vNyG?tt>988#EU$(=7DWx9I0s znp%{xF2PIFE+=n`fIRqi&W9NRsn|HZgZV-DMb6Ho`vqW4!mRCANSPc7|1zS83<@6D_O(jAKpOsdF9hktV)7wu^t(I74m{CT?}vW+Q|w~qBScb^wzp$O!X;YHj85#%##FDAEXdn zsxpWYJew-iDCu<-a=1@>$56R@hD{cKYcW>$u9F_shQn``xFz>d0;^q<>5$7WFmiz=}LLrjkZX55!!UW;f z4SK)GlTM>3X=b7uuMKJ)1yM`&UP?;kxT$dUa##E*7H7P3^aIQDwhUNq_SG zp~RXS9%Qa#=(LQ8i!?Jdz+6Em`4>ql_Fts@zeOq1EG$YZ%LRrCnD|((W$#r+ec$p9 z2TzAe0un?Eb7H0O~0Qhy(dYTuLm!YSl_h{ffF!{t;42A7Gipt^9u% zR>*`l|BAk?94bdg8;v&j{u zWJov~^JM7tSY|kfnp`gsmhph7v>F5tI&(l*RNT@kh#t*c0>maTqkzr zwoz1YA6**-BdDUo=!AH9R(!4V5gcMr$(a-x)&AjUVLZNMu{q6Zu=<$&fHbO=Q4zgpB5l`9uCI2V;16QkYAb++5PSPP-zpgk)Uw%hZ8Q>)lLeFr^Gnhf6H9W&NJm^Y?{8mVEDaEB4$`uVmsRm9DL32SP!6g<&Vp>fs`kdbq?H^Lkj- zzQq0gJ}X@SV>=H)y%5E8V1%h*|+kXGn%@Mhg^5XqvIQzQx{n;nXIO_ zS0@X`G=pU05>v~GEDNyCEmuCWFdb#M1J!KjSnp7^+XTb$8@0XAP%9IM-@zymGIXjB zmvnd9Eo5JxE~#xcZZ~6SINQLp6`-%ZAAU!;rD)s@c6ci}Hox+^&Urk6vKQej9knZg zi)tjp3E4>U&SPx7vH;`kB}eLaGL${0Jz(Wt)P9nk2S(yQxPb021imH#TJG%W9k8DX zQ0r9Hiyz)TTF-7;ZT@0kcHHWiTJpZk>ypjgMB8C)d7R9lGnM$F8|`m^Pdpjnc^fRD z@w~iDHBbDY^29IiKJlkFuyHkcs&1KcQbo+FA zk0SRL^iBrs7UVgu9J**=0e9z+!;#Nw7KL;#h1>eUjXUX4$g};1CBY5Tab*+ZzU`uC z^IWt-VASlCpxaI0P1Fki{ZFoabAS!`J6P)(E5iX>XvF?@p$qm{o0kKpjL_{FYuax= z@~#mfkP6qk8$aSL(8p&zz3#UK#^$tHvn1)Ay8aCJ@#n}5_SxiwJ4`51d2VdXwCvqr zROlltLn$ku&U~;^aeze=5DfuRIoi8UBQ0MPSlt_s0{uW2OHO%!?z<%Az^QX9k*0B6 zUcmFqo)V~VxXBgpXgb?2U5Qp9PZfA7Xx`g3v8|2nFNT+sVjr0;uTPTJlgI8k_~I|% zNJyCS|H60rkKgd0Kx+()jQ{eTvi(1Y17!Q};sDwHcN`$we+LIRpeY`W^B?OsW7u6; z>t6ddV=}}97yz<^u(LM-3rZjyY%DvxXJ^~HQV60SCDZRC=*(_&zdzsaUC-g|r{d`x zK2nb|8SlsRpL{5w<8*Ko0r75qdAYjW1-SIRWq-b&z7uq`orhC}n6zNRBc@+oM||NO zs$AVLy0+l?M=xK;hrjPSx@PHYoX~d#|8`6mblAa_`Vi|sHnEjTI3a>1g=Eet&OSLZ z#On`manC&XIVAr~R4+Zglnp1mc`vFPEns+>924BZT z>~aX!T`>>$X${0jxX&ysqXZoYAp&0J`6Pih0!C$?3hW*>Y=5{fdG=wWTQySLlf>Y67hwJDqZ5*N(3kBr(4CA9Uvg6= zUf!StxvdY7$Lm;iNR2-56v`Ho6YAwA1`y>jiuB@E|#j)nx#ya6GMO6QHX1+p*+5*xDz2*0PF z5C^ic+mZsmH_e`C1lCV~KR`fwVbCC=VxKylsb;GN1_pg&wTY=sJA@Q%OO`4%yk-%Q zZj+RwWzP}9U~`ud!q9S;2~ao#cQOBd!wSsce`oYV{uWyV=JAtb{@po42nYP7PzBy{ z39dhr(*|>=yW-8EA8_+SVueZ0F6u%$lT*N>$&8pEEt+R4rM2oSq{1Z`ha}ViUIBek z>0PX=SJp!@Q;8&o7LrRvRDV7f@O0?qC9S=Y^dn+^s%5(Zi%i2Hcw`bsYg&qTf*dLwCfB(lBG5E$oKT`iP*o7!ACBHhG;GX~ zBLo}1T>Cp%n38T>!*@epnZyDifU{ z-Yq=tK#CpdM4Z|uB1hg3aX#{&f`i#p@eu}p zRF1>4=5ij#e1fgxAHIM%^mNuG9K4@m?Fb+fzC;o*3w*&JKtBZ& zpc6LB##|!WMBA7eETbb#inHNn*)fdb0sTP&{>~8GKxTCWgH)f;xVmSDV=eIz;nhk1 z?2W-Fkz6KY3CddjG~7%T!+RtKf(EN3dLo`2AzNTt9ACpatqnT7D#4{&i6+@$tjG=* zizAPwt@Gx9^-F%y4bz>iVsqNodthYK1ap9o$rOiNs3Zp(+1BH`$=y(z6)7$TyyQBA_i?XOvwJ=uqfxHPQ}aqK>unP;7@LO0$d<27IBy`rLY2NpCfEV1<84s%Ru?-1HCz-k=T1*=+Z z-0|J%a^J4ZsfH41sH#A#;G`!2ho3nfoGrCcSD!3uV+g0sK74XTDK!TygM6_e>4j`= z>o2S6G(Oj#h)){&xtN^^djUlBTSsg-Lbl-+UregqRIQaSZ_@D_U;Tu%5VqO65F=5L zR2I{(kcA@0k~cm#;WAyURkGfxgdA`8kn1S-P8=$n+*j~6QDs~#x$Ond1=6K7eHUVf z5*`JO=Pwkl$+KfBcUmc=p%3-&LJ^nU0cc*KbrW03a zLBqpkcx@?Uqw1-O(GmQ-kr1BHRwSHZIf9e%;!kRc+IpbURit7<74#!|aw@O=$k*{D zL{r3xDeH0xszl^8$U?`&Q$0Wd&B1$)g0Bc6sm(3VUx*}1gFWlIQ`fnF+A>HD*(V?7 zU8;$7-L-zBMQ9OAyHRCfM>yPtS*&SdEM?6 z3uEp>Jd`PGR84ABqPwilr_kT?!I94Kku}vKc2yOk<>LGL%yC;=*-j;d7^9T^5y|E~ zdiu^PT{I+M?A3!au+<%ZmlhrGSO-T*b3YSKnZ66q4EM_dxfGQtc$)K#PE&>4@h3&> zL&kC=Ux*Rfb{`rzl#>(ZvB}d;6V>9y*vh%j!8Bq3T zkEWJBU}3()tt}6In5C=P=Iu`vgjo;7P29GdcB}1b?;qY1uyLy*OzjfQMBZIdR*ondU8^ehC26fRO9^A znbnxM#g0d5GiCm-#sv!OpZ!aqjTRSRE0|QHia7fwB?4kC(O81B3d1_UuH?9(R{Swe zzl0Y%q9`j)-w9n-8CT=9pBxe*G;s7b9fJlR7cJT}Zx=~wMZ-4QN;_2TcVB1EVB04% z{3qNUpiQY|W9O%<*ir`=At^KNv7&Qss%aQ6tydG^GOM=~BpYDbz_7Vzo$X`gXl!*P z%?a^dG+D+G)H5X;W_jC2CTyMh*Mm`ZG&NW)WB&w<_9+z<&##d^C)Yj#K$+-_BX4nI z5a3=8i()FWbO`JGN!eH{qfbCN&dA|z^74IKc@a#fsc*Ko8pqk6P?-$YE7l}amS$Bmk^3Dj{`wo*;fyXeT2JI~;D4f*p$74i! z%YY(FN}3ZA-+{lCeE~;r2&MdMy8y_8>kpt1lK1W4PkcLw)NZT#w!RR8A>KLCAu`1pNDWyl8QG|@gWsb=SF*r{d3RxWd_;D5eCol9+yUWW74v&3sZl57 zOO5H@qbp`>vvCe{_ZsF&sbF-&l0!w$i?XH4{IFi?7y&D%`+F%?iR4(@fsm$ch+IXi z2*l1}nPWq39HeHLR$QVT{6CO#{H2ZNDsF^Ag~{{{DBn>#Lbr(xK`G|UGY?X0V!i(i z&Nis})nQbKJt(FZ^s3Hyd@DfJZY<`k7732goPhFogYre0Ox%D3x_TJ5@*kl=YC}-? z@7fP)b*kU7_~vv$^XL`H@l(r}mv-C8P3QUPi4O5VOsruNO~F%Y^Z;PDtxe z_(OOe$Oqr4op2LnhXxD&EQ(kw*7Zu2{1zI(C(VF0`xq`{&yAKDWWOmqHZ%#E9xhl? zaMDAKr7mk>Y}hH9+X1DoDe-!OEt2(2f{SYvs#dn;2qmIr)$VN(Ik^) z8a`d;Os2Zb=h!|~o!0=}i|R{qx#G@uFKcLM38KLS#!KV ze8CZqneplxO9>_!T~fuuY*L44#NyS?vD)DHgGxo;Ga(exjAXJ%L-Vy{{=Ai`YqF)1 zZsRHJ=j`MeI%QIDWv#^md2JXzjkb-@rqQ&1odXFcorXSZX1x}>KGrLX!1Ccif6gMhlY`_VOJ7Bm6h`}V{Y+X&$A@B_S2LN2;~s#NT8G#H;%qD z3Ca)GA@iqa6)|M?EobMBkwA|GS$@va))P)2^J`=mBYu+?E#M0L#7K;w|&nt5gqG`qyWM zj4!L0{Sj6H(59n>>U&UNRkzcc!iChyEkDZS%|w3+T&}@3I!Z)>^I&Xxt}M z_?v)@KXLIaA4S`p$w#r8BcYgIW6qOhMi6B&A`7bV|CjBqz{w^b-zsV=KEj!1}zyIk;*kmC|H4MOkRjsKt; z{(i%Ap0GBM8e+&#xgWDpUG{|vbrsQ!r##lXvG?h1XdsZ1P~o6q6}-^}c^sTW+WOP2 z1IGIfxdSIS=!i0lI=ahvRJk=KfN)vJw~KPDK{QSP+|-^CK%pQXSm~>V>YQG%_T4#e ze%$Oa!zKH`3NWK8iqo4Vn zf`5VX4UNhFS3a*MK@a`I#n5cb0Y&sIt3?v$G>@TD?Jk})k5e^y} z0Sy5W83h#;6$btXIvNT(5(+BH-$np|zw3a2LV|)qqQFAKqWoWPUw;4)ApleWQGfvn z0e}zzfe`_}`T?-Nh5Q!nThf1RVBjF2fIz?y-=#kQ|8D;(`FrqP^0f*8^IZc70T|&s z|5`ZUg9fb?q%luKDDKpr=#&l^jlg*aM{LpF(^-Tf(Z8?IgZuL5R)pY@A`b|L0 zSf^k%tsx0p8Ym|J%K-pKbPMHA3#ztSiK^9W=2%t-vj%?vpEIHh0K`NZG2)Bx;YI4D zT1g+Sr|eAg%|ahD-!yMe4#1Xsk*4}ef`MfE1rX(1D;L{cSW#yCN`e;y0EqDoxa)~d z+{hMQmn0JruUS+6o(LZic6s`;c}xrd0E=Q`m7_tA57*g2^s8j>q+%3(y2`!b!zrEn zC}!UH7e+j+^(YRe2X1i_tp}Lz-Vf5cF*C|)!}K`Kv?2%6=b!4JeVGT z2N*A40{pk$C=dX??-u|l2=ISs4+Iz#>|1v~5Kz(ZnZXfJ_>hq48CbtH3GvMV2nzHn z_XPlcoJt~VIrbAlRwxciX~A;DH5x7N_zOVn3&8(=$GK=5$ASI`>ky6)Emt3ZyPNtm zjDCxl@z2UGr^z3=fo8&FOY4CKn-jciO~878y?~fO+EuM}(EbQ{3HI09x7zO$oaFr) zalYvMs90e@uY243gx9OH1>|iftYR8+le1_Qy8xTQaui6Mfl?8o(1H=xCN_q|To$TT z-QyUK+?e@pAfkgT-Zy-CI_aR!##)l9oMGgn6+7*3LP>fAES-SF^C=iHhzCa%Q~1$^ zt{0}-_64x;mj4NlCpk&b>)W&=GZt*@4X0^rNDUL+5*#R@GW*yd9ew}YIJdhb6D~0{ zd*sDK_c3L;wI#(EsHL|E|lAfKSiBXZKG{puaWytvWD^T1=Q7ke7N! zQ302e#G+)rYm0rG`S&jy7z_*u2>8F97zh{u1QCe<6q(^?{wxYUArrrxo?~o6Zao+R z5j`V|fSq4l?Hr$={52|?|BQmZLwsIc@4r6DW)83-B0~ZD3B`cuk1d{ZZEr>%^$w}7nrwT1wcgKAk z%kA%gZ_EHL8D%7@JX?&tJx%u~VbZk}j!P9%nXe4&&bJc~u+z4^cR7i{uV}<;kPPg8 zP@RHl^Ur`%qJ==vXGWZ+83gN4^57NkxDZQ@(_ibGg{`Q^S`lOCghf}Vf>cVX*$rfy z3C(A7TydseEy3iPj1=~_6wEf2y5ca04$VI@;nw7&GuHtCWp}Y@j)j-!ZM@{-(c5%k+Nw4mkISH)Xv@ivBwUf9*j;O;%~zBnkoe__ zlBVd0JH-&FXd8H+*wC~qRNo{JM4er1skH-!0h}pX!DdqVpLZ!5A9o-=40@D+2_@)A zEgaSkkaerg3h|DxL>o>re~@YK@9IZ!=Q6MZg412x)~CEX3nLI2lTa^;36n2Xz%QTe zgYv7zou0(5E{p8nBvHb?yi*1>-y}jOaO*uV1?0IFKU7Za= zB}1o>E0z+cCPUq_$10aG+WpZII84ax* z9RCX@E_8|FLp-X~JmrRFMeA7CJW(q>DsAMn6tVYaqy=~Zz>76CFC)r&Ydc_ue;XeDwHIe_pX^wod6uJ?{UDW8&>6wSEeH7{$<2vk6@YXFqe-L@XPH8pu6r^7$A;*NWRhP0sd@HxZNoCx>T z)~CaCE(4fa`}KjnV<}q}$%;j2`zE-};K>VeumiP5;*OKpJ=46?MgQ7xH@aPg77JCy z<;ah!gzf#{xD!38c9uVtYb?EJ!W5DND;7;{^h}21@KRFx54_|~|R0~wDSnm80gSjj~dGwgEsmD%x2C?f>%i!ETB#_AKY z?YaY^Jsz6AQ2>i>3FJ=-{;)_nZlE0)41p8U-8N*NLrt^mi`ZrZcxcPAGwQr$@INw} zY~z`hSF#=(JU3m1K-wn2XYAov;+PC~hWF3jQX8fAiU7#P-!A7JesIFuRUR=|g*jVw zD`5;UaFK_TBBJJW8q%iytX61Uq9H}rvvy$OI%aHl45)+IZF|{pf<{ndNbru$0f6-b zzo@?4iu7@QH%q73@c#L}_HisAP62mD_0X0K0(xnce|ny}*n0qkm%Oh%Jyg6f&d|py zd2sE)9LB&sN|0DzB|Cc@ZEJ9~g9wDncXY8^Ru&Mm{U9}2qzQ0a$o=X6xKGWW8##n- z=eK<;DK%^qxdn#%5slNv*W&?RDp=Y>e#}K-r0n9zZ0gSP`zC(K1&=Q!wN)dkJQ}_B zVHZFIzh`gV^XgI>85j)9)@5VbuT0Y6ck8BB8?IO^p>iq|_w8{<FwV1+H+cVpy|;|2V_DZmd*bfy4#8al!Civ8 zySuvt2@pJZ5xH|-bdvN(CS$plh*1r3UalU)cpEJg7CdH&@b=Q2mx~g7z zp10raiV@{1^9u&la)hzN4%%$>vCCod*p6l;=)VbnJb$!3-)Nv*ihZbmHJx9U-J#ZZ zGsff)_+iQF3_irB78hqp@YcEa19gxTO6b>ioAU(y7dfgyCQ(018OCSiLu>T_Ej0{X z8_sJSPMidGDPMQ3ODKatjB@hu%5rhQ5{7;kE7lk62!Te+7KaYQO5E?nFi1IiYTS89tiIVXj z`sTByidIFNWm@=N zR`%ggoE%ORE%bLm32u%S+#CQ2`xm7cgbuKsfE!eH2G27h)nvxO34bV_&k8OYbg~iS z%Z&370IHlPwY;|M#Ng7?3lh();({(MV*468#Uwmi*4p+sg;6Be z93E~%X8X%$Wta{PEa9_>4_1Nyv4Q6|He)goWi(c2;oyXm>aLve(|=BGXnP~aVy0$j ztx0e?3bxgVolrq^aW&1*%1u8QojzQfzQ+Kl-Vou1BJ>DDFuE=00`Gzl!yb}$N_?8TuG#N4N#u-k8nzXfB?~`nku>D5P&L|zrA8&K`k13=UV%ZCwH8TI#gCJ9pf*kRltBLirV_9)Qx;KB(3 zTKH%@0Dc}}Ase?a12PyeeFE??KvNZ(?A+ti`7^D5uQOro{Vk}6!&PZG%qzGJ3ORD)Wv8$y;nVzoa@GA8 zq~8DNlw)K2ms5_L^?$%A$Iiva^S{O^*ZJ&}69C-)=9D7^dy}AlyWak3nS$6Nye_9}s0iQwA);LpK^H#7!0n+Oc1vN0@$GZs5orGldrt?t5B89$-o zFmVZiN5H|w!zZAop{094&&kEj!^`(lOk6@zN?Jx%RZU$(Q%hUN)Xdz%(#qP#)y>_* z)63iEO=wtn#M{WI#H9DhDXD4c8M%4+1)mFxic4y0>*^aCo0?m`cK7u5^$&a-oS2-N zo|&DSUs&JR{IRwDb7yz&^z8iN*X7mq%`NzAlY#*7^!|_Sk2&(+3^`(bfqNlWa$Y2JpnrfyFypPtM?Ls?=<#W z$G`6-{r4UJxteDC!xur2bxQb#W8_QUzAqYxzLA-aH`4P(kc*qshYno)(QrRU4qF)G zKq`0)mbQU)f~r@xvh5N{mp#{}r(&Bz-H3(}D-17ZDrpK{g&j6tx=*+7zbKz;f;7d4B5Tzhb*-5 zn{2%W9hYmiYzJr`Vg(dWgbaBC5$x}UHb>!>hD+VoI*7W6${orUwaY8DwUgBY!&(^v z%S`n&57eK(%IqQN?)A!wwpWxDmm(J9<$mF{t?HK)t~>RchkK>PTHVI)9gHRAR~;>j z0Xj~(YLA~cB4FmTb?q=LQnfvOaXx<|M>enaW0`au}5$)yi6F{ycGlvT4=5Cm@YlxtlGGl2KnWCXTx&Cn0_Ua{kqh z&^p}7@dM(m;UlOY{B38!pCZGq2i`(oZ-Sjo#GX$;e9@o6-~UT^(2p$Q05UJ0^~OWU z6IJo4Hhyo^%an5Zxn*k|KU=~T>FNc^8aA_sg@;;K_M=DAl=l3Q0I$b|4y?LBjK?w3 zTI|D*sc&=M$eoHQI<-WE*Ym$HGpyGFGi|wA>bw17&cMM!&%2@4LsS$${c!=!(uG|O zZbACSW^ghW8v~4KJ0n8%%wS0l-_Rs zNPl^MselfmIC%e}wD z@_AtC;=OKaS#A_Sm)jOKx=E&w&$W9{S&yi1sGli1QO1Zt+?$i4<;j+iL}DsNX`X3Q zv3eN|_}$$3JptdoJ$@6q9Lw=%l-tQUKK&+Kle|oZR#m*kQ)ou9**Wh zLEWT*wwSY{BcmpVs0v@IT^@SPPnV+mrph6qYu}DO(p#K+RPY$!$+}OKx_`B}iTZ#T z01F-_grkpg1x@-{*#@s3GTb6BV)!4?_OU1H`Q^Tl3Rz7bQ#K?n^liZ7j>KrESmW^e z)mvj{K9pRsvKb~Ao?JP;6S`o!CVc_`N1+?$xNG0WzqO?Bt-eU>!6UbWB5?ia3BU{7 z(LE7*1Xcpi^hr;y0{?b!kdS^+W&fSwH3Ltd#x!#Gt{|$HgOV^4N|y7MsEQPfIK`&N zPn4WS4wj=yo63=v+51H>$*e zv4OJkvr+}x<^G|@yZW0(@U`@~?gq~etHDpe3C#HukO+<=MYQ@EgU7aGCwTsV^akG` zZioX9T;qahyFRqx7ctl@?u428EE@g>@Rn>hF&qk1!-Qrwt)AfUQ+L*7sj2P>S3~_K zF=S7izbEoaG;xoUZvWN|yZ2zpT_f}Hx?#(ZVao3dXZY_Ij^!_1B&_v-H`NYb(Yj&V zfumSr<3k$xxO_RJ`vp7aoIK3x((A;|NWYSJM8bbhVbaD4Z|7jBgye;#A8?oKfd|YH)e4NjJ znc2wn5m=;L9NnG3N2{`^xq#g|PR1_g4yN8LVyb@$EX$F(xwxBywbef(%Df1F2Ad`A zjNQ!t2sb1AOP%%l@Y}is{Rgd^?=Sgg#6-wgnYj?i$jDesjeoxdpTgY1>{%cLzQ6EB z{t?LLdnRV6{D-Fh+VU4&xwsz<=bIcd~1+mehY58-84p*LT$ms_1-%5jJK)xDuvn+OA5@>)iWzcy0OT3=YB zn76(*PaAu@!5Fagj(`beuR{yUDGh=PR?*8p(~nGHw{Oo;>hLYh$!7+c5?ChOJ&!&bhS+vqGzxuBeYpN zGuYh^!*amI11$)Vi$EfYPi2VV6;QaMxn`cP1%C98XZTk}e6!}~Y7klTwhjbsS0^eU z)I2q#!5~`U<78UU#_Mz-4y)AzfYDWUf}GTyX9qtL4mlhPK&B+>c!ij-&bMQun(Gr2&YAdhk9?#>_yCN{?fxk zFveFG4JL;W=b^|x!vxXS_zC`ad#hhE(iJpGkE@bD*A&dF$KjF^=k^m#;AQ5g1P41-E&dIuV} zZ~c6)T|H~jeXlhqEB#YjN0ce}z3lr#mMigP3*@&ol{R}5KhWqg8rW2zmqiNrqcnM% zc*r#+O1Q&|vw4d`jfj^Q*A_#?v1JzU@cQY>O#@rBVX zy{TYNxCTyVkGoXcLV#;|Ki^^Kf?l1Jg2Jn7amh42bt=Cs$%rW_TWwhyhkR&d8%AMe zj7ssNxK(;l{+`?dS}Q^aeFY1~hu0-F^3*BLuZond z!;2;fOy!38`4#@qvS6&0by|QcH$7xW_$gqC91-gDFt?jtmu#xL)=d#d1Hvph`U$cs zzUd@>^FyzRH!w=-xIqW1lYB(*3Kjv@5&R^hvid$@a(l?>Go>fj7`q&th`ZqMgge+% z7X&HC#vf~Y&CGLXuV=!)&eYQBHc7d1XqJ3CXF@~X@)Qt#adhJ7NznRxNKXITW&T-_@q6wi`k@KcHY*wVMRJA(rPy)F<-Eg)is^AtnBxaMnT^YKME zbISCc?{qKp2GUrx$NdW8*H<#VxO41+R->lE>Wz6axA^QNz269}A@rHnWra zcYU`(`1%L+TJFL3-sWV~rB8AusKPwt5Jy#9lY=h;pk6t~v^Kq3AwO#WLMmdG)@`HS z^uob=vs(NNTE<=ir@1tr_48^4m4SN;bfv&I8&Q`IMMs{d0D)O`E!`8+oYJ>DZxH45 z6?PQ)0z17sQP4W6){!_SE1aTR>ys={hi%6Klv3iq6jI`TI=SxKkQvA6mWDq>sISG zJH4O>V_*j7?@-(jvg)yxbk@gho&8bYVjNihFcy2XB7*q2@p2$PT;OoE3Bi&LW#G`d zSbe*_&~1x}wH`v_D1GnYUD%FE1bJumSMsVO@}Dsp$3Jy13y)(G-5WiYU49W(6tk%4 zTT(S{H!<@tHoGIgO5$G{d)ZjY72WCj`SYwoUn>6bLa+i}xbCzi3V{) zPaTzSdHuAZ7ZkbTeuUBSWGb!`7LYY zkGJ*(-bziw#)Hz-PL<2Loj(1Yi@aZSY%oljMI#^FCfb$D-fOOA>AqFK8nD%YuK7%z zAKn)Bao(`DiGE7ToKm+=X^mk)h|D<1rTePW>C~VhWms?vvAv@%MUPQ#o#jYPx8@2@ z06~{cWwuF^Gs8VPn^BAlvp>3QCN&Rleuq!<%6|V_P2Sk%QnicENbCHEFHzzlAys&8ZGPJU`0|b>(u^4(aEs-yezWKUTeo-jLhDhJ&SI&~^02F2@~^UyPDG>Gm5C8N^;*|Tm~zM~*{7CYUnO0WGrC$N zg4fg21630}E^pz1>)Ocidiv8L^wF|?$dlB`h$g48FPEmY=&R77d6UU&6dLb(&`LcT zHnUN+W>bsNE|jSk%n9R$M-smACd~fY%a1DoE8=?=sh;D$@i44LMOr##k9}HQ=W6c} zkxo(|mnR*BR5pSEOMmqB6o| zxTVpc6WKlw@}-N|=1xHpSUtl|)#DMe5e7LBA88uouF^VBET@lgD9KUhKu927 zZH2L!m%m3s?~BItPg>!NHO36we*Hp9RL3%iyRR6UDMtuW8mOW5Q(Pxom~7pphrE?v zQ(D*F9YpZFmhf0o7jiu;(CJhxavKVq9ObpKv6rV)NR(D=k-!vNIMDHhOg4=pBzB#1 z)^6GEt8Y5|JYcK(sbQcV4=VddF5!{K+4zQDO}8f}@1(-}*DCd{S4NUfiW zaM690`<-^Z_Bql?T@n|hdzOLPO(R|&HeI!b%<{W{upe9m{Dl*5KHNGTSPvuDS|_L6 zeipCpnMFyST@@ld$ucAi4!pTF3dgIXC4HUHS~h4)e&6-DF2APbPDW`hrSHd^PiE-8Hufl|jSwuQeh2oI-E!h!uDt!NHVsY(SpmSmD zrtb4>ofH3qWL+DrIqx@@kB(UjZbB-yJb~P5ZF&za@K{+jt7Rqa&a>eP4Q@&UaeMMY zJbDfe5A!op+pWzJ4L&a-+x%cYiIw&I3~`t9?lM*twysg~XZX znW5~s%kx!HCeIKwJB>26LH&k4x%b+$NwdpPOSM1zj<`*959sO~vsm^Jq zv|L?Rd=p|OV3dZxXO!6s4r1)dpjG!Ud~GogptOv90U3z z`14$XgIbVKa3Bb9cnIe?GW4%cp5KA@{|#*ZOB(gNne`E~>P9*n)%qvhoLrM3l{^QO zdKd+wumBMPO^8{(Cut;Ds8zPNiQp){uR>)o>}{E7_NVyI8Ib>-3gZi@fg3~<#VI|1dmJhAz8JE5_88;XI6ha6r7A-hf2M)?V z0|Wjc9TYS;S_cDy#UVq(!p23%;N}rl`V$ub4eW_r;#sJ> zR%l;5<*;#Zr>swB!l`NYb(C5H>^}0We;C_A(Cgphyb(;Iu3)&eAWroc&my=Or_WY( zYq4BtSr<~IHe7gYJ>Peq-v1b{l*OpQ)^K)ue)hpSVNO=#9U?rUpjH{v$S=g)gBg2{ zUt@uZUMX21**!d`<7=muKa82 zk2P8R=7P{AmBFv7viOY!JqGGMG zn%5VWu6*TD^*586-KLc>q?XWwsP}2$Voh%BO{*!Ke%q5w7{4SRp(l*&$M{*j@ry5} z6oY=%xU@RUc;d!u)AG?wx?hYiv{SvtNM}}*rZ#j{VzLG*$ypa2;BF#(jy?VrL=B*` zg3!pwg++dM&2I#C*_xHhhLRTPKdS$;Lx1--h#XBAjGO+W`fu2D{Ely=8bmO;YasXl z@n^6!6a*AJ9Ngc*($M6X6l}^^Wb9lb#?J4@(I`cO6B2VKV6dq;OM!BkcbidwZ5z@$*K^W|0Xa@rySZwAfhs>jG;0(H`KDm*B8MWv|iy8G&@^kaWgM!9PG`*G*5 zvUO21@Y1BI{^W%k_j|-I&La^eOIoC8{rtCmSEYtXHP`J-I8@(5zi!GeNa@<8S=!vk z|F$Q9X)~p1`l9l9|5Buf^;;5K!7NkL)`G~j<|azPlu057V?43-LP#HA3dzg8e`T%>o10^WECZ#69VBK^@6ihS{~%vzjCVlv%h+T_Tt(~Xcs zNOs{Di}xf0>@`VnzHe-p$QP$#3*0W;PEWITG4Hr~jORUUHY;f=?6PHA!ZR;@jf;ar z6!P2R>$N_+a_(yhjuVZ%I<9^gkjq2vDKK69_gWN`gFmkx z)CU!e#9Vl@gD1exMAkpr-kq72Kk=iEl5hR5Q^AxcK>Z2us;pqM zR+o`0(Z=YKF{{f2<#`A1vyHI7S|&mNONo}i5+<`+Xtq}qTtXzHxm)HcALl6*`bWvR z+g;EXHzsE-t7t`N;=Rp!qd|Y2o~;c5+8@jvdXhCAM6$DqS_TjVjo!Dk<)3G+JK37A4QUpigryS1jz0{ta>( z-kO2hwq;pWOriN;BPX6&Cs9*mEMXFriOHeQ!x&9-ro|pw-gsR zU=3{Zbo-Id6nxO9TZ{!<=P?EFzhF&m8F*?--V!(e;Lz-&)j`^qOW1YUV?b^)6vbFW zP}qZfJD2MJIT2Zn*sS8%B=lwd$mc6Ws*kw0Hm!m3#)qkhXNS9X z1$H~F$TmXTG-&7SF<^t}qOCw93g$zwNTZ*Lw6jL}PppPI$8t)};Br|_OFbD1y~Gql zl#l#_%AfsdKJ$vxUwdBK+fx*Euuh2?h4jVv*jmoEH*I zSo_~e-OCBwCR)&lsIW@*e!i!0xY{+TfUsUs7a7oaKd^Q3PSkwJ&Efs~(5Vk$+$zM( zIMIq$mCb`M>J6*R(?$btvcR()^>486GZyao=Xv`R?CXq17R)OA4Eg(W$rB=f9HRit z4LBWIDJ*_nHR|p*%G23-v-ID!1A%6*m<(1Jg*(E#I$^v09(l~x&rVyaF7VtgGAmKs z8TlcOz_fPCM4 z?GXvuW`ly;QDh(?HswV!`k|6H{$XFiB{)F@w;!|?(jG1^VeReCE4Z&8d~yUSF5rs0 zP)}%vt-1OO$nhjBcCfK|q?SO>i|0?VZ z%UX=4C2+{18=Z-rO!hUd8%n1^C@U^Ap>NWtOjJ1J@hx@f3iG_Df!wANPfjOyp&>-F zXq)|E^etlFX>TK5SS+uctNMe2dC1_<;>Duk#ydtmG`%CU`7u4!cO&z;u-IoqOdwpZ z?ZS@I7N;G^A5)N-o8lCOupoI_N?N(x-YGknjWJdMg%?z4o!Tu`QV%Ue*LfJ^^6BWj z51je%lu-_<+dC^=B1$GaZv|%w6x8NLLtdmp@%6dQMQ>rc@DX8l|C zmkmXj`mRN^I%ZwGrs>Vgmj+mCa2l>P;nlI^Hj-r7c%YNM_XYt!kr0naCGmr#7;6x* z4H^=yVnh+4AssDJei)U-z&k<_`Jlircdv(Q8tIcp*@q&i`9yv^3V#B)?q0Gztb%Xw zzrbqG6(}c17{GYhQ%u&42nYyLf&5CMBxFYF)n~A5FRp;|>>sGv=Mp@G$bZwi{=~}v zF@(s-!L%+m<=~T?uJM1WC1`EItw_)=Ejl1sgkVFiJed2NJdQai-wr+6;U@rmCQ9&` zK(K#569C4-vN`9F2`ir%{{xl!8wu+N;Rg49F6uK`NK$ucDO&M5>zL>Ji(6bv@LB^t z)gLI=zX5qc=xF3@WXdAO!6(1Rb(iyBQLfXtqS_rvIxs-U_O{m%k%%-&yAuNSdQ%Wp zp*}z800>6fKU0JP9CWE|F93AHRT_-rDNsy}aQBY{li=z~(Pg9DoD(#D4}s5u1x(wMzia$HexaU;xtB2oD4|ot_5(StKO!KpYZC&$6Zy zfWnTS;N$FJ0OX+Yt87{+973e=;@!^0ipWDj*QY=UWHJa0KtJg zAGE-R0lS%=0%La90h$`4)^2T0ZCWCLk*8&Sk_|Z|t^NR>KVK`B!jA|C!C&$LNZkr6 zK~T^Xl5O##@X2U>U2_1Og=+D8L;$uweh~@{fD49-Q{tpFVe6&~3c@zlBHj`n1YnAS zfFO~%%2R;2#YedF$Jj&5mcth~1bnDIxF9V$ydao(KuFi*10W6x$y;6%R01HFTZhOk z0MJ!~;W&T=f#2c^z72_5VT~cO$)c~$&AR}APrbJb4nS-NJ6owxjDS1zpauZQ*#m3S z=xD`dUV74OFlJ7l#9yZ-?{Gz*{|x+(!FIm?8x}VkADFuR4;DAi{{&!^gO{8Af0tb? z3H1Iy?CSr>;)a6+kJYn83OG#ms$2?e3=e8``Z%=l7$BV8Yyw^U&ST#Npc&*pz& zGN3u=k*&n3{;P$7fyc1QGJb-GYESsI%tC!zZ?hsF$2TGkBItQOeBPc(?9Uc92nqxN z^QVCgfWfk0YYPSkjSTjgP0tOcvvU2ZZa_mke#Hc0S*$f|q&~B!FYj@C;^lbsY|E(X z>L@ic%cWt{ulB2P;0t^NC;SZYwh&(ngn1~IQ!uaiN+P<1VA6!utE-T769CO7F}@|t zzwdb9LLTJhbL6vl`ycy-=2R<9k}k;JOlB-J|nYOTLxcid-v zW8c_x2dnj}GiaOhJ#&-Sr>9jXS*KKsQX?woHWetM<@Wr!3H1GV%nSx8B$aQU0Qs4K z#^rj6(D+*{VS=fq+xq_L3c+$jWvK+`U$$|jTGm52`5V0vk#^RD<|4CijGeb^&88+D z2$AjC;^Ip6{B>4MfQo`jkqRpi%2!guX%1F9Wv5*k`j)R#Mh+uYc1*#Um%JzOq+bhO za4mG58luasNqycBLDAQ9kby6A_A{R zU~2py9r#Bt0_bGm^+-hcpNkskOfN{cYo0K|03ylqzc}W3-C-3r{(a1EgWESI_f#N+ zNRot-{_6K~CGmV`KtMplz#+o?lc5ZS4q!lIl2fp;KeLl3V9>D0oWT@jY)UFtZc!Dt z;KW>Emp9clwVYxmNnPWAs;OYB`=P3}Nt{rQtqLzOBa-?P-Kn+zEkU52w$KIK%?MKOel7$N2q zU^XhHb>3}!M&S}Cy(1JW5QPfAU*|8cSAvfoUzly#Ke2E;yZT4j7Z_pVF>HNbGm>$` za@lg_bz!<|@40`xo*#&~uZ(43!B+itVDIb?V_>g3wDwUA-b% zNrJ}K`OA$zPRIJ&sA~mnIr|aW?HV+D2Lr*B*?{&(Xu@lSe1?*3!aC=?YUjm{ZW2{> zt*N~wt4$u*tCm*=9cdFCZmG8@oPno8O>?t*v-+vbHH$NQ9kKdw7ZYii?mCK>-laKBO}g(G_fm*ZeX)BJ$9UHT;?V4I_#SgAabN18y^ zQ~vXkXD5;U+x-_^@G7OuE927}Gv)+C=A-rvdwubbq*u5E3`Yrp!si#|B0j;iNz!)p z>`-$Nd*O|(SnRFS3`BR7rOB{NEs(lIhn|h2tNr}?hv!$P-)DXO9`4mfi;GFo@pa-} zq;i|+abMb=AjW#MF8(~;{8({$b9Zg3tE{Qp@ezB^Y=~67vGTYtst{F4xmbp3YQQk` z10h#GN}Ke>vD1mNY(`G#~9pz zbMe~cFw2BM|7-lPYAHD)G+9a!qJ7Q+7UQ`>3##{fAn&zQ)2!nDJdDXn9E*hMc4ht! z2vmiWYRQGRYH7p^3u7apPn@xB;z@ApEnjbfwmeXI1S_OmTw?T?XbcwVXis9q) z5hSEYv|92t`V)!t61m*SyJkd&2ET!ux0|>B^?JzZ+|6xutCwwL-i?e@`)Z@ekC?ro zcq3fW>+F!oTeF#ar&mR)Y<%ZbqJh}pJV?yB!(vHF)}x@2If5V8J?P{Xs6 zkp}HKoeK!+SsD0ae*MGjMpHHpCUa&z1>4>KoX|jEyW2QwPME(`BuX{L#~f$QGFRq( zX%!uf?#Gzn)}7;4Y&v;?mj0gQNW$RBjHWraN>G$-iS26fNIO(DwSj_LIvrPFC*0w@ zpXd!{vT7B|0rr*w1*?-NwJElC@69x`h_f_o=slGPCQ+nyXa@@uJ`PI!t0uTqt^00d5uAC1P=e?akLgO0Bv9+mLJR z>$l1vgLkY}Z3$%ku?ZAL&=d|~3+h0S0=tU&Aom!PnARL=mTYn$B7f>JOG}oUT zCJSmm$QXQwY?Y2`I?oDJD@KcteWJeG!BAEF1W%8YoBJy?I6PYzB+R>yL2YDdo!sop z;LBEy2ry^A=>+wO&dCPRk82K=j&_Og4!`CsKahpSQj=vgfoP(Iie!o|)P^7rSyl%r zVm|)xreea9`YLwd$7|AKYBSYWxN&(7QORi&q=9Ulo#M(ElQ3*mexL7-^36)LOA49aDJe4NHly4B^<;7Cz)j? z;T#6_t)AT7C4%te+Jn<%W^G@^?BmlwbZ8Dxu90y8V*ptQ+=ReAKo4~uy4?xH$k};6 zT7s2?zuMxXB;CWT&m7fZ5ZP-iFxc*VPcH{(w6bUs`3 zAlSdg7=E7t%z`~(Q#SsGMgQ9h4=9pUmnqdYQvSeBC*K$!_6Y*AmES~}IkYui?3vN)1eB@pAa~%t$C7pL zST$5+M?;59m3;%qVS6Qz0f2Q2-HW_c+EnDt4y^<%S=C!K;AQrQ;Kz6XBvsqfm53rr zJkaJ13*B2oi~#^YPnEsUvWZ3aaG+8`q0siez3CD&5+1(^MI!@*=1s`KS)C9{3Y?)p zCEr^+;gsKgGX16AwVDOuYM<0w4v8xQXp(Y)%%K zgOf`klh+`L<0*$vuDb~XIU+=74pk=v!p*I0MRp=ks@Zr5YXT5Kw_SXrW1>(Xg6d6S zP!Xy}2uf$aj}nB1us=H&j4%fT2x|^#rHEdGAmTNhb;v<53PM}oPDV&Q6eWc&#mR_- z0$@eI1m{2iW-yrWkR&3)7X4R=9>@S%yw58v0M3~_LBEN4CwB)T)zS$L0Kq`K3U`1G z0(Id)Y)Oz7Ns1ehi@+i{fmK+XF%c1eGzg`@P7%yBEP#gHgdkiJoxL8!V?_qQ%fGk4 zK7;HMLo!-$!d(<9 z5a4j;;11w=oVXLJ&8!4Ou<8q^kU?=n`P3a{SKY8;DQ4EJBM7b)beX~kD*?J+eS+nb zDFF14ZX5;#vY5E4K^QWCX(;?a0w9BuAJ{I21E5SZ8;T$#P>{J8zxiapbdx6F|8cE9 z6``+QghnO`F$+v`Kw!>8qST3?F=Xrw72}Di1(^P4qy7Ji<;l+VPotd+92fupoO+F& zm+gN~>b2i2&zFGz-;DPEpXK?#o#h$z)6afWfpUE{%$)_}I^_J0Uwo3>HnTO0DgSKK z@KRkn^AUm$GB>w_vz_7z=#rk?$aV99PrxfH$o+$; zo~imfe?+Cp>{b>m&$EY5_?H2P=KbFYN!KlIz)8wbhZ>LB!%q~iy^asSTtW#j_P~#SGpoTX(pa~gne-rY=Sshu;v4GlSV`sg(yKHj^|-17 zKMAn%M-ZN6qoZwyPuZLxG~G{0=g1@RBj%VVVh2+Ur>SFu5NDFde5~I*u5+WCT@*2f_aainkV2#3%uY`ZU;-d zU|^S+0QMGS0i!HtXwlQ>th+b7UZmS{g?>hlT-GOwgQe; zH!96eamwBEc2ap}e3&jf+%f6&d0r<%f3mBo9Gv_{0)E6|`jyG|G+8MltHfB;cD^ag?H}LNm zLJ3d`-Pgk#Y7AR{YI9ENm9al;FOAi5AGVt?xf>9k8up;#JONgSq}PTF+#g+LJQ+Mq z*A_J}>@{!vc4l1;&AV9!t>`WTuPqGUtX{}Gv++W=vYr6K3dMe*nyhX|^e*!P>n8w7 zfV^OF$P=q^A*><7k|+|%u7=aPp2s1H#PF`1_Kv?QaAPNM+UW@x!f6}2e0Obs8o06g z)!wq3z`Uc^cc^ugvHbHFo>1eOOuMK>b6Xk8G#1jYt0y?ws6_!-J02?}lgDf01tCws z*Nm{GjPFT-mh|5srQB9rOKKX2+fDfyScV!T9uIw}{odT+*?wZb_PyiwqLpvC_S{s& z%%3rNTvZA=medLub@JPp5#mtR<}PV@*wT0c%mWU6Q}3DLu)s`gJTNI2#>(&>{Llu( z&Dr4g7x$7a<8_LV*AtVSD}+rLfetnax^)@3l|v2u7I&qs+c)hR`fWTXGg1-lC|>5DQ)#kZ3R;pv31pd(*9;-ZUV1X&r@$B|5qjGVH3#f240kMB>H05x>nE#1^?s3{^#ca5=foqYFd;4)e(4#%$I=w>A z%XNJ=@|P{&%*q+0l4E_ZdIFlJeNbO|Ddl^g5a2`u(Ou zN&+=cjVlb9b4FW&z6lY8Qt9%>(YsZT0zpeh#U44u{u9CKeJR;<(x7(MFQ*;B4)y#G z67Jy&ma28(7mTLEA%ydJVI3YN9ed+^*t_W)6>{%i&iR8yvE*4Zgwwfyb)pz?&tgn< zg+oA-qnpFU6#AUw#>mUy>eA_Vu#A?=`pYa2?h! zZ{1pyn%{l|XW~r4{q^9#t$2XGUT)d-1k_jt*V+5Zw2#&M1~z)n5X7|Vj*{%(g{zEL zX{Zc>Cw2N;QcCRel+x3h%?;9nq0N{;1$$f3SvyYtp&XYMiK9=|gV8VEbyN4)ZU>eU zzO!2loZo0QB=P#yPBgkUVsW{lG06qvi!AzTco5s3wplwlu&o?qc$uP@c~pU%%E6L6 zjMHS!*}p}FL>3nLLV*NI&M1ooNlWbDPh%nWa}Hbx|AW4(^4QJ`)r=sWOXVl zm_D6gV)9O9T$m^;NC4UXAF|RE<8@YK1 znBHBwYFj(+T;5ey&}bc++7FS;Q<>lOANwC)mNw)D@$s)lkdU;WFpa)3ukkq9nr=&( z)Gk;W(Bb28G-T5qzG>t+RrARTI;j7mDt70Rf9nvN$W@=8nU72TBon@(Ea! ztoRxQoS}mJuoS~rF}A1N)XxOiIi>4by&URwOXoMuKjtr#avw8eYb=!1*c%?rR#ZaH ze3U@6MJylv&&v6q*^>W_zWN`Ls_eYrFxsDakvabdlyfdNF7E$b5j8as-rtn-|0*vs zB;0=&sVaj*&4fcGGma$cK?gPvpOYd}@MGU+FXpi=mBqU0j=UBP0s!ai)pLS(+6W`u zSZUedY9Rcj-TZN^frL_p;?yKmmUyrk4Gy_V?cLt^o8^5o{dS*9{)#d$w`A*zot#A& zc=s)j-3X?Uw!gpR>H^2wZhfly`r^Q%escOQ^+%vCDcFD{rEllFq#p^LLQ4*-Q|7Q_7eUaP8R z0^l4oX&||wjJjweb7zCd!<5$WoR~R+=svmZv1NH`Nf=3BV4b|Onn$^5c~(oOAuS$Y ztrZ4{MHWx+mV@KrhSR{3kb*8z+KfhE|8!&gEnyZIE(8wS!JuK2!QyaZVzCO-vVn8S z{^`a5CrK8&p&d_1RboeX!A*#hFCTp^Zkyc;Q6M$y_vVJ8GH{J3*+O}E*(x&8Yd^lR zfXeuF+k3^n1Ir>iD_<`Z3EFA!L1{oAQ^=#peSFH)KGIiT%Pq>Km+K8KSauYvbjD-g zV2e{A)otq>|L4?{$9l(!WHTKayBB?Ys6Rd+^SwRYpzhDa$R~Dk2IA`?u{i`d5h*dg zy}QT1!KYw)oAol7M{loDZ!gxDks|PnIzYVe>T$h~N5Ay#qfBXo{^GYh7xW+Eh#XY@ zr7!a+Yc<6C*Ux6~7HUh9EScgk5#A2W=y&Md`t!S)lo4Y1t-6ZMx{6I|Gb*cUJiOr6 zF)@aCV@Zovue?hxGFT>}JnclY2D z+}+*X0|a-;ndE)Hy}y0-cg{Yy?)~HJs!K6bOjEtOd%An|TF>th=}=HE^I}Uy88&!G z6AaoRC*k@2ApClODG7aaN~TB<6e-!3&(AdR@3y>~Oe&rn@f8-dS^XJe+6_tClBx|! zO8V{D#gJ%yAG`g?XXZC-?gXhq{8y#E6_&3`Nn=*Yz6Zqim@%wA?w z0$dZvcx&;k8Vfu)etfQVUuqqF+fye&q?or9h_^}krr|E4yr9C1I^T;_TUJ^ zi@a4Hj4j?WRS#=&+(}Hy#8@=ZV-BkRo-70w4qBDlKs3VM$z_)Z*j;B0JMJhH`bv_& zTL24LNp`;HAlunLgr#Az;3#cjCrUY5-^cNS(2$Hf?MMDt{eF3itBCOzI0r<%{{uJ& z7wle;^K=_BiyC;v3`xz+~o>mnl=ycXoLmVQvl5#8IUpMf(Bndzk6f$7`_X^__ z4RZm+i2OQ-i^N6T9@Zxfa(2+%-QVDzKtW@!Q>-)^vt5OGDogugq5)`o|%Qp1F2l2_TpSj_4^}vt0E{J^V`nE!n z*WgsRcXykdj%4%CIlgU245PvtKfGIgZ2mNqc4A=|9*f}nVP$pU#JM8Q#y%<~&QltkBMi*^0>|klBCmLAEn?p~Mp`Y!q z68Gt>)5<#3gvU#r)T_VFnOg~^xiQ%=OF7@-*Nd0F|X zABD=uf~HQKE5gKjvBDFoDuRzKllTwWS!Jq7%d3tAOF4?J%(>s)^ z67*d(ZidNUO+1*aycQuCfd33Bk%tqp8ST$U&I*dN_g-9@_Xf`bEa9!v2B&!m?shs% zRozPYMcZ1*D$@$1UYT)VW2m%5iiQUstKDBpviXo9PpV&m^cyO}ea@zXd#5DkJQi>6 zL2vZvXLw>QN5yL2F$q*nrraL3MVfCtI}TlWVz{1rD{;Sm;rmWyWSy18_%g!!M)P($ z;_bqY)X8tko&I%;h!u{yBs#tIN1h?II)_?wq(rCA@-F~m%=M$TOY>{C^e+JBg}f~p zkO^>bkiywmZFRpUZ^qp=L-YQzC6bK9xLKs;JJdv|>FP~k+?Sa$mnpffKA4te65 zo0%jG0cIqe-`jeHtnKM+PPfX@7WZAG3Ls%%QVcScp_ zK0Vi$*XlOsS@`&fSCAcx8>e5Cg=uG%cs2@M8kFGfDH>nf_kLKOx@K9m4k-yGyU`1d zwi<90va{haGUDJGZ;taU-s^qtw03Dkx`BCfSe(}zr@HH2Q5fqiO=@0mcQs8a1 z_|a_V|D}}M$VF7HrrP41-zh3Vs(!R#N=7pe(GkspooxQ&!k^POUJ{?2uVuzgTa@ou zyrM13q&Ux#1x+R#H9=1Yt{GvXxay5MrXo=sYDaznrbD5#;Gn2x48tO|%OvkIng7tl zz54Yj=>5AYkFuGaq5c(bJXx?E`(3A4N%yDF_0 z+3yg@l;WxA2wi4np~SXQY*{56XlVz&#j8dl35bew{5jR_^m(f+qV?aZc4 zK1xN#SL(Zes}>deYm0mTVe=9ut9S9Dq)8?;kOl9XG{!}%7%J<<Q&K z8^t==cOMVpbO!L%d7}9!PBR6pUCVU%YlmGsjgfrc@m4&qQcOwcH(cM}+q3clI{%EU zgc%@t7%7bB5&+4%hhQ}0B?{s!e_g$qaU6+EKgrQ}K4kayTQZgqjUluqk&jwC;;m&i z?@lC%Tkyl245-sTo5t1^Ra!%QbJ`!E-(!l-1ubfO1e+{%KWQ#W0727rPGG-nnSR&} zm6sDvKQd5uIVlsb+4F(;T9L&SaqfuU>17xyG^$1-MDh%}R}6Zvvo?gsFOrU~^YxrY zBk`l?jq}i>;kP<|WqH)EqmJ=77uD5h$rzxi--HD(A!q6{^cX>GvF4DOIVnKMAFVo2 zbM`XQI>D%+1=!oyexT%fDb3C-*oKXDkKQN-w(;(-lPB^Y4b1dWrd!++J7z#1FgLVsFbF_ zqHt-EznkG$_U)F6(g(wHZ@ZLdGmS^SN1@>7@D$j`wW8V$L4kIPQ&kqxqr|?93w9fU zMGMeA$GKtBr$DoW!XxTOdN4uqQ5t?$)k`JZ6Bx?7hVr-$A_eqOBC>YRJD3ZZRXkw7 zDPtyK9=7hi>{eGf7_e);>De*n>3=vI3k$%-pJI-rL9Y_zZ9n!wolR2J&b0K|<+qk7 zB0;Zryd>>g@M*%1;xXP+4d&k^W~N-trnHPSHP!tl(3jk8VFg0Qr9eK&r7h)?}dyUx?GdgTLkJ6VFr+ z)4%siJpd+zzzU8KQCaHj8OA-V)}OW}MDNF5v8t}79%Kz&_g^U{USzb!Kh-fcC@%=` zLR!!c)dc?d=ym8Ey~Zc`*c)GP7_PS$W2s=C$bdMwbhHQG=AC$F;|b-zk?kcWAuC)0 z7rxY08>vbqhM`-D#Mo(?6K>H#f-v8z$WJQMg4C@*twymbBug=1wFS?W$S%PlX3Ba|Ht8WSR1=zcK6N+=F|SVQ$eDL}AE(i(}~6@BEN zxgGl?q%`exg(}y`>w1kE7Bzz`&$Auf8`4~O?9K&202NGMK4rJKo*N?r|8e5Lk9mrZ zoyw)DfFgDA?4WdP+uk zEcA|y?F|r~b|%k=!|O_T6}Re^j8x{?5svva97gwbNUR0+kpY8c4$8;2#(ODW%_0 zM9|m3h3@!QlIn9~ALqun9)7O^@JIT+%9r8aJa!=a99Ywa{-?1yuXz;ekb*xmyB&Oe z!@gU$v}{zV-ceuu?%^m%gKoF^Le6`Kbu(+K>$#0{$w9|EaI1cf%b9 z-!4btbTP4UWr(WX!$=uwcG5Oo+Pa~X!H7O5ciC-DvzEpATCD-bZ+!G8J98saZ#&Wc zbfv#3g^<9`^e|$ zVgMTrZ!wHBGW4*%J}mFP{`7-7I-d~IsSF(?2@0tD(OF+K8!PjEZPphBXf zAHgA)y9+b~;fg0j`GI`)Tyq6>VnI%4X#@&V1%UFrrxfHB*g%9eum){C09&wwx^V*6 ztKWOQS_GgO@>j@&UCM7bpzQ7k_tvjZ{N&#hWkUn2VQ5YLi zB?PxIV8E$`x-nOadVJ$bTd{#LR~UdcaCgvIGA2_9;;Kj<0Qdnw794sE2z$un$d;-B z0#5x62FXt2K5w)61C~9I!J%Q_!C+HR{ry3%tdYRwfHrnY{kVO{!vP>LD~jW(&`@;{ zK<8snauv|&H;i^<6!6dzeN2U{Za_c$7s6_Z!dw9OpIrnUhJ@hMxU+kC}5kLeWxp=ukH~wuiZQKLWS%@upcdrrv+70Py8lVyw3ndyf5lRZ^xad~| zMmnGI%)4UL@J4KP{;5PuQ`VPVGt)P3om;Q;<0kWK}Rr)>#b5p))TQvMp- z|7Dn@p)XRzpCr+|9TNfqfYXl*fE-z{2I%`YiTZB)gMVDVKFb9_%Xx|5)FKE4S)~as z4~F9n0X)Hmk^6&G+MqGeON9Xnhsc1~1Ub1H5IRm2Zwq>A+UdPw%e6ZgYQ%r-zz6ix z`B@g)wuvQ>xB#^z!-vT@){fzdpJpb z1(RveK$CC-06->{DavY~jpSmS=~a6&r#tdiOA$SF6W!FRAoyo1pk&1NgN*5SdO5rc zYkc^fJ;&su>^YO%T_R-U(*Q0yMWN;Eid|VaBV&JMi8XLeOWpY=O*4o;n}jqo2~Ved z>4D(@XJ-9+3@jfn7D%b43IaS@eYOF}%K1dC5`s^a$FP+v6&(7o7vbyCqJZ!uj4%&G z)Ng3Os^oOc-%kSIqX3wn^$**E-@<-i%o`LC!35%$m`s9Ls1$!5ZXmxi-d;sKsCK`% zil-hZsV!}3G-}wWLc*2BiZ6@DTbcGqi)!1jhYltI<#N*YKiwk1R;xkWRG zC*>u6?t35U;e|*lxuUo`>n{HM!-s#@TwDnXeJ%v+uK(F7JIZ1?2AOt*@tkaghv*8# zGXi;^X*DN-Y9S3)yJF}%ca&;>nu2cEB=ZJ}zmd^=*Ha! z;z!sxA<5nugVx1v0y_^88P7#LXZN&)@Fg`mU5#%Jpa}RMKugdeegTw4lTFmPAmYc> z2~9=Kd4NrOoO;6cR~lMhsYY|+5*VLr?0kLPc@YD(xdw6h>o=IK(Ar;E-^S+@gcM)q z&^(T#%HwzmCv2~AG>9O`gNmQ*(Uf)1H`7N>sy|iurrSHA<4Fw?Tu)PHev3uTHFfdR zs+#EcJp8`(5GUJYcPfdt7L@(Wqj)bbFe4U(bK}o@>Pxf%2K)YmF7U%Eyt>LJSxc&? zO4u{dpJ!F)RkN7vE(O_AKr!ZR!ZBrC+C#79yb2Mut7PZW?rX3%R9m$Ud<+LG_6y8E zG?Ir1T%+vgd<9-jKv4v6diED-_xDW$Km~wz2 zs14E629KfGFoUb2Z+u&$HvW>5!Gu2~i`dq9(ZDaMc;2@>TL-qm#TZ3Mv~YE2#A}~+ zw}9?%v*3+_cfHgb6{4nx&ArPlWiBeJT$Vt`FRF^azr4$x+M}>Ge*tbTUeY2E{ycFt8 zwUFzND~|W=4W}Yey_cox$?6P>KCjPFJm-Io?w&Yaqu7Ja%3XZlTSfm6aO+OzKjSX? z%>iyKrJ5ElM-5Xa$w}>iZ?imEWRx3X9-{Xg41KnTf)lU~Z!%hA6$RP4zJqCytnQYS z^5f9Z=JeU+uWyYmfSXyTuet;x{=m+9gP-9>ct447oo{!4*=1WNz=!8lb)G)bKOmXC zr6;;rDl4bHt1TZe{LVqH4J5)i%z21D)LvU&)MVe2uqmpFE2AAMla}I^;ZH1u5}$i+ z9%0L(cziuE+F#f*;5+jssXJOlU+{2DEmAetafw{jSCW*uR5PJ>ye{B4J-m5#pZ{|b z2F~3zt>_r7!?$U3CT;pqI~UfpnMTiD!f_U7q9e9+yw8Ong5J5zw=5Ns3=DY;1fsDQ z)#pmA#7LFtbIq*B;XFZ~9c~(tHqjn;X1~~;J!@sbwv9*fYF|>{R|r7}zUIS##|mWH zcAJnS{(uHjh7ig;n1p+Aq_;S~6l?ps;#TOZyb>@kl&xuy-#F=;)>>KF_7l`6Sr~C1 zu+&tUT{0?Z$x*t=n+n7p);9q1?ycZ zL2uOL;wPj?p}0uiz2BXFq7ZLJLX|3S-Y%P6$?ji0Twm7ONZu&FLBw#obTnOZy}R*b zX2+aaVeZpIe1|L+Qzz2yotuiu_yw?`>IjKz@{M?RPJeGA#h6d)uZ=m?Fpl4k%R44J z+XFJR)+8?s_VbtX>q-P`aZ~hO^d}lW&^7N**F(=ud1b21&Pc#15+X`0zy@(g*#6*Y z>ozV*F5K!4{WhdW9cg1B3Lz{ppNkD9p5+{)Jlb5HL&U1~_FW(?Cat1#ooIY$d|}HL z>CiBX=GgKia5C@92r|4zuet*dJSuLEMVl1i zpLvvOiE62JZW|4bx=VF+1$z9j9eErb^Jz1lxpWG*;$X+*{kUAoFMvk12eC&S6F1e*SoSaN>cpx*|BAgJt^HrIW&xFlJWIqjg5V z{+KQCE;C(dm9FMG-Mo0XR1%ry?7l9M%^Z?BLT#F5343jm%Ajq#5mpR-n7njjXvyYk zl9j{5f0Y@(*6yC~X~e1=p1>+1wIBVXJ8r7|?(MIW=^G4upaHcne_@=zQ+NM7NB>}) zze(}P#0~*K>5D>b&p$?E0wlix;X^ZJd1Z?4;VtGZTqVuZ-e;q(S>YS9C0stOeq>`c@JUCAonf{W z6TO>6Fd3sM(*?|Fs*#%Pi?&nkNDHg1Z%WY;`OYNDy8s~Nz#QM>XIDNUfFv&9T zM@NPtjtfe-h7+2}3}A_dl;h$S1;Y=sK^g$vaEnXPpY8TC$86dF`asOjCNX<Fs(vM*C2jL2Vz8Z1sk|j> zxYJ-0bhNvA)2CA0Vv-CDpJKR}ro&KSk}17)S%TP@ABTGPjdRcnJSli1_L|*PR`~+1 z_n}p;PUtZ;&nap$&6$TKYf_f~Te@HENsH&c7)yyMKChMB;r1zBqKC(`NDEc~n7OlY zZSP)ax59nzq%VPM`gQ^?oBUL-t6@C4OTmLn=i`Y~rO7H9}oyAQ9WCP3iA zSMam4JK;)6Ui=GT!7ZOtB{gEGXN{#Ttu(%CoB_i^#m6^WWDgRPWFj~sS;tarxCZtu zux*AFgKAKIWcQS28B}M@b=a14Gk6!&8nbSMq;A)ChWLJ=PaOWQ?MESyH9-?5>YwHZ z5iZ^9lB%@}Zr(0}m77691oxYmF9i<4XQP$JW!F>JLv>_1!ZLAfvDcr|NX7LNMT~z4 zNoW=BMt11~1}g89E{=`f0+DgdSMYHTm$wxHN$LH+k}Rv`K(iAME%OWS7zM#!W*GO~ zA8ET=(U~HE5cErj%3Q{|{n#c^uiIjr6?N?&SY%ax_QMZV;1`OxU*PE8sw0;O1Pemh zk{a>nx$JJgTI=Zz%NltT02ojp#v9%u$;Z@EAg~&(+J`>3ZmpzdIa2CZfcWWXamJD= z?2DuA84AG`fdmC43luy*Z!IlIED96Hv~|4Y?0Q4P3=S~W$Yx>$2?44lnIK}^;6}Pj ztKe;3zHxW&jnaF5dFXpIKbPPIt-+bXwi9FVS0H)ie=3#fpiG+X!q?2!V8XEZ6dm^b zvb>%X(`Icfdf<78pNWEU9Ok#RfylBLY_7exiy@mbLgS-WCal zrbB$5sH=%d<=q>PzLO{xih!!Wuv=pQo%Lendg13qu<-$WUj~mILeq z{#gnH-~L_OAlXk~D#rYe*1m@h01K)?Zt`WI@1D}KRPQZ^5;I)XnmzT~? zfzCHm^w(2B!IM0%(-i%cJnzjB@0D&QurC6}-2s(8pnpk@e~-(5gM@z&&r4)xK?Ox1 z8u?dO^au5vjp$KiB_XSzohM^KJvQD4Ko|yQTkrTQZ%&?PXRf)DGg`FV^@ES{55wU!1xh{Fg=EC9s@3y&EYoEsD%98?H^xR{8W zssXr@P6)u;^XJMPMi`TaAVlti=5kaoY4~982yg%<8_+BO`_myh z6M#j`x(FMW8?%WnPqH7 zP{46;W}^dlLG-a9(mAmKZrR8|V4_{IhLxb9gMu%g$N^e{EBdtXxRv!PKnNGSJGZ-& z7^1s}?vp>7Kh&39HgpI8^P|%<0Kg{bF+T(N(n}VR1XNtLqwI6j+k+xQhp*o|=mWs^ zxk3S;Tw^%Hq(8yYzM{Y-0cISAk)!l=w?U0xAOkEq;DHbjco@b0vLL{9B6A!czdN58 z)LU)YAAk+u%cR~86$6MX;Q9j*zNR{NH-E@b0Hm@ETrYJ#C{~LnKu{1ImKHaF7_d(X zKs;gwUE2XD8j|A%eu}?MqC6 zPoRjd*u(%VG-7fy0F4o?lD;7;fZh<&bVu-(8sNwTF~c&^Yri65cqR}CfQ1Nm2k{3L zPgRr(lp;xO(+LG3PY=ZQ@7zNc9iWQy2MBE<#wG^j`V@%((s~3Dk(8d0QFuU<2x4yl zst{)*TvR=v0PeyyjWU#OlpteA2_^s<-y)aA34>$Gd=Su6l2r|D+Fua=QLEb;U_Gt{ zJKG%q0J3)Ch5VtxHI~8jL6JE^a)=p@L7;cQh4f76w*hD%m?R*jr0AgR21J|5Ab@ck z7v6CYaDMn-03mVeW>sBn>K(}452Vy+n*RT3s5!<;>NLB$NK*PfXTwn^xrH7PvHNL!TUSj?>7_#3jW_e2Csa5L)gfU{sDCe9Hr_gUTn3z zv#8?elxPh}Zgtsj zC%88^wbL$4qCiI+>|e6gj+{8>v$G)WsZShSYQKqM+<3h&ubKtElW#r>?3R3GM+)gQ zS+6}_y)PW2Oe^dCc0F<*{A6g;rkT{K`cA3WCOB0{UEZ{$u%$h~*IqjX9??P`)lA1& zYS}0V@q73Fei705E(kywywx}Zbyf(EM7#5t+$CQRui0fGXYY9;I8vO>!|%Cb((p41 z1pHjLK6JUY9qL8!V^CJVs58eM%I(t~7Vv~7<<{lGyNk%gz|YRj9J*BYgo z@zUnExw`eiN8kk*U^Ft~yV!NlUj3f@!{xqlB9oJnG8y}TnJW&i%9T@q=^?jZxB5{( zCQ|R#wG)^b*U2dG#2@oNFX-GZWJC4U@iu;o?4&%&CKqzJn(OamNf4Y%(fU5msB|8s8%((S_M-g0?7CI2 zJ~##KE;rYwo^okfKU86L(>*%-c}=2zjUJ_fjv=j61Up(d)d7KZs_y?7!T`>`dD)1 zHkkgk&kw>|=c;R9%nEL>VTs{x`DbN=4Zr)E6@9#{6IB{%-P;!9+s48(P=kc1;jTr*CBagpf-IGgV1gheq#VtqV=n&%>R1yXO13 zMgk^VU()@~+;+y~;UC*}8?=%ucIk>@q-R~=1{#`Bz00Rpgvo;oV@IgQ#~zx+udAbS+oYIB#b}nE(35IzO)^q5yhp zz{+vz7a(ehZd?9QSr6VN2HCy3_v@J(KWA&*JiDye+IfniuB;0gJ5WP5(>u#P=3QX+ zJn#fmQ8fZQa{g00GeBwB$fehNm_Pt9tt_+t7huojBvAos@)rQv&r~l2xG?3F^?l+| zamTLKuUC}wK4gF9MVf*0?)em@w?0hu) z1sFV?qs~QQ1ztqPk91k^ai$j^9V>}-(9FT5%&K1UUWB-nwg&%BlQc(*Jl zTSqjB>wbGXe82N4*|`YFLF6T=SUu&2>f3@d*BWTCqkNH>u{l4AaI9-uLBU9Itf%<} z@T~PEdF0&j>#xWGxNr5x303(S{$QHgnb4ZOHVx+qEBQKR%+$1kQ5a3s(c-K3^Ji6o z_Emqncs~-tqxs4Bo>s^Y(T*EcH316M@bj06hmKOP+WZy-fuU6eSygtr3SGh@*^U>C zc{exM@;a8vxO3CBHgD_7uF!YfW43QvL)vrO9dma2^VY?>GdioIb)uv|Dbd(9C5*zYLL>f!Lj@ngL5+k@}*(qgxh z6r_dwshqNtbjI`AYq;b021QZuU|it|Gt+zz^@YoiNAB`0Qu)qZ2|aNO|B zaOLdzll|D+##%+iTS}GM={92!xg=>~hT8gc)4|3eyJrV_vOl__D3idy9BDE$G5zbI z=KsBEb<9ja@2-CY>E#^( zHsO!TK``OY&cUIlzp_DIE8LbvDT6yiv?4vd9N5@uNe)ptd|9ngBMZa7Ci_|_*6^|S z_H<_}p{EPwEU_+&|IPhzr{W|B$|;lVJuSH_$Cn%2D^i&aGNz}sAO~=Hc`|g;r|!r& z{&c*`$GI+jlG=Q1c;*r9OoD%ondQbe6*swJw47f*eS?1@!#|1V%s<696)-98C!_5g zP-Q#)^x?dnm2W5x7P3&Bo7GOC1%Jt!Dq4TIf9V10f|WLnm+$%gVs43%DIjgr?{REo z@P@~$?hyVE{P1-$OP}N9Ois*}yk%LJg)ry)tfmJc1D71t_p5=IkJ;VKiU7)bse7(p zcW=#KhhF;J;I6D88{{29d{PIbMR}bJ#NOe#6j6)Kj9sykhjmMKl@rfi5zVHk19wjC z^XBjbNZF87p$t(kk$r&a{2>b5b&p6F|dD}PA z{q#0vg?_`UWK1F`-y60QlpOfr--wjwnGrjSJn8yWMp))DF;Q}MHBJRtyb zBAJZOkU@elvvvnxF8S^{5^i0#CXAujbq3_xqvxbLN?j1rElb$fb~J4~D|~+V9HjeG z?o%9FDBwQW_U6D91t(vnkdlZ<)oHp-vsjETIL{-mY~QvAJgU_!jZ2%ibAW|l0IPA_ zzjHU*%+Yw*ju!-2+uDq+He?k0fHbTM7!=wOiBq7jg|7;tM!Hv5EUb_SP07Soz%JWc zhg4W;WgW@CY9*Y!#gdsyGMPFc#tMzdN?5t@B-C*zO0JrsXsn@= z_=-P1vWe^+x~S9+i3{rP2mvlr9Smnh8u!$x;*Ru2@v{Rvnh+%i0skS-fcVodj>bs? z$`2B$%@*thmzFm@Up(<#Dtxx2@=P;Liz3AQe}MK%uFKEUZf{~FG&xuHB#DM<=FLF# z?1b!RS`k}xYxVV`F1BIJL*b{n@o0f--OYTfe1rQK9Tzr+imR@Iww^8Wyach8vfKn+ z#*cbss;xb+BV}Fbstnb3|MPB^r)tz$+%R~*GliX-m8p#cqJe!@sXI5>#?>!cHbT{q zjwvU@@?I8(?#gJXhgxk+WUAP6p`+ECV|kC}b~A6OS=xyrsdPr8MjXm0aVTOeN=G4c zv%ONvsmRoqKCDS_3|gJ7YOz_4R-(|=EklMyV*xit3(SO*mn^5SV&(J1m-jR}o$c@? zLWY(Vu9S^|G#1dWU1@%L?Ly)M;{o`YqOKZ{Rc6M?w8jw_FBeJWN!1SNDvb8nY*{$UsQ(A$T9D%`Pc)w zy8Q1WP{Z|gBluu;A3nS5SCi`6CPs$b$z{90#iLB{JVZWAiFm0Byku(9enXMfn@h-f zA@EFol$cSw&{-{y({yzKJdV4pl6uWli0(7)<#{=_wkM;&E&AZ=JQOh|MBV4dX6&4p zgy`XMmVbodbXsdY-bJ>_?`W}BZWWzS+xlg4>hFfq{?jsT=p*H-Xo3buyD1vfX4Fna zjMDVa#GAKM^HSyck+DP3EZ1KqqXxZdUkW+`cAT%^qnn>{&s;}0O^pX{4#!Nz#&}uD zQ5F%>$%?nwVW>OiC@FCJPsNPp-y~okspa;UY}Glq%{H+P=CA_0**#`k1KzSLCBREfgE{Zm9)8J65 zZyc{0CBxj)+I~M`%NeX>YJrDv6<>MIDZBz*<_v5rIJlI^X*@3}rCd4zT z_M{aS&5fcpXkq2FPW9Mh*9Tj1Tb?d8oI}XuSHEbO?*4nP8|dLhe*yP;tOJwKIB@V= zUvUi8LB&Pn_J-eHTRfwN6UKSwb3Udh%=?(DGeN9 zT4mwlnf48e$wPJ;<{|D zT2sNdf%M?sY}L2&E^8mS8a&u{(Pi6g*Mb7Uz1Y2U@rkbDE@{{gHB{Wh`?P0k6$E zl&WYMo*n|a{V^@($v!S$iiz-(bJ+b{EdP?S0bPd`&Nm8|utB!#w^C4^!d80A&Ja`c;UhI_xY3PCOqp~ysM;^1 zxfR&OYEi+BtCsX~K?bGcPGIUb8;+OrmT3#4BAb-ztDA!CNRFY4@MYo$5cL7!j&~K!J-{u0ORU}PHy5cP8b{sc?JcgdO3C% zi0~j>T|9iGtIoXg5pxmkG-8T1DzR9PWyxfH2{6~bZ;^oIVH*Is8KBMEyK9btsvE5C zOZ0n(?06w4%8p5p#-`bl#C?8;;e{>q?UVixL58ewsuTBt6n(cQzqP|&9I^m;VTka@ z`oIMG7_3gbTv!FihKpHp4Qojjqi1C zzn!|7Q(Y7lAMAX{G=BqpMoH_?_hSmnws>L23};4W!0g!WT(Yq-xyFzX$64uEK-cNk zY4RyUKEEAVt98?gxK)&LrDE{~B{ruYR$HCZMyD!5b}P47cROtrf~!0G4@<=Ayzi7( zqU-kc;xVk&TfRbmJl|Q%Y4(4tPn%-x+rIO3o1_+ScTG8k zHCC%H-)@yPk3W>le$g$NUM6O9y~;XLMq39*<-Iz}^3gQ%9qdSO(VNsYI|U0B%KA7r z(FkUBhNIJ;r5=R1Q?^hQVI_aMi*R+3gaJdC&D|#zZ@$yqOBMx!F~H+>sgr(|Otg`` zYX4Nfh3CmGyi{IBaq9X;|GfNkQh#7-wZXfeoB{jY9K-8G031=b&30$*SgiQ8z}*PR z*k;pPREWMK*~+1S$ZkBB=R6y=R!#kh2!laA<@^`9j^}2KVouC~Ux+(#aQm`<1zkER zsLzlLp|B#~fENwb7s%*W5H4Wkl>W4qoXGf6*G!;f!(M$No#@c7BT%@Pr+p49jEsqJ zxfFB>nRjQp-rZZ)l#-wO5)eaLEfc?{Q4Ez07`&58$2va++M$TZR%34McI8}6?8$>S zX9f0vb(Y-l(<1F}1b%Mp^7X#qOXYgI%{e)J$bqhZ=_rI(kt$StfJ}5meBU>Q2AJS3 z5$C}Z2YL&&y@u(MT2?vP@(8MN%!Fpx2dmp{03$?VZ1*+?^lHnU(>w zhmlI)e_}H(4h(p51Z4-TfIti~O)B1MV>cnIYJXgiYPyIR}XstZbRf}s>Y^W28+Jc^IO;O8RX=Tb4Yrn8Sf&DTCuZ>E2gG1ttZk79Atv0_Gl=^CtE z{(w5~^u`Q7Ks820RruqYUexbfoDku@=1$qujO?vqq0sm6=+6bUZ9S_n6PfA)2*=PX zA?(lw{iL?L(Q4qOtiArGvi(rR9dTw`sGZVv9Ma{}Y48oSN4;si#=Y@j`Ia!0&V0l> zDhayAcMK97*-5uSS`ll<+>xLR$g1&o@t7f|C+A<=gTLEDsmPX=MKPEt-VQRpon*0jR0hdMKE`#JARr=Ci1#vYeZLX6~XzJ(? zSlJUtHnyeERF(R&kUY0ZIyA!jW#rTRLN6%n;xG|Rb^3`>PuF*Kx=VQI&&KIgsl6N8 zFzMiIi^%4lVPX%05p5HM>9&rhXH1mcv#1|k% zlHD;9+QTr+T6-aEW_JcR6&lz$-@9SwO~cSsS~Cjm_Km7vL*%h77|n-tBS;CyjTLfY z-2Ej#r^0;zkk6X%&+k56>XcGA_H@AU$6k!Fw#T|h)?qCU>L(HH`0PlHE0TM|dwuPW1!xWge0A4p>0MNx-QC@NtX ztf6dzNU)UppTmuJM8S|Ck|ncPDTg%%3*wo?L(m5IB8vKTo436lruiQwPjPA9JW`;vt7ERK^Mbc@^&i%>~uPr8iUcgtCW8~xAHizdZ zV|y@@d&L-x;CiRu_TlI9j#Y^v3OS>Fx@^D?LtZF!G}`;`PL_9_56nkAMdZ?O z5-1oTv2m?q;p%v++*MkUFdgm;mIT{P(vVz6Cq0eT?c3I_nk(59#*xq4p$e z$VYi2*r>Mxi=S+Y=NK5a+!irq_=Cbo3-JS7?SzJuK(?&xc;p4|jlO4t%w{!x4<&Gv z;>qOK4VSM>MOda$&m6}193x6|A zkF)z_Nd{etbECrq#X=p2>bv4mFKl9X%|0KAbf1|WISj!9vmd7gZ?s)+v|Lmx5zow` zB8Qkt3r|tx=j)5|9m!7(?fvpf6u#OY@$e?M6ieWj)uTg9MMGaQrLv|VfxdF}8g+ubhvL^v_D<@i zG=oGI^C3mAIVO}XJFzBlte&R~qm$>%JSj0U#k}E}^3_fLLn5xxQ-gkCbWm@`a>?j(v9VMG9TWzl?Mg&QUrO#2tb%VGQlQVBS7cI%|x5q1xR}rnPr6)7W zzzFn=Aoc9m_e%-c#np;v^0lFj4@`S{K10B7tW~4lr}%S!5fRvO6;)-yXR>T=&*kuX zt||{ZhdnGyA2BDgzr-3tNS(TU8fo-HY4}xBeClEwM8H3ctCPQ!2_}+IS;@J(JZ(2p zXZCs6<$K+)pSgi^mB&0RK9oyCB+=VhYz(4a&?e+68?HKdL!Kg9O|A|oEzu?Yhs)+> zpwxa4wfPR_gm0qm$=4H*Xp6aCCQQgpgbv?BS3>LC6+O1q4u|VlrV3irX38U0-2o*cPELp4eL$(W_U0MGgS z4eNb^cdids`j>qo1diB52`t%Y}A~nioY5pRdN+*Lgm(lb0(^p`ov0taJj#|Y6mRG zS{2iG?5Y=+8P_nfeo2v}ZeizcnBanmQq=%(BChzYL`uGo&ZaAPPa$VJgR4(CX+BHp zY5K9$TP@zd7N{FZu7h9#laZ)=hgMoGYpxPvunbF5tZqA2esDZkN{v|o-rlohH$LNX z2^zpaz<*%S4JAHl6}O@wSd+&ZXd3jhe)f!9TFGXA<0Zu-+QNiSV+Y6cu8t}|h=<3U zJL3>gOPXugtO2X6o%r!qKMXlBmB~4n_H7YwvsnI7(oww)dA*mf$mSy9DKDz=?eY}=?GS>iqHoX5 zv*y5@Ypl8U&Di5vV-Cs3&?Xw>aGiuO%J|_8QWp6cTF=hs#bb$0wcTo-M91U#I?&pR z&Q0vb^|-LA!Aa2D(4JE)h6t_F{-Nis{K*XH8mZLTzZN@nA}3Vt2Mm^5+qZ-^ks#LD z$98bh5U;XpOFZuHGo#m=_5ZT?^~rfn%LqFi{xTw%QDub7vKjgqe8DU*k<(^3oZ}NE8)jGf7cb~iUT)}er?@iA3>}M-g{wsN?|ClHJ>$GQ9CN}Q> z$&;A>@73Cv|La;C^M9zdG5lo?h<$fTGtN@19PYHR4N{h&M>1@|CPa<5CTShXzFUwLed zHl{PWaH}wRwdr4@yRHtCf$(6vAP{xt-O~CSd`{?9 z>pKrkIM>&l=m@T?YmC>cA!2^4F_-JiXpeh>oa3m2O~}Ls*N51ILwdVN@0AcHj9jHH zgYLcZrYy2KO(_C2ARTWWrgndxe*H4c9>t8%y1LZ_tVOy|_|Q}_=J+*$(}j<;i#hmR zvA7b-g~?Mv4&rWt|5`s{(U z_g#T#IzY4=i%^iX1Nob`8P@D6$dEQ@*pcQ6zCQ(1u;YwQxv+moHb~;GtR$(*a|W!1 zv@RQyi{f!`P=VB}f8^(BE#%`NPYD?CV5vz?VSFtR&Pr!vwz^_(@LJQdNxx9g8ag+- zJ;~&m9}_y}M>9AggWB5YUer*!*f_zX-tk*wR6tLA3~=2c;|335QKXHW!yxUR!uM%&r4R3tSl0k= zRNAZKC&c`H&AxD_uJ6;(ZTW(rEQdc(@GV8RYJ8Vmlel*%@!1YOCe!I^%pwtOL_$$1_6a8STicfX+ z_(dT>pjHl#Bdk1`Nad0HX62z)dQM+~+{)fvQO6;8MZ0{Jb)1{CXHyyAfo-~eN$9z< zQK=CBHS%k!rridF!Mn zeHlRqg8kR}$nFoEOU^Q*!Y}_8kVYy0jjiN}f zcDju`4=URI)CPQmYJW)j^|(6g$4YjOW|bx5(d4nl>t4eIs0xPnm7jeJ+G~W<4vsj; zvqApJh!vY%Px{U1CW4%~uS!%l$~I3GEub?@*KE&E9xgI@jwMJeM4viTw>CxXk?~kcLF}VTRRGscS)n5Eg~oU0;ztJZsc6O?ysKB2rT@1 zDDOqI>Ww=Qyl14&=Iz4}12^nNKUaQ~fFp`Kwc%-w0qF~zGg)VAa~qSZ#7$oY1W6{qv!z#h8)9 zBfb~Uu33rjPAcIxzLGPdJ)eYb7uG|feSvKdU(KxQk{4Py4>^O z2T745_NB0=joGlSbsqECpG*t$d{Sx+Ow=Rbsc|1k0ZzbmBG+$jd?JE9%)LbGhN5Y6 zdx-WyMb?pspKg((2=_mP%r<8DL-=j*qZw|*cVW1c2|LZ{JJ#zUD#zi%n??0-n$w}28r9! zt_KFD{o)54(~C6Zu3U~P^(w%+<`=QXp)Qg%2dha=52$fBYjIbapND*yiK>19%5FqT20nUqu=413zM&}Q7szV@XM6}>|>_C!jJ5(ECLEu z?rwlgJ+93nBHOFUo01yOnu=m8aXq-d7!UFTozl}e(#UlAW&Po%Zlg>}Fq9GM7AW~1 zh39RcYGYIirfi{k59!Mkvl}?z&6^?MaBsh%cy!)EvaMcL{&ui(&6 zp5G`x2vx@zBfbQ1HAVjooiH&VfN?db9^nprw`w$j#@(1d)Z21URr7pBccNH_cn}PSd;M2Zh9XA^W*|Qke)y(02J4sjjXDXF7`#1*dx6D z;7Hm?#PG@~@O268Qr-)TWLK?Ek!??yeW~Meu#m4P-u7&dGNDY)uG6>@yl|0rcf059 zNmAmLC)JmU-pFC{CqJrb6=TNLFH#z3rCD>A3zi|ZjxJKEROtX~;gK2UD!%~_OO<99 z6tIE`T`Jnas^-0ME*NX}+({fZt6=olg@Chv2F6ZNrbaFK8z8e?SFQg zIc5KLnqK0iS(H$6rl7H(P$bV|Q^v->ooV%Z8)@B+V)E2_V=*7GKQQ@G!{(_a?SP)e zzMMe><;7y9%RfmXr=GH4LcT7^nW$*TFCy#(v{93g1399Cr?#bHXqA6s%{53D1GR>kpQ81@m2D@S%s<&P7$z%ZpGD7^284}nN4WHV`&K#X-`xd z7StKZ;`oaXbNz7=;Fw>!qWwuq_$qTl#Y># z*&)~qTe0fcxjs+kje6nf<3{XYTx`eIZz1S}C+?{Q*9ItHPDLmqyvRQl`iSlMVu+} znUeF@u%OnVZxW!N8&lJL4CCCe*F>@y<@5g-6dKh^K0kpc&1GBmc9AXeZABEMI!sgD zlh`Fn`gD+_Q}LUn$>k#oE?boGx}jxl(UY$Q0R*L}R*g?#LB5Y?nBudj^p#82*`xaq z+>g2z?vg5?$B~Hq_W8c0+F~)fW?yaxP2cx&%F3n-DBYzr4N-&f0{$@>;t+`>!DxQ_puU{q%B1jG1s!X7*D{dpRarpuz z;u`M0;jVBD7*NyE9!CwZOjm;csUznhO;nH^GSkeNnV1bJ#V&nZCqmjCw6(cHN&es? zvf-_v#DG8UIAQ7*dB49X?-vhm5VR*xzT4g^Kn}n z&f}jrOULQznuE}8g*tKJYzw?qP}InhQj_t@o6j)k4s zJ3wr6jQ6kPzFqL3LQHV=+^|xIxXVESd;LPLsA#`$jY&8C(i~d@lVj_0gJ3JQi-v!T zWP2cP54!Z343tfw%MQ!nz)B$wJB?i!iS9zAU=s|pbp2Tkp|s$SHr-tffr}m}lt{lV zZ5`e3?xJuHAGSZMn)}mjW61VBWLd~=JBM+4TY*M0*O_H(tV^oMFnE@SR2 z&jeN2NG3NqzZ}~02RAfWN59iWvv%0Vz3R=?dEc!MqN|T;4ZwTw(m183$9pxW36=0F z@<*mmpR-=^X7S|Xr7y(PEaOKOzwawjZt=aqY)az?=n6_6^MA^5|IY3Ht_8Aj|647P z`Tt%mkomu^1v3AKS|Ia(Qw!YJk%^(_wApy9<~jxSqCZh8149BFt;T>t4fUkK8{5a} znBpUxLD*y6J{B}S9ov`9Jur0GJ^oZ7_d%mpCQ~(xV03ypoc&k}dTESnTNc^yd0Cz9 zd^>*7Q`i~pX#TJ{zuffkVYwM~S?y2RH7$J3w-vn@wDoO$ds7HYzEbdhdnn}GC#>^u zob-K(S&bobBDH^cc)WD=@O~HCkc#(s7g`T?=f5E9k$5@tF*lG58Li%Kwu^A_uwQ&& z&|72uY2xOEovy1L==<@IQu1i4Ai%yJ3+=sZtA@+DHiekcN~{Zp`X(ElE2k6ZdVQd@ zz6eR-HP;~UQL}#RwsAq?rNH>UYw1Sz+g+i(&h>d^%CS;am~8vKU2S9}Aq?WC#w(Ch z;ecGJ@y~{(ziX6^?@VvDxL4{%&S)c19=LMhdxwNLkF3;tUi)3`){}hD`>0u3$cGxr zjD#G;TIknC+{1O*T29)E3?l#Q!SQjHNw>Fosd#)&{KS`g8h(6d_ZYpCKJSm&P)?SM z5~t3XrzrG>7xLZui;kt8L3IJ+!9cs0aUD}QSQ5SuRQ{*;%Z?8pmwqjxy91jL@tM(( z-XpS%mFhV>%rp#c6W+H)*(iKh>aneHUm`*{wpkc_N^1dp0?b`*Nq@BEWbQDe)8tou zjWlCmu1e?cwfZHh+OsU*#k>8yuZBr8z#q9(#agSj) z_TOL6i3*?w4=N^0p=}-t!-#AK&%WkkKrBB2P(vB`GyK+k@Zx5x}%fLwIEi(sAeL499_HGjOdy0tv5 zz8Gmqa)L+nZH`OM25F5ymhu(z>1i$BeUQn`znzboecgY^QLyP=SinND=A`VF<>0JT z|7CF@4`I)iNj(HiG7N})Iml@7vGyTry_Q=~Dg&O;2n=5a$8pi@pA1;s#F53a#moL? zQ`MPW$>NG%tBMQ~DSVegl|V}qlmMO<>2FIHQ;zbbnV_vm#Y%a^v(okU5mNMoQJ`UY_ILSSN@+mX*Eyb>Cvg8YCz z!J*Lq0h?+7W}51UOW|h#hC{J}`!AIS6!jxcFN9I*k!k8OckipJ2~Owd6Z=%N(CMsm z$?0qO!-7u+k*YkYT5Dgb{=mc$Phh4C?DNO2^QV3d_fPapGQcfV7X4w}RfCB08?={0 ze+dc!oHZ?H4`J2M0FTKE{QsGLC;x9bm3<(t@7+Q_73#@m6ehFPnu>Sz?0^6=5a9Nyeh#yk= zseb_uj(2Y)e>B+x@?YMcRy?L>sK19E|4aJYP|W^M+rQil#5eE6^#Z3C_3zkmyb=F7 zbhiC>=^uv1|G(SV(dov~=?-4VJErZ@ODDj~NXKipi;3wO5ZQ4-un30ksqwnKlpetf*mHjt}f$=QMFbL=pKOnk52_apRKFwjtNbltP9~wp8;8y zq#tNBUMdO{MPHK$K2))vKXtDEE}+=&2Q||LO5ijTL_x3c1bXaH_`}b;Rgoe$T(5q^mR87wx8nu) z+MYDdziMWT(UdLkS;(r&WjlgZ{>5T#>ra!rs3df#88y;R6RDb)HetT|QUT&*WeN zMUeHwM|C>pk+n04M-XHIfdxSWVFN#6F-HR-17RY@Lva{4Gj0N#GRYJif(oigi)Dw= z42(rYcSy;b1{xy@Ph7Lcgs-}B_nLrA-85Npx`{!#p4q7+jvY|E6(b*R47%!lk|;|S z8zymG>fWN8KWf8VuebRpI5aCCgpOi2WIPOdl-wUzyTb~7ttqT36Yew8)HW@QYGyhe znT1qVp1RWVhU&k-{Z&7{UXwHGwGNzA&uNGc*^5Lns_4k@Wu9zahVNvERvkmoom6p)4&E(>w5&Eh zWpBKAkfZ69oN6g18|;#sFu&9m(}@gOj?@KUCYl5}OKCz$#w3}LHL{v$g4&PVP!EWi zXbOgp+`#@dKvDXdj5=dtQcEye&j3_rz_U{0k<6F#TKRwPO+^72d7R)irt|RhbsUeXSXsE8+WRI5S|DS+ z*{G|&I4#D-i!@F&?M>-mD>)o_3}l&CTzH%D>AVLFAbra;ujsf)5sxAe)Sg)aoid6# z_g7Duce(h11S?KKnUwe>bOS5BNZe#V5;1f72W4s zSzj>ri+fnKgqvZVC`ti8y4^dhGJD)7rTW;;_xZY%KtPsgIYD7|SL#{xEl+#MXL&UZ z#k3Av#B-zLhVq)miJg{EAR^}v@Aw?eDZ!6${>^0{Ubq#2unA6lJm3dX8nCZ%Hd?AS z$HhwNu#kVitAlEXDU74qRij^@O~>03Z5pm+;-YjxxzTCR!*ti;RCH}sn!iY@fgC+G z4yBDwa9)^d<;qPwe1fG2RCd+6V*U~v8}`e^KvOO_kp_K!Y=`^kYZX`_O=nGuyxfFf zhKGf6#3Pk zBxg!4d!7hF3lh%PL||E!5rwO+R|xsQIOC0%OuXQ!=x*#|FJ&7!IG#1Edip$2d9EB7 z9R*Fv7?P&P&||EN*xrBPa%9%l4dv77+EM;Kzhbxu6=9i+p2BNCmMhNZU+Y~OBz3zY zoRyz&=01Om=OlaME|$6+Utjl`t#j&d4NyxZDv4hwd~u*{6G%)kEqe01zuSrGJgh1> zD|c`@b$3G_{zc_8)&=VcK6t=B2R?#^n7v32ALq5Js4&#XQ13mVZ_V~AngEM}#>DwS zgT9bAR+VKCDu(ZZsu1Nj2iA=f6qhyyAb-K)@Dm<g~1 z{QE!qSm0q!{V+w1F>*_n;|=R0ul*DO%?8if=_ap|8;y+Wg7i5_iaqN$FHfxkw8ZTN zXs-9H5UtXmU%bRsl;nM;7b>#A5qt#Ev@HL&!2SsfjD9P|`uLku_Q%VQa|?5OpCr$@e6DsvVPPF>+;nw?^8)FrOVklC&k=YUx=o zN?5XAVE%ToZ0`{9135z!{x#(*T$`g{%eV+7VPH~BVYOj)XfUm1QMY_3p^*M|sa-He z&4Q8RV9QHl9%Ww0V9c_>0T(dlTw*A;J|@J!t`LTTz~V&|aDbtp2!grf_smOwK?In- zyMM@`poq-L@O^%NsTu(Jg1~TiQB{8`1{6pzC0Sq@b|{!X6-uZfm=f?W4G?7>UesR@ z1Loi0{{PwjcKC!!K^O>OZQxhPPk;b3i1_Lg2_Gc*IV7e)0rN+J`5e#vQ-K2G|Ccim z*QJ2@+38+UCIgu!w?!FCQ1 z%hFe()R=SJ^@@QH(pM_+`AdSu`pbaCfbzGw#6^h`9;{Xy_#3Xz!M`hC-b!gQ#@=7! zuPxM|K!FGI|7#KGST>(eFW{&A34gEQCpA|8Px)U?pF6HG7shz<_e+HKuMx|7{$~Ws zsut;&euDoygui3^jOO1W{YPw{ZZ1lXFOMR$ZaGkMmH_L=jp^me=Og zKns5~lZNdpfw)VV-JyxX68m}wbj>i%NyWI0)rMTkbuj(ef!$HSN->Q+tEL<&rqOZv z(?m%?g@?5~QrfTZ6I_#X+Jq5Wh}3QJeUYMCCQD9iU33c$c-Mg`f_p+rQ+{M2i-#)uRJSmlTm7Q zdo*lHdwbKs@z042LM-6@hfw}$VKB!u(?Huv1F2}UnCLo!u-Kt0Dyn_JD7Kr<~^=T8E**z%AgN^DSwAGa9> zY~~Ln2>>SMElyIfiK`k}l%VNj6F`aCJ%Sc8zwDrDlogIY z;X(&_Va2UeY6<}?FiYuFUMLEj%!b%C$5N%B29oGnNcnvfH^)6FeD=BB%{C;(LT9s2 zw^@!l>lFi|B8#Xyem^Dj(3h>{n@{92rqj{nDi88y*y_DwgU-RJO1VC>@_al1c_;L6I}Ghy{M1 zCA5YTRxmUREzfWo2A)qt-CAo`Qlb)zM#!P*ql`5Yf5)T0fq@ahjtp@#|AMGA%7L|+ zD6RFCrMazX6U>vj=8b)6c}gSfs0U0Cuav3y zsoQw2=82NBL7)R*k&rlJT8LlRq+`f?K)~@QJ;458C##))DxS%DKnlvTjel7?Adsuh zxgNUCb)an%ARB1t6y2_31!4w~MHR z22feH#c)2t5jPUwk&XM0<8_6Yujx~kX(d8(z#SI%*PCZobTC|>A8!_?1tiwA-@m>we87#>&awY`dE^+>xvd6~xJSEGdW^n%gwcCD-7Hjtiy8K! zGkEwsn5O6VOw25gA-^=??^MDL($n&c;ixyw)Bo4 zF#(@uJ2)ZQ^D{TPe+Mp0imj2QkEoXq+Z6*nI5JB^klhc-+M#~`RJfTSG}@3WY8VZ3 zS2BPU_*sQn*=e)MnWLUBv(Ra2Ux}u}*2uS();w=Iy%zoai0iltnv=GQN;^4r4kpRg z2p+5AxEh$5x>^)R=GY2?Hg1jVU}_@~ufy87xSTb1?#80S(zsX~-%OzYmr65d?A#nJ zD{U1Lg%5ASvWYFk# zoKYILe&`~KKNjnzs(LA^h(not>xx|AO!c8$an&)FdMOt6)c9kzxd>5&)J#W3-VQ7UVi zta?u-WChMaWDP?wH+)5m!Gs-JRuDJsUoW-%bBYFxBY$rz%0Y!B^`~~01MphuN^JI= zj^MMoGqz=04%HdbWP0V9iykO|GaA-?37kOifxeas^vwzz-g-3p!ubRboZdnflt+Ab zrX~;UWQ#Yx!WPW$z7(23c$ciRg!g3MY$4 zC~M#cw6!rE6Ep6sf|YTFpJ?DmSX3nBXApl~F=NgDa{KZ5yLu|e!%Y}=8s4h5F^;VH zTw^{ea+{3jZ@nX5oBowLC(Gv^nE!QEE4D7Zcf|Kz<_#Drt!M*cxmEU4x+nD&>zYze zjmn%nQwPhUc(dNq@qg1cVl)I^_O^lhuE-qk07Wbx@ z8s0;T7;xUcYtv+~vtK#TFWm|^sT_+ni-lnd?e{o6x5H3{7h{g(QXMAsBov8TP}{T& zR$&bnf1hmTF*|$K2J&DW%Iqu^uyurdw;%b)Ojf}tnoh<$#$`^8|j!oYxl9APxb z+dXwM%FFfJq%XNtW6sCp!*1iIWccc;@1~E(vw)&YM(uwrJN}DW%fZdT^*_{Fmj8Ry zT9*HsTFdeusI@Hr4YhV2Z#bH^@w%$|sNNsf(To!aGiA=K4}_)!-_zg2TJ^uq1TsQ@ z_>_ffVP>qS_jC6lFO<$#B>k$DEHmSK^LctK+|rve4Ub6ccz1d_<(w5jK5<97+MN4% zdmio1IAjvT%o*Q{@^(pBxVpYCIX<+V`GU7rZ+ltcc1W+d?&tXIuG>ovg&FVT&ex=$ zlS17B0#fap)6sq^RepSbNEGwz;K3qc-N47UTyRseUyA7+MfqemVkr^B$QG@8teLaT zO*oD_U@QsXr!AQTxoTXzL~dN{MJB*A71AxZ2O`#@!sDIDO0G$P_oQkvOE`;_T{)7A z=w)RqC~TLesBqCd>*QRY2LB*S)jFUdyq5_<&b2Ns#e8jL8^f9=gAk*GXd+2>93UKR zl_5v&>QW$#j9#0yShE4;%j}K#9S0@R-pEQ(U!&)xQ zwCUNs{{p*}xwTC=h~YR9)43DVnc>8~&S=ij^(EM0p0tN!ielc@q_6|c6a)t|R}5=G zYaIbU1$;DB$R_MhQH2T2Sk@%IB6W2&7=nRpgDs`-7sq(|pw6*xE1Aa=`nG&W&S?w+ zgD#NbN@ZlxdK%AN|1lQLV`>9XI6+uKFd(%{>O!HM?zpN=k|_7Pz|?&nQv@XGfA(ue zmwrXJcjX(GkWjI5h8hX=R>mfw%|s*Bhb0uqIgrh~S_UnV?T-Im;x9LwOC5!ZAS!Qx z4o#;69`2a0ok$dFrlXkOz0Meq&KiDbB56xK(w z@yC(l$)-G)99&4v_;n=!1^Q}a1I6Xdxj@LD++4CW!Bqo8}H}2t((WV6c#v zi!@|e^G=90CDJ7J=u%-XZlrbX$%efZ6`ZL<=IAHe+zq(K46Wx%ShL+9Ut+dJS?!YU z`RtIV8gYF@w<7c0(k1gmaJQv6k8v3o0~Ofn@K}1}>IU_J%!Am94uKTrvdKEmvm_il z@t)m=UI#Zo#-~Cg^ zOwIl2PeN;{?ux(BjSrb`CQTc`4=o&_AyE`_v@rzeXn&^jJ9DB+6v>MxV~FmQdZ?;I`~r63q`-!K&kjFhXBMAxTXL-yl zu43(@v(5NBAekj-TPzJ6#+KBw*+gzv5!DC$64*Kfbf{AGp$%)-GH%1n|yYgFGRMY zNi*A`tp!ppa?wAfsvKboOX6}4tDyG!y)6zib=_!kylSAHGXk${X8wutq zUkO$r1>0o?;<^Dc#iS-^r4GNEZ@EfrF&*S#1h}F?Sf*m{t69^vI*;U>P?2MEuWEra z_(H;)eBEA-TDrEbMMjaVzH{lGkYU+a14GgW4yA(c)!_MOH_MynA?6fpg7Mi?Ws7LCB}xUz<_<321J!imxU=YHZ7K zd~HGUwB7Kn=?PU{Lk=Re>&tun*!;7hwWjf0_}%L$7NPFd2IvqN-dvUUQe=4>CIKKg zN7ODVy0Dlj>;5M0lKkkw+aP}2qknSoioBB>STxv!`6tfZ$uT5Ig1-~>$=rhFTYcin zci)pr&BkT^W{njj&jx-+5B-vFec3WL$X~-NX`v^)>Cd4R+G~fbL-4?Cg^H*)Bc-f< z@&<2bOLuOm7`Odo%^0YO_49@^QV~gAMmarQct8(I1l#16vq7kE-Q1f|ta`GH0kWE( zIAA2A!z_y}D0|=^yO@nL1mZAPoNG49(=o%bqY`DD#!(}>Qj6J^>QU{{7d15ArH!-j zx0>vp)$tj zu-kNP!z{6Uvp<<1b?cAxwSK}FTY}=SEfiSsG^aIerdYYanzo04XLpv8-RA-`R^OuD zm;99qFRtpnz(^DDruTb+*q|F0FAp3miUnKp3tq8EWY>yj46glNi_&=47y;VqI9*q~ z$~Tb!DcNonAkEW8`aUTA;R#R86v;5MyFl)(|F2N>wD5UCF^eT@8*ghBV*xMSFW(&*3rP2Xl7!**X- z-gd8UIiVXh#KCf$#J&lxs(>?$0bv`Pgl%@7Si&I8vG!^t4X`pR$btrC!}r*4b=2e4A}CiGMn)d<7U7XAZd z;YJH7bO}8y)Mww|=nJQW{{iEL`Wrgp_S6lr!tnn9wuAupMqnJs{fr?7 z2B%Dfv^Z}+Z=Gabnycl(x(P-?eyrqlF_1o&R~&PzM>av2^%9HB?e+D1YEW(F5e*u3 zWEL+(A%x7@XNS2dVj@yMOd~i5eLD!XqB}@ZRQM|_RJW{WI7@*2*CgY;`Z)ZmM=z2c z$YD^+%ph#CHlP7+DJEG3kXb)Cp(Y>*lPq;2V-iJ~UJ^lLo2&ttr*7KHVs3gC+~pG&Ut=WbmE=7>DzR%xQbX zR#=f$7EMwGGHpOVr5_>1Cq+fp-EI4z7`+^6)lUi4)uCRbFkr=i=@S7g!?`5Ye)Qvi z^1mbGuKGG|l|wLvbeOrQ&YsIg=Z{o|!blU@sefDNDD8d*8=lul?DQ1sfo4cB z+jImWz>xI5-}z2AvRMf&q=nyXtD6^%CeIB`;QV8 zQv~-F2j3Jz^(CT{S|Kmt81TG!!h!*L-IFxe)>L0VhV^tS@vY<)bNSF;i=0Lcza#j1 zPsbUw7IxuoMfh6y_&Odj!g|J^;@m6_*Zl2yY;v=NztD3Sd6Z+-`HZLg6N;$SjJnp2 z@GIxHx&NZE{PXs7?qb)lq-I9-;YUguN0SPgV!X!CMHlqObS>^}>|O59Cj*hivtcoR zIbe&qX>Z{fYC_q!N8!q?(L6fYJIc?~5|ZLQCc*F$iDIk$(7noZ1+F`1!1?vY8Vf=) z21zRy*q*;xb1J<{fON>IDO?IZql0C|J{w2U202U2{?opEjbOuM4i@$E8?{hEZU1S8 zipRkHgR=)*?=-LHz{TBDbaz^Z*`8xXp4}6X3tgG75<5q z<0_UNa|bhZ8@Q;dKfL@H-`7^Z)^u)Pwyi3It-{fNNfRqf<$Yu*soVgMbWU*Gtg6t| z^V2;2b`cbA^nq-BdDC^Vx3GL@O2){ap-9x>QR@`C!9}}|)}L7~+4^f(L9nph$6l!^ zn`5)iN!iELgAdfxl`H*bRjS^>PqJP{44F=hahEmv6(7WCr^VjK+8ee=M-ekcv=4M^ zzI&Hm2UceNy1Ah{dk=OWj^CI|Hsh+D)bPivE)?4Wi%Q3vtZT~M@X z`O_TS?P_>64xNq-ryIDLx0RpHGv1I>G~sgL>O+_&5ZRpSTmz#!{;SK&ftNYS7^LkF zGY8680bhx!&fbsB-j7ask7x92p=*$0>WZWM=ud^!@)HYnbJ~W(~9a2i7plf5RH?*OG}K z<3#IttRAY*v&8VA#DJW?XTo`4I)x${+gRYh@x-1ae0}63xsxqQ)YKt#S(jCJF2;cC zzm15cLt=XSb2CVGH5ib&Mpwcp(EfTgepiice}(mtu`U0HNb<^d_p`-%LM3_N)Hhu5zCD;#g;wXJKS89ut%jU6LfrhSjV zMyF?Ud#9JpQYt3QzGb;%8+Gu<)$LtboH{jOE~jTh8zCR5!htzrTpc#Nxp#g0Y6hfdobYB= z&484TkL%3Oxar)a)?psp(n<7ZYNbV6^8mp*edcY>Ie%iI*mR*Fv+x{Td(7mJ2pND( z!4>1UA&2<)1rY6E*v+fPZGj>g#-7F-63GpSaN)IC((`icCMZTLG!d)G>b5q}$yae3 z$dUcKljm242dw5QHE|v0Fg)(EBG>e&peRa#)&PT$0ST7cqJq3`duA6cf&rp$!MU)# z%(bXXSlx2Yz|ok|_fx*>xrU#fIC$@OCIGkyy|uu|t{SlVM0d$0fK8BOr->Xi>s1n= zhPe=)Ivixxf$^ZzLYW{D#X^K}L6fK2qAH1&RI1ZqO49h%hTV8wb74`q{$2)Q843f{ zlBgxkmyLz8g`*Lf${+Kod)CD7sN}ZEiLvr5C=rhSM-YKHvmi`5E=%X~mz^$$l1n;V zLlHhwqci-oMx4gI%5@h~Me!DF;?v)`zL03(6STG61Ua%r&X#{RiK+a2#4o7P>Hdy$ zQKIlB35l;jz-*BlgkO^&8?ujI*l@AEYGgi)vsmC)VrJ`aG1_7f8W8C+a7%jvmcII? z(veoi@s(NL{D0mR9kX+l4$Q3rSAR!#s3qW*`$`I0J6;O~CQcwd2~pjpzkbE;=d8_^ zMRk~S97PFe?B1ra6(+8WZz$>ZqBpy#&UUjzKO>*;2d880{oNd{ z1Xpl{XGjp*CHXYb=MM4VO+V9~|0Sz_NJV!>j68BnKT=henuD;DarWJ0il0$Q$3r;bUj=NC)V9{DbY-Vy`wK?D|7;xH zp{sTo>l({Cn&|oUZ6=CQxX8diVm4@AX^Iob2%vEOh=Q&y2_%er|YzmH)4J8g} z;XPk1(wgvGVQ#~NGr_%u^TNd4D+w{ryUE_+E+~O6Hw%oNiY_y|zdmu7yEIR{*I?8t zY5nD(*U`Oz!^_!!Ltes+P9WeBg@DE!BvLR)6}2l&j^{(WiX}h1%zVrz87*^o^(Ah# zzb&O~1lErobQ{A7j3F4XmyE_KykfAA*Ddmm$+mD`Ce|XCKEM*i8gs9!5CbDs!9h~A zu^`ZIj+fenH(s6&2Ww`c8&fn3l6JRP6w76KU8-o3C#&kAE@ZTo6^?0Gcj9Wse9faJOY7Zb^WPF)^fA4z&Prw1VCaFyp;q(QSPJAgY zX;)}p(l)XkwEMzX!l$x1>F9f$mnl@5#V!D6)^JjHWyCxuU#qKaRRqIfG^CTIhTZB> zbDB$kU!%47BgKSk%%yfHh~(U4sZ@ic$k|QX({}UDwtXNVt*stl) z(>PQFC~*7600xD!OiYw(@iVDP^;v`NPS9bQF*HC|ZZJk7t*%;(d?o;%*j9b0oeFQ$ zz9qiM=i7rpxfSjc8LCVg+__fVfQ~x+fKu!rJtn^_Jlqhw@SYxdx<4RZ$gBpL+?Dam z#i25NqxaGN-B)TuLx@O9AN9)b1YC*=sw-sxmZNuP84AF3??w@@_;r8dNMvJ5HXl7@ z!`4cjEUoZvZBbZdre>3j8D{D9&oR=1Rje3ui?Zszp`}1_-{G!wm(pt9&hD{pjya4o zt1!cNM`_9DyNCf9g*W&voJ`tt7Qd2;8R?W!fPy2UM1oRf6Ptm z<9o5g5$IbrTC$~aEEjIJFTG`;NtEGETt=O9p_!%hdGnqz7tMJWvN zkT?t7RB|`oaMVXCf_&yg0>uV7QpA>L6TikpJr*+(M=;3*Nj3Nw_^gncCFe&9hIk~A z4W>dwI1Sx}m9sGu(@RQ8G45a_P&fgz_cqH~sm)a5hN!vj-AQ!i5_dg?6HL#^;r9AY zX!7cNy~HmaMQU8q;6;!?B^#u{0#dO*vBA1~rr;t{j!f3zy{gnfZ-^&jh9?Lw>hi4s zn6>Eh?ao0~ZmaIPY69Y8{4}KxcKbvV2^u<1MCCztF}XjItN8Y-ExOG`g4A%oV;|jE zi;?GyR%qmwy?Dh^Je@Lpk>)TH=A_W;2a(H7VV%w7J(A>+Um;qK$MTr2!S}4^GgnD? zTLUlA7Q7$_CniV@EUjRkV$h2@%BrXXHgyFL* z685NXeS&^rke(U-s=%my#IKIgKgxSbi=)bev(`iP|55i%QJOVdwy8?nwpnT0wr$(a zN~_YgZC2X0ZQIt(`cL=0eaAQt=e1wvm=UoecITCtwWM5vTzEXz13>bzOv`A_KZIR-Lq0vr%^<0YVQ;z{M8jAUxnR0;jL!C`g0#w#; z!I=t1k$=94ma@HEmO=XkGwG1R^6+?aBFgInAnK%QsRW-o^WY&junOsGci47=JdE&2 zM3y4fm?9}1Rc;q772a4im{UY){{Yz-H{j*x7)pWl18{v_QV8jCU<%Rc@!1Jdh7MlE z7oA0;a%z*^niqo+#}jF}#bwwV9$sf#Q3gMPvcE@BOQo>jel5JJjBJ|D2suFSWJ|R? zV!-*M36C3#eg+4hspXJ9Bt(+w!0Bf97xyyN4ZnRh=kDe}eojs++Qv}+Ee6*rQ3VC@ zY%YBO(U=$n0^(}|GYA<5zj_cHeG*%%M$~d*klsg_Oa;sqp=&+SfBryUzVjNp+$MSg?fs!axx2d)E>eR8{b^Jqj!; zjYm$+ZFh;?Ni}!&DdQ~fj}4L&&Em)>@PUwrOu}6C%LTeiYxT$I3y5OmNj2lu!F?f`Fsx_nl;& zu|$MxMOQiFjsE9@! z5%GsbhVcOsF`t*`WiQR7zj#5hPDFOn9#weK4YTURMTg$tU;*%ac`!Ubug_2ixGcj9 z;k~%nWz#ycXetQE&G^F@E77VrULnZQ?1lBtkL!LLOSGVd4QoL~h<&YZXdK%4j1>1K z4Z5Li(AJ}yI1{lDk8;OMS?;*6A$}mrPj)!|&=>ymo6p{wiLq?=TuZ418CKivdLvxF ztg*nA0G)9AcrF9`J=!F7NB1_Oo|)leMwY@<%}V3Yz3x}i3a9H6uCIRmm?#)aNBT`1 z!F&@s73QntRI6mdZNoz>NW@;pCN|F>yF$O6o(&cdXZ6gU;Uceb{ za(`f9jo;faN9?@RI=0^^c^z+wam}{hl=XVo?lgbZfYH=r~7p%%Au& zsf@~bmJN}${EVKAEm7KMn67lo>6Ga>noDu%wEGaWXoFYF`Gjv}hmkqgC8_VZ)(in} zg@fdl=%>-*A(z6FS>q|o;`9u0D^h_R!eao*RVk4~TYq5uTp*TzI2I?qEs;28_p6>i zi-otBPvB6>nOC(3DZ>>EKLp!e!a)c{&ce zBy|_E;1?)+fbf3i^F;nR4H?8enDcA@?FXM#{Mrlz<(^v;##{n8J*|rv(Ky|Lv9Zwd z0#GCQMGxW8rVu$&TZi4DoOdqdig20AXjx@=Iij3A(3CS+)aryjnq4>@a6oRic{B0Y zk*C!yeUzt^S&S5=7@w~RZ4-?PAq;+dW5z`GBC`FXu9_lv_!0AfoWUdaN|k5nZnrSv zo6~{!?rp&z$3kisG=`KHGhwMa=aXlcO<@e}(@YQDw&}L_io_?|z|AH&8>0kP2Q{gt zR-yd~$mGn4y6Fn?a9E)l0XetM<=GUuIk{C*8O&!z&0iB9lbEm=en$ z-+pW8>DpJ6H|(Y-E+&)f?DjnxT~9vOSROB3s~S7nbTzA#lJhX>Uzx9ac-t5kk!3~K zw(Id;7KR#oX?T#m;m4R%x0?|_CP)LbZz8yyv<%TGmiVO*0_KAFAo08FUOh zq*pge)Yi%Ib~6h2jrSOS0=U%P_4XGLizl zC)h$bXgN?W`+6qjXx>i*D>P)bt+dfC-PL^;+nPLXEWh}FfrNl-epCl zYY;qO@`AW^Xj!1r;1$UKhHlC5SjeWV%n)iK>Rs5MxwQ~qESy{oaqG&yjLM#CUC zuXx5QrDFDtD3l%ZR7xQ2fnnJLi!Ew5dk(J}YuoV@0kVo?3`-+zE-g9Zkjm`+;07=k za(vuC+-2S_ToBe1n|X%YFH3jWvRRAkTYMD0R~bGTG0BWhuR*z14xaw93{f$eH>IC+ zV62|&ko9~vuh2wbJEvjSb4JPb`|hMs*QuOQhbKt(5Y9~ES=mKhcs`$ffN8%-iT{Aa zDy*o?@|+eZXA**7h0g~%MN#L)w7P>HE+Dd+f=}eVRfuGnK6)<136Rlz2dGJu#cB)c zXp)BI$ts`9NP?;~^MrnyYZQ?Dbg-7)AHI`vmsN{PAmOUl>=jTWG8tP9mnXY;3M3I% zBNYB=E|&yiEdKuhod#kwE{FQR0iPPeQZl2ipW=VOx>=ZF5}Wb=1^qBh%~`@MG0jLr zB~Fx^Dq*e@n*1b)1tK zVi|#2m9O>JqQA{Br=bEm0>?Q(0nijdsugh%LapdCH0N<)j5XgYOh4|9Q-4zpFb$*& zDEj6v#cDpW1UPVU><2bThxtXF!qZ$Q^+fzumf>@K`A|h7SiMwcWgeW<2<6NiBsXJ< z3Mc_SIUtR+@?9^A8WzgH91swaZU{gb2s;Trcp#OqHHvQzPo=G`Ck3gjg@lijqttu$ zq!vQyM&3~=YLttHC&6kpeP! zC1l{_Z!Ma5^KWR1mjn4)@W})zUdoR8u64yAaTH89XdL5 zQ(}T>cte?DV4zVD{75Zod(g58c)3Z$0No_AW;^y&#K?Fa=tYugAs=m`gRJrW_+AosQ`z(QCq?TCxMZCu;y*H|9r_gFz z>Y4OE;3)C3&O;5A#+~ToBPMTjL^xi-jA8`XMaoi$wbf=>&_tS` zvbk&e)y?Nb1(hI0l(!XF#n_g%UC0R~g$$cjEFeDBZ>QpX6W;Up@kqX?U#hjM0c%AD zf^mF)Q^8bufmKU0ZS)Rpb=~OwP zCBDWNSgl(3Uo$nPMmfBwM(3Waxzo03y7JnW^onhIwO$xHmgfa-i?707U7tSyeS9;| z??tt2Sovif{fg*Cm#s0q(tLJluiD<8c-6CubU(ShpLST!_P$g2-0$u1M!N(Z{yU%j zA7AxfvC*IZq+I&TA?X?a_r*pT|Kr#w zr!|!~fUV5K&D`RVGT!o_qo^q~Wa``tjd)i0ao9if$ug?S7;GPkkooL*q zF}NM*6U52j>^@HK_S+aKM>>rGMlb01m{pW8z3Xq^pVJ^7L#aM=Tf}M;>PhXbN}3BX zpU3#;&2YeukGU*fg&(uh&g845{Yw01-!)Qf25S%ryxOjqhLV_@HM1fzW-mK%?E5aGG(pDgFi3rqf{yvc_dp zR1J-Y{Zgw^gF2N&dy=F@rQI^Q#z7{6I70+N)3-BoEr{H!NmTtK@ygj6e}mE0+q1@) z*Qlmpam@9@po1kS3Nks_pcLW*rucy=T3&IW)h%YynMi!5G(TTP(!w7jUGH8x7YAco zMdZPQ(iD1(td4!hN=~*^{o53Ge2^&7IF)kCb}*@ZP2GcR#}yr%AzkIdf!CpEi_m5q zd&!}5k=f1357>yc;hUIOy+rGB&i++3vwL<>mVbr>$8{*EK$Gq23Twev`1~yB5dZ*} z0NwA6%*jM|C9dF^t$VnbQ1u^vRp<#L8;%QWHG$08P0Bv!zpy0*6*x+(2Foon1)L-` zifnI{xc&eLfREg$h}%=*AAwEOFbAMLe^9F#FypFYFe<-XSteUuv(_WLAL8=kigd@0 z=gisYcEll1tTtWj2TcRWT6Y_EaGqlBWgjVzMyz5Je&TYBe!rJ5iWc?I=`j&|;p>Y~ zaOba~IyBBP9ly{q+AnM|E^3j_gcAcC_l=mRKq$C%7&Pab6wd34-I>=Hs{ zgAYh;5yJPoas%A1rlqY7kG~QtNSJ24{z`b=jnoJ;wU$%wu!3_M+Y{Tu)IMoTehF^< zYC^qcu7YCW`!>inC9<_Iwu~VA^8gcIU*ONd;`-fgXp8qOb@9*cBHN6_iTUIR^YCr_ z7MCr-s-@tX>Sy;K{^i)y{I8&Au&7=uf@sUtH|~JzN<@T+kDNp`&H{X16;~AaL*V@W zjSUZ*b%b&Wo^0K&`OIS_hxJ7`0A%Q~^oL17pmpGwl-qsb(a%*1gOZlQUW}hTEqs%X z=bASI_E@M=<|G7d%n5lve!8K80;F3MheEx2myAq~tyCn`z~U@8uA1b~Lea(z_KzK| zfDP3`28Gxm)Iu%aI^^Cx1pZiv9c9p>uh-Ge;1ti2n@c#`R5@1AEiA@baF!m!%stv2 zmNfYonA2=0OZJIXWU_Us``o8z?#*V@`%>RH=AJ{JxtY0*4~>pXSJ~uT+kI``?RS5b zA{e9cL?hr3ilDf?9Zfp8eNj#w)G93Z0-wUo*^~DQK%%HvfN6_1G4&x(uA*IZ=MhUx z+SV-wUzhD!(7He|6L|s4{GkXz{K^hwkYp<84Z{|5#M-Oi77|T8u@RM<$==&43)@_g zJ0zv(OpU29_yVv$Wxf|Kl8eK}5c@blYso8D6=a0-VV4Jp$vrNmkhUqVn&dRW7+acs zYNNHWbK%6=gIl=V0Nc<-)F;5D1VZy=bi3RgFoLmBBn2m1Q_ed@Iz;vsR(=fxU1g4! z?`X17`L@pf@i-oPPUOhtP+-XVIvxv}T+F?~+7<_Ql1jx5n+Y-Fi~q&F*-$Ck%49ow z*PPvBaS*S^d0+ejje~3BhGto`if0pO%e%gO$N7eQ*&~d#=n<@s5OIxxLrmx%N1y=}3KVt*|EZgrk!H`rvwYBJ!Pz@o>$U>P>y~ z&p|1TXJ`+!87#OGdMXA`GI|7V`Z`+;3his3(q(=h_MfAXYIrc8z?^*Z*EBhR>9}P( z@|Y=JI2FN8`QzUaTrlvS^ToD6_mFIz5D74JSFvZK)&^rf;|w!l*?Q`~i-?K?jM9rF zGETHl)k8VfVbI`(paUc6cYva(n5Hc>xnzHh5wFEAVs(5?qGR%KHJ)5g&$tB^Qyh5u zc=ENWruCG8?9alY<*H49(WFwrVfExIg>p?e6ZPRR!wh*-FlD_%3N9KyMthZo<82V( zWi`=?3tP+ji>GkJY=q_vb&BoJ(9SHYoHCH668O5<^G}RXa*G-MU?^Hu z_G|5tg`{nja!i{()ly2oI3;5Zh_NFPmBiumu+B#0W{pe&1zF>{qAu1JkOqX&5!8g( zj%qXQ<1}IGjD}or3Krz1f$&X>g2rNttkPCx6)1fL%R-!GjW>zVzoxP)`aw9x84da1 z6qqPY!fSsmMOX9_aTLJgF^xmyUC{pv5L{9^a70%06L3V9|H5BpQqyNM3v1!bX#_Po zyh(OJURmg<Rep~%J}IS$yos>WI>NRochI$ozrT57 zsM-3a<3^7P+|o<6u1siw%|$<4ljauk{KW%PzBFVWeX9uMM1*8BQmut~J9&_WqORW) z#Zc)dQ??@R$ql0i+eN=3pK_nuFvTQiLM5H`am-z1G@;Plf zBBQccXld03k;#>A{uOgImvStlGsisnl1l0iocx2N@DZ5fwh)F19{bYvS-#C^zmi;q zJ=-ynPDnP8cLZ-v1#{@RZt}VQktnHw5qEZy4^1>zU(+ka*5f_8;hxE`LN`*#=&@!n%V{r~cKSw?c4K@SO z5|iW&q?GxI>0_r|At&w*Nxe$(pGd>bG)l0EZZC9l%{A5nMMpq#dwiroVS?O@VIqn7$!yK>ut6@6f>3M_4~92>lH0ajWZy72Mh z=G+0<+77|q2Q7i3>R;lzbG3Q}G}e^h$UK8~WQqa3c(0#VfrQDVMq0N0Y~`L@YKicc zpB>&{FD-pw{5d~Gyx7aQX$_|2ohjfZ!1U@sJJhbCJY?i zd6bwen2E9v8xS`?81s)siWkGHQnh9_U?E?v#2SH)yWq&)5d6j48cabQfD14 zk}8;+X4O(^0|d9YD5K)4y6%pp1!&grs|ByuP5O`juGht%x~0%gl0Qvs2v5n5opDZX z1Sj&0aw7n{GE%ze(h8S1CFL3h1TJXq`^vEPRA#psyX@TiPco3aBP#`|cwLYy*9622&8cCiT6~pF1 zrcKSLsq}4?d&|U7w>wUDLArb}Mc`C8G_6=FoN7td^gOB7Y7P~LSC<|h8ym&4R-*`u z)D+OsB!$Y6mO87rndsw+n+Dy@e>+ZKE@`e{;;y_UFw3Ybibz<7r{pQ?YcZi#%4q#l zM>K$JAh+mO2b#c~QvqlULvE>O`we{Rz@wP|RbNw2DsC9pKq9Uf*FfyN;B78uGa5-; zDK;BQY%Mk$IPV-hs%xkC+AJp<5o+C5!WWGLm^ZI2{DQvEKFF>iEcYfX>~@}uSGY*o z&UqBYsVfUic%TANNYG@s%kwt)<9DQL3v*6#KQl#5zdH&LB>;*!O!xSrJHa%Su?N*@ zN^)eH7?~9a348+IwSwEHNuh#NH~W#|O8L6xtHxKfFRzCpw0Aan;# z#s_7;(EV8lfALh;M2L`$9^x^$ljgcaRDXCNiBK6;Bx4iyS_TwCg<>fMKMB%`A@ewB z=eqC9yj_`>X6P`F(o4+qUM~re($LS--+~E|x*B*Xm=KyNWNDc`0OBR$y&I?RwO9am zngEhjy6Tsai}x#YZUl10mF&(xTv3_oxLtgopB!o_CP#+SQWhJs4j0mv`HcmAolV|V zuIfD$o5mu;y>)EEk;-hVb-f46HLQPn zzMS0qra+2A{o9R~{}xLy(K9psHTc)Y3)BBTu>{k9ES6yUH)08<|3oaY@V)Uu)B@A_ zraJHb>oL?Lp$wqUukAud?-w@d8Xs)LdR(R+eL8-8-{*%MoJ2u^L)%9D$~m;jY8j>X zzNk2|c)7-f{;T!VmH5sU#{Ir3xA)82CEb?v*SPA!{lVPjjj^d|y)K#U(Fa$@yY=fe zG*ZdQ!BIBswUgI0*tA|0++ohTJ-1&t-Uq^0{phdX6GP8h?LVM0YA)bj1E==0Zf=Ct z+4Muc740=`?dLo!7RM-$WBb1a2l6qq=H-gP4Wj-0c*^tOPO%Gi4+u$p8fvid4uLC% zUUGJw*@B{FZ(`?<;u>$k+^nu^nnw`%ceaYdt$?I}@HKM#*t;_rT8lkpg}Gcryl?ve ziMXMY4O?EZQKl)+JjH{BQZai4C1+}fAtZ!89^{ce9Ajg6HSBIg1TwM4u5g}LcBg(U zrXKpQq?&tWsz_YQ~79(@?cq4CS=^ zB%Z;QAxgWJ$h1}CxtN83?X1Z3SeL)4a;#=psxT*6pVq23*mI5V;8Zg&NpUR3vPp5>xr%7 zAtXG+@aS!9ouoe%;NVPb68+U>POKLFCYtAO^;;Z;=N#QSbIx*{P}h ze%xlm1#N8eH-zDNz@zK%J%nNR>ar8kVBQhNjLX@Z>G%Ud6Dn&kD-8Xa{TIAy%mjhU zinem`CnwB3rpp9@wVP6O&!@XA_#5v9I2=L0*PW1B1@eP5sescZ!Ms_f=dEjKMFbH6 zi5+X+2CHP{T9u4T(pqAX-LLU%!XLr~e9z_Wp3@V{?kem+@NdSFJT|E*k|;0=M~I<0 z*pQTU+O2whF=gWKug-=GJmlgE&K_lHH;EhQ3+7J-CY8{x3)DSPQ3FyJabl}FgxKdWoNj7d)4`m}3cD`%+E4%^oi{a)G7 zA73b_W86omyhl(a9mn0;q@g+<7zW39Af=HJ!BsN_Ue(vN9$@K3!WVznr(KB7Q_zL5 z&37I$H^eY&;VEYPYB4h;UH3KY(c|$CJ0VTrP(WrL^0r+8(ozY;1T14-#Gzdx^~ZVQ zDpf;Ns7<-eXf~B5$z@-1Ft`{}un*!!r4lHOyTv}A=-w5roO7gIk2KRyVHS--?;&1Q zgcw^C^;6&5LpF2Ai*NxAa9165iM_y8e3Kh}Yj8AyQM6f{``%fCm@@`t>Nzr(Uyi`^ z*{HrLeVz%9c6+)*Zmpg-(916NJ@@&vDW+fRTT8J3d!O#LZ}M9L=Ve9o@v2%EPtmA$ zqi-gKO))mgRTnvo(Jy6ebTgd|R+9aoq#+vEpVW|>$p}AGVk*uHlQ<g6C+{DAT1w6@4Dm0HsFaYC$3bbbqcq-IB1fbk zK9$IsAz>qpEhk5SAx`2ieY%KxCH2IHg4jn-g2L!XIY>|05?j)LG@6;JC|(%`EJ3L* zqC(MU;w%~ATI9)C95-MmCH?~hWn0Nl5m4rvz$@hx1NlROQ{tES<@`gYY=s@8Xu94vSJ{2@ogC=sj_nw#8ATZc+x(4#0y*#=6N6Xi#K3z6`Mx@PPuDSX?- zNhHN8kJhMf%2xpAS<$dLvGigP|k-c%{m@LnQ9vSzxOPhWXu=H6vvt>`RB=Q`~!}ZS&BCq;ZIio zOfN1RO{qO+_Xo<=%D2TSS;=!&IFb@}@h%(6P$?V#00d=K@h%7oS;;?KM$X96>2E$H3$7#Qguo|Cv(O_o{T40u%#f{IfiKvi~d>pBy0nzt%0EP=#Cf z-fQBHWNPtG_M${7*8p4S0qu9*@N=rAF6ztWkZ%Q9u9x~zuA%mdiqE4^0G(^?>VU!3 zl85@K<+I6_sUt0t=AjRwr4F@w?e2j8QJ#d)-I>fjHy28*xP(N2RXW0jT2X(DqlJEGg(d6&jWw^B`;^ zdMd#!5NqR7QUj>^OlKm?wOG-##_Op7`X&bGEYX(gti8eh(y__lAVl~qDd@p4G%N#t zAj|!_3=ERXGW7H)nnFGmSo%XYT=;Rh3P4QZVfxEl$c7u>YsglRs6yw6fVDmSKdt5r z6qg13q=)eX!U8Y2krZo%YyQr!dO6CFGwOm1sjr69Rsf3=kR`or-3BS==6ixJI88gt zMFzk_piwYc-=h}weUl&Qa3pvm95D?q5GN=p(S|r8JmFsOXXv*C=dQULT5*NADhMZK zBo)we$c3N}g-zE)V?Qf2W|SG!!U`zRVJvv9HBkoiF$BAcf1=X{cITvHh(N78`?au%mi0gWUk z8J1|vjZYjDxzOhUS3$Ik#;D8B8Dx@1S;9W>MQs^nQom}MN+omEY!;2m0t)IUK#gq% z6;fzB^xYNXg<%nUSrp^lktFF_=K~Iyq=Q+-7FVey4wInh-X?=car37LV2-%I?r3<*KQY2$dAUZj~}r#3&|c2^Zw3C4~!Pv@8yBDhDT8 zLMEk#qGOFAR*_#VwmN_J%9EmJL;{oo0Y{jgkN<0;1DRPKicB#US4y-4+U93jZ^ zRPZSwHv$3FEzmM(DlcShMuaG5XMsTKaG38QHpz#-hd8tN9-;#Cdx%i^iU}crGsy3D z!oTfh?(A1X{v=ZJD`n&ezPgXQ`yUWHnQi?|c(# zofjQ%{MHzyXR?G_0m@OGu1g=#qbX@%Zq@r{XVC`!=LkMm9>{-f2xr`2@#5~XdYsns zaf9N_srOVQ`6VkET8qn}tQya{fpU?cEbj?@It^4PttM4}Jx~?f54ZjNRs~E>hb$sG zht79{0J`62tpj$l`rIW|LB~gxx`c%W-6XE1WPwY!aR6W&%LdTHUHEH%x7rc?*E=t} zThZ1V_Iu1RtK;=*-`8Rf8sHP>v(8XD_B&O-AD`pAvuH5Yr>o=J%?6aMJ z=2qQpdTXJP=^WTvmu#{@@0-pEHp_SYqTu?2s-u2{{;N$OU;suMe$Rg;V-ppvUw7YN z5rk#VcD5FNLaZ9DuLpD(qZjiURaNID^r_cYnSC;ZU8HNROX~-jITg8I^pi?Ayu-=E zZGBi*zKE_ISiQJJwMF;IzP23W=WIp+b+{-x4)7FTkC4h*dT}~cP>`LYZ;{mL?a`It z)z5~c`2Rlj1Ji%3eqj1H>IbI(MEy|tSN-s>6ARy&-6WAE%YZ;( z?(h5jeqm$N#R$e|T7d<#^0R<_eT2?OC~>!Xy40^YmzMVrk%bc~8>FgozPmqP>Fwg# z>Vq>v>-w<2U$pIPf!%SuJa^@OT_tb961BhffVw&NfnTD4S?=-b`e68c&~Bs`J{r6;=&w+P>4iSO6$5)baliq3dwtIFhFsaY)R;WqpKWcOzdQrkqE>Kr{$XXrJz}+d zX29O#H4}+g_c}UyPRcx|XzIht*kx=XGbf?e|;hlo7Nu6bc&v z7lw8;AarYp)f>+1PH%x0t=iZRB1JF+7Y!&CR5Y zL4}9te-J{1{6Lo|*eS$$`&(#%b>9~g+!OAZqmE>989Fw2pIJg+5aajM#7v%l=5ANE zp=BO@-Q4xi&(vjh?ch}C(Ci&hhdx)BBIX6nv7~aQPv=k-$e+S>KA5S@jX;f%XHFv( zbBq_RMc_Y0*QRKMspn*=p*{*U2sPSn8_(4WhXsy!l(~!5_a}8qx6>gzOScOlJ4<3X z#ZcZAepD-63;du{x)u)d5-rg3 zpwe*m9Il?j2AeaH+6IFqM`r2^7SH6gC9Io*x~0t!v|j(;s#fg=dkYPkC}s;&sJ;F$ zWs@b#IR^EV(`9tjfj`o%idLD)n`gX^!}-QZD?h2|OLShH-B<>WOjQl)ml;2^0~l>> zM6nD}A%BQMx)|W^?a|Q(*CAI~2YRAHuSDaULyCJwFl7K+;(SNw0ntq>q_2+SF%tzzYKL`IBJ6!KIqlz`CY z`T{-EUftKRw8C&%2ZfT*6H7I*LAS0k6q400Q%Bk2yRM`P-N5#t<)J_FRelZhC;N*4 zw;9nijC-vW5;MbqV@2F6abd+-jHv#eXc#WL8&!}h2ve3iitQQcJyHh{iw}yeVS#`a zb|_jXN?KHfIBeSi`!B+4IV7i4v0-grU%B@Ym1P+ zDk~$1d)^b$Gw;z6#p0UXOvv>RZ21AC_O_Xd zew{F3s5Mk2bqI9sVCT)OD)L6Ga$*HPBU_k?1oN|s|4ddgpRqS19^)uh(kdUvO~0lQ zjXSmd=ZNyqX9GO3h&A0x(LB=1vRhWB`pN!aVyLlzXqPX=u=QFaqdf}Bv+ulbbSF^) zSX}G*@Ah2ZHVWnL$K=p>pHW?#by30LYt#0+3!tq+dl4S^h zrf-*|{`rgplL8)!M1@Lx(&e)lb^K&FR0&1^@|>4ALzI4eRTjIVD6 zk=oMKI;gq|!O&rGO%N>^C;^d<6u9nVYqlUX%p?=DVXK~%%1`l+^3PTPZ+b}fKdsH_ zgruXHRt%)t@v{z&byi6H$DtL{37MD6JvR^fkTQ3{LXY<}kwohC%_RCXO|jC3eP?f_ zXAgiCM_D2}vJmtNxovHv)7KoW(y2fuq%iW%?gRlj;=a_*+!@|mw{A>8GUbL}I1<<=J$(`? z<)OJv03m378h!Ru_ZoIGHkaRS4YuZj84qm^O3{2UuFL|!#_Gd}*WNGKZa0~-2}2=o z>do~H^J)Tq*GuqIL(ZOZBc7!2=j+!w@q8zFU}+wDKke>lSyRDh$J`LCb4`5n)L|x1 z#}oI?0fyWt1>*A<6TCt_M{e4r0qFJnS&UXE2F43d>Qj$kZDa+bkuvAF&S!I7PEm08 zvxQ{%Ko#5O*2p3?AVU5?D=ew1QMnCO98o@R23;cj!TI+H!!@UFN)TqDqh;fya0Yu< z6@4YMSlWR#j=0%uL<4m$1Ox?ja%8+X-QexjkK%d$ZKM9TdTOSuEHvke3`FR@=Pw6?Q z8;t6^o<9hV(#tOF8|1bFfd1C^f}!v%?*T*NnLYFMff4iMTqF3ja*^Hu2El=Qs$Ue2BDF+)VW{A+q3JjEM&NW6pW z%-gAO{>343ugLBpaIeT-(HGO=_j&{V*0k>25?~K$RjO1U?y}V0j ztCgR$*MJAv`X|}^FQ)LH7=gZ^2Y;#DCx*ut^eC_3-QT`qe`&z=RL%WV&O0OcmsYi9 z^J`oG_Y>4!|C)aH+WD_u3BJLbyue9nv4wq@xOrCNFD?GDw=?)&PVQ0$fg~#T{$?ku z1_QH=VhS-Bj8CXkl%(p_~`iiUbo00)I#1?i}YDJaq7yH3>q``;|ciy zRP1m46(hv|?%QQnA+!HaRlcH5P=(Rr@t!}A*em|Yn7ymWENk31ugS3`_9ik-!?ubE zfN`i9Bh2kLyXTLh8@~C$-ibeiw*Typt*aLKx7@W$(ExYSF6pceMj|pc!}nT3yT;Vu zx?!q7!VFcJ=s|;|kqJT?ci&qk%jQH$=#V}dK@Ua>b_P4w#vd z$I!*bF;pvh*)k{4V8R+Xd+wRU4a8O?xu=YXnZ!Av70zN6d*?|*75l{Aa@Bk1m^8G6 z;s|+VN_vbH)tc!MG@~t`k@Jvc%FRcx7H2loSOrvAnHxI#q+F`Kj!TpTIjeUZB_B2X zmuyw%I4*0piB@y<{l7f+O4gLhsL^&SE)A6b>jSdn*jGEJaUw@Ttp;!b0~t%sO67;f znqq0-53GC+tbsvtmU5s#|rZXT2U>>y;>(7@zO`ltd?%2US^roZqUyr z9WC<=Q5THk;F`M`4ij`^@iNnP_Ms!DXx3^Dt6o^_(^zkx`=UI35YyS&PA0`H_=DUk zac{$CX5cunx522*leGdlMEq}7*-mAZvkBevAN!C8o$xEFNv)(q5%q{ zOnTb2YE${Z%01BlXoEYUO=~yd0XzNP2L^q|KXd`R+qB&deFQwdX!i3VSkgXrUGaf_ zWsZBiN3Z+Idk~M;rvm@M)+9M{soysBD7ah|*KmS9W%ztq>3)cc6Qm4wfd}xUN$nw7 zd+Gmnf!3iMH$xFQW6Ku2WQBV{Z1%L+_%Ua2?F^Obj1%im5WNW+Zhn19V=SAwntlww zi3weLN|o%lfe~080Awv%kl1;<)2sqxRy_%@8UZyq8}^~30Mg--?rfxYq%cxnL6n|d zO{AG0Vu!uOg~wJvSvT`Clf9=q#BAKGSCTcp=J$!(ow3`%FJ(u#t%*tBX2lAUU!(yZpL6<79;M}{iOu0acr6a65YvzKZ*>Fgem3AUP0Dv&!Jx9f_mqM;hjYD87LS_P4`x!S!s|y zPQHZf40~H8A2tQKA1mJV{mHRGM z&mi1k<4<;;KLY}GxUM39e{A@MU0)x&Iw?$Qik7**7%l-#su*?E9Q2ZrWW>*L$Uy4h z;!1MW*(K!JM(!JUXOG?W0x&0A1kkPuu8Wqt5&nFCXqL3A51&)i-9dk?)UF;d zWC*-o&O#b1aK6q%%IHN#bR5GgyGw)l@)*a4rMc3RNjSE>>XBuR%_k?)`Up^(urh}6 z&95=l`Nj!%MLzfAgeoBsv`(q95nU%!D+_rWKt=kw^mC5+yL@m@rAA4j*eV;BUF-Ph z{_+{_;T`Vjfp>m^=7$>)UAVv3gK2D$RF-Hjgw_w}o!QJjDz1f2??6{x^yj=KnnGrSzmE*KGRN|X%`zEpYgn6q&_HWU+c+1~aLNWNp_O+1Jia*v1P=ZCn9`%8 z+txh_Eh@W$?u2;6p~ZLe$7Kke7RL0;{l|7eq@}SbI>sVsFL_^Q%;^vwIamUrSVF5I-M@;>yrSa)cIPWMv{I@H09djrlt^%vZ>OuwZukg*&kx$907TClg-#-V;5e%)f1E|i% z4ZhRLGmSsj|F&=c&3}Uwo8a#de0*i!{55e5IWpsm5)Bu0WDZU@m zf5eT!-|5I3o73_Y(ytao#?3vAdl93JH8G)FdJH z5%~=ic*a`b&Rc+lwAcb_ph1d$T9eE@e_4r@e*rq&)~n4u6*Sw1IN)6e;gQ;#!aK_| z;&HWr?~PZCIGnCP&ks7eZF6Ia40&NBGiOePfETWL+Z>D#zY53vJcTqTVld7cq{9IS zb0PoiA~a|kicrkYr^gl^&~vzB>a{f3(n0(7umwPudr^D zKJGW|hJ6|ueVhEkVSWzA<>Vv+d6b;=!ZHvf7E?{HXrln9M!-%?g7#}TVawvZH)bRw zb`9Z_Do)Gz6pLx%&6~BnIal&mlm~`Fx@vs}&9P{eQ_sKc&%?7u5tTc3OBNDd;1$cp zG{bpK#4NFLt?~+g6fq_w<;QXfOD0!%`b~%?{_VfsGWXrt8ZbwjP8f(}g(L|^O%G)s zU2N9K+t~h#6l%d#xa%F|BJ3ww`*lfP1Z|G(?884S@2>QMao*VqF)~dt0vnAa=>qCUNL&}H~=!z3~ZnsY%C;3lqo2yuswYJ9?Ttf43C0whq+M` zMq`6}>O^BFW#>kuov2h1&j#~&1b)!hg1H6ug9JN(Dd*zCPU@gbE`BdHGfFE{zCYu{=`omGAz5i!6L|teQOogFo&d)9a8Ud&F)SEs=>< zgL89S<+FH```RLT2uIKPhpF1uc(;ZLzfXh!McRJxzw~nIbq>G>8O(}0)24I<$Exqz z59P}F7A3kr`OYIX%;JETcJyybB>~ENYQpkpB`U-m0Mf#1zK{yOAOIz@7Ls~ix%^t9#-a8o^2MBW|ZirYX zp@#usSo=LAH>3AwdEAmE)R<~PMYQ{bG_n)ZE)M!tN`^&g0-zsE9L@X99;x)5mrDBk z?Nbbf-goUAI@t7-_sinNju<40(aVMjeMt~)-Q0Zq!jd;6eYvQ;2w!9&T-g~FM^sdfWCWPBe4d{Gev#} zVIA#Qgq(AqWMO68fyJ=@ki1q68X~~aNXQaYLQ8?%83mOYdzMs2*{V~7q9S1t)llPF z<(QlWU5^#NObX_1U6d4KWlJ5eULIe3Sx9V3UOaw=#TTEU6r@~;wc={pfiend4#1lP z!#E`cQxqs2m!EFxQNn;BL^1;x5Z16tf+qoES)D#lwH>N5boCT==2Vf)Dm#%%`RcL{ zq|U=x4;h{A*|Ox6Dpm6AHA3atVfm6YGD#9(AZvE0XcQ5a7AcX_vw*yOTvn9ok7yPp zka35Aq9e>rX>HFUB(z6xEo6zt8aa+DQHzMBvR+{^LC!*A?M5ETcp{>@t}rY{dY6Gfy{FHO>PLbl}|LOA9dM9ng;3hhZ33%A3D~Gj((nC&usI?%~a{p&H zeKD`nuZKCX`oLh>Fq1A%YM)UvDHc?hIiYQCnF#!H?}2Kl4s!Wu^E6hgw_FlL*tomj z<{A<q?Gj;-g<%u+#{SDD{6dc&nq|! zItxJDn0fOC<1~2{7MVA%u7qS+n?od-K+ywSC<5&$&y>PE1Ia5P=Iv-S&% zuXFNL)#}?lC6KY~{sK&730JbQ(Z8FISVRPKHG%P4q_lHY4i%4T&zNm2|Y zV^eXq3d*5;3$YD)@k?*QAOpD;XDt>Zclr_$wIy<)%72w-$(id|EV$f1OaX5iZT(KP%{&n+> zsD9l>X@k_mpXiqrgxTd5o!2JF@Q40rFZk`Dy>vg~svEkjO(~M*L4I4?ykJ%@qn69B z$e~!ZMg^#dYq%uBNhqp)CQIGay-BKf#)SBH=^7ZE%BL~vxzOc{`{m|VK|&TVI((q{ zzN&x#ghplIjSrhdT)cIl_4Dlojqr~*R>%AI!nC|NTK6RlsNLI@@tX;yc+~s2&$Aem z@+E1J4f~%w?Uk>wP@5*7fz!~x>V*yaE?LoBw8gRtbt+D>l4J0w3LcG3#p@<}z&<*B zYWpNgqQfgvsw8qt2bozoNq?Lll+aS-tnJ6Y%`e1twW-Z{XHTKD%$VUP1pd55gGqe> z0nWt2V+|5F;>TKJDh>qx&9}5CVsO#SZY$}EybSx0qc3Q+TmNkcR4ZlDw+3fFcO)kv zF4>jA6SNaJE@~-D5Mr*e7wXCnpl=VqR?+2@5X1TsL|4mzQL;C-BVc;d>bLrfKuH;^I&@P-hXQ9+u{H6#+qGVdn z#YcHfkxctm{6V1a=w=RXALL{itx`8l`!=4b))7S(E>A@(hd=Gri)y_A>FkH`<%ge(XY9!|JH%yMqH!xJ{mBGK8wEi_={7crr$jJQPy9Lbu z^JERo|FNur`QOMInEw-5!<5EYG)W6$*NV!48s7>-t1(azkU1(rZ%7^1Y~RgT^Dx5i zA4i9iXI$uKLuIFDO&Y!Sgfv42mTm~JHFNj{{Elx)sPE_8lG>Bg4PNJ-4~9>RlBb4| z@8YlL7JAN-XYae|i{mk~h8E=B?cLtf75qKc!{>I-hT9Cu!qCB2CzGx8bpV_GRCm++ zRIx^;hJdj;AWq66)O7P&;#aW zUqdZ36TGMm*z3s8ya#eGfG4#DeUdRP+L|Rzj0rYSxAKni?-Es95ILqN6s!^JXA#Fm zT**8X6?8B5MJC$W+M{CAa8$Eot&44Cepk!cMQyWsC3}f%ba{|HvqZHOAPSRRY}hJl zQ<$%vTjx>K*nH~Gp{o-dnZsxzCQ^rc1P~NJHZA_zr?)|aWrk~CD~=7#HR8k(N+qQz z^r5Ek6v9drEGJ%niuT3B!6dH@YrK0d;C7{lt&q$65aD>m_BzP+lkL;(6-^D_M68To z0hhW)Cmhr9cQcgMJpWjHmA~WO>CnD3Us;S)MG>?W{e#BH+P5jVD?d^R@tQfsp7sZT$PaK}4OO^#EuNW5fYAaNb4)ab8*Byo z!8fTYev$Q_dU(w#6E%cm%#Z^07hHcsb=Hq#g;3h$yRZ;@5rEGOg9>q81kCLLrSz>Q zCW?V9; zFOaTT3L$F@V1D@4_f;azN3=CXysCrC%#zb~G(hEM5TC|@MrN*$O?g9+?8h?BUzfI_ z6<6E5ZoAA+{Nj@{7eZQT5nSxGLQwprr^iI`U&knjux z+$9;1b7LJu62)eq%bs+LAk4Cp7}&b5*LU1vhfm2faS-U;rkbW&&xQ}eLhs1uMGYxs zHMQ9kJ54k16IAM~Dc8>>PW%-dScL5sz<87Bce1Q3u0rZ2?|>JV(sk8b9r=UOm>>TZr6z231hsnk5d=^42p_nZM^1Q%oLY5Y6}DT$3$DM zcyEC~$dbc1d#ptHHzXAPq7kgW?qu*J2*FLr(=X3mfY(wHP2UQ@d*ePULO3vxC4thG z{)6~;BB<5d(FBZbO{1juQ4lsbentU4{n!~*x?4-4t|eQ^PQjt~5Ns^$=oZZ1x?)wqtJe#>E}r=; z$Y3IGtKlRIy$_nfqtF)exy5MYp#gr=_w@j|b=VQP5&=QG-memR8^z0t$d*B& z4z&nzrYHsGNqMIl#@sS;3l@X3(@OfX6QmLcU}1!xcj!7{h#Cq~wTQ%1{4k{X{pMR# zf(xuUL!t_c59*AP#KC1l3{4otXam3XQ$=7J&;}I$IWC0iVKGXQ2Ad5sSTN=y0-H1D zqWx14fw35MX~7ir`G~=O|5N_;s&de`2rWQeEpn59u~6qrKH~qsV+)Z;dVcXrIHKlo zX;2=mzMMBqoeUBoO0ktW^PoB+krzJ>VS2DK(4b#f#H8cDes<~2{dx7Ul6Pe8>|Vki zJqNR+`32UCm2X=*6_HY5jRnfBk*)|LkysSaweEr;8M8XrgdwENFL5K_LeS-Er|e0^ z1X5Eo*YcB$^zO1#K`DImH`xVNX0L{PcxJCsT+_0XVtDS)#@~1T8tkU$ z?NJivog!FdXQL`XS4FVZqv3cWq#51JfIbLaD}74-T4{zj*6Ff}phg|~Cd4naUZz;V z0c47f{0;~|Dr&P+!4ZUNY>I3DbpoEMfRTCrcMNIl(o6qo0`JN`uhTr%-wTSPOZ|CU z0H=CDDn$mA>=6vY+$qIL4w*dfKe{l{W92fmgvPi+NtG6)-QR7ZIYovrI3(I$@+3lD zq&oeXEHb6PLNmpyFfhq!1RB$T()(nk)75)T*(gf1(P9GLA}pt?Cg)f*dPoCKLN z2~%)LZz~HAQ<8#r3yrNW7|#4^omjb2ZQnxm2$K{W;MY-2QHz?O>XXeTX%42;$^2QHX7i{@lcH3RQdyFa1y zIS|scs{MlwJA!Reaq{wU+j&j1qkAHNOxZ5Z-iiOWshA0>U=O-&K5^QPB?2hDWs$gj zI7zVClcdVQjU*`nHYKv-9K{nOBSy30SG$<-gR1?}+_NWIT)0b%q7~)mFm|so?fd#>`K&#N zn`8-G)fDR4bg|9HP)P>BvuCpGnPm*j5-Mp%1c8j=-qMX~R<$q-v&aU%oX~rT2GD8Z zH;&C&@}0R;=;9LUJ|=X|$Y@+t^w7-m^9bt7B@wnDO#Y|`p>cxl;!^ltpCw>PZSKwl z&<(S#m7Un>lrBOWCPK>JsDZ%^Jof>a@usly_4j3YN1hiQyLHVp28@-d*c}t*-8sI+6&rCGg3!ee4!Yi~=?A!2-2_z*mh$8;6Y zJR2*v`{Ic&Tia`u)u=+)L)x;@JNoi1Ze_Z-+bbaso+UC893*YRF7WW}g=JmT3Uu?W zPu-)#pWUomqRX&DSJNUqmYa@8b3^+fCKbItB};8bqFWm+=Hgf1#mLUJjX_mMpC^zV z7jY{stO4Z3EsRQf4#%j-OCi(bF))H`E0R2WC>&W z$0%~YI=l>fc^Qm^Y4E#jZDnH{x4HQmj8K7Bg=ox zG_w2~rjg}8Vj6MAqR)qKd35p`{Ng&?NdftNg~Y&M4t8CAar`%tuo>!mr~7(x)ZIzf z3PrBjZ5Xh^FRH7(&W{xSuzh?zo%8>V0r!F^;Q4rpY3cEFczMp?fW!O7J@WB+f1Nrl z;BB?bm9dI`0 zM*bp13aT+-5$5I5!3<^t0tSbM^ORv%g}2=Q@-)+9>v{i4A@`B@#HVv)zePxMh*1qf z)-<`XZ4RUM@6RdYV*wEXAgMR)kLuMVdWg-Ia&ya!d>QNm5d<6f%)I8o0IVYFcF`lL zF7pF}#r%naBkX%QZ;(FNxr4f$_umHxTAE?=aYX1O_3)b`*J3Co;ipuDNba-s^)u3K z?8Xl0;mbL8iC8s%1QC)2rrN<0wV1v-!2iO7>4Qe=0mIFt*ZBmtNzEQ+n|H=>jBp%9pq$X9s^j^4_RR~F0vn0){W+PI~c(u%MJj#E8Xag zy6p_v^opGX3Q!x722Vh4?^DX5HjqcEIRpHNr zHa6`wR9*&&hch`k5d|UY6ns?cNC0xrXF|XPM#K^_-jEU(UbSYUvn7c`GD)$l67urK zH$2opBVbbdE2)+`2TtlkqelXQ>a=^EzM4*PN(j9#yT6VufgiX$0M!;qej3W@^HI++ zv7Qwaq`quCBcyrae3H+oIvp-t$K(zbIW!<-rcn- zs+iiVh&lKk;5N?g!vE3{tVkHNY4|5F+0?4$m!v{0qXJ0Z?od(vI&8j2i>T>xb0CXH z)CoG2QCP9YZA1_d!phWcIAE<1QX%2%tR*AY8`^6pF?)f0wsPX`vOQvISUB4u1r8Gb z+*f_vloX{Di~yOAj0tq&j_6ByFEOG+o)yRA%*#nO&!5T3CVfr$6*N@M%*>f)UYTf$ zR|iD8_kzL|2(s~o;Rl9LTd^C#?4vW%`PFFH%TYA0;$EgTY5zKT^xzOoJ@~;;%4C(; z1y^FohcWZXF5seb2;$N)5GD!(a*qZVGqIn1J@sMaFS>K`5&@5~4U+pNzh_cpfXJon!izqHm*B(De$??|c_Q z77{#i6<@muv^ULA=V99XE?6a$E9Lpr;Toyw>IzCbr~x%j3CjM94izeepu{AA#BA9U((gvN!6?Vc9y_<`BVZPT z)QRcJg2k6tXrcLfB2C~6f5d;};HdIPjESN-UfN?bXS$!_a^P+tZvy4o^g{`A>uW$2 zlEN=Zo_sqo7z;)lB~Z?1Yffp8nGlx<(X{~+CKD*Q?W#*=S+$hn6i2N4&3d8S96A1W zc71~TNIOOKx%DV`q~*+%u1_=VVF;xDqPP0(aA;f|h5k}Q9M#H+tPovwfo&Dk?ll6? zm91F#f?5HNi*@oc9pmo@P{qnRW57^NN~M|t*;K)+IBD#x)%~T^!w_o~jI|PUN&4-Y z6Cv)xp!V1v6kDoPkQ`DJ#i(|oplF*JMa@nl^T(3Zj8@@z`N2AtA@jJTX-ILeqE`p; z>HwS1;V42Qb`s^8fr0l_D##|Rhs84l5avk;a@bX;br%Pe!)wWl*&1{-QQ2vOaRQ^# zFSX_*L0bDI72{{}1h4K*;@k>TVHWLVc2kk!Y3t_Lb=1}a(U(SK54~@7pc?D^8e{EC zZ3h&dZy+hEm-g7onMKhk4wC9@eClblkUGiZ#O9Qs|b$`td9aP$qOiZ06wvoD5(gX2P(< z_Ywvi;>@6rse!_8pe}!sV!&onH3z5aIY-h#uBq3qdTmtF!dP46)fNa0i|#vT^o=hsXwkw8~}3xiQRkcp_O#3K>#m<-f~h8mfteCJ!~4b|_})9_Ws3IA9? zgxwV%-bAD%ZL*sMkT|OxNwbWX5!DxPbmpImDD*jzzE=?QJkP5*@6A7nHEFC}<%S~T z%Nyv-)VC%gL$R9ObG|;3o2!QLY+(N}X8z;7K7^GD_?j8P9ISc40+-`hSEwYTyLdF7 zl86cC^q1YBPW!Lz7JGKkUaEkli9n?Wb(lKTXc0g>suyf?^mGH2ITbCvd0$mQ>!yCK z<8MN;j(RX;jE29$M2r(?68^{@p%+UL^D3Bs%9-Q`%he;5rU;{?3!G=8Pg!B)5fYvM z*3YT9f2{~;!*X8=mYkIt`m3wVOOK^lGFgkaq-am)9mkiMPhhRCNipc6bwIlF#c>LI zT@}Mi7a?F^Om1y@RC(YV^9^)f^ZwmI^r0CtS^_SVg6Ax7BYyJ->O^7)2xDB9O<;Be zryK4)nhuuZcou9&(U4>498fGEA~<|Gzh$+w2N+_|_%V^YF{@*?>`4T6SB&6B3Pb@w zR*sC|TM6A>+H~x#fEIA+toS{@9fBDop}{rFpmC&x7g-!|jebuM2|cC$*U$9J5Jlk6 zdQb1K#vJ;MeKBxfzu7*I;fTP7=4=+SSU9UluzY@vMWeI9S>7s^=iEkow0E0LIQLp< zm{zz;>pAab&{&NQoRQGCz~xK352uMpn9A9gN|4U;*;{b2-u9vC19Y+8)gYmq29N$W z(IYkb-V*6^Vcx3S*}gY5@0qqws%KTK-Q>&K5_e}m^C9y${JDBy?rMY88UAywi;Bm4 zC|Txf`=#^Crz*X|Vn0JkyL*o57;vd&ceQwLbL%>~dOoox0+Zd8BeMjMip`R2m%q@0 zEDkKci;bqqD4V(qe($a26-Q(bUHzW>C;<%!%k0Y}yfn2nixq-m|H zy)=Mh2<8UdP}7tww`cNNz}+-fy>8-VQNrR!nzv}LrzwTlk55VEM5`1j)H{q7|KiEw z%Fc32Ex#jAgc4NZguc63&gR-s{DToJ{BF}-ps-@Lq;08GQRxhPm?}JA;FX?{_FzRU zc#NV$ohDO;phYCHOjX4wgtU3KrQM5k>7fwHbXX zTEsGuZ@#(a^-y&!c8kHLNBk=Pjh8dnDtEk>L*fny1TndELF$Zk-OqZbl)a%6!_>yz zqJUSkSy?RWskM(ZEJYm!mSoE(`OYJg^`W?0Pt?Ml}_a%7f{ZU}iGIYoIYKG-~EgqkK4Iq_%FRt5SP8uwP{wo-;Ql~B^wBCBRvc(^fI>8WBCJaaNOzxYC(U;rmhHfI=+ARPHkSC>rHB;Xd? zU8^Ysq9jHW21A4Clpz5Lgq)pH3K{w(A>yW1fb#lN^i(4Gc^ul(*A~YGR>u=ARr3{4 z%)G&3L|YPsrMMI@ir@+G1yX51PrWC83?xxZ`W5{Y$_9WYjv>$_OO)rCQ5zFfsD}kD zxs35&94ixD703uH$AxN>K?JMm?M4zm?Gqv9TKeNhTfy{ zJ4o$1KreF6xu^RE8z@&b>j)V=d%)TRswQ= zv*hpkbp7(q{q<$;~9x2Z9ACuxN|ArK2`A}QIy7)gQ0n*Zh_%P$~;~5@71l{>V0?b$H|DPePVD)sZAHLrDv)(Gv^ToYw~q%ay+X9^M4}(LG`caNh7z! z7=QhD1}f><$mH*CVOIf;ZTAx*CAgg}rR_MH7GEfGD*QntxIb9@R=tYt#ff8+Tv)Y#+HN zLLlQ175QRo|8Dt8M8d`#ID_4F+ zxe~ws0}CV0VhO{yQW~aN-~0I?$)e(Nms@HqtM<0AfZ)#?q@FtkglKT!$?uy1*lw!S zUhq4@2TUXlZ%ks;Ud}=>lV){E^8Gf?xPT3N6?gO^_(ik@mGflT!0I6s`dn4d_9s7_ zfhvS7$ke#eKe}248cT3y?OQaEjt~3M#6Yf)JrhAjp7zVRMdYN z8f7}waQv>g0a-xaweZypMjM1aQi(uXK=Q9RD6@m=!tX$vd#CmxQv)P$;=6_0wnNm@ zgXlfEvyS zRSjO;fUqi2z%u~Pt~Qec)I}rggQOdt#V~V^11DK>9i~;`n(M$F0{}gF0~W9^25mP{ z5giuq9}uei#7k9v_9YPoq2|tTWgS>tD}KW|-#2#aO0wwY3MoTXz3RrNcnxX3cABU;BV_f?!r&=c&;<5bpS2vpRdRL7W{ zak_#Iwa5%n7v`hM9ntA1`KfY7(!oM*-RvG+vPw!oK@{z!!kYEmcx64DAzLKdC>jix z(`q>t$xzM>CNT#EQHgrdiN?_p0}xF-dkigSy`$a7suZpMU@{V{G~_Ai3P>Lse%Z$t zUuN9DBAf+$I<`m=eMmAg?n^GIzZuDq%^hVtuPPaT_dNi!3h^8U0&+_fckXIMoMK>N zc|}?5#ZmfibxafY2x}T!7jxoHK5KyCH%XkB|5D1u;59EYCDg2r^bFK&j`dE6s_k6j z?5*=cm%3TTYDCSz{D^paDFpY=?74o3dTwzi2G4o$E=>q{7HrKwZ7V+}I)P+Xm#k%a zMkLrVwyuz_1|EakGG%eR&dT=7-h~C?O!(O@duSX;z99+pGtQh_!oAjnt!7V$vKy*( z8#-l#lDh((f;qC=4fIVr=44cu^Mqjn7l6eYJLwDrNCBl=DHw9-baaOX_bD*=!Scp^ zU;m4-{^#Y-5`HinH8tbR%&we?&4qeQbf-4MQlv z36U&aY6^}n2i#=m zsndHUJSuBW<+zWeXu$HH28A(eZT&RV%|QB93MnRKB;%w=F}p{JwCrng)7mTAq>nTQ z@))v0YY)h5;2>~@R?(@}sq%qI;u3gP7D+r1i;0t7AVA-U2spKk=WA2mP{elk2|cg5 zjL3tawk0-wcP$w$uhk`U+jCh6H&}fE4DC#zn!SyS>hOL(11Kol=TBuAD#nu=e}vw;x+}!iT-|iE46@jPy#bB;MS5P`BY$u_EFPAlys!~-Q zZf|Bb-cw##l*SNWqc6Qq*5lcg)-=;na?#!@vX1Ul(@vRd)N@oc;xYD%9n^fOqbuqi z^iMewZK4mPlYrN%QfI1`N>pY0m6RL=0+hn9#0J7(6oquJILVral?0v@gy9ORV!E?RJ9d!W_?a4m4oeDI^-- z)|FA5!??BC?dK6hds&U=jS8@P@6YFsWWRarOQkE~Zufq!Xj)Kd&-9C1OO}+ZNlAlpSn5pg()K-D z9&sZT)?0T@I>Pn$JE%mCPvZ6*m9|wzDlYLF*ThriPjgr2En9^Z*EI=`P|U}!aTGC^ zQiX~Lg;KCdnFp6quD7)*e3?#VbFJ`H&G9-boEYSecSG@)A)@Wg&#*Dd?*ha=frVH= zF8d@L#z1L-XnDwquCHHQ4_W#SuD|T0;nuG%29?15&~TdK<)7UCnyJ>0(Y4#R4s-U9QaC6Y$)VMWHh%a}mI zLt>m?j}9}*2-(apa7j`z6~Xn$l0lqs+;m*o+@12>KTV+5R`T`e#91D@qb!OZNZAV) zgD#e(VmA#>aH|b?<@(70JFTDa-EqxpVvH5?C&^YX)l~9to??OAO$_EcGw#5!JX}7U zYfrmpD#(+i_Vn46H2wJwmbm&*N2D|6^X2_22NStp5qGI`xlT+JA+`Wf7lY0-_*|j*kHRWW{yB zUg-TzxWqMJv>MnS`0`4Kr-*|RR+h0b*rjt+rV#Y>%BPUeqi_g5#4q_)gZUDwl~}*H zJNL=_x(hk%kv{4a`Dlsk@%em3xnQTmTXsNBr?ZJEeXx%U>caUQZJ)7s1kOObIkyEkbo zt^q7%eHx;#Yzb}?#lj)Ep%^*RE}{>dFsEWxO;+j#&n}^*T(R(4{O)qAr!(svnfw@beqtEnkpzy z+TQir4Oy(D#`tJ+nvPyY0kcF$+zgv)vX}9^ULGW7JX7FAj+w{AOL@9vqSlpKdX^JG zH&V})wpgeeqbvyXzbxwWv_U#68euHJ4zl19;CVOtMcr-)ww>o;ysITN+8}%*!l#O) z(lr*R4*oOTjo1#)TBgWkYd-iQME*&qJX|`^YdU$AWmc!priEQ)!K`(ytKR(MX?dB3 zi`)bksNY7jpEA-xdA}fV7RZMfzK8X)xQ|ulHjJ3B`g{+`P&-I!jXix!-*#9h9N0rc znQdhgxJ=JVz`A^xBH3tX5eMU=_LEi@*C$LFpsodm{H#oFY!!}?f38n5Lq+CF8LU2w z!DMISq_12W3b}1k5rHw*5MIVn{D{M$Pe~{z0^?5H=zS^uXVT&4Qq1~FB1*OORiR&C*;sY8VuQ6t88LQ0AKr`RqoEiy{}ZN~ zBu86gNllf%6!y;Trz#sN#<O?X72FHQ7M`T5_` zw~k3w2xSlYzsd&jPy1iz{;NEN`U$|0=o26Uhhb0*@)3f0{8OM9W&i1;=;tB?aQ_tG zp#OdHpMD?QKVPzR3Be+2_AQJPw=S26*99fCE>fSpfwpv1nf&URL!V#Ro3vPUL_hp+ zvNe}TBdc}iJQNi5H7T{+Kt7Z-Of~+eq=tX|yzPntQ39&25aC}%A&$3nv}RE8JYIl? za`0b8@c^Fcj+#+vWVRuqs+g2H1OfJHB(!W4U-95L8maE5OBWDk9sCQ9}NLgMBa!_9P09J|4m{%;K*^f_{%py(EjoFfP~* z5(rwU`VyTIqD=W=w*=#w6^4YPF-@hTc;rTU76V!)Q_ztUEfbnPA7TJfK}BPkz=D1( zrVC>x>50EEDpNkjCiU;C+|)XRgv8Xs!4r4g^4Z1<-C+UA*lrY%F9xzXg`oP>`fql( z;(}+MkSXoE($Jib-hLWUX^-aRqptOku$P_W5u`?@Yu$pW57yNS?&sWKc5eoN`PS2F@ml9iq=hFBrN8l(bZydOFgM-Ypj3V9~4UB@TXUK7tM#kpw&(Cr- z?C3FUzVsLXw?G7nvQ@fQ2nc$jHa8>y1_pdFOeFR#`hiVl|1h1N$pk)o!|#pTTnJ4Da8Z;`B+}7^LS7 z@r4P?_BdJS>d7Gzf6s$Qq=QGE?b`Nme7H%F!SLZAr>tMPLiUUD{|qovym?4sG^{M} z*fu8uMEX5_1|X&}wrcfb3t8MFdwg5N4>*Ea^zR$gj(d6oCO=JH11PJKUwM4P>P}(& zuB9+XP<>@&Is&C9%&>dIs6W4kSIguRaojoy`R% z9VU-rxx%owb4R%6Q7ANdqB*Sw3tr!2A5P*H*^EOj^cHrAP^@!d@GIAwm*lBUV1n;5 zA9U#ipJ^r6$qpp9m0^R*7BfTi=RG|lAS=NJ+^OOFUy~_?op6Bh*O=<`D0p5=SOY`q zb)ZYbGnXO}2jwxZ;a)*ahzhl#2ge*SW4SW`Xkl}xHHzm{@@Q?gwHu^Sm!?to)z8{4 zJ0=d-@D*u+ziVvL_Vxw}0>b3&;t&YSfIsO*R06V>%_PYdYoV)7%n?}NPw)GDWX(L} z1_gjId1Gf?q}@UT7D(C;Qd!?3CJ48LPHSy3x3nA#FbUL;?HvcZ7O^!X17{9F#bJJF9O=XaOL&NNL0sHZt^psF0zKL##H~mR-;UZ>BSc!i38*Q- zUSa}7?$JqiOrRp@qvlhE2APtSMHn^bs6_`LDtJgq?H8?qjdFUZUqz**&% zQ|M;w&+F?leDi!K$acef@ks!j_PUMXM9>9gbk3Ytxi&oO9KC^CKvm6lj6VS8P}*%f zoZ+A!nu$qS8~XZRk2M{bA<| zMuRb5bgtbz&+e9PZKS`Z=&lpZs&cF^?a3qB2cKWjY|fdg#4~Hr;;|)O()hwi7sI9+=V%+lAkD77-PpzhC{~-b()sS9As4h5;|nj~LEloIGxGc$%PA%_4Xh zU7ET5WTz+Fz;Xvq@+ilbJ#ib37DK0=oGsM)Y4UQ%E5t+v)>LZA-{c zzAop1iqh@r^|Ps_`l0JkV7Q?oA@6wAZN{S~eMIIJy-+@p$>+lSioQP#kH-?|zWO z1Fi<9u}3(XL4U$60eGKxMF##(jU)HGJn)7Gku^hp4R&oKl{bTH`gheT`i71Qt+_WG zg6s>}bxmb6Kf#+;E0b$#&x2=yRj?aFyE0|lgVa6^|F}emgazfQ>JL*@4aQ9@-8Y?a z1-|x*P`VFJe*L?b89Mii5fMXPd|Zlv>&D*q(tAppKQ{;N3^R8Dt4QmoH(bA#yxSqJ zJ-&+QP5L}HM%2UmvX7gGbRGBZ>V!{e5|}@n&Z*GcXUACgvp?{x{)ri_%xTDjDrHq} zTKp$w)H{?#PB3Vn{Gvv7)xUB^>`!AIZmU^$@p(;O%&Od~La=f)epr>K5TmOhzdr3Mlc4sij&51Z2l1wIqHmO-OrFOle zMleAA;W&54rl)pS3wK zEW&s(NRtDOyCOfU7nKYU z4QHqbfQU1!U8Z1;9SyEUsdrUYHJ#sEnd^5yhwj9wvEv-Eqmf+&de5rQQ67e&^q_`? z%~|3b%g~VxD5icjaLWvXCfS#VZ#(KgKZpj(xoUmqN#c7@9H-Ed`0n{-PW7$nGUFBx zASzjyxwhk*&z)ryt5Es;I$HM3?L{<&us(;=N%EO`KmBqM#&_7 z_Vu1Kmih%zHL`>byPf|8Lm9A*?kA2n7yDwTk z?@v@k^~Hr%0k(gm9ANuTlmm87;3_X6AH_h59a^I70> ze64+7N%`(veFe+O3TTT&3-<~uXIhW(&lmvn{;|W(V`@kBm6cOwL^|5hv}q*MEPzme zrE`gGD#nTuyG)&+>?I~j z=ha1~&|=gG2j8awFyj-1uSGm?OtJ-i-U2QOe!SoN)dCXuvze=i?)BX+0 zKt%uD=c6FR)H28!!{>$FWT*n0CW{^4$3fZs-0fn5h4vPxY+$Q!9ah<$`VWc>6Rp4o2L&{t_M0x{Z zeeQxNbsKgPDL6Fq=dX>Z3Zt%qOxV9ldVgn^A}b_habj_4c6<)4MdVcT&#S#gDe4%b z#-*8PB(9}2qz4#G+i^_npdEC@lHwdV;?M~sL`fLvaI34q-_@dijZ1e(xl@|V)7K_l zjSq~CgO0VS0dBHQv5>;`r|8g0KVV#GhZK!uYS@2jI?f;Y^&kiVflP@CoqKL{ku?GA zzWh*2gs*+@9CD-^Zeo%^5nO9RII+~K0-Aa)+q+}{6{}M1x+7wC_O4~o>>lTnk^%-M zsYWgg&ejd6jU#FP)Ss|_{{mYuVfejnM6LC_MFJ1G!WaVmvU@z$p;xq}s^(D(B3HVG z5#zS{zz5bsST4uz9MW$ih4QwDu8Xk~o<1o4ef^P})&Oo)mdXvOD=L$j`jd_asJau^ z1orCw8ALVVY0k4cAnL+jistDO!{vzC58`5~?pIXvcvX~b;mUTIo9u(}H2X5^`E7BK zFuW&lxYA4mT6%0@P?*h>H#`X96a?_+k`p~(3dKib{ZJY=E?PrCAnhcDQ$rLKjmrid(q~tJMu}$ath{ z((2y?-wEG}BtTxBH`Ww$9we@Hwzr-qC35BD`A7?*DYN{61@gK?Mf;(~%e4V?kH?I21JF;Vy97E$!uAJ?44=#neA8Q?59r?FxcPXFFA=OG>P7Kc# zr|6~mr4>e3iEZ02PvZcD_Z7!>*Je@@W(9rgGQZY#;%*7lNkIHPOO0ubjc=^X7j#8@ zb>-m~Q^n4CxgxfZc;ZkCV7?2)c}Y+^3vTn4i(}*UKv$qynGxwbNMw@=!Sauq*M<#B z%uAy-)%lAKZW9an6%8xUNJ`54@h<^TwhdgKM?!W_9Iq^35cwtWBXBtr;oN#a)}w2) z19%V|>&Cch#Q6!DS4Zi1YLi1{gI=OhK7KGaFAaCC&|v zXalSAfl6m}hsM)dLZK2BWY^0-==07_PWeYm^;K6p1JSYMmK771oh``$grc0HJ>g(G8ISmwN@B8JOjZigXdSUHr3f&0 zMx3(R6`Yd40;A$ZsHO$_X9 zO11AN72tm`_pItT1D>4FClCIh()iUM8!#qocJ_~qIyh>J&KpM4jLR-DcROIKUWxGn z?>JmG(*h9;lL3zH&`tb_onKGTXkAGhsorh>Zw2HqnijAM42ba4raYpmH<-rVgcuz zqRlL=dSFd~RyTA_0L_sO{)rwD;!!93c4QYkY4`jE_tnkZ_JW+b&K&bQ<}nr>J*&a< z=HP1bDfeypebpPI>qA#;Cx|AzLm|0lG!Q0srfv7G!Y&MGN$XZhv$U@%5{Z+>!Mv<|xJS0EdI+x5ar zC?J)Vo#IvV*xT_C-{uP|5*IRxaeeqcUm0)HX|Np(%IJNYD1Xq+cf%jDlRevEeSO@H z6SNs+)QyUxyy)%Ejr{2=i+_c=g>2_xJGhE)^Me>1B75M0ep@QQt10adpbz-{bpEo1UxC$d$y`EJ> z^0YtRUSLDaf4qk%>>hku3-Y>!B+EVeJoV^|~&J^I?p{Q~L19P*;8hvo(hiaPZ#KPRn#3|+2=yezR_oA`0`qX%2AVtdSt zn~W{_p`s?=nd}Qdyx&2;dtyYmA!jvi3jbzV0Y!M9uWrAeW9+xfL#OI=d#xYBv)8|VKcAV|;Ov-N@7FtZx!1;k)h7rvBU*jLZgWM5xjKI+iW z^cbKU#$-nC89m5%vKQka89qyg+`_zIj6Dh4BGv$rCZDDrS-)praD!DzwTCiyuIY`_ zi!!d1_7#S*c{0c`RRD{L+JCr z`3hTLW81@cOH?!!G#PlQpi_F#X=wXAi&D;AM#V##!6t!o5d?x4?2~Dw*FYM|ct!3M z2Ik|1>xtox=XJ-gi2hCxUVXhsC!S90|97$b4Z20a`+}#o_i)owYI42mM=Q0*;%sTz*JBAiJ7D0Bg!D_SVA&m=d0bxt0-Jn0uKhu0t6z5n>rX``Ys=%w{@kGg^2>E!%7m)UKP-V@ zIk42P$3IS>6)5{XX(}UB^1n{NT&qQ~B6PMb2NUWKwiEHAiYm-EXh3vdW=4UP)bD1G z5}Pr=3JHx-qZao^fw^;7xXS8#3a#uWQyeOd$j05R_+c^=Dzb zW(j+5{tSn2%*J{2(z^xX4=MdnJ?V_ejipD^;&H$g9sPg}P3+@_hJ!>64#eNqH{qKk=|v&Z5jR>+So#YoLR^P*E;7iOKcz&5Rx z?^7p~hJAKHmzj;1nPqQG$c{SBM9y2v8+7`Vm(=Rw5fj3zhjyW}wkI*D3TNGUY_;Q& zf5A=G0ym^wjbW3$*{c>6si+ZQ$9xJV&J9~tuZgJ?H*I0>BqJMq5gm%vYhNYB6a0~3 z)`ys@mHA7=aBE=6b;eB#O;%re*MoXJl=V=8h^Qx2H&r;hP9uZBp#&LL+JfuT+UljP zn#n%qwkd<+CH9b;xGD5lJxNYj!K5xT_?ClMnRl#R*M};iWT|nXt$1|5T~q+K$5jUb zjkWj3i+OPq0m&_<2g$n5_tlOr8kH!k>F5cPw8a?gz5MM1KaDS@8i#3!QGxSAdX-)K zgdpX31PRbcSXW9?PkW3@>NFN+(zKE%v62%E@GU6>nzO9dqp4JW)T7V8Fkj6&$BdAW zy0gVWUxtK03XUCH?bL^kI!Q=vA(3f5??sP%a{^h7S3G_M&rnt}U;fO1ek20du_|SO z!xRiQAlei~K)!gR8!L(b4)<<)32)W*a>}3};}Z*^?Tj}Kp(^B2;$=EPkXR^aG2j#Dq? z#z>8P(kpl+9WhmqgtyWgnRYp93J!-S3S1S))LU4{2Md4xqre(&nXG%p?62aL+N*cH zqoBHke$7!LIi*73WNgNU)IepHQTniYGNK6%b&>%=ux-{4rn2ag?O{rxu>?zz@^aBq zXa|9W2*Z~BBu}qWrPLuKi`dN#%O5wLs9POkifzK=&~{B$>ur}Iahd*&Kh-OdZ*x&B zZ5#}s%Lgm8ZrbR^oO|2a&fzZODOG?MeAw#m84dQ`v`d`Z;WAuB-xJEpo&fQK>Z`@A zt5novZtq@Q-MdFEn|i&gJISA4Bf~>kCh}(?p|fRn=8p;Woy7=zrrOSE7Tgb9%Mld!6L?mnyVz96wa5%g_7Dc z&%C9WbUe{6ZMHad`rLIO)SjGVYqG4ZBE}uOm_4I4Xs0?TSY$_R*$>!u-oxBeFm-ly zhrb`^V+?Z~B#bjAWpjMq;I_T^B8#^6^8XavC zOpZk&WH$ZqDTrzjXOMja!dX z=@TeFF)oH#7O;-zB6#bw^h_3N*mbR}c`oxtUbpEZ|S!E7p%{fW#{~;t{$^vb)<23^kUI@ zvS3{0!u*`omH8p2bZ>NyAvg+c z3=xrySf?LrEzqHnTrJwC4I&tG9-iUUM`b-Sr*GE<{Uo_L**Z+#a`Rdn8EJ{1&D$Ka z4!X3PoUX-pD1@zt!9T^eb4bIcO*bpi9-Cp;zT$|=d-GT;WDmwCM8xpcQfzGnLfq|| zcWYkv0){OE@h*&Ia^5y-=a~Nh4azR#ci9o3Ez#>zpy2AD#kE>naZz$|to)qWzK(+p zI#p7|ieAM)n(m2y$g4o{shj!j{K73w7noH%i?hnAzG zV^?nAO=Y%VI;UT86pbTx?fEU)(7vCG{T|QgH=OB*AZxqF~kPEMjSvxSjbpNM} zv`{9GQ3#rPpaldR$y$}rxmF6XC;-e-T@EbsGkt-EtVBM8`*iwx5Mw<#ku=mP*$vz27t&E8i zLNSr`<1nQFf*Ub#0GtM!m0#j8svD7u||aN-?k+-R1dW8=PQL+lwu4?t6-USaFVGzCnsC+o*OG8_ z|CE1?_{I#9aa2eDr;HfSrJQa?=`ZpBh{!2R%6vo z&pBP6h=mX%Tuc)ME!m=3-6bg|$&qGHvptu3opv92(zhZL`? zjfmcuDHGUA!V4+-izU@8UN~k+F!~WE>(;wi{nXFBVAd&nVp8yWPygE8%Vg=Mg`Oji zdH(j)yW%>`+(LZ;K3Hado$vNH#_c*_!wBX(9G85j3f|YbeU%9AvQ(?N?)8$N^gtNi zcNmj0lo8~I_2dCiXor>5iDml5&XDLaebrg8wY72TO-!^>rDr*+f+#rl*?S8FdY`0h z_3|^60JXZ|jqZw#^$WNEiACA|m5*sB6v??nw1 zE;|0{sV)`EH;p84Qt6}-rNT_cKU{ycs#_Kfc-AMq6+vw;wB2f{E0%f^rU7(p^{>l5xU0p%Lgay-^9!RwryE@*q2j%>|k&?8ESbkB%0 z2uu7TD%YS((VKdqjp*6B+b+{LoWoma>ywvHAyGbob2-DGh@ZrvE8DzDyUG+6^(aU0 z>5>UomCDpH@?pS;Z)0OdwZVs0Lx$8)DN5`yyn32|fs9m+s z^x<8}H2S!zANF38MnC8Q+!6;*-Ci;}L9KH%VI66Ea|d=?idS1ZUsu~-dIob}5&aiM zVZWw6U3>0grCMLOKYA7cc9&b9`bW$kx7{b1a(d@D#cRKduHe7GK{;sE{$0!BUt9Hm zo$=*h`Cp`t{r?`RWB-py9s9o_b?pBMsT=$jsQ*{Q(D8SkcfGj6KN&+GSl^`1zQYe* z)V3BE;|yd4=lw|uzAJ)ov3><~w|7dMP=gMwoEMEGQ;q%8}qkZsY2sBb8acmX)L1ub<@< z{-<%d)V8(=uaF`G_18VcstaaR9X;$p^AOxYD5~y}$x{+rHUy-(=!4NKp5=dT$He zi6=BsrzR89%#HEx1(c5FE5*tahQG6xj<+U}C0vrnGys%z->5b99`v`aG!885P1Nsx z%hOIq*DiI=#ICq=r#JwUo13-)!4dB~tg zNXC491&}MryTcXd4x-yf(!@}xvbI-e`e!9n>7Sjbl5pb@e@f6{*^@D*it`jSX_>|b zDr7IGn~R&dXWh-Sq4i{tUkRC_dwi?brBWE~;#Y)+9w31FSb1F@+aqv8Ysz1@O?E86Q&bbbe}#-&a2C^Y!x zfFM%qXhy#&A=jGdFn&Wc+f#gVsZQ?8{kiAoV16rQO-hOkR@X-iJL%?OjwGs%5Y19w zLLo}Z%}h=1utWqB)$nInd7~C@y}p5j$5^{i>|E{aJ6)ZJaHT}7bzDeEYK};m+A^XM z&$sfShfC{_XzQPQZOiYklksZxD#eVENFt2$8xCmUX=sx1bWaqRcJgFTc9QV^yHN71 ztHKxG+e^Z${m*pOB5)F3?mbW;I5`jh$&X~bn*W;clZ2P|^qc!$oH^e4s|nvm<(b4a zC*-+gBLc5idACqKN5p^_j-(Oa)HW_8B{kb$?oyR@J(GJ6AsPEmfp47hX`E8(*8JC1 zto#XL5}qZ%t8oey8Lw=qRqbrO+~snS^T`tM_Wil|XYjpP-p<|7pzK-Va=GSmsWbMA zdm%ZBp|qXlapIr3a+mDaMbDNbJ~YyAFJKs&7a~}hK60J~PBrP%_s8M9Ngr=?vieE< zkTnRvZ|;E(ayL#XR?G%dEG9`qny`n)N0c`6l|6c3eCp6M94tHdDIe9;0Rc9I;BUt_~=e273;R2D%OhDR6$g%V?5sS z)`F8obn=s=lo1E(K>%7b&Zu@{_N{myi}a*OjXNFiOBpVB_GT*Yr%@?mLw8 zk83kw&|hhHo2%VdHFe*>yE7g+v!^**8l)XbrQ+olVnNV;sv>Ov*AYI%s%1Ycn26}1 z2_65o9&SWhYelFTeii>^s0=&M)7?Yi7DHr|%-m)3ffdveXe;EMi0C?ZM+49wRQm0x zC6S!}Oq2tb%-+->D*FIh{%O%k?3^qXI-BNY{QhP9cSw$~3pftkss5WK4WQaE1z6ah z8IysMH2!v}$m|_jErL+acRf*Ruo5N`5MysfM`)6#;{+i2ERpXQ-qmAb2M ze147OdRbC;=H1Q>Wc#~kO>GJqHK}{ZoW&t~_Yz)#nF6W`_lOc|cNpWw``8C=DCjV$ z3MPJdXG<*%(U+Pa9@gcO90=3gR%=wro2_VT?m4@cqFldQB~g9c!wNMimw;;r22Oa&Gh7a?~2Vs#O%f%aEbU={-hjvb0IxxDhBVV8jiJz6Plu)_oU1P;> z5d4=g==l z9itiJ&AWPUUblX@S$chi&e>dgKGrv2F6i9!WekgR8+z7n?8G{wc3;WT!s!biIb=36 z8V}gu)YoH|9=WQQzOHTX>$pKdR^|ohiNMBH0*L!|)5!J^P zY%~@b2n6%vKJCJ~Q)qKdd^0b0X2^+(LXM@ZOsWK6`_b6{mQ%*^g0_u>p6%a@z6O=YK(Qar+=laS(0u6Cj2q#3JSM>-~T$!r+Xo%06kM#o#GupW ztk_8W7^ZCe4I-CRZJX~6WkN>T8r)%8`-wxWbtapLi9HA+fy1p|XkjW5C?qy9hj`S{ zW$HuCvvVn+SFtM9i6cjTxV1py#lZF-H&Q7{Fz5D3$0&gg!mzc*Kq>3wG4NMG5AM#+ zghTCW-8|L=-RZ_!)Pj&EBerwIIsG1mF(|>{kX3%PVRmM0Dz`SHE$V=#A_o8%k9Imv z+;^U!Ayc*KSC_M{q(^V%mI5mHjTDm^CjFW6Nx05_41ypG2wgeM4tQzv@OE7`9Ty6( zWPD)kVPCSHd`67hHuQmr+6sTX>;v`34o`+r5cG*`^cr`lT~Ox#phG1_)Yt8C3nIdG zE~*I}C}inEmsm&I^fJ0HW=mP)@oDVskW}HYAwsjl_)$mN+?F4^#x0NPr+Pmf!g&s5 zo359-BsA)X0mw+8CSX`sx0B9UMjCM`G)7IPHH<-Ea*npuPAADJR@1<;6rwt_tHjA! zbg$nwu#1Rkd@9g{7HYCxmlnxuNi*uiU&J*RRdL9dF>i(y-Q-;RybqQU5p_+~0^fvZ zpuWU*n&2={whb3u*>$!RSO0)icH!OsFc8I6L#Edt8snGt|C@A8WZj9u-x=U1eqW$f z4O)oXfDo_}=xm$e6h$|8?~V+&I?@VFmlJ!uT^dJe9F2tcArBbhk@1 z)tsRb>OLvcj#g{S#pg+N^Hnqc6~?7OR8#7^VlJ%Q+GZ~RAdDqzfMHHr?_dLWt0buO| zwKAl&R1UBgF(|GMfVt>0U)BB=TViGoa1~>gRrn@0ltbr`a#bHiA9kLPQ;JPdn3@qa z%#bOI++Sn|Ncvyw!#wfds|rjb(8NGca=2PbBo7+;1{E>Z@8?HQPLjQCM|j zM6a|V&r$He%WyDct+5=~A4}@>-(MU`|1ujMTi1Sn6a=!K z@>gcY3GGRTtEQY<Yom+&=9p`rd`ScCC*`NTn7z}u$p}|{jEo- z>I_J7%)g44)*-ZE&6h0_>LTZ;pbf@kLMbFaCu4h}Vh1IBoJY?|(JGn6akG)N7E3lYbl zKRK4@hmGw?MlaHnDS|tZrG4#o6d=2wUA_1(>^pW}OEpO|5cAoi07?vwN;w(+ChH_R z?i(_TD|3cemOyL$^WHjbDv(9!nqzzpdF{hb%E7jd(T&vXt%~1pWP8$=^BGHj&HQc` zh0@4g%dnO>2CbniTR^2qkYGM;Daz|XdiRMZkEE=Qm8KsdD#hIMo-RCtin$Wf!i{sO z?K3E#rjsztJ}KE+oc5XS&^zvgGIoXJc35JxU!J1dZcTDy_4>!Eb*?jQ=A#Hmo&|?c zo2X!onqosPCN36GtcwycZkiLwHTKa=^mhfww|TmM5)VjuVRRu4&bnKSdn=8Ep6>DE zEpgZU%&YfEJO(sfc(npew3&QfLXqhsr9T>ri-^GVGJ$(cgE++``!YaBciQXD58lmA#GeL9)k-7ji&0og{IC48t6!qE5*zN zgQmcw7EF$VtcI7phx}BO%lVgSE`%XHMW%=4U*p(N_J7!5iDh!OlaJ**1%%%zTV0Nt zke6$C&ohf)K6rx^QFW!MNaQqJr31LO|Y0gGI_v;7aLNTjJ!_PG&E1x z*ZU%up-6{1D#|)oMZDd7MQ=Z^`LeC^%y_X{%w&Pdphs;w!OYgj#{1-*3lGd-%fUUK z$Wo=&uqOFaGZwN@(hnszB{Hau+ zz6h1`YwG$sd+y)q77!`3{I?yJ{}zQXGcf%xYjuwQd!i7I|5y~l@oz*S9RG?>33StvL2c%i=B4~IfVUik=eU2Kw8ZL@gA!?oH1Sm+>y z>L7oc(V4T=Z$r@E9%FazaKYsJ*Q)h&9}c3b{f^|G%eZyQ6fj%-;<5kUk$pf#R2u|I zJy#6Z$4qm6R@|=?OLall#4L(ZVJw=E{K{q$uF4YZVjL?{Fq4;N<1S;(5C8V&s`NIw z_4)nzwkAh6zBWFM{o@!?9mrh5iV!FV1R*`2BK~FDY8*PN|GeCJKLLa9w_`OuV52I$rM!>Mtx0R+~W z^{JOj9gG>u+jbC_xh$;bJchfpBgnFX@Nb*7gK3WtcME)RK6w|O(Zu-IUMjgmito^8 zM_n{-OdxFdXmpOdEY{D?Z2y;l=O}K5#Fj8VB>zQY-J-ZZoI4!TkCDp){;&ng`VV;Fkf0eFI(jf0z37_j0uZIv?Y{E;h_juDIv(_e4QYTshpwCLSY#T27Q1uw$xj2#h_)#=4*U` z9o)T`06JO9ugXz|M5olb0gqy$(QLKBgI^p9ZGUwF($6hUse1tuHnd>c#LdTrOD~;U9@oIQWGcW;}Vom|Sr5WA91D=neP48GkAWXyUUi;WY2X6N)6J z*UfpR7%9M~T1IK6tW4soI5u&Lq<+ZtLws%iV*0OsGn2%kZ|)n$2W~7PCtyLEAj3rpF~>TbarF zna7?WyF*eCf1JOvN8IIh6X@0nn%KD^gb{Og&Xr?Hcebc+<2)D^4mh`8#i$@IuN{v# z&x;J2DXX%U&?nM$k{|obM7pYFm_5CZXQ-5Dh)H1VCzjmP7T1m|J;t$vEW9rQjD%jG zAmZx#IS+78Wgvi?d=vWY5(VC(1^Z+!^el(oLL!H2b;QQ-V;PyCW!eBmv!A&Iwx-QO zqS$MP7faasJ6;o!SebWoKE#R{eYe4J+sV70nf!63Id#20a;0d--7-})pLpVrYezA4 zHWSeqbBtf}r=~bMmTiIw^(5Cm9;&zJ!b<{W@|=hquQJzI_%tOyz2`t^y)+;zR?3OV zwm|*bwk;VRUs%#sk-nBO7@6Xs03hhFE1K$YQl%L9{3$^${p@JUtDtX=VVsW?qok2(9CTp_tC7V<=M20Xlmqvg zz{Yy?PWKC10TD!khR5G6elpSEdwG5h7Y@Xn^ShtOYj(ZTe2KW=K9y`ic&1Dd0`R18 zj!~siCJtHS4a2O^_6P#rZXa8~ZMpuWQhKYNBnJ-VMrWFm+Txm6CLRdToD-OwDLsgc z#kXlD>57*fXf%Zf9e*tYK#54hUJ;*}Y|XhFQfGP6ZUHmk4OUL}`m}x<$$t-TeRF=i?Tc3oMiAVPP)%Z=JrqpY`0*WNg^~sRIsO;{y9s}VZ6`3(%d7^W!Q80Xt6mC=P7j6@V}4E z6BVy3AhcPj)4wQD{;2XT3P@OFj0^Hje*bPPHYzDsv7zbm2Q)tYwX##SCpN0h?1@C} zs{K{`sbp)YnpQerY<=KId}FkZaM#~2L1MF*yq-6YRqb|QP|u**G$9z~6>w%7<zHOOV2DQ&zL`OG)msoY$@W!w#O*yxIM61b;7VY5G{$A&6w zYl}X4OmbGTwBM+%15x2SKf6E;(hat0Sfro;U%<&u~NR>Q=rMN@fwRbOzz+ zJ_uDBaBI{_4$Ag*b_?58eg*64b%-!O!mSEnFdwogLzM17fLxTO4Q#cpF{NR-$fY!g zqL!2Otf`DQy9AX~#iA9fVhf(qmkQq;T-p3{w2O$qUV7WE`xyKpsux^Wg%_@Zz0nL7 znmdn#OtJuS8@9TDe%X%ub;qWX#IxM&C0B__)G@0J(+?=LmmFC5;qXTT^1 zDyzl_b~+2Q7pFSPS}ucxIIp4$>8E=?4jH%2TEEqs;`T$Z`7K!_+kwIpP|QlgI4HEe zbfV+n16XWRKXfvFectjz zo^0MaURO`&mMe-ySvzE9%H{_)7ghQ{g!Q%ro2#1SvLraGRufqqbZ3>|16B6aW#g5% zEIAWYT^bC$QJ@!fnw}V&5&P->+A6DmA)i;~@Fryee>&9HL#>G0hKnL-S?E=j8Wne; zaa#|Sh+`=%GT+j?^2rz~?`b_PIGz%R#Qf|s*T>@E*L*HBWO#iWH<%@$;i5yb;VI*G znjnxLQCx>LEJ(8<=Rfvgyj`mX`A>a>MdJ)!8JH506mdluS|PHj^LJNGn)Lj-*rB0t5%@FGr$Q~)IUQam~fnxG0ndxrr|%)Z`Bk%4QlQ=;1$f+0F> z7D*B9Q4~7K@?fY>j0-tAimkQnfFB$hBnfhznG;%IsTa!bS?iJF+ht=9xqWnvc(&(%P&xa_1^z9?f-v7Wj!?7wOxaKqR-Uj5Ci8?C>u3`KM@6^IERPWq!eKN~mE;Z}`FTc#jS#NEs z4^LN`_2cLlPLVyclxDloQ6&f*A|-A<>-p}hTqjDELyWtizO;@a%f#S(M2xrLSk1O8 zz7fX~{6wgKNy)%gX)xDQEsxc~$!m;rr0BuMn^*gDW|r8Er+UBRg2}!6nUFXu(5(EAjaz^2wCqUZ*PiWD7NRZJOUDVcmJyTH?jx&o-J< z7>Op4FD}>nJkXBQ#R8&hi>IfZad^}xCy!O$X3jGN#Y+c~;i!wpEVA9ZD*CC#MtZQ+ zkMO7w&@zlX5LiQF8=J;44=u3L9b!SrjDt-HUugXHM*W@*!3Z3Al0tWRBN?FSrC&2Z z`CAFdvAaQ8)x#7MhjWpdVD4EGc6>eM26eKVtal;noO*L^zPAzlL5XTf+^$5yb!*{i z?$zkMbh8)Fw{Qoj*;x@4|fD@bvG&gO%Xr$A7!^D&RxqkNdkr^vu_%`+xNx9SrL|+XQcY zvU&TyNv_zYeQ~|N-~PT`S9th$8@GRLSpJ2^8912#x#6EN6a&ZqJv7eoAER-Oe}l$3 z{u4A_s6HCA#*WbWM&%4Q0~gs2B;<$A!SBamJlBH*=9EdyPY*rkG;%dvPDr6pXYn)_ z?K-Ypds_SWXI1gZ=`LUC`JteF=Iruh{IJ<=gAcng8jo+|^=rO4dR`0OvpX6vZ)(Lw z=*{hO($zJ7m9*CO0w~>T-4r~1@S#1;I5Nz6Xrq|sY$K(^m1fxQ-y2#60_*j(c7Lz; z`dt*G{Pg_r1lWW(6*G0G=R&#ddyNvm3fWDn%T; zwKuUspE;1L9>|uJHp%M*f3V?z6g%0I7@jUhSmcnVI{lNsJjzY_Fi2WP8igz>G0RvI zVkwYzm`?`jHovgoV_>nGx!VP$<6tCj(~L+R_z6bR=FK>8Spfwbqf%_|I`peQ5LC4? zySF;_`o-!!3ws@IbMr0#D&3%_V}@+=`(T!sUC{QqSmm|zP#ZMEaxUVAdulgT(RJ?d z*b3%3#Ii#ZnSAsFL7ILXU((aE$7Au)X)ie3DAv=|Pa1Vje|r$1{ytz}RD)ia*sW?0 zHY9=Lj%X1?pU@!EDVcLmtXV;N1`ZcPE6ygOcH(vR7i_WCRVGlxY{C)5oEOw%ly=PF z0;&PpPP3)+-%}6Q7^|bI++1tu+ZenpR-^@@@GhhP?@40I~_y74i6l zg;~>t#7lC72!kQ!3x7{rl!W->AD7{_J_d|7qOBC^OBdEi`l6eWUDft4`sSxj~$a}$2{ZO=f3^vt&ws81LA3R&Wpvt7~j&obJ zJV!|wE#D%KgT?-2IL##7tgxk=YeQt~g_r+>^>emk>;$=T`m@S1-%E@BFN|gEzP@jY zrQU8j*!-Z(L^GceEyl4cD)k{q+-3>9SQ4p5hGBL5juC#9c=>@(l=P=Z-l~ z?(!076I)$JZ~_r(hZ2)Ni#3#NUvu_JoP>tnRkWcZPE3$pCCiRW*dlZ8v84Zxx_63_ zt=Zaj%bI1|nq?caY}>YN+qP}nwr$%s=BaP3z0W?a?bX^@xBtyMdd7&+Gcqr-MLhXN z^yc|xO;Wk^nW7H8ZTU*Bhm8k&hvm9(qLXyMU3cr;S{A_~UYbB94Sh=Pz{N_Xi_OC< z-FUa2w8oklg@Bh#)G>C2`J=$)(j=p&XRwVN@Ed_VgvT0f$14*7 z@%ODoNkysi{DsWV$~hR)h86QN&awTLhn66DQWecH{u>8f>f;#Vzxh#q20@E2nKlCw zAv0AT=>Ud}1@mJ1F&!p^3kMA>bJB~e8Y#lRdTpZ;XE#U!R37sWYYb%7>UGyLwjW*Q z@Ozl|xEh#AaQA5DG=J4uu%D;hHKj)$(>!Uy>0b^kDW1Tyiq~hz7FLq@(LGH{phXtN z2&cj`&tzu$UKcwlNV_xE6vRG}hld5yn@<@S7<5hs<)>3fz#gM_S0XssqUfekL=cw; zhp1WB^)o~$BptkV)aE3D#VyRL2fhY14xOSO-!(>hr?ML3Py?c^%YW=bvoDOV=TTS= zSy*GqYLTwTOU>W@?FSP6jcnX(L#umu>6H1j*d{%FA?Ai5nxZv`EYeUR{rT{iV}Fs0 z(@;2mR^B=Dg5gOoFJiAJC1?CfwQ+=zM5%hru;af8$r<5i$PFT4m0Qx{v*2uvfR-KUXHztq$^h^c)kr#;aUcKSW2j3W92Es1MDbbiY`a#3{xi&p ztzHFf9B7VWkqD1zlH>fg4lhJT&g(~L&kc@KPwhCfJUq|$b}K#+n$KIsN2FIyJKomE z-GE7?%~s3b_LmqLh==P(n-{YO-XNT8wf{J2_}{dbo|TQ^|D7~2(EX32y$p2!E$wBX z`@d-~1Koc^dw*(X{L4@Guahqt-{8d{O_}JZov`R)0}cS~>Fgs`{OZJZr}}(&m4;OA zimvZCSeiws!-n*^yWL}{rS0Fpj#|We|0Rq zO-aJ+9TzeCJ#=*6o;~!mKP^s_C3>**j*$J1g-{?v!X+nzXXYCJ2UxgVjXa-Dr*N0n zt)GoHR%kyMch2GrL+S!D>_ezrAJtjxS9~j~NAknb&CO2F=C+P^sSp^V%ewDVY_BHb zszxfNX)8WSsx6#n3FzDr720RRJWl#d%=W1Rcw3l;F7%3R)#;omZys_j2=aJx*@dJK zBZW(>AK}(4CksP}TNbO8BvL@j^19tgN}V zL-PPf61Nzwtdwhp-$L_QPewc&puaWT;!MbH=lh6FEN(ehLqI6~C93Y?ygl?;jF!JG z5se>+sjKJW^G#V=E8;*iacH;1!P*B3+y+!&?py~XTnJF_K7dlfEv=OQOa*>;XEtK4 z_~A_xkL$%Z3Zj3z3aPh`tsgB`juHwKYJ2nu61Z7|<*pf)HYH$c5ma8)js+B&Xcec5z{t3KkNCM?8qYGJutg(mvt!?@r!ARWJ! zw&i^#d;2;DnPY2|p&En=Js_NVNRS%E6n5e%;-7e#7Y36V)VBM9NEivtC{Pm%&Ase8_lkx^IlfR=-smR>%-WmYfr9&N zmND#!6ceT>nh7iT0fEWNOzP68PHF=7&A#32vkd5%0;1*0Y^`T4f8q?<~Fne1P8u7<9qeah9o#&#D{7@wL- zxc((jaz*iDB8T?+!!Azl`+Y5+{fuZt0C#=szHEL<_TaiK&MVa{nJtB<8vz-H> zb?puoqCApxx3YfCZUe|%>xN=kKQ$kNr+9jA+Nx>W0EcropkRD~EGQDX#dr#yPzbO-(B|lXg2?6D zaNOMLn(@0w=HE266aoKnyJTR1Icx5;W`7?-D;A|ZUh*m!nOV0Ape{2#r5Ah$zzn{e zl)A=tdyy=I;vI(r3ROHwejLdp@Mp_a!Jqm-NNyYz5&>wg4iYY|bs=5mnn+=EM1reg^SVc7)7!lVJ1G>Y(XMpg<*>$BTtA6;kF zZ`!oUg9I}T9@B$(R$@#=>WB1=PV=v+LA_GoZ$(X@=}p{(e4M1-UnFDoE`tLWbCls7 zfFmr#c5V>fDE<+*p%B#w?0c!C*?hu8!y7`)$fbk zjO}npOD7&UCqII_zQjkAL@78<=-GATjWfiCQ+q-XdnSor0tc;-x@X-t+8phMIh4kf zk!|jTm^o{a$;IJ#730*Cn^)UK-g2)DQ|D1|S#S>E)wnXm5@LGm0)$=9qF}e$gWgoF zN()d6dZ(E*c4~)GeNTK>J0FFF{>ZD>?t;UsqP7%io#Rt6ug>Uoz|W{&)p>7iIyaFI z5>tv4or;eorB#q#E6ts153N%>qd)7$mp#lvRjkrd|G5}-U!nleSiP@zM+vkGvSKTG znN5ZcORRYsiob#VSb(xWRd$72KwdIrk$O40SlBDj%qw*@Fr{JP0~ni8$H*yFtsEXIj_9PzA|In|*wba5-(Js5iY(9<>X!=TfJMW~?Dq;|0OZjn)b3%>K zlykPu3m>YJ4NwtCM4@}QU3kA8%CNuz1x<@k?Ot0 z{<~YVa%LP%CULLsco9O=KyS#|vV+IjqBrR&q&BP$Ad*>xpWL?5>-RGBCZPDX{zWwF z!RlM(sSFPJOjaaGKgz|=7Bb=b7W}iMk#4(t$YvL{>7fmt2*6J5a0qo3>^|sdCt{(E zDGuuf`xD9*y;S8GII5>VnMQGSkXiF0M-8p4#uq~9m5HlTG-mrD-xwu=;8K|=PBl6} zAzQZySO!IMXn(v<_Ie!Bcm3)Q%{RcrxeQUc{OtSk;o;93jhuIt73z6-HKn%15*MB6 z1O8x8k)E(P?f7&W5KgRh^9YKCj5xXf`UA07!kX||j)bp$q+U2rHNv1Q!!0U9UjY!7 zXQW=#>(upofLbQOkB?9aMd8)bOrwr@-6|}!JbTOo-bpZK z+m4b|VJSelQ6+i)YEBD}?|d?<#V$O-;z^i9B843p6^mK~tfkuQ;*C9G0=WF(uNxk5 z$t(S>jZlfuT{9|UI$Uv$B32g;6gUrtsy45u&q zH%*jP;nxc`IRl3qk6A4A2Dvx&ZrySme^VJ}m3PpWD@Q5AYe6UpLC4Yh4CD%G3`gN-yuv2>(s$)=Rm3 zU@{0S>)!RajL6_&M7*`y2jP|Z>-qLL6=CvJvxBhGGthIhw^NhwQ|*F3Fw!@Mjos^K zHyFg{H{BPDm&eDo2+8H+gindhP7lBzsSlrGJne7r>E@oE|FD4l_rmR8)SHR<|D0jN zK=(h6dNa`dx73?~?*FFV40Qhu^}fO$i>7S3UWokKi$`Zx6EHZN~$5h%}mE7)3rFRPiRB`k$!<&`JlaX-GQEL00=snaBB;oW8@;AFB zVfl99)Nu#hYLCBWd_LmhZNXXo=ERi&_0|wO2Z#^;nN={@CyKBz5YHBVJdlVFvjke- z)}-oCA`tzQw9$9-fXK6oOQ1ebbZdH@NpVmHSu}uZuW;+FCa1^e?e+6spoZZh+0;v( zo`MQBsEhtAkf=Txv5)dW3#30sy5@E!*d-R1Pv`cA`Ao`-&H#VFBLprlELT|!M0UJL zzXc@%Mb%mi9Bc$^2QrPlm-39rIbc0EWdW^J>_62Ck8H4AtC;IlA}UQ?mJ_!F3G zeI~uNK%|Y*iu^#Nhoik3n7BRJlR?m2UmtC;qX=L}PxLb57|=fox-G)zDfujW6#G^-|7 z0;(80D&tgG zTlkNM3@E}m>3s5`8OQs@Ki|$M2ZPvPk|gOM!qTUVl3bB`ra6K#cZ^bey6Us0tqQ#p zI2#|fFS7)CD@q^|%*V1Z(m7gABnW>vMHq4_1d=~n%=IibRGE- zP@Z%=KvS+8j`|1Gh^@%mu^|VaOJ~)V1>U4H_*MAnPY_eCoc1pUj45hrc%jf*P7VIb zU@lGxq41_#xY?4Rkz9<5^h>JTSVUN&h2}yJFgV{{I~xzIDgYQ>AGR)5BO_el8gWK> zkuHyz$XYuLZAfu74C?26EEVMw122=!R?D{QJ)ptkBr#}RW&JviTpD9)R&#}sMf-Sk znYfLsoXWykl^sk99_58$J1OOzUeB7B?F=YLt8ab_bnI2;$O#l(rVAVua12u8 zGZ#(o$t5&yASA&wE(~Kb!jbI2$kfq!vIU8Lw9W@BZQIuS7Myi1a0y^Jkrr`pfr5%K zX*6AWrV3<{5qKpSlp%{2C!GOzUM^nFqGAbRzH#j`AfXiHp`%!A>N zF%(*3XXPC`pI&L`BidcqAZ-|338OKfQ03N@8+W^037HS1yHxg@x9TJ?0 z{j^CbL^lxUY}fT1{ToZuz*U%oNx#K9%arE&enulY+e?3oOwQ^xA#KmM?g6btc1Dw6MBot!HEGGH+F{GvKqVpP|oOiqU%>7#{B3l&GN=#g#mi zl=x&5O_{yo!o`AtQW1Q+%k_&hR6E6oE6EV1su%`2l;;OA&;~3qCop$}>2jJ1BXK-> zhM#4Pcj*HS$X@tFyM~rME(3FGnK_{h2P!3Py=8XEhf`TKmb0=ANbA%rUo)y9QZ4 zIB;hMG#r(5e!YpA@y>9_8LttYR2{_#FyQez_;r+x~uO!&}p}4`2unG73?Y7Zx_L9vaXpz1%q| zLQ*Mt;P6uZYPv*7(t3ET|2DA*YhDcZ682QNwmc>+rFH%E}A;h zaWf^ax=o?Jkz^`Z8?9Uy6Ebk={JSJMwM16S!kUGk;y#*XX?(hH)1ytz%LHcC8aQI{ z1bq!kMGV3z8}ZDHy0eYRAefx{T3(k09I4p#&vuejv+AYpiQKrg0SiZcleghEB?o)p zls$7*wDd|*u8(N#&wO%;*r_#*qn(<68%jB94f3}k+(fle5ttQ0r6u*+RaRQNQ?Xb^ ztsDOH^>vz5AS^TTIE}hOCG<%m5s-eAmrNtpk3p7OqM;jE6$hOl5RB4=VL@Dna`6U$ z;Vt`8)pJ>EH=9xbyPuGqw8ayNY6~zWnWWWEn%W9kS0feJw>L}W7A@*E`C9&rh|ZQ8 z1nWH3P$6f9ov}|w#oSSY60LDD8{@W?4weL-2576*sA8-5RSz&p_CTVZI>B-(rI>$l zsX`tV6UIlZsZ$z`AY^gE#?@#6#n)R+nT*!bjaDlaS$S7qqZ?ngO`W)(c7j*i`}=sP zB>Xoj=27Qf*)`{{N`>pQ5{P%#9&z6ZhVrXK2(E_rGo_LU zPh5sqKxyVc%B4mQu7&6OBZInFF$}!*C%+6L5kP5CBkEB?E$AkrQ#VjnQ`mZu3hFT+ znh-%<`IyMpbW9*yZ#PO`A2L7 z@1n@PY5#rgM)jbe zs;H>9hnWHj!eWQ5jbNg6d@5-d!Yli73q~N)T~pLRFmPeTAh9>b8K~}X4qz69yOk{y zc2g#?^4-KOB>n@8SDWUCoO0I^6hgPx%hoKc?7U%*BKlVDw*e+nIA*$l&sB(A_l zqaI*geSPw$K?b7?e-8^$JN7ndFf~q3D1K;lhq0()JtQjbQ%(N*@a*x!;M>1up53w?6>D~FEPe+jQ>9G~E z^`5@dgKT#;a}(W?=Wcnpx}ali>)e^(;aG;pfr9m6u)EFl09m7_I@++IiIr_vZubNW zr|{3!bC>MqSs{&=jQRG&d=(U;FYi;9q`CWHq!MrO<&j*DJuJ$TEK8qtgL78Le!7*+ zA|`#ey!q-G?G(R2*~MN*$Plib?9g!>a>uZq>+tidpo7OL-!&udix_v_y=Bh~`DL`e za+8hQ`qRi3r>;~1_M`R)4FP49<`XeSBd+?;j`Z%&JgEyk#onw0tAFx66gSH3jG%+- zRPnw}`{H6*d&5lKS>R4+8)3gfuInSAM z+&~%DT0?oFwE%PHA$YxH&vvBFE!FAx;Whx6rA7UIk7X5}j9WX9FZ_6*l@566>Sl~D{zqqp}Ord9x* z>eUKx%+`^w5gL9?3_ALo2xkj$`S<)91qe=3e?O505l3h*rIS(_hX9oDzSRr}jO9Lh zTb2x`oqaR%GFCy}oft@^yKCF^d^w&yP3=|rq? z?*h(m{M4>zJDSC|{h^lM(IWnx%a2D<;G4Y*zSP|WZJ||RbS$7 z{yrfwNV|l#1Je}FTbzv+G5F84)*7X*7qfG7_sVZ$gd{#+GPs|&7lE0tt*A(I@vg6o zEF4-F&u7whppC8Kn4N2Irt-o)UNs;xQE_g4;VY3T*;ysXR5<25x?5bcW)-Z;Qi(UL zx!7M%&RF?~x9|eGmIj0Gx_nPq?~h7E&Zvb;nm!%v1v)=QMXdkI-l$*UJ{hdEdjtgg zc5n^%M{a=S$+dOGXJB-v+!04Cp{hm8=D{6Aao5rrm-FuRV%KCzq*`w&;IRPzpiPDY zsD2v=T-KvznQ>rM^5qA!x0%Zs_`RzF0qjPV8n&ANuhtuCkcZ|nJSA+k!)*+M*!F1@ zr>Nww3`7_~6GzUw(9kM`F9a>fDYe4&#LHR;@O6k^6|>5{ZHF2#1c#Ci2d_xn4f1hv z13!g#_V;GtZx4<88&c^em8<7L3mV>C0hH~X(OaB{anIN5wMfC!{e(}l4ewuT#IlQ? z-Tmh)PE#p|J&;E1Ik$ckJW?zf1cHY{=c?*(EkUk2mOCz_4uc@?>|Q;{a8KN zd!yeLfzg@h7Pzf?|G-A0jrNUF*8vY?{Gc))-byqzA-VG>4nX|@D>=j-_u6t*Vu^$7 zug8mp9#WO>EU(mLYRR6@tFsxO)bBo*t;dNN85_Kue3=j}<4g8ovyLfnw|^&|_qjE}bgn~oiI_gm3A;Vzxhd93w0fD!Ge(hr5?O8lw#FOB=^t|epmP#Ox z22edj$fWdmejcBF9W1nTjq9f;r$&U!=}9Q9QYO%#|FS59@1);R!ta#y4*F~53VtSc zL;1ZOzP-uG2*%Lqeew;2Ho6b;kO_{+h!;*7}skJaqN5sZ#b z+n8)JC!jk^p*VWASt)}AM6H9uSql<5a|y=P0&SjZo+>%T$66bN^2dP!Jq?{)56{RM zQZr#=aZU*{H(6Wc6OQSwk#)+$BjdAX5wqE1PDu~%*KJ6NCYV!MpuOY_R>4YjM|2Vn z$dsKoY?7{pk>~Pk8b06D&|A7;5lQ@=QRPkJhf*LpHLx)Vq9V{V*K-Qh!kS}>aI35p038cp&QHUJv;;^ii=nZ4~VO)Yo|>J2_GB8WEe=Nmv1DUF5UHT}%J3+PAV zrL!deSCrz{sEq6y+C{p2D-c6Vsz~6)8|xe@U;=8%8w_d0!_i+&dVA(;KokVSYllt< z$G>GRAV){+Pk_J_CO69gAyfg0vaVNEqV^IskZTW5p?onuo>xhx`VuZsf+x+-Xdz#m zqDj3XY+y@=Qd033x;V>Q9bQ(55FL>(&eZPFH%@OAbyk@Faz&UC8i{%uhmHZd0;pWH zunl3iPS&mz@!=p>{P#GI-}O9F26lCC@BT4j4L#>(@qEU@nOjifm_YoI#PFkfJw2S+ ze26AuWhyO3J?m)IcC@@qZ3?|-tNk~qT2n_`MZg4*_Ih5S*&ibLdlmH2>*&EW-0cF~ zSVr1SxDD2u*Q!a=L}`VBN^l4WpX*tb?T(~~r0bLURL}-ne>0-~5YCe0*$&6iQFm+F zKknVPB-DhrVU8&Ukb2(~VxT>;P#Fhdm+d56{A+d}$ z2dYlW#J}eaSsB@WW8ful97)Y%=&{NA&pMeB5RP9C^2@!~OJ+2k8B)tH%M2!B@Dr0B@P*gZR;s%GMyHB3+g!6u6`Ig) zP%+BA|KqSV*>iV08+@z@6sD9qv-q?e!xs6{O3i;06j_P(XWUo`a)pAIUAOS->?b8|y)h^;4weU{6* zG$zTItDog?6whvAtOwnsieNnq!e$BHID58yIcas5rUW%k#m5j~8F-DjMk!9C$q81- zvIDmDaYZY0fSyfh6OeYTRzBoBF(o0lp|3fd5EM(4OO)~QCMhkh3grM(cub|W3)|+5 zPq^vidk77!+w;?Gl?-&lq&K*rk1LskMo;wh!+Ji4J$6FzU6^6Xb}AginLEU@O{oh= zCv!@ZK7B9Z9Pcp4P5b4VKK#WQG46v5_yXU;<}?KOq9(O2v12412FuiW@O*Y1$TEs_ z^D6QeTV3}ZRJc%!$lsPU1b0YFoq~f=V!*xpPA&ruTcrYL-scl+T^Piy%b|;*fqGld zpQ@l?PC&mqt$$WE9QEi9kMFHsD@bDpX zou1-clft?uV;CJB$!TFucV^**3WQV)dvrlA$N5f-B5wAvOkD1BZ&7oM`}1o&uo=JD zqiHijI2Lqf>NT1w{Pjj4eLWL5A-6aHVzY)$ME*-+ELmji7Q%i53yiwy{yQLDpNk!a zTx^1?2sZDF2%!vZy!WDluSnxm2)-{#vSV^QP&0 zNx?jCVPvUb&X1~3Ww}pM1BMo`aQ~Y!GI3;cDa_d)#^762)X&gSzQoaDLO3ozW-3V} zu9=Srs;-o{4j^~R{Zts%|C1C`E)cAaxOTAGx@r1K4M}L!RFV?vTUpLiK3^1AsPAPF zi3F;N6vk9Y4|5W6;D6;4MCtbc^SOjX2&SE|tjPdVt-Aaur z2an<(27REhZQx)`#hqDw}o<5=|=kdSq-WVt$( zAU&1iB+tU`*MAH-FWr%S5*$p8lrk_uY{=A{jjBY}mu#IK;51at7&b7mILc(nEmI~P zsny{YoeiVG-|4*Nk%5#g)sd%Vx;cwoU3Za`a#wI1+B0)^70QwoFnrQof=ds1qWb($4V5Hcfmq za?)TN2olJg)DG|gH%*K+QkbJ2kP`+RF}Cp8H%z27QsyEZAQE&O*Ou|^)=ii+a;%_F zTo_+m(q{3?)=aQ8av-5kv>9n#)W-4mR!x93SS4ae1-X@+&j$2JXO&Z(i$bZLK|59% ze$`nUaj5D&SMUO{7`pP*{~`cWmMDJm&D$H7^u@wROTQ!x@_n*5=GHZBHAmDH3O4!O z;j7DFURH-o$D}z2VM|1Wlq_`(sY(mH3>+L>0Rw1lXn0*8#tL|W?Dfw>i10rTmC$D( zGh!t1)PO_7G&lk(8)hm8xdH=oaurhE_renwJDwVh4+CCg9;qgq;)m7Tk z@pU9rXQS%0nWC}wm%RcvQ|-8&Jcyf!iELzJ*q;#4<&gIaGh4mx06y8`t@^o4wQ-hu ziM0eAz(8nBk#CZTb~=VE)E7J5XG_uv{4HC{9RMFmwjiB#}N(= z89*gHrNH*ggLPaSNovp4clqP#JUTOg@M6N~db+=}Hyh~WtSV$z=)+z+0$8ggn8Oa1 z8bE#>4fi}g_lCgkhH*2??#AVEuNCuGrN=b#d*xFf z|AVM!SI+KcBkn z?fK~v;%3j!O%!MJBqm*wmy)u5>FzUlHi!oGq?Q%)ZWRJ)9UILjAwFh)J)c)Z@?x40 za{%U^9^1mLm!QMZLBxSWgECqD)J&v<3Np*g0(4$2r$z~ER1-A7IxPHGANH6v!^FJO z-!AS+lt?We_`j-IPp|4gG3fOiugUYZ%-u>B>Plg9j;d)T6~>r0s!1b4)*?$$Rb1nX zQfqm-MG9B)RsBbbF>LI5%1)!|I>`;U`U{X^@V+e37u3fn&sf!CD(BlJtT~L;nr1`rkA>R- zSE{j)ELwd#PV%;ow2}6=Ulo9j^%t?4JJTy{OVj_%XWvfh#iPD8)hR2%k*HwG6l=Kd zdE{y#Onul46rw<%Bz|?pya4YEaJIHi$`8_E1Vj}T&YC>1xJMxA`0?RYwE$p8>-TxVgyMGF=C!7oe=Vp{;A~2Xq;Y%H;}fkDi>GltlOO?6=DZghTXh2y97MduPfQ(wKcSNv$Md7kk^LpS`4*eKJVeFFt=7>(5VOk z5C}!#4|}Q8Qh`dg6Z=q%=gVR3pJx`AUlwmS8TUIf2|3>o=dcRF@2fI0Zeuf8%--4E z2Qo_C?tkAqc2CYmd}MUIK1p7=w!YcDJ|6MdY3L396My;_clpPu#l%Ga|K(5r^PF1r z|Fu(#{y#Xi=>Hq1R*~jdG;s?;*NV!a+MkwIQbs?1z^x_-_}zd?Kuf-OI4oJ z7aXjy(9Lp>$i7En#xXPmLpqlFk*@c>m<1m&a35j3V1|&r7oQ)W-PA3u+ePq>4^Nj5 zyHJkygY5h(2dvIFkLSm2fXhHi&bPbsH{vwS$6Qnjnkz+0sFaIapAYTBnujMe?)DFQ zV);BIbjhUoY3b4#XBQkSL#HK*(S2kED#+=hCqEzp6958>gdPLs7e%{qBm)y}2Z-2B zdEw0l~$7!2*W5&C9Q0P^gx>Tl`~BC z-IaQ^2AVUtNBU-5z{(#fsCj$G~!gm{l z1B4>H;efZ=ZHf>WILt_R$WD%stE84Bg6#M4_#zHs_A@H}AroixM2xF{MwKsEO3ajv z0*Gpih+tfAJL=-`2jZL$2!KDk31E{!RvCZ~d;%!YK_RO!`=fV!U=t)26Ecd7I1%CN zN^nzeKt;Jit`>D{uHa7dA7aue2=Pl#&-wHNsYJfUR><-Vy z+83W{;?0hVSiBy4N4cn+FJ|1bi)?Vx9Ev3m7Mvq)*4&IfNUt&&3l?M{t|zG5^LNIc zu!QMh=vlT_H^^ks8jRk{iPBp>o?B$n1gICA6kcKN#2tMRW=MKP=HR$AG2g^#Hd%)6(Y^(TZ&=dN( zJ(#L$L)klpq>^tD%%bH3dTm&)Rfj8=DfN(?bef(g^`hyAg0T*~Y(dSfPSR!^5^6hN zCmn_c86x%43*fKZhM<^r-{s~zmwGcKX%-!zI4ZCo2uXF~^$jMo()Eb&)ME)0d_e*X zPbz`2KsH(rWTcwf9(_-057q)KJsG`#_>l=*>)7M@W|UL#M7|60Fl76ZJ+=)mbe*Qj){2oW>x(I#8&oM8RpPC8FRSgO*Ji*;738kGK0@r67*21ccHKrc#Pz9rz)aL~PO zMA9OMh%g~*_%K0_LY5jXTF2YGn8F04uvp7IC z`BZ&tkByezRGmCEGr+d-#LC40+(9LnnzY;ujE2N@z=msPIcw!<9k0{YIa=g5WGGHi zU(yS<_Qo#y%&l@v_h@zxS>Fgs8cqI|=#N;|&Y@V=P@GScK#st_Kx}Ne|6w_rNtp6Z zx$IBAl*>X4=F_O~E{Jy{{SZ^eQHgOpokCardu$KDtNt~EatIRST})ePtpRoMZhMEn zbPle`@1538*;|$L6{r{CQHzAgJJcKiqDzL5l{l-X{KNIvD$enfR+{JdT&P7j(IZFg zW@E`((vKWR+@xKiId9oH4bgOXO3%v1B4=B+nYn2a%yE(MCd`W=HRPfjkFnp%Ug5rb zdvxD%M79dBRZS&zu-Pbs4Bw@`(GlGN!<5 ziWvo$vZb`L>ag!RvbQXLzM$5+Lh9q50+(NPD=+D^LWga%Eo@^;yb5?c=xT6Grea#? z81M=(!Q;_y{N^SYXNb7y{rZ@6k>%;h)~z#(KQ|>JeAqf*$EjO4O)L3;jbW+}?hh0l z5k>NGEwC&QE;Y<{6>=oTJTIqDdV!h`u*15CVjQUueNV!Nfto;9roxaz59(MQeH!f< znwb5S^>?s~!$ax?7r!W-LyU~>_=SS&q(FiGi11FKOBpF{9Ry@wLh+-@g!mU%hOs}} zX)#UrsGHTUq$6ejJRp*bT$^mN)ly~-F<$-K@O!SZLR(UEQH1*Vfe;m7<)S`9#h?d~ z2%|MC^2Z<9eS$Wb4awa}qXuDNH6+}k<;l3>y6J{>w|%t@DBLN19Q_uU&KIYJvqs4o zI@(0n_n`ehr}w654^8Z!U5%)4(Z4b1!Vh0U=q4Ow1o4vozCR0Nk;H0aR{$jqqE_JV zud21_!H7ggN=iiA7=DuG7T+7KcBrIT7L^RbtyO4Gy<$SD3Fxa?6Li5_5)JBtbPcxP zx>il0#Pu*YxNXSM3M^B4H+3gX;Qo57+KFrKmN`6)K_nwLNL-ms@mBb zB#ud2QYc;yD&+2Dy0LRyI1b?^rJOuLnFOg1S*A;NOR`+tJd~129`lFcXBtJVU7YiuaV)cW08KUl*V~+ zZlhHj+(!}~vvG^=31hd+!sWdkY_oS1I7Ubu2CYn}dY6c26nKez-x5$<)g zgu#-^)u|#_@bF#R7L1X)hZxi|meye+OpisKdIhg+nl-|}%Y43|yY`*dip!y4Be_D} zQ}t2Oijez~=iC)T)|%@f}ziEq2`gr^2nqawvqr{V42dDRMSe>{nl6q z7^s6?ZY*-u8c~A85{ZUOdLS*dXmFE?g-C2m0DV9x$ptT7oWWW{3u1Il^;cJmF+6%e z`n(!6E20_K15|6?*i1?42I9d4gM;> z6u(wHEkvlY-Kgk5CtG(G*<;h5{09Or&`JT13b<-do~r+*ou2o!8wnvDvD^5MBtl4s?Jg6t z5&1LzFCp<)AZ$&7P%tAk6+Rf^dLcWN(J};<$$BYkpy5V70h&-2>@{31T}}4m@6w@5 zFK+f=ZmtiuADYLMVgOh_W-|&Kti^~ZmmS+xJvcJEY0?;+!e(=yO!^~o6)X$`zsM4Z zSyoUSosLP70VJTjM;evEWPRG2cMu$%!C|ew2Ns3JRDID}eb63_#bK?w#}Rdbe7&e! z5&wG$iJ3*Q=|OIL!JWw-)RDyMj9C7w{^lD2Zx9Yqe9QQ=|g)09LdH`gNG*(_bj468kfJ%cdH+R4?`X5lfi&$d}d%Dv_ zNMZqe3?MW4!O|TwqC?eS5aU+xT z*_Q5J!u4yT^R<8)QgJlap~h(M&DTxAg6UZBsb84B_DKku6BG*kZzU6Lg%;RvT16*^ zh%z*B`uWvFgCYY%dN@f)DJp7*LB$wOXUyo3lYlQx@V`K8vD4)*o2vJ#fG{%t+wGRQ zk}@hT=*M?i1Dh&)yS9UaCOY^rIW~WWba)qPT=Wasimqt4m0?fJ^3XsVG*$Sjv2GKs zaMJJlwCo;*Y0SEv^R}`hmIZm#Qr>{lkzVr87Nd`B1ZhAhCp9*=tHJr&Mvv~*Vb{fE zCg^e}mY{BNp3n3r1V3n?b-lmw*i=@!(nvR~e9y-Sw)a zR2S~Kr)C>ec`Zy*b@Hwu*N+RTA{z4d>y_L8 z75K{=-p2>?;?mF5u`cz=387Fd076Mem%G10K8BG@rr?r1E)sGARq7FJ1`s@^5hzGfDSu~QzJbj z03^t*7PGV(C-3V zy|gUj=h)Q9{i+f%*+i)#HxBDHKwY6MAj4pk3PaFk-b^BVJ<~h#L31N|nLCT{)RnL~ zN`^GVo1%8D=OP3VqN$aqgKf8#uk?2y$ILwuJqi@W8CZM)j=qnJ8ro8Qn&z)LK&F(!7}3zZ^@~e0~F_&;i)%5mv1N1>C?$w_1Tv z2W_ScXz?e9)Bs{b2w{rGRzBVpMFK1=fZQ9$1+e{)QHIDhSScx3qxHfyrpaD7hxiv7 zK@6>RbE1@*5lL?BYyd)RXW~plS>15UnJSs9XSUnb55hixbcn5a8qW(QZx}DqEIvP> zJUl`~m)S{wlnXvJ7FFjmgoC$7H!`H~fiZTbs=QR1!~97!h+HRG$BR}KTiD0|quoeg zh-v`DNDhuesP9ESKZ8UT%Lh%>@o0$6@X}n!XRxs)p~DiNc&wed2=gi=eOBiu+5i_g z8CrTbLP({N@WS7`WFn6fY=xO1P^1{t6-;QS!BYETkR;)EQm&q4`15f1O<)B8`zij9*ID`S_n2EI+)X<^S_?cH@{+Q{5wx4`mKNewN9SJ9C59;hv;Zeie z4oNC~$f~AB)o@te%Nj?Hp6J{M1u`{Wh{0R*v+h_ZP88|b*U8WzH2b!;Ha3lh-3KK9 zHk7KTtm!dKA?ScJJtjK8tRC?3TxRq?_I*aJAA(?e5${G!wu6qd=H(v**p-~d{nQsc zIpL*;>cq`U;ipI6YUO$GqzXQ5V8}gOG!rxc^ zV`V>exbJ%`Ffy5>jL)W|SuUa~Q~ZGA&at{wf9uRyZU9lF8sU7`b{Tm0)$WGyK2IRV z+Ny(Q^%a}>KvD$B9i2c7bO>QPXxHHiC0T*N2T#*Q)wm97rqUx-mQ`*6N~Zi=Zb5T~ zBE_9aQxKEfiovl&`9~_wgJ2u`uXv2 zJgM84ES#Jz;k!TlqfjW6 zgYJW-O2`S|D0N5cme4T~d!kdkv(XaO+|&y)g94wfru zrEd!u7v|60aIx9VTJ2P>lmeR&Pg2{WO^V|EEc;iquMY$@H%yt=Lh8Pws7^uN%#|0r z&XCxQ&EJIBg3aKs=*3E?7F)gnv6EF`bks^6BI>{1wpqQw#g=W@Wx>{M*yU#9Qlm#^ z#n!FcD?{DzsO6||2 zp?^&>_hUau%^I-8g}^2Q*Ns+PY2)}qr%PtRCJouy&>x46jq5tTC;elB2W4frm?>Ml z+%1s9qH3$@t1*c~j&Nl;g^Bh}Gq%JWqzWko{5Ht*W$|=X0#hAWo>ir#xfvInU@Yjb z5s*}7v3$whJ!dFIGkI|)G%>ZgDG0_#`9P}VVnX>S-35o;wtUeYaKZ9kxY-BmUcSi+ zu6fk@l;O|+d0lsF)KuRo_}2(-o+DyHS4H1;dwR8ffBRSNsds8)UZ>WgXaJL`mQSFw zHN(WPPOM#yUAxKl;uFY)d54XmX!+f?gz z>Bh0qfQR-;Fa4~v;MLr5l!{DFai8@Kl%+I7jH(Xt?lJR@(=yZrFMS^Bj&sZL>ML#3 zy#RlAor|feKw2}0%nQpNm{uu#L;v8QlS&@a<4TPJ%BO_;xw$;dpNs$$(?d!(6fTxJ zA!OEcMu7oA8`bQ1v1+XgZkBE#W)d@Xv&k`~JBW^4g;Yr$2WZRy-!%FiRUcIWGWXq{s)DN~Uy*x)9& z$$(&2v;&=Anb_SRD8CC1m~HX^=5I^lJdA2x*<7+&=bt^_3}JaE#8ic^@fZ^qSE%=n zbpJR_wQmPDjlkJM4!F(xyXz2o$VPJfna4(8TEgs_=0`^+hF(Brl&2bW! z&wG;B|CrZhzS#20vkRBNj($X9Sjy>ZYI)OhSBBMBqGkQGK4W{11_J%<57oI&)~Bcx z-A?DFTUiTB?3&w}arD^+C3}+Yl}OZCk?U`6)K(G0ZSCFLBz2o$*4O$l$elURS9jLm ziVLotrlDrT(tldq29D;fj}7yXL2#vS@H*EbY8c z66iF;F=LFf--*tvPO)W_eCfy4Te}XF6VP3jZkpO2zYz`w1znO-Ec_WcFIQn?zZk6{sTC`0M*M4ZG)vF;aRF?^nhKf5^$syYD?T~MpfIKI`eLE{nORBxv>Jb zCR+2B0;0AFHTvnpN1B^4MxAG?_LGJq-~RNj%9$zgldjV}3D(^#=9t$W`NfWId1_lz zuH$-*x>>v)o8PD5e$^^)S${cLfSb+A9;?f9)dOsU*{RgttgLU3egf_trQh5rLnau+W2s+5 zsmRncSr~NJKm}gOcUmKrG8Vmvd$24q8;8DF^AL?xlvjy#@Z|c-G`@N%6yqh8hQVR3 zzL;9kA_c#CGZd_2-61*x^TsJWdo(e}mDC_E1G`OX-N77{VrFFdGesT_?>W@lauy&RvrId)Os@#(SW(AVc>NKRRF7T>4K+t(wz z@GqTj-p_}JUpYMxHUG)^{kPNiZxI+)#{VS(!}Q-rEnxb`)B>jeKrLYUC)5JxL>b$4 z2AJUMFH|1%TH^S(S^y#bITBE)i`Yee_yHSB=%4sSgV6Vv_?Z2iQ#7Im+vqW>ghsWH ztL;|rC~6#mvH!l(y(@4J_VS~Gx1HCoZWh0Gh|!{G0t6R41Y-`qzI&ObA)I#4=3Ao* zL0QC%I{gP7--7~>$X|L*V*KFy_bq+;d3~UfbjhkFWwm_mb7x%#fC?pnci9jc__Z$D zxbJgEeb$mcwa*+48tX)r-`4cl;wxsx)I>#~gosADnf&Qb=(4EPok1&Z^vE1DtjV+l zY<|b`m1;}V5-w=(`F4BaUuSHt;8aTu;~{~crlZnKf@;al^@}Sd3EOd3dB~0w<9T!$ zdlPYXQP#DNO=_`s1$HT zfKSn_D^VZ9njfUGK%aLuQ%Pe|vC$>5l+XzXl6$n-2v&>Wnw6+w{{BWst-rWV^}zfk zYOfu7Lz4q2clB9jf8p%hxnehF0~cOG&?75w7rj)3afU|s*=xi=&ejZdXRySVQ23b^ zsmWK96NR9K)0twQN|HWh z!1{EarN4FPL;tPD|B_Fd0xZe>UI95OOXBqc36JFB%dUQTg%^sb`_*s3gT%e^>JS(YaXUIG~h)a@mrfsQvp!N`X3<4Ja`u&v( z^3_5>&OUxRUPJ$@C*$jp2ySbyr|k3VZapFnoZI~Rc3#|h1{uKH^VRw7fo>yV3+Ko| zj`oVvi=n_?75Bg_(=Px&YCgZX4Ts!x!GQrzTgH)7R=sl#AH1Q=oNm}p4V)e8*yv|) zD!LGacNrz6AP~obJtEJ+2Jg(oORfol*#Aes$%AlvI$<6y$LIb1VHb{Kr9Z10$2p%_{Pjle-E(wH)EWEmW9!_@b9Fe@fOyrf&u0ExIbYFj` zkQK^MBJ!CA9VBcclXQ>}xWmw_b(AUuuy5iR63DU7B*n~>14_t-#Br}Eq1Aw)^Vvv* zjhZ*O*~hjY)gh^f@R=bLe?;trM(S2jF49O4I*%hsoz|Wx&K3F;w zUZ)=;1Fqlehyuukt&V>PO2s~EPu?lxpSRG7n-$esr29)DaPy0l`ABHvgO3Nsii_#SFV6Flkr5CN?8i!edW zh^UDvh^6S3fRQ9g{mn?Ilsg}@)W8RkoP51s;ek6`1Om3&4$h=aGDCeEGK}rln^%}n6g)sR>ZlH^GCK&p7*1eTmFDpbT83)_SE5G>9F=Fd$c>AiLR6-yV4$%xblNdtPS`H)4F-inoS&*qN z65fgSq|Kto%z@P|Cae2kQ{>r&Ah@oCmMK(7N@E!XK`kiIt-?)<1^{RFk=g`>EJ##WBni!o{D zpt{ULcOd43R5GPbGA#*u#8clCSjvKS*ot(sG+3khs_#VSoieQ}f)RKgLG&2YVS-TN z0Bt7OWU9EDZUj+;pFAl1l(8#RJN(Z;Xe0h=5SL1c^eA8!cl;KA%;ItsE-SCFDgmsF z$`1TP;slrRa8cClU8UJ3g$iK?&2;o)e;`5ac2VS;d!0#W=s|)zQxt z1;atd34)+FZMWaE&jI%WpE+nDLXS}){v*P; zp?QlQ2x;lojBrT{RC~}~R06bfLJ94GRi|2|YHn`kftacC*xV#;z?hI;np>qPyn@%? zgwaT(gx4l7ze2g$LrNq|a<+zgRNK&WeGUFM_NeGuH}~@}BY0rCjHb-T6GL`czcNaL zwEpm7%0}JfYIqX*nemEBpXDC3FrBNhL##ua{5s04Rt*tjo_zdZJ(-BzAPgEdtA2@|GFtV}7lSXMNv*4^6ss=V3b9=S z;g6q_MhH6ZxF&l$+mS3?bY;9!bk_Aj4IBz(1{iD1l7KE{n)Oj*2}|yR-TGg(A=g7& zGS$DJV;UkVWU-kEh!4GJ2km%OxP=fCe)0-kQFqbI}H2=Y&1!@?!y}8 zoy3Pm%m-LRNmm&grxz%(XewT#(v|^gGL?NqLnO4dVEWwx4v29FZJHwZs+H`FNim?WfD+7?)lKh=kq;ZIl?nKFpsEo~{+Ac916tF{{_CKS(+lCZ>IxYK-T9Nm4(Y{&WhxAFKx^19Y(}b z3T$Bs_MHV&Z#I$_((Fh8-`7c)*Q%J(Z1AtNu6ba%2s{8Jgte;53hJr@IppbwVc5}2 z()S99D@haXB}tCnjfzrAR&t5$ck!ZE6(lB+waISQ$7ILBcYM}|I`#31xlZZyW153u z1P1|2w%G});;=C9_cac%{l7}$xAcbD<3_t<@Zw;_WQrw7$#0u=6_B2S09Rr`M(bs zVE)Iz0P}wU2AKZ|Fwmu`RkP6w>z(s^_ZXB3(V5X&kD+&C3JCf^zXSY4Xr|?=SlvjA z#cQSKcYM6nTrwH?X)|Q>-}=FEas?8ZRb2g-&zqXQ*>A)T-v)fXZ_k%;mw{h!R~%6f zwku!WU#{X`9B?N$Cm{y|jBo%yr9JL%#$DQMGw1Df-~CTB_81>e7|gPhZ36cf3Z!K3 z8=dsY5^=d=(o2d0;ZJeV13J0IgVgw7Z}s#7*tmWk z4vcP2eI4Xy^l|$PBM07h*!ffc#?>ji4-)lF0C$Bur=8&)F_TmF@%r4oapnDJP2%xL z#=-CvAErt(3wtG*&`q_aVmd9O*u{k;1nte~Lm%4E$v$~^1yc*_uqaGx0uUR|x(%rW zqXYm@vjf53oRp#K9opPEviZ8gx995lT03Ny6*sBfP1&FY+e1l1-UwR;#&a5C0ef@a z>4auE+pC^ykDYj9nY)jB*df<_v)NIn7jHT)?eTzr83nacgS*cK?!JMutfD4(+>R*r@R0WiG39Qe6lC1$d9`9Nj3zfAr>4W&hw@gBc}I`L=$%8ut||uCzoG zr(x8wax%q6^5)aE)puD%{PeJOQDS`jk)qk7qm??k{ABW~MZ0gk7GAu~HEy$}C3bPz zm2vpJj^hDm!J*>A2A@bL-s#VrFPwuce-Z0@NU9jc@~t0jNDnd*XXq7S>~Jf+u(he5 z9EyIJPSNPhiZM!exa`NxA5s2}!vc7&i3*816$ zHZ-HO0ep%SM}g1#eIa4YEvaUN-U(=vf{~59zh;v&Ia;(eM6U3^$1o9}W1nybP z$}yHKG%-x0oGnSKz4Qf`X$^js0E5M1F`LO12>5r$F6RHfCgX}Co4}f!Lt5MXCdWp#YyW9V4+bZ^dUnlhM<%Dt2a*J#;qhYG?YKntNF{zJ62k}xp8Kc{7hHupPvv_PY(8C$)w`oeR zs;+y{Jy#G+>T)B=sIICBwuuekp?XAC5DaZySjjZkiVg8$K8@@0cNoqm6=F0+!`PYVb|H=7amzZn6+E(kFobv zVHYk9u9MB^uExml%Q&=4tYC*dvk^a0`At<_5LxS{uAad-T$RpCD|d}qN4(uCD;T9@5R$SXtBBUcj@NXBA}{@; zrgDl0flB%Z1^;g25XvyyQ6m8wzhJkFjzJ6U^hG<%emawYMAd?E=#g)0I^hgyJaQ9D zceaPH|2{0!2f%0uzlqL$`kntzC}mPSVG)#jRk7;Ar-hyZ;T6hB29rq)QM2X(<@#@^ zdL4;Gb(xAnc2u=bMJ=yxaqqQBg2{GW5~!Bnn!#WRzwCtG+jAnwJ;t-)61e?UFRVSd zCX^f%>tiln0MTh>EWJS99>d_F>gZEIs<?ko+s<95eJQtUy{a3 z9ws{0DpC}>1{wF$oI@Y}ACn2g5}UdS$ZpfwLxIseVS_XS|yN92}oWS{*q$QjRA>)qVacbZOyj|ahvcI%o?oUg64Em(!^D9eoz7BEj8H>la z*+-eWD??I^MC&@?X9DU@+IjD#&*R9keG58g@I2~2S*LjC-7nHi4Yi|r2SlP%2MX|g zMx%l`fiuq7e+#@k#uR^Epyk&g4MCG3@$#kqk$#4TKiq35wFsepXzli6f&5@dc`upcwoDO2cuksp7u1o z4W0251_S>IgZb{t@fYg^z@{1!d}8j?G7di&ge&+!c0-S7D!q2zcu4SePd#DshU zWGhu~|3_2ze+ZyVEbMIm$JAx{?}O}F{xM|F@*g03mVW}-SN&A-!}$x_eO+_X09bXd zv)OClyXl7UQwhNkkQ1bB=#SnAWd09kKOn|Ca#fy|WCfXisuuU5u5uvuG{Uof_+0W$ z2lhpFp4{1XcrPdC^KSC`oZzO5{Gsu*o#W#ce#J@KmwwzSe4I02KX% zscZUdXQ>nrC_3@1E$k&FBJYkY$U-Dt_ zc^cqTXZvElgKV?418I38$oJ}Pw!1Pn4=4J$zyB<^93%JZg4Gs|^&O&`aI(!JxQ^h* zykbwpj*xAY6y*Sx>;*WNT|yn02&x|0x2rFPLo@lP%_Y=tU_qWTzERA8X1Q6#h`GNX zPq?RkAzg=&{fe3b%BIcfT|f<9+=oFPl$*uG*>9DDj$S!Si+?hIT}GBgk(O3N&@XNw zYJ{u$>!rsUpdx(!mKLw3e6!PN{8EWAm)!dno}WVq=Uu;j-W=lIES?4>p)w#|t~X3H z{kG#?vu69YN@Q%o;uiF{F>}zglCj1}m{&5GRm`x!Oe#lANi~z-6iVCNyw6v=N%<#* z(LgpaoQZ=9MIkp7NJN<;Ul0*B+*SCep^z8$Bl;Q73xyKl$-jXLLZ|5D-$jM0k#`O1 z$5;4ipiy*lf5z1)It6!QC@KZ@L7}MS)r0z}P%KiG$w{Fqjo5z4|w7dfa?a#DD*`s+&lN*JM{h(x(g=_OS@7EVw&g)$6m996y|ViHsh zm`7eeG^&tLAykdBYf*oBpK58X;Lr?0Sw9u3YI*3`IB)8`y%HmfaA~PuCp0RRWa+w? zCSNtxaIiQk>DZqe|f~f@VuWre!7YZ{)2p?xBtGSoZ_|&`jYDGC$$^_QB%`t z&Ls4NUZz4>z3AtFzy@4-85w*23Q6kmV&)EL!Ik#?pzJaW zAZl|YV$3BBg-*!%&E{yRiQ&1*AVmhfEo3wn^C)7qFf#Bg#}GnHEO{Imd-(AnCl^(e z0vJq5`hN7`kBaTfGDQ(ODi9UJy}5(i%UiOEXNQ%AnmQ3^q#9J18O$`1I`9Z8GRhYD zipWXnc>)7ti;oBji>|CI)U3K?m{=?{v^wy}Dp4u{Rf>lHp0GCkD6g=vuuySMh=$|* z+sJIDmcx-(TbY&g^US}f)O<)<#ht}Wowp5-sXRS*0i=kGf>kIW_%P~Rzo4AbTwUqw zCx-}F<#aYz|8v*hV|^IG^%k|CQ#01JRNjc$>qVJ zo}O&y@1m|8{?5AzuvgEddljC1M;%8(t^WHSte0OYY)1(icX9NhD?4&Tq>0WPR-Y2d zA4|pQEmuo=vUKKD<1*^VO^s)Nb`u~*-=i>oBw+r{h^8Z}D3njaI;+-UyB$C~i9l!o zt08D~3`9vS41Au|4};oS9N2JSDS84s7cU!&zHCKjbM~fuk~~)f+*QHgu5RFO@e_z1 zu{wecmDS2B>BH5u`H;^0u#DC~PiF_jx&U^_54Cm@m`ZY1TtCNFemv>OZD}L!DR^GC zxiq(&!tyM%kqTPbG^hzxXb^jn+o9I^zrX(qAz3}=!Nv*bj0s;n`=@5ihoJJ>Z8u%% zR3ARN_(ackS)p{SY-g?R9mc)=IxuFxaY%LNjHX?AZMACs%+Bp_{(Zu0zkO_yTi?Fa z(?y@V87GiTrVGmww(Ku->P!2rxu?BDevO5@d@5LW4}5+AtpF2*H-J>pM^J#;A0$NO zi=Z)sm%S-h(DH)r0?DI;hD&K+e>A0Oc-~M$k9DqDaNt6mbFbDI);u;e*D!k#0_D12XS>uU#*F&eSBAtUjlAomCR+y24_7!@V%E)B zkhriJ)B#~a%OLp;we4;As}G6qK9UPQ;_ZgSoc!8<`g-tw5B1j#)b-sN0w3>kb@(Ql=XXdffWF&3$(Qq+Ywi591Bw%M8 zovJAN7EZKKa44P=eRjT^{V}p#=z(_OsyzlYQIAd!&rKP#vluIM2FrCiOGYdNrOs6n z3W>NdXU_tGT{tzLpi3t7D(Fpi#+Pp{4XWX=6lgw=$7oxBC={#*ar?U+HSEDw*dM;qQ_y6o~3fT z_qVDsNVq!neKpLyK|pt0j^<7)1J3UnE`H4@io06tT(rWyTqiIW45RZ+*q+M|L9b@b zRHECI zY27;ObMy|&V=z0Td*>O2&PQgZ{X;V20l%+SdiJ?5pfD6%AjUKtfym=TqgOkIfaXC~6d{4;HAv$w+)CsktU;`ccC;Gz3?1v= zU4y2M>G!Aic~DV!e43My{xFfBmy0!W`cp1wmCzRQcajPAKs zogy3xeuYh)hgn%tR{&_3VGgWqM#MhBRjP9qVaGMIp>&n>l7Z3{ z*#{F1S5)zEhQFj)Ko8&&6tKis9>3nS=lMm56Iub&!h5M7j%2AqS{N}U`p0zW^Pz{5 zx?As9#>J=i;+HU((!Q$2sUi%$H*yjn=<3xxc-mYCs(8j!VnL-D8%;pnvVrYNCj&Ld zy;Xe3Ua$7$5%0~H#1siHo0{gzV{S0JQB`ahdm>tA-`$>74ZtakdIK}snT#ny&cY_PhM|8Qwd|@y)2`$k zVCyR~n&t*?FBYW6)632tjo3d>_}3so|A z7kqw9Z36O}DEiXuqPQJ<-ud+O7&oYm=dAhOA*i*vM!-aa{^40gE2~VI6M!yGRaIfn z#}piJ&wEpU0M7q?4X$6@j-M=E-d%P>v^To1i50vSmA|FUFSd-8zeZs`7&n;N+sY}T z`lyOGLlGMg2pI}w^+p}HFAID@gcinyE>%6%RAV(UTU3zS!Xv;PEA2aFysd>j&{=nF zS3~X3wFBC;|0=td@;wOb>)Tb>WF6V1L>~2)#$FsmX3@8NTjNe! z3YNX)M4i9-TlVJI&{BCR6{FffazWCSWWS2Dloj`#I%`KC+7fJvs*c@;aC|a{+n+VQ z3!J-4p^;*xsb(ai)ml}Dl62a89x3Lu=%)475j9l%7T!dY9#_dEn+?2Lv!a6MxQ}ja zHRp*`x_l?>MT($Gh#d99c*#a#)Q0k_L{G6+Iorqr6l-%n`ug)*Gvf$1h%A||EDLaQ zRl&urrDW35bdiRmjZdTA2JC3kvo2UcmTtNip(p+KfHN8UF{JeZKBe>d?$Jk8j5@@+ z+$GK9_LMOq6Iwx)$%w%2r?4^zJg1aOXavrlLM#MgBZ3KyJsYJp^m&n`j)Rbe)=qcF znFv`a#^P8PxolFxeCN^+>yqm+j0(oz>aU@QU3YnsdT4}NLJBsWUMyEV@dWZM-BE1> zlobcs~P>rVT+ODU>9GRtfGa;d^}I?p{0`6y$Kf9r@i;F#G?NB#hAc^1u2cH7Iz{ zQj&Um9O`su{#y6(_rkVj`}0Il)BAP%?(*+6-QeL}&S6N&H?Ve{AnAW{#{cbv{+p1> z#>Vu&obms@xD(4ijytjZhqx2VKZ!eCs!LU@t0HW@tC``pPNm%^@Tt`|(D|>N!mce`xuTrr#zrDThmZ&Y} zfIC(af0aKzFUN%F#ngrO;hs~eyF8%I&gvUJ?y8`fxURms+Z7Kx-63LE_o&p+E60^p z<9pk{IyV;~!|GU#I>}WRtz{mpk3Jer=~z@TmN{01Z6;VpB~@(QGa%9r3Bn-2t1A`K zw78Xz3dJM^wR_g(SShT=QJxvE-CsJS$Qsb^x@%IhZv}o(!07`zvArhOWTU1ASGoh4 z+kI_(I(T_t)P%TH?7R-+Wl**G(n#DWLgLxqNYgUWTbYd%>nYPD*4BZo&l)|}-tb=! zWp}PtO>lro&N{A@g$)sf@Q@q+)W}g*Q;rarTA$VM9Esjc2=TVeCaghpvKqNx2x8+x zL)C#9B}LER7&e0KRsO3d1L69V+E6Dalh)J(Ul&6N_Yyg}4o2-|5g(>cKjrIKUaMhk zMupNJDF0%ARmuujSC6waf*Fm$035_a6X8_5dy5 zmK2Al=^v^9Nu=pAlBJdrk<91)Nf^`1g?_h^_h3`O;A?KX zaP12B-yA%3IlZ!0WpHECal|x%3(-#~l0*UEM;eUCnYC8xW|IROH~R>50}D43XA#4g zKQ-+a;}w=tx)7oEb7y1D$dp_z4&-h&@$f0)qxsDcrv8A}zvG*Rk2NZZlr<7$jeBxb zOIYJJj&Pbh@vGJ)iH|mCEc9C^%=2gwVF#rmb2aDbErYd%`d&9ZLE$%{p|AAxXg$&@ z=$hQISE3QAFYXWoS1(HaBDGi(3g}GI)dex~-I-Gr!0DBA%58z)J7|uoO3hv^7toxV zc1TGvKhq03b|?`|=#f)s&|sx$Bwf<-Zl>AAhh;F~(gBj0zYI+z=Lbl z-1k_o>KD`BxZdA}c!XQ}kjxjE1gP{F&*_oxG7*vEADoUyr19>vKTHS69B< zu(zw>lO$8n;+YxA-2Kzth%vY1$UG~qv^jhMVdk z?b_iLzvkn#zaAQ9$2K=FikPQ6>4T1gziRb{?c%jzpZ4$)fpVVuoC=d$2meZELUV#w zZf`4Rs&6vzch5OqTgd1d;`#^Cpk%?U8qK9#<7i?aNHaG1$23K>NmsXCp!8 z-Ys%tjwGDs6Ga4@D?8SjxSa;D3dXqcWxGk=SuR)qkUavzk8nvQ?UWBIAm(m&)tKq> zC5X`1?jAZu=6?qc!2z%AJG>_(F;RAt*Y2+9R<8NWer=t5w!gi2ey)Zs&HACz#r*-C zbHX+BAD@T+15PutaB%*g=OOEVA2`kWkHKly{{T+2{xfh|qK5c~PkyfUuWV z0O7g@gE6AN_pdU&iGy&FZjelzFV`h#@j4elGBRKRvzEdq>AJD#G_w}5dGFbm$7eGq_mQSVDPv$i$$E(B%GK!Da(eM8{*I@*F~hXJHK;y} z%|x6J1vktAgwoU8>RT9amof&li2-cT{YAj9YZ!?SM2tx{VqgF}Y3liS{45#R|GaUl zra+d>gI@BpkWe6`9@}YE_eXr+`->Mc)NVjq_9DU$tD)EzHPmh9>OJE~Bp?yG%D`CA zQru&-!|c)r5*;|fWx5$CK?Lw#mfg#cYL^CqH^rXwNZ5 zHgA(8?1|YcI}@%uq$dE+OW7Kq>lfJ4*$k$T=4BOrE_qFyz5ES^@B1pZ1vW+zA-3ks z)@nDaQ-N65TnsZFr|WN~W3lgE!j%tHr?P3UUhe>4)E7j2-gMy~&4dRIJ?90)M~I2L zsSW23B=wV(pkerW8e$ff9oRD5l}o9U4?8S0CIgb5?{45G??9Lxzdmh&N;n)+3;;1f zleQGYV?eF1`2>zm87$m0|rHFvb`TG^nm>2g{c(9N5gq~$QA-RX%F#V4jleS8cTxEBy| z%rk#*L;Yq=z}_64fOXy{Y%2t`pp@q3vxIyIVGDng0@|}YOMdSbGoHr=-FN!nSWRQa zJ(Qdf?<@?79quJUJ^@^76GMqQPV0R>jD0ZXkXp-_)uMugQbBUcmS#N%@oIq(fDvRB z*=9&=tsFZcND%F<-q8hS4>a{V+Ud#%gGN9tbv=2T`eJk=BfldYbK->KmOdhy2EC~O z@_ol)bv@*8B$1JJBKP%q=g58gqFDKU{Tpx=jYYN@BMVRb%lp)OOWx~O;pr>uqFk%Q zqguAixE@+Hs~Q7H&fiM)L3*rEh>#N*Ji^rikSal7dk-k3@CC=Reu>iQ#5 zW@DV`$u_F-Dz{aEN|cS0r(8QY7^)Q3Y0T{*NuA@3QK^e|V zsZsd~H_2t%A!A#)=JPJZL*yE`QobM+L=v!ydtwwx<-<#6JfK7;%Sew(Cg8>D80BF7 zNfG1KIH;Kyl~B|*#>G_O?c&=!+XklDbDgqHYX*Q*%>%+>hkp*v*gd%@q?JW^?+AK zs+%vhl$z@)p=(Bzm09@{eIM&PJ{><_Y=)*?C{1TG@x*^BLe1)!-u-(2!h*=+!E(#5 z8|*$B0;t8FcUez8O+&yn<%S{NepeC}Nsac0hG9|_6iJ0e#aA+L49I_BWi1x^p#CZP z2Uxdudwvz36F*l*F(7}$PZ>Ur7*gxID&;fGPZ21>aXQG!iq>uLp5F`KCE!}$+6Y~+ z@J!>j-N6WNR1S=LN*V}U1O#$Q!9?SMtMCaWk=w&!7*(&afZ~pE_0rWj{DcJ%OaI9t z|2=EaQ}(ys7GHOgTlahh(231ej6#=0nLVHvUqv$mkP@D_r`LLh7x$t#J z$Zy5}ACwCco@wni2N>ZAR`>q}xM+R)P)h?rbK>1!thL+!J+w}LADTYW-|6U%H3VGZ z-`qK&=plIrt|)@?39x9Kb1?Rl>mM)+v-yF@drI*Htr$YvvU@+mQ1!nR*RkAW3qsWz zN}A!f3sZT0(hB7OtWte}n#pV-ZR9(DZ5J})byLj{Ra0%U@vV`cJ`M=0wl^wV)Rk5h ztW%8@1hLnYGpIq7uK;bxrTk$~AN!*v1rBYm8!N7U7=w?&L^!vCP^x>OQpu%;tXY@a zVb~z2)CO(nrApj5KUDWxT2M_18J`$do<4&imZC>*K?V?ZlCR60Ug3k0_<1l}V>rR7 zZr?!3JT@TKM_y5WtDeYGciU{JDYKYB1?;FA!=#Wa$TTO{gY>}5&&IIUZL-`#ru<2z zj$KD&Kc>akvS^`VkQ82@xNu_OI9FRvkpxV2mQ$N)r6PiOU?L8nh3KH@KZaG*7|GJ2 zIM=98^u)T_=(c~zyM`UAq1a?eJ$zuYR;p3Cx0+aI2Qc3VgD4)-_z+LptBj1>UeVqj zsCG^o{^2MNtlAk^sL1V*8}0+Kso~KsQ;L0xJcT)%vc=D}voVO>K7$O^Jj$h2UMrU3 z0v0;XeC0=;sc054o}i-2{rl<#*U(?Ps+n?S2gTa%<-+$NZ_Thj%|8#k(n z-maRWS~1O1O>TD&@H;7vRmuHU4`C>9GwU?CxerPav3CJw6ThNP+4F+r*%a@?#eD-` z{nfNU-;MUpT-tUssrMA9su!K*OFuzy*Z6;6?5Tm;nsP|!cA!^<1*8Hx?K<)&8->$w ztkqIXlGi+KA z402@c*po=_T2UVRgC6vImG!=A<8XYHxY0@PI(D)pX?&>Asta&NDclCTnPuSgr}iPy zCxRwKOTI^wT2;Uk0RjhYAjtKOc&ILiFV6Q@{)a?jdOPyV8vHo)IqZ$1p=chAqqeQj zHBYxMh_kxO&#TM39dAM_fXaVmApK(){Ig(4%lJPQ44MA-Ef_NW#|wr`|6;+A=|5R8 ztoRPjNYDb^`KJ7gsl(}}jHH8lU4H?LJgi#_y-zz#HS#mu!A}C_?TJ73kH7+d0s1-h z>Rzp=7>=kcp}3*r%+Z$g7Z=4dkBL1tvHj;~^qlsW!zYV(>ExC-m!~Ta8;{1eI|}vA z`{&c$Q4+Vgqu19_Q<<&MiR^}T*0~}yiwk&@^kHc_c0(U*SHF3M)eZ#C#>*|Vc4VW- zuC;vrFn;=N_j}V*mh{xq+|r6hIU04JYc;k}v_0Cb#yGSPaqOI>h_xnSs5O(6JjJKp z4|M%G4;yUsO`aQ1{7@a4WtD)PqQMRNJqlPpAa1V$)Qu!oif&-~%L9KF8Ii;nGPr2B z{@6@GV(?baR2P{FQB z?NMi&i}84mQE|B=ZEsRhi5)cV(U+QsSb=qaZ-InpiveeEg(L)3S4Kqa%2d;_f(4Xa z#BfBQxbs52-ta!5lS0AL&r&k0zTu;dO@ox}&b5&ZlPouy@0d_fX78zO)?G=zmtOltuDqN(8* zNFutRQ_9kqf)HPyvUF&E7nXib>1>C*_oFD;$0|kL)CMbuS0-y7mrzTZYamn=DHauV z%k6X0E=>P?;fGW5@~^m7(DqI^M?!koH@(M5G8YV79QB5rqHN}D#`ySLe%bBOr(hYPeu%YkETxlIabpd?^ zC@Ajbk~}2_>-NL-$n`2M+{Vaod&Pb)WNdG(mC>5GR4DJ%*Fm6A-YGUS;cr(4BTAtv z%%ij7RRV~lO4e(bfZ5M28jO->QQbToK;IP_W}wh%b#8yXlt$nmP>(saqcu10ZKmtt z2Jf^lo60oKz}Z`WhH07dOv#c*{gQkMiAp+zmprxIy?ID+VddoNrt@2CXu>iEz{LNI z>Oi3cz0iFA`r%$Bc?es>V)iZ!9ZkVXVr1eDf$REG$_fa7xY#?8dEtzgo7fP$ zo1&{&wl(X)YQG4qq2&m#qtW;9NU>N;L)P-1d{5tWH*ki>`s_R}FT&9nI5HsCKeInr zhfNlLe`w0|p3;oQkz9~+)na~I2v1lsVo&D{S#^#18xfQ!63rs{`d3>^%8?~X=1-%PHRpT%srXb=nI@jPtOy@6bN`FAfwZ02^DnRl3Nm( zIDR3@#QkJDJ+;?3={xKOwBZjzlKNT_QnhPn_`UitQznkEwlImN!$CM(njpd&2{I3) zwkehXGwUoK2DqBMTxNdZ(7V zFeJU(pP{u;RWbSL0}!UoJ^2Uqi*=ClagdcYx{5vC^Q;fHkBa1elg7W(kGQ-zEu5qZ zo5`w5i59V=TbJck@RH1KWv!8W4MaUDm>HgSlSYIChL-TfTYJ@AQ+-P`JI8`7mwY&- zryQ%z@AJ{(b3MZx-67PTOrzoz?rp0z_9u_c^MPdhaKPcF;xKz4l86fjSk6GlZ$lm~ zx)uwu*vePx7VG!?S=8E9bM8FhF&T88yw=O(NodF9Fy|kur}(+L8p{9p6Y7qDl4G`P z!ZyFHmU-!h^qT^8Vj-k~vkWz%5w5u8xpPsU;)#F=6mo9O7Y`6>&l3i&W|Kl97$@b! z(X=8!Y+IeMb`{VaFF*Xm34|)WN(2eGF+sHG_Dqk+$hEpQtJ9@2;g(Wz1%vyZdw*dp z5=S?0>@w>qO%7r?OS}2^ASaSnxyob$c}}>Dj4&D_RtWY-A!XLgW%xmUkt|nsWPXwaG8?- zwqMR+u9Qlr7|<4yrf*O}n}=}Uy5sq0|LPXH9L>bsy2^Gkl(v#Z35#eF%pjv*1aZt6 zX2qC~n3dp7vfW*Pkvr5O{EOqJkqt<4aQ!bh=Xn2E{XI^Cp)#!f@t)%E-`Dp@?7{wy z1kaTImKYQ-YrdeFS*zZbfs4;<7BUW~RZ?37VW0Thvh+#24?sDK4M3q;bxFzWX8g7@ zd)EqS2*Iu6zs<{bNjFu=;nY$R8k%;`7t5WCF$f}OZDyhu_gc7-jixM=%T7%hyQg#P zxHcM?@0(+ymNumhgDW*=zqTSuE}8Z*JDaBCim}pDXfJQF1>6HyL1s}^ofE97d<=gf*M`9*+)ZxC%8@vY2TSN!AT ztC?z@l|b%hI;w(>3Q>+!wc5@T^v{{Af<|3jXxtlN*^nkTJ`4+myh;m)H`0r4vXq%C*+GRbs!*1#RWgPV2`ew8y2F~_1w%j z{VKHXHTOnfc>346%o%ntHkEd;=3K5Yr5miVD(3boaqoZyRsG{FI7#StI}W&1UF5%z z9P3=OH(J71_=Shq9{Rb}OtDl0HwIn~e1k6X^k0CeGwI<_)(ZJZR3i|i;h$a9 zWC?15OmM+?q_VWRvEJWnZHr^s&Tm!fy*3;;dv)F?w6VC9k29RpqD`wwJ2@NrpZ4Cm!PcPL|$|BjIaq93gO(H&!< zTZJ-ZQ-gx`LOA3EW+;fv)}~}Yg|&nGfVr*HP@a7z4+&KMGUugA#cRh)Cn#5?7iANp z2V+yMr*!>5267uZfOb}%95u}=MkeQ$U>EQW+s8kl)~`aG%&j(jfuy}ao$9w#ks6F` zw%T_~wZ-X&62t1X@M5jshpjkefz4VMm^-)^-<@5Q`<%~3O||TLg`CVv!!MU*5n$$L z0b-VCAtigh){IG%9FrW-s+2%YU}iPc;ageD6BB*>AUG+deLOvVmMN#eD!Z>pcm7lxE zKmbkUg|4H?6TZb_Qfi7Q@l8u4b-Q5f~ts}d@;kxcRj~G_!@Kgk5@y$zo68p~ zDo4iq)nLZ@&7SoTjkN2Z-RGO=Dr3VxF?G#aoA;^`C|^UGoAauuY~q00ox$d0)R*U7 zt%GA2?}~E%Asv)__+_-cZr9p8UYwlVFg#3+CQKQHd-)Yj*cK_ZRHwUF5#&i@f4Eb# z5xB)@<-?x)_6`3?J^EnHdV6&r5h4ux)V7fNTPL)9b7xyWfi0dz1)Q#W$fw56niFZP zHt|%C()c5qgE_duq!b)n)psQe1Pr%3uG3)5E^Q*6`=$=@2UJ&k1zLBfvZ8wOtW?`U z`P;@04D9;y%D!#^T|S(@zM?kEZ`Sxue)N@jV|zzkC=e8nH~Aw! z)}P}RM+i%hZ`Fk3(r>{CaeQ5&@)>qwmH*)`9Rf3m!WJLDF&pQ^i&^;2M!3TQiWMCn z0wa%4j)rHlM+e|MOeZx>w$IJin+%OhWg`(Qc5ciCa-VVAFK3rQYs^R7N$kzXb6|7R zL2b$ZFr(NE} zVEhmaNj+xyBm*sX<;9#0`FNshJyL0T;hPW<$)ct!cT$ypULj# zsA}1UOFGa>?m5t92ZI~bcWhyWQV7I6?wbzct#1dGFn1@@d)yXDi+dHd(Bb@AbUg-^ zqL4lLoAzkJ6-jbn?u3q{kb1;y>ZL%?C1Z#k+n&xf_Qy6oyr5_a(rQ5KiO0Wb-eewj zF28uu5hY>3HSA8A(9}<2b%LasI1kD59_;DqeK-V6L%4U0Q!ddbqOq}diGJbG>ptm-pDgE*U>yPc(&w26-XF z!>ElFB~OXJlZlLg4bt>VC!6K*y~0fRGw;0WNTKs}vwQ~)z0@O*S{00QKdd^y#AIyF zaMO|)_;m>dvHMfUYEGYNjTZ6+SB7~U^Zb2z3djpiGzC^G(!L;|d)zo8o1W}$g%2*} z&r1Zn0e;&Pk^Qta3eCz@opCSDno!_v*AwN*U$apZAft5#C4!wOlI)gNr z0h5qSO1}pvp8>*mol(NW@5bB{gsV4Z!L9-VO8>MN0>h6_f&Es^fP;^3-xlLYt93ye z9Wrbdl1-oTg34z=e~0Hc`mJ8TzzQhR>ECo4GOY0uD5wjg%rQ=YUyF`kEMdeg1eY@I z@sAcb_!LOdJgiEmWMKgVCIOl6{0Q7{?f-zs`2(6`4W;REthfETPxwk4qo= z-S_wBNrzAG945f=?=jUI$EWlyz}$s|lm~r(#VOJ70)L0{7l44k;pntUa2eJiJiIFO zKSLx4`J4Y2KuE~=2e}#f_|Ct17BQ|Wr+-X_%INL_c$M^l5=6(H;RJ~3aQ@=s7MiC( zZnfJpd_|lZiy_NQQkCPRA;@#lBIdtohw|BVWgr>2Gr|lzikwHB!q_3rWTBVgtP+;x zv?dy_LZ3I6nlx)uEwfcBc|Z@YYb{#>NmrE3khfR*htgiT+!+&$ zzN2y#G;3KdanWHp@u|k2_`oGLOcM7BdmN!f!^ z9fiD8HISk(`K2GM3(;;DGRyQmbBOuj|z=ON){IzxTO;6Dr0R+ z{T(est1-ALJ|2X*tFy#k(jnsRiyR=9xVBDG%h7 zd1*cPS0*-1C+Jb+i zNggjG609TQ_X)+TKb!lwHV5F0Yj{0oU9gQMUrK=*=42?bgr`vvhK%Z4NFlyC>6~-R zFaE^0cn%9I`Y}CcBaT^P;4Qw6*{FKHimm<$y!OE9zngF&4qF}2V+0-ZM9mAhf~>P| z!>~oMNe2RdLDkx35|QAAxm7Ld_ye`rh`H!O>Kak{>c_giVQ-;5+0kbujwzFgx(oGC z$a?F`_3CPjuJG_r zmj|aA3`2QEklhgFL9Q}t`}T8CH3vD_rYmA_D>bxf7)HO48xV9Nz}_$fT-1jSkU>1_ zEd+~fWlCQ>YfDjYUV0UR^%_Fv7sy0Z9)c7qai<`>gT)TYsie_EX$5^z7{CZQ#hucy4!+e)fZz9BboDrWYhEIlwRhw(1ou+^$V~;kjm5* ziqbVTrWW|v74h)Jrge$%++|49Sl{{1TeYSdI`&7(P~9g#BHMG<9t5ZuJ#gpGH8WPJ z@H1Dn$mi8v?1lDV4x%n1ibk^-1Bo48evzfr9>a7aIPqk_ZgDW1a|*CuIDyyjGkMgA zaLg!3^Pw9~p_`;?&6_U3zMIR{f0DEuVj^r9?p}uhD1RPxI9?+ENeJ=+3Hc=BwW@FT zDmz9&BL5w!y*sLOe5v$&oB~Zd#gO$Q*SOI)eV9zd$~#VPBMUJT5}Jf*mXH1c&fU|D z|JRiCca5w@UrZh(!Z~R(aNsWDfYBN}+k{*NaVLEWFuNsXn+PI8 zu(SpLMJIXgF$(7GipZ(0k^3?{5L_x4uwQ@HE@P+lP1^V%Mxn*l8Vjv@&^D@isBh; zz$)2BQ1W-cwAfgX#Y<;mUDPPZFIKIM6j|)Hz&Va8@>e4gt6pgFQxVpTqUu|Ni*RH1 zYss|_OJ%r`QT&M)Lx`cOExkdVH+$*WU7=|}lb?@hKxGZg#p40_?;d8K3WO`cUx?ew z=6t@4`^-t2F1(0dAMoEKMDm6}hV;Wq!jfQw{EPTf9l~dWtxFy^tk*cR4;mGP8c9Oa zrV-BIYa?i1s`U@yIy8eMU8`V;!gR=9RC9CZF%|1Jxu||pTk%06vc0u>jxuB&RzPjD z8nG^pxpFPi?A3Tdn-0CoYN>40I$)BJtdw1gGg+&tK{xN^h^eWnYyHOAGQXv6C21)* z+w$_jcXwu=HCroO$1?Qb7iFCZmG%Q!C0=os4~fITgbA+pI9wJRkv~m!wmW5+;wc;U zjB6H-Y@!$27~SLE+HK+lm@kT2D-5TwpCrW7G>#L&qMfS0*_^nsup4YOEopUjB+!Ey zfYlR>(%*2mAvh{9W@QOVm?vp*RVHwoi_$Oy>p0sixuhT3KPHa+BUJs~8qOLL7t0v= z`r08ez>rcsi=_`&x(~`(-08fE5lq9-upr8H1*J_fe3}78=My{hYT^w}7AdvU(T6wW zl(~loTRy9T5W1oK^Pbo!E0XHZ#-q(Gh;gl_utW7Ml(w{Hf>JQ+mR)kBbr>m@RK*tG z_5CJ9otJA}-=|0Z>Jv+PO-g@*Pf&A|huGF0qq3QS@zILhy#cnrWmKyWJE)c|mk$}*J zz&6C~PiR(C1U#W2*E5Kp2l<(JDWpc8rEt4uSXGWTOl|RK>er_Z1%;JdW$6wHbCpS&6RDE9>iUi1 z^f(wxbu2Ef(+kqBhHNOm&b)ZhJgNhb+wQRi2>jia{gJd-2&afmZ0Q*<4XEv3j=j?o z$;x#x89l!u737v5h4@@aw2|aV5t^JNrTW^y7W&q*+o*DoYkE%DS9FNmG2kN=cQWYI z0;Abwrn|+QhcM3|0@+R$vc*`KCY-9MEo6H?N`Ix>lBG%aJr2`E<9I1eVtIdD-HZ)6 zA6(ggJ>3-bef>ChXhkfvLU)=*(;0RNX!w3Gw!;e8-`)OqpISCgsxeHHl&?3#6?#@Am_}8S*C$e=0ve9~dCZEDc#R{c(js zUe0;esxhZYpEvQrlhj+p}95ay546%^irl zYm(&kIV6U6v$0=}xmsC&R>QPId^&<_hJF}~OWl#Jk7ke{+1QZYHW(HE8h@q;KD`_9 z2e-hSf22z3D~Bc0r%{13h}V>zEx4+G3no|*xO3)ygq~^HrCP6dUbpYKC;$cqjM;r6 zT66IX14R9HBJU`F49CeOjFZ!;H{g9nK3cqN0)D_rR}tpyNe zyuYL-gfkiAD?~apo(y10$ZnB>{)Ai2-Y|Ci{UECdS<$!dUs&~dlFEUgfun81Yax1R zuAfPPCvi!VgQw0HXoL6R3-rklg+c511R(o08)poG2a~+ca8f+TW81HRi4QUmGKJO~ z-}|`wr>NdwD`+;qL$_fEnx40Q8MF}PT7He!Cs%XQvS~yh!7sNz*Lv6N ze0p@hmtETRe);!!_>Q0OCUgH&#DU7{h(jQD>6cr(|LlP4+8-k4NXIIX*dE=ZQ@gJT z1rtwnr6({F>6<(nw>Rgz4^JSrFtAOlddm&sKN9EsPt|aEBIO`=4sI+FY`R>9|7xR8 zn@s77;@@X5(uOK)Hx8?6=fNJssV7jLh3ya!oGwXx;QkkF7(i7`tYc89K%Pnkv7BmsQt3pHR0UG@e6`BwUl4N zPX6>s5e75#Ai{Q{Eqf8?4Tgo-D|w?(EOBdNvLqw*MU!I#Ai2uEUuA7Xs<2V3U z&y=BZHA|b8($>QsuPnuYtRR;^Us$OPS8*}Bk+kfx7wzO#UIa_gVxi0>{78d4nV>_1 zR3s&M)-RFn=PD=>-p=$wj6wYAc!(h5IpHmDz_DC&Y@7Y=42~+XMhNg+bCh93 zjiqa8qAWoW9!o-l#!!HqY9U;7nasEVzL0$VRNO`0Z}Ij6D`Jh!+Jh9C!9HRHsyPGg zR~hDqm#Tpgu)U47HufnCK=a%wJ%K$cmRB18pQQ(ho%%}s85y-!l=xv24&PoPOL1-D zBu+$)9O(T9Qn2^xe7*oJ9yxE%Oh--`O6M#{!xfvti-*}b>_Wo6*-mj(apJ{6W`t#L z3Trruq~2&5sXW{lcC#tl2TZ=EW#LZ6R`Cz!zd1K!@AB7Lt~;a~jn+&h;!c)7YvMzcr`tu)gi`A*RSk>?x71c`?E*uvzqdNBeXrFPoK@dXHDM+8wK_ zOf7ZWJ{q+=&M;eDBBCI6XhTFajo{N>N(O#0%QsZIMbF`1=;uNzN2#^ev#_LwT0BD- zr}xSpffVH(8YBn#Czm4(>Q*<1B1@~cQ;!7`dqHrk!2!#LdrL*U#wafr+B(Aq%XSRA zwEMFImQEFL843KpN|Cv9W3r)g4@jf;jS9XPX^OmUijPPO(y3!{1(uvjv6{*G4$oO; ztz8oLEP&bczzz`BXOMwil+&YD2HXVhq>xvdtz(r)HUojQXyd?$czg?#V4rHXHvV|i ziL9W`Ogjv7LL7Y(`f!{e6>Hj56e)drLg0GrtuGJHE?GZgc(glO02`{3#1juFX zrOi8WmQ2tHDUYUz)@nhQqU)F*a95sE5ymE`+KWkrBGT!h=fgB8}g zzl=4rEmgmL#96BcsSVy>IfZ4M8F{tcg*fYOU4Wd|#PNu)I+ZB&QQa zda?wtsX^AMI4sgk+3F%RfcB$LfZHOCIc*o?cUdi&o|`B7XA1&eVb%P=!GHN z5ftwGW=v^XYLDh>$SK~qY0qaQ!qD|VV_eZ~YR-|fm*GO5%&vP6#@fH7?SD&0*8Y}m zQhVrXUmo&9=q>ZZ&|$L$0%u-l@9VT7%FPmOzO#urtHC zI0dE;GYIlgHzn@?reZ*N;Kt`6_a^ysAfHpnEK&-b;L;G%DD+t2qQ?aD#4 z0+I)(H@zzI%~|1QPdep;`+O{JkKlTxCL77Nm0vVBm=)3uL#_R4DE8t+N0dkE8lCLJ2wi67g-QqCCqYJNp87vbpS%Hf(ctrf zFr=v&JL<@V5czN#_)k`QL&?#@_>iHvMM!TB9i1@9*bu<3pARy{!a%WbmJ*7_kKGO+a`N`|;-ExjxUVhge4E_Tq(&C#x z>R4^zd~J%&1TdNi93jzf1SS5pxGA9|MNiO`-I4UiNti+$n6~mA2`MFOn+4eKEzxWd zpG>NFfFEpr7nvvp**WGX6-aW38}4J<{72?s{%2svWeVkDsieXx7RP}w$W_?jOf&4zqO3DFQ}(kG36w)! z$5$K)HM{0ASt0P-v?7IqiuZMfR)rE;VAz#`c}!{n9PFOLf<4U49ry}Se=;u7F(GGI zZmz6Zdlcs)d{}E_oL+Gn#b!kMmJZL%#p*9fR&q=1g63MWJd8GE?zS^D6i057o4$na zcoa+@$%QBL@i}X~?29Np?rutiq{jqP*kT<8M>zSk^aqDtqIQ*C_iTMXrn!wn>ZHny zsd4=!h?9&7v{@I}Bo5fd=Uk~2sSKd;@Z`#1)tq*oGJ&BBx@5gX3za2ZCn#Sjs!}#; z($|N+n_%ou$TGU^)1h9=M6+=5%rQ>9z6#Fgjl{0vUcJ zOnVE=(AvCEG<_=&6pzJFobqmmX{q9UbGaTpE(33)!78J6suOyJ<`jw@7ih^_F~ZH~ zo`xRk;8rP&EC40SiDsUw2Pi^QOe1?tRe#ow+?;7h*~_d=YROHFtgw%D1#EjdGojpz zyfSmrd{%NlsC{Ix4br8(q@6tDgB}IzJHh>7d`!uHX~cRq@#=FHdv=8m1qAf{I9@K& z!|IOv=NGiYKJc=Ytyjx>fy84gpd|Z~-u0XENc>kV@#iAyP~~ag^j=n|siouq9{{FG zeRHz2SXuTr)jZ>9*H&)V9PE|fD1V{8M!b2*);Aj!HSEc`t7P`*jkp!p3_F7_ik;4_ zplsU;=$kE}@EXj%D*1o(d~=__C5*nQThoTqLbaid2dY@#gnSHqdi$h95bcyB#3>Ix z10_zsQOa>pF#I~&BY1_slLy2dtzopRQD6zcogZnr3Q$7HxGPX>$++rYNmW4il6ZE_ z-mJSF7lHzr&yd_6o6msU{vQchHW@>OQSmStot7q~H%w3_Wi(wF?)&nOB#3xu>MP;K z@oy%il$H!dw`l5d`!M59TzU#@K11X~K%iLF6 zYTR)0n+N}YrSF%=)puDF=qhzHjv`<*@OP^B@WG{r{C*AJ4~#RHHahnHG5z1Y055#( z;D1wi--&!`ANN8^s@2$7 z7qsljTZEH`qRY2m|M$`w0uO(e9ah!!+e4;Kf%uYW+{2F90G*cVgHx+P;Otrx!dPb$ zBrvkAwX`VZNCFmqP50|lQ#Z^B0Z5$6$mkq(DBV4_S*UgA)47<(YKO4GcjP&)Pz0RQ zQ9zO#F1f3Oe*L94pTW<{O?&)nG}$Wu{<&JUw&)MUk1*xh#Vh5oI3~NUUW9V0w}emw z$;R4aBJ-3@1Z0(a&vQuxM~#7U!kJd?MS@Vf2RZ~%hvH}|uw3#EX)T0Em6uu~Ess;k z#OF?T>(gcT^*3DLP36i5kQU^%}tU zAj`)M%$QILA;jjwL#Yx5yL}qM!=2J43BnW?sUF%EVXLJSrMfXUakd9blk~*c)u~ER znk-x_2V0K397j-NB;goNX}c!EhNvT1$;10g`c-!*Y~2N!ba#_kavtqKm{==Y_(12b zEsStzRP^48pR~0RRHT5cBs-4}qnG2``*=E$CFyDzKDjMd#obk_x_46@?$I(>^v)YP zb0|%xene)6n$=gSn~j79lU&~S!#Z9?|K48IsWn}8S9H2?HlAVR3Nx~~D_YrFKc|wg zuaMj8V|U{YOMb_5UFP%RK*Fs5f)AlZg8zSr!!VS3@o4BF_5CAzlZuH;OIuoz69t)U!rhj@6qtsZeHF;I} zupkzHdIt9M-jNsk;XB8~t_qVN;-Pjwn|Wa`-DP z8id1n2gvVc^X|fb)Zg3M3uHdDOBnXChkNPQ_08Qf7bqd~I z$`9Fidht-SacVGOiG(}14r7JyvcwT zSxxJ0UOO@}4b`MK1*$^6hQdw8l>_B-M(;5b6otM=ij!jHuH4~S2WvKm=3N_!ZF8@_ zpF8Tdn6C=8^@cev=#yXrvRM-+X4^==W6Ll#y=ZpQih@J5C}7;_;QaE{s9xmLmQ1y# zQ``P!BYH>Yim>-R%R+WzlhxBqo8X>J)4&K?qPuGb$RB`{r~MZMz*|iR$b73HpBUyTQpOJFPg_JfC`ctY5ENcd%Jo z68A@MT~j<+pP*jCX?Xw2Jpacm{V(d2mG*y_=l}btQh+&`T(- znZerzAuG+ac}0U62s=!n+W^?!a`bJ=0>F1av1!Ks?u6ZaK};6PkexN$8HtdRjt5&v zO^JQHW(l{LbeNibUd^ayH|rV~2u|hh;Bzd!S*c;a$Yv^;3yN>d7tDYXItA-@DyPFF zsUAn>2W;M$DMimwf-z|%U4Sel&z|J+$VIqE!s$k2G8-A|=QC$rp@2b^MW2pESIzqz z_RxX&G->CIZntpQ9h|EZR_(d}Rr@DPWngdQ29%r?`vS>SlnG>sL9L;?uj{}=BtY*b zM6w_LH|;Cy*;}d%EnXhj8-+TH^3AsSh!W&=Mjfjhun%HwBvkhuFCAfro%!%pV>i z6p@4gF_f^PZ(Rc*Ld35Yjg1z~PDO-*(9l)mo!NjP&4Kfk4D*oqxsXqa?0o2jbw*8a zp@tb+KW2tzn)I7tm%FQ-pnczJaqp#o<($K)MaI3oNJEedvLQl<3y&Tag=?nl{`ljE zJiEFy5Ghv<+ZkujW8e$X{Da^&C(HxTD5t=^V9mOB({Cv2+9pwlnw~?~s2ow(<#4t% zB|sUu+&m)tnLm%F5>nfHxugw&z76Xm#Xrb5_DyL-&Pcg>5c$U@)S3E%1~`?jJ8Yby z@BfT2bh5nDrgw8Y?nGvC(vO#H{vm|ppL~=-OJ8?+0J-HQLjev8=B!Bk9R(6Mg{(cC z?t@)RHhv#U((M7z&NLttJi5GXqLm^nV?4YImht=Jcif36I%fyDHAxZe&A!Lx(4C@Zy9cS=k=Er-9%Z|}OF`!g6JvURvp^f64?pXf* zSF+N&+`hHdYi?CXBa!~tuFiLddQ9&)6TsTfk@RPh#^GB5W~~R#_th_g7@F5R=jF1S zg1;Q9bs>`AdRp<^ntS2pn}fvbi=MJdhsd$xfVvt7)6y4*K}`gGspYzTC++1FaQWShOV>U#0!U@fo*Gw&;|5~N zYl);59JHFu@`6Ljn5uxxI)y1_Dm%UUhpB2d^(aev(B6&kj-DYU2~)tR&4@oQIe|RW z(QIU;A0$Wv|2REw`-vc`qRdGFD##Q~=5k2{3urxX(S zQHwrr!P=;WStg)56C!FrQ$o-&|IN20XX&i?N_tf42oZc`q}LJOM#jtq>`ltJ+d;i5 znj=UOu^M128vc45jLbHqAfJt)nk)@CSoIkmcJ;md^X?kBtijXTdIa4|)+OUkmPR!e zz~%Dby$4>Y`FLt20ZmOj+HXH+PWu(opz%RgL~hYEn#UL9JnBUTxoY$H+PpGUl51xd zEXI8PkNiCgs$nw0ajNtYAueAQD*BkKZ>;L#uat#=G#vc~-^jGPo2{aZx`E$g9L~hr zlPkFyV;rbOX)02n@JnjNsE)ir1)78pxGKsj&EL=z2|}b8y$A3q^Qlo%$l4P0w-IL< zcLmvYloRx8rR+FqcY{O{mAeImPW|bYLW?z>WgN~iZV-?LFOxBVFi3cQfV8OE0l>i1 zom9Rt!Y7K-0!5v+I0&lXdT@kC^WWG{+w`V@FD=YXGw<%{9{do6)8DOFdqitw5Q&ll>;&)m8*K5ll z3}M`_6TwAvsp*PgzZ5qd`sz}-Y3BsNXX6!R`@mWX_BM0xO4^Hnrq&3p=1@6s6u%dQ3C;XJxbC)f0hQpjzp zQ*m&q@cnkYii~9ZVcqGK zg|O0Y)$`?y0%?-Ez{>o+H@^)+P3 z_~ZIX)G^QUy(0@n%GHL6dZMa6X)VNGrk)38;n$=ttI_U z2`+d}`8WavzZ;?=UqLoXgc^604(r@^Y%BVU?@m}BSGM*X#(o+Ogulpg*)X&(#XWIu zRF2!^@osxHB^|J)HKNAP$vnm|R?Pk;ehA8S|IiPbzLGV#q2a(;6CTTXsx80ZjOal< zZ5_A_om<=7GDKxctD+yp$?92LfnVB0e5`O}8~ZGACho3ZZyuBGSzjd5iW1e^5lFAa zU6CB&d}7oR%k``JX6WJ-1G1m{7ltUkiN*x|lDOC;Pa(;K{U0b&YBmQlYT}OidIHdE~3NTpO%6 ze~v@?(l0&$QezYhMTUSMTRlVy~R+Pt)%!BW|H*+IcvX?KKULUGy!A5GX zWGg+Ilrfd0+rbc>{MO1sai+VS^d((D?E$6q^dv)vR9MmiCn2Sz zcH|Yg>6L*PW&Jd#)?(o>#mwAyVQju`#o5I-RPv}WDG_#!bph*w+|oPZ^0(Gzv-|Dd z`ZLC21+G;3kf^Jv#jkP~{hrze^NurQyXvi+EPym6LQv{(2R}SiT^|BOfOijk?Qe_^ zsHOtQpJm=$%ONOi>`Kre1Haejj_jCdlhOGKLvzvj`zE+KUnP-itM2#WOtF|ETH1{-4J(vj5vGBm3X5jO_mo%h-WE7EUyBQ&}~=GQH|$iUKJhC#9)= z{j&qclfH9BSACro7w_>2r>Zw81cS z33#v#`QjMgiq=_%s=BZ{+wt0=i@e4OGG}kztA?&FAI&Ci-miY~w!Iz6CM<`NFNEwTg9l>$C=sn%+q+wF54C)zJeqZOJ+zof){r z?Y25cjoYR9S7$BAxEU9@^bfEa8OO@M?^$B_j_PgxVqf2cHxu5xtv7Ra$WQD&xZuvfEO6f}!1;Dk! z5oQs<_iV^|$XsVql$R-9$J?6jdToe9k2X2U&g5&GCHu$k3fm$4B+0;Kq>#-NSo9{zQD%%?{%;APR{I>?2r{BHs#4-y1Nl0a!jAiVg}d)m zz-P0$U~`f{EUqu#(A$go#`5^dbKMWXg0DIm5JeFVVjJoOoWaf+l#pG}t(lvEquSa? z<5P!m+>8%#K;)W-8QP=xN2V)SUi`tbz;A$2Sm=y(Y6v=PGT9bgQbtK%@*1p=PYif6 z8KsVVr4eh$7~9ODcbNM|tO=Y_tt^q?L4iCi1bTy|i}jyeYE;pyj~xP&$HNIU^r+3J zvw2F;)Hv#~Z!F=yk&c!~x)EZ~T;?0x4iVL2w38jd+Q6kyUuLd+&OH&2*k0d(yuEqU z5AosFlCh-3bNOJOWAl@Dz6{-vA$Y^&EO}vT58}^+Ok479J83EE!3kD9vkOBC+d%ja z&|~<}8B8xkqXQFAyAa%`iA2%{>ehwM1mQF62L34s?NReC{0@qAE<_&|$ZJm^pvFZE zDk$zmkRqHy1q5gh$Wn#AowN|WFsZ@fLR0{v$x!TVCE8hw#JN2@=l z45tuO5YmMpR5<0#y?e_0zCA7WNtNl;3dl%6R*mZzOc3&GOi=dsQvA+U0s?r!T<9L+ zb}kjJgR)Kv6i9;QplM6g!d7?>8HNJh{?R)MTi$&Gz zVtS1CSpsVE?YOaYkKBmDj)X=RH_p=BqYB*45={AQ=P<^YBobvMUOX%6!efa=iy#d- zMmSkx^3gdD@H}H?M)sDe0wxhON65O+d}yC5HlY?Q?fJuL{gky|mgnj_T4uKdFRRNz zHQ5Km_E~iu*w+G8%5ZZ_k76^BPk!91mpW+EN=ycw``@Lb#9-)%L4!zzso)*i+19R?6yP>b-70Zd zTH4u8R0rK`#Qs_D7uwU3BIeAmn6Zjj`pHwL zGVWMW#O4-lzQb{dlZ6$Eo)HnHeVKr08T+lQ{_@FUV=&qpl)Y(lILenNx)y0I9lxl` zPc565!=VH+u)(X!NI>$K;?AL{stcS$pIK3cEycr#5S%ja%*Sipwj&kN=*ds$#6laX#zj0A`{2oJ{3SX>I3m zXfv9%1IMRQfT6YZPg!`HtlCDIr9rH%Ui2+x=$%zl@}o&08wR5;aV$$tTQU5d3crjV zwMNk>(DSdv9bsqIQS+op5YYJgj!bH~{=TPtZi<juKP{tvU!h#VuW2J|1&=n_#6Y zB5TBrBVCe)mTec|=vT!?aZ*W*^-+P7%jEB)1)l@Dn(NXR7Jg+=t4dE!H7nNl@ig2% zm#nQvZBf}bnN6(`llcjk7(8y0j#-M*Jvw!MMNHgqu%N)~5!pM>mO)_R&Cq2s%}0T5 zOPQmnt^l8DBe=L>9eq`m3`q-3eF0xKcmfb2HGS%DR2zjQAxrUM5pIpvtLL_}5&WCy z0=%H5&QiC!tFcSEXDSWUP$6wVN!sJnGz2hsJ|@B*6%BvB_uKTgMOiB3O{S}iDMxxS zLHfl+YWC%9sXJ7>ZG#4cPXjc~z@-O<>Ni6hOPU81?bKcicL~%UWUQ(C zK%`2QL?KRp61i8XKpA?CU!J-XvQ={~9|&e`a^xLV-xQC&PUiciCv)~Rr81il1Wtdq zAF%C|zs?tcu9e1&goP7M9o7hjXhuhJ0|iP{5!i>VaJ^xK=EYEGm3;p5gK#*1Dw7m9 zmmHX*4%9X|79uSm6s2Dd=P(p%y^DI*-JR|+h#H1gMWE-sb#zV!pg!1N?Lf%xMrqgz zdd~fL2U@-xa!G|qzDs;?(w;cxZb|D0*Mq!tk zO)z7Sn%gEE+Fb$?V*Dg`~ywE+}p2%T=?Y?m_Y^2oCpGg)2YCk zHoW2A>NTrfRiSN|9G60C=2SjGQ6T>;{)OLJt?=UuRtbtnx_p5Y!ycs5I#Yl;4wb}N z5j_))ss7fpg}7ch*Z0*Jb3Lv@L*}=Xq3LVGBfY+u3=4f$NKcBKBbO$&?KumF@fM09zz-4&IN|io)>^e zoSIv$DYwN$HOy-dxR!D8V3NWc;YXsvKRZJX-(dI<7g+Aq6Dp?-5!8fY`sHDGPar=|%{fa(8ywFxgTjoLh!sWoa;MQ-y{5q8XrYk-fr+EOB%27SnZENF>DOIOj1 z&GCDJf_~EhH#KxDFQ!3qk;r${jkJ5NCo>F~Y>v#%gkZtK75OD-g{Mh#(zwjJquRO1 z>$IG;X!sLrIeS^Yb}*e8%XPncVx_>IW3==oQ?3Lhr-Fe%Q14 zA;ROcyq$I)zTrq__>oT9KOm9%51D!!HtnNmu4g|6Wf}?}gl>$}mE@LhkZ6i-NdWv8 z+1t-=0rEg$q%X2QqOR>;fu`=0?Ca^pTnSA>@-kk;fx~M7;Kk=BOnMydFNCdaKyW^u zyr!%$sk)BBtR-#zzn-UV+McRx!iUbfqWN$?pur?M@cu4T`$vfK&kLddlW}7I&tsg} z|82&J{cjj2_J4Bfdoca<^_De0&QQ^41!VrS$#cOn*IC$$BtKNTa*c&}vuFrFy}kyOwL_POo$DXf<=fp&zy_t?c!3)>O#J$hl;co_qgvCL(a5IyvOsC?sB`>8Qc>{bR+e|r>z zmt}(|$5&~EJR`aoP%t7|vpk%0ynY&KaZ?~PxXyf1qT+$zH>i%dpE=<^W9OZBChdO< zUsuBT#bD`tzt&CD2ac&yX82}Fb}nrKn|S1?AK7Xk)ifH9p_6qqPrkgkFV#m16Y4R! zD65JLIGKWr_$x=ua3hviZ~4^k1N|v3$hpmWSQqz>Y6V0~ zw>QtsF#0!0aWG8<;Wz|>be7<&7chQM#ZyGcjd`TsanX&crK>9YEI}^MP~FgPD|(A& zw!2m=w2p!1=9zEc=;4@{ARyof577+7*EIb^QA%NZ-#}p~;pU=b={9#(WaG<~Qr;rm zg~@yl^(YiO9v)TpxplvW4r{97h5sQt4f#7Bk-sXkS0@n8tUMV&A{H1Q!=H_C6 z{`*Ue)(3)ikaq);-}N^RxXDmB2oao|KIELEFw%UxO4h4SG8o9@f{O-DlT|D~^@T|EEurYJ!+_vtBl_Ej&+lZ9y>58kH7=|$YI4ui zO(n4jo%ql}$D*3`N={hJ%=L)uFf$Mt&%&QE2|SRg`}NibMk+}{Jrk%_{ghz|>x6Bq z0;WCp9ci-SY?npMx~1uA9mAEyc3=BGY{j~UhfktY7jksjh)>RY=xqjZ>`!6sA0SCM zYPs(be%B|L?SL>H^ImtVD9YSc3GHdsR`b&eomWmQ0w*Yt0Qb6}fL12Y%XZlKYJEjd zbK@t*&56-lvD#WXb!opx;fWrE7w+F+x;OUgd+dAE1niP6QhX>+G@Y?vq*7ITat}h_ zbMKX^`uOx~g_?`;l=NDKQ?)p#!HhZ9JhduUuZZYvR6tF?sQjANmqp)$pMVlC5y1FBk1?qhSCI^3=)e^yq>W7R9O=c zM5W3*dj@f1wZ(V6jvcV5n3_e`orF_K8Zq+dWCWgY!C^1v&3p9@6iLY(MEtfORvrdpzXosqD?Fxe)P{UNLkT~_A)d&r@@SK7D3V9c+JzmR;R*B0O`x+mahihI! zDqv1>CjJtZStc}J0*$~tywh7aL6Ib?6;eX!{*o~6kWzfAunlAaiO_uEOVT3O9S@;E z`M)M=gIrvf1yW2a=h%8+nSxv_jrmfoxC8m>U!&^%rG%08gdpLVb{Kx>^9m5#Xz>R0}dk1b`lT@}J{Eh4w~iG$uaDF{I!x3Fo8RRdRbS6%$db z4?v(R&O(0#+B7r0o6~@k@pz4wP?+e;3V`pw&i2?%goIeRO)?|jA0%y!M%1X? zrzK^fEd(YtOR1 zY8#)N=WQcl1tj5L?4l*N65gGTHfn>_(E^iim7ens>s%+3W#1p2)VIN`ay~#3?6~G1HtaMuf6paw(+&I-)@%0h$r@lN8P>t)!vC^eq!4Gf9$PT=BB!P zmsYN6Zh|;foxpsGukENHnOJ}NB``D79wDBl z=k7Z=2r`+I0^&(8)|niZ8Sr|L$& zXYnrG>Qv4Y7z%adAsi}Pkmb=awa>gPoM(GQnGC_IP+}zx8OEXE)O;_fSvp?MZ&E7Q z&80r$(+Y8%8JxX{KJNd z=gi68UiC4It|}WLXlxc6dC&jgKA>A)KzJq$PeQ`Ve%}qO>c!mwU_7cn*yf! zO#rU$<(GHPOf+ld?3VMBHzzu2ywz903=yzt3l!8Jol z6;vYz)%Q(SKU^wxuxWJWfvGQq_N(rXZ+_%aX0HQ)-VYw%* z0sfx>tU?*%*JoRLA8#Q$dbi3jT_0}_?!RgVI|c|^uTg`ax?r|=?sFEdKVrHv#tnTM z$apXd3f(!)BV-O5a;Mn)vgy0h;vGCP8aT~E=*EMxX7segleKU1C+AIe&&Czi1x2dF zY?=js&;fHVnVP@22UfBuV9mr9@bXjgO^ax#svzqb`09SVeDsaIzaI>dVTshoKIp5| zDvYx-7IQvv5>S7f%G0~bus6h^A(%yyh*VllYV{XJFv9K$Bhr zB#lAnTSq624&{wH!4DPK&QElWYIB~Q<79gpNxfODW_`7*Mp|z-V&MS(!Xb$~TkX+3 zJx9ew_=V1o6R-*;O<^=#upY!?nzomV-F$!yy^Rs_JkEWYz4Wz&qxW;U?ZdAdYEWRJ zA#kKg7hcU`cs5`6yO?8nw!>H`kL}iRj&EZ{NaGeFMpO&;5cZyLCgcnrSy97 z47{+=Ub47d90Fjg@?l-d1R91V1w&|8pWlpqKMf$K{tgE$p&bbe(g=Myvo}d0F96V4CqBoQW09 z31%WUH1Kc~T7>dW9{OwyV{UacBpFUdrFrFHtp_S@#>CVyuEDfmVY5>v} zUl;)O8AnqH)JwZ6IP=Cp55^)YS7pO)%`J`-x=L3(&Y$0L~BWPGo5(f#%w^wpH zrc6oO!azBs6hy`Z6h^pW29uq$F~1`FqPde1O0EIxq&5#y3DGHz=$OHfG8ohW#qI*b zPltG$wud%^%zg_13Rj?>1i$u=Xhpl*$jOH2av8u?v#w25h9ODMP%bSonkS#O@Y(r^ zLTw23NP(M&D}j8LJWdgS+sx;lEKc+|3WGt9nZb;&X7c?+DoC58l02Mh27%eATQY-E zq1zR;a&kmOz0Xt@qyG`0o^B9@Q-6q$YGOSiv%;}Lvf@co>B1f_aM;}^UX*gRC6 z2$Dr3`;CLphU-S~bZ&L{`-X`F|K{&%8`b&wW(|hpmi8q->u|0bdT`Mz^Sy3u32AW< zVS^tP6VwWRk!nNxR%l7WaY)WdPs5tZw|?VA6Uk-1>Z?K|agqH8vij3Xu9dlj5uhsv z)4J5@fFYo$bN!vh`kxD^YKis6#&@45o|s`<+gotgSIGi!zxoFzeq^!M;L%}%FG!qa z_sKCjNd>1J?hUX*U~RFA$=ux-RB)Z=6+XM&+!RBA|KawX!Y_9ICde+_Lngpg84qSMe9SZg5oAa#LC!kDmz#frrV%>?lU9O(B^+Et!j) zljdY@bXbR`24~WcG5VE8gepTF*)<)AvRs0WXaMPLE$Jimt?|u?hKy9gl}4i^`-KLc z;NbBqnX6zA+Q_SCpmCm3@n*dEiKAx^sCt+BT`iVOGp_evy&EK8wYZ%4CCa z#krl78jaKLo=|mI+lG@Zx;|`MqJQNjIJhUB6r^=}mPNmZGq_Ikb9HJaGwDTx{T`_O zrXI??3dxi^%a}FF<(s1^dmv8_+Z~>;%LdW#12LWg3BqzX2}Zv}Ox(BxHi5AQ;am~2 zI6^Jo(XzrjWEviag+%(#(qZ&WCNbZU{B_62jPuNHwRI&tPgAYbDUYM1dYh|teO7F} z@3&FRs~*VqvXZK@!SrN){V1gb_Ph#* z&12lO)~2EXe)Yx)HZi}N3`mxx5R>aFIDVCNWp$FwWC)`bQG&YTTP(3BC)&o2SqlYK zTr>xJ96nsqj&2i%KR?@^kBmC&>CJScJnUTSj(Z*GT1i#sInnFl+>)Se`hnq8in_Nl z!nj>vP4(>Q3x?e6+i78V)jRN!mUFWB5$kEpprCPId!eaTwgdtcbS&IGFkl|S=}%zK zX_L()5V3*dOop*}I@pREM0!fd_KzmhPCP9K^Ui7-=8Ciu_tPSR8jPgDLL5kCNY2Jh7i;ca2cXZQB+Z8uI>B%}88=wnI=>0b+3 zW)#Bcr+!dv-wVh7DOL;U8}_hLWS*(8BPAG{G%e)={3;Ob?}seW|r=7 za^~qjn3w|#(Xi*X+#+mxGrb?!)?_)kO=~{%I23)r`E}%Jykr3xkoR+W#@KntWBWw1 zX!Z}GK@ERI3PaUJyXs*Sl5NDD!^ms22bugSaI{>m>@8&d&t-1(%5Y%yOPGG0vv-ds zgz{W|)$-q>U{33fG(l|zGJPWq9DWCK@sbpFwfU*_Rr386yM<0XLq@AL*zRETfjk{} zh%~|dFsbTk-_9xvpm#i)YB%R@25k}fop-?Kf=P~k7wb#c3lnBv&aQQu4FbHd2g+3| z9mq$*oWUe3o!!3smuHVpy$5la9k)?ch54Hcf)QNXUH+0rU|8jv<2 z$NO7RW-O<}XkNJBH7ubSO9Z^LOw8K2jwv31HV&Jh(9y?ujLMx4j9j4Gx^yTb87;4C zgV%;zXfMhm%3-ex%gfULG+@b)+z9Q@$)$qR!g=a`uz4+_fBXn7xg@*#r8|oUQ9wR; zRNG{$6kbarFR9?dG@>0|JCG`+z)ymt)Dxyd#nxIrX`xa~$8vf-7Nc+qj=9w`>;{$&3TT#jmRDhuO5>T>oSfu^P`^#CN%fJTz zv{y_1DgU=!yvj1dH6iE&g_N!SIZR&R2z?rMgt&^xR^@Mb2G@y>FV`|cbx3Pln$i|r zVQ>jO{!TT^Xz>X8sp5MYRyU?TjWnAyS4rkU&C_nUT7g;<-Qd=udr$3IHoacgOP!}L zN3RE-k=5Liv4#U=+Ti7SE|^4RJmue|nc%UwX#94iF_`qH(R4svw4t!#v_f+0qihr9 z-rD&Ttl3sgp~~4C+O4DfOCQ7;bW1adS3{fGKyPp#Pb`rWqus4f2s4APcvW;J2J%38 zM1*l+hXm!;2%MMaC#D%& zq8|la-UiZYhpo=Y9{%>`sY3;g#njDAJqhl?HckRX;Wkm$No^vH~rz9k4y$Glf^ z?ffrYF@-?;>4XQ3t+%@p<;lX%&LrKEfydcOa#TbK9$6WyE{xqN_L}>KYXCORz3jG>_f@{eJ~Z|L+@QKK+)XwrrB+I4 zP-}z*uGQ>qc&F@bekWG$7O$x2BAmT8slkhH`@#K_1T+~P`g}cp`p$ti(cP8WZ7?oE z24u^0cHfVC-67KybCldB4X#oXX_W_l3BEkE&lM+2J?lj+zyh%Je}K>Q#ASB%a+R7w zsvG#mJdSlH=(z^=HZ9DCQ?e|24Ct2}_pA#*wEcRZFM*LhIzDh6QcYkcCQa-!0k^6%iyW5&*xp<%Bc?nQ`2z= z9oogBe5l3kt&{IvyALZm<7P)?ENEPXaO+r|AzkkltGR^{?gPviU3wH~qkb!Esfc?P zKk$UzwmJ`unkVJ!MJ$ug#9Ms$EANAKsH9XTP;5E)DSkb_-JEBF(s*zbMwXcEo6CIY17jW45MB`W(zg02DZr6xil`Q9Wkxi}`uipb?_d1@`lv7 z%1}YFiJ>2xsjY|4`Iv=JyMGjxLs(;j zUCLRUw$0}>Bs(rNC4C;1XsUT7Rr5zY_%$kdCkj}j7^W&HuFkwl%rVCYAUJ4^{q^vO zS!>cRq%TRs-7M|%vjnNJVAcg^phuG!@XYZD}Cym^@2x)dT(u>$W=4zY|T2M z%`%(N(c&JQwfiCX#N;(Sf7PI_|&Gf9uf4<1*!+vb4-N( zVQwz9U4-Q&SPSSWSYCn+8f2Edcrb>C!Ue}Pa#)+`xzU|A$KT!*6Cc*lc*3^03b!~*6r*-FgHm@){bws~H0(HiTnu9py4lqe zgVPOn8yS1C-~SiGCEJMq!kjNLKvTUXMw7s!dd}HzYi#tRh~UN* zTJ~*PxgDmvotjQOmG9k`@Ew+quXoBe0OtcB49Ntmm#yve{J@9SnbP3pizaY_h%t0GYx-)K1QDZj|4@knE*TjMvwLP4OssbDrfglSZ zH6e7HHL*ET|Eu|j6^g%W160-guh*;9_b=BgzD|dl1Qf(xV6+P+kpFeTgQA}c(nKkA z?61|0K@#$6{6A)`j?+#iPB?|13YC@=wo8}P7N!4c{$UBj+h4gW{mWla3l4fw5?cvp z7b8|8>}#s9v9C$PBL1=>Ac?aU&n=aT5~SPlLlYvmS%cgldaS{!)&?cVx6yn z+!*nF!lLwH5M}K5V$=fQ3hPsD56~DLKWJ#h0~=MgAiMA#uOM@eS;-m8<3cQz4M9q# zxDn>T+#tg`QW^={DnKf{SQ9I8CNPh6=Z6e-Q51+7F#ZLwCK894T2?rTYn#zrxeA*l z&IDnV4zZc4ScPkahHAY{NiUx5J4ck(stwb+nQWIi{u-@W(KVK}AL;ZBq`X^$t}K2R ztn{T}kWC08BIFG)1Lg+5)6tVi-Il> zw58h0pFWyDPiEN!#M_3QxPU+F#@R?k+4dek<^nE*Y>+}i-ksa>`1~E?tOytr;Va$yxMxnxRu^ z-@a|$_aNgazB1sH?t6eiJ~ak#d4IFka{_^RM>Ys6A<5(?em|#GI;z^)-82sJ_vWS< z?`P-s&l*_vn=5JDbEqSyQluJ%5=J%da`9Gpdo1Tn-mf4U0a2$I#+5C#P%Y@LPs^YQ zM%Iv%tV}B($}CwUj&r@+ye|_8%0 zfl{1!ekaMp&T2V!tFYSoifd?u?SZTyhHI%NEHWY$a7J`2QUL* za9jmcgEOU7WUclFV#?$T9CmRC?g2VqDCr@r_yw3>?LX}=$YiUzVRvPKhP^$EJG!!#~SrVGl*e-r8XChQu_%Fm)`}!)98h=?@!ua+X$I!OY!}WDM z42T!05eDN^=3L#OH#XX)3(1LnU22Ng56kufxN#vd~z(OR9F5_T4CRB z&g`Q=&*fIM?_H&t$turrOd_`c4{2aBXYf?2z!hXA_J7!DQwE=` zywRfO2FZR!Rn1Li>$v_&^_JplGCm89*#^o?)?!kFqVZKh-Ld--B_SlH3z+ zjFwnJvovvjR=92`vVodJvu+S_iYQ;>JjKDROC#ZQ{5OiaFX0|A*@x-fmhIXc^qoXoB|J1pYSTlxveJUYvG zh~XMNC{`vjXctV>LMwttCgk-SCfG%SRPOf2da34eva=FF4Lrz4-bV%o;|RbP_yU06 z6x=qO^a7lOMsn*wKWdVS*xnmv}Dk1`1)W4QfT=i6llr8-e+y! z>WtZhcG(ODsCm5*f0KxZ@A>7S23O+VELWR*vHDB&O#Pii@5Tz6Q*T@5MSI7&^O`%v z@P`X7h{f8Dx7#m0#AX|ckGu{!Y4~NekQ`__FvtPk<*<0O~ST>)SJ{~W0(V_BTe|s44|8duB z9RK?;fQkM;j=N@}|981-Ci?%IyJn*Qcev{c?WvfvW|+>Ss^OMyqld9t7*HS+(h*?j z`|1rK4{{I7w(i_25xuXNCz+5UwbnQlC_IEM495qVFFcn-G`wZ`?yBfB1LiGaF>`1o zv+MKy{)jK*bHH`t`L(JjrYhcbhcRmip6=%Dq3I4z&a?6G?IEU1d*kl$u*$_@aJ=c+ z!n>6@fCa$0xh>b;(NYHG(yHOuK;XU2dyV_?5MdUDS#^k0B>}h-)f5l--GrnQD1y!# z`jvfqcVL&EV;(UZZB1MuH!aC_Za|$n8oY#^li20+?&RT>>9Ywilji->DMj&SM#XC} z;%wj~)4XRT9++potq-1Q0FJ^Emy zSN8Q@XQz>4fN#^}52s(js$%h*gFUJAdqoID;Qa!t(OD|_Qq%Fm@d4X5+m>;GP16tH z-8nlNmjSBv#3i!oQsE}epMgn2wXr|y@>!sGB3kkw5|hSzr@GnpSk_03m4xUg6Ct~jp@O$17l@?YC-To?sI)X*!OV2A7~vMSRBmVe244I-?-yH zA6e9y<{Q~Cg73!a0@I388@8 za;9#TOx@{hj&A2)B8+!S)7Sywe#O4( zF|-utp_p|Y(L5{fn&f&0`Ynpi%`|Ama6fpvJ&e(-FC`UyOlr+1oB|Dfb-`z2Eso^a z$ENfs1oRr~-?1c0k5Fh`fxAkaOj%bRz?T1PF@6)DMm*GNU0fj)&-I76fn>&B&Dn6w zniP>x(SZ>yR$vP4M+~A`Et;NtuO|qPdC|gp!H@WJ4%sd&qSvHMTcAnIpZp=ba!iB0c(Dux;Wb7-W@GFW&m!)c;a?Jll-8%(`_H^mPv2EM7 zZQDMvZQFKoqLbvrwr$(CZT|C{`M#N{n)l+potssS-Pm2VyL&y)+H0{Fs3iPhX?eG_5Q$?3oGJ(}%4PGv#I&Zq9QX~pj;zw}Kn!m7pEv7q5jtA~nh1`Gt$@W+Pj z*qG-*HWs64_}kUbpR5DbqmPct(k;&%zJTo8#7Qp0KoL=iDN&wFxZk?DN?rRH(JO6@ zE|O%U$H>p&W`hwnfu(1L#d7t@Mk5Chc@Yu|zJsXBQ$u2#DcCCD7A22x7pQDq3T>HP zN8p;(M@W&HF#s(w!PicT`dFvl#8~?{#B{si2H^lN%m4T3qvIM@hB+Q2B7;AOy(Sbq zV$#TB!SEL8Jlu|D@iyX4PthEV+-8xqi!deCjaqOQ35(-iuAV>6V>bhLu<>xDQC-|M zFbs^&I+L6mFKT#(rQ}v;0CXiD4@w2lXN!sQiv@CQnyjo^NtEkoKv=fBzdPX#Ol1nX zJ$E`H7nY3F2LkOnOlgdK%kK?Q_lEo98}jShwdt5Yry^I`ZUEC@Th7*bl+yii`kwxx z0gKS2E8Dx~W=&io!>-t1(u6}m0#hK`;&fGlRO>}CyZpQ3jS3K13Y0A2T^r!9*kZ#*PqwB`RDb1 zx?_OPwUiA3*TcOr09jx8&))xI0=+yJ6#G#BYG~J-o~DVQsy7~{K<3r`e0F`d^d%8Tw7zedk}S2XLx3QPsa#j#k@5E5S`q6T$N(P^8M=0n#0|Rn)g_ zntun*kL-}De^W|!*vb*zwiR~|oafXdReR-2c3iCz-nP-u-nMyD+_p^+-?lN*-DbA+ zK{qCQKKki2m#D8sS_*dNELM!GQ;SbRwdfUCEM-1gO4OH?FXKi&D)aU)SE#5tSxjc; z)smqiwFsVvj8xTLo!<(0ZGSUHN?{L%ZgRJ$#ADKhQUsXk$$p7*>g)C68C zM;Wv%*Mm1-VlB^THU(9jc3^dS^kged-&a$$mWA!A!opwfJU^?*AJbVDWPRLF9aL22 zthDmV#4^zpomT-q_e{yZQd19QL9J4S6;qZjE62?&lhsw9Sr9)%?Z`(`tWIII`dTbg zsc)-V_RDm!?wmV|E4rJEy?Up7#f?1jB7D^ixx&VHt@OWYhtu?1_9-Wz-fVm8te`xn zI;`_7FP9wWDy@2>rcP|*DzErFrOK=uD=Nnw^GvOhBBvH_^GvUpJ)x4X!^$te9cdFT z&lJ*EwUf_M)mM(PI~#65CW8^)db5+=g59Ofz3#1{ohB&b~G&z({ z*1kC}H&OLx__d+;#EG3K`~YYn(Hl^Zjjk+M}H-+XgwHf`}mXs^hCXdV!y)d_6@?(Fnn z=M(;A*At9K*Ary;?gF%-to2);?mC1_sH_&tp7Xh-P8BdXkfg2 zahJ0}&l*h)ClkY)a~8tJl~SvqlQBUN>H5WKyAZ$N%kJP6x?j{ta}s+g)6uI6SqoM;f9`HQ(o! z7X)-D<)w4Qlw7MBs*d>uXNDKu0f4xL47${luie{y`mKTc>Tllfo5#(d@~dyYZ|^sJ zHfNI9f1$Uw3!+HT}qpo;eS)w%nbhyrJbTJ`J=@mcKt(X z=e;`=gJ6JNH1YNTaLN<~-~?vX!7xaWkBskrelGN>B2jvRRj=1+82b#ajiOyUzB#;I zlkE7BFCL(?`g{+c{u4hGw+nUtd0Vb|I!WzlQ+}((jos(V=j|!^Cw}NL|F@&s^!RVS zaZSitoz(h;7m5m$hjsm(u=bA9dIrZX35QfL{Ss^+aefy(E#=qxmN{nlua+Ac9$`kk zsSkrY1NYq>FAvzbC#L?nM6vQ7;_0_w%~$A*3==ireO54y!|GiAT)f<3eKw{$3St|< zG7{okn^(cyeT0KBvfuZ{50y-5A}=!1 zHvm!9B1ixQ)CV$#t{zkD!z_ET)Vz0DJhO*3kWqowsvjj9g>a=?`Of`j!dwQ-NT+o? zei;h+u1ke6NF)|Xe07E256F<8;2-apU!Q!Vr*Y(`AMF_(S-)PEB`rQC<-aq1Vb@iZ zla0FMv}p2{d?FoT6efV0+vF9aU%4=;w~v9LhIUgyQ7HCyiuqzCdU>8G#~2ZZ0Yw?f z_D+;RaC`$2Ai;TYcOXy#hUr8($#zeaQH+pc=|p>WK|W+SPEG;D^B{O!e;PrG=jLN1 z**jAL!4XS$<`)Cw1Q6Y<{G}Ks!SRVSldY-=tuhkDl ziC;IVfH6l4&ouZG>lYMVNVrS(mnCqjhzA7*sC}IDn@pxSQX$h;S2d={4=pyXTN)uHHi z%L9-sDGqo^Q}i&HvnXDVJlLW~4s#O>-d!J9jJcK4Y{MszVTK|43I*El6%gpK>alh9 zr(433cCEg}ayv{_h5_Q76e{o$Dnu0{Y%-R(&^8N+9mGsKuS4*UvExN6sHf!Hrp=L#OS{20~mG;RBM&xHrFs z5TUz?0Cq%!8nXe6qaXcW;G{G)HkWmU?Y3SE@dd>d!M5<7_{os6QQZ_L2JVPJU(L~& zm-fP@Z`3YjSxs##S40AG-tk%Uh2JgC)v8M2UK`~xM@TCjqP#{)Y6Y=}q{I*P3AELR zY9xO{HurP94VE`SjoO2#>+d!7LR9mr6T2*8O>^NO)Q^s(olL+n7Zd*W+L;euXGuBo zNun9j&6?g5#R>ftmEgL6uvVEE=)5M(%mkfMzKlqN@t?9Cu|I^Br(Mw8&Kx7*Jz$3| zMQ#Riw`2m6`!gC&PDb!Cw)G}=RpnPW(ep$$uHWjD;wkN*ao6VorzDa3FH9AEyPM2*g0d%IB!a17jwhT>5U_?6BFrnQPT92v z42VM`wU+-KfI2Qo^6HjYoy)-9h$}hx8N9t_3F;*x9Wqhkb$VE1c?4LB)QJsQOO=FU z&!u3%nQq$sB>^N~fbpS%Z42jR3u(-X8G^3F9aGsBm6Cq8W5j1iK?b>m69Az#n28+J zmo~Xl-iM`JL4CW9ks5m;*hNcuuLX;X{;!j5M3G+tgcfPZtAFytsj*W=bDky41daFu z+pjHXN@6rc?2?%Eve*ImP}E4*aBm;H%XDxg$ZJtk^!2>P>^5RoN#9VD$7sF(PURe;9ds#ee1Z%Em7!@?TQo>NOp0>GcI(-g<6>`JL7v z17q5#V0_E(4snqvuE;u?xKe5v7}}X}%!;}#lxoT!ya5@CQ?MA!Blb&40Nl-Pdmi=&-kt=1byQY(}f^tg2mTu(pLow2QC3sUY zWo+#Dpv@H!4XDfr8IgxL&a<>P`X!4u!s>4}arvyOH|`}&f+&5?u zD4jh19Q3?SY3P~xUZ8+Lw3FECr@WP0!UVJdVI->XFaY!cBdXiL)Fmy(Jl99IxRY7S z?KX}&rZ^3`r3pml5lgoGc}=q>sJF94fQT-I$&-9ePUKdJjzS`uamQ`A#Z}gR2A7SUk4X_!BHiz}qWg=Q zrP@gP?SIfTxeGol(JvjmA;fB?={2psiwlDd+$W>N)GrH>}`gk;@XN z^lhaW`v9|QmEw0rXoc#BG@l{;1_)@&0_FzE`{RRnbwjFq)}h2nGOevUfq7DIj$mC@ z?6OW&*pwlV8u2;Y%Vk1bMgq-EY4JXW#EmPaiZz8bYxe?js&HN8)P^5hti*&L#knUp z>dT0|gkZUjnJLKeOi*DxHXS3@*IYNBzKeRmV`sI^`)#oAA?IAC5uE9@5xs%Mr8j3s zCz{-7dtrm(Yhxfs-dsFd-J`HN^FBlsv!RnIHG~x%PmK8fJ?0CWX?*&v?7lNQIY*Ya zq3y+hgOXE0C;qz_X-(mzM1He+EyafgalNtpog&vub`NVh){avWO1lNnZ%<+Wy$a6YUHPQUzKqII^rVswkAkG%!6AZC~odIDt}LMR*X-E`_birkc?Y=?D9|(w-xlU(Lhv-IkQa+h6QH?;lmaLf-v~^yR+69VnAr z{-x^mUj!l}^MCv9WoG=pM<6o(+XN!xzaS79|1APhLpth!4Wa9~dWLfbFJ%kN=)}T} zp5~xtH55n4RuU~$M(CgTprvUxkNvjbslVDxG#^zLi{+I{ZGex~ukej-=>wQsU5-AV zH>dg2yBn4>pXu9|$LYX&YB>wZGREzW4q?D5T0d^3kKsD6d!D?uSAqS+usv&VgTI!? zhc{2_-kpJubZzTK`G`n@4k0HVtLk%pt?|W8`qLFcUI0~ejc^S8ns>2B+2%EPAGmaY z=t8Yw3Ua81{xo*a(HZfVsHTyarWQ@{${j{&-CrrjbjlqVf;%{6F@jR)wp*n1_g74+ z6Ge}xc-kOgwtxA##x#xoFA8;5)LM|OAt$pCI)7RnU^i6mE-%dERF@I(QGk{i$#_AJhy_I^L!P~eVW zExs2vfLq(mZen#rB_e%n>n|eir`6D43$&7w>~MOud0T3 zav7W|zyZzb2`=(bb&wRjCV<*e!K z%z@(_%j!Fc)(#1$#zI?9wIyTf5uCfg0Oji#IK}ld9|OMDOv!`-rKWlE3Z8|UjUDNj ze!zpB>bGkq;;ZWlIMc0}2;F`#)0<>h8R!5PMP1<#tC|ADB8ajYSN|_9>x&FDBNgi! z+p~1$l!uFKnNe*_(4s9n5q7xPtWT7i3B0S%@_F`L@-2Xosx;3V?`QzKhmK<6A*t z6N|~|7KC&ww8Eoirr>HmL2|^YU&hP>Og&_FJ{~~yXcv0R1{Yb>>(*GzQf`YNOQP9p zG&5|8%$YWeW-iB%wDPspdSmvQ!rRbh&_eXe4P`|Zr8Zg~%0n6*NY&4c_xrL2x*bwf zwYv1V>JqlLL#mo)EbGI<7un!!^VQg0%l5(6s*=$1cv04x(5r<*9&R8)tFU8Z`FGZS z(O|_s>>f1L9vkK0&)C<(NK1HGf9eJlxa2$aynJB1y6#otECHjyN4Zqoj~oyir0)-6 zRafCKc!w2l1KJ5W*T{wdrNZin)8JJliad=hc_Il$9)2hF0;^0KbYOUQ!x&gd$RUcV=Ad&(|n|CA$pi_*3sIZwr8CdSMZV6fftm6D9@xkDZ-ae|{{rk|{CB{<&L6Okx*4(S zT>W9SC%QEW76OPx3kGAP_ZEN?q;=5MfaeG6>-FPrw5N2f*UpSU#KwCT@}=>uh#5@v zT%5lS^OJ}Af?bnwV4Gjgh4XtgeLEKHECTqJ8UObCJlvVIO7D<*Szb|Rw}AEQ`eOO~ zkOfm-xw!n?N%qMuJ^^C!`F?-6)Rotgz2^UZEV(9kVv(9$%h9_~^gxxnEtzsJK;>mB zMt4%Nd%?gyF1|HxmzL#~3H9jbJA$DHfN$46l&`;t&*jc`+{gY@{m{vk*TMz7u)E&I zx4jO-Peq=yja&k@W69PiGQyE^|D$-t0Ts1>GnaIuDiGwjqX3qBKTj=Fr?y8P=d0 zFEC#ikS&bqf*cJpSk5so3~J4Y(%fxG+!sZjRII>7$k!>v3)8$rx#zXL#SONpfLHUI z0~A}IR^B0pMPAWDhYQ#$Fmp5tlDhO36Yfu7Xfa+RxGkMI&CPR}?Z*Dpw6u7K4rGhF{AFkGJNEaXz|FEmp?RN<=q5dvnPoSg#e21X35U|Pp4ZF0nrz8xltb{Ek zf~HpJq7$1XLXGncPu{5f=V)<3Yy4Uwf?4`$i1=Y>aoWgIzYy6K7+KM)g{fpmp~Wn( z9D#hD+i&jv1yYaD(Nc4T5JMOM^gJQV--T(6?s@|hzE;ck3$U`=$>f50?=HXQDt#`p99ly!p^&`%Ez-Qyg%u%w|*8&P}5T#YC_vlw|QT+p*1lm z>&9LvN2JLC)=Ah9=fvB$NN;A@Wqg08NEVZ%Jkj+i)u!2+LiX6JC&h#JzS^!9yG@4b zmh?3kt}rbK>w%4y8`@3fI*0z6rODkw!AU92ZIEFyFxxb37(zlU@2#ZTvL&@SgRo<$ zXzUx@*)+}g6%9g$#EX44R_WS~e%VAJVFQ`h?0{fU7J|4OpD3qtUja@+=gHVE=Fh)Z z@2gDmpb$`VpDGj34h}mozZV3Xw@hJI!N16t?9*5_LTBQPw7t|;JCX_b@+!4r z|Ai3Z*J(7;aW7zZFcWx)pG}M2bc~Hs(%bkg)a+Nw?!pL`7{8U zk(yUcWk(CZhYCtT%P$Fk_{_xS79X6*x^g84J(Fq9ZewgBI+r3g`dyps37wN&T-jbN zDU*AwwCHy=F8VA6U}UXvR_@9_u4*o7*7r@c4qO|7HuDrCC5~~K_HMqZNOsYCK1bP$ zk#Aa+PCy1*9IDV2`B{6#ZKxDZmC>|D!qTKoM1&3Q<%lO+ff|a1yw!(+e(@}R9Oj1< zU8pT*eY)$Bk-7j==WBD=i00IGx=!(fuTR2C@d*^Q%P=@ zT622oDnju~S3a7f+&eTFoH^$0SQTCMSeDOgpUzS(1&y$xiHjGMVHI8s#XY205hw=L z<&y}EHDh3w(j)lZefbqI(U`_EsK4jpR$OXI~~f5}wsflQ!ZViXz7&p zbXi)U$g|%OC@9Uu8p|}O0>@*bZd=Tp;ty}mbZS;GFsDSk)z!TTQ&#&($2WWQcA6wF zl`C~*7jp{R9$!Ef(QoUn)|UpFKbIpvcw}Oe;76WwiMx^OM_R@ULN+A)!o_Fz_j%S{ zC`~?dlP9gIu_J{Yf`z8cGY00Y5%tNNuw^Rb&kcmy1C_)|X7|-PN-MShE(~`C5R7kR z<{4a}XSlm`HM<+r6VJCAb3FUFS@JA74Hoj@swak#cuh_f9N^>|Y+ug@^q&0zU}b3d z$k=~LiRvo{+BWR8S)p-1wx&-Dc+1YD!*1;Od&X{+Z>_x>Nh$FNtSQW29xPWKI2vHMI=fkePq#_&n89 zA@HxmsC04OVPAfVIiSg**4`e(VrstZQezT0$i_%LbwA> z93;*fXpial#Y#KqLj?n~<{CvRxZhAwGvUDl0cq^X>Tn{Uq@YxxE_q^caZ zjM=5#1iO^~)5DAZ`l%S1C0kHWTmA-D(Pr6;>5kK|agVK5nUjPR% z##y^aYnJ_s+Gw4-oRK9itiw5#SmNvfjCVpuWtZ=iX?n3vBQ5!VJv*4U;nD&7Ct8~T66PN>A zY3|I-j>3%U8G}L@`ShxC+!ng?kl2d!EeaEnh9whrv*zp~63iTFhE&Ip&&oJ*+ttoaMi{1NzI3S3(xii`n7<*)bA#JRgYD` zZ%m*2H}~w|=cWO$ZkTn>G|QFPanm;|?Y+_!FmdGduv@cuDT30=j+%P);kw-oZO8tW+T7ib$+lkkdzvz_L8bsQv+q^8&|Xs!yKqD-*C&OITo|uR z#I;yukGJJU1 zlB!KBgbru4!DMnW1g>q=c8z);@F|5IAZT)tt|-RfF0Lph;{K#?xh*GSkuE5De?&>_ zf0dlACGNzd_El`b9HmNdYE);ehhIhI&Oa#i&;34JgnH%i+@-1FVI&?+Yx4 z5YTtJUORgE*|HgKQYks}Z9p$CbJCw8mA+Ca(R@}s1RJHzwj)_~o?43fHp}$f%~c}7 zypqwM5p-*lN}j_MfxhvHjn{N197i)p(_OgL*1zLrmD8{=}+lAW$Z9XS7f|URO^uy$vHbOiaw31gtBY`(2V_x zPo`t$CU0vyqkNAh2`aONKr>BVrJX1KDcWOcmza((?N`VB;`)?=IhTy-aX)(56r|kixT}n+# zoc7g9Xb>qyCHS48$xb;5VUI87EfcQvuda0d9TebZ%dg;9%@SxBw z*WW81eq?v6Tl3ae`J3(5Mh{?D4ozQ!mjz^-ir<{dA(b^vdn*wOPk-Bm&@iCqt2QgQ zhEMl^-Rk6VQvz6 zupk5IHBEK{@LMViv(I&%P|=MzKjkDpoM_)&ZD$bS8R?g?b1Vl6bj`i8VqD6{paMj< z1IX@aeZpU3MvXUzvesP@(D8z6bngMDrFhe=xn*uDDTT3y4#-C^h_GxLx88F&nqqmH z>)dYQS--IFuCQ<4?1zV9-~e|}zp)pXUNr&$mPV`Q~f=O2zp{{dxGX zZ=ljPADFKeb$$&-j?%~mOtlweLGyu_ z=j$@=^Z|AAG3Wy-|4nzwso(bDyqY?GpZ4J5;Uo8e>(hr{^`U6-_V%H_{pIZW?)v5- zkNm;e8t*}aqWm}f3$wfL?~La(Llkvd4jpi(mVa)?(Qla(Y2V<7tXw^2=F7w_4~T&Z z?aG0#D9a-#Ja)+G`0DMk#&e=C?=NvhHk6S5#2g`I55zAEO&phg zdUBmU3+>KZEwu1Bf>f@a{sRN{S^jEMPrB=u{vK&8Ji9cJ}tXI{?-PvDnVM+JD ziBhgXx>vDVB_*b}sw2x>3h=O0Xv0K@-xq|2!X{bbjy*;sDNVa$K>|55*w zXI^s<|8Z(#eDgaPHPVE1t3ld&JKmRK#^us~HrBhak$9y~1MnbprjdA(%I7aG!`kc( zQB2SKBs2+oP!*4p_efO^79vocyHo!|lbbOR&!fZ6XmOLu0*PNU^?0)JHP zi#1Q0@WCLmg&J8F1z5~>Hm6Cdiq4=FXmcT4?e|2>k(DZ=prNWJAZ{l|tXK0eD%MOI zRA+|fgq7gexjutQq;SYfL2+U1G3%^Cv;rK*@E$TYFkCrnnwo%6t?0lT!r+V@qy~O1 zv$~wK8#NT=#z4s(viVgK6Gwt`Uj=F$q>52bGSw9dyCjL(Pl8@NresNMvZXZ!ivs(f zyfCg%M?^cB#;S%e;f`t=jEEM^7sDbjLt`P9woFO6% zwTT&+ss!&WSE|a}`N6XMKxZ(Jrl!e5&#g1%MXY!06t+YiMBw`}BQ75fD-Gqlm*GYB z>8URbqXblO05#DTcM9R5sMpi+!!QECSv*HCNL_{#@~P;aS!Yoc_+hI(kObyb+N6nL ztSm2MBB{}CqPgEqOvbHy(wIGkm?VP%kmu4HwJ`&aX&S3JLT~ZCrrtmrVwfL5@!~Fr zt3lC8$UY*+Ey|oR`uHmC)2S?I=8zsY;U?jj?lf&PyvcNQK(yDdzlDyp#3q!9Xyi9^ zaM9R_qJM{9i^k)QqeL;@YW#TmJA~Q|#qf}^q@ai)g}7;J;TaHBng#ij?jduPGp5gP za{`e$703KQc%RGsfSC&}48IXJ=SK4Vtnnef@J;z!9(mQbV{-UV-{wBM&uy(kzl*+M zT7i9J_2=7a$g(7uK3@i}^d7h(ulx|y>t@fY&%CY5H2Y&xb|Mlv2!4&$dZ3xD@^ zYM;oOGxaNk>vkO%2Lfp|r8pPX!%Ev>%15rRo@#*BzM${HXqfK2yhf3=udY^jH*}i;$l5d z20KFzGl0fkPJeh#N~}X0hh3YJ%ZZ+KsG%3xi-6aM_u(p3qH6{RFLGSJ(E+UG+!r}z1`Tp(4x%}f8TS%JAL0!pd8DCx>HI(4iJ zEiHT9{>2!e8>qD=ic=<(X{++yS9vKTrBZr8mnO3M{ko(Tg3?_!nl_Y*Hc} zQm?X;PBpoL;IJc1B4GZZPCi@IDPJP= zlC5}}sT&fEV2TX-qyV*|Wd-%@WBO*Y$DTHu;z9hQEg!{Wp;Yn5?3X#_vi)M^@gS9?kK?UU>au8(FYL^dtzzoY)DJ`E0JKJ?d zoB?Eg*SC_c1!hkE3T8q%%$DVhb8n0*CkSrCy4;xdq{kie#Ud65GXOd@CnkpoZ@@9r z+&L%xmKOVi4P>&VOUO`v7LaFlHlah~Bw5P^rey)rRE{(wqCgbph#~-~F^D?-(aMl@ z(h;;GjfoPOgv6^QGx4gcL(0@i?F2VVM5{yK*dCK=g zXtc52+ctYbIjMz|!H-vLbl2v#32w>m8^+fX-2+cCG`{nbOH0;=Q~nvG!;#lKHc@3Y za~hkELm|ikF25{5SaUQLpT<-95fD=wZLiJKR=ReNXFy7p!A9!nSNggHpx)1_*i+qp zT!Ht5=Z)GMrAcQ{5Y4!(_s-ka`25{cVLVv#$7H19tKG+@s4u(r-2bYI+{KoRu^5z) ziY^?K(E3M6MH>%Dh%+W45@Y@kF{c=vHvpj(oj3T87=RFqwnrhxU<^e39|C94UJ9mo z&|d2wAqBI)_Q*^d%52C%{QnD#XEx(PMhZrOC_pWk8AA$mx1qsvGc6bfLw`izXbgh^ z0OC*w2jNic0!N1hy4bZr#dZ!Vbn*Q?cV`C{y4az?*%l70fAZ!!IB|5bWB=4!qKjYd zmFVEaMD5T1&-$3C0tW}4Hg`I3%e8_b-}B!iYp_k%QdptSPi1&LOO&??a0lRb5bRTeT*URla1bt1WYDi+qC1L`}gnDWipYSn7i9Z6qgL zy+v-itTL7v4k2~rn1NHfY>#Kre5K4oi~V%D;Mw{%S_`YLO2E;~?{v#x+3(hCa~bxD zx#B^BycGpjwXWQJYjN2N0Cy}HFjrvKAkf(&ldP^6eR)1Q1z;Y=1}6VttrMQ}OnpA`B#8`#8lCC0A7* zBTHjImTlVUoUmZv?R&Zg)Q~KjF-7gO&donPp^bNn20#`_fJY+I{u;Q|F;5-I9Av!5=L+!^&SGu=-FeGABbapFQ~6gy?T{V>UG zUGJ+G{PgM1L~=By6t`(~JM^t=HQeE-raoy~`TfT!Wh74X84K{PZQ1*rvf3*~YssaW zMzqB2p@2qCP_ti5lX$FpJD68XJyEo(Nx((tAb)YGZAx`{Xb4)j{V&O*iS9X2OZ&

SKAI{((zNKhv^xidEA9=n39Sb|BIg0xmvOXiSv}7T`OK zzK8xX?9BZRWRtI%{~0G;;p7zR?<)lXt9j2&Y$kA-9wQPfG$5?X*wL2LJ$D%~S#++q z!HeaeEB?s+kZ&iOK&nSC+7YPIin?2;gU@otkeHGY7NWtU_ZIVga`iM5CC$(7cryJP z!qLV*8sevGDiY?^YOnsMBF2poOrCLHm5bpi--`?J$)A*Xzb{W6KJ2?pT{U-(c{x#z3re_A0f1EbOv_6QWpa zmxUfX1wH98iu#Akx?5?I>T`;R4G3#e#sJC}o_$lWazF5n127+SW~DO2O3e%wZvap5XI~l0P!S%A#a*|uuCDDIipAo_tMM6r!o_B7 zihWp1?GWR`BE%wQQRF*kis>u#?WYx!JV4lYOJF}SHwVs$jY%@+jqUwM-Ke%MsZEI1 zitf816w6#eb>^x4(<7F7GW_cfpg8@eMMyHOm_DretDo>L;|^sQFL7jB9LN?2@jgiJB(Y>vr(GY#s3zQ;+Pl`43N=yd zLkW-bQi?0cj=3V8&|%%9^7W-n(A?S%a^I^>oI`w}Rf`0??E~Md@9=ml?+SCZJBiN|KelX|$e1QQb;C1+(3B?Jc?!`QgR1wGBuWx#+s01%RYGvXO*nte55NmH-vK*o&cJ$_%y^^{5b+= zzp%Tqr+B*3)aUvtfj|1iJ7WUZ4Leo)z?y998HQXluh|&`C*$Vp*AwC1YzhmMO z)n7VeEd~6|Ms>7_-V*{ zUbnpQh3#ucamUpYIsATB1xBe}yw&4FNu@h-jJ;1Pi%H8VEu zW^~kMQCzWTIx6~x#x&{hUX=FyO2CCZV}aJ}7_YgYQ{PQt&oB5?C(|p7S(Z2^uZDF!&9^5rE2W>Blppk>vuvt^4CSjSJ16V^4bsur~-+ z^GV@w;YCNY!z_E?&1nj63`(1})_-Z>#)^g?CEFafR`>9fe0Mp}Ntn$u6RUv!v1<1$i(PVSS^6>;gw zXx$`xh_bbHwEMfZ;mhpnUHR+%9dqhi>}<#>ufDxITPXjRN9*h3hneQ~>*-~jpDV_6 z_s8~Yv0XPe%<=hmjvwDAzd#^n>c0X8{{s;F#~_G>gNf~b0E7Sc41$>cZG#}De_;^B z^zRr1HU1a`k^aOa?bcT`1KuQ#&?@r}19$Eo^bf$nVc!vs*Jgr);T9wV|Ne|$P%=(Y z*<=>9o;cSci9~6ZPafl0KaHF3CJ*`+KQC%%IUV2r2}#QSd2gI^9R4l4-mUM;3Hppv zyfay!8wmW-_=H)r|M1%WF%>33d&W(_9Uwhj+TjF8f8Rb4On6sqN8Vj{>>-si((!5Y z_E3|=I=_D0oz<(ex4JftoK;z@pG4;l`LaNB<5Sw`r>SQ~ht55Ie^S!AkqWu6!%tRV{7FXs9z|cmGiG6~5#8m6+o$)lGZXYHN^C7RB^AsPQ{Ov_Gy8Hzr zVe*GX(Qj~g({bgbFkgSsTbA?b-lCJymkXrwe1J+?vO3OG!<>sO8{#%@jt?_jxnO?o z{R!|BTIQ+YoGnfPEu=ieQ1|;C7(L!BLFQho>wTds1YyUQFFe5N8&1B?{dMfESB_!v zhnI(4{84*pX_iE3dyjXQlDv~mJ;Bt6ojZ|)GJ8u0JmtB$?be!(4U(eP6V7UEeX+6i!Lb&Zb zb+o8MddvZ9RS&zjs~DHitFCj*2$pfh?p16kBQom~5XiRq=!DfN32AF>Q&}m6VU9EP&_Gf@qvqfu)f}`J%gP zE!ir?`mcv%)(5}0TU;67TYrF;5k&WckQBdnEGItaJX5oM5FyEOepbZGh|Zog!dUC^ zci2CRErFG5(wtgJFF5s@B@<^@t*cPdaYoWjcwq}cho>#K4~iGAMYGnc1c!4;i!HD)77kOw3=e>m>1_xGj~@JamBp#L5pKvawD5p1<8=8F*? z&t{1N5nzl(q;C&mKi>M!3s7d{@H&oz+(sHuD`7RQbi#?-nFq(OLc*`s#3Z%)-;~6q zv+R@T2b_#j96=i(DV#E zOn{st4#zfdDp0`@eLIYjMdHUrBQf9L1U4lcqmZlFlP^2>x!!Jw5daMNl;`(F+s5q& zdzQbiT)o1*@a%ZJ=5O7i;cEge&ZCz)jj4jC!TW+;s3B7Esjb8J^CMLI7zD41oQ#Mr zImKOL`%jDW{n{)@=QE0^08hfs00O<9ZLi7a8T)L;aEbgYZY>lR+3vd%LH-c<#kKltfb7;nzxdkEEm^wumIA4}ARzo2q)7B`G_9X7O@+Pmt`1HdST4VOuD+Z!* zabQ`Lg7`%ie{n$9>?;yNwNajhk`R!irBX3(*VTsu84l_mQA6tr{6Fg6Ay|-Z+uGi? zYTLGL+qP}nwr$(C?OofpZL|J5C%*sQ+jtwNdm1?-BO@bwnYqS%#v1dUOZHc_@c}Re zZP&PTN-Fg}Y;E#WWIMQQP}FD%6+>E>ExKz{KZzh(huSOe;3C$-40gh100$=JxN`?2 zp1oneKTa3X$9}jiFJ>JL9sHHIj`WGzrsK+J`vPx;^?bqlp@3|nC&>zE*b9&K**%*t zEUU4xd0jZ19U{Skpy85jH1hp=RX{X)1)ssx)(-@e=Wayd$QSWwIn^So%h5eeD(=$o zXoW0nFQz?ay%kSE18yG{d$IuRV_*{^7PV(hiFyVPv@e!dCNR&%YM`_)8b|)o+Mt0G z3@0SzMr``2svEio)|qeE`c8wM6MNG1>l3C?=J)?JO8u7 zie;9?oIJ2QZKN>uY5lD(kSDiE#ijzB=B4|LgDS7ShPdS(tI+|Tes{sSDE0V5?p~;+)wQg<;!`nW-%@$k@s5_|EBj4IL*u8W(5f&p~Ikk zWP%Qa705@IHh294^gF+A0ilK*2z+z|9bX48o4(_<_7?0A8Cx zB<(K!3p7WH+S5LsHrV2oV)0M}Xg`)W+QM`ameiuS(GoE{dTPV7(M0&JdqsRU%576Cq|B@ob{pkmNPL5I~>fjJK-K&vthgyvPcn zFCFysA`a63f6Me?%>JM1-1(lfk(jiy-xMrmo&H}Y7_v%s__Racn`1snMU;wFl z%8A?JPO8aS?P_s4Ax?7fwFQ>+Gznjr*R+-wt_KS;M=j9pTq)(Y16r~Y5pU8nM|**u z80>A=;#zf6@o(ReNi0Picu2KD4XABGm7jAx)TFvEjZ~;bVIUDLk-MrUGFCm_-th2I z8!;b}PAo+wf@DZUCX)D9`Fn;)bp7v^%T}&sIm9qI)^p8!;L7vwgQ{tp*?2`y8|`2>qL+quFFxSCdB9y)N#W|cEk z9H#5$1-L}l_~xME9OCP3?^Sy>2-OXIi=blIe_b7lWvy;DD4}s#Ck&#Iy*%cpvRRvN zrLx&Hmr{|GkrdIa5J&k74y4^wik1qM3zrI%_jlw#6E}%ysO(pulvhq$eBj5gVYznL+#GS%)SGG%qa>@nS(PV-Z#qa>n;U5CUNUDJS5E1+)y$4?XL*KoEj(S*N> z(n;rVp+7?<`dxU*O<_Z2LZyQyD~n^_K4AYy%v^(9^HjZ5-AtX5T?Lp^SL95fuVh`I z1Ahv$FeyT`==zGYJV||f&-rl^_!@@F#T&`K2ri+cN$MB@1B1q29xtNjh>hF`@krgW z(6xfL+Su*YJTqO@5hGXp_N!w4MYR?%bblggdds>ho@!*K;=w4D6XdK5X-p&^KrD=* z-tFos_fmKGzQ3o|ZG6l`zda*9>=~y*3g=OmtZBt0uH#I;FsH^bQNJefWHITWn;1`o z(|Ex}+)KyW*DcYLnU_<-)Ex5|;^=-Z=f=<+=_|XhAZXtdy=k6lPD9RwgTi@QZdKOn z3WlcjYQ9YdPAO_=4SsZYmAcd=vL(q+q9D5uoU>*2lQ1oV?=4`~u8~meW{vR(53)}zMwaN6~=cQr#kG(WZ|KO!z`j5OcT2gUGt-pF_ z>*m(`pB`i&&6(%6FIe^Q!(zbi2*zpd!A5NZt>Jz?E5PwYB$mvP>SA^jqzoI>t3NJ` z5^7{U-@cD`|7U9H^DSN97yZ|xNX{t0AK0lrJ-!}yC#aw}d$YUI+^ziQ3BjTLRlEfz zzJcwBX_nb7h@RSw21KZl-5uR6WC3?)K+L~#`R#5gNOfql&W}UO1=6gBuI{B8=cnob zl$K^oC8<+S_fTV-_Sf!^+S^EiUSVn5l-{ndr$={>xAsfLHbM>fars!f7xRtb?+;lY z9)aja=kvRTL!y%R->|*>Vs-XYdp^BfL5#t;(Z;0lCHLs8)K!b<^`XWzIU=3!?pt-juPrlN*;6=q(@%h zBZg%!NvD-|3k5+bDe&sC1!68YSt|#RI5btd+9rF=MuvUVB%};O7x{Wrl-6FfSYEms zuanL!K_rE*YpZKV_p02C)NS_{ub6DUffD(DE3?aB z_b&p}F!&ST(n~G_6Dli($AshHp!d()PR+xA;%mHA0F1C-b^mJfViaJ3=vOdft|AP| z1WXl$@fZXf1Q4zXzpq`)(b#?mJ#GoR%m4s0>}3NpGk_@+I-|upj9^VykuTlkd~0=S zDRyhhO#%NB5DMhc1HLHcCsJIhBE!IFmKG&T;&b4JyS=kn;N6pvVXKJf=>Bl7P}j7P zIuxaH4zs>q!*R?PxC}F_;1V2M!{La*0DIc9;58WX!J)T!XRVhj6vk@DF%Mk(gSRcxlrsl>vSsntW^?>ib{db{3GzS=- zaXOM$B#@E`n9uSN+Ng$gjj|(`5a%N>Of`xgNe9IlA0-Tt3x=)t zP=!e5Pk^D~NZuHTyG6Sf4ssALPD)d7yR*aIFKqDVVyC>9<&cHHS$iVp2Y?8vH z7f}=P(k$LNCeHQBU=;FNA?y`=ZA~+Tz21Ov&T`6}JM@YbAy=O##t3B9V_E-KMm?0d z+3N&rMQ>TH|Jeki1iBjx+90%4T=E+=pI>SDMi2;Jt)h#Obu?u0A}`=z_8`+3=u@_C z40e)*Y}4&Hz_;ndf>iWPtWn_H!+femTlW_`aI|MUaC(Uy)CvQ>4ddi*{jsdbIljU6 z6(c%Laa($Tt=lOTOfb_FBX1=lsZcUEt7fp-zB0D@W7s@GwO_CIGCmjXTxYP_ z0h^j#RZIxlKI&%mqg<}|d<~{4oYUd7Ge~xH945`-8U^j_RQr=S0bZ+ULoob;JcQl|wOl7|lnLtxl zzK}t>Zh{>H1p8D?`1%bT8U|}e)jbB|b47J=4oRv)n)aNi2d>|gub3{IXN$Zo-9wTJ*xU}$}q7b(=BA;ao$inXSjHCU%=yJ0n_tX*J;uyx+DV1B$0>SlbC1Kvk zxDO2mY2aSMqf>;AgH^V(I?H~|+NtLVVOs^%{=E~5zJfXI5<^?wpKZ+%(n)_dEESDN z6`&QwYl%*poMswLUCUkDD~t;Q4wEx77WW?dtbAX9bmaE;aw{NKyb(y;49s^y8ZhOw zTg8p2rdTzm5*5FcFzn#{1hAkN*YNatwW9y@JPxT*YTZ@R4C3HE{(dvS|j*wiG4uCPX@b)2aNSu z&t#~Rc;!ly>uB)$zVz?URv9_2Dn#^~Dvcek{JK}@DeSp4>_u4ur|nFW9lC8{DyvnKMGWkRh=q$34lbvan&q=?MF2~y6w&xbdFX<(@ZBvcM8 zs+1Md5_3s?QT4J8`>2r4P8BlCP?|bBBwZCqN><@nzjmIHVpt-sE2wzEg#7nfcb?J` zaGhp7FLo$|)*O2B+0U$7O2R8Q+sh5k0PYM zigdPLvynS=w89YW*kI(|u3B^?=+&j1YlDFQpzbV*@m<<`uCnqKMR?tvj+abb6huXd^J+B zZjhX6D94^Jn6%a=LvvoLv&{^m)+uw&r1ahtLl1(A_iey>$ZegiCJb zLEWER!wtJu>z#h|vi>-)?tqClOrXvf|>WL2 zCAZjFC_&hFA(zwRk%ieT)sjq}7C zKvN%!q5zwD+aZL3qNx+Tn5+l-?mV#hLLkxcB92rG+&Kg;374j&M)_D^x20lU5R09w z^_7`QS6e~nZGm#VX8BOU48Fh_eiVeLBYvq^2V%ztQWJ}kM?(?uo~Kb(PU#B?So)p>4|dv>CcI)R%s-i*4diJL+;2lGs&N4QvCZ|pfJ&KBmj=mV>cz$ znk@K2(e;N)!#uJ)N-1s#xy+@EQjeS5D(LVy&**1H zTq+fc$DUG3swd{{3n^a12KK^uRh%>ZQhS94Vs~7#Jd-ku-^XvIj;C>+$TDTGIU5XXr+)(t5*>kO+XaZvXy=)}Yu znVQUMbm)(c(5Oy%6J?LyLuE0Hg8ELs>vEt*1+dr2b>j6P<7jp$qX;{^=arq%x~#N7 zp=f`J59^{^#7z&!6djP@rK#6}n_p0HoIn|ge6WIEV^ts%gEpRC#WjzDyFyjBM|g~v z1>c~Rk>FG;Qz+#1sre?zng>PAvtFn}^LLjJ$-Y;o8ry7(!Z70~m`mwn-DLEhENvni zozfV~Fxeg5p`9AI!h>%rHonJNSr3y@eP}W~a$e{3W9Z>rPXGY=x)v&maz^>q!^rRcf-9WolANVUVMb%qjj9E1$dO}EUmYfIX~ zP--=tCl30-f@Q$XRDrz$HyW`;R-10sg=p}OrrBJ><;x&F@vvPOuHgiLH zb6ci&?SH;NA*dDgKOQ{ZIKHbdh7QN_YG8-T{=nev^lDy)z3UB)rTqc=aa+XtC*}EX z#r5x~Rwj0~|An|lR=R#f_`ByBHEld`H7io3e>oPfwzRJb5wXC7(x2)*ji!q&TlT?rmx+Z4b^BQKJ%^KGkA2XHs z%pwQvy*+31`%*EN5IEF)$H(@4(U7D;d9-y--lOFJcbr(i{9(LRsjj_e zqzOao9{qRx&6WAF%!vUJkoQl3eoYeLQq$#QxpQe#)+cD9 zW|qp_AA&(8m_^@jP@v`h()a%5m-%D~GMdJE?f*r>QAkt8vXy=oga%sgffhyxXAX8B zpE$C54(zYa(QtDNiyl&6f|y0SPt}b_FADvzZ(A7J2Pp4~`Re?P7$i_7uaWzUIT8ibJSd+EBe4y0HiRnRC#x9% zzr~T~7g#{FB~|RWJ`ztPSJMTWO?s4u@!3(>@SfSza4uNBm z2gYzA5{J}_Pl|pl%#pfC_E@m>PBTANoWNd>q#4bVyg4MTR~2+L2V)faSul`j zTt>EvqaKzCmnwOc+dF`Kb|h`s2uE5zLUt&Wg8Ex8LO4Ol6Y_Qv50BIA_uk3LVzkS6 zI*GoZr7J6DEd&}3jMEO4^k}|^VPHgO3ucc`Aq$_@d4>oBVI?&81&jXC_iJ_eZ5m2? zb_=jwKA1M#GL2<4(voyy=F<_R?c$#_OcREj`AqKqUn-M^Gi@c6LGQ>8){EV)_i>k) z$kqEfMZse-zD4KcWNs(vxlS~Wni7ZaqLC12QK*#BQpSB)Qa5HJ3ZF{x_AOr69Y+N; zsvpR|w|36J6l3ya6VB&AgM0q?bZ8T`(Q3?p z48wOQ+;Sh0(n*MfOed#Zd4=b!Xy_YMr(_{F)9bx^Tq_ai9>dU%JSBS7a_Muuv#Jo8 z#S_3IP#CW>29XO+>?jq(xAn+pAxfeluIfmV}Q}>EJF6g?a7zIZ#i`{SRr?d^2)&C%h`8rugc^? z?*etpl4otNI^hJu)g~(78pLU|BGgqNvCJktP2Rzp|A2pKc?|E~m9HWP_Xi;0lAejp zZCbE9>1Q~-Zg)A;f-?to8@3(Mla+hg%vash#k@s8B|4sVEpVG>(WX!k+|jP62Mi3v z9<(bC%tzkAF+85h6~gl2f5`mWvlmEQe8LL)%>=h5goA&hRSH8P0BBIY1xDs=x6gLX zT1-*sZM+i$G14Q%_LS}A2ZPn{7IYPi0hDKGVwKLY?5VL8fB8l!$F)+mk$AWc=Mt z^`|P(e)A=gCtn?AgxzQJDL9w8l<+EZUXIcwH6ud{rHK5_vx?z3DT+_sGa!S({fdpR z>}_+N$-Y+i6&3|ey0+t0u3*}wWYUI3<|P|WV@0RgF#k#NS#>p&epN@Pe`{t?B8Mr- z!#UZhh@-;|NhuwRQ?3Al<4+YQ+@Lb6`xQC6YO#eLMW`?Rd8KG~`oO1D z({}pLC2vMz*diqpURe5&go0JK?%6-IbuZEpS71S?-5HXBsNBrVZZAv$54p5GV~M}H zdL3TD{0tNg8H%3LFJe~s&eGi8cA{s^x|u%1`tacDq8Ys+R)(sy%S!06B)b;yqDp)m zXtFW}X>-CwbFqe07Modj*2=Y#!CoK+Q9_R=uE%+6;C{F*bliQV2zcF$j?KfrdJ|=$ zf>Ay<_d>9WC?N|i_0iy%`5TrJ~4)1*F=ky6*q0hQt^apxgHf2FK7xC#fS(ysdnn(eV* zlxLECJ(#ZG!|HlD4o>i2kM7a^MC;|>a%J%WMVp*2fmqM`(wQHb4+c|ZGQ6Sq(cs#b zc|Q*9j=j{(Fnz*3hpH|}=q0@b#&tY2X@4jyf!Gu%yS8;|2^qhNF3?3-Z0KZ1x$FoF1~+OnU-F3B`A9#50~%A6!~&CqeUH^3&S zLtKlGh>Pb3{lNohz{208|EBH+D+vgF{H4>HUKMdLkK7@ZAz)L2ciiWUL<1Op|1cus zof_0S@4B0c^wE4I*buHUc8F9_l2u+l3msh9;$QobbDfy{w@J`>S%lODIje4jfWBTi zt3#PoWT3q4h^dTd7`C9wrQ<>WG~TgPo5DRYCJrRZz+e~6J>`%1-peDP=*Cj1%;{0W zZHS^k<5~J$e}$7;K9}%iC3{@xs)-;O*KNN^RPtB zt_YfrMFgxin-<`i*M@V+hYkd_p;jQ-d0|+?6?Cpjwqb~XvKCdyKXT|nT%f#Rbo)ZKY!_ca`E?-;zhij{A!&1&kDOYY=_Jiij z?Zshs=!Udm!y49BHZYC;G5Xh zfUUOjw`J&sQEaBujOEGOk$z~)85W3_E9JBqs?VFDGoH_W6=o{3Z78msh4VbC?vzv+ilMH_&n@>9it^a?fihK=x0vRFIEhiW?qWeyu+159+WX&M zoCjW9>*;TU{%)1*9|6{vCp=1S{Ia=cu>v9dfcj`gGhC)=I=qM?~ zwoAecigxE@Y549_*<*)7jZQ*nRgA@6h)LX^TlJAPYd#CWN-WuNcv^(MF=Oe<`yo%K zYhpopo$M~0Ct_t(mmiWVv-ju9SG*=w@GeV6y9BY5%9v`Sa{x5~KfZw@X%*4UjzN#=jmamiHCz&AQ@ zE(48sXtT{}v9&dr!+r1gfSEca63PL^!Z^Cwn>qb%Sr?)T5|RW|OHj6B98evSh6{Iv zZ7Pp%%u9#Pigla>6r;SvB*Ed!ruAT4m;K{5#?7~cYw z0wffB0RHvLrFo?n ze(cE~wLFxD78bIF?F%Az@9}2z=KSYJ%*f#Fns2DAt!}h(|K)c7amo*{K``_mUAg}j zIR6%UjLiQBF*5)6Ax7r^7%?*c17c+UPY`3zU&MGQ3it0|SpL_gF5-TA{V7*}0Izfz zU@!D5nx@DnOvU3^wR!zkQb>gTm@zjy5Y+t{38^pW5B+G}W%-)}; zhql{NzrOIc^#MPn@9*a{w5px0;t=HUZE{aF0iDcG$)Qu1^J1C8zP!D(`xp&`Br!|@fEnR*h9eoX7Uu3s zElv=o0=YNSkZ!AoRq$!ur5ec43&(@g_qVrv-P*f)ylR6i3(~q;b950aV)K;1FjFby zTlTu7rm@1m-eHbr#SUP~)ZFuKb^R-xBW9zU%c*dLf!mT}nujyZ(~REMqk%Y4hM4EI zhBk;J!dJR94zgUElCjpqY@ovFsWytA6xGVPa%W(UyhbktiHgL9!d};xuxCj z?VQr;m+M*k+^=CBZ>zidVTd6 zqcP@GgKjJX<`*Jvdy`wVCKZ5NHNf!EyyW3b+y*y$O*C^!dPKHT>kbh0lVV&Ok#Ked z*4gxPlSeok6#WT<1jW75?ugBuO-n>vOW319N5M{z-S4lfk6`A&3m=I*fqE<(tIDe7 zRz}gV^=$kFY=JL<1>AEX^&X_3M~&T4_wG??#aFmxqr`TAeuO(%cNly`Yo{T$lPzd8 z0~g!!@6^`e?ll6wB&K)=vIVL>F&UYJ*Cd4o%7Ftgd=dh)m~T_iyqP}IO=0ZDpJZ1C zVO4XHYXiZ8Og)%krc_ZNf?tf2i5$_uxU%T$tK_?VcAanMSM@!jR?rdcBAf>pH)tU#< zHz9BR;c1M&xVi#_;w$Pj947aKKT^(8jepH75XMv^Th6P@*{963%4A4XJUDWSm#?NlfGV z#Incowq-G?&V7dUQPBO#n8}7%1tE$})^t9n7`mAlkpWeH``uxm*IeK!t5j9QW9(2E z-}rZtl^xOKTs9X~BPbG2Ak~FN_5dx^Ofo?7f{N+Gl%8P*KQf5{DNTp^I39{<-d{fO z!#MalW{*uPwk<(qOgS{f*q$l{d4B!Gh1jH*;x^#v!_`Ij5_#oa@=^$U-< za+o8l$rnGe#zzuDHk4dxp;BP5$R4iFQKkVM2RzU80CKr;S0l3YjVPdrS#zps47ekm zPXoDGt5M{h3+gFCir^Nfonpx6d+dUaZ@;Grh(>+L5z@iDF9v;A;){QdO65VE0dElk zJr5aG(TMBxVWVd%PnB|74}RwYhiGyOs(-k{A;S5+E<$BMGy>2DcDF#04}?ENJ5<}g zF9t%CzFxgFa#ke&5fKp#){i885gf_AF9+i&*;=^GPsPiO%|LWdyz&w|YCk_?{zO29 zcvR``FNTdYR7BwPYW*pSdd#HUf@{Tz#-U}j(YWGF2U7UjT^IGuChxgD^HKe0^nqpH zTJvS@c!}0?!T_p#V-r6wRhvDh+C!ef390cO&E|~6kY5IS`Nf~XVyUvQ?t}>V-)zWJ z#zgs0MtqtZXQmkh20-v8^Y|u^08^g9bW(%^uutELp6V6^gMM&@@$ybz$K@S$M!Uo` zxk?UcNYVZ*5wjehkdpo!_ZvZ|qmyI>A`FIjn$b|qLDOmeVv^>@;k3Mf=gG~(3Ej51 zV0I^s!i`V5hKi&MFkT0b0x^cOlZt_UW{1x-^+@VB!Hh+M5?iABzL@2bP-?w-JP6|8 zRL2CTC5ZvYqyS^EUwov&I^tv^Yt&0{iQSbtr6N!_ag8*b_WIN8f>kt!I`z*mhs}Q_ z?ohvxR}nfxIn!{5kozf6T&xJFmI_kd#0Xt|C*c~>j8+VNAgmd4Bh70GZ0p2MRd64r z|CnM!6v-grdrWBGI!u%0R0!NXkqe?k(IkMOep#Wc!G+-^F*+*ucue3lJ!X+%wz=gc zJc@s(%e{dDxqFyF@>4i1lx`%%rJ;zm5)&2)e<7iA>6eVT%yn3>(pW?a_|XGG5SQ>t zUcNhRnzrI6cCS-?TbBby`5g^v-$uhQ9p!D zS>xpJiZThxxvyDWg=_>na;38r$9|8kL*x1LlcitRNp&hHst&b}GQ2G6A{C&J=zI8t z)hVZ#epJ5 zl5s-`x?T*B9j0qoUEBD|4VZP5HDdAjtA@jX{#19o;8O#39%qGF7rvUuI6 z{G!!_f1A*ho@t=z(us|D?@TP$%oG;naOSHFao*se2$}!!7GBQiy!62b)RTPw zcDOY{4vf#0gb0RUzKi210;{<5kv!T3bPVzs-yLYp7tXrhOwg zcO>crQXt5_>00GlUUi5~pPkGO{H>T#MBK718}eB30yPq-o1%G@vZfIPuyiqbgSVli zvVLbe1`8~>1BptL_ma+)8s@p{L9@<3%^sK!GhtJU2DzAQf$#s zDy?Z`i}2)%5N^)oNDVZES()o|xu&{e3ue4`**KrzIwUfy7<5}qC%rH5AC4{7mNm!G zy8(^~3d_QV&hjPudhZcnka=Bu3XJJBc61Xwcmk3nhZ5NUn8dln-M}28pxQw=x2#SF zex`uUpICXvHaFsd5pFlp7W4$6+01-()-w6di8HIYS8x26aP0opjXu@M-eX=B8LOfr zRJ-je9m|NmM~ac>?A0abwL-G)D;AS;X1C>&v@++DOX8m(6jZ3jb9){yVG>rCD0@Gt zpijOcTm!Ozr7|FfxVT(HoC!4x)|;4lIq%6=rWc)-x~y0RvUQ#WTjZ6ni+80=Kf|dZ zJPmHt0Gg9{STBhi_yd0tmtY`-%^;-(5b-fSzQ(7fw$u;<9^-M)18ejN8Lmc7<(terpPoj*?f0jSv7C;lg{ z_ivf=|KuL~|8hO%|30qA{2y~Y=6~RN%>N13Yr&eRycBiy>l3`}f38w00vXkxQpKN( za;AMEe5y_2KMUyAJ$n7jR%%ivS%00sec%?aWSUh$B}4!5{xm{(GZTQbP5cY>cK!wR zZrL0#X@0O)ZuR`Um>!J5nFc0cL@SeU0q%}3>4xfdL%fREC%olUUa#CSy)L7v3|20i zMJ)gFJX!GBPQNWb<+d$^9ly}-`n~pX?f}A zM!+pE4uCmc?gOY;v}&3bD+o~SbONtVUhYY8CdLYAukY^T_NRb=!}kwY^JXQruQb-C zy11hxpa{;9!l$}8q1_bjQ$rQD-WDAb_6g^F{uI7>IAsiqd4EjaLKOs^bai9nqM;cu zzTH3YhImOs0n{x90EqXKF(932X=3IkYhe#20jvUN{|z7R?z)?QWR46ZP+=^k^ZWC* ze|>-dawyr3`LvfTkYqaFNv>Iupr4L0DCo{Z?_&@yYzE-hMQ;+UyWryY94lNB=PVaQ zpi_a5*-b1HOmYI!rG0oCL!58bAkEOtaR)|Cc+xgTh?$9%ZEtQgeHgql$qj`Mf~Wxi zG9n7}v^~EW6jF5-(UpGRdVlK;8LS?TCiFD0PPde6?f?#usN3F;kGfDwLftuBQF}j` zGoOJAzYv}XYV7a9F4gY+wWF;sl4O>iB7|vXin!h`dIRi*NCWx%OlqTQCW{8-_+TbM zUHi-N+69kypAd_>F+OxMkv{zP1`UI*jVoMH(keTUFX=^s)sc815cTb6h$!u9dGC3D zeZ2*gs{&cl7%>{+SKz+qUzACQrm-8M)!tXf$ZNuJT~s)*T5-qKOGEJ&%1^>s>zb$B4I|?Ta#@vJ6lTj${d_ z8b#3p&2W{M_T#FWMb?ngaZ+}~<*!;H>8`r3!g-$(#M4l<<@=+)PVZ0o=P3LwJX9}u z)QdUzj6k6baimY!#pN)Z=n51z{g~(%d;>XUPIpPteuaci*8o6%C~`Xou%-YVngL*Y z-1h0Xzu(4)-SXvI!=!h>XIADbxjcQ3bU>nM9?)IKwFZqo92uWS44By^%j}#zK6H(y za(Db*a|3c7e1zu?|J-Xsx=lFgDmxCK2Or9&JZ5*)my#p|AT9fOVH6Mh1hWWSO7+L983r+kGfu_{4rRr)py?FelusKSwS80-P8 z7PPI|$B6}vt2d2;p_bCBLqKa_iatA$RD}8fW?Pw+tvHzvV}SheCK{y(Nr|Pfeh5-g z`V%?sLoCZrw3=yuArKP8&p?kEER2`(xHv49fgvI>k0(2jQbM}{O3@b%Ns1s_w%33- za7#B$KNG4MJmpM-R%b#s1SC*y3QRr&aOAJ+%h1*U3Jr?t_D%Eh1Tki~L`0@cTodhz z=2Vc*TJfpt@LqgRx?+i)W1vI09NlTpNLX`Hqzy{q&rqrZw_<4*KY@%%n~(;@($2n8 zX}U(#y;??SuK;RF!6m^Sv?>@j^ez?=@~isy(gSXlB@vShsot|_lN<*-5RA0Tp+;qx zWvfavA->cPOC)~4=-wKtOE;1aNWDdB+NKXj=7R|>DP_`^j|Mdt&>Y@zT_cPhfB167 z(7!SAnHUF@#-06@Xbd5lilQpYdMU>h{m`>JPIbgeODDDz!K2;1OM|w*BzwX&#Ef-b za0x_80u^Z|xKE@PEIAP>_KDrZsI(NOSRZX)8|R_EO{PsrG&Frt2B}V=+zAwpuD50h z+SRZR(MgX*_d?mHji9=sF_c7Msd3G(nYlm6M-dai4$TOk^~1!UiIN($adU!2g%e_R zV$LH5-zIHuBMh7Wbh=C{U$u?^w1Va4P`0)7v?OX+%7gj=5S z80bmcb&Fz}#oRhsdM1~Y`)3HmV}E#YFnv%bK{r;0=64d^-i4z@ETqA5dB=AA4bzT- zg)t@dvMRrRUQ`JTSot!QWO2Iwt4m26Aj7j4w+|YJ%SR`Pjnk88u*i90WS;UcNKsrh zZnLH4Msv`--SSbi%g>W#Rq24WSGbEy-Uo7^&ss5yfN!Zp*6Su7jq+qf#WA6kke876 zAd;Q!C$SUN0+7qF3A9(3Sg`@`!Hs=)mG;F;=b_GP#=R|cJp=QO&s{w#LTgg9#u+Ka z(*cN#-FNe9;G#t#7OtS|HZYHxqe|e?9`vj~iDh8epzl*uJ+VQ?7t7t@Vff%|G!h(6 z=#0T=wDtmO^zgyr%zlu^6=w&deRGP0OIwxIhOH?q!(_Rkc^G~q&8)2v$(g%|fNWns z$J(|s6@MK(B8g`rM}CRYwX+l;L8tO_=JuLaSgyTn%b>1R2ZdT%a$!9nWaZ4}JVQnG zOVy&Ti@4Nr69w7HXyt}|jMC`R#uZk+V^)M6MST3~$_xb5w(UhA`+ad?kF>PGBPCg3 zht5)&=xh`pbI`0U?I+-fQn8av((o#w9}mV05^(X0E`zCO$!`O{LVCOj7e7Y5XbR@( z;qlILxU0=@a79qXC6ec@F)j00lnzidwG(H!_VVq6U+n4|_9sj%-i$>mnI$hhmAC1Q z^<`G9?W#X|F#2B~72d56aeqStr!li?9PR~<0~_>n2<_U#Et^AH)knq`t@Uh%D^1M2 z#psXOOLgLSm5Z?+t9w1uGocNbJ-Ug|suOP-@F!*qI-mw=t9{SLXhB!@tekE%r|lS; z&8tPt8!sy>ufq9?*uHRt{;2v+_4Vvm%yM)MEzZFskEXgA$gHPKa<0)HuQr@fTkmY` znJadfnKYZo{k2R88P6a2ufY_0LRz3mvB8McQBXy=pd?^>^+lh#AMZ2ZP#l*Q=p^aH zVj<1vs6qDLce(m7WURZc8=fbwIpsD|hemB>TID!#ZspE*c(ALXmhcg^-Th1X)9VT4NP+Gn2+tqt|ULCv!3=hm}LNIO)eAE{L3H zX8XBCGIW-Qira+lwmn$J%<&#h$X>2L!jK|ffqZCms#87_&L9Dcu9x>Ng+L-DSG_z0 z16v;rHPo{6shTu3qF*+7Ge4ZyH&`%tXoS2x+Ur}X>uKU=H=NO=yBLHu1awahXIADQ;gU{twWlTqcu;U^*qj6}NEWAy zgeNHa*C{QRY1}tfO62LAbie(e@0@kEQdtgnf+uU+h60nRNw4SU9Eo#M3XpT38BK$p zyRqI8uWZ6bAFKl*N#&1l=s?G;>MMpc#znMPFuzq7{dz)0;gGaM8z&6!x{>pd+eTE{ zY=YpcVrmgsGWz2|n1H(8F0P03-9PbQmrz}xhKokIBe|y+M)5O)CU|SI5fSE%HO?Q} z&%`=$s>fon%Sd1LOXMT`b?XQsg-ricyt6<^g-ZFfHv5b%)ln*=DblZ&1aH`UUgx95 z?>l$kE8>q||DV4(O4-`QRNs~B1S`v4)!e+&p&{s9oO{3n2LMpLSaiVbn+ zQ|*b<-dn{JS~^G%2V(j_7S5Pq+BT6tU1EHO(2q~0oh=SIWDUxOj7(I+ScsGSPM>NZO*C}wFl#N#%;Z}E;C6(qNr>l&m_&oabcKd1v_xd_? z8sflmHb4=itH0Q3ty%GlURz^G_)^rw(>NxWsiH4BIyyDYnQy0upxjZy2ovUAl4Nm@ z#-fqdfu_?cgZ*TJ|5Q@Cq1S2yt3JZLuZPAkzheOMfNIC6A3x5kyOEM5Fn`%%B8#4% zt4!W-6Npx@Rye*L$fh{@!Pf(dV=mhr`@V4;8GQQf%Yn2}IA~#(@ zZ$f>&!pWqPf}x^6)B$Gl-{FUpvk~$$wM{ni8B~!?YEkFy<1Cvy5I}BG>dzo;#yo-{ zMf^o(2E?TJ!UNU?8$uF;P45;QkUHhVJ1ZW=J>piBq`MMWB%t9{D+iI?m3JtA4$X$# zXmkpIcl<7}09-yx0P|fJu+hzbAN66Q*tNd2$R#vGL}@lgo``VQo8Oz&&~qde^*YFC z_*`dQp*e$r3nX#1b6@Vs?^m(sBe{*r3m0&-tSQJZbWe6Tt+1A`=Me$s%glOQxC*Cj znJ!+9)#!>`_x#pZ1~lpNm6bFU@~b@KmtF_;Xq_IAAPs+>Qw<(k(s^LD1=nZ;^9c+-s38oX{ui%40Y>{5IyBWY|JRY?HFwSvZ#@T`&96?JMH@K7`f>d^}0 zT13VE)3F!KV%rCRZXH;Vga`{d_KGN(Rn4{xctREV{QNh?54vmDDPGxO_#K#``->3# zG*aHVv*RY&SoRD08Ml-=F`ee!y_Rg8mb6qS2gZVo#YhjTjA20}mTey$@VyY3V7WT$ zx*^apx9a9upceg-(c$+`cBRN9ifDJvvuLfY&}VsdTcV&MNSvK2D5Q%&)-h9_q5OqN zxKUW39sX?<`K}T+w#x`sBnvAs8P_jaFTCdo4H(;qnFJ;D&qp6=KnbRpLmm#ZijhVz z@CrFZ_MA>BCWX;E7#T&Sj$4>ZC3nj6hpQ7>SOX1{q9?yY@FX)H{*1+V-MW_nxkvN97XAGfV z&sq$shQT|alh1z*BR2_eC>df%QlY903q{S!sLyPNU~C<#ia{h9bvJRY%@O=*$fF}N zrw5@7WzL)@EY^0Q-+HIurrfuHs@srVLM+FA22x{r$*G~_Wtc4QqHhYgZI*~0TMTFs zS-OZ9*nxzot`7luEZifgLK5qwULZ8@x~d#`iuYm>+CIg5L%La4{5*Avlg2q5QSWFC zFUxpRt4maUpm6)xj|_bESDu%LcIF+=@Qt864v|eN;j9l=l)+y)K^q<3U#M$7{&`}_ z-AK*~3U`CW3}+jZx_LT|%~LjZLJ{M=tzO!b8svA=TN!IP&pF?vWtv>RX0YqCrxx}S z!)(SIXAKxI4$N;xan0O&k*{#pGupuUDP)1`skex?3|46TF zYh5)qGo+Hd3SPi>mm8)zmS!0vd zv@DTQj%dbXY1-7RKGo{2%*y;Blk$w?uhr?^Q_fT;->|KGjhwsSyPU{#xRk4S)rD1z zduwbdG`hJK0K!9D3S2jThEBwC{R9tw_atv?WhVCl@ez5ggL=!tl`raopR`mH6oL0U zW-pVDkZ;VJ7wHisg+$N-eG)a4yW5m0-6x&u`qMqKg4fT#YV(eneWAcHiDiBw0=zGZNhMnYM#bXVs9w7X_E06wI_ zRJ#2>nK2J>(^5`G%p_22yB$*aEnWs+*%ou4!%?Z4aUsB1iG$@E`{ms9G#N>bPRpmK zq%)vl&Rmmcy)&(e%4$i?laXh+raPQGQ$u|sHfN~`ch4Pz@$$?#*(qgt9qID7}yT?FQ`??os?{Q6LA!2dGOHPrgwPwP6LG4!2^-&bXs% zLp0nOgfc(_nFr6*SpM~F9d_PqePI#qCGL)$J-dOP{gt)mic!3s|L(KdllYO=JJ+Lm zl=Kd9js4PYvdhv?cMBpV+1p@DK2k#7@bT-n6?Km>o55dISC|gBHf@O6zea7sQ2314 ze`)$^dW6k;_GIF~+IWsfM*(a)YpLAtmKdr$L#l8foE|$DO4c^eE}OjlEz3j~XMDz0 zv+PgO3dQj)Z>M-zWz-9iv))a9GH_|fdgbgq?{CPXXCDCHjnUQ)z0LrJ$q?~301e`k zxMRqq#&9oWg4@vdlf4nKy*RmiDaQE_BJ>?Rl!?z1{pt$c)h1m3n4i+VK2#D<3L2nC z68-(mEcP4iwY$451q$_xZ$H)#U;J`oi1pJF!T;j&j&jTk(+iV(sqIx6f#>@IczgaW zh{m+-h0R0o`+@5kG5=2^(GJqA3_J#e-k?7Xh=kD ziz0rLAAdC(0_gUZ}L% z(dVk~Nv?!BKSf)hQqYdG_=9{KXpZ>zR@NNl*?qvZj~NSn@-ex06m|1yZv{lku6l`y z>8GNG`QqRy?_KrWz!FM%q+l6N&FBmHNx>^pArg~jb}sVmd*XbcC?I#}@7KdKLl4eQ zwTj{LJZnF@GEpUoaY|niO~1*{HsT{DhL)udgqQ8quGIT-~5+)v;8&+nEtuQ)99(qtNI+Hqavxwj7a}vR ztQoV=NLx?+1fdl{oNOmrY7=gZ0B$+Ah68B>Y;(Bod@YX% zx&sravH>zg+HJ$Kp^W2r49Ig1#-^*^I6%p|+_d&>>E=(6eHb*i;|lur7f6H=2B=?2 zjwan*8ny&HT!f4jG^l7(myMrXYsR2~D7R!93=cK0j#PDtfoCckUaEmJM75c-B5q66 zAO*2ARdC{c!i(dmr8-sxz-pUw_7e8;B<%dpi3R-2rFdW;S72An z8VJLb*+5H?O2PQ_S3|AZgNdbmeQ{4NLoL%L2f9Pd!&Ta|R9I=TozMP;Qcd@mKPrpM zv)RLd+K(fksNnikftrDm?5uz4ZF9K7-_+;KqE_a-To3$)s95?X3(aZ^y@J|nE5OQi zIJ`kOwj6}6WaXv62EvgOkOh)j6!o&@IAHa|22$(;aVWCDpT+aJpkB6XxYm|)LM46% z=g^42EVB5|da7>mm7oT(HU)$__%~JBZc%b(MHAqLR->?X#tZ6Jk`CubHYnwe8l8+a zZ^nA)AUf+YS8AB($gFG6k(ICuT+IytK?umDT*)UC3oi^b&0`iGu(hL}Ya+u4;i^|g zZB*ifhS5?x*EEW^QmZgA{JqnhgJ&#C@UeRIG54}TY&DlX5*l4@laD4X5XZiEXZP2* ze#eN~IZMx)@#y(=os!}<@Y&yK8P%CVGbCXn3P{829UJ_D`feaX*waCD`fhj_YkYW} zztdq-#A;u$eCB%6r`dDUL&l|aA+kDMM5~tq7pt>ZnCLW>^H4lB6l`1fPexX;*FKpYA4~S* z{4zt7-GnamoQb@oF(;$Olc?jNBVJy`b8+6RM zT8)s72AShH`Fm-LZ9KYf)3wXI=Q52&IhBf6f6mc?@etVjZxRtkf@+yShXM(X?gu6- zuI4igLX%<5F?>CQWH~>Yy3hBM{7mw`RlO{JpqW*@%$LnWsA|T;tMe~YgfIK#pGjGl zQ3?fqRFbYgYYRaWCl5%udNM&oxiK28ph$G30)lfgj@B89VA2GsGpCqJ&Ra+ym>&&W z9#}lJ&mj2rrY<|b{}QBR+(<(r#@oncJYaGT!EtZ2{O^S zAuSY;1SzFQKK}`7!szxEOSA`ZgV}|3(a|xUfb4S3I?MrQ6=xv5+Uk+M8N-(NC}|XrIt~RS9rl{pFb-l0xNQtcENVQd{e8PL`X^>g zYj}rT7v2-9k<8*VMou>wPMEC$j>$hA2b{9+j@Xr$)+wZf6_YHM)m zoM|{Am4r4-3_hm871}7fqkhTY4wM-6iyC$(XC{6$kfv*`FPytXYDX_el_))kxsEn3 zs*MW;egHGj;FzC5Yb@j0OMEk2BoDEiiHDkP682pONwIas0UMj7+obHX2*6DFb=7N) zKg_a+--?Y-S-_L4Y$DNY&zFYUnx5fuE;?QHr*j4QoULlh95GI39q+Vo%VyBXN$VVw zHCZzvZtJAIS9!E=n`|nbTir61V-BQxB-nAnfm|U}3eT=^g8|gP(uQn#G(K zIaeHYlQ|yW)WQ=moq+KFdF=vhyeuXlxf@U>K z=2>}uNe4|a#I-&iqxdvJMLN;*b$s@ZXmF0IM-n}MK#g&5-mMY9?2M_+Cjc~u&vy1B zU}E`{fhs<&+Lc~kq>Rp|%w2>oE3)Ri%hmUEl$bvkK7C$aF9^~ds)$}$th$GHXW1kF zIO>ajuWO>uurXP8TlKKkj90~AmATNK)}B-0k<{3uLRnV{&OYZ5pZAkn*3wXe=`w7ogi!+5dV$t zZh)bA=#z#2cu_*=5ms>QG?UE`eOW`*pjkPrj4N7#3gy%F#Yg>epA$-dy8De!@Aqc# z`Vz$%gZCHi`mdg!kHh;B#NqT_6URExp0WMf-6X<&1juJr-ug0grEKTnlY8d#h(MW1 z&B%GatEdHA?!XQOwx!I<;na=x#`6jpnX+;AYAZ%i&J<$RXpNm8KJTu(K}FPN=u(nU`f6=R2<9=jmxg9+0hwhANz{Nj6-@RneNG9$LKjcK>;5 z_=cQW$OQVj2{FJE$I2ilO6=9pluugjMaoaa6pt1g24xnKSx3pC%uY=hn#J9mwx^Y$ zWEdZj?wD7F-z$U)VOkd5tgg*~)KSWjAzz7*i`;1N%rDh57Ho@CVghGw$gHrr#?Pku z994w8jVO~t^lM2nr+YVLvZ9Jf8fezdj{u1RGNC;C?=+%U+N`5uhbY`>?64ROy&kIC z+Zua6NZpZ7b>{kCBebGbe@?hnbAQ3jSouA|_Xg;7El=zO6@1~9VZ;o6^~=55XveKb z!AVy!yylCPTJRGP<*+|H=+t8HX9X!SYb+(`)cb@+;F_&rUPJ;}8zui}M;SZ0=WzW# z21h+|^RO*kyg!r?j{Xfo9%t%IDN|MmYi;JRFfQ3pGqNnHp|ER!v02uUMQSQMHdewf zB&@~%1EO|9U)VD8qx(K!ufj-D(|rsup2zT)2fL&SXk|cdBu-a}rQBlZZ&wD((){^- z?c}_1*4dD8d|cKK9%Sy2#Wl1mai`hwm}1E{sCtQmq|7^@5W40MOcYiM+wOfep?mjV z-2HKGwz_v#cc|@4DM2}*^uXmii$){b7I~Pt6c;g_hYj3=)RCkN_cL0Uqm5&*sGo0A z_D>38A>yOO+)o#vL}pBOIh^XW{C%i+USG- z?pVZ$nwmh|Uk_8Wg!g(N69rxlz-@^ZEWhgPzW>ovJI93!?z*9*Kf*f9kJ2dWwS&Ax zDP|2+G#wFxF|Vaf8oT$*p^5}(rv6HUqRSh(LMjLOMMpW0TIrn-soJhf zrS3h*XMtz&erW-`gKe#mT z)}OSRX2{2?{b)S87ohi*oDwQ2?%JwF&5=I@OL3qRv}%Z6woSvVAdc~nDa>?4Mn6C$ z{etVyoSF> z(o=|uMx5=cIDsALkBqpCqgyCQsC<1E=sB&Y$P?W?#LvzO$=)3JNK_$1ZX#A>%SzCk zxb+?3+03xV9$~W&sdjEy*{qy8gND9<5Q%H<8Tr9iDx%L>A+`+Hv!e*FDewrR6$0*l zRXuG&h1VPHIybF5UR2qEj<Lr*Qd;SZl*>J_uocc}?eK&x>lO&?rIeu&j|6t?kRJ9B z+OQDqk&VTGbq;)QD6IL@BC}1t%F?y7l{2hj#l6jL?Ut_nJn^}7ettqmvO4+0yJ8b0 zTN+3zxvdGhHTT15_z{Ir+WOsJ!pd-9nPk?9SVxmy z=)luTsT10O5~Y9qtVrT^hQ#4ZD9>TO`kd{}sp3t~ZefU5j)`kCt$C_TyQiya+h7ug+psW-)a zBY2KWU4~$rO6+Q)*3cTq!P>$?U@IM0?iCh~7sb)8CETuM0ko%7tO_b-x|A3?Dr2l* z7loWa8!L}pc{B&!ovg6}<)z*T1=R5oUyI(DNH9{S;B~#ErbgwmmT$NmWYx$Z}8NtC4U_nVQy^)?^w=9@td8rZYQDr85_BNlSh*d1F|VWpLwZ)sDLvE z+Zu3fyQ*;mx%_BIce-WwQ2+UvoM{f0u_X>WfV_EnOl%0KR07m{8l7Xhf&m z;TWU%v?@R6&k6siW1S~dZ{E87p%rQy)`HG$wIe5vgEA!movX_omWk? zI2vP*`u&fhC-##yua>5`rVGiwlLbp(d*boqmdbuH9w2mA7fbrcbxm(JSo0dHg5iw^ zn&Uu);@}nXAvovKsc~{!NIpmnFT8y2m0#07U`;NjpZxr4g_-(_QGhe2%J_XFaIgXV z;`(XzPtew2Q3ia2&}V=2zr2v;IUD(^QSl;!(4^MoqcE)>&TKk_Q_+V2l>?YdXivpw%Os#~vd;~j{YZZk*Kx>t{fD1_H1isAl` z>+|iu<6e3$I%N}MVLJ`L%w(TCy2zP!?voYduX~B{B^A4QO!t~mc3{V%Q_8jc!)}$Y zlJq_?gJwNzT2OmY{GRCQ&h6|?#{fmTy=-kH-rupPp4MJAiXm8fvDR@hFvnviGBx7x zV~!ld8c7Hj3IKXEzimEt{abS9`|}(Pn4(gd(s270lHte7HuH*l?;$e-=*U`;b_+Iq zB=gM(ad-TFeuX>hC+M9qt1g%eeOKyVxyoiTYOn;et0QDomFEjey54{$(7{Tk>#WA% z*&Z4LX-AoOx9Uj(%!gBak0<=s50tMjK;IoXQ!5_MHu2ZxFxUp?U78;}-(eg5;O*e) z@n~Me_}};4{l`tUAe5QEm_1#e2!|tt(*Gnk{yS#>*Dz)Wu>8-?0pS0hVGQ`!hB4qD z3}e8*F^vBsH;7yR!#zIx#!o#=+wvn4xKzUZ95Xlsa)k7jGz1X^1gt{*_3={?X;_!D z=&~XhgIBe@SD;yWG^$^gVC(JvT%h;_v&me`IC<>-CQ!*d=3%&4f_$+~-p>9PdmIy2 zaX*r)UHE(4Q1kJSt$eigDdS_SYE}exC&TPd`DVr`@XBt+s;IS*m*!JvW1!HXW$KvV zJe{2#{R+EuB%S`}CSMjpp>5N5?bzqXI{PvGw#MdUC6AU(GWWUaa1;-ysOVzBmXSRCb5NvCOoC-#(y@kUv;wfx>S;#2A5;$Bcmg&ZYi)cr{> z<6C8%h?dOnElD-N8%FWNWhXUOs|DMH`hu+EdU+8fYSpvh}dslM_kb<^-7#_jSZ&S#(7e( zaem8y*Xfz3l(gFo?rjwpJ-yqMFb)kvtE*^$DKb zBqxeIxIZvON?S7}MFIl{eYT2u(PCK8l;+^krh?E@p59~?O;}0YwWd2wciuNwyJen&L8T;&?PR4Aj^6bNL%R>Xi9G+90qZSPjfvIP|IqrGbsna8^; zECAk1P=7)IV@Su`sOI8swDH~}tj1H_TA9sf@CB{%DUQ8vBzmQwnT@vj68mIO*SrQ3 z!Q)|UsFOS6KFa;V)uSPddmTXBH-Pf+=-qA5gQt4&7jbv6^YsQkW{bjogs_eUDmIMj zBph3u02w0v%^O$!!e0rjTUs>@wqHToaM?7yVo+Lx(kq;s-_a&AR2D}{^H+H8LOQ=u zMD&FwqPc^rX?kavG^3Cqk5mtezs`^J0n3OpUp~_!G(@FlW8Fz_$nrtss6rFhNeP?! zz{@0H;kl5Y_Vn8UO1XKHmk={2Gh=; zQ`v~8I%|e>DA{9MG>EF4S!IcsX&LA3O)n&mq&)BvQNgW|8hDoTE+>=}okE2=b7k|x zTO6+UEQZUBC=#Vzr{u`h&#q~u?R$`Wkat1$AYT-(Hn@L!DvFPZtIynRWXGw8e*hQ0 zwm@TH&bOM=_Y=cx%7|%+?s0BjLE{wX%u6skjo=$Kn=tJf9Y$;`4tYDPaO7r==aH{4 zJ%rwA(N!{BvN5))$0AT2>ByOzPC!=Lw+GoVZ8L<#F&LGM9UyME=|_dAzLvP9GU5NF z*I3e_ti<{mjC*!Y@xpP+9Gh;ucG5MHAXs0}xL_5QR=pzDjI3H3uQ~ddEk@>*lx$3u zg+Z+z(7nx>s-zQIcFCFQ=Z9+*m78^;#u!YuF&DzPwX4(DP^~HT@wYgb^@Q1l)uVr9 zmDWI`wo$H1O8pB)Qe7)JkHR2Cxi)b_xdGX>qn1jRTe(8kyoE*B^5#B!JegDd{fTLg znU&C9dl*=Z$*Cxh8&M`R%D`9JN5{H75gl3J+|1Sy$nUecs7#!(StaahZD z2T@=>RSpf4vi8x97n&kW9ps3%W>5Q^@nAXy6$AXVEQ>V(TGhpS)bGilQRMg1*K7f( zxCT$13Jw<7ZY1#4hAhG~Z5nm}+@aOMruq!33d%HuI-PqqBjAk(eGwF9gc2vr`wB~~ z`44mw#u4I!1zBq2feoF&R8WYLS>pY zSP9Hq!JY-RyD+P@QZY=!3cY}8jg#slUMeS}YvmG0?KD;IpeR^6bP+GzBNfD5Yb!Z! zhe>hUl5J%K0-MQz!JieyKd#e4*KwPWC=jV{Q?+~XIXkH0u>#DZu8f6H6&;0|`XhI~ zQ*9!%3iG%W4nG911ZUmyf{{@ig9kCWGvpgWYUiF4zinp^D=gYEzTBwgk z#UH!F=P0rkAFz-@>G^}Tg44p~S6{1`F@G_>2c~WZqcNj4F0jqbmi^R9;9$UQM>)Qf zZXcF*%RosrN`ApXUYzGEvq#^boj`0PzP52;s$t=5jMdmzJWftV98|Bcj5<)7Q7Z1^ zJfl)NR%T|ax7M8ue$^eEr&FeLKNO@1-xc&YIk z1>MBe!T|EH_?0m3yEYIl*?J*ugEh#*EmyeB*9E!Sp{0Xxu3(wgs?9g&q7p7N51er| z;#ql#mdda9VvXC`h`TLm>yUo=);jJDXYH%KMSEJIRewuWMJrWr9blSWp~{5R@HX*&fJkrQhVdn3R!r z2bqG6pjbE={HdHq4DER6SUkLL#vF`b7OrZmoKI()`MvISrQC6irnxmMawALpc4MA- ziG)pwr(4S2SqgpAg^*rGWhV0hr_9-G8=evr!xNth#`kmv#T_?H(5JYQq36D9Jcb<5 z>vl+)l0s=*jtcWOE!gNqcB7nu`at3q!;6M;1coc=$?h`26{b3W8TOf(r_<8}a9F(e za1hZ*8qlGmwd5Ql3O-Lp-#kb1sgH`3!r5vwVNJdmg5LA2&@u9rn?>yIGc%=WD~;<McVnE z>zntdmbJDSV5b)K#|G|!=%rO7Y#7?1dNf{dPb;a)NnKh^Pqu;)@wu6|JyR~;R3y}{ zf8UMXya?>mn==oM!|M6&{CS3O?3e+21=*|=&kdmS93{OU-`;lr+lp5VN3=@-LA(%P%ZJ8;)D0$9;+*#^Mo7#&dLAB2wK^5m_ zB)p0Wk0aWgb?2PR;2yOaVZK=!{Ti*Hyg5WLb@F4h z6i27QVya5Js>1E0XgvrqCvX%O?z1U>lt;+u52);vrp&!$Zj$+?D+YPPz+k!db%-{U z#NxW!X%PwrYeZ75xBjwu8406B%Ll_hk8ad(GRv{hzz@NEkz8RM-(ZpaC59eujYeGa zNjd1W+A6;k{{(%KhWD6hk1e&&>=kz?z#auLr6a6TzD@mpZZOTHy7MThW@ztCfX$`& zT9uw+BGhQzxJnc$xA}=y;~!l#P@Osk2=B|FT=rMD?;2a4aK5z+V7h=lS-ua$-E<+GK&irDD`!qis) zb8`-}$Jjf#1HL1&{|v5H#O_eHKu{Cj94o;qvHumz%LFTk{~n_H9>4Qo9g|4+y|TNH z?Ci|s5kJ0o*zJ4wTk>aMLOYlbDpHjR=`>G<;xBddW*>6lf@cSzG#up(`s$qP&G011 zSEFUQ7D%U;b~`3Bhbj5~5wkp1g(+PIYj?@2M7GNmT{k^qfS)9M-HvH413JdX8jg>8mJzg0Lft0L z>Cn)=SZ02f`fPet>{Ky|h;AY0 zFO#KcZDgtlEifC)T0(&pO+`A5k5ZDe9&5wu6_;Sf^K~W?9y$hAisY?l4I;9ZN-_%b z5P_SeGD~30$0{Jp>gGl~KGYlqc?M+el8G@UKIT~*2#QmjtooOq41Vh8mXW#!gyd|n zw#pA6Ba*_i%ruC{w`W(crm}NZi%{4W4PP0GXa3REAQak;ZRazpJ_Dt`cFGn+U$0|r zM1`xpQ^uweR<1OmfZdwYZ|?qX_^H@LWgGJEmod0KY2$722ihHFi!3ocpKm!4GX37l z;o?u@P!B`AnGdG!3lQ=a$wz42dtC$uBS_{Ayrml&CiBa@<^_{Vls-OgxK|NXIacP; zhQ+N)%u`V2$Fa;pqa`Z)!8Ki<^KeT=l*no}nq`!luX``c^b{mMyIvmlSg^#t&r!Q9Y;<9Tdw+$SB0LnB4Co_W(V#fy(_Yl&#}7!549CJZv_Yrr^*6 zr8}lU`f93d-CxcQz$$dP!g`5A#j#8Bq@5iQJsiM_s@PTBV~wDr(TL{&C(ThyF<>hB zb49xHMtz52+z0#<3xF&wn2MzzQa4}HjvB(Y_4I4EhY54++^R`8rjHDg(G(c0(mn_O zPp_v#E6SW4K$lz)168_?3XG#?8lw}`$=Mt=9@3;V-LU;sxS%;sJpG576S-+Y%dslu)q z+BvgapP6NC#^N+?()LJQ^@o^Y;gzUR9*DdtVI42`6O5bcp-E<@Zyg_Ui-T;ifqI8K ziC=OZIW4nzRCLt*m5jlx@y#kIs#QD;ir^Jp8&T|OAiIg5?7^L~BtY3D+^d?wCoz1$ zh1dAA>wxjcvhGsi*+|Qt)7t8cC}cO*)^bsQV8MiqyX}bI@ff8WqtWAXu!Bk|1=LX# ztCg@=jx~fV*(RhqQ_{h*BM>wNnK*tehEvy=-`&Off(&l>&!-~u0CR&@3XgVkgJo@DO$^$RI1JjAM_d9&e3^8? z{6aXpHhqUUvW`&`XcVIwzfZknO36e)m`q^X%KQW=44I3Lh3RRgVjyV=i2Tw&qhS4)G%00SCN}29? zJZ8&<$%mC!>XK%OOfcH5xukw0zS|zI&EwF5g`T2rZo*?AuzK4%7Ir)7T!NiSeHilG zJzha*csn}tNm;dl(@x-pF|4w-*Xdu^7`TvZb~1#kZd==wUY>2A=BsHDbzQj+51tox z{zFyWJ_mKCKzm7~_SLb!p0o+_l+bLW7uEDt}ZlZL^=OMsnWvKz(k?1?Pv?37(1bQ;~N(iNm~kS^aP@{ z*v?Hxx2x+TiJQG{N3W9*s&_404L#EufY4*9)+vnWx^QC;d1UWbuGt zp#aXO?l7!#oP7t!x(ZTE+*n(re8{QL>d+m2sWZnSPE$Eg0LVu zyW|VIb^8nM18%whPipGFD&oH^ABO+k(ZTkAFC}67*C`3xKcpmV|0X3#QJ0F_1R(Z& zsGZ^HDNc8d@a&R=>%*k~)^L&)wr8Zdn_K z-+3D}K>n?y=3(jmu6#Y%KD(7ZQ195R{q%bNBc%GpSlx|YZ09`f`T^b^X>Q&Hw+*Kq zJQxDrVYBal+^5MeC^=uBx*A6Us5^dyp6-UdVDOl;a{Img{uWG&?sKl54G@(viPSmD z*;fJ?=i@j{C8REy*4z|42K_SMdI<&k4XHDqC7^e?NM+q&YI49`i6iIXz#`I{y6c?@ zsS+zh!DG(o@0cPgeLY}6bjTycxHYY+8i0s$_PU$PcQZ5FDW{dj-uxmI{L<7$f}VC3 zNv&@Dv)_nN$ZKSTwVR`5BCys!69HG~=#z2Ci zKMofy9B2KaHH%r_skInLBQ7u$Y8RcIH2)Q?$Bx_=B5edTFIHhT3|!}1Jx5gdlCAr?CL#{!oH3@lnSDkb@aSA1J_g~PE$Q*MYD zC_b0lwT*bcy!TT29SWk*_6XPB=IU#kOcxM+dl&Q@alg@4X;xrPNQXdJqcSp^pgA`v zHeHjyiCeg}2#de3Zca=jBgqvQZRfzSMi{AxcBEZbc->Ha;;W!9qxsyt*-mIz``XGI(S&L{rUuredl1v4C}i%Q7+?t%iS{J=5< ziCSoPgqr#VVR4j`m=v{p#X`liRQLB?zRIK0bbM*q(6mW7@fWK^=?KD9C9F#vr1b36 zm?}wMe(>mC>9?DjDN;MYl$!*JzYf5T0x(ulqg&Pd#oVph zyd^&>@#33f4v_12PrU1~h-31ctu;e_UN{Nv*q~iyHwu#x*XzskYqoQ>COgMf&URkp z@$0lxm~-)_1sEXq z6-jc=X@u)FNoYU-x2_S_n6|bxcJNOR|H9oYtG-%CBJEO_d^h1*YB!IiUYXw5#ItI{ zzvFEhD-_e!5=MpvUqjghR4Q0RcDbi|R?EH=F|EZ6$TwS1Vhk*3ev;RI`3)C5IO{a+ zDA&Ko)=^%xQxU#z@c^1hUbX;I>6_wy7Y**!5PiSC7oN`_D-|1mpgcB;mg=cWP3Xxk zOuB?Es!668CQ@%6W)@v6u5AcUaLX1Kr#`h@?4Ps0~Y~eTho!B_3 zEh#ux&lERK)+O+m&De+7aA*8U=yb99J zj`&M`bBt`lWeWI5bFg=gfMp)-3V{3s-X!* z#m4UpB7CLMzP3OPx7h>N*!~TD?AcYZER&qwwQ{zS@l6h;cS9}=UUBhQ?_8R(6Zz8i zR$2Ef*LC)!33%`GCC}GGP#1@-SlA+@53cw~unJ#Tbm~Uo6N-uB@#sOd#hExQP`CJA zXh;0Lz@!~wnP3-;J*`G}{UVHOt?=sCF-f~qCOkyxM{ceckgaUOq-sR<+PVw;RF5ug ze3M2`RU4hTKFzLI$+5uR+(#y3&UI#T$AsP`u?pbs=5%t4>>XOj?Ew<4rESs8AhHD& z0-{of$6SL?NZZvHVk$nrN0`pe+SaKuDkTc(o1Z?uUB#zLzP-hBrbjBdDo?6$ySeMv zo%t$R37_7y8c7l}rhDf>#Erl(Q7r6BQdh%_3kn5&L2hh22C?fnA_uoqyu3uuYMI0O z$09o!urZeg10RnN=#L*dK76Qjyg9wX_Q(ys?EiTiG|T#4 z0^Z&K^9Un4WAJA7+Vp{duiWJRj|0K~vsW3}SOEWHud@H&vsc;wwY|#z5B4hizp+<~ zwWMkA1nQ6Pd| zX0R*UxZ~r8uM#gDEc7K7G%hCL@B6Go$qixJ1hDr?Cp395fJAtbaxu_Ty&K8pdzcaCv()OWhXmD?g5tiUfZ3(&7{ zhK%=^+CSTD?~spvARJH><4ycpTLMqJ^&pGtD7L*T3S$K<@u8%}f|!%>jEVsF?sK5z zc|JBlM!(z}#uS3sh*#;>#G1oSa53rxytaX4Q_5Z(k_&5i^ZK^*hsbUU8)iS>A>a=r zIb|ofg0WDkLyS*XEe_!llk=d**PE$9Q7|&fu#D;u4?B&cLVTEpk`WGI$1=3BegYKU zPEZ2qW?&@&r6QI93&eGmL3bHwM73{P02)dCz4({qV(fD^>WI#^HzV~7LUa?A4lx|t zp7e$?4$4>zktEAu(}tFeH$Y(t$-fCO1X0DOctnxH|BLRoxP{#6F* zvSY3#rK)Q1qBG67_e4DZc80Tru44F&|yL{6KCoG=UvKbKYJ$ zMT4G1o?}vS0Ac(t;4sFN6oJdBu&B{t6u20CkMPDB1hzq~F<*$-({y}BMhqfz9eqfO z>2vh{+omTTfY`cNP*)9?>N0+JFd1|mK|#$TaC54ncUBTh-_<{n6s{ooN`-8Ba7VJl z?!?nkDi#YhR9$v(_C5Y>M7RmY6HP;POdGoyOQK zWVR~~L^b>>o~N$&E=Ax3Z=8v=)4#m4;D#`+qz!q?Be?HcU3v8a2Y%X;K*B@h z4R-oj9GWm*I)F%dcVgZSO!i48yIY#HZ<9jiA|s42Lb6oLd}e-$|fYfV3Bx@F5!V!)dN4!b^8U z_SqCf>K3?vpl$@)o+3|JTD+dq8!09SC>iNl1(b5-bOD1L0W+{@j#P+70^OHXyj`lcz&N7P>)VSyR)2LkA|+MEHr$rIG*d-R{AQr(+Jr zHmEJGhJUqHaWx9y{M5q6QIUk+XVMQCFbcmG4HUuMFWf1;cXvS^%Vy{m*-T*yI~pr% zu35A#ArBsz#<)e)Xpn-0?Ib6T_oRP-u2n*>Z8Jc@EU;!bJE zB$)5RUGxY8`=p3S#NANR2*L#V8dQ$7p*m7;)??d5NC z#ev6HOm*||AkOq1TeKOzYF+N^HDiFb7afdi#DS(4zNLsre##!DjYKVvBiMkXJtXx( z7BSzrYi?T|(NlbHn3PfpO;c5~lOhRn^)5C2gXedWa#T2=0xz3h* z@?>N_C(YMHs?+*nm@}`b_6mf_f0mU{Rz-N7Cd~QQWOfJJdyZ15FA;_If)rk}XAq@^+-cR7wt(-N3434ST<}<`J7PUH7jJjQG zPYSfU^N@>G7Dw34Sp2@iFQ)yu@rNa&J!PCws8T(B7>63ttuRA2pZD-d9E zJ(JC4Fovu3n-SJ>-|>o5q8tog7K*dBhMBEP8aC7Q+U4+ygLEX3SKo*vM#7X=YJY7~ zS|V}63DQVTigYP&3cc&!pfeb{f=VS6dZxN~QPWx%xF+@ETP~CSNzgleTHUVeL=WZ) zV}?Hm&~tuOR>2B`lh~<~jt?E)^R%fd)5O=fEZ0Ci7KhvJV7f(heE!vJr|(1}t29b@ zXzddjqk7uq99XCwx75a(+q~UAtB@IDG!3itDgtTkM%W7F(tlB()6q<($av3K5*4)1 zxBV5WL{&DYtQ{R;DHSggtQT;wmJC^qbfi9ifEXg|wp;6>w$_nWa$F~V3D6z^|pK^Oka)f-BsH#%#9Vm zl-iszK?$xh&7Iv0ix%-`Qrr0bn6V<cgIhJnY2Qi=?C7OW704&a4#^a&SswCM@DJ*tSD z{Rtqo$joRqWreXiK(}0x`OXTq6X97`G1qlvvB$u5P~K7r`m`fv#T=pHE;^TEn7>2U)pO5ctS|4X05enEcUL5w=(v(K58ux789=Iatw3j_l^3 zf+rB>$cm?DNvvfFk4ozz#!_Gz$-fFueTJjAeS~huU#SYZ0Zk%rw!OcLPMsY^LI+xy z>XMoZJV_UXdy)h8?lC(aq6h0iRYr>{nNjF(z=|IY13bNa4#Unnw%o^5rq@7-I)8sm zB;n&y&Doq?8dW<_S<$M(?F0SMI_#usvZtWwZW8^h0Ay7)Q_}A(rhHiHa2k+$Ur4#s zmV!a=KYPJ@+sgW}MimJqi&dVbkd8vY@CH;j48@u-R{~I=^7)gupCohE%FdQoFB&1r z8cs?F)Pvja)umqa%ORCShJ)usVX0+02ri)u{y*y8AxyJw+t$sYN z+qNAUwr$(Cjhk!TyYJc0b5`N6uG%Qf@*Hivt@qZFv682Z36VladfOqQEfU7<=^?xR zAlBQ3HF{VVgjm6Y-w*z!33rZ|(o#IHZ z=szQf(C4MR75rLi^8ow_W;U$IbX%yVN_ei`yF=?Uj2;tn=ojAvPHHelkW$5vyHx=4V ziCH%H%ZvS^bsFG*e=t51piz8NL3AyDZEZqYrP(Q)`mx{q)t?8vI>X`?fh*_$j&;${ zoT#Q~BGWty%5=Sw<#;LzV2JA7z73>R-AH+|N^Czu|8`{E+_a=SmKr_=|@$>3*^VA-QIfyr9Vrmac%z@ zRdh|<;%RbUDga72f2Y#Mo@P#f$hz#)?d5>AC5@kA54JRAAwd;Z*!8%{ z79G2$&Q5;aRz6YV>0K(#pzsR8xvwdQ6gpQj7rN>SfN3G(P(mjyool<;<{EAs8_z5e zEOH-Q!-QGO#_)IHsx=B4_d$wCnRR~8eU?L9zEof|E-ez8I#34QC~!~j&MO}yd{DGZ zGhj?7fQbCg;sR-$etajZi)EEdxC}h@dVXFjF4=E;@j^K%_yBJqHMO2BTw9#kI9^s5 ziasq)>_);8O~+&-Vujf27LlJKQCzU~_!p7lJAnB9 z4@s_VZKc`Y2|cl;4WQZuGuxrtEonrkVeN*d+`fZBAwDHs-J+j0f~<$Ap0J>sV(cEV zjpBQ(SJeW(dnFG)#d9^-dRa8Fd_s5Qk4}RcYtWuX=pp2^)qkPhp6qGWngQ&Hz!zhc z8UHwpN}J);z5@T?kzV?{2aY0_G(o zzh=h8dHHh__MxtN*w=2*8xLZs-9Z{Fk=TL6bVibaO8lo$ryYd+nU`N?=V+T;SMkfX z9+3L9+kx)>;^)(Tv22`nBb<3$p28Iwi7tk0DW-(=!>#WCpO=L^Mj5}7@PHg_x?XJx zU&Zyfo9*^K9U0+q-yDf%FbQ>OzBiPf8bPX1au>#2KSVrv9143AA645FI+6KZD~)Ni zBb+1(MuSQfeX=RmwB^xkP>9X{v~*XF=L+sE8R8v%1{BwN5g^(j=zt z(u{Iaje_PKsh83EwgE7RqN}HVRpQLIOT3d)bdqH zI^*I=R@BvFDbhUpV=C~mmk8LFCqRTWf-cJ~lf9PdJj!7-JnT!PO)(Qen+PYbIT)3U4HAsbaD%kNad+JcR2NvftC7s}OeG-G{HJB87BARq zV1|rFG1Bu(Z`I1!KlWn*-mv5zVBRw2%xfrZ=ZYcMGEN!~U;5?uWAiv`!lKLV*+byz zZa%3$CKDaIRexH#a;N-oQZ)MH`R(f;;}IrJENs=tEA6_r|4qGVhP;d&RE70@%Ui9S z>w_rbID_cEx+KLFx*A|^YAq$vsN5Ve(YVr=r1YW9LHVHKF(96Ah$m7_aEz=_ z-78|bC0PoYtAKS~vbO0*lI7_2gHfG6;C22G(vkLPMT-(jeNMP#E?JhqVgE{V0b5_o z6}u7n+1D-udyp|Bt|JWopfP=VZ)stEp`BPzS*Ac=ql&-ln* zb;s=#ShO!1C-la;^Yy?^)JC0Kvmy5AlTH+QdwhBg*P8MMS)$p-@`1~4>u1lFVbwzQ zBF~~p&F=^Z^JcJl_wo6hrS>hY)Zf(YRrF_>EMFZh>K4-s?7-)#@EsSZmqnHr3Qk!~ zkf4C~QTErHL&QV^Isl1&EGvs1Rn|RkURgvql5@FHJ)Y|Gox*7|Z$3o{Q<*-Q8M1E| zzsSr`Wl_FXN`QgJ+a!NY(9t^@-m!zoNMx?xVgJT*@~wo86j%C@=bcQp)g`VNuMUI0 zt;b=$w@+(J@sm;bVD?f_!Lz$N(i%qCWB?RWl}--&M-25y@UR0ai8Q#U0_bb`^~quC z0Cj}*pjuRyw7q_~X~(g9hIeDgjRqwv4~)wu>&Zqm zQM*;OQT>Bh>*V+Iy7x-;>lJK|n%@3Vwewg@w&b((OX!o`;0uZ{{)>ZN4 zWxiGMZ6ZrGef*l%3QUHw;%@I%Zmue1PIHEy9dZ2ySNBeom)W|Bj24$;!r-Hm#&y9R*i)_DGCs^7D9E@W|!uJ^0J}BKI9U1BYu& zZRPXXu=CKGiSJ{R+ z0T};R@E*s1pCQ2Uj|~Bi|6mAk{1Zc=XC*PO|oT$Um?-4GICr(YHJ zh2X_l!k1um<|TLAg{Ia1oKBqi#9BEX6BBbhVq{nz9phisuCg!N0eF3-AvNFLufuHp zKH3YU?jLNG-`=06gQpSr9Zl#w>{fKnKUy#{**{*S+Q8qC&Uw~16>ROm?>9epe};v!S-h|D$PgA^DPyX zPUDp1%=2RM&$8%@vMMu*N$pr>Tt^iaCvpyfTASEpRcy`n{6tKT7(jmM^+81e2Xj#a zwl-z2pdSp&G8*u zhKUgPe!VeQ6lsa_%rJc}(ZTsQCnhtzS-J!mKl?>aw?_gChsBnn8{B|D*uNXf!B_DT z*c3jjB$${qq`Q!eP2(XGnO0T8PtkAbhDLwwqB|^8xx#z*b-%!9tKmMDCi%?VPo~OD zM`1U*!|(O424KjJ27$qZ2gdCI#qZK`4D%l#!r31#j`Y9THGp8u*Tm(6blQ8oyQ!4j zG7%wx2@A@NiRJ2`4z(~rA!FBEz3}-CJ>qJ2>T^o%OmuYF03wGlf$vYvcM!nd7BhLX z@@R;ze)BDX6pZV)6y)5jos|9nbd>wPNxgHPf!@%2M~ifqlwnIveNVQv=*wb>SzD@j zixTaPxnEzKxi!qCJ)xLS0adp^vGfUq(Ixf&j(>iFtP7K+0^KFT#{)qyAtaYLW#lT| ziT8&KK!Ul^j|r6T_*sC^Z*Z^+f(3`OlZ`0}lFd$Qj3c-}c)46FA1>YKS-HMv^NGLdrFvM4V1Rg0XS880S zTKmEX`Ard=^A1^hQ}dCy^VS=_>wKlrvrN0C5Js#e9(QI4g|A{nN_^w2PX+cN#>%SB zjH!=`ja}kcEsPIHpRg)JzLmbtK;k}&Ty^Re6egm**haI2Dnb?9PFF$Lp>a)0@EX7_?ElFPP!xzzvXHAvMte_4 z2Ci6J#2ODPy84OOBL}z3QDAmBVwy22yO6D01Pj{J!wMl{OW3HQ-Ws4pOuIHhfwn*p zYXHzdiYl4O#thMqe#^Y&?yxsb!4bhs#Hb;^S<$ty*Njl%HTh#Gk)~GH(nFo@V|=g< zT^%deF5{K;6Pd*$$!k;^xq&3oQ7S~-cm8yN%$lOTB2}~36FuCOz)3dex9Jgl38n5Q z>!N+Fii$vn_9}a$eb_8sku@N#mwljr&9ql4;_q6rs9J3gL?moTg{bX(9gYU3y-%@aj?c=OOI{99F`uKt|f+ zi?5Nx3fi~5Y5!%Gk(Ls(fUa|@WEw}MA`YLr-JZ-il+635F``T<-bYlYw}$nE(!HRE zg~`EmpOS0_Mwi(^VhNaLjx{OD;_5wLr6L*vRWG$3FRM zQEj0~$+yS1_ho`|*O^hb+pAN}ThngB-)cQ(TV?ZV6DmNk>IQXgrD01hoM%6zCfQ9( zhssFb++2XXUj*J91m1Jo`4(kdHduA_*`j)2Lbox>ALN^_P7G+2>d-6{XO0AjFQ) zWHAayBnGwpK&`5`6n)&!Qp$G^pIGFzw(@;M_i)d0DMRU^yC(&l#uQ2dAb8ddeH(@uBFWzkvL?$_?;R5x2ei5MoT7tPM@hrr`_?o?Ah5$ z!}Y44Av>q~mpdmH;6j;$&k*?#nIsSiM2pY;s%^qo<8-umtvBgrl-DvQWCr09H)~!k zV5)=si*wzagYtIO`j3WJO-Yn}cJwkC!uwa3#j;B?O(ZTKqfwh~aslL*VTL23$Cd6i zTga1_wbvqA_t!5(T<7Wb=SR2aP2_M6&*2(i)KKGsq%i47W@i;q2T}c$r^rM`asyJv z1eZuXt!bsS_5t?VcknU$8KLdVtQJr)R+AdC8LB#sn3kYGRI1W9p%RdD)0K}0x73|$ zSc6>X>7<`+Zj2)ByeXy7^&fg*J18NBPOp6THO@XDra$T=Wa(SVog2G*6!Mv1c z<#OP<_?De*YioPn>3G)X8(y@_NwHknDX=Cg%}d^x%_xx)=W{TK#0Ik+_LMnL-t;6i z%$s?}WOtQlv(z~<1h>@5y!4$70dP`N3R)DZ@7%k*(8S(a8XNAKi{~C+M7m zNBVVToxHxg?cSIM6d80PKyLFn>IG`;Dc9`4`q0bLmj-ZD+PN!od9;Cxn$wZ+Ck`IU zMHWkZ`4{bK=>^!MP<2@oCf69-+cu1iBzF6Z|M3~lxxP6*1`6(uYkk~7`FeXC1QpeB z&4=%X+1~G<@3;9Ic(Q&yc@mQI#pdb#ZZ5($@s0a8@dUpZRJrXxDfNFV)PEuZtjbo>RNRG1#j-{^m!>MI;3Vv$y5uhZC?4 zgT+wOJ>J=tq1~K3A~S<~f?y`DSCd%2JBtH&oOE4wIR^6r)kg3*>wIr~z9~FUPhI@A zxvamw&r7m~y-xg_-xu5(JeGkjXd#{Pea0-{PA#<@5?G)OorK`tyf$JTMjM}sEoQGi zgQd}H8`+ZXjUC{po-#c6uhl)~SxlZ=@{rB0H9YtM86FUIN@@cDn_%X+P<<^Yyq+aK(_tH314F;BWksvM3D`hB;M@EE-#Wx6*Q@NL%FMyJ9= zufp(zKKBh6@Fz2|a|xM9i}{o6Vuc^iDK72f<5!;>iv#ZwOA7h}i>jKWn+N5++M0|< zeIaLOVcq3fd)W2j^_*mci|5>0`l_853D+M=%2;+H&N1q!0;?YvL$@8g-pI%39)EdK~BdY4$hu( zm1G2gFu6c4wy-VJB|?QcB4WUOY;1u?gJr=80cA(YEFzYzB^bpVZG#@B^&tBjd3GxEr^pS)XaO@WNA$iHeC#~KVsjIIhpsO&TS8bNn?_ra z)||zLcbu-Z;A9!)Xk?<8123Udu$zWt)GG+7lUE(+azTMNrv#>4 z1dkglBo0&EX_?C_hWl-Q!X!oGPzo~ApnGd3W1-+?1PwK~YPHx0ywXGV-r(0s;5wwqCd=>wQGB6B0(OHIRFY!idGkWxT{fJ&c7 z&%@`u7fMA@`v0)F2R`V<*sLLmwCh*gV)Cr3#-O|+pR&t&US0lvxm}2dZAREed_DI; z+2aBxwL_(ZkwlQaFvL*QtsS=XhEn#ARP~c!WH7*cO>n+b2d2x!U0 z>^TafhJCvd2_kdX9JeK(G3*BBMrG3mWd)f&K906Liy22z4dU7rQ(zs=psKmAVQY>3MInz z;G8oqGD_ved*XfGm+!AxykeMdvQ?W5>M`G3^_RR-Yzzi|Z+D?@TU&AuHO~%{f@^zS z0Zoq?%4K`C_{v>bT{DO~=J7(hUWkLMH@kt$TJ8m@`SU<8lP^u+&7ylK(61>q$w)m& zwx@F+V_Y_5zHTYN=fClV0}1urVL0{rk|#PwtZrfIMA*rp(iQ(ig{-VQvMOKTK5(rD zoVV%+Xs<_uVm_}HNe&9*h~Cvt?FgrHzDyBg4YE20rEeA>F9czB7R#97r9C6e-I*mJ zx;tdc{DJDihNm)4FI(J@WL_(%?K^@@wT5d_{MBD>8%RaL{u8?~XHHRnLphZkPGaj0 zpaxC(r;>xsHthlQ4d#%p00AUSt3p|HY7fnVb(Gbn9IJk1g9oJuaM2;JSKVh9{5!dc znMCjMU2p?G@{Hn!Vt$%#A5ANRsln)@(WTHyXZ%RyjQwueQcv~yDCt>_t=*MOeSsx1 zj2Vz8Ag<T2N1h!3s&e#QV^HBlX#yrY8X-Gmz(wLa@zOe9D?ze-dGi;Ezn>O)GTbaN#O+O3N%395s?nr!yvMIV7 z?;Eihvs|->@K6X6M6@qCq0HLts~6a6lc{x&`QB;H)J>O{UcB-72qWaq8! zfycoSWeKf684>>cZBZ9v`5QNM9eInZxI{sr(mTMz)%(5eh6aqf1~UwUJX)QlxW2ms zm1Xw=hXa`r+04tWFm1JvT7_`Q#noJaq_wRI)UN! zYl%o}m*KnUdd+{gGI^rhscHZGe3+lQ=XIPN;Bm>m+;S3j^?b{Fzm2FztKU90o19wK zEc9CQb?CkLM9UoCaR#0m;+P`E0iUq$iObp7?6G5Vculq-v>NN-wI1uCvmEPL`g`VV z2NLa|4Pbn40TQL0wxipjuof33oM5EO>lhvY%UmxsI&1|R1Pr$XGP_+FK(}NbQK0LZ zEm}xGVAx&VpHIcLCil}S>`gadN5Iv&@QV)<^f@g~8v?tIYUAm-R!QoGFO&PBjwT+0yr+P$68s4pS6zq}#)*8(Z52-&#$INT*?M zc+A|g@+X@rOJ)+P0hk+YWwxQ}31CZA%pZ#}7|Pt;iynJy1$Pu@M5PBdx+4`7%QrpZ z%5wKam+pl`=qU0!=wLDfInjyL1nynkH6O+UT|^u zmK1L-!rD^$C>afxs(e^C&+OQwWM zGXs%MU2nCAZlv*`{!4?5L_S`bR3JitFN_C$qo(bPAPuhET-VV2YL^{z_37 z(AdhvhA2P}*Rm zBaCE-j?fm1WavNB$~&u44(djb(}l@cG>cQ4SXzVA&O_m+^WRysB0UE47mp}-{(Aq& z>@+$egJ}nw_Xh1|Aq@=~#w<}$#T{60>SOLnkd#G((Pj)ZG@fAC;M z-3S&m|IZ()1e@T~tA;B;0N+1cs4Q!+EVR1aK?CffHu9ZcA z(|278KIrk&*%5|VU|fX3E>*v1GTh}2m(A>=q_J-!>X=U$&8sUngj7-X>-|XL!j4*0 z4kiter+iuyCRQ-c3jSghi*1y^YGn!cE|6PjTKu)VXJxK2D}-%<5f&>OF3nTdTB*0|7XaWiO)W4QJBe)8*!N$(FI{LhIJ%fqn3&qI2#$l@ z0df=(7MUrXYG6j znQ0pt0(uZ$lG|(Tu)xv(n;6~Dai@q2^s|Ky`T1+k6qx>r?@kO-B;($70XIM{eI3cC z7*u<7G+m}O+pd9cK84!M%9)9(=g%X4%^)(D9^H;bG{p z$mPC|_WRO}m-J)12=V(&FneU(_EUblwnsVnVr|5e(-hr4dy{zxJZl5g^S@jx^sDkO969wo#(kb;Ca_hshShR)g zMKgOlSZ3bR>>FmTmEA7m_H6(5wa`L#<@wdG5+@}}4ZfvCP^&Nm;;&DH^vyQuY+GyC zUlFt2M1FZnkPQYL1^39)9XH75NAK&p*mx`?Be1tVC!)W3%0zQ!tfz1x?Nz3_+}Bc| z&`P(^3(Y9dp*Y6AL59`?s!;wWq!S8sRsVcw6^nB59MpYe#UrJ|wcH>YT&)~&4A)+v zc}5(g84rp#>RdoWq*;8wtP(^eL!5hoN93_y=LSNJt?5=g>Avxbxt_*#(g|y8z2AfG zzVck~K^z;W-xTffI{7-;g4OYMBy;5ZTdr4QBC2-|Pp7+~M{tx7Gzyxm71Yd{@g27o z8mJTyF(0=S%3}eqJA!4e6f;$EE)`;;AK|1pF5wGBO|@`LlV&xER?q4I7EVHAnnX%Y zRR72{>)|bf;$o){TXPKOrNc{FvEZw|n)AxmE_&uJDc<{e(pDdoro$U5vEYj>e@I?b zyz(EEzw(b+9ty2R{%%@5e9a9AaPX9jInK#gR{5!Q|FJt9T}^(KnD_L6!daYfHIkWq zBSF3_SHUf!D8U&$h@d*$K{0&7(E}S)~W+m#cEj zju#}{ln*)Z@$m7)z>B|CHNjAYaUD0BIB}DJslK3ulh6A*>MlKzcibRe;lTir66!t- zxeUt~tk47*wjr%HA5m}zyQZ*EIOyjd2C6)XJVv6vB49F})Ze<6yKT zrC*Bq%{Xq!plNFpVeE*7Y*2ESdI}o~ku#HAZcU*R$x&*%7XWF11rO7&y#o{L(55S} zX;3ZJL0VT1460k1Ey-!Qz`}%3zB*dJXy8ZPd)lQi6gt!fH>~VJ9PyuNft$L~=14yYcR{76{4Kghgs>2S64C1S$4w1=c z}GfQdX8Zey&iLX>K2CNQRgX;z@4{| zz9i>!fF#mW!CBL@@g(w`0;^_k47VR{r{ccpC>OD5l0WsOsBJbdFQj-0+797ap$1-K zugblvJJX6Eg>1|#r~tFZ$AoQt)}OvH*yyasi7|GY%@aVItE~##88h{S)~x`!txAny z7V(6R5l;eMVP7SS8i(qka=1u3Po;POKImxx0F}kAJ{ROn9(foH&Mviv1*q^*QxGmM z@Z)t^Drf+?snG~OLHe>2SiANNCL)y%$_SnVJMn_CN>u_W^Y(Ti^oPJO&(&6<@+ZfJ z(Z?O8W>s!4>9TOdnO?6%w#Vc~Ja@DD{^W)ILG97<{vSPN$Ef&PzIP@ezhJGagX>2x zAfK+Qd$wL{yPSr7L^t>3ySxtL4vQ*$Tgwu<&K$9Vqo~p4_=#nwD2}?}X_r>pV49^+ z(*-=~YNy1c^*S{?U>VAUl>3t$ZAbWz5zyXwTnKvn#Ko(Cr_)Y5XTDaH;BP`I>a+K9 zj4?>kMLs1co!%qq9T=BZ$>`HVDkEgbdT*#i?yf^>T{P3o20-J`DKs%D7Nu!;Q}+tfXA2GXzOiY_ z(I=iAgd0N-pssyTXmIpR6fzQ4Ubdb}qGmg~=%Z13+rV^z)hk1FGT_zELCGvmKL_?O~< z0xsjNGmC; z?g}I~$IJ75@>)wd`97k0VY#Z!HpkJ=O?>)pmw!7?z|J~fk9W=2Z9d(p68I-N&0XHF zuY>!fj@}R-QBQlEz7a(Mn=;!)om)D!SFMBE4Jo@PnmrMG>>+jC527A~O~+^qv*3Go zJDCo&6Nen*72wAR8mZ$Bx^%ZYI50xc4t8*F#8(8tXnS{xHx0J7Q}}!KD`(bjV}j6j zZg9cMF5?cxd<`LlcU0nXQa zpPx|our)&hJ|4K$5NsZxE*?cTEkV=|WOL!Cy<_PYskR=2)I->*)EH{;U~W=5Og7D~ zgIq#$+rWX2$7V6poPfaCsf_kYXe6NVM1*voj_(_$&Tdcbx?Oi;26dSU2<*CAy)?~$ zfEj~{0luUYu5GGpNqnZ?WEeK3qLT%B{MT6wC-c3);bOpb5oGZw~!&W9y|qp!atBu zlTq0kk5TIKe2n%ZBM?LYojvB*?_mjtcG_ zY|YXC%=-lds7rG@oFh4Um=z7$gRI?vIAk^?i4r@hlWVm-OGUYTE=hc+>MoO|g<-@{&~PZ+op&Mo>`GI`F888gPRW2_ zcuygaiU5k6hl2~WB*+^H$RZ8JEfLnu`qbo^gwVJyy_4l&MjxLwdqjSq@QO0tmhxt& zE>x-1;8D`6V@+OAq!2a749AsE8So??XI~Z)QIdJya^OdJz-~zi1O66W9-qzBR66j) zt|sb(SF&DVke3GEgY6!k<8iaGe^k@UTzd1@9wfPJLGViTFLGoJ0)zEYbz=Z;pBF`h`*1oGiG9+0<21t`|1Be+pUN z5zOMX#m*eR5qlCI?4Vi{eC1oi6GBoi*w*}n0=#JB9i_K%j6~jtN~!Sc-uO0BL%GGp zuFATAkw4y3z6wm`mKid`93tT>b+ujf(pDQ<_G^m-6?nbyCkcXmhjsv$=#SOI#AdOs zQwik!Y_AGPJ>2AGZ>{@pPP{~+=<}RJ+Luuj;&fd_g&C^3;on_0)Y$_9u;!#xqp&rFnz1LrHM7-)I=ioNf2w&I;w@c-smqv5%MWNu0k2VFQ!J8Flbono zP`p+2<^DWI=1M7th4S&Z8Bj}_f|d3{uoqN*!%c8&<=hn|a=jcY27fBmcq(2jChk=0 z3?e#5#O0|^Z;#%oqsz=~JPoZSDOg`x0pmsKM?;1h_@%rX2rlFAHAYT|KNcvkD>e(a zP!a2d(QKtm^+wXu6Aytgc-V$vBm1COynbhO=S|oB4z$OqseMya;7Ym@C_+#=Q}d}h zT)p^cWslS_ndGNNrQ}umB-1lt-j$tFKC3t-KigSq4jyPM%@+$FQ@+vkD$AF)IM?T` zleH~Pvh+aS-^9kQ66`}rA3rfH#0_(tHaj>0W(Jts|E`H)2gB3P{2>Q(^ z=fw+%>qBca(`i0$X)Mry%9k5cQ+uNUyHv-~geTf&t>|s5u>RY+`!ryk*2fbvg2c02 zr2(Fdo1v30&ct~!qoM#b!Lz?{ba4B9H#|olW?`(t?f4?{Q3a?N$e3Af{!&++V46Tf zwO{T$32D7ez}B$T@%Nf7H!G$)Lm)+MQ2P0kXJ5GN5V?ZpJ~Ti+-;?|c+R+^i>!6ISh>}nE6SO}@ zdgr0-OQ3fh&pwpqPL2wr%O+OYP3jj&pFBH!-@*)1_GdlsDhu7c8*(z9RNec^w77Yu z`i~*YlymU`Yhg`z^yZ+WbTH`ymTvOt%|OO9*|8Ye@~^HmN7%)2^s=T^Pq7b5hY|p9 zfdsRIxtXbZ5^suVJxgVJsI$2no^I8pgN)jv^Ue{Iht=J@U~SLBz+7GNVA?~<{}zZlU^(i3H?ke$ z4g2sgeGW`=)s@wuD{CT)3ky455j|jbaG=(%JO~CbQ&|!uwcdmg!Mfv+z6s<~jb`o} z0?*o`npp@d1X~VTRF!9Dl%d{BQqCH_5kbf*;>{kuo#7VRf7s^u&THhSa6;iKaoOiZ zF`z_d3Z2W8nTjoBMx$>(d~gUz@o zHxp;2&pOGZ9USxm$Fbu^uvDpiIoX$E-58rQfDgUU8KekTa=x}-@Ut*CmHGnhT|r0 zNwTn-Mi-E?0ZfyYdbp@CBC8EU(^7PnupN7M;MP!@-Wz7sbHZ60m1>G;Vv*)xUL=}y zed{1|pl?fzK8$jb`K~C)aG^HXsz?ae-Z3ufIEH0XL0*BQXGu!vPBy*s%Kp}=WTDrW zX1@l3d?@ZG{A5oaHbJ9Q-ye4dI(9swJaGRs%iiJ;tRf!2pCgC=rpdyWm(BS1f54}4 zwp_6-%`;W9@J>8h0lph3u(j4*cWFqQJB@Rz5hj_D?aQVcLsEVsZHiE%IwRG%jwv-| zvyD`@(RWID&g$-J|5G=>gzw3pTswBVFSC!?_`d6OI;zd9+l%M11Z)$do7BdW;3&8j zaaPZEriqOa=kD9zuE%Wg5RJg)yGM(TWy!0vsFPh-NJ%#Kdlw0Q+dOV;IkY;26)G5c zKDZjA5(eM4?e;HzRAf)Z&AystPHRTHWBd;skMW;yydtd8@B@)2 zZJoS7dG-5)c(D*nMUnw}a6EK3da3IxV9d~0fA#e-ZJpVqwG3(!<*$Ktm$C)WV7{$? z)#kd-2#LAB+}*FsY{PzgE2NyV4Mx@mF$QKA{+0CXJR8VJme?iAwyi5}hJ zNcV`5BFnnh2b9SXI2X<5lGpQu0iDSnMs&Z;x8?W~pje9s#QVkQ>E8F_Uja}yDxWyp zlc-k(-TwI!N&M72!PFRCoiW#M<=F*O(7Ly!cOB*g(br*9ffdn?157a2f{G%!QN6U9 zmF!w%haw+r87LofHRO& zCZ6s2tL0#vKvRI=*#+Sxgnk5xpgLgfo|re<7ZN7&>^ujOG3ZVpcgK6IU`F=!H*k7? zIESv5gyu+0gj&pP{lJnTz8W?CflF{2@)I|y5}0Cbu+uOyy|P(b%2ApxW;)G5TfaxM zE{>@-lH#1w@&+3=4(AAGOk;vcgW@d+TfXZ&g%T|Wg`A% z7Q!nQ+cY2=SyEnIW|Lv1o zJ#!h`E6bzZA#uZ5Un|cA_>1Gvv zIcTjy%${?}-bEPE4Xw(&_ixip#P0#N&F)+Xy@K(53K9vmi3X14LLe?qx=}Q0$Yduv zw{Ys5!?BQ8<3MWe+HhYKL@F0erB>O!J;`U-)Fmv8?O$zRVEaNaTne-#{2lfdwhh;n z*(dNuY*4*vc4dL(#K8;5@Ma?Y&G1eIdjYZ&)qS5}W5ZA_3qrX}CxI0(EwP^>%7mei zjEpAJG?s>27}yC+^4i#yBY!F~`k}^`!mN$3^YZ_QQ7mXd5bdkUk{-zsMaJdBFB5TO zk)IAdi*>N0XoN|jEg?*m4MqA&_Rpc$3Q?F_)lbD1@|_t~vpyiS&_d3+9xA|SHR`A~ z(nuQ_mGRF0sAdcHJL70l&u$`*hsZM&+6-4`wN9A5HQsHV>!@;ZH!J>K$#&OD3Y;jN zyLzWKkTg`Of6-qf%URoggck#X$&&s~S>md28N3GtpHtRSUK3K3`iyoRDQzH%4d?G= zaEe1Sxq~4dUcgzo+C#ykWgkbrF@bSuf$-@L@g-$LpgAt9TM%VA0Y5B$CF8XGZEdwKI)+(tPAzpP0CGAoQBBeVAn->8uo>uL40=?h6)?ly3V6dD3P z-P@;yd8t|r86DKm8q*)7Mq=D^`zegaOE`XW4mhZRO2Uq-d0?=%7y1-j4|8S0sv%XR zO-^EfkWIzru9(v?P$`0nJ$Wz9_>G2S+r=`mZ8-@6(v10;1!gLHCATMw^H$i-wT3&6 zMZ4W8^u!$9?#}c1dy=%5p5PEK105;*{uxgp<-##2Rf*lAwTZzui;14X6fGgSA~{VZ zP&|9*;`56DE0_^)HH(#oZ9CSS9vm){vJ5Iy{S$5@>mis;OeTjVCn8?dwiRyknXjZH3D`%|&smE<91OMi*pd9nvM z%J#U4A4yjTWyu>KXF9&(j$f(K%P=-M6{+JT+FV!(m=&keCu|a{s5qu;0~4&s@o=+3 z)F@&&9PPwgfyArsSXb-D1~NC985G#3F9CIL0CBk2ajzc{bnnQF@i?9>s~B1c^Q|06;E|P!1hGy6;rp)Gw@c|+cauJZ_(L> zKCFtCR2AUzkv+kDjzYgXSD$uCTgarbnLu@Q^|;D@4)u;ri&!99Gj5v6P}cAvYXS*F z)@~gVFmy_TP}D?6&9B;rM4uQwhlDa3 z1_xZe-^R?@?&B5FLHf4e7 z{&IPFxE(ZSnfS)!?f!(%=d%U>j|%jE7%vku+y7#`O#gk1m+2ofUZ(%Rc$xkQgQrj}HzdEA49K51_93=gM;=~-nRv2olrEM=-vb~N z{_*0KXjnlDqr;X1KInsHYYP-Yf6dnY1^9ocdxs!RfVF9~ZA^Dh+wPvW@wRQ-wr$(C zjcMDqZQHi){O8_?|1Qqr+kT5@RTULcn|dm0$271#epaO&Dqb| zRHpk;(o~g}v5Ej6cy0iE(@Z&TInDEB?+Q<;%eb}lNK8PLx6I|}MSHa(K=j{e_7JV= zXc?_)m_RC3Q1=8X$i@*2<-!q6$hOsK-2|%B>=BH{Qp5be5t5Z7n1VA0aDLaefQWW2 ze<1B@Kh=K)|F7)-RkLI(+fWePdVMYZ9FN!{)v~WpPaWEkFUB(|j!P%Zh zw(A8&asu?Gx2f6JQ695^I8&6U{umpK2XrOF73bmXgUfi4>*BdV>?H+3>oWtKfA329 z=-4=Z1%oGtE3tf-xKgU4>?HJ&z8z@FY+h)Acsln3lT^ATe^sLJVbucd6KZ3SU4dT8 zJ#?VLB!{B*44)Y#fN>p%7mE5ZW9U{0%}Wm?4u!#+dO13tJus;3crb}#+KAORoE}lE zr{%lh;CBMimqt*|;yM~pTE_4Mcc_4n()ZqBpM|n+-nZGyp2{i7{^o^6TwxFEYm95V zN3?i1uGbEa`;&Svb$3GEItnL|C<1-#=ux=&B2}S3_|551j9DSTsVr(oqcz2IW>!+L zed_vVShB+@>gGPefkrMd)&bN=P)#tAWL28op6j zfjDggb3M+A_*=NGXrkJh*=HzoS?{DJ)Wj9BR>vT@(rgg7oILIp67f{Hb5JtNvu1m1 z0=xRqjv`>Vf4AP$`qQMh2;ogr`6CIz3M{%;|L4nFrRpWj>ABPXvgbHB2WmLA=1V^F zneK&A(sfDF-QEqK5pWooq5%q$?Sb2_E(bq1vR%-LgVJu-8W^_gJKBR#KquBtSUTdl zC%D}nD(YgqH-TcNQHa`N3&u12>~+Pe@E+l{+gW<=o;#*+>b2dy(GeDx`zshu7_ zZd0_XX>)hXL>V*O5P{t>WSeI$-S!F2qJN8<?C z(PEV9)$=^8x+>!0>>j))OR6`?ramSOb+Fco>cioc7{`YoA+z&;ZnVzUJQrwhLljpP z$?-L@CU9yk1b;quOcxSF)P&}i6V`spH0B8|CV%FTgJ=2fITnSsY1&U8D#Ek0jXY~I zMl*!jd^BW@%F-7k&%&8$Jq{K;3~C}bb86*$7-nA1p$D?55`W~Eg0`ub1D$>H7OK9# z;VcZ6I?GbhQX`Z1b!hTcuBv-%f_>&}brmF`s@u@2sRCa{BEMU0fOD|4&psN#5YXit zmx^L}D>8a%U6(H4fN?dxzAzWT8aE?(YjS|BFW~G`bAVC+`=w8V!IsC53LY?5Q}^xc zT+}b`+@R8%$`mb7nm*}!3&i*&&fhixh>;oyyJ&~5sN_4_TDmN-A~K$)B$Ey7Vtx0IJU?h62_Qp%F)Fv~R<{*y zhv?qSl#a5ceB5!XdhUPNK7ST~24+Cm?tz1Kzt=I)eP@#+c|%>TUR++eIyrlMO6L&p ze{glUedf$U7I+6XrhNSy@c!$K<3FADKY!QQng4ItBQxXwKF*8rf6RF?{uj=R@qfg5 zsY^y~i2c9uBp9+Qg}Qoh^;VD|o}(suh!fka&_UjDYl7e3DovMlMy^f!=}3l>7E2!& z?;6%EA=e}4o+pP;e%h0(+`c+r&($BMN6VC>x~^YepUy}2xb3I=Sb*5ZV+1~)99~!5 z?Px>759jWvIVcUMj_YrC28p2&K;1WA-8cX5)~X8Uzb6*7fsb zsOck+sidtA!c1txQo)%S1ZOkV2~cLL<)=ygm4hNv8TCY=8Z2QEK%olKGYIa*R7gt< zN0pizgb}ed00+%f!C$-}W)MnE@vJ|`bz6|z=mVcec$eYZD{)|}5XqhsN`h1H7;^PWm z7GEW_bZMm0%WhsuSRpOhYtWHLDA)wVF?=aJ*bbp{WnsSpPzte>_8w{IBVZ3lE|Zc~ zw((73=0?Ir0uFL@Waw}9Xf_ar2*&inEjY@neFie~5#`2%LRGcE0k(bgBoTO;_mYg>n0FgNPIYSGC56T~qc0GCI zt(=CV{P~n)Yf+z3IB7(sgSI1p0{1@62xkOq3!QpuL-iQp5Pdk4>J0lXr`88WSeM=% zyGsXd3d2BX3K>;1hnBp;zgx6$z3UIg-V{D)+ZZsS1&m?iZHxQCCAQENNZD!<9CFT~ z45q;^US~l4KIpcCDU3xfP^}Rr!{(+w7Bxl`hkpz=pTp_`VAs7WYIquLKKJ+bkcsz# zZ>E=KbEMbrQY@yFXAW8`%181pTYiDQd5EAH%8_*eAP)arG#1L4XorDRXrx})c?rWI zoNFz_==b~%q_^Q_n~=Y}i3Jh-E5a}>!(+hp6sD$`nab{JjH|ocVT!lX0*5|ME#fYt znv9fbDf~FBxhjp|Y`k!6Y{dF@r{iPhYAIen2E&Tj9rE>S&S;af^lQ>Hv9mrc>)nMm zFspLSoETZ5-Fw1HGHBx^FL&($g9E})vE>BYmdq1hIOq1BmAm@VC<`~X!O;8%xb^#a ze!i`72MFxxiBIyR|2trE&y$5#_*x;`(E@-raFrw6MigO9)%G3Wn2WU25?%BMWfNW0 z;$Nsq<&?IFo7$>S0UN2MK6n_`h}n%uN6L z&_2`u80|Ct7qrjxKSBFd>YA0W;`sM3 zA5&tMmRHGa#o-*yD)XD&ZDx%OnpoXdJn#^?d|ZQ*11E@?x!Z8Q)|0H@pV-&Fyg$u% zo$!Lp_7j1o9nPRg-8{Y+Jl&L*gdf)3RcmV+4w^fKk@0`e- z?;1Ir?i$Aon+4IeCmdza-LO5Ka{kYXrXEUJ8ZnN4BC1SJoJvjr)798iSypT+>LJoKE4HbH0=+3DY6=5C`k6xS@HNJT8|Vk4`3vV7JUANr#JUv1& zI~7fMlAy8ME;wanCjJ2;smG%LS-GKBc?AZfCU4S9v%>~{bLXLU{NWs^KkUO|QAPUWXvsl@nSf;V_ZJbx2*4VI~E`E&k2j&tl?1y5^+|x%T zawXQDJd_|Nev}rrWs!+LxWs!=?xr}6F~{_Yk)zu2B~ABj%ssh9Z(m)F%Z%fd^K#w` z8P;bOnjUd377W_SB~PDi%&u8QZ3lskXk!Z%%vrx038sEs#Y5xGfyt!U#ydnNY9>j| zPo_g5xu_*qn9gWVhT;V;`Z|$|=@gHGa-xcBUWn2y2~{Q>7BCc~S0>}ejKR5(s_Us0XZk-vr+qNuPM{%fCV#7`8LCcXRI;|?(n_|Q zjr^%dh@lgI*20o@iuGp$JFuag6J$KH)VD*C2mvFl$r7N{!Np_Gvz|DBX-u-)+cS{A zFkw+frJ7xmQ^tT*I0iK9ISN{q7&EKzE&tjrpH@gx(zD5ei$Y99{w2rdq7l>)j!3gg z;=Hc<zVhqEQ%&3|L zBFr7|=sER35$1H#R8S>m2t5rHEqe^Ix|CL7w#Lj6RU@QEeV){tyH+7Z=CS4E!Kb}& ztmR4ypG;cI@16y6ND(`_7UxUm=Oh8+6QoMjl{>p82zK3RS5STipDR|WIM4~E?l!7b`*r6fWmXK>= zd3YZu@%Cc&lmV)m;g#=e#RX6o{<@|+^NL`QT@nP2X&Ii=1eiIHI!N_EoZZLN1kT*k z(O>QBMX}sAdRLfkgr)NaIKmS@70q6bn7`4bZ0EEon2W;_Rc6_d4)s7%m-Wy6O7j7x z8Wi3kpQc-7rmkJIQsfO(T@Zyo?0G{mVN;!p+V^Y7`*&k)H)ArCw=A2IrS0QO#t(Up z`N8LpF~+F9+7Ho6ptOrW{Y+ zGXQGzeYSSuq!=6FjE9M@*W^Tx{z6%=X-L)OA(@W7h39rR5n+F3dA5Y#2QVJjuhAs#D=lYygZ&-RbsZl|?+=P+*WKUR#ydmfD~oBUZKW2~fQfDiiuqsslzEwt0TmW~_mT@7B=f3ArL)3q zzCFt0r)U>XFv_)&&wmUcUqvk5Exd)iJ-tAe5-$$HT9lXQyZ9YRXhIUd1DpEn=lj7E zY-l(eZC41F4Ps2-I`V8s_7l-2c3{_?1ts6>9?MkWRCdPiFgaJRr&1f#Yt8Yy%G}W) zgw?}jpR$WlQT}Rx|Mj3zZcUFP>t>~tcT}e!;q@t9)V+P-{`SE)d*$Cf?wi2w=VjwL z|EU-qz#s6O?ZW1Px1HJPa%F}4_d3$){dM^lU&a^lhV=)eUDu=dzjgNibhQ6;c2#Hl|Ky1Z@A2z$ws)m|Hm+JJ5+(={p$<85`Of z8UKGX7zmgc*jbr*cwiiz9E|m?VcfE=ykWh5FMZu`IGUK4n&z%`LX$MOBi{??FaR5a zii;7D5JCeJ`BSe=fhJf@9`g&hQ&503o6SLm1)x!CR8lsDRUy8kTeOWn0WZGa3~1an zKg(AAq&#bo418rXHLQ_}U(`FE4H9=q?QP||d^ z_wC$9U0MEe(?V`Mh0r!!HQOeB7o4p!Ru)%Uk%ACzt=k|g_|329TU0&Ir5#A)S3wuu zDlhBLQ(9F17qPn<=8i2M4L0IyL9Gs z+zY+esqgGCQP(jPT^Pg|Mdl=0`k-t3T}dpK?$DsU*C!GNHFTQ80%ngI1}kq$ip&IN|Xc+HXILWsu*JBX{`*x0Qf zC~tgQk&`(arwl3qU;a#S)b)SyOQSQydt52;bDT=S z2oWQL^j<0Q-cUVJbOnfh#|=gtZKxubf}wY~ULd|{bOHbt4{_Y}G3#N^H_m7E&|fQo z&v(wR&t}0PP>qOFO*JT z#&JFvGj2%Ovpm(n%kQvq4k3qyN@-KEau@<%6rW`jw?P9G+I5I_;zK#WD+R^lv8fzP z^P<{+Tml*W#v!S@#_K9oCsOYj`s;!9KY_#(AYO}tTx(u#x1t`wk0g`*Z_o}e8qgMx z2D-+JXNy$ru&>b%17RJ?_^(c|g93NgAeg6(k9z_KZ}h}RPu!B6_cw>I`hio!1o%0Ihn{c= z>C`7v*qlrpmQrby?vrARuT^HI*WnpptbdL_!9(x z6VRZe_Icz{_HWE+*W#N}!Rs2SbLr6Q{nel+P~EE6BPcpgDW)U9Yts|KyHkzb!AS5v zsJ|=^2^ui9Wv{GQ)Mi(*f8yR_Ts44_;CriA<&^7_HrPZqWsOayu^qAw!mDCMrT+p;C2zf$_<)CdxJj3*1s zyZN8Y)05BQ_lJuOnnQ)R;qYUF$pdAgx*65xE(i^^GA{6{WV1*+%n*VhYd%|$B;N;9 za`1CVzNe0VK&3%dI~Ug+UGK8m5B7==5{MZD#gP~}E(9AWOtLw^3y`0nw+~irvepaQ zEf#2eP8yxzg;&C7V?~ti2Wivc9~S7~ZGJN7x)z7wd>jIu8V@bKyn6PvL{ngLA4&-E zaCq^nnTv@heWKP4uAw(k2+J^IBGrWiCk6>w3P^cHe9gyyF|plDyw`5RZy$8BfizfKE$JqnLdv3B+|{L9!hTGwR2m^p61YR zOwVTP0|s10F5$PZ$rR>eC*%AK4@6OPbKUgzFT=fPOeAE0nqXzL@0jZQz>xP7O9R(! zhZReOfH( zd`%tNy+^Jw7h+_xUZ>Mb?L}Tb?_o!nGR@sYh4sE?{ImpSZBmCwh~p6%Fa)C%3I=@6 z2AQsgIf+$2&Y7+Vj|jDB9LKQZCa5#uD1wsIKBBPU)CqzdYeEkFL?9g|Qrn09`=gNQ z?1X+tB@9ifOW#t#iWCk$(tP5P&HY$#(!myUB03YIyV%oKP8`>F2x#RW*k_5@H&|edebsa=1xPEcnEgSLzQslhW@iPJbI8AFiZ+*Ms-Pe?^iTnoLP@VSb zzXr_VEM28xJh~|`+(1{EY)6mI=Nx%0|bdi_ir1=%q-ZTTj%6>wXg`!F}v9rxA^QQrhL#1o)=g zS6X(bnZ&_?u&0w?8W|+?ZA5{Y1^SsKa0GCmeERLA=L24|IaEsuz;~F$O%kn=8XJLO z>g3R!l;qhKJ8g?*rrPO^B@WYU*ix`FDCjy$C%^@|wJ4RwqJLF&1k1d+=vQ`%Z(yGCxnX-2z_Z%DhQ;~%=h zB1Rx$U9(-YYzci0C%@5LGwdO~`FTZoh69Lj;vsj5cMQMCT*GjVdnj>|@Y!&Wa!_L= zL=R1;OfUxeK_h>Gk#jjS!}5B3n|v-A{_&vFtn$DP7~*t*{PJ<|!)aA09dg8CYi9hB zlk=ZI(g`q-i1IdzXBxL~Q4{Y>T!+z@?{D4doa>zD+L&B{2xRA($D8>CeDi${zpmYR zRq=hfiS)*D+*(O_Z{`EKP#x#TUM5Udbk{%TeUqnkoW-xU+%_D2+r0%B3akH?qkKP_ z?C3pZXYz3QgudS;0NC~xI`DfPdAnbDT)#fi%dM|~9v~ir1?Cu5sMYD$q(u5mkoREq z(EjSyu1U28;AWEMhOHDHsn`cvrBtD9|F(ccMD2r(Vl`q41_$As@Gi+Ov%!S9YL>s- z60(LD2&tMD5gZ0qifPrjbqK|~ukm9qVRs0Tl7j^e$yf4xkHA5UT>xDAvmF3G~5NXzJ zw>z7M4zor${~~P123LyQQEM0Ve``RSZDB6ZHEg2 z-|9h8v8=|tX!DeR3w#BhcfnEn27oznNXOCoN?ql_UOrO{rkOcyDdM190f%Cz2MY?6uTBplu%d?6H0r~)Ld!%IUY{b`3;Jc%u%9$)pSwoe zOF~pGj^oam&_2RMRn<_Xbro*Py6&Y%K*$lFp_Fc|)ea>vJ%)*={`8sm1#f~tpG52& zmu%Qe7E*6WF}P;MEjYc}{MI&AUuS;g&FfqZcz&)U5ew-+7=LxY-qrhp4~~zt^!;RC zxgYcQSGL4!BX1U&@ef(sJuqkAJVJzZ4q6Si%hYR5s|px0=oS&0>u*i7M~c^SOZvq` zOPiud)_dbdNM@pClQbpu3Jo1+(jQGaCZRhSVg?(7$Hp_R-vGma)=wHnftrazHmIh6 zY!^XMG#n)b}rf~j}qWoOCc4-V#uToSS(;4#$6RiGrDaw^mXPg}<*OSo; z^9a)zb6A7EWtLEmu>x0Y3|P%zblvNcRs4Q&^UY+l-7qu1>5+ClK&Wdsspp2!bBS(w z>md$oTy2^=%f(SB`eczf5YQHyXd=3^Uo0)QTZzTy?BshiYh#MJ5m1l8h5v{Wiq<+D zN?n_(A<;hzqBWi>bqcFlv}zBP&?j?%>PI~pr}o$da)(~KW+c@>MBsXKZl5OU9~(*N zYBg&&^hA%w%WFRUbtL&RQ>Js*yPaUWM3%(ceVHA*TvPe}4@r8yor#jmc5|4H-7NFk z>6#qNmp){#LM{M>u~)^*A&sXsd}!<+efr@pUrITkOG!V+Zv{cO{#)&{V1@PC3(e&! zA7c#1_2xJOol9bYs)^S_+UH=kX6L!;{70Fn#s0RLoa;%}7GS>zLCI{T?rn06LP;r$ z=R~_P+hJdRQe`R!^m4vx*G=W{nq$WSnFpIsk}!Hv{spoXrPIO2wO`}2Xn*ZkF!KaZDG)%eP>&BnJPx=~ zpo||#YL8P@z$+RFH6knKuGVNDu9nS*MJUwqgqAa;(m@Cht6i`mey~}Ib(?H8id8+K zS-c>KL_A?6U(6m^tN;W3?qQHr0L9|BM^Fa|_7wAPQhpFt1M-)V7yH+>OvsDr9P-d5 z4O)42Uk-R%C0mrgfpfo!r{pW&5+`|?=HyrA-Lm+s0mO-ts%6%ps~n;5Hfc0jV-i;Y z1lnQQT?2!&1uac0kmeEq94v_6A5kJ9hlo{sl3SClJQ-7BB{qidE29kb3SyNY@*Mc2EOzX?Mv zPdr}$pcM0S&vRSyK_52ndC8qBjrPy2M8th1UvXi_EyaqL>JNufW#8N6tCzh@KAg-x zC{<`g!R_sf_H$v$;uZd={8epx%>H3vQDKpwP|njB zpad2OFjH((UIuDK%_k>#^)-=(`Y-mWp2Z5fDNf)qLm@SKxS3z_R-Psi#{~k|g&xEn zh2VTM)B0@QKO?OP-!W_Ivv`Bk(w0LccwqrB@vv>M~#3vjZXbnP{pv zyE1KJCtVzz0e4g9zHo0uJ*Zv`Sl%N|a*{25R+dN@8VnhfR+zv>A$bzH)@|U3p?_F` z{xp+V?z3Aks@&@F;m0=+tA9r=GEz9_M;7XjPyjIhu-2(z40Ph=L7Eu*n_h>f;|@em zNBc>D)J5Ka5Evw>)^y%j7r$Ukb1o~s=33r-gv1wjht@~*SE_uz&hFAOSlR7FEQ7v~ zsnDw{>3YkqQhI@PE1hAPBGxSi>C>GbT9PS2GH$v3HpfgqD}(iVO~jv*GA%a%vWjwY z9XtV>SD!uz1SidS2pJbwBnrwdceedUcW|~EEMGR1y67!tEjyxnxG`qo>m;g`q^ueuT@(nFGpdjvBY zXIaS;kc`GL0k2Y*QWGIOa34%J=m$2+?HHwRZdL@cNfQWRg_!0`rvmn)>q<+x1bg)a z>%InbcrMoHs-W*O-55Zt?oY>76YX`rGd*ReE`D|Co}tw9ob|cxzqiN`dOg7nmN)o? zTf1dd%E>T|jgn!J5Mk)+S~ryVFR0B=q6zu_MO*dGT+qA8wq(G(8YTHlj$Ks(?*i+{ zAViX>*K+p^goW3zFKih!f${DZvkb3KUacy3iM0_m^p{2qWKG*x`S9w0iHRI?L#Rf5XKBAT}SvnJT@F19nOFxRZ zn3Pml=mdLkq%#b3IJADgRx79t$sBo`3?xJ9U_!!e_p0z6HVPZb2st@sJX2qM*kAc@ zap*DM7ZGOvh%b=K5jK&ks0>`=$o=vi#oGa*oUeZHW|p7dB+P%5cMF{ZpA0}I$22yehqjl{va!-?9K$KSW%uG2Qg;dmy|u^GP1rn9OTw~@V5KtR zy0jY6w1yxgOqNipE(qaJqA+0WaJ$~WJ8;ruz~TRS6NIcBu&l3VY*TY?Yb6u#>QmoS zM=Fn(jFvnqE-5}Pu9G~FDzBXw<_*V zJuSFTGc;{^AFAGk)5&Dcwf(gz(UU#bzT09mB#bWbid&2PB`HmTY@F|*Dq!&YE(n{u zj&-K!d{uZaIuWH1M=Zi#jFQ2GQZPv&EAi??#t%bAu66QP$k#qNJXc_oo`nbhL?8hm z9ei!@d{w6AHg&K@3h@&F1dRR|Q=gwbR6@)_9M`5TV-lh<~ zoqKkqh7mpQJ>Ms#0U$ss`4c0h+msfp@ryA>EF%hNp%{~h_BktYO2pnvbd^b}Q9X;K zgI)IS8APzd(+xkhX08RqtGL$RHTmVj!Bro~kZJ)3-JULM-dJe9ZP1A8zBzA&^E%nt z!gc>+`D|oXTrIY|-`sh-^~Wz_T|0-}Lb3)(`KJlZ#>J?0%kdr?lsj1*d3*oCD@R%?8a{#tgT7`{47jr&XSRM$cX^)erFy8auvPS+REp%pGvu~=U|#A|?m`gXcaVvh)_hv6=qD5{l?Oxrz0M3mXp?BH zPa+QLuIv?!2}KL#2-sy)vYQ1-B_1?5nq(y$L`tv}jF$-Ks1KrMd|68ckOc*#SW`^K z|3)@JJxDB{i}>4bt%hj;n~p1BK{tCYK%fvcT{6)7fFTS%TAZnXP~^8q7QJp1tRM?_ zIG=C9uFm=6`xo%(;QH}-!`8@^Quoa96nz5W+tJqGu@cSn!1j^)C_6*L{_h<687IsF zhHe;}s(QZ==CZpfOpdJZ={6bZjtEZXh1~H*vZF*~5D;o&fLJ=H@NmaL3W?ae8E#B-A6Q3o?d$nbXdaW9bNIDa=N@egc5s_Fes!%-h zu<&t4s~A;+g#cQ*yuK0%3{xiiu20ofGuj`!8XKUc~V?f!%!uen3Qoum;oQ_2!#if9&_v z3vC6;EB%vr*cG8@JmNr#KO{@t3L@Eo-H8*=WnylH?DeMjM-BupH>i(AKem>zS4OWP zLLzg_KnXK}q72h`+IO0fosMCKQ0$h_s!9>kw%#vCW6)T4XzO2QLqmLsOC(IlQ@KOM zrrH>s8rUCV)~kDdgNmlSMhwalEF~bxZKon!fw{C& z=ne23_fiX9N>L|w-~#^aGjh~3Y|4ceooZ!hsaPo(*m9sYyI5hWX1}nb;T;0Yv7Ps9 zx+PDM^+)v9MVjwhpfv}pLIBa4M^_~uz|S{ih_|}v??aG>BeRAjreh8JUc|P{VfXAj zn5B2+Ax7>H-SIth^n$d5Ltb_Hayk*2_KEr8*Ly4Dt`8ewA zeoGJ`+nIKQZczw`6|A%pP7)*%jG<)fXH*1zhE4IFAhkn6CXwM347(YMIKU*+<_u)W z`{AQ!DI9@0El3wr3)Js?Ri*?Lo1Nya;%zH>Wqg zzczT?k!pH+e0ThXjWrjmSMWW(;ElAqPIq{(JTE7#8`kq4V&0 z+A_mapTDuAV88c`I&zVy(s{`7cH;fQgX(%YE9q+c7qCPGM={>({nDM2)#~}R&L-*L zn2?~8!TR)ADBXg$>HQHgytoKNivmdylYR%bLgayFniQQjS|9)Gmd~RZp2sXtKdt-s zU?vz7<3xbGN$KXTRsp0V8L&s%WFrg=tvMga$OzFij$wYNBf3C9saS)IR-P%rO8efb zsng#-9stu?aaKbTbd#{e{iyN~E1P<*+)S#P;Kz=oTIKDjtCMS{O*-F9&y2`lwf+qW zb~s~0$Q>-0r3v97zi*c*-8k9)*$B#{KHPEH@T60rV)v=fGS&y#62U9PHiFt7H79hy zY4&}*-{D>J)Q{Lf@%DKKN*R=T(Jp0-*gjMH37 zod(Rza3}M&5(OI}vg)CdFg(?I0IhUMwNl-ju@2+wpL8i#!+mL?W4gZzsE7`0)rFi` z$PwP8k`PbiWQoOhy0m^+jLIP;K_pwk5WkCeWF;* zp#-iaLEKe<-thfFp3SZ{Q{&$S1BQ;v4c4lMK?QCEQV{xRgC&m%%+`Q5scV4hnSgE+{Y`Hb2iDADBp?tM&&P++Uqk@hb@JF?3y&-f4MpJ~ zvCD#_k|_}YoaK-4Duz5pzDIIx;?$52myAh(Z|B?^Z6}9wQB+%+`V+|bs;fF@ z9tFV*!l1*0-^*S8OB4~<8)p4D0~k%h%s3F`Hz{punEe5_!6}HSdeBG+aKjo}_%C@u z4xV-365#?|3JpfiEaoD-6$CLsHI6x-{Qx|rC6pMX-q3CVHyR&D#tr9wayyAroQhL~ z*vxQ`R=6X?A^2x>No1q?ENxso<_7oat~RMDLd#NOokX1e-MsSBfiwNk#Crd%UH!CEB>euVHC5k&e{VrmF4@DT z8jIwyRXxh=Kl=^7^1L`))JE{#tai0+iW`XA5by3eON#&eYqX&AMfSt#J@$!~S7~4; zrJt8jDi6?#gCj-_L=+k+hC)l~ili+i`UIXnG|Y`D`idDmWd+TFJ!>uwR-iY%9=s;J zEn^xx7%sbpWj60k^inx!tQ@EG^*=e%z+PH7N zzZRWL&Zy@!@UWdFy(JwbJuMcsOxbE~H+OTNfj&T{ApXUd8qf1LQL`4Ql(Z*qnj`?F z3Qr`rwe`Kdw8s6|?tOmU{2r?Dc5u8y+{pFzlos53$^1D9t*XSbpLdmTbu7nr{nFQ) z`0_n=j3t#-sww+vavNJC*8MRu)*(cr%Np3YUi-4c8Lfpd61!lkBN*_mW*-o$<^O#X zzj9kCzwjEKGkbm)IS*$qt{{|UB;N3o1p=n+_WV=)ojyKo@4dIj;Ic*ir@;Upw|5c{ zjj&jRs~!epPk6$Qce%$^_fq(A_qF*|SF*mAmeEGce5(PzQN$odI^VBNk(hl9#v~uhZzY3Ox>mJ$0Wex0}4(L{x^{%#J zYEBDUZB-*qF(Ra;WmRPz8op!S#BQdpAOkBj_L5d`9xVv3bI76`_LHA+adVvOe_TD=S$(p65?DT5frUY|ttyv}$-G;NzS)Hyqn4oy{W`;p69-v8 z%!r}%iIm;V3NvWc3IZ<$6S#6%79&WNiIZ$kL#`F8Vi&Sbie1#bgwpf&5iWn1!Z~TZLUXd$a2rK&WA_{XeVn&rP)R?^5R8-`*`Qp%a~UuBea)1mjB%bV|~V{64tKO~OG&_;g4t){N>*06kqNb{%iRd%zz^R0!~L&>|V zqj6kO_NNc53Gox5C36GL^LdSyST)uSLH|AGt8()FY&bilj6tWwRb9n_3fkM#gSaI= zEKEP-NlR*T*K_kY(4QN86)zg`Li-KK4jje~T;qi7_v|RM0pB&V{p}F7ff!3xu4r&Q zR0rG|n5Ji~u%AR0J>f4#5gX#u%!n0{=s8T(qN5`4N;wF4*%!N>(|ndg+(2l64D1Qy zi+#?7`6g8$$0JU_e3YLFRRoyT!hQxSjo-LGd!;r|l2u`qR$vtwCk#<$7umXPcuWLb z9kjj+6|34XB?t^QoopWE4%UGYW$qPLD1wxF9=5-AfDvcl2TvGL8hcZob^kQq_sJ`p z?$33X?pwsW_EUD>&#-c(eP09by4Ov5G5bOM&C?cT*3Qc;x2;f=uiHe&x$*VlE*-+n znav*7V&=_vgs1xL=eM_9SJbvMs=o-yyA6wXZhFzYE3M)hAQdZ*K}_rz$PlD9e?8uj z6qq#xd)A@QEXnBonNkf@A^}BOFkcH$(L;Z}Wo&*3pcAyEmE;O8VuRHJV+*W2tO)v3 zE^d~>YTv=WCPl)dI?2*HDLJN~AFdz1NZlA#3Ex$uddafc=N)Z@(t`b*Kp*kzv1M3_ zde=`L{B~C>~u<#w=P=kZsI?rBQE^B?e?lkP1F*+Ye3BX=@3 z#k4SLs%TBKC~~DI+423Z^L8lO+!ogPH9U^b3;orBcY#O>fuw zoyouHuWn2R$ zhzgEW0;x5A)s5G>b~y;}E_L0X8&U7Y(Tf@hFtTkSAelD3_bkauNFY$x^yRY)IF;>S ze>QvE=|3(0Geqd)*|ouw(PJ6jSmbpmw(=>R2pK$5K~kxmb%hB}&Vl57#E@Dcs2yge zHMR&M##vqsGoGZ&lPvow)=~NiL$^z2ztqp_I@vgn{8-F|^O5~ZJ|>O>Na)Z^z8_>$ zSvPz~?UOv$T^BTCiEHjA(aGmeH+HerW_dIxU?{)4R~ z`~lUa>I$uIh9J(Dx#u1~8(T4?lr+Wb`xN!d<%uyjgh)Tz>s4aYfmIagukw&=mj~u> zmEQ*)46h(JSGxz&a8`(=1UlU}#JflVi4Wa4#JkWpcjNDB#kYpbZ|mDCe~L7C$F!kx zGmg*clWoBXVZ7_A&?kIh;Sj`GapX|EZV&7O4m_4xU(3>cGOuvWA#UO3xZH<{H(ls0 zgZ$Up{4G1Vh`1cKX?h;I*i_X_A}LaD?ytW^EY9x zop>6k>-g^-wVSo3{YSUt#3sU4;f*5OxTx65$j%g;MDKITtOoj)>Ij2?^)Z;#EPdkPcBf5K|XL)2HQ|z(g9-2bodo$1;<{oKUz$8l471vBkN`>Og{;XHHGI$Eb^ z|N8dNl(mHCN=3@C$IyYLGg}MzyHfkcr?K77GVM(*VEoBe*%RRkdViWl8?V`qr7*gK48PJNPd)X)Gf<35s#S&V{my zyQUX+dHT4i9+_hL%KXOmp=yTahBt1uPVD^bo~80VXXh3tr9VsBZ9DVcKSRlsz)H|i z8)0H=F;Iu$(rbUlNHe z1F)7XF0C7WPfokIs{#513~`R_^Jj{i)?E?+3IvE(73YA#41O@1V!W`Fd{fgzHiFW3 z4_!-uQz_p$V{h^k6wylE0{a3_h!D%z>tB&A01&XXT;wgXdaX$`-L znG~VKx-{TAiDj-X*dwF2wi=UfX?AvL4g%I=jW1UA?qeR+cco%!`(4H(^nPX664YV zV%v7IqZ8ZKiEZ1-iF5Nj@BRP#-m0(euIg&d+1;r3FyG=1P}Gj#LcWI zXw&BId&mb)YUd*uZlmBn%fCX%2LOgPiRVLj_57WUaY>65?^Urx=@xVmlb%n*f%raW zX=bTSH3Fa~H<_QnUekf_`&I)wn^W~lJkv8Kl5-FkJ_wZ!d@Tp$!KEHi91s~+vRi(^ zpWV88yi32w6AsTefg&DwoHgIdn&fAoZ0f6d_9dNE>E?s}NV3zvM>5=M%GqIx?C8SZ znCPk;k|DI{9GGk*hD@0|xKhd7@JpXvXBVbeI15_3RBT`4eAEJ{0QL+Y=t40r~U&d|B>6#N>(dOt*@h~r=|(yd@#^h zGE@?RUMJnx4`Kj9k*TfLT~+9zr>M#eR~eLb>ZB^B=hxTY83}$0BdZ2Mt4>uVL!kie zOa;E^;$W(%Cl$e5)>>I#Sx970d?{1HQrl=_7^tJs+{!9YTiIHrlA#P#budLuJ!1i? zc9eR6&LFFPcaL#2RdfM{QLxGC7PJ?C8sG_D0*>xUekyJ1*|%Y|2E>J-jy73s#3%Gb z6oDdswNXDe9wZjE3-JI;n?TP%{lh>82-Ne&-x=F9`a{VeZCY7XO_5D>JaKP4$c4PN zur<-DxULXxwB(hR#ss4d>p&_+y>ed0RrFfd8h<7#b_siuVU#8inuZ$NLF8L$u?k>d z+tt#QwAOsJp=DuWs1lWPI%(BJ1Vq7G3y-JXF_Iad+S{P9G+U_6XgKeZT@#{*!Qb0X zjA~i1JbxJiby8L^xJ>+J!FX!<#3CPtwsJP_l)LBN(rd&R>4kg_{(Ei{WZ+%IB-Vk7 zD;{p0C(}?;Uc#9Y40UJ|+?^-$?SXZppp1Gr5al4C1_cfQ=L28QpU0%)$j)BIp5oy$ zzb#sEZUaK2TGc!!qPClb0|=cvMV!5DWSJVYa6-i-gSdtPE{C6H^25m?zG|1~@P3Dg zEBsgTpNL-v){gN62j{D@pMuj^p!pEMQSV}Pi736&cRi45iEMoD19gd2To;)A(sya$ zDF;MqO8k^+i4r?Oe*#ku&JD>A8;r?4vD9#`x=D9X4xFJ-^f7c2U0aKNh+E0xh|(@` zdu&F@T3(VF;4%&v(3!`$O_cZrOcEtTC=TxhDLiFIi{JU;rE10jdYnDci8<;IZ8HgY z2k%k&q+9{9$qYfU2fHVdFFGfZ1gQAb`e68q#`wEbBE1sb^f!v12s@w5+f%BoULcY3?2>9^CW40;MNQZR{mBYW93)3Jr^-2h# zi#WfmreOMYF_z+fdgYhBW2@ybHCmxpEx=n>hcemDWXe>RKcsWRHLJSZDI#6UZ9;vGwi=vhJOjt^Er)zn!uR9KEMS@XMcFk|77=3;YJM4g zC1(b%0)lS?)`ZJ#{gZfERERoa1BQw365OUD-`D$&hlUQ2On z1?=7i5Np~+x(%ib_xe*$dtsVVyz_YY=Y~Cg;_7_Sj_2=Vldxxf!rH5}ITuob{O~hY zvwW6&NHKlr78?Z*?m-_`OY-V)~7(bA1CBA|#{`qL=fi;JVN zU^mb8fS^4)@Hxjex5|(*Xmz6a=V<;F>_OtPRV>a17=E$gTbFpxEN4#VC`Xms)h>N@ zghWIEa==(o0c2S`i2Y={!uyxM=ypIY7&$vH1RP-*WA0|OQ^wFyLUXB<$OQS7{A^jA zDVNx?FU=eL@b`_RD7n-KizAnFJk!|tg|e6u=F>&zsAldIPtc;-B5ftuhWXe69-I=D z(p*DsLOa($xHB{C-x)*E7;fZSe@~E^d0|b~pAFSYUu4J1-|Hh^I_$Bkb=wKSE{bt; z+2e?r7_=r1HcGvnczhZ!4$Y7kd035Fx7ad4-4B@fN+QHOLOxzyak?fGYs@JFH8|8R zp6X<0h9CHK^o*rc2`Jijx!*gx&&(BB;sL+5FmA{q@w7tgB*OTO4x%q73zvJh#dVFf z_>0xZ5yck$O^Vz3)d4PqrwjLn1M$U?3c%WBa4G%hx@B-Rl`|;43FsG^OdHBTBdWbg zR;}Y<9WSyBo)^%*1b;dmp&L)5O)Z$RWU`7tKIhufh(o5T>#V(+fL_!3bzE$KwZ@mI z0#<(n)-zkow_)~gqCC^hyv-sz?@k-FmR@>>7b@6xDPgG&`Gmz5HCiOA^?mGAl2-gM zqk*8(hEhjo^iTL?MLeQ6yH|Xj$L24*RLYV2>4a|M_Jfq0CC8awL8ZUuWOL|78{y+e z2Jb!AADpI==rCcAnp>q_su|V-MOI9|2}9d8V}cpgp<+Sx$~o^+7Ct4vyH$_&Gms^j zqAJ;CW?M+}u?5qLS)oIHzD6hV{T?uWnEf7@D;1{AgTD7bPtazTxGBNY)C^V(me0F% zyzvznXAOZLVn6;Q5=Q~BN>kco^;GPW?|hn-2$CcZ)3d?MaBFgYSBVg484~Q*21r!~ zKh}V8VF-Th74T&8VX){OpVcoNEnMg|L?jx{FCdYr??Xv;s8bUT2(Dp$r;jU`Q??}tE^XyQ)Wokk^KGQQ{+sP%bG4EwO^G+O@D z6OW6JbL>b2`sIrz!23gHu%aND{K&Cw1pK7 z6XD>;^2~<~t?fz*M)luoY%eK(1i3eDCZ;w7dFSk|*jC}Y8Ms#&z5t!U7b4QRS$h}m zmM;(7w1onHh?EbGION+yWjxfC^<{6>EX(v9ggZBq!At`-uY4{K$vWv>6mtieN`2`rxpVk<)e>kSJd3>)rS>>`FkMOs`ed)Kap}77{y0l)7FdoS?9q0W5+?=77^`!9axId-C>I0Z zl6HFBQ>4t;-RLr3j@2^`{P%w(@m7wbZJd9y0A%mBtC*?38h<3cyQ^d*`)hn#GM9&H z9YAS*OGN%?F*(Q)B3O{tQ81Jf!qK^F^0R!!mxA`{Bnu zY^QU|&_O*!w`MduqR7t-xSr;Lt^|vVhRzD{ub+>L0t4=#l|shv?$PT9?XUPLaAXN( zW$|UNV=dJOQa!33PB1U2(z%i(aoS_MWOq}3PAANs7tCDciS`GH5~_EjXif(HB@X#{ z7y9Xx7qw)F^2Fc#)4m@ELKzpTV+4?^UAeqBpmVi}Z}}s>=VSCKJ|A12{maWq-p2{v zZo^Q2%T3JTUNWV-D-%0Z>qW@dTZUlPRqN?eH`qdKRL4@G>NUw*00-L=t*ytjFt?LL+g0Zl<+=F=?aA?5 zD4_8PoUA)UTG=8RdBPD#?{q0_YXCniRi&b&mqgriULJPgvy@)iIlDeJUVN)hX_XKLcGt_1Z?A-WpaKh;*Gs%2BRjgV6T2Nk7q_ZIbq)OHL)=D*vchGtdRDIP9GL^-|ADH?XqCZsX%XyVG ziWBc-l^{fuLlTrwHKA1KCP~R}lnWEV??r;arA+*wsMVxqJCO<`$?t_F3#4IG5^EFN zoR?soRhiBC#*`z@nKOJdHheNBGnpjPOA<2#DB5PmtI4=30XZA3xh4aLaQq_aOkuL> zW2`B%Q{>9@Nn>V-C5dn;#Q-vRg0f9PidCr}zhNt&O^j%zq?%!<2@-9{r8F=SOXEeI zljB=+$)MVVgQWL%e|$m?LVx5iiAJzMN5)W%)DXB|9`4JMElC>bzJu{#BW{lTO-lD; zrstNzIwqb~L?Gsl5ap6I5luwOkRVBvY?ba;LGjAq6fOi0lNL5uinlOQkN8Qhmfp7} zPg|F7%Ey#78N?NtJ}Ige0Tx&6M|M~l?!2jmm|Jon*6Oo|@Snhv-N&g2P{2u}o7G~yuEdHs$aQwFnrHZG6DTBDZ zor|ccv$2z4wzlZc6tokN#F%Ei#e(pbpO+{W~~j}eAJ$l2J` z&V`7J`P=uON&l(PF|)A2Fo+mBNSa!jTe$q|3d5l6Vrr{K#QE*>&m7+eBD<|v!0E_-_Ahd4MgxxwLlGxu@82WiJqFeHz0OH=?#=TMe z3T1>uGL57}sbE@q&({+?>b8OOHh4-b0|UU6+XQZ51$p;`jy7?IYR7&jMy)Y_S0G$r z()>mn6?M0#C!{~utyxSx$NBi}oLdP(?_2fEU;aE?vX6v$t-0(|`;6UP|AzfdNPl*^ z{FJ^l^2X{LYK>*4YT{bm?jYyd%|739gyS^k#qV0eZEa%BpGW`kWSS(|`LtlDf?KZFUf?QrSXLLzj}h{|Me@415K;gKq^^oxBx| zp09PU8@R{8A6(C|2gJUW!BuZe$$a9~=_>YC={|;u=O)(%^*jj9{O6YwY-vxD?`s;T z`h1U*!D||W!7ERNls_fYL+ws2rvHP`d{3gst9FHme^iI{E6J zcgLE7o{)xu9tlFY558Bk)X#k#5r0^Y|D>>P>~BYT|FB%#SKNoGnQa-kkLqk0e}>0X z`vmJ#dq)Ww|1b|3e?-XdyhGzP?IfpFGaT zbIRi?eMG>xc+ET7GT6kz)Qyqt1L<@6kyUOqaoc{4@R9p}42l2Zru+Z5K7+EWk;^}E zpyK3e`fsbSp|j~fd+z@k0hUhAE+Q6&PDI}uRMzl+m)W>r7}PCITr8Zm*%=v$*uMe( zEKD5#CJs&xA~r52BKGenVf_|qW9Hx>;{5Jo|1PtzeQ#}6&To4bA}$VAA~seo7{{*Yj{~f>o zA1(8LQ5*cLyZ8U5Heh6C<^1o6zU+e4QBft}^qc1UyVd4=+y}?lNr;JtEGFm^5{HMT zf)2WXh{a}8>eI#K>r2c{w zSl>*?=Oq1sXW!u9`m^DeM_mF|bYe%U$yNRyJIBWXW#O$*YY+bX&f&|-ewnY_K!sA& zT*TTy+{4B`pk?(w*X>NNZPhZRPkx-5Wl-6sY30-Q>9C#~h0tHCCNj$x=}8 z(?QnNeX7?8Up7YAI%!0#!)qtEuVzKoe@GS-rgJ&i+i;I<%1;8$(V?&j0=%&hp3FlF zCTqY+r0a#4Dk&O#_HJLRDr7oGTN1#TXCz$~@s zwIikuHJB|#z_|>V`k+W41VKM$QW&L?TXy&?IJm(9wL>%|Qgb%!S@welzT{m2J@HP# zc&y4*m?PmlL)Jq%j76GN7`0;6H#wx8#5I^{;gCb*78C<;nDvMQpw$COj)aYJ8e#Vi ztkbA^B7dCUNA_Gjk{>D`esBlH?x3W%;nSh0yi2^3PY<%(%4s~Jzrs-VFEScp@y7^2 zL~GCBnv@n7x}LbcmY9J(0exWKkgx#8*x|{AON{Nk z1z!ur05a$A4RR4h;2?`w?B^)Q*Qc~W@9y)h1CpSU1GCc;*F&8c5{Tp&P~Jf(-#|)~ z9Paz8!!E)dv@H#;e&w>*>2!&SX1|{7!bRU@4;aZJ@e=h zreRl(WIW65nZt>iW7a8T4^;~+Ak8UYC)P6lYgWB5x|=AZRcB+EGgPVgdwVCsB^@d> zLddi0KqeD0gU|`>-aMd37au=@no&FPYLS*Ez5%%lX<+Q&>P73JI!S_S{fSe3mTH9I zi|B+BjQ5krGLa$!5kJkWR+XeKw{q2ER`&K(o6CQ2rf16%vKAw+P90iHGXIl0iDq1) zS*@f)Bc-S{l*~`4bFvHhYpyJLav^u{b5lX#%KWX<W_ohkN!!gjRc^?XyumMZ!!F35ln4Z)TajXy^tz9PaDmFmxP8-@Lrv&bLI=lVe+#-sfRE0ScL#5M&6SC0!JaJp#Ov>yrr|JkTbOWaJQZSMVq zElA_+@|KZw`IL>asEV*<%YJm$wlkcdwlGKUd0#YA1?2(B9j zVDRiT+@|Rl(PiQFxU39K=dVDlz2yE8=57l}ch7ta$S@Z`(+B%dQ-o<>=IW&?IuS*E zRXz~%{Ph^G%M<@>wGqnyc1dTpK$$428I3WYE@}i#xQOUr%`=~yGgSuyC!c!?w&d&b z3Yh2OKFQ2!}v33MJBxvpdcH;vl2fQalGWHP) zf0@N3kq7Kj~X%+qdwg>=nGp@;x51DdKp{92}arDIbh$(@bj@jS5k|=}kk9K>^^*OwrD8VK?p4`^zj>4WG^Eeb3kf^ZA_<|g?f*|>{ z!OSnRTZ=wOfCs>@sg7okG}>D)OopwECKOf`>+E(L5MHRT zxrR|LgfJqH(^!Dw;P{_z@9Fi>6_I09SiscUPD6<&5bG*$ZjPb*zB|kG49#kU?H}M!T;{go~BI0Hw?+689X}m*WE~aS_+3g*u zI4p3`osO5pxWXVecr!PuWP#!?pMiIMQ_t2nM$mCv|bO4{197bdjYXhm7|@S zv^dwY!m$Fz`@n~FjeXJEv1>@}+Z!mD=SXN_;D^wu@rsVU^DLLP`J(MYxs9_dWwvD* zY{PLe=Iz&#(!G<<7n^1k#8S&3QkOn!^`Ff&0@}^l^krcuq#iJG!!QIQ*BUB%_cU3I z#jlyx!^g8vRec^N!6{o5-_qK#jP3V|oTfF3gI2<-s=zqq>M!!6iN4V*an@IbKZHQjD9PU+-?o=EEcz8SLj9;QK!7ICvs2&#NSJAwB;QP zEfMV#EpEbE^tid{CwWUs3<28_lGtKZ7dBlHz>QZYkbdB@vnM&oc3~hpcGsya`E4N? z%xyeS9V)U(IL<8+w-Q*8oMb&1u>wj$pPR=rga*~5b=2hU#pGBJr)iy39=1*77pX5h z4K`0&J?$7o7=;P6oMET}T@}(55<5)wr!fOw*p5dYp?)tiozSN#apj4iA!qDh_=kc% zZ+vmYz^p>Hh|?ggDM)4jtYn}@jSl&CxIGDnG{=}V(OvELjhn?eZckiKJOQ!Spv4e! zY)2G1>0lz12+|uL?gV<22_ByC_f2tKiu_uTC{o#GOF4iKo{4u4ks%ayvtGR`j!g97 zu=qYqQTQ=9SQoxJOLg)2;N3O*`0j)5^t@Dj)(EKl)U*2Zm{X?^lVq=k7*n~(&mRse zoM_M1AjB|d3PsZ4y&krqr@hwBkw2hCA^ft?8l>2McpVus2N-knmZ*Z~nHXJ-PHrL_ zU7Y}>ff!`sd+G^g%QF&ksr(GtP#jmHtd!%VS3h4k{DBz>76ucPu%&=lL4 zrPa3T@#|FW{&J}!*?ZDmqXh;rv3l><+;uW!jP_5&457)p{c+`^GzZ*OhHer<4|zAz>pd@#3mYBXEsYjZbl`r`O#=VrJCF z)97s>MDI@LAHaO$_(LcY$$PdNPyb&0LiWvQ9=K)hh6)>SOt_L)?#rtI`+yTk*=iPa#weVFYEyB99^$7(}!4c9#Z#Hx7)W4}23$c*|#VXKX^3n}yv8l2oR(TjCoitN% zfUelFhG#64ql`==7wM#xvFa=gN@J}5jl_TgM@XI(r^EY4=dkQjWWD zyu%4K0=%EfFTANV%)86HrSgL9A;)9GQ`}-QtFOxyO=J`Z=Pa;3 zKXl2657kGXJE^a+^|%DKDbkme;D&&q7PfTvd3ehTrkwfMIgS6>c&ZrDhE<_sm8>S| zhdHnrh4*ROaRoSdL468^wK z8nt*jGdxx_2jWRFADDE>J5>0^X=@%?2k;Pl0rGdtjShtuqg_Fe`M!;^!LT^(9BfFY zQPLu}wfc_3_iL(_?K(T!`sDgFcddDR!fncObM8vhE2YKpbk3aSXzvz(dv~KPMVsgH zLFTm}HJCIEQM)DNTkWfAz0UM8ldd-`tXJX+1Xo6=X}VEEqFj-c=qI~q2;MxxBk>z5 zK@{jA0wNm?hNn_1xr>rf75UbZy!?b<&whrVd#ssR`T%Oq|jog`sd}Kcis*^eO{K|eebUa>y|%5 z9;onMcrdq2V2JLqh!GORNbpk_MloS^9(FJ&APq#cp~V`ieH6s5zwQu(;#P&LD2n>; zkVjW+1ADQ?L5w}*4Gsu~+)(QIcxWo=vG7Qp;b8t!X?x9~mno36g6BDalF_=~CY!1& zj61F5)r&@~NRmNk=L#v2)QLEaB8cc$)NU;I8tsaiwDNAm8&5%xNxXP4XV4zWyxjTp z(QOk2C ztx19vq@)p~RG#gSD;uKK_&I=zg6h$tfU>w75dlqINllE*%urgp3yBw2#J(~FPn}=; zfvTcxR0aGqimoXXS30rm$=vVI;Z5pD(#Z(~=N+-MuON_h@D&@Y@Qankv&;xY%t_CT z6-Tvb%!FMtnpi0h%Q>2S7zaJE#srIH0ZuuTYap@okg6!UXhE?w;V2=MdU)*2WZvYS zY=Y#TWWvt0#j&M*y>Y#BJ<%wo8UkR%rllHX8Ek5^c4+BUfzFsMN-NIUKSX5D-l$Kp zfJr+Oh%M%|-QL;m6lqP1;GOCx!o!g5QD>-RZT+vF0}qnumuCX1aRQ&vn?uw_r0EA$G2%#Ac)ME)q-txrD;_ z$5nt0<)`;+DwI_=!(epK{amJ_Acu@ja?mzV|BP&8Y=6Z!L?e#v6ioCjj?mFQ1TA&MW#HKZ{ zLF}Q{4lJNo3BCOn3M`oE7qCs)wTyzeaWiNy>bK}1VMhexWy`n<6F6Y`(Lhs?Ni;c5R2j-6d)ObL zx@*>hQ6F0Q3HJh@fd@gM#kha=>oqD3B7-4g2PMWf_vCN>szq=1ahK)3(?zCz{JYf~ zm%Z-oeevGalJwR2_vo3jtHt{Y?qQ2)_^g^EALS;^?&x+hmQ`g>7FtX`gqKDDy?7jI|HXC^`}yo{XdqZ?_Jcq)-Y)B)W-TDC2>?L|`t*@=qWf9Qk@8OOi|?G3bDf zH0W^UI+8X+>5Y16bRt~*TqhT0c~{^AmjS@%<~imvJFYwYOn+1RX*f_I5h}vr;R$J4WYux!aT0AXhzwNA$|4O6uK(z53Sf z>GnSjb3HUf<6;gyowoQ^$3JZjPh}VB5C${#$_LHm3I2iQ1VLshN5+5xv>Ok^t&^3h zkRaz)1Vzpq(#{`x{+KZZFKIkwpPT=({(Uv_7j^5!c{rLSCUTj2pZuw9N?_wBBn!d} z0*Vc*c7{xd$pg^`3;@zM&en{5zR`nem2~pG+1L3{M<)Op5B#26-%xF!!yh=uAKikr zFi@_eRoyT3w2Q=00a;X~2G@WwLl(cDpd~|EHilwO`5LsqNK!qCvB#Q@6qEOG`{cF; z_rn)0ylpfXlZUeWmcoR2m_~e1u2PYGRJs!wrPO0dG$QOZH%By{Ge`xp2#xAjJk=g* zWnf&LNiT&nQ8n~!3n6G5eC_2LLdzsK7Z+qMwdpap4!c#H{7Sp4kpZSjnT^brn? zWX`Ni4ZEIJ1+w25j$rl4V%qV15@& z`U~#aN8XzJzc0>4S0XCqb&x!ylRR*x_!cEhlSaLfw(%B9f^_|^X~?6Ip7#!vP6nlz zlgQyxz86xP*mnemT(Kj+PK92HOD1lcByeiG+ZDOz9$Vx)+PMeKPY)keRb6#3?L&Po zSO+IQ%V)TdxSGSTm&@a{nkUvW2PO8K!vzBm09aQJGUa{oL^ zwLaqW)|`KH#d7-4mXtob2W-D_l7pAQ6aLPxZ-2_-x;N8dCxRcbSabHS^$r*r1fSe0 znMeBjCft-{5x!MZ$mY@1`psUyVW&+vn~0KT6b>CFI>waRO-<`~alufZ&0hOd5V`Pe%|hxfZn#yW-10ks z>H=5?uFSdetj=mme@XZBvh!k__!Hj927K(#Vwu-lgzMusY#L}A>*IHC*3Faf2B~Rj zp-3|KC-jP#$kcVgqS!a&JW;L@GS$o`1&F2#cv+1i$9j!rN4!#bmRcLWR?$M~YCa%7 zyk-3l$2w=mDw;0Yc_rOvLE`)# z8@c*Z&O$D}A@My$NCgi7hhki0RAg*qWNf?_$`dMaz;j1x#%U&+OxB8j6@C{Se-(g7 zN4DB=zdl+=1`-kMVB~0fxi{s~rVy^|xN_-^#^Bs71Rx}IJTx`AxOiD)Ic<6X(BHf> zbh$1!{1Q&nmoYc8H@5uCGmTI;;K4eSfr5{U>@kIXucGreYPvOe<)rV3n2N>zX$sQ4-&M=A&nyf&cH0e)aIv&_uW1 z>uifY9wDE=rLtkEc|X|aT?5AUh@PKZw%{MXPwWz6_UuW$wR=tq-=X~#CG$>0PH!Fo zynfk8A)*scvBcj(ShP40=S(qg^n7XuV5ikkUL7oh0kgcv3aa9z7B3{c$nvS?JDN@r zmi#pd6F)m{_v_iT!kKhv;h4~%hJxl9b<=IjF|6QAJtu+hIAb&+>O>?59~&FbLEELd z=ORQGm=r{FKDVW5AqoBh6B^F>iejx15ZlMG)c&q&ww2c-TuwA%9~MnYu1h}|6}=+m zE@-ygKbzKBKW&lwTjTUDmK$jPNA?kP3VAmf_p=v$CnU|DX0>~n-EK2mnKQE+41LS- zmDg_g<^C@;q0aFas$S9MuU>sP0@*)!A3?dj9H4))Za_1qjX}@T(r3@7iA`FCn4o$s zLUO`^#Apd>Du>Zhe(M0&WRVs1Z^f7287P8JYr9NC7P3YyAN$MKvjj7K)Uv}6ONTQl zI$)ush!%<9Q$?dw08hZehn$u4(+}c893t%h5(X5g#vn5tATL4T{j^yE z<_w7*9FSykON&uOZOEeq1^tAuuCg2vb7R{9J2&u4`nvF& z_SRO%i!fd^UQh3sDe-QTfB-;b&kf%huh`9^6p0Z|B#uf_EV)w|PKFYc(DzjH`2$3$ zj0hF-6)u}UDR5BoW0a9OP%*9q!x^g(NPfds%{)d_xE= zj7hXEXb0+8gfmTx-!+-S(4|S?7$%eVg>^pCG1eh9m>GZ1Fu{0Q?&tzdM&MQidB!uK~X5= zIZ1N)bgG|fW>ELZFT!m*sTj~P{lbbaVAV(Izq_ZAmuKsPY(0mP*-RR$<7lO_Bp^xQ5IOeLq$!Wdfxk+r| zIT`6^kW3byyYOd{YSI;b8dov$BANHi)5|m~rw%&><}H3>O*Y6j&^Gj&i_6U*%y=_f4jdj}m` zNMp&T7t*y7ratRciW)u~6;AMLZLA%Zsfsz{p4*2AmM1Zki9<4u?~Qg+S;!sZ#+_0m zTTPRpogrv#pF|4!;O!L`FCtB=GYSkQH^iMghR-$pM~X6!uAFTZ#7m9j#ws9}qkz`j z!`-$)eJC*@jl)crVIAa=9*r{&#srOl`4+8VXn|TeJ1qtVj-RcD zsX{)lqRk4$O8C!4DRyOn#8Q(?r{v$IW8;UV+f;w4;}Xr$s07fc_>vK&I#8xIGk&!- z7;;u*bj~&@Q=LU4MYijqPw=!a<%r=6v+cv5jKcQf^4##v*(re`OL}Qk|zj^cEBMGiT(OMe|JN$|I=$H-WM2Vc&c%1 zF}Ebt2j~=cpB>@3>2vc@_{(FAq@?!SBl!G}XDzRee=TozmpZ}p77b$0j`!j5pEtc# zjbRu2X@+~J7a&Fapr24_g27gim3>So!mE;&Rji^@K?7rP6TuT?X|KgMk=x;LLCwJdxww#08HcZ;%i4Aa?(#?)kGXhJM zJr>g(a_qlLw`~mBGw9{gqz{!uDwx+fH(CE&eBb^+YkK z)v+-%YnZo9TJ_pi--GM2cb5Wqu-owCd*dX+w$1p(FB^>PXaV-fxc=$x_ zi%GY;h++*1!?Sa*uNF+zVgY%%jQrJ78Sgke-`V9s-%@TF1-8+dWg97!q*Hj-HWTPPp3x2wFls5$3ASY z>!*FRuczOs*DJ0<)l(a)nBb2GkI4?mjx3T;DJbQZ%qs8qjwy6fJu=vNEQPWuw~}_G zs%Ck$L=yiTu)NXApr%>LBrT<1v2Q2U(K~iE(^~>80iJ-vg6A+40%;#fZ>owf-VMOx zRju$_=^E+a&XTwOXxNZ?+I#g;s{S9Vt-H&-6Q0h+qQrW{iDa4^QYZNbVs~1Q_#1MN?t)^&zR#+>OlM-CxH!S8^I>ueid;%M6f@ZWdd z?!LdRyt?wusvG0{}Q|_Av$CAo0B~u<*Z{5HKwmcyCS) zA>DKdm|qF06nCjV2_gMR9^YZIhG_sqBK?x5FNW+U^N+0j&t+@J?=Ifi&p4H-a=qr1 zYxJr`8FO}xIh_$kC0?vaJ`v5ZwSo_wsJ^nH`O3^$JRsySe+n-{f3QkvAvmYzt9UXh zt@3H`sAmKcpyY|M9MV}JPR3y93&Ms+ZUJFU>@;KyFo+RQB(Ulk?_U3G?_yykeMp^26J8(CgWVm~lZO5sOM+?gDW>ce!Os4vm3!Mcmb_`(XpZ{HT60NMrq(g?mq z{rnB)x2KcdFUdSUpr5-Mv*_&nl97TPor ztHBB)tZAtKJc1?0$@--s7-`(+weZFy4-BRp z(bM;*ow{$k+KfU*!Qs-PWrxJs*84ham>TKF zdOMl3RjNy^I7b~_nSinCMRtprDRkGS6s?r9E!B0Tbe5^b9sJ`808IPBv^(Fx=0Wu% ztHmm|Nd1HP#cY0l#bPdmU_T`5;%H;hxOroDY)dDjMLJfo2BN?kwDJCPu-gEZG@ zn6BHgRcSJJC;C%zTJGwsi~sP;|LpJKeUTU-r@^^e-PN+2LOrEpYtbd-sDd9evNE+b z>&&`K2ck)@dU*37wCjkY4JY8iB_Dq@$h4Pf$GQFJ-l8USNQ+bw9>e2@Pw#IngFqPo zSg~sQDZml(Sw-`-!an%aCa4x7A2e+fUT;T_*<8vA2M92yqgPv2zXbkPp_)5>B?h(6K@-{g|><$kB!6R}Lc{*3&Amx+%T%KciC1XPePhDKz0N6nqwOF3skpWm5O; zLI{i<7z&R`{?kivTtMriSeMGKOSdr?ivdQy_Q0qjuFlG!HYZ200N%{yq#DmG8jMyN z-wTAI+BId!@nNXS2Ue9uX6{Z>)h4*!wjaE(o7o_`QJf%~(la}^fmofdx)dqH1n@I? zmRmULx;a|APtNc&Ks1hzh4b@3UbDrE-kBT6x>0>v2A-<6 zu5`+*>N$uih!8*vs;WcO%bFu_3yWYLY|Cw#D$R;1>)Jd$fkjOEEvg!WtP85pf}J*E zK!n$AJWTOFY>MelLPSF z$98*B7@nDxomx&U_!JFYpoj}5X3b;SrbHRSJzXlTeTi5LX7RxLW5V*b97b0F9|NXL zz;EQq301{oGenm)U}oHMKH&<-mqwg4OrmyNuiIct-8eUO%PDwOzhG|#RW2v)5CJk( z22T4rD|&VcvNW}kPRJE$1EV6q9n7*15!^*xUlFtF$8vJzvf54^keItJn~0TCH+w;A zxonmiZ^6af#+*;JL8h9L7H<&|gMhrubPmMw*y&mcxM@;kS(+td5o=4iO{yBN&;(s( z$xmvkahc^i^VH-c`K(fmG%Ijr85r2RZ^5A1=l)Yqa52;-$GV#GR#_U_bS(u4!HLKh zC4uswcT2dHh4;DJq#b5=9U()Z)hZWPVIfWAUa$k{CY@@smc}ZB_lN!srD_u|OR3vN zpMV5NgD99tisXL!7v=jvC?MAERueVLzCkI|)4FmvyHbE@Nt@@3va?KCu{BT?mL&b+ zb23~nih;!o%gUZ*k`pX!lOwq4{J8YJb6I^`G!JT2WZ4k_HL?uz@Gun}4byV}E--n+ zG315YPH_CWew_VIv|syO+WyQ%(+%N2S@o$WPJF($27*y_(G52N)NK5LWtr zB<(h%*Lz2lSi;@MaklYYrgQ*49dm_5x64I|e;Wj9G{k?O%Pjkygea|#nueb4T>Nk@ z$nxb>%g(Zol_CMUWGH|>$@~_q26#R&Pu4@s&nF{#rR&-na?%L!0d{nFi~-VX2?yU= z@RSL=mg28k(lI;YvTnc8Zhc^<@;B#H$J&(==m+m_U^w-jkuapx-g=LP*)DDQUb9_J zUH7gH-vBoevN>J*MPUvPK?Y~?T#Chk?C;oRXmNoGd?esIveZ+@w}Akpqu*-o(CE6> zO|Hk7G5k^j?W_A;fssmURrwgmGOIJ?&{FYa<&R}|7e*}?xFiC+UNXXU^32iJ6@ye_ zh1q_NVcxqzfib~J(F7k4SbUQ@z5qPLz!k&r+ww!|9o|;N&zf3Pj6k6gxrKC7wH2X)fZyfVe(MzYi!HFc8L)_1P1MA1a+ zKD;nC1b4Y1B|y!i|R=h-S%4pgVsu{PavYdSA z`0b2iX~BD!FW!j7R-na7xJX1er{J#=F}IT)Q@?`+QUsG;P~gZo64rTRDQtHj{78j= zg^>@Do(Ei{qXHQgD&1k|`I3S=ZKu(I)D18weI<3n-|Di)zGy^x(gL!^F<>7U0Jr{Z z!oN3Y1X`LBoMJ3OIcn!*<sy&XLthrzK>lmUIxA_FNfge3{D zCY-a?^SGAB(&+7zqa_Oh>n*yh0MULR*5!WGlsKPvg!y`}>2sQ$Tu8E;KMsb;DGnZwcv^Az3r^Wq z&nzu@H7`DC5Iqa?A5P09CD*0r={0{&@fiLWWp5cBN0X#&3oKbIi!GKcW^S=$F*7qW zGc#Gt%*@PWSmM@kXSxs#{&#P1uAZd3?U z)8oQKj;8U9kR!esy&ZR28LfHqn9o-|$G5OkvFlPMqz?pGAr&hD2<`KebL%r7dS&1l zv$a;I^QQQNB9PrbOG3am9zMa-ZyYp3+EllKY8-8; z)*wP@7u%(2;W#9|?60>KIS53PRN==IhlsF`)4jNRpI_ng3ZwJjg{tm4K2eMu_Lt(T zkGj?^;%nTlVNRB_M=5zrmF>7M|Mn6YOt@;G6y5Ju$M}&$i-%;*!S&#aj2Vn>=`+RQG(AT0bo5}(1JA+rj%Q2Z%bwQY z!kqT6^zyYCvu*GB{x@;N)nB+a&BBnUd#i_A_b=?M#ovHi;nGTII@z9Ct|_Zh53N*+ zuIN9SfE`@4BDuwWRp`IcP6oAL+=ct;){u~^k{fYw^^kJn0J4jOwI^4E4&$NZ{2Z;@ ze!&i5Rc_LPf@QVW;`Q`y=WsvGk&qkuvF+yRoDvTjt7SFd$%&_`j4uN=X-lS2sham@ z{x#uK1&yv4wL{6t1b5mimAioDE|wRB=j4NgWORsR`ETp$=ZjlKjH0q08zLSbu8Q;h z-^2-%4-~>ew*B`M!R3sO6uYs7uWF#HvjovpL1avul!)j1cCEYDWT$S7%>xp8V+82= zM>t6c`KUiJPt|Ngy5}ER+S9;p!a>kA(xZ*9xvxQ&nSWJ$9e}%6Y|(%^@ciIv(&t)D zMOd)pLaL=!+^B|9PPALmJNZh>QDkJ>WwNlYigt+$o+1@gF7L}b{K1T&i(%^u_u-g@ zUuzeOFO%s|h{Lgi6fmY6^*I9O39X$IcY=i82J66twpeYj>BlTRXx2%?t^=H-*x}d6 z5C`bfabw9(9V2WQi_%8#sYjYo5m{V6v(7kzCTAF^?j=$qJ#q{m-AZ@5A9?dV4$Ly% z`PrDIeK1!kcIt*99zk0`*HVWF={uArB9AhDYEFdc|LkSsiMETqs;|-55f3O}%(@95 zj?~KRtTIkiA~1$IYYLro$WF&Tulm;fo8g|Mqnww-@GgO~c)pZF zNo%=^g!|ZWsgu7$^NrG?-?8fC9=Mu~%zf^QbtfszgnPNGch!OK`guiP@6C4^7vs7g zyl0_Dk?-rF#VVPD&dyhh+3TGu1n76aW^TkWCeatI*KcfZdXU85w2c;rb~=BKe&e}+ zVnPwtsrR96_qk)Av(5Rq@xnAcNaXWPx-mlNezn=Yw!U4EZ_MbW&K|q$wc__{s|X>B z0C(4^e8(w$FvSl5AZM;9>2jsu2fCphG=|;c;jSp`y;Dx@JYTqEdLLDteaQ2Qp3Nb0 zu--gB+y(r;xesXgu;mqflY7fqPxUnVBF)_y^=k}&fsb1!MCh&hF0tX_F7fwAS2gNy zmE$A&*RCZMc@Lq*4{aSWZkfjWt|=Ay$rY93+(X`3piaoqxy(MIDm~OWqq^&GdM0@h z=f0nBuXfBm^w>I&)6PCg?fX!75fkccmpHhvel=;6I7YNpf!*Hxa84H6NeRRmd^u7L${jc{vOW%gZe4Ch z?;FRsr5h)>W*?2~vF_dLax#dA8ylSRA3^KWh}~}w_fcS3cRfgZFSz)3WR9Nx?aW<< zgCcKgxY-vAmb{fa`H;Xzf62wAgrlkFM!hb}C* zX?HA*kGq%=`%JRo%_R5ijQM2z?WrxmQ)rl%oLyk}!!6BIY$vjHCw@XZdFMo|8&Xcq2B`z&{ zt^Jw(-8#XsBdh~kD9TDQCQ2#RC8|jD!Z9YFVt3M}K-A})z@`h0wiB0cokKr<9fnNA za`!Tw^r%L7ojI1bJA&6Kh85%;n__oL%lJqZ-~RH>_DGla`q?6P=45NPQPv&=5B~>Q zb#VM!H5biU@or-Bfmk({l(rh-&r`0KLDZu?w_T&+$3fI zZZUCI30&WYmBqb_<7g6AyOt=|WQL8YmQGPwLGuAlF_ATf24G7d#qhYhJOuAQ+3e{^ zPA=Tk)n$gcPxi$gxTMb22&>w;h16N2D;&ZsD9k|5Omlb7;p!mKtHf-xNXqq&%p+Hg zNXs|p%P4l6ZJ%jKT)^b^+qng}dnD)IJ!5hKDeAqD^X8$kM@V{gzCa8I4Ll+l3 zxS}AYC6){eC$*FDpKMWxXpBiYq>vwDM21fnmLZf&5L_1fbc#OBhhsY#%imKjnvxkP zuODK;Nzz1#tlua`s7GvAZQ6)*0y7OJLyg;)Atm`ejlw@g`A1n$iS)E+D1WFQvYI?e zDzX?!oB}E*ROvUc3S@Fuy70iWPij!!$SPW0$cV2W1NhH2M3*+N;UXUxsDx#||B9OZ z8;tokkenF+VEz|)4Fp&J310t`ru`TH`7e-M@V|lN{5F<`|3Q&6|2squUOhsgi02syCg|AdhL;Z6S?K?S0=|GblbWY=b4VEEq<^55f8%k-!an_gKx zqeuD)iwn?9$YFiI2x~KkzozlAiRk z0Bf!=*>$fct3j>!wEIVc_g}N4AIzT7s`OMPW9J%=df2OOT2p^AFT|Ww90*|OJdEzJ zOFyYxUZwckJzI*I4brX_6~Q|&Y4SJGhAme-yl}t@JZ!X=Z70mOzAcT_{vMdgyObY1 zWmcgZ>amRN+*k6`Wc1h#V*wJ9I|xrg^|Q|^<9R2RDXc>_t1i(Ud#f;RgDg6+8|**% z*Bx-~nskLbrMxR_;(fw1UQ;ZNs-1^!RoJQvH+HB2Pqo#BK7}l|?Jm2!B0kh_{x|B+ zRO7dtYvJD2S-XQAQQpz+A|Ei^j<+6PHLrX34+GkGrbk zU)wO=3b76!4iob?%HzGKy^bE(lBeiOl6OTuNbWx1Q{UwWk1*JR-jO%*iFqygyF#So zKdyYf-6nHny&e`5cVQj6a7g=v@`zsVQ1f^7{^WVGLzn3i;N^a+HELly3f_d-iu!0x zE9#td=tz1N$az3wt;O%z*a$PrpqKdY2B*V?xcbX^!t}3E^w0V5|3jDmkJI8W(Q*Lb z-_UZ_KbSXg1_FSyg!K1!-0G`8`Iwlv;3(H?G0eL}60IX(eBU0{R3a(^jiO2?-gn z_P~z^Fs$?R^Z>Z3PF-@&ChAKoX}yKdStvzlV47**km`2xRxt2E*c z1ku(3i)rgK^oy$EJrI0_Jq{kMAHKb_n(YFGs&uV4G&lF$e7Q*n!J*54>x3@Cy>hlu z0m6hOOs?3shZy9BTo%ZgEzlV^JenqOA7>x^Rr*{3Z0DH;B z1%4qwr|Hku@C!lq7h=d3!O)jL>6lHF7MP7+#h0X95Om!;mz0{H5N!BBq`TvH!7RU+ zWWHov{OX-hM}P@=_V)g$8F?Yy!P)hKU!5yB57lUkw{y>of8K}0Cxdy5t+u|l<2#Bj zA!Mh0YAHE{Pxu_H6#99a=Ui4&MJ!3WgxAAlTYI;(xr22_TWx!SG|@$7fJT5T>MCO- zZ92qrwJ?D-zCI;03m5m!{ujM5+@wGI~Jd!1Gvh;2@kkrNO(oIlfn8W({kp`0{zPJv@rocg8=}y)0 zA6n^#(`9I>6U)O!W%nYT$Ygenf$(=DB&kX65_QHLikf5NgBD}axdPP$@*g#L;v(+nK)1{w*9@`y1C7itqz(k^(Bf;#Fnu& zw^cHy&|vwj0lSD~^PA?Q_P4tx-O$ zt^M(ggw6To1mN7Wwk?L;F6-m1q0f2O+;m8a`OuAXPo3wXsCfC9lgPNe@)6u_!A18mGHFaek0Cu2xDtQa1w;J%QTx` zsT0=hS;<#NU!{s#{oG&VGY4unkZE%|`HR-mQy*H$+yfEJqqyz$Sj4pu3WyR+#spfU z#%kic?v`RwHSlDo&Nx}#ru_@nf^y{kelG-vrlWk2*YrUypkE8@iXRPZatblKS{T?s z2!Cu!*%buaMSsKMNA2bQL}{OouANp4uY)=$jU=BEptcnJJ%FJPB7(zG=(LB^ROA!{ z|5OVgf+`$iW-oPb@7AN7Bu1rxum_$(5mXJg4y5!#_ zx{R%nwSt?KzK!Kyt8?HoOv40RN*U;ZD>OR;;D6HQtn9!*IDfA5_wY{iK-K=Q@J_&b z|ARDV`0vr3fDv;3c?bWH=8TO0t2B?{lj$S)5_Itz#(s_mXvjz>H6ADBKEx{L_3deh zTlAAW%KccUP?qBQe(ib@z9}z`cU$ zluMh5!MS_(ZAfR+N&>3r@VPxK952}rx2_OcNkNH*8R!HN^U8Zc5IpUrnq){LrhutX zH+Up{X7JVk+RP{s&*)KF!;1&y(?!K$(7_LrUi{}|TjuR8lLH7CPAB_~jH z0izVL5d4+c`tMPG{?=*#MQr^=lpmm=`(MNs8#^=oe->MNY!-^x3#l8KnB3p_k@Hgk@*O8a`|BGOY^Z{5C9|KYs3{Ym>0D}#$f0`Z3W9uY9huyxLph_WRCBH4S{H)NW6lfCh2^Akv-zTt&c zFNWkK8kp$_$jnJ^?&cKkMb|FK5FS7FoF1{K!IK`^cD9J8lPhymmoK|k*yFeDJ&(c9 z0W#RyG9s^x+xyd-@1Ylz+Qy*vY<)qso2I7TTbb1aKe4{AaWmjWzKx?48TsbDCGav} zrY*W(@j+~pO&41iAid^Cqw|sUVyR$ih~e=AJ(47Vio zGTo6{ly3S(AJHq9_tHXPj9BXXlACE-`#~IdB~@zE?UF+Gi*}zyFe_NACZvGL$6<30$keD!FRLN=N;fbsa3CSy<^?^Oc#7}NR`Hz=Uv!zYcHSDa3+0qbwP`cBk-2TAQoBB%yK zA0ljUbSS|YzS-U0kK@;J1A=7?`5%xpVUi%pD;Fng>$7WfOSM)fN%!Mc+A`(sg{@}s z<+WS;&*^~qxp_q!Rh6R}m4xKPB-Cnj6*aedirJh6Bh#7L-;{;^2AE)b*0n4Iq9mZ9 zR7jocFk#_*#Gk4OKM{k9RW6K*@_$E1sY-Ut-Mt(n))Et2P!iMsa-91!Pt!Ks|5iSn zoI2(wEq>3Sx?mRp&G4l%=DxTgF*s5=8q23<_SJ8q!~`vc^GCL;xTbs_H)*%Vwd@Jn zatJp^Sf5y+#EiE4xF{?L7=IE&*{jmlOFYoHiW3df4S}>pQJ^TeKKC)C-qkW~YqAHUol)@UVhp%AM zC*QQPQI+Y9iZRnC3_b-)^7H<0^Flv-HQR1$!Ga}P9b^pM<~`;X96(p!Cvp?Jp!hWj z_Ij#}@?%h>@}>2ia0yMjm6*c;9DHc;`gS{>v)sZj@Nwtd;YtzMOhFtWI!S0#|rtdSgK+8-pM0P)A>#M46 z*CFiFkzg-eWouxs+8z=~kz0Fpr-MJd)49_15@5)9CLtzv^+*R1ipdZ z8@cIs|EVzFMaAgO0!n2ACfyz*%FHsUJO5}^T_LQsn0cskSqbr|?FCGwsiWVgTD3(5 zJ{D=*QMkpF*F5`!tg9oWiCPe=sVKB%#hqxC zA`|wMnD!G2jmzG+&Qf*sQo2I-F#Pcpjmy*vq$<}#k4nE^7@SvNG=7x#-)FJ0&=$dg zxv!IgX7*GqONMtmAGxDz1ho9H6B<2X=ee+-Zp0}X1<*FZ_xI!JbW%qG*}x=lM{1%h zyR(&a$`Lyzi!_YkttvMR_SM+~PK#gV3tMMDXW{hHz@^@w=7w%E(Jm`uO5qCSzX^Q` zla*NeQDWpas)q5aVrAmvJp0FG0j@aal{jun~goM2ho&Q_>NWVmE=7&_my691)SXMv-Gc=VJMV4yC*SvS;Q39wNY7#2)rv`DgTfH|k z{-X&=3*%ar+2tOn(emNpy_&p-Xqg6Ex@ieXedzDQTktfn6Ky=06W>_W1XG2KBMd`g z$s=}s{Z1F+xhdt#ugg3s0Tsj#wuXU3pP~Gy1<+@UNR5tb(uTjSspTk_zC@^zI;Am; zrW8pl81W^^PwPM%!VFovvri}&-<>$YOd*zF5|t|&)ta?|R$eIrjzR_s%QQ{$XImAO zgm4y3IB?(IUZ&mz!h;1c=9Tc|S1v!?4lgdq-WIqE8V1V9Dnu7G6B}a<3B_A3CXHgk zF>k7ct2^$;GMv?ZPxyS4V;W{0)`GApe{{@sqTo@t6y+IE)EncFs~S~n7s{6O%m7G-4>-|LNsZ9;3T+V|G)%Y8P=be3 zGco~G*yv^`35m`yjG@3sMroy=rL%H4yN@ROETG_5tlNJeo=bM7dMPw-TwlWOOmnv3 zxn7NQsUY&Yp8S^iiK^)~nyh3hs%d<0@8XBXb5f?LA*zNjJV}^_b1im;M68}1%S02Bgcg2GPpzk9R`QaOs;U`M*;O_&t;u%(6W?}DC zLH=1sE1m?vD4nQ4Qpe%%Mkte39^^SIl@%qwKr?3?c|2dT|C0zYiOby6v6#}T7q7EO zNyT(t!-BP%W>uY^XHoHaglfyk*(u&mfTYrjWFFw#ND}~0e`YUiX;_e;nB0_fPHxmH zuW)oM@2pO6l;k<84x8R6uZ_4kOz{HoLc(b=NX%8v;(BH=!yUv-IB@#SCO6Mu9P6zu zY7Ww?csin+CmI4U&t5YGU?1{QdG={R{?;vD=4jbe3Pt51RRNDf!)&I@N^Am(eL0}h z0c+FWC%a#|?r9>$-sNRl=e^MBtx-z$CDY10eNo+gZ*9M(*j0*8%s~qCCPa#Ow4maFc<&x!Wlvja$Z_iv*R zpB>weJDlZB$QldR<%^p7Gbpf|s|B zfjTIgi?0AfOVD{KO4hAU=u&GkE<#3WqEJYiMZqRCoH^NK;#yaaP~8izuAE~n9gk`3 zU$oig)%ScH6??nK@RMXV^S)6vb$)EgSX#E9!Rq+v-&B%)bIN+l{#ZuAf3G_6!!W*o zn_ZfWT#u;t=6LK`qC0ol;rf7kccD;%lUK{;(dnIv^PnB%jO7?!b=CZeqr&WFu6_X}jE~w5-cqs}RKn zQ=O6rTt6>s4V|b(kz1-MOcg*VXH47oHXRV+-bp)7AIx{} ze0h)>3BfjY#ow>>IcoEwZ}mJpm9JG!lTrd#V~19}4IDMsO+|F6THdalT&;gyhxUP7 zDq6p8R=AIf^yjbKw+=O;-e4aqO~know;eA!ucMNw*K(6`Xb-t5YhsJMcRHy{b{LbA z)N1lNGk>!DMFk|G*n(NZf1DIqLZogX*h%sbHg5Lo?1lJQNOGnCk_Vc|MQil~{N-#j zbkO7&jFnQu#CkP%zjVO6s-_`YRrQbBuOxu1ES{F9gF{MVAZ4_%S?FRd{WZ#&h&hEAq`io^QUzoq&?EE;|KgfoimIxY zZHcNF$jO>Vn2;AzP#Um%$i{|-?%gM}WQ}_T9n9>#u$_fU^-2Y%gjd+fO7TZDaWJ9z zF{sLiqp;1nLPmZ$lSfluBh$c2!|)bwcg-C)uLnyvezbT0q|`*9TcOV&(J0@aJb2KN)Ytm+oH*R2vSy z#@IG~gO_~@J4-RozaVnzXxq1v%Cp0Rb1vH^<*@b{8_2aqsqI`TOpbH>xFHk6Fm#z7 zusnrpiLN|oVJu>`yYVEZY%KR|)1Y=y6$UbN*9|YWPFKB!Vo$Rn%M^APU9UMnWU%I| z7en7=twEP!pXoqT%=+ zDAZs{77#)d`$ahx>%u>OX?b>9khYfT#snrYTAcQaR1@IdpZSt*)KskN-|EH=!4%W` zDgt9{7gSKJi(sy%18gvrJIg<@ChJWdM!DOkrc1QjoP3A2V3V1A^F79&MYf#2P?u&k z?7#zg!q=!j3>WuQ*1M2|5jj){Auu>FSC^Wci&jxdc^)b~FCe!zcdB5Di-(8lp2wQ0$XvI8TKilp%PF8q zQ!uY~iWr&5fWNwPkk%2>Ah$N<3l27NlaA8qSG*{=V8d-)Q$}>btt-{921`sVn4t(l zkVmF+FOk>3QDCJ)0xP>!sZnw9VF&e5uyLbOQ!zd0Nw|L0-FIKf4QB83Tc<<82j#`a zGD!My<6y6?V8c(l>gz>ZrTqvQoPIidw6!Ento zpi3#I;=S6_8i=QMqY;s3u-l;oC^!KW`TG&=#$lc_q2o<>uF_xk$(GPQJqe3 zwC7Yqt`zluS{q&vS)i#@z8T?vv!6F5(Ps=1<_xlYE*;!f7OpIi10+fkDmu1zz~{7gC6kkHCT`!bp=Dwbs$4>WJ5{Za-R{Sc=W%RjdeY!3<*dOqS6)X=gw!u#EEaW7NaIHwM~$dEnOaZknhAGu_Ft;$q) z(fSB32BZS^?J=knB^7k(tp(#((Syk$uor#2>Kk#WLfBXv2eefH#R-f?8rgb;4E1YEqO1 zLYku<&>_F|4}{}lAZmAfY_Im;VEA}4*fE@8m|hk0Zat|?l_u**UvBs?bay?j8NGW< zl0EvgZ0;W6y1w$KHO)1O{@kg(+PEfuwAt}EUwv{Idvf6A8HCHg=5@JTU1gteLg>#D z;55k=zkD{q&NliPDu?H3e2zI_S9CS@#8iQ&18%a;(TkfrL=h@Flh-%K-G3v)+nB}s zPRxEs9Gj)-8K*|jHd~RZLx4%U9=9pOP0KyO_5LIN18n)7t7$|;GnyU)kMLP!2yB@5 z%@#DwxHWK+{b_KjeP9xa&5VsA!w{To*d$i%spdp)zo(bHoI7A2ES*slFmIZaQsbhx z5lZ8GhRo19Z%c-^{S^Ay1fT1j;N{nw^!uY6na@Ts%4@9*iR+*oqiw=r^tA{go)N~6 zfkf}VVU+=`s|nZZGQZvu7YTXRCpyJn{K*%6j&Bo?rx`2Hx?q!yBV( zwDzP{%b^{W^TpCL=Yk(U|6=FmD+Y1KN z`_N-kz{>f?z=SnvI`@%h`rxpO>*tP$^}Hq6Q1@dBQQh7RhJO zI3}D{{cYTfVn&H2we@4T0xgw1R|{@;T{w>V$3T%`Q6yGOV+mowXj8GFgu-{FqC5tF z()_x2)Z>82ZBw(t{I)uF^~M37FGcLp8|j0 z!>}^`Uwxxw{%&}YG}AY-*K;(pu~sm$H#4UB;~@3-+!_C2i1{zcHh``kz-g9|7DB$V|@8fwwOQpHU2Ww2E%`MlVbeuZc>b_^nc+j@t?Qs zwPGi&dkNqMF1R2D&t+o`&DzD~3Me%SaPCD$pFuulz?p#x4iVb$(yx)8fjlq0^Nd2y zJ4RBvr3hWG7-d+=S z!7zhtAv&ECvlW+dbg_E=@=)HWLmzO@Oynd*5|KN})J*3I8C>N>CZP6Yg-`9{A3Y96 zLq9P~-Xp3?jj`F1<*TTsJX>aE0jB<5zNc0Pm;bm+D|$mPUUyxJphEXo@H0F^2x66F_^bpp_T(-|CR#+ z0L<;c0?Z}xkMnO@NQGxEPw-I=%v+4p+PY{GLtL<(*g&mGg2t^yDfy(d^RZB4_ zo;%?Dt{8;&dgITP;4*4mtfD_)^paMY7B^;Hc6f_nq0GAP3mm_|@@1cQwbJ|XBJE!-ws3O z4_g9vc$ZJ3n2Sd<&xeP`MkcQIpRZq^{QP_JbnV297(C6l3Kk$75 z1Ns7eFuu@W0t48M{!}037L;Ffcz$d3G4KhaNq>L+7?&eAMt+Dx*(JT^yp9+AnI$;% zr4?CX-#d$tj$jqNB0L7c{#7T>>qkbn`+aDPwLMGgna;1bjD*;YZ)3Q-zb%)-4LO&- zBj`^e;Q)gy@NqwJx+PSQbdgOO9LKRO-ewPF?y{5-*1FUC~fbLlAQ@IXXNsGIm+eo~fL#T|7rznvlm&i{csu zHe7!5+ohefzK!gOT88b^#7zbf{dSDvFw0R-?oCCHRBH`6<)l1@Fc7B&iV-ygZk*qL zLP?DB&8>jO z5!5#2<&CXtXYU>T@mMmIibCjO&s)FlPD+9depIDNYG%xRK^HM;^TRyaBWt|UCfhIcwcOl4@Vh;M z)S5Nm3fzR>kj0qPh1MqgK+CZ4Ob!|5ahc4FwVa(*!N6RPh10~`INim=mL*wuiT>8r;{EznsaP>DHt_TbW4_IP8B%URub3SG`natuU&MTjr95kesSGRaQ9nYim6;gr56sSAm`I2)( zJ`jyt#~oz&Iq^|e%*zOAEN+(ili^?`R#dC_G~zTVEDWi*^L4@U;qO{BCre7rUF`s# zPr;-09cR?g(p_G4i$*VeF{ttP>X4S&fu4!L0+lwpGfP${y_tYb^ZHgYfwPuhXIV|} z&I6{RgcmD|nHtA-akS>v8d!JKTIKS>y10zNB@6}LCU+={@uIEY&mM^qb&X67IPjNp;IDYtFM&lV`Q)E{UCU&iAVWxe8|zjsbKS;op~%Xvv{*Afx1Yv0-0nDkBcGtg^gi+D)cdFvA*Z zTN$oJ6{Wuj#t7Fc(3~~qUw9N#aOMpW%YZ#a8EahLt~K) zB{o@AR2$ZzCIJ>6Z)8*EGH!pZ?~w`Aur5zKD~A*w zC^y6v#L9oIa=5F#Yt8er^>N|cvC|h0+w@8KB!ebDsNjTLBFSBPd%GZ6#>G<6k(Q`3 zIBHa(8I=KQe0gBCQeA%IsedOSj?ze%>%|YNK4Kr|gDjeJEywVna0n2H-_ z$pzz1D_!0tZj{y{1;=F8%M+kw8j(v>KKxY;o*6}EpP4ZcAE0T?oR!LhQHNEbN0VJ} zBt3spir`eGOmonlz?`c1c@hH+P3d#M@E)inKf&SbXYfqy_)!J0%*<|XExlnnMWT&mUsi1S%oOxSPlr5de%s2>)IxHq_#@X1nLlicBe z+IZ9$EkXkWkmWka`Vu;nzOe+!W0rvTvD+0wBoPBBm%Z-@`PP{G_V!_-u~j8Gi z$S{2X1U3~m?2#PMDLjk8C*h3ETS58pylSz0qR7Jm#q8>VR8f>}F~=;rV`|FfAN5yO zTso?oCx-aHQgeht;-S$C<>KXfJ!WpqoYk;Cg_oI%*(HUHe}$=5`o4}Vtymg3wkIW} zcJq?FYdrU$fpHHjEu&1!^J$dDGXrSIjJ<(IKI6c;0KV#@)Ba8CP~Jc*cWR4iq| zUOH;MU&AGjV!&W+JUG_mEQKJ15q8)HKGPtfSkZmhIm*x zc{-7yrw9_K$4WEmX8BCWINP}{NVD+wK>#EzBHP@xezd>@&dy78srYz`Os zgDn$rlA>j~x>hU7=&3+Mxm7!h9`VS<9jqUNH?P~~v&yyeiCf2gEvTg-15UuI+kjwc8l z&(Ez8>e0}P1?&>Mipq5 zgaBZ(G_~&M?zjA%yNagiW3ceUF&&Tu*lE7}0@6(kWMnJCUJd^C--3MPTLO4QKZ2pm zqV@w%jW833J3 zJQ{PfP?+$NL{}w!#S0kWW=;eZ*?%xJ+8=%kbBwnj=a}1Yacqc#Vca@cOUfIt_CZ;Q z_4m-j#K~P__H834Go<-$#1_UJ`kgfbtQdj}IXWYVDTg@j_6TlM7oNm=meD+rs9DUK zQL-!Coec9$&5@ZO!anHRlP_eG+4uN_g7w0HA5|J67IG^fQwS`?PG;;*$=5{eg1c+> zlqQLVWg{oYr%!u>FKKJJcLnbXEC{k`n(Zt?bvy7b5{w7juk!cFT$TfSR!SXW z!SHt}7K=Jke-JTU7_F&hh9^c?Sk;8InE4|?Zm=<$4Zn&WG|F|!kB{~ow&u#xbq;C@ zy?Pp|<#n}~u7*BBa#YV1maxU@&#plk#TPFJMk*}EGG_<#1&@<@V zeseM>;}B13Z0Mn2w zc2dJa#k7FFw4z}=0`E7gy0EMu%Osl|TW>h76oNgg!KuFbfQ=r#&MwPQlQ)rYIyv;! zM!n8hu81uqPQkFy!blv`WvP-ElhV9$BE_VNa+1PwA5|yShSb!K~E!l~Hj#xCf*hcTA%4408GTeL%FXqs@e*Ec|9^J|i@R_{u4Y5L*h3VN@Ma5z3Z2;yFf$&XKGUxn0ocvUvN2Re#+Fqg<}NaCmkd<;q^oYSBthM3Aag5KnAK z79UfBOY-!{GVow{&OL zu7z&e>b7;4sUcUv?X=Y45@Ig4`eRTJQc+5o=M^8_)J zDtjmRUggQLwXs(W&Ldm6Ebmpi>U;yrq-7io!&D*(h@b4E0q_SQxzh7P+7|F#Sk>Uo z;P)pQo!}s|=vfRI!k<*Smye-|OT)Ko2Fc{#6h7FiAq{r5=PtrqHwzR;*%B;_vW|3- z9IRdUUSABew`K@z(?^TD@bG2rUfahAh9D~V`A&uywcRke6X!}AX5Ci6`sWs~Wk;_J z#{GY^y;G3n!P}@gZQHgrZQC}cZQHhO+qSDQZQHgrZFld?7w3QC#Mv+Q>|X3eMrCE@ zn{VbtR@AQ|>v@s}!YPE;Zyy#r2;8*wb{{X40o0!f;}4OotTt#SIa(MYZt5oBEKg{C zrAugdR$SD--6ss{&iJ3!?i0IR`u5)%3q$Z)q*s=UGg#_s^-toCeWfgJ#YRiF zim1DqKr~uOUxr`}Z$>_*(KYDqo6|RK;Pq_IJEB@w*HM)1q^0cZPKel5`RH&Zmodnd zfmmcMxRyE4LGK!aY?|7#k2naK9g{oK6;wgZV$X}169HiWaW>?$5w4+>>X2JDYFOii z8ix#57GOsSBm&A4oLs74WiBNmqat#M$KLce*VZx+xpF97J59Uj=p-CDrJ0UUJknd- zzy_d@bW!E;7wPz4=KG%cQg7KeDU@i?A%#5MX_-8&NsEv9CFrOmKksTL@VB=f77>(a zqO;Yh-3QQ{)oN>}sxJYZL_HXEGMFHEmYb zZyFaYxSiL;FS#%6*2=DgM&T>a=Lu(JCdhaK8U#@0MOf<0x0fNY$3Uf> z!dS79W?iakP06F=3PFoNNFX(x2oS*7G`lj$z z>r5#dwq+a7ISKFi8~R9X)eLAZ-Y`FlH9jHu9Mc>4vUC@gX7#tSLJTEphB$LTu(%Aj zy@P6k3LeH>hU8|N2+~07topO8Sy`WX?g1vw@k@$~V=jTFYFkm6p}EVI>ejtqv$wqb z*gOb-2k~w2F)zCa!ngCn7fvR8FQ!u({HFU_>B`M@hR5`&gaOI4715eoDs8s!J4>a6 zBG_H~@j}=ZX?LI3I>@ufZa4%_E^-LDb;fcKsYI7~!s%mFCx)Ot(j)@{I(u^Jgd0@%b0M%QqzBMMSLEG~32D=;EguV~ zsJ5E0FIL0~`?`yjV|3IEBNnif@``w>Ii{+%W~Re*uICou<5vC&%@_$buce0_cfrUe z)C3&iBdDELRxiS=LMs3#O7vulYDKmX8v@kkppIahfL;@=W zQBq=LRg^p`zs`pvV;&AZh-kn{UhZ3h@ z5V1rxX|d52JOfFG+oniq7^aZy`>k64^*B?Wz44{TwO^0j>bS9}bm|_d$;q{mDkr~Y zfn28nra;g2>w4*RpR4EJAJvCYCw1+W4UgBtT571}BXkw7F;;Clc!v0Y_OTD!8qV(f zT>f_!9e)68fwJvyu;+YEfZz#*wZj z*4vtK`z$ar)((&GhG}lz_Zv+s1i)!n`-@7K@}C| zDQsUprzUFMQ6lATylS?3>n$6-Zt`xlj`VykIxDBFG;{VsV1N&}pRwt?zd~&IL+4jU zvWHi3;$DDpe9_ zATHXkaBGgSInNISA~~*#^tI23!DN7pV@&&8XMhkMi_0bs@va}}f4PC5Tr0V9XAFf@ zO&@Ep9N4=~BjNa4!c5Uh&IvI|BnFNb|I9)l1w{GrcD?^a82c)A(0Fg?UAMEaeXp85 zx7mKUT&9#wJYTOTf97+%j{6Xo_1+zt-(qZV8ayHd6fuOw(=wnjc)7X?sMa234;M$+dvi-hTZ{<0}%?24TGWkxmjDKTODv)R>RlU=QZ}W zJ}*(;T+P+#du#Hpew_8t@Qg1rHLAI&sNL)=IM$`G&>6aY1FsJ1l#mLtaN}6k5jH!s zg(%h9J}aO|g) zR-{!W>b4SnT`RdrzNsTAk^fU4Nm^2A^2M!ZvOUtE0a}u0a`fW?`^g91QYygiBp@xRJ_*Kt3HO-@X84=~L*2g=WrvcaI3d#%)$BxU z6LRwPe3OF$7Df);m3OAU_L0i>n6aTLtlK<~C+cll__&Cn822uS0ipH%cl6>X5%LN) zy}mR3h_RsH(emq0eqnKAIIX38d?mpqXekvJ>dX*qB@;!(6!v|V3#m+4E|(%T8fDhV z*5FdLlBwEc3Z#32Add3P9sOg_#%CVFG|&sV$J1%$l^c@1c_P7+mYKO zM*xO-aIinyjZV`(#LC4vyd6b`D&~FiK zDWVTk6VQd#SiH}hXAT&sW6KtrpVyyY16;=A9aTJ3#%NNg#nV==4rRzy+q!8~6SG7E z+Uq)Ry7)OkJ*(ypXGC}5q)iLE!Cu-u zX@6ebwCeQkDM-JKz2o1&pu2CB`j&R3zBaFI5MWL+SON?kwo=hV8`zEf(pS8GdHH|w zb{iZf_VuK@TDJ6hOeA)1l;)ODnq(aqE(4tFE!R@fN~C^WCq72`y%U@4(Y1y>$$Ts7 zhB>o1w$9Q?mX96Z8swJl4kP7DmZ-Umf)>e;!)4R_xdCh2bX22tdDGfd;LcFyDdV8V1X)*lWBjLKwc!%`jA2Ss z=fXWkusV6CUfvZ!J8qh77*IMJQxSKlov z=zu9REt_x!ma*x}%=6?Q6y{BG3T+nG7Zs&qy3e<$dlH$J1#AI3xI`Spl_!o`%89dzgN-#r#Y*mr;hiIXI;2~ zY0IZGB?593Eyo)&cfyB#$=?DKmeV*3_7VGov*!;q4i^Qd1*aX_s-abN>%Z<4b&QU*v67>wr@sUq-lY-ht$F9>Y1>7i5yseg?mC9R8{Yy`mv}<-$DfFe~Eqd~hS= zv=`s3YN!qza}#*KOw2IwzHFw()bTo;m@kz;&MSN! zMRr4bc6iriTPFEm%K&pm4)`Kz&Sff9NQ9~V5G1=$vKKksM-GrVoQSzSz&&FrvnoQp z$y!>{^pAO_F5Om^>G7@$ETzPcnH(gQRzfk8aRhs^Bcl)|LFbh)trkqI@q%KpdT&;# zTA^^$Se%d06Hi=EFW$}s4U$X`T_-J<0OlJ@Pfi#lBcrOujv`9|3-;I^HT#1*<3jyl zn5J4(NFuy1mqA?5Vt(2&gkW4stg}Xj;Pr$F<8)SmS+z>EN+Z5%ir$2?H^%LdqZtH zOP*s?m3SL$=DxsCe^$-bPEqh9WPn%eKWaLDTfZ&}`B}c!gtTh>b~Jq}nk`ik*RTzk zO5H+Vk284%@4e;y=Kp*E`|f?U2qWnFa{M;rFZ-kQ={(xI)H^ft>XgUS4ag9*h+_*+n}Qs>ge3C89F8PT-0$$!yBM^Z zG2Cs7C_x}pU#nMH7>i|;i-paS1z0V|YXpu0udzp9N@7 zzwDa$^pC31qhuw?!|AO=FIa!sEm+3AahieyL6XMBt5eyba4pap|d!e0K zM+*K9iRV9|nmFOHoz_7Y(Sz}IUb7y|b4ytn&Bm)LOkMSR?pH>G>4%xs%y@GSZ84Pp zj!kp;`FK93vBPNk-6f5G(mO&x#MDTPDuRGf9_lvc9y2MrOZg2g5A%Y!GZl9i_TtnP z{Rhk&w27OMd#rbg#=Ur=BD?>mUtqDy0qJmH-(s3KDXXX(el^e;;)((=Ig-qcqgn3< z-AM^MYMH9BIQ03wgB7j zt#D|rur}*0Ql3YReLWqg`_`jK$xco9JSh`3X&vCLwSdN*5=pK&+Uva4zlWq~rLYa6 zvRGlVU2=ip^FF3x(l_4&W))Yd+!rmURDaq6k5ov6xy%LIpPd2VkiXdLz5nLLo$BWm&?c7R z^h@xf?@?Mdc4*GkZ(+Li<4%^sh+_Uk99VjJsl#izeLy<39Sz!O=?EcC+v&^9El#~d z#;;@g*tYjGE$iXz>2Py6<}pZKcL$iF)0N$fVcpqmBot1nTU4j#496p9MFFD#dp{9M z{EQ~KksE2tIT^q3q&!-mEpRO-J*U`C8BF#M*XK%?t{Slr)PW1b-P_v8%5VJDCh}vN z$aid4?Ytn$zhWr?^AuVv5jyv|?IppaIb-YDi)hd8+BHz}Bwd$4FDzN(X(gMp#>;y9 zy0e|R1&Rm$l?4>fc3}jOx&`HK#T`m^bK%nP2y9ubQbUxs1yGc5|Dl1BcS_0>6m_M2 zq}rF5WSC<-EkM*wp@eB}K<*!oeK&dSK8^SNve`kBurqi&XiV!`70QGNx6& zF9xAtf>m(;fb161bH_Ah?5Fy)ms2nXw5lMyun6(|NkHvw+>umxL*dv5zwb z+dS22a0@!OqG@-66Dy)9VZIuenlRF$ilE4GR5H~{6>U}@7#|rr#hA)+DU-v_rR)gT z1T2sUydbF)I?BzpEk+r1bWjHY<~xzZ+g+oBY?ZI;quqYh7O>FSLJ#k+F3pmYH`x$| z-pWCst-svDk17QuuP@b(^C%ZKQ$6XoODtS1=rO`D;WRvZ;m{rpy{eORMG-QvG{X>b ztFW=~Xfu&gEM~#MMVmtMB-fIKvHemkP#*l!lj!pOW~@Js!&+DiSlVLXH)p0?lc0^Z zG z2F6nt|8`DddWw=~-avRlCFuM*_U)t{o~f4foj8&%T&b>QmFu>mDVX5$o>HgX@qAs3 zLwQcg71eAX>ndekwpvq?Z{RzHm)(+=E&4~rtSH!Btf-MaJ zRx=l&nZt}dwWZm5qU|YH=NI)_-nBG;buGu8_9TU!mI|(OZ7jsi}U}IwL5I!9H;9qFj z&Rcv@XYsbLuDA3=z-+_+NFJ6kW4M#@aIMo|;+$h2U#uidDQmiBT_C0S2l@!O>^Sl2 z%yoQY&xrd{Y$NV$^SntuH0!eJs(Be+)OEBzXwtTIA#YW$&Cl|L{1R}2lNUJG$ke12lGNr-yZO^1Sh~Fs&$>a>b1IH={xg`*sHZqHyIf3G*U-(Q!?W-%Y?Lg5sO=U){sf)Q3pJ zb5^<*rUIXBsdTc1H6WL>S40f(LH0eWlsmqL8; z4P9ToimRiM+IAV*3_M0#jCHoCdq3A@3B7v_R~u>Gb*H^^^cdf7SH8hy3WmV%o`9Rn zZ?)6;`>AF7_zutQIHwD?6o-egMP8y4(SEGF93U069kP_ z+R9u^)j`z;tqlOnG_H>UuvFEP@)1Q7m5z#U(eDQ@N7IS{5nHeIC*rIYu`vvRwQ6WV zhx^M9^wpPxJGkFOVDWtN=57{{f!0!-$&y63AnOYGL2;@M&XWtttwIGkD?rGD9U7Se zCM1zBq{)68*w!vR71mjOiCPUA5nc=HWJE@6Yup;QtuzgM$hR{bv*V0QeCXu#>EzL` zL7PND@2qnBvehuRU=pp)n_)N1S+?y!HHntrf3&tM6 zMrsi)DT)11x%T%@x##^-Me`DimN4U^?}2uI?`}vUMX1)ti3Z4G1FuNFuFmB4numq z_TqHgM_|<51FD`|Jt4ZZGce}61-dUAvt&Ec8DrV?Q22~NwA6}L$i=j|0$6^TU4s!L z#55Q!%IU34qHl+XMmqNnV)QN^fl!I1wPSL4fsN<1+an{`|JpBm`Qhf(A4OfG1> z*XwCgK;(vWh-Iba75RkM^H91{D{FUSE$wGlMf_x%!{d=NA75F7KyIP7{q~_S7kLg_ zGh@Z?``vOQ4?nu3Idqcu3&h@J*>NnFD%)4jT!61$Q24Yy!9((Q1fRCbxNwq?3JYYH zBBJ}*EVzo&uBd2%U=35{61D4}(l3o*3Xya~w}@t~;Bv?oV&h1C^Z<-K66m@)H%h$x z`amJ{nzBVHLAgEuHz-ycHTiOj80;=fg~|rKN;TyKlxnwA{6)o_={*kSZf0ZJbb@Oq zfk7awSVQrepoM~w5e}83yHEh007-;*=@7oJkUt<81(*yNl8p=z+A@LK!w?l4O*0q7 zwY{I1=j4|*nhmmP$qSpSq>|$#27Ah1GBU&0X;30s4av+U(rk0US~?Z=qZ~S;s7E|x z1~?pI*GoTpTh(#oYSSYEJSATTxKygG7vB^*dn@yOjPurF8yUb8$R@87r?y6$)5;Nn zP165~ouvbtp1$jQ6M6*O0OTlqmWD&L4et!r^+5AOsNcezn{CE{&6Omgv7(qDI zYiNNuMU6$87VSc`R&|q3=?u~3Z5yJ$z1FRVq~GF}V*i5pxgOFj{3od`+L;uRl1N>< z#-YlsO2;bwo#APwj{)tAP;k@!&ET_$94uU%L4<7ah29`Cb*Ne`{P(L+Qq4Z!El{;W zzUG$-sG>~YzR$kR{;z~S8fwg0n|*#!z9`nfEe`l~`bI|k5+x|M4+@;Ui~T&&SfXO4 zgsBh|k3ACNBt_`*7uDcz(C|M{uhpu-o=AzJ`e79}#L@>JxhQ+dkk8@v%tm&nC`80U z<=mu!(x63y+mJ7rkSE7Ku8|E?0&Q}E+{FVUNVvH`nsk7F=OhvZ%5nAa3LngTYo;i? z?^NH99Q&$C1|9{Ti`NBq=Qdil%6^ava1m*c<>>RSroaa0V;DdM-AAAiml^x# zMLobF`3|>(*+Ip;w_Gm67T+3f$l($+)R@3U_dZRI^=pnZff=qCF1;|_d_W}AAx z#^KZh(uec-2IGjD(bysEjN)#lUEcUGA5uNMUNBe=DK(;A0JIm<6$uQ?o2uUfss27M z>Q6G{=-Lj_9v75vH)NXRpA_O35&Q6X(y0p{q%WP|G*YZ^6o7It2(q`ir)?BZ1adn> z?g;%CxyvmKQf_kQCgXx}4rF^kYNP_=f&iV%Eqg^&9^<*rso^{92Qn0XSTeQCpCQ<< zJZWJrz97FWk;`8n9rLJ&-)#p@zRH=x-qUVUPCZh=1{UCH5-j6c7C%{;PxK`4v_*3wGhO{Q(E0nO6yrDnSyj@iJ2qQl0&kZd;7_9d=-w(cE{t>!lZ$JRn-4nLk&ASDJ zphdhtgWoxudsN_qJLfM5C9xHF+$ivt7e306z)&RHhar!r#1F_cOr3AZ)D6d#=Fr|* zd#-_&#%p36KaOdGKxjLD*!oUiZhasPzz@KIPyfC)IQ7VhOv8~GlPXZGJ(3_PQA*Fl z`zjiT1vk}Ic#uVN87^A7UHFz`<2_^G{ua!#9llSiogO-1pe?-FTlMkT!3RU-14XDY z95I_P>ixc1ihTC-b6V=YtQ%_j?$cUn3tW`lTs5nhv|ikxjxh zdGnL&bR%gb*V#4pJvz01+`x&}#U2IxC#FiE0H0EY zH8pi*bRMR{-q=^b=?v#?GRU>VZz70GL&_gD6{ZkM@X(kJgnZ|5YyLmpz2pM<&;7H^ zcHfVGA3*A5Y#^W90(~CGyf4wQR`pCbVNm~q%=M^oaBFdTir02jJ~-KQ7(!Dw(J^WV zLz%Y1!k$6rydRdDkV>lZ_t1BQ^ERNj6|H-;mru|3Ka`ap#NCSZ2j+P}GRWpYTR8r?F<0570rmYB*{lmkoF_aJ|2 zMaHL!&HJ9y9-SV4e& z7A79|HTi)cNTMFDyc4Eg!0`k_*^>=;oM@;z)2V2wovf}vJb1ob(RX8FyANlp=*@=YPz$O(fy+3Iyba4sD<>g zpt|9Dt=0P7#;((NZ$ruRTC?*Af#CoXTL-wy2?HO8u+>oP>}=WA^dSILw6`r~+APp^ zUx!rb2G6gA>O8G(Jfo*R@MCygMC^HmO+2urp?fMxOP6p1`Gp;Hg`Pu-Ka^1x#5pnF zR5Z4I$X+As-VbrBj9f25881BejY|cS2eTIHRuN8g9GH#qoWYsftg7wPR8a0U4sArEL5lEOt0f84hTF^9StAP}P5>3RTO>jJrwm>^;RwR(^)L`ut1j;)l+!tC5IN-%=J;Gq0z-CDWf75 ze=Jabu)U>GeoCU^NA+)0T1WJEnR7^WD~1P&kj2q3Q$%ZACkZTz5aEImLFb9=%_wRh zb%P~*v%GDT$D`z6lo+yreHZ5`EoamFTqZ6I`mx+Me>5yEs60b3LVrj1dnvxOQFdX5 zG%0f6hiDbnYn`*ly6K{#D!Sh@LtVQmx*LGoI-!DV*uesen`NARw<*3DpkBxHCs1mm zghWt2?3WiQ;DjVn8jJPeg7HBUi0|>6LEf#xe&9p(=mqMbhUlX*nI3=Ihf`QiSop`S!YtUG1^QWJ&orV~SkXL2s9S_?P^9ROBI*|jbZ;bZ zc2s`_C2mZA0p(?6zm!EV2L{f5R6iLDDwsNIv*L?DU{&OW~$Q zUTgVKhmGm6NO?vZ!0duw)w8a7K3d+&V3z^&`>-Rb`=`U4tmh zlk-n@LeUy$Q7&xU&&2aSKgo=YSIGinGmbINS~5AI8)Al}wo#TnC`J>z>G+J{6wRp# z?8-SxWmEb;6w`bAZCJ&>sf!wIkI{^uz%BM&<{qj$Ft9buHOa+uLWV`qApCT^PBQfe z0@9uy@T;aP6)yr)U=}=|MVPBod?u*HvbVBMKU*ur)3Cex5X>HPXao2NNx^I8(doRVaj~#B`gTU_FJUf3bI8k3 zq1m^Eh0Ws*Sv)p8lAXj_2;1ry9ArvaIZhMzur(F|G_zdw^$!bVQ``tVc1w8PQ&YCu>gal}qh!mewP1+R zYUj5>=*Z|&=-)J6D{Wxzv7wcv)okl#Drn?LoVl1=qsL1Ck$jG%#peg)?K-#s+6yxk z>K2nQ@el3~mP3e(#0O^>D4b~U!XF`qO$Kdy;Q<%y{yRU|KuEFl!wl91!sev)Ww-ub zzvx4nI$pb?mlbK(4W_&foQjv$Pa$X*1joIw* zy9F>T$QKgDM|e$%<-*!5jhbj?MAQ?AF$FdV(=c0_5ZQ=q#AxC-#~b^ugCnfxZ-R5O z)vw`3dL`zwKsBya^pHf5uT6^Cq(zLfPJy1U+6DLLjgPLWw ziFwFf-@DL$3w{PZkRXRT!8!e{imAhVS3(yL zezyn4>{TN-fYoDqYe0gN#OI=6UI<4nI_`!ktrymY3gMT%;bjyOLJ*1u&furpr60<% z&dcLoIujDb9r?Mx)|lUKPY!XXQ-|7IoWtBhtJejgwm-4ezn-$YD0em#B%C%tG<{d(~{F3B3*l*cAW7#Hy*Lx^vJ{$5wN7-_!-BeQHGyo?`2OW zCur5RNR}y-GnJi`H>^S6(+=F%{W!F8-gEdJOFFI{c&`&YT+I&6crwI>YDC9^~*~6wyeks}U!II5O8bfR*N?64Yo3a_|4sObI z{!9?tlFpMXrczwsC!fc?TYeSEqj0owfQ{|hNfwJ5 zp5)0Ds~Y2fixJn5rxlz>mL*BZU`iIV7OS=vxSCJR4$iiI@u}<0h{Rn0sVfQ!W?1dH z+kM;XeWzQ^jjo=KYRnAIj@tKF?Y%wLHWaW1p&ZmUeBFLEOnv&iPK2sGk6h@?eKq{O z_m9GR5$0*O@vegb(!P)QUD)2@XPupbc8r0l^CN-qL(htX<@($~Hu~}5(e4yW>jWFi zo^_9>pBKfWc4(mcm1C4u_yFb8NP~mr(sC^B7(mR6@;QJ~o4d!Ses4W691u{j?ORdb z=4V|95g<+u?(ks69s?Ki4ENZ$J$&CAK{*%kHT795?MY7lHXJ~apWgS&Y^FiB@7L~N=p)_1r!^l+5XT57Gd^ZtUtAoljP)7T zh1os9PP3EDuI7K`$ z?1!Gg^miVd>!&q|MR9Q|Yy#^`&hHzx`8eR!kRANVXZ>@a5A+1!5B1QB5aa9z;>n*v z4@r!)zeL3Ta8iF>CD=#n+w_0}@V`6iv-b!FI~}N2;^dcIn-5x*V zz$O4SYG99f$~^lDfBSxX)%|Sm2|W0Q?Np^E$P1wvM8Y5x?SYyA!~Ob>!4D(#{E00u z!D=mr^M_Mx*V`tCp}3JO;;u33%wfJ1^#>^qF|zTeslG2iuH%nytMS_J&|Lai zmH9{Gw}FF`(yj1)96tFZ$WcWgh~i!fe}uEW6e@R5XlLc0cVNLi{xj45Y{{1{UjuAc zA1sLnAEZiWA9ZomIc9V7vhY`x&c60N^RK=G&G%d3E3X(IU#~e*Cw^j5**Ck-abvCs>?BG0@ug%xau{I22)o6-LG}{-IUj_Znz= z$heW^&KoYs4k#AKNxUuag_ZVg9=}-31u~Hcrog9n<@@^6{7|IO*M!CSXhwoHeLk|w z!shvgYA)}bgURWz0_FRVkQ0aN8SKQX^he?}K^@=YJs}Q1fj9c6d|)o^4?GK?t)f<` zO97PeXGgkq0FgbcEeH6*NdEikX+zFPJ49kx&a>0PbWz`7DtE&X-kj74uQYW@uI!GJ z+2YP)H_A>?+X1DW7Sk0^Agg>J2<@PBw*IH!;zhMDu2YOY6kWkiPse;kx5vnoN*7h* zZx0e*1QIfMownZ|1A=w;Z$U8GhlDET2>mXrW4Tq`(>m(vT;g@x9;{nk74xriXVY*)XXC-?mLVl-!E#suwWI&l$d+Ji z0ow64q2!kF@M5l`9c3p#rjNpRuSUg@Ds7zEz_B|@-~>;Qi%0fDrOet5a+NoBtsz;u zHvgy%guyieu;aN}(Y;oe4dF92AM$PHz*^`~?WqEb$?|iSm1z^ZySH91&6EmRBMxq#!DoLi8_N~bDAN>cl;xGM&*iLVn*OtbGu_&mcwbyFM z7;x~l>gM!hgPp0Iz97BQrreGYR{?d#sSV&`Ol;L*9-;W$**s?)OYJB-@quqM^21`w zB7N`a0?aHh`>eGNaC%EM)+ytZ*7lY%@Vk~By*^-$=vE1 zbzc5Uz0!5Nzjw*FtJ^)`3{`npi=T(JX^(S3DedeHHBLHF?c~I*Bz?H@yNP5i%VwCG z@zj)>Qp!A;R*^=ZDk0RG3Nan&5__t47zG<~u^n@$`DKyHdzX1}6W><-JZd+2Gs=C8 z>@m|N#_Nla`i0!B@wYp!m*Bzb z4CB(|?AdPg!Rx{NjKMkESFo4uZArLy>G2GsrfjF*?#yjK*Yu6< z$?^6%NEi3hwFK8{$iQr`bbh!O`W>sK5=qt>t21=Vpu}I=#fN7f3S|4(7i- zI{zQF75}G`^50UA*#3%0{uk=eKf)0+2j~AJAN`{o{i7iLBOo#VRjU0XAN{NUYx__6 z7xT9b`d=K=U!B^&@{gAEpV%aH^ z^8M@kr*iwx_A*)KK{r0|1;;`e9-^q z{+I7RIsUExU*7+Y@brIodNBPv|Nq-Z!hhrR_-l~+KR7*@IT%@){#U}&WS5t|%2GFF zm#@_oFSA#!*LH>sKJz87$0Vr?c~X3E{22J%Dq=7YaOhw>5O82QX%}h@8FjcnzPTu< zVu5aKi&We|k&30(f>T48@3NG91uwp}C_*c*dJ(R4H$G7kU^y2G!KU|p=6QrYV^a5K z#O`z3s;1lbD)eYHIuucGypcNMkL0Vk>3Lp~K`(rE?XdVVkB2{;wrD2)X`SI?mc zoPpk#oKLqgy&1oZ^uGK!p@p9s5O~An^2O)4%h}WBLKDr=)&-Pnzdv9Lf}zktJ5D zHMTbglhbz46Q#h<7PsO|6oXLJXzUIrLeq8Z(~zZDOCDKDB7!K-CXYu7RG~`rt`URj zhF*8*uzZ+DHB-jp&-Jrg7}SbHX_%8@7PA7^c+hA8TS$OuF4*9xUz^Le%s$0tMlY0{ zO~j<2otDpu1d(G)rAdN_7tjJ}{zz+)+h6JQn*O`a(1*;w~FG&)K>Y$NMe(s z*-Xo#W5raHmAh;u3$E5sP?Qr;gf_s9@9|4SS{ccycd_>{wU*_V(8V=j4Y#Yc^ajb9 zV+EOx?@R~}*Zt8MbVUg(ogP8|F7WjL9v164=jgT}Cr z4SE}od%aj-BX%*Cj3Ew=E(N%-`JjBQ%P2oZ2$Kw8UXwQB+q{rx>t(E{DN_?X)-l#P zbs@oh^5k6NP)=9x2qjyvV@joQgRqVflP3AqZ7l*M*e7U!4ci!TR42i{Wjmudiuo=~5Vm5yG3A#_!v@FMZ@Oj8^Z|5g6rH6)8f zGuE@wQHQ4TS6Xj&9@RP$KV56$fmBiLiUYL;+8=_Mh?os z=`0OGco(R2Q<|?&&-D`MFvf+jBatTkFdC8)km}z8YpedI?oa4p-uTy(9%sI z9Pt*g!NFBrc%p(SDe^7S*^0;*HI5mx5u7C_N<`p;*#lcN@|9Uy^EI%^I3@!Bt3X?|F$d`dk<-(LQP4_ajOgRs&bXAM6cH7iCEHYnM? zUMbI;Yg%j#MrJHAkI8kzRYet>put+ZjyHX{i9dFeos&|Acg*|7UrqyY5fDFV9)}*E zEX7ON-RlrXb9eW3TcJv*R7P-f#T)Q1D=VerqF(5#RR#)1r9*2{NgX8yLN}nBDnbfU z+xC+ZG?$n-Y6hk2xik^b%rxMEn{7;UV3Wm_A7F`@D5cWGexFqx*OD}ld3CeO&#ReX zN3YpT&>XbK^`I0v#h51~qjWAFRQ%25v`$Hvm&zu&pyA0ZZ8u$dq0yOZ2=1QWxSxw> zSoN^dB_(TJg#NZL!;rsThcC+mP04kXp35AqLa=muBgZNB6Rxl*nCzbRHC>lNJHruH z!*dhAIV|u=9|qpocs1?U7{klm5c;+3VDl`Z(B@2e&r!&?(y)8f267`}5z&r6SQY{k z+YYW?o?Vk&+KuXtR}W*}ULk_(EBxE`T>=ons`n5}UYBSS-(x~E0{ol)D8x_?WsOKY zf^W<4Gjh#qMVxfwyrN!HT=eU1G=lD99}xk|!g-bt>2A~`s8MY(p^v+kIoXZZ)*NToTChL%|x`KdLb zB5Z;bMIz*Cx2^ey%}1XR(YNz;1$u9h&u!*d!_M+s2gPKlp0Lqzi=Go#uD0$~ohbHK zd%5j1(bCq0!W(L1G#m|5P@K3?d{CZ4$_&fwBxUhbV0gewQ zx|>Lqin*WR1`?qLggmI*c;vJP?zf<-G>8tKDk__Nq#%i+oP-DyW{3BU(}ZD(CgrPi zf*j9QNSV<1YL!8l#LF#8#qe)wKyaoC~Eb%$0P8v>U20*|n)d zw}$+ahQcBjh6aWZMpQqO4}j?n`mN-Hb-O z>9tZeuatJuIHtT`YwSM%_ZHO`oCn-e;SJ^88b3(mFprhB7V=?VS}Ji^Gx)~!Oe z%vfH^cg%vcq?#H z#qVEZVM%?NiK)oiO30`~qFagik534*r> zB)8_lh9bonjM!Ltz7{r{TA;V*k}a$#F26L~yKJQ>1uBNGsOR@~l3i_eaIZ3W*Oahm zbh&EWJlcn_sjR+z9;Rb1n;Yzf~BL0~3M7%K8L zl(f_t^SnA|b_v^Fao$+XDXQZc~BQ?xL9K$)8)GW%)6D`)>N07gK$ziwsus_3RD z))m4Q`yM;i*Tg8kgOi4-d%mB`eHSo4Ujq25bRV^)@;{sPn$%IIaKdHIrHUn?)+%~ldHSGwW6LE%z8S%QmW4|Uy=`QR>TMOkLmFoTb~WjL4B0> zzC8BlKDHG15SL9aJh ztrnZkX0^aPOS?huG8pt$y?SAz-L75SsxE2EXD@`SBq?Ab)^{ zlm21dzXqF;w-aKOKtrVrBuy`M4fMZK!_ylFx9S=*pJ6=x)- z+K||uaszUU?tq&Z+$_Do;a1(Aq>q~ZB5@~e$g1av$?4WXmZs_2IJ^xbUQH@SG_gqK zq9z#`;}_qgOEg$rO;Op=V2^JTBN6emxXmzZ7^c!7r+d)ij6DiKDc`LZa-@E}u2vLp*z z+l2<3>S6VY>kSq)P)1AW+b2{{)JYs#poS(WzCtQe=+A`Egizi#D_GlVmHa}rwzfl! zAb14|^pq|biP0hkAhPfo85} zOV8mRa+v0w?YYpyvHasxRaJY|Hf5iYsP}-XYLELm<)CgN zsjVv+R};K-URs7wB`U}`T9&Xu6Q6jT*2#*0K3P7$pqZ$Xz_ahM+Pj7yS-p30*jJg5 z9no;XGtbm4`G@X;$?+25_tMS@!Sc5D%pSMovw9nr&g_10VR`2G9X;;otVwk@#XO#> zS@^+cpA&Qs+KaZVpL*YtMkz6`D%e<8ldtoK>n0qV`Och8bIWylfvkz_E?IZwM-7T2 zT2t$j8^d{0^FrKk-{$7tDMdw7dYha3nv0oCNmBmUM)_kgl`89%%Iz-L=LC~;rxSbp zC4MaA`SQy1_UCbi61CW5Dy~2kkQk~sRB^F_RIr7eK2v2+#T%ZehCqGT10IwNg>-?W zPt?t|dvYrk)i@<3!5pU)HPNamA6Ge|dz@uXV!$l~U?2=qSOVv6UfWwVZCWDVJ9Tzf z<%aL{SN!VLjt7@EWS*#>TkC^w+aoHxvE0S*fsY{7dl)?uJLfvQtf|G{FgDwqtO4{|J~1W99% zO~EsDrg|_413^%Nso+rXP>@RnLCdm+CaNA)XHN>EKS{C+3DJ?PaiKBMKU`fzO^IYW zk+ygq{dEMumX;iQ`-8Lp_HXaL{qHC8oBC(WOx1fl^{JUN`kV6M+^1tG^IxA_`QLw8 zvVT=w-KzadmOi<sQT48Jn-IRzT27fpwgsKln@Hc)$k@RzOLzz8V|^d z;H!$G_6b=*3fOb1(nQk4Cc(%AH2j%VXV)wc{F{mg7iBibZ+mu4d|fSFG@kH7hky&YLZ?F)LR`b)(4`O#u{q~a zGd>amR|tkf)GQ6bKxinmJ48Y`Q(h}n$xQkD_91GpVpJ>^2Wa3-@%dt%p*WC~Z26+8 zIB6|(`w()?~@K`@ilR}A>B`F+<6 z_;DN7Px0gTl=ceIK4pU`Vswb*Md^b*kZE-x(kFX-*NU$@uj7NukiDBlB!7k11(&kDF$3 zW|=WTK9bemvQW^FCju^yh9EhF88T2DdZJpD_08_YA@AdzSdnEswG?v zT&THJgZUbFO{j*LO5vl@%cc0$(zi-+X@F{9rZV`b>~a}?wd}1jT*gwk61Y%usRZ*S z?vhXm;X-hMp%EW)he9D@^1?^n%U=Ad_bo5>YAtx+BhO_Ie%14q2YXlwWo^GuOvWM= zbaq`(M?@yE&d~KBb}$fw++JQ@pVzK)?sa0LGtrjVn84);a3w&OfG;j2;9nDPB5^u_ zpH0A?1U!&{^$A#-fKFDxlPIAzxX%)BI&n5}AwiBM;BW#aB^D-D(1!LVcsT){1aJws zlz_Jre@x)h3D}!BnZR2TurUFP5>S(9N#K$MIJ9EF_&nR)*#vn`>+qojtW7|F0+I=s zmH;_HDLq@1mi!jV~4-1KASj}z}Gjq zFxOsog!|a|K2MOt2{r(-HvwB%k&Rk=C5cH1j1!IorW5&NcE0!|E3zkn*?c!9$asgJ zvr%10;Gb*2*sFny4WBks#d>ljh1`FFo-tP0I2w#6E!xz^r_AFC|=?Qc6rH&2~r)J-+IY{u+3 zn<;Ex;Gac7cuBDcI-jmwM+_zjMkNN1#a~=jcS=wrwMhLE*&>~lE=ZRoZa@MTP3okH z9Q#=>ozOCLCdn`1UtW~pv{sa8by+?+JYF|jo&|ZW3uF4Ys#SYRi<;CJdcFDAm__@}5 z*7Qep(~81jk0Z9CKWA(jc{Xe%RPV$^Oo5q9p@~#| zz#G6~phBqtR54V68^ns;6w!l3PwIjM~owkAWK ze4~+{TPWI-E~FW$njF)XqI%qsPbEjJ3PqT2mU(D%=4sAfuUQ+~-WZKtb@!CwOsI89 zV_w~)YDf6?_>OOk?%WPh00Ncw&mMlW=JtOatXh`pE`f_Hb}kHYg4r?f)rVA*!)Mdh1CM>o|CH*}F8IA7uEu}^<(2Af;yvP%B4gKoR=ifb z+QIkmcqzY@e}E^?^2hjp<_Z7u*coL5E&C|{G>>oN@8NM552VBeK3tAx;6<48SWB#J z)`eD1XY?3LjKrfa(PJHen6-IrqRU1#UYKXKS#vh81?F*t>o8kfW{Vl-nRrvX&g|0Z z%sgkdS_lT)BpcY6No=H}(%ZZ?Y%sq(_VTfU8SJ5$>@(JzVS#zM8PoXl$|B2*xEXY2 zj~NSQVzUu5(TT_-ds;l59wK^x^S}wuB@aI2ffmnt&lb-f4_D;@*#n)Pei}LK;gAO! zIz1O?DWZ4)4|(8>2RuxWl~<_jsYLz7>Z=|Y@C66>Ai8yxQ@o-RG+EN`gL==fLHg9DaG2o)Xt7ZHJ4#;L}O0&cs%>fn%rl% z(uV8Iq0w&xKlHOwYL9A0ARLtukqzy>$y9Lx=}m;#*XotpOP zXz1_g{X?Ut8~qVHfP(zhCQncIGwMjDCZ>sOf~T4?UqZ6QrsYk3&s)IES3XiK4yn-b*9U8|^(E8O^P}zBa*j+qj$;6*dQFte@Yrz*Qs_xms!qYD)8B zjcXRq%Dbtsv(DjjI((smNe%AuCN>TSLgY`BKl$OO%7l%sy%Y}qt$uu4{yq6m<`X_2 zH1kxmNH;jaq50WzyGs@tFj{t4DD8tm$mJMVP8G9&Srx*5{7$5^^7?$e%ZV&j-t0E} zX~?OgVQZ@swmQMd(CCqpa&;yTJ1Cdq^Jv%&^Jtw8v)g4hyLp&LtF&8rm(|LhX!j{7R!Yze|3r`oGExb@DuymOwvZNC<@j~IH zLSq9pdDUbgwXzD8LhM}1bRa!4i{^lt7|c$0 zKCvcs7Qc%#dPN)J^~9VcMmK8CB6fC1DyQ)dGG|{FGX~d2#9uO3pQE9H{nJdgC3TI< zK%|dZHiP1};oC+V(jGuI-I-Z<-#eN6Gyil4 z)MhTOffw%k!I}GE-tCz$rnxICy>L_JD1C~s55C2iQsy%d>C>HgAuGe)*Keo1!iC>b zj_GaSwZgp?=(0e>0xNmQ!@vU=2wfwS+0?D$sYKzkqUIJRYRs0b5bDkfA%J8N z@xW&uxZr`eJ#g5=nj)J#+dY^zP)_BLr-XL%kmsa_7d-I7e|rAggFVVWKCiyvImbdz zKCRL&SF!#UdT@zn5-mwI;kEm*tndnL+o`%dp!2}z9ysd(*4ocKWRV9tSgMCsA#1f7 ztJmbj-HKJ}DGxm00V?vKpVhkH!8<(%JTH34Kvr^MDk@zbHVdscrDA%Uy3+%SC+VSj zL5&ADTw?HggT-7_&Jq`uzHD-5J-k+-*5y_Go`|QzLv%!u%G4-nCUXe!6R;2D_m=K9$d z|H>Tl?3KmjC=D|@@nzb`7nGMyAP=8H{_KuKewI_3RZm_?9>yFPIHuW6q_UQ(YIcf( z-om1ytj1PYzql;J2&?|Oj9<*=Y}Yy#WcY6x zXv^=&@Wy!i8*_Cda--ZK6Q2xk)3&ui;d|wsG8S0wK3egd{E>`bm*E7fv{!ykCNpH1 zB!f$qWvt89qhs2uY?WcXyhX+fK~K;S;mKD_;#*|6*6?n&?bXJo*-Atgp=VC>*|j(J|Ul$@pD?yEi%lLm&$8pQX{u8 zIF!g(W?so;tE&E7hQsm+8IL!~N@A^C2^&1nzUx0{BLuDUE%F}uuuRs}c8MFrJ(9Xz!2jn4nx15%TW!@&wk+C61hGugC@&>$E@g}_~ zFF{_>iv@2}A(#rmQB^oxh*4pnu&R*E(8SpUWxC22LTljyY6x#F)d9ud$^`epN&3r2`ZSKm}{L%>%+|gih zU8JqC%9EdYG6g60WIlfk7E^7#XYM1nHez1Kzmf8mv@UK?$$+N0ufdOLT07fUdzR|$ zkCC4-y&XOK!iKdwQGUAoY&oea zr+OwW8Ym}+%G2doE8?(-stfHc8ZZtScN)gl<&59cWZaCyV?`B7yexWoNMAcysZb?%0j5oLqm>{0YtUd>}6T#Z| zTPHl|1kBWEJl6@+oe*-?IHae*!Yrk8HKCs>b*S6L%hcL9 z%yS&IJ@)X#!Vg%6EW0hF#nNf%w-C`1uwc#t=Peg4_=M%O<*bERw1ZPgb`)q>xw&PA znzFD;S`}Pn0nXyG$QIJbS!ygTw2}3eEn3A37U7KLyai*{Xq6>tNm&kA(w1S1VMu$N zv2Z3`pMe6ekBlGD25mQTan_8^5@__Ru4AfXo;))8=OagO-jU?^bZhg+eNsQ-in+Z= zhpH4m))_W)z#$!`sK9}ZYv$H)Z*gNB)#H89-obeM%{L*B>Iu|9XJ!+)1#qt*r>^{t zl;d61@Y`E6n=+ejW$kVs`EEm@l6O$7n&aIGnc21R?E%R@wm^Cm%Zd&%ut>0YMG-dtwZeMn+W2#g!l$^P`Z9>zs&09AwYid~c z{SAq`Z|e@isvqP11{B)XItV3pe-9-n^(P-=6u;!+~(1t|KyaVN*r4vFE{5 z@7~o7W>>x?yS^*w`Uc0>cK`!jV!FO`J);r0oH&a$pn z0J_90NjY8LQ$M;Dw!yYrGm&bP;|W|jrIUR0zA}^D+NiYf04H4~q^)xE%tiQDU? z3ke2O!TN$N1$zoessLIFIt%cH0yt9uoizDG!RZ1{DFC^krU0i4pg`lAiB=UAhy{TH zN+Y!1;R2$iH`Yy7hYNs}b3u1fcV35e&CCu!DOZ&be7>lw&$Y%yTrQn6B_K1H&H6rp zfUb|rkxTC6H9IiNHaMbLRzfK#%X+W5pBDGp8=~>PUORJc^j^nI#;+*^>*6#B&%ZbN zvx7&-C({Cfp2eNsbFj0xsi_!ukA6N*XPH;u;dBH>e|;#^|16b7otYDqov<_bQ_=H3 zm>*iEonQE~vf6A@Q!=DNAcf+g`5_XLmP^=JH?s~KEnw6GZwH=$Nt#^hibjn+s0h48 z)6sNj4op|3W7JdSQe4>PDt1LF1j?0NHBd98N-$aC`|fUfxCu8oZGCt7w)wD+B75%$ z{ZiJN|88&on-mDWBZFC9Nlsn3O`#*c38$a{N2L~4}Jov#QJKukL!GfpX-+2tk^K<7upBX(i^ybq8Qex8V zm>1}08gDim3Y(X=*I+#F1g0ZYM40ZYMa%0ZQ#KW+|`E9GB>D&HqjATs!6&(2(f+70Kf{ywbm{~a*hFZ^Y{ zHvdD9d~oRIn-9_XpMScu^Xc<+{`mQ1^7%~W*s;vz7v|4@0r(sp-bd*$h=!E;e4)D# zGYPxFK>BoRbena=p>ycG#gZZ=r2*-XbY9|Z-tHuvr-Nu_yC$BLt;z*1m(9j`Q$cF& z^aUN(6o>Sn*W*5ppd8h(hsd^jZy+5i2<+OaPevxq@O26a+Jm`Wm0;tM>j~wyVnr#= z>;*&O&aP%#!!+mRU*AYDml(l}{+`gt7nx_YHFZ%vobA_GoZy^GAFgBD-YhND2v0x(90Z4z|=wQm~%YqJR(7A z`3K?6O#41~{iks5h0)hfY#qJ04R-z!epAbM&KH*rjQ7BUnfthvqZ=697>)!fj+iNy z99Hf-Y(HVgd@*dze>@-azO6oNFyefSt;Rgcgiv>ZWRs%O8fmk%OX8zavowcB4oa^| z?@4-_)JG$4(cqY*t7l1=72Zs9Ih#~W3vZ@HUy^hNy|p{(1g9ZovDo>PtItEM&OUpN z5o_lLGz?liegd2wUX0{!cd!j1ibC4)-D|ve{H6!#mgWpCUb=Ge=9>bU*}olqSZJZ4^t=>I<-oEv18XnEe%p&K=JIIH^=s~61 zWZP*wU?a=RH6hs*B{1tN$$WMscc)B z8N8p+&k_Fe>X1bNX}#mTu{ZrM#tf?tRT#L81$oynzqYT+0$ zIB*^fFkhj?+78$SfHhy$GSQ=YJlNvfmA!wcuzQ$ieE7X=H0c}g?e_6gv|Re#?PHe~ zIhH&`Bg5JaM*SQu*I)&s@gQaB7MwH-g4qVvB%;FIjhfl{0a!TOVADDe5ej{zb~kZl^Bbo_~hsnaQd4XVzzkHS4pD0 zU@>g_GIr&+db8d1TIRUOAOl_hW^Lc|myv45Aamk@^SUQuDj%p^(9Ti#4c^L`w|6}B+JlPn z;A;;JZfSMGC!OCt`1pf^k{}{#<+K)KkCzoQ`Q49aB;p(@jckqo>2u z;~|Zd|MZBY)w{rpXWF`Lm{^cPhlHG;B@NVaHL$B8ih(m2tO#WX#cN^6U7R$5K#xP4}&*Whg3GPw2UYnTHJ)Osv~Kp6~_9V$CtM)ciDDzmU8_vun4MCvoA{EUTAag@F4Gj0QpEY?KO zxJI7kA6c~os<|Sdi~~5PoJ2rlCfwn9`~Pk0iK4cd9rETMtgjpW;=5q^>8+hFWJX_V z*!IAN(j(MddVbIE9%;FJFUABq9{&R=Z+qs-4-aSlshi5qELWjxae}nKhx|O`g=xxP zO+LR5UpeeM>$~71J-*dG?DEOJ8XtMlcg}}9eOr8cd_*gBnwG&Gz8)Xud@dh;<6hqz z?7r_BA8ynx4v$fNRylb}eaQ#wwJXLrnY}%X84+FdkppM0UGQ!8f#`#P4?bo0ekt{7 z=W0Bn?;Tj*&dkSWTw+4&7m=RVdSb)=(_8_*ZfF1H_>3$-*Gi#{C;ru-se|0 z%s%|ehFO`HOaGl6GlqXlNgJu-J1K2MF;>P*F&I4^I~%(YBL`wo6WbEQVhp$#T#CUf zu{UD)a12thf!I)txMFgwCPqGr!Pywx8-tcuXRJR)Ofi29zsXv-6eBOjV0R4qW9w-{ zq%j5o)|M-V--yA97_5%n8`~KpN(@*__;L*P&}w)f2COCQ*E)Whc5pbx#zgLABcd55 zZ8!&FY(V5%<7`0qT|jo4GvxiT#u(1d?L{^> zIi`G@b+9MKv1TsE$R1ksbd0Rd&JJshOlIw}@o-;Dl114Q!F@$f+473>a9+{Vg@t@D5)quwQ(_`HgPL>x)o~s?qEccBzF5I342vp|2-l z-StRTQ&>})m$~I@N#suq?|ich=hr*EPDeh)yLxx|l+wSMs-0V=Hpo+y7Z#)aN@OKK zt!Y4(pMfB7L01r8 z3{u53I223=hlA&Xyt~_qco(ttVLNHhzd0Z0rwq*8HdyVd$%&e&931J*-DDV{yk6V3 zxoWWFHd=BHGp1JsH*KYMh!G`}uxL)2slqZ~PMa^9IdrEY@_=}SPx6QOG|wA&{g6?I_;n;t(*~Kj zO<7<*6;i(I_}G{{`D>vR=BjCAELh`dd2oF-cQfb_z-#f2a;> z*pAaWs$)a~f<=AA0Y>(uHmsp>a>rym+5b>2)UFBi`PcaI=D@B1uJ8u}{t6_GGR1Q!sh1VtdiWdFK?f@%>(#0ZW=LhGva;yRvrwz17fRWsgq^#(gL z3GM6>8N1}yJ1G94mtFXaYPbJJs72G8y@JfH@8zy$lk41LI7(%30>%ww_WB3yXt3r> zC<2mJHXR*Y_M;Bdv`WY1>Fq_mceUnM+;nT>u3dw-`zQBKFKVi*A5Ka1LpKrdS zv%%#4F4OPmTJEB-oq#qg3qnP}`yQwEkl9h-nBth_;I`W!%u(|g3v2QxOvsm!tjJiA zQ}QACyv$|EwF)a3W5FBTN$&I;rw@`{SKe6uy=}{<2RA-c)Ho?hXFuz)h4218l3c&%Xg@yo z*y6|U-#E0V_ko9Vvvl}=_}zJr+<)IgPxOr6QKPhIq4wXB9~6rw8@tSVQE8&)-a_{Z zH@1s3be9=68R2dn+(p2;21!U#B&WEi6$k(o()!zQxAiI2a_T86#jmu`t?3?6vPwJaFV_BmQAAUY_OEUi>^V04Q4$Pf<;Dg<}KRmc#!NCuij30X~GYhtBzMV2CSAOLUu!D;;R~zp& zVxv+NR68lU7Rc?ZUCfqqy27TgKa4YH!xzGMb@<-!&M=X~@M8E}7{3^PC44zd_JqL{ zhF?X(tHU^~9Q%P9R=)d!+Rsw`;YgS~^ARnDPlwNju|M3w8t7p~Yr-vI%o@O3vyl~qS zsS2avU+yUQ<|AY{cV~zB-?q^;Do5`r6F2b;wRComy~N&T=RyU*``!MKpM*TXd)?lU zmr(vgNzG=Hx)Fnbk9i^@C6Ttsipa(Y_jv^VH3Bdk0qufY*VGm@838ULM`|K15w3xY zKsLB1aw2j%av^dlVh|$~%n>D$iVQ@~M|fXP6}5k`ff;9pa=Fh|Qe1Mdgp`yNx%y0^ zXyS_ch_*SWZ2>ee-$eHKaNl6==5n9L>LR&4fU5@;LYh+#*NQ0kH(xA}m8m?p{>$A5 z$4;bR2`qTvquZwYTYt8i9Vni?^`#}TB@3oGkHDu7ww2V}{Nj~=gcS4!3Nq)Pi`7p3 z_Q;Fh|I?1i7FV7L?#rJvDYtLK_T-LH-NFY`mE?NU787ovw)_P`>J06Mn+?PW5Xu9C z9_9&H-^~#h$B}!yJG@VNi5C-tfCXZ}0u_>kTK9s1P$P#{;y4$F%^ZVqoz0Uk|JAxnB$~V>K zXOz(i{#yLpw=#{_Hq}NS#&>IW;l9i#I7MxAJ>0Dn>pASgEw~eNW^58*^nw6q1UMm_ z7Vsef1nrdKr04B*XDJwHb6Bx)0`j35Xc6Mf2w&9PIb~+Msuy&EN0=nE3Ebt+1)!_; zc5c<46=1!#F1f`T`7hN$C&J3mWqDfz^w7!w_>;OZ8&u+dcwe2sO3`<@)!6^Jo#tssPK>?eD=AzkYB-L7CZj&r`p-z&{7D|~;b9dIllV3svoi&lw*NmGXgTG;Gb*nWbV5=Pt+&#M&`Om3hFtgU3pC zjE&7&*2zhe)ib$v%vCise4f9^6RcG)mb2A;zCzW;zr?@F69eq8LhRjxA_j~IYJOAO z`JprzVcVwkH+RxCOONb4(qJTV)nKQqA7Ph^BH8;zZ1+Q>RJx*ZA}xF^F_Uk~6w~I* zs2+ZvZ=p7o72U6h=6X+|TB~c-EzpsLI?yq7)#1!nMKLMjq&Og^#fu_mVIJz3$FEvA z#pP2uqtO6&TD1!`0qsi706v7%*g(ZTZ{2_h0h3Y|JLp8Gt8l5+cMI&NY?UlFe5@EG`Q|vST`74>|I!NLhc|n zwBW;mBkLO*HXh%!_Dq_cVP-YKYGkjS=UO$%EjMW-uL94Q{0}M zSruJ)_l()=XP1fwynlbDlQZb~+&dv~1K&omW7a7e`Lj~$53o%GwyPAzKf?bDe~EPh z&ZDV_hbbv)8DoV2ftSb9KQvfWz#O}_#eC&acAQPy2pWudC5ZR;!|#^5_-;+-@s7RE zGZ13&Jj0@ zFNvRuy7$B}krIWXp(59Ki2e?XBp?onyO~4djCh_QD0>sd@rtObJw=!HRBR@zYFtBU zkatsTuxS@Vg}x_e}|HG zl_5)Y+VMO3jQ48i@2H}4!{wMkb{m(fJlDUXf=@p-`eA(Zy(e(d3D^sdrsDn zm@uIagic*F8)v2?{w%4pjYXzIvX6?Xj_A%S;!fV5yEq2Cu!*293W^ z53-vs;};o;wmq+H&STIhrGya*dr8p$tX;Xk|IY8<)jWUa$)z1nCZ6S>Lkb%%de$ z(bTsy4dDfwI}d+5KX3OR_Rm4uJEz9&@~aKunk}<0XuO$g!WQ+uc@B0rq~4! zxW4VeVm0ilK3I)i)vju5(VB-0dnr?E7u%EVIN3hXo^HR`&Xuj%ZryLi?3kUMNb9Cf zt*oPVy4x4>ZS_6w<9+(db%M!fDmQI6?KklT6NTbp?Ieii%4x{$P-@;BZBw6O%82IA zY0yr=xODm=qIpc&Yh~)#J<6OV`BfYLtMTotdnR=?Pk8%-x8EMRuQ!IKk#p9qGDdel?Sbkp+kxZc$r2&4lz zP;LQB4~mQNs<;wQ#?x_~Io?#&w7Urp(4Rw1>83MHd=sN!HPx?1n?7yAwkD`WO#xae z)im71PZpb!>=4`Tri)EPq2U2q?M&18Cf!6w>JU45A^B4Ej$ofIC6Pd1kwbH}(67BA zIylk*8o_6+f6bZO%LstxMd(5_#7H0U;_Wse+Z7Ze+M}J9m1qk1CXXanBc2Q*Bh8fK(=hRw+n)z$nZvNJ-4LY`0 zvjU#yiplfZJB8bnDqR3qQNBBXIU6p<*np{U2~gc5g*b%2KSX)9?)$}huu%XhX7T@Y z_AT&H75Dx#bI#d!_H{P9*(96Ykaw13!){LABquQ>3xQ-I8^A!`**t)dG`m2-nncA1 z6(qJ41+<{0Tt)aBl;X1*t$OPfYHo{qTSanP+S^wu^!ja;nr^IGP)&ufvsrw1M+YOKV54_AoS zaa~Y>1~CD+)CNDNP(UT40i@dzHSL-snrRISB?J^aE^%?JYAf1HhB*8mDdq;@V!EwM zgm^?D1`k&}8C}Ut;msAqAIZtEv--rYrVNxb0OOqfm`9K?DcElWvVKnLS>DlQ_e)6EE#8?t2L4lH?l8KVbB`oeuEtWwr zO5i#3^A|4Sq%x_gS&3nj)9SHS5YrixJu9rhla2j&0>>$(W`1L5DXBFYKP31K zfGRPP`57;@X{y=9%Hkney-SjFKngudVSsR*swx{g(mi}^K**@+h}^Mc?cVCj6yD<# z>^0k)3%RO;HwSlz3gJ_?ZBMRPS6a2RJh7~kIof-8V`1Q5qR~^gy>)P)+G#TVc3iF3 za-};)V2Uo>f?3TFZSc`=a$%edG7#kbkY{)cbLNRkFb1IWb zCc1=BVFB%)U%}<w(S7%6QNt-?l|;Z}Hj|}K9`1$| zW~({fTw`8s?lCK_nBi~C@VpuJn75jbna`NtFmpjOB>w1KGo*ovE0_3*H>x%V&B$wp z&}D`eBH)I_7IVJ2+q}l}x+Fd`-oSmhLrF;A>XARIKABwwidk0hOj?T>J0>LM~vm?QN*K z^}9*smFCZWjXS9_P8I)IpI!lN(NTG$p0@vPRL^`DmyrqTo&zSFESE~}SBdzR&%<;c znt90b@Cpy#<$uGY)718HQaskM${*mNm#^ZHg-_*?f`=dT@H~HsM|bgO_&0cFn1?XH zxAQ2UujY}Fcku{ERCJnujlaS(<2;P;J9$JoSf21Or?CgZ9w<*T9v$K*_(^_>XH}dQ z=}iit9#f7hky6JR_kzQ?{>K1DWRQw6XpCyDUS;Bt5-6aaSUTqE7#&g6JKI7)7x8-L zY>W4T7vD^_VrpA(102j8;0tjjxCne9$M~2uTMSgD@hLo)k=8B3Qujk1xLAyyhRen1 zk30{#qpyq5&t~m?71lHqn$**I)K(9BJ}dH>Mw+0D%9!P)Ld9)IM>BgYPZ{~>ecO^X(Z=>|i(xMoPC&(`?a>Daby+crD4ZM$RJwrx8dJL%ZA?PQYgeedtS zGjnInAGL~m*WT+nRqH&b@R@nd_S!FGlzqQiHZcb|VPH4`F*gTIHZh{c&G>zMM@h?l zi;N@x&W%>-3#5_c8{Cf|^R{~EC6n>I)SXR;05UjfWH+!z6Sd!e%lk;lMj2ehcCGUX z&B)Cwo(e~r#YT)N%=-|K4Tk9~KKM89VEFNk%4B=mr8H)1tM8+Ggdp%YtXN)L=VqKR zq{}(UpI{euf|?krN}FYJx9jwvcf}T8wxv(W3j-MOI@GTEp-t(^X7oDRup6V)h*G;u zZ(Pt-;{5X*Dk-%#0hA)D>sL}XS4HC}%F-V4fB_XYwu#=wmRl@>-jXc=rWWoGdTT6N zDs-Yza9Kz3>!tBpFH+Fd-E-X#tW9PBl3t{$;s8?e3E3<|cnOgwAv5?BYxFF$*g2-c zq}`+nN+NL4^oCghAj~>N|6wLDej;3usEEpa-<_Cl0Eie|+;BjO2SF^!*+nyw5rRcJJE(oGIx3gFw~X2(C5OoNy0ICrLD zFwa=}#GvNP5gWwH#i#L*i$j#~pb=Fx;|7ga-%zxBsg0=TKPFm{U7kIxJU8Bn!9vBB)a<+PxQc%}td0OMTPieWSvCUN1%c%;C(B!zc8 z+;y|E*@7BJ3gf3x&(Qp6B|gYrjTXtLKHpNgL|zqljA1(cI5jU%ox}A7$@b(wA=~J-H|5L z({#7cF)zk+!!?SCmt2Xdf&(4Zs!bAP$Ox|rr}XwG)na0gu@dO)(LI+(Yf*pEb;_;X z+}pcSHT$%}cDYs44AisT{(a1k=8m0V=qSIg_NKJiluuFJikdR-qMd6kC+BuAXPeeM z3>z$%M=9K6vC_#-P(V9`Olq0Dt2U8LzON(;3y*5#K_y~LIor63`b*w!OC~%n>A9bp zw7P&YK(f|Q*IA-(@Gjt@HDzM5TL-CiC7nOCxvTTh*v5o{R8cy~dV6t`UQV(q{(0C_ zzH8w6rtHI0D-*Z_Cr@DsVF*N_dMV%QQ>Nu4#GIR^tffqDE4roViX;S?r37cE`-7HR zH2{;HvJRjr6Wd@&?JQ80VD8S{b2_THzsrI8(6-itm>h||;!a$7*oMZB)IC311owO! z#ruL3h2B-l>+_^~i`^X61hBY&9ryv`74yO6ykb7fn%9`uz+`HAbDZb(7iZgg)FIe| z^J`2dK85f69v@6THnL8WU>;2f$$89GW)tJNB4?5wxytmUjQF7^(E0k@Co?DMik(J` z%qt#fAY3Ld%Y)Cr&j$;A^m0QZwpYZpM0jY7k&dghFh$ID{Exa+{4BtN9tYN)__qVp z{Yus}#5&%OHQ6pv`Zq`mlap)L?gRFktrHtzPMm^ByOz~Fi7dfMyTbs7QMcuh8Gk&4 zIeM?djg&rmG7%~Nhxi{yD^6mClJZ$hfK%fZxD8Di#YgBktc|sPE$+0#Mx_ZPfqw>T z9kF+286#*|mueb{-1(Koi=^S@i4q){_bRPbn+iq~)e`g+?#r+Wv9D-L1p;GE$TXT= zuc@`d6(C0;<+b)Fh{IhR6K9!)5v!ow%`poB`t;x2oe|s9jZ}4~`6@xG9};K^OAPhV z+VB(nIrR!}3QClZ)KK;B3wR>)2^(bK1=$UCGc5r*N3{*vk?E5y3LosLt>J7~C;Q!Y zMzT-4=fq`hDxD6{LR@8e48>d_WH+p9Y|!#xuq0iBV30E%6kmYNjWl|wn^EWWGjG@ zM+BX&jss%N6){aZHx{|H#ohVZsKtCaOF8H+aHO7r3+a+FIQer^_2bc`RBI7ebe7dp z&&Z&jJbeX*&Ry2Dx~v2HRMPjWu8F^16LH=Z7Q&?G>GJih>>IgJP~U+sn3Xp(amAd8C2UHnZ6zb4|>gwK*| zkVUw`xQ>t&J%4ua7E+r=$L-B!eWl`y6(z|bm?uEZ{^gHG&DFv-<8zkcc{^_9F=$bk zo`Ipfv4>t{oqvX{kfJWE$=XRYl2*?aV2ig(BP$? zzG=;@V=-Pp(tS`!_Cnpkr{pnwMY|WLoN*EKbB2W^tNS&XIG5v4=(WIF4WQ6+W*c=W<^qVvV`hEti4C341ODUK*Iqt$hGtjo6KP(KjsPgp_4K)w$syJ6RY&h5k6@)WbsWe!yI}Nz6Q$lAfTPf#|${EX*KsKnMD`O#^ zW~>l*_}bIwlpaS$iaunixRKYPGIB;45PXAo z`sW>XE-hCXR>^2%UppaNIWwrkOe99oNktLGTLzpiE>o+{Z4ez5jMRXUQl{*0$2Apb z13<^19h$x#Rqx_U&OkWhQ6iM@q}$q|lo0$8ZfwqQI`eBhE+;52Pbnoe*OVMiP4!GK%iAwk9dstc zy8iy%;BdK%Zhu5*YcUa?#3@@1Kg841RMF2pXU}PUIa7Ek#P}OqT*mydu3j>si1}vR z0wGV{P(uHN&S)dTA)NQKv=OM1|J4jr9*%n6|0h2jX$Ak##8TR@IJ|@%( zK~p|U5F7XU+Cj0lnzY4x4+y+3*+@OGrR8;tRhmyC)bgMeVw3orAbbxm95nHZ8JXX^ zs9^Ce_y+`L)rDL;OvKE^Dnx@-t+7Le8sO?Y9{@7Mny+NsA^R(J-m^qQz+tjT9DPB0 zi^70oGZfsl2V!e#D&+r4oxz(}#_-zLr-fKT9C| zY7Rb<8?hBO1H}lfCn=w9#I4t#NFn1!`L^M<)jdd%lE4XgEx-jN8{UX;#;yuJv~W$I zFWkodtdKQ|C5UoSKM;Y?2zz+9N~YPj{d@vyKV3I@@zx|tyuF8_--`lj>up}W$ubb9 z5r1;w@!g=z5kP^Nl1JH}?W?@kGhx$yEj3+2j`#f$2e3kQ1~<*D`Nc;$+^&nV%|*XG zbj(J?h2Mck=K%yJ3M}RpP)oRZYXR)~l;^7aB-TPfX9Ip^1i-^DaPBcJi+GwF$_#cz zAx`V5(ISR$=jQ_hd8G{i1ChTMStDTD10P1%{7k!35`#3;`O}Tke>2!&ljLxN+!ZKb zlS9lwb{DZLpE;5Li5}PE=O4mZhF2ok4I{nM7 zBx2^Te%T&4%wyceU9Q*|tk=w5Voa7L`;C`a)*Os?XK_eHF%`?zoCA`|Ijmd9+t9Z3 zQy@E!MM=~V^{AEIr4^LKg=NNHM?|0Z+N!I`we1M)p)3RMVT?wl-zk$GLZbSY@_+GM z^cyhecRC%UEX#HWD24X$-JuK&X~H@B+wdvBz2pkpg2OJONRD-(9B`iIIv08v9gjv* z+Nh0Kft`Wj38ywfl>$LVsIXA7lBJr15%NydCiT{pWf%P>oXa#8^FPUG$Y7FwpYoYE z73Me%(F4-P_SNlYV_;_Bws#9a9Ec?(EctC{3KVHzt{;GozuDN*I&Xt!7lo%JeS30H zIU#i`>%nYW2{LG!Q}na(Sr5tXL}=+b)bHHf*|&|JP%Xd{R1!F> z=_&HksbQ>6WMnZS(5ke7MtTItgUdfmA_3xfX{kM%6G-?odCsxS+-I>O?i`;Iw?M&F z8pEGkQWv3t{#F#ZwoVv`vzh~H*2qZTT>x`HjAAc~V#(_hv6DCCW07(_aaFeKb@_rc z_hfEDIMapOQ9p9hc)?EU&)=;VO>aT@k(Hf}M(W?lC?@)Tb}0(vsta2o)mYYQZDd~a zzS*11&fBTn*j+E8Rah3Bbai&W?vgPYM@wv}N-M=3_e_=;7!^*pSyPV4W%Xp>u0R6GM{v50j~<8{?-%x{>KhiD z@n1MRLw1;3dl!YEm#Sw9IB*)c_@awca~Ph_@ti1-OXY{`uLvNNBlaT>a|qcH*%jEK zobzVGfWjwmKWpA=`8%kV!&O4g(FM^B(4|0JhWTpljY?#WR}qG>{FcP2{&smj5q%;j z3F`>x%9GNr|822uBqnDbsUzb3H5_8_#;Qy6o9BL>L>R6m7DUOGIp@cl$eeLYM2C)` zb*mvaUldcGZ2YF6Vec4SZbGTnPUP)A(Nk#9|U3ftzuWO$lFo%!(S&DA&?qT?L@UnDg-8$sLHK+_0)gT~bW8^w){g_OFSCTT)a+J2NR z3HQ?Pi>HCUSS}VBENTExJenDvCX6r330v>lIvwjq<q&a6ZCTP^z?S{cTKGkRhxfFDX*?vPS#LM=>;4xKZ5%#fqBt7qCKL$AyPJbT@i zBF`_V5vN#PQmdQvsr~z%*tB@sy|=Yow#sYf;$qT#rK#$jn|#(7JXxE)-toM{4rNj< zIQ6=6<@QA$e=+}}N0u%(^fvVMn@b&EUmufz08}4YJw~~qCre>n%eW%V9+C@4 zd7y7)5=Ez=xf`nHaSTQ?IBhqiq;Q!m{X~cWC&TZ}GrVac&~H`Zs%F8@bocij$?ugt zh=5clqe5?Vb!djGfnlI4HYot($-@_Z4QDTh1HS0D8mS#|l;V>(NSw;nks~!G)xgD; z9)Efyf2>P8xf@MLn5?_1QG=|Ukws2pa~bjT2W@7fJY7I><$zRH+St5XLN8n>i4uuc zkGt&3w{lr7s~BAKW0oAlF1VEH+kfFn%x3R>9FW;aEzzAA-K8*ykeMix8k%T&0_s;! z-K`)V>8-Uqv$F_9FB`9zA5BxL072Wq*pb8fg<02!0ac%NFoxz+R62Drn- zk-U{mdU!@FIbG{K9xlFP_R_qa^-am2;Siz9kmgeNM|NNq7sK7M?v_iycwn?U>90g) zm(x#~c{=Tsrxu_i>-^S=3cunJ+W_tsd1kn7gf8|km>0Q`c(TKh*ymb{tfqK*Rk>SV z58KTF!2trb>pHzwz3j2;oC4veUxiLfdF;8}!+sjYXHtL`5${+ttN9sx*>AR*V+joS z^czzSmZo`k%L(hyS^o8UQ=kRw1EDcrcBXioby?9Fm$iVca$M;`xwfo$&h12ndB06> zeHks8N8_`^Yo(^wwf#Dxbhu&uuH(6)aDB!6y^}dCdCWT^Jp8q%stz|&2h*D+mtwoG zKdXO}vuoRxa3ro_72OeADoV18^0^Q=9mO+6J{}|aWw!xz_Lbq}YgJ~b{!UG4ne4U2 zcCXfB(vr@!Pcn@J4{Gp4KRCuNK&H!@~>c0 z7j|ugDnRkd2fGL5qND`31W1iA0Ju3wXQ9aWF2|T4H6z4}*x`n#;>>`>^pi##5H$7N zjno5AcQ{g&{e?6?iPXc31;4rgU8uhtafAx7=Sf}gpAQqBfA4&c{lLz(R&fz6=(}$j zOHWogDuZ$fWN`@&(qe^%frW-~5qbe-J#710KevZ|e0&i8Q?)I}#?-+)m)YLY%}Dgz zjv?6h&Rs6hslnm|H6I8;#RttzlkJ5HGM@oa1M{Bx418$7AOG}Mg4kSyXp_|@t5$3V z2h@X!a}2DjH^T1Whg>-qvbD{2^h3^OT85fZax8-9(7SCe?d07o{*0$9U0FkoA={8W z-i|^C!4k@yFev?v7z@P7A!DqDd>1w(3_SLA0fmmr>h7;|lfP}l%k#@AnUH#k1(rUw z$6G(iYSRw@XA=C(r(xZ%k$V?m;Qma^2Uf$pwF4?d?~a9&vb*KLDJ0@Swb4x(kHi0o zoC3D~>HowobcxLr#ebGA>BhS4O>-u*bJ^#m_d*$vO?0OGQl(jg_39#@Y_YAC6Wey@ zk5dDo(5VX^g!h}@n>dAcZ-qj;reOlXezlrLsr}C znZf+28q4mdL*_vFR(~nAZS>2+#9ZbEUuVSF1hqQPhIaI2lvnYcSmND zvuOJHhTou3UKW?l)6-f8E|Hr95$o(;r0({oV;aBMV)n7t&YZ2QCY)D(+eu4&?WfkQ zl3$NInQRzOdtjMa4oY2MK4ed~sL$w_TI=8LuS=QfVLK*=@E_McFcK+MM;5cM>R)u+ zvj2gOkpZ0r5;UyBaS~@IG!~Q;No|m{V95U7C@dpbS-+t0>U=)15^aub)p$ksp>u0E zF~%IB8oyr(ZxI(~f$$D4t*m1iKVxDl0LQfLBpN?to49n@h%N#h0igK9-Uk6RJ8-wy zFVfm&y?(U3{N!uDoDXJtey@n1o15VRtedL|BdOkasFK>-09 zR}E@<*8c-=qhtO8xY29T{)_j$#|B~yqcK{Eh7vw{NJJ59A=U=S3ysEe_$R-pcHs^OLw(c*$uQzv)mRTP@93D@FwhK5Z zdJlJ$3-`pUzgV;1RL5p7YiVV>htynOxGi~p^B#zM%`MF0+D2u0HD;VdHwxV3dyCx% zvrk{@K~{94%rO?cXc)h9pTHf#+6L`4H^yx)NO;W=O;;~`^`9Nng?mOhO?x1I zFN!Peg~s&mWp^Rbof9PCZFH{eUAr0eS0|Swt;_o<(W_C)8@T%~tu4iuCskH5CbzTI zbd>KnP6{u8laj}es?7!7k+;;?-2fFDf4l1*6uoVdRog0UGq=0m9i$KL4bX}x|I!$> zW7<(RX}x*aJT~LxpIx#ZYbqlC*P+VzpJ)013`trACw<57@u_IFzSIBC|8MfzSJ^+rweLFCFWGPTe{_5i z*uJT4%q;(s{U*VE>ty>TxP8_ATR;03aqe68Tjn1f|3i%XNA8PK_wV>y{yTh=+`i*) zg57ufFWVr#^?ir$^6&WD-tYAPw)?y7zx(;F`*+)~_7L=J|DoW0+wooZ@Am)OhwrlQ z{I?C?>2Jy$!&Ce0n6zK+QY7=-YTu0*a2LgRxH zWb5DoJv3^F6cRGi8phrc2hgpuHdq^2pY3?#^>+lvBx$%DK6Hs{yKP&5q0ee-6%AIWUa#-Kc=etY`XLv=6aBTM3yCY>GWs zMXs*~iL@#}37i`c(OR8sEWJ97z3LD@6M`M`w~M6ue|Udv;|S3(4J#2^ytuChvqy0qAqglXn_V0*x7wau ze(FRC6l?dw@ZTxi(f9wzpYj20%*SC0;qiYEI9phO3l1zet3R@m?*iur`(l(q@DBqp z_D)wVyi&PCzn>N>uSIx;RBdd4`eF-+&e%Z&gZQ1|y#b*J!1nUf(-I{sWd}i2lP16K zwMS~Q>Wc|h$6()TG(dd9bqB-bTow$O@F(X+t)a%icg2X*{GfgYEif4-gEGZliE@rz zI0-KA`atFR0zi7*hq{}75T^qcE5^Ue_ao?pEnU7l z&&upHE{QV@m6ck(Mfama$UyM-`q~P+#KhT&+I6ZDBL(HCWLUm%AaLt87CUDGGL#{k zRmZ$O3&tHsWsm_n!>r$noM19j)-3bnK>$LiKpLzQBHtsmPnBJ$4~BI$BaKt(e8H*( zMS<}qsX0Yy+Gu22k7WIH#h;(0JVcS*%BXRZe6QG6MDMy4{&c&X^doCFF4mO^19qu-)$Op)h@B-vKjI~H$3Rv1TIhi}Jm@kk=nC1_E*rF?KHB z<_iaSA|`Mw!<+vSKk(~sUVAuKo-fD!b)=}E;O?Z{dE}vZuo7=gfwWbeHOoZ?XH?rl zkw&EG>8a`0sn3n7wmCSms%dO1+PtN?!g!;&CrzltTx6$)I=bYF@{E^GEAHRBzBIML zXAL~1(oj*9l*549@aCsl{HPeYavQ{dwdBt2u%@i6G-`+%wxS-I(2so!zPM(}Ri8j< za_K1of=O#FG7I8Xs)oujVO#)W&_wWMnZi}O>T050T=*>zg_4cVNpm0sX;soe^jW0y zj|+vTGjCR6>}?qbBt^Amrb%0=>2Us(ex?ZE2W;pREIxF9!xx7;b4`(NgOrPFJY49Enir*Z-xtx0S6Ypb__yr=)fn~kXXAG zVfH3We-gUxIMz3-rfJX}(GKHE5D6I`K8z%63rIv~`L+J;$Qz8&HbO$eslGntAxiHTv zz8{s`{t9$n7(w6>(!EH?BD{O#Mt6u9h#y+C_tS^BsmSjh?aI^4Q9uIlH?X^KY0@Q# zX}=L_2AQnE?iZpk1sjpH1-F^WTY~;H8XEch2n6PQxVg{mHbyG*gP;F(JWNfzQiXz? z351mCBr%p3`Zpfq;#{p5O)Bn)NU#?RIQy^p)=Px~-!{F*Gzq9xF9#KI{r0vYZ}Z*d z)LgBi&JQGkkj~&EmDD3|vMIxm^1;rndq1U{_%e%`v2hz98 z7y8TOw}B7*PXJz*d01s{pMa7XR7Bv!>)0MeuuqRfbe z%!sw7puBq3Vb1+|Z$f4bfO&|8<($JNw^z1?DFrO?K%edN*ye?yf8+FPTD5v_Bs5yM zOd$iqmny)P{1WNo27_EkF>yI3tF)d_A;hNd|# z4t?yVrND_kMB;&)$Y;J~ODxKJgXCF1K{a7CnQF3L#Qcxdkl-u1`t5*tWwf+ zR^zf@P7X67g=Xa@&7d~)7YzCq&Ul!&ZvfDy7zJlLmc*}O53Uc(meS77UQFF2-HhIJ z-X?VuX$sVb8yv|Ws_N3 zM&?fgJI9s38kT>G;zZX~nlC6M8t2Ic;N@eqkSH@FZI-oWA!F5&)#|N#cZeZ9Og!R6 zH#03=&)Bp*&vv+Lhqqw6`y*Iw(oVBISvpLKo~7)U?`X<5Y<0!Q`tqRzSQ-_QQ#ToT z31qvmxbrQi5PQC8OkA5VO3uU0{xdWycEGbex=D5n%TT+_rWnDaL!m;ir|oGlmJQ;i4%!hi3W+u6wG01x^)8hNc;J0D@Wtw4Al;pY4nkEU;t20^%ZG$Z;j^?^>+PTulJ^7Z zn3Ta1r;M@GA$RQ|9Idu1gtK+DnmC>VwnFBc5}KeEo=-(^)SB|EYVD1@WUOZ5j51d> zAQM6?lQ@JIRKs8<7`7IbsK`Aeu6{qEbfDQ{ql``6J3r>`^jr z=(ryHUv7D;VJMl9Y-UJQDB3D~i2pETENBLs&7wE?C3#VWYn@K-eOMc16g@|B^UUW= z#K^^)b)L1n$Yf%|pGY{Xm-5=pYA70}N|1v{FBM*wnOM zhlhZNxQo_{s;&WkAsh!jyx|pniaWam;V_hq`DYkTH5_RF7s7;wCWrY}=xsQ?fOsQO zfR{o5S5H&ONuHEZB7H++2+k8|!#K+OXis4~!SZHzGL-DSi-{AQNFX zH$*)89XHfg5r`vRkYE?7et?0)IOq580+}LOW^|`NhFpBbzMsV00l%3Y5H*BU34fC5 z*M}@4`AJB?d1g6#%Jjbqp&{f3Gr{i?h!DVW=pbz8xGHwwF$nIYgxJ+D5$|BY$EY`` zVj;PNy$Yj*cBoP@s8jA>#)i9OI%T@l(j=>x-r#LiI56W=S~#}w&GxG+eIV7VC`l(I zA&40HqZ#d#y=`{5Igmahuq3{~shWt23Q?zkRA+6J&GrmKlZ^;lFSKC8eo7QH#GgG= z=$pa&@&nWBB`PVkx7M3ThW!Gyybx=i1=RDWp@h#$AZ1Wrl-6^>0P)DVoRp+%W@azH zc_qXi=|C2G=#|~_X>U?)`8oJ#ivblQn4_Ap^sctF@hW zznqbkE28>8gkw~J{^sonx3ogYA?pw;(Yp@jm6ZuI(zR=5ybzlY@=&Ha?!A`=OpQhh3q@!9WbTA6j33M-VNIZk5w}*wS zp}{w$pIgiGg$0T01$akhAK?YwdBvy7d!;F4Dch_iT36!AOUTHmo|^2)QAnL~HOL#m zE5HQIfKbQmND0v-Di^5I>b3kRF1zq_tW?xc(tY}E$_AHGyFIh9mc$3bR`~PsYojK` z@2}{-1t;&OQ>Sv6~ zEc6Jjta`5pY?tN(i`Kvesb-_IkLB!B1%diBNY6rHcz(=?`F&zO~DF;-ec5wT( zuP+sKc7&~P?8)3tnHrLgKXCSQlt$0iah8$*S|_b!I@SRm)wZlb?9rEe`Bl;Ru4wL2 zZp8?~f9{*FhWfx7xtO=vr^pqTQi>6?=CbK+^p$OtpM~8S74Nu%@WK zFOuqTrM<~;Znu$xSB+*YDi}UOnD9%F{P4L z1*Ah;LhtdFM@6-gzZtA^^N43K=Ft69L{Bl^(S39!Q*skw3t4v&QW7;tfSq2t6(tn1 z4Hr67Dd}XHC}idrU`5Ybh^WR%B&e*Ue$^`PCo8CeTI$0~cIH~r?ka5&*~&7cE=SMV z;#pd(KQg{k1w3=3lx=3|TGOP=aG0d%ig4dm#yLv4I6fBq_N<`}A;p3TdZb-W+gGPs zq?kaxTp1X8AAa(JY1Do#n?8>2Y`}#=HTrPdWV(xySdlx~)Mp5Q z1Jt%7d??~#d`@Ygf|c0u(VP}8w&dQO{JbvId1D`V+ymLBKKb|t#tqhWsMDnLuoJ`3 zN=RlSG&5nTs{*K#65Sbp+mYEwwQ`b#^A~>6U5-kF0Y+VNXSLf13XQbcU4W;e9myJt ze!j7)xLpCGaNn|_4g$1q3Fu0?1b)YXR)f8k+dzbCjhSBlV|je{S}owi_Tz79=z)=9 zo}qAlubbl8rqHrak9bJ6(2Cq2wGB8bHw>OJ+r-L=vym?7zQmtt9?WRReAO002(;pV zW0*+noI_>urgde++F^F;G@XX<}h;UHjCm+YKZ>?~*? z=o`mxQb0(f>ldW5LfSLZd%(@S9eKM?DvmqC>D8oG;p%G^-EG}97|gDbk)D}&+J?I+ z3;AGFMwWSAg~(~w*Bq^l)!s+LD&I~00MWhNOYCyGQac)8d`q~MV9 zep|hge4Jp^h+vQ9I<+VhW6S!LPPO_pP>AoF9nr4+Yf&WTtl6gS5f7ePrR)VgWn`R` z1J}S%h~y8Qn2#|4P;Wo$$C(a8#!*;2DbNy=Rgq4se z=?94jsid_zbo+#X6@h(bIEMjEd<}`;#6|F2-MWIAj*qC99CxFX$iQk2zmvk)BPY+& z_USwHWS$~fUr4hv6fCBxnAs{p?ps;lJ3o-zs#u8fxg}&^;kS@o-|WR*-^XT2KCzH%gYe&s`d^=5R(7+{89yX37iU=3T_?xlM{en z|BIdpa}pEH-=j7WmZm5|H&3MTj$;m3QW{;!L6*0BGM$sRbC&%+R+_SzJ;o{HtSLjr-_ii(>8!>qZdxeG^+xWoivqo^uZ#7mR%G*vHlu02qFfCANG?S<_8zER2&OM{{ zZWgO_=$;$eX7ek{>q!pR*6w`Vi)b9+t?_HWc8#bny6L4uHl60kg042!MEW{GSq@DH z_qL7dgIBq;pWahtBnIE;lELP=#nk>C1!fy(=YahJDd~Qq1#ALsci}MsH3QjAFNR_{ zhR&|5Bc7&c!@gZ|gvhlh9d6atg@^PSR}U9)ZSuSFtm&V{VE3q^k-RA0@J>0pbpLoM ze)ufZn9WkVjWhz3jTld3zN>Uf&!$LHHYadde~fXMcd7cl%XE}wHE~Pg{j@9A@Z#(J zdq=YScZr?y#_Gr}OZRHt1vsg|8aj<{#c-6ivNKVGm3oIJAbT1Jv@x>`bdy>|$NZ>$ z$GYW?v=zy;Y3@M3#TOt)d3Vm78Pb)HYs#QtzcGavHOmMsGpfdAq?9c^(_j*C(yq8^ ziCrj8G~+NcIRj(R^0;o*vd5ufzQBkRTDO?emj*CTQ&c=mLP~>50*P6cNl+IP_|%M=`?Mb)!}|$nS9J7j~lFLUTZ%{NQJW=!>{y-a7Tl-HKI;|Pr*P^KrlzCNS^qCdTY4s~A7-d&^ zi(&S$v}rOuVY}!V{hoQ&Nr3Tmu-(NQ{2?@@lgyQ{wjVtoq#tg7gAjPmy`M0q^SpYM zI>j0?xc2Agskhy1qPkYGS2xZn_W9D9 zB?coly%uvV2@c?(A7-nYORa`oJwhu}d+?gU1>i;fMY(lm<}t%5bOfMFUP3gfNVc5> z=80?jF0)shrbO7Wj0`)aWm!2A!CX5avQ2;26|S_knovSV-{Ka}A#5srd+zHnoBeh8mClxSd$1|SG`AP&QWi6z~nd+lh}sj(Ea z>Y;pqHmoA41t8NstXBRF;%)*5zcfvf$JjGOpes?eYJ4A^vGMApk>DdO+QX4219YC4 zZQ*AV1}~AI^BWv=n;5;U4uL^<^t(FI!GbrFn{);qDqcc^#z6@;|A^Z?3b(BBkOma4 zkFK}c2-?xB1SvcEV56h>=9nsUwdb4MfL}qZUt5{nq(NLoyu=4zjqtFklK?dKODeQc z#{6%*o&(<6JcSpaLH96P6*kCuNxG@JDJ^VBiVY(x?qG}6B*W5;#RM+m zhV}?=)Slx!l@`qAI|-ib5d%V&Ka8shXDep;;%9mo`U|24{%Uyt5sBkV;<~qm*K%_b z9WA)XXiBibm`*R|MQUMG@bR};w7RX+qf$%LtNS9f4`=p| z(G~<#3H38|Z8?5_Sn^if0iKe2mYUCbSAS-F`ej=^AR6@OoT5clt`m*Z!kCH}8TZhkY*vE?(DFQ3`ZO9?XUreh?l%I6;QkEWw zxe?8yD;&}Wz&(kw-UBU_mVwteDcy`w&r1B%PWr{!npgt%v>&l@x`_|rSH^4RjQCy} z22KG|lZpAL8T9trlM3SMEx}Gut)zaKv zt6|bW1QKxm6UEdVeRIfW8$HiVOTH)sNv-I7)_MkEq!b(+zXF!|;2_C_NtvB*7Y<9+ zw%=iAE7YGJ#=9FOn0Ih{;Av{-DU_{0kM574 zNbJh*X_T!h?{_9oJYEX9b_YHTww-DY%<1oyQ_hA(m7OPedAqYyQ3Q&?;1ScQfz9w; z!E4f;si9Pl-I_ocX!Tt=%-}kAdMb>+diinP^K}S@G=)@ocb{YSf#eQi=KRADCfOpvB1>o zc8%<)O6K0K9oaK4aS~0P>`KJqjX-*@XzhIJ?btAQv4>uFriIfN2Q+M8F1a$vB8Ik8 z*`Q|V=VS31Pr1#!$+k9iAt=x8r7og^n!oKcjhbF-$KUptuB zCkL_9BqpGaG@IQiIbg+}MXcVtH}@$KY>Y!RjRd8;ce!5-bc#RKg6`*dBoeRIKN{`= zz&g76+_Q1B#m;2=R#y2yR@(~XBXZFcTQKzPjt^fMf=%W$ubTtoH?uu@(!dC`5AF(S z_2N-F%`obtnsP8MH4tbp@~`X8N~L|8oj?tt5E7U@noJcUD<`Uc+IkiiLR5StA<|fK z@wC3z?mlH1e7b**kEc07=3a)66zyqGOF*Zia9<4!U>?3)MHu!n-BxL~yNFNNE_%Ae zp&o9dU-8|xsiDVr$DUkDW!gLt$vRw?HOXMTYd-HJVWEu#aU-08^F?+3+0Zq)sPA=V zw4Ci#h8k~z3#b^jQXNU+kgV-$XjoCDme)}|TR&HEhISytvx({&t8XvA9Ur&XAD@^zJwK%@Zt zp#4e#jcoc7cexCJ!ZQ_9U_WxBTtLh zJ7A@nS|x0S&Zn*g3XeU+Rqern!N^`|?IJGbXjzr%c=K_RopCsiYI{=?S`rWR|Hauo z2Uqg6j{*-iwry=}JK5N_H@10Vb7NZ@+fFvNZQIt(e(QZNe)V3|{i9FKJl&^fy6W_) znXZ}7Gd2vd;oaQwyxl~w^tjMdR1{!aXfAg)#twOo7x)4vIlX|3nP`yyjho3J0_Y== zvd45N;$VKypnm2AmZK*A6qd6*6aS%z+2DnPd!MTvpt(lt)Q!!SkeC@@@D?90p4G|u zS~)wsw;Mwdzj@v(#>aR9U@!Kdaz8&Nlga|8!|ThnCVKr23Z1~tXX}rIa+lIAp==4C zL1RaA2D}751t|}V2!15?mDbxY2UsvgTxpExh!r#isa}07DH?WfOaKe(;em~r0lQ9r zz@usTY{9)l@^s{n(FV#!atCbXHQj^ZFpR2gH_mS>Jharf%2T7vb*gPss%*xe zS~pXzq*5m1QTImoo~a&)q-w9wTU^z$H|1D>Ybq-3lGUhgpy+a}I;A?+eicin80Oc2 zcZ6;!`I!nH)oIkgcNpd5U6XkTi3J1J8iivnvV*sap^G6-!?YsS2{|wSrV~StoD~hK zQCKx{>r%SV`sKt-lVA%&mX6d{74h!9EzB((i#!_hj*MWI<^e*LK z1pI&?fD1kef_HNWnLN0o@+&-wHUZx^!cc8snsQ`Xntm#jVhs;U2TyIVhI;`W6G9(U z72G0#8Qd!-eqogo6`VV!cR1*supH{|b!Bzs_3P{Ed-(foKSVkRUC8KcFV=?~fXk`s zy~6(rF_-Dbri&--9s^fyy46I?T^0bFNx0NNT*h^a%45wm)Em3|JAFqm$z zJ%Io`Xeh8@XgXFkc5cwD-8p&w>`x}c+K%!h7jSMY@LO@Bq6Rd~9!-OOY?Kt%p&v91 z)J8LQniZpzp&->D(w(H;3c!&<+DjA+_6DFWyd>?UUW8`i=Baj7cCz}4DtdToWzbIc zEfXK43N!+ZK(a(yW@sLP`5?tf8GN^jz2612n?>vO_E!gy{T=qS!oHt_z{^2h#o5IY zn#w{}3pS@eEK>>uq9QR&ppQTnDfn5FCFl2sfZ(XT63Vb^=g63UUMr89LZT<3WfVX; zYP!jFhaB5^4*AaZMfnhRgN1tr_+FyP!l)yqf#K$ofRp~Zr;mg&4U+1ezv~uO<;FWm zK^uTR1o6vQN}{OYVrJUEqG7c?;5e8 z*f~EE%jRdvPGYNQ(VbBSkP9!W<}@56Jwr2AGkc0tBctA88=ANPk@YX}XQBv1H`z>} z_lTe&X)C{QJGtGdp4Z#ron5yd#Ci~z`C+cZinmZ-7g%Xgx;~U1j4Y6KKY9D~KACq( z%$?7}hqJpWzmv8qmBdM?R$Lq0sr=yh_yrh?K6jZeb5Gzlal(5b{^*-Qpiu05bHs~B zaq=8;%1)j%2~98@9i=+*4p9oSgtsl%M0JMJ*rv(t;47|SYVNc@9N6zvX^gvJ3Q=-u zDabqHbk3UjcI>k|XUrBqG{M1Dv{$QOikgfjR1TB@){W-72=BpNe|zda_U$cvIPL0H zN;O@XK65%rfIN!<5MQ!_R#91^t1aUKJE9Y%y`^b@&9L3NHofNQ$UkN*(}J}!F$o$8 zG6$**5~~+2e|Q7*jVbgk${BG!P%$a%#Q8S}5jsF7YJf-+ns?qaO1kkD{Lr;P_Evej zTtZF@&M@`i)S^gEs1IiqT1WDB#B8>xRlxaj>7r)ig#X=B!d6XdBD~js`=Iq=IknF7 zVi_Ped4|R9-RwEBG?Yfe@s=LRGmM|s(Qc(W8!3K$Hu1Wc<)vV`<2+1|8GF;e)A|mt5KB35c8y~g}=)&JzcSx`+n5#9}sGFuW5yRmO%1Nkp z2b(99ps&gZUP)J+!+<8~AgFQayuG?s8zB(yf!Pe1(KKrbfrO!*Ut>ykKwd5(cN3Y< z?1y8b(A=aAwE+!tE16@y@L_gxPai&@8dbf(9@qYM23Y4y(P_^t02fa zn%Z_=4kSqVdVCwZnf#lh8zTE;fOk-1nfJ`w5=L9%QlT!Tn}tMc+CD%HZH*42iH?&c zs-3r3uDB=h|uQ6@h-jW9~W&mT*b>MMO?oR{j^~96@n`B1e zm9mNHTg}tywd<~ueP5)qj^?c~T3)_}ra3=wyX?xb;<*`)X61Z;;=w}T!o~&tR$INM zYfk(rG}DEwkLkf35_hHp8Y}fobnSSbd2CuO<4os{))|DD2D}86`6Bw7jnz}?-LOIE z@*bTQ^5*0I33oVN$0Oi=c?ZNjSAJG?yQTAK+4Q=z>TUKxeY-bnq~Vnt+T`+MUae8* z!r()@p}Pxz#ip*F}ua;9?qRQ zgOeU*PZ__39d^e~k#Vio>2;Np7<%D5Vf9iXadK1Yqc(&?{zTCdt=VZ&| z7|Gt<+-*oSCIv(<*dbqiugJys-Vf{zv*el5Y>t44bPH2^GRc~E0LL>-lg>~2Y*_qw$8jZE`w;4q{IK` zu7qyDXHeIH;z8KbfoQeAJp02rGa^Ts-gi}cE$ zG!hCTRA6>VC2S#wo#IxyNpczvXAWTwgF-Ny4C5)F zbWE$s$nls1ntO@y7BrX$FfX~yy~GY&wX0N-&$qhTs6o;9TMY6)71Y~Sn^|N;$#9=S z#Z|Z*Uhgoz0FK7CUs&>qLzF~1_^)VWvLk_SuL9k5QrD;%?^k)`` zvAk#+dxc0_jmL;%Jm0g&3(FbqA&uAyCiXR~e{s6JbB}h`JF7I1Cb9>bP9pqBV&|Xv zn1JBCz3{qnL-?3MPz7Aqr8iw#m+5MpKYIAUlDSOY4yIjVbvmwsQY$aF0X=NXYKt^u ze(D%<=UxKm5!Jp?ll8;bI-%=RoV`ZBq~S>GWVJ@7H+v{9KJfG@u*o_lq$wM_LK?0T z1nTi`?WxMQtM-QY4Dm(_*=eU*jQI}`+5u0QGqI>oVj8EklJ}WEXGDs)XM3relryzc z_w@psT<2Gzu-wKurdVpnbD%%Zh;8pR-=oH!5d(#mKjf9Bg1jQIs^*u=)t`X~ z_OZOB5oUn}O50kMqflrH1>qR;kYxs6ruBVgOW)Q@U)Pa=o1cqXIdpzBhhW2;Lr%*i zY;aea19~A?1ccTNV)*XlH68<~1I-MggO-ATn+QEC=)2yA_6qrmD*4vh9;hv)uw+Md zSAI8z&#%LIzEFU*#vY{&35IeD?iGZ_kIX?|`nt9yPkVxYCDe`NGa@wd1ivkS;qk(c z;a%XN)-^d{wq|6+Hp>2DjHfYQV6|W)z0)5IXczQ>jo=XbSGIn@Gn+EDNE17laYQVX zkxBpY%g6&wmDnh+5r7$XwMVBAI}wafJGFLA&7ez`ILzx2)uc7!+`@`iEvw_eb!ijA z?3$>os|(##uNozL@;(SK^`d{iBH>#)3;^DAA&7oOe^Px(;UNg+V|d*%B6u1g|449~ zgIEPr_dvLJx_6@SiC*45DGr}^@^)fCmBs*q^*SzZ+z1$G`ecoFB6d-Io0-N8bAwcdO#fQOlwgH-FA)J12Y(>0O zPebT+9R#=n)V!Wl2r{lZ&iY=xLI7@4O|v0tFF6BEOCcnD)h{4?JSW^o+$Y@UZCjp` z#m6^-sZ|q;Cq|?M)qKSWdWDauksY_+OYU=Ha+mQ5tld_MucslCV)3BvH)>Qns5crD zp^i;P6*fEgWZrPiBj$I0ybCeem=)#+Cwo=B@LlQL*3@?~`KOQp4EJ^c{e1oGdpNgv z*HNz%FLckaTp|4h=X>{&iy}^qum=anom5mM1%i$GNGc{SUcL00Ujv`29D*Bk zBAqv>J3-9&xT;D(whYr0PM{UDs+rR(4&Px*r^I6^6P>(a5kY`(KDLx#Ttn14p(s=> zGPG!jHfNRu0~zxn*04vEB^~SxC-8dl@xO#}yVt)Nz3T0YCy}G@Srl%N&4|+aO_a#< z?R4IAcn_L&XKPSi1QN@JDnQ1fXg}b>RRR zMKn=a%0&k52!aHc10)ZuM~H?GY`pWAQ@|AkRl9ZLFmh(4;g;oC`~~MQMc7%R zX=|iP{_bk9PqnGRl9=0+0&yFHJ=9MD=-67ZF-%PP5FbwYRb0NIC_ZjSQ#6dvZ zg!;un3#pE8VFHk7;y&!ydpi`r{p5=c5y?FPi7C$ELQPXSx<{XY1`uE7SC?C)RZiqF zy!9(r2*ngLs6-qAtHt~1KbOSfaP>v7JA(()7-uEM`Eb|)t-Dd!`d_^fVk;c1WR&5q zs9-}pJHD!c3034yPxTQg-}#6lHNA$=`yk7X-N5yJp_k_ zBv8tJ$2bWp1Q~4^(YdcIq+{CzUOjtUt?5a!O*c=sHG=cvU=2V)j#!a&4tQ@2{oKDFQWww0qV1cIq2oC+Qk&XU|G+MW0fv{Ag z3rhQKX>Xc?7e6nrsoKOP*330LPseCax}Zk5e)TXtEWWk-O@KLtczMex+FCxA!I}NFpaB6nx0?+m*j7f0W_VG0iC4H*D-?I>(sRtU zckuhS(0M~DjNkH#`=LhtrGNBG!GomuiWbE5&WFmgg#RE|vm9^>{0I?MD1=NT%AhJP zH7VRvkr0v81-l7H1|}dRa629?Wc{}2pbJMqnLZCTK9FWZB( zoK++PB7i%4zOax_BK-t^K9}h0o^Dd5m~0dhyqO#e=5+j{*Rh?-Jec_AUfauR8tv&2 zuI+y0Z#(neYIeeO%WJqgCV)U?+-A}Z=+B92&2P(>#@U>--A&aAR5(=qiTV5^sOjfa z*Cs-XZr5h|=+X2RFa*bU*1AvuJC0Hl?6iA`P)42Y7O86w+U=St@z@2XJj?+O1V!N` zrC_-^?p$ns3rNqwA17qt@U3km>{f*0qo5{SaltFX3g4?T;F>f=XOTuV`589L*4<5{ zHWAXL%SH+&Mpo#^e(`#mUms0{7j~)>cjaX*NiK&K85dr@F{-ow;`sPxrQPCVow^Es z-&F$vopzy&ylx*mZL?_JXj5jBy${0``d)AtwK5npZ)H`%)EbSXy9uFZ@;>%B@0tpO zS`|EqTyujt=7-Nu&Dd?0)nGwD!UQJ5P43;~4)U~_8R0S&pm|e$lzguz$6#7XVRzIG z?Dq51`v!I;?9B}%Z?095scFe&`3n7(j(MYUJ->f7l^3=VAA4sY)GVi-4LNq)o{l0B z;X5rF@vNy^HY#KwK{1w3+VCf6U-6A4;D!RT?1nnrh3YLSPe+7qT+utQLK)kelGFk|g+G7vQS_6#>iYc12IND4T3 zj2_DFm93jcd?_11>BHzbpKK>cvK>O-e(>i-v&yXWD@f#fDE-jq!`gfwe#>{Qq_j=X zbiUrC(}h)~FFVrJ+xWciY>0tXmR{*)oz8O`GKA`n$YV9o>P8I>atvpV8W`Kju%pp8 z{HQ&)8!Dk8$aw9m<9|{(-@4(HeYO;ixYW>4tUbvZ&KQV->D>my!8rxTHg2&8>Qb$- zsHB)#>%2h8AFN*Eu-KlUyG{6fTb`% z2xr5aW8@T#l)u2<>u!UqTD)N=YtFy*XYMkE0L$>vO-u!CS+sfv70-lzMkg>em#CT zs9EnFuQ+F?+WzRoon&eg&24!I)4c#mMGR5_$wzQ=wD@wSIh;YG`C&PyQ?a^7wZ>(* zGTU2Fq4R21M`}TJX^Y=Q+kLksZF_)%-v1I}6XLpp0z1S~wu4ddrIZZ7S_TM0i$Pkh zq)Ib^qg(i%Ml?<~t^!xgNR)74f4gT{IH!_-0f|fZXyn0V>$j4W1)W}zSG?b;W>#E9 ziUGgK^Ei-*$4$P$A>skpso48``ap>DX?`kr(S0#Kz}B0A;N(0DPTECp)@iPLQkH3Inu_5rEJ{`u&w2*yj*UfyUz(+OM_q3(%@_mE{ zWm2`V^zEpzD~$Q!i6L!{na`)GG2_XclHzQL@!4^#=)F_^iJ^>!^Pn~`x#1Pz;h@c@ zfthjVyx}3`H*}x-GlO(mSlF-3F))`M9QuXn7Lxrim;xjX z7$Ijai2i}BkeNY^A_49bWOI2;VT#l8d zINmVUPOK?)9S(%q$TpWUp|SP7lY4Nr_g9bl_Tehm=0K-&fIdre*JT+v!5(3OD$sK_ zuAA9mM}ebUFu`M8qe9%{B01w?a#;Nljh-g%4B;Qq+e!uFNw~fuLcnn680=%_SsNwT zy9USCbPv7V+UptWW5uVtw(|=idE(%0#g9WBYR!gN}#g-vJwU19-bPeq+I}&aX{2twTDpL{+5CdULQ9CF>4Cc zdXmp`rc^9vfxiWOYi|09IZ4!+a=8;Cego-~)%EAJ-bi%GDiEK9hS7i6w?#H0iIJ&% z_dvn7^(B8+^58^E$36Q6|7!frTEX*;dKLn*BtA%M648e97%chW0LivF180--`SF!} zb3G8}vB%|TWn5(vrRsR8OJT6@o}MY7MBUx+(tK@hFof;9W9ab?YUa<9CLBb7PK3p! z4xjYB!^w<612Hw12+axaIY+)!)nL2Api>&>0LhYFaeVMy@`lsp(k%amyrgJG^i_<^ zlxvbyxY2Bg(@*|_3rg=-f9~`34QGM6A&QJ}BFoUZ7wX*rI4Un^5fiKiVpDdW9UwJ6`9iz~IB*n4_>= zizoVWY|=^4tcvircAkkZtCtYMm7x%%6%wq#EC5b0H=!%X}~| zd9r5f0b;{9c(<6z9=;#RXoHt}OplJ6cqSaI{54k>`wH_L3(`6VopM%+6ew!CM_Sc}=4O}SoOLz|=Ch@aYY{$;N8Q}TDe&+`YgB|c|r$G6_PPi@%&%vqSRxF{xec+;9 zzz@JS5QspSA;8^R`eWGE(dan!{?CiO1YlmWz7&CnU|#aRIu>JtDT!(s&8-5{r90)3BIiUgj+tUlZ8baZp?yL z{8hn@XL)cQ-!e#i#iCZ1$Z(Of5Y2>b1bmG_#_~@Swq{_iEP)>&Sv=_EQYiHE389}t zbG*)R!Yo1B>AOXMy~(@ldJ*Q#e!YXN(RPaht3plQW$Vy-fz5Qdt;S)uD^uAEe3GYT{6 zqBvz1B-J_@3(2F?Nz6e;n4^wmxQ7kegt;o*_yt$!*8)>hPSZ_^C!0t@{8C2FK%aoR zgc^%=s*civozhRA1>qs-1{U%r6$e=;HTI5YHCQxsL;+kY0FWZ=xire=b7xVq$kt%h zbK}C*Fnmb+jo8F&cIA;?26n1X#G=*)vV(13f2eNucG!S!tPt+^M9r|XSd|PVP2g;( zYL(BSM-+a{f-V>|OENxbGPKonTZ(9ptzQrsSypnXAqvwsT`$f;yMB6|hkgW}A3^FC zsLfAnlgPALb5cp1^?bi{A+z*6KaP41dF)0&?E+mKst$8Pj&B4qi{}F(cz>M(XMuC~ zsUT$BYUc=Z#a(>l4rWV>9}67WW)zbIoANLeO&k%I&GlNR*8ESUUT8M|D68NlEGU%9YH0`7eIB_F#SY6gy;Y4kz;U;b> zzew+TMM{M)j+tVP&}tMW?frCc7Bf$v*-?IDKc-NvwCFoowV_LSa5?CG3LYDY!xbj< z+mvJ@KrSnjEZ>K!`4!9Aq2Y?jBw5*2#=0D7OWqZGvmQr(SXI8}B3A6Ypr=51|5{V! z!uL9LXPY6bBRespyMwO=$mM_|J+JTi`97{EB=d=VH7-Zn8F{kApMzK_6ttH<$`guh zmPKZ4;qk3syw(5JN1kn0xDKj3uDkuo9F_EnJg$<|n0N2AU_I^)*#;|4JT<<%my}?N zr(yxhyi^|H-GYGhiE`upcg$GeZ(?!M=P1%mxtHG*=XFb{m8uSUqA!}hWkq!HZHZgM zx$h`X3UT}cc_n29e0WvSUKk1)-}JaCwd8J`ogztPZW~C~1v*o|g``K4{J3Deng7L! zwBZXqMV|x02m0y9-zPqXo~NljUvH^#ZtCQs({&N^Li@sxXW=u2s*A8#vIQ<=zHb@ z35;^ltSD3P3r-h}&bRgBdaU!n_v3mnk?Nr6l==9z6zoMH3+cK*J?Ub`nQiu2b8yP1 z$77a=n^b+S@myFFL9Pm-Q%7sA3K0UP*RM`Tj9rUnJraibQe|!B(Ps|sgL z684gcXVL4W>*{Uv*Sn9pqc`wNiaqPKJS3@T=_(TrBFn#+{#kCCaXegnY}^ZcJj^v^ z((#sCS#vjiozJ6CmNo7f?)Ji_Vzce;v<>B!`T|$CoGO>Ai7cE7m_j*psrol1zfq46 zvF`;1znkw&z#7`GP@=#^3vA4tn%jz9jUKPS&8y`sh<4?iV$j8J*(zv>1GLx~m{z!@ zeL>R;3Pq&C3l1)(H)Qe^AB*ry?nV3h0RT`-PnE5ejqPb0MR&XU>`2ddojyPWMg2K?LltrTuY@WEBKB1&voL5Z0YG3PEHV#o_KYjh z^GB7Y6#L5O<)U^`uc*x&B~d;Nx$+YWEc+_P2fYWj{GpsVS839eh85|fLA_r$_&id5 z!Ev^{7W%I_o*9=4Njb?DXR0IxG}qDt-*8XLlA0eC^W}{N%GfHNs|5=d?+N%A@%XRe zo|3catc#`1$8~ZB_@u`lEFFvaZF4QrztZa0@76@cCqLV$jl#HEX)UrNl%IaL5}Rps zrQrxMhjoYMRh;M{l{j)AG?=%GSXhvhJo~KLpjuNr>o$1(&?!uxk?R!iZ;9m@FFdix z^yW)IFFAZVo@|!uP#TH(O)EMq-a2o}`u-*c3AczS`A~Y7j|nmBW}eACJ87iUx@f~h zzLLh*bZqLeNXxQO8f{A3BKeappdhkQqihFLk#f}$=HYXe5#wD?>0v_d_?TQqB{gg2 z+5d>*NQqA}>_d+}5n>~%qwdbNrYRY{YxZqoiF^05`Vy$_&RP@__5+&B$9Z4P?Yb)G zU=Z=?x{ZHej_qkdBcLVsdA~9_MAyW7DTP45l<-C95av~nj~xK79|}SbXap#*liniWsT*Lo1#{&dw|^OT(VMTMc=W@gKNVs=(*aeeGVQj*r~l_|G1!bLCNgd+XZ~`(__)U7@NGyz||(*TLzTheT@% zV0=yc%>aZv&CO4(yp~lU$UcF&Wnbv&pCGQ%zGjr>;wTE$J$Sq%L2#TQI|Z&EDoJZ@ zmbc#Z%*hox{$yK7u+Mnbv_PNq@!woqC3L5G-A0jETyqx1nWS&Rdx>T^!-&N7fnY~) zgp|*sFU&GaAC5t1cQ{V|qjU6EsQF8eeK|ag%>NTf#`drH|BWP*`i~?TtwY|_8_qQJT*3?X zrtBOy@`RQ0z6h~_Z@T7dBH|B{;{Q2tptDJLEcw~EXfhJ6?&-CbWXB78Xx}gretErY zol5XLTZALGt)%Le*~akLN9OZV!#i-g3rO=0vcybkA6qzWhdEq2bYupYSLRNY9tvX+ zJdW;iCcSB0U8e}y+^_taiPmYBk-<4IX%4hfNjmjv*sQ8!aQfseI(KQ<~^>e(TjiM{`tb25$s*H zDbl5c^DetMtJgs|OV1%E)is!^{!+0~ylF(A&bGcQ2$Bk)qv%9YGV(CWno@aT~ zbfx}6o00S(X?gr;r};u%QK(mMdSh#tv?oR&aTrsF{9<_*yEmvC=9OFtcT=f`Fa7cIu^Cr}_l?nZ>dpUbqpX7~DoZmI@%>8m21uvBb9SL{vGRbjp z4#?X5esXmRYxwd)^!EPA5QS2DcZ<`53|jafX9>su`2GC9Xkh>6N%0>^Fg8|bdNuQ( zPG*i;%xtXxFjxQPy#8`k|7NfLVYU9nZ~f)1{&Hdej{W7gzGy7yzdYC9y1(Tg>g#L& zA4=ex z{TGYt@8te3^ZhSQ_%BfL-xe1O!{28ACyVQA+|2)r#kKElsjRh_c*S>ka^k0}M)*g# zyF;iwQUK(qE*m)3FQ5RUYlm(&QINnMgde{m2_yzt5csc{8`H_Dj|-U1SBCpg4BAFH z>?$JpOjDt|gR=sb6Fq4;EeEx8#EzMI6kRMZDAA4)#OdbFCD06sgZ*Bu`>OtS$G z%Tql}ObSj%v-Q~(@rm?F@&tVuqzpN94oEgc zOEEy`o`DNqx5gm&@F@%8`e=rk(nL)H!==(eOmL+PIyGOBC|z-2dPFdp4?sY z?$6kHjljEta_)N!1IH(We}T;upvCvf4DRyJT+;1T?L6x0HE%^CKN`)zh~9z*tq+jx zeFSdCdO}}@)ne=$P(TncJLA&;TjS#R7DHVBx`F>;KPS?5hsEQU#05IJeI%yO>}0SA z`(%J`3d%7N)|_@Z0(!7@bfdmcy++z0G~bjRP<&m7&rk9cTh(9FZ^}s9{s*QQ-3P|} zigv?O3$C?L?%DKMVeU;rdzBf{uj+T&uuJ_3b2S`sJ+#MmHj%VM zn?$}Ur8}4yRD#=ir!OisizvIl>6%1$E5B_8O#W2-sH(-D^wg5Vm*6AG|4Dl!6yWtMddz??RWXID~GBVpydZ zk$<%_etGQW>{F392lWy%4@L5d=1^l~=16nIsMNJ`6R~+7#Gv&Dbq9q;4VCn`Bz%ZdXoJbyGw~{(B zG5*xlWw^RL$dB!XR#dYOs-Asv;Hlw|XB&sJTj-Be_b?X_PUhU@IX41tf7&mJ^ zQV=mo%8(=Oof`%fx!523%{t|*&46%Z}BmO zNZDqWF$T#nYqKC?MyCn#ffwqk*Wy=3Jxr23FJKXtrqj>Y0djui zJl3X_)i8{GwiRrzR<#nP&iAA3$QJW#OmzKEAS^J^t*$_#&^S!gL!sME*Ml0W=1 zS=qMl$`vKKwztXQ$6=x~v-cA+WMHB>x~DIX#ksOg;i~x!*SbFFfIrUMw3KGF zbT}&M$q2=|L7)^5J$g$-c1&Vp1Q1~;9hMdHS?s^WDhT-R33qR(hgeG|Rt;zg1dJ-9 zmqs}&64dlEv6mug5xEPGL-7S~QY4se&&{>c$PCLT%+6Uf+^_DanM3v4P%<(`%QNRU z(z)6{t3&+~Rfv=}Y?L--q`zMle(-)xLA`x?U0O+T|4B^|NwmtdU6%D)?HL(l0)pd0 zPcoLmnBC`5Wp6~wj8P$#~Pu?tFz!)MM ziH<(=a35Y*YvUW4b6eWtq&B!d&JVAt3w9c=Paa4HyUc9Ns%!f9m)lRs!n;nm4{cw_ z0FuFY;_xnxx#gg&p;;a#_YL$mjiDZ)Qzfwyk+6sv10_y`e$d`((RL{N(9S-gwEyN=NF%kei~i zn?SOg&s3vST`Nyfx>-D#a6}bM*~LsX-MghSz9u-CKoNCKw<_{VA6}3y?B}^T+riv? z?YA5cCm3~DO|to3ii*%<|IZgK|7nG>4@zZubGoHx6rEP z5TS(&FJ*Hfe5%Q&9@?)?gWeY2va^%n<)dL_Dl40sb9nMbiGK8z`EJ{!Z#+Ca_=_mn zE-G1I70?D{m$6Z+mHw?SZf)(JYNX#CtEZq+!G!2(Be*|OYSHEwpL^m_>9-I+k_h&o z4XT2+;CKNoRjN_4lTczJ4?7q`;znw&5SL%27&lgtgpuQ9{8|vP+?N z+>yKcOshrZfjugdJi9`&xpuum&C?|j@A?|D9uj;SA6KO+2iJu4+*s|Ou3W~=70EU` zk~KeL)TWwn&T;cg9JP#Da;&3bpqIR9xNetdaGPRggb5=PUaLlU88KA#fjYFt%26z- zr4wywwTE=Y>6>*c$b?60aUHzL^l^QFxl{HAk(C!7YJBoCCnLLr-P`wCmCA;t=+dxO70QZku)$F%PlD_ZPu9f;GBzs7dJ9- zof%1tkz%IT!^8FPD7*D^I=mYI)mlhVVp6l#ZM!Y>r%s}k>*PZAHu#-z(0WKaVynzonQu6;XaZmS*oy8lIkSL zUBz30Yx0iPS)jOz@adyh!Z zf!o{mEnp&(4u^cRs8(fF@rth8rR)f1ucn+I)ilhC%6+#C3q$_&B~T<9C3Krfk4?1p{= zws>;x`uCJ5e?m+!k{ameACmzq^w3Gl`9130f`&xqXmA(7>BHs?X7m_TKB30|vz{L* z8>4RSSXkZPY73QBDxDOUvor8`wU60Ijw&fev4nkm#M3nv)SEpVax|8Fu8k9Q%e+-e zWEJhkZTZ~y>Lr~cbv0F#YZ~RhpTA2Up6_bA+IT9ZhSQhmSmS3bJu15dyf;ee@=w#g zi*66F8{lL-M($fuvFeW7j4NU58j-BfSSFD~>?+vA$taV?Ru;I#risLc=Y2EY0;U6s zzo7?4{VipMc%1W;CEm9Kd|faUCRw;_g~1$eCF)ZoVtuQWMTI(t$sW3D>;N;?QM9tB z$pR|M4*r~=<(*UK81b7hyv66t%0Q5#zPekQl|i6%ozezgX95c{3632dshmeU@224E z5v_T#2i5o#=V>2b2fR!X9BwTprr8y?C>6ZS{U?g%MY&&N{d$?rc=H-@7G=s3Tpyu| z45VWX?icFasi@?Y4JuQ1M@(`$Y1Zbii<8MqO!BsC>R$5I&dwB80}k{fG{uiQ$@IB&X+NhSNa3kd_$&ikU0d^HYL zpScjpsYqNcEh$Q+XmXB{SnKslpMHIo@D4t7 z%Tgkv3>7L_uxpQX(3FPdq?}o!A)A6GS3O)paoqd0#j)r1DDUxRpe~R<6y+h9X*N1) zg%m_y|-2%zk})dzz)66H#W->Al5Oa#Cpo!{fZw*%kvsapHpBn=I) z&ia|y&5lUut>q?0XB(6&P^QIcQGwM=`bId#@p1E#DlR%cI`{IffRRO})`yS&rLE=Z zk%Wv6`c5oNZr&|%6&idy8-iom{ECEw`Nv`@+Qm>jCs{ zch_kn+eQes_;M8d!@92eLssk!aP!80CMn{jx)k5!BHeN3dM9~?XB!|a%^{YBeor!4 zbDC|}kM(d*^_1&Q&0**LVhLVA?SN676<5>bP8kO}v)lms0|ti}Ty}+j1x<+Yl`wM2jfsMo zml!Ul+qW|CReV*n)N6s36G60qd6*>0uUqk-g#7kAC9;hw>N9Ki+N=vmJYGvMQ!slr zjA7}S`#8x5?-!l?KIFX8@aNp|!eNs6MVT1nd5-7r|Zl1aA{%J%eWR14Nz8dCJ1NF91mc%S_??p)&PE36}*pjLQuLwhuMWb)4Hp zo66xY*#UJkxt5VW>IR={ixPl2)Wv#b_ zn^b$?#yZ1s>i+nR9y)(*T=uqTNoc12b+ti_oW1xoyh=4N-&J7D(U8+_k7#S9g%X-| z-JO=1qqp3LIA3zMR;rZJB68vCVU`Pl6E%~D_FTacwQ5{t;`xhEovvQ!X0O=2*nQWc zqX(e4Hs}yQD}?SxLlj|>h;6xY`i>S9M2Y1t)W&ZF-WLFtjznFl*rJ#nTY4SPE{Xvj zh~pTR8Oy*RZG(<|!#R8&2P&-F-t}94>hv8UGR#dJc1VoU3t76o_XIcY%JY6b-ZC*G z>YBmc=$D;jKQH&)`W;!7tw(!PN~cUn;~c!TI_;H5p`=KKbwHbzo||UX=#j@AH%d&# z#2*l|sp&y|W{I>Bun?GA>Rw7OIN&r2JrtDUY!CPvY` zUB8VI-*M=ZWLS8v^LI}N01`7>F_=VNXi04%HGjR zqPuTtqRFcd+^1cm7*3(YvwTCSu*cw>9OlQUTInyv@tq}phKRFpVsSdHNk*H*y{G;R zO5@PdqXFdKSx~B-2(Bhq-e*dZ1epI2kDoEq)U0cyEm<*@Dmz&JP?FuDLH^d2G?@2z zF&^v+QGH>c(Di)#!++zg#AvHCE`(LC($UODmaWNZT!_N8>8hkO#eH{hxgM8pe(Zf> z>3)83uqg|_LZMwcqCKFYO!Qp^d!ofa3~(Qvl_=Tw(m@|(<;Em`Zyl$#xc|lzLVX8j zVNnE{(ueoznYr*{jc0hjqFrI$zrqyXIhC1g&9p+zUfvjfn&&O%(pSBxt!Xq1&|%nX zDS*vq^qKFAQsum&N(h?!8e z=6#W+XCu~mXUSE_?%UDUV9>uFOd-!d-2>4~BIftr78|w9Ms%ClJz4W28`qW3_u@D) zsH5=o{PXROvMhmM=mqN<7biP;2Y4PV{i@mCPpU5->vWtL2j$aYtIXL@q@2~C0$53Y z$I3pXuXQus7fs*q_}f?jd^DLpS>@jHw{rh?J38R99%*QlYH-+}&L9hU@Yb#$=Js*& zAParK4&=Z%-GcF{1JLEh48n_~`XHQl=ij6S#e8CYIn4^XWV@liZ>y5(Lr;zp4GMrlsZDhn;i&Sx2SQoyVt6llb4U# z4{RvWfEj8<5el@PUd#y7sW1AQ#S@@BQvUA@%@R~@HX7Y+`E|ID6xVZ)J*8; zKo_uL7x8U{5}3s)?8qc>Ym`1&WxG{3QtULLou|OL(=!*z4}BIEq(pxd62-|(KO9l9 z!4P34dkz*fIATW*uHaJJOQMgCBQTwJ~vkWr`PJY$_-BR^@cijWW&?2=xyvvjcYT^#F#*_d{2KR zqQ;M*i`?_v?cb<=f*@f@CcilZ>O)h? zxMijFBKNH1(2zuS$fmkdc#{?|KN~G!#MU74Eiak7(@{9-fBuqg;nwxPzhREt4?V6y zIqpM9=|H{Y=hbbM>-7n8%^$;P=~IbrP0FRkCpFR#I`%Pav|olFYgA|nsW8UiE7pgY z>17DFR_jHmxEVs$sDny4l2*4%ry-*njdqM4t@Vt}*E+ZvB}uKwyRkxHQkw)dS@UI% z9(f7A*v3sVu50*17J`H?r4HaeOX|QDlx4GVw?@i%=EosguXUNd$v8FkP>zOOU?(?< zuZCtvz&MNLm)&d8yRj3hR0?(>I`nbXMtvZ{k9#F?sFx-6x=b*>5b}8#QD{3OFo|d; zAUNAqcpj!9h!y*x5TA2aX8b8O6)bEv{L6};oH66qsGAG<8)Iw=YbaOE^qB1^-#Q>B z>T&1=)`)srvv+B50Ctp#+;}v4jpV(nwC=XcdN~sz<+xI2{~a%h4^+Kg7=dT&rrz#g zb_^7>g$@Aa-iu0_n2*C*oR3cbZGg2U##`TmGj*1pfnXg}%z zhnGE%J*z!;CWW6UT#n9LNG8i&aj!(8;f3cjF5}?!eh_S@icgp1V|I`;@4+bUJ*Mj} zY()=wk{*D5{i*#JW~=kLeXpl|$g{Yv(s|nHbPdfY%qtPB8@DrEvF*XHd24XVU*59t zx}XVHvlW{Iv5M4wJOfgrJ*D9_!&8$%fm%tZppQp--`l`SyfZ8x%uY6Z2(`#9C!OVO zBZ117z<1|$^l5j{w-h3Ioc6gg*097HbdBxKKToUsjt@m6O*ckk2M6;*ldxLgV?d8k zwo|ykb!0=sEhOE`^Z@VWA(88P+|hhz-w`a&$J@c%B&$y?5$2YX+UqP)BxUi)tCx&e z=SDBB1+}dpg~CN{#&uL=Hz*jUiOw!LEGqQy^hbTX8=uzAI7)|@SA&XE$MhBW`$5YR zXRF=CyW`xwN8jmP|Kd<@*=3g`J-rSECkAO-6~G#4Sde*d_`GTFA#}|qX_c*ow%-MA z169#jdsx#j5ZbVN55x+rovfWAY&&lUhn_S-+VK_!JYLSD@{IFkjd^&dt`kJzzj5|X z!M()cnr>{{wr$(CZQJZ}noJ{tdIx~CD>{C3u+3hw-KE*`{g3~wHs_w(d34UZt^xW4s#)J+E%hvM=J2>&uiza0 zP!n2=i~mYJKHh`e|Gpu=FHtT1gNCfwsjzrg30gswi>4q$nf05mlXAJ)ZwUIg*e0~Y z@crQN;j!K(vk4ysfh+zo-*_lmfm525vN3&^8Z6$Mfv^N_mrgpJzn?k2oQ8d$e)v7jzG+w2xyrZ?ER*nNJ#((I`U`Dxq*-I+l=jNK;QN zY#+*fFD)6qz)()|+SEL2)mBuiPImWbP7FU);oiH@$D0l0tc5F@*#r@>>Rv zeMzyQ>|PsTN&_J~i4`k@-Nhedh!K%IAHzF0iQXhhPvjORT9KjLM#@I=cud!l3RAck zqM31_^f%z*M$TgrBZM9mXR#nz4sVjmfeAo3*IAjE_&LOJ8QGEvysk~$)J{Y%ku+(< zOT8WRgAyBo`TbXn@4xe*|6oQO9L(JR6NLXLW&Q_B`XA`;zjAXa{XaptyrY97{r~0M z`oBr|4_y0CiY{)p{~+N%KLS5AoQsv^f92pmcmAiMi_3rlJWa@G=m`ejVw{_$8ejg5H024^v6?0n=Q~JF8;??!cQ88o+ zVPhjx7w3-sms?@L|I7+D=Wf?&58F&wd+K=LuPJ1zDfvZXci2#sAAEBPRth&9oi4A6 zocLkLDAQ|>wP{&@ZDl4o%#=Vg-FObh?VQU#QMo=pk#&yia?>G|1Y3VTL0MmrIBzhY z$e6$TQF6>BR@ZAlYRHc{!5OG|0`l;`!94y zZ2xE75eF*=+kc*|nI3OF-SJLNfobloj1qY0(8SQ6=4dFS_wr#9Z7e1bPzz>=nVT?t zM`ybuuPA4f+%jhjPLF1GgUhncbU99q_oMfjWe^0+`thli{g#l{`D%>V0BE$y1bwfUX4%jMonHfr5O#g|slbdj;i=H(|{PD#r< zo}Ha$q@tr?pr)sNzDG|}U;P@0{xKtOb-k&>7mby#&eGS~Zf)`Mtb5d6-2i_FemC4U z-2!s71(|{f4nN8eRpB0uXn`~Zi!|5g4%xr=+eA=aeF%CW@M}0b`T7}5rcWZgj+48`FX=udJErgF+&sq%nk5-5_`V1mAB{(2y@5`SHQ~$ z7*63myd$|5dr<4a`@@!lxJob%00%ch>tX-EilOeo6eCjZez7^kMYu;vCr%p3k_+cQ zkdV@dzDoF$0Ub`<|3GqQn3K41`f$wycW^KFzeRXC3UY3t34OhK& zZKbgfq5}uItDA%0(lXN0Q!~)eP0UZvJ(yXPR*-e)O2>Sm*`%p3q{xhrqz^&? z-1jprQ06}+e5yqKUItyiyIP4o@%^X_OKbDZoP>XdP8B!dK=d#&^h~TdiJ_O{2bpR zM$>n>{T10Oo;nQGE^6=-EK7sdS-E7VWUYxuSc34XQ$>kF)L%!-P*SOnt*{%vZ?6rZ z*xO#KXFYspzBcu}C=3k>bH+LEc!@V$ z4E_(NxqDXe6O;Z3RxCmjyquU$8z8RyuDzCZb9J5@T;n^|VI~ecid1kS_9vCBnuY>q z22eYDeFIN$!$($@pz^J-U1M`?;3se!;l9!cug~0n!YsPW{VU}zZg(LH|+O^%K7RrAMH+MfW{%$#Ix;VG8?J1-`J1>2EW5Twm_k_ImD9MJiwD z&W*D@2Xea_Q{ifVcHTpT*`m2T#H=1#ulLp2_B9A@o6uP>(;}>!v)MP$o&xOP*#h69 zDnW`S(<^0QiMiJiRF%DLqseQ7%ew_r0w1+gxXP^X4Zq5@HIrlmHBB#-i=vCma_pg! zNQ&JCB+W%5JLxU_Cp9sI6b#dax>_TBYpW2OE{$SVORDu1va00t;wgj1oSIi1Ji`Wc zQC3A!eZkJLT~Yx1cjQi+xS?ErqEazLhJ!I>5*Qg`l1(U`j4bM@w{DK9n7&CJlBiocu47vw3KGgig|^Lc09JQ)$cTk>329_P6=+S6dl zqQE*gdqVnTVQq}&s%d_ zKnG!ZVy@N{y$y@7I;yChiBPArmfk=XVcoHb#Cp$p!9o)$bf>}#o)F>>9c6rC51CQ~ zj3(t`Z-J?t?>S$s0e5aD>P%C;DZmYc+_S_4WvGAiTrGM z)Q*)x$sJ?M`8oU$EuKzWHZPKWySl-y&^=}lXLm^E73h^||GK@rI^!$S+pH;Q>|m-9 zjHd)laPIFa?Iby*2ZBSrZQ#)W$NTs1L(&|DI+*wv7HN|dYpJ=)j0F}8(g4zNO_27Y z(uRH{3@p5Q9r~nY-B;K=R{>l~ia%`-Fiteitc7FOmbp7|g6*FBYM4HQFIC>(@RmYl zIt?q+p!usOy(5NK25)|SR2=)HbCgH7#h4-4$ExY8-qhpYQ*$8t`uYwoZrrX9uy8aN zQZr(c2^^vN zr~f5WWw7KH(M{;4718xv2P>m3vswo$x+sGZ@9r|v%!pr@&q)c2J(826wpyS}y!rqk zEpwpQTJ{QgSN_}j@E|%fgnh;zax9(V|ukWH1H?Pc=7^sXvDIR|A)>we|Lc8 z`^{Jp5q!!hegmv^#H0b>ZW;XN(p;c`sQ?@zF(HhORsu~ZoP!KN8%z$^z9}bCt@t$a$fhcn;3Pu zPq%P4sHy<*8$O!lEkRyKqzE0tzJd5xwcfn$;qCn-?d;1*UL)w=JZmj72bQmb%1Fq{38G2oM$fHCt`K@SaQEOIG_@{*= zVpGv<83-EQX=~0ziX{t*b8q;Iz`;Dtr32K%+abZ;r?ouKy(rY1kHy!&fM8)Iej^T4 zTN#A8hhti-4)Gqt*ysZfFQg-S6f9cn3?l60=teOzOkpzfhEVXD*wVzzATw&aWTQ~> zR+Z8W8RQ`OQZ0JeM>?b=6_fBmm&(+XglS9YkjXTNpSd{_Iw&gAt+EB;FoQ!vK@0)R zfNS47Ew9T0V;(tQUOsTbkoxdyWge9<-oxXV0{XAW1z*A}Q(%^Hy8(EFzo4Je4TQtl zEB{uK)bvtT@%u9fDfmDz11KA|X471Gyx7~iEl)Wd^gQ=TRo zJ!=lvU z(=C=znze~a0aN)=#%0wGCg#HHQ+T7pc>RZ8hn1L~>g<06S6#1QQ}!BIT?<>mN(#x^ z1Nc8~(_f2tUq3yJk};sw#)lBQ_{I#elZc24~ER(oKX{j z=o%93%&`2y{&m8QybuEY<(*!wkkQB88un_F<7qOcf6XJxUu=;`Gq zJN8A{f>IWB$?4hHDDU0n$W|2{bB=*p@$<^5_R=~5f!3p#+4Pkr<8gn}>;T->%LjZp zemOTPN12qmaFSGYYr~SzjE-H8%7otIEUIvxX6s0Um z6=mo)7yR}xy+!gxoj5v4@d6oCvq>Z)QqYyzcn;&(RA=ZazbHi%L32=!QLH7Ds)!#n zMY%Y(^LiN|FI-)MFgSi6KVG@%@PB&B9yi2K2Xk|G@>Ehb5;yW9Q&NnXUp4R|43LR< z!H?+B-(mNPom%$@)CUz85@k7}O|SP^)eUqMR(Hd8^?yvx6mH@i2aEhZz^2ub9M1R3lff(s&Gq5%#xflUQnpACJ(q%Cx+$ zSRlV*xZM!%R*N0KjRs9FP5&}8j^vjK>Oq%XpVSfJg~#7<}e zBS1IvfE5EW)d~4T;FV2jamqrr501*~zESwlhyWokC=`O^5RX13G60PP9fVL7PQ_A@ zDE*W4dD(cWTu6&?JNXIk?{$Q4T6 zH>da0K=10p&Ccz>1mkQ}bj_w=PU~44yP(2HnFl= ztZES11d6b?e#%iI>BC6cp9NI-Q>t+Q9A=cbi6i&pnbm!AM^v%r;BRlfb_^^Z+J>bz)&5 z_x1WyW4X;bY)X#ezFzOk_Wajfc6R`%A@f$^p*0qD6&9>{VJL5)Uw8l8Kf-xY(pdO! zhL8KY@ioedfBYWHb>r(5Wc7i7snXBTf;E_qh3Ro=GBk7sQjx6OLSZL-9KA7sAvoZ| z1Pv?zEKr1qsM*OUQmPAQ04BW(6?9WZs+U11oG2dQ?H` zP9k7N;LsB}j@xWyKnBEc<^ap^Y4`rdclRBpv?aRsEUykgSGS3V<4^S*w%)o{I@XSR zQ{dZTl+9o`mAJ}LaWU%! zP?&1!9|wvq==BL-DzDA0qP(kX5yg0Yp8;1tWu!6olM!kZ-$bC3uQV`x5*P5JuH#}L z-s`4eL>LnR<)(|lY!~QZ80CGaU4$R!IH7#zm)9o^)qJ1Kr33NI2e;N_<^ILe3+Bp`OAG(;^~K~94Bd1NFMXefp%+UeV$ zNet*W3WbXpOcWeWscPmfhi{#1AYkbV_c1h8dQZq=8wY=>3pOOb=}hl9rA5u0|4m^y z9HzPbYHe)Pk-n&GrANg7A==MYvA=?Xk^zuKa+>ewa*r^@8FHAD1ST zUwSJ$?oG`~{jTEFXd7WW7Z!u+Nj67*ggompD-3Ti>BdB5WZz06Jk*Hq(~0M{)g2{v zZh9OtfbaxHZ9(A~ZbFO+Ynsx9ip5c@Tc7giRt>#GQX{5ROmsnI4|ePc2%={pcTDs; z0=wv)%MuatsY{3P4yuGHUM*S@@oeG*@O_}E2|K^k9||V- zD;7#G*oKH%z@uzg1%cb0>$YqC(^aYicZk|0jBznN^f(qKrC}br?h4^iD-Nl}dvs+g zv{Ns}aqh-iJ@AMXvTVn&0Ut_qtX*BfP8N=b`E+16y(uU8y~ILKMczjf`Y1&N)EM2@ z_8#1O-gYe@I33tJJRkb)(dEDEn)vx||LQd38VT8sBs{_>0w^h8OEbtk5+9(2)+mal zG2f8cX%QKzRjj!>q7d9i6;Lz=1vCORNu24h3Fn>iZjA8!{3j8>M?F*GAqCke8t`-g z>I4@rfMxJ(Am+FuyIu=Dw}^7B1IDIQayXVKW)h|Z@81CIG3@OXJAuj^N`ruG#}sc7 zg&geWGnuLutxkfV0Gv|T_KTDe#GQhwuK)>1(0$iC>XJl-HUS_C^Ux1%xb(E+XL&mH zn#b>~II!1!XEGJ7chwtZKFe*mvP<4_l~Ae=L1J1%G|=51<$y{|p+FdsspU`Cq;t)@ z6cl@0)5N^#u-OxvGh0+xhm1)C-9>>Nt2{Y?#V2|?`@U`= zSbxw`Trp~s2G@9hO1~^0ma}x{kK+9_v)INIVnCZqV8fC%Rb54Y`U#vNC%5gLe%Fvj zP2rJSptzsMRS@aWMA$@{#XpyCF)n`3q=B9|onj0`HcL@NW-~i_0S^PPtkZT?3-T_p zgJzfYcyMoPCcP9`7?>UF!5|b=OZgaL_hqQ-u@)^fRdi)h?b#4BM{K=VSV^;VXt}t# zl>8Ps-(|BiT{}<&Gjzc>B$7~p5Q=Z0c#lonoW(O$U_Qr6KWt?dhTuy97j1xy7o`wW zXm$cN2&&1p!XOgTLCjK4-3kS*oV4W>a#6}z2Ly&~-}G|A-H_9T8!5ivYRO)R?Qf1{ z$VT1AU;$Ugn21Y>sa^<7jFW>A*E54bhnf*0;Ufz|VZ~>eBe0H3hh&!g5keh1@ASY5#Xn#6nuS5q9fO^(&%9W>6|*u8f}!WcyEz&DBH z3f=I>Iy)Bb0XLPa>6&I-gmj`~rUH+UG*-~W^wuqEkGX3>_BkY*^ZhsV?(^?xpClmT z)d@FcU$ZeljZb&PPFn{*H6 zf+9-erRA;{rdHK~UJUg9usR*o>yxjjj0>RC?J^-o0Cd1QQ!$9^BgwS5pcA(a62SxK zP{k}Lip9DbDuDSye*;GT`s^q(zGVc7W0oHE1<3?n5_;<0=0xPnyybB8y4&0iFcbwcAG>C12`wow-c?|(*4zf&38J>bLHFXporpc*`hSMMDi&k6g zJ{Xp`nR(pBtK`u;^A#C3t1tEioZy;FX&UT6H?!TONuO(Gaf9o(;-fyJs&@N#m;g<~ zO-M)18T%?_ev-Kwo4JpjUK>^M(ZML3OwINZ@?|{%HB0(mQmM8ov`sEkODJyHsnK6= zzWEI=Zy#^5BHc$)7D>}Jhf5$imGmD*Uhn~NcWqc+FJ5FAvYUc85PyM`PlKr#Sqo6p z{&JhAMJoJ3F+)V=S3+eLKMa{b?t_gFTaUCv_4S@?%rlwUmgr3%GC4TM>ZRNd7tTtD{Q?4iu55D&sQ^Pp zlnA}Nth|gONZEjJiL@}n$6sOy>uHumTNK7l>Nf>wdiG^xo=Ob9s$Ichix9lax6 zaDH9XDS13DyC29(wBv!DW&ZjA+sdtPfYZgMuC48}K)><9<6c*WiiSMcRXMJT3ND4M zh8#!7uzkN|LLc(i?YKsb7uwXG7bZ>o{YT@Smtv1w#b! zkL-C=zI&#`5S%?~O<{;iENZ`KOk`|YQXlOiGHer#H1cqh0X|amf|9X-x##Ykfsxff zx{LE0cl|xCgsD)YEq`GjLd?oZ)<&xScja*k*>8iH1yUc~!8MS5Vdnz1SRWK7g z#xQ>_^H)<8I=dpLhQIM6@tbmU;j>jT#_Vbgo!HHP4k(`m6>BB-R2^BIg z%$H+yuSK>ERmi`oW0-Gpy#@-?+i7CF4*Jc5h^v2oQ7)Ug7--DQ+Egm7xY7+ly2p<7 zRA($2Ak2;CXS=ePj{8*G%geYZd#dtKpRxNsCp+(9+^I)Gsd)stze~C#eaaFg5)6rP z@NN2UJ6FLn**%OsS9oBsU5=jLmL9t@9*5tLrAMNFC@DK@VR08Hri(Oy!sJ+kg*XvJ zW)R45*AN7hyq4Um1b3}tdspft+S%Uu+LO7{LyIJM`(7BNU-PkaXl2F45kLXd(yUWD z3r9}oOwl@~hn3v;y|L_;hvrUpQ15KC&n2BTmD>6ohw<31fvs(`14DFyMy3-H^%V9t zEqSY(^UzdT+FowfAu#+Cg3)j8Bf}uyb35$A@b@8t)MkyLKlH$;sG*ZiF|l;8)^pHr zV|JTIbi5JlYFya#eHd8b^j(gYAdI@}F1ULK9=gTr$f&n7H;Sv$51YAEU{9_pLTxu9 z8)C*P8!(pAoLNzEr-yvRlPvc~O+VVY=mMa{xi;e+UHI4o4;0I+TH`s)!A1cREV}*fCiIbSDy%Z~)Msf#OQ_}~1)g?acLy^cz| zEerPJ2;gZ9%oj3#=wEc>-*&ic=XKaLY8-U)M&{ok^9%daCj8a)lsY4`ittj14Y$*^ zhqUwJa?steciu2uPzn0jq~EkMmym?0lE0CY;CW!FhqxN}HP3y^cgA;WHpk1zm9%V4 zot}V_C+M^2vI*F07cx4en@Hv@W4-UnESxNr$&o>;F4yWRj*5Ip(0|Z}j$Fc3Pf&hR zY+QM|43sXREBOVuVqVcqg*}G-<8NkF3ioj?_>%>ZqzLE`FnTem_pMq*3U}e-3ITIwsbl#4dT%4vIsH@9{0k`C?lWp7f2$n&YL9yy6y0rc1CLBS48f}%MPhHa)Vs@ zxe6L*IPwbV2`UV)Y)wt^X0MH^&dz#W)2Ep-n69dHjDmEMk8W8IXkr!nVq{w4LOW;y zjPgQ53=TfaS6LmUuQ1bo@I>fS2%5Fze9I=!!<=Jd>EH>SyRa&{k@o$G(TqT?d2S;4Gp zP+V^r>?UElvb7cNwi{o?Gpn!bSxOks)3bw%*7js4rPpmD4F+XICB9cSNT83?-uVxq zkPi<<0BN~oCJL9|#cb5B=#_zA1OQZ60vMcv40%bnC`H6Mxa{|AC5FVdZMcktbWIUP z3X!pQCI&qanw%F-n__jy1)y z?AE48^SA>RBC?~P3Anm2PcQ2lG(8tlaePpzlr4{j^QTtGt=*e{ptgp$+#Bi9Ev^Or zA2C0RuFsd4;fU|IoWO#OhnNJxl3UoM=UJ#**(3LZCOwChhKxyFuFFSYyGQfAvPg)I zmP;&gfEPvW^}yC&eph>IYkODz^K}9%S<$y)L%$EzLwHxnu=cNa$1fS{Z(4w1-iiLE zQTV!p@~vhGGBmmoR#s_rVSY9&IGJ(wZ20D;f$m#iqrzH65KNc_r!1W51kY(fH99=l z<$?DoHAxP-c4I+~&{}d7MivG@uNXlAFiTR6WMF(xe55gn%4A2N&si2d?GOp4t#+|c zID%p|aF3p&(aB%^*0a~APGIvW`dg8OX34EGty*=rnpQ<5PY}9Z8Zl0N*kM2WgUbzR z6ul*Vm;eM~2?3i$^DLr(O6N+E(uBRFtD5WMCH$YLnFb;8PqEafvf^LP+W}WB=$O%A zFWf%(pZu`KI4~rE%uco!5i>|dRgyz`hg7BTJyU^+-#I}|tf!~6=OPl%v-hQU5UR1*djeR6u({IJG z<-aHNzBmqdzsc{G(du`SI|PyAN*xsWGoz2GY15?BgcG82PqY;-+)zB08frM(fRzeh z%jc){3##)7EJIvpCTCEsWR$4c{0V$#&-(L=e$i74T@+Js{(ks{vrIQgBrjI932rQ8 zSt{(bh&<*0PMH@+jV^z)Qa+{TuOmLDSokRM52l`br4QHx!&BW7DPQ`zo*sbzO3Ml# zv4k@QdU$+V3l5TST7Mtbug;GllQ4o$H@X-ZOd$7=#uKV-vO#s?yRRL;mG;*!zVs4i_RJQAP?Iij0cLpiMVa8c#0|G*f zYPO^P6|NN(2VRV0c7WAg{4;{uoo^r$r_;BV|DTl0o$S4(f4lMwZbxgL4u}@DI5YK7 ze{c^W=Y$^bP?7R4=`OYmw39Y9@-+Mp3P}A7B*(lpu+G!`+PIEX0r)m2qJJ;2cp~;B ziy>C%#di7<1V~(RcpAx62HcvlY`_P)@Qz$cR40SJem^x7OqwhBHHLFLKT@62R-F?P z-7Y6uJDt!)cKf_?v;R83D0TV8UU)-9)`bI-6a6a?zG6`*JOnSIec~BawpLUYlA=Ip zc6ZC09!2Amj=3X*0S(U*18WH7*EUWwFT|_Km`VJoAI|W|2$1MA3#f#p{#*qynR z4*y|0$^Mb2c7MC4gZ!(!sQcw;#l0_K*s@9$&wxsQH#jd5hTFqwhy)drMqHOZfALtM zX}ga>+{%znIZoB8MQ_J3PC2ssl{X;b(WkLaH+mFglNwb&M$p|;{}Kh{6x`b;fx|HO z%0)Deh@)G!t=~)aMR0!5(=ou?^7VC`;N7*u+BXEYz#+g&*NJ)NEr!$2ba%F$&cLM} zuhh>O(b|zm6|S@}ju9!!bcDgVI#ccs1*IVzODEf(PX_SMDt7Z&Qk*= zFCejH5Jur%9-5++gR3xa@n-o5N46W>_>z5Qz#OYn8Crzs*RL$#cOaKw;UEqt-VSaA z*kvTAa^z)?WnokfXEYEkauj($S~H4)k90Y-POV36c=+ukTaO<8${%K7RCCF)WY}yj z2H_HoP%U8#->5$>DcpY;9+x_GrB2)0A|*0Z#Wu;oSUoz4x&MfOnY!dROx%P__u=GW z`mbZ_^xLbOG|Fd`S#zb9!B^x(pmfp?Mm8`HR&_kQy*b9GF&%+oId+og+|%8#aIR#? zo|?D9W4Of-<&biSyYbUUt)sl+G}4x$oDpl_H`4pbu7z<@niw8L#@+i4PDRqiEk-0y za0yDksDRuYN4Scw7F!@2(1w#A=`bfpn~qkR^kj#1+Ofwl8F8(!eR?bo>9Qb7a{dZ=j#z+I&JD~ z#FLZ8@57-JE45;y>Aq|XQH)fxQ7B$j&N#o9wJek9O4B3el%D?rdG_Tj^=*cIV0qI& zOuG|zucF*mQ_4=uVLs}0Nqvfl8}rfhX&b-RLx&Bd#G*!;fU512v>FZO_lwDn-c)l> z!s%Rfg566{X1y7wB7|g;8DctG*YoT(blq(-Oet~EmX*XIW*dKy zS(r?%ehdaroFzp*;zgZigD`0()=q1I_KpT6iw(Wo5PE`=q(*F+_NT*3!%r)Av~&nF zDitFpji@PNQua4VC@U=G17Q;OEqd=JIaI9S@@6^mSuPRxuLUO@?Gi176xdvFx_`x{ zO3BDyFMrnF;~o6zKepkhGU^dF(|h_(M;~KR?j%S;y_T$vlK4y3gz@#Yp1x+T=ZawR-;01`BF&HiAmE6a zY+?eN4Ydi>fxnA~YCM^(CBxbzn?z)hP?ntgObYz!RWs(e|-SS?uZgrLg9 ziEyW8jm)&aw$itPb@Zy|Wwd8KG}tK)0CN&VsB76&J**h+-WO3kUOTeLPHL-GvEm|q zNa-u$mgzxV;7uyw#E`Q5k?Vf1;G8c7l@JkNIm5O^uIocgrjZ^Mwq7(HcE2pj*3{9* zN9wKcX*NIZj6BAw;!bUvg%1sy+jslR*sFaW^3~TKF4L^71wQqiZJTy`shzbURE=NI zRUry;4N@`=SRPR6H)*%~)i;~w#-26E>ZxWmu<-IbHt;eky_^`-`fYzLVi@YHp408` zWd8njbFOJ;1HbY2-M5Qn-7m2FeZg_<)OU0V)P-9$MJp2zHAg#5gZY}{9Id|NLE)RR zoVA}hvAc~&JL4dF!|(UuK2rkf-Yvwo5p*DC&6-*XpJ9ySScGwBIiCI0ZkDev14s5r z)d9t%!sIndkG0b|kq-9;bEKZW)36Pf602%+J;d$5+4sZ*2DfV(fES&;=awIi1ibaG zwUn2S=wLjc6NGOG%68R#jYmy$9VS38@$$8?hElxkP|_K^XAkWJrjT+DGXloU*|`a% zrv%Wj11mPB`O%Tq6gzDN+jbWFSuH$^^Y*oxpNw(^VCdd5V)ud@hpT}5WBl&S+q7IP zF;vhB(Y>n_16qbxS^P+uM|77m#wx;QRgwiysMARLn z%b*&cIj*dx2!ZaLWCnAnW|g&B@~ichF!d2Xej93W@$5-$m4B9AaY+&{P&tg6#qDUf z+@|fOl^r9%ro*;#bgOlGj=!$j{JhC~n%#dheBONC0tl&67-PmKolyVaM0fbknzOq0=-&V7QdTl(VL#YB3=Xv-|Y#pDu&I zV)M7)uw!1|x8rWs3 zk7{5+z=`{UJsy`yDQoLTou&hhuV0hQQ!(GDAQGG$M|nkUHk8GR`Uy5B-$q}@e6o9o zr)B_Q(o07s^%U-42_ zPq0uy&3EbtF?RW7z@CbS_IGh1kkXxs#lDKCVwx3*(Z4a2b{O;0Z_a zJHl_kccC0WB7o|EuYsTg9?^>1pj(n$R+lVrW)R~i6({E>nG;>bembr?RboMdg8X5k zYv&5@@J%uLya6r%IF#u^ESVKLqvD*^=;(AL=CBbkXbcIyiZFw&oAaCKn|CmM4=M}{ zm$1A7&xqT-_m97K6@m!s1B63@wTKCgw+6q(ry4BpBZ*2b4A$-1L?daoX4b{l8zeKY zM^r{=XYnn_JaF=?kd*%7$nHK*tEiw1d=4pu!%crevl!GOPMO88IF`flv~m68Z5TE2 z*%$;eM(v82v*&yidm%YWzv>zTBWWzr^E>8&DqR%aoO=i_hcIN}3rn8X47-%gt9;6- zt{%^J8L>p8^`wt=^G z-^FO|2l#GU3awwE4?y{Nf5UA>AhFvnb~vv^K8}%@_9Mf_gEnu~?)@6;bjhR*AqVU9 z1Uhw&?lO78M-J?+(~W)FCArS{H>me^+118>$yJCT2_F|s0JZzwyglqW1c>;46q|k> znoMEcCVV}JusWQ)TfJ>*{(6)A@^~0{y%sn8fSyWUb6$h>t>AeQvD-` zRNO+^1V#Q^qglX%lXsrQ^u#Tee>`9$IU)6TxYibYi>$y>)TFIK{KOGaR_dPB1P(vJ zpd^Os!s2KEoc8yk(|CySt@2X*ZIVZ7l84kFi~uNck{C&ZT`GoLJK|0FU!?Z~EItV4 z6ZlGDC~YCD5e8n(uDV`sltYT11!2-t2jK+zI{pYp6NS)LM8>b^9?i^ZPn1{jeQemZ z`&H0z>|p^=0;Tz1&&rVVHTMnofcxV6rlcqAL+@mX?zq1aW^CDM_w?dUIg@ zS{QH#aTqEmWSly0n`saHiBF}qj8L$I6bl0YDD-CT@aMUuA4 zZurP!GG>(Y<{2If#L-bN{0b-*s&q`QRJ_a==&<>Ie!e^P-Q(E^G^<&AY`I#{8n1&G zk4n+5u5L;@EEr1om-WDk^79RJ7wjnNRYltF-`(%z*8M#ocnckf@s&4*MH@y;yyqOg z&;q691}9J|Zq8kIy2W@C!k!Nq9FFi|(2Ri4HW^|~a{ z-iOQ}{{v3Az+&D7TN_6Nklq0ck>(@QhD$OR0vIV#6y(Rfy$#9QL``HwRy;{Q_8Wjs zp$z|Y$9R?~`z(0y$!;0Px0zi-ZbXwYtC16HvVuy-8l<2?mObDhTO%d2FmI4nfRO7`7`rsD(Ub81 zghHkmB@u$t68>r9xgR-Em+|W4rUF)>Gbs#RoFbw?8kV$Qx8lN-R<<=Gd9#ID+!uQh z{O}KDIP^ruOWKzb3TgQ2b>jcH>%G%^S@69ZcKY<~z!@CPixE(3dx3ak*n&+ryXOVL zkH70&Zt7)0OKhEjFz+zrqu-+)^8}JA0zwHAN`kvIPrPwKKw52dXzJ!=ftPTOg zMp7a=C-Dj@1|B?(2Ww^g*aBPpT-Wf9j_xAq5-fg+ntF!WbC*{}F1%qfz9k%;H(dMd zM;sUMxxu6P6xRZLSgl7j_8ii#nTE7N7T)Tt(n?PWbV>j)MD?sD}hLoImMY(gO&X^_UqQt+4eEc5K$Zg~;`TU;(TnO07ALY2ZRC$<5?Jj$C$U5RR0YdXut4 zGitXLkuj7Y-nVp=KUu>CN2scQn8t8>+Y@sQ0S+e#`sqW zQ$gfOJe7x4R9APUMM6xC`*P*dsjX|XAZiz*128zrzVmi&&k2T~!^NU)T6{wg660^-H= zC7HJHlDYl){j!VqTGFdHB<@U6Gs+-#WWiiJ`a(pCwsV3sSE7al^9yMo=~-)jERDDs zif!B1?C)^hUhHC28~&AE7uZ$oX=KJNwvOz1G#L8si88?X!&zdL)R1``)`5l&9Wh^E z*+io5@4i}A0F#N5)7%j}5GDQ1j_z{pWg=5D23u&VZxOh9?W$uFTXRLt0ID*!wFK2A zTxqDd!j-n&upR$=4!K%+Noyl?24_!IC-hI!?E~A&zVD#{oIdqUyav!Pq4OXP4|!E- z9tk>FKC)SMz{>KQf|~?vTolI8fLfSUV%VR#i+#8*A^Q~Fc%}j3v5{c`6eJR!uo3hd z;`t*8O8wg?lzqLg=r^Jbi7(%whTDLp-A=RLZ%cj$swQG+r4nfUo5|sw7dz!2G{-WJ z=;BUjkEDf~Or%yk+!BXKwlV31BHs4#wx|6jp6C-QziEn5P*CcDT-Ipv7(9qR-W+^W z#d&M3nD`ici0(Xceuf{@u=OV6WPKH%5|2d1qD5HMqITzJ=;wk~De^>to6!ZL#Kv6O zVPL=@Dt42?eY-?fIg1vI$17co$4Ea3u757+KUewGV=)kx%uK4V>FMw^Q*!Gq2Va`u zYqt{eikHZa$kw|gxk=yhr0Up^t-k1d_`HPR#RseTd|DT^2VqidJVMjE*it?-z5h8} zvadVeqr@s=a!8YFM3X24c3hyl@V}zMtHgdeVK#msPKv9D83RFdi>#224@Jb-9^TX2 z9TFECRj~SA{{5KQ?<%R*8L$f%WH;=1Jsz-iIXmgYe*0Q=>&VmmW?QY)4_;yX8JOQe zOBFF9Bc6$nqviiq<3sp*4^bfh>+7mnv+m>^!yuONg}W}!TR!Nd?_vN1^V7fh1+mA1 z@Xf~{{!=!{tDm4>lM&9VkJRIM66fEp%n zFR*xDt7HjEe(WJ1@HJ4%p)Yb9*q9*yE6jX=Z1BQ@q*X3(UVQ2-^A3m`a-~6F{@TK> zrqVMKr@UniP#hsF9BCT(s63R9B*YJp*DmX)zu@?W18fh$Pb!t!wehvFo!LyC;hfx@ zC=&%g1C#`RvTeLCrF5E2Qa6p;xYuFaxLf;lw zr00|M-cxcHg43i&t0y;{rqDFwNaI*+mYARs{me*N9%HiljQX$x9S5glrH80vm^-f2 z&ET_tTR>J@cHKr+&3xt`eYv*!ray{>r1kW7zT#cRwFf-00u*3L+p_PI8N0YH{1+Wl zE@GHDdWE}dW2=adXG9%PyRg>9jj4yjgUd%uhiRiIz-+rk7J=&H5~A~%LjfiCuv9Gg zvW-K&J9x5D{?NFQrNagg?u41CzxWnK7nJe?$LE@|n~3b*)Js?ljajQfJNJ}wsCPpR z*Nw!aY5K9a-ss?^ZEnqx#L-STa-n zQA>$3Qv=-rR;+XoA(MP_O~6&A+YzNHgp>436~NWRW=~_YV~=C80lwOPH_o+J!E_Wf zm3?YVOB{^r0*n@w*jcy)S(iEZSU6Kns@Cf!S-4o(xw#Fp@G@{Rwpgb#RXCagi0yWj z1UPtB*qE7Xi#+Y0-l12az#KX)@G^39&aMEp>1J&XRNRb)r}a__uMY_J7dhLe7`XLJ z39q2;g|n8-xgMGM^n!$nvjE9NE@n%sah)6sm?t@eXt@nf@eiA+2?Tan_}E7{$P6El zq=oL{+to)#i=)tt@q~)+1pfDyipkoG&-1eYI*^w4?X$Chiu$>|v$H#+IJ1l8>WuEW z0iR-Pz|JaQMxcYE+s8ZK&%n~eJlUDY$=&mzG_?X~J@3qLe)PhVms1Q|fQ_BAyV=dr z|JlzH@D&=+W3lmwNyTHZA@a^7g@1*YiHo@^=TZ=aJUKtE+|l!P?V z7wurTWtg{xf$#;d!GR@CN^xvznqiwE{k$Lu(QrERvT~79SzJ17OpS+RCpVn=F=} zTB^=7t8M3)(!f}BenSYusoJ;OFQrM^ff-?{WdU%dsvk6oMm_jLO@yz#0s-DHh_1T@ z;k-h1{*X8y=&3wc-;O)wNpGbusKhUR`=$51UROwHYm6y=TJ-8Z;$L;YC*# zu9qYbT|NZkT;(B9Ycqq%M$o|?DP}HD5bWHqx=BxP%U6EyrN3X3&n(|&1$k57)_Z2e z8({?qW&%2|@rr(s447TZ*R3Pl>tE>CzQ&g^TXwrnJ3%{e?NtZ0!W$QwwRwJcalQN> z+)BNcK4>0#Pu<+l=N0M#o+*4E(G!+DNiO8hfX~TGEVb9_HI|OWUoXf_-Kd@x&m|#g z>1!D1dV=RC-ZMV$*|#9%*JXjrYaxR$=7xKp10i6STt_@1u>y^^u-reBA!hL>#W$qf z&#b&Ziy>tSU|;_(;{h9JLuM)^&{z1!;2s3!(X9b}Z)37>Q7r;J@#T7Xzg+g5EO=== zO(+13nN$-7t~Zr;Rbe`8$vmhti#c;!AE-S%D`XbYKJ6)8$x{l`u;_M zoanTV@)~>#@dnDmjuzJX0C3xx9_wrXh!|VS!I&iwz>!SB287aXBCz3~n-=^8B9m(q zlLPZ`Q%<$w7$qQGpUMxN%+Y@=TGWqkNxO2`*2m=}`*ec&Y+_~^PksJcA=xdO5*ONI zgT1rq7UvE6v&mKUcfWv~<5q~lVM?5KUO*wcQ8xi)`tQtepH*Y)zW>vlr}@Nkst$x~ zjb^6IZvTu{lp-8@9mvuf(g9TF6<Ekcj736joo8 z8;s~J9rC-o5o9jcG@E=)+W5Z$V zazcd{mU2M`#+v&%1!@eT8gk5EacUam`Gkz9l!;g>CP0c%ueCyO*Qz~#Nlut%;Z^X_ z;}JIz%l#tC{|FEsGMqC)a{fnC>VFG$aWFCccRtzw)liq*fAY!xSD5Tyd`QgB)>%l% z&Rv_1`G0ZA*cmzgt4sF(S|$6R;i&(ECG}tPTD_5T2;FV_ENTAH4VXfGvi`IjGPq_ z``q3ieO>xguse`mRh?lL?F#5UL@QtY&lkL>^asu(jq#FM+4|9}*K&3Kj`_-Jkmc_! zVl#XQo6lX^XoByMyP~wfPc%>3Xg>tm?|j$$sAHmD2s6XabK!5P3v7XRy0IHJinlMC zraLRS`?S-EgkIn*5W zg8lF5^}k(1|DB_dGYj zNVa#lLj=wuL0=&G^3$L<(0hnSOzZD-VZvU6?|@JE6ST_@Rh~ELCl23gQD2Df#7}8V z^kf_2D(cI50UAad{!$A~zYcqs8^Z$^pU=*uQA3gBZ(k6V9a*6NI5Pil#=-v22I7BY z-niKRKVjbf(QwfJPk6Zh?w$Yt{eQgPf8z4~YmtogzZS_@|3i`NUlHwpR3zhK=ltJs zd0XBd-pc=qWPEmWJ-k;fWZLqn7@CQ6+5_w(tDgUwAxyhqIM#hQdVSXHEks15!@*<` z<6=_dLfGb+7Foqq#6)nC80Nh)D<(o4O)NRi&@8fM+&jUE7D?VLvUR;qc_zk?7G}pU zUr*znH(N)WPB(lfn~j?vhY|HTK_cShP}0TUHaYQ-U+RK@{naDBI90-h0K(WvS&iGu zGx6kfyAkj0QX7<3i^nPbfltum-UgTAUb`r*S|SlgL*J*Co(-{!_ql|-2;<#ca?(52Y63hQTs|Bha6^>Zy>t;;kk29lTmnk-TthCs0+k9j zt(f7oWA`IiLJSB%MbeE(Eqn^@-Y0 z86IiJHCtsXpS^e?)K8qkJ)&|6NrxDRtZ%$;&|G5I&t`0k~&C_nJzhS@tPQZmvzO)s{9Ewp#5*9tU)A5vF(V9jo(XN=+>Qho{0nAt`7_ zrX>Z5`}wtXgaR{J7Y=3`vVn8?E0&AYC4naz;1YG)I5%iXVBL~6eOVHy3tg=UFz?4` zkL04Xk@^Tps9vUwcb*bZL}9l6$x89_xTKK#Mh$J8l*?Yjhd3^JceGVDXMK-fF57ZU z9-4Bs@e4Wu*>lDt2mR6rnOG91tzhxcbvzN`8Duz|& zPw@EQdbHwEqHBHUEWp`NuGq(qS6<*qv$VO-FS7CF%^d28EN+*_RY}Qs@N{Myzy&5@#^F_7@>Q%MQ9fub;?#&X7fWZh;EMITPJ1sjtxvl)IIE%*@C+ z+(r9&T(ruvu&c$PlaAr7U0jcs2B%Fvd!~zLJE71^C~)j-WVE!FT}U%N+uAA+q;GMa zJkh!NN~bl`kL4@LB_K&5<`)kNPz1cyh;bN`vaQb~jzk;!-+&W@0;Wk9q^+iBmRHv; zrVg#AbRP5=92*@}M^zFh>@aVaNn#LQ$S64Sd2LFoZlNUy!{p-J{#qkf3gs|Yg%??3 zVxlK`10{lKPuck=3T4SaIgZ>Ko;$2X;Gw2Z8l_;&DeyjRzi&Uft(3xw5TZjQMF>Vd z+2Bc5z@sSXXNo_SNeizQ)?#R~>QFQ?VBN=(S8ta%eHIV?A<$d;cM^<4TFY2+ek0E| z1$Jp=E_e97V!LAzk&@m{dX$Eg+3D;Nc<#+8n3gcd1$7l)xShH@?;I0Ts>3S>q-{QQ z2)>Mh%7r+HryDOQM`bo%NHndECvMX?F{0UpwdS6^rRqu}9be*4VBx|2g`MERm3`@K z{ur6+8+Cnnd58FZOQtQR76rvZazN#(_admq2qAWR_&jsa->%g? zyhm40jtI$$_MqvQMDbF`Oibpfg)YlZdX6{^3G)5^^EFs905iV*G=;5WMt0r=xox>^ zdNq2P%Jzt=GHN?VO#JQ`PGWFmUDNDgvbuoo%(goLy^+q`y=N}>KU$d1u5iNj?*=2| zk?vBxMyME^W7&i2dRhjnknzU+J|T5uNm;kO{DcM6wPth60UFR&mDf7Ao`HYF6a5u$ zPM8Z`ZMZqjp;Bn-yig{RMW~VGaI{pYTMsc3Gu4WtV?g$e0E`H|@>D9&nZQKx-{3W7 z@QF5+4AQhY1V<`klzGf2w{A|sHz)Cv(u!?4>Vu(J)P4rie(k8myX9PPu>xt!t{~|o zts5mR{F0+NmG;0?8b#(l_~HJIvS7~}2&~}-E(#ZSoZXGNe*uuh1wo-GeFewViM<8r zZ}ljB11y=u1zNgei#r&pkf(!ThF^4X>Aa=hapTIP;R_zOr;p@4U-C0c4t8Vi;(%>c z#Ba=TQY2>bX3&AKL76@Tk2i?>j4tcd9H1~f`&IayXG0!kn_yin&inunOO0xLB^DUW z-4*r_PazpfmE6u{bNCFbMw2OtbQrJ4)GGXegwvx_Q%JB5`YhstnhDbq-4!3g?7>yo zd{)M6j@Do*eFa6$i9;?&xaj#`>{jq7P%F$S%?dsF!G?K0rz>%60a{59ee$J0uW!a_ z{43#SAHKk$#vl5ACc>#&&Gr*_a1h&^%Xt-Q^y}}OepO$0t>hD-(gZ&O`WJc+Z@oME z^V+VLgUWnyJB~YXRTw2oOBGmHcn^t_c4?4?I8d`hE#X93NNM2;9SKO%1+dB;G*nOrqhNL7mOh-W zGr4jhLlf>mF?U8Oq>^-2yJpnFgJkV@w4)QNAXkmO44}4ltAP98(&F+q+4~r$m{POU zAFY-KP_(Kx3*3*`Y~-zLO;ayMqQEA#I)4q!Px(y2zY5e)uk=GSOr#!)M)9Bwt8V1t zdLyUTzA&sio5axRC}wb(K4qppi#j#ft#uL&-{|Oos>ieAGt+N5N&s0c+W!UN%SA#s zNbn8_7H?R+3uSqB?{ZDiDhX9{DH5|WjTnvHTwT;iBDfa$ zXs<#TEnu*oKk6VF=kzjHS#V`-dUFTnWB4Y#@T1t!;_u3F?XJiR&p^tA7ZHkv>Gtlw?$! zD;MMT{Kz1&vyTZkhqP=rMrvA24X7Wgrz}+3vMoRK!BXPSUNQE_p}hZJASu?Aqk1cp zv@)M|D{%t|Xa`dfs8mRp>rIyS1sXrkW3#T;rP}W^q|4q^)w$ zN+l?I^Cg-mS=Y2BTekvY%12cC7o^G=aoAbv)ey0weoI#DWy;%7(PhKe=t4Ap4ysg%Cj(@I|cc*ul_o#RF%!%I!!sw^Mk=?D^yW0m> zC&BjuLhtQQV;jg_z4rp+@Vfy?{Bc!GUjjomPWuiHq1+yowp zl-6-oG+%{}y_lD;+ZkW?DTLK;>Bg(DuR1MT>!%`mxk(Nse~{EG2?Xzjsn#jl2jf2N#d0SU*Rz^9 zwg}YrHFgq4BQaw?EQ-JyV-P=Xd*Aj(eP2hc*;*=6E9hqjW#?=dG(KFofjk6?SD?lpH>KuNnTM&%PoitBo+hM zi>YU2t0BJk?zLC9&`!^xCynyg-A9E~B-jcN&yR3qCMaOxPU2B#=P>l5}n<-u!9cCjtFd>EGWWPYkcWd{~MUZx)3<+yZH>P+`|R zH8M=}nrj|Ih==M|ZdJs-XHRe-YOjSi`(vAmKRo!pj&pDRbXXwpi zqIkMB%0jYNUN++YJ;I|3Vw({MqLE`YEwtC8nySifmR)(H(9tj(Tf0|q%zueUz*e|u z2)pLt>w1IPK<~-yH1Sb=OYH%a>1iWst1B{XZXL3kXPltJsuQ@o6n1%zVsM0jQ}aK} z*Mz{d;@{}kH|tI6`0j|9_V&6E?~QBR^-T|hs8B2)9R6^e-&;Gb(1@@+xXsg9DibGx zrA2X>@|u}MCoZQmazmK}1e!J|g#0EcYGRfu>7(Q#bBlNR12BZY_hwN7JaDpDH0RX}S<^*h?%@+(Ar zy6fJ2xd>jjzhQ34h?YhAYV5B9h6t}(%8{AoU_o1&p@s?+TZqqx z>Gm|P_|ApfCx4TgnxoeGlHjf$SUD;dbY7uwy`)2yP`?&ts`!ueOih^@Gy@^DIhp5t z41BFpg~A2Pljyr4U)hS2S2Ci48clD3Ns82m!!_464(^0xLL?|fK`;8gzk`$i3x4Hr zq53WD1eK-{xuQ6xI_kS|+92Y(K&%BnK`lNezP_7}1wA?CCPzvCgFxv_?*;zD2evFe zYPK4{Z?M^kK~lc}vrKpU2cmCKzes`6nOo>$J(_;g5q9LdLO@xK1w(+OV*n#xcqF!s zcOB`}fqgRe5uWiLsvX#UPN# z!brYRLg1Ke*&K|r;Eb5-QX2*haHw#|JCiT>v@_}qG*bb%)OlR1$z&x&MPzzI0Cx5h zC}_)b8B1NE0)-WJv-QQPp^Qw0zk9G_wrZ@2_s!*Y-O6i%ZN)}E#aFew3wsO{B6g08lyQ?<&(;g5Dzt#V9#YOmg{^KKIT1kX8~Hm zd;-ot8EGgr>KtNUpJBp>GRBebq$6m-K$8{DT=>|aazVUCL%rwiD{kSH7y2`qqv;i9 z2lGXE0paFI?PsCpz+T1<-y8v#F&Xsna~t-h{-S}A@ku6iRMk7PX7A%MzK|$)^w*xr z5~X}8zqsZAn>0)fqPjz@yFW6i5C!I}K=LR5JNTPemHI7%lqafcJhaN%85u`cu5#kY z8A`5e;plkMH9;n5dE)M!mZGvzGt0v;l{_|_w$$m)pEeK^S#@hFPd)@pqMWOlX4I21 zu_3a#0I!e;7+UK$x1K+wbjsxR=1}I|>fFqks+azIwA8{f$(2U0$m$a@{ef7>T)yF| zPr=bqO<39eGP(|)89aK+A*+i>$8)QWPo$sEJ4 zC{TlUq};fU+m-V9X_dj~2ls=qRADsIXwq+FH_!N1<1&m1pbpDztbhb!MawWkX_W7b z6%9@Tz7rETPMt0T+)bGiat`Q?zhRa@q+)AN7TL-Zh7XAO7XFN*Gs0559+aINXO1LJod2x|@UfNeo^)yek8n8{0p~#7Q_P%>v@Q zikK#zY8fE>F$X7G2a|oN%ak78KWmM#Di|HW1+D|jpB?hEZH+Ms=#+3#NXvb9>8nWC z9UDCkpv!+OJ`fxm6-YjNNsWGyW>~(FNS5O3W6Im;M|sWe4&C3I~ov#4VPI|sZ3&idl^$Lk+4&& z(Q_895x@wlzrZ`mdhK56?B?@B-xYg#14no#pUv|}P@wSdn5#hCMoqvQdNbs8*0%bHY3LF%v-eaXK;y)`KJv%#Bi5ZHPSFV3#GSpHz+JU+$C)*5Hf*ZsHM zQg65trLT0}Eak3Npyp&9+tgL*`2qr7Z@ZN5{DPzc#-IZ+xoJyB2ZxE1MXU>b9n1KH2~qT^LZd+<}_{G1G}60!sWGnKtwyB8NH=c>w&>74mspg@h!+ zB%OaOAc^;DzN#da6WgWniXse>0tmH4#61=)zb6(^Y@<3QI4Bi+C!P9`eACr`<0cYjpfwH24B<$Ml##>x|$Bp z{i&9|+uhg#Pa1>_nGH{xDf*65?t!+KNt?4%|Mo{bJP%;|$nP%!3D7;*xLYd*JdS}B zLZ{|xRn|OHP)`s)U<~@`+taTzuUd(n5^L0xr$k&gl*X_XVp$w2o8+`8=5H-WywS{h zJUFX!ugbwW6C0N&ZuFqxz7&X3J{KbvCqWyc0w^#TUzh0x`&#&9nY^XA3x9~gbz!Hq z1@@BT110FB&g4KXZRgj6z^2CHc4ej4jfNJMma=}+k@kW*!G*7*4z(4Qo`i8DCDG^a z#~rvKNqDIoh-!NcI0zNS6rgojGciJA`H?+X-?)RiAPZ%9N(4$xU)@D;MeU^OQP=5_ zHS0C0vcYl8oN3!2d|mNw>wqWZOw;bh(LQXi$75Eq<7x>adkVJVduSPPyGCdK#Zuyv zr(YNSn#$sIzb0>Deg9q6alVXD_iOOU^sm6x$@_Xa>A)sW6877DVdJ}Fh{OL>b@UVW z-+56K8`an4cimVSp+5VRVtl3@aUo1lJq%wQPSKpW|Ep0A(gY~uG61yFZZuxrGP}z6 z?*WfsFi&3rV%jhnzab}ZZ-o5DRM0ZDQJ5z>&8x&(wHJ6Q+gOh`$!^%T#WSqrgbk_vQ&J|_ zIHW9gPfP-x%tnW5T;Wl-M_h_pt2WmzVVbQsoCx1}$Z9t?b(is@AQ?1LZTWhdo&I#n zRCa{?n;FH}4nB_Vyj1HgwapsC&_mUb44<=UKba_T=d zLHqA+voUS7XoD5Uwi2pNyGw+Z?A{}hR|K0tobevj|_+vTh0aQyK>)(SyU^{U~76vjWBf8rxm=XBXp zcqoEWH*jl$nFe$EO(3}dNePhbx-2&`Hy(u(8))$_dL6(#9rHN!ss(t)Fejt2E6*D9 zf#(I6)DmF$Xo~5*-9NvNW>3Fe<$Yo|P#K?aBY6DY?#l=Am4n1+X&VGDUc7QKt5vBH z>OT*!h-wbc8;v±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 to set extra flags for FPGA backend compilation diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp index 75e7748024..12bb60593d 100644 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp @@ -1,9 +1,3 @@ -//============================================================== -// Copyright Intel Corporation -// -// SPDX-License-Identifier: MIT -// ============================================================= - // clang-format off #include #include @@ -15,7 +9,6 @@ #include "dpc_common.hpp" using namespace sycl; -using namespace std; // Forward declare the kernel name in the global scope. // This is a FPGA best practice that reduces name mangling in the optimization @@ -42,7 +35,7 @@ void TestAdd(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int15 &c) { q.submit([&](handler &h) { accessor x{inp1, h, read_only}; accessor y{inp2, h, read_only}; - accessor res{result, h, write_only}; + accessor res{result, h, write_only, no_init}; h.single_task([=] { res[0] = x[0] + y[0]; }); }); q.wait(); @@ -56,7 +49,7 @@ void TestDiv(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int15 &c) { q.submit([&](handler &h) { accessor x{inp1, h, read_only}; accessor y{inp2, h, read_only}; - accessor res{result, h, write_only}; + accessor res{result, h, write_only, no_init}; h.single_task

([=] { res[0] = x[0] / y[0]; }); }); q.wait(); @@ -70,7 +63,7 @@ void TestMult(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int28 &c) { q.submit([&](handler &h) { accessor x{inp1, h, read_only}; accessor y{inp2, h, read_only}; - accessor res{result, h, write_only}; + accessor res{result, h, write_only, no_init}; h.single_task([=] { res[0] = x[0] * y[0]; }); }); q.wait(); @@ -85,7 +78,7 @@ void TestShiftLeft(queue &q, const ac_int14 &a, const ac_int14 &b, q.submit([&](handler &h) { accessor x{inp1, h, read_only}; accessor y{inp2, h, read_only}; - accessor res{result, h, write_only}; + accessor res{result, h, write_only, no_init}; h.single_task([=] { res[0] = x[0] << y[0]; }); }); q.wait(); @@ -102,7 +95,7 @@ void TestEfficientShiftLeft(queue &q, const ac_int14 &a, const ac_uint4 &b, q.submit([&](handler &h) { accessor x{inp1, h, read_only}; accessor y{inp2, h, read_only}; - accessor res{result, h, write_only}; + accessor res{result, h, write_only, no_init}; h.single_task([=] { res[0] = x[0] << y[0]; }); }); q.wait(); @@ -121,7 +114,7 @@ void TestGetBitSlice(queue &q, const ac_int14 &a, ac_uint4 &b, const int lsb) { q.submit([&](handler &h) { accessor x{inp1, h, read_only}; accessor y{inp2, h, read_only}; - accessor res{result, h, write_only}; + accessor res{result, h, write_only, no_init}; h.single_task([=] { res[0] = x[0].slc<4>(y[0]); }); }); q.wait(); @@ -129,15 +122,15 @@ void TestGetBitSlice(queue &q, const ac_int14 &a, ac_uint4 &b, const int lsb) { // There is a set_slc(int lsb, const ac_int &slc) which allows the user to // set a bit slice as shown in the example below. -void TestSetBitSlice(queue &q, ac_int14 &a, const ac_int4 &b, int lsb) { - buffer inp1(&a, 1); - buffer inp2(&b, 1); - buffer inp3(&lsb, 1); +void TestSetBitSlice(queue &q, ac_int14 &a, const ac_int4 &b, const int lsb) { + buffer buff_a(&a, 1); + buffer buff_b(&b, 1); + buffer buff_lsb(&lsb, 1); q.submit([&](handler &h) { - accessor x{inp1, h, read_write}; - accessor y{inp2, h, read_only}; - accessor lsb_accessor{inp3, h, read_only}; + accessor x{buff_a, h, read_write}; + accessor y{buff_b, h, read_only}; + accessor lsb_accessor{buff_lsb, h, read_only}; h.single_task([=] { // The set_slc method does not need to have a width specified as a @@ -167,6 +160,9 @@ int main() { // create the SYCL device queue queue q(selector, dpc_common::exception_handler); + // Use a fixed initial seed + srand(123); + // Initialize two random ints int t1 = rand(); int t2 = rand(); @@ -189,7 +185,7 @@ int main() { // addition if (c != c_golden) { passed = false; - std::cout << "Addition failed\n"; + std::cerr << "Addition failed\n"; } std::cout << "ac_int: " << a << " + " << b << " = " << c << "\n"; std::cout << "int: " << t1 << " + " << t2 << " = " << c_golden << "\n"; @@ -207,7 +203,7 @@ int main() { // int multiplication if (c != c_golden) { passed = false; - std::cout << "Multiplier failed\n"; + std::cerr << "Multiplier failed\n"; } std::cout << "ac_int: " << a << " * " << b << " = " << c << "\n"; std::cout << "int: " << t1 << " * " << t2 << " = " << c_golden << "\n"; @@ -227,7 +223,7 @@ int main() { // int division if (c != c_golden) { passed = false; - std::cout << "divider failed\n"; + std::cerr << "divider failed\n"; } std::cout << "ac_int: " << a << " / " << b << " = " << c << "\n"; std::cout << "int: " << t1 << " / " << t2 << " = " << c_golden << "\n"; @@ -251,7 +247,7 @@ int main() { if ((t1 << t2) & (1 << 13)) c_golden |= (~((1 << 14) - 1)); if (c != c_golden) { passed = false; - std::cout << "left_shift failed\n"; + std::cerr << "left_shift failed\n"; } std::cout << "ac_int: " << a << " << " << b << " = " << c << "\n"; std::cout << "int: " << t1 << " << " << t2 << " = " << c_golden @@ -279,7 +275,7 @@ int main() { if ((t1 << t2) & (1 << 13)) c_golden |= (~((1 << 14) - 1)); if (c != c_golden) { passed = false; - std::cout << "efficient_left_shift failed\n"; + std::cerr << "efficient_left_shift failed\n"; } std::cout << "ac_int: " << a << " << " << b << " = " << c << "\n"; std::cout << "int: " << t1 << " << " << t2 << " = " << c_golden @@ -298,7 +294,7 @@ int main() { // Compare the CPU result with the FPGA result if (b != t2) { passed = false; - std::cout << "GetBitSlice failed\n"; + std::cerr << "GetBitSlice failed\n"; } std::cout << "(" << a << ").slc<4>(5) = " << b << "\n"; @@ -316,7 +312,7 @@ int main() { // Compare the CPU result with the FPGA result if (c != t3) { passed = false; - std::cout << "SetBitSlice failed\n"; + std::cerr << "SetBitSlice failed\n"; } std::cout << "Running these two ops on " << a << "\n"; std::cout << "\t(" << a << ").set_slc(6, " << d << ") = " << c << "\n"; @@ -329,7 +325,7 @@ int main() { std::cerr << "Caught a SYCL host exception:\n" << e.what() << "\n"; // Most likely the runtime couldn't find FPGA hardware! - if (e.get_cl_code() == CL_DEVICE_NOT_FOUND) { + if (e.code().value() == CL_DEVICE_NOT_FOUND) { std::cerr << "If you are targeting an FPGA, please ensure that your " "system has a correctly configured FPGA board.\n"; std::cerr << "Run sys_check in the oneAPI root directory to verify.\n"; From b2a5c96b0b0e81180901d8363fc20983710ea984 Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Wed, 6 Oct 2021 05:41:18 -0700 Subject: [PATCH 08/11] remove third party programs notice --- .../Features/ac_types/ac_int/README.md | 2 - .../ac_types/ac_int/third-party-programs.txt | 253 ------------------ 2 files changed, 255 deletions(-) delete mode 100644 DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/third-party-programs.txt diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md index 95a2badcb4..b349ce2067 100755 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md @@ -96,8 +96,6 @@ For detailed documentation on the `set_slc` and `slc` APIs please see the file ` Code samples are licensed under the MIT license. See [License.txt](https://github.com/oneapi-src/oneAPI-samples/blob/master/License.txt) for details. -Third party program Licenses can be found here: [third-party-programs.txt](https://github.com/oneapi-src/oneAPI-samples/blob/master/third-party-programs.txt) - ## Building the `ac_int` Tutorial ### Include Files diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/third-party-programs.txt b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/third-party-programs.txt deleted file mode 100644 index 90daff458d..0000000000 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/third-party-programs.txt +++ /dev/null @@ -1,253 +0,0 @@ -oneAPI Code Samples - Third Party Programs File - -This file contains the list of third party software ("third party programs") -contained in the Intel software and their required notices and/or license -terms. This third party software, even if included with the distribution of the -Intel software, may be governed by separate license terms, including without -limitation, third party license terms, other Intel software license terms, and -open source software license terms. These separate license terms govern your use -of the third party programs as set forth in the “third-party-programs.txt” or -other similarly named text file. - -Third party programs and their corresponding required notices and/or license -terms are listed below. - --------------------------------------------------------------------------------- - -1. Nothings STB Libraries - -stb/LICENSE - - This software is available under 2 licenses -- choose whichever you prefer. - ------------------------------------------------------------------------------ - ALTERNATIVE A - MIT License - Copyright (c) 2017 Sean Barrett - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is furnished to do - so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - ------------------------------------------------------------------------------ - ALTERNATIVE B - Public Domain (www.unlicense.org) - This is free and unencumbered software released into the public domain. - Anyone is free to copy, modify, publish, use, compile, sell, or distribute this - software, either in source code form or as a compiled binary, for any purpose, - commercial or non-commercial, and by any means. - In jurisdictions that recognize copyright laws, the author or authors of this - software dedicate any and all copyright interest in the software to the public - domain. We make this dedication for the benefit of the public at large and to - the detriment of our heirs and successors. We intend this dedication to be an - overt act of relinquishment in perpetuity of all present and future rights to - this software under copyright law. - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- - -2. FGPA example designs-gzip - - SDL2.0 - -zlib License - - - 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. - - --------------------------------------------------------------------------------- - -3. Nbody - (c) 2019 Fabio Baruffa - - Plotly.js - Copyright (c) 2020 Plotly, Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -© 2020 GitHub, Inc. - --------------------------------------------------------------------------------- - -4. GNU-EFI - Copyright (c) 1998-2000 Intel Corporation - -The files in the "lib" and "inc" subdirectories are using the EFI Application -Toolkit distributed by Intel at http://developer.intel.com/technology/efi - -This code is covered by the following agreement: - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. THE EFI SPECIFICATION AND ALL OTHER INFORMATION -ON THIS WEB SITE ARE PROVIDED "AS IS" WITH NO WARRANTIES, AND ARE SUBJECT -TO CHANGE WITHOUT NOTICE. - --------------------------------------------------------------------------------- - -5. Edk2 - Copyright (c) 2019, Intel Corporation. All rights reserved. - - Edk2 Basetools - Copyright (c) 2019, Intel Corporation. All rights reserved. - -SPDX-License-Identifier: BSD-2-Clause-Patent - --------------------------------------------------------------------------------- - -6. Heat Transmission - -GNU LESSER GENERAL PUBLIC LICENSE -Version 3, 29 June 2007 - -Copyright © 2007 Free Software Foundation, Inc. - -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. - -0. Additional Definitions. -As used herein, “this License” refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL” refers to version 3 of the GNU General Public License. - -“The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. - -An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. - -A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”. - -The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. - -The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. - -1. Exception to Section 3 of the GNU GPL. -You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. - -2. Conveying Modified Versions. -If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: - -a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or -b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. -3. Object Code Incorporating Material from Library Header Files. -The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: - -a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. -b) Accompany the object code with a copy of the GNU GPL and this license document. -4. Combined Works. -You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: - -a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. -b) Accompany the Combined Work with a copy of the GNU GPL and this license document. -c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. -d) Do one of the following: -0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. -1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. -e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) -5. Combined Libraries. -You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: - -a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. -b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. -6. Revised Versions of the GNU Lesser General Public License. -The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. - -If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. - --------------------------------------------------------------------------------- -7. Rodinia - Copyright (c)2008-2011 University of Virginia -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted without royalty fees or other restrictions, provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the University of Virginia, the Dept. of Computer Science, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF VIRGINIA OR THE SOFTWARE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -If you use this software or a modified version of it, please cite the most relevant among the following papers: - - - M. A. Goodrum, M. J. Trotter, A. Aksel, S. T. Acton, and K. Skadron. Parallelization of Particle Filter Algorithms. In Proceedings of the 3rd Workshop on Emerging Applications and Many-core Architecture (EAMA), in conjunction with the IEEE/ACM International -Symposium on Computer Architecture (ISCA), June 2010. - - - S. Che, M. Boyer, J. Meng, D. Tarjan, J. W. Sheaffer, Sang-Ha Lee and K. Skadron. -Rodinia: A Benchmark Suite for Heterogeneous Computing. IEEE International Symposium -on Workload Characterization, Oct 2009. - -- J. Meng and K. Skadron. "Performance Modeling and Automatic Ghost Zone Optimization -for Iterative Stencil Loops on GPUs." In Proceedings of the 23rd Annual ACM International -Conference on Supercomputing (ICS), June 2009. - -- L.G. Szafaryn, K. Skadron and J. Saucerman. "Experiences Accelerating MATLAB Systems -Biology Applications." in Workshop on Biomedicine in Computing (BiC) at the International -Symposium on Computer Architecture (ISCA), June 2009. - -- M. Boyer, D. Tarjan, S. T. Acton, and K. Skadron. "Accelerating Leukocyte Tracking using CUDA: -A Case Study in Leveraging Manycore Coprocessors." In Proceedings of the International Parallel -and Distributed Processing Symposium (IPDPS), May 2009. - -- S. Che, M. Boyer, J. Meng, D. Tarjan, J. W. Sheaffer, and K. Skadron. "A Performance -Study of General Purpose Applications on Graphics Processors using CUDA" Journal of -Parallel and Distributed Computing, Elsevier, June 2008. - --------------------------------------------------------------------------------- -Other names and brands may be claimed as the property of others. - --------------------------------------------------------------------------------- \ No newline at end of file From 4fc53b49cf5f70770e18d4533355508ceb02d236 Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Wed, 6 Oct 2021 15:10:09 -0700 Subject: [PATCH 09/11] address more review comments --- .../Features/ac_types/ac_int/README.md | 45 +++++++++---------- .../Features/ac_types/ac_int/src/ac_int.cpp | 9 +--- 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md index b349ce2067..6b0fbf3e3c 100755 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md @@ -1,6 +1,6 @@ # Using the Algorithmic C Integer Data-type 'ac_int' -This FPGA tutorial demonstrates how to use the Algorithmic C (AC) Data-type 'ac_int' and some best practices. +This FPGA tutorial demonstrates how to use the Algorithmic C (AC) Data-type `ac_int` and some best practices. ***Documentation***: The [DPC++ FPGA Code Samples Guide](https://software.intel.com/content/www/us/en/develop/articles/explore-dpcpp-through-intel-fpga-code-samples.html) helps you to navigate the samples and build your knowledge of DPC++ for FPGA.
The [oneAPI DPC++ FPGA Optimization Guide](https://software.intel.com/content/www/us/en/develop/documentation/oneapi-fpga-optimization-guide) is the reference manual for targeting FPGAs through DPC++.
@@ -11,21 +11,21 @@ The [oneAPI Programming Guide](https://software.intel.com/en-us/oneapi-programmi | OS | Linux* Ubuntu* 18.04/20.04, RHEL*/CentOS* 8, SUSE* 15; Windows* 10 | Hardware | Intel® Programmable Acceleration Card (PAC) with Intel Arria® 10 GX FPGA
Intel® FPGA Programmable Acceleration Card (PAC) D5005 (with Intel Stratix® 10 SX)
Intel® FPGA 3rd party / custom platforms with oneAPI support
*__Note__: Intel® FPGA PAC hardware is only compatible with Ubuntu 18.04* | Software | Intel® oneAPI DPC++ Compiler
Intel® FPGA Add-On for oneAPI Base Toolkit -| What you will learn | Using the ac_int data-type for basic operations
Efficiently using the left shift operation
Setting and reading certain bits of an ac_int number +| What you will learn | Using the `ac_int` data-type for basic operations
Efficiently using the left shift operation
Setting and reading certain bits of an `ac_int` number | Time to complete | 20 minutes ## Purpose -This FPGA tutorial shows how to use the ac_int type with some simple examples. +This FPGA tutorial shows how to use the `ac_int` type with some simple examples. -This data-type can be used in place of native integer types to generate area efficient and optimized designs for the FPGA. For example, operations which do not utilize all of the bits the native integer types are good candidates for replacement with ac_int type. +This data-type can be used in place of native integer types to generate area efficient and optimized designs for the FPGA. For example, operations which do not utilize all of the bits the native integer types are good candidates for replacement with `ac_int` type. ### Simple Code Example -An ac_int number can be defined as follows: +An `ac_int` number can be defined as follows: ```cpp ac_int a; ``` @@ -44,7 +44,7 @@ ac_int are type defined as intN up to 63. ac_int are type defined as uintN up to 63. ``` -For example, a 14 bit signed ac_int can be defined by using +For example, a 14 bit signed `ac_int` can be defined by using ```cpp ac_intN::int14 a; ``` @@ -56,40 +56,39 @@ The tutorial consists of several functions, each of which contains a SYCL kernel * Division * Multiplication * Left shift -* Setting a bit of an ac_int number -* Reading a bit of an ac_int number +* Setting a bit of an `ac_int` number +* Reading a bit of an `ac_int` number #### Basic Operations and Promotion Rules -When using ac_int, we can write Addition, Division, Multiplication operations to use precisely as many bits as are needed to store the results. This is demonstrated by the kernels `Add`, `Div` and `Mult`. +When using `ac_int`, we can write Addition, Division, Multiplication operations to use precisely as many bits as are needed to store the results. This is demonstrated by the kernels `Add`, `Div` and `Mult`. -ac_int automatically promotes the result of all operations to the number of bits needed to represent all possible results without overflowing. For example, the addition of two 8-bit integers results in a 9-bit result to support overflow. +`ac_int` automatically promotes the result of all operations to the number of bits needed to represent all possible results without overflowing. For example, the addition of two 8-bit integers results in a 9-bit result to support overflow. -However, if the user attempts to store the result in an 8-bit container, ac_int will let the user do this, but this leads to the discard of the extra carry bit. The responsibility lies on the user to use the correct datatype. +However, if the user attempts to store the result in an 8-bit container, `ac_int` will let the user do this, but this leads to the discard of the extra carry bit. The responsibility lies on the user to use the correct datatype. These promotions rules are consistent across all architectures so the behavior should be equivalent on x86 or on FPGA. #### Shift Operation -The behavior of a shift operation with ac_ints is slightly different from its behvior with native integer types. For full details, see the ac_int documentation in the file `ac_data_types_ref.pdf`. Some key points to remember are as follows: -- If the datatype of the shift amount is signed, negative shift amounts are accepted. A shift by a negative amount is equivalent to a positive shift in the opposite direction. -- If the user knows that the shift direction and that the shift value is always positive, it is advisable to use an unsigned datatype for the shift value to obtain better QoR. -- Shift values of greater than the width of the datatypes are treated as a shift equal to the width of the datatype. +The behavior of a shift operation with an `ac_int` is slightly different from its behavior with native integer types. For full details, see the `ac_int` documentation in the file `ac_data_types_ref.pdf`. Some key points to remember are as follows: +- If the datatype of the shift amount is not explicitly unsigned (either using ac_int or using the unsigned keyword), then the compiler will generate a more complex shifter that allows negative shifts and positive shifts. A right-shift by a negative amount is equivalent to a positive left-shift. +- Normally, you will not want to enable negative shifting, so you should use an unsigned datatype for the shift value to obtain a more resource efficient design. +- Shift values greater than the width of the data types are treated as a shift equal to the width of the datatype. +- The shift operation can be done more efficiently by specifying the amount to shift with the smallest possible `ac_int`. -Further, the operation can be done more efficiently by specifying the amount to shift with the smallest possible ac_int. - -For example, in the tutorial, two kernels perform the left shift operation: `ShiftLeft` and `EfficientShiftLeft`. Both operate on an 14 bits wide ac_int. The former stores the shift amount in an ac_int which is 14 bits wide and the latter stores it in an ac_int which is 4 bits wide. The latter will generate lesser hardware. +For example, in the tutorial, two kernels perform the left shift operation: `ShiftLeft` and `EfficientShiftLeft`. Both operate on an 14 bits wide `ac_int`. The former stores the shift amount in an `ac_int` which is 14 bits wide and the latter stores it in an `ac_int` which is 4 bits wide. The latter will generate simpler hardware. #### Bit Slice Operations -The kernels `GetBitSlice` and `SetBitSlice` show how to read from and write to specific bits of an ac_int number. Note that only static bit widths are supported with such "slice" operations. +The kernels `GetBitSlice` and `SetBitSlice` show how to read from and write to specific bits of an `ac_int` number. Note that only static bit widths are supported with such "slice" operations. For detailed documentation on the `set_slc` and `slc` APIs please see the file `ac_data_types_ref.pdf` ## Key Concepts -* The ac_int data-type can be used to generate hardware for only as many bits as is needed by the operation as compared to native integer types which generate hardware for the entire type width. -* The left shift operation on ac_int can be implemented more efficiently when the amount to shift with is stored in a minimally sized ac_int. -* The ac_int data-type offers functions for several useful operations including reading and writing of certain bits of an ac_int number. This can be very useful in creating bit masks. +* The `ac_int` data-type can be used to generate hardware for only as many bits as is needed by the operation as compared to native integer types which generate hardware for the entire type width. +* The left shift operation on `ac_int` can be implemented more efficiently when the amount to shift with is stored in a minimally sized ac_int``. +* The `ac_int` data-type offers functions for several useful operations including reading and writing of certain bits of an `ac_int` number. This can be very useful in creating bit masks. ## License @@ -247,4 +246,4 @@ PASSED ### Discussion of Results -Using ac_ints can minimize the generated hardware and achieve the same numerical result as standard integer types. This can be very useful when the logic does not need to utilize all of the bits provided by the standard integer type. +`ac_int` can help minimize the generated hardware and achieve the same numerical result as standard integer types. This can be very useful when the logic does not need to utilize all of the bits provided by the standard integer type. diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp index 12bb60593d..b7cbabbcd3 100644 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/ac_int.cpp @@ -38,7 +38,6 @@ void TestAdd(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int15 &c) { accessor res{result, h, write_only, no_init}; h.single_task([=] { res[0] = x[0] + y[0]; }); }); - q.wait(); } void TestDiv(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int15 &c) { @@ -52,7 +51,6 @@ void TestDiv(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int15 &c) { accessor res{result, h, write_only, no_init}; h.single_task
([=] { res[0] = x[0] / y[0]; }); }); - q.wait(); } void TestMult(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int28 &c) { @@ -66,7 +64,6 @@ void TestMult(queue &q, const ac_int14 &a, const ac_int14 &b, ac_int28 &c) { accessor res{result, h, write_only, no_init}; h.single_task([=] { res[0] = x[0] * y[0]; }); }); - q.wait(); } void TestShiftLeft(queue &q, const ac_int14 &a, const ac_int14 &b, @@ -81,7 +78,6 @@ void TestShiftLeft(queue &q, const ac_int14 &a, const ac_int14 &b, accessor res{result, h, write_only, no_init}; h.single_task([=] { res[0] = x[0] << y[0]; }); }); - q.wait(); } // Note how the shift amount is specified with a smaller ac_int than in @@ -98,7 +94,6 @@ void TestEfficientShiftLeft(queue &q, const ac_int14 &a, const ac_uint4 &b, accessor res{result, h, write_only, no_init}; h.single_task([=] { res[0] = x[0] << y[0]; }); }); - q.wait(); } // The method @@ -117,7 +112,6 @@ void TestGetBitSlice(queue &q, const ac_int14 &a, ac_uint4 &b, const int lsb) { accessor res{result, h, write_only, no_init}; h.single_task([=] { res[0] = x[0].slc<4>(y[0]); }); }); - q.wait(); } // There is a set_slc(int lsb, const ac_int &slc) which allows the user to @@ -128,7 +122,7 @@ void TestSetBitSlice(queue &q, ac_int14 &a, const ac_int4 &b, const int lsb) { buffer buff_lsb(&lsb, 1); q.submit([&](handler &h) { - accessor x{buff_a, h, read_write}; + accessor x{buff_a, h, write_only, no_init}; accessor y{buff_b, h, read_only}; accessor lsb_accessor{buff_lsb, h, read_only}; @@ -145,7 +139,6 @@ void TestSetBitSlice(queue &q, ac_int14 &a, const ac_int4 &b, const int lsb) { x[0][0] = 0; }); }); - q.wait(); } int main() { From 4c81eaa533b160f43581d8e5255439607a575898 Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Thu, 7 Oct 2021 06:57:17 -0700 Subject: [PATCH 10/11] address some indentation and formatting comments --- .../Tutorials/Features/ac_types/ac_int/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md index 6b0fbf3e3c..7c6d24f051 100755 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/README.md @@ -72,10 +72,10 @@ These promotions rules are consistent across all architectures so the behavior s #### Shift Operation The behavior of a shift operation with an `ac_int` is slightly different from its behavior with native integer types. For full details, see the `ac_int` documentation in the file `ac_data_types_ref.pdf`. Some key points to remember are as follows: -- If the datatype of the shift amount is not explicitly unsigned (either using ac_int or using the unsigned keyword), then the compiler will generate a more complex shifter that allows negative shifts and positive shifts. A right-shift by a negative amount is equivalent to a positive left-shift. -- Normally, you will not want to enable negative shifting, so you should use an unsigned datatype for the shift value to obtain a more resource efficient design. -- Shift values greater than the width of the data types are treated as a shift equal to the width of the datatype. -- The shift operation can be done more efficiently by specifying the amount to shift with the smallest possible `ac_int`. + - If the datatype of the shift amount is not explicitly `unsigned` (either using `ac_int` or using the `unsigned` keyword), then the compiler will generate a more complex shifter that allows negative shifts and positive shifts. A right-shift by a negative amount is equivalent to a positive left-shift. + - Normally, you will not want to enable negative shifting, so you should use an `unsigned` datatype for the shift value to obtain a more resource efficient design. + - Shift values greater than the width of the data types are treated as a shift equal to the width of the datatype. + - The shift operation can be done more efficiently by specifying the amount to shift with the smallest possible `ac_int`. For example, in the tutorial, two kernels perform the left shift operation: `ShiftLeft` and `EfficientShiftLeft`. Both operate on an 14 bits wide `ac_int`. The former stores the shift amount in an `ac_int` which is 14 bits wide and the latter stores it in an `ac_int` which is 4 bits wide. The latter will generate simpler hardware. From e3fc9888c5c79b1667e7a23eeebd10522b6db642 Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Mon, 18 Oct 2021 11:37:00 -0700 Subject: [PATCH 11/11] do not pass qactypes to report link stage --- .../Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt index 71a19953ed..a2e41f93dd 100755 --- a/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt +++ b/DirectProgramming/DPC++FPGA/Tutorials/Features/ac_types/ac_int/src/CMakeLists.txt @@ -34,6 +34,8 @@ set(EMULATOR_COMPILE_FLAGS "${WIN_FLAG} -fintelfpga ${AC_TYPES_FLAG} -DFPGA_EMUL set(EMULATOR_LINK_FLAGS "-fintelfpga ${AC_TYPES_FLAG}") set(HARDWARE_COMPILE_FLAGS "${WIN_FLAG} -fintelfpga ${AC_TYPES_FLAG} -Wall") set(HARDWARE_LINK_FLAGS "-fintelfpga ${AC_TYPES_FLAG} -Xshardware -Xsboard=${FPGA_BOARD} ${USER_HARDWARE_FLAGS}") +# We do not need to supply the AC_TYPES_FLAG for the 'report' target's linking stage. +set(REPORT_LINK_FLAGS "-fintelfpga -Xshardware -Xsboard=${FPGA_BOARD} ${USER_HARDWARE_FLAGS}") # use cmake -D USER_HARDWARE_FLAGS= to set extra flags for FPGA backend compilation ############################################################################### @@ -59,8 +61,7 @@ set(FPGA_EARLY_IMAGE ${TARGET_NAME}_report.a) add_executable(${FPGA_EARLY_IMAGE} ${SOURCE_FILE}) add_custom_target(report DEPENDS ${FPGA_EARLY_IMAGE}) set_target_properties(${FPGA_EARLY_IMAGE} PROPERTIES COMPILE_FLAGS "${HARDWARE_COMPILE_FLAGS}") -set_target_properties(${FPGA_EARLY_IMAGE} PROPERTIES LINK_FLAGS "${HARDWARE_LINK_FLAGS} -fsycl-link=early") - +set_target_properties(${FPGA_EARLY_IMAGE} PROPERTIES LINK_FLAGS "${REPORT_LINK_FLAGS} -fsycl-link=early") # fsycl-link=early stops the compiler after RTL generation, before invoking Quartus® ###############################################################################