From c551aefd77b72993328225d600b6160e55648b1e Mon Sep 17 00:00:00 2001 From: Andrey Akhmichin <15944199+nekonomicon@users.noreply.github.com> Date: Tue, 17 Oct 2023 13:05:23 +0500 Subject: [PATCH 01/79] utils: mdldec: add boneweights support. --- utils/mdldec/qc.c | 11 ++++- utils/mdldec/smd.c | 121 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 107 insertions(+), 25 deletions(-) diff --git a/utils/mdldec/qc.c b/utils/mdldec/qc.c index b3da410b..6ac563d1 100644 --- a/utils/mdldec/qc.c +++ b/utils/mdldec/qc.c @@ -513,12 +513,15 @@ static void WriteSequenceInfo( FILE *fp ) } } - if( seqdesc->blendtype[0] ) + if( seqdesc->numblends > 1 ) { GetMotionTypeString( seqdesc->blendtype[0], motion_types, sizeof( motion_types ), false ); fprintf( fp, "\tblend %s %.0f %.0f\n", motion_types, seqdesc->blendstart[0], seqdesc->blendend[0] ); + + if( !seqdesc->blendtype[0] ) + printf( "WARNING: Something wrong with blending type for sequence: %s\n", seqdesc->label ); } for( j = 0; j < seqdesc->numevents; j++ ) @@ -613,7 +616,7 @@ void WriteQCScript( void ) WriteBodyGroupInfo( fp ); - fprintf( fp, "$flags %i\n\n", model_hdr->flags ); + fprintf( fp, "$flags %u\n\n", model_hdr->flags &~( STUDIO_HAS_BONEINFO | STUDIO_HAS_BONEWEIGHTS ) ); fprintf( fp, "$eyeposition %f %f %f\n\n", model_hdr->eyeposition[0], model_hdr->eyeposition[1], model_hdr->eyeposition[2] ); if( !model_hdr->numtextures ) @@ -621,6 +624,10 @@ void WriteQCScript( void ) WriteSkinFamilyInfo( fp ); WriteTextureRenderMode( fp ); + + if( model_hdr->flags & ( STUDIO_HAS_BONEINFO | STUDIO_HAS_BONEWEIGHTS ) ) + fputs( "$boneweights\n\n", fp ); + WriteAttachmentInfo( fp ); fprintf( fp, "$bbox %f %f %f", model_hdr->min[0], model_hdr->min[1], model_hdr->min[2] ); diff --git a/utils/mdldec/smd.c b/utils/mdldec/smd.c index 9c3b4a5b..d1ad5875 100644 --- a/utils/mdldec/smd.c +++ b/utils/mdldec/smd.c @@ -25,17 +25,18 @@ GNU General Public License for more details. #include "smd.h" static matrix3x4 *bonetransform; +static matrix3x4 *worldtransform; /* ============ CreateBoneTransformMatrices ============ */ -static qboolean CreateBoneTransformMatrices( void ) +static qboolean CreateBoneTransformMatrices( matrix3x4 **matrix ) { - bonetransform = calloc( model_hdr->numbones, sizeof( matrix3x4 ) ); + *matrix = calloc( model_hdr->numbones, sizeof( matrix3x4 ) ); - if( !bonetransform ) + if( !*matrix ) { fputs( "ERROR: Couldn't allocate memory for bone transformation matrices!\n", stderr ); return false; @@ -73,14 +74,28 @@ static void FillBoneTransformMatrices( void ) } } +/* +============ +FillWorldTransformMatrices +============ +*/ +static void FillWorldTransformMatrices( void ) +{ + int i; + mstudioboneinfo_t *boneinfo = (mstudioboneinfo_t *)( (byte *)model_hdr + model_hdr->boneindex + model_hdr->numbones * sizeof( mstudiobone_t ) ); + + for( i = 0; i < model_hdr->numbones; i++, boneinfo++ ) + Matrix3x4_ConcatTransforms( worldtransform[i], bonetransform[i], boneinfo->poseToBone ); +} + /* ============ RemoveBoneTransformMatrices ============ */ -static void RemoveBoneTransformMatrices( void ) +static void RemoveBoneTransformMatrices( matrix3x4 **matrix ) { - free( bonetransform ); + free( *matrix ); } /* @@ -220,15 +235,19 @@ WriteTriangleInfo */ static void WriteTriangleInfo( FILE *fp, mstudiomodel_t *model, mstudiotexture_t *texture, mstudiotrivert_t **triverts, qboolean isevenstrip ) { - int i, indices[3]; - int vert_index; - int norm_index; - int bone_index; - float s, t, u, v; - byte *vertbone; - vec3_t *studioverts; - vec3_t *studionorms; - vec3_t vert, norm; + int i, j, k, l, indices[3]; + int vert_index; + int norm_index; + int bone_index; + int valid_bones; + float s, t, u, v; + byte *vertbone; + vec3_t *studioverts; + vec3_t *studionorms; + vec3_t vert, norm; + float weights[MAXSTUDIOBONEWEIGHTS], oldweight, totalweight; + matrix3x4 bonematrix[MAXSTUDIOBONEWEIGHTS], skinmatrix, *pskinmatrix; + mstudioboneweight_t *studioboneweights; if( isevenstrip ) { @@ -246,6 +265,7 @@ static void WriteTriangleInfo( FILE *fp, mstudiomodel_t *model, mstudiotexture_t vertbone = ( (byte *)model_hdr + model->vertinfoindex ); studioverts = (vec3_t *)( (byte *)model_hdr + model->vertindex ); studionorms = (vec3_t *)( (byte *)model_hdr + model->normindex ); + studioboneweights = (mstudioboneweight_t *)( (byte *)model_hdr + model->blendvertinfoindex ); s = 1.0f / texture->width; t = 1.0f / texture->height; @@ -258,8 +278,39 @@ static void WriteTriangleInfo( FILE *fp, mstudiomodel_t *model, mstudiotexture_t norm_index = triverts[indices[i]]->normindex; bone_index = vertbone[vert_index]; - Matrix3x4_VectorTransform( bonetransform[bone_index], studioverts[vert_index], vert ); - Matrix3x4_VectorRotate( bonetransform[bone_index], studionorms[norm_index], norm ); + if( model_hdr->flags & STUDIO_HAS_BONEWEIGHTS ) + { + valid_bones = 0, totalweight = 0; + memset(skinmatrix, 0, sizeof(matrix3x4)); + + for( j = 0; j < MAXSTUDIOBONEWEIGHTS; ++j ) + if( studioboneweights[vert_index].bone[j] != -1 ) + valid_bones++; + + for( j = 0; j < valid_bones; ++j ) + { + Matrix3x4_Copy( bonematrix[j], worldtransform[studioboneweights[vert_index].bone[j]] ); + weights[j] = studioboneweights[vert_index].weight[j] / 255.0f; + totalweight += weights[j]; + } + + oldweight = weights[0]; + + if( totalweight < 1.0f ) + weights[0] += 1.0f - totalweight; + + for( j = 0; j < valid_bones; ++j ) + for( k = 0; k < 3; ++k ) + for( l = 0; l < 4; ++l ) + skinmatrix[k][l] += bonematrix[j][k][l] * weights[j]; + + pskinmatrix = &skinmatrix; + } + else + pskinmatrix = &bonetransform[bone_index]; + + Matrix3x4_VectorTransform( *pskinmatrix, studioverts[vert_index], vert ); + Matrix3x4_VectorRotate( *pskinmatrix, studionorms[norm_index], norm ); VectorNormalize( norm ); if( texture->flags & STUDIO_NF_UV_COORDS ) @@ -273,11 +324,25 @@ static void WriteTriangleInfo( FILE *fp, mstudiomodel_t *model, mstudiotexture_t v = 1.0f - triverts[indices[i]]->t * t; } - fprintf( fp, "%3i %f %f %f %f %f %f %f %f\n", + fprintf( fp, "%3i %f %f %f %f %f %f %f %f", bone_index, vert[0], vert[1], vert[2], norm[0], norm[1], norm[2], u, v ); + + if( model_hdr->flags & STUDIO_HAS_BONEWEIGHTS ) + { + fprintf( fp, " %d", valid_bones ); + + weights[0] = oldweight; + + for( j = 0; j < valid_bones; ++j ) + fprintf( fp, " %d %f", + studioboneweights[vert_index].bone[j], + weights[j] ); + } + + fputs( "\n", fp ); } } @@ -451,11 +516,19 @@ static void WriteReferences( void ) char name[64]; char filename[MAX_SYSPATH]; - if( !CreateBoneTransformMatrices() ) + if( !CreateBoneTransformMatrices( &bonetransform ) ) return; FillBoneTransformMatrices(); + if( model_hdr->flags & STUDIO_HAS_BONEINFO ) + { + if( !CreateBoneTransformMatrices( &worldtransform ) ) + return; + + FillWorldTransformMatrices(); + } + for( i = 0; i < model_hdr->numbodyparts; i++ ) { bodypart = (mstudiobodyparts_t *)( (byte *)model_hdr + model_hdr->bodypartindex ) + i; @@ -474,8 +547,7 @@ static void WriteReferences( void ) if( len == -1 ) { fprintf( stderr, "ERROR: Destination path is too long. Can't write %s.smd\n", name ); - RemoveBoneTransformMatrices(); - return; + goto _fail; } fp = fopen( filename, "w" ); @@ -483,8 +555,7 @@ static void WriteReferences( void ) if( !fp ) { fprintf( stderr, "ERROR: Can't write %s\n", filename ); - RemoveBoneTransformMatrices(); - return; + goto _fail; } fputs( "version 1\n", fp ); @@ -499,7 +570,11 @@ static void WriteReferences( void ) } } - RemoveBoneTransformMatrices(); +_fail: + RemoveBoneTransformMatrices( &bonetransform ); + + if( model_hdr->flags & STUDIO_HAS_BONEINFO ) + RemoveBoneTransformMatrices( &worldtransform ); } /* From a251600c8a09866ecf25cb344d0ae3ed3a84fd60 Mon Sep 17 00:00:00 2001 From: Ivan Avdeev Date: Wed, 18 Oct 2023 00:31:40 -0700 Subject: [PATCH 02/79] engine: common: imagelib: add KTX2 support (#1455) * engine: common: imagelib: add KTX2 support Adds basic KTX2 support for a few compressed formats. KTX2 essentially is a Vulkan-centric texture format that supports literally hundreds of pixel formats. For now only support for these is added: - `VK_FORMAT_BC4_UNORM_BLOCK` - `VK_FORMAT_BC4_SNORM_BLOCK` - `VK_FORMAT_BC5_UNORM_BLOCK` - `VK_FORMAT_BC5_SNORM_BLOCK` - `VK_FORMAT_BC6H_UFLOAT_BLOCK` - `VK_FORMAT_BC6H_SFLOAT_BLOCK` - `VK_FORMAT_BC7_UNORM_BLOCK` - `VK_FORMAT_BC7_SRGB_BLOCK` Adding more formats is relatively straightforward: - Copy format definition from `VkFormat` enum in `vulkan_core.h` - Add a new definition into `pixformat_t` enum. - Add format size calculation into `Image_ComputeSize()` While we're at it, also adds a few new formats to DDS: - BC4_UNORM -- PF_BC4_UNSIGNED - BC4_SNORM -- PF_BC4_SIGNED - BC5_UNORM -- PF_BC5_UNSIGNED - BC5_SNORM -- PF_BC5_SIGNED - BC7 is expanded into BC7_UNORM and BC7_SRGB ref_gl and ref_soft code is updated where it made sense. But not tested really. Support for these formats has been tested with ref_vk. * address spaces-vs-parentheses formatting where noticed * parenthesize sizeofs * move ktx2.h to imagelib as img_ktx2.h; massage it a bit * use SetBits() instead of |= * remove stale TODO comments --- common/com_image.h | 24 +++- engine/common/imagelib/imagelib.h | 2 + engine/common/imagelib/img_dds.c | 68 +++++----- engine/common/imagelib/img_dds.h | 5 +- engine/common/imagelib/img_ktx2.c | 204 +++++++++++++++++++++++++++++ engine/common/imagelib/img_ktx2.h | 79 +++++++++++ engine/common/imagelib/img_utils.c | 34 +++++ ref/gl/gl_image.c | 22 ++-- ref/soft/r_image.c | 12 +- 9 files changed, 401 insertions(+), 49 deletions(-) create mode 100644 engine/common/imagelib/img_ktx2.c create mode 100644 engine/common/imagelib/img_ktx2.h diff --git a/common/com_image.h b/common/com_image.h index d9f5ef6b..098a0d12 100644 --- a/common/com_image.h +++ b/common/com_image.h @@ -9,7 +9,20 @@ NOTE: number at end of pixelformat name it's a total bitscount e.g. PF_RGB_24 == ======================================================================== */ #define ImageRAW( type ) (type == PF_RGBA_32 || type == PF_BGRA_32 || type == PF_RGB_24 || type == PF_BGR_24 || type == PF_LUMINANCE) -#define ImageDXT( type ) (type == PF_DXT1 || type == PF_DXT3 || type == PF_DXT5 || type == PF_ATI2 || type == PF_BC6H_SIGNED || type == PF_BC6H_UNSIGNED || type == PF_BC7) +#define ImageCompressed( type ) \ + ( type == PF_DXT1 \ + || type == PF_DXT3 \ + || type == PF_DXT5 \ + || type == PF_ATI2 \ + || type == PF_BC4_SIGNED \ + || type == PF_BC4_UNSIGNED \ + || type == PF_BC5_SIGNED \ + || type == PF_BC5_UNSIGNED \ + || type == PF_BC6H_SIGNED \ + || type == PF_BC6H_UNSIGNED \ + || type == PF_BC7_UNORM \ + || type == PF_BC7_SRGB \ + || type == PF_KTX2_RAW ) typedef enum { @@ -25,9 +38,15 @@ typedef enum PF_DXT3, // s3tc DXT3/BC2 format PF_DXT5, // s3tc DXT5/BC3 format PF_ATI2, // latc ATI2N/BC5 format + PF_BC4_SIGNED, + PF_BC4_UNSIGNED, + PF_BC5_SIGNED, + PF_BC5_UNSIGNED, PF_BC6H_SIGNED, // bptc BC6H signed FP16 format PF_BC6H_UNSIGNED, // bptc BC6H unsigned FP16 format - PF_BC7, // bptc BC7 format + PF_BC7_UNORM, // bptc BC7 format + PF_BC7_SRGB, + PF_KTX2_RAW, // Raw KTX2 data, used for yet unsupported KTX2 subformats PF_TOTALCOUNT, // must be last } pixformat_t; @@ -50,6 +69,7 @@ typedef enum IL_LOAD_DECAL = BIT(5), // special mode for load gradient decals IL_OVERVIEW = BIT(6), // overview required some unque operations IL_LOAD_PLAYER_DECAL = BIT(7), // special mode for player decals + IL_KTX2_RAW = BIT(8), // renderer can consume raw KTX2 files (e.g. ref_vk) } ilFlags_t; // goes into rgbdata_t->encode diff --git a/engine/common/imagelib/imagelib.h b/engine/common/imagelib/imagelib.h index 26905ba2..e4b6614c 100644 --- a/engine/common/imagelib/imagelib.h +++ b/engine/common/imagelib/imagelib.h @@ -142,6 +142,7 @@ void Image_CopyPalette32bit( void ); void Image_SetPixelFormat( void ); void Image_GetPaletteQ1( void ); void Image_GetPaletteHL( void ); +size_t Image_ComputeSize( int type, int width, int height, int depth ); // // formats load @@ -156,6 +157,7 @@ qboolean Image_LoadDDS( const char *name, const byte *buffer, fs_offset_t filesi qboolean Image_LoadFNT( const char *name, const byte *buffer, fs_offset_t filesize ); qboolean Image_LoadLMP( const char *name, const byte *buffer, fs_offset_t filesize ); qboolean Image_LoadPAL( const char *name, const byte *buffer, fs_offset_t filesize ); +qboolean Image_LoadKTX2( const char *name, const byte *buffer, fs_offset_t filesize ); // // formats save diff --git a/engine/common/imagelib/img_dds.c b/engine/common/imagelib/img_dds.c index 361ddae2..1562f847 100644 --- a/engine/common/imagelib/img_dds.c +++ b/engine/common/imagelib/img_dds.c @@ -104,6 +104,13 @@ void Image_DXTGetPixelFormat( dds_t *hdr, dds_header_dxt10_t *headerExt ) { switch( headerExt->dxgiFormat ) { + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + image.type = PF_BC4_UNSIGNED; + break; + case DXGI_FORMAT_BC4_SNORM: + image.type = PF_BC4_SIGNED; + break; case DXGI_FORMAT_BC6H_SF16: image.type = PF_BC6H_SIGNED; break; @@ -112,9 +119,20 @@ void Image_DXTGetPixelFormat( dds_t *hdr, dds_header_dxt10_t *headerExt ) image.type = PF_BC6H_UNSIGNED; break; case DXGI_FORMAT_BC7_UNORM: - case DXGI_FORMAT_BC7_UNORM_SRGB: case DXGI_FORMAT_BC7_TYPELESS: - image.type = PF_BC7; + image.type = PF_BC7_UNORM; + break; + case DXGI_FORMAT_BC7_UNORM_SRGB: + image.type = PF_BC7_SRGB; + break; + case DXGI_FORMAT_BC5_TYPELESS: + image.type = PF_ATI2; + break; + case DXGI_FORMAT_BC5_UNORM: + image.type = PF_BC5_UNSIGNED; + break; + case DXGI_FORMAT_BC5_SNORM: + image.type = PF_BC5_SIGNED; break; default: image.type = PF_UNKNOWN; @@ -122,7 +140,7 @@ void Image_DXTGetPixelFormat( dds_t *hdr, dds_header_dxt10_t *headerExt ) } } else - { + { switch( hdr->dsPixelFormat.dwFourCC ) { case TYPE_DXT1: @@ -143,6 +161,15 @@ void Image_DXTGetPixelFormat( dds_t *hdr, dds_header_dxt10_t *headerExt ) case TYPE_ATI2: image.type = PF_ATI2; break; + case TYPE_BC5S: + image.type = PF_BC5_SIGNED; + break; + case TYPE_BC4S: + image.type = PF_BC4_SIGNED; + break; + case TYPE_BC4U: + image.type = PF_BC4_UNSIGNED; + break; default: image.type = PF_UNKNOWN; // assume error break; @@ -188,27 +215,6 @@ void Image_DXTGetPixelFormat( dds_t *hdr, dds_header_dxt10_t *headerExt ) image.num_mips = hdr->dwMipMapCount; // get actual mip count } -size_t Image_DXTGetLinearSize( int type, int width, int height, int depth ) -{ - switch( type ) - { - case PF_DXT1: return ((( width + 3 ) / 4 ) * (( height + 3 ) / 4 ) * depth * 8 ); - case PF_DXT3: - case PF_DXT5: - case PF_BC6H_SIGNED: - case PF_BC6H_UNSIGNED: - case PF_BC7: - case PF_ATI2: return ((( width + 3 ) / 4 ) * (( height + 3 ) / 4 ) * depth * 16 ); - case PF_LUMINANCE: return (width * height * depth); - case PF_BGR_24: - case PF_RGB_24: return (width * height * depth * 3); - case PF_BGRA_32: - case PF_RGBA_32: return (width * height * depth * 4); - } - - return 0; -} - size_t Image_DXTCalcMipmapSize( dds_t *hdr ) { size_t buffsize = 0; @@ -219,7 +225,7 @@ size_t Image_DXTCalcMipmapSize( dds_t *hdr ) { width = Q_max( 1, ( hdr->dwWidth >> i )); height = Q_max( 1, ( hdr->dwHeight >> i )); - buffsize += Image_DXTGetLinearSize( image.type, width, height, image.depth ); + buffsize += Image_ComputeSize( image.type, width, height, image.depth ); } return buffsize; @@ -255,7 +261,7 @@ uint Image_DXTCalcSize( const char *name, dds_t *hdr, size_t filesize ) if( filesize != buffsize ) // main check { - Con_DPrintf( S_WARN "Image_LoadDDS: (%s) probably corrupted (%i should be %lu)\n", name, buffsize, filesize ); + Con_DPrintf( S_WARN "Image_LoadDDS: (%s) probably corrupted (%zu should be %lu)\n", name, buffsize, filesize ); if( buffsize > filesize ) return false; } @@ -268,7 +274,7 @@ void Image_DXTAdjustVolume( dds_t *hdr ) if( hdr->dwDepth <= 1 ) return; - hdr->dwLinearSize = Image_DXTGetLinearSize( image.type, hdr->dwWidth, hdr->dwHeight, hdr->dwDepth ); + hdr->dwLinearSize = Image_ComputeSize( image.type, hdr->dwWidth, hdr->dwHeight, hdr->dwDepth ); hdr->dwFlags |= DDS_LINEARSIZE; } @@ -323,7 +329,7 @@ qboolean Image_LoadDDS( const char *name, const byte *buffer, fs_offset_t filesi Image_DXTGetPixelFormat( &header, &header2 ); // and image type too :) Image_DXTAdjustVolume( &header ); - if( !Image_CheckFlag( IL_DDS_HARDWARE ) && ImageDXT( image.type )) + if( !Image_CheckFlag( IL_DDS_HARDWARE ) && ImageCompressed( image.type )) return false; // silently rejected if( image.type == PF_UNKNOWN ) @@ -356,8 +362,10 @@ qboolean Image_LoadDDS( const char *name, const byte *buffer, fs_offset_t filesi SetBits( image.flags, IMAGE_HAS_ALPHA ); else if( image.type == PF_DXT5 && Image_CheckDXT5Alpha( &header, fin )) SetBits( image.flags, IMAGE_HAS_ALPHA ); - else if ( image.type == PF_BC7 ) - SetBits(image.flags, IMAGE_HAS_ALPHA); + else if( image.type == PF_BC5_SIGNED || image.type == PF_BC5_UNSIGNED ) + SetBits( image.flags, IMAGE_HAS_ALPHA ); + else if( image.type == PF_BC7_UNORM || image.type == PF_BC7_SRGB ) + SetBits( image.flags, IMAGE_HAS_ALPHA ); if( !FBitSet( header.dsPixelFormat.dwFlags, DDS_LUMINANCE )) SetBits( image.flags, IMAGE_HAS_COLOR ); break; diff --git a/engine/common/imagelib/img_dds.h b/engine/common/imagelib/img_dds.h index b13c342c..dbf957b3 100644 --- a/engine/common/imagelib/img_dds.h +++ b/engine/common/imagelib/img_dds.h @@ -32,6 +32,9 @@ GNU General Public License for more details. #define TYPE_DX10 (('0'<<24)+('1'<<16)+('X'<<8)+'D') // little-endian "DX10" #define TYPE_ATI1 (('1'<<24)+('I'<<16)+('T'<<8)+'A') // little-endian "ATI1" #define TYPE_ATI2 (('2'<<24)+('I'<<16)+('T'<<8)+'A') // little-endian "ATI2" +#define TYPE_BC5S (('S'<<24)+('5'<<16)+('C'<<8)+'B') // little-endian "BC5S" +#define TYPE_BC4S (('S'<<24)+('4'<<16)+('C'<<8)+'B') // little-endian "BC4S" +#define TYPE_BC4U (('U'<<24)+('4'<<16)+('C'<<8)+'B') // little-endian "BC4U" #define TYPE_RXGB (('B'<<24)+('G'<<16)+('X'<<8)+'R') // little-endian "RXGB" doom3 normalmaps #define TYPE_$ (('\0'<<24)+('\0'<<16)+('\0'<<8)+'$') // little-endian "$" #define TYPE_o (('\0'<<24)+('\0'<<16)+('\0'<<8)+'o') // little-endian "o" @@ -202,7 +205,7 @@ typedef enum DXGI_FORMAT_FORCE_UINT = 0xffffffff } dxgi_format_t; -typedef enum +typedef enum { D3D10_RESOURCE_DIMENSION_UNKNOWN = 0, D3D10_RESOURCE_DIMENSION_BUFFER = 1, diff --git a/engine/common/imagelib/img_ktx2.c b/engine/common/imagelib/img_ktx2.c new file mode 100644 index 00000000..a33f563b --- /dev/null +++ b/engine/common/imagelib/img_ktx2.c @@ -0,0 +1,204 @@ +/* +img_ktx2.c - ktx2 format load +Copyright (C) 2023 Provod + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +*/ + +#include "imagelib.h" +#include "xash3d_mathlib.h" +#include "img_ktx2.h" + +static void Image_KTX2Format( uint32_t ktx2_format ) +{ + switch( ktx2_format ) + { + case KTX2_FORMAT_BC4_UNORM_BLOCK: + image.type = PF_BC4_UNSIGNED; + // 1 component for ref_gl + break; + case KTX2_FORMAT_BC4_SNORM_BLOCK: + image.type = PF_BC4_SIGNED; + // 1 component for ref_gl + break; + case KTX2_FORMAT_BC5_UNORM_BLOCK: + image.type = PF_BC5_UNSIGNED; + // 2 components for ref_gl + SetBits( image.flags, IMAGE_HAS_ALPHA ); + break; + case KTX2_FORMAT_BC5_SNORM_BLOCK: + image.type = PF_BC5_SIGNED; + // 2 components for ref_gl + SetBits( image.flags, IMAGE_HAS_ALPHA ); + break; + case KTX2_FORMAT_BC6H_UFLOAT_BLOCK: + image.type = PF_BC6H_UNSIGNED; + // 3 components for ref_gl + SetBits( image.flags, IMAGE_HAS_COLOR ); + break; + case KTX2_FORMAT_BC6H_SFLOAT_BLOCK: + image.type = PF_BC6H_SIGNED; + // 3 components for ref_gl + SetBits( image.flags, IMAGE_HAS_COLOR ); + break; + case KTX2_FORMAT_BC7_UNORM_BLOCK: + image.type = PF_BC7_UNORM; + // 4 components for ref_gl + SetBits( image.flags, IMAGE_HAS_COLOR | IMAGE_HAS_ALPHA ); + break; + case KTX2_FORMAT_BC7_SRGB_BLOCK: + image.type = PF_BC7_SRGB; + // 4 components for ref_gl + SetBits( image.flags, IMAGE_HAS_COLOR | IMAGE_HAS_ALPHA ); + break; + default: + image.type = PF_UNKNOWN; + break; + } +} + +static qboolean Image_KTX2Parse( const ktx2_header_t *header, const byte *buffer, fs_offset_t filesize ) +{ + ktx2_index_t index; + size_t total_size = 0; + size_t max_offset = 0; + const byte *const levels_begin = buffer + KTX2_LEVELS_OFFSET; + + // Sets image.type and image.flags + Image_KTX2Format( header->vkFormat ); + + if( image.type == PF_UNKNOWN ) + { + Con_DPrintf( S_ERROR "%s: unsupported KTX2 format %d\n", __FUNCTION__, header->vkFormat ); + return false; + } + + if( !Image_CheckFlag( IL_DDS_HARDWARE ) && ImageCompressed( image.type )) + { + Con_DPrintf( S_WARN "%s: has compressed format, but support is not advertized\n", __FUNCTION__ ); + return false; + } + + if( header->pixelDepth > 1 ) + { + Con_DPrintf( S_ERROR "%s: unsupported KTX2 pixelDepth %d\n", __FUNCTION__, header->pixelDepth ); + return false; + } + + if( header->faceCount > 1 ) + { + Con_DPrintf( S_ERROR "%s: unsupported KTX2 faceCount %d\n", __FUNCTION__, header->faceCount ); + return false; + } + + if( header->layerCount > 1 ) + { + Con_DPrintf( S_ERROR "%s: unsupported KTX2 layerCount %d\n", __FUNCTION__, header->layerCount ); + return false; + } + + if( header->supercompressionScheme != 0 ) + { + Con_DPrintf( S_ERROR "%s: unsupported KTX2 supercompressionScheme %d\n", __FUNCTION__, header->supercompressionScheme ); + return false; + } + + if( header->levelCount * sizeof( ktx2_level_t ) + KTX2_LEVELS_OFFSET > filesize ) + { + Con_DPrintf( S_ERROR "%s: file abruptly ends\n", __FUNCTION__ ); + return false; + } + + memcpy( &index, buffer + KTX2_IDENTIFIER_SIZE + sizeof( ktx2_header_t ), sizeof( index )); + + for( int mip = 0; mip < header->levelCount; ++mip ) + { + const uint32_t width = Q_max( 1, ( header->pixelWidth >> mip )); + const uint32_t height = Q_max( 1, ( header->pixelHeight >> mip )); + const uint32_t mip_size = Image_ComputeSize( image.type, width, height, image.depth ); + + ktx2_level_t level; + memcpy( &level, levels_begin + mip * sizeof( level ), sizeof( level )); + + if( mip_size != level.byteLength ) + { + Con_DPrintf( S_ERROR "%s: mip=%d size mismatch read=%d, but computed=%d\n", + __FUNCTION__, mip, (int)level.byteLength, mip_size ); + return false; + } + + total_size += level.byteLength; + max_offset = Q_max( max_offset, level.byteLength + level.byteOffset ); + } + + if( max_offset > filesize ) + return false; + + image.size = total_size; + image.num_mips = header->levelCount; + + image.rgba = Mem_Malloc( host.imagepool, image.size ); + memcpy( image.rgba, buffer, image.size ); + + for( int mip = 0, cursor = 0; mip < header->levelCount; ++mip ) + { + ktx2_level_t level; + memcpy( &level, levels_begin + mip * sizeof( level ), sizeof( level )); + memcpy( image.rgba + cursor, buffer + level.byteOffset, level.byteLength ); + cursor += level.byteLength; + } + + return true; +} + +qboolean Image_LoadKTX2( const char *name, const byte *buffer, fs_offset_t filesize ) +{ + ktx2_header_t header; + + if( filesize < KTX2_MINIMAL_HEADER_SIZE ) + return false; + + if( memcmp( buffer, KTX2_IDENTIFIER, KTX2_IDENTIFIER_SIZE ) != 0 ) + { + Con_DPrintf( S_ERROR "%s: (%s) has invalid identifier\n", __FUNCTION__, name ); + return false; + } + + memcpy( &header, buffer + KTX2_IDENTIFIER_SIZE, sizeof( header )); + + image.width = header.pixelWidth; + image.height = header.pixelHeight; + image.depth = Q_max( 1, header.pixelDepth ); + image.num_mips = 1; + + ClearBits( image.flags, IMAGE_HAS_COLOR | IMAGE_HAS_ALPHA | IMAGE_HAS_LUMA ); + + if( !Image_KTX2Parse( &header, buffer, filesize )) + { + if( !Image_CheckFlag( IL_KTX2_RAW )) + return false; + + // If KTX2 to imagelib conversion failed, try passing the file as raw data. + // This is useful for ref_vk which can directly support hundreds of formats which we don't convert to pixformat_t here + + Con_DPrintf( S_WARN "%s: (%s) could not be converted to supported imagelib format, passing as raw KTX2 data\n", __FUNCTION__, name ); + // This is a catch-all for ref_vk, which can do this format directly and natively + image.type = PF_KTX2_RAW; + + image.size = filesize; + //image.encode = TODO custom encode type? + + image.rgba = Mem_Malloc( host.imagepool, image.size ); + memcpy( image.rgba, buffer, image.size ); + } + + return true; +} diff --git a/engine/common/imagelib/img_ktx2.h b/engine/common/imagelib/img_ktx2.h new file mode 100644 index 00000000..e1183315 --- /dev/null +++ b/engine/common/imagelib/img_ktx2.h @@ -0,0 +1,79 @@ +/* +img_ktx2.h - ktx2 format reference +Copyright (C) 2023 Provod + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +*/ +#ifndef IMG_KTX2_H +#define IMG_KTX2_H + +#include + +#define KTX2_IDENTIFIER_SIZE 12 +#define KTX2_IDENTIFIER "\xABKTX 20\xBB\r\n\x1A\n" + +/* +static const char k_ktx2_identifier[KTX2_IDENTIFIER_SIZE] = +{ + '\xAB', 'K', 'T', 'X', ' ', '2', '0', '\xBB', '\r', '\n', '\x1A', '\n' +}; +*/ + +typedef struct +{ + uint32_t vkFormat; + uint32_t typeSize; + uint32_t pixelWidth; + uint32_t pixelHeight; + uint32_t pixelDepth; + uint32_t layerCount; + uint32_t faceCount; + uint32_t levelCount; + uint32_t supercompressionScheme; +} ktx2_header_t; + +typedef struct +{ + uint32_t dfdByteOffset; + uint32_t dfdByteLength; + uint32_t kvdByteOffset; + uint32_t kvdByteLength; + uint64_t sgdByteOffset; + uint64_t sgdByteLength; +} ktx2_index_t; + +typedef struct +{ + uint64_t byteOffset; + uint64_t byteLength; + uint64_t uncompressedByteLength; +} ktx2_level_t; + +#define KTX2_LEVELS_OFFSET ( KTX2_IDENTIFIER_SIZE + sizeof( ktx2_header_t ) + sizeof( ktx2_index_t )) + +#define KTX2_MINIMAL_HEADER_SIZE ( KTX2_LEVELS_OFFSET + sizeof( ktx2_level_t )) + +// These have the same values as enum VkFormat in vulkan_core.h +// There are hundreds of formats which can be contained in KTX2. +// Below are listed the ones which are supported here. This list can be extended. +typedef enum +{ + KTX2_FORMAT_BC4_UNORM_BLOCK = 139, + KTX2_FORMAT_BC4_SNORM_BLOCK = 140, + KTX2_FORMAT_BC5_UNORM_BLOCK = 141, + KTX2_FORMAT_BC5_SNORM_BLOCK = 142, + KTX2_FORMAT_BC6H_UFLOAT_BLOCK = 143, + KTX2_FORMAT_BC6H_SFLOAT_BLOCK = 144, + KTX2_FORMAT_BC7_UNORM_BLOCK = 145, + KTX2_FORMAT_BC7_SRGB_BLOCK = 146, +} ktx2_format_t; + +#endif // IMG_KTX2_H diff --git a/engine/common/imagelib/img_utils.c b/engine/common/imagelib/img_utils.c index 094f6345..a6cd189e 100644 --- a/engine/common/imagelib/img_utils.c +++ b/engine/common/imagelib/img_utils.c @@ -105,6 +105,7 @@ static const loadpixformat_t load_game[] = { "%s%s.%s", "lmp", Image_LoadLMP, IL_HINT_NO }, // hl menu images (cached.wad etc) { "%s%s.%s", "fnt", Image_LoadFNT, IL_HINT_HL }, // hl console font (fonts.wad etc) { "%s%s.%s", "pal", Image_LoadPAL, IL_HINT_NO }, // install studio\sprite palette +{ "%s%s.%s", "ktx2", Image_LoadKTX2, IL_HINT_NO }, // ktx2 for world and studio models { NULL, NULL, NULL, IL_HINT_NO } }; @@ -1446,3 +1447,36 @@ qboolean Image_Process(rgbdata_t **pix, int width, int height, uint flags, float return result; } + +// This codebase has too many copies of this function: +// - ref_gl has one +// - ref_vk has one +// - ref_soft has one +// - many more places probably have one too +// TODO figure out how to make it available for ref_* +size_t Image_ComputeSize( int type, int width, int height, int depth ) +{ + switch( type ) + { + case PF_DXT1: + case PF_BC4_SIGNED: + case PF_BC4_UNSIGNED: + return ((( width + 3 ) / 4 ) * (( height + 3 ) / 4 ) * depth * 8 ); + case PF_DXT3: + case PF_DXT5: + case PF_ATI2: + case PF_BC5_UNSIGNED: + case PF_BC5_SIGNED: + case PF_BC6H_SIGNED: + case PF_BC6H_UNSIGNED: + case PF_BC7_UNORM: + case PF_BC7_SRGB: return ((( width + 3 ) / 4 ) * (( height + 3 ) / 4 ) * depth * 16 ); + case PF_LUMINANCE: return ( width * height * depth ); + case PF_BGR_24: + case PF_RGB_24: return ( width * height * depth * 3 ); + case PF_BGRA_32: + case PF_RGBA_32: return ( width * height * depth * 4 ); + } + + return 0; +} diff --git a/ref/gl/gl_image.c b/ref/gl/gl_image.c index a6e383c3..f0ff212c 100644 --- a/ref/gl/gl_image.c +++ b/ref/gl/gl_image.c @@ -388,7 +388,8 @@ static size_t GL_CalcImageSize( pixformat_t format, int width, int height, int d case PF_DXT5: case PF_BC6H_SIGNED: case PF_BC6H_UNSIGNED: - case PF_BC7: + case PF_BC7_UNORM: + case PF_BC7_SRGB: case PF_ATI2: size = (((width + 3) >> 2) * ((height + 3) >> 2) * 16) * depth; break; @@ -694,7 +695,7 @@ static void GL_SetTextureFormat( gl_texture_t *tex, pixformat_t format, int chan Assert( tex != NULL ); - if( ImageDXT( format )) + if( ImageCompressed( format )) { switch( format ) { @@ -703,7 +704,8 @@ static void GL_SetTextureFormat( gl_texture_t *tex, pixformat_t format, int chan case PF_DXT5: tex->format = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; break; case PF_BC6H_SIGNED: tex->format = GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB; break; case PF_BC6H_UNSIGNED: tex->format = GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB; break; - case PF_BC7: tex->format = GL_COMPRESSED_RGBA_BPTC_UNORM_ARB; break; + case PF_BC7_SRGB: + case PF_BC7_UNORM: tex->format = GL_COMPRESSED_RGBA_BPTC_UNORM_ARB; break; case PF_ATI2: if( glConfig.hardware_type == GLHW_RADEON ) tex->format = GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI; @@ -1094,7 +1096,7 @@ static void GL_TextureImageRAW( gl_texture_t *tex, GLint side, GLint level, GLin } } -static void GL_TextureImageDXT( gl_texture_t *tex, GLint side, GLint level, GLint width, GLint height, GLint depth, size_t size, const void *data ) +static void GL_TextureImageCompressed( gl_texture_t *tex, GLint side, GLint level, GLint width, GLint height, GLint depth, size_t size, const void *data ) { GLuint cubeTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB; qboolean subImage = FBitSet( tex->flags, TF_IMG_UPLOADED ); @@ -1176,7 +1178,7 @@ static qboolean GL_UploadTexture( gl_texture_t *tex, rgbdata_t *pic ) return false; } - if( pic->type == PF_BC6H_SIGNED || pic->type == PF_BC6H_UNSIGNED || pic->type == PF_BC7 ) + if( pic->type == PF_BC6H_SIGNED || pic->type == PF_BC6H_UNSIGNED || pic->type == PF_BC7_UNORM || pic->type == PF_BC7_SRGB ) { if( !GL_Support( GL_ARB_TEXTURE_COMPRESSION_BPTC )) { @@ -1217,7 +1219,7 @@ static qboolean GL_UploadTexture( gl_texture_t *tex, rgbdata_t *pic ) if( buf != NULL && buf >= bufend ) gEngfuncs.Host_Error( "GL_UploadTexture: %s image buffer overflow\n", tex->name ); - if( ImageDXT( pic->type )) + if( ImageCompressed( pic->type )) { for( j = 0; j < Q_max( 1, pic->numMips ); j++ ) { @@ -1225,7 +1227,7 @@ static qboolean GL_UploadTexture( gl_texture_t *tex, rgbdata_t *pic ) height = Q_max( 1, ( tex->height >> j )); texsize = GL_CalcTextureSize( tex->format, width, height, tex->depth ); size = GL_CalcImageSize( pic->type, width, height, tex->depth ); - GL_TextureImageDXT( tex, i, j, width, height, tex->depth, size, buf ); + GL_TextureImageCompressed( tex, i, j, width, height, tex->depth, size, buf ); tex->size += texsize; buf += size; // move pointer tex->numMips++; @@ -1259,7 +1261,7 @@ static qboolean GL_UploadTexture( gl_texture_t *tex, rgbdata_t *pic ) data = GL_ResampleTexture( buf, pic->width, pic->height, tex->width, tex->height, normalMap ); else data = buf; - if( !ImageDXT( pic->type ) && !FBitSet( tex->flags, TF_NOMIPMAP ) && FBitSet( pic->flags, IMAGE_ONEBIT_ALPHA )) + if( !ImageCompressed( pic->type ) && !FBitSet( tex->flags, TF_NOMIPMAP ) && FBitSet( pic->flags, IMAGE_ONEBIT_ALPHA )) data = GL_ApplyFilter( data, tex->width, tex->height ); // mips will be auto-generated if desired @@ -1307,7 +1309,7 @@ static void GL_ProcessImage( gl_texture_t *tex, rgbdata_t *pic ) tex->encode = pic->encode; // share encode method - if( ImageDXT( pic->type )) + if( ImageCompressed( pic->type )) { if( !pic->numMips ) tex->flags |= TF_NOMIPMAP; // disable mipmapping by user request @@ -1922,7 +1924,7 @@ void GL_ProcessTexture( int texnum, float gamma, int topColor, int bottomColor ) return; } - if( ImageDXT( image->original->type )) + if( ImageCompressed( image->original->type )) { gEngfuncs.Con_Printf( S_ERROR "GL_ProcessTexture: can't process compressed texture %s\n", image->name ); return; diff --git a/ref/soft/r_image.c b/ref/soft/r_image.c index 933e8cf7..7d58787b 100644 --- a/ref/soft/r_image.c +++ b/ref/soft/r_image.c @@ -557,7 +557,7 @@ static qboolean GL_UploadTexture( image_t *tex, rgbdata_t *pic ) data = GL_ResampleTexture( buf, pic->width, pic->height, tex->width, tex->height, normalMap ); else data = buf; - //if( !ImageDXT( pic->type ) && !FBitSet( tex->flags, TF_NOMIPMAP ) && FBitSet( pic->flags, IMAGE_ONEBIT_ALPHA )) + //if( !ImageCompressed( pic->type ) && !FBitSet( tex->flags, TF_NOMIPMAP ) && FBitSet( pic->flags, IMAGE_ONEBIT_ALPHA )) // data = GL_ApplyFilter( data, tex->width, tex->height ); // mips will be auto-generated if desired @@ -663,7 +663,7 @@ static qboolean GL_UploadTexture( image_t *tex, rgbdata_t *pic ) if( buf != NULL && buf >= bufend ) gEngfuncs.Host_Error( "GL_UploadTexture: %s image buffer overflow\n", tex->name ); - if( ImageDXT( pic->type )) + if( ImageCompressed( pic->type )) { for( j = 0; j < Q_max( 1, pic->numMips ); j++ ) { @@ -671,7 +671,7 @@ static qboolean GL_UploadTexture( image_t *tex, rgbdata_t *pic ) height = Q_max( 1, ( tex->height >> j )); texsize = GL_CalcTextureSize( tex->format, width, height, tex->depth ); size = GL_CalcImageSize( pic->type, width, height, tex->depth ); - GL_TextureImageDXT( tex, i, j, width, height, tex->depth, size, buf ); + GL_TextureImageCompressed( tex, i, j, width, height, tex->depth, size, buf ); tex->size += texsize; buf += size; // move pointer tex->numMips++; @@ -705,7 +705,7 @@ static qboolean GL_UploadTexture( image_t *tex, rgbdata_t *pic ) data = GL_ResampleTexture( buf, pic->width, pic->height, tex->width, tex->height, normalMap ); else data = buf; - if( !ImageDXT( pic->type ) && !FBitSet( tex->flags, TF_NOMIPMAP ) && FBitSet( pic->flags, IMAGE_ONEBIT_ALPHA )) + if( !ImageCompressed( pic->type ) && !FBitSet( tex->flags, TF_NOMIPMAP ) && FBitSet( pic->flags, IMAGE_ONEBIT_ALPHA )) data = GL_ApplyFilter( data, tex->width, tex->height ); // mips will be auto-generated if desired @@ -753,7 +753,7 @@ static void GL_ProcessImage( image_t *tex, rgbdata_t *pic ) if( tex->flags & TF_FORCE_COLOR ) pic->flags |= IMAGE_HAS_COLOR; if( pic->flags & IMAGE_HAS_ALPHA ) tex->flags |= TF_HAS_ALPHA; - if( ImageDXT( pic->type )) + if( ImageCompressed( pic->type )) { if( !pic->numMips ) tex->flags |= TF_NOMIPMAP; // disable mipmapping by user request @@ -1178,7 +1178,7 @@ void GAME_EXPORT GL_ProcessTexture( int texnum, float gamma, int topColor, int b return; } - if( ImageDXT( image->original->type )) + if( ImageCompressed( image->original->type )) { gEngfuncs.Con_Printf( S_ERROR "GL_ProcessTexture: can't process compressed texture %s\n", image->name ); return; From b76a75d6b47da8b41a6da1c543dc3da929042cc2 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 20 Oct 2023 18:52:43 +0300 Subject: [PATCH 03/79] ref: gl: respect gl_texture_nearest value for skyboxes --- ref/gl/gl_image.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ref/gl/gl_image.c b/ref/gl/gl_image.c index f0ff212c..355f6c49 100644 --- a/ref/gl/gl_image.c +++ b/ref/gl/gl_image.c @@ -166,7 +166,7 @@ void GL_ApplyTextureParams( gl_texture_t *tex ) } else if( FBitSet( tex->flags, TF_NOMIPMAP ) || tex->numMips <= 1 ) { - if( FBitSet( tex->flags, TF_NEAREST ) || ( IsLightMap( tex ) && gl_lightmap_nearest.value )) + if( FBitSet( tex->flags, TF_NEAREST ) || ( IsLightMap( tex ) && gl_lightmap_nearest.value ) || ( tex->flags == TF_SKYSIDE && gl_texture_nearest.value )) { pglTexParameteri( tex->target, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); pglTexParameteri( tex->target, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); From fc55a685e33eb6e8bd49312fbf0bea782bb7277c Mon Sep 17 00:00:00 2001 From: Andrey Akhmichin <15944199+nekonomicon@users.noreply.github.com> Date: Thu, 19 Oct 2023 11:20:36 +0500 Subject: [PATCH 04/79] utils: mdldec: small optimizations. --- utils/mdldec/mdldec.c | 20 ++++------- utils/mdldec/qc.c | 76 ++++++++++++++++++---------------------- utils/mdldec/smd.c | 79 +++++++++++++++--------------------------- utils/mdldec/texture.c | 18 +++------- 4 files changed, 70 insertions(+), 123 deletions(-) diff --git a/utils/mdldec/mdldec.c b/utils/mdldec/mdldec.c index 576728b5..fc4fa0e5 100644 --- a/utils/mdldec/mdldec.c +++ b/utils/mdldec/mdldec.c @@ -41,21 +41,17 @@ static void SequenceNameFix( void ) { int i, j, counter; qboolean hasduplicates = false; - mstudioseqdesc_t *seqdesc, *seqdesc1; + mstudioseqdesc_t *seqdesc = (mstudioseqdesc_t *)( (byte *)model_hdr + model_hdr->seqindex ), *seqdesc1; - for( i = 0; i < model_hdr->numseq; i++ ) + for( i = 0; i < model_hdr->numseq; ++i, ++seqdesc ) { - seqdesc = (mstudioseqdesc_t *)( (byte *)model_hdr + model_hdr->seqindex ) + i; - counter = 1; - for( j = 0; j < model_hdr->numseq; j++ ) - { - seqdesc1 = (mstudioseqdesc_t *)( (byte *)model_hdr + model_hdr->seqindex ) + j; + seqdesc1 = (mstudioseqdesc_t *)( (byte *)model_hdr + model_hdr->seqindex ); + for( j = 0; j < model_hdr->numseq; ++j, ++seqdesc1 ) if( j != i && !Q_strncmp( seqdesc1->label, seqdesc->label, sizeof( seqdesc1->label ) ) ) Q_snprintf( seqdesc1->label, sizeof( seqdesc1->label ), "%s_%i", seqdesc1->label, ++counter ); - } if( counter > 1 ) { @@ -79,15 +75,11 @@ BoneNameFix static void BoneNameFix( void ) { int i, counter = 0; - mstudiobone_t *bone; - - for( i = 0; i < model_hdr->numbones; i++ ) - { - bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ) + i; + mstudiobone_t *bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ); + for( i = 0; i < model_hdr->numbones; ++i, ++bone ) if( bone->name[0] == '\0' ) Q_snprintf( bone->name, sizeof( bone->name ), "MDLDEC_Bone%i", ++counter ); - } if( counter ) printf( "WARNING: Gived name to %i unnamed bone(s).\n", counter ); diff --git a/utils/mdldec/qc.c b/utils/mdldec/qc.c index 6ac563d1..9508f540 100644 --- a/utils/mdldec/qc.c +++ b/utils/mdldec/qc.c @@ -249,7 +249,7 @@ WriteSkinFamilyInfo static void WriteSkinFamilyInfo( FILE *fp ) { int i, j, k; - short *skinref, index; + short *skinref, *index; mstudiotexture_t *texture; if( texture_hdr->numskinfamilies < 2 ) @@ -260,23 +260,22 @@ static void WriteSkinFamilyInfo( FILE *fp ) fputs( "$texturegroup \"skinfamilies\"\n{\n", fp ); skinref = (short *)( (byte *)texture_hdr + texture_hdr->skinindex ); + texture = (mstudiotexture_t *)( (byte *)texture_hdr + texture_hdr->textureindex ); for( i = 0; i < texture_hdr->numskinfamilies; ++i ) { fputs( "\t{\n", fp ); - for( j = 0; j < texture_hdr->numskinref; ++j ) - { - index = *( skinref + i * texture_hdr->numskinref + j ); + index = skinref + i * texture_hdr->numskinref; + for( j = 0; j < texture_hdr->numskinref; ++j, ++index ) + { for( k = 0; k < texture_hdr->numskinfamilies; ++k ) { - if( index == *( skinref + k * texture_hdr->numskinref + j ) ) + if( *index == *( skinref + k * texture_hdr->numskinref + j ) ) continue; - texture = (mstudiotexture_t *)( (byte *)texture_hdr + texture_hdr->textureindex ) + index; - - fprintf( fp, "\t\t\"%s\"\n", texture->name ); + fprintf( fp, "\t\t\"%s\"\n", texture[*index].name ); break; } } @@ -301,15 +300,13 @@ static void WriteAttachmentInfo( FILE *fp ) if( !model_hdr->numattachments ) return; + attachment = (mstudioattachment_t *)( (byte *)model_hdr + model_hdr->attachmentindex ); + bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ); + fprintf( fp, "// %i attachment%s\n", model_hdr->numattachments, model_hdr->numattachments > 1 ? "s" : "" ); - for( i = 0; i < model_hdr->numattachments; ++i ) - { - attachment = (mstudioattachment_t *)( (byte *)model_hdr + model_hdr->attachmentindex ) + i; - bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ) + attachment->bone; - - fprintf( fp, "$attachment %i \"%s\" %f %f %f\n", i, bone->name, attachment->org[0], attachment->org[1], attachment->org[2] ); - } + for( i = 0; i < model_hdr->numattachments; ++i, ++attachment ) + fprintf( fp, "$attachment %i \"%s\" %f %f %f\n", i, bone[attachment->bone].name, attachment->org[0], attachment->org[1], attachment->org[2] ); fputs( "\n", fp ); } @@ -322,20 +319,18 @@ WriteBodyGroupInfo static void WriteBodyGroupInfo( FILE *fp ) { int i, j; - mstudiobodyparts_t *bodypart; + mstudiobodyparts_t *bodypart = (mstudiobodyparts_t *) ( (byte *)model_hdr + model_hdr->bodypartindex ); mstudiomodel_t *model; char modelname[64]; fprintf( fp, "// %i reference mesh%s\n", model_hdr->numbodyparts, model_hdr->numbodyparts > 1 ? "es" : "" ); - for( i = 0; i < model_hdr->numbodyparts; ++i ) + for( i = 0; i < model_hdr->numbodyparts; ++i, ++bodypart ) { - bodypart = (mstudiobodyparts_t *) ( (byte *)model_hdr + model_hdr->bodypartindex ) + i; + model = (mstudiomodel_t *)( (byte *)model_hdr + bodypart->modelindex ); if( bodypart->nummodels == 1 ) { - model = (mstudiomodel_t *)( (byte *)model_hdr + bodypart->modelindex ); - COM_FileBase( model->name, modelname, sizeof( modelname )); fprintf( fp, "$body \"%s\" \"%s\"\n", bodypart->name, modelname ); @@ -346,10 +341,8 @@ static void WriteBodyGroupInfo( FILE *fp ) fputs( "{\n", fp ); - for( j = 0; j < bodypart->nummodels; ++j ) + for( j = 0; j < bodypart->nummodels; ++j, ++model ) { - model = (mstudiomodel_t *)( (byte *)model_hdr + bodypart->modelindex ) + j; - if( !Q_strncmp( model->name, "blank", 5 ) ) { fputs( "\tblank\n", fp ); @@ -382,13 +375,13 @@ static void WriteControllerInfo( FILE *fp ) if( !model_hdr->numbonecontrollers ) return; + bonecontroller = (mstudiobonecontroller_t *)( (byte *)model_hdr + model_hdr->bonecontrollerindex ); + bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ); + fprintf( fp, "// %i bone controller%s\n", model_hdr->numbonecontrollers, model_hdr->numbonecontrollers > 1 ? "s" : "" ); - for( i = 0; i < model_hdr->numbonecontrollers; ++i ) + for( i = 0; i < model_hdr->numbonecontrollers; ++i, ++bonecontroller ) { - bonecontroller = (mstudiobonecontroller_t *)( (byte *)model_hdr + model_hdr->bonecontrollerindex ) + i; - bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ) + bonecontroller->bone; - GetMotionTypeString( bonecontroller->type & ~STUDIO_RLOOP, motion_types, sizeof( motion_types ), false ); fputs( "$controller ", fp ); @@ -399,7 +392,7 @@ static void WriteControllerInfo( FILE *fp ) fprintf( fp, "%i", bonecontroller->index ); fprintf( fp, " \"%s\" %s %f %f\n", - bone->name, motion_types, + bone[bonecontroller->bone].name, motion_types, bonecontroller->start, bonecontroller->end ); } @@ -420,18 +413,16 @@ static void WriteHitBoxInfo( FILE *fp ) if( !model_hdr->numhitboxes ) return; + hitbox = (mstudiobbox_t *)( (byte *)model_hdr + model_hdr->hitboxindex ); + bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ); + fprintf( fp, "// %i hit box%s\n", model_hdr->numhitboxes, model_hdr->numhitboxes > 1 ? "es" : "" ); - for( i = 0; i < model_hdr->numhitboxes; i++ ) - { - hitbox = (mstudiobbox_t *)( (byte *)model_hdr + model_hdr->hitboxindex ) + i; - bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ) + hitbox->bone; - + for( i = 0; i < model_hdr->numhitboxes; ++i, ++hitbox ) fprintf( fp, "$hbox %i \"%s\" %f %f %f %f %f %f\n", - hitbox->group, bone->name, + hitbox->group, bone[hitbox->bone].name, hitbox->bbmin[0], hitbox->bbmin[1], hitbox->bbmin[2], hitbox->bbmax[0], hitbox->bbmax[1], hitbox->bbmax[2] ); - } fputs( "\n", fp ); } @@ -477,19 +468,18 @@ static void WriteSequenceInfo( FILE *fp ) if( model_hdr->numseq > 0 ) fprintf( fp, "// %i animation sequence%s\n", model_hdr->numseq, model_hdr->numseq > 1 ? "s" : "" ); + else return; - for( i = 0; i < model_hdr->numseq; ++i ) + seqdesc = (mstudioseqdesc_t *)( (byte *)model_hdr + model_hdr->seqindex ); + + for( i = 0; i < model_hdr->numseq; ++i, ++seqdesc ) { - seqdesc = (mstudioseqdesc_t *)( (byte *)model_hdr + model_hdr->seqindex ) + i; - fprintf( fp, "$sequence \"%s\" {\n", seqdesc->label ); if( seqdesc->numblends > 1 ) { for( j = 0; j < seqdesc->numblends; j++ ) - { fprintf( fp, "\t\"%s_blend%02i\"\n", seqdesc->label, j + 1 ); - } } else { @@ -524,10 +514,10 @@ static void WriteSequenceInfo( FILE *fp ) printf( "WARNING: Something wrong with blending type for sequence: %s\n", seqdesc->label ); } - for( j = 0; j < seqdesc->numevents; j++ ) - { - event = (mstudioevent_t *)( (byte *)model_hdr + seqdesc->eventindex ) + j; + event = (mstudioevent_t *)( (byte *)model_hdr + seqdesc->eventindex ); + for( j = 0; j < seqdesc->numevents; ++j, ++event ) + { fprintf( fp, "\t{ event %i %i", event->event, event->frame ); if( event->options[0] != '\0' ) diff --git a/utils/mdldec/smd.c b/utils/mdldec/smd.c index d1ad5875..7c7ffa0c 100644 --- a/utils/mdldec/smd.c +++ b/utils/mdldec/smd.c @@ -53,14 +53,12 @@ FillBoneTransformMatrices static void FillBoneTransformMatrices( void ) { int i; - mstudiobone_t *bone; + mstudiobone_t *bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ); matrix3x4 bonematrix; vec4_t q; - for( i = 0; i < model_hdr->numbones; i++ ) + for( i = 0; i < model_hdr->numbones; ++i, ++bone ) { - bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ) + i; - AngleQuaternion( &bone->value[3], q, true ); Matrix3x4_FromOriginQuat( bonematrix, q, bone->value ); @@ -84,7 +82,7 @@ static void FillWorldTransformMatrices( void ) int i; mstudioboneinfo_t *boneinfo = (mstudioboneinfo_t *)( (byte *)model_hdr + model_hdr->boneindex + model_hdr->numbones * sizeof( mstudiobone_t ) ); - for( i = 0; i < model_hdr->numbones; i++, boneinfo++ ) + for( i = 0; i < model_hdr->numbones; ++i, ++boneinfo ) Matrix3x4_ConcatTransforms( worldtransform[i], bonetransform[i], boneinfo->poseToBone ); } @@ -186,16 +184,12 @@ WriteNodes static void WriteNodes( FILE *fp ) { int i; - mstudiobone_t *bone; + mstudiobone_t *bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ); fputs( "nodes\n", fp ); - for( i = 0; i < model_hdr->numbones; i++ ) - { - bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ) + i; - + for( i = 0; i < model_hdr->numbones; ++i, ++bone ) fprintf( fp, "%3i \"%s\" %i\n", i, bone->name, bone->parent ); - } fputs( "end\n", fp ); } @@ -208,15 +202,13 @@ WriteSkeleton static void WriteSkeleton( FILE *fp ) { int i, j; - mstudiobone_t *bone; + mstudiobone_t *bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ); fputs( "skeleton\n", fp ); fputs( "time 0\n", fp ); - for( i = 0; i < model_hdr->numbones; i++ ) + for( i = 0; i < model_hdr->numbones; ++i, ++bone ) { - bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ) + i; - fprintf( fp, "%3i", i ); for( j = 0; j < 6; j++ ) @@ -235,7 +227,7 @@ WriteTriangleInfo */ static void WriteTriangleInfo( FILE *fp, mstudiomodel_t *model, mstudiotexture_t *texture, mstudiotrivert_t **triverts, qboolean isevenstrip ) { - int i, j, k, l, indices[3]; + int i, j, k, l, index; int vert_index; int norm_index; int bone_index; @@ -249,19 +241,6 @@ static void WriteTriangleInfo( FILE *fp, mstudiomodel_t *model, mstudiotexture_t matrix3x4 bonematrix[MAXSTUDIOBONEWEIGHTS], skinmatrix, *pskinmatrix; mstudioboneweight_t *studioboneweights; - if( isevenstrip ) - { - indices[0] = 1; - indices[1] = 2; - indices[2] = 0; - } - else - { - indices[0] = 0; - indices[1] = 1; - indices[2] = 2; - } - vertbone = ( (byte *)model_hdr + model->vertinfoindex ); studioverts = (vec3_t *)( (byte *)model_hdr + model->vertindex ); studionorms = (vec3_t *)( (byte *)model_hdr + model->normindex ); @@ -274,14 +253,15 @@ static void WriteTriangleInfo( FILE *fp, mstudiomodel_t *model, mstudiotexture_t for( i = 0; i < 3; i++ ) { - vert_index = triverts[indices[i]]->vertindex; - norm_index = triverts[indices[i]]->normindex; + index = isevenstrip ? ( i + 1 ) % 3 : i; + vert_index = triverts[index]->vertindex; + norm_index = triverts[index]->normindex; bone_index = vertbone[vert_index]; if( model_hdr->flags & STUDIO_HAS_BONEWEIGHTS ) { valid_bones = 0, totalweight = 0; - memset(skinmatrix, 0, sizeof(matrix3x4)); + memset( skinmatrix, 0, sizeof( matrix3x4 ) ); for( j = 0; j < MAXSTUDIOBONEWEIGHTS; ++j ) if( studioboneweights[vert_index].bone[j] != -1 ) @@ -315,13 +295,13 @@ static void WriteTriangleInfo( FILE *fp, mstudiomodel_t *model, mstudiotexture_t if( texture->flags & STUDIO_NF_UV_COORDS ) { - u = HalfToFloat( triverts[indices[i]]->s ); - v = -HalfToFloat( triverts[indices[i]]->t ); + u = HalfToFloat( triverts[index]->s ); + v = -HalfToFloat( triverts[index]->t ); } else { - u = ( triverts[indices[i]]->s + 1.0f ) * s; - v = 1.0f - triverts[indices[i]]->t * t; + u = ( triverts[index]->s + 1.0f ) * s; + v = 1.0f - triverts[index]->t * t; } fprintf( fp, "%3i %f %f %f %f %f %f %f %f", @@ -354,16 +334,15 @@ WriteTriangles static void WriteTriangles( FILE *fp, mstudiomodel_t *model ) { int i, j, k; - mstudiomesh_t *mesh; + mstudiomesh_t *mesh = (mstudiomesh_t *)( (byte *)model_hdr + model->meshindex ); mstudiotexture_t *texture; mstudiotrivert_t *triverts[3]; short *tricmds; fputs( "triangles\n", fp ); - for( i = 0; i < model->nummesh; i++ ) + for( i = 0; i < model->nummesh; ++i, ++mesh ) { - mesh = (mstudiomesh_t *)( (byte *)model_hdr + model->meshindex ) + i; tricmds = (short *)( (byte *)model_hdr + mesh->triindex ); texture = (mstudiotexture_t *)( (byte *)texture_hdr + texture_hdr->textureindex ) + mesh->skinref; @@ -450,14 +429,12 @@ static void WriteFrameInfo( FILE *fp, mstudioanim_t *anim, mstudioseqdesc_t *seq int i, j; float scale; vec_t motion[6]; // x, y, z, xr, yr, zr - mstudiobone_t *bone; + mstudiobone_t *bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ); fprintf( fp, "time %i\n", frame ); - for( i = 0; i < model_hdr->numbones; i++, anim++ ) + for( i = 0; i < model_hdr->numbones; ++i, ++anim, ++bone ) { - bone = (mstudiobone_t *)( (byte *)model_hdr + model_hdr->boneindex ) + i; - CalcBonePosition( anim, bone, motion, frame ); if( bone->parent == -1 ) @@ -529,14 +506,14 @@ static void WriteReferences( void ) FillWorldTransformMatrices(); } - for( i = 0; i < model_hdr->numbodyparts; i++ ) + bodypart = (mstudiobodyparts_t *)( (byte *)model_hdr + model_hdr->bodypartindex ); + + for( i = 0; i < model_hdr->numbodyparts; ++i, ++bodypart ) { - bodypart = (mstudiobodyparts_t *)( (byte *)model_hdr + model_hdr->bodypartindex ) + i; + model = (mstudiomodel_t *)( (byte *)model_hdr + bodypart->modelindex ); - for( j = 0; j < bodypart->nummodels; j++ ) + for( j = 0; j < bodypart->nummodels; ++j, ++model ) { - model = (mstudiomodel_t *)( (byte *)model_hdr + bodypart->modelindex ) + j; - if( !Q_strncmp( model->name, "blank", 5 ) ) continue; @@ -588,12 +565,10 @@ static void WriteSequences( void ) int len; FILE *fp; char filename[MAX_SYSPATH]; - mstudioseqdesc_t *seqdesc; + mstudioseqdesc_t *seqdesc = (mstudioseqdesc_t *)( (byte *)model_hdr + model_hdr->seqindex ); - for( i = 0; i < model_hdr->numseq; i++ ) + for( i = 0; i < model_hdr->numseq; ++i, ++seqdesc ) { - seqdesc = (mstudioseqdesc_t *)( (byte *)model_hdr + model_hdr->seqindex ) + i; - for( j = 0; j < seqdesc->numblends; j++ ) { if( seqdesc->numblends == 1 ) diff --git a/utils/mdldec/texture.c b/utils/mdldec/texture.c index 5643393e..a281b44c 100644 --- a/utils/mdldec/texture.c +++ b/utils/mdldec/texture.c @@ -33,7 +33,7 @@ static void WriteBMP( mstudiotexture_t *texture ) int i, len; FILE *fp; const byte *p; - byte *palette, *pic, *buf; + byte *palette, *pic; char filename[MAX_SYSPATH], texturename[64]; rgba_t rgba_palette[256]; bmp_t bmp_hdr = {0,}; @@ -87,23 +87,17 @@ static void WriteBMP( mstudiotexture_t *texture ) fwrite( rgba_palette, sizeof( rgba_palette ), 1, fp ); - buf = malloc( texture_size ); - p = pic; p += ( bmp_hdr.height - 1 ) * bmp_hdr.width; for( i = 0; i < bmp_hdr.height; i++ ) { - memcpy( buf + bmp_hdr.width * i, p, bmp_hdr.width ); + fwrite( p, bmp_hdr.width, 1, fp ); p -= bmp_hdr.width; } - fwrite( buf, texture_size, 1, fp ); - fclose( fp ); - free( buf ); - printf( "Texture: %s\n", filename ); } @@ -115,13 +109,9 @@ WriteTextures void WriteTextures( void ) { int i; - mstudiotexture_t *texture; - - for( i = 0; i < texture_hdr->numtextures; i++ ) - { - texture = (mstudiotexture_t *)( (byte *)texture_hdr + texture_hdr->textureindex ) + i; + mstudiotexture_t *texture = (mstudiotexture_t *)( (byte *)texture_hdr + texture_hdr->textureindex ); + for( i = 0; i < texture_hdr->numtextures; ++i, ++texture ) WriteBMP( texture ); - } } From 02b8037f339974c7cb5a2f59d671da669e9c0ef0 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 16:20:15 +0300 Subject: [PATCH 05/79] common: xash3d_types: add NONNULL attribute --- common/xash3d_types.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common/xash3d_types.h b/common/xash3d_types.h index 3cd1cfec..33801433 100644 --- a/common/xash3d_types.h +++ b/common/xash3d_types.h @@ -86,16 +86,19 @@ typedef uint64_t longtime_t; #endif #define _format(x) __attribute__((format(printf, x, x+1))) #define NORETURN __attribute__((noreturn)) + #define NONNULL __attribute__((nonnull)) #elif defined(_MSC_VER) #define EXPORT __declspec( dllexport ) #define GAME_EXPORT #define _format(x) #define NORETURN + #define NONNULL #else #define EXPORT #define GAME_EXPORT #define _format(x) #define NORETURN + #define NONNULL #endif #if ( __GNUC__ >= 3 ) From 99a7e9ad877aeac99f4961ec1ec584f644f77d75 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 16:20:55 +0300 Subject: [PATCH 06/79] wscript: enable -Werror=nonnull --- wscript | 1 + 1 file changed, 1 insertion(+) diff --git a/wscript b/wscript index 049987c7..608ff6b0 100644 --- a/wscript +++ b/wscript @@ -296,6 +296,7 @@ def configure(conf): # '-Werror=format=2', '-Werror=implicit-fallthrough=2', '-Werror=logical-op', + '-Werror=nonnull', '-Werror=packed', '-Werror=packed-not-aligned', '-Werror=parentheses', From 2d79f3ef7a6a9caa02944907fd8b0fd16fedc398 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 16:23:15 +0300 Subject: [PATCH 07/79] engine: common: sys_con: enable writing build commit, os and arch to the engine.log --- engine/common/sys_con.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/common/sys_con.c b/engine/common/sys_con.c index 30c19d68..f6c78505 100644 --- a/engine/common/sys_con.c +++ b/engine/common/sys_con.c @@ -149,7 +149,7 @@ void Sys_InitLog( void ) s_ld.logfileno = fileno( s_ld.logfile ); fprintf( s_ld.logfile, "=================================================================================\n" ); - fprintf( s_ld.logfile, "\t%s (build %i) started at %s\n", s_ld.title, Q_buildnum(), Q_timestamp( TIME_FULL ) ); + fprintf( s_ld.logfile, "\t%s (build %i commit %s (%s-%s)) started at %s\n", s_ld.title, Q_buildnum(), Q_buildcommit(), Q_buildos(), Q_buildarch(), Q_timestamp( TIME_FULL ) ); fprintf( s_ld.logfile, "=================================================================================\n" ); } } From a1ab84a2cae11cd2bd75c35ac86f6726b1b03044 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 17:38:44 +0300 Subject: [PATCH 08/79] mainui: update --- 3rdparty/mainui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/mainui b/3rdparty/mainui index d6a54bbf..adb3e413 160000 --- a/3rdparty/mainui +++ b/3rdparty/mainui @@ -1 +1 @@ -Subproject commit d6a54bbf0c4aa7acb5d90aff08b6f18f740f392b +Subproject commit adb3e413ec99b9b19e43956a59b2d618d9a34bf7 From 0330569537b66a3405df8630e98c6311160cadaa Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 17:49:52 +0300 Subject: [PATCH 09/79] engine: client: remove master server queries from NetAPI, they are never used by mods --- engine/client/cl_game.c | 37 +++++-------------------- engine/client/cl_main.c | 60 ++--------------------------------------- engine/client/client.h | 9 ------- 3 files changed, 8 insertions(+), 98 deletions(-) diff --git a/engine/client/cl_game.c b/engine/client/cl_game.c index afc229b7..4563c04e 100644 --- a/engine/client/cl_game.c +++ b/engine/client/cl_game.c @@ -3336,6 +3336,9 @@ static void GAME_EXPORT NetAPI_SendRequest( int context, int request, int flags, if( remote_address->type != NA_IPX && remote_address->type != NA_BROADCAST_IPX ) return; // IPX no longer support + if( request == NETAPI_REQUEST_SERVERLIST ) + return; // no support for server list requests + // find a free request for( i = 0; i < MAX_REQUESTS; i++ ) { @@ -3372,28 +3375,9 @@ static void GAME_EXPORT NetAPI_SendRequest( int context, int request, int flags, nr->resp.remote_address = *remote_address; nr->flags = flags; - if( request == NETAPI_REQUEST_SERVERLIST ) - { - char fullquery[512]; - size_t len; - - len = CL_BuildMasterServerScanRequest( fullquery, sizeof( fullquery ), false ); - - // make sure that port is specified - if( !nr->resp.remote_address.port ) - nr->resp.remote_address.port = MSG_BigShort( PORT_MASTER ); - - // grab the list from the master server - NET_SendPacket( NS_CLIENT, len, fullquery, nr->resp.remote_address ); - clgame.request_type = NET_REQUEST_CLIENT; - clgame.master_request = nr; // holds the master request unitl the master acking - } - else - { - // local servers request - Q_snprintf( req, sizeof( req ), "netinfo %i %i %i", PROTOCOL_VERSION, context, request ); - Netchan_OutOfBandPrint( NS_CLIENT, nr->resp.remote_address, "%s", req ); - } + // local servers request + Q_snprintf( req, sizeof( req ), "netinfo %i %i %i", PROTOCOL_VERSION, context, request ); + Netchan_OutOfBandPrint( NS_CLIENT, nr->resp.remote_address, "%s", req ); } /* @@ -3421,13 +3405,6 @@ static void GAME_EXPORT NetAPI_CancelRequest( int context ) nr->pfnFunc( &nr->resp ); } - if( clgame.net_requests[i].resp.type == NETAPI_REQUEST_SERVERLIST && &clgame.net_requests[i] == clgame.master_request ) - { - if( clgame.request_type == NET_REQUEST_CLIENT ) - clgame.request_type = NET_REQUEST_CANCEL; - clgame.master_request = NULL; - } - memset( &clgame.net_requests[i], 0, sizeof( net_request_t )); break; } @@ -3456,8 +3433,6 @@ void GAME_EXPORT NetAPI_CancelAllRequests( void ) } memset( clgame.net_requests, 0, sizeof( clgame.net_requests )); - clgame.request_type = NET_REQUEST_CANCEL; - clgame.master_request = NULL; } /* diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index df78338c..f8265846 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -1617,14 +1617,6 @@ void CL_InternetServers_f( void ) cls.internetservers_wait = NET_SendToMasters( NS_CLIENT, len, fullquery ); cls.internetservers_pending = true; - - if( !cls.internetservers_wait ) - { - // now we clearing the vgui request - if( clgame.master_request != NULL ) - memset( clgame.master_request, 0, sizeof( net_request_t )); - clgame.request_type = NET_REQUEST_GAMEUI; - } } /* @@ -2161,58 +2153,10 @@ void CL_ConnectionlessPacket( netadr_t from, sizebuf_t *msg ) // list is ends here if( !servadr.port ) - { - if( clgame.request_type == NET_REQUEST_CLIENT && clgame.master_request != NULL ) - { - net_request_t *nr = clgame.master_request; - net_adrlist_t *list, **prev; - - // setup the answer - nr->resp.remote_address = from; - nr->resp.error = NET_SUCCESS; - nr->resp.ping = host.realtime - nr->timesend; - - if( nr->timeout <= host.realtime ) - SetBits( nr->resp.error, NET_ERROR_TIMEOUT ); - - Con_Printf( "serverlist call: %s\n", NET_AdrToString( from )); - nr->pfnFunc( &nr->resp ); - - // throw the list, now it will be stored in user area - prev = (net_adrlist_t**)&nr->resp.response; - - while( 1 ) - { - list = *prev; - if( !list ) break; - - // throw out any variables the game created - *prev = list->next; - Mem_Free( list ); - } - memset( nr, 0, sizeof( *nr )); // done - clgame.request_type = NET_REQUEST_CANCEL; - clgame.master_request = NULL; - } break; - } - if( clgame.request_type == NET_REQUEST_CLIENT && clgame.master_request != NULL ) - { - net_request_t *nr = clgame.master_request; - net_adrlist_t *list; - - // adding addresses into list - list = Z_Malloc( sizeof( *list )); - list->remote_address = servadr; - list->next = nr->resp.response; - nr->resp.response = list; - } - else if( clgame.request_type == NET_REQUEST_GAMEUI ) - { - NET_Config( true, false ); // allow remote - Netchan_OutOfBandPrint( NS_CLIENT, servadr, "info %i", PROTOCOL_VERSION ); - } + NET_Config( true, false ); // allow remote + Netchan_OutOfBandPrint( NS_CLIENT, servadr, "info %i", PROTOCOL_VERSION ); } if( cls.internetservers_pending ) diff --git a/engine/client/client.h b/engine/client/client.h index f607189e..8b98642e 100644 --- a/engine/client/client.h +++ b/engine/client/client.h @@ -423,13 +423,6 @@ typedef struct float applied_angle; } screen_shake_t; -typedef enum -{ - NET_REQUEST_CANCEL = 0, // request was cancelled for some reasons - NET_REQUEST_GAMEUI, // called from GameUI - NET_REQUEST_CLIENT, // called from Client -} net_request_type_t; - typedef struct { net_response_t resp; @@ -491,9 +484,7 @@ typedef struct client_textmessage_t *titles; // title messages, not network messages int numTitles; - net_request_type_t request_type; // filter the requests net_request_t net_requests[MAX_REQUESTS]; // no reason to keep more - net_request_t *master_request; // queued master request efrag_t *free_efrags; // linked efrags cl_entity_t viewent; // viewmodel From 201258dc9e9f172fcfff455bccbf83c1473acb0c Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 17:55:37 +0300 Subject: [PATCH 10/79] engine: client: allow passing additional filter through internetservers command arguments --- engine/client/cl_main.c | 12 +++++++++--- engine/client/client.h | 1 - 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index f8265846..cbaeb0cd 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -1574,7 +1574,7 @@ void CL_LocalServers_f( void ) CL_BuildMasterServerScanRequest ================= */ -size_t CL_BuildMasterServerScanRequest( char *buf, size_t size, qboolean nat ) +static size_t NONNULL CL_BuildMasterServerScanRequest( char *buf, size_t size, qboolean nat, const char *filter ) { size_t remaining; char *info; @@ -1587,7 +1587,7 @@ size_t CL_BuildMasterServerScanRequest( char *buf, size_t size, qboolean nat ) info = buf + sizeof( MS_SCAN_REQUEST ) - 1; remaining = size - sizeof( MS_SCAN_REQUEST ); - info[0] = 0; + Q_strncpy( info, filter, remaining ); #ifndef XASH_ALL_SERVERS Info_SetValueForKey( info, "gamedir", GI->gamefolder, remaining ); @@ -1609,7 +1609,13 @@ void CL_InternetServers_f( void ) size_t len; qboolean nat = cl_nat.value != 0.0f; - len = CL_BuildMasterServerScanRequest( fullquery, sizeof( fullquery ), nat ); + if( Cmd_Argc( ) > 2 ) + { + Con_Printf( S_USAGE "internetservers [filter]\n" ); + return; + } + + len = CL_BuildMasterServerScanRequest( fullquery, sizeof( fullquery ), nat, Cmd_Argv( 1 )); Con_Printf( "Scanning for servers on the internet area...\n" ); diff --git a/engine/client/client.h b/engine/client/client.h index 8b98642e..6deb5c52 100644 --- a/engine/client/client.h +++ b/engine/client/client.h @@ -756,7 +756,6 @@ int CL_IsDevOverviewMode( void ); void CL_PingServers_f( void ); void CL_SignonReply( void ); void CL_ClearState( void ); -size_t CL_BuildMasterServerScanRequest( char *buf, size_t size, qboolean nat ); // // cl_demo.c From 7d61b5317c4e5891737a27312e93ed7141912d8a Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 18:16:42 +0300 Subject: [PATCH 11/79] engine: client: add random key to the query, so we can validate master server response --- engine/client/cl_main.c | 56 +++++++++++++++++++++++++++++++++-------- engine/client/client.h | 5 +++- 2 files changed, 50 insertions(+), 11 deletions(-) diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index cbaeb0cd..e7a4c856 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -92,7 +92,7 @@ client_t cl; client_static_t cls; clgame_static_t clgame; -void CL_InternetServers_f( void ); +static void CL_SendMasterServerScanRequest( void ); //====================================================================== int GAME_EXPORT CL_Active( void ) @@ -1081,7 +1081,7 @@ void CL_CheckForResend( void ) qboolean bandwidthTest; if( cls.internetservers_wait ) - CL_InternetServers_f(); + CL_SendMasterServerScanRequest(); // if the local server is running and we aren't then connect if( cls.state == ca_disconnected && SV_Active( )) @@ -1574,10 +1574,10 @@ void CL_LocalServers_f( void ) CL_BuildMasterServerScanRequest ================= */ -static size_t NONNULL CL_BuildMasterServerScanRequest( char *buf, size_t size, qboolean nat, const char *filter ) +static size_t NONNULL CL_BuildMasterServerScanRequest( char *buf, size_t size, uint32_t *key, qboolean nat, const char *filter ) { size_t remaining; - char *info; + char *info, temp[32]; if( unlikely( size < sizeof( MS_SCAN_REQUEST ))) return 0; @@ -1589,15 +1589,32 @@ static size_t NONNULL CL_BuildMasterServerScanRequest( char *buf, size_t size, q Q_strncpy( info, filter, remaining ); + *key = COM_RandomLong( 0, 0x7FFFFFFF ); + #ifndef XASH_ALL_SERVERS Info_SetValueForKey( info, "gamedir", GI->gamefolder, remaining ); #endif Info_SetValueForKey( info, "clver", XASH_VERSION, remaining ); // let master know about client version Info_SetValueForKey( info, "nat", nat ? "1" : "0", remaining ); + Q_snprintf( temp, sizeof( temp ), "%x", *key ); + Info_SetValueForKey( info, "key", temp, remaining ); + return sizeof( MS_SCAN_REQUEST ) + Q_strlen( info ); } +/* +================= +CL_SendMasterServerScanRequest +================= +*/ +static void CL_SendMasterServerScanRequest( void ) +{ + cls.internetservers_wait = NET_SendToMasters( NS_CLIENT, + cls.internetservers_query_len, cls.internetservers_query ); + cls.internetservers_pending = true; +} + /* ================= CL_InternetServers_f @@ -1605,24 +1622,24 @@ CL_InternetServers_f */ void CL_InternetServers_f( void ) { - char fullquery[512]; - size_t len; qboolean nat = cl_nat.value != 0.0f; + uint32_t key; - if( Cmd_Argc( ) > 2 ) + if( Cmd_Argc( ) > 2 || ( Cmd_Argc( ) == 2 && !Info_IsValid( Cmd_Argv( 1 )))) { Con_Printf( S_USAGE "internetservers [filter]\n" ); return; } - len = CL_BuildMasterServerScanRequest( fullquery, sizeof( fullquery ), nat, Cmd_Argv( 1 )); + cls.internetservers_query_len = CL_BuildMasterServerScanRequest( + cls.internetservers_query, sizeof( cls.internetservers_query ), + &cls.internetservers_key, nat, Cmd_Argv( 1 )); Con_Printf( "Scanning for servers on the internet area...\n" ); NET_Config( true, true ); // allow remote - cls.internetservers_wait = NET_SendToMasters( NS_CLIENT, len, fullquery ); - cls.internetservers_pending = true; + CL_SendMasterServerScanRequest(); } /* @@ -2150,6 +2167,25 @@ void CL_ConnectionlessPacket( netadr_t from, sizebuf_t *msg ) return; } + // check the extra header + if( MSG_ReadByte( msg ) == 0x7f ) + { + uint32_t key = MSG_ReadDword( msg ); + + if( cls.internetservers_key != key ) + { + Con_Printf( S_WARN "unexpected server list packet from %s (invalid key)\n", NET_AdrToString( from )); + return; + } + + MSG_ReadByte( msg ); // reserved byte + } + else + { + Con_Printf( S_WARN "invalid server list packet from %s (missing extra header)\n", NET_AdrToString( from )); + return; + } + // serverlist got from masterserver while( MSG_GetNumBitsLeft( msg ) > 8 ) { diff --git a/engine/client/client.h b/engine/client/client.h index 6deb5c52..c1e8aba7 100644 --- a/engine/client/client.h +++ b/engine/client/client.h @@ -618,7 +618,10 @@ typedef struct file_t *demofile; file_t *demoheader; // contain demo startup info in case we record a demo on this level qboolean internetservers_wait; // internetservers is waiting for dns request - qboolean internetservers_pending; // internetservers is waiting for dns request + qboolean internetservers_pending; // if true, clean master server pings + uint32_t internetservers_key; // compare key to validate master server reply + char internetservers_query[512]; // cached query + uint32_t internetservers_query_len; // legacy mode support qboolean legacymode; // one-way 48 protocol compatibility From 6634e0487c32440e1e315ce6dfa13a05a842a97a Mon Sep 17 00:00:00 2001 From: Andrey Akhmichin <15944199+nekonomicon@users.noreply.github.com> Date: Sun, 22 Oct 2023 03:02:21 +0500 Subject: [PATCH 12/79] Documentation: opensource-mods.md: update. --- Documentation/opensource-mods.md | 80 ++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 29 deletions(-) diff --git a/Documentation/opensource-mods.md b/Documentation/opensource-mods.md index d7f37992..a72d6707 100644 --- a/Documentation/opensource-mods.md +++ b/Documentation/opensource-mods.md @@ -133,22 +133,8 @@ Available in mod archive on ModDB - https://www.moddb.com/mods/overturn ## Oz Deathmatch Mirrored on github - https://github.com/nekonomicon/OZDM -## Spirit of Half-Life -[Logic&Trick's](https://github.com/LogicAndTrick) mirror - https://files.logic-and-trick.com/#/Half-Life/Mods/Spirit%20of%20Half-Life - -## Threewave CTF -*Unfinished mod by Valve Software* - -Available in Valve's Half-Life repository with Deathmatch Classic sources - https://github.com/ValveSoftware/halflife/tree/master/dmc - -## Trinity Render -Available on ModDB: https://www.moddb.com/mods/half-life-episode-two/downloads/trinity-rendering-engine-v308f - -## Tyrian: Ground Assault -Available on ModDB: https://www.moddb.com/mods/tyriangroundassault/downloads/tyrianga-v1-0-src - ## Paranoia -Available on ModDB: https://www.moddb.com/mods/paranoia/downloads/paranoia-toolkit +Available on ModDB - https://www.moddb.com/mods/paranoia/downloads/paranoia-toolkit ## Paranoia 2: The Savior Prealpha, mirrored on github - https://github.com/a1batross/Paranoia2_ancient @@ -163,12 +149,37 @@ Was found on HLFX - http://hlfx.ru/forum/showthread.php?s=2c892dfc52f72be52a89c3 ## Ricochet Available in Valve's Half-Life repository - https://github.com/ValveSoftware/halflife/tree/master/ricochet +## Spirit of Half-Life +[Logic&Trick's](https://github.com/LogicAndTrick) mirror - https://files.logic-and-trick.com/#/Half-Life/Mods/Spirit%20of%20Half-Life + +## The Wastes +Version 1.5: mirrored on code.idtech.space - https://code.idtech.space/vera/halflife-thewastes-sdk + +## Threewave CTF +*Unfinished mod by Valve Software* + +Available in Valve's Half-Life repository with Deathmatch Classic sources - https://github.com/ValveSoftware/halflife/tree/master/dmc + +## Trinity Render +Available on ModDB - https://www.moddb.com/mods/half-life-episode-two/downloads/trinity-rendering-engine-v308f + +## Tyrian: Ground Assault +Available on ModDB - https://www.moddb.com/mods/tyriangroundassault/downloads/tyrianga-v1-0-src + +## Wasteland +Mirrored on code.idtech.space - https://code.idtech.space/vera/halflife-wasteland-sdk + ## Wizard Wars Download page on official site - http://www.thothie.com/ww/ ## XashXT Mirrored on github - https://github.com/a1batross/XashXT_original +## Xen-Warrior +*Source code is a part of Spirit of Half-Life 1.0-1.2 under XENWARRIOR macro* + +[Logic&Trick's](https://github.com/LogicAndTrick) mirror - https://files.logic-and-trick.com/#/Half-Life/Mods/Spirit%20of%20Half-Life + ## Zombie-X Available in mod archive on ModDB - https://www.moddb.com/mods/zombie-x-10-final/downloads/zombie-x-10-dle-beta6-last-version @@ -190,12 +201,12 @@ malortie's recreation - https://github.com/malortie/hl-aom Branch **aom** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/aom ## Afraid of Monsters: Director's cut -Reverse-engineered code, branch **aomdc** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/aomdc +Reverse-engineered code: branch **aomdc** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/aomdc ## Azure Sheep malortie's recreation - https://github.com/malortie/hl-asheep -Reverse-engineered code, branch **asheep** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/asheep +Reverse-engineered code: branch **asheep** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/asheep ## Big Lolly malortie's recreation - https://github.com/malortie/hl-biglolly @@ -232,12 +243,17 @@ Recreation by lostgamer aka nillerusr - https://github.com/LostGamerHL/crack_lif ## Escape from the Darkness malortie's recreation - https://github.com/malortie/hl-eftd -Reverse-engineered code, branch **eftd** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/eftd +Reverse-engineered code: branch **eftd** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/eftd + +## Half-Life: Black Guard +*This mod uses dlls from Cleaner's Adventures* + +Branch **CAd** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/CAd ## Half-Life: Blue Shift Unkle Mike's recreation - https://hlfx.ru/forum/showthread.php?s=&threadid=5253 -Reverse-engineered code, branch **bshift** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/bshift +Reverse-engineered code: branch **bshift** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/bshift ## Half-Life: Induction Branch **induction** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/induction @@ -245,12 +261,12 @@ Branch **induction** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/ ## Half-Life: Opposing Force Recreation by lostgamer aka nillerusr - https://github.com/LostGamerHL/hlsdk-xash3d -Reverse-engineered code, clean branch **opfor** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/opfor +Reverse-engineered code: clean branch **opfor** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/opfor Spirit of Half Life: Opposing-Force Edition - https://github.com/Hammermaps-DEV/SOHL-V1.9-Opposing-Force-Edition ## Half-Life: Rebellion -Reverse-engineered code, branch **rebellion** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/rebellion +Reverse-engineered code: branch **rebellion** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/rebellion ## Half-Life: Urbicide Branch **hl_urbicide** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/hl_urbicide @@ -258,7 +274,7 @@ Branch **hl_urbicide** in hlsdk-portable - https://github.com/FWGS/hlsdk-portabl ## Half-Life: Visitors malortie's recreation - https://github.com/malortie/hl-visitors -Reverse-engineered code, branch **visitors** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/visitors +Reverse-engineered code: branch **visitors** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/visitors ## Half-Secret Branch **half-secret** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/half-secret @@ -271,18 +287,18 @@ Branch **noffice** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tr ## Poke 646 malortie's recreation - https://github.com/malortie/hl-poke646 -Reverse-engineered code, branch **poke646** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/poke646 +Reverse-engineered code: branch **poke646** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/poke646 ## Poke 646: Vendetta malortie's recreation - https://github.com/malortie/hl-poke646-vendetta -Reverse-engineered code, branch **poke646_vendetta** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/poke646_vendetta +Reverse-engineered code: branch **poke646_vendetta** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/poke646_vendetta ## Residual Life -Reverse-engineered code, branch **residual_point** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/residual_point +Reverse-engineered code: branch **residual_point** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/residual_point ## Residual Point -Reverse-engineered code, branch **residual_point** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/residual_point +Reverse-engineered code: branch **residual_point** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/residual_point ## Sewer Beta Branch **sewer_beta** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/sewer_beta @@ -293,12 +309,12 @@ Reverse-engineered code by Velaron - https://github.com/Velaron/tf15-client ## The Gate malortie's recreation - https://github.com/malortie/hl-thegate -Reverse-engineered code, branch **thegate** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/thegate +Reverse-engineered code: branch **thegate** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/thegate ## They Hunger malortie's recreation - https://github.com/malortie/hl-theyhunger -Reverse-engineered code, branch **theyhunger** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/theyhunger +Reverse-engineered code: branch **theyhunger** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/theyhunger They Hunger: Tactical - https://www.moddb.com/mods/they-hunger-tactical/downloads/tht-source-code-documentation @@ -341,16 +357,22 @@ Branch **half-screwed** in hlsdk-portable - https://github.com/FWGS/hlsdk-portab Port to Linux - https://github.com/fmoraw/NS ## Spirit of Half-Life -Version 1.2, branch **sohl1.2** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/sohl1.2 +Version 1.2: branch **sohl1.2** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/sohl1.2 ## Swiss Cheese Halloween 2002 Just more playable version by malortie - https://github.com/malortie/hl-shall Branch **halloween** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/halloween +## The Wastes +Version 1.5: Port to Linux - https://git.mentality.rip/a1batross/halflife-thewastes-sdk + ## Threewave CTF Branch **dmc** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/dmc +## Xen-Warrior +Branch **sohl1.2** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/sohl1.2 + ## Zombie-X Branch **zombie-x** in hlsdk-portable - https://github.com/FWGS/hlsdk-portable/tree/zombie-x From 2ecbe5b67eb017ae34d4b75d0d42ed43ceb64f46 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 19:34:07 +0300 Subject: [PATCH 13/79] engine: add testing master server at mentality.rip:27011 --- engine/common/masterlist.c | 1 + engine/common/netchan.h | 1 + 2 files changed, 2 insertions(+) diff --git a/engine/common/masterlist.c b/engine/common/masterlist.c index 0900918b..895e6713 100644 --- a/engine/common/masterlist.c +++ b/engine/common/masterlist.c @@ -419,5 +419,6 @@ void NET_InitMasters( void ) // keep main master always there NET_AddMaster( MASTERSERVER_ADR, false ); + NET_AddMaster( MASTERSERVER_ADR_TEST, false ); NET_LoadMasters( ); } diff --git a/engine/common/netchan.h b/engine/common/netchan.h index a1c3cbd3..fd69fd7a 100644 --- a/engine/common/netchan.h +++ b/engine/common/netchan.h @@ -70,6 +70,7 @@ GNU General Public License for more details. #define NET_MAX_MESSAGE PAD_NUMBER(( NET_MAX_PAYLOAD + HEADER_BYTES ), 16 ) #define MASTERSERVER_ADR "mentality.rip:27010" +#define MASTERSERVER_ADR_TEST "mentality.rip:27011" #define MS_SCAN_REQUEST "1\xFF" "0.0.0.0:0\0" #define PORT_MASTER 27010 From b949da291ee50509e6355bb0092d703151aa9061 Mon Sep 17 00:00:00 2001 From: mittorn Date: Sat, 21 Oct 2023 18:56:30 +0300 Subject: [PATCH 14/79] engine: fix strict aliasing issues found by an old armv7hf compiler --- engine/client/cl_main.c | 3 ++- engine/client/cl_parse.c | 2 +- engine/common/imagelib/img_utils.c | 14 ++++++++++---- engine/common/net_ws.c | 6 ++++-- engine/server/sv_custom.c | 2 +- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index e7a4c856..41ec4c0f 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -2247,7 +2247,8 @@ void CL_ReadNetMessage( void ) while( CL_GetMessage( net_message_buffer, &curSize )) { - if( cls.legacymode && *((int *)&net_message_buffer) == 0xFFFFFFFE ) + const int split_header = 0xFFFFFFFE; + if( cls.legacymode && !memcmp( &split_header, net_message_buffer, sizeof( split_header ))) // Will rewrite existing packet by merged if( !NetSplit_GetLong( &cls.netchan.netsplit, &net_from, net_message_buffer, &curSize ) ) continue; diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index a84734f4..8f0f7b89 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -1534,7 +1534,7 @@ void CL_SendConsistencyInfo( sizebuf_t *msg ) { case force_exactfile: MD5_HashFile( md5, filename, NULL ); - pc->value = *(int *)md5; + memcpy( &pc->value, md5, sizeof( pc->value )); if( user_changed_diskfile ) MSG_WriteUBitLong( msg, 0, 32 ); diff --git a/engine/common/imagelib/img_utils.c b/engine/common/imagelib/img_utils.c index a6cd189e..29107e65 100644 --- a/engine/common/imagelib/img_utils.c +++ b/engine/common/imagelib/img_utils.c @@ -284,8 +284,10 @@ int Image_ComparePalette( const byte *pal ) void Image_SetPalette( const byte *pal, uint *d_table ) { byte rgba[4]; + uint uirgba; // TODO: palette looks byte-swapped on big-endian int i; + // setup palette switch( image.d_rendermode ) { @@ -296,7 +298,8 @@ void Image_SetPalette( const byte *pal, uint *d_table ) rgba[1] = pal[i*3+1]; rgba[2] = pal[i*3+2]; rgba[3] = 0xFF; - d_table[i] = *(uint *)rgba; + memcpy( &uirgba, rgba, sizeof( uirgba )); + d_table[i] = uirgba; } break; case LUMP_GRADIENT: @@ -306,7 +309,8 @@ void Image_SetPalette( const byte *pal, uint *d_table ) rgba[1] = pal[766]; rgba[2] = pal[767]; rgba[3] = i; - d_table[i] = *(uint *)rgba; + memcpy( &uirgba, rgba, sizeof( uirgba )); + d_table[i] = uirgba; } break; case LUMP_MASKED: @@ -316,7 +320,8 @@ void Image_SetPalette( const byte *pal, uint *d_table ) rgba[1] = pal[i*3+1]; rgba[2] = pal[i*3+2]; rgba[3] = 0xFF; - d_table[i] = *(uint *)rgba; + memcpy( &uirgba, rgba, sizeof( uirgba )); + d_table[i] = uirgba; } d_table[255] = 0; break; @@ -327,7 +332,8 @@ void Image_SetPalette( const byte *pal, uint *d_table ) rgba[1] = pal[i*4+1]; rgba[2] = pal[i*4+2]; rgba[3] = pal[i*4+3]; - d_table[i] = *(uint *)rgba; + memcpy( &uirgba, rgba, sizeof( uirgba )); + d_table[i] = uirgba; } break; } diff --git a/engine/common/net_ws.c b/engine/common/net_ws.c index df34be20..b65ee41b 100644 --- a/engine/common/net_ws.c +++ b/engine/common/net_ws.c @@ -273,8 +273,10 @@ static void NET_NetadrToSockadr( netadr_t *a, struct sockaddr_storage *s ) } else if( a->type == NA_IP ) { + uint32_t ip; ((struct sockaddr_in *)s)->sin_family = AF_INET; - ((struct sockaddr_in *)s)->sin_addr.s_addr = *(uint32_t *)&a->ip; + memcpy( &ip, &a->ip, sizeof( ip )); + ((struct sockaddr_in *)s)->sin_addr.s_addr = ip; ((struct sockaddr_in *)s)->sin_port = a->port; } else if( a->type6 == NA_IP6 ) @@ -314,7 +316,7 @@ static void NET_SockadrToNetadr( const struct sockaddr_storage *s, netadr_t *a ) if( s->ss_family == AF_INET ) { a->type = NA_IP; - *(int *)&a->ip = ((struct sockaddr_in *)s)->sin_addr.s_addr; + memcpy( &a->ip, &((struct sockaddr_in *)s)->sin_addr.s_addr, sizeof( uint32_t )); a->port = ((struct sockaddr_in *)s)->sin_port; } else if( s->ss_family == AF_INET6 ) diff --git a/engine/server/sv_custom.c b/engine/server/sv_custom.c index cb034efb..588a0515 100644 --- a/engine/server/sv_custom.c +++ b/engine/server/sv_custom.c @@ -122,7 +122,7 @@ void SV_ParseConsistencyResponse( sv_client_t *cl, sizebuf_t *msg ) value = MSG_ReadUBitLong( msg, 32 ); // will be compare only first 4 bytes - if( value != *(int *)r->rgucMD5_hash ) + if( memcmp( &value , r->rgucMD5_hash, 4 )) badresindex = idx + 1; } else From fb95cc9a9711305a7be7e9ca7675964ae5313c13 Mon Sep 17 00:00:00 2001 From: mittorn Date: Sat, 21 Oct 2023 18:57:57 +0300 Subject: [PATCH 15/79] engine/client: respect m_ignore in mouse client code as grabbing window breaks touch input --- engine/client/input.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/engine/client/input.c b/engine/client/input.c index 71017882..0312952c 100644 --- a/engine/client/input.c +++ b/engine/client/input.c @@ -172,6 +172,8 @@ void IN_ToggleClientMouse( int newstate, int oldstate ) { if( newstate == oldstate ) return; + if( m_ignore.value ) + return; // since SetCursorType controls cursor visibility // execute it first, and then check mouse grab state @@ -212,6 +214,9 @@ void IN_CheckMouseState( qboolean active ) qboolean useRawInput = true; // always use SDL code #endif + if( m_ignore.value ) + return; + if( active && useRawInput && !host.mouse_visible && cls.state == ca_active ) { if( !s_bRawInput ) From 24d6f1788a2a02643d84439908c00d99f07b9108 Mon Sep 17 00:00:00 2001 From: mittorn Date: Sat, 21 Oct 2023 19:17:31 +0300 Subject: [PATCH 16/79] platform/sdl: workaround ubuntu SDL2 bug preventing resolving any extensions on EGL --- engine/platform/sdl/vid_sdl.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/engine/platform/sdl/vid_sdl.c b/engine/platform/sdl/vid_sdl.c index 3c633219..0b536e06 100644 --- a/engine/platform/sdl/vid_sdl.c +++ b/engine/platform/sdl/vid_sdl.c @@ -438,6 +438,25 @@ GL_GetProcAddress void *GL_GetProcAddress( const char *name ) { void *func = SDL_GL_GetProcAddress( name ); +#if !SDL_VERSION_ATLEAST( 2, 0, 6 ) && XASH_POSIX + if( !func && Sys_CheckParm( "-egl" )) + { + /* + * SDL2 has broken SDL_GL_GetProcAddress until this commit if using egl: + * https://github.com/libsdl-org/SDL/commit/466ba57d42d244e80357e9ad3011c50af30ed225 + * so call eglGetProcAddress directly + * */ + static void *(*peglGetProcAddress)( const char * ); + if( !peglGetProcAddress ) + { + void *lib = dlopen( "libEGL.so", RTLD_NOW ); + if( lib ) + *(void**)&peglGetProcAddress = dlsym( lib, "eglGetProcAddress" ); + } + if( peglGetProcAddress ) + func = peglGetProcAddress( name ); + } +#endif #if XASH_PSVITA // try to find in main module From 1bfb6c560ab77d376f23e761dcec7d0bfa90aff0 Mon Sep 17 00:00:00 2001 From: mittorn Date: Sat, 21 Oct 2023 19:20:18 +0300 Subject: [PATCH 17/79] platform/sdl: add check for missing hint defines --- engine/client/in_touch.c | 2 +- engine/platform/sdl/vid_sdl.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/engine/client/in_touch.c b/engine/client/in_touch.c index 04df74d4..c1e9fa33 100644 --- a/engine/client/in_touch.c +++ b/engine/client/in_touch.c @@ -1087,7 +1087,7 @@ void Touch_Init( void ) #if SDL_VERSION_ATLEAST( 2, 0, 10 ) SDL_SetHint( SDL_HINT_MOUSE_TOUCH_EVENTS, "0" ); SDL_SetHint( SDL_HINT_TOUCH_MOUSE_EVENTS, "0" ); -#else +#elif defined(SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH) SDL_SetHint( SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH, "1" ); #endif diff --git a/engine/platform/sdl/vid_sdl.c b/engine/platform/sdl/vid_sdl.c index 0b536e06..224dcefa 100644 --- a/engine/platform/sdl/vid_sdl.c +++ b/engine/platform/sdl/vid_sdl.c @@ -1015,8 +1015,12 @@ qboolean R_Init_Video( const int type ) refState.desktopBitsPixel = 16; #endif +#ifdef SDL_HINT_QTWAYLAND_WINDOW_FLAGS SDL_SetHint( SDL_HINT_QTWAYLAND_WINDOW_FLAGS, "OverridesSystemGestures" ); +#endif +#ifdef SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION SDL_SetHint( SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION, "landscape" ); +#endif #if SDL_VERSION_ATLEAST( 2, 0, 0 ) && !XASH_WIN32 SDL_SetHint( "SDL_VIDEO_X11_XRANDR", "1" ); From bee81e9723bb796270960bb72745976353cba1e4 Mon Sep 17 00:00:00 2001 From: mittorn Date: Sat, 21 Oct 2023 19:39:02 +0300 Subject: [PATCH 18/79] engine: Make SDL_GetBasePath error not fatal --- engine/common/host.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/engine/common/host.c b/engine/common/host.c index 6c3e11cd..66e0625d 100644 --- a/engine/common/host.c +++ b/engine/common/host.c @@ -1025,12 +1025,21 @@ void Host_InitCommon( int argc, char **argv, const char *progname, qboolean bCha host.rootdir[0] = 0; } #elif (XASH_SDL == 2) && !XASH_NSWITCH // GetBasePath not impl'd in switch-sdl2 - char *szBasePath; - - if( !( szBasePath = SDL_GetBasePath() ) ) + char *szBasePath = SDL_GetBasePath(); + if( szBasePath ) + { + Q_strncpy( host.rootdir, szBasePath, sizeof( host.rootdir )); + SDL_free( szBasePath ); + } + else + { +#if XASH_POSIX || XASH_WIN32 + if( !getcwd( host.rootdir, sizeof( host.rootdir ))) + Sys_Error( "couldn't determine current directory: %s, getcwd: %s", SDL_GetError(), strerror( errno )); +#else Sys_Error( "couldn't determine current directory: %s", SDL_GetError() ); - Q_strncpy( host.rootdir, szBasePath, sizeof( host.rootdir )); - SDL_free( szBasePath ); +#endif + } #else if( !getcwd( host.rootdir, sizeof( host.rootdir ))) { From c1d1aa6787aa57d915b733b39fceb6484f2c917b Mon Sep 17 00:00:00 2001 From: mittorn Date: Sat, 21 Oct 2023 20:11:58 +0300 Subject: [PATCH 19/79] ref_gl: rewrite ARB workaround to check EXT/OES names, notify user that function found with different name --- ref/gl/gl_opengl.c | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/ref/gl/gl_opengl.c b/ref/gl/gl_opengl.c index d973e631..efa8d3db 100644 --- a/ref/gl/gl_opengl.c +++ b/ref/gl/gl_opengl.c @@ -551,22 +551,46 @@ qboolean GL_CheckExtension( const char *name, const dllfunc_t *funcs, const char // functions are cleared before all the extensions are evaluated if((*func->func = (void *)gEngfuncs.GL_GetProcAddress( func->name )) == NULL ) { + + string name; + // HACK: fix ARB names - char *str = Q_strstr( func->name, "ARB" ); - if(str) + const char *str = Q_strstr( func->name, "ARB" ); + Q_strncpy( name, func->name, MAX_STRING ); + + if( str ) { - string name; - - Q_strncpy( name, func->name, MAX_STRING ); - name[str - func->name] = '\0'; + name[str - func->name] = '\0'; // cut func suffix + // if this was glFuncARB, try glFunc *func->func = gEngfuncs.GL_GetProcAddress( name ); - - if( !*func->func ) - GL_SetExtension( r_ext, false ); } else - // one or more functions are invalid, extension will be disabled + { + // set pointer to func name end to cut it correctly + str = func->name + Q_strlen( func->name ); + name[str - func->name] = '\0'; + } + + // try glFuncEXT + if( !*func->func ) + { + Q_strncat( name, "EXT", MAX_STRING ); + *func->func = gEngfuncs.GL_GetProcAddress( name ); + } + +#ifdef XASH_GLES + // try glFuncOES + if( !*func->func ) + { + name[str - func->name] = '\0'; // cut EXT from previous try + Q_strncat( name, "OES", MAX_STRING ); + *func->func = gEngfuncs.GL_GetProcAddress( name ); + } +#endif + if( !*func->func ) GL_SetExtension( r_ext, false ); + else // GL_GetProcAddress prints errors about missing functions, so tell user that we found it with different name + gEngfuncs.Con_Printf( S_NOTE "found %s\n", name ); } } #endif From 14c7a84482d139200b99a106333f12ee36dc326a Mon Sep 17 00:00:00 2001 From: mittorn Date: Sun, 22 Oct 2023 07:44:33 +0700 Subject: [PATCH 20/79] engine/client: always save touch config if it was resetted manually (helps after writing broken/empty config) --- engine/client/in_touch.c | 1 + 1 file changed, 1 insertion(+) diff --git a/engine/client/in_touch.c b/engine/client/in_touch.c index c1e9fa33..da0257a2 100644 --- a/engine/client/in_touch.c +++ b/engine/client/in_touch.c @@ -817,6 +817,7 @@ static void Touch_LoadDefaults_f( void ) button->flags |= g_DefaultButtons[i].flags; button->aspect = g_DefaultButtons[i].aspect; } + touch.configchanged = true; } // Add default button from client From e68b19ed1a69fb8d26e744807b3cb4fb76fdde6e Mon Sep 17 00:00:00 2001 From: mittorn Date: Sun, 22 Oct 2023 10:48:10 +0700 Subject: [PATCH 21/79] engine/client: handle touch config aspect ratio, try correctly handle touch aspect on resizeable windows --- engine/client/cl_scrn.c | 1 + engine/client/in_touch.c | 90 ++++++++++++++++++++++++++++++++++------ engine/client/input.h | 1 + 3 files changed, 80 insertions(+), 12 deletions(-) diff --git a/engine/client/cl_scrn.c b/engine/client/cl_scrn.c index a7d9e0ea..4004a305 100644 --- a/engine/client/cl_scrn.c +++ b/engine/client/cl_scrn.c @@ -726,6 +726,7 @@ void SCR_VidInit( void ) // restart console size Con_VidInit (); + Touch_NotifyResize(); } /* diff --git a/engine/client/in_touch.c b/engine/client/in_touch.c index da0257a2..93fdfebb 100644 --- a/engine/client/in_touch.c +++ b/engine/client/in_touch.c @@ -132,6 +132,8 @@ static struct touch_s int whitetexture; int joytexture; // touch indicator qboolean configchanged; + float actual_aspect_ratio; // maximum aspect ratio from launch, or aspect ratio when entering editor + float config_aspect_ratio; // aspect ratio set by command from config or after entering editor } touch; // private to the engine flags @@ -168,13 +170,42 @@ CVAR_DEFINE_AUTO( touch_emulate, "0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "emulate #define B(x) (button->x) #define SCR_W ((float)refState.width) #define SCR_H ((float)refState.height) -#define TO_SCRN_Y(x) (refState.height * (x)) +#define TO_SCRN_Y(x) (refState.width * (x) * Touch_AspectRatio()) #define TO_SCRN_X(x) (refState.width * (x)) static void IN_TouchCheckCoords( float *x1, float *y1, float *x2, float *y2 ); static void IN_TouchEditClear( void ); static void Touch_InitConfig( void ); +void Touch_NotifyResize( void ) +{ + if( refState.width && refState.height && ( !touch.configchanged || !touch.actual_aspect_ratio )) + { + float aspect_ratio = SCR_H/SCR_W; + if( aspect_ratio < 0.99 && aspect_ratio > touch.actual_aspect_ratio ) + touch.actual_aspect_ratio = aspect_ratio; + } +} + +static inline float Touch_AspectRatio( void ) +{ + if( touch.config_aspect_ratio ) + return touch.config_aspect_ratio; + else if( touch.actual_aspect_ratio ) + return touch.actual_aspect_ratio; + else if( refState.width && refState.height ) + return SCR_H/SCR_W; + else + return 9.0f / 16.0f; +} + + +static void Touch_ConfigAspectRatio_f( void ) +{ + touch.config_aspect_ratio = Q_atof( Cmd_Argv( 1 )); +} + + /* ========================== Touch_ExportButtonToConfig @@ -206,7 +237,7 @@ static inline int Touch_ExportButtonToConfig( file_t *f, touch_button_t *button, if( keepAspect ) { - float aspect = ( B(y2) - B(y1) ) / ( ( B(x2) - B(x1) ) /(SCR_H/SCR_W) ); + float aspect = ( B(y2) - B(y1) ) / ( ( B(x2) - B(x1) ) /(Touch_AspectRatio()) ); FS_Printf( f, " %f\n", aspect ); } else FS_Printf( f, "\n" ); @@ -271,6 +302,8 @@ qboolean Touch_DumpConfig( const char *name, const char *profilename ) FS_Printf( f, "touch_setclientonly 0\n" ); FS_Printf( f, "\n// touch buttons\n" ); FS_Printf( f, "touch_removeall\n" ); + FS_Printf( f, "touch_aspectratio %f\n", Touch_AspectRatio()); + for( button = touch.list_user.first; button; button = button->next ) { @@ -376,7 +409,7 @@ static void Touch_GenerateCode_f( void ) if( FBitSet( flags, TOUCH_FL_DEF_HIDE )) SetBits( flags, TOUCH_FL_HIDE ); - aspect = ( B(y2) - B(y1) ) / ( ( B(x2) - B(x1) ) /(SCR_H/SCR_W) ); + aspect = ( B(y2) - B(y1) ) / ( ( B(x2) - B(x1) ) /(Touch_AspectRatio()) ); if( memcmp( &c, &B(color), sizeof( rgba_t ) ) ) { Con_Printf( "unsigned char color[] = { %d, %d, %d, %d };\n", B(color[0]), B(color[1]), B(color[2]), B(color[3]) ); @@ -549,6 +582,7 @@ static void Touch_RemoveAll_f( void ) { IN_TouchEditClear(); Touch_ClearList( &touch.list_user ); + touch.config_aspect_ratio = 0.0f; } static void Touch_SetColor( touchbuttonlist_t *list, const char *name, byte *color ) @@ -784,7 +818,7 @@ void Touch_AddClientButton( const char *name, const char *texture, const char *c IN_TouchCheckCoords( &x1, &y1, &x2, &y2 ); if( round == round_aspect ) { - y2 = y1 + ( x2 - x1 ) * (SCR_W/SCR_H) * aspect; + y2 = y1 + ( x2 - x1 ) / (Touch_AspectRatio()) * aspect; } button = Touch_AddButton( &touch.list_user, name, texture, command, x1, y1, x2, y2, color, true ); button->flags |= flags | TOUCH_FL_CLIENT | TOUCH_FL_NOEDIT; @@ -809,7 +843,7 @@ static void Touch_LoadDefaults_f( void ) if( g_DefaultButtons[i].texturefile[0] == '#' ) y2 = y1 + ( (float)clgame.scrInfo.iCharHeight / (float)clgame.scrInfo.iHeight ) * g_DefaultButtons[i].aspect + touch.swidth*2/SCR_H; else - y2 = y1 + ( x2 - x1 ) * (SCR_W/SCR_H) * g_DefaultButtons[i].aspect; + y2 = y1 + (( x2 - x1 ) / Touch_AspectRatio()) * g_DefaultButtons[i].aspect; } IN_TouchCheckCoords( &x1, &y1, &x2, &y2 ); @@ -910,7 +944,7 @@ static void Touch_AddButton_f( void ) if( aspect ) { if( B( texturefile )[0] != '#' ) - B( y2 ) = B( y1 ) + ( B( x2 ) - B( x1 )) * ( SCR_W / SCR_H ) * aspect; + B( y2 ) = B( y1 ) + (( B( x2 ) - B( x1 )) / Touch_AspectRatio() ) * aspect; B( aspect ) = aspect; } } @@ -918,11 +952,39 @@ static void Touch_AddButton_f( void ) static void Touch_EnableEdit_f( void ) { + touch_button_t *button; + float current_ratio = SCR_H/SCR_W; if( touch.state == state_none ) touch.state = state_edit; touch.resize_finger = touch.move_finger = touch.look_finger = touch.wheel_finger = -1; touch.move_button = NULL; touch.configchanged = true; + /* try determine the best ratio + * User enters editor. Window now have correct size. Need to fix aspect ratio in some cases */ + // Case A: no config was loaded, touch was generated with lower height, but window was resized higher, reset it to actual size + if( touch.actual_aspect_ratio > current_ratio ) + touch.actual_aspect_ratio = current_ratio; + if( !touch.config_aspect_ratio ) + touch.config_aspect_ratio = touch.actual_aspect_ratio; + // Case B: config was loaded, but window may be resized later, so keep y coordinate as is + touch.actual_aspect_ratio = current_ratio; + // convert coordinates to actual aspect ratio after it was updated + if( touch.config_aspect_ratio != touch.actual_aspect_ratio ) + { + for( button = touch.list_user.first; button; button = button->next ) + { + B(y1) /= touch.actual_aspect_ratio / touch.config_aspect_ratio; + B(y2) /= touch.actual_aspect_ratio / touch.config_aspect_ratio; + + // clamp positions to make buttons visible by user + if( B(y2) > 1.0f ) + { + B(y1) -= B(y2) - 1.0f; + B(y2) -= B(y2) - 1.0f; + } + } + touch.config_aspect_ratio = touch.actual_aspect_ratio; + } } static void Touch_DisableEdit_f( void ) @@ -957,7 +1019,7 @@ static void Touch_DeleteProfile_f( void ) static void Touch_InitEditor( void ) { - float x = 0.1f * (SCR_H/SCR_W); + float x = 0.1f * (Touch_AspectRatio()); float y = 0.05f; touch_button_t *temp; rgba_t color; @@ -1052,6 +1114,7 @@ void Touch_Init( void ) Cmd_AddRestrictedCommand( "touch_generate_code", Touch_GenerateCode_f, "create code sample for mobility API" ); Cmd_AddCommand( "touch_fade", Touch_Fade_f, "start fade animation for selected buttons" ); Cmd_AddRestrictedCommand( "touch_toggleselection", Touch_ToggleSelection_f, "toggle vidibility on selected button in editor" ); + Cmd_AddRestrictedCommand( "touch_aspectratio", Touch_ConfigAspectRatio_f, "set current aspect ratio" ); // not saved, just runtime state for scripting Cvar_RegisterVariable( &touch_in_menu ); @@ -1171,9 +1234,9 @@ static void Touch_DrawTexture ( float x1, float y1, float x2, float y2, int text } #define GRID_COUNT_X ((int)touch_grid_count.value) -#define GRID_COUNT_Y (((int)touch_grid_count.value) * SCR_H / SCR_W) +#define GRID_COUNT_Y (((int)touch_grid_count.value) * Touch_AspectRatio()) #define GRID_X (1.0f/GRID_COUNT_X) -#define GRID_Y (SCR_W/SCR_H/GRID_COUNT_X) +#define GRID_Y (1.0f/Touch_AspectRatio()/GRID_COUNT_X) #define GRID_ROUND_X(x) ((float)round( x * GRID_COUNT_X ) / GRID_COUNT_X) #define GRID_ROUND_Y(x) ((float)round( x * GRID_COUNT_Y ) / GRID_COUNT_Y) @@ -1251,7 +1314,7 @@ static float Touch_DrawText( float x1, float y1, float x2, float y2, const char { while( *s && ( *s != '\n' ) && ( *s != ';' ) && ( x1 < maxx ) ) x1 += Touch_DrawCharacter( x1, y1, *s++, size ); - y1 += cls.creditsFont.charHeight / 1024.f * size / SCR_H * SCR_W; + y1 += cls.creditsFont.charHeight / 1024.f * size / Touch_AspectRatio(); if( y1 >= maxy ) break; @@ -1358,11 +1421,12 @@ void Touch_Draw( void ) if( !touch.initialized || ( !touch_enable.value && !touch.clientonly )) return; - Touch_InitConfig(); - if( cls.key_dest != key_game && !touch_in_menu.value ) return; + Touch_InitConfig(); + + ref.dllFuncs.GL_SetRenderMode( kRenderTransTexture ); if( touch.state >= state_edit && touch_grid_enable.value ) @@ -1949,6 +2013,8 @@ static int Touch_ControlsEvent( touchEventType type, int fingerID, float x, floa int IN_TouchEvent( touchEventType type, int fingerID, float x, float y, float dx, float dy ) { + y *= SCR_H/SCR_W/Touch_AspectRatio(); +// Con_Printf("%f %f\n", TO_SCRN_X(x), TO_SCRN_Y(y)); // simulate menu mouse click if( cls.key_dest != key_game && !touch_in_menu.value ) { diff --git a/engine/client/input.h b/engine/client/input.h index 98c871fb..bd5aafb1 100644 --- a/engine/client/input.h +++ b/engine/client/input.h @@ -75,6 +75,7 @@ void Touch_ResetDefaultButtons( void ); int IN_TouchEvent( touchEventType type, int fingerID, float x, float y, float dx, float dy ); void Touch_KeyEvent( int key, int down ); qboolean Touch_WantVisibleCursor( void ); +void Touch_NotifyResize( void ); // // in_joy.c From dcb3da53b014761b233296a032cf96e87bd651f7 Mon Sep 17 00:00:00 2001 From: mittorn Date: Sun, 22 Oct 2023 19:49:33 +0700 Subject: [PATCH 22/79] engine/client: fallback to defaults in touch_reloadconfig if config not exist --- engine/client/in_touch.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/engine/client/in_touch.c b/engine/client/in_touch.c index 93fdfebb..a2ed8163 100644 --- a/engine/client/in_touch.c +++ b/engine/client/in_touch.c @@ -760,6 +760,8 @@ static void Touch_SetCommand_f( void ) Con_Printf( S_USAGE "touch_setcommand \n" ); } +static void Touch_LoadDefaults_f( void ); + static void Touch_ReloadConfig_f( void ) { touch.state = state_none; @@ -769,8 +771,15 @@ static void Touch_ReloadConfig_f( void ) touch.selection->finger = -1; touch.edit = touch.selection = NULL; touch.resize_finger = touch.move_finger = touch.look_finger = touch.wheel_finger = -1; - - Cbuf_AddTextf( "exec %s\n", touch_config_file.string ); + if( FS_FileExists( touch_config_file.string, true ) ) + { + Cbuf_AddTextf( "exec \"%s\"\n", touch_config_file.string ); + } + else + { + Touch_LoadDefaults_f(); + touch.configchanged = true; + } } static touch_button_t *Touch_AddButton( touchbuttonlist_t *list, From b9ca0d45632cf9e180cc6a76cf06dc34de57d159 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 18:40:20 +0300 Subject: [PATCH 23/79] engine: common: network: more simple IP address copying from sockaddr to netadr_t and back --- engine/common/net_ws.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/engine/common/net_ws.c b/engine/common/net_ws.c index b65ee41b..ad3f3db9 100644 --- a/engine/common/net_ws.c +++ b/engine/common/net_ws.c @@ -273,11 +273,9 @@ static void NET_NetadrToSockadr( netadr_t *a, struct sockaddr_storage *s ) } else if( a->type == NA_IP ) { - uint32_t ip; ((struct sockaddr_in *)s)->sin_family = AF_INET; - memcpy( &ip, &a->ip, sizeof( ip )); - ((struct sockaddr_in *)s)->sin_addr.s_addr = ip; ((struct sockaddr_in *)s)->sin_port = a->port; + ((struct sockaddr_in *)s)->sin_addr.s_addr = a->ip4; } else if( a->type6 == NA_IP6 ) { @@ -316,7 +314,7 @@ static void NET_SockadrToNetadr( const struct sockaddr_storage *s, netadr_t *a ) if( s->ss_family == AF_INET ) { a->type = NA_IP; - memcpy( &a->ip, &((struct sockaddr_in *)s)->sin_addr.s_addr, sizeof( uint32_t )); + a->ip4 = ((struct sockaddr_in *)s)->sin_addr.s_addr; a->port = ((struct sockaddr_in *)s)->sin_port; } else if( s->ss_family == AF_INET6 ) From 3ac8ad948471494f858021acb8c285d29c24a88a Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 18:41:44 +0300 Subject: [PATCH 24/79] engine: fixup endianness found by -Werror=strict-aliasing in old armv7hf compiler (d259421111289af3b49c055150e02213f39075a6) --- engine/client/cl_main.c | 4 +++- engine/client/cl_parse.c | 1 + engine/server/sv_custom.c | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index 41ec4c0f..e3861f2d 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -2247,11 +2247,13 @@ void CL_ReadNetMessage( void ) while( CL_GetMessage( net_message_buffer, &curSize )) { - const int split_header = 0xFFFFFFFE; + const int split_header = LittleLong( 0xFFFFFFFE ); if( cls.legacymode && !memcmp( &split_header, net_message_buffer, sizeof( split_header ))) + { // Will rewrite existing packet by merged if( !NetSplit_GetLong( &cls.netchan.netsplit, &net_from, net_message_buffer, &curSize ) ) continue; + } MSG_Init( &net_message, "ServerData", net_message_buffer, curSize ); diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index 8f0f7b89..81fd545f 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -1535,6 +1535,7 @@ void CL_SendConsistencyInfo( sizebuf_t *msg ) case force_exactfile: MD5_HashFile( md5, filename, NULL ); memcpy( &pc->value, md5, sizeof( pc->value )); + LittleLongSW( pc->value ); if( user_changed_diskfile ) MSG_WriteUBitLong( msg, 0, 32 ); diff --git a/engine/server/sv_custom.c b/engine/server/sv_custom.c index 588a0515..f18ad6a3 100644 --- a/engine/server/sv_custom.c +++ b/engine/server/sv_custom.c @@ -121,8 +121,10 @@ void SV_ParseConsistencyResponse( sv_client_t *cl, sizebuf_t *msg ) { value = MSG_ReadUBitLong( msg, 32 ); + LittleLongSW( value ); + // will be compare only first 4 bytes - if( memcmp( &value , r->rgucMD5_hash, 4 )) + if( memcmp( &value, r->rgucMD5_hash, 4 )) badresindex = idx + 1; } else From 3251b68df54dca96e9a261f345d2b3726668f6df Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 22 Oct 2023 19:16:16 +0300 Subject: [PATCH 25/79] ref: gl: more simple search of GL func with alternative name (EXT, OES suffixes or no suffix) --- ref/gl/gl_opengl.c | 62 +++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/ref/gl/gl_opengl.c b/ref/gl/gl_opengl.c index efa8d3db..4f857d6e 100644 --- a/ref/gl/gl_opengl.c +++ b/ref/gl/gl_opengl.c @@ -549,48 +549,54 @@ qboolean GL_CheckExtension( const char *name, const dllfunc_t *funcs, const char for( func = funcs; func && func->name; func++ ) { // functions are cleared before all the extensions are evaluated - if((*func->func = (void *)gEngfuncs.GL_GetProcAddress( func->name )) == NULL ) + if(( *func->func = (void *)gEngfuncs.GL_GetProcAddress( func->name )) == NULL ) { - string name; + char *end; + size_t i = 0; +#ifdef XASH_GLES + const char *suffixes[] = { "", "EXT", "OES" }; +#else + const char *suffixes[] = { "", "EXT" }; +#endif // HACK: fix ARB names - const char *str = Q_strstr( func->name, "ARB" ); - Q_strncpy( name, func->name, MAX_STRING ); - - if( str ) + Q_strncpy( name, func->name, sizeof( name )); + if(( end = Q_strstr( name, "ARB" ))) { - name[str - func->name] = '\0'; // cut func suffix - // if this was glFuncARB, try glFunc - *func->func = gEngfuncs.GL_GetProcAddress( name ); + *end = '\0'; } - else + else // I need Q_strstrnul { - // set pointer to func name end to cut it correctly - str = func->name + Q_strlen( func->name ); - name[str - func->name] = '\0'; + end = name + Q_strlen( name ); + i++; // skip empty suffix } - // try glFuncEXT - if( !*func->func ) + for( ; i < sizeof( suffixes ) / sizeof( suffixes[0] ); i++ ) { - Q_strncat( name, "EXT", MAX_STRING ); - *func->func = gEngfuncs.GL_GetProcAddress( name ); + void *f; + + Q_strncat( name, suffixes[i], sizeof( name )); + + if(( f = gEngfuncs.GL_GetProcAddress( name ))) + { + // GL_GetProcAddress prints errors about missing functions, so tell user that we found it with different name + gEngfuncs.Con_Printf( S_NOTE "found %s\n", name ); + + *func->func = f; + break; + } + else + { + *end = '\0'; // cut suffix, try next + } } -#ifdef XASH_GLES - // try glFuncOES - if( !*func->func ) + // not found... + if( i == sizeof( suffixes ) / sizeof( suffixes[0] )) { - name[str - func->name] = '\0'; // cut EXT from previous try - Q_strncat( name, "OES", MAX_STRING ); - *func->func = gEngfuncs.GL_GetProcAddress( name ); - } -#endif - if( !*func->func ) GL_SetExtension( r_ext, false ); - else // GL_GetProcAddress prints errors about missing functions, so tell user that we found it with different name - gEngfuncs.Con_Printf( S_NOTE "found %s\n", name ); + } } } #endif From 8f819a2fde6fcdd5cf0c1c52384863763783c668 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 23 Oct 2023 00:31:30 +0300 Subject: [PATCH 26/79] engine: platform: sdl: fix forgotten icon setup call --- engine/platform/sdl/vid_sdl.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/engine/platform/sdl/vid_sdl.c b/engine/platform/sdl/vid_sdl.c index 224dcefa..6dd112ef 100644 --- a/engine/platform/sdl/vid_sdl.c +++ b/engine/platform/sdl/vid_sdl.c @@ -645,9 +645,9 @@ void VID_RestoreScreenResolution( void ) #endif // SDL_VERSION_ATLEAST( 2, 0, 0 ) } +#if SDL_VERSION_ATLEAST( 2, 0, 0 ) static void VID_SetWindowIcon( SDL_Window *hWnd ) { -#if SDL_VERSION_ATLEAST( 2, 0, 0 ) rgbdata_t *icon = NULL; char iconpath[MAX_STRING]; const char *localIcoPath; @@ -685,8 +685,8 @@ static void VID_SetWindowIcon( SDL_Window *hWnd ) #if XASH_WIN32 // ICO support only for Win32 WIN_SetWindowIcon( LoadIcon( host.hInst, MAKEINTRESOURCE( 101 ))); #endif -#endif // SDL_VERSION_ATLEAST( 2, 0, 0 ) } +#endif // SDL_VERSION_ATLEAST( 2, 0, 0 ) static qboolean VID_CreateWindowWithSafeGL( const char *wndname, int xpos, int ypos, int w, int h, uint32_t flags ) { @@ -804,6 +804,7 @@ qboolean VID_CreateWindow( int width, int height, window_mode_t window_mode ) else VID_RestoreScreenResolution(); #endif + VID_SetWindowIcon( host.hWnd ); SDL_ShowWindow( host.hWnd ); if( glw_state.software ) From 9e107e900ce5d91db8af6db81048e58bbd80af93 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 24 Oct 2023 18:11:31 +0300 Subject: [PATCH 27/79] engine: network: fix async NS resolve If we're currently running NS resolving thread, any request would block. Co-Authored-by: mittorn --- engine/common/net_ws.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/engine/common/net_ws.c b/engine/common/net_ws.c index ad3f3db9..49738d3e 100644 --- a/engine/common/net_ws.c +++ b/engine/common/net_ws.c @@ -444,6 +444,7 @@ static void NET_InitializeCriticalSections( void ) void NET_ResolveThread( void ) { struct sockaddr_storage addr; + qboolean res; RESOLVE_DBG( "[resolve thread] starting resolve for " ); RESOLVE_DBG( nsthread.hostname ); @@ -453,13 +454,14 @@ void NET_ResolveThread( void ) RESOLVE_DBG( " with gethostbyname\n" ); #endif - if( NET_GetHostByName( nsthread.hostname, nsthread.family, &addr )) + if(( res = NET_GetHostByName( nsthread.hostname, nsthread.family, &addr ))) RESOLVE_DBG( "[resolve thread] success\n" ); else RESOLVE_DBG( "[resolve thread] failed\n" ); mutex_lock( &nsthread.mutexres ); nsthread.addr = addr; nsthread.busy = false; + nsthread.result = res ? NET_EAI_OK : NET_EAI_NONAME; RESOLVE_DBG( "[resolve thread] returning result\n" ); mutex_unlock( &nsthread.mutexres ); RESOLVE_DBG( "[resolve thread] exiting thread\n" ); @@ -544,6 +546,7 @@ static net_gai_state_t NET_StringToSockaddr( const char *s, struct sockaddr_stor memset( &nsthread.addr, 0, sizeof( nsthread.addr )); detach_thread( nsthread.thread ); + asyncfailed = false; } else { From b0a79df86f4884981fec652b620c655085492a61 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 26 Oct 2023 04:59:01 +0300 Subject: [PATCH 28/79] ref: change r_traceglow to 0, as GoldSrc does --- ref/gl/gl_opengl.c | 2 +- ref/soft/r_main.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ref/gl/gl_opengl.c b/ref/gl/gl_opengl.c index 4f857d6e..360d0bdc 100644 --- a/ref/gl/gl_opengl.c +++ b/ref/gl/gl_opengl.c @@ -26,7 +26,7 @@ CVAR_DEFINE_AUTO( r_novis, "0", 0, "ignore vis information (perfomance test)" ); CVAR_DEFINE_AUTO( r_nocull, "0", 0, "ignore frustrum culling (perfomance test)" ); CVAR_DEFINE_AUTO( r_lockpvs, "0", FCVAR_CHEAT, "lockpvs area at current point (pvs test)" ); CVAR_DEFINE_AUTO( r_lockfrustum, "0", FCVAR_CHEAT, "lock frustrum area at current point (cull test)" ); -CVAR_DEFINE_AUTO( r_traceglow, "1", FCVAR_GLCONFIG, "cull flares behind models" ); +CVAR_DEFINE_AUTO( r_traceglow, "0", FCVAR_GLCONFIG, "cull flares behind models" ); CVAR_DEFINE_AUTO( gl_round_down, "2", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "round texture sizes to nearest POT value" ); CVAR_DEFINE( r_vbo, "gl_vbo", "0", FCVAR_ARCHIVE, "draw world using VBO (known to be glitchy)" ); CVAR_DEFINE( r_vbo_dlightmode, "gl_vbo_dlightmode", "1", FCVAR_ARCHIVE, "vbo dlight rendering mode (0-1)" ); diff --git a/ref/soft/r_main.c b/ref/soft/r_main.c index b8770c61..89bf9f2e 100644 --- a/ref/soft/r_main.c +++ b/ref/soft/r_main.c @@ -67,7 +67,7 @@ CVAR_DEFINE_AUTO( sw_surfcacheoverride, "0", 0, ""); static CVAR_DEFINE_AUTO( sw_waterwarp, "1", FCVAR_GLCONFIG, "nothing"); static CVAR_DEFINE_AUTO( sw_notransbrushes, "0", FCVAR_GLCONFIG, "do not apply transparency to water/glasses (faster)"); CVAR_DEFINE_AUTO( sw_noalphabrushes, "0", FCVAR_GLCONFIG, "do not draw brush holes (faster)"); -CVAR_DEFINE_AUTO( r_traceglow, "1", FCVAR_GLCONFIG, "cull flares behind models" ); +CVAR_DEFINE_AUTO( r_traceglow, "0", FCVAR_GLCONFIG, "cull flares behind models" ); CVAR_DEFINE_AUTO( sw_texfilt, "0", FCVAR_GLCONFIG, "texture dither"); static CVAR_DEFINE_AUTO( r_novis, "0", 0, "" ); From 34d76643429dd44342b7b1683de916a6aac330a2 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 26 Oct 2023 05:12:38 +0300 Subject: [PATCH 29/79] ref: gl: disable TGA flip for detail textures, GoldSrc ignores it, so we will too --- ref/gl/gl_rmisc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ref/gl/gl_rmisc.c b/ref/gl/gl_rmisc.c index 617d65fa..e0d82d36 100644 --- a/ref/gl/gl_rmisc.c +++ b/ref/gl/gl_rmisc.c @@ -85,7 +85,7 @@ static void R_ParseDetailTextures( const char *filename ) if( Q_stricmp( tex->name, texname )) continue; - tex->dt_texturenum = GL_LoadTexture( detail_path, NULL, 0, TF_FORCE_COLOR ); + tex->dt_texturenum = GL_LoadTexture( detail_path, NULL, 0, TF_FORCE_COLOR|TF_NOFLIP_TGA ); // texture is loaded if( tex->dt_texturenum ) From 96a9172e364e2bc8e7db25f4fd32fcde9806cdaf Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 26 Oct 2023 23:06:50 +0300 Subject: [PATCH 30/79] engine: platform: sdl: check that we're handling SDL errors according to it's documentation --- engine/platform/sdl/events.c | 8 ++++---- engine/platform/sdl/vid_sdl.c | 33 ++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/engine/platform/sdl/events.c b/engine/platform/sdl/events.c index 7bff17cb..2e9531a1 100644 --- a/engine/platform/sdl/events.c +++ b/engine/platform/sdl/events.c @@ -128,7 +128,7 @@ static qboolean SDLash_IsInstanceIDAGameController( SDL_JoystickID joyId ) return true; return false; #else - if( SDL_GameControllerFromInstanceID( joyId ) ) + if( SDL_GameControllerFromInstanceID( joyId ) != NULL ) return true; return false; #endif @@ -148,7 +148,7 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key ) #else int keynum = key.keysym.sym; #endif - qboolean numLock = SDL_GetModState() & KMOD_NUM; + qboolean numLock = FBitSet( SDL_GetModState(), KMOD_NUM ); #if XASH_ANDROID if( keynum == SDL_SCANCODE_VOLUMEUP || keynum == SDL_SCANCODE_VOLUMEDOWN ) @@ -159,7 +159,7 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key ) if( SDL_IsTextInputActive() && down && cls.key_dest != key_game ) { - if( SDL_GetModState() & KMOD_CTRL ) + if( FBitSet( SDL_GetModState(), KMOD_CTRL )) { if( keynum >= SDL_SCANCODE_A && keynum <= SDL_SCANCODE_Z ) { @@ -176,7 +176,7 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key ) if( isprint( keynum ) ) { - if( SDL_GetModState() & KMOD_SHIFT ) + if( FBitSet( SDL_GetModState(), KMOD_SHIFT )) { keynum = Key_ToUpper( keynum ); } diff --git a/engine/platform/sdl/vid_sdl.c b/engine/platform/sdl/vid_sdl.c index 6dd112ef..6d1204ff 100644 --- a/engine/platform/sdl/vid_sdl.c +++ b/engine/platform/sdl/vid_sdl.c @@ -158,8 +158,8 @@ void *SW_LockBuffer( void ) void *pixels; int stride; - if( SDL_LockTexture(sw.tex, NULL, &pixels, &stride ) ) - Sys_Error("%s", SDL_GetError()); + if( SDL_LockTexture(sw.tex, NULL, &pixels, &stride ) < 0 ) + Sys_Error( "%s: %s", __func__, SDL_GetError( )); return pixels; } @@ -272,7 +272,7 @@ static void R_InitVideoModes( void ) int j; SDL_DisplayMode mode; - if( SDL_GetDisplayMode( displayIndex, i, &mode ) ) + if( SDL_GetDisplayMode( displayIndex, i, &mode ) < 0 ) { Msg( "SDL_GetDisplayMode: %s\n", SDL_GetError() ); continue; @@ -419,12 +419,16 @@ static qboolean WIN_SetWindowIcon( HICON ico ) { SDL_SysWMinfo wminfo; - if( SDL_GetWindowWMInfo( host.hWnd, &wminfo )) + SDL_VERSION( &wminfo.version ); + + if( SDL_GetWindowWMInfo( host.hWnd, &wminfo ) == SDL_TRUE ) { SendMessage( wminfo.info.win.window, WM_SETICON, ICON_SMALL, (LONG_PTR)ico ); SendMessage( wminfo.info.win.window, WM_SETICON, ICON_BIG, (LONG_PTR)ico ); return true; } + + Con_Reportf( S_ERROR "%s: %s", __func__, SDL_GetError( )); return false; } #endif @@ -492,8 +496,8 @@ void GL_UpdateSwapInterval( void ) { ClearBits( gl_vsync.flags, FCVAR_CHANGED ); - if( SDL_GL_SetSwapInterval( gl_vsync.value ) ) - Con_Reportf( S_ERROR "SDL_GL_SetSwapInterval: %s\n", SDL_GetError( ) ); + if( SDL_GL_SetSwapInterval( gl_vsync.value ) < 0 ) + Con_Reportf( S_ERROR "SDL_GL_SetSwapInterval: %s\n", SDL_GetError( )); } #endif // SDL_VERSION_ATLEAST( 2, 0, 0 ) } @@ -542,7 +546,7 @@ GL_UpdateContext static qboolean GL_UpdateContext( void ) { #if SDL_VERSION_ATLEAST( 2, 0, 0 ) - if( SDL_GL_MakeCurrent( host.hWnd, glw_state.context )) + if( SDL_GL_MakeCurrent( host.hWnd, glw_state.context ) < 0 ) { Con_Reportf( S_ERROR "GL_UpdateContext: %s\n", SDL_GetError()); return GL_DeleteContext(); @@ -599,7 +603,7 @@ static qboolean VID_SetScreenResolution( int width, int height, window_mode_t wi want.w = width; want.h = height; - if( SDL_GetClosestDisplayMode( 0, &want, &got ) < 0 ) + if( SDL_GetClosestDisplayMode( 0, &want, &got ) == NULL ) { Con_Printf( S_ERROR "%s: SDL_GetClosestDisplayMode: %s", __func__, SDL_GetError( )); return false; @@ -1047,7 +1051,7 @@ qboolean R_Init_Video( const int type ) // refdll can request some attributes GL_SetupAttributes( ); - if( SDL_GL_LoadLibrary( EGL_LIB ) ) + if( SDL_GL_LoadLibrary( EGL_LIB ) < 0 ) { Con_Reportf( S_ERROR "Couldn't initialize OpenGL: %s\n", SDL_GetError()); return false; @@ -1086,7 +1090,11 @@ rserr_t R_ChangeDisplaySettings( int width, int height, window_mode_t window_mod #if SDL_VERSION_ATLEAST( 2, 0, 0 ) SDL_DisplayMode displayMode; - SDL_GetCurrentDisplayMode( 0, &displayMode ); + if( SDL_GetCurrentDisplayMode( 0, &displayMode ) < 0 ) + { + Con_Printf( S_ERROR "SDL_GetCurrentDisplayMode: %s", SDL_GetError( )); + return rserr_invalid_mode; + } // check our desktop attributes refState.desktopBitsPixel = SDL_BITSPERPIXEL( displayMode.format ); @@ -1115,8 +1123,11 @@ rserr_t R_ChangeDisplaySettings( int width, int height, window_mode_t window_mod VID_RestoreScreenResolution(); #if SDL_VERSION_ATLEAST( 2, 0, 0 ) - if( SDL_SetWindowFullscreen( host.hWnd, 0 )) + if( SDL_SetWindowFullscreen( host.hWnd, 0 ) < 0 ) + { + Con_Printf( S_ERROR "SDL_SetWindowFullscreen: %s", SDL_GetError( )); return rserr_invalid_fullscreen; + } #if SDL_VERSION_ATLEAST( 2, 0, 5 ) SDL_SetWindowResizable( host.hWnd, SDL_TRUE ); #endif From a98256265852fa32fa77408e4dcb6f854ae2f40d Mon Sep 17 00:00:00 2001 From: mittorn Date: Thu, 26 Oct 2023 04:47:44 +0300 Subject: [PATCH 31/79] ref_gl: Fix missing DebugOutput functions on GLES --- ref/gl/gl_opengl.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ref/gl/gl_opengl.c b/ref/gl/gl_opengl.c index 360d0bdc..082885c8 100644 --- a/ref/gl/gl_opengl.c +++ b/ref/gl/gl_opengl.c @@ -859,7 +859,9 @@ void GL_InitExtensionsGLES( void ) #endif case GL_DEBUG_OUTPUT: if( glw_state.extended ) - GL_CheckExtension( "GL_KHR_debug", NULL, NULL, extid, 0 ); + GL_CheckExtension( "GL_KHR_debug", debugoutputfuncs, "gl_debug_output", extid, 0 ); + else + GL_SetExtension( extid, false ); break; // case GL_TEXTURE_COMPRESSION_EXT: NOPE // case GL_SHADER_GLSL100_EXT: NOPE @@ -1123,6 +1125,7 @@ void GL_InitExtensions( void ) // force everything to happen in the main thread instead of in a separate driver thread pglEnable( GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB ); + } // enable all the low priority messages From 6bc613bdb4751907e647d05150d21385454ee8ae Mon Sep 17 00:00:00 2001 From: mittorn Date: Wed, 25 Oct 2023 22:21:18 +0300 Subject: [PATCH 32/79] ref_gl: force gles2 on non-nanogl until we support gles1 directly --- ref/gl/gl_opengl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ref/gl/gl_opengl.c b/ref/gl/gl_opengl.c index 082885c8..ee25dfb4 100644 --- a/ref/gl/gl_opengl.c +++ b/ref/gl/gl_opengl.c @@ -1378,7 +1378,7 @@ void GL_SetupAttributes( int safegl ) #ifdef XASH_NANOGL gEngfuncs.GL_SetAttribute( REF_GL_CONTEXT_MAJOR_VERSION, 1 ); gEngfuncs.GL_SetAttribute( REF_GL_CONTEXT_MINOR_VERSION, 1 ); -#elif defined( XASH_WES ) || defined( XASH_REGAL ) +#else gEngfuncs.GL_SetAttribute( REF_GL_CONTEXT_MAJOR_VERSION, 2 ); gEngfuncs.GL_SetAttribute( REF_GL_CONTEXT_MINOR_VERSION, 0 ); #endif From bf5fd40d646e01d81096760ffaaea0dae4c20f31 Mon Sep 17 00:00:00 2001 From: mittorn Date: Wed, 25 Oct 2023 22:22:54 +0300 Subject: [PATCH 33/79] gl2shim: workaround empty rgb5/rgb8 textures --- ref/gl/gl2_shim/gl2_shim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ref/gl/gl2_shim/gl2_shim.c b/ref/gl/gl2_shim/gl2_shim.c index ecb0c4a2..904f0d8e 100644 --- a/ref/gl/gl2_shim/gl2_shim.c +++ b/ref/gl/gl2_shim/gl2_shim.c @@ -1014,7 +1014,7 @@ static void APIENTRY GL2_TexImage2D( GLenum target, GLint level, GLint internalf } internalformat = format; } - if( internalformat == GL_LUMINANCE8_ALPHA8 || internalformat == GL_RGB ) + if( internalformat == GL_LUMINANCE8_ALPHA8 || internalformat == GL_RGB || internalformat == GL_RGB8 || internalformat == GL_RGB5 ) internalformat = GL_RGBA; rpglTexImage2D( target, level, internalformat, width, height, border, format, type, data ); if( data != pixels ) From 4cb425d2bb4ae6892e09489fa21cde894d607b17 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 00:07:59 +0300 Subject: [PATCH 34/79] engine: console: do not draw console and do not draw notify in timedemo --- engine/client/console.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/engine/client/console.c b/engine/client/console.c index eadeef71..64ddf883 100644 --- a/engine/client/console.c +++ b/engine/client/console.c @@ -1983,7 +1983,7 @@ void Con_DrawConsole( void ) if( cls.state == ca_connecting || cls.state == ca_connected ) { - if( !cl_allow_levelshots.value ) + if( !cl_allow_levelshots.value && !cls.timedemo ) { if(( Cvar_VariableInteger( "cl_background" ) || Cvar_VariableInteger( "sv_background" )) && cls.key_dest != key_console ) con.vislines = con.showlines = 0; @@ -1993,7 +1993,7 @@ void Con_DrawConsole( void ) { con.showlines = 0; - if( host_developer.value >= DEV_EXTENDED ) + if( host_developer.value >= DEV_EXTENDED && !cls.timedemo ) Con_DrawNotify(); // draw notify lines } } @@ -2025,7 +2025,7 @@ void Con_DrawConsole( void ) { if( con.vislines ) Con_DrawSolidConsole( con.vislines ); - else if( cls.state == ca_active && ( cls.key_dest == key_game || cls.key_dest == key_message )) + else if( cls.state == ca_active && ( cls.key_dest == key_game || cls.key_dest == key_message ) && !cls.timedemo ) Con_DrawNotify(); // draw notify lines } break; From 6f6ddbce2864138ff26f138c8cffd4f07e7e7266 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 03:42:01 +0300 Subject: [PATCH 35/79] engine: add argument -timedemo that makes engine run timedemo and exit --- engine/client/cl_demo.c | 5 ++++- engine/common/host.c | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/engine/client/cl_demo.c b/engine/client/cl_demo.c index 44ad36cd..e947c76d 100644 --- a/engine/client/cl_demo.c +++ b/engine/client/cl_demo.c @@ -1124,7 +1124,10 @@ void CL_FinishTimeDemo( void ) time = host.realtime - cls.td_starttime; if( !time ) time = 1.0; - Con_Printf( "%i frames %5.3f seconds %5.3f fps\n", frames, time, frames / time ); + Con_Printf( "timedemo result: %i frames %5.3f seconds %5.3f fps\n", frames, time, frames / time ); + + if( Sys_CheckParm( "-timedemo" )) + CL_Quit_f(); } /* diff --git a/engine/common/host.c b/engine/common/host.c index 66e0625d..577bc913 100644 --- a/engine/common/host.c +++ b/engine/common/host.c @@ -127,6 +127,7 @@ void Sys_PrintUsage( void ) O("-noenginejoy ", "disable engine builtin joystick support") O("-noenginemouse ", "disable engine builtin mouse support") O("-nosound ", "disable sound output") + O("-timedemo ", "run timedemo and exit") #endif "\nPlatform-specific options:\n" @@ -1158,6 +1159,7 @@ Host_Main int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGame, pfnChangeGame func ) { static double oldtime, newtime; + string demoname; host.starttime = Sys_DoubleTime(); @@ -1254,6 +1256,9 @@ int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGa Cbuf_ExecStuffCmds(); // execute stuffcmds (commandline) SCR_CheckStartupVids(); // must be last + if( Sys_GetParmFromCmdLine( "-timedemo", demoname )) + Cbuf_AddTextf( "timedemo %s\n", demoname ); + oldtime = Sys_DoubleTime() - 0.1; if( Host_IsDedicated( )) From a8fc9a4c5a65beb5435546c218274b925b2bcbc0 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 07:24:18 +0300 Subject: [PATCH 36/79] waf: update to latest waifu --- waf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/waf b/waf index 22f9c7ff..1a25450d 100755 --- a/waf +++ b/waf @@ -33,12 +33,12 @@ POSSIBILITY OF SUCH DAMAGE. import os, sys, inspect VERSION="2.0.26" -REVISION="e4a9cc0189c9deacafd38334e0382cc0" -GIT="ad7b733fc60852f77eff200b79e8b6f9562494d2" +REVISION="84a26fddc7f40e4e4f00569f36be455a" +GIT="61ff2ac19ccba4a69910ca9b2686c51e8bbc0986" INSTALL='' -C1='#D' -C2='#?' -C3='#%' +C1='#_' +C2='#V' +C3='#2' cwd = os.getcwd() join = os.path.join @@ -171,5 +171,5 @@ if __name__ == '__main__': Scripting.waf_entry_point(cwd, VERSION, wafdir) #==> -#BZh91AY&SY#ˆÑ”qÿÿÿ?ùÿÿÿÿÿÿÿÿÿÿÿÕh&_$m~VÐ#%ø écÅþzÝkÁÒ…#%#%#%#%#%#%#%#%#%#%#%#%#%P@#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%'ß^﻽j¾Ãätyoy϶{ëVÞöS§}Î}hÐÐx>êÝÛ¦ìß=öÜ{çNÙa·vwwu—fÖìæÚÝ×:cví±º>IíÞ4<Ò»¾ûUñ»©iíÞ}Û¸¶›¶ÌíÛn3¸æܯ9^Ü™öËÞw­wn%;§ÞÉïX¥knp[>vÒmÛîö==îù´>ïr=îìÚÇsì¯J=ãè÷w}·¬k[fÁg»àuÐш]´÷ë"öÙ×#%Ó@#D'eº7h#%#D¥#%¤HJ£wu·AÒìñô}ºç@wu[^îóî>ž½Ñà#%Qõ”#%ºÎÙªÛƒpݤvÍvš"QBÌÝ«C»tÚ#?²YÛR„…Ð KF.ºå®µÅõNô¯XAE­AM˜AƶʨYë8ÙnÝÁž6VûÛÞ¹šuÑÔ·ÝíwÞ{Ï>Ö¨€ï|qá#¯»K¬2VÛw]¥i÷÷‹°>š×MÞ^ÀÞ6ìOf}µÓQSCAE#%D#%#D"(UšY²&Ô_w#DR¨úÒTPÜs§¾qw8uwÖwÓáÕó×FHöÕ+=÷Ýòòï±wk}p€uÈñ^ë0#%#%#%#%#%:#%>l4#%8ú^ÓL¸B*‹¸¹ºÊ´ÚcÐh9>Øóííª[#?#%::—4¶â&4ÝŠãwgrvä£! Ðtk!€(#% A÷·-†P#D#%(€@9#%hФóR#%½ö}ï+ÍÝÞ}÷Ýì\S×› ¸®½Ñ£{r  ØѦìvfÛ#?×Äß:ç>+îʤª8óëF–óì‹»)t9óíÞŠ+ÕïÞN_{ËÏkî°ûÞûßw¯yÝ÷—Ï»KÞ÷×¾Þ7n3¬‘¶îë—gÓ|û¾Ù2û¥šä1ß.SŸ^^^4µ¹õž@§¶è}4õ£u•³ÚÝJ­ìt()T‘YzhÝpkv¶­%.›Ûvûxò¾Ž¾Ùd>ôoi¯;Þ¯®à#%^ÖÀF÷Ç{Á÷½|%UO¶‡=·ÜvÝKïs—½Þ}²}>«HÛïcãÞ•÷·Ý÷½Þñí¦V÷'=íºÛju×Ø}·Ï¾øßw{دÙ¾w½é¶{ž®w»½;tzõ'K¶ãÚßo®ï»ºž³½Ç{Ýôßow-[slûÛÚû{Öbˆ½òï±Ýê»}îïTûÞxŽ÷EZ»¾åè.mŽËnç>xÝŒºÕ½¼|ž#D>ôõïa#%è6}Úå¶ÖتÕVSÛ½³Í½[V#?ÅåöÏ¥òµ6ËÝÎÒ±µmÜíµØu®®Õë‹Ël²ï¼q÷ßO]y¶ÞÞÙ¸¬kÌ >¶<{Ÿqï½¹ñóWl¡]z;c¶r_÷šónÝkBì®v=uöîÕ¾û·¥œZÖ®Í]ÛW½—Z³Þw=-ÃuÊÝÑc×·zÍí;»&ÚE—ϽsPU=îíÞb”ÇÛ¼ó¼z »‹ï8óßOnw‡›5µl¶¥ Z;»§t17q{ÞÀzuÖíïiíµ]Û>½êBõRV¤&áÎãïw1¶jå»f=žw¯q#%zÎ×m¤®dvô4óß|rkå>èït}×ß>ûá@Ñj1U*’ v«TÕA•;aÛ¶ˆϹÜÀ#%©#D;#?u‰¶Í­ÖµG;jÈí»}ÝÓÝueë×xðQÜ5õª¡ßO¥#?yŽØ{ÃÞ½]· Ü9˹Ӄ³[®jw”Šªºö{+víïnÏxzŠ€)J ¢žy{Ü‘! ê5£Gnå¹·;ìï>íß#%tP#%>î= #%#%ûã—›)>ÜÛ¾<ØŒÖqu#%Û·¬æg{uuïwwMÍz$¶Õ*3.¢‚צ½µê#%¤ŽŽºË„#%®»XH]Æú½#ËŽ¶³«¸íÝW-JÐÉRºíÖ´€ EÝœaÖq}Ÿ{Ä>ú€h+8úûï¾nóÞó#%ª[dT¡&÷¶ÝÓØí·ZÖÜ3wC¶#?³[ÙSתãÛÃE}Ÿm*Þ>{åëvÇC#D%TéÙ€;Nõµuïeíì®ólÝÓÔÕ¼Ýl¸0=ëÀõ¯V*[ç=ŠoqÊÜÄ×"Û¹»6k/on=zÊ´I¨JUU`W2²×GWAë:öÈ#?Ú¼¬Z#%( u¦m@tÝ®ÝÝkQZÆá³t#%#%ë=Þ>ïw×ÆÝ»ßZðø¾ÒM#%#%`A¶b€¢fÉk&ì¹mÑÓ¥hw]Ïw®ôât±bÔcY.4uqÝÞo³|Î<û£¯|¶Þ:dÓ,¡ÇmØû¹zõ,ÂÕ¹ÌÖÖm÷{Æû|‹Ø ÇBÖ#èÅ#%@%šb´°”„,ƒÒˆ©u¶º#%lYvº´ÝS¢ZÔÝÝ…™M»†#%@h.»FàÞ}€t#%(#%#%é€AŸ}ÉÍ^©ƒ¹`S-ŸA÷¯tûÅÔTubÏaëï½h#D®æ¥ƒ¶UÛTZêìåt—'rÐ2#%cUc¾ïS¯‹7`jiÒ‘îôy·µ¢…(%¼U#%ÖKL:jŠ¶-îݲ#%ÓT€PHÚ°›zèôxÜ”¤êÕ‡néÙsÞÐ#Dnáa´è‘æñÎΖÌÛ_}hæ®çNí¹ÆÜvÂÏR»l#%g®ï½÷À'’ˆ„j³jXeµ±¡‚¨ßn:ìº@«=ï}îïŸgtmïnç­kÞÏg»—7Sc®jõêÍèÖv¤^=o±Âw{/¶£Imª¬|>çä§×L>çΧ¯°i¡#% #%F€#%L™#%Ó!¥3B˜J©å#?SCÈ) ýI§© i£É¤ôÔ MA  ˜ƒBdbTÞAêžI7¤OÔz‘´ž§éM¨õ4È#%#%#%#%#%#%#%‚D@О¦ „Âõ2§êž§µ6¨ôžž¤Þ¤m=(i£ÔÑ£F†€#%#%#%#%#%‰SÐML ‚OS 6”ÍO51Aê6§”Óõ'©íP22b#%d#%#%#%#%#%Èh#%#DPA#%4Ó@&Œ€€ÐЙF›S4©ûB4§˜“$ÐÏQ§¨ #%h#%#%#%  “Q €#%L‚a0€˜˜†™4&@hÓQD4õ6 #?#% #%#%#%#%?éOö#D¤tÌUþØ3Æ!W$Ø*šíOÀU3j¡¢ ¦)™¨¢§ÐªFˆA)8*›RªÈG ~ÓâA‚ƒoÄ£âøËz¬>0~91“ÊK(F$8„Åä°e“ºÁî`{ÓÅI…kx¬)[âU †¦8óþ³È#%pˆÿBàk!˜ŸéÿWûv×Ì*ž Dë#%; B€p@¹@MESÚ*˜wDIJPöAa9ckÖÁ#?´Ý·¯WMz½û<œM^¦·©9Àñ‹—Pè‡D–ˆ›¹©xƒ¡\âÌ*‚HÌã‹’jÙ_ä]D’#Gª_ã¤@—_ÕªXë ‚‚!‰(ZQ»#%“dL1;@d(·8RW’…#%éU4#DÍHºEÒ¢³hÄ"P‹ˆL¨èU˜€EÈUç/ã¿Q¸¼ƒ€&"ÄDŠ12ªST*‘#D„O¹@‰J¯@Äe1 •(V%…“öJ˜‘x(‹ë(fTI`Ÿ‹Œ¢ð€š™""#Dhiš)•ø6#‚©…0Ñ1MÍ‘b#‚©æâ¡GBP2#DŠ¯­#%å#D% ŠRÐP¢Ò#%Pˆ‚9IiX%ˆ¢ˆª"Š!Š¦(¢#D"ˆŠ#D‚Hª" Š’Hš*¤’"ˆ¢‰¢ª$‰ˆ¢¨‚¦¢`¡¢¨¦¦f"H¨ª)š¨¢©¦¨&b"¦ˆªš¡‰ &„˜VR‰¦(–Š(©˜™b(¢#%‰¨B@R„D*‚˜Š¥)%#D•#DVeˆ)H”)™#D*I$– ª‰(¢‰"*&!`a† )V)’a¨Z"ˆ"iª#D¦B ‚’#DF‰` (˜h¨‚¨(Š%f&ˆ*’ª¨#D "¨¦b¤)ˆ™#DZ#DF¢ˆª"ªª"‚¢"©j ¥¨Š*%¦%‰" *b* ª*jZ*h"#DB#D#Dš©˜#Dh `  i&("Y„¥"Xš#Dˆ)¥*ˆ`(dªf¤(©¢!¤¡„š–b¦ª¡¦˜)‚f¥Xˆ&•¢¤„"(#DH$)&TªJˆ’©"Zˆ„¦j‚˜’Šj¢ š”¡†#Dšj¢‚ JH†*FPXTI”¥Š‰Šˆ(*!¤ši‚h¦"¨!’A…J!”ª „ˆ(#D™¢BE¦P…fb `‚fˆ’©ˆ#D¨¦ˆš‚!” ‰I™Š‰(b€ª#D"ˆ¥¥Š$ˆ¥**B¦I"’€¢¨"‰(‰(#D`ª#D†ŠJb¤‰f(¦H#D(ªB ¢©)hª ªˆŠ(¢’¢ª¡šš©Jˆˆ‰ˆ(ŠH•‰ŠŠ#%¦*ª$"‰#D"‚R¦"(ª‚#Dª¦¦b¢‰©b$)†jfhŠ*¤¦ˆ†(bf$"i(h*bˆ†(b*b"*)( ’Bˆ‚&($˜)ˆ&b ©&bhŠZªh©Š)šŠJª*‚#DP¤¢"†Š#D&b&R"¢ ™ª (" –Š"h$‚eª$€ª*"i¨˜€¨h¢"J”¢š"!˜*‚"Š"ŠˆŠ ¤¥ˆ‰"‚‚¨ ¢‚š‚¨’Š‚˜ˆ‚"ˆˆ š&(’…¨’š¦#D "h¢#D*(¨‚i„‚ª‰ªˆ†š(Z(ˆˆ¤†#D&‚#Dˆ‚‰`˜¡‚ŠZ*)Š¢ˆ! $¢"¢"Hˆ¦X¶3DÔ¤ÒPÕ4‘5ADÍ4ÑE#?M1,M BAADMDE QJKU,PQDÒ”0K‘3SJA%CQTR±S0#?%@±T!CD³LUEITÄ“Q$ÊDL•IRQQQ0‘PDRKTSDÁDUQERDÄTURTE450ATRÄL”A 4DŒ´ƒM-UHI2ETÔSLÐEHHQDUD”K$“D”TARÓDÓ@RÉPPT”ÑRU5Q-4´ÓBD´´RA,LÍTQ4L¥2“Q EÕÐS3 ÄLD´±H@A-EKÄD4DÅ%1PSL4ÁSPÑAC…DIDDI¥$E´1$ÒÅUÐTDÈPL•0PÁTÁQ1ÑKIRÔµDAÒE4L„°IKAM5QTDEMA4ÄH” T°ILQPTÄTTÒ3DQEDL±!Ð2’0ÅQ%4RDH@ITQA"MIQPDÅE@Ñ50ÄL!ÑRLTÃUMSIUÕEHTHU LELECU ¤‚¤ÉCMQ0TK“4T•1ELPÔ@•HA 2PËAS%C42ÂÒP¤ÀÓ %4EPQAKLRE3Q$0?Í 0ž¸1HF&EP @ ¦¥bj& ˜¦)¥˜Š‚ „¢(ª"(ªiB``¨©•š†¢$‚ *b©ˆb"¦%‰‰Š#D¦Šh‰ˆˆ¡˜ªIHb#DJ˜©J¤¢–$¤ªZ¦‚¨)©–ª(šZªhŠŠ"Š¢$Š©¡ˆh¢#D¤ˆ‰‰‚ˆŠZh#DšŠJ(š˜ ""h ™"¢¥¢*i)Y$hš‘ŸàÁ0Y ™€¤’VbaŠ¨š‚%¦¦*"?ãgQ-A+UL¬Ã0ÄL¥$ÍJ12T“5TPPD’RHÍ1S2DÐ@Q$Í4IRBC TEDEÐÅA@RLÍPQP0PS#?4PÀ4ÐÑÓEEKRE4ÐATM33U1 QAQAA0I)4…DD3,QT2 HAD4ÕÉ@ÄQE20Q0@Ã#?„UAR”„IÃÀÌU@U$ÌDT¤2”0…CBBE¥,‘1T4’‘2J?òþr(¦šii#Db*š#D"¨) ""hª Š(R‚•Š¨*bšb™š¢’š$¨‚‰64¡0¬‘LÔ•S5ULEµRE@D1QT4´IUQ4ÄU3TÅPILÓ3)AC@R,C@„D@MMSÅQÍ)TTÐQ4RLD$EMÌLRDÑQ3,UL•@S$2ÓIE4Ì5-,ÄÑLMEEE5L@D4•D2EJDLEÔ”I4• 0MQD‘R”ÔRE3PM¬TRÑMUQÍ2ÌÕ,M4CLSÂĤ• HA!E%M1R´!B´C#?4KTÍ(P”´”Í LI4THJSK2CADÅ-UP’´Ã11QD…P„EBÅA%Q5 JÉHÁP¤P @KÁ ,D…3 A@#?%P,I%Dã$ %Q0Á#?D‘M#?SE-(RÒS ”L1¡@ÐT SDUHD£ „ HÐD´A$©#%DQ@Ñ -(Ä,Q”R#? T…AHÐÐQ%4P„E+T”4¥4´‰JÐÕL%!HKUBÄSS#?4R©UJLÕPRÅAIIQ1!LTLSU@”U#IJM4!KB*#DÀÒ$SDTQ2ED°L„+ÑCU T¨ M$²2HL3@„Å*1DHD,„´PŒJHÍ4±1$ÃQ#%D, ÒEBÐERÊE4EPUHÓLÄDM!UIE#?IUMDQT´D%D´S-T„@ÌSDDPÄ°EPQ1P1IAAPPMT°ÐE#?Ã,Q$ 30HTÐQ•U1S EQBP²•UÔ¤ƒISD²T ÌETÁ-DÑTÕS1PME“4TÑM%PPÔµ%DTÄ,KE%SA3TÐÄLÄR44D“IÃ5U#? Q5UL_4‘4³QÄTHP”ÅEUSA2E-,ÁLE44PA4ÒA#%DQA5#?)QHD5%!-2IK#?+ÔCTQDEALBPPPTHUIA3DIIC0@L$ÂÁSQ#AC#? E EM!R#%RÈ”ÉE)0D T•QÅA1MPTPPÍѱAU!PÄELQ2µL#?P± QD„‘ KL±-#?5EÉĤÄÈÁLAÕ Â„RSCEM$IE$LÅKATPPDTMRP…#QKBPÓB4Ì-ITT±ÌTI$³ ÐÑMCTŒ4@PÕPLITÒµQ14”1 2ÄE,B%PP…*PR4D%5D2$TQTD%P… I@Õ34AUQE$IÌÕDDÔЄ3%D1#%R1$IT”ATєҔQM+5E#D”©!T0­,ÈQTIUC3@‘%5UU@ÓDIL´TËL0È-!E Õ)1@sf†!)¨&€’¦ hZHŠV˜*Dˆ¥hX"%¥‰  ¤("VFH¨h#D(ª’ˆˆ Ši¢ ˆŠˆª&©iˆhH‚˜hˆ(¦ŠV Š$"¦&f*(J@˜ª’¨©#DH$&Rh H•ˆ j¤Š‚H‚BŠbª#D)ˆRª˜ˆ@ª‚‚–a"JiRˆT¥‚JZbP""Š!Jˆ(h"ˆ‰j&(&"f*‰¤Š)¢#D™b )#Dˆh !”bD¨bª¤#Dš  &#D#DD)&VHD¡h#DT(Q‰š*h**†ˆˆR¥$€¤J)–@¥‚¥f‚‚¢€¨)’&&¡¢’ªZJ¢‰‚‚šJX"#%¥˜ˆˆd"@ª@Š Š&@*†#Dªš¢I &•¦†) ¢ii#%F¥©ª¨¢¢`*‰¢.NŠi¢¨h ¥¤’H„¥h*f‚‚¡B$˜ˆ…¥ZBd¦‘H€’¦`†%BBVA¢"‰¦#DŠi€¤ª$ )#D!¤$&#%Šbfbe†ªZ)** (¦Š""`ˆ˜¢&)¢˜¨ ˆ¢”&€$¢áAÿ=ÆzuÊ?ÕCILÇûs#%vŸÊÔ¨d¹$4åý?ÞR²º§øñŸcDú+¶ÿñ6ùîqu¢)ÕÙ0¨äû§ýn¨Ž¨HTó¶ö)®ö»á‚Ê#Dg¢ÁyEr,?¸Öb‘ƒl<¯úe€¹ÿ¤v_ü–Ú"½mAO¶ø¾âoDlšsHÍyï0ÿ—þÖ;Éú¶Ï ï¾:˜RµLo˜ëÃ7ÔÎÄ›"þü”0±òøVcÒpÕV±DF‡ãgæ¿Â‹z¡ÿK¨'ý¶|AiØ™`RNn˜`ñÒÀ×”H?–yÆuÀ4Û×rÑÔË¿cPö’©òÀ¡þ÷Šö‡IFPH¸¹–¼‚’4Üæš?éXmÎ ÄçÕ~LZiŸd~þ ãþ¶¤åž uõgs âŸjˆ—‚eôõïaÞór¦Ébs›žØKáíùùùÜá·Å8eg&í[Wf(Fp³§sf ¨?Wý]ø0=•Aøö^E=GäÈÆþy–0ÆRÎw…ÈA¢’7–»Þ'—J/Ýšb$ƒÃx\»±#DŒYØçæì­q«j#DÙîñ‡ß“}¶ºHŸõ4j˜úW´³b3JQQE_:˜Q?—•£s"U´{R†rMÚt„7IìrÌÛճƪe  x°0˜ü·Ë3‰õâB‡þÄ¡;æQ÷I¿_}¦Ï]€z3"B#]ðOûS¥þß~úwøo«ªÞXÙ4 9æ-M,Ë(`¿¼… ‰Úü툢›éê°Âb¨î¹qÊïߌý àá‡\ÊbDH¤xk5E°á%ˆ-»$µ,æ ¡)ßœ‚­Œó`C†@mq ÏàŸ+þÓ6ü윓Í蘛¢&•F¨te¹KKEÝ×B¬Ç£D8®Ô¹øñwí=uo!+ýÖK´ES« G¥:Ö>žÛP2ÀYúœúõ¼ã‹õŠ7,(NÍÝ:¨3öMhë$Ö Jl)¼ˆƒ¦Y0r6¶,ä„™64W¨5j=?ï4ÄëÔݤÚ]¢øy_4Ë0ç«‘aÞè#?~¾yÖ‡dŽ6Æ#?ÿß8ùŠ<±T7dô—…©&³¦ø<à#Hi8O‘ý0j[æm-!Eñ,;‰ÖO”ë)IAøç¾Ñ#D)¡¼Ø}Ði˜r(&MwÕ(ÂÐ%1e%"½ŸÕîéƒÏO4=ˆ7uiò¯4Ój:³N#D.º´”Røú³ú°j„(¤­òqe«oúoˆ¨p¯Ýæ#?##D…)å:bhh¾|÷Jqú·Ð4“ù»óKʺqW/ôÇgFèBuC¾2ÍkÊêpÒ(,öÔ7yb¶Å™Ç¶áHek‹8e¤Ý›]% m•ÊƈF¿mÕ€w‘rÎY;áB²5Ì!ÌØG<"Éþì†ÎYÃniXP"œ $Ž¥o±Ú¾5`s›1#DÔ}9µ¸HFÐã:Â.gK8ÝUƒg0£ÞÒ³W£løÿ3z.éh0ÌÏÃèåü_Žˆ,šh¼Q·ääwþÊ6³ôÞþòtYó¥™S•œâ"á¦"çö6\}èLžÝœãÞ}ã^ÌÿÚÓ¿žî}zöqŽyמ×I#?Ò:ßý¼=Ðö¼»Šøß–ìLºµš¥^T¼dÓ„äÅ]8`ÊÎX‡Ñ;ΰrQ_×°ípgñ÷¥ÿ+Ä6é/™?ÂÔ¨c‘Ÿmcdí@ïÒ=<#% a 2TèóÇÔY"‡ºE¯Ô‚JövßÞ9Ÿ˜³¯Xg‚áâúnt™AyO¦5eƒx24,(ÁRÅyä×Ú}¶Y«É)ÙÀ2žn¨lš$ä&Èh˜~U[³)31w··[Î¥mÛG~2Ю͟Á™A%9ÕDˆPœ u3a,Œ(h×Sé(ŠR"ÆÐ… ,çè?Tø0͆C#3póe³‡M{ðw¦ (uØ•x¹zRž #-š±3 çBkP~|ã!±¨ÃÊÃÂŒ]+æ’>Ž‡i™+lWvsûŸßÅCW,ðV’xUa:%Óh\”þž1pi?]”2)…Ní1õDþotþnck¤{S‡Vð ÜãÏûÙ?Šy4>¬NÛûö¤Šc˜Í5C=a(CÇh–ðœ“ñ¦:~ì^:OS³êËÍ´hz"€ÎœU½Aè¬üÉŽÒèr@ZŒ¥ë*7\ÚÚƒ/oej&JXTƒ¦|p÷¨š =®ÖTïaH#£íšJ†ÑPÈN˜»óf¤G Â(<;1xÁ¬Þ»ýú¦"iîïßÝùuýªÐÑ ÅØŸc1x”?ÄÂlÇ/ÜÕb¾™P\úOä&#%¢ÅŸ¨év(ˆ|†/Z(0ÎÅõÖYŸ‰læ„(`_*:¥Ž:bÄ¡=ß5ÓÕU³µÊ–ŸV…V{ô¡UR‘É#DAóCœ{µ­²(:ó&H" 'ªåEj(yf€¿:¤ˆ“¹¡WßTÏý"Cv`¡èÊH§Áü¬—ŠË£G“hG6_n a£ˆÚÓGs)‘`iT2nül kh÷6ãç£êqìû.¼yrß²Ô¾LÄüµZQÆ‘ã¤ìÒåŸ^â9ÿ1úwÍŽµ*'Aô¿¡#%´M;àÇØß:ñ¸|ç A²ˆ*vÔ’”Iïô»4*ƒÂ©;—¯m6 I.üàÆZ%׋,‹"† )ÜûRQ£„-­nýC®B‘ZHÓÄ­—õ±Fþ«=ñwïÈ îyóPu?r¯Žcû'˜˜Ù¦‰çú8ÞþÌÌieý¹ŠrÔúµÄÅq¡…:º¤ïÇË\†¤*—©ÝýFz Ï®±Çë±Ä*{åÎ#D\FÎJ1»kñ äÚ1Æ뎴_ZBPÅQ,"ÀÖ¼3;ˆM%Ù§ù¡þdøï(¡ð’m~;ŒÖ¿;GqŽýö)ä>åk8Q¢Îüxû¶1çÊ&¼ø=«&’1ñ9©H†u,·Ä?ÉÆ»µC¸¨ ú¸A.€€•ðÓ6¾@y}òc2•(>7Üóu.hF˜Š4T Í‚óMØl,Tc•g1Yczý¿#hcïý5‚¶JÀés¼}éþ™?^è’o\¸IºŽ÷/hp®Úœ]—u^^'㳟¦›÷Óû·1ÈODÒoK(•Dj õ§5)þ>ECþª­-±`,@ˆÆœdci¯Æ%Xi£-¡çŠ_º~øxü!¯÷'·œÆ°zô+@äæèYERiRÑÎ1Š€T#%§Å‡}ÃK¦˜ýÔKçXb¨&ê(H/Â<`ä+…3-5UY”ï.ñPZòÇ“QÒïèK§ÒœÓš§ädúøä|?«ÛÙ£c•Xå+áófûºé`„ÿ"N×n̲˜Ü‹õ`ÏëE Ì•)1š¶Ýâ“#D¨nCmϾÃòÉÁƒ=ô:óQíÞtÉý–º¬ÆhB5ÜZN¨AMDT§¼Ì ½VžÖ/U*¦iSr®|²…‚HŒc8$ g&FJÃï!IF3ÄŒÝ>›£/]ÆѨ½åI‹iþ'Zqë#D$ž_qFÞ5&-é$á-@Vï“·<2ß›Ò0koš²){AW$9Wñ'Î3L‘³~\lö8¼g9?r¾–;÷ͲÈõ¬1¼ $ëk)«;½ð"þ×ûÛœT÷וöiÒëÁ ú•)ñJº)ÉCäÝ°š£…€´ÎGã0mÇè¿Š’?•ýÏÝþÍ;;ŽµÚ'-䉓bb­(¨‚âÁ[ÓƒþxÁ #?”Ä èÊq)Ç ÎúÛ6gaMúÖãXt´­EKfø7º{ÕÏž×Ïk× ö¥K8v…±Æ—ûÛÄ#?iÿdŒ Çß™¹ý³fNdOê“Ïõæ±æC8‘¥(l¼;%ƳTZ{˜1Pš‰•N(ÄCŽ“î8Œ\¤Bv=8|ÓT?BÝ~§¼ÏèI~s¼µÍô©Þ)ÒL´'Š×ŠbQ„qOŠâsò£º-°&þxv´¥¹zš©vtË{Ô·°sʧ6Φ©Ó1åé•d­Ã¿«×ûßtÖºY´:tùלU¹}V›húæá©%"àt@¿CÆf!ê7í›/—¾œš‰ßµqüÆS¬»¡(sðxhgé´Äò|]2ËZ1Ö›¸Ã°ÿŽË8#çhe·Š Tj˜Á Bªø/páéÙŽ–çý¨\;þ4C]F’×w! sƒì}ÿ­Á¹FVÞ)1*Ûü¬\Š#DÄR/O¨i”¸nuxÞ¸®$¬óehéÿZ‹Å˜1¤æÈã<>:¸È‰´ÚYÎ+µëqòÈ^ÜìbÙ™_âóÎhwD)}ìÐÓ$#û2~é¬ñ9<ú\Z<Øò®Þö'símBksðîò­.»öíå¿M[ÚÁUM/ºƒ“Ã8ì£ º$´Ë|L~Mul±cjE¸6ÙûèR¹¶&šèÒÞ¦žœ®dP9p3ì§L™'ŸéÈÚ¬邸=&ò˜ª)AiBP&ÏUöÿ¾²Ö´ {}±mQ_aQ VuªigÍ,Ýq#D/åhjFR–†¿,~5LQ>š#DdFɹý•©í)ùæ·ßXÝ,gí´#?dž&#??·óÚÏbC÷!»ºÀþÏ< -2êvpY“sªCá‚ÅÈÌ“dŸ{¤M¯Üܼ¸IÚ‘­‡91½}nöo[3zåÃC»U}ø*b¥ŒÕõ*¡I»‘d××FÓÚ>¤›×ë6¸V÷)¬j®!±t,"bP?í¨bZÕ(ç•C¥)¨0šÀG·«JXdJ…*¡gu=îÜqz;LöPCö(˜HÀ Á÷#?áÉ£ùIØ“žµ>£;½;©_¶oF×9÷¿~xaÕ Æ h‡ì„±FäøõGχ/Ã\Cë­ÒÚí;ïŠE'ŽoóOr}réözñ©ß´töÍýݲƒÉÀ=Í<š¥¢ž,/z_žtkÓjó•®Ä$OÕÛÇÔÔ$`¿çÏzö±°š^W¿ZªÏÓ‰ªÓÁ¨úÇÅJ¹ öúVé×kh†MXg„’“w„臹º&h®ÕûT«¤è~ BÛ“ º"Õ.”:gÇ0ÍáJ4d+#?GiÝŸÈqßdª#?)W°þ¾1#%K‹…©]ø¨k:5Q( á¯ê›"_¯¤.«tQ^®q. 0¯²cñ.òaÉCå5iç9Ç…“Q–»ßÆþÇž6ŽºLÄ;a!åµs6K¦Š±¶ûL‚Š€É‡Çqe|÷ÖáØâ_G·1;§ƒ#DS uñW½žùÛ5¿j~|próq’׎±”mçÙhoÒÅgWáðÖ;"÷¾~‡ºÜ?U¼IGƒef¯¶b:#£8ÛŒÈ_¹Ã¶Æâ#DP”R‡ .âÙCN¦yHtÙ‹V&V0`qQÿvÅT4`v‘žæT3G;ªª<93Á‹!D Ân1ÊþUÙÊçÔƒ×^ Å5‰,ÝÍܦ#ŠÊŒÎÞÎ×#%]g…a™¡KÒJ¤ø· #?¤ræK/ÈVª/ùjUKÁÞe{Éçðº[pò-f°Aá Ù§ D4!¶˜¢™ò†ÐŠ¥ý¬1æÒv É6j¹ï]#»¸ãjc,ŠjúLq—t` RÁÀ ~Ò-ÿÛiy¬,/ ¤ˆ±áb'¨úsš§XŒkhÂøŸ3€cÂ8 Ò•Ö*yŒ+SïfDQ?O- Ãk΋¼V¾£ÜÑÁ2ø°#?šWùß„Â?„U¢µÙ’Ä?ÆOðììû´ÐÚ”¡ŠR1¤¤|Ò¬ B‡0<žcdðk)’1FÅÚE5¯ËZl1 3ƒŠP†UvæÄ‚›¸nøÌî²ú*ýn£#%„V\”h»„Qn4ÅØ©^(VUÁÑÐDü},ì—ÖüÄ8i¾€k¼—4­Úô8¸M30Ì@”S>ä#?g#?ß®©ÒŒ´+À²lŒú_WÙ5+^ÃôÚY‰—’ßç–'‡ôpÄQT%Zclß•ƒI´ä±³<ÿ¨Òa‡º,jƱ¤ß²çzcõçC |§Ff஡F‹æ>~,^êí­|ü(ù&µ![¯çµ´2À;ÉP6ýI1„‘{±ªMÎ~;ü¦Ÿ'ð.Cô‡ÈÕ]nŒˆ‚º$¤To5zyã8†D“ÜÒ{Ø*Bƒä!(¯%Ÿ0vO'}0Ÿ¬w™NMÐœý¹O#²hÜï\a9Ë÷HpÀÞõÉΉ˜º¯*Å—qãc"a%³l“( Dsןj.¦î}#D- 븡çB.Ú÷·ÛÏìöüyÇ#D¯˜#D $™ÂØ]R?…Ô昀Kú–ÞˆJë9I)ìÀsñqIOø8R %ˆ%‰(fQáëêðׇ‡N}‡rîç'«¹¥—ZâM3ÁÓ¦~£&ˆèí–Šê‹ÏÈÅÓKLªû¯iÁM„\@Ú<´ëÏ8„™ƒ¢„¦drƒÄl†>#Dh`V—æ‚»á=üNSÛòÝêÁÈúv¡óê|°k„ö;K½‡Ù|"£…¿Z­¹¥¿›Ý³ø_âXñGs\qqBí¥L,TÍnïÝT\ÁËÉ*~ÎÓþí’•éTmÌÇ÷£Âå·t:¶‚_ãsJÈsrOÑmWgÓ¬GWÏäÇR.Ø9°)„™™Üß S¡ÓmTq,ÉJyUèíYB~Õ¯é­N}œ ®ãp)E~e~ÿã#%q“Ì#%€(Æ΋YþVýîþBìZA¬^Íqgî`Ù¸Ì3žÛ»L"ü^Ö^b¤“B ž#ˆ‹â@¤äªOfTi‡á¯èkË'‰Áë;f]æÕÁ²~ó%÷xýòc&oVÅ·_¦3¾!fQW,¤P÷íhDmç©! ÂõÖÏ{ø™*Œ#?ª¬0!¶í4ÝSgL…‚žv&ê'I;úzfÞ÷·ûú>'ÈÏÎáÖ C)èÔ¶sí«ai.ösŽæþ¿ÍR™Ú3¶3ª|ÎEX=M¿ŠÌs;8«~žUlÄ{›á#DÙšË( *9¡bÉd0*V#D’,: ¬B«µäµw‡uÞ °° o™Btüï1P+ƒ©’‰ Cª•³þ<›ŸÞEB=îªELT·Å-ö{×W#?ѸœÙôéöä׶©{”ùì~M¨ÑW>NO/:_éŠæj67ö}Û¯ÐÒíƧø$Ï»»¼Ú+ªï»÷ÁB‡t#Ê›¬Ö&¼#D?<¾&uý?#?ƒ“5wMì¤F®Ãcn·Nº¥jsü9ÑoѪøpæ© ™aNšR2#DñððSç|Ùîà;¦€‡p¿A™Ãäê‹ÁBKzßu”úõïýŠ!]6´*v5óJN"¥ƒM~^ÑTÔ˜…DL†–{4"¿W–i2õ*f¨0x6Û‡'¶>=õd¯À|ºÑ0œ*ÇÍ×éŸÕX]}+VïÆç  s[ÊŸ‚U³Y\1MÓ ì⃮µ|¿gŸ”öQ®ÎDrÁD;²I}›Î xDÕ)'OäÅh­½¸™÷ñ ÷ºüængÊÆ^¦¦~ûž†~®xô{>†0äq8ú²8ª#u¢ºÛ ¨ŘÆÓ4æ*á!}®P#DïñâàLY­˜Ê ´t`aãØ-Çv+¿¿³ùynÇb¥* ì«THÖæ›ö!V<<±<¬M¿ÔÖèºÕ±5Z‰¥n:ž#?EþdÔL[ÂQE¨Ù†N&–p=™ ÅšˆÞ¾nq¥@á­¸&)lk¸Ý÷žîà<;Wr żïÐ¥WLÛ•ªÈÕ+p  lE<´9%0bõ‰$³8€'h^žÓ.þ¬lÕxÆã›kŒÇUˆ2qU`Ð]:”’T©$˜1´ŽRôæ{®¹'>ï¡áìy!ù«Ó¦om˜f,;ZL4ÁC#?½>-Öµ§ï°¥f­/ÒØCgc‡3«D탒Ÿlů3 Wõ­­bÄ!"âLj·xˆôç×g“O£0’(ÓD:¨`VN!¡YbTò¡5ßUE ¡E¯÷»b‹T›‡f@ Âlî Uoó;?“’%¡îq‘Ç»EdÞRÜ:X&æû­Gèôñ{µ¿²üñqçÚ+8bŒõ#-"ò3èj³ŸÆ³p"òæ+ö=}#?ä¼£"6ÒèÌï1óJì¥ÐG6;Õ&h—Âà·GQh—B ôž‡v88ø¥×’3UTeLï"PŒb=ñ2¥:§}Ê›ýaV2tâYA戜âÝ—äðu¹ª+ZÚ¾9öƒ#?—?B$R1N;RæÌ(#D«——¯GXõöb0öAŸ7wÒâBƒCN¥b‚7òkHä@ÄÈ™Æ,ÍÔ#?=8jŽÃùËÚéxïï#?výþí÷·(g)ÎSJ5ÍA6ã¿ð:æõ×å¼þž±ÉYqŽqúáš7_6™I•6E4ˆÙ¢Î«q‹É’âÛYžð³MG»Îˤ+¶mРõ£ùßnœYêG²º¥!ñ°ãÓŠvâGó66Êd¯2Eé?KTé¸tja”Œ×MCæ“FÆŒpFWT‘ƒ›ÔÏô/v|L„ËÙ›q&kFQÈ£î¨#?vQá éÓYÚ½¡D& E#DFÒ™Üì výå™#%ꜚÍJK5œ!³ç§1ˆÀªGŽ}¯eÙ7²ãC2ÍU¥\¬}5Îp>G,½E1[ív¾õJM} ñÝ‹›&Œ/F##á”ô0.#%úoY_ÌzKðx§ZUïð”|"karä*õþê8þg,Ž #ºi×Üðr©#?•²霨9DˆöM¯ôL6ÐiiEú“ʯËÝòŒäñ³ Ç_à¿™Æ+UHè߉†™â–óö4sô¹Zœ8¿Ü}^?•;¹‡¶bÇ2rÑÜfrBÆ3†fVŒ½}÷#Dºýöo¶¹ïÔ­2”?3É6öÖ»ÐëT3¿z_m­‡ùP÷ÌÃ!Á±gÕ½vÜi¨šoö78`LžL–ÂëËXqø{W¶»"Ïâ,PTæ|ÛUHbù‚ ‘m~¥dN*»Ù=¶¿­ŸéIä…t¬÷QIi?Ë[Ûç@wÍè¢k[ßÙg—Ý$=<·ä‡ÐÄӆ؎—æp‘š…Š¨åîg­ô Ëu¢ÚEˆùÇP]ýr`*l:Š6µ‘#D^Áºdµ„ŒC÷{Ú…Ê ¾?ä×I¥üê‘ܬLŠt¡ ª­v±Ó,ïrsjü›kÚÅÌÝdotƒAü#?œÝ»Z×gaÐÐK­b!RÊ©ú+“©§ç“Ôíâf/ª3°|QÍEКy¼ÃúÚ-YÊJÿpr´Œ®áM#? „pQUbFÏšê8†¬{~s;±ÀI Ä¡÷gö¿b]³7`=*¢ó½­Kã* #¥H|Ê؇I¬l+¨Å‚Ãð¿Ÿ}ìÏ(ŽÝalÓ“—§yÙF—ÏÇpò’\VÑoòÂפ~ø8s–{eÛu¹ÎÓ²±•#㕤Î<ÒRmóÆÎÿJk=¢ÝÝ7) K2ë¿Âð‰gÔÈÝ—Òvm†{CŸÆ©©{t¦Çâš{íYC˜¼ ?RPªúÜ6vÑ‘‡.g;ÓêM›ÃèS†ÐRa¤™mXê{œ:½šP̵úa#%KÍNJå­vÊØØQóewMŒ¾Ê«UBË°ýŽ¢à¦"鈡* #?Xà€j€VAC~>¸|bÓ‰‘>±Ê­öáígþÏn,s#?\žäXêu“éüÂ'£ZÙ0>}p–àи³olêó+|ž° ‰RC…ßj‹Œûkºœ:ýÒ´‹Ìä¡CsX¶Þ8ŠÏáÀ”Äëh.õF]2’ZË­;ÿˆçüæù·‹f\u׿|ÍÊ&ªLoùÙ¶dëå¼@[/4…–ꦋˆ(öÅb;Pk ±@!6ü" @y@ )¿ðë‚#„¶hÀyÂf Ùm’ñú*=\¶£^ŸáÓïƒû}xrŸ(´&AFA“ÏÝ‚© iž®ÁôAMh+6­[ôãÀLO±Ç:0Fª€ûD‡Y¸¤ëæ~Ñ]=?V„v§:ŠAä»#D)”;’ae°h(dkÛäõTñOdÃÕÓ ¬ A@$GmQlÝ®2ŽÍaŠ5ÏÞÿü^Ÿ‹ç_!ãã³Ôê;Tâ£Üuw¯6ù–ü˜ëû`›#%|V}îó#D—œ íDÔBT!â;‰ä@C¥$C0Ñ(#HÒPR(Ÿ\?,ÝÓòÂ#DUÁGó&x¬Àÿ=O©—–‡ý”v²Ã¥JÕT`–*YûçØþW!*´dé¹xçÛêy#%A j!H$¦?e§ø³ï¸ØF?9£Ýï5ŒÐσöq#Dý¤îuúªajy¦O6Ÿf壆TxG.sSMXÈL<#Dq„¯»dÿ/ø¨Pa.FðiµP@°Cêé넦©õŽØ}y(Ö#Dï*¹(ׇ8ýºûía¦%ùaø#bÅôÇ:’„vÇün‚ŠB„)¤±P£ÒÉÈ«h S&ŽG#—ÕáÎ[@„Ì@SHöÓ#¨ãh¬F­P¶²ÚR˜(¢#Q_Ü•4ümÔ#?Vƒi€¶4…gg1’ˆåË‘­ŒÚ”ܶŲšDi7Ï»Oä ˜×™t½*¥x¨ÖÂ×Ñ‘ÇÖÂì„Aüj ¤=ÃŽéA#?ÿ˹vj@qüY]Óøb'ç÷Û‹ð–Ÿ"Œ¨’L˜O,¹|ZøÜÊßXèHˆxAzÀ£ST¡ïxÔ–ºZEÖœŠF“åYmd<[C‰ŠbYÔ#D’‡LЖVº¾Ìç|Ñ®]Ǹ©ç.A;]˜‘ÐwdhzŸÃHÏ®îy<þ˜zOUTYqˆã’Œ6V÷íà£dÿ“ `lh°©L¹•#œXÿ¯5¤Bk#"ƒ2H$Š²vª/³9^w‰ #?ÂÎl¶C[ÿ¸¹›C++p×·làýT_wü2Ã-z6ÒŒzä]nŒ<Ðu˜†{3\ÚR<VK³ë,{çEZ7^”Óßà ýïsŠ™f@"I3 Þ~¿—³ú‘ñøu>—‹˜î£X»Ä;#% OÒ§íûÿAë9üѧŸ“£7RU“þZ±ŠHCØ5xfˆ©óªKè_ìIom2Œuü[2Uˆe“ç£`+.iJäÀhƒ¡”¬8æ]lš*Z-°A'ì}Cyºð›vW¸Ÿ‡â¾#%þÉ8œü§@é"+S“åf&F ‡ßï³o„¾pñ4©— “&ç齓C û™îÔñöbnô4“sXwiP,æ‚VÒö¼5äŽÛ>¿¢%pö¡¹üœ‚=´°×†b¿:tœÏe.ºò[Ô7ú ö-ƒùôcDÃoÑIzºyÇ@ˆ¹ä)R½°¿¶ÇQ="ê,õ¡„?/ÍlßÛÄßOƒSa™8jRii÷~=zpUM%î¾Ò=‡±Æ3Þèœ#Ïú=¸›×³á?l:@uæ,O_Ë4o~±ì±]@($)KÊÅØ|{½¬£yPBmÞîûc;#?9¿W‚f{•©9z¯W#%'HЭµ·>D (®a;ÀǶ’A1ãQ«›Pëø»d¹J¬‡Éx?_T%ç‡ P^rôϱR—˜ÍC@y°iTZ™ˆÕé^«ø‡‹pµ\¼Ô žLÀ–̓¹FTJ‰ÀJ1X¢¢™#D2èîê€ÐxÛ¨ïªÍ†·±àMìóžg+ºæØ«‰`Ak£Ç#%Tý"06<'ðÆPøù”1ôsµªÿQ!XCS餉„2ÊVÁ—Í)ðâ³Wºh´[®q«£™ºŠÀ#³'ŒÌ]Ú4\E„úK< êXOúëFZǘ"þþžïÄ~OJ}búÿM|¨È²/Ý›MÆ`‚±É"§ÇÒ?·Ò©¶V‰ñª™šÊ¢Î%]H­üZ¦ƒþz#?ûŽxçùµçéþðrâxðöôá¢í#%pÕ! ‘ƒíÁuòøÌoú¨òåÊä‡Vs‚@ýáèÅ#%éÛ·† ÐQ‹É»9_eÕÇ >pÇcŽ?7úýÐ=cùŸœDR—ÞÂèhüy놑¤ª)‘‚V¨HöfEqŸšo?¯ï¾Â¨r¥¤@2NWHZ¹Oáê÷‰+û>ÙyÌOºÐÒ}öHš™-,Cå(m·ËüßÍçèíÝ׬•¥’ŽŸœŽŠ%a£#?â#?ªÔ`Øš§'¬Nh´E 9h)ˆ¨XŽ¬k‡ž¯E”êë\/A9)¡·bÌ–{ÚPþÀjsŒÁs®ÙÙc¯ÊÄ°Æu¨–#D’‹.= ŠH-̺.Po‚¦¼äèÖ wwß-TŒºiXRí^¼f½ª3üZéµnDq¬sQ=‚ö‘½lsàC{âZÕÇi´_WÕb¢ñ—õи_;<£Ÿ #?ƒ(‰$Cp:}WÊWœ%Žç†úÅÓS{ÐtIöïÃ~›ÊŒŽ|óÃy)7ÎÎH `PlgR†¬ÕñÓË#ˆ¸3Ed–7D§úµÎà0tÔ=œåNØú~OótþfijMžþþîC^B®$64Ø79ùLâÁ¾@„4kD³z-¸õ«W#D¢Ø… #DŸºÜ<ó¡¨{Ò™Îë Øžöâ@Þ¨\0¥jŠR½@™’– XÍÎîÑ$Gy€Ð„q3Rm©| ¡î{PjhßD2î›Ï9ú B6¢¤´TëA6†ú#?9¢å‰µ¾OïcQ|fÅ¢#߬<{øH ˆeH¢HIäù>ûÞyçxãí„”U–@©$=dq£ïwÄÃÕÌšu ù½[H†pÕÞ¦™CÏÐÜ5øT¢å›ÑvŒHz›¸)€ãá;ЀëñU8!³Ñ@#þNñ8ÔM1KˆÔ¶ÿ)f¢iˆ‰Š‚–¼Ðv <{3hº{C¢.G#?®$¡–Ûæ֗ņo»ƒ:d±'£ŽÙ÷³ÂI½OÄ…¤cÙÊá|DÆ1³0*+'ÖÃlÁ* #?#?ïG\QFZ (ÑÛLlS!“[ÎÈPc©53zjgPbÁIa‰vÉ7™sOÒLÍ'–YnU°­–¤XBH3—Ыµ47IæߟÆ÷¾Ö윂ÒÕ­õš\1´'Ù£±UY˜#? ÏÜbXX”ˆmw&«Öµúu–„R z¥"ÂbŠ$X¢ÑÛ©V!–7t½fç+Ý–(±G:è8™É0v¬ÁiÞŠH²3cgÌô]%áOH1í9ÃöJG…†Ž­£"λ¸‰FÉYåEY@)2:†“iuÀˆ©½È5j¯QvÔaBdëvgj½“g6•„tu¤(‡½õñâx3î·£†óa¢ŠÜâ¢#?Rªá¨A1ƒ\Ú¦D&j;4!5i2èœñ«#DqË‘Æa”5JÞŽFŽ ˆ…À²‚Ø0"cÕ’½ANì»ë¬nÙ~<á_'.8Ҭƻ2¤rñ¢Î”/?)A®Qšƒ9'W_0å¥á•ˆ:è¼á% À\ëV :4ˆÕ`²¢FéÆŠbŒÿKÆ^š ¥2adï(ÎwR Ù_,§Ž¶€Î[±t"Ì^:™G1îõ!Ñæ×¼zoŒa}Â:gSNXÄ–Q”ÔI‡†„T-‚U,Uª¦*¢ˆ#–»Ã×9'W÷é“ ð±¡þôOãŽõ¶ŽM@Þaœ8èy˜h>ÊT0òtÊ´b•‡)…aÏ3z‚ˆgúÆÚ&ÕÕäˆ__J¹´­bÔpЃF}0ÿƒ¢Š…G#ˆö¼WYº-&áÒ± €g#%ÌM§ÇOÖg#%¾Ê… ¹ãû9A#=˜ ëÐKZ;'£éÔ5ݺæ:üÙ¿»’µæË­ÁC‹Ô£Ø#?¢ë^”£§#%ìÜøó A,ØÖöad?]V†84¯1ëD|µÐuµ²@C„T|µ‹:°¢§ÂV°¿?²1?)A"/8ÍW_“U¿€V³±>øI±ùØ_Ok'êíAÍ£ÆÕ?¯àLµj´†h?É{fƒYûV#DF+2~ˆ^h¬U¯Z§›ßߘª £ä¤qvm¾#D"„õíði”°åÏ×Ouëéjæíc:†\ÈÎ aKÞ"Õ‰0 ù袆|4=]9ÌK´À`uä&ÍH´e#R…š´Jƒœ ^š®Õü™ß¿“¤QH‡ô¥#D‡ØÜ´ÇËÔº3í>HNãƒþÓöý«OÆ ðß°;Ü£Uzi±ƒUèwTlé²A1€üSíWD #”Dcq#D”ʉKSu°¨ï\~juמ¦QDA =C't-ÎæôL$ƒÂ‹|Þ2Ô×ÇxYnÝ_GŒ>q0zôN:vŒqé-«|>Óïš8OMJËÆyî.gXFqxÅÒ™¥r+eéƱ»)ê~‘ÿ«uÝu [\ôœéÛ៓¤Ø ÷32AãòÏ8#?_Þ'—‰Íö• '›;Lˤ2d³¨Í"Ñ©PxdšÌÉø&Ùm¼¾õ=€qÕøÿ£˜¼BM-CÄè}‘L=¹\øæ¢îŸÂÁ#?Û’©Ô€˜(PF(›Ó,/«S¬aåÓäZÌA„% 5Q[½FuﻧÑ”â—ÿ†;ÝH¾¢ùôöΙªÓaœUv7ëÞ6/úoàGêJ_ªýW¦™tìã·†®—Æꎆ½Íp“D’„‚ÇhÚ¶ñ“RkÀàxF®3ÔÁ¥è¤'o5ŠàEâ˜Ýn[®ÁÒåU$„¶ü¨±u=%uH¢—GŒ¡Õƒhj.y)Ë{ç ”åœÆJ–УO’D¤ª2‡TÀ•IÌl‰ÉxöBŽ›aÑ`¨·ãYí×À‰‡é[¥Æ5l#D“´j *M»6d*•6¶½cÖŠ"·ˆIo7€Ì»Ñ·®$¬æ¼ÉÒÿ2#D²ƒéK¬ÖÜ[‚‰‰šÞîŽÅd%#?eQ<ʱoE‰´Ê#»U€>Õ¢ 6]×P'ŒÕ6|‘ 5÷k€}Ê\É—*Ž6`:vQlÒÿO6­ÙŒøÖø• ðŽ«3â5‚À}&{àñŒ¥u×_’¶—ÞçMxz9°ÇI£­l–F—2Ž:hÚ¨¦§„ïÕˆž³Z«égìþ™Wo7¨Gpþÿâó0îã•ÔR9û#%¢få̃¨R¤tlèQiŸK¹¡ oWDÄ‘KC' ÕcÚ²gÜjEëgU`¶Ú`k8úKˆ¤Cí7‰Æ¦˜> p(¨‡÷*÷]vù§é¤_ЙS#D.4#%ËhYMDk)™Æà(FÒÀ<}HÚZ®ñƒ €Ôõ-øÒ®ÿ`ç:ÞHäCÓ:8ˆ€}uê¢$E&Ïî¿Fà8c ʇa#%igUô$ËÃèžsSð£òl¹éñ?{8ø+&ø‘ÓÈFBäó?‰ ýJÓ°zo]ÉTå}+¬ŒW\ùç#%6ÅSœ¤`–, ¤‹@Â`ÚGß5‹¿BÍÝÎ+áZŽ˜®oÏÆ™“Ú†‰ÕÕF<衋ͧQ;#N/Æ4‰á8ÅÁŠÍÌ(ñQƒ³Úævf_¾ÜËF3RØÎÒ7Ì™#?}øŽ¾šç>_O±®;㼧V/uâGZµî¿#3“õEÃáwß ¾hÖ\¤Ìâ8ý]ˆ¦êaãê½ÂxüË!í÷C‡Ñ)iÙtÏòs„½±S{–ù|Ý ¦pñÔ7£@äÁ½^EÏ$/¿mì[s!¯)?gØõ8{t=EÕ·µ}v^=a4®qÕhˆ±˜¨v¦­p ¡{‰øfú}úp<šA™æȱý¾Ï!#‚E#3\roœ‡ºë‡^¡€`)gjØâ‚Äߌ)Ö6¶IZqO?‹eÑI¨º*v{£šÔkÔQ뺌SÃÕÙ߀ï´mDR–ÁŠ0O!åäçRi.z»†Ê#%òŒ†#%½©"H% $™=·¢B’§Øa˜ø›T¯ÏRËd†â&íh„–K#DxÔJƒŒ! Á«(Û*$ ^EÓ£E©ƒS&iä9µºz‡G»r­×ߎ¢'S$zü¦”£‹2È=þب§ÁFwXí¯¸ShØ#?Û$0¶¶ˆÞÂèL5þ,&Ü]X×Y•1Ù¾‰o#?Œo ‹:‹3­øˆìvn̶ƒ“§`îla™xvkl,ƒz¤Š#DX@ÔÖ°NŒUÅ(TóóÀP`&g64p„l=l Ä)ÖÜEBZo¸Y…ûQt¨é¹Šzé‹š¸†¿Uññ8Î.4%ÔXðç„ö ÆéN3$2çQ¸§.hë=uUèV$W%E šîŸ¤#3¨ì`ñ£b>Œ…jT,T0–«ô#%<Ïx¶î|Dˆys.[Þ3#?tïë¿0_­¹…Ó– ]ˆ²!#š³pÛQ,!Eá©h‰©t‰Sb˪Ê{ú£°=Ü–ð-Œ`eåOqŒ,Q E˜AO¼]Ù: ðÀw˜iÖ¸ç Rå0KÞÇ/gK:ºT#DÚ:Ymoë²i]U“4fIÂOz8°Þ -m#?b =ðP5j¯ td:Ú/R!$èIÍÃÉi'NcGa$d›o~HhÜâ‘›Kïq±ŸŒ™=XÈ,0ÈÚX.@¸„62_tºŸ——Né5„[rÛÖ˜X†«"<µÂÔm¶vÛ9 M”E=º#?Þõ¹ð£C2³ö))nýøÎ&+´¼2bÞg¶X¯ƒñˆƒO¿¥AXðýK¹ÇLc*ß²úßêÔØЇÏ‰^C­Cköß¡ßI°D½N1 “+¤`½bŠð² ýØõ…Ïó$¾øŽ{ýª÷âŠ"jé¯XÀ¿v÷#SÙ¸“äw(ÉêZõÀÜ|&AÕ¾p‹âÌîÂHM¼Í°‰My(ÛzÌð9Î˨əÅê‹rö2¤Ç Ü\½#?ÜÎÐ1òø5^MÛD`q¯f¹µü”jž£º0FQÍ×SàB?ºÌ6Çíg;0î»|Y8__Ãû9äÆj!À‹#?ÒñP«ª.®çøñE/M–Ù-‹f&%æS@પª –BÀÖô¾÷¬Ü)ù?½[r#?ßÝr2¯y/ègëé€ë,õ`ºp4£`Š3 ¡SŒÎ‚3Ü9_K¹š!z„6\TUUU¨Ñ§Ínª@’Õ­£~öÜps|›‘fQC‹-«lÙ¢±jZÓ¼qG¡tŸÇaV™,'G™ŠP»ˆ`®•ShÊWö.ʈõ¹/Wï0Ð?Quµw—®½J§³t¯1/, õ4>ŒV#?:¬LÌÈbjå:ã‘(É¥Ò̼“O¹m¿ž§~°s½ÝÐò÷åà9ŸKÄ#´sù>Sš6#û”®û`°@‹t‡X6§‡n;4“$ÆëQ¾ÜŽ¼tµÒ«ŽyÖUë&-o]*#D³FqU¬JªÞë«9½^øWMqÂÉSháák»Bâo‡Ó g)\§BÎ#˜s5¹ŸR&9·V±#?[58U,䦔fRˆÂâS¥…×;8‘[˜· ªF¡Ç‰âm6%èáæ°G DÞ²f¦ÖjœÇsòs±ïNq’ÜTTøÕ5òh!²º¨S,êÜt±¨™¯AΡ𕹭籧P>k0®w ÷æ ³Ý·¿µ q[ÅƧ½³¿ùG¤ÇEÅùI*#´±ßÖ^¯Ñü’vàßéZŸ’׶ýðk%1˜s}cze/¾;`ÎÜá+ª7ÿ&˜ð§##%ôŽY£•Û8Ì)r<´s—|R¤œLÈG—†_NøÐؘÒ#?àу‡$ÝC&¥oE!™Ý–|åëÖ_æn+lÒµðv í+W@®‹Ü?²þNV dd«qÉ‚Æ83_©o"æÂA%4•‚ŒÚÐ+ƒBË0·YÏ»£§ztÔ¾7‚ž^.³kƒ-ü£hã×\QàÎ÷„®½xœÅáE¨#%Ë1†}ÖYI +pÀX[%‘ dé&Q…?ƒÂ12B èáܨ7^£WO׶äÓWž`é-×\øŒ'M‚ï¶J§sù}3eÙÓºQk›y¾=ã…ÂñÒ{Z§jnqýŠx&3!ÇÑœ"û·r^˜¬ë5è÷_.´ùd¿ èêv@x2˜Å¦<Ý ‘ý\vëå®Qëì¿[`·ýcSZµ’-#%K3¿ußúá­ 6ÏŸ.xxý"R4ýF£tD4h ù~Þ‘íê—͹¡ñ#D‹N÷ê~ß$ue)µnH—%i… Õ#´·ä^£-uÓ°kÆËøbá,ö(µÁõ…MŸ’@fW>¦ùZ+jŽÁÉÜŒöu‹tâz{AáÆZÀÀE·yû#²54êÚœ¦-Þ:pœ[°»2u(±‡Ò1ðÆ_Ç}À™‰¥˜úõA²ù­wä¶8Û².®:n•®¾?“×—!pòäEJ-Ë|z…žIw뵑'ô|¿~rQižþ¥V#Dë®#%ÝYì{Sn`FË3AŽ@¤\QD"‘`îäB_Ľ[Ífƒ«$Ÿ´ß¾ŠhÈõúÄÁT倨ª=ø̓rgJ—ôôþ^[?ð~×÷þ5»4ÏçÕˬ›ëFCØzØ_¤Á¯™ðÊ{¹i5=ÞƒsiØŒüÔo?_Ý_*bq’/GÇg ÉhÌd"G:„)èê>.üýDÏ[KŠË©©u¦XÇuéê[&{?gwolXP±·|®dm6ÞVÞ²1™m”æ4SNÉ#?¦G†‡”­8X8KjÂ2˜HHÇ#?U­35qšÖªÁÓV u.;EcéË÷¿îËø<µÊ]«…K¸’GD¦<”`)mê*¾>K6kí3¯ý!#”6™Á¯å7KÝßýñd H…ÀçGx¼ðñZ8[ZÝØaL rqa<¡cêµiU‹¢¤‹× 5W6ÖÒ=ËMwœï«Äg>$•§]pƒ3xT:ηïý­·Š£I.@Ž:-Ë"$ÀCx–ã—Ø¿‘uÂPvˆÂ7ÜñŠŸNˆ!ÇfÇîÌRÅßA¯dMŠHRP˜ gÃìS2@ÞS³y$Õ¸;]ûZ.äÞæúÅ]t{\à£^¥Äk‰Þ˜^¨å¥È8‡D Y„¾e‘DÚd"®Q—ãd`A×Hß$ìh Ѓ(Í‘Ê5MÑ-Pû‚ÌëŒeÿ Ü1B0Ú,HõË(Ðþ*a1bi·™”q)ÆÀ©e 3ÇÀêÆÊV¢»% E‚B’ëèËQÙÚvÑy^ ‡PæÄú‚ðPc%é ÆN :}8O‰Ø>l#³pæ*–ðFr©WŒÃ¤ÇÖWÌ…8ŸXÕlef~UOQ­çû0ÄmžcÚƒGõ–Gß¿çLݺr„.ÉS%ÑÏ3¼.HkQf—o„!Nw;¯¿¾ñ4ÒðD„±É3p ”N¹+³Yº‘°]&Þëdm¸B@¸WaÎ,è’ 'YSBì¦&„?0×9,ñQˆ¦2H¨B,»Ó¶ÉáŽTš,bª£`LW¯j»µ#%¸¡ñcL¿‰˜u5§ìËÝ@úY}æÎI1m>VàaasA¾#Df·Ó9 sOk<”u9Vwï]^S€¼F¦Ëh¡åãh t°õþO5Òl”m¿Fæ7â1zN—?c+Íú,¶œoq'¿aƤÑ*Fë©BI²ôãKö„”M¦TUÙUÙºÎ|ï ÕAûÖ{ ¥ÇÅvBòØõe ª‚=ô…etžnÎëª(©,,#vÁzÛSâ¸(,š™0Pà‹À¨Ü zùûè12pMãªÌ‹€cÄše9ñy†Y‰‹Ø?C5ÛÚw0±?¸òÍr¢`#D~Ãê•Ä;%Ó·ÿŽ‹ŒaÚ¥®Ù‹@!#%Q=é’E'>`ÎïÀøbÏËövm¦tÕq{°ÄR}Dã5´ÁÕBQšn)5Ç=-dÏzU8ìÓøèþW<ÿw›ž]Sáê½â­.—ª.9€Ü“žû4š¦Ã0&@ :Q6lÖ-"®–TÔ–f žL33±QH% )|D%<ÝbÉF^ø E´ÊÏ7 •-wÔøx°Zs_qiUâ˜¨Ä £S1'h†0çm»ž‹xèX_xbŠŽ@d¼#?‡4>¹¯Fü4÷…JM;;jÏ(“o¶gXA3Û‚Ó†Á§ö³ óˆ@0²¿5ø£K¦]Ý#%–s–æ+™¾~Q€‚¹*×Äõ×(Z¤ìkhvÛ*ÖõÛ UH;®Çón¤²Mx#?œûj™„†ƒ€p,ÒZóºÚÔ¨ÉfæZ£¹„˜3,âÁŒÿ€x0ÞÊÛ ØRÂB|/½Âرýe$TC ŠÍVõEøû#]°Ç ›i:@0Ã!~Ôdªª²)…çÙÞ÷Ø“a'¿·ªrPâìž}²ZGÎ5 9V1#%iê°Ìaw\(ˆ,Q"#DMn`zýŽÛ ž4šì€Ø>€þ•ëë8#Dñ£iäVŽhvBÄ€}¦Æ[þ#DÕîaÏ;7ÎVž5×#í›v:Þ¶I f”’…MG‹FÇ£†!¼pPŒHY8´5lÂCgÁb¢þYý?,!,ìÈËÏ‹wJïï7GP†»BçÁ`û"ÛßßE"ÊÕ6è–ÈQ±dQÅ·±ðãD35><ÏãeÀ’·òPy›Áï©ÕÌ3]†ßÕì€IºŠ#?ƒ¡µõ«Åb¸ˆ&±ŒV¢q\ÔûÆØ>YÖÃK¼ús$.™ •FÙlÕ…®„ؘL BÅFóX¦°¦1ٷ掲ñ€pT· ¥r‘õAŸŠª²ÛÊ®kß0P’ë·Ïë2#DóÎþ[¦5á><Á½¨\¤¡7¿\¸ÊŸà—” ½¿¢ùW=€™«Jð©¬@x‡-¿Õ ĸVÝ™‡jv NÇë—žxf!6Ž¬2Œhíǃy1?G3И¤¢b×aè€d™ÇÓP6µ¢"ÓM$8»©dôÂä.c( ­¼ì욢«ù¹ÿ‰¿-‰$×+gÌÙvF”(HB*=«{nÙd$×ñ Z¨1·&"Íç#D6ë¹#?TªŒqØ!Ñ¢˜­ò7rÊ—žZ¥Ý˜f8ÅuÀX÷tÆ•8ÑE ¹n²ÍÂVš¬••Òq2ò#?Ñ‘#?©bH¬W%¸ ×ó®SœôxLŽ ;²QjAFŠ»-kãeõ[@œWd _6[Âäc%…Š»Ä¾ä7ØŠ\I‹‹¶çv×#Di–#?!(üN¼+sŠšQ–º•á«¹ŒY]j±¾vÔîjô‡­ù†NÁ:{ž`ZN™Ù¸‡+l‚õ]|E¬›\ð9‚K&ײöͬ®ú¶¨†¾q:Ï¢ÓsVSY)(¸Ó`Ü&ûÕv/ yT\Ò'jõÖÝ‘„•H¸ÙôÙ,óµ+t­žs¥»bìy(i¸ç¥ÛEÑ!Ž{é[,aKñŽ¶NÉ°»©ì8#D(c‹o´Zw[ïÏ}XZf ù_œó¦:—¾ÞuítC÷VŠü~Xô+´‡….6È-,5vìOÏ¿Z­fýw ^ûiE–ÚVOéjÉ!ŠsÊÁ!/K gn‡Û{/ù¼bÀqáœî>NÛ¼¹«wº¹"/Ðs‡·Æ'8IíQï j"î'zö_;)9ÉÊ ÍnÛ’8-–Zýæ8Ã'ipX –ìž6b/×f˜¢ ¯Ò#D¨ÐBÌÙ5 6†ÊŠi¥Æg9`$%|2¬×ÎÕËñ׶yç+çÈ7É(ž8æ#%ìÇ{Mfäª-¹OéøqÔ˜ÏÝòiãÙóÆ3ìáåJ:jëXif/Øpýu•šR#%ã{ýrõž-¤$÷IÆ]Kzu§Wª9³eø=9•œ,yï4­Å§“¬Üz#?H¬ÄÖÇføŠô"HÅóŅŶTE#DåÇS†¹úÎØwû•˜BÞÞxtA‚À@2„û#KˆC±Tc¾ëÎõLëÓÕßוýXïêWu§S™µ’øjRà¸,A-ª‚„“Ü=uP§ïÀð$É‹"½S­8Òj w¬'©“£wRØ õ\‹w—Ñ)7ËFE?Æì·5²­vÁîÁo£é™‚ÎeOPÞÜÚ›¦œÂáØø®Q#?-Ñè-{4†#%ÅJÂè–x±·Tß©™“‹t§›ÍÎ,àû™”c9§Ó(uÁ®|Õ—Ó±e¾ªì&}¬¥p®ÏØÔÔMH9Ñn±¿XÕÓuTæf½µDݬ®1ƒ9á5ŽP‰•+9.wJAJÖ¥ô˜œ¹O´ü³;JíbMÀ©ã¯Kx¾ç²3CžØNÓçÓÖíŸ8ó'B¶m‚SÇÑ“˜Ï]ßrD“Ò{?•ß#?h0ƒ\òzxîÄl>rɘÍüñ}íú®ª)ìz3Êj‰±£ ¼ ²ùFÅ…Œ´@Õ݈¤ Œ'J£!h2#DM²täýÿcÌô:mß;àÃ#?D V)†Ã‰U#DDG¡¡G]VFàߥ-£²!ŒùãÎcY}χ÷O¹á¶ŸN7¸Ä².Å®¸ª=Ü@m3äeq]Jf´êóÎ9Œ[µÃp]É<Ç XÞãÝ9ÜY§(Û®nV¬€ØÈ2ű”F`È5ïü¯£Ü¼ç82™7q ÃSóc~/ šÈÂ|+•p(Ä ëÆæÚT8Aõ§…ЀtÙþ°±/è}ß±ÿ‡ß6{ ùGfâ +æCs˃_eì5UçÌ÷ ¦¡âºÏûÛ6½Ã,*®BÚ¬W£” &%˜a¼Õ çæiÐ[Áª9„L5áB£VߊÎJ¹ëÖ¾8Ç/¤ÒÎv`®“¡2 ’ -Ì>˜í«ãNl1p(v½)Ïe$°ükáf–hxiŽœq>^fŽc…… ˆ¤‚@J>@o9rq½#?ÅÔwšÚ¶'¯ç¦Í2õ â<éY^?[âEˆ¬ Ô¸k™ ª3é>»Š'xo¥¯<œ7½ãÍaL‘¯Õà‹=Œ³¾h®=%"ÿŽ;ÌŠž>sÖ¯-I8û—þ‹cÉU"d!˜Hþb=½¯HçÍôOVüßvý4Å/¦Jƒ@6YNsnvXÜ€€À«¤:»S)°¼xº¶ƒ%¼Ž¤eœÕbÝL&âøcõîÊú‚LŽ60­ìú¿H-ؘX3Jý‘4.+ôQ4&æÁ¸ˆÃ´¯LŸ#Dbgþ£ãk1’ú~q#D$ dÿHúZ<çK&&_Væ¹£U¥ÊâÍ@{HãÆ–nëúÑí³Ã¯?Lb€µøûx!ôøž'ƬՓyŽ0£ôö;N7«®ˆAÌŒ#?ÏQ%b…”ZË­âëzÚœ-’ŒìÆá]‹1ˆÌ—*©AùoxX¢ˆqž!›,=|Ñç\J©î5Ø£ôGÌ „/ÂÝÔ€lfº•¨•‰Ò'Ù¨*ZsÃEêZÞâªá¢£rìƒFî›g´QÔ#D[œQ[6‚›/Â8sc\:cj'\T#¯3ìO3ÅzÈ{ΞÇÈÍ¢>Ðrx瓃vÜu•¹ùå‡78ÛKt‘Ù5ØÑ J ]ÈkÃÂÞupÍWÒ¢ë(üõw6Ì]¯(‡)‘ŸH]±NÔuž¢º(Šk±ØO>üرMbH4.{#DÝüÖ4/PÐsâ½9¹A?¹ÚR\aÖõîKH™#DgïœÇ¥§ø^Ôw>·~Ü;õÖS’Ä1C’‰Ch*Ð=Êè:©ÀdiZ0¾V9;`‹-ª®·Éõ(í¹Z¬š­!ȱùwñ»aL«ŠQÒÁrÄ…@äXwè(§!‘m)Q`¬µÌ¢©š…{gžB/²AªE†Õ+äSZR"­xä¡tQÐIN„Ï=$—v6!ªŠpëî˜3.Ͻà/ÒÈP°¸2v=É„ré‡ £ÉÈäj.tõSÝ–…BQÑìYÖ¾×+8cœ‘=ß­þšµ…n7Žˆ‰¾H3ÁËÏèÔÎy…óHB[šˆOö”Þf&´ü)±8åñüÕ¬æ>?îÖ¬gõrO,[+©(I6Í‹ιsBû 3#ª‹USVuÓÁ†½“%÷Ï¢<¡©äv‰p0Þá¡xã(Û±G>½öºDŽÄ€¸[Ò!€Æ¨ÙI¬ ã3’ïq„pžq0ÞlðÞ«¬¨¦=R£öYMˆ‡ƒÏ…ÍFË~>uÊ%~“@—"¶÷HsRp*âbq"¦è 5(ähJÒêÊΣ”z×v´Oëž:’_T³÷çtÖqò‰×xeUÞ~ótß&ùˆq3 BñËÃiÊ©]éÎYÍÇõ(犓'lÛ.ËéÃU˜Ðìùüh=P/‹åjiA&—ÝÉ#?Êp³÷@tNœryv®Ãx½G“FÍoBˆP9TGǃ#DB­«ŽXJ¾ºšúÉYaüi¿Y­¤Ûw³(y·8l™ÌÃ0>ü|÷øw v#DÎþž?ÔxhOI#Dúc£ ?ŬyUÒéP$hƒ}¹íu6€x\ǧÝ3.P•ï¨¢¾Ý"kM Nö™Õ;‰*ê1Ž§§ÕZcHqHîRhNêõ“k6š¹ü”“N¦P#:Ìà=ž,#?RŠŽí‚Ž¶¾Ù6îçåÎb¯‹Ç9§G¤~'ûSsŠ—󸤊¨¡ÜLés–›ÑUÆBƒ½V/3áÃøü³†Àc­Eî…’KŸ×ĘîŠ=×ÒÏ$‰ŽÔкG·¯CøÁ‹Ó¿ö?ˆxs-Œ)º3_ìYglìR50„j ²Ké›HÄà†V#%5Oä ûݽöZ n1scÞQ¶Îñ«ú<³_‚Œ´=8mº’¸ë @mx|Ñž1ÇF†·V½”@ØzÊ`ö+@DþÌ–ÛåD.;©{ÊØÀ‚æY%ºxçðêÿB£Œ?UÉö(pöÎíäqëIéëñ™ý:k©–ûyë ª¾¡pŠO¹û©.Êá“#?—÷Ffƒñã–˜MË(PQQDÚª»Ç8¶嚘(ªºcIEÊ”1B™) ¤W?ï«ñÒê‰çÌ÷ü9q惩·ú*‘ ñáÔED=5þÓ"r¥°Hýûê=‘œ¿;}mé ÿâ%…¸ïOe‰d±žxýkø'€˜ žr£&³ƒ<דŠ—À¤Ãˆ „ù_ÂR«N›.Â÷h.¼¨/É%ºY^2sÛÖ²&ÚRÒ~E´Fꩵ^‚Èe Ù/ÅuóCe^Á^Ñl(9­VÍ'™”éVk²+‡9ð¼|qבºt‡:æ„Pl)€›ò’c(–LE: X¯ÌÀw冴6‡ÜÎoû>û¶üïšpç®Ç«äHBhøדX²LŒ—á¾³‰ä†—¯>ï¦.zÏKÉòs*¾5ö)*4 ïå™^ŽŠŠAj8²'=Ÿ·táµî8"Û¸Ðòʺ %!#%à;C³ƒO>(†ÁµL§™‚Ë¥i²"DÒŠEŸF)–”¡ŒSuÓœyìéÚ×Vù(ÊùŽ™–#D·k#?äƒ ²šdoi¥#?ì7jD¤¡)w•±Ûg(YŒ±Ò€ÏB0ÚeIÃ`ˆìøË[´éŸ·#%¦ø6·¤6ÛÆ+k¬ªi†‘¢«‘`Š£XÉP†!ŽËî݃IIíÂ}a3BF«ÓpÕ–6ÏV.™\F4@Ülr´B#?&E(³„ýßñðn5"=Ý·`ŸtìÝ3g;ããñ+üÎI øÿ›R§áȺUµ9æïó¡îý#?Çá6llb5÷Ÿ:.q¡~#DºÉŸáDŠ´·q òÛÇ"<#?H‹ÁUXZµœ–w¿—5žrΡ\4­žrŒµp—¤åÄ÷™ˆú9Øûþö¾Ù6’bŒÚàæÄ>ö4sØÉäï³ÛOøz^º£läcãf/ψ–[ Y£ ‹Wm“"u]yÀV˜•·³% Å¤Q‰±ÈKÒ¯ÝÑS®ë¶Ì@  .{Øè¤VtxaÏfN±(4úh–EKryÕ1µšµÆ6Æý8!™9vîdÕ¸ÀbhÆ Œ.ÓÝ„Ç¥é-9´v=#hm¤Ó¬.\î{St¨Éî!;†“8;ƒÃ Vȉ¶m f]À7Ñ9íá»68À[Ã$ƒ¸aFPÈ0 ˜‹ð"cÕ*em«Jm`RÆ+y¼í ÄŽÊ)³dç;9»0¼DÃl)1«vô‚¼tý³¡F:8bï:OkB¹²­w¬/ï]KÂ#?/nÙç<ê<¹à>˜Á·"b3¢Páë9‡f¡µI’5A’Ö_zYc °ñÝ#?6·Ò»(V"ŽäÆsvR[{/lqt¬mÉ8äx<Ž‡)«c1Q#%à#gí<Í€¡Í¢õÔŸzõ ÷S8‚Øô¶˜Q„¨ó–h¡6cˆKÊ&n®šÛšL–j#%mÑJј®ÅÆ$1ÎCY”¦jLŽŠ©²ók) «JrñÜ´vÅ3¼JÆpí*JúõÌs>„#%Ò]wV^Îñ•·U|*®íh'ÑMIñìñ¡²˜rrG…P9/¹7û´Ì‚ä­ÀÀª2²rmJŸÆHø”#Dø­ÿÅS?žlÊ°€ºZj‡.µ´I¢Qi˜ˆæoŒl:2Âõ“2GáEüdýJ«õs¬¦±Bä¶æùgÀjw¤eC²±öì–ÏðÙè…ŒŠ‰ÛØqçˆuaƒF®‘=y3˜¦b*Ž;ñlõýzYhvîìd‚Ü£} ýºŸŽÎâä×Ð- íÖÖ¿Ï]Š#D¹ñæ7˜Ö͘Œ-€ž à±|ƒ#%̼Ö|:¶ÈDEXÂ;¿>x¸‡„HP½¨oö1¼3Ü8Žx& b Ú‹¡|CóÏœ Ãl(·_pÂ|Ðè#ÛCÃ7õçÙGÑ“(ºåÖq çaÓ¥óÁXŒ`Ä!DºœY|÷Ä`ª/$Ô­VoïaJ¢rŠ ¾È:ÁñÝ(aoþ7¨îºè8Èå›#D’I0§Mý»aßuW€¨GÜé0„…G@v™ƒ'[÷><ᯟœh¶óUÊDuÌ vÊ4#t)OÒÜ#Dc×h€ðÎünU´ß=‡ÉT“-pçÍtú”NT1¬^‹B1…K`ï½û±éâ×ô QFhpäQL"ˆo:’ÿQö¥(X Û~«¤[~Å»Àý\VÔß5º¶è¶”è2±ÿ.ºü넽?"8áe:ÇD …˜[6QÍRýܯ¦6s¾q¾}5;Y#t_œKÛ³Z‘3$8t‚^U®SqÓô`¾ãžZø´¥=xµNÆÏO_H2眯uÍ®’=#T\fÊ#D\‡òq°qZœW¯hêåKŽá¥âáW˜l <ñHýÙ‰RÜ' (Æ'×E=ùÓ@g¿ü›öãˆÔZYŸ!Æ_ª”¡–ðÍÂè|­ô Ûg¦zh²¹m)Û³®^øÇ¿êþü°ø?Vt³>x¢a“²v„È¥aUAý—ƒ­=;’.õF6Jú1¶ÐÓov%÷]i‚è€òíE/J³±O3È¥šA«ïø¡€iÉZV<{{K#?*ãB"Á`‚“rëôô¬r®5ÆofNÄÈÅY¸b¡l–gF()`î#%Ôs–|¾Âoi¿ ÃåÈÍ‹ˆÙ'VÀ¤cP,‚d¡”keЈÄüG‘‹‹‹œú ÷'Ý b9G’i ^ Py%)¯ë Õ0Ó¿ñ÷ÿv¼¤¡èëÏ!—¡ªu~æ;šÊÓM¤˜SÃã9z2!oúsÔ+¸ö*›'%ü!ãõ<0Uü}¯ZGÐÚ5ÎXwe#?fÊŒ#clc” õœSíÝ#%þ/’_•†A†Áƒ{–n+ T`#3~òîJƒX_#?1)ÐÌ'º b2ÙçUË+Å2Ç€5¼YJÈ "žm:›W'Ò’®Š†mÑ8ÎÒ=?›ªvk7¼yÃ)ô—É)h>‘¥-‚Û xÅlsE#?ÅyãIk{.qG-oÈÌÄ"µ%D40댋ll æ°r›*f¶GÊ(͆#D–ÌW»jãg­^î±O‘fpÖ bâ,2“{MŠNÜsŒd‹h÷[fnbŽÝûèýwÁÊWÁÑøONS¨P_ÑK|,®èÜ¿…±Ã&>¡‡@vOß›‘ÎüGß׶üîôŸæv⇡4¤N;•P«o~*çƒO îwæÌ›o“øYâOÛÚ`eèzhƒ-¸[RÈ@"b=͵F«Ž>Òy39¿n»4óRófv­ÓÜÑ4¬Y«ÉÉ–µK`æ³Î¡«–"ŠUF Š3­9 Ú1>,çsLM£cHHHkJÑÝk›2÷š²¥˜Ù bÌé«Iò’%p+XÂW*Æÿ±7F¬Åñ_¡:Ùˆæy—9§BÉÁ3¡ªÑ{‘eÖ"&SÂ(}E!SÚÞbf¶ï¦êœÚ#Da†#j©7+ Õì?¿—\WÕP½±ÑÛç{…‘®ËOðŠ_ZÜF»”×(:Dg"TGTaIöŠ;¼é{uà‚©`Æ^4‡íËDõDMb¡ŠÐ¥úý—–LÒ£Ô¹4U#%¿4œJ}ì#?ó“RÃß*`½~½ÇÅ…÷ãüw!]¸ÇNÿš5‰iÄá¡ûý)Ìžñù+³‹·ƒï'¬aé¢S=–¿GåMØýÏP]¾æ$r­ûû»Tº>¸‚züžÕiý'Á0ዽ£§  éý0­Êlߦ?#?¸‰væ17€FË°hº¢ñfƒ#?_íLmé_õž$_²ü]o¼#¥`5y#¨´ŽÚjqsÝWŽ{(Á $7fÃ$‚€ZÙÒæ±”a2P’A,ÌÖf’#DãsÝÙÞ{Ohb?9€ ñY)qôz½mëˆ]B[].(¹+õý ’yÀ€ä{bk8ðýï8õyÍ2ùïĘ´û˜e…|x)ôÇd¿[(Û.Œù½¿{m¿?Ö“HŽ¯îؘôul âôÁÌ=û_ª xTqÕèéxï²êuêH¥^ÚüÀƒëÝ1Ä#DaÖÃÃú62t¼¬!‚-Ÿ<#%¨Ú©3!°e–ÄäÉ‘ö‘†Iû…•º#%†DÁáÊüqu&#?#-^/¿”¢z;‘¦z®³±ìùGÝ=µ÷Ýs¸àGžÀa³`ÑàGiÞ•â›f†ÕLÐÍÑKY&@ôuÀ0Ô$SkÌIæ÷VýígT[§¿UQÇy[~ÍýIú%ÝW¬#%ÛÊ QQ ÊŒÌ¹‰|L³ß77<õ.9ˆ”ÑúŒ¿â¦#9û9þ†½&ªmV]©(Ô+)è#?¢‰GAÄþ Ê~ ÉtrOŽÇ¬ÒöãÔØ»µi3Ý¢%ÜÉ\ÛZߊzVˆ¨>-/'5-þLŒ­Ý|ùÞT-#Dhª#%S²N@£S5ðWl#D(‚Éâ,'ê/ÄÎÙÚiíÖ–ÎØÈ÷Ä*ʽU„Ñ*J+›ÞUP…¸D](”‘ØZ¥žzðq³ªÚµsœD%,³»ï5ŧüd>uÔÅQžˆì²ÛrF 9ƒP句ö„þa¹;óÖzÓf-Ûú0RF37µŒO%9Léwv?wFÊ®}'UïÆ°…þž)4žä‡_æ÷«Ç£ÿßðë.3×èèf¢ ÷9.?Žn;\©•¢ø\mÔ/ò‘!£É•k·*¡„-ÍBÒ#DÓmh1I–G(Hö0Ú5@FŠ-’“|ñÏ)d†Q„§Ïž?£Ò)³úb{)Lwð?RsêAìYÎè²õÆÀ6²e< ¹'ê{DpæçĆïq¦o= ”ÛÇСo8é×#?l÷³½G.íFö¢[Ö¹ÙFÕ©S²pÒRrÓˆû’Nd+ î…€fŒSž>×(Ÿ“„ü(EÖs,ˆóïúÏ>Ÿwn×ÛquôM›·ã¬öŠ¹ã³¦ÚÊWêvÓ#?—‹Ê#?Ò1·#?°ØŠ’höŠ:üŽÝæþü%´‡áêÄ&ñæ=jøm,M0e¬Bk#?°áZάىæÓë•Dip8bCeb9ˆÊFN Q•~ž»r]*l[˜Y„_úcÙ²›…úãä@æ=>²Œ(ûMü¼×#÷/Óâ‡,FžcUgD9ªöz¼ìàwV5æõ»íî–C#ÅÜé9ìYã®:ŒÁ£¶;Ó•2÷‡PÉs#·^ “îØY?MŒ#?–‰­¢#D:QÿcYõ+€8VíbBbëï‹@¨Šªªž¶ê`ä놕eX ˆ%ŠÝ;tìºu†8ðÇ®sà*l_#D¢`@®<95ïrüó‹Gò™àn[ä-ŽÀCqN‚aTÃ=AÅ#%úòu^}ÃL¨ƒ¬Šžb` I6,˜aúcÛìÂ6Q, sƒIß”`2dîa[Cš«|9Áá“êÅz½{^1Ëc×÷h§bvô­þrö6Îä…&ô”r ½øæµïMÖV.ÍÖGŒ§gM·Êo-J/× ½è`Ç^ù&w*çCÁ,†²*r UAˆP-)“…0á-:ÁÕHÒŠX„Ncp%]Î陼äÏÆ1ÃññmÝÝÛÌêŽÌþOèì|ªë®Nþ&-¸æ¼YôéîHÕV¼3÷xÞ—LLRübÚkñùyF‰þVÛ|ì 5@b’Ù'–xâ*ø±*¤IQ¬^¡yx±#?ü>:ÒB Ì?Ö|® (x'<˜q0ųÂÊ-I¨_k¥¬ðÈZœuÞ/¼‚,`»vdÚÒ¬¹a<(¢üô;µ…Ô#?.ßD‡Z¡dXìå£ÛÆ×Í»U÷›ìÆpØÑDI‚5iêZXú¶szðñ IP%À²BÌÖõù¾‰ÝÙAczy6*X>áô_׶»žè:Š¨ÁŠôxròƺl‚?ºKÓ¯[Pm™†6Õe¶&„C ÒKI>2ÐÐA‚žØ“—~sÖwá®ÌZFš–[;#×®‹ù¿ƒÂüÜ_Lò“ÓÓ@ÊW±’f`IѽÖÍœd4³*؆ÿ;c”ÝMó†ë­Î#?jΖ¸¼"ÝR¾£&E¬öëÊô4›Ë7mk/°^"0ºIiÊháÊ õNW)[ýÝz…’ 5"EÊÑrj§t - #9ªBH¤‹§Šøô.æf¡\»$p‡m¶Û³gûè#D+=j>_IŠ¥‹÷­KÝÖm, Ñ‚ŠNº…üØ'‰ .Ø@yg2‘”u«šÑeöªÙå¢èôÓ¤Ìþ æ|¶|v(Þˆˆ†æ–QˆϦˆ8N›er2Ê>˜ÕÍó…i#D‹=›#?/|,O²°ï‚º¡'FÁ  m#ÖS(£îêh*"@¡«éŠꊺ~MI¶Äú¸åˆ˜CàŠR¬ßwvâý7üè>Bõ? ±Û@òèÓ›ž"ÌÆç>Ó?È—4‰Œã?õçUÎthÖ ¨q,!¢—ßxÏÉ=/won$}Wl'aˆ8,#%’PbbN5²—¶Hl)÷aê)Wžbè†go`·¤ÆÐþjÉÇLCD¼nÈèn±Sx‚¥òÑ’Ò—ê‡wwÁyÅœè3„C ø~í_HHÒ9‚5Óé0Ñ'×÷©ëÊåeW~‡~ñÊeZbí•—G-ùpÏêbÇsU8ÁꆳúÛ¿Kðøè¾åÀæW‚¢·q#±Z˜ˆQ”ÌËàDyˆØ<¶X"Ž#Dµú¬‹Ú‚“ÛÁ¾.е™¡S„«‹f‚2›ak 'sQ¯*Y¶óaO§Ó¾k~PªÖ\0ôAÆ£Aæ(rf%ˆEÅ)oj›ff#DÂ`¨öö—qœIäŠÆH»0)a¸µ†0nŸL×øf'Þ(²#%DÒùïM@3lRÆõ ˜âDDaÙ爒Ý=ӌᦘÔ3¾¨È3tƒA±‘=A’µy©|£1.›öÖǦ¦¤HE’üáÙ¨àþŸ”Ê2eaºif‡;&fu`Ù1ÈAÞlZçv̓³8¨·<æ5Y”‡ræÊ꙯¹ãÎ8†z\ Ú“VôIm#?+ uŽ—dQÐs¡t05n”c5=8Ü‚Ce4ž§64˜ò1›Q–"³¥¢Ógàû5ïÎ{»æijœÍÒ3 +ôã+#è&9äÄÅ]…ä÷®ù´0z]á >û× ±ÃD íÇÕÛFØh6(ŒQdXPˆ<V™kÖ8™Y¾°»Z&‡8V¤ÈÖ¯éä`“S€’ô¢ˆˆx³kž7CÉÁ†ñ§S[dëx·²Þ#Ð>ÀÁŸOP†6wËõÛÓukÊuUÈ+‹’Vó®j[±¨ˆúJ[BiO­S†ÍmXÙYQ:8|ñ[¤3æç²Leи­´µHk[«œ¹V(#%šÆKAMû#Db„#DÌÄì:^„a^á¢ýn DË×6I^ "²sqO„u0’ I*ªI¡©Ùf#% >åáséAf¥RUcn8¬-šD„ÔpjÏ‹sœÍV"%/mÀj”¢10Îéëy°Ò†Ñ%U8In¢‰lvÑ…ò.>ë ¨  "ñ®¶"GŠ¢¡T÷þ§kÔjê&Щk…íñÕôEÁ«´“k ÖÛÙ>è`È;ÕW‹ÞádzFEb#%0AXÏš(Ãvƒ+è“zJS²6V*˜ÐC7ÐþRaζÎ&ߧ»uv£Æ[ºI%o¾~=Ž›x¥;$  4/Bg«¤Æ¡Â(wa6ô¬&˜Q±rG’+–ºÿwPµ•×Òˆ.Þ³¬4t…ÒªÑéž@d²#%Â.ø !oŠz]Ö±†›kRUdlco#D6Dm2¾#?’ÇcŠ—µgjŠ^ñy‰û:#4Í&8ë¼Uëúsº+!–=¸§ïÙ. æéS‹'ŽíØÃß>HÛqµ)Îcõìó„aðÝÄ­~rO>6ãÁ¡ºã ¹^“ÛÓÆvAô‚š´†©ûgð’=A®ÁššH¨#D¡¢ªª"”¥¢¢#?¬âCèM‰ˆµH6­#Dœ¶t(Žýú$`É“ÅfYˆÒX›ÉMM¸F³Þw§V•2`ûAi(bë|FbW7KJ|+q´G˜ &3ÕŒë[Û;E¢¿~u]f÷ï3ëËç2N/†4kâ#?õD‘ßíÇ5ç¡Gj¯wnç¾ôx=Œ“_$Wœ;Ùë§vŸãÔ’™úvòhìùÓíñ0ûû†±Ö¸£Û-¬$ŠÀ¡ ñÒnô©Ö­wуæ!åŸ ì‘Ûp¨¶ýe<{c‘q 9#%`×\é³ÖúcªÈcŒ®„ÆŸ-C¨‚ X†õÉ–{}ÞÍwÖÕƸç±Ú̽º0hÏ¡Æø¤Æy|«4ö•DÃÙöø¼âý{)L¼úüý‚ƒ •¼Üñë½®Ž^ö±ž£‘e€*Œ`^sä'd¼™ˆAa8é´Þv|º”þ—|ðž0J^õî“?c,Óåà×ÝxŒñgnÆnç}Ùko=‹§í¸¡ÛÙëâ÷‡oGf­†ìq$G>!›îäñóÄw.HÎßÍjAÑ-M(M°q#%Z׎¨&ê WE!a] ˃›#¾#?¼¢“R¥ Êù ³I·óÑçoƒ•µ6\)úVº³/gy£ee¤gkËL82bªçJ?»‡=Ô¨«Q=gwN»ü±ô4ÎÞÁýSsÕ›^­m4Á‡†ÌŽL¢6ð¡|)nß[½ÛÂ,ÐÉ´±CÜ#DŒ-*ÈFºÕø$H•÷·©ùÇ·wé[Xæ}¯µq8*¸bBtc6Dv‡Ù`+KáƒÌY lWÌ™Nú¹wIß7GÖ Y°*^C$ø`&ðl[6RL¡m6Qu PØ€Ö3kæšÃ.fÂ躮Ñ#%Ö#%X²]r©M²ÝhnLJ\Cý±R`¢ð?€êôÌþ˜ôæPÀ  +1ió]Û´w‰U#D,;yÜÁFMÅGƒ®Üü=YÏ1ûKôÃ, ÖßDBO³™øÃÛ;`ÞøÖŸ^ö ZsŽ,A!k?ý½"'Í×ÃtB’a—“‘ÁÕ<»¨ãn/t=œ7­ïŒýrQÝØ­k«\ØÏ—“ì‡MÆç—m_hÄè!-¿38Á“ÍÞn…Xª¯“Y2åCÇgÄL>œ}áÐú1uÆñ®®7µXEeÚFß/îŸV¯šÚûçj~ŠL÷ß—­»ÇÒhœ_tqn–b—Y†`L',á8Ý},ˆ¡&ýKfK3³Nx·;#L2u·¯MU®J‰ã­r®¦Ì£©âºÆsŽÖp*g&°„úý 4W8šõžˆ{æ:YTŽ)<íÊ¢]‡êa¥f§Q܎śܢŸ[šßWã\ÁΞU®¹­-js‡ªyPpœÛ™G|î°—9œóœ¥òÝ>9¦×í¶?9¶Îa¨å­„éecBuX­Œï­¹Nø`µÔ5W±ÂwIl£Ü¿mu‚âøÝ‘“¿«±<Ãïnx0 ÖˆXadãÁήÖ#d’ƒzºŠá(+éÖq8ñŽxÁÊ8Ë“¢~6å?É:DXïŠÓëÔâú›â£Küïpœ­º†0PI\ -•ƒ…qSÄg6£Ã¶gUÕu¤œ#.t§¡¡Ñ¢ ;¾k7™#™Î(ç{Æ#Â~ãÌo9ÜM¾µm¨'•Ax|Õé‰õçÓŒì¾u\¬ÉG3diõuÁ£/NòØYɯ…ª#Ó0sª¹Ø»»êiY9”(7ÚÒxÌŽ#Îk|dº”ÚL’M§;ýk‰ß"Æ»lxåß)õÜç†ÎnàÞMvOž8n7|(>~:¯[ nZSÄöå\õú»sJðŸÄnuQÊœôïÎ[­«8¬ªáV0¡#·mÎ|óÎû>æ÷XÅðª|´Õ„C:Ï£òŽÕž¸^–ë‹~Zômøã]tøÞÞ9®Zü§„!,q¬¬³ƒÂeŠãkIÎÆÕ¥9ô¹¡tóžbdJR† âŽ1Ê1•ö[4Àa­ÉïÕr–µ«lèÓ#%-Ž3&|E1¨¡òʱµ …­½õÚ£ V6Ë^2°ŒúùÞç·ˆWt&¸¿M÷­qÄfuÆc…+‰1³9vZS›Øþžx¥>ȘÙCÎúëŸØ A…I»!È=q¼§r¸RËD>Ú'pæ´xñ=DëacŠ4—žºñ²¼ös^ÓÊ»®9¢|‹Ž6µ 8ÎUb±ç´U'ãpwáU÷ñnZã<­FÛÔŒq<­˜wtwFõ{©¯¿ŒF,§>]öeai4¼ZÜâHÞg²Ô˜ÒΑJñ†”6uW^‘›ÖÛ‡5©ñÕq§o3{˧‡#9ÂŒòbGÍæ‡Øɬ¼^Þ=oF<¾®ñŽó¶k5“±tkðKYŒáŽpUcxë´*|‰dJ ý=kr:Ee*ê»ù£ÚÌvïGÅï¾—6øÌ#D¦'>“án‹Æ—z«9[âw¸ÓÃúKˆ]êmëˆì‰@¥Û3#DvÝê%z¬*Çh—Ý5ÉÇzGæ3R‰¥áûœÿ™^šPük‹Æa£!«y½Ò„ÊÀbî³ÉÞÝ&Á´ºŸi×¢å)ÎÑY |yA¯N\óeƇLaøÃz(r6³^þ—º#DDöÖø\g¹Ïý†nýFÛÞ¢¼V;8YÝÑÞ™_çuط˼xügnå=î¨þGô¡üeÍ0#Ò»BŽ~ø¦Ñ3•`TæÒDF aÞÈ_)¯ ú{´2V0x°…Ðôs¯‹òÆe&ƒ8q›:… D¢‹I8NP¼°fÜËÄ•ZDP9uPÖAPÐÒKÐd–+ù±RÙ¾Ÿkœ`„JN’ÄB¾ävB$•éÑIòΖ²ÿšštùÙ?³£`Áý ôÉH•Ýሠ8wf›Ç£¹µë;~k㱉blÊ^RAã[d,²æò÷O­þ"ÄcøBRyí}Óù¦{×ð©îcƒ¿{ƒÉ—c.ôí2C»î¡{Ì^¡z™½†„éÜePê´ÓÔ>‡Þ;,µÓ8÷¸•4`ÿ>ú÷–ÂÄxPcéEÚ,….‘b#DHÃÔZàWF& -,«:˜¨nì!#%«÷x³ï·<%¾[|¬LºX†² 2©Ò»1߯gÄåÈâM˜qðz÷äE8œÂj%%AVa}”b|½†´J]I·m®Ž*#'`#Di‹ˆ¬5ŽQÞÝc@ÿRè$1#%öôÏô¿Ž6E Æ,œXå5W¿go3ê_ÎŽç«æE·45âà pØ©© ×1ˆ÷Ù}ÒvE#%cr#?¥’á(Ã&̇ŠØ[Zi~,Å27C`'ŠY+.Ê\cøúñ:ÂŒB"T’Χ<úKi]ää>ã]»4Þ»X3¨M˜<¤ˆÙ0$) :âÀŪ)ëtÈr':œ¹kTk7:øF/N.UB±Fœˆ |Â*8tIÂÝÚºá¤e›¥9ué,íÙŠ3ÙèÛh›ó„†Ju7‹+¶ŸÍììÜz%gK<ºlc<›N}­˜Î;£¸ÙË9YñÉT†!ZÂo â‰kNY+=“²kº=vÛs® ¼©Bf¢'~ ¦:ü'~<Õžl¶ýXĶ¢Jò´qe9ñS±ò6枻ȴÚx¨ h3oec2ÄÐØcº8óŸ¯N%AWÛsÇÆWR%rýr8iM-Âü*7TâÕSµþtÜßœr¡:ˆƒoªÞeÆ 0š¡û;fé·Å•ÏÁº¹×›x£•¥Ö¼ñ—ÍŒ/•"Ѩ]‡ƒ‚„Bö'q”v]'^œ¦'^Z|¨1b™hX3z%Tù#V$Ì”•\ÔOX¢&8Éèú6J6²k†¨¯l¯–(\úÞ-˜§6€,5j[¤¹ÔJÖ#DȤ£ÉXYaÂsxH>‡@uuc`çÚ¾ËíŽ%@[‚Š(vv†bË-Íž¥õ¥@5N Ãm(Jy)ÃJÄ|«KÓsýožo•ƒ¢j¨„´éb#;ÝZf¦Bk#?—q8á™.ŒC0$‰aeLÑÈé–¨å KuÊò”Z¹‡Ip1´$°¶ÐÔ2ÛÈ3X1A,”!kƒ)– ¬s,Ê”c ™×Å÷=t¾ª–j#%Ì(˜´:Þ’ð9JÉ’ê«Ix¨2Öívµnu§Û3Z8z•çþOtm‡RFÀ~Rá™N—ŽåÅÂN!^_“quD žF…¾îM‹ƒÂc|?œ|¬’éÛÅ÷ÔÉw2#?ú½ØRVxJt”¥±k’¼¤±×-¢w™>†_ Çäð«Ä¦S¯±;Å ™%¥æhv^úq"ÛwC;Eƒ0Î9 ¹ÿ%ØÄPÒs>*"6`<òÇŠ¾y%´7Çxgkäcª¨^`Á2„ß`‰mYWM‡²Áº>>}ªÛˆ É©åé«úxý4Ûè€,ÑAÑÈKcëÐH“y„’ó“hqI©.-`ŽPÜprIÏëõ¼7®¶/èkLŽõ—Q BÙ&‹d!ÊÓp\ÖzwÖײñýrM gäI •`#%}¹à#ì·‡úã hMoóî>϶‘Ø&#%üº€Ûj8özÙ†‹KSÂv}ëžíÝ+bh80æ´€¨` N?&’ Ôê®B-s@SöGÄ­ÙD°%ªK#%%ÝeÂΦ .+1:¾¶n’nUÔ-oçâgF¿@Ù =¥A)¢{3ÉÞž#D“F¬‘Û„÷4åb¬mlÖr­/œlDgVÎ#D$Õ”…))ɾ%F Ý QÍo!e<_ ÇÏ1XEð7¾ZÒç²à+ÏXÜïÐýïž#?สû÷u<Ãc{Þ|Oiÿ†óÉY^i»Ùpo/,s1Ú»¨hP°v‘‹Ø¡ãøbòã6Wk ¥r Î –ð¾7j(áfË<}q}Y‚^Öøþ¼ûWœb»boU\Q”uWú~æäÜ¿çú×,‹fÍ0²<^#?Ɇïsåa¶Ù˜ñ#?Ðünä|µó™‘-ݪúÒø÷h—AŒ:I3Òc„ÚÆÆ}sÒ9à)p#DS'wðYlQZË°»Ý};ßhÀ¯eê™ü§ÛèW{báuÕD="Úq„Ú(Ø»~zNO뤫ƒ‹°©³"%̲—ÐÉ@-á–ô›xF¡µ]¡˜$,ú#ƒÂËA­ŽœÖ¯SÝ´Lò/|Z¼ŒXd×ÍTƒT PI•âZÂØ9®#DK‘‘ º›ÎÄžŒ,Âßæ¾"á|žšrêÁ.ÿl""#?g=çï $qÙ(Ô¨øüÿ?¡FÀÆð– 8;P¥-z±SS/!‘¦‡%+¥\K²zõñw›ž½Íïj†ûlLtç°”Ä(ê/N¨‘A"bÉh¨‰§šªÝ>ŒD$|ð6AŠáøÃ0·Œ¨ov=CácK.Éd@´‚ÌÌùãÙv2QuçX0L{ºp{#?C!jXº²ùX“•·b™4™#?Å=Òß·‘•—.ÙŸ8‰kUö‘°:tóŨb¼èçf{£æZ;Ýsz6sfãˆJÃ(œ0ðÛ¡™‰Ø#D‚‡E>S¦îý¯¬þ#Dú¿‹ìz?£´õ?·ì?5¯ÚòíÔøsè>“Èû“ßïãñ¿É˜ôü$Qþ…TÝ‚" €»¨†ù¿4QþP¾Qœ6ohU\ƒÍÑçÍ#%@ ?¢P!áo{7éUԮǡ¡ŠûÛòþ¢'AD°µœVÛžßZ F Ÿ@ÿWc#%““øäÛ)ô@Ý1#%Ú4þ|z¥<Ò¦Ð.Ò-é|ŽÐ t®€ÿâ’)ú¤]á?–xÉÊÝ"xB|£ãm#%ñ…^Ù…€dž‰pŸ?gÕ§ŽÆŬ/D hÀ/t0#¬¾Eù!L—IfS”¾iGüó¬{à;n4»<¹c(t€[!=l‡ÚB9å/^î¸þì:—gÒ­ÿÛ³óžU~·2l’¥9Ž]¸øü'ooß!¾J‡>\mEŸÜÉ~ òéøô–¯—VѶÁ¨'Ó¤à8ÈxS}Ú@›¨ß/lÿWºmøÇͺÁ§Ï‚Ä!(€!!P÷À¢õDT=ò2½Rþ‚E¤rC£¦6>ìÖÖ×ÇÑ¢ð€ÉHƒÛ¦(p¨Gx7…ÞDÚOÚBˆõ2«å#DHÊÚD¡za2#%ÿ])0¤Xa#?<( Âv!I£%°×Ù­”0¹!´(Pï!× šti¿%tŒ[ÔËű§T×@¤ÝŸBY‡ÒŠD€ÏJ³“>U׌gTe$õ4”Èêºà«+Ä3uÐ|ÓH¢ŠR šXŠ)¢‚$) Š%†R™%‰(IJ"£(‚¼´‚ ŠDø°=‰Q?–S„O³#DÂ-:YC!-VR ¶˜@¤õ•1I(÷—’ß±á´Ã±XârùðÀ}@!pú"¿»úF¾>ßOJtpèMÅ~{}q‡?ÑO¡âS$ÝâïøßT”ëÓ+®€j€úðËäìÊ4ßÍJHÁ•›~K÷ GÆ:F?¾ë9¿^Ûò¾þû9xX£ãû÷ì>ß'Ëoež¿ÏÍ|ñíÏqü:žZö'ßI_šÃ“•â —nPÁwß6B„“¢êǀ髣é:YaŸ™ƒÌ(ê0O”é·n²§ôÏçëß¹µþ^_ÐN†Ã{2R:þuiñÔ+¶ÜI¡LÕ LÌo6ŠdHi Ãç›bÓ”ƒÖRpófg·ÆB])îE¥<;•<Ý.½y.Öê6öÃZqÐF„Æ]Š’î v#DŠ‹UU$<™?Ô¡SL"„ú>ŸÍåÏ¿¨=ÖX;£÷aɦ™26ˆµ1Ç_³âÝûë›±&õµ™FÆôP¤DÔÆ:DKLÄF7ŽIþéÑ/ûÕÂÆQ>” 0hí®iŽ;'8hcäÜ#?w#þTâ†ÁÉ€¤ƒý>|ÏF)å¯UÍÃþû9œÑB2 dZµ#?:3pqQ#?ÖBŒ#Qœqw§“F:À £Êz³ŸŸL*œ w¾Ú«AªçrÞûÏ¥ ¯§¼,>£ràñåsRZÈhhÖŠ<¹ T=!Ñ}#>Z¢3ŽšNÊ*Kÿ“ËèŽ;†ì“Vb£CË˼ÆÜmdµ¶Õ„ÉKY§YŒÐù´UAçu>m|ãÁæhmzá¹`©ÈJ㌃c <ËXÍäÌlÁËŠ"ókÖ×[È95É1ldä®À¤#Õ­Q‡ýKº¿ê´«cCzå»+;b²NÐ#DÒ­œµ.RœP·yA#?òM±É;r Ñ‰)¢mÆ_ •¶0h­n@Ž±´vÈRAB̰ȬÎý…ÿòHD;WR¾×¢sصƒŒLi¬qóÿ'öúxdRLîüÿM†ñyŒ’B¬Myõëß˳BW_&À×MJ¡%ZE;µjÇ(}kÞ¦ŸöÇócªÚ#?xpkjZ3óÌx?yQð×Àzþ/Ê@|>þ@sŒ`Rß1Ÿ#ML䟳OñÛ¡8êµPD,ú1¦ð°%QA2„JD”DÑUL¤pƒD)jIïá€RK@~ˆßŽ¢à4Œ5CEJ”“VTêË°ç1ÒAÏ®üÚ„=ÌÂZÿò #?/oðº^í3Í#?’d_ù4)æOŒŠûòjB"!þð?X«¿Þ1Â=¿çÎu’5ª¢–1`QŠþ®?¢ÿ‹®ÁL!`«Ù¿¯þ.çášxËh“<§ "ãÊõ°6‚”ªGR#D*WXˆ¡0þ_Æ4%PÙØœ³ %ø“«>êãtäOz£$®º1¦uLn˜Â#DrÑŒ?BV*UTðîßc{ÈÚk%°Qgåß¼̆ɫ”ÁU1 pv €È¯ú&¦%bQ? ý¾µMÃ÷ö¦`T³«ì74ø\ô.…­òŒ®¬¯e´’%Q8ÜddXý*;è‰*ÄÇ›­z#?Ö Ìo¼3üge4T<¦f'É8ǽ`Ö|or:åä²`ˆ\rA[û¯ç+œ‘/  l„Xaú ø%(‚#D¬.#?PvW;ñýúäò~„|‚P?Ù*0Q†óÜšoX@QQÖˆQvPW úÃ&†K_œÌë/ð‡:Æ›^sDü¢2Œü}í“ ¢]+#tTaûÄ7ÿ/?óæEzÔ#D –!‚0rèqøÒßd5‡öè<‘¯ËñŸ‘¿_èfþPŸPÀy­Ÿúké»áðù†¿í§O·Þ­þ_¡1ÓÞ{`<óØv‚>b5lZ×›ÁÅ•ƒú[üÆ4êΣþÖuþrŒñšzü=–tÝíœÿÄX!œ-ýÖ[õóˆ–ûÏò6*§+}Œ3>!H`Ÿ…¿Œ²êXˆîÕ¹E VZÿ÷ïê408Ù‹<#DvO ‚jn×ÞEVÎÁäüõ·lÔsSf벂ª£zü6~Ü?ÀŽmoVŠy7çÙßóugRxšé‡.òN¬uŽDãfAÝ´õž?n'%ÿœfyà{tÓLçÕÇæÈepઉ#%~$]ŒÈ6܃ž”ôÜÝå8[´°¼_|!°ä>m<+¤"š{c‹#?X•ÖÜ•¼8Ù=žèøúobJ“]ÇO6/ã×ÓxéW¹Ò¢F#%µ‘U¡O T#%D.PCro%#%]klöÑû]ß,©¦cWLÊ_RŒ"„WÌÝ&ÁŸ8¸X‚éÞÉÝEW]­Ò*j»§¿Ž+?æaÙèûìDðÅjB&…<£òç)âùÿÎÐ#%†ÿN—nþ²AëìõÀÀ m?]ŸÖê}ÿ—÷h0êüßítòN¤D¸ùŠ'â}eáob©é“#% 2©í‘¦`RT•úÙZˆÊIÜÊÿ~FŸî½äk$ö5ðþ#5l‰iÈÈÀ¥WÚtøt(€—×Z?´6‡`ŒÀß­>ˆŠ{–Sb¼oWY«/$§ØÏ//óÜ<·þ{þΚÖ'$çäHïÖŒhãßpSÉ5ãD–aÞ¼5ù=Ÿcˆ¡DùDÉ‚aµSòõë`’øƒuùû>}OkÌGÆFó¬¥F*7¯¿€ÊؤÊs²)F*JÑXœ—–”#?'YÚ³=QP ÎÁ”}g·ÖH9™ —m°OÒÂ)%Båf,Ö+/¿4ú@}Åqü.ª5¨­£êÕøÛf !Æ2Ah{slMß?$ôfžÑœ>|wó¯³ßè»ëå˜3§’3‡˜á³âû—oŸÓûùz<Ùúü_™êueͯ»‚,Þ[ý’ù}¿Ð:%קëÿ0O{¼ZbÛ©#?¾x vÔ‰ïxy~q¦{Z.m$”ÂõóýˆF#%‚ £¹M[„×:¸ëø™ý8LgÖl‡ì!§I ?ZšøˆPFiör§q»M“štuìÌŠzþ#%ŸÊz‡w²ºrÛÛ»×óáÑÓ³M¾\„ßC~Ÿ›K*=9ûðú¯åÄt'1Ý·¯¢û÷~Âråñv ?^莟núù¥¿æ_×ÕŸWuÇ·\±ûG^÷ú“Ôœüãóë ¨kGñfwÊ6ŸäãýNÁÀƱM•uÙty&ø 4#?Cý˜q5!-“h‹É>œCàá¼Ûj5;6ìhü1\àb*ó!¡?ìˆq²Äç #DâT)LÖr»Vu¤Ûˆ"ÅT¡*”¢ˆfŠ¨"ª€’A˜!ƒOO)(ïì´;ÅòpîZ¦¤ ?*‹Mek|›÷” U€F%›{¯@þÿ^¾s7ÒR’”4±üøá'Ì…µúdЄCÙ#D¢nã”þÏ+öÝf,›#èàžw'ª8¡E#%,ÝP>ÃýK^¼ÿ·Çïû÷ïãk~¾cÐ}g_7=z‡ã>¸ íú~™8j7ÇôÂϱ2´êú|öNûò¿Ëñפ}¿ÙÈ ½roç×û=ß?Çtׇÿ¾?¯F U¦þÁÃŽœ§-íÀiœ£ÙoµÕ¸O>MOŸŸAÕ?PïþßGÝfZó’ào~Â-â¯7Íw?¶Cw_Dûaì×ú<;Fy¥*;º¼Ç͇À¯¢-ðËs~í«µÇ_5ñ»¸ÿ¦:ûýyq™ù¿@W[»fÆð§/ÕëA‚7D›¡[ÕNØÜ<ïªçåÙÝá-þ¶ þ+é—ìðèêëã6Ð\9Àî÷.¹ù<ïÏî»m›éÎ~n¾;5tvcðÒ{½ù#?!íïÑ&?R|ÿ¯æˆ8#!CÖ•ÞG¯‹åþO(lè&Oñ¸pï»gâ»È;rªsÙôý1ÍPñîőDz¿e.°úå}+õCä×#D!<ߌý˜Çá¿Wcå×û0K6*â½ 0¤üXe [^—ïûoM×Í­//bRCó˜FË ôåÊ:ì“ȇÏn\ëç4¿ž6õ·ÆEÜðì¿Dz¥ï¥ÚnãJy|3éö|±ìÍ–o÷sá­GŸï±«¯Åþ/ •uýÚõägêçÂsü¹“»›O’ü:óÎèM@¥ƒj­×u<ã’éðí#?Ý—ßéôÜßù­ßë_®YïÛŸLaý%ƒô}{.¶ž#Ò¼ÚãÐ9si³rçìŸC[Õ¼çoëX¹‡«ÝÃ^Úùøc`óAq_⻓øÂû{e·è„úâ‡.Á54q“|yöVØü{:»ãÛ¯–ü¾m»ñÒo#?cѨsŸo%E…žá¯YÚÛüšíŸSöú|œÍÊãÑ‘ÂÝ{*[,µ]ñ k1?]Db]‚ÅÛh7Fešõf§ã÷¼ ¢ßŒÖ†ËíŸ-Q†‹i¥·ÚÑ¢†™0=Ü(ð²^YÇn¾Ú¹I’7*{ ¬RgŽÕBÃ{Ð×^JãiùÌ)ŸÛÚŸ£ã;{ZÈý¬È^M0=®3»e×Õº¼>ïåünïÃíñõçÇV­Y%‡§æÿ_«nŸšÂTlò}§ôsiúBÈü>?Pk±wŽÁ-“ô.>¯€o³Ñ϶¼…âFñÑá´'¬yþŸrÿ/ŠÿϳXüÃÔFPßïö{í²£Úiï<âíã\F'¾;¡ÅèïM_~ÏVÛµS£È>å]¯é—Ã|…Þšà) Ì 8 î-¯Uø/Ì“¿~Žõ»/ìùÔK{1e#Ü>±Ð-å§Ä28‹j+H#?p rìòa2›z}·ÇË”z/ž¼­5ù½vDr?OFW\¢=Ÿ;#D¥ÑûoþÏÓôyr»<¼ûz0ÿÚ9å°7—Åàž¯ðû}²³7Âá»=ÃóÏžÞ^éï#Dó&æ~zgãÕã«ÏŒ'Óü@ŽÑŸÜg´|%jrÝn_ÀŽ¹av¸Tu¼*až»ãòëE¨Ú g™©öÝù²ía¿eWäílÏ»_Ãç¶Îk›jíeÙ¤ÆÇ–‹#?/ùiÊ*gp#DyîƒOÏ/ø¾E‡׿”èÂ%>ÖB5–×öwú>ü#?Wu'ØÐ?K 9¹Õž½?§‡ð(PP§˜†2 ”¢”˜) òmÆA¨„p}ýC³¼f­ç§çü§Svy{ç¶ú¯gëŸÉkYsTNõŠ{ÒdTíø&‘ ô ñølùu×ìÕŽËÍÍ/tsÖ´6\?«0ž[xð•ß_/“ëü‡f›ú:6jšÚeH$¥Š’u¬½›U§ª} Lw1=2¬ýß·özOõ{æ%¥(¿Gƒýþ/›¹Ûáê³»‚°Š£nàÐö¬GpóÎ{õud8wÐñCOçêÛò)ß¼m÷tŽŒ½—·MW}ÒÃ-Â=¬ÍÂ~ݾ¯ÞÖ›[wž¿˜WO>ýãQª}úö~í²€"–WæëýÄí^€GêúìëíÓ×·œyrþï'…z»{f j…ñöxüÃØ>AäƒÍøWU™›~`¡cÝêM|ãÐâ<ÖY¯—é‡÷êÀ5ÏêUÚÜ÷„Òò’W1è‡uéîÛÝöeÛ«Ti—7&X „FŒöóO_ßs‹_£Ó€»ÇÕ?ÁýÊ<ß~Äø‡íþÁh¨þáåÕˆ#û¨|DÛF¿ˆßóþaÝüý¿¬ûÒÁÜtÑçéߟVåÎ×ßAíO°f¦Þ—~¿mî ý¤ ¨éýŸÞ3‡“DNiz¬D´$Ñ:‡;áûœkÃêä|?8ò¢ÿ*õ yzo—êåÌ3Æ>@G‡ÖüċǺçUu½“O«R·OÃW-©OLLÔëPÂ]„ó€9* ¹‘Š• SèpšòÇ)#DÏÞ£üƒñPÌ1KÖi‰4$©í±W0(‰8pG·éyáagx²Á[GôÒœe—Ž …S„GÃ^\h½º¶¦¨t|×—L}#®Á¸g¯.Ë3;Æ;@ã±ÄÏ"c­˜#?¿Ìîÿ™ù¦—ìÁ6#?UΖ’y>Dl—¤ˆ lJÂèºGœv Ä·A½8i»Ïã–¿g#%œ†>»}ì8úÇãí×Ê|àwÓë~ËDAn‹ÞºstDÃ0² #D‹{Á=BÂÞ‰ÖÚ°ªMÛÑ5êW=ºok¨Ö¥'ã…a([¶ÙE¦gßóa÷^g‡ékdDeÂŒ+„o/œ– ã ÿ!Ø™£œMAÃÜ7ªÚ-`ã—z%ÓüL~1QžÏžóÇX³n…óýÇØ#?²oÚ@ì“6 †S¥•Zm#?îRaëv¢œÐ¤$#%'¢µ-*ô’Y7_ä¯!³Jݦ¥[7Ö#Dëå?Ù…ƒP{ö Ë_‹?fÁ·p¨#gXÏØSnṓ¹¾È·NkßËÛ 6o½¶Ìs|‚躨`¡jk«±~¨| F¾`È"G¼„¼§qŒãÕÖ©Öþ˦Œ90 9]ºj#?ÒŒwÃÚ|÷ ÐÙ5‘Ö9‘w0N»¯ˆÓà8+9 Ö,Þpr2!ÁG.@äÒ˜ä-çHN½M 1K4A9íæË®‘¼gönÛ¢ˆl¡ëÏ&_³ðÕÝe:¸í±<\Íve¹Œö6hsmW£š¬Û9ŽGÝ)Áöù¾®çç‹Ÿ«Èx5pLó#&Ç…Ô_ÓéÞÛØyÏòðóíõýTFƒêÔœZá¯Óg\`{AíS¹4Mû¡_^¤>¬{+KY#DRâyå!|M‘¶èß`ôÙÌ" ¹io7HdP|bJñ'ðlo÷é§m±ÇÉüö Ÿv¡¢XF¥P E*¨¡AŒ±PŠSâS¨KÊ‚k–þé8è§[J¶QLF¾còóñµpßó¸½/Ó¨/Vü®`Œ5:R¬ºOŸæ!ëA¼¶OZ'çUáKrk oEo¯ëñôþ´G(šÇn(8ö~O¯‡F”žÇ—ó÷ÎôÞ@ÖpQŶ\ËÚž\`H ÈP*ìÜÛq?å9јÛUbi´lN;žqKh".lËG1$ä*\hÊhÿp“pr…m„4˜ý…†ÀÕ®„$Q #?T•u¸ÖMiLTLÄÚ¤œ,1T&4è5@ž#?:ÓÍULÃXC(âlÑJB²27i#D¶¢Uj–”¥ D¾_Ãù:èj(ÃWÎM,l|F.-r?Ù ïqô"XÅ] •®ÛµnÚQŠ‘ëú»°Ìd)í:ýî ŒMÀ(”;ÿnôÜÜýE_ž§üFõ‘µslÏó2moŽ C5ËÈ÷§³,ÓM'.eCºÊ.¥#D ˆ( 1)”*/ïøíü~7£á;¹¸$N*ƒƒ I$@Ãõ—‘Ççóà ‰{ÄCƒÈHhØÕ›ÿb,´ÿk†Jc€vþ÷ÅóW§ôù&§z=÷æ¿T–|îšÛcÝú¾Op·WØòõœ²dþºô®JRC¯×!xÛã¾ÿžz@NsÁ[ºßŽ›á³·£×êqËå»zþ1U›÷íüüßCW˜ÙwéüÿÓH˜ñü;5~qåŸvþé&ñ/팋¡4SµÁ7|ùêÛîíÇÓáêÒ÷Þ¹žQHO Áë»”†!ÀɼÜ#D(ïÆ1³ýÔYˆè“š7p)J¨›`²Æ)uMT¡Š¦Î—”²„T"æëØ"G»¯›÷~=-ÕŸê5Hv/oêŽ6óvv¾yßã,pQìa|u ¾_儼^­=çÜ)È÷hmÏÍö]O¢KÑU#‰æ÷Rô²=.[ùÿHý:g#D¾Ñ‚;|㬦‰NòÙƒB€ÇnÇßÇìaã·ÅË÷*V´…%óì`HO©²F&Íg‘´Û¦ü¼\™ÌDvÎ<žQ½¿%8öK¯óü.ãä÷_ÕMØk N¼z{TsŽ¡¼u¯Aãû7‹R°·Ð…ü ÿŸýëÎÍkÌÏŽ–_Ó箦?ã¹¼¾Ò5°´[ž4/ÝrÌôÀ=5E Ç× &õ2ç´:L[Q¦­v¡Â±? 9o!¡F¡ï‹Ûôã¿Q²úÖ½}C”†@õ ·VÇuç[Žœ§ Gõ5ªÇ° ‰Iæ;§á ˜z‡m­j2·Q§Aºæ#D$vy60ùÇæáÓ0¤xâ:ôé<7kXùÆðI#D„’T’©´ÖÈÿF’A⎠o@Âp D÷ÇÊgâÒÿ0¦#%ÚÌzN´=Ö³ìJ áù¶?XÝÀKXö|¢G7çôä–Ü.-/žu­œe¨UuHCÅŸ_Óì^`‚QÛí07Cþ½ö-̼9c'†¢65Ê@…¨jŠ6«­–A¨Ùõta6J6sž2#?ÙÁf1FJ3ˆµÝؤ"Ji"åŠÿš^»—¡‰Å3§i y¼Ø£¯’CýTÜ9‹Ýn_#DæÛ‡QI[pÎ&¥8lsŠnkqÙsh1&Rbúwœ^Ʊ¹ûz<ƒ³¤Äiøa§©¦ÿd¥‰§e½30?äÿ°\xȆ10Û½ D´‹™ÁäCë;tM ·áƒ%ç|çFâ÷Á\Jí,þ¼MF[9æh €`­ÒÊc7"‚ž@DÐøwu%îÁô„ð¤OLœä£iPÓÆ”ÌA:YÃ3VV f21ŽØÇK"a"°Æ¢'™5öûx”zú{ЊjF €F¸#MLê¸>®zð%Ù¹prE7ˤ¥tJlaqX’šãF9È*qr\^»ˆ¦¢+탱ËN)¦J¦qƒêíÉ p#Ha؈dút%sS·}•ÄÌ.J#?„–(‚˜g´-êÚ†ñ¨' ·VíT†ÚähÕÕn8ÔƈK@Œ²,hQ‹•º¹ßmhÓÞ‰´˜—>ü+âwÈäCõ±QÓî {ŒÇ#D6òMÖÆ´ýy‰ì¥>DÆxÁÂ<9W78“#Dk7r&’DŽJ¦žmΑãÀ KÐÇ®æ ³4V ™#DÚƒA˜{4Ì汅ш4œÀ÷¦`ë¸ò2Kb lQw¹1%vÚª£hÆœžõ½óE±ªˆ¾˜1‡[4#?1š öQt¤Ôã'T”f‹†ÜÁ¤ `Yç4ˆØ#˜ÁθÁRRÐMr Z1Á¢&I5©ŒZ-ftlF›ðÛšœp˧Xy%Þ›(6­®Ÿ³ýK½óÑIö8j7Z]Õ¤±C±¢a±i¢Š=ÝO‡µüÇ>w#?ç-¨äÚ´p5Lª¥Y/”É֢¦*?(wàzçåÝêt3Ò0E“G£‡ âk{“žt…a Ùíj Ë#D-@Â$àK—‘ú ˜"sBÛt­ÓÌÉœhdÉ[®*d(ªAŒHÌMØå\)(˜"ƒ‚`íÊ;¶u[gb5Ûé±ÈÄÄR|Jø@œý¦ñ_œvXŸ1C`4¦ÆnÐ~ß¡E:—o™GqÛJaÁ<´ÔAÊNg°ögN-°TE'ý磧S»& Ä*#DÑQë”6Bëk³ƒ\4OÖgöÛ“îWíúþuú~!=ú[c˜¬dÙÚž C±mUB·çˆC( ÿ…-”oÕŸWI˜0˜±˜éÈa©°ÓÐí&m´Žú’Ä#?ãŒm+:æ¶LÝÞEèît!¦¨µB”ÓS¤‹I ‘Âgl†'ŒãE¾Hø2É"­ÕÓá†a¦2MÈØV‰0„NbB&ܹ—d¬bT'qÍðpxlæPÂtÑÄLѯ,í<>²Âž5æs~5®D4ä"Z)ÅësAj1õèÛÓDŠÀƒ— ΙÚñ¤Y‹õÖ–…iš®7ÝjuŒ¨·ú;ÊûÌôpa‚ÚjÂq1%p>r\rC†Ë"Ÿƒ{.œ¦‘0Ú±ÇI¶ãp"Ö³ÑíÉŠ„!&-98Ì指ŠÜò´£ÔJ¸b]ÓTàß•úvŠQ ~u×Û¨fI 'yägŽ2A>Qž>:ãäg3#%ç— ™`zgð&Àƒ ‰@“ÌV¦¾æ3€q2!@m»zWs›89üÝŽ™³MFIeóiìLõߌÆu©WFƒB<tƒ^xôl®áÊèço„r>{YùVb­`ÎòR¨;ë:Uëˆa0jbÖ·ÇIÓ[À)å\ðz펗GP`ÉoÂ-Ÿ#?1&w5éÔJeg”aãÚƒ “tÛ×zî]0õ_FûíØŒvcÅ4±2¢%à¡Ïår½qΧj„¶(Þèî:ðî ¬·ji’ßeÌôvêÒ‰­7–}kÑÛ¶­Yͨ€›#D‰ ½–Óclg¬ë/y&rB5ôXaXí¦ï»¢ð àÆ›#DICKWX˜c¼Ò-øŠ„ßYÕ†8Dá•9ć„çbs¬#DÛ.Oj/9dœon‚DR×1Š/ƒÅÛÆž!ðœPÆLí»CfRÆMµzj¹4¹OSc˜Ëíî8XÙ0ÍúìøMxÊ{ãô-¸»ræ™™sèr#DšŽ·TZ­ÆEàw ùó§Ui$îúÅL™qõŠÖ5çÇ+>É{ó¢L+,ÆÖL<¤r(â.îí¸ŒQ¯¥AVÚäÒWþ[Œ‰8œíà’ N¿ÍÊgîmE춙NýžŸ¡æÿ¶ÂâkÌj‘ˆ™˜qåËïºåyu#D0²ˆPNÝ'^*|}¾ šÈðЙ¡Nš5Wæ´±K f5Q™.ËDþÆã%Àöø51öN™]¾_o+5»”£þÑéz³½²\H²"=ý4É“Cýt:±\øëåŒE„É’½Çw‚“/Fîû;iÚZXò¦oPÀûâqku6³6öòÙ†ôÎC&Kßúg&¾HáˆYLØÌîeF²Y†º‰ÌC^¢… õÝ6¾í%„Å×:’á_ã^T¾_èaÑŒÖQ1iu¬T”Ù1,ø‹„çË‚k¹«=шwroÒ¾Øö¾ÙrÖ’âå¯u¥Ýôb÷}*ÅÌ£{Ïû´z`¦ÆQÉWksÇk³×~c~'œT+º6îÂãÄúrbĽB¯šÀºMËûDôMÊ·…ÇfÐq¦Íò¨ðßrûsª¾–46+W¢Pè&\·~„ÊZòg»2¨8ôJÊK’ôdêòïD\³†žæ2¾¹»¦Vy8µ#DôìÓRšWàÖpø«áÆ'‹4¦f75rÃr!¾(\ºT©æ8º†ŒQ¢F/žÓÆÖ#Dpz-ë͘¼™¦cÔ¬#?éYIy¨¡‹Êvg2›¿ìlÕÒê(ˆÁQb¬é×Ùg“™çý–d޶믙íÅ÷NûiŒ^°+WŸ»¯mð¸ˆ:±Fª—ÁÏñ)x[?.#%d×Ô½v´N1€­ëˆ$\pè” üŒÕ€ ôžqèe¾xÓ_É0– ¥#% s‡™m ç€ÉÞåGÞҘR.0n~”«À¸P‘[L·LÌ"Zvʧ!_æ7|~ÝŸÍ¿/'ßÊpdp#åZ >'Éí`÷‡Ÿê5üÀFˆAr ý>óÇÇÆOXPR8~ÓÙüÐÁ•ÿ˜5#DQ&¾È”sð™ö_ÙÉ´мEùü×vþu\-YÛæXc,”@` DÉ ýYM“ÙTDG"€1¨J$@¼¹"ÿ <@™ýµ6‰%ë¡r£¿lxx@<5bÇß1îÕè—îÕ[½6 _ŠJ9±AÉJ‹#À-¨Ip_ØC¥í’ $É<¾ÿwBÄÝh²¿»âž€ÍÀ瞦tM"ÏC1Á‰¸Úˆ¯u½=‡Îâ½t¸y5rùÅuj³Ê#?Öh»µ3¦½Eµº†A£p‘wšë4ÓM6ùC/ùo_÷iÏz Ì”Œuh*–£þw¹7UþÊÑóX´Aö#%NÖŒ+ûøÉúdÚ%þÂÎõH™Ø€ãÖÜlk#??v¤£‚ëîìI1KûO¤X`á37ïLÀ ã{ýùˆ\ñøºL|áDÃJŠåõ"ŒÎ"…È"€ÃRš(ío$.Û%@°ì¡ía•ù:Kr8M´Ü–¦*i¢Ñ`±ã¨Û4?å  "£ˆ6PÖ0¹’¡D‡u÷cžqkÞ ¶„âûœvÛÃcUŠÒd)J i#_vŠÔ·ù?“øE5g\©™ôßñû>9D|s<ÿywx6¢H;¤Å+µ ƒºgNŽ1ëE6»‹SY$ï]š|A½Í;o†2SœàþÁ瑃9dÄ°ù“ÛRÔ jÍÛâÆT;³¤8È‘ûäLlY;Œx¬ò(È›%ߥk`]‘QÖR0/l”Ò“‚b¦¢[Û¥Ìà€ñŠÚÌQþ‘$C¯“ðò5Ç6ó2˜øQíW~”ZµœM†TÖB4©ÛÕ%ùÕVÈí<ª·ÄÔ윔½blEJ#?V)¿èY†ÞÔ9&ºÖÀàs,»ƒRêv$Yôì¡Œ9%.`ôÐÔ½¨¥,Ä$pþŠ`üù…ôÎQ3“&^ ¶ñC ÞXSA‚W›Õβ£ä˜2Ú+NËëáY'CÙ¡>Ó¼™ŸC‰`•_"„ÈàÞ$O#%0wDwpOF¥‘`º…£>o&‡ÔûWng;~öhâÙè¦gjiûoலq¶ƒõ©/Yé¦Áû'_¤4ïQì•kŒÔÈ’4ð[Xðî¢à1Ƙ€8[0þök¾r6‹´þ´ÂÏ}ÎuK\Ÿ0Ãõ¾[ó‰oŽ ýhíŠV´ýûhébþ©œ¹JS'í\¶­Ž¿ßM™¶†ÖMµ“u -ò~£áMï#D~,=~m|—ôÎÃŒ,øåzfwS (5)0(¶k•pMæ¥ü¸ÔmU²-f弉\–†t€`71“M3ÀXû'§+à­¨a{/6…3t¶]7³MÓΈNc„ìfÐFIoùëB´™¾ŽÏÙtÑÁ‚tÜK•Å|߶_ò¼¯…H¥_ÅÌcÛ““§ð#Œ„†ÆØ_î+·#™×Jc#?z(,–"bñàb[­§üB**±Í-—H’AI‰ÄÈ;Wùd};·wÖ4×HýÇÊ[Ý61ç#‘Ze},LŒ?NDO½<Ÿ¨£7ü'MÏa×#%?$%Ù0q¬Œ 챇¬Ãªg“ôÍèT_³Ã#Ö+ñø5‹ ¦QÉ­ª‡å¬xäR†3Ef[:ÿî8ï¢%èA¦™s”YÄ@ØUí‡Ç©G¹^<¶³s`Sm u{ݶ#DÌbå#Rð3"Íꘫ.¡´³?xÖ«tÉôù~=º|ûFÕe™þœ>åÝUÊä .·nsn-¡h„L§%¨-ópv#Da`o¤¢¼C÷Ï tŽ¥\•ä½ŒRNìoË{-&ðòQ•’/f„)!h¸ÇËãBÿ76æ'ƒKšxò)ú^øÕÎ*eºE+sõ@]ûÆo{â)cžf:ËŠÎ.”ýyÖ+µüi÷âÇÕ]ÏÃ4LÅò=%å#?j®ˆàÔù!b¸O(œ.îß5#?*ËtÆ'0P„®ʧ…ÝbŠ~é¥5'1ˆo JR¤øÌdñÄý–¢‘QÑ°¿8½šµV£‹¾ç¿”#?ò·8ÉÂHÄ‹ Ä»_”ú’)¶¡Q+JE›{ï_,RЃ`B61/z\Z½Ø|&1‘iÓúoª-åã5ÅÑiá­¤×ÁÞËm¿:4¡ÂvÂì°¤ Ù¿$Yv;yî³Zo†™¼Á†ØoiGs(µ#Ý`û]ÏáÔ·eÁÃœNrÉÓ<.»ƒÍ†ž©^BÚwnCµTh‹óE]1×w>̾S`s¶Ùãâ=};¹G‡)Ò—ÏÏv"øðQ«ÉziÉIaNßü2Ä7µÛÎ_÷ñÊ£û¶çOMБ[œ…"„Ž‚ÙþLÍ¡ëRïØÙé8C&LäR­.j¥@¹³¹âEµؾûÉêÈ%uØîQ¨½#?š v(»6p@%:Ô2þL_Jí‘ënï$~¸Áø9T›ÃˆY"\ˆHyy$úu f„¿q¬á‡ÖV ãMnwJÙßáaƒÆZ,ƒ—h IÝŽe-Zz¡éŦ=”ä²ÞÒt³7Ù—l³œ&6Üo¸Å“dcþ"²¼»4væî¤tqæÙ¯^bÒvïtÞõ›£.ãÉ4f©…r0ÿsK6RQ+Ó×ØÖÅK"˜É÷töO¼_Þ,¨¼›ÎŒ)`e±?=ØÜ0| >/…ô{ˆy(‹)œ×¤“TyâD$Ð΄/¥-XìõLNhLSüKSWîñ%[R §‚XÐ$¥­ü]û>ªyÝRê·™ÂÖE8zU­ë¸Yd`zš¦oãaMpߟ/Ôõ•:®Ò:luÊ^rµ"äeл™¿ Df-P³æ€Æ°ÅogêÔ7]…È7esÚ`íu¯ï\\ ]#$„\õ´ß}ùŠh .5ÚÖØ2ÈÀAñG×»Ö:xŠR‚û^®1m_Òm3#©Å±ªËä‚<°…­&W†KIùìΣYí[?±B÷¬uûmîÓžW†Ü|åçø=-[A¾Z-9ì6›7¥%E—uhÉå¢îÆèÂmÎDº XZnƒƒBý¢µŒ”ßÃcߤ©uEg+ñy½ÙdØ×érçˆÊœ×jŒî÷ZMÝkÕʳSÝc%+„^´ÿD‰€¿r€§ZöÂ]Lû:ñ wËT¼`*8…[m -QØûÚÓŽÉ´kt„ä¢DfF4@#?“qôç&‡_¹4áVþmWƒiæ5 }VØ&\yJW•rF­YvÓwF4¥•ƒ"Š«“iÉ‘0"ƒJÆiK¢,n$p²áÊÁ©ÛLi¹–,|Ž£¬£)«Hr#D:¤®‡FºqMUÈ„ñ¾6ÆîxLê†ÞÅ qœUq.rýM"#tß5Ê;^#”ß_¬êl]OU/Ûd›NÀÂ0ꮞw”ÖàÀ¡Ü §e’y.™k¬nˆ#?Æ/üÚÂX˜šÖ®õZ8VŒUvõ´¨`Äàà åe L»Í×ÂÔÙÏXÂèã+Dû¯ŽO#Du/_?²ùåÐ÷é ctVƒ#?ÙaH ¨?#%û>/k Ø£«¦<¹`ò3ÀÜ:žE-o‘Ï”~ˆÐ‰Ù&°²ƒÁ°§ñW_²óÄéê—²“k|«%³ÛÉþ¾ùÇÄõÂS©ÆÀ#fÒìÐY—b9kð?˜ÙŸàíu‰õ¥¼ºCÏÊøÃÖ¿Kh·=aÛ„Î…¤„BzúîqYAâH‘Gûï´ËË_}q,§PõÑxwgg»ý¼’bõ¨’s§E®g;í·Ø°’øNš÷QåëJS†ÿoRÕœâR„Ó7%MS±Áí öš>#›( µ÷@µRMv(×#D·u‚FøѳÉ\#DÉk„,›Ø¦ÛƒÊ5œõ‹ïx0¶ÆϽ·Ø#lô;=¹Z®‡]žúÝû{q tÆ´íÕ2?gßíÖl³ŽcÞkdÚsÁH÷’®¶”|#¼7Ôӆň{lÒÀ¨¼Š—í»®O*nCwR¸¶#D0àö<"~V·|5%@HÈh¢ƒJÚ*ë¶jX<`ÈᎲnÅ`Ž¦v«‰xûk ÅËaëZ3™(«åèfR(J,êÂÙÄ£¾óŽºç9Ž}"æ¤ÒãiÂ<®ÆÉl·(N›˜GŒ¹»ëƒ‹q¶Ž—5œóHŦ­f§–p˜—à÷ΰÝUŽv ì¤iëƒë²?⠋󕚦«ñhN­rÌÊGÏsðÊ› ** *3*ØÈL›Yê±Å”¨‰zœv¾g~ÕPïÌAf¨˜ÇGÍ71Ì*óü&+fÛ×ñÏ¿·0“0„žó‹B÷Œ†®ÕKèU٣ߖ+-ºÀ`eÐøBC·7[ íomU»Ø#?]ú½WJdv­¤ó:”¿y£>Ʀ½RȬ.M-÷³–ýáx]2ÂmœFas÷Cd§ž ÔZÊ‚¼âR¼»îÚÐlZá1 `ññ!ñ¡Q.e¡b™ùÜPHàV³kÌù‹ØàÂEÞÈ-Òz²ë•EoW¬©Æ™ú5ODbù(ƒ…¤Ö0½w.·²ŽýuÙ`4ºp†aWº2‚Ó£WeУ÷3­Ô3jÍ-54ú–K Ф~]m«†únº¶F‘Ùˆ¬a&ØJ ÃVèô»gº}`Ïc\b# ¯±2¨[8­ºRVƒm+Jr´àlÊÆÊed¬ŽE#D!= }Ìå~ŒN§*À‰êúk!ð6NèDº§ßï¾éa~Þ˜Úo¶jî‹ÃñÔÑz†é¿ m’‹Hï#Dád«XuWÆ;»!Nf·YƒÝ#?‹`ñr·s5—OdeoCDÝv6`*°™² âcÌ°ÄÎnÛ!ÔÉ»|uUETCqCñ«ˆÇ&6qË”~«ÕG†¦^h©¹j`ýËd(î—ç>tE2Q6²B»ZŽ½w~KåÂ\JY²-ñ[àYìïÑùV³ƒ:.¡³‚BLï:–¤£m²â¹h¦‘f0Ò÷—Á¾óûSR|'Å«dÙdËÓÆ»¹ #¾w_ à-éµr¾":ÖÈ‹ üùæ§úº ]t=¸úú])ddFêúqØnÎY<;ŠõÙþ—¥¥z¹,©¬‘ç~{ïaãéñ0éˆïmÚ—š#D>Msi<T,ÈQ¨(j­)tWÇŒå\é“f2ì;Í+Í›,¢'ˆXõ÷ù<5oŸ~?>XŽW§ñßPRyè¼oŒBBC[Ü,×6€V Å8#%Äw*±Ž9s7qcØ;:(Ýî¬ð¼d»BšÀž}F©ïÀµUíí—¾ KÆh@§­z4ÀïÀ&ü±ãú°PôA´¹¶ÿ??#?EšIˆ=]0”¶€tôÙ§C÷zø¥™J‹CMYM¥™;X³ñ8½µùè(H¹|#?i6HÍ(9 ì‹0<âw:á³£lîñ;(Ö+ï‹ØA>†#DÅ[RɵÄ0èAÄBäžo#?+žÛµ÷C¬töÓ¥?¨m×Т(S\Àç–šAù§Ê±ˆÉäê) :J`E†8fW¦#?ó0PÉêÁÉ8¬j¬NJ;×¼˜|~KìoC«m›û¥ €#aÚYÔÉiWh;Äg2Ž¿ ¤vôM¢4 ó<…‡Ò›o>¯¢x>iE/Éîçõ—ÓÒ#%ðåmþÑtºøˆUAâM§‹ i@·(椋ÖÚÆØÄ„îN÷ „C+­³cOe©·T&n±1{.®_)…–xzvŠråôÊ"^-aD¡³£Þþ ·ýÌ!áå%îc)b__¥³«2×e#?Ð>­~i­{õèg."âȲ¼¨Îs4„½1¼ª©E寧«#%¾-’o€Ì{V£ð|ˆÔ£”V7®¡ÛÝ#?}GÉãPXI{y(ýŒG’ŠM§R£#D+ùÜj¯Šá/Ü£`¹v#%ªê2*!h»£º|t6PWÇm£È8¨ã²Ë!L× ÿÛð³ùœ°²òͯkQ÷&ýº§®wm ´ '¶õKh7{MõŒì÷†2j8UaJu´†â7›¥ÒsÌ#D/>Ã}ð®°Iä¿£Ø=·ÂqÇËn‘üÇ/h#?[öo5Û…VuQÑ·oCÑŒj—%Žø®Bt…°WŸÙèmwQÄG†Ñ'†çù;˜GßbžøžüP£ö$pÎÅwÝsYdŒ"9íHD?öÿübhR‹pn•ç‘Ôu5dyŸ#?À©¥íšne¶xùìøÞß^º¸8\¢à@:cjÙ®E–|M4¾L™ê¾ç7=iH© n.Ãm‘°¾ÊL\:VnŠ#Í P ¬”èïdZÑq¨JP¾¯£ò=Fë-e¥åf@å(Acfµk®£NÏf¸Î~úF4“ïÒ ±[§Œäp‰<ØÃÚ²-ÒS x¯<„:+?#% f>3ÒyÞ†a {:Â>iæ×,Æ*½*¤­=7|Ô…4S@Î ¡CHEHäãâè逑âG *&³ÖëdЀ^(Ž*ÁTŒÌÊPvŒ¶?÷ù#MTÕ/xk?½m÷ªÅ*ž$3âË;Yúý^^›èìk-v©ñIŒ~c÷PY>€r—ˆTÇËrZ)4N|¼¸«>úŒ|zlå9Ž¬1ƒø„Hì Î6Êö.°žmpU‚m] »^‘ñ˜¦â#l'Ùäµ Ö”ÝkQ+Ìßæ.e—J\¾‹|;·Ì]w&Ö-Ô#D‹R5¢§?å^×iÏÏ^‡†qÓN¶ýÍÄÒ±4»ðª8ß·’#%Ã&(H"sÃr™à%#?! Öºd¹ÆYÑ:,=YbÖ%Å#%ħ#%@på-¹bÄêÖ’€Õ.ÄÄzÔÚÇjð>uBžÿÞÎbQßÞʼn Ç¡–j£b¬jÐT3~Žtca°­Q#%á !p~ÒuQwÕ˜JgY]±y¡ß8ðšÔl‘¯5‰‘qíð<+6qPÞܾ»ârë׈jª‚EÃg8Þm»]k%HK_0÷äù Ô1"´pÓºÞ#º de'Q>‰¡c.•×#DÕMŠßjí»^×mJÚU°)mÔm°Qòjɧì«´$¡­v DõÖ×@¹*‹è¹‘!Gi#DÚ"Ë*Ý4ÑÙ†FÙTUÝ®…›¹àsºôÌsþ.9Ò—QÇ­š µp:E>k€¢^W¯D´tI!‚Ø’8+‰¸aXêìÁ­Jê•G®¡q¥m‹í…à¶Ë(ÎZ“€‡]öu¯Dkº´Â]ñuŽþ¥iaΈëÁøßÏ%Fë < óD"[⎠–¢qþòRuÞ"Ïm…}]›ôFio‹ç:÷4?²Ï'Œ¾"©Ûôb«?ovÊdvåóâksV¹2OSU×ÊðÀŽŽÉÿJåOÍí‘?N¹ä²r®¥‘Ç=ª"4í”F燓íõ”oMó‹›©o„OºNAæ¼Çào–¡£|äá×ÖÎIÛà-®¯ð#?óÄJ.ʶ§)Þ/“Œlƒ ÈÞr¶.&ûU$èRµ~ß2ï?utž;ýÞ‡"#%?*çeööÿXìNÇæø¹ÿ|cEÂÁÀ…ˆRQ xÑTRŽÃ'·w_ ý$±<Ð÷ƃêì—ÑŒÚ_gcgÞÞò€bI#ù'Ðmû’(£R‘QºƒØ½—dÄÓÊVÜ4X"Š §¥aï; Šd¾?ObC˜–P¡H‹3#úÆAQìYP¨L•A#D¿f1ˆoªHöÇâ¦%¡Øæ£üWã¨-é)b#[Úq!÷èFG>˜¯qºR¬E gú™½§q±,\Nw‡RH  ! ©´Þ®u#?p—'ŒOi.9IA %“Õ·#p#D¨,×/Ó÷hb뽆‡/N|¸Ð„Nl$5%†!˜ ˜¢}ÆtñòãÛ·¯¶#%'Ôrc#%Q½@_£s#Dƒôû£7ÌæCó‚žÖ'ë¿ðó¹ç„’Ùò?¹Ñ!Fi.yƒÙ'²z##º!<ÿ >ùËiM þèQóà É#%ÒÈ]dGá¤S÷^ð`y>ó˜#?eycçøïÆÆ@œ1Z0Ʊ°gMÄvC8LGŸ¨ˆ ão]ï°CŒq ’K'?ž‰û„Ó›—µŽ©RjJg¢C°ùWùsS¾wi b2ðÏÒú`£O›6^Ñ—º>5/o]j† á‡ßt>Ú§ηÙéZ/³ŠQŸ(ŠÅäÐŒ7¸w2gÔL}54ŽfyÖ#uwôï/©Û@{&ÜʧÈ{zõ-`ebð.±T2óSjl8°©£t2ö…é][X‘ pÿ•Öá#V\kìþq¡Rˆ±ƒOw¤èli)˜tœoùvß×YËꀩÞJI÷Q{Ú¤¸™H OqDô=ì˜IÈ”šªÌFËÄ` úvòÉçP²¶Æ‘WuiîŸì‘GÙ’rý»OÍ°DMt•ÔJ:íý·íÒ…¸Ö—Ãlôk4>ª­Â–ùr–EȪ›—ínx<£7fSѽØONï#?\yc[0ëÅÖ1Hv"Â|PÓH¯ßµ07×ØÎ"ˆi¶÷lÃ=Y¼¬ÌCCjæG@ÞËÆ·Ãè Wq ’I’ŽÂoQiƒD9ˆœD?b3hïÇí¨èÒ\#%BD’€äwíÛ´[ÃØ-¼[ñŒ§Ïå^ñÞ6¯5wó;;¨µ=ªÿ§ÖJÞÓÉVŒZ€^#?À Ø¼Y@(š=óe"¤cÒy¸Ý×T#%zÇÈ9‘#%‚Îu€(7Q@â#DԀϙur|!axê¸Îo©ÖÅÔýfö¡ÆïÞ ÷§aŠl,T0pÐ&VÑa©¼·A g§¼ŽoYï‚Òñ›ôg6À{»D;|‚ 1)v¦÷|zecŒd5ìÚ+Ù©M ÒSz¼ƒtû*ÕF¡¬JÂIÕ$3(œaƒ,‹ž “Ä®æ[ºÄ5ƒmµw#D°–ÉØA—)ß»E XY¼adK§ÏfKr&D&ßMN8ï¡L»ÜØ0ç6ÝpEH„Ö¦ dÄo}m†÷\÷‡6J¡Ã 4`^fétQ#?qÙ·¢$éHR×]¸Ž‚˜@¯Vh„¨Ü6¾Ù_†GQ$âÚ,€¶]Bç#%O«eF‚Væ*€š­crÐÀ.QŠ"köÒT³ ¾Q^Rv|9¡çÙÌÞ,ÛÑÌ?ÑJóõË™zÑÉßúú©Ï_mžÜ¹’åÿF 8S—é5S¸›œñ©4‹LÖõ­¤ª}\lzÝ@ößUÆŸ#?ØìÁaÂJ`%ÉA,g›<µÁHAr q˜´‰ÆZýÚvŠÑG y¬¬rÛ—,8 ä½dLRëâBxnXjçav+?g¶ó"1Ö–:ãe"ä8d~gØAÑŒB™dB¡„§ºæ˜rT`¨"uÁöÍýzßðdã6ý:Ûu^²b¦„žcÍ­5,P¤‚!¢Šº)OÖÀǪIÜ 2\·ejEW/†0rhjÇl¹„…:„mí•-A6#;ŠÜBÆ+àªGœˆÆ$æ#æB¹D™G«›l:"9òs H“ÇÀ£Úž‹=\®ì¥O›Ê·çáaÖg^~³ækp²6rŠòJ##%§\P,(—·<áäklìÍ6è Ñ—[/TJoÑÖâ·®™ayä!š°g,ÒàôîÒ#á˜tŒ}:Þãªx¹k?[xL›[K×ÚrˆÎC©Ì{I¨XK·ÅW+ì §×ÅíÀ¬&ÚbÁ@ÙÒ$âØ#%ÀMú[Œ,ŠF VðuŒ'ˆW#D¨¼ËúðG@Òã°£RÛ;Ö’³Ah"XlªoUH5¥7”b|¢©¸ÄHô^åñn1XDT BwЇÍw\Òlˆ~g‰·Ÿ =o:ÛA ·d‹NzÂBc*&“GT/L㣣0žfN’#?Ís÷ ²3hâñQHCžu¤W„ØÌcª~ö³ý.¡‚¨ÌkTp¬¬ C¸Õ—V¡Æ·‹õ—ë!N›œÌ¯—¸ñk‹¸pÈ’L0Ÿ}*pïò>†[²»m–hé;zÁkÓûªB,ðŒdt{I d%‰ÓHËŽä7Ѿ àí„•Ø+é…&þ·¾únu®ÛMÕ鵃ÂOÉC‘èKP1 …u«k2ÛkÆH,Þ5¬*ÃxFÀ§ú°‹&xeh:‚ˆ`_â8wxj£(¢ßŽöÂɧO“F†Â#%Ù[-軯°¸[Gu‰@Q6˜]‚\÷è1PeWÊ0˜¬#DrZf,T`˜¨¶´ºC¨€‡®Z²9r1u{^ö"‰Sàpvg»©£Q÷¶;‡xq\·ÜPåÞâ’†1Sv•JH66± }7™áºo®}ž#DMÓ>û×%k3<8«¥ð¿x¥‰c‘Á[\àùþ‹† ˆó¬)BþNÿˆ®Zéšq£”rwEoŽö õ—2TÆå·1–Þ*ðe%t£ÕÓÄIÙ¯ãn¶Úa¿°Õ•ï?‰2"A­ÄðëªùWoígà9©÷¯Òö_ ù²bŠÄ Nòú>¦D#%D&Õ‚ˆ:;s¨ÔdtÖ1ï»#%€%ÿ|§Œqãæì#îçŸ`ˆø+{øaÑõ ü?(Õß0˜/â!#³uŠ¸n¥,!.øÍNZ#D«ÔLy)w=‚ä uJC´ éÒl#%hx»bz“~ôÅÔ $þ uæáŠF©ˆsÎ’ÖÊ#DZ×ö¥bÓ¿;ÄóòæhŸídë§ÛËÆ®?æÊ&ÅÁ<“J%dJF3õÕ}Ùh#D#DªŒE"*Ù*žÙÑTÝ©¡Šb˘;éCáRiŸiópÐúŠª¨6ÿFd?ÉO0t”(í‚öÉC‰^#?ûñ¤Ó#D-8 ÿ!‡ù=ßïÕû8¾î0öþ£S@ýßß½O¹6%†´¤Ï~ž8¦ŸlãðýÀj9øN•u?‡!Éö›m‰ÝJÌ7óãÁU"óŸâ(PûG¡4¶á²É3&NËÒ£Ö%ñ/Ü6rˆ #DqÇäJ€fC!BŒÚO­…Ka8kÌÐþÄ#%¡—ƒ™ŸU†dÑ#D]¥l2ÐOÕE¸}ð÷•ð‘ƾ0å&E…Ï—Ÿdå=g†ÒjN=Lü¼¶¹‘¾§ªð¿p)‹âU.•^¿ð¡í•Axs¹wf©Óúyý?.êùþÐù“Ò$P¿šO|êl9yš”kÀ`–‘ÄìQ€ “·ã“lzìä…¶N»Ký˜¢Öü¡!¹ú²I°ì3°´¤ÒCË~N‰»Ê#Çðs,kñÂcá›^-çò¦ í°?ÒÓ#}Çã#DE»‚=høw™ÔÔ;<ápíôÏbvõ'ͪ¬†FhÎ,4oÁ»ÒD#cy¦8³³šl·â˜ÈîÖÖ‹E)DÛ½|°þ¦[ì¶à”ÀóCýã§^>µ~RÉúå¬lªŒ¾‹¬æÆÉ*47=3X[5ªJ¢;®{Y®z»ZºSÌE$£‹®*çÿËÝ¥pÈÇ1˜âon&[™wš„Â!s_h’91¡/xÜOµcK™Z²¡!qù Re0B(K9¬ÙyKm×F%`5¶$êÇþC8|Žïžçþ+ 0ñ;V«Tá²ÃÓ>Ñìמ'bó÷-Ž1ôÇ ï“lrZÿ’é¬îH/¤ÿg¥¬ÚÄD™Ð¡ƒ;"0]S—Óú>Ý‘4 ú'Ú;꼺|ë˜ÏºK2¸AÄÏ ¾o_ÿ•òg(Ê f#?™ªdÒ¥—dîöå–¹Öhüò>O‡3:½ÜSñtR´'¿és¢Å—ÖdZ-;&  õÐ~Ô¾ÖÝW?2GG³æÑ&R³‡u£Gb>[ÔI(IážöS|q^NfJÉØì¼àWg½ó¶#D+ŒBlG•–ή‰m ·º*]ÄC’4-¡­ñ-tF²‘ú‡@ï˜úïsˆ.MüO—·»D×–E€Êä•••Ú’®WÆ1×4´0>F<ïnÒö¥òŒÀo‰»cle’2#?–4Ñ}²ö§^²œ±p̧7»Ý„L1‘’EÆ}VDv`{ÐÑš£U ¡âtå¹õU9JbÃQ¡êÁÒ_¨ì¼vó.dÓb%íF;«#²ñ§Ä Öëd×fñ\ô%¥±ñ$ˆ\åó'©<™ð;l¢Ö’½Æ:Ÿû/>HOk8žS3i;õçø¦Iãðü¡Úg!Ý¿)fè¤÷!íŒGÌî…ú¾"9¢Šû)3õSê𖄨d ð?ç¯wÆ£6˜#?ñ¸BPÀle€b ’fH&†üŽ§àô#;mH#DG0U|ÜG¡Ã<%#D*Z?á3N„㌎Z•.;Žøœê¨¨PÄ (’+¤¦&®%>ð*쌤„¬vƒÞrñ:u#Dç/ ]Ú ªÃÏàÃC0‡:ü@4†‡ÈCé³Ä…%2™7`[ÌéHÎjW³Ù±1f*ˆ†öòÒÉW.§‡ý‘ÎþxÊ?³¾ÔT¬*(ÄŠ0d;žC·‘g/†Þ¯û†3¨œˆ"²""°2uõ|ýLuõÙ¬½Äà<ƒÒ¹¹¶è„-:ï1 qk°Ü; &“)rÃI“tlÃ3vøëØì|zÍ0³ãe\ïï'¬ä™ä›|{g^@ßru›¤(ñ*¸¢ƒÝDÀÛ!Ü€*„Ð>æ=‡vIdÙ#9AE‡‘ÓÕ²=»÷-¶Äm¢»x’žÜP3R!ûo_ºûe7Ú….¼ôý¾G¨éå5 Ô’˜Nè_e.¸pŠ§b¯Å´†„‘bh@ÄSDLä5nµ ìMh@;¤šòÌ­ÍþÚéÅ @á‡Ðšê¬ø=ýÑAQÙ,Fãm• hÈ°yã×Àkh!Ô¡ÃJZù˜á€Žu=qÛ¾8gªÎÇGv¤'ªÎ3ó#m»ÓŸÅÓ]‹œóÄÌ„ºíä´r?.aR’‡³MØCB˜´éÐ'.@½€íÁ”:¢^a*–ŠQáÌŠqz†ä:C ¤Ä ¡_#Dr\„&@Û„öÑ)T%5A¢š1AÊÌCQDMòNÁ¸hêòÔ’oáR’†ê¨ðœ')30{¡ÚÎñ@›I´cè9 õ¬™]ÐÕ=ïÁ…sÜå°{&ó 4DM‘‡ièk iϹÙÔ¼Hé-¾~ÛJª9}5X½C ­}•‡«;K_VKSí‰XõÔêëÒüGÙ¢yÚ8¸v#%y»1JZ¥‰J¥˜F9¿-=hè)¨SèÖž†vÉLãjÑS¿žu Íç›pY=GÇyá󦱑=`"£¦.tk&›Ð4õRå\'•§DxˆWßÝ¡ÑÏ×a¹CvQ›wû«X<-¼+¿¡‹oyLÅ—–l~ŒQÆ_¬&Þwm†j)†d36èÊ1 ¥LI´(RÒb§QÄ< æb"G‡ÒtTRP‘t„‘˜ ‹ ã§#%¸r·—ÕDã:_Îg`ñ‚(Ť))׳–L“îA ë3Rr¼_Ž û)¾±3)]›Ð_eö\š`CÉ›½rQq”h¡Bà!KÅfÓÓFíR€8°Ý7—D»^®é™–ƒÖAfSqÁz€Ð$4P—Ü?nau¾ú âC·6Ff)’6ˆ7o^1’ïõq²qÒißAJÉ5 ´wûØ¡¡ø{ì•Õ­²–]³a#%,ÿA=ÜŸqYÔöy<ùHÓÌ<ñÉà’C³&y“ºê—0Ó¼—=¿â¬ôÄ5åDí6 ="ÌNÉrLœöø`EvQ¶zd:ôÔ ó‰ö¸0ï,V' Ò;dä† #×ÓôÈÿ˜lA¼a8d…#?Ý,d#“ßÛÖÌÌ}ÈËu£Ú×Öåè „É‹ŸN³´!ÚŒ÷ •U>“Óžñ5–o—é)Ø[âëbFS)0¾,Ó­x‰@, ‚LÂc¸}_<EÕg°×SD±\ˈ'xãUÈ7 ò±˜SlATaS“E@i˜… l÷ÿ?¤húÙþ@À¾lëßð|5y½GØ™©Yå¨8`éF}ì\ýú¡š»—³d½§ŽœC]‘öMdêäi™çâ§>Ë¢Ä=ƒ!AÙVÉ/ÕyDZM  uÎúy,z÷ç„Z(ª¦#Dª™¦R¨¢ºld;NüùÕÁx<Ϲ¯ G`8eí‡rçRkI»#LC»Þ[ôby¤v3†ø’ãœØÜ i3ô®Çà¾ô°ÁÜ[—c®ÁÛé6Ýw9vdÅ¡<ÁU®lÇ&î²6c-”Œœ#€ã²žæÛ ¢Q$"•ÿ“©à3ÄÓtF¬ý Þ•AË„ÓTP-ó#tÞ #D@n¥Ô» ©ãßüàðø‹ÓÉ?¯ÛêÓSÛS¤×‘©É“IJI´çv…Iõê†øŠoO®Ì'wKSÍVÒŒ|´ƒ„ÍA'à‘êz|-Z™ITQüPÂr‹¢Õ]ü4…ÕºÜ'!-OXûà¨Ó¯Í¿_A_a×[÷eqêì¯ØíÝ–Y²ÁÝÝ‹rSp6c,>2P #%ù¬5剿vÅgØOZ^Œ kcªOßWQYÔÁÄ“x˜áI£"ƒ˜xü8¾:sw"æ0}\½)¹#dâÓT§¼õóÊû·=¥âŠž¸0(E€”Ãܘˆyͧ•Plš½Xb*[BÄæÀݘvg‘ôs8ë¦LéîÁí!óªÅ9RÖæHQ)sªm#?&,X*â¼Ì¹ªã#%P‚!ËG§¹Âu‰žX§k©x…nÌž(sK+Êi妮Rª”Œòª«¹à!xàÐܦ¢àëM‚Fö*É#?0Œ#߶TnN#?±#%‹VØThh¸1‡½ù.†§¤ó¡vCösŽ¬é)†>ï¯ÔGâäÄÛ8u¹úvôÀD„NŠ ˆ~Aö{n#%ó ²ºoôN5/#O”ðŒ$eðù´/³Á1¨zí ~è}T“žiœˆJ#?\ƒcÄ<¤Üë×i¡×ÇEÎî+¥r6Àc#%+f¶ªE“•B#?R0‹µAd¤qÚèxËíÀóìºõ×;5ªæq¿s«Y‹Ê’“Xã3mÊJýžÉÆq7eÌÜðl5ÓéŒhCGì”Y³|!ct\èn„d3+=Uä—Š7EcÒ ü~—ÅÃ_=óxüM˜ä¼}¨UW£P_Ô9Dvïœ@áÊbˆˆuƒ’ñÄ(µ#%Ó#~ýÄ(Àÿñ×`"Œêp},¨á˜q]+=—Ô© WŽ¸}ùF&r‰¬æUvõµ>Ui÷ü8-6)@ñæqˆx#?Á†`‚ Õ¬“ —þHcz¤NGA{¥#Dq\Mži°tB6-‚©nƒ÷¢{å?Qo ¹:óžI= ;6:¡CNø7=((c"¢V¡¤êwsnsb'’Ê*¥ wZWë.졈ÎP×¢¬ÃL©y`V›MHîYî#DNÞ4L¦Ã:ïnxAh–Aãôòd¼Èê±:ºñ‚#%“4¨Äª˜¤³TìÎýÌ´ˆƒ{kÐÒ v'×Öd؆vÆ”)$=bn!Á”Ï£åþ,ùéùîoá´Šïíâߨ«È’#?z?ò5Õ³ÈÓ|"©þiįçiözŠ/Œ{dÊ Òµ«Ø*pQžI@ _•ÖÖEaÝΰ&å>ök‡PòÔ`Ä Î؆0àò{è+¿§SÜðSÊ0THù…D©ª6(«; /Vpþ#DJtÔ»’BYËN5ÑÏ0ð“N'ñÚ¤çø·¹Ÿ£é²;8?å¯qŒpÎôpŠâÖÚmw-z!5)]ÜŠÖnM¡Ü!è‡9ó¾ã¦³m"$:'N~­**Ç¡§fzWXòNÑ€ï¼çÞ8B/s©í:?9‡nç"MúÃUd§qæÏCÉÝ8VwU3Àî€P`h¤éV¢m]+¥™MRd@çÔNjp9Dmp˜i¼!¦±­.Å]ÆÅÉ'‚¤YX¦J ¤"¾¤`€)"i‚Š‘ø©‰}OvíëÝŸnܲ©(«q!ƒ"®«ç9%C#?+¯Ì$‘ø±°œÁôB§Ì]~æû<Žoªˆ¬~¿C¡©¶Á±"‚¨Î†>'«0~–4ü»=|î¢Ê–³3Pãᢚ€o»8­KZ†b¥9˜+r u¢s” ÈŽÕ@ž½ŠÔC“Ô_›¾å†ýŠ†ççsÐað{ÅóŸ>Nç•Tú‡¸:°k(.ªM7—çð…9òPȈ‘Ì(Å‚(ðÞPn(#%AÎu×ßÞ¸³k†äÀLO«6å‚nƒ€ˆÍ¡ÜõòqôëƒöJW”ÎŒ°#%ìž)_½ÄÇß[mª¯/¥ÆK-8oo¶gŸêÕô~8õqfŠ0Wé88  óßÿ„#?—¢WèâÓ F%~¯øù¢éääm¾ÇïïÍwÃêÕ:¤ãwÁCÝ=•• ¾L'ß;9³ót×Ó?yÔʃ!ч>•ÕžüÿÀpM—Ï)Ãgæ¿ôÀ>i@§ù¿¤þ?Ëíý~Ÿ7aâ{‹úÀ;Ø©üç˜U8ãçósŸÝééæjàú6+;HüÃö‚Ã÷d£±fíÁ=l #?T,ƒòöõXá<ÛÔLe˜¨G‘*¢¸° .*ˆæ;E…tq0P"'‚*À("Óèãøýix#D¨ðö`í?g´âËÇÆ®ý¼|1µS×˦ÎJ©¦Ï¤Ht”lod&ëop9\´#o2pC¿#DŒ×HŽ¿Û×™½°ý†a˜hãÎõüÓ“8äAÙÜÀKèzé‡FÝÒwòŽâ£`î#·Ýk0̈+ΣÖw¶ˆ;7Ãdï¹,vpáÔ*°}ŒàG€,ÚoÑÀ#%åC¬K–Ëa—j(Z!º‚ å¾hP' l@/d1‘ñpkÓ¦{ö ØÚª–ÉàNÔ§ÛsÒÑæí¶s<+‚ÐGÁ’)bÉÅE2}U¿w3cÜl~nFv~ŸûñPÐ’E#DЄLª‘År‹ÖOËÿÇۦіƒýó£ÕïÃ÷½zùýeÞªžÌà:¾ímós°U=â©øÝŸÙùV_Ýù1® fŒæ¦‰#%›©Õ…&Ì% ÌB+Ek{„|ëcÌ(ûÿϽ 㯼\ïe`}q!AéÞYôs¢Ý~ó#Œ4²€Ý…–RîugòŸ¼ÊE&ý+LdFƨ³;ûãùAe!–ô|a#k£Ù³ÿ¢A;afUd#DT{°`Pú |¿øþ#%ƒûˆüÍáöý\ÜöÆBg].¯BIï‘î9©#%Ÿw)úý†å¿#D5Ô€"ýŸ/ñÿ§ÿÙÿš#?ÿû8Q*~//þ©ÿÍ%üÅE‚—,žQµ¨Z®ïÖfÑì˜4¡y›[E„i7”^°„ìþ“•ßuö-lÐ}þ³ðôí#?’$Î*"¿«©ÜÁPß„•áŸ>zýf¼…S£ä»]C¢©°á ½H¦ù! ´K¶õ¦¹›Š¥Ñ‡uÜT:,«ùh~ÿÇj¡k—Ä}-èƒg„F”*6“ñyBß8„»k8÷ÿ@³‡¥Ìåö€Ú½Ë3>\ºwÝ»²ä‡3—$?<)Ý·NÝë°?½üÿ§—þÞÔøùþ,pC„€CÎûœ¸I$3”üÏõ¤”ÈKgïA};¹®Ýý[»„¿+k×£I‡-îëžéU£6ÅþÛ{†Ø µYךYZÖ¢#?ùÀû¿Coü¬#%Ta>#%ýÌpe"¶Û«[Õ$G´8úC#Dˆ<_ê^ײœ±ø L>¹Ê¨ƒPƒ«%§ö™² ¤:0Q±6 ‡ˆ¢MPšê€ƒ â°mÒ @á3®}w?÷Ü‚‚¾•fͶ—ínöþC?ÁŸã¤o ìúÉn‘˜š Ë úžÀD†0cQ>5«4kïþè|¾^¤N}Dèª"dÕpQäÐŽµ 2$À@ò|¾$‘Ø« +ÀRêº.?ÙûÌ‚" aþÊù|È?òøÆ2Yú"îÊ)ùÀíï CîEÏÌvd-¨G‘úµk )Õ¥;tÈ#?H€ ÓGQœ¯¾»/ö^¸ #%#D€ÔâÑ‚è@†ò+»(ÖpUÞn(‘¨&\;1æÝšíÃgLJ=†cõkYü{ÏðÛÜuˆm·>zIÑ“ èç! Æ&Œ›U[|<D6ºÂÉ1ÇAzw¬ILì7fa˜ËÚó„DA£Jþi“Fzßt&+4#%#%¬6äè4#?éïøg¢@úl$bB/,é„øÞ­=ZýÄ|Û/k#ÒÍ9a=Ï>~žŸoË£ð·9ƒï±ÍE 0KSm‚€¨1‰1Ü?ÍÕÈ_Ò§gÜÿë3èóߎiÔ€‚„c‘­¤,#?±ÌµsDz-õ÷®ýkÕhµÆªï“ >SÌ/×òÚ¾ßëý’K°Dê*&L‚ÍEA¶YÿUi®5¼Ÿ‹:¬æ2•òe¡5œëø!Øý·gŦÆhšx•&Oº‚vü9õ1ù¿ËK1kõÜ ±[7„TØu¨Z j#ÖF$\uc éTU èE#%´¦Õ#D?höïôÆKÝd}&ʺ­ºq´oÔ¢=òúcQ “cªÈA‹¸âùž‚,bpž ¨Q‚w#D/ç˜-ôiuÂÕÇíÄ°Hs„Mâ{1#Dƒb}Kf7ȻĮwˆ(ÞGˆÄ8DS¨GxÚÄ@|W±xL-“êôw\ÜÑm£SÄ0  ßãî¦#Tôr˜fófò(ˆ "!@–Ø}?'Lj†#%ü6Q¬ÒÄDD›Ñw<àôü]#%#%BìXýJ5¤#%KM“uU.Ò3ÚÞqÓAÞ?¨´î(ºÝuÖ¥ñÓ¿}z÷ÿþa¨pÈÞ‚÷yi#%†úv»Ü¯ÎÒ~¦’þ›ðÇÑp¦1Z2Øý“åÎÏãÇõûî’!Jv“íúP0$J¢˜µ£öë¯ÇƒÍzÌý¿ƒƒç¿Ïç4O´”yOìP7Ó“ƒîôxÈï^ç&ž!–J˜ót)2>.#?Ÿuú ¹ýã”îÈB@R=¤§Óö‚Ò@XYCD\lÅÆâ™aMn~zþIÂsmøqá8þ_£wÑQ‘F?)ä€#%#Dtšt 7òO8ù‚ [­‚‘ñ|Ö¶#?+ 9=üo|p´#%FvjÖçÃüYϳóG÷/êëQùýJ¡óñ›þÈQÿÅ{D,Kßßâ¯Ñ[Œ¾#D¶·ûT9®‘’$Ê—ð§Ç‹Áü‚3t"’ÌØ󧆇¿Ú|=¨ç…´ÿQÁ^‚÷= óúþž´H¢ò G[ñZPo‚§¸Æ+àS2÷X€„®2òÕ…56wÊ0T'ÆkØ¢$ ÔZÖH½ê&#›î·ÓИΥ¼˜âÛ"J£´uþ}ýƒ£Ø;¦ˆ¯êâ$™T'Å»ãi‚B‚T/À|Z{Ž¬N«B­þ“mrMÐG¾h• ­xë›’ò””¹DÜC0„£Íç’MWýÝŸ ¥Ó!ܯ‹Çç˜øŠ@çÔ̤ñ¹Q6#%GŽå¹Iúöу¤þÓÇ–è¸l¸nö(H<Å/Þ8"mdp3¼¾wóˆ@sŸ¾Lª¿ÕŽúc{#ËÓ0Ì#BœÇíÿŸq{¾¾I[yü*ö¯$#%>,ˆGãåˆIÔzu“Ó4uÞ*|®H¥N 4pBÍë?cÄâ*¦§&ß÷Sª &K±TÅctïü?Ù•è8%’d‡#%ò‘Ìš”\VöÓv¢ª! £ˆœ…Þ2¸†c#DÅÿ‚.¿IóÁo[‚VíDJÒþ1¢ 22åfPORü8ç‘ÏÅ¥‚¢Y Ú ÅFò뺳꧕™Ý¼Kг)é¹÷Co†C+#?¼}¿:Õjå~s!>‹åx/ÑÌÇœìbA`í°e.Ì#?ÈDÛÄö×Q€a¹ óèôÿq9=AÝÝ Þì–2 ñƒ(½·êp!|úvõҬúŽ¹—7¹^µA#D¼úüü’:øVzV1!óôï¥%²®¤Þ¦5ÀÖ/µúø5DH€¿–[•Ñ^A[ÁƒÕ¼7°Å-<´‡¯øÙ»ùþñ!½ý k_Á¶ãš Ó4)·{#?2îפ'Joˆáª±à" ­³èèlÎ×¢AÁF$ŽÀ¹÷YÜ#?“õ¤ F›×÷úWK§àó‹d& ˆ™ÌŠLõù¡ˆ’ ‚ˆÄ2ÖÄ O×X7¡#@ôo}Ì,A8æâv¾¥=“E|¤zT#‰v Ù™!ZY±€û]æ2žÞ²ÎÀ ÛlµØ‹\‰}bÇæ ó­Fy$5÷~ÝzúºíøÁ@#DR2#%¤ 7 #›¸{uô×Bp߇äÝtd¡—^7¢9Ç—ÇÊ~ÌÑ¿ü…E‰+y{ÆSÉܶ¯"¼éé¹:eN–þIV]²ŒW&Í]WîÞ#î²;|þMñp'_;S~ÆA']þK¦qz4!)´Ù…Êé+\Þ±ã;hø5…-QßÆp˜˜Ž¸µáÐ_+:¥ÖëOWJÞ_œŸ¡GÜîaæ¨|ˆw;Ok2ä: F/âî|ùåÅ0I8þ䪅}V•ÓžÝ‡wdz‚Wι1ïoß#“Œ7^ÑWìäÄíñ™‹ýW¨â„Y¥Y:‚u8Âûi”.¦dTÞ0gUæ4’ÒCÌ<Ʀè…ÑC²Æø»€ÆmŽ–vfÞ,B‰MRL–½\¼ v°ó5Ð1 -1žé6íó`-PÍ‹qcÊÚ×Ñõ¯á¶4i´™¼vˆgí˜0˜(Cƒ¦]©9Cå~y1UVžMßLÕîÚ׆,'‘?øP; ™_N„‰o^"ƒçÿ Ÿ‹>çû_¹wœ•àZeÜb æˆMEìùl™›(½<~S……x+HcEꌈ’ÀëV$ã^Z–ƒlºÎç´&ªÁ‡Hþ^¯±yMbÀ9n'Pçóó^ÕGÙæåTJ6ñ¹ _äÎæj¸†å¶rï88ãåÇí;Q÷oéoˆÕÃð"\â^Güj9§¤çÿN¤™E9¨–P’ýG’-x«‡Åyà‹¨ÔLü¶q¬»ÂŒ*„KP5ª°‹²…#D;·HY<^rÔoL-ÛTÿGçé’_U×<í˧‰™¡=;Êö~àãÏZ˱'bÒHCoî‹âЗE1ÚqÛ·jÍs#ÚIÍÀ½8BjF3öP±†‹|5$5•Œü_ .Ù¿E=ãкô¼fâ\Vœì??nkªëòòé9Qhsd *( áÒûÍOîUøxé㮊앻x´²dõ5˜Þ¼¥tpvQ/;µ¢#%5µa#%¢#?1ë£#?+Îqù|jÔC /mÛÄDÖ^‰4Bí º;³‹Ñ• xà%ËÜÁ7û˜Ä\W˜†²·45IF§X‘0ØÖÈ0#Õ±yè£Pe;Yû®ôa'm±¼UR6ÁQˆÔ­d"QÄšd;¨%ÈXõˆ8BDçÛɺi¡”êT…nu[UÁI³Hº.E‹Þ>)œ~t¡¿_ÛŒ`Å71ô5œö¤%-%¬jîœàe6Ž½nÂ#êeœªhˆèð. lXó!Îf7èÊ>oÅÔ\ûG|ääùâ#D×yóê¨üjÒß^ÄE§ór—Iü,`ž‹–þ=âþ̪3 9E±š%L;~HìËøR cIt:NÎú³;—lÜ]_Äyƒ5ç9DÍ~à›Â:1ºöMh·?BŠº†ýO­Û¯+}ÿ}º®TÁ¿Û#?R¢`deô°@ˆ€7„{Z ÜvøáÙ¢õôLYÉÚI“”~L»ˆþe¹Lj?Ýû;÷yÃ7k ŠOaý°ÙŸcËžrDeF}󞡈YªÊê:‡¹²,iÁ05‚cåÏ?æ x·ÅL¸dËK>fe«4ÜcàDšyÁ·0ó._„Lˆ¼l`Ý¡\Cqfà[¦ò¿ð ™)*¦Õò6 q|b>bùGöŽ3ûšÚÉw"öUY^#²[3ú&|½û¼‚…Ô6ç5-Ê£òs€§ýë4œXeUÚl<½¶;…(wêj`¢ ÜP4€cÕ9ìw;ô¯Y¿zf:R+?fYþƒ°ZnÝâ¿”üyÆC²~ã¿mjRÃŽ$[ÄNÖ;Ìrçib¨‰•\$`(^6´…¡@\™©&bXŒ=77o"»scî•ý:××T1W ‰³yÅ„5‘ýŒÁÒOæ„C…B««%Çá½\ä«»0&E(Ìð¿›(ÄJìYÌÃð ÃzÂ*é©çš1k«;“¦?Kƒáûñû ¦Ç‹7à­ ÷ñJ@zåÁ ÃF¯‹§–¼gkåsêˆ8f¹¦—ŒÊͤ~û>Z‰sÏË#??]ø¿µœ.-émÀ ¹Å\ìžÐd4Yä8ïáü0­3Hs÷¯Â£_»ýÿ~vu|RL¯›K·R²&„d° sƒ#DKyL@?u^Ô)Â}¸>ü÷ióÈo–ŽÄä'ÉKÐ*n>_£‡pÔ”×ù§Õ¬¯š¿mÖ¾‡]K€ÁNŽÌP•êÉ›Ül’ùC¼äýÈ;Î’ÉÍü(>å,`C¡/ûîgËo"Æú*6Yšš,‰!$¿sì‰C­ 8çŽøþZé²ë·ÓƒìB7÷±ôٞŒº€ÐœÓÌÎdéQC° .b ¤|ž~²6%Â}©mþ?Ó5½îºSôQ]عß¾íÔ¤»!5qO‹UTöï§ðº¬Ú¨#%ä˜,ßOÅÏãËšg¹ø³·Õyºê¥r»!‡µCÚhR1¬8ú~»Ç0Ïf"¸wh-˾Û-Œ>ß {ïÛL©ðÐSÊ5ýbÁå¥|Ûš#sóK}}ÙY,³å#Dñß¿mPÊÉ“sckú¶Œ¼Øá§í„É ëUÞ)±èÅM=õ‡‹ü¢D‹òþpJø¯®:Œe³µ`ý GÍ)#%—<æ2Ï‘1ÊO’ìüˆ­uÖµÏ^5Çï¾÷e¿ÄF(´Œ(E1å¹¼÷gäð OÛFvIôVŒŒƒ»dþ²#?yré·¸êÝHfÎ¥îG¤P`ÊctÖn ÕR3p¤I5J„¼$‹ñz2°8‚h#%`O08äRD–0µ‡%«?3l_wlÓÊ1n}üÔ1‡Æãñ÷õM&Ð:ʆT©­Ó¬]®*ÙîxñÔ0¦‰Kôtõ­¿,’6¤„rÊöKÂq¬~֚ɹÒzv•¸”FÓ Mµ(h*"óº%§qïÁíÀÄäÃ`ZÉõàlp‹m`汿7 Ú9¥õh£O[Œ ‰ [GÕ›© ‚JÆVn’c5´[})3ëòqÃ=üºÿ ¾^¥žz5ž'ƒ×LÃóž"FÍÃA4‘_Õ6À“®É˜åa3KîòW|bH²=1?®øŒ»Ê\b84üÚvgIs¾ðq+D¤@¡1Ê%{üíÊÔ@rVÈ7™”tBÌ6aë*;)ÁÙ᳘˺ãP1®xžSæyª­'Ybƒú’³ð@m ,9˜Ùza)‹ƒ(J9BBlþY(‡WV™‡J×+UÂJk² Ö‚±plk4K‘幯ÕKtË­ÕA•tµpßÈr+’_Òzöê=cïû£·2âÃøPêÚBÄLEÙ»¥Q¹*nÛ6ãe—ÙöÄ& SjJ ÿ“AâÝÑ!ü´#öXŸ>4ðsâ|Þ˜»±LUJ¿ŸÐöq ý<¤’ƒ©ÔôÀ{È糿]ã‰è^h¿dÚ_q>ZFT,«ÔV»qÿ÷LëqÌÇñÊ,]`ˆA»åÃõ#K ÝÑE7ï£ë½Úº<5AãÝ<¾‰_!9&mj¹k¾ç‘± Â57µŠX°$çR.Œ/qD·‚Kª~?ète8”#%(ý¬®ƒö‚#%#‘BÛw®hë)P¯ó‡ne*Õ•¹;£#%¥)‹òý]O4Q?ótÖ€ºDH:²9 xNî´üÂîñtp?6s8ª¦¸.ôÈ‘A‰Ñ€èž<Š:ü5†ŒÒyZP@×h»ADòz¼è÷v$¥yw±=®—‚[IÀ äDjòÜ{Pô¹»È“ôP¢÷ü©N®Õ@{7kPáÉ[f2O#D…#%Ýä#ÝüGë8#%¢P)Dz÷ïy.¤ M#%Ÿ„éWüФ£’‘ZT( …4‡$I„*/zýDjø‚m#D P*z/ÍÓÿSÝúõoî}_bx{ÿq§²6#Oè}Ú»í=®"Rfd@ ÚÞʨ*4´snèºmM(¨º„';ÌC‡ùOð è#ª L!«x~„#%|¿ýÞDèö <ÿšíãèýN¢?“–×Å<#%¼¢@’¨%OUýßmŸqþ'«PÙü>úŸCt[”)‡\#D‚d)“žc¿Î¯,{<7~›#ž™¦dûØXÎÞõíôym{„FŸx’(Ã(¿èÅ#0¦™F¢´¾³h€®ôðé¤EZ§1hu²ú9¯ì rBdýFЖ,A¢ªzHr ¢ˆQœà#?ÁŸý ýö%ƒÿÓÿÙrþÓŒgýÓ!H¤|ÿ4#%}hÒ˜µGÖ8É0W0ú-ÝHӨˑå&Af$»6%d¹N9!Ãì)¦_ým›ÝšµœŽ9ñ—dHQĪbƒÊ¹Ö\ƒ›5²…¾¸i#E#?1&H=~ls½G>û„áõ8sçbFõ‡4Á¶jµ«îžCÉVzÏÖ_o,< +¶–gÝš_v#?}ÜLADDzßw™:ÚÓM[`ô{áÀõÝXÛm°g'ÖíIA茔?wÿ¦xwF*"4kàÈhåïµ»QD݉û‰Ü’ÇÝq"ó&"•üª< â@¢†ÎçhhØ1ÏßÂõÆÿ²k]æ9dÄ”hÅDFÙ4h×—#D" Û6ÄdàAÒ0oX8³ÍÛœƒÐVŒV6ŒÛ~¾sÃ)ZP #?~2£Åbd–X !@ä M9Ûl%¨ÚqUS˜{$9JŠs%ØŽš*RŸ´»øzɦT_L‡»¤"j:Ö x±HÜŒêׄžá_o25A P#%>/³ÉtPÖÝ0­Ã·†E§Yr@B;eé$©(ÎÞݵÚ#%r*‘Cà?—’ï2:Í“°Šì#%_•ËÙHò% ©)TŠ E75ˆÔ1s(¼€SÜå•¥LŠvb‘’œ€ãø"!î…Oi5êÒž{÷ç;å‰#D]#DWÉÑwèzE*˜6Њ€;È ¤‚Ò«¬ìB‹Ñ]¸¼†Æö/ÖL ðaN’`” ×p7Ïåô~HýŸæÛðæÙAËvÃ>âÓýt?GéŸÐôõöRüXùíÛAn¨Ã‡d<Œ†b1i°âC×5I~ªïçü]Ê hŽñüEcqÉh?ä°ûͤ”õ¸Ã(iù'x~+ú½ j“·F¼ø¢ ñýÁD–ó¤E!¡ aFàTµÃ¸.B² "ñ¼oÃá_›û¼5JR¼d#%ûÎÃcåðþÓÜÇÃîßí¹CІ0žøq_,ŸN™™?vàóó¯@’(`ÃbHî7—C‹ÊöLç1±%e%Ei’¤Ù¯÷´´ÇÇqþžRÝ ¾ X§B,Ê3†Fšø“'Lß¡#?ZÙo!/wÈÜ"‚j6Á°åS„ën@ìl‹_ "ºDÓ ûFšƒFµSåïP‘ b!£,¬»©Š¦1#?âg;ÕY’¹ßïßç×'÷¿wK+<©UA‘#%XBƒ³_ï‡^Ü$?´n¾AX>½Ã`æòù¸h[+ïüª¨>톡#?!¹éìt?ŒÝCæD(@ Èïíqî? …QÙy¿¨#í [ä2Ð&ˆ«qÞjõý>x) GÛiì-5kdÉüh/_ú"—ð;sÀý°u–°¸;˜Qo”h#?)ÒPUȈÓ÷5ŸÊpeÜÛãGzSÍ ‰u®±O^¦KW]WJu²àÅ ½í¬?“'åÍD„bÀ› :¢¸a7áU×_ 5C_ã诶Ûu£ùýŠeÆŽÉ4žž)¹ f±i‚p}V¤Â–t !öa²É‰¾¬:ß솑7tÇ΃Ç^0kÃx9<5³5›5¡Ä‚2 8á> >ÜKãxG¸I ±Ñ6âË>o“¬¦w-ïø–àŸEm'd˜LÛk= 3Fhb±½%Qö×U¯m·  µv’%@‘¶@ê}„·NÞz;6[_â$ØGbŽ%zß„þñ“{Ïú7û¿GOœ}^Áæõz¯ôèV¬B?q@Ä~+üÍ“¦ÀÿȾ¿tÙÙ?ÜôJ'‰­7jŽÏΩƒŠÎÒ°Â2Ç8Î^:YËËD™ îxeîíþ#?Ë œ†»;÷±ô#7{ ”‹¥¢bH#?a^ùF?ë[q#}ú¶T똀62³Eò¸²úi‰%UÄú-‘ƒøah3kÇÚeœSoÈúåá¿OêýÌîàä2MÛ@˜pe/ã\w¶þpµ[ïÙ#?Z}0vþn;ðì.~C™£ßÇõ÷áÙÞÎíTö˜`m ÂPá(h’†©ûàQ®ÌP‡«—ë:Á£È†Í>C/ZÍÇ*ü ¦0¡(A&"¡8þß“wÌ|>_—æ°Z–à©…ÈŸàŸ¨—ê£ýy_ñ«ÿbÿ#%&‚ãÕ,@ðþÜâœ8ýb,ëcqŽ5žZ_ñ‡l=d¨áöªG#¡vÿ¶s?ÐQ˜L„„‡ÍþÊСø5$<üÏbó·¾@ó€Ê†R83‘#%È<ÈvÎrH„5Ÿßj©zIg9Á7“bF Š_|‘0¢EÒ¶&½l™ˆ¦­ó’IG‡²_òM‰î¹îÄy‡Oöe„ò‡+_AÙ ¤Ø‰¯)äH˜íôô8í#%œ@ °2€íP”{W´ó—V'¯°œá§Óí{ŽŒ¿;=/¹f‡.s‘=Ïy¡çP= y)_a;yNwé~iä4(óö%°LUBF¹V‡ˆIr§Mçtwžüß—I>„U&´Š¢ýµ—É6‚§Èˆ¿( #%‰x°…y—ÓAþhϯ6%|!w“õ|tîÓøø¨ZÂôhˆ`zÓÖAºt?IfÐ2~ÿ6>m:~¼q&°#?âqƒ£ú3<s'a™6!ÎÙVïׯŸt3„†fÁm'2¤¤9¨Ç¶7¯¤×Cêy'¥p<ý …=\UDë?‡Øx³g·ýÔº`üÈm¶ÿFAç¤{#3N.ú™LAT¿`w˜ý}ÊrvÏ&Ø~Ÿ_Ñ, ‚ºAFEª[L I/áãCî#?nÂØ}c4¿Ä¶éRòä!Ð'½Â-m¦ª€‘ÑÛ0ÄÖ«5P)oK.DJ_*¿X‚œ Ã«‚Î9ÖAñÐÍé¶BuÝþè4EBsd©®~  ¤yæœ#%c&ûãž«éÁÉXˆ3(J()àŠ¥¬ŸßŠ×} Ê!)Ÿ?»ïü…~?“ûÅÛ ÝÒÁ°ÚÈhW hŒràù#%€vÙØ&¸F£^“ñt°Ž2•#DGööÖ 5–b}ð54Æ‘æ}G†6©)†î²øsããÅ^&eó™¹t9ž[bÿpꞎlº€0ûàvWî>ÿé0º¯mo~†¨#L”b0°aP|3ÄçÛéSX['4¤ò‡ôÉ%PX(0øñÝC£Z$è/yèzƒSŽÐ£¦Iv'o‰Ùž„N0¨*+Í^¦ûM}Ñ`ùQº­|Ê ðPÏ *'gj®]3“¯´øZÆ«øMæè/4#DDpü~Uõg¬£Ôáæ‰à“ȼÊÑÏQÜ$ðô7îžäÉ:@Î@×oÑïDk™Ô:†ì ]ÔÓSÍ’=Å@ç3%ôÄgã ò4:³')øU3« Ù)TÙæßq5§#?Í0BJ;¦’”(c[4mß0= x½Æ ½Á⸦(h}_C„¾€ç©¸ž(ùÎ8GU%]»AÜ8R4lrSF4Ç„eP]<ž_|–Œ-’äõ˜†?8tácÅ;(ÐóÎ\ŒsöÃjyœmŠ14ÃÃÀ‚A*•t†¦q0A–ܘm­KOWQ¬_ï.@ÁÅMô¢0~_é°Ñïô.èATP`°—¥€QðC‹¥D óv›ÀÚ Î³\ɶæìÈ$¦0ÇüV|ŒðkU.A“,0&´8íþ&Í°W®˜o€ÓÎÆð+åö$¾ôíþhp8Œ8ïþyŸô÷9Îõï©ÃãV§/q &%4%ˆ5k:.i-¯ÝI¯ i’ÂÉÄ'µæŒ˜9Î$3èççR êÿ5¸Æ¡.Öôhc~¾¶¬Û瘹LÑ°Ù)§^ŒºxÝϯ<#Ü›þˆ6ûÛH1+TÑ<}Årìðõ„t…tþþåöoçG&¢"Iš¯îäÙøVääý7õdGéc2@û€égø†§Dû4]ãòÝݽ™§åÃ'ßwO{/%¼®É”‹]µ†“’#ÙZã›Ø§¹ Ðż•¯eõa¸FUh_øCǶÒß·¬Éôs{åi˜‚5%Ú¶*z¶}ôè{ýþé§û°š'ßÖ™9ó'ó<pìÎ5\ÓÙüßÃæJn¦ N/3}«–úÀ8ÜäßñaˆØ:~´.㮸ŸÈF×ì=“‰Ô Û¿úÂàÝöO®"öP¸õkÈGcF;iPªÔbmh{ëo#%ñ;öHÇSÈ„8Áƒâc²{¿êä#%ûlJIÒb¨ðDÈqÁ‡WèQª#?´HƒfZ]:i)5W¶ˆÇ6Ak—"Õg<ã[…Ú‰#D¤¡¢¦RxZg S ÿ©¨Ò#D-<¿Ä»6ÆI!d´.0][ºI$’˼Ä;–Ä2ßÛk–þôÁÝ$Ôëì×÷yÏ4æ~¡Cs yó˜ d.îÿüBêýã1v¤hȽ#%d›€n)©C½QJ…zÐMý?nù2^ç_3¹Ã6Î7†¿Ù¶ÙAÙˆFŠm’*A $²0quîEAõYõ|ß²™üCäå q’Ø”ý#DR€"ÿ((Ÿ´xEúÆj$ôüÝ@óùº´Yc?ÜîáÀÈoü&^G™©ª ]CS$ƒÿ 㾦lWü_íbí±¥=·ðªÃ$ÜJ¨6~›¶·'b|IüÀtŽÀ *7s¨aäªÄ§À¢y£n5µkl3”š˜7ÖI-ˆÏßÛýc-ê#?®2òæ Ž°ANŽ?¶›pråå›*ñgïCúÞ=.‰Ãý+Õn -=åÌ.Iá˜pæ6{¡¤*yY3³5Ö3­¨FŒ‹›,Ÿ4‘,äH@T#-˜>1 A:Ra!0}#%}ÿŸëþ?§îÿ_š|©÷Ï}+ ךö#%‚ Ã ð÷mtþÆÖ›N#?UÌúvø2Wòèo5¸iå¥ðÝg¢ª¤HŒˆ\y¦Øß|6Q{®´- ß7Ø“@°Ë\=""⣠i!èöØèŸâíUëëòXwlqÃúÿ#%¶2aÆ20 ôç@Ç ÝÍ€XwÿO·ù¿ëg´`'ã›méÖ Î PŒ,¡Êùå{}#%õ¼N]‰Ñ÷ýçÓÍÔTôŒºtŸzýZ«Í$·bW4TË׬¦ÞÒÛãnú$î_éy‡MÑGÍîë{uךˆGO- p<¡sÝ52 å%'SÏo+È÷{èÓÃ60p”¶R9xxa®#%€I{†•G…ÑEº€r.1,ÐÑ’oÈÇ#?é!€ëS°c´ÿ/#ht’N݃h…Þ#D{lð O͆kê?õ?ÝÿÃÿÓùCSÒÅÙ Ýùšm¾A»²„Y#DzPía×ü˯eß o9ÓËß$ža‚á>ëÖ‹=…«#(=³‚q5“Ød¨†ùj2ÙÑt ‰0[#?,˜–8h63%"!±¡QÉHzûJÁýaûþ«ôOÎ3o/Ûÿ%¡ò Ì¢Øùý֌øõ­§ý`×¢Ñ9ÕRäÓ2%~ŸÇŒ,0©?†•¦L]îB'´Ä1Ü制1@Þ™]ëí&K7™ý¯4b†u|dáÑšNî<±W«(Þœra­ãÖ«a[Ü4ú½Rpnd‚ÊqV8òÂåvÆì)²¢#&Éz’I$ÍÑi¬OS.µšÇq·5&±U­U-oY1WÃ&á•ê0r“6SZÀËÐÃŒ ŒÕ.ðÈýs¼{ÝÔÇr8DäAû3ªe™À‚mx¶H0Q@ÞÀ#D ûïqÇúÝ9Èyäno1D˜ñ4ÏϨ¨ ‚ˆŠ¼|Ë(f+fì’¶‚!žÞžïooáß×Mdûä ~~«æcúÏåi_¡Ì-XÛ±Z³¬]vØkü±eØlËr1!¡–š†Ô0à„ÒõÈ#D®õešÁ‚H‚!&NbŒÞUY×gÇÉW^:ï8á¶ÛXIRrÁ)ýÍÚ®mƒ}²å¨©’bàᢡk)b\(U=£ÅµÐmÈÓÒµåÒ¡×ovôäv‹žùaÚvŒCKå$ù•K#D#%ÿ>|“s]§¿}W/ûå` ulžáèdú]2ñ÷üƒ”/8ÁÜ-#DSÔø¯±%ÁíˆïíåP¶ŸWokÀ<#%ŽØ°"™À ̆*B#?’h‚„¶EÑüÄW_Ÿ½½67Çâ|…,ÀdÄä}å1ÎÕU§ß€uÿ8uf€Ì‘‘¿–‹)WÈØà²ìÉ :Yþ#DÖŸ²¯3#M°âK?Yõ¾Çíü¢Ù<ÙâBqû?”t繩³jåïÄ!ô{þõR|h¯Æb–Ø rgöŸ˜¾´mªh†¶iPgœ5Å¢b—ìùüûyGáCñÍï¶&HR@d?Xw?wÏJ캸>}~’ÊÊP¶…EMt:kÎrOå²Líuå+‘XÓÉ*÷B@ŽÆÏÐAÖMÍl?2hò°@wèþ{º{¿9ò;ú=C‡¤;ÜPíê\?X"]Àü}ñ¯ìÿ©·§cп|š>“aÅù}ê™U¨¸ûüN_‰õã®É1sJ)^|½Úš~³ÝôÁí÷aIJd)Q:@šAEtèȾq#ZƒIÿ–CÛËêuÜ‚óû“ä‹°W÷v à:F Ÿ?í{ý™‡%EB¡RMOˆ?_)¾`ïqú°€ÒG€ÿ…2IúÄ„2—¶Kî ùuû­¿{e긄ªr$!HÝ}Ÿ8{ý¿¤ütïƒõ’¿åJl }!6¡g‰Fô1Ôb#Dö‡ |É4Ô )ÃÝQñ(—S‡Ä(²D”'ØT;3Ž õåýŸZòóÅR¿Ä¢P`$ŽxÈì1pDwò{†OâþŒ°hil1•óD5IÙû&oëý¼:‡%çN½!:ž@x~™#?{æè5SE‚<~ÞIªSJJ’##üGX&„?,°Éïð›-:OqÔ?jNÿg³`«?'f%H²¦àc]šcóž@šz_7ùÎ.Aþ®ƒ}ÚÁîéߥ?ˆíÖ^ïõ€G¡Ù¨t $ÍÐ;Àý]¯>'.9Óž¥TÂ4Îi¨büŸ¸Ô%$DƒHT$œýŠ5ÇnxO›·Ôþ¬–ÝìÈÞ@Ÿ½™$>†<HÑ!;ƒÞW‹ˆoJè' ¡Ú;?'©3êý®ZMTCDÞí´„51f#%ˆˆ«U,<òp2óPKÓó,Â|,_¯Þ#%¸«÷-„CM§î°¯µúÊþ- –fºÕ3ÅÒOÕSLÏ#%­Xf?|®X‡­ÊŪ(Áêä‚ù#?–¾p8ó_µ¾½‰}ŽÙ7`ÂaKF¢'ä'ŠŠÀþ;×Iô§V†r‰Õ>_£ëüEþ´íÈÌó'Œ./pæغT!¬*šGF9ý‘PT}è€Ö†Ÿsö€õ’†huiÄ€:«¦€@?GÃâ¯ñ$¥qEÕ7L:Š`TFávÔAÎÅ<àke#?ÅI ¸_Û”gæ]ùÈÖ§°#?,ùsT^Rk!±Zà…iî~v­‹Ž?Z?—ƒG¯_³¾ÅN^ŸÎº>oŸŸ^.ÈEœ®³éÊÍÉ’s‡o—Ôò;I¬ê"Ã$NsYÉö_Ë6½ª ’_®1¢ñ„‹¸2{Póúöú0¡ã-ŽÖ#%“ 3B_;i.þaë±å£‘W¼Ç÷¦ˆv_ í}ð3³cQ§uÐò>¿cÀˆè¸±‘Ùƒ6žËHk‰€êjnÓîEul’8˜` /#D¢GÔ°ýŠ¢q³±©P¬M¤^_ÏÛ ˜ÀÁÚ¢""±UD –sÕ˜ç¡Ø¶˜©*–c¢æÃià#%QÖ#¡í›DŸªòõñDŠd’ED0 k^]ÁÓL‚!H¡ëßÌ,‚†®#D-1ó"x>pQ{gW#DÔÔÁ¿¯Gå<ÈÕr©rÁE±-.ùFž=J{¥÷#%|Ì\¶ù›ñ=`w§´à«òœŸ3èA¼Íéïï‹ÏÔC©î9gGJúS_jg'½ëp#D°ÚXb“8/Çùßß>Ÿ]üY=¯Û–~Wô¢oðýsñ99f1øü}‡,„Ôë>k±»5u‡ö}›Ø´55xä Äõ#D’‹PHÓûP&>Ç!ÿaÿ‘#%æ…0¨‘ª¯è­t¬Ã#¥Ê« ÎÑši½Ú ̺š¶¢ ©¤…`Úo70`{õ*BÙ/N7”£Ø2~ô‡F>Î~²GŒmž§`AïéÄyTzmÍSgŠ…$þO(^ôk?£ï(®.s»då[y?cÊ¿å?µz#%z›G, hïùcOʆ/Ÿ¿°Á¹ŽžÞÌëû¿)ÖöŸTYØ!Ò#>ŒÌ?F¨‹BB‰##³O¹; /jx¨õßõòUæ†õcÞ:|6›Ã€›q(ICT%#î®Â_h[Ú+äˆkHÌKø» –ym —Àž <‘P ˆ#%s( —[ƒIÏžiëÛøwàÃèÃøÇçÔœ}„((0ì%šù:_5ü‰,ÎС¢WQ@>CD A¸‰°9z°X" KüT áïƒÇû,˜ˆ±šÿÇÅýAÞÖ ÓrU•#?Zð­Õõ ÷³¶Oç³e?{;úfÑ‘H°XéFÒ|¾o]kùOã,”°d¡¤›Ô˜`7q?¥í†=$˜¡Ã—Qo÷²¥³†œâJ¿KUÑ`ªœ”=QrN)š“‡R ˜×«Íµ#?ä¬8_Ü›B?‰ˆÓƒ þÂâ¨8€|~渌d9‡å°1Íéá$¶I•{Ð?QÃÆ^±ØÑTA cÂ&%´ÍuÒ%OÍtDî[¾=0`˜PyIXîhè ýÍê^h£Ãê#?Ž%}>µ$#%õ»k#%¬TyÌ;ÇÕvAܼG öüž¹†¢ªôg.X¼øHQgâ~?¹ýfÑÎŽh÷¼(F¥’DþQ… ~$£N‘¶6ÓôÙÏàa¿B¤Ìh¨(3 ÖG·ÃWt9îRÑ@>€ªÀªÈ©`9ws†3ótÄyö'€š Ê~p#%Nð8§p³VäžRi¡öÓð0PÞ ZXÖS'òV;ÑSûQ)û‚ЫKNf7¦K¥¨r6ÌI nè›>Üz ëÓ‡„Ý’Z#×#& ¿£O-ˆÀʱàhhq²7È'½>1ý/Ô:ú'NÎÔ Y€ ›ÐA†±zU°`³Š5Önl,f+Ù<ÅÉ$= ˆ:N•!7'{çº$ÊùŠOÌp¿×Ÿ8z—Gh¨Š:yÁãÐhz% ˆ…yÙ%¯=ë70P5 ö½ôÿ™“ðÓúKì#éˆé"Ä`ÃÙß#Dü*Ÿ¨9ÜÏ;-ô(χœ~“8ì{Õ4û}Ÿò͸èò-ÿAÄ}¼怃ŠÚ‡JþWÁ4Ôã0ݤtÂê '@`†ƒAÓöGå©|ƒFðãp,D¡¥ª°ó²’CEd¤Wgs‘¤/â77¤wütÌÞLG`Òü¯õSkþQT··Óó#%˜=RþÁÉ…#%PÂ/Zÿ­Ôäuýè{¾Æsô~Ο0øöÖ4’rþÁ˜`s$‰jB€OÎGd‡òÔKý:—ý@ZÉ%Ü/2¾P‰<,„¬_BfÛ¼æÞu Ð&Û&’q\Àþ#åî>q}ÆÏ¿\Iã­*9ÑId5Uiߪ¶¶?ºÝCía½Ã‚»1 àø´¢­³çã4Eö}a‰ÂMý_«º„séq\JIÑ*Äœ a]dxë#DØ:Æ~Œ¬¹JfT#?&6–3l)2š2 Þ€#ÖU8ÎØeÏoÜ¡û„•qûÉâbü^\uíñÕ;O¸ðýž(ôoÇOÊxÈÍÄ=Iв®Š¦ˆH)°¾Þ´Z)cüª¡¨hyÎÓ©˜pvô Àa˜°±>ˆúÀK¨Ùý |;÷ôð;#²?Dqß7‘×ÜI*óŸT\eêV4ð#?Oâ|CPÕCãÇöhºªB#²#%Üž ‡æüØw=¼Dzç#?»]1©ªiîN ¶¡‹ÍTÕëæ#Dw„ÞbèBéØ;–ÝŠÀ6ÇwÀ #% ÀtÝoáÄNi¯{éæyÎH ÄÅ°êCú#äjŸŸ‘O6ÌžW‰ âÿÛ8é ™Ç*«ÛÚÚ?Ëëî$€ù×á†Æ )Úšo¸±0nWOŠ5º#D)rè&ÊÉîÄÄÜàë£Ó"d\ÜÖû±ÎçßïŒ?B~Ã;ß·lÒKÍ»ŽŸ±xAOõl»IQ|`0¿aÎß\ÿWú£T  â#%6%Á 1s‹ÈžÁA…¡Ø…X1!ÞF°¥¥#?ŒÑÇÔ;¤’Æ Ó9 LÆ¿¡ï‡½&¤cJLà‚d[ÿ.Ÿ7`é‚P3°²Û¼‘­èw—DÃ( ãÃ97ót…úb§ŸÅö'±_¡«•<êT>o®‹Î[X,Ñ`~½s‡ñýt¦|ó¦'$‡Û½ÇâŸW.4@ÊM’ö#D;qRßµ5I›ÀšôPbÜáÚ#?%Ã+Á0Íš1XÃk9ÿ)Y÷[ñœg›>[­5ÒÔt"“®6óGStÌ#~Àû<¯ÿÜÕG1ÍúV÷æoˆƒ·im·€%ÓnCˤmqÒÌ@¦õ{T¸‚ýB§m »O‡Ð/#%#?´ÄØè2À(qOɲ:ÃŽA[Œ8š†á²x‡ªHÅð1ôÏÏêx® u„‡™¶Çô‰Ô¢þ¼T-!Å;êDI"šBd™‘ïÓO?öý;è‚G˜}¾Öl «æŸ%Œ<éÁžõOVÁ„u¯mÊ€š¦C–ä,“ $öÄ„§æ#´ðz —¦x¸™xIÛüÝœ(t™'Ó8áLj+´'Ö˜sêò˜0#Ü¥†X¯`´†ùs“cþ¤•ÐWä}Ë“>²½LÂ"C©=5Ö9oˆfo#?FÒ¡àÁg¨BÀ?õ(á-·Ýd#?Aa<¸¶ÏÓôü'çò~ÿáÙ°#?V™Ê÷{œ>øÖ ³0Ì¿‡Snˆ*•ÒJQà sÑÄ8Å!Ë5¤§`ч @ÐÁ'þ6´ÓÔ&Aûw ÷I`]b¨0D$›pcI&-–Z=h§×£µÁÐŽÐQýëH=δïûá݃úÑ‹”ú²`… ^ߦVg–:ª"›\á‰ÞÒIýnÕj>tsÏè÷b#%ßó“ªáǺ ü=ÔðB‡#?:˜À/âäoÌÈ‚ªéõâ'Òuafu^ ãd™d‡>gKÒ£Ôs>¯–èd>VZâɸþ‚ú”ˆgÎêºãç°‰û-ðeDQÆç? ¯¸`1ø°[.ï´ª‡AvŠ€:P!5Wyôž~Óõùý¶Iÿ2€Õ–jpxtçꞥA¬ÕƒVžIRI  =9ýwïâMçóUý¨°OÙ>­‰óI#¡õ~ïf}½ÜËmÅvÿ‹e)µí4s‚‘#D´Z†m*šqÑûãCÇÖá³HçKaü“:ÄQ¡ÚC2/Ö°¿×#?þ‚$1à=nMá-D9ïWùôWæƒ8ÀZ¢!S¯æÆ~©”YêªÄé¯#÷¥"À|cô«N¹CÎê„ú¤!~#D€ÕG׻ʀ?|®Ð¦¨P¡y#%å@RmRhJ¦‘WIÀÍ>ëéZ·LzÀÀª§BŠÁfI¥k‹+l‘R*âP›Wç¿èŒÑH9S¯þ¬5ÿ?üƒÎLHÕ€rc¯b•†?û»ýäXÅS"Èb“ÿ6˜poðO†êFŒÿ¯ÿ¿þô¢‡ª¥D§l ´z"\ÕÄ!7è:†ªgË›9<Ö/Ž§¼6p@v #O<f —¦»°¬¯&]7b?¼Ä«Á½¡´Ác#% ‡#?`‚1‡ Ÿ¤*µzy¶ÿLZ¶~Ÿ¬#%à‰@I€h¾†$»õ¹³¼àßÕ±>?&™?·´ RýJ ÆQ@+ߣ‡~ƒTu—˜9ƬÊ%(ˆ{¿´B†¥d{Z汸ڟÑH%m1¾+U`Ë_â̼ø¿ïÍPOï yÕõw½Å~Œk†6I Aõ’@* #%1HdC›\dìÖçŸ>ºHÓFøÑ~õú¾ÓçÊ©Í%Îì-tº"4y,&à‘YJ-ëÌlâ«=q†¾K#%Sê‚Œ¬ÞÍ蹺fëÔg@ÎÏ›±G¨W7UØ|Àj•#46†"ѵC[–ÖÕ²él+c#D£¶sŽ”ã€ð~¿ÀûX†ÞÂæ?wïèSœöÜÃ>Éý˜è*ã*Ýô—´Ñ66€B`Ãüo3b¯Ã~ïÞÍó‰Ë™cïôÓQºTX×Ùáë#DE#?ç¨ëz~ ž§‹Ïþ †üÐÅh(Ÿ-'¯_TXi¿[šÂvqF¢NPýÿì ‡°C¿iízVr^RêoSL3Ÿ¾M¬ÕZ!“¦nà9RšÍˆáS2ˆ‘kUß*÷ü´w/•ò+Â+ãén{‰c9vöD[µ4T tPU•@€Ëj,ç9’/…¢VFïßN#%>ý}V/µ£ìªÏ¿5;ŒÈdκ¿Ÿ3SÛŽËÕo>ˆž»U£cÇX¨9÷›ŠÚª–Ûÿ¼òÁ@˜Evð¿‹|_gè?„ið×—BNptr.zÈ<[Ó#?ñßÉHe^¥ã ¢÷¯sD;Œï›×"3xÈÈ‹!|R¾rÐ먩9¨š¬rûcÔ\@='÷ܳ\€èÃqÇO—ËÞ9Œ©üª#?ö¸d¯ŸuÄžW• ]ÝéÁ#D‸CL+#DÊR)ààYÙ$´kzY+Ë_œV½ûÏÍ!;ê;Ã_Ñ÷ØìŒz:éÃ͸sÙØl§k“Q»HH‹Ø|‘ÆCû;dù2#?3)q©@3(Éùë^ú)‡‹ÍÚŸ œ9½1 ³Û®¬ˆÿ#D€åzYXàÚ¹"ï÷ø¨z/zùS»Å/ý_xùU†Â¶ðîúŸSåµ^j)#%D&üìÉ÷úhÙ¢“Ä'ÏÓIxIxQDú`ª×€#%cFh‚#%W"Náh¦Üóz êÁGÖûµÐRÆNåHÙËÝÓö ìYDwq° J&:-%ƒ&ÄT ´’à+îCŽ%I›ŽÏ'ý/ŒF~xðß*¼ °Ùg»#D™øÚ ‚ D!ƈÀ%¨èÇg/$V•&Hr%T€H<£¼tzq§7LÅ ʖDz:#DkQUL#?6jôLlê œ°=Uw×ã’(#DB"¡"+öaSù_†t'éÁ¥‡ªÊ,ë=â‚È£ïˆÁ‚¢„ËúmùeÞí÷ñø~ßï[€D³1ãñ ¾úÿÉ]f Á„"‚ÿ»ß÷!Q?eJyöõjóëó×![8:#%}ì¸NŒ€õð ‘í hä,d=9'H° $Q O¦¿“k§ôü  Ç÷‰~dëE‚GøOµCš~(`Å:1ñþ½ð_ÊWmGú…ùK„Á˜Ô9é8âsè1R‚¡Ú]·c£³ËÈG#qÈÞàºÐ”3µ´‘ö~#?L2AÖ #DDe?ñÎpþÛ“°<·x‡—;ÎY?z¶Ù¡uÕówùCƒðy<Ì!„ÁÓD°dv6^¼'Yá$ŸøYc kcå°–#?ã`k é½ŸÄaäuOœ’"IƒÅT*Wã#%5rÉ€êšDŽIýF¤p7`#%æ7hwÚ`Ð#%Þ"€â³ó¡ó5Ï2ªš^²H`šü)U#UKMOás2 ú0åƒ`´ ¥û[GÁ×üã `ò˜§ùD6ì¶7 ܲ;ô¼ú¸ù¾‡|XÚÑÀ À¾Íæ“9§b‚ÑÑ&t|&‰¡B{ϸü?Îòñá`cŸÉªb`ªh0–Xá}ô^|g„ú(ìë=ÂÅA ùýèë4Iå:ÚQðçÐ%案MYzü̈r¹W©ë/²©­Ë'ÎyjsƒS“`ó20Yú¼d’^9Ÿªc²AèSe¾ïª¢´†Xñ¯.{äË#%…¢á,áS:#?&4˜`ÉrL=t°Ó†h«ÒÀĪ±†Æi†Ãpr}¦Î¤áñÅÌcKþÜ0}ýeÌ™‚ßFßqU¾:DÚ¸òÄôCXõè—(òJDÇßÖsD’xô9Ňèåâ؈EãÒ‹¯í¬™T@;«EBÌž À­@Å.ÊyÛúO•9Ç8à@%V¬¡=Î× pᜆU#DBóþ¯T¾ÏOåùk°p>-_Ù˧“šÀ¬<\ÿ°‘°Ýϳl½ã¦wùi8ûhÚµÂ^S$=~æ‹IúJ' j““%#%p’ª€“ÓîùÝŠ$Õ!Îœ94îó‚ñbÄ”Áú?Ð @tƒü¿ê礕Il-DHÿ#?Éb")aþoö³ lK#4“S COﻘ´UÄ#D±IÅ8ÿY8.$Iêóû¿®u'ÀÅÉ>ÃäŒ=ꢭwmØræ@zäô='9ãëUDUU[Ðíû…È[3P„2L69 š;[œ}šÀ*Xé'iU®DlãüÚÛÚÅõ¢öö›)̪ˆ«ç}Ôþ ¯qŽñü=Ð2© ¬Úf€4A#@ŽšÍ™ äý Pň`Cm,Øf©F4j&ãÊÈ*HH|OŠx¥µlKIìQ)ñ1 ú2ú-ƒ§pHíþ¦ŸüÃðŒZÀ|#†dh†:9`î¢|D”’Gâ%‡¹·ð8IC±Ðl¬ýéŒHOL!¯P¸dêðæ X¨¤ïëãåqv#?Ö®Ø× §_HœñQ£â6cM™ç¨`sŒ¡–tZ#Ïä*½*dÞ]•$L‡ÄbªhX‡^´xÛ{Ãñ>xf2Ú:Àwä#Dšq?OX2a °!­êSÜ‘Fð8Ûœ[m¸ Ÿy¾øÁ k¨˜^&‚¯d~²ÃËU ó2»„±ç‚xø8/Å¢|Ç$ÁŽ¾9ëÂï;t%O›ÖÓô0„—0öh„—«EŤá¢ÐnFÆÏÎh‡!;#%âðy6Çs å­½èqÂO€ØS¦m}a~+*F“^I¯¦˜Æ/ÃŽêjÎL5aX´rdY¥Jˆ¦¾Á±—,ë;'‘aÁ\`×YÄçíÍ>9™2™ó\¹G[¶Ëéfg¥·5ŒB¤ñp–WkÔk9k!ùaÄ“\¸Ã›;>—Ž­½²aƒxJ5¶áhf¦I#?³¢³ ºTêZÓ éšm ìgNuþ‹õ‰ð –Uª‡ƒ†¿-giÈ»³7Ι öß$¡‹`·¯­yDÏpu~àì ’ïaŒô³ädE±JL±«¹”OyÍ 0'i’ö9C!‚€Þ{ I<æ§8›ï3)îd-fBÎ’m?þã Bîºù¯×õêC>³À°j> —<Ëb]{h>ïZ™‡{B0ÞîÇ¿¥6­Ýïæ«Z«êòë܆ûTÝ‘&Os<*§HˆÀ¤áåý½ª&žŸ9Íʶ vˆ#6ª;³6QÞmÁƒ§w÷)Q}ƒâê„Ýê1¯Z(Î1]oÂC›Ì”WÂå Âh©A)1HñBÛã[I"GH'¦ÈvAb‡Anš/ODòIЈðöô/„ I B<.‹Ž{õjJ2%¯€Zg*Æå|-›.,¤ãn¸òŒPãVÛÊ5²#Ö¸Ô; S}E|‰¡bc²oc›„…&ÅXsO©ôï|pi¤AÅï‘Ð TôÀìǬÚôl£dxþwlË—!†‰U“µR(‚C%íªW±ÅL4=°¾ YŠ\¯¬3N5æNØþ)Çß²|tD#?|«ä|Š+É‚>Ñû“Ù‹Ã|Æð4B@öAÉÞwsé~¤ÔÀsˆwØN@ÉÂ<â¸óJOÝ]Gnã1¾Õ¹ˆ†O8u‡~~ÐÜõö!ØœµPb1¡Ë骹µÃ¨a&§ªu:¦DÞ„&¦ÝšRdÄ:ì#?\ˆ7#?Ì ÑÂñ†žÃÌ“Æs5š#?œl<ÊQ·3²É~áÅ4)—ËpÜ ‡`üm_M© x 3ƒd‹Ÿ»˜×Ho¥"•RvOM8&†A^S4zåùæŽò¾(ÓÔd)ªæʼ2&Û@A",”À8BcB«mv£>nFǃ¥ZÝÖ-K.æ6RkçÞ¾¯A41íòêÄ·C¡Ó8ž"ä¡JÑIT2…Óh˜7“3ICÉ:³T¤} V…Õ50KÚs#?\‡ çÜ^†É¿3’Y¤ÐÞ`STSÌ¢x±r*Ã@Å`i>Œ/Ì¢O“wf™›£ÈÍL@S§u zº<°Äï "#?Î' Ì15<ÂrAØeñ^k§ŠËÐ4Ê›ÉA®žÛ´™ bäæúéZZ¥€â#ÒÐkÕl¸´ïË@¦#?©j#Þ¿ž¡Á¢ëñŠÌgýy$ æÏXð6˜g†ÔasF`äNY^Ð$ï;ö¨ÍO&¯ÜZ5ŠËâ ÞëØ÷.±–ç—v-2wïSíù¨¼£¿®å¼µy&éÑñ*:ÎFk™Ê§‡µáƒEënj9p¡ß¦1%Çîü”M#S½‡¦òõa­1щ†šÖS&d™˜HZ$.m:#Dª±[”ìøKÛ_ì Ù>ó{8’óy&$†ˆ1I‘½:-®@|áÉ•lãÑÕ*ÉŸU¬-«¹:è>ÇkB#/¹§Ë™§¦$qÚ¡èKØ×=)¬j|“ˆÑF=¢©ÌÓ¿cS‘œÂ¡©‚†#%8¤9=§¿T+¼y›ÉÅn•ï#?ÔOjuáóWqÕfcè<Úx˜è’oSœØ1–÷<ŒÀ7Ë?Ëï²”lƒAª:WÎzWMM¡b}#%u† ç{Cg±pƒÕJ4€8!6ŽyÐdU{3ãš÷…üûbÏÍp"î}‘ÅÍ0ùî=jF†õ&,øQ#m¸3Í¡ú¯#GѸA£ÐÉYõÛعúÖ^£&„#D;¨xÇÕ,g{I1ªufùœ#V¶j’M†”™ôm|6!£ï5ÓÎ1—fÈ!Tú0×’²jbQ$†Âk¹è…ΆµëÍ iˆ#DtЫ$›»3&ÉÊA=¥Œ3X1ÞÎ~Lúw9‡ÿŠ0öx§+×=,«Í9"-ÂDïK™¯®7ÿ<‘/Ý…M-b2|<÷ê;­»'ñ%ý—ÛÄÆS‹õ²aÒ°8”šË‹ BF¯åŒ³€DÄ–šY¶P×÷[é,MEzÛ½Lqg§£Å?¶ø‰EÞg)Î0wS_/I¤Áýò Q=Ÿ³ÕþõðoûyüÛcÇ!«‹m;g£ù£xÐ|÷ÉŸÕ»ÊûÈ”qø›¢uë<Ñóh®#Ÿi»¨O¹fW­L?¯³™´Ã¶¾Sõ.ZÞŽùã¤à6íŸ;zf¾!Û=Á :…Î5´¤)9qˆ“á¿–¨öz¹®DGáÕÙWÙK=]G~«ð—õMR%"}©CAHÜc„”4D @7çS2JDHÂñìyø;]¾”:Ïã|YƒH?Ÿt bïðÅÝÖ/8ê«Í½&¸@Pdd c±Ÿ†"„vDÀˆÄª9¤±Rl&É”-'v½ZDúîô·P¼É2¡úlòO9‚Æ™´ñ¸ñÁ„ _ŒŸ¤„xÏnéÕ®¨¥í»›'@0•ßöb/T\#?Àð·ãdé³ ë"oÒ—ìÛíɪMUµ^çg‰]êé¿”ÿr‘!:ñóíUŽØƒÚýÞ‡!@3 0ÂzU‡ˆù/«Cñí2CýñøËYÞ†yW¿ºæNc±eÀ8Í ˆ-ÆXÇÀ‰ã/&ñoù€*oD#D'yDÀïè/Ò§píåÏ×ÀëTî+¹PÃÍ)¤Á¢¯³sH¯ÑÁågwwj:ÊìGPK~ºšÚù¾w”ÄäŒèDGÿÛ˜…ôV~C¡‚²B™¦1ǃX·†6ÛTž‰¶>*L7®0¤…ȶÃ3#D°xv÷tÃmÒˆC„ʼ’b<‘á1¹a£nkH2À?#D#%]ò‡PJaIæS ÐÓÈè<÷øë_Çû“°D61´í£ßÛƒ,J”ÔgÀ$:Žþ—!èþ< º¥ú~ú%Qù8ûúUæƒïÿ!þEe®?ßÿniWP0ïO” l9`ÕÎsˆA"$Á*C…š8bŽ3xÿ òB©#⪚Àƒ¦˜-ròÏy¬}sÌ18ø#,ÁBÌ…TaSýè­¢^­‡Ëæö¡ë²œ #æ?£©ºq/#?M=¾ÝÉS¦_Q{}¦.@˜C½f2â Ï}G'õú_Ó QÑIT>2eK$”Ð  AÍ2v_÷H! Á2§è¸¦ÁÓãwþ¨G4@2;ü4ÝÎOFቌoS~óï“#06 6§HÊ©A´¥EUTü8èh#%!JÛ„ŽÔZ‘EuJWRš¯ÎÒ¥…’¦†Š‡„ïijI©'¨}K§pª¾xCI]»â˜©ô觟_©Sú8rß*XŠ£nˆ¬}çÞÿ€¯Ü#ÿ D,“T”žÙ@ŒIH@#DÀ :Àã¶Ï¾è#%zWš¼ä|ú†«9+¬¸ž¤Ì]oWïÛPbFùfÖp.‡@v‚hG”% êÈ2#?d~”èï?#?04rÐ4´úÜÍ­VÆÏ΂´„D‚n$ÓýLî¶ÍóÐÝ–0I(d6#?tÌÁ””¢Ø•#? véT:Sôƒx>?Þ?æ=Þ‡Å;¤À¡ŽàÄù#¢ä¬´0'›™±þ Çü]±Ê›­¨­²hôÇ‹ý0ÒÅärQ9ÔtÐ#%#?Ãò#?% Äê„ÐD”#%õö¬y`{@¾`ðœêðÁŸ×„v.^6e¤x÷—¢Ì’€A$&!bwt#DÍõîÒ!÷þi@\ûWß›Î_í{‰I®õ!)’HI†2{°if2did–„ÉT»†&&o.gm‚I±¿¾— o£Í«¹ýûåË—¨yÆšF6“GjÝfÓ™µ†t7S”$‘j–ŠDb”ít0Vm± mnqú&Óo—$kB»') 2+œlBZìSË:à;˜BÉŽÇ8aÔ#?’u:#%׉¯ü R‡ª“#%°ú½rsû=>¯ŠRlm¶3?%J'燈ð®kÑÒx/x¹8QZgL'»»§¤Íƒ– 3¢hàAÀÕQ©ˆ+¤ë¦(ÅAÏâæD”­iÄE‰Q• 7øÁ,²è°K¯À Èòõ† ´ ’˜D<áç8:#D¿“÷häðIã$F„%ÊîPKŒÞ#%—P9x#%½÷âàIò8‘B#)î ¦¡T‹Vª ý ¿và÷Ìœ–JÉØáãð îgbX¢sLé»[U°W*ðó©ïõÑ‘ƒÌÖ5%A2ÓDËnœÉ#?Ec¦ÏUíÙçp‡³N\¹ãŸ4’NÖF#?ˆwJíǤteìä€{$#%(D%X¡(]QëîÏO‰ÅóˆP0¢ …#%4 A‡Ì£@š•!&X•~>¿¤#?õæ>gLn*#Dkö`«¥òAñEQE@ T=‚&(ˆÔDDΑ¢ JÊZC0ƒ@”dB"Qx@ð‘• WÄÀݨè?8‹ŽÊ¯«°>9 œJÖ†^a>Œ³V[{>’qQßH1«ì éÝ#ÕS »J™ }á\|#?& óǯ„&ÈÓi¦Ð5ƒZ¿\¶E£æ–µc.ÙùMÌñ8sOÉbŸ\Þ6Í)”À0cdÓ%êšf"  $&A#?S1™×?`;œˆR#D$ à˜ ©ÄOÍ"hÚ †¨‡ûП´„¹Ò."bG4ÿ75%)HRÓÍÑ tI‚¤Jfˆ’DÐÛ#%‘#£øäÐÒ!)C2”v*R‡<,z%T8˜oüx‡¨8ȉÄ®Q:yjŽœß刈’j*J¨†¥;4C}±AÀôõv‚'#DBÆ£Š;”û0ÑÀxî *žÎ‘à~N+Ñ¿P%Ä=$QUDÅ7oŒö’s6ÄÁt×ÝXŸ£Vcöú-ùüļdLòH h"ìŒW¸-œŸ?F`Â9Y”a^V»¢`hnçgFš&I%IÔšÉ#D|’CÀt×E컶‹2#Dk|7Ø0z¸ ‰º7iæ5½fú#`bƒ39D–þ-GPyåMWô#DŠT"ÿŽCXDbƒáË©ýXœ¨h o8Œ÷ƒû›±SFá±{Î1NqÛ žjC§õ»qìÖ?ÏÔüì­¸ QÒ#%Z¥’577<ªÈ ’bIæ?nÔW‘Å„0_äºAl9£KÐs‚ƒÞyûö©ôŸ§Ýƒ½p7PÀÄ4¢fÑR‰«%3´?på6°ák#D„>'_®Aé˜y¨rÍØfHÛà8éÄ|r½”ÜfÁT÷“øîXpo¯Ï}ø_gM;|:/ÖO Ð~„vo¿L(ˆ†QBi×Y0*bzVës ²2,hv!%Ï™…£dQ&DbT#Dl)Áʼn#DaTò¼|æˆñY|g”«­b~^ïÀX•{¨D/·zRD¾ˆ¦ÿ”†Ñþ@ÚúŸ Ÿ•Ú¿êéÏ^úµ^#?bRÞDœå¢æ¹óü †ž´ûÊšp‡(¤?ÔL{>/ß©Š­Ì‘‡Ú„‡­ >†t@ó@´ø S#%\&hÃS^ᆸƒ¼<"ª;°1 øÇPÓ#=á·)ò?§Îþþµ•§{÷áy€'á©0¨Ò¡C0¿0tqí¹vw690ƒœ¿¶&à~½9Ä|^KJá«dÞvóäûÉp×õÎŽ¥†Yزæ`ÚL~}¢îa£šoø98¸ˆ ã¢Aä×ï0«ÎÌLè¹kæ#?u´?z¥ì¬¯ÆÆŠ#?%#Q±cF-.É£öþ‡ž ÏoGâzüÏéÈñàþ_2hhVeÅê@;£õõ©SKÓ#%ýŸ!èäS»Är'‹²—²B„C#%€ìOÂB…ZJ …¢kå^}€È@<…L#g€þÕÙûK÷`Û֜ɤ¶1£¯EøO $ ôÆI$›À6»ËLÎ1qi…³“01¶…3[¦fØÝ—\ÄñäÞä ËI5ªA#?­±ïxÃM†C ·ZœaJÄÍPâg—%[œpÁ†=rÃr†ßè¾<.¢(÷#D õ@Ì) R*#?L#%Q¬0õØ©€€[!àwÉ~½ {ãÖ»“ša(ÅÙݘ½™þáÉíŽJÛ™r4C!ø rië šêâÓJº« šÝÐÐ]i•(ú1röÚOuß*Ox#D1b_|õËR Ø“`µÆJò7·80§rê¤D£KHzy²t#?˜níÕ xq¡ê.${#%76„¼ØÕDyç.¥ZR±#DºÔî8ãN"H[’}½ÿ0φFœƒxNs™™ ” TÈ*õŠò€{—«§¾#µå« áš®F‰A®„麸€î"laçñçÚ™ø>‹#QáéƒHvà¡æí )KªL˜š˜©Ji ‚Š *¤(B&ŠQbMÔÚ(ͽ]xò´èï>šôfúÁó|œ9eˆ–NÕš£=:~DÝ4 Rƒ€v“ÀÑO8„#?Ýüi£™!C!í4…߀;áøœözNíŠd™ñLQöÐ¥¡5?#Ž.häÒªm/Ê |¦dD›ïRÜ|´ú{®çDDæSíbJ¦/·é…ÜÕôU#7‹Ë>çv&PÆjNÑ·ÔÃUvÖ©¥ŒŠœ‚¥‚æy£;|Aõþ¸þìª-zpØüö¿8¢Ù+ã»ÁDÛ]#DÎÖeùõи°#D,HC¦÷a`•6#?¨¨ Ä#%F$Ãf4r~G2ùØSLZª¢0‚ixhP'÷ z¡m3þUWÒ@¿³Ï› NŸf¤Ê7ba¯K–09Ö+BZS?K „¡÷2ô³7¸=ØšNK—ªWRú.'hz¼ÙåÒxÿ¼O÷æ.dÄœÌAŠ—NÉ@ÒANú©éߟ þ­ÇÈûùaá¹>{-Š¡îLB /é,¾GøJ;Ø£AÈuF•h4à}› UðëÆqcV ýSëá[AO>¥k¸~L†ÇêV¶·¯J¦4;•AžALƨi/ïÿ®4¼4pºbì=±Ry‘¾<6Ð-L`ËÏ"Å®0ˆ%5N´Ï‰„ù¼—ßúîŸCÚzØìOz‡Ûð:>¼>`$ë„íï10=À‡šMå(Ò#%?di‚ñ!#ÎmúôÕöˬ­Šj<®Ò?¸#?`L4á§ÕŸC(õ'˜\ûîÁ=RÒ+€uíŠî÷‡–>!ê ègüÅ8X/e÷EëtzÓýšXßµ±Ÿ1‘ÆX¼=ˆo½vœ§GËܯ²lJØ©HŠ:¢w?8¦~Oº8#ë?8÷ó-θû¥DٰɇÜç…š]ÿ#DöÆ`3Èxò³!¸Bixá¨9ò:ôžŒ?º¡©¹ärø¢§÷@uzεò8óB¿xê„7ím@‚i(D•©¸#?ƒ%¬tŸuÒÙ…ó¢£²i1œ¢¡…ZúÆHíUK*ÓŒžÒ#DïW>[ÖÓ54÷aî-<r¦£NßXó»º#?J2DZÿ–ΉeƒNúSŠ›ÄT®N.¡¢ç×AÃh±hÁ&x•Æ(šèÂ>q" 鳇 ìö E"V°#?Òv’G#?"¿£Öˆ(¢"AùB†@$Ì@D% JÒ±D#D@JCÔû˜z’@Ìwp3« “²â鑶˜Ù%Cä?÷pä\gªhˆë0spSš‡>h?^È‘C´Ü{mÕ@ðñþÊÑ`‰qþß8ÕefNFÖVtK1Ì/!%(£ˆz8XÄN×ٺ⇶ðêB92ˆî÷f¨ö%7®Ê™ØìÂ’¿ž9Ÿ$ðçÛãK­dyüÛK¯è(…ÜöÙcpœæõÔŸú>NAôz#ÏpÁì%hóFš‚ÛKÝ)#?Ùƒ`dÓR¥/L…AO_imt×Ç··pݲfÒÖ(`üîŠÃhQÆÍ1Lã˜êZVÍD AR8ÌâOñnk; ±Œ™\™’Jœþs'š¡ãŸ>ÝyÙ5üzzuéïóâ¾ýí{b[³ÏÜÖb(9§˜`AÉõXÇÊéúýÅ­ûÖ§0 4¤ˆñÛ¡Ø‹ñõöö^©.¡ëÇ*÷Ãî#?S±ˆÃÈ Jœ ²äì›ù(»šJìí­$:ÐâI#%âb˜’µJˆË*RkÂ\››™nQÓ‘p¹ÖkÇ>ÂâùJˆvJ ðóD—É"…Fƒ·»¿çëÇçê׳cnsÞ‹œ÷¬ˆÁº‰‚+®£—énæH!þj¥Ë”Ù0U(‰óUÜùþ‹Þv‡©ŸGë}ûÖš‡Ï hÜ·³É–)ádUó*ƒ¯o¾áª+®b§H`¢ô¢Ævæƨ¹!ØÁ*ñš‰ØÖ{€4]d6‘ÈÒ%Ö)*…)!R”¸Á§G~†È°¼Ï²1¦þ~žÅôoëKÆèéÁ;ø::>ö]ƒëpî‡Í% ~Ìbø?9­¶ÕSAL„0ŠNéòɘ±E^³ëêv‡ÕºZgS˜¿f§ªSzûzÒ-´±œ²#?|ä‰V¡£ÈÖ#?”ŠüÜujþæiŠêÅ4hã®Yæîmr^lgÛ™áÇÌšƒBØÁäò{$hÅ8¢h#?ç8¤çdž!rg§/èýçž.€Ò\%Æ$*ÞɇQ >=àm7„75M×xR`d"$„u k±dTØÖeÁ„U¢ª®îp™-4äî#?ëî¡JZ ‚€ h ‰hd$h&b‰@¡ù•Ð#iG¯ÝãóžÙé„ë'í L”iÉ¥—@ºÔûRp½üè‘ I'‚§HÞ8éhÔ@Ô|6PX*é±K8cÜ3a@O¡‘s 1j,uPÒ‘*Û<ÅXe¥V8VÕriæ´]%):ïuȵw‘¸ó7xk—.IuÑŠ*¡b;!ªî ô0IÀöFA±Ý¤Ã#%ê†S!àðØëMÏÖˆQeËø#?Èüt@ú'’iõihRõ"0ïJ³#%'bH)ÏOK®Ýé"ÊKd†˜qW2¨ Š)ÖÇVG LP9˜$JñÑl¦:²²T”*[J*ˆºõñ0[‹¥S*Š:<J×Çñ^TtC·ˆyvòj¬ôþh¡ %¡ÈãqᅦhÌ7@t eh|“Œô;öæðéä DŸtšŸë¹’9…ÃÒöV¾®~~}ðéGâüÐúCnH.Š/¥ îÕ×–è?W Ù… “RªQa@±QÐ5£µ( ŒAÂ91±;$ÉÍÜ3¢C‘6^&¦K‚)Ä!£$Y—Ž#%â Ëpš„ü¬¨ü5Ë…·œ¶í_5´‘£hæ%÷¿°à¼¹DH4P¥ø¯g Ù²ð—ç¬ ³«fǘĆˆRAT PPÃ}p;v®Jm’æCœuD”Q£­8†d4zï#?[AZÁ—ƒ`Ë7¤þ¤ "$-æØz“„f)™KîN#žTO\ì=qÎc9ã7®RÐö£©sŒ××wŒ[›d™GѨ™Ær¢i‡@äí¥žádùD¹ÇŸ(Yrs‚h=ˆ0‚Z CòU ЬTvÛ#DWöÜo8櫧™‰õ_#³bCm¤P-%,H40Q1/éç¡}&5Q#DÅå$pü/ô%³ ­hnJ¹oe"_’%Ôœƒd§-²è¦ 4f¢’X÷#¤?Qvfn&õ-;ðºÝmfVðØÄte)§Ä@” ÏÙûq6Ô(‹¤WlPøþ/¨ñó'ª}üɼ–XŽÚó5ÝÀü }¢?~õ/Ò¯Š ûÇJ>ôåÇ/è–aÐhL ;QzËCtØ@&Éó×BÝ.¡4±b ‚E‘ÞŠa îÓgN+ÊÊúgza"&á Ôç6NY~k’lì ¡ð? ‰ÏŠ2X앉 #%'#¦¤Ê:R°Dbžä(OÊxlBZÀYÞ¨XêÎÐÛéÍ¥/"¡çhÃá­Ølí‡Z²!‚°E“J§n-jáFº3pš öóP0{Ì+K¿9@ç-óÞ‡ ¿8ñ<‘Cì”äÀÓqÕlGôñÉ­ªÐ–E0G¼C&-¾ÊfÕUØ{CÝ„»7R:êF&ÃY ùeÌG“Q ®0ìì‚AJBi+Úôô;(•G°ƒLe9ÔZ±C×F £5t‘¤p”×Áf™"ЀäAÄÖ!¯íÁC¡(&˜ú†L è:‚$Ÿ©¨‚„Üqn…LÂò#D#áÜꘓó“l€‘¨ôa+¢; :¦$0!}x­9Ñ—µ“”G>%ñ»wvˆŒ‰#?†·eæT(f‘òïÇN6[£‹‰£ÎCAæ`¯È)¤J™@(@1p:0õú:cO‡ Qw#%õf¦‚øfuø…h@°iÂÕR $&(²ô5¬:ÝÈZ‚£ª*Ø¢,LUUÁº±’&AcDO—ïª#?o‚W¶iÆðã¬Qæ:Ç#D×#mÏ[¥Â—§Þs>dôÜ3/~ÌsÃaÉW0‰UAOÎÍ0K4_& #?#DÿL‡‡zsƒˆ=B¢}L®Lš;j·`eÛ,ëΉÖr÷yh.sgŠ÷ Ö Õ°@@ûü>»#?5 –5d´AáÒà›ÇÀR¥ÎцcµKx”öýÿ'µõ*ºR%¶>|rù³Ïƒt_ôK솑£Ã9sŒ_^!îB½4rxÄ1qï˜+ùr{`¿EXy°5†ë-‘$:bh Ù©•#?fcÅÄ]8`o¤¦ÝRçfï>‡Óž“Ò!ÉSSYÑ]"å¸ë=z¡ÿlt`‡ï–Ú{ð“ÁúK (ô|‚ZÜ&¿ îL;:þƒs¢Ãã‚Бü7Ðð)üðçmÖ^u»Iz6y|Û‹{nr°4Úâ-§£ÈûþžGÀ}Ï_y&ä#?HißFåvß2ˆŒá#D/°>U^ß-#?:ýû‚0M¡)5£$¹¼‡LDü½¶X}ÛöÌñÉI<DH=xNq(`’¢™Q¢¥î„ìƒè%#D:<±#?`n„õ¤'L¡„"² Ô#àˆžXxDg?Çãlþ#Dé°6Z½v®ô¨LÇJHéÙ€Pmƒ8(¿l€o-U¥Úé 5õ9[Â"Oĵ)"¤ª«U‘‰ÚþSŽüÎóƒÉJc˜ð“È{²RH@r#?PК*Š4¡Hþ2™Xˆ"%  •Žg¼aú76Ù‰ýöÉä8gFŠ¦•¦{‘²`ì69ÖÄ’DO\Sň1dF< DÌdˆ¢!?W*ô胬¡(õút#?È9€Ìr²‚€ªOYrDDP4D!4DÒ)qT”ä*§cýBÁ¾~4Έà\ÖèŒ`4y´IÙ#DDÜÈ ¥‚s4P@Œ& ÚŽú¯oŒâûµPŠS E•"‹ß긙ê¸ãŒs†bn˜ç‰Š LŽºè†b!Dê„!q‹ò:“¾ÈåMxn侚èĘ]íô&¨’éqÂFüsÎcöSÔObHÒ#%uh"„öeGÒËc&€i˜v1}¦ ²}z€<ÌÀ9ÈÍ+˜7Ÿ_M‹uú8‚„•7Þ™@}N!™ƒ$ÖK~_#?æQùd’à‘aÉ„ÅTîJO,9œ|pTð1©µâã­~¾#?E›óì‡j Mk&1fi¶Œ[½—–ÁÄ~Æ#?s¶8›ê#ûáɃ3ýMÛ@P½¾ß2ïéPÇ¡ï#DÒ†5F3ˆqF=Ö6ø{fƒP—v·NÝ*ù9QV!¶¡v#DĪƔkšÌ¡ Ë# ò.Çè¥i†ñzÁíšÉ—qtLñS,ä­~Ì/VW(ÍK4a8²JÕD×üý|·&Š™3k0‡“ Ëñ\;‚"­§`Ö»³ÈcÒK3E¯·{–à ¤›N»O>(jÝ&Û]"²×i¡%V)ü ‰0áù8hPÊ܈̒4‚Ùçñ/Ä·9ÑÍjíEê­ d¶2“d-"n½™‘p‰ö¤šR"Ž„W4M#PŒO¨a$du qÞ#?@ì8ñ4ÈãGyÔ¤[’æ3DÑ£¬­íáhé-}ÞgËÔ§]N\›‰ˆíl.f”ƒVæ´jƒR>4³‰Hêd* ÂäÄÓŒb#D¯1ˆ@öZQì…t¡­ÿ3Žy½[m#ÙrÛÕÑâyÄEck˼Ø=:N™«¤n°Æ¹y§4d "iþ71¨ ’ÙÇË.ot`1´`äðd2\4›ÐÐÐóg‰a©+ú.F[þ®ä­®cDäM÷å9#?ë?IN^N??gP)C4‡$ ¶@»”ÈÁ¾CF‰N£=pQÀ䧄»wªb[H¡‘#?RæŠaš¦h-wÉd’8”PǺáloÛo¿ÌÞ+îç8¹wÅK6©B7PSêKZQÙiˆjÊÍeQΩFR„©¶lÐÓZgG«Ýé«žÏ|ÁES +@ 4rt±Í@Dëé|µ!´š²Š±D5.¬™ÓXmã—C6 a¤uÎÖ{ó¾aù#ÖÏ—2N¦Œ2š×Vúàq“PëIÄÛ¡ìÑYzȸˆì¢¤8lý>xtçÃâ§].¯¥ËÅ#@¬zšD=ñY¤uq¦Î Œ.¨Ù]„ßKs#­‘¦Ç7L12ùÛ8Ò苆ç0mÈ)ØÄRz×6Ó©‚¼†¨ìw½Ž1Èõ EæË䜬b¡4%4˜Ÿ[$Iêp{Ú#Ù\{1ÀŠ÷dâ˜Äq÷Ú 2)2¤zËéÏï2ÍAµÏ׎ž¢ÿ†&ª™*š¢J#D#%õʤJ‚©è°Ø•ó„®‘@ZH‘ÓëÄ4PªH¯8ïÛL#%kABœÐSPïŽ)Ä@†‘hU0h DŠ ‘Êf‰ ‘äó’$¤&X„1¬b( ]!FBŠ—NÙ­Yˆ1Ãd.)() ¡©JÒ”Ž‘"hhQÀ°+»„#%4"*R)J¤Ô­ ˜Èh!\C8ĸ% CJú’Oèýe>Ÿ¯äÎ1FO•Ô¢=ã/œœ©ŠóÁ†óžëàé“âO¾CŠ¾ŒXÊL#%ÿÁCÇ»ëý#?Þ‘¸{õCÝ–»m‰Mäªn­]f(ÌqV\ZÉ^¤fœÀ‹T9,CSŽ|UóGϺiBô"d ˆ‹Ë(¢ˆ˜f& ˜a ’bUKä጑$”‘ R13@RÁDL#%À¦Øb)Šš‰ ¨! ’Š&  gætŸ?£';±7K’žQ!©b“d]ŠÄ ù˜Lb:MäÑ#D&»w<Ï4ôt;]ä„m¨Óþh}êÄgs¨»÷4ý#?<ý_žååë#?Dí#%]&_ŠUDQ,qà#%`è:dÁtWª„w‘ ¦.z¶Ó¢ƒ¾þNk0ýŽÉÈí¢ö¾®¶™šƒÙÅcw²c#_ÃRäÄ > §‚\vðÝ䛃‡óðÆUO¨øÙ™faºcCrÚë¬÷ÚTa®ÑHÕ«0XØ7š&)¢áÍʺt—›uÞ=æÕ‚‰;`èONf0Ý64¨p4–Ü@½Ñâ}h¯‰,ÌTÕCÃ0*B#D#DG–àÒÄ”±làæ%¡ ˆ¢qŠg ­²ZpM!$EI̲ÑJL0C)IE,¤@"Dš÷=¾Ë‡žh1ÈLì>ŒhÅ ÍýÚ˜Óœ˜Ð€Ý€çôÞ‚_åâŸã¦0Š·hdÜ¿Öÿ6T¯Zç 8Æ&úó‘Hxk¥:KàËÇb15#ÊûD>ñàÍ“óÞ|KG„Jˆz“¥çë?0²25úHøÓójŽ°<À>lûºO×à{ž*sPúÓ‚5ÕŽÐcˆ¥Ê¢)I`$¦dÅOhf`-PŸÙ‰©ÁC~¤àž1Ê#?Ðñw4PŒ]Ãtúá¶ô9œÅúß?&èõXDôe­RHg¦5u°¶ÒÛ#DÄ#DRÒ1ü˜ê.öháÍÍÆѾ Áîa¦’Æ*Cˆ`KíWâQ’õïÅ;íQo¹S(dvoúXÑV±RÉ+ïÆÙIð ÍY…ù›a ˜]ÊÖkŽRøhfÍ. tU ®œá1j”õ/³ÃÎéËxI-jG׳L9áßég4«“õMN{3E(•|OšðvË*vÞ@±»Ä»´gG¼<ùöBÆÖ#?—ùkKå« ªKm›d+Nʃ{]˜´ÔžQ|ÏJ£ìZ~¤{÷¯2Á^Ó˜aàçSðƒëŒuŠá1¾òÜ^s':ÑÚŒÔF}{5ü•Ç9¹kZPd>Û,2R-½ÕŠí‹Umm3ÄØíE$KÇ –u^š=!’ˆ,=sÄ–ÙËW+è°yQ!‘Qg=«n˜±îñäu`U-#%ûP!ö³ #DVC#B|ÛcäFJ2wMz7ï€Ê52Ãk¡Ä, tSiYË…@@8Ñødûž×ece¾“¶çˆé¬4@¤ä¡™Š¶LD–ì‹>üMô5.ï‡pÃ~l9è#%=ÈOÓ”$#ǹ@9¶ª]Ï#%%«[#%AѺʞ»õŽlÊA#?Ús`¨$ubÀ„a¯¤ô·Ç_ÑÉy }Ù¿±ë3ËÏš9ùý^wÈò(!cî•)O²t¼>oÏžmuø™è¢½)†UÃlóuT´÷™^#DëÃe? ó^ɃüèÒ†”æ£ùŒp»ØV=;Þöoü–¥ü_´:žÚ4×Þ#%ÁµHPåô#% m…†ÙºB}(&¯©zƒ’ºÖfWÞÉè:üÝd?-4UFǺ·®JT›á‘^/½ï7¥•Vf‡˜óDFªÓµš˜·»›š 1Â8ÊÊ÷`dÛ{Q1Ͳ_î‰|ݬ˜(#D{øËÉït‹T)Ø÷cÈÝyõ×øö6w¼[²ØÃ'þ¹àŸº…)#?²+H©‰mcÌCÕÈRåëàq#?D62IÐHô‡@á;€uw$‰éΡt9ò΋Ûe¾u þ&ËË|SP "ìz·‚” „¥2ÀƲý¡3ܾ;ïñÉ·#%AßÇ{1#DÊŠGk5c¯ýçŽájûL û™ÍFÚ—‹ô4_¶|x#ßÆî\»J%i$i8+ˆrª²o8Æ,|E9,ôÎI'R,âÔ?È‹¥4ï×8°ºý0q \b±ÍIÙÓZÆ©l˜§ulâ!ÈÄÉ̆nìvÛñoÌÕ÷:…¢cpx&“íœ5_Hp5³¼â–Š‰AupD„Ž„Ï¢ÈÊ<]ÅTÆø§†(4²@‘ÅÑ• àãJåÜ»½á=ñ•Ë›1¦ÊÀÎâ…<çA˜C²"(Êl"cvX›/u#DÇ©äüp„gyÐLekÃ5#tö‹cÏ.ÛÈÌlºnà mS¢ÁÙ©3x|Lå1Á›¢J.ò`ÛÎÂÄv;k¶kˆëˆyp¤Í­½1—+ÚY­¼G"ŽúwB!ݵ…šÎ¬#Ç75·ˆqNTªqñ³ÍÎáûn’hñ#?œ˜­)|0÷ÃîUÙXl=N`æÙùŽ›"mö¶ÅáøÀ߆)ŠC!®¹ÜbLbÑ 1¾ö…TÜmÄ‘zÙ”íy‹ûòZ“ ÍF“³®5î,Ùb¥Öæãˆms=,mo»”Øövly£­¿d¥ÙûDÀ§:½#?Û Õ÷§;Ñ#?¾ïSJašˆË¯díÛÛ¼k¯›ÆA›tí…6çŽÕ4=s¼Ã7·vœÐdËmôè¼ÍùŽi¦:hÐÓ×OŒÂMÄ!Ë#Dp©zêc|bv¢ åˤ”q­±Â©|ó] ¤m_O4·¨oÊ¥Ò#Ör% ú=Idž»n8Ž…ÛÃÝJŠò'n9vÉbÛy­¹:b™8Ì‹†çT½u5ß’öZâëTî£K'uôêärÆ‚ È# kkó¹!e']Euˆ‘ݱóHH#? – 0†\F. s;º8t ]ZuÀF)š¤0k·1¡ÐüYqÙ"Š™¥tjT€BcŠfªRD–™8“)Ç#Dx§]Œ tJÇOhï ìQ¦#?ŽCeîçEdˆM¶ìì;Ó#xV³‚{ŒËIŽLæ–«M?!#?¶ÑX puYêô¥øÀçLo%ŒG)˜ÀF.5÷» Líb¥¤–ypHcG;é>UvW9' °uÜg{ë¶ü±;µ¡¡¿ÈREçm$ãÙјR Lòk›FškÃ]77§é˜K£íboW|&Î4„ìÖŽI;Ù9¨áX&§K¥"Jx›d±#%S~‡žú矩ÛÈ—^eå%z6±ŒÞ\˜üdŽÜ¾ÁdµœÛáeÝPã­&á†ÈˆSàæŸsψ‰ÎøïÆ·C›—uŠ3ó<ò AK9»qÞ!¹]KÂ4‘xiB@Ø#?u™ùÔ#?߃Ç.› ņ²Ü ñÚ!TŽé†ç³lb;ó—/n]®p¨_mJîrÁ#4Ã…˜³–,“¾ùP÷ð¯>bÙ§;Ž¸r›Jš,ðÊFzµc Ñ˃#?wÔáðä“®."©ðð;µ˜ó½s'nìZà·Bnë–I¸n5:¾IÏ#D„:!ñÆ%ØÍPÌ£»g7)²(:ç-1¼vDýì'º,—ðήat€ƒ¢D´«HÌÑ;ó§3TŒ¢0ÍD«ê±= 0Èñž¶šùvO“å…0í€Út]6ôâ—lÚæ’L:é#?1«8(ÆIˆã¬NyLm#?I˜9LÆ{o‘–³‰Ðr»K˜UД]ë‰.‰­äÞHÝScߧi¡ó®Lí㮤&¼è…°ä3±­Ì\åÈÐàÌ#Da£I¾Ñ,Ú´M«m飶ï¤2aáØ„$¦Í$ÒÓ•›&FùöB²sa1ÒNôí@ÞÇn#%$á#?Ý7O©Zt(LéÉ 7wÜ3{éÍÎb5U".Ù)©¯< ŽêßBíO{“ ?#%èÌQцÞÅyMh”B8|uÂÆù³Þê—;ìlíËêbÑžþr*÷³kË t%´_„ìl~ÝŠï}Ô^MÛ“Þ\#"2‡³ øa°´Œ#DUÂ9€Ô;·H¾àãbhˆÇ˜l¦;dΔ•Ú•e}¸€tŠpÙØïwò±1Ö‡¾(xIœšœñr3 i_méWäû~)«¾ÕzØüj¹“¸æY4jY®$ß1fQ·ê6ð£WõHÖü8#? á¤Q‚[Ó80Ä}³áØ8VvvÍúöˆáÇJŽŸF0F3{£žNØ´E6]¡¢Žâ\H)Ho ˆ”@Y#çWY•‘Lb\‹Á¾Üb´»NhÏo¦Â8×­%ô†èÆ÷qßÁå[‹4f§[vðîiÃI¦‘ÏcZF0&ÔcPk†}¶ô//V¦cH!m„EêjNP˜•ÖÝüLr³Ùæ:\ð:ão8qÅç1^L$§oyîšÈAÚŽB{œô5Þ k5”ê€tBPÈgT‡$FØ5_ #?Œ ¬–=C±Þ¢‰»*Xv0è2mq‡±¬¸Vâq?n:<Œ§ÛÆ3Æž-vQJ©å ͽ/h|ÂÞ«žk¬œ:­›Û##?YÁº‚Ÿ¸ù’Q$¬O//+B¬S—IÙ­¼"4b)ÁŽÚ¨'Ãç¬ÁÖ5Mٌ仗[OÈt”¢û• .MžTIɹÆ»³¨/"¡@Èd§u‚5ÌÀ¸˜+´e2—fÎfÉS¨e›QT¤JˆY²”2g.žæ“ÔËRÔk#?¬¾Vn ø›‹~RàîðÓoï殊޷f3êÖ3r#?öã/®³œ„“';ÍdH^îbÕëžîÁ„ÅYÔwðužøבϒ)¨ÆUML'Šµ'¬¼M#DM¿Gj1ÃAì»"MÔ![òTδøYivÆX¨ÌÅÈ:Us¥Îδsh;rhåØ{!š (ܶÖË„Q¶GQÁÙ#?u ¼d›eyæk…Xq’4q²q»Æœ0a$hÓÑbÆgOO­CVäÆÌ,äÖ7`õ\„r–@)›´°{Ôi^A¹,·¨ðϨ8Ëmp–]S·^dÎNYw„d••Q¦u× ÑÛ†¢Z˜§ 5“²#D–.ôæk2nwÔæÃT %°iÖ-.–5âÇ­Áp‰¬NC™*0#?_1Ý‚r9œt¢Ej÷%4âZ©Pú„‚°³q#Hã¼ÌwÔåÕˆµft^že“X°\qtHŒ¢r„´ÔFÀÄâàÆ ¤ùq«ÙÂ\ÁrtPò¨®˜ˆrë­5MMp¦ÅaÓ…º×¦€v¼:]xZ4KD’³T‹œ$96ï$‘ªb©5-"J|·Y*r#*WRíHƒ6âG™Ûd|SN¸áöS=¶óÕ=÷#?ÝÒ»dÎ替.üÖÑ—–íþì‘ `EÒÝ$§rÍÙf^í$º›Í3 ‡¡#DÛZ]º'ÊÑîøÚ—íÒ|ª4øƒS€²Ô¿Î\åó˜ˆ7œðET'_d¶ù¡vÖš³®"+õFm~çîÖ„#%e™ b„™‡š@"¼Œ–#%ÎsGs,yèWm3²år$‚I´ÅHlP"©÷¼4&ÒÕµmФfÒc#?ÕŸ1"uÁ‚Þrã±/’àT0¶eUa“T©¡®Bwˆ-ëp' …¦èuI¶åjPEÉЩ¬qa|°P8M¾a¶é‡wã@ôAÍB ÈÊÑ$˜ÞAœ:Ñ$5¦F „¸KË Ëqyd ÐO¢ò®åª÷ú¿V  ÏëØŸáޤ蜓¢Xæ’Äí0žhxãLà9 ¿,š)Z^÷î8òägîä¼qÅ“$»òºAMX¤5dá Þìbµ€i‡fŠôçhc4ôXŠõÛ¥#DÖ¤Bá†h“D6*¶alÊD@ÈÒÇÆ’?<ÃUôŸ>›×7˜‡4—#?£R÷²™haèá"!lÀ’Ф‰«¦2‡=Ø4j*½nGÖ^C\eÉ6Òvõ/4 jÉÉš$äÌ$4eº:]S-,†Œ:"Ì%s££7â¤+J>zÐëXô,sÒ¨<ºßi4Œš,½,–̵ˆvjB*³= Œwß‚”ÝéÚsŠ5Ξeá,£d—YÑO†Xb¡ ,¹;˜ôÀýmÅ ÕP„ ŸCP§C5#%ÓAà¨]abZÀ>çù–ˆš.Õx@EÏ#?Ñ p)*:!‡ƒ-‘3d<úýc,˜Ø"›¯=Ÿ£×¹=uÈ‚UÍ€ÎCkG‰¡ù2ö/wób<kÓw½zçtœ’|/ÊGÓgd$Æ„Hݧ‘Q¤y##DvƒD6#D›lÄN¨sâÓÈŠt„PÍPÅá$¶ÌÈäà á!&#%ÙÈlÔ\¥ØÒF–”ä†ÎÊ¡ˆèˆ€á+¹Äáªqç½WxíØfpQy‡9HŽ uÁAv:&¨ƒ…¡#8Ã1µˆ \%´« †Òr$Ø;f¹]a ÍÁ¤4æñ×m¢Ö9¶#Ñï7…MÛ-[TU1)ˆwæ{®Êð“¤æ#Ü"Âi¾›Dú“?¬2½dtz.·cÁ )A$M!þèªdfA)E˜"vB}íAlÕ*P3éSh5¼3¥ä°¡¨#Ø40ó9ð×ãÚî4 iØöEA!Ñ0æ½2¬#DN˜®=ÚˆõfåNÀ&©þþ¼Tzþ\ƒòyâú #%(†$eéNÉÛkŽŠ¦ £Ä1ÄÄ£ABÀ ¡Ü…Ÿ;€ø*ø¿KúÇüF‘æ„¢Þ±HQꃶSŒ)¤ΦÔ‡f)ºm¸Ó¦²·`çø”)k¢S„”~Ùt~é9±ÉB†¨äOØëdìw3Ï7N‡BrZ@¢%²BéW„ŽHpß—@àrEc4wëÄ÷í”èÒP¼sÁ„#%pØ0#?4£ÉÀJÈ pØç“Í#%Cá³ »_èó²ìýñÝçàŸI¸xAÿ~'Á6"mé éwÃ[way{!´;æLˆ=q=³@4+æ!üîú=càû XCaTÑwŽ=l(vú°;‰ÑA|TO<Ï÷¶ô ;Ü3Cýg¡ßW‡˜cšš0…z8ˆ\û¬Õ–y°Y#?¶¢„NT#?–B“Ùhy°•æÅá†ø#?$_[‚„&Ìmõž°oäOrÈÛëé qz>1×ÙãbÎ#%flp?¦©ØÔ>¥ØIÛ"P€Åˆ'aÅþyñ"„ý.ÃçëÄJ5öAòÛîè>ìçêR'íÿlíí©’é®U³èJ²ÆÓ(–‘§9ß rÎ^¬æaH¾²ÊÀ™#DÚ“N¶Áò8c2ÞH¾©%º¶¢Ó[{DI­eÒ˘*ÊÆÖXQ„_ÄæÚ-¸i¶6 I×.Eœ¬-†jˆÙrʆӎLÞœL\RˆI Â4G6Mós"ê^°|#D[RÆfˆ¾p¡âkrhÇl¤ï†æ«Èã%Á&€”ç#Dâqrž[P¸kʤÎÙ†µ 66 *å!¡#%;wǀǦTåÀSŒ·cŠ#„h:öýÛ½a¤=p®¿J©„ÍUDØ('¾¢Gñ‰<ý‡ì Æñðø`Á‹À\„„Z9‹Î@ÎÄú§M#%‚ßÍc¤H‰)DDJÒ% P” T*P-4%#?%-RI3)25CH´´AsQ) Té×L€G«èWg¬ ¾ÑÔú”×zB½¹‚rÌyˆß_¸#D%¸2TR CÚy|ëÇØ«__Zíï€8œ¤àl ­ØFòÕVï‡^h‚µÆÀw éhf¬H¤BÒ¡T‡Û%Tâ.åVŒ0Á‡ž£ÍŠ¥_ …ˆ‚Ç•AµÃQŒcU¬.XÕÊUú¶fBÈŒ »g&4œbÐÒ!ºT˜˜Æ·6ÎLa‰’(ð²§d%ŽÇ|Ú÷‹¤ryÞØN\ó`B#?`ç­>°#?܉â{rœ}Àº2É&h.]‘œyÉ[ªî£ËMÞý\Ú¯„‡{îŸ`uœ.‚ˆ¨†#Æ3­1>ù9Q™y$UNˆ$:øc`7=³²‹YÈ?¡#D «1ò)5™(òÙ³Ïi©KD›#?þÜ‚LÈ~®¿w(´H¥ƒrƒ°•¨æ„R€ƒXâUCEAä(§f:GPCZi¦ ÙCe<ÿ²Ø GG[Æ*f(fz2¼S.‰AŒê4‚¹Hò]#%7v*#%äòä‚R'*#%×̇j9Ý05E#Dë2‡$<.w jÁ¶fHÃ¥®‡·h¯,f<æ.žsœV„¤y ¤ØõϯMøYv S¥V*‘"0Dˆ©×䢖!1¡t"Õ不gXÁØHqJÝcgfÿ¦Ú׌¡Z ¥àu^¸¹ï]AEzÂÄ?0…ÝÒäk(ð°ÞcñˆÙ“p‰ud\6žìKYAMëS—1ŒHÙ”P(aºÑ$8@´¤˜žPoßØãrD=”^hÂ<ñf~éë;}°¢öúÙ$õ#%üŒoÙºcGHŠbBµˆÜ0œÚƒ§QÀ‚ãóüaDðºÃ##DŸ‹!AH%#?&˜÷IB©0s¬f ÙTõ#DòÝPÜóDic’yÐf‹ÇvÄ’ÝÚh\]tƒ#D›©Æã{Íÿ?–+L:Ù:Á#?ƒ›Z;Õ”f ÌD¦šˆ'U–¤¹Œ3CíÖ 3+‡ƒdç¶N(Îœœ‘¸vœ×|á!aÌ*O}ÛƒÙ0Yâ±›ç#%>3Á›Dy’]ÂÚ&{“Ì°–Þ/;)ÚÅ,C;d­ƒ8–É£iÏç¾Hâ´ñæcš ß8’w˜ Œ†q”åO/X§UaXáêÛP¢Ùú•QiÝb_‡®Ã’B-1jZF£¥M'¶#)#?m² x1ùsV32Úé Nb£i0ƒ¾XâXrPZq1I¯RÐìa†ÃGYi#DdÑ#?Râ±Û`òNès-´P‚B¦™ÞÚY0‰XX±ÙöfBI9¤Ï™jÃÈ[a8:™rÑP)‚È)‰ˇjª xô’0;[õ3¥ÓfEœ‚iyKÏÅïÁ7ÞõÝ<î€à¬A ‡Ó›/é5†¹Él cPì/=öp˜\,qœó¾²»xÛÆü¡ƒtr“&2;py3©iT&´¼ï †U°)ÈCÓFÙ ;ˆ€ƒP^!‰Ñj¢H,*Ka&4¤gtôE΃¢ÈVé<ÝVÂpç"y0äÈ"8ž-œ²…nîL´ì™tÅêQˆá%ºK­SEˆJ ¡ŽÆn½WÛƒ§À˜À|´‰:ºÀ#DTÆTˆxàˆ¬c(“{Š—KA¹±ˆãNÝö3k„Fø!äDWˆBŸ'+` Ò4.…bR4¨¥P3 é ÙüÜÅ;¤?A#“T¥$CÀé“«B± ,„:_ î„ŸØ'0äÉ dÐеŽ‘qÿ…8稧t Ô'2tVÒWu%†a]‰CÁñO@<ùøÃ&¾°~@T¤>rƒè«ÕþÙòünç1œñÆ`8I³ýÕEO¼hÿFB“ˆ»‡¸#%}´tKörFÏça¾)tçRGÇ2u`Ž†)öbàfp¬4#?0Å©P“÷w/w®÷é‡ËëwYéÓ‹ñ 4›r. fFû©¶OÕÈA¿^ª‹}Fÿ#?C‚‡q26^zœáÒ~»§óï(ðÍv– h¶kä“oT…«:˜10úR žƒñ)@&A)P )¡#%¥€h $û!Ü}I„¥!d)bƒùP <àÐPbO Ånr%“÷†2²uÑ4ÏÛŽ;®i¼WS‘Úž ‡4±sOÔ‰J{æx)Ù’7Úc¤Nº†Ð€” áúÔ&ýXÂÄ‘ÙúWU\Ìßw¾¸5þã1hf}Wc‚ø.ÕKlÇcù)µÍ‚ rbH†í.uNÚ›D>Ÿ·]Fï$½¢Swƒ Äå8×Î3\XL±.Õ‰‰·Ô<#D[œKBL#Ópn¨„)OÕõ#?…›wŒæ_'Uãp“Ÿ9ã·s~#,Á’ÖÌÂÁ4(n퇤ÁIXvºnùµ€Î}##D¥ÚÓ¡wÖ¢¹»Ç/ž1®z£N,‡bcq-F¨,¢i×5â`ÞÙªç%éß^ã˜G×¥ÄLJWsDQ“ªƒNa5F³ÅÚÖ`ʹ‚fn#DlPö´°„Ò®‰Ì©’#IËC]bJs­Àç-l˜UÞÂ4ÆÆ6Î$$ø8 Ý1‹‡rGÀ[*iÍZÓ¡S™ÄœdB9=ôË‘îC £º¯Szh•L¡É·)!e<áòÙˆÝJÒÊ"j)ðD!õHÏ5»v˾ûEN›Xá4±’Ÿ…sƹÁ"sÍAŒ¹wRåIF\É Ô¥X—kx+”á<&üJ/ ™O‘ú\™-zLÒž¸ë…f9®4Ü »mηÚ!oI)ù·r¡Á0=à¸4i®–è:CF7É«‘À‡§^«qjëï«2xwG­A©qØs¤Dø•Š*DéáÎÖñV›§íU³™Ã‹UI‹]¹àÁ•¡˜ËA¹^Ίj긧8F–©è“H]z®w#?yHQa2d|ÝŒÔË%!£PéHèCÎ0®Ÿ&šÉ:@[Pæ†סÔEÈLÇS£ï}B#%Åü‚¡8#D@kˆmýg¯€‡™6S ©Q‰B&—¿­H:´7%NóÆ :‰GICÝ„‡›}¤9/%åå 9ƒµÊ¬‘¢(“ ¡€Ì³#%À?‘!qUÒ@)I²qNõ€ “ƒqûXu»ãÈÀaX°Î½G =È—&Ͷ^h÷W#G: “hl² Þ‘Ï&ö»wƒwiÙÁ°§…¥.ZaÄØrõtK$#…?ú°E‡í¸»úà ‡‚¬4F½æסç>Æ(.+\M°hIJv;Àð ð½vâï;üd`†êHz€8:¥3!JRDqÎd,-¯\ºë©½™Áß ©’鬺L¤>sf1âGSŒl#ä›mÓXFpñ—5FH“ªC·64ÌXÛ–øøý÷>õbâ–”"Š‚$“âƒY&#?²P¦J.#Ds*€­°vµ»nNw8qá±­FmXQÌÀ­c!õâ¬Â$ð‚h±lá±,b\Ê$´$Ù‘É€Îýp«£#? õý8{ðò>7PÍ«ÇËÈ#?pý>óÒ’OÆ s9×Ñ°{]@ Ø#D V`Hˆ© ˆ„€ªA–™pH„a!˜RH A%¼Põø³£ÊhÑ^=|ŽAA¡E5CB#%ƒQB±(E±§¬>Ò@û3?—ŠwŠœÓ¦¦#D`ie(eMrt8t%DÑNÈ+øpàè*žó*TÄ#%ë•#D#%HýJ&—`}ƒ˜/Ί6„½Ñ) ¦¬ÅÍ#D“|¥!}p.CÏϹÀøï¤ðÞ¸”‚ ^­¤‰2¨²PE‰¡#%d¢’–¢#D#D#D&‰ˆŠ*”‘x#í5÷€jSõȘ„GŽŽ`ž*#DA4ÕÀý4({KÑ#ô" ÉÖ˜º.àî!9øû‡ON`xOÃt8‹ÔþyÝÚqTž‰ŸŒy ¤-0Â[ÀÉR½l¬¯AØDz{ÂÐÏ4qÖ7 0úÚ¹UV˜ð¦%ý´#Uˆr›#?`ÕÆ <Ú?“]4¦I«N=~§¾ ÁTLJy“Gö\"f™>òßuèÛ&ª“SØOŽø‡d…æÏË]r†¯#%gе«ùô—ó¿Ã  r#?3ÆÎ`#? l‹ˆJ#%ÒGõ#%V#?¡Ã(£2eF‚J¤œ?gºJ.IÚàÓ¼±pïõX$Èb‰—ìñKÔèšá¤*Éœ ®! ^Y‡R}^ŸkÂÀØ€ÿzÎÓRs•r“}Ê@9›¡9zÃçO™þ/£!}ÛNûÍ^6†zs‚Â&~ü® ÔFÄÔN•3~øö ´“ñ¯1Àˆ˜ª¹©ã‰¡#DZ@íšÁ±ŽãÏùÅŽãJ‘ƒ«c'Z b~8\D#‰Ñ­Ë™AÑs…À8\Èq¹ÈªÉˆ$ZbÐ,n#De»»2tÀØL¤l।#lëA 䌧JŒCÃcQ1´Ø¹¹5#DÁÄ&é]­qYÁ‹ìuÖ7EŒ`ÁŒŸ}€á"æ+3½püþ77B\;4D¥ ,"Q´U¨(¹€L"cˆTbêXÆ]‚dc  #?Ò-ãÎ%4PU1Ta0QÊÊ!CcVä`+±¦’#‘€?ÁŽ ñh®mI¦´±gÌq1rá$+‚GM'­á),"€bŒcs‡9"’D #%"Œ&±BVH:pÏ#+-8\zTS¸°…m¬ÆÏ›‰À†’R^îO(™Š)¤¡]#…ˆÅáÌs#%) „iîÍ)SÍ,±@ì¹1[¬á"ºb;Ä1Á\HDËHNlÍâkQ¨¨¨JZ{¢`›c£P&«1)©¦ŒmE#?D•C²˜ ( 8 LPD·aÈCI¹¸< ¢1#Dšˆúì'#D§¥3Æ(¯.÷»œà†HŠÃ#D©ˆ:æ¸_³ÛÛzõÐË/œöqê3“i¡môŒÜëü…xYËÊy¾O.ž KÐâ»Â+—†ô"U½s~ŒHÖàí}¯m( _–DÑáÁîmâ™HÞˆ(Æ3#%°°Ñ#?Ï3Gv* hCŽm^}3Ådd  „¨OFuACIAE#$JÅJÈLÈ1!Å „W=7DÑN¸ò*(¤Y$Y% ˆE ,ÈÉl”Ž—ãsˆk!ŒäWJiiJVŒßŽŠ©ªŽƒÞ¨ ß(ì#á 1@¯´H]øÈ ¦˜•HX¡†i)š#DX–†„€¤}pàPÅIBA¬ 2°ÃB‘ ÐT0II¾Kª‚šŠª¨‚ ‘ˆˆˆ)¢H*$ ¤˜Hˆˆ*)h"¥Š† *„‰ª)‰jIšZI‚e‚©&*Ša¢HX–hH˜ˆ†*‚¤) ˜‚#D)¡ªJ ‘ ¡¤)‚¦˜(’H*H†di*#D‚ ˆ H)¢ˆ–e&ª¡‚ ©ˆ"i* ™‚&¢ ˆ’bH‚B’@¢(ˆ(‚”)!¢e˜ˆ¡•† ‰ˆJH ‰!)D"ª©²*@Â$‹M+*EIp‘SQ$±¢BSŒÊ%¡Tä‡)BxÀ('Ì¥ ˆJ£‰H¢IQ(|—@$HÍÜ£PuCVX‚)©/¦ ´[ÐXŸ£óJ3NÓºÉxõÞ’Ïjú'=1Á§›î?ÍŠÎ#DsÚ9—X>a ØxÑ$†„aŸmÏ>Yšà ¼¨ixiyÙ#?l÷M ~Ñ· #%ðˆ²Ú¢ ùìŽÜ§Íæâ'ø#e#%&ß©_º¬òÜy)Á=ÑÚ‡6z‘JÕ5•"gœÇmwšÔתNR!¦$JB|öE蹃}Í”£v„\åJÊéÑi/z¯›´8 èªS~"]÷rÛL~.®‰’}àgÞp% J5GyªWWòºY¾Z¢êXÏéeŽ}—P8!:À³nMäÀ^…™0dÔÌD¤¤… -\¥0“$ÈæxûGÄk¼ÇøÈF!ƒ#%º)$ñ7'cñù&bmüæ k´4  3Œ² ø¿â7OœÓ¹îu4¯5^¨X ]}¢ ö ¢’‚†>£¿w'À¿#?#%«ÞëÑ ¤œã†ÿ†§UtP ·rL#%“X© Þ¥8±3IðOZ<˜O¥ÈŽ†ÜõÐÒ`üš«ó8˜›2,L#?c4@„$^]b7{Kó]{­mì]›.¼ö.©”!8ÈS?~Î66Áˆ’ “A˜¥“ܹžzÇnŒ“KØ1;¸âŸãøçh4jór9Ìè©#‘Ã`8LÄ<Ï—²e&’;ƒ#%FƒT¤¼,4¥s[èð1æÐwXËA#?TLK¶R¶0JAóià#DlgbîO^c­ä]7 àКÈ#?#?¨äpaçÄäQTD[ ¢'`É 3bZJÑíÚæÄDwf¢ ÍA´ÇìÚðÆj§éôÚª ºtAÛòï Ø#%v Û°ŸÅHz'FŸ†Ãžˆ#?¢öª.1ɾäÑŠ#%i}Z9!Àää#D@p}PÉ0Ôš" _!9)˜jE¼€³@ª”2 p£ïÒ€£®ÈHNÛ·È… ÛS¹ÄŠAj–§0)ÉÉê—u=PqõOš<ÆYèÙD#┲¯ÑÖf†qó‰g®qHéàªÌ‰*“ÄØ6ïÛ%‰ O° õÏd êÙ¥¸!ÌNÑ„y#§‘ÁU%ƒ@R`t³Üef#%" …ª)¡ „Ô Ç`Ðçz¹r#?Þ>ÏÑÀ„:ËI`?›»ïÚBBP|#Dó$„,  ۜކ‚É.¾ç³§Ôä Íf”ø%Ne¯}Õ….ŠÀ¥³kU,uß”HÆh¯ësºÓjÝe¯(Wþ¹l*»¶–|ÓŽ9Úßua).h $À¨lÞ´"O‚#?X~ ¸n9"¢`{ \€òàçoT ¹æŦ*ÛtèW áÉ=Ùgõ¦û•:¥¼Ÿ14è‰=°éÖ‰ë*TI‰Ó&á„¿Vsvë@„sôÇÏ4©›ØÇöä²ãdý¶üú¶5M`9CÊ0¨ç+¯%ù= å¡ôG’ñûOj•®"*!ÓÞTÕ _w6ˆ¾ªpÎ%êZÈcDà&扃nÅÓDÇNqee3M! „9Æð<å5ƒ”p2ÒÉ9PRe#D8GóÇYNCJiNï+ŽÐmLâêÙXXeHšDü@€‰M ÙDß8ûO ðº@r#DYo6OdsãCî„Ä1PC¹Dð›Ã´N¢Æ0Ð"³nõ„Æô}¿jºÀ©y©\sÎ8«†¥ºUpÅ4!á&šCZ Ãp߉'ç¼âb1áXÞe8‹F2\0#DŨka·Ù×Øâ>y|kðŠj®÷IŽê&QØ&t2…PѨ@OÂx4XÖ·¬”™˜¢¨k´#iÔüZô žySÉÌŠ¸Y_l-²ÔÌ|>Mqw¥–êã˜ø¦ý',æH̓¨GV÷¯›ylP”i~mí‘F1)ãçú/™ÁÊMG‹¸1Âc¥d³»ój´d£#?⯷*ÓF¯7Š¢fÕ jªÍ±±? õtÖ¦2%À` ¦ånY+¸ÜKÎs,î|3̽ã€9«¥ºñ˜Ÿ;àžk«š4šp ŒPc­5¡hbÚ¶½>w3#?jz~Žßaï<¾¾ìå=Ãi¡Ó•œ„æö¦‹è™ìl™¨íA3‡êJtÜÓe¥ÛAQ$Ú0§‹f6!%Ù#?Шi0Ž¬Áì#%U(u’>®í(vQEòïÅk¸rQShèTv[[*_ºt“4#&º-Ïf¬ èʾA¹4œÍߥ¡ÜĨ’GZ¼îÏÝ],¤ãÉ ·˜õ1ÀÊ!ÄÚù÷¯ÑC×Ö5žUvT q³ÞS(Ù‰±0eqH`žgº*ôð«×|"Ëóë’Þ«Ï9‘Ú‰x¡—äƒGy€pÎr$É/¾]}‡‡'8Â0D’*h…q8_žD6ón<¦ºîõ„Ä©AHÒ„]ô!E$”ž³ÆN‰ì ¨¥‰hbíÀĪCñN„¦Ÿ®u!uÁ•Dš…Ü8hhFš`¨H¨)!ઊó (8øœÍ3àIéÆ3À40ÁT^)µAmE6±$Qt-4óim·Y†,¤j?Éi R1bªHª&‚¨KÂ1ûñ¡h(&xÁW¬‹úGĦ„÷>¡j (SŒ‹F4ƒ¡#D*¦V% ’&m¯b¤ ã y#D(ŠzŸ>Í!ƒ>O@ûdW=Ä¥{¤;͵„iÈšh”{x¬'`é!NA#?"?e¢2¤ô¢q‚k¶½›u‚3iäy0^Ô…2]?^¸î‰ñóíï/Ýõž4…™ø8x€Òvk"ÉI¨S:3s_^oáUKUM' ΚÄÊe§5À8U1N ºÎàw†ÊBb—ª18‡NePÓ¹üŸo?0˜3–Š½gÑâÃ%à eÂÄÒ¤ýÃTï¨xîQðÁÁû‰ÂEÕ#? Áæô¶ÝÝYgÍùC§Þ_‘é_ƒ“i°ˆ½ò3*½Ú^1œ:õ¨tj%CÔðÒ@;NuÑbjš´sèPh‹áó4è„8´4QPÁ(Â÷ñÖùÜ9¡4ÔÌ@‚#?µœ¹R‰•,œOÉølìjÄ™Žq43çï8}ž8¹œÐDœæ×1§aÍúˆÒíÞ#?²ja#?)Ì"Ü$Ÿ-H×aìu‚îÑ¢+µŽÈp5»»Í-?ÏÚtv %)A•<´pÖå¢SÝ¢)*)îÑCM/E9Ä8‡,IÈÄãƒä6#DPŽgªoÙô šk#D.MH‚#%‰Þ/ž šfK$2Ú|9N#?ågí»ì%¥ÂçÚ‹@}8™S‰ ¾ &S*}%h¢%æBˆt‰r¹Ae*e‡çÑÒ¢‰K¿8I¦ÙJôD¢#?4ªG>dƒ³ni)ÇSN&"n{ W]ž–xž¿Žtð&*BŸäŒe¡'lN`(B”L ˆ”¤¤t+¥b#D(t’ˆ)@¤D¡j„)*!(’B*U¤#DfT¥(E‚)ÓF†(B––€¢‘ #?4¡HP’¤)YI"’€Ä©ª]b#%)b)@µ¡$ƒ©Ðb¥€¥¨¢š$¦†‘¥¤­:#D(¥J¤b¡h(!¡)6ÂD#?4-!@„BÒ-D•¤Ð´´‚RU- D‚SIJ4­DTM@D IHbt´R%PA% ¬ƒlPì€Hg^y~Q}g•Ê³bÀcQj×üqøJx¡cw×Éx;!jñ{Û¯D\$¢0Ϫï$¯jd®žƒª‰´©@(À-4ÐTQèš‚@ýÇ8w¡†ÊøõuÇÕYÓ¥Nƒè£ðMj}a¬Àød³d,Yz‰¦`ƒÂ"‰¡¦aÞá?ëÆ >ŸŠzÈ•4Öž Jõê 4”.ŠÒ‚Õ@&‚Ö@šQT1*†#DA}œ”U¥„ú«ùÈcÀب9#DP¥ B(x#%%åvrÀ¦²hÓÅ”kH›RtþíàÅð¨›×ÕÅÐh+ˆo'Ö‚<œ¦Ÿvàää>KãñèyòGJ(½pö â]4†Œ-R“°ßoI9Æ6ÅŠÁEBQäaºyŸ°Ä=9!\¥Ë"2Š|H}a$è÷Àò£¸î#? ç6ïèà!‡ÍØ÷'Èù’páÒž.ç0íkË©w§l‘"ÝÞd‡w¼…õA䬉(ÐWC@yùáâTvh!æ“Óp³òûðÛgi÷ᬅšªÓVøâq®b"Ç7?VØÊŸ‘úã ‘‘@GåvqÃê’ƒ{Íàeê„È~Î, ?Ê€vÏÂ+ G¤5bbt'îÙ„ÒÐv ûnš¬nDD¦¢#?/î²Þ¾›ÎýçÛÞeôøol¿<Á4Pmü£„LùÃóO ŠSæ4ø‘êÀ‰J2<4íµ$ëþÈ$ÅØýX”C÷;Œ•~‘Žp·>:÷cO7.SÉW–J£F#D J#DJâA±eõ9EE…Ñ‹…è²y/‘?‡·±ò9¿Ë äÔ~}´C,š4$)"PÉ1iÍgòÕˆç?Æq–CBl¼Ã"9’•ÓmòOsÙzPù |ë›ïÞèF5¹#?ÙªØÛa\BŒß[_uŒT^±Ø¤BoFÒi! CÆ…šÝ¬A¦jîdQ‡ç² I‚‰”!Aï3Ž.BY0Îßp#?Tø¡,PDþŸâÑK†ª!¬,Ù`Cø’\×€x»Îü˜&V¸ïÁ!ã¹AWÄ4¹†`_”>¡îA:ßÚÙdý#‘Z#?W¡ˆ‚ëêé8ƒè”‰U(AZTH¥)˜ DôÈ (èŸÛä¥DÐ 4è¤)ÒÅGiRm΂^…±Èx¼²DháAQ΂–Š*ˆˆM8†J«Y‰#%¥#? b\TÒ@Q¡ÌHRR4m”LÄ-®YR•.Ì’0³$´š ¥¦¥Xç@ûˆ:¢+…#D@I¤(#D5JPR:A4)HšÒ.„˜"A)Q %_÷íÆ…çДÐÜü1‘)É—€ÜmŠ`#Dš–O'&#%ˆ#€§Q´%Š`ZWPOÚy‹¬,í4ïå~/Fžo‘xn£û¥P:`\LÁÀÉyêÿ¸'$_—ã¦}˜}^äù‘K†ÇÌiIöwÌé"Hkûì ŸÎŒ½!‚¨DÐ*Äæ·ÃœŸÝ‡²È‡öõ2P'Uúg”„@¿l0Œ(d•«I¥Pe‡ !_²0¢GÔº˜¤Z”H…*ü²'ÖQä#%-#O`Sòæ£ë?®8Jþk†‰hF—°ëÈS7Ú#% JPW,’-õ>œ•cïŽØGˆŠGÿ0I£G‘ IK’þ{À èÈ“©r^Ê&¥Ò—fèŽ>«]µ³Þ¯ƒÕ°M6âŠp,è#D•‚@¡Zšdˆ!#DÁˆËð9ûÓû¸à5PM`q ÆüFèí‘:@þÌLVœ¬ìí[¢†äBC'>âÆKµC÷¹>¶ª¿o«Âþ:w“é>®ÌËãèèàŸÐ2†”R”)’”îÔJ£ÍPa(™æ¥ˆ¯?‡çLN9öÕã鲆Ê]#DúyV1"½ØšŠQçÂ&ý™¬ÔE¤Rt ‡11Œ¡UÄÁq¹1öÉí¬#o@Py½5e<è`QŒEC\)™u§ú½aŽáŠ"]h<½¢©öÁ¯³¸êY@€÷¢TBML@UOØxÖ¦`Ÿpk#?ô™‘$’UAû r™]CÊG'ƒ¨§ÅMDÐBA#DRP´}ý¼ <'„™bH#%$Ÿï@PAr6ˆ&†‚B}š÷±c&(ŠŠ#Df¢ ª€±Ä¶ìÕì<ö™“º>ß4}˜šŒýÁ–@Ö«{Ù‹×Y´«¹#%²á‰ç˜N¹û÷ì~´x £ênà#%Ú@œÞìŒïÌæî­ñôO)]º:I&Ÿå#ÂÊàØC »Œ±ÀO }oM<(4×wâGÃÐ7RæË3Vðí±[¸•ÍÅo 3/ÇôÙR’§gPüÛcW‰r'œTmçLì>4a“ÔQš¨™Ó~4vS†»ßLG.lgçRôi=&yn&L;ŽØÝêv3øŽS#%èd¶‚ åÀw'r4êftG~G\ῆÞîoŸ°Tö)™¸ìslHñJ,¾iâ ´c‚PBŠÇRXÌzQÛ‰&ÖsØAHD#D]5÷«á‹‰z"ŽÍøŽåi7:í¦í™çvšáW/)¿¥öÕŠZWš‚œ#?]BíÎÊ Ç^Ü8f©¤7:îï‡1ê¶çfÑJÂÙ÷d¢•CŽŠ™sYà°´c®oªK8}Ž˜í†rrš“ 2™Þ¨¢9䄉8Cì§iT‡«˜­ðxF±UœŠž°¦2Ɖ €uO„(p·”J9Å×y›²9®ôqLXk0Ãœ¨k},>2Ö̱ ¡‚W4µ,b{ða™@šg‘;œs)‚Ã3]CÒ™€›‡ˆ£î1$ð[H.ªG}Ï-—N·b¦™ d4íÔ#DÅPTÐÛàŸ¶JŸr{¥E“ËÇ Àª©"üeÉØÑôhu(wÂ|X*Pq…ˆ‚fBÀÝ-Ñâ¡BºaŽ¹‡‡&Óùâ´@²$Š¢¤‹ñ€:„ûp}WGq™€p#DË#?#Dá•„üêËOÉååÿë¹ÄvJ4†’?Ûù¹€C=»#DxäaXËó84£p¨“ªSß2~Üô]ÇfIˆ ûý(1 ÁŽ4Ž¶Kdn7SŠŒÕ„F¿ŽãÙÒ›& ßMxœÐ^ìPã‘kò9–|ÿ,M6)f’N#?np…$'¢3Т)¯áĿN¾{âÐ1ߎۻöœQêþ”uŽØ¯M¦˜e"éÔ"„#%gNPxÃõÊ~Ô›_”uO‘±×8IËo–LIÆí™H·0#%Ä cJ®Œ$ ŒÛ˜£ï`¨åÅ'øÍØ buª‰¨!¸0`wŒ7.ié(&ˆL3«#?sfÛŸˆx³K2zÛB÷ç£]At³lƒÓ*PèôwtÕL†Š|T>wí>Ñ9rNÂLÎ’à×ùTèJ2ð˜#%a:Ð΀÷n”‰5%RÓAKT0S$µ@JT”3T…!HD1#?#%DU1QMÕQÒÄD Ä”ÓEBTÉDLDHÄU K #?4ÒS2R4+BRÑUP!@SIKE4±IE$Œ•Q#(²„@Ô……13IžÂ h¦†*BB)!! $‚* *ü“ŒU T ‘ )DMA È‘L‘@ÒUI0RD°µP‰DÐÒ#DD°2ÈJ$0¤ ² QIE ATË Q0Õ#?E13ATÈÍ2RI4± RUCŠDQAD5R£$I(R¨ MT%,ƒù¸Q@½­Òh‰ˆ þÀøØ#X®LB»1ÿ$8æ ‡å™“°àÌ8Ô#?ÓœG~Pgï×T7 à#%òP{a¥Û~‰ô…YYAÞ¦"#%4ƒB)‚Ò#%bU#?-(…9•’íJqš * Õ×ûí(Õ^0¥"Ñ@BÞS!ã*P˜†! é Ð{½:ñììó#D®jÕ'L‘!¥6ÁJšD¤Áó«úäêZ{^E4KQ#%1)ë“‚‡F€‚š"oëÚ[`1)HM2QRÒ„¤…KÈÒ”H…KÚN-MB$ÊU! ªD‘D~i ^ã@´Í§@QAJRG’8’d9ž\`Bia?_êãÉ©_ÃÝ¢ þe‰¤8k“Ýž`ÐÐCØé }˜YîbÙri)Ò£Ü`‰‚êg_–Ítœ;/¢Å9C@«ó@DÁ8=dƒêà©z½ƒ²•ßš~h)ð(@¡_®Dõ/¯Áê6>Hká°PÒ/jþóðà¾ý]B4MB4ŸK)IDLÀÐQM!PÄU JRˆPÒhZ>`ù*„%x2:'Hvátá€êBÏÁ¬½æª»ú—çDᾨmgW¹1tÛbƒ‚s3FÂÅ"]ƒÌw)5 ÷õ4O¦·îÄœ—Œß[;‰«2lÌ2x°usØÖ`-3`>`êŽüË7æšxv2 ?ÎŽèûÎ4ÓdI`×T’C—zxå¡zHx<‘gÁ¼f̦¨ë­\†s±%“G¨&w€Ëi2)˜ú“pèkEj\þ—ÂHGPÃÀ•aµ‰Áˆ9,ê j¾“åQÈøùlpƒ„vId!{ M£`X|¶I^€¥µÕLŸ0ál™K«ÁÕt¥Ž+ÕÍbéKw°PéƒOâÄ_#?öÓÐ9S0üN(Û~Dœˆæ@ÈbQšbI@–À<ÀôïÓL—¹‰ëò”Í!Ðe_Hí7—ΩÓÔd§Üì—)B–#‡ QI@4mÙ“È@œ*¶2÷=#DfÞ¤ICXV0­V`F›Ma \#Dˆ‹ª©¡ÝƒGžé9¤”¢£ÿ0~ê“([fœ³hËb! ACQ*ÄaŒ#D0ÀŠ#IÐd;²")dØÚ3\›ùXV™£NÒ”¥F 5®æ xšå‘¢ëïòÊyþ`þ£ÝüGëÓðÐΰ(6?HšK†Gëk„#±¡Ù6m^iûšâáÃiÑâ® qÝ ü³GÒcŸ^gÕõæÚ’JRŒ •hþ,¬¬Õƒ„é®ØZ~ZÐt2?¥ßYœ°Ä T½q"—ÃzCOËí쮤J((¢Bf¢š }Pê**Pª‰† ‚M&ª *’†%*’¡¢ªŠ*#Dˆ¤R„H`.äQEC$$Ì5QUMT…# ˆnkÎè>úŽý(ÆÝt¼5;jkrBC†|‚N“6ˆo’X/¥IÉ$÷…–>øoØžÝ?>à7’$½~Ȇ5\<â‰Gó2¤ØŒƒ`WR.ó#DÑ{N7ñ&žÉUm–*Ê2°hi?Ç3Óg:àÄkù;è¸^~ü6Ťø dÅÄ÷Ne:3sr˜Iøï)Q®ÔšÄ:}»=?j\ó}Æ|.­5ê„4I–c-´¨0aS4X³AܲÑl™§’¹OkE²þØÄÑSs¥ƒÉGÈ ¶ÅX’á“0Rÿ>0woprSÖÁñhñ#DH4Ûeü¡‡½hÆ›®;u¨©¨– ’C~¥õ.¶H•FÿÛÿ^íÌdÔÒ ³Pw¤qD¢#5HA,Ô…ëîG4i˜8ò bTÃ~Ÿ/ÓIþo;Ã1x~î<$«ÖˆÓvÁ@Rîa>6Ƶ²ëTùhòìw¸‰Bœ üÞý¸Š !ÏYÑ&¶Z9V²¾§¿ÝuÄ#?ApdLjq¼·™76qaF¬„!ò›b) 9iIC{Âê`GFŠ[óÅ#%¾]€zlxðœPl§ôÈ®õ—·Q$Œç{¤v@§z•¤‰FH0{½}{Ó¯¹áO T¼r1£Óõ* C,Ý,Wa»O^šçI¦’¹„†açôt£ À´R2u˜¦ìõˆ¤t… ¢%Æ Éƒ†ÈA ™SŠHGÒ$Ê!ƒï =!¬ÖkƒNF#D&ç³Ìƒæ<#D"!  ø´Ó¶YŠ" bb ©³p}ÍI®:6©ìNÄöôº°09¢cJÐ'ä5>¿áå̓[cdcñê×ÍþpÅ0ÛwÜA½”ÒÑLÓ“K¤#”Éü×Ì 4rŽœé$C“SHéx ý!óÎŽœrÊ3¯@= ~ÖŠú#?ƒ›<œpäôø ~ÉQ@ØætY^10¨^£Ðh£²°y#%>HýÜä4€Èƒ[>߯tr)xIÈNdÉõQ0ÅÙêG`ì'vÈb|-%NT…Dïy«Â»‘ªIHJlnD†¿CH_­ç¡>­§qŸ›ÍáˆRž±PÐåJãlÈ´QHR˜3@1/õBè#?/‘¤94‡6|#D…ŒÏ?i“÷ÃÀÉ‹$ò8‘À€ÞnTÍÃ)ˆ#°œfi®‰í#WI3Lš*!Îmùr0CS CÄöÎ!•+ÝᮬvÛ:ˆÃé´wórÖmœ8/з5 `ÛËc µð¸ÌNLÄœ4fM8¤bi浘ÓåêË'hµÞ.†«#?–|· '‡SŽ0¡—*;-n1ýŒ¬`#DšDN#?Å¿¼Püs—5QD×ómŬƚŽ{"ÖµŠœ=TÆK6iHB&9jT¸ON¹áÆRv5n#?®Ü öÝèÌY„amhc#5qbnWn×Û]ØõÍÉ5ïšO,žF®bƒUAà#D¥‚Ë#’ ³„hT.ó5#´Û‰q)M#?Y gQ]¼G'à,Ö"®<6$‘=‘ñXÍzŒ¬¢©RÖ*ûÙgA»ø8´ò8¨±Ã¦!Ì)ØòñËLÁd_t?èÄp„’m}ŽÈI(º]í—4 ÈBºmÁ†(p®‹ŠM#?‘#RÒ°oá `ãmQ«ja¦,qPóC¢·',HP×LÙ¡MffÏa¨¼?5Æ1 ¨ØK;"eÊ49e7x7ƵšDò˜Š½ÂB9îy´¹ôÖàáQ(8v†i—I‹TH‚Bi£Ÿ‰ÚNhÒg;ê!úþVÁÀC+Ñ‘8–fË[(žy¨&*™¿Ù¿* F¾ðôV§MW}Ëf—›ÂgT5V®ä‚ñã ~N®#%à}6 ÉC¤£':ßút€‹AÆ_?ûãN=G‡vLo%‡äPZ˜ÎÓõ à¯fâDE‡‰œDPLdàKÁ!ðN†AãDªH~‡O 'B÷ù{é¡j\CLC¢ ò!üuÁ_¨6qG¨tëíËßú@#DT"ˆÕ½ ¶ÖÙsußäã<¸Çà ;Ö ìT  #DS#%Â#?ë¥We7Öt“‘éÞ{aà2Ež`ɬ™‰l‰åÓ§vÕ4˜@¥#%‰V–„T˜D‰Jó: =­§ÄÄõCe·­€›Dz¬j.ðõ3áΖ»Ù—p¸ê÷½ÿoè!-#DL@°H#ƒ‰ºƒâM=NZd)G%5;æ s{TЯÝús'ÜÉ_o®À¾Úù÷’’§VwÝË6¾§hØd§ìÐ}ÈsF’}èùN{»À5‡8D¦’ŠÄM3‰?Q<äDY¥#D7=`Öt„­€#?)—H@=ÏÍÈ滟#¨ ]ÚW¨9Ãï8HTUú¶¨RŠ‘"I#%|'(;8˜q#D#DPZJKl%hˆR” I(ÀB%Ð#%D¢D­*Ô3LI2M(&‚#%Í‚<¸(4¯Ÿ«ƒß_éQUB¬äâaþ Iý’ovp( ;á#?{L:С*hS%(À#ôéü¼òäÌwN˜#?ëQcOÞÉ‘ä)m1YjËciFÜ_Ü`$W)¨<þÒi“el¨Æ1ˆc•‘ºÈëúFT<ÈV%i äùa•‰DÑ)CJg­níËWÀXYnÅEmG3“ x›c°pêž•Å#DŠÛ#Ó,Ýq ¡§ÀèÚì>8ÙV“œˆ\ë Ó8ÅF<|µX3q#³1£l£ƒ1‰µ6òÛ‘g7Âä lF€Íôø˽ƒ™¯>9œ}á·v"ì÷™i#±‡ÄµÛM‚#Ôüps敱¦`&Ÿœ{ðøŽ]©Ù3 ÄÊ'Ó˜]²]í·WkÒ˜æË!s 5ŽKɈH%úO¨æÈh"å1ÈJP4<äd1/Ät6ÒK£D—F'Ô7›§ m»v=Ý‚‡±äK§‰ÖÐD¡å´».8#?ånæ-m¸B1±`KLg.J”רÖ,ù»m$0Qïé»xã{=pêÀ¬75‹ŠŠòB¢µÒ]`Ý¥s‡c›œá.ìÅÄ"– <¤Ï´4¡QZÕSf„³‡6ÝÄ0‰&zûxè!O”À}}Ì·‚q•ñVCLÇ™ÜÛßìI>ñ+ã`èIBGµùβ0‚Ô iòØÀ©ü/¹*&^l—ɾür"¨'•¹±Íb!ˆ¦Å™£E´#%{üÁøïá·Ê›?zs†Ü‚NeÃýXÄ(–|üÓŽoE“Aú¾†¬­ šÈCƒÀìïõ@ {´È4_h.è;áP4 Ä.ÒðÆ€9#D@æ‚ ’ (B!Rˆ%I ˆ#DQ¦%ݵñ³T4P,S)Ky£Zi?9Ð…<" õ8š¹v}Odí¢‡ËÈy<ævËÈNDCJ4…r)qq¶‚-¶Ò^²ºb9mgÔ62<€Ð%0-ëœÓ¹–‚CJR»têœcL³V&Ò1 Cvöý†0¿:#‰@>Ò‘Õ Y«¢z0Iˆ '÷û†Ÿú¡ÇÒøÂ-›ª¡Og¢r®”8=ç¿óGÃÛÙú#%I€¾f#%/­ªgÞý—˜m.Htéàsú½^:q^™#°HTA@™!4gÚe™&ÞÊŪ¥ƒyÒÔ7ç·Ï¸Á¼”ÙyúôäœÛé‹PÉGÛ$ ½pÓZf¥ I#?Ó™·n¡¤ý<·N7v¸Üùkq˜%¸ªÀ4×Æ oò/F§iÃ4Äê9e¬5Ø¿èÛæ³—SM÷&©Ñ5Fˆ?1CÓœ5„A#D¹ÿÕAŽ—±œ™íø{ÞÿKW\|0Àm°Xs&ïX¡U@ÑM0|ç¤ê8·ŽÈØÎÚÃÜíÁœ¤Ÿ¾&wš ÚýØúp‹¨rüK0Ö0e‚MÈÒ}Ÿ„÷¤©'Õ#?eÉÄɸ!¨•>œ^³½ìFç媀¨"i¤ž¸'Æø=#?/Ê]íë„>..Ïà¨ÅšþÇÛØã£G›ú‹ÐéÉ:‡€ÊaÑ´Äêá-  ©!Õ'6K¬BÓ‘9ôH%µãG®´ó“_‡ÑåŸ#??ËÁ®b“‰: ƒ”#Ôokˆ¹NÒæz¾°_xAîQú@:ƒ¥P0O“«öPÜ$§æȯSðð|ÿ¦Å«4ØÑòËî1V#%eMª~˜—ñ³†NÌÌ##%iÐÇ(3Aöƒ ×e)Š*ZZ´Á ¬¤c¤U ol!¥‡è1å=&F!®µ_ãÎ¥ÌTª!Ãë!É“¨³‡#?êÓ_óCsqÄ­(EÆðê°OîmIk#D* öЗaÒªž¼ÌÆèóߟ*9ø|(K9õ5|t™L:nÔÕ2ü±PáÄ'gä¯É0Ý`÷ú“®í°ç ˜‚ØÜ¡TÃè¥ ‹™ª˜V“…º¥D~û,À%C½-Ÿ:¤àà—ë`ËË{9‚J^-³UÅR+rQ·`|z`ŽJ#%P •3žwžâQ#%ç!ùK´‰Ý4ˆ$(6âDIð³S˜% ö¹ÔÔ#? IË”òH=Ú¦›Fîq5ˆ ¥#DŸmÁV#%cÞT—a@'—?²€Ú"ÒÇ ð#Ó>ÈN¸â(‡XcºÝâf)òD>~Ö;=v1!ü›!­QñÈJÖ9vsý¼ãÉš"ØÌ^ï3LSyhòÀT…SpØ9…ä˯«²|°iôcœ‘dó¹õ}•ïš'i^G¶!¦£³C#Döi-ô‘ÞupcC:#%(Y‹Ù¬vû‡ž“1©Ó7ƒ–Ô·0å\À. £´l±¦±.‘Aä$$öˆòhëWB£·Áæ¡Ö¤£ªÐ÷@sÔŽªØñ“˜ŠžñèÔ¸ûÐmüÑ8È«#ŒõÊ,Æ…|{Îà'‰ëø©Çê€)+Xð”ÁÇ0zDЖç#>yÞ÷#D+Pa3Xâƒ15JM#Dݦ(á"O “û §œíëuR‚;nóƒBHrÉ‹aM¥Øt‚ç’¸3s‡TàH#?ƒI`’Xˆ!ŽHP0HRPj8aÂØ<àVj…d*B"‰(b€„DiQ!ÊdÇÓ¸Cû°#?MÃÉ'.úóDzåži„|.Kcš#?D®¸ÆÒ5öØÖÒjäÑ3Sq š olPZ¸]ÄQèå¤i›vLÞ²Ðn#?†ß°öè~ Æ~#?gEñ¾ž-#Á•Æ¤5™ŠâÃÏËgdŽNÁŒ«¶à¸gyØ9{Ê#%䎗C’Qè†Rhª¬4×G„ãÝü\ƒ=⧠šF€ˆÎH®ä)ï¥ëÓï·º°Ãc«Š:zPéå)¨ ëzÁßQ€h-ëà#ë÷ý<Õñxü|´;537S²=à¡ß()‚ ŸõiÜò:Á6uîî#?ó€(èÉÖ£ðì{Úì;}ÿÉÉ©'ã#3­sqhÑ¿9kGîO*÷£2Pr› ɨñÃ9ƒe|ÝeF-VÂQLréË„%ÑÆ^pµ­K\7!ŒÞ™„åÁƒ!§V®L3#açRòÉÁÄ?›™c4aN5™üþŽ5­¾¢Bùs¨ŸO"z–érB33÷撑縒Û˜)•‹þã2a$„!”§È:®¡ó¬¯ìÅë©õhª¹>8Ð7-q¶ÇyoβÊÃ&(Wp6!–dQ"2Š‹gJRnÆø-ã¾þb# ød<湌Ž#%Ó”DvЗz`ü‰<$„´A¢ðÈ6N09†g`ÖÆÖ#Dóã§<ø^'z…±ˆØôî&€¤8g R½¨¢RIS—(g’=e74óÙùw¤'HõÌPQXØbôsq_âçH|„f€ÌG’òä£ê¤òJL Îi4†4÷#DÐÂj§ºL¹î‘pwˆ]-вaH©ÚQÙ*É#%#DP}_Óû¿ÇþñoÆ¿Ÿ!uþ;ßkÉ*Ö—¬Uœ 7Tg»7¶cM¤|šŸàØ`¨”_z<¾>z¯~!’ 9žúa¸Gï9ç0²=Ñ#?"ÒH™šÃÅÑ#?T5=Ó„”=;¤Úɰ؉¸6,UÈš ÑLXÍÂÀõ‡p)ñ‡… ýŒÁ6Ô@$aûë’9ƒ¬Øø#DâdXƒ› pƒ*P§åUc‘|ðÜ+ଖӓ†:E2!!jQ„ûýïåá:#ÂúÃéZ=T@§Q¤îjÓMºŸ—ìÑ‹Ô*\#%1Ü°40RÁ‹Bò\4 €P映}ü{ÞÌ]8@ÎJÒɃõ'UÕ/Ò¢‘ˆÀ'oaË´” ú¯#?ÛvxööåËš´IÁCd̆J ãÐÒ9¬‚8™ìBàZªŒ"ÍÀ?7æ (l6ÓI7˜§ˆšø‚¦¯ºQ?PŸ’áf¸!Â.!Om¦1¶! `ûQ#DUPͲ?Y…Pð)ø=£¹vð+=ɆÑÑFöÇ[¯ €8Mbœ*(vŸ×ÀÀÚwgƒ¾!Ôíå¿'c/=Ùã»vsY·r~í/¯•BuN’ëíâÑ|¨sÚ#Dç´ó+Ø$ë#?Âï¨CN¥wYQeyÀ…—© Ð%+é05’$†ý™Ä–ƒhOFJò1ÖàS îÓ»E5Ò§)NzØP€q!Š:Ðë4E‚«?WHæ lwz¼º_gO??4ªüðM"bP?\†e#%¡k³¢¢ƒÐøGzFüîŽÑxŠ.ç7N©lДKB…#DQHÒ# #?(4 oLJ*M9Ž0LXÚ@ˆ6Ê'9¹-!¤t¤ÄI\§˜#DOÕvPÐrû„šA(‚•JP¥Q¤´¥@)(›L‰Ø7™Õ$@´¬Ò­"&Ÿ¬ÀAT…¦ŠPÒ@“¬%&÷šf¡@Ú-ˆxI.u›†§A%hOé]Òýæw‹wRŒÓŒŒÚnéÛÏ#?®(hõÍåÜú ‘#?tëڔǜíË00AtÄ?F<¡¢€¨§ºÙÏxqä:um@[nc‚D‡£©PæË«%RJ{¼Yñë:ô­8fš¶Ç¦¸)Úó„ç"h@f˜:HáQ(ë"°LO‚:©HõAB>GÃz¨…$@í—% !  /ºC÷6REØ!ß$2#”¡ü¦³ü¡ÜòÙÁ†Ô#%ymá:í4ähq|&R†~+(…×°Ñ œ2™3;B÷2Nk¯¯c¾Ž´úÏÛâ)Âòë)£>'êB†HT ë<„t=½<¨P^¡èÕ]_HB¨u|†°H¢O&PySHÕŒkʪ¹Cbë¶-àÉEÚøO­š³æÕ¥ÈjwQvìƒ#(~‚ühaY¶R&(vaL`ÃçÒ€õ±Í4|ú`ä<n_*= !I+Óñ x^á<¨q»ÛQ\êŸÍÏ44Ç@1ôÉBclT¦”üm]a$°Ad¶kb5;¡Ñ”nϘìŒt„g†§ïLÎS$MÀÁÂ|Hyà9Éöª%Ù€PPP) h6#D)ß‘üsAö#öO…W®ÇQŠzùt9ÖÄŽF‘N°#ì ¡Gº¤äåÖ’䲉#D5ÀOž3`‡£E}bdÓ4“M— ¡üXwAÊ'‘eY„âãc‡Ù,Òr MQ$þ†ID&§ÛÏ\Ôh­Vêe6¬l(ÛƒD$’öoPZÔ!͹88Ü#%¬œX‹Ž\NE™ãp6Ûhõ^?Î|GÎn•$*]‹„6ë¡G¹<#Ûÿ,gäšçO}úÆlúcÄ—û¥Úy¸‰cú§àÃ?¤ŒgM¯K9MQÇVºþ‹xðØHäûÀÅ•I«,Ä gdœð~BŠ )‰âÌšlg‹i â•á‘FÂï“Äø‘½ ±ÔÛ¹­‹#DL¿s ºš6ë"_omÃeDÆ…È››ÙÒŽÿyˆ§Å—4¼lˆìI€SÃ>!~4Ð.éL)#?WÕy™“,™ÓÆ~9p2dÕ¼#?!‚éIS=W£§«RÏI=ÿ­¬Ÿwâ çÊiÏ«»’CׇÀù§_~^ÏEÀyxÎfgÅè\<Ð%xßÀÞ,È,2ý°Á#?óÀ›—yý#D¾\õ~;€}!äÑèüƧì†c?åÇ[È°Ü#?Ü+a¡¥wŸö=s#Ù݇61ó©zDºdFÚi陌·t¸Dhy.J–ábóν:h°y+À¨=|a4ÀÆ#?ƒa½Ñ§Mj®‘úÝÜÂ8Í[U¹ñ.FYï ÜÔ7¢LŽ¬¤‹ Å—«|ÈB@kA¼†TÚ!B4EI@ÓE¢š"Ó…^s… ÙÎnn4 ÈZJÓ›+¡ªa©ƒaßtðöpÇñôõS*b)ÌFC02üIGF¬Žƒg?t(÷•º”ÊW|¸*C8M”ÔF5)­%ÕŠ”/èZÉš;]ÅᇸŽg¯Ý÷¾“^‘fœa2ýÊŸ'öúœèÚ^0ñ9LOZ´¡·Ž±$ÏÖé¦=!ƒ)mHLL-Ü&¤ i8orz04Á¶"#?Dž&ŽÎ#“˜)Ç¥(Çš£„ºÊËU£êUÃ6°@õKOi³GÇQcy8'Ó(C}51 Û4<š¬–%’àÙ˜ö6‘²Û#?â„ŠÞ©ƒÊQV½´0ÊÄ­„!$†ʨƚž@–9Y dà Ù^›€ÆJ€…8±›6‰¦‡ÂÇ&&)3FLwuæ8íò„+NïWK4w*ËHîÑPŠE Z6ÞÕ 7 £‘¬nÇ$zÉÐvv¦ìnThìEÙîÁ’#Ž®Ô$G)hádìžùƒ]©µ#{fÜ ‘m¬ ¿[ë˜hMlâÚn”+ઉø{Ððš<‰‚lñh˜Ö¼²³3¯º\ñMLkìÙ!ÂÙÔj7L”TžHaƒWAy‹)Ø…™’®sæB#?ˆÜˆ7*¦ 9Ç~=Ç6Ÿ^8ÑÄ“¥‰ðd! MG^°±á•Å+šË˜Éë+4Ì Œ¾YXÈ”D ÆË\‘ªPiˆa8²!ìæP¡+®¶÷뉸¾^¢ŸQë½Ôš$fq“¹Ã¼æèu9)©¬ ²”Bë4ÂYà¤Í•+ntï3ۇ݀3—]±`Þ ™0„0s,­P¤fû¹xø6‡vÁxY ˜)*¦©b‚BU‚BJˆ%¡) Hˆ¢%%¢a!’‰Š^B˜%"ÃÊÞs¬w¾_‡ÎEMè¦ðé#?4ÐÖ9#›9ÌÈ1uY!"—ŒÁ`E`#?àãx‰VHW(<¥’ÌüqÓÛÌcc±ëi!²BXrÔw ]…ÕG#?"°É#bp˜ÅDÕ‡DlËdiòuF–ª·9Á1§UI‚ÄÓÇÌr3$4š.±•Œ†îÌf*7©1#?=”Ù;ÌscsÍË€a#D²`ðã ‹TÞF\cl1Œ‹T!Rõ2Ôù‡$ó*…Üp|¢í6Úvf½îh¨Åö5Ñàl ´·Í¦•i aæCg¿D¹ç½‰ôCì+ÐLlzÞ*Á6#?ç¹äº.\y¨€°‰§˜ùĦÌ1Æö6MìvÈ31lé!f§y³ÃÜæÜâ!СåÆy ö4‚`4#%d¦;#DrB÷+Ø;#Dâï*ªÛ… ‹e^öÇ'÷aŽaJ‡@ÕRFŒÑLc+™ÐT“rÄL&`æk*›j$*âò×\¦Be¤¡ŠMŽØŠŠ–©m‚•(FB#%¤“©È„ éSBHcœà‘H¢•(¢GíÇ,C׆ð#%¦ÆÏ]•+0s"11á¨Ü§tBv‚4 @=De4Da2 C¨’á*C#D<+D%HÌ`êDÂÂ`NØSí ,°#%¡'O±x¼¸·Î3!äÂA@r¨«H˜CxM‘1L,Õܨc¨„›‡ã·×Ï*dÑãÇ‹8ˉ#? ¡å@è )=Ü“‚0`é4% Ô¡KT *ÁLБUM‘UPÐUSL#?DEKßb… èU PCD @E3LAдJU-RR1PÒ”” Ò4 L-2E,LCPDIDQ„ÁP%2-@!!æTÄÇÜ&ŒAZ¾åRè¿Œ"a¤5Æä„àX™9É'´è‹ôÇœÄÞà"}zq8ÕÒA¤8E"A3kØïF¯ßŒE4#?4‘!M£B± u¡üî>Ñõ¾ÍS^EßåìÆ‹d“Ï,©ß#OÌÊõ´'&WAžpðMÃ#„(“•}6]ÓƒºÞõP(Y JD" R€ #D#%÷9R@¤I3OGo¶#?#%ÖHê}|5hU)M †Z”“FƒH!Z J&cQ 䆚y"¢R‰‰ˆ@ˆ?¯#D¡)$ã`((Cm6ÀÎ&%@CJP4ŒJ(Ñ…Á‚BœÙe©<ƒJA5!TÉ*ˆñZPýt?Ø5‚m.ËÈg ×¾¯ôeXþNò·ï¿ŒÍykkœ~.•ÜdcUŒªOùaü˜æ) s7M#D¤4$Ƕ\$d(Qˆ NEÀH„äövh}”Orz"%ÙÉ"‰“âi¤¢³ÅbÙ„¹7‡«l Á|‘ùó„° æ£Ì«]äÒIþ4q¥šJ#%ÊSf1hʇ?Q^Ê)Ò( Jò?d‰SE4ˆJ @”´2‡Ô!@8‘lŸ¾Uä vS+’~©S²¯cLE Ñ@ЄB‹ÈB-ÉEÜ'äípË£P?=£1}<Zt[€÷aê׶5ð >ØZU"”PÏ¿¯DâÂlj¦æ×À‡O=ŠêÌ1ß3ÈÌ~D½æHððå$Bâ`ƒš†¨Ú_{1-ŒYHŠêÛ`´è73Jzå]ëŸ^a8Çvhái'>¦†ƒwžs;™×ž}g¡îãÀÒp©2„B ˜ÄKyÎ:Z{  ®ìÒ‡$;"tÙ]!¤:B«Éü£Ü¾†1,Õ#D«€Êí³ó"â‚Æ-#?¦GÂéƒ!ú&lÝÆ#Dy61W€>#%ÂváJ,4ÑF‚¡Š´D•R îUŠ(•&B i(RšJ¦‘D¡),šr§½ž#?à?€s—K]i †‡AEiM¼è&¹Ù±t±¬sœårˆË%Û°ñ¼±Þ×pnsŒ”%&”Ä Aª 1!4Œ)ÓL2óæ2OpvHkM)I íJ…~’ÝÄr78#%R„Ì‹ ¡!{2:óÍ®{çKE Xƒ.ÈÒ´ ô¨Ü汪h’‰Š(sŠ¦#%ã‘ÅÄdNCÍ ÿ‹Àt‹Äø™éDã }’*„%ƒÐ…#Dûò¹‚iéק*ò2sªAë€Ð/¤$CAÕ‡äி8¢øÉñÇœdŽZ 8a”$´‚Š ¸èh(†¾1¹ #D˜1•((£ü½ÂX#‡CÉŸÆüq~Þ€?4g+€áGµòúì#?'$¤ì:\‡*Gø 5ƒRhvÆ¡]cè`×Õ dY jͶƒéØðJð¬#%oÌkSòNRÑ ò©-YÉ ²©#?tªG·Ü¸2’z<”ŠMü+½ž£¬è‡'Ù&6Æ¿¿½ýR^ã AE.)Ìäñ8ôÅÓšÀr rXæ"½dÙ{4„6€}rÃVã:MôÀ|õÞ.œôõÒª¡#?ª˜ªàòã° a ›L´€¬Ñ#%8“-$ÆQ0ûG üûèoß#?ej½ìÐ#Dˆ\ŠRÅkžÂŠv‘p„¶Z¨"#DÇ|m§¯Ø»w(ZÙF}<±iîu*‚¢k*=æpj@5S½4¸uéÓ®&u¯ˆDC6Kq¡¾û]u6[›cÂ#%î°Iy†c_:¼Cƒ”å`»vèõÕ*„iX%¶ZG4ˆ£ce„H‡Ôu«×|Ò$’9Ž~ð¨\ml­¤“úhb³ì4??#D¤°i‡SeÌ]‘J¨@öV#D¦#Dª@Ä g¿»SUkŠA¡<‚ðt#?Í߸?º&"U^K$_ 0÷¥°eS›Òèió|ž¢ÎÌôü4ñ·×Ô’þÙÉ© š¼ÃgîÓŠ¾¾³2 VWýöÅN‡ÁÅ1ÍåL}pò×·í©Ú6ˆÚΰ½€x(ëóÀñ—ˆªp zÅæ‚¡Ú|ßÑÀ C#G´.GúçAO¾ãe…;+êÃ\Á›F$ €•}[š1ä«„°F‚yÇ*ql™Zb"vÇd}vÒô¢Jãü‰ä8Àù9`8DšÈ=ÉäKm#?Ø\sii"Jj ™|â„x&)—ljè$2rHUÀ† „ó“‚ÙtG×îß1Já'¬-&ášæ¦¹)´þ~ðûºÍTÑ ëe)I ˆ.dy S-¬Q11(S@QGÄ°n˜¬T$B…ö†‹63¯ÕøzýaòQ¡÷}¸ZØÄ 4Õïd*‚$¡ìvFN#€Ó€û·ÒW­èŒ@`Y#%ă· ‘IçÔ&Šk»M݈åOòî!°¾œDñH¥;8@,’(Ãæ‰÷ĬKÅÞ?%ŸW~”X¨~FC[¢¹\/fbÇtÈ;ãlõ4¼…Ô>¤ì#¨±$A0»n}?Õ̾»‰°p;¤#ÌÐmŽQIØ€¨°#%È ‘Í4°I%!D“@R¥°H(@D0B#DH„ ©A U!.Ýb‡›7N~•#%<˜(Zç˜2Ý#?§41sÔÈHZT) )C¬Ü:¡Ud”$(á*šBI#D… ‘¥¦"Š jHˆ$ZahO¦Å)BËUõ|ÌLÒ~8¡"³Ò‘×bë<»…S Cðe¿ †ª‡Ò?@L S1LZbR ûåLMCÀ•¬ˆ#% $f†RdP‚")€Ý;7°8›÷ª*¥%ÓNÎ/×Þo¢;É—¿l^RyàóG\½‚ï(Ó‰ÎA©y`¸I–r€`Ÿ7ê'V ýÇÈ(”ªÜô^³œíêlEj‚†4g½§áQ£Ïöèhîþ¿€tvÝLì*j'ï4ÀýÚ‰€×ôNQ ñ˜mr?Š”›Àâ#%rÄlFµt”YllÈžvàÑÜ!ªH“O[œØåæ6#Ò$;ÒþöâüÊxsz„åH&›OdZ¿Úò`´Þø’0ÒÙè}Àþü iï=J§ª#%ô ` Þô’ftyjZã“py¢Ý2v#%¥ÏHT×ìŽ0cE) iDPUEÎ0Yß()¦ƒ°cÀG†ÔGúoCÂX`¢Tª *‹ÑƒQC- •TATQ)MEä)‰Ö÷Ö`±ê¤É+­F6•Ÿ®G`†‚£c2†¦•²üd ¤@C^a9RyܳK+È$‚¨)ïÐÄMpÀ‹Ý¹Ãkµ1#?R@Ç ÍªtȾÏÝÏ]õçx%1<÷ý»«Ø††B‘Ž†!€•KñÜ6RÓ[¬e9Ŧ)¶ù“Z Žyëcç~Ò8ˆ<<•P†`àqæ‹V F!´FŽ¡âGKF%¤H«Û«“¥ý¦1 ßvÍ$AB’Gd24”!BÒ`7®æ IRR`ѱñ¨7Ó}ŽnøŸ0‡Z˜Š`(œ [ö\¾*’l,»há¨É Ð#DÒA(KëΈÃ}ßXÎÜQN[q8nf!b†‘#D*Éh!ZŽYÿ>…„oøtÛ ”˜›ëÞsmStàr>Ó¨!Eá øðWH…… 7âsp °räË1Fݬ¦õF(ú0±‚óæ8 †Bè•,6!ÅE zóÉâÅ#DA"Òš0ù°Â)‚ ªd†Œ U@ø û&“DãcðçGx]Øh5~\£ÎmºôL˜Ã¹.Ó/™óPŒq„1(†}8Š)¦DŠŠÓÚ}zãÎr¹Â¨Y… #Œ#Õ?('.€Ù<è]}I“ê_ªéëù±ëcsžÿkä §`'ùÈ:‚TûpD|d´ !#DD"¡š(  BO0HûAt2ŽQ•TÒ£b,´h(ÑM‰*-C8ÛD¦"U I@ eØJ×ËÓ_#D²~$`Ë@˜a!ù™!-…È”ÑL ¶ŒeÎ êéÁ¢¡€#?"ñ‡ˆè\Éá#DLE yÝ– 1щ""#DÁ©ª`”¡"èyD¡…•IÅ{ÎèK`ñ{1;³r ;STù“ƒ°‰Æ= ôþýh»Ò0P}XµUQ@3@ùëIf"¥0ëW'Éš4ñþ,ŒE<ùÀºB‚©P† ©«˜ÍTssš"¨˜.#?™X%j¨¤Æ²m‡Cý’8Lòݪg &H¬µaMÝ–[Ÿ|ËÁØ:toØ/˜=Ô#?RŒèQÈeˆ·JŽ%Ö$Y!ïÜh:Ѹ€ÿ¤\šûPÑSÖ¥ ¡éƒA.á››·#bÄ 1Âôɹ+ÀðÀTÇ 8ê›ã}û£úúÀíö{’!ñ&,“(„)Aâ÷àöÁÓ†Iƒèເ„|¹Íü;TÇõnW2E–ßw팈)ùT4ö4„~ê?dH#Dg=œh£Œ‡ˆ­†.®b+P³µ,Ù:°›má÷j|ýÅéüM©_š%#­ÃE¾ñ/)¨_«Œ,Q0„,qëO}ñ1rIž‘è†ZŸ—áq› ^s´“¾C=XŽFñÒ“2µ¿)Ë2)D„–0b¾çfW®ÂNÌÇ‘Ís[€½&‚#%qÇ®f¦ ê´¦¬€"\J‚J^%E4 eª«Ë-ãW*$ñŒ°‹yfvKH6N¦4ê\çg'6¦5Ãâh¥-—«ôàÝÑ"ØXpá“—Ó‰¥=YÍ&Îe9À\±æu«ƒ¡÷pÔ3“žŽöé”Ĥs/–É:#Dk#ð?—ÅÉ9a¾ÀCA!r'ÆÖL0j;=›â4]±ÉÓÈؼÇ.CŠ#›~U¤†‘:Dc¡ëz#?mZÄciiDšR'j^GÆÙ YÍ ê™í/«3PÿŒu¾/ÏNº3¾.qFâè¬q‚‘i•Y:¢m猑—ËÓñ6~ÛìÚ£žûh¬¿¿õ¾¥Ôà0U4?vB`ìd‘ϽŸºÊ”á´ÇœÃçêLÒ/‚HÇ#Xï( ¥EÌ©ÅP8Ž¢‚7 gâ×#%?;øß"#%¤D§#%Iêɲ½Žc@®0#?°”Š©L]\ƒ™õPûë>Íê#%ÆÆÇS™"É#?^¾3 Á.îÂp÷ŽB ÜBfÕ%³Rgµ654ƒ 6)b†ÐvË!¦¯[ŸdÐÐ`6ß–øˆ‰#?øN9q³U;8¢íÁgtuëݹõœ¨BtÂ)öûsrÂxDCÜÚsº5ûj¿Ø¾åÃü»{žÌÌ)£ÂµAç&Äõzzq¡;ÄÜ¡„þkД L¿ß!ÀGŽÿ9ÀÙ ºMÍRu'ÞAÚ äô†7÷ƒy#DH‚!;° )±0L&‘¾rƒ¤¼w£¯~Ò~_L™FPƒMHê Oüüö,\!›».HÔ¥Ðp4|°èÝļ¸¯Õäø¨t#%éayFJˆ#D¯P®p4D«ø¿S¦…†xÒµˆýçË=wáÉA¹cˆ„‡ÜÕt“?Ñ-cŠ>‹í\q¿ÅªIÀ»²3î[Ÿ5•7xÝÈÁêQ‡œýy?fÖ}"ÿ<ƒvk}7¬®8l.5G)ÛX6>öv$XKP@Û@þˆ„Ìžæk{ÙT$­’I­ëUŸ_¤Á‡o(‘¢W Ò(Òó‘Ò8lƒîÑßV@ÐÄxÊéM`<•òC·œ¯Ùèï1™Nj˜=mÊ’¼ßŒÚÞ¸ÙÖ|è{œ—žVÊɨŸÇdS)TŒÒð"çrÍ­§=lì”`U+†÷ÜÚäÐ|k Ù)Ð÷¢¾ZÙS$Ç[ãë¡×áKÒÊ™#ТÌÍó#Dh{#Dº1ñ˜þ¢ žU¤’#?ƒN”( 2EÒðã$Dß6 ƒHÓcg‰ZÒùõ3{Ræ,ˆÜ=1µú:äOÙŠòâ²Ï=a&ˆõ˜Ç1„1&ÚpîÞg9t7¶“A¶Œ#?ã) a“9b°íµÅy× Í&´SÓ“çzÎwJt¡V0‰¾© Ï0šýF`°U‡»—,šÁÈtn R ùû Š‚"õô×Ë­˜²ëVÙKemP¬ç)Ø8úf{jIýŒ€*o±¹Q‡—Í}¹ËÓÒå÷žgÁôñðüT~Üœ&=ø¯£4X Üð#D ÷¨ÂÚ2 ¸JI š`Ä1DÊ@ úÖ¾ÉE’¯´‰X´_§WA©ﲎN#DòÁ÷êCJ¢Ê#%PQ#%R B{˜ˆ‚%Ó–ž£–ðåÓN(BºjyHño—w~êz¥#Dö“5äŽó¨#DJN€ÑPÓ^ˆÀÛ=l”ÅØv–wÆ ò Á¾òå²Í/îZúO´ÃAèè#?~ÃâWr‰CÛ¯Ñ÷x¶OZﺜ=4âLn@€K>sÕç$tØf==~>p~‘’\ÿ>Œ[šD%TïøòyCÂEJ#D'Uº£¾¥©À@(–¨€ýüÀc(21 z“§žƒ< åì0yÈ:£9bÕQ¦¿9¶ì2­ñ4SBŽ êò¤¦$õf?É“º\%0$ŠE±„À¾íChSH€¤|´ª"*©TŒ•BÈ«:j{ÿÁ‡bW—o™“Mñâ>ؼTØÿ‰ÛÚH/>ƒgÅ7>½ÁßãÌ {NëNéŠíî´Á]=í)0ÃDc“ϺúIú3 %Tp!}‚ –Áè€(#? ÈÈ…Qã"™#%4!“'°keBPðû[ZÆÉ4j <à8hÜáùÀo;Þµ±aí³æ¿ÚNRnJ€ìCqœÓ€oì<Ö œCì<ß;#?s¨-ƒ–þz)1êWëq†„F2K§#DÌ:¨'ø´hßé¨Ú_LØÁjFšùëVHÜö.H¢ƒÿ5Ç/qŠ,Df3›âkãуt?|#?xô:‘’¾ €$ ðöˆ÷rÂZO”˜` ŸRjvÅDH؆à8b¿žˆsÔ¾ÏB¶hñëlDNNšÓ>̇'t tÉF#?F¢CøõˆâŸ‹êxI>ï ‡ ÍÀ¸=e\²J`ë±±… >}™Kc'Ýœp1Ù8]Y¡#?%)>æ Pƒbâ%Ãú¤ýÔBHÖáï“Ò!ƒ(4`;V-4cbŒœÚ- m2µdý_%¸‚ØØ¡¦ia€0æô(!ÍÆx|ª+oÏÜ'¡Ùã#D媨²['Š¨„§µå gzâ˜2{Q™Y.è¤ëS†ÖÐØß0FÚÀßYC^¾ìp˜b&‚þAî‘!!%l9Sø|üüüX1²?MíyyŽvÛ$*ªr"XÆ";j~Nœ#%£§`Äs&JT!#½?ÃÄìQü]9ám–›‚Œ±£Âæ¤õ páAåJŸ›Õð™3“Ú|zÉùØvBr_«Š-]7p–ÓT• -¶]%ÂË0Si4t ¨‘¢4nçIÍ(#%eaI•%”%!•B€ˆ˜'~ NsË6«#³¤ñA|¸¾y¬<üu¼4Ðz Ê#%àÇ©ÈTÍL“A£D‘AULÄÄ;I‰"#D¦CóÏ8¡$‘ @¿oø¿àÈ=ëLû´DÃÚŠO¦ÁV´ÔMUU”ÌHUL“S@AS¥Q EMÁIS$ÑPÔÄ”CRU PTE3RŸ‚ôoZùžTêh¦Š† ùŒL©9I‘QGYÇÆA÷Ý_È4uö€´Þ}“£)bånØUÚͲ”tkcbÒ""LqKOKPkvá?‚‰$Ó[hG«xÄAýŒÍ†º7ôOU_1épüã¦#%‡ïIG!ï>´m¢z1E.ŒéÅ="3ÕÁØdŒeùæÓh>ÿL½uä0ЙE3 K†zÈ ¬sZ(ܨmŠ"Mùöͤ4ŽÂ`§1Ö÷„ü]f´© À´ã0Æ©x¹„¾ga_"@¡"‚IìÎ$nËÊœ1>¾ƒ:…|‰´q΄ґ¹Cõ¤?àï™­Ê;pT0#D Á˜åùjªòËÉ£‘$ÀHôˆút÷~ÛÓ™‹{dL4æòkL1æ¥qµ"Ç¿äZ[xÊõV´³†"92Á`â`@ÍRŒÔ÷MÕ&áLqý—NzJ#LZ×1öº}&›dæFˆ—ûsý¦hhˆ$Û´Û0`¦IR’ëC –²Ø*™pŽE3o”Àœ…;vÀ[&¨ÅlUb>’rÎyÁî“KÊT­ ±4f0ˆlÛhØ ÂÒD3‡§F a±¦Òmad"—x¡é"<8Ê4ò-ÒÇ~h•b›×ÎjQ(!„Ý‹t0Œ’Ål†W(¬4óƒ[¤ÇÔÐMDAñæF¸Cà!6ß>f¨åfË“‹èu¦ÚTˆÛ:`púg ê[PçëÞƒÑç‰ùb“œøŸ€Ó¤ffjhj»j"B’"¦¡¤’b(){h‰“ð1®sÙ-o:Ë”"oðŒ‰Wùùtp­ŠPžÁît¦‰Ù~c¼Ý&„¡ ¥÷1QÎxaJ‡†áÅÜÅÌW&ìsŠÅÍ‚c¤èZˆ4”ëg\5®b­«Ñ/3†’#;1–M—cuØï=w¥áX×i&š@ j8[mÈ @‰õ¼<#?ÜAÌæ<ƒË—“ܺ¢‚˜ Ph융)ÙyÍÌã{ªó†Dt…*^`yÍ¡!^Ú¡#D­#¤¡¢çÝœœ""ˆõ8äª\qÜF³gU|{Ç¡îŸÛ'Ì|^üMr#%ÂS&ƒ{50”©A&ÅÑ`¡c•¤ØîZIócûøÞdÕ£A>§4’ФDIœ€JÇ#5šåÅ ‚?ÝÉ‚¦ˆ(ˆ §»0DPDQE Q+m¤(†¡$Š( ÙÄÕ0CS}£3H”0HRL¨ïÎàºAñÕ1³#?vܺsC·Å»:¹=IÉ $Ñ a'@ЌκØkÐ;é17~‡Œ@JbˆÀ&èC•šv_,qÉ7¡‡"p¾E~Øø¹×lmEV¢øðÞ\Û¤^haŽ˜¦˜e>¦6ˆzU¡Ù–}<ŒPò„dÜÃ0ciŒÜ#D:¡„I¢Ä0!q¡#?:NoÎT#?+\ƒˆ›<Ï!£lEé¨ø–Q£È}¢¨0Ø”ÐÐyµ†Ì(­œG”h+H€ã#%#BpD#DRNò®ò ó`ò1r³š¢æâ°p ¦"fq°''AùE^³Ã“’º~×qÓ/xq8«-ƒ AsàS’šbU#Da´Ó-lk^Ç9²’£3q¨¬H6fYh£2-¶[" —D»…$r5– ÎmµžO;»½j¹ÊÕtõxÙð$Âê8ÙÑl‹ÀãE¥·b#K€¤´²ÃBàizB°,WcL’•T¨èÒÐÐ1Çï/EŒn<#?I§¶¤·lÞ‘ás3öBŒ‰­I€ÚÛr(HÖ™04®óâÆ:Û5¢If³Šõtǃ5#?;1Q–h—™¬Ë¢3=#Ö”ŒvðkA m±œ«8r#?7¼¥U¤V«‰ºæeÊ”¹ \2ÂåÁFìm- j^é‰ò4+Ò‰•M̱­DŸB=!\o›0víÉ1­Œ—˜DFÞ™­`Öb£³ 1c‰’ÉXÙ,ÚÅg‹ƒ#?2(ž¹‹ A5pl™iÚ½U7”l£NC7ùôŽ˜æ†ÅFpÃLˆXVR2ñ$‘#?†dFÊH„õw™kŸ_½Ð»\鸞ɀÆ#%Ø .#²)„“”ÔXÔi25VÈÆQ11à±P­æˆ FNoFÀtŒñdƒÑ!»§LØü“7¬¤a´Ñ!Ã#Dš"f¯ÑÎêI B`Y#%5#?Ö¸ÃX ×S éëíÜ<ërQ¤8MIÅÈO›AË@iÐOžòz—Ê!ò¥ òàÃëÖò*ŠÂÐit3'y‘9#€ŽáÆÙ ÁcF÷È»ÌQMùjØ™"hŒÛV¨Û6oZx=ÒïæAñøï:d«§BàÂääÌŠµDb`4‰Q¨ÄÔ#D0`Æœ#7M¼Á„#?PªUÝŽ7!öìÅ,Бꢔ¯v´†ò!¹r–Õ´M&!Q1v2¨òV),¡*ôq¡D%ŠúãL€xc$T3C§ ™¾,‡8 ÕùÁAJŽ8¸VÃ)Â3ÍMt•ô8ñžH0iJC)iÀí“b&X“Ó¼2þ2 …>C¯æJj«¢§ì÷¾š=1a‘Ðf•š§lr/òspÄÐ…1)»ƒÿ¾Æ¢é¢¶m¢F\þûÐ!Kìò=@½`P„MAH1(Ñ@R©@%-DHÂÀ$R…#%P- 0C2ƒJC,ˆÒR…JT²A2#%P=}Hh©ýâ5M%b""¤6_Ò't4þô˜ù‡÷GDbœ”ñÃJzŽ|`þNþëC¬AôT¡L}ö" t‚%ñ½ŸWíÂ9uM`S®%°Ý7ðoÅ#DD5„(¥ Ð8‚1#D³lh(#%Ä'Ò!ŠTÒ¢˜T©„‰MÄ~Ó”Òøiáò5`+pá¹ýçA%ãm_÷Hën RƳ"ŒDfHº?f¦#Dítц<ÿMfp6#%ìì$He(ˆJ)™‚dB!Dª(¥@¡"A–db@P’€Ú@¤„癎[æÉ÷=ç•ddµÄÉSâÂî=W#?þÝõ:®‹r1”¨&Õ¢¨o2jšd`þü†ŸÉ#D(QDütmì0Ê*êÈt`TÛ'Eé»Â“ÉCPòÓà[ŠQ„Ö@°xˆÛvêxÔÄÊèjî݃1ä䧦ç/Ú9<¹Q#D¹¸aËÀ©Hï0rî.÷—]ãSä‡n• ˜ÜŽÁIÒ°žAÂäf^󺡪Ee:’3Ÿ¦ÒÅÈY©˜É»›jûw]‰’á#ë‰ááIβ"\•¤Ñš¦K«r3DAh=|4r ôg>Gûµ}ûøŸÛçú¯ÕúŪ® €ª(ÕÑÑ—€$qã;m«ØíGcQ†0'oÕVõh'oÍ~F'»Õ>c#>,#%=¥Š§\‡é½§V{ž¿]¢,yçÈ3~‡ÇEÞ@×wfË;å—'·î¿<@ù5:è[Åy%0íø{.ýAì{9#%öBþ¢M6ÏŽo®ÒyõL‹§ê>p†`s†§±_\#?¸‘¢ÆÚ,ÖÒh'm¡(l‰Bf„¸™ïû“À}Ð7#%ãÊœ¡:᪈uë–vbnAMAÞ˜ªrT9*Á@Éœa9oŠyùrÍ4”ÖWJíþ)4§ë„ë&{~\Û‘úúj®¹5&Öó8¯ÆOÒT(4(œya]ŠÛié¿wy¬Ã8 KïñûË ‡ÝÏR°â¥nbz¡å¡Q‚HJ8z{W%ŽJÞ2O1•@šô8„%ëÖ_‹û?§ ØÝÛAîç,Ò7ã™±±!Ó‰Ì4¡¨‰¦Ùû4w¯Àž™érú²ü#%õËÞéí)Ø]!JÒЗ@$JP4ÓAM#ñƒ–¹#?Ì éí_ëcüœW#DÚ¢/2¹´&€"(Ùu¿ÑÉÉbS±§Â!ÛJèpKˆHèyÂ8Ñ/#sœ*ú%9R•¡ikI¥1)¥CBbŠ‘¥Ò‘#%éX‡F´!ÿQÌøBÝÚS^(£ _Ü@!Àî¾^ÓcHFŠõã©'vPCਤ°sÆ0A#?ÇlÒuÜë1Cå ÕòϘøÉ#? ð ¡.éôàž$ Ĥ*…ÍJêâ"ÀÀ<€}$#%.£Ç~#%äà;Js’¶%ÉÀÇ(X¦@ˆi0t]dßíÇßw“ÏàþnݲüG’KÙ‚ðÆÂÛHŠ¸X´V„ŠV‘XŠ—“@¦(€?„”{”CȦR’©#¢+Þ &vù÷í×ðý'XKúI*$BX׫maÓ/ݪ„ÃͽMð%2„ÐÒPlw@Pݸ©¡÷#?+¨.#DA3MÉ6Òòú¦†F#% ]¤Ñ"æHOÃrOîæᶬºœþáÐßáÀ£É‚+ ÂLyéB`4C7¤Q)i „V…a P9¦€#DBšT#DÀÒÔ#%‘$/ìû„;A¢; “¨¨ObuáØ(T ˆ I¢‘#ÎV—l:L1¤’CÚB xTB4EIH¢KM4’%(„2Ò#DDP´ªŒBƒ´#?!0C@ÄL#D2Œ#%Ò4£úý'‡©üôÈŠ;s^¤ßžˆ¡ý©ÿô*žoogëÓ‹gßýœ4ñŸ=·aÂõ½l¦ìñ_Rk€v·úcðÍ>RÁùÀAÎÁ‰£‹¼‡ÃÛã ±X,e–ŠŠ ÄÔd)}Ü[1´¡Ã„>ÕîQZ’…„Ûì;{p9›K×U#@RCÌŒòä;ÅîŸ9âtgI®b~œz’~` Aú C €J@(#D_2uo"ºåâ'ý`™e "‰¨˜ˆ‚ ªhHbHJH––J”"#DP¤ ‚&"ª#%ˆšh¤Z@J@H iZ¨BRˆ¥"¡%T(ZR$R™{=?šÄÜÇq¸ã¼å¶%«[W9KÂS4r46áÊÜx‚’á¶ÄFy·#NÜG›%MU‹±É1È7lö:ÉÉÝ瀣—ay$ÄÑÀà™æ4W$gZÄ–¯×téŽÁÐI®ñe ãŒS!GZ!áHåñ¬aui¨ Æ2W$®¶Ø6&5[I°‹ðºaVB³ÌiFˆ3„ Ñ€à¥ ¶2^kªIˆœ¹k5­Rò#?÷ß›h\5Ù«\…'§å¡*'¥6>v@»3#?Ò,?sËEºÁ¿™‹cWþüSc $þl¤Ã¶ÖŠû²:#úñÙÐyÁÀûËÁ<…=j0}\Á Ðh©jH"¤¢6ÁTÒ[#?G Ï+$XÛ;›Í;öóØ Ct±¢¶œ’XÚæ#?k%ERw8ÿ‡»u›Æs&ž5‚ÎŽh¤ÃL‘=XÁ PÄÁ5L\,EæÁ1LQ3DÁÀBR€R” ¡S,ëFŠ(Bc ñxK5P3*‰`wòêIc¹OûÕühnû#%ø댚rY2n™öf¿'–rʲ¤fBó};lÑ«x?™5›·¨¨i©ˆwÇìÜÉ&*ŸªŸ×ü¸¾Ðûÿe=>{ðTˆ8±ÑÂÜvW—´Ö“å'™5SRó#?ÛÉ!!&êxŸìÜj:WNLŸíg&PèÞ<Æeó‡‚ýTÌs.´§Ñ˧)0un7[˜q\ÊþŠIù§Øî2m=pe÷nËñŠuG«Ý« Ž‰§TÏ-‡¤R#9-NÇB¢eWQÛ§û¶÷ZÌÿ¹{©&Ý…”™wÌ\üqï\*\.‡ô{^bNâ5ÍÕò–ýÉfsÍo†Û³~vòçMl;v‹Ya¢Ë]—VèNN#D¬#D:ÏV ÉsJ‹0cas|VÂ5[â_ŽÃª!ŸX½N&_)KÝGô¬Bn²ò³—}\fÜÚW¬Ëøqê‘Lz©—¥±?O[Ú_MÉßžþ·óÙÓt¼äùn&·C»¡Ëò9ÝÇmÔL¼ÌfZR=N ^[®+·Ÿ—m¬\Á#D\o)ŽÉ¨þBöáÒG–iFú¬ÞL òwÕ¡ã¹+/ÍŦ]œxÀð7>ªrc8;üªåñ¸”|"åä@š”«‡6snQ!;˜ #D6°…èö’P$+>0ÆEZžd§xïêT:Rrœú×45ÀUz¹®ër<“ø»{ê–¹ÎG¥†dB‡™{íûªeUŸèìqÞþ~_ijðîÛY±ö)8s©Ä)qÎõ¹1\¥òç#DÈóvŒùܴ⓬ “ £Ò>_#?yRN]ö>)U–UtaÒ!ùàÏo[8Ó>—#? ôîÜ Y™Mv[âœREóâ(±Ý;žÎñßPôìp¨¨Öh¾™@Éßë–zÓð¦ÝŪšËÓ'| µ—ÚçCå3e_Xl|¶SŒÿ¥ÚȪ!ì|EG“Œ´f÷Ú9»¼kÏ~š¼7`t+·zó\«×\ñÕ!ùìKIžë>¾%!f0w߀ÚËùµwâ˜éqprFšl]¹¾~§Qlº8rv8ûbëqÙ×Ów2e½¸sÍŽÛ—ôw‡~oÄj¦õw5Ëú+8}jôŒ›YÌcûϬTûQéÛ¢aATúXIzÈ9o¥wé^òÎ{Ï·\#Dý»ƒ·+JWÜ?0ÖÏ!²kçíµì¶3.âŒàÝ%`Á#%ïj1)L“˜¡ÃïÜWY®¬¯£F#?JÞ_?9ÐMïz"î°0c‘6ìÞt%B³nwœq6øŽÕræ¾ÌÆ0 Þäö¢É¦³-§—Ý™¬q¼uøÞÊɪ›ÓG:ãoÜ”€ÅïV'­PàcXàî3¼çTK %W¤QTµ©Ý9Ò1îñ”pק¦åS%·Ò&Tø¹Í:Úµ€…xCåWiŒ%Äu¥ÓŸ8|àMÝá»ôç\b_ˆ’Z»ë#D á£Ö%6©‹}\IÛžÝÞ{G¤AÅy…–äzï ŒLÃú.áëèQ7Ãõèy>×¼“wÂFM%å6Ë“£Ín±YE)uKDº§]v·“‹6©b¸_¥œ¼I¯IÉËü–4ÁãRçE@FU‹ŒSX±Ø³ÌsNÆ$•¾O½MPR=Póˆ‡å+ÛC³Pdç)g>nI¶Üâ²z\nk‰0C §’†öùø ;aõsŒ¾Ht‡Ò=^'·“Pf‘}²ÎvZ¬T‚X•DCa“ºè„¹³&\ ¸Dêêiæè:®Ø{ÚR™f±E¡¹Ú“Å´Å"ÌÑ–`&S¬ÜÀí)šT¯zX¢xÁG²Ê˜À½ÇÞÆhM@„Æhß~1ì?‰²¼iÎyWáH”˜ë¹¢úÆß²“<}9Äù©Hu¦Ûí<è!+S¬€¡Ì˜•aYrTÉnñ‚g§wQ¯g©“¾¯77rUèH&_hBæL Ð„ œÄ ‰Q9ÜN*Æ!kÅÂ#˜r‡ttÌâËéL*·…áÇÒÔ>üF2è§Næ¾ %a×e ¢á¢ŒMö]eÑÆ<° á• ‹9òc䃮E¼Íç/Åv,Ž»qÔœÓW3Xöí¾Úá÷"P.÷‰iˆÄ'¶ó\R·Jé¨CtðÓ–¢æ®é+ÛØ—8Œ$î:ytÈÖ´®Þžáj®iøqCUÃ;ň§u2Gl=+BˆÌínŸãϨâ&“”Å¡È+Reqf#œkÙ:l¶ºº¤Ü½²vVpðÊ×:šDˆ0*RŽúvd!ŠM»ø‹²¸ÄÙÊH£Ïwm×(“n¶üíétßt-™7dhŒŽ°îý¹à«Ž/«×ÓciÇÑU*žVV¦ÖC:gC¦ˆ]× Å˜ýê•\KMyLÞí¾Ö´Í÷ñ“ šµ÷ÿƒ©Û=Y#?§&üÙ6Õu·†½>—5•”Ž’æù§õ§#Ò‡‰OÌiÈž·µ)Œ8k9;1’àéhð¦ÇBA#D3nRN×WßX(H[^„G—;âòqÛ6ÃŒ#£ì‹g})Œz¾Þ·@z#? Àbõ‰ü9Ô.˜°Àî³$B— Åy²å#D¼à+bê!¹#%Ô©¤i@è4 Í¥aªPejÛ—Ck’¥AÂÑZkÃÚ^öû)D-ëƒqt]z)•z¯ŽÃ÷Ois\8PîT.Á>NZ®>Ke‹âÇ w_9HÃцò àq‡ÄZ0±ç„zxãTÉéŠ89¥8XS¶¢i2 ¤Ú´…òƒH6‘s4ÀH%pâh) /ËŽß#?¯k#?º¡F¬YGÏ$ép/€îŽ=ñBÈóMú‰ëG|áØtæxÌâek–²Ecd«YÒ±xΛc8~\v=›#?Çyr¾ï <®ýó]}üb.,^&Ûï4Ös¢‹©ax˜’lØU‰†õ>£*’LÔù]ºªìz$g”mõÆ»_]õÈsöqŠœbLX!Õ’&›µ6~ÚØ"¹UµÂ…#?ÎïwÆ#?ý¥Î\Äý};x´Gž´Kc*­ij“±,qF®*ÒI&C»¢ß]ÕçW‡kxצ7À°‚28pklM4@°“¸&m‹Ó[Ô´1¸¨¹TèvìvÁs®¶Z¹D›f0ªu­ `Ò­N%eË3D/,ê½¹Ž¼p .Î&s³äË3ÍëÏ4ÜF´ûJjV§ˆrm@‡s/é´] oœÔ5"ªüc2c®¿%×Æ#?jµÐ¯ÀòTôI©êäÁ6ðš#Ïií6rŸk1D$®ùó¬zkK2cµ!'åÆt*t˳;¹´œæ…œsÊ1î6¤=EÝV„g¦ë­]÷Á?,¨¤ó¬gp=.ééÞOû8«¯ËFíؾ”ð诊öã#?ëÜñòUP°«^^d¾&ËM5ß3#DžÒ°¡†Jd‘Ë€rEµ6_ sQ¢ íaaRø`×E€bI›nj2™‹äd¹Æ×ÝÝ#%Ûêg{ú{LófPï¹ñÔuòY/â3™Œ¯ž"¨¯vc’ˉÞª{òk¿­sžúítqYz鸮·_©–›õ·ÆÑ{Æ/3ªi8š~& wöEäטºzvgB¯¾Šr¾Í$tcxà½êU¼^ø¾ª¸4gµË<ï´æ¯øº™]íã‘tçnýûÈw9òiÉ…=B{ž£á•è>9¢™îÌù0é|©³¯°uõâ´ÜX ‚"DfÌß-æqcrR0„#„%6ëzyY´JF]#DT™ŠÖ¸Å¨úwsnÜgòƒß ÅÖ;;£Ž7O1&è씞ïùý%øG§¸/©ÈYËÓäçÓ§uà Q™#.®`0¯ËçÝÂvŸ9}bÇŒâ"ȈÂÃ4í@z¡ÒX4óŸ\HÛNŒ§àñÔf^üå]Ÿóñ]YûÆvJ±-¤2Õ< #?E€ÎºÀ4h"BJµõm,Ëp>m¶s·Gφ5“‡¥>S7–;ø¿$˜ŒÞ¬O¬ñ×C„¢j†ìP¢¦jkÏ…Š±M‰ô"Ý 1µÚÕÊîíU…ëÅ+xÊ^;ú$4bCÐâ‰/V½t¢v§\² —çžÃŠ~ÏJçÀ}üÎb$,úŽ©#%A ƒ:ŒOj¤~篎¨•ydózs' À}=°}ß(ßÁBj$¾ ø#D«†<ý0M4…4$qã`8t™éâ‚Äø½éÔ;c‰y6Â`m•¡•#…«‡æªO%³>ÔÖðÀ¡TIVî&¨2ˆB†šhǬîÎÈa¬×OÇ¿_Ç:MG`:†õ†•-)+ˆÊðìvߪŽÛ/)ߤsŠ µ³ uI2FÒd ®0k¾zÑÓh=à!´ŽC|ԒÄ’S"],:ôÎìFẼlzê6JR(sº¿:…â61ŠCp鉜Uªª®*´ïφ#D\ßV6:ÔDÁLƒ ¢E8ãzb,@¼|äã¿nþü'84½-ó&lsO_òV¸v9U8YA|¯…âlˆ…ž÷c¢ëìe7ˆ(¥‰R³ÕZÒ-V úüoœh·F‡ƒFî½'>:ã†ãQê¡,*;sµ )‹^øÖ¹\íy¡qzº¢¸`×B‡(¬X‡y›º¡^µÏYÌØdÈ­üï¶fžÚ#zhÜùƒÓË–s1Ö]÷áÞ¸¦i0ÜNº‹Ÿ§·38ßJ#?ñ¸ðW¬gè¢e ıÆtª|&~&SöÍ8…×·±áÑvdåßh8#PÎèui³*9‡‰*äpÓ_x-øùè³€ÂÛu´ã˜8ðÈ`Ú1?_®ß,e)—©Ê3ÕÜ•\'QëLÿóf6:ËüÇ yÜȉø0•¿w½c»Üz¹ÜÄCË•ÛÆ|úÅ©ÛëÕk·‡îªÜÚ=\®<¡#%L Û©îôúþú49?ágšf"a&8†@ÄŸ‚OÊÂ|ãø!¾Þ¾ž—Ï~óH8ã2I.@¢Ó›¡}Î_¿;55X{4…0í+ë¹#DAN]§Àõ7ÙDþ\vj3—8T¼1üþê­æEƒøi¦ƒ¹U-=–_ð2›c€•t¢Åӥ aðd½Ã°Ýúdä]å9‡ëÉG¤ÓÕô™ ëç{Ç„#DÁýyØ6íp¥ä4Gí2;•Ößž±rP‡¿%Z6ƒ1"úB®úÀ0ôóò??<÷zVDïÙ𘨚~Üô½¸øhNùaëXnzænzø^HýËÞ&˜½ßÂ…Ä¿7,.CçsØÞXíë‡×‘†‚—Éã#M4XàÄv1”÷~EZ5;²Ò.aZ`‡WA9 ÖFÄ:‡Å™r»Ò{:<ƒÓGè8»ñ‘àŒ¸î:4p³z˜(GÄÀä\^8Æi”…he¼í{ÝÞÍŒ¶²Nåѽ6l•Íڱبµ 0–Eƒ4GžsÑèÁW†|y¹+¹#”¾žÎÆ£%šCÁ¸ÝìB=„9Q@š9 +S¡Àb”½äù{Üy:ð1.ê>¡ä©¡ï¼…ä#%vG*”é]": ôúÅÃLTã'ÇxŸ2ö¨ŽçÛÁŽ#À‰sÁx1Äáx†&q„%L;ôhi4&ÇïB߈g»’ŸÄ|¿t™¥»-_cA‡4»èÍš±5Ô£Fy xà!¿·âSQ5EÂršB¨(–eOá•)(M ¥ rt¡ü–´Iþ8ûIñþ§œy3ž^#?®‡:w3A 2Kºúç#DºElmõç e‹†‰F5#?ÜtÂ’ÓX#?B$r8#?Ü‹¥™$ÇIÇPÁ°Ú¸Â!±ØBùT©Áv‚6ú ó®‹L0sÑøÛ¦¡„T”ã”EISŒxÕ£jÐÛT¸V«°$ïÉu¡A¾Ó­PÅÀHÓl –qDPÄ”…!òHènc0ƒ¬ìsªÆÎHGç…Ìœ;TË»‡Ñ9Óy’"&ÖfcÜMÃÜtíUk#Æ\í}ÿï\RÑ>£ z\Š?#?W‘áÃkQbÄR—>¾põîO9¡®´ã‡1ÈBª¶êÛvÜæxcI<Ø ¹5,ãÇ#?±EA‹ÀãdéÌÍDò¥]ä’® Þsš¨ávä§À T6ß]F5u7TpŒbXÈÊ“ÊE[RFÇ ¤<Ý©wo! ÇSJÑÇEÔAN0}¹Þ#X>ë4Þƒ¿ÄE/#?‹Ÿ Ì£#?1;IòS¡ðø"}2óþ m%%} ÍQ$\4.]Ñ,9¤ú¢³ES g#§Fˆ¹ ÷5uG]p&¸D™.gÖqW#rÉÍÌhÜÛ”bFŠðRt”¿ãЯçâgfxó|°á Ý&Ò|ÐK¬¨xƒ#%žº(’˜¡: 8Cˆ|X†ÁƒEADèÉAUUíªômÐLCîò2«á&]‡ ç)½Q³ü ¬¯·u®r|Œ^š»±0ªú%óô/ 4ôq•>Ÿ2úÓê(#%¯ðé6õàñf%D”Çliðàdè®!#DöšŒ¢¼´›zçŽdá…ôxU›ÈÌ/\Ï’-¾L!…Øìäц‹¹.Г̟“ðÀ1Šƒ ³X0´"ŽBÏ‹øúMêMµ–K)dm‰¶eT®0—+Óß9½ÎÜpâ#?}-F7úÔ àm™,æg0á§Ív†ªb´öJ÷AKíI=wsæ)>>Ô<Ö@Ò9ç=ý: Üö‡Ä|Ô}6Õw}±1Ù›bÕ}8¤²3Tk·ãƤ'iåÛŽ°õQÍÑè~dë5|WÙR–T"EE'…Z6EÑAÍ‚Z‚dð$ápᅢ{CÍû‰h¥h€ƒ*rhZh¤„#¤£êjLK¶@÷'9Î&áFÛv^3p…Ħ€‚P`’bkl„ô¡õ¿a°žãÀéCdú½IÒ ~¨]Ž>­ë:&éóû ›êêììÁü÷Ð*Ý[†1o˜æwiŒ#?@aâÀ(dìÅß#%lr‚ëć½>åC$ùäÉ>QŽ'<¯IÙ3ˆt#D;à™PË‹¨Ä‡‹QV}8æ”:¡óP4°¬›‡A'?¾ï•Ðj°‡A¢Ÿ÷Ÿ çS!¸ C§s˜Iš–9øñÑΫCÓY–õž< ?›`*_X“ùgÛŠW‹Ã¦%à?]¥’Jji¨*ëZ!WÃ;!Úœo†66Œ$²¿‘,¼OçP~ndo‡8‡ŠoT`Á1Sõ%¥ÔƯÓØnÉ”QT‚HH+&Aœ;B‚ë¾ ¼ƒ§`Šb,BóOeàBòoQ™,˜A‰Õ¢)wU9i¯Îýýþï›ÞóGïåÔùñïÊ{SËZ`øfNc…¿Ý™¢§ÕÓnû°‹5!ËHFÓèý€y€/=A@SI0¤ÀMD0‘#/å°±“j h¦–˜!bˆHKRc bVÙ1Pš@ÔCBD©TµS#JT…4LAM4P“4Ð’E1!IAM¶’ŒŠ Z)¿C8R8`*d¢X‚”Ò0i!MQå‡?ɘ¨@ÐQ ÄÐUPRP D§úSØ×¾Š£hÚ™*¢b’ª¦¥#D©’[òÅ4×#%þP©4#%øjýÍ´— èq›‘êA¦ÅX«–ÇX2¸IN}²cyª_´|W›êÃÚ[f"´Úic23DšQ3ùå=t¿Òè{,Ðú>›Ç4ùî—}j’UÊ•}$1ÐáNšG‘¤õ9Ø…e³rãÒ™kÑ¡¬ÈÞ¤Y‘-8á˜Ú6†a-Ìc^XoL“L$¦“ĈB‚Jñ]A‡¿[le5aUÞ\`lxQ»J¡Æ¶ocÔh„ÁãÂá+ŒÜWýÚeZ(Æ߃¬£4˜±é¨µU­ZAÁ’µ5q¼F(lÂ#DcX—œ7˜#?æ~%Aäˆò@m Û.#%ÆX±& ¿NÑ[#ÔsgVm°âhj¼æ9%¶4Ã÷Ï¢ìDv1$C ‹)Z*ª|´Òó™)¢™¾§Ì&P°8`ûUÞR^ PeqÇÑ·!í¢a(>÷êÔ}ºFû÷Fäå„ýS’R¤ÉM¢šÓpOSÈs¬D@í—Cž¢pƒÂª•ø~‡Ï£’ñ÷#Ds¶"­s }roT*l<ÉD( ¡æØ+O©6Á.>”Èz|\ °> RèzWÑïÀº{´ýÜφü¾1U«ŽY&9¹¢€½i8 .‰ôÀÞ|ì­ÑíÝ{ÁTè]î„Àƒ-¢¥|V r9Y&ˆ!GËùØ-fJ€|ÿR£ú |FFMéÜ I‹'’©uÙk–b¿]bànæÀÁUĤ¬ŒøO—Ô}#%ˆ‹vqêµê uuÃ0óäú`Ô(#Dûîr9"¾Ê…HQJ„ÓL…*l”rÀK¦[Wp–ŽY”åÐœBôã‰ï”(QŒèÁoëDOíè€ü~ºŸ£Òh‚÷)…øW¼çåÄ꼓D°^S>7í@}Ÿ¸úZ~̧Ó䋨œŽÙw5ìžîÚû?b;!PÐZ­B¸Ïc=*š¤:ÎùP¦_Éß¡·6ÅÅí¥!#?õX W#D!Cž§ÞìŽÞ*£Þ lÁ.iœ¤*–Úòøà耳àFN„¸ÇÚ@gÁ¤E‚‚0jŒ·j(í aDBbH¿#D™ LjM/¾@ì×ÅsÑêOr§˜ðáQ¼šø†½Ľÿ9á¡æ@ßÚŸ6€q ý0sR=Þ¬v+âždÓͪBPÞÅrJ¦þG×D…Pç3Ã}öÚxkð§3¶äòš™Š%–* "f`IV˜ˆ™Òq|æ¢}¦VáϧÏÙµÙÚZ¯[™Ö¿²ºDµ.="2p)ݨbu|Aì#?–:ÍÍÇÉ+Û•ƒ ‚öðßP®pÙ?ž]‹ì˜6s¹#Dd!ИØ}¤q5Cò%)Nà ‰Ç“ ü¶Å~®>•JAtuÒH‚#%DA£AG.•bq‰TÃ',°@J¨ýž÷w€å;qL %v/fËI“€}}_•Ä>PŠï'N«Ùh#%`üûsú_ I†…`’$ªŽ8ça¯0˜]ㆮƒôK¼¬>$Ç~9Ó˜|‰ÕONº U&Ž8g¾ò«@u“,?eKm#Dcò,Æ)\2’„8œ =©Êé¼ÃçNÎôs´åºTb‹4(³³‘Ž„¼:>þÄõút¦†úµ÷I J£ùÐ’DÖïÖ›Òõüø$‘2˜4ç\bíuMæq0ì\T4%I°²“&LõRX"•$Ó#ôæ`²•6³5û®#?­ÎjaÞ÷Õ·¬,9/q“smdÙu‡·îæÍ:œApg3 ¦u±pÈœ+®’q#y“«Þk¦*EåñO t³þñvšR—¼;O=LkW¾cé©5{Ýï$Y±Ü.¡§Ý•dÜbÊafêê‘xÄ–xlEâã)§ÕÛB¼>› 8±¶à®)ß‘6xËêÆG“´õ/k‚|6 …ˆ3ž`´bÜòj |Üåc\êg•PØ‚˜)#%ÅdàdÜ#D`áÖ+oÄG‹­KH˜GÁ‡ p¦Zïo³—Û¿kfÔ˜5Hا+Ô5ÿW=¢úqÛo9Ño ðVæÙu/Öœ4‹Ó#D(¡—!ÙÎyé°N§rÓ…«rÜC¥©Eý: Ë*à’&4?dÔ ¡éÊ„Ô“ QÈv”ÛÙ·yì1Ò“äÁd7 PX˜Š„vÄ\˜b˜vóm5”ÉiÃóyÑt™•‘ˬ츉ƒèÂhºyÉÍ#…òeñº=Àñ9UsY=Oèþ#Œh©mK; žØÙ8LÉ$í†wqèÉWjîݒ枤ì]æ¤*ÈCVœ¦q¬Ö´˜³¥'œ7tû/5¤DÛ3±Üz—Æ”ܸl¡¨s8îlê«J£Y¡“—ÌÁ:[EG/»5êvª°;4¹©ñØ©Vú±#%h^·°)z¥ØOÖlÍr¸kÁÄ$EÆq/¹j‹0©NwùÄm,»{qŠ Ï.Ý þ˜ÒPZ¤tLCiפ¿l¶ òã¨ÁFne#?ºž8oy#?†0ÂN¸4:7æ.* hrEUÖ§Iç9ib6>AŠŒTVG¶¨DR*±Õç|øšéµ?µ4#?Õ»Sµ—š»¿:åñz¹âœÍ=êJVx[¶*œÖXaÝF¤s$¦¶·–Á#»\=‡Æ•²!H<8a®LœíÜ™Ô>9Äi§‚Úrvˆaábl'l;›”bc0ÿ¨hì]¸×3¯Fkš;ÃÎ.­#H„jÅÃGypšáö ±¾HîoµÏ'33Å«yÎÄe³!éÞH( “sÓÍXÖÙâ¨I(ØÚbbbi³¦9FùŒh}Àß ÄsDÇòYªé[”Ó³fesÔǃs(6;#?2;\@äaºLBãk/ªˆû‘ÑÙÒ-ðEÕL¿gO£Ö0D+â©5ܬ!‚Ó7ÿi’Ì®µÂ8ÆéÈð͎dã<-3ç-{˜0 ²áÑ`¢:×9Ç<¹’Ñv·ËÛÀh£f´H²mؽëÝHÆ/¨4Mi;]4?( úN‡*,‚U¦žµC-;¶M^O8¾«Óœl²»Õóœð²;²¾ýÎÌbQ£SïO:;§ê¯m2´K· ¶õÄ–Vö^ûYGÅ•Ny»ÝYhÈ(ª¡¦N‹8Ê\Kœ}L\ fâÛ@4‰QÙ|O_Ö™—Hδˆ(5%"˜íXæ@ÊË ŒÚpžX;L’$™|y2(N¯2an©sé}ºËTô㲎6Î’Ü´`^!—Uˆ}É„Ðå*µ³IÔÆ6ÐFŽ»'‡ Zñgk¢oŠ­Íõ6Úá%1ª‚„FEU5‘Ò]Â¥ôÜ„áÝyÎm´Ã6UEÔÄy法¬­Vãžo']qoÏNüƒÒåîsÂZ`¤s¨@ÆY!”6torS“*|>Ì)­6àä‹Pi½^75Ó4kÑ*Ù¥uÙ/W‰uZ™x Ù„¨L A¬Ñ}õØå`Ë{óŒe’о*)x›V¹ Ã6þ¬I–h£$@‰!„¤Üõ7uq_šwÜÇZâge-°lšË(îïÃÅÉF¦ÛlÌȉeIFœs¬´ºs ÕóCZdš¦qÆ“RÑ´D#DsÇjNCd›ÌLÀ‰ŠÑÕzI5¢Œk3(ø›wD<¡L|jdZk­jnÍyu×[Kla•˜N$©ÛºŒöâ1‚:›Å»€øÚ8ä™–DÕ',0¯V‡tòë›_U¤)Ò~sŸAñ‚\jŒqhvÚ¤N(!‹ê ª¸ØÔdíá݈IK&ó¹¶`•sƒ»cZb°à:´œÉ:ªAF"±X C%nÒ7¤ÛbqkzL¹bä‹ACÝ-ãNøÂÁ'mSlÈÔfBÆÝL¦@§-‚¦™Æfc/ÒîÕ35‘Î\þù~ß=ѯcàQ„6P­AÙ§Ÿv«9ü÷.õöz2q¬d Uôµ[⥰¤±EÉ";¡ÝöÄÖnП¿Gb¥Ž›=ë%‰1çJW‚p¤;õWŠ{¸wíÝF4ê+]žÏg*2¾{`8a™ fdi…Ð2a±¢°ãC±ÇOŒ7`E°®÷¸H¦(#?H1”*Š]Ðb¹ A4hÔD7ÅC&ÌR‡O´»à'Ù^ fY‹ŠèH£‡f»*ò§„™‰¤{’Àöï£bت Ô5ä„°L™åÖŠ &/3Å YeK,”´ìÇ·ïçÜ»ÃsnO,ÆØ8l“Þ붳ö”†™< ¹fg²A.ç«c $p]C]®¥œÐË òæŒÊ?;†@Ø)ãpù0yçq*#DxÍ_5|ê;ßåòŒ~Ÿ['º4Ž³U¼?|09°§ðã#äfãuTqb£ÏB;ë“ù´Ê”h]øø^ ^Ã?´>aaã<é;Ã;Ë—½{o4Û‡Ü1uzkS„¼Q³Cq±áÙG5Y«ä&ªq™›HÒÊ8LS& ÓqÉÃÑLšÚŽÅ’Iàx†“|Q ¡Ö«$¶†È÷O»˜fÂ#%[S™ò%Æ»uŒf¤ˆ.F›!²ò˜ªhLŽ—×ÝqÁØs­3·Pä3Ï8iã@ôhq ŠÈ†C”ÄH0TRÇIêãb{< ·.Ä–#?G»à‹ipú=ùÌ\3†µÀ5 c’¼Šª#Qý4•çDc\¹¯Mémú9šL|dmHƒ”\@cG’лúö1ä¤Å ”Žèèâê1²iÎgÞ#? ¡Ï~†1Øq©‰­úÈ2j”m9¨DŠÁÙÙÖ(ãCM´G6Í¥¿ vå†zoÃç&;!¼‰g5;Ñ®‰EmQùÃ~]ÒFšH\÷p]×äÊš#?˜wb%HD„Ø ‘)H>OCÁáïã8š±[_Álº@I°2îNƒ;Œ sL—pɹ. m9³ž•NZœ^1›ZJ•Yn3"J#?¹1Mæ,C%GP,œÎA³3IC %ÞwnYG#?AÔà|âðÀ§A&VB‘è"ÈÒçˆTÕWÎÉÚ‚2 ØŠ šk²#?j;0ì¡à\‘±ù^!Î×£½ñšôd8²Ÿ)ïÅáöo±ŽFµŠy§äˆù<ƒä~ª˜‹Ð#Dš6§Rw{ %XVÐ}åÒŸPÇ·Ç°`gä™{Ð¥èʇrqf8wßJHèáƒÜ„89ç¿=¤œ&…ÈF9`ßq¹„>¢Lc|ŸPS%{Ÿœ‘•ÒŸhl´¡ë§£¤={¹bßk¸VGv­UÍR¿ ™2œ÷ÑÍ—·t¹h ÐzN@HƒH$IÂRÄ©·¸1_ì9ºx\¹øähÑs#? å²!Û#?`ë_#•ƒÓz…åŽH#?DHÆzNXŸAØÁøìN®fÞ¿W¸ÌÀÔ}«ëûæ¨b-ÈrÉLB@QtÊó¡Ñ¹Û¦¬K¤soAipä#%$ÀBAü‰E§÷öÕ’= {¾¿lÌÆY>-ö©‰§®ô`·CN8HôUˆlKøþ¥i‡] L_ôŒíHM'â,Ç?tŠR#D…E!¹)ˆùÐê~þ—ƒ#%ìæÔ#%6Hsa)‡d­gÚB€:‰´…ks(1žâV1…ñß¾ §Y¡èøaÇó¦Ž{½^ šCÌ–„µ,¬œ>lƒKûÒ&»õ úJÒ+Û‰Œ™:ò~Wluc¬q#D]¡{;3¾@Èi_:à²9!<áOÇO¯@WC1#%ç]*äìés$ÀÊh(¥ êÞ†èÂ*¡}Õ(zjR0õ«ƒ#xt$écnã¥LSs¶(@ôª‹L!H#A®ƒ0°­ªÝJ? $Á„<`•9v|9%ßÕ¹èSKÙAøêÒÂÐî:IñDžµ#?Òµ~\GåŠÅÂd$i˜™dQM¤AÚú#%Dù"}pŸ#è×Ý?$P@>œ3pºN}ÙÑÐ}Êiݼá˜fwiÀçÉ„y#%=qB) 1û$u”9š£Ñªošýå¿ЄéP8EEî¶lNu‹l#?R`ØýQˉ6PPb#%héê^árvA„|dËatàžZ#%•¬chÑxno9Âz±؈Š¢ŽäÆîájت§½ØîìiCÐEÌeŠBá³ÍÏæ3Úh©’º<󜋸Õt UD]Ƶjh(¶g;S³‚–hƶÙÁÖ11ÈzCÀš®¯ ç:‘Dkcsp  31TDLDÄvܬÇv!ã²TSÒ mƒ†í°m2M¢­4f@c„7#DW(ãØÆ,bÛt¸P\d $§ I‡ƒˆL¹“Œ$®îh†¡Éá‰Ád7±8‡³ê‡•v0qŒ5&¤±bÃ<ÛY8r#DÖâk™xŠ¼k ¶«äqÊÊ܃»ÊŸX¨F²|ñ5†s’Ó—GÓ DæäÝ‘¾0ʲ5¬“$‹ôknòúðœ€ß 9»}.†>effÞKT#DÒŒÍæk­JfNpÑW%P[D¤ŒiÊL‘œ#6&·(ÞmAç&à†±J3#D—ë"Í@Žë¨â¾¢1CÖå.èf‚ôŽéÁy Iˆd†?‘íðÔÑEtu¡{ÖUØtCÓ øñÓŽz4áÀ9÷œép)`ÛM ÎMáÊay44n„('7Me<ºYC&-1tž†Æ!­Ý#ƒ‹U1™£‘IFªÆˆ#PÓ#46{ð•éë ÜÃ\Óxˆ·¡Q¡¢°‚©Ÿä9è8„ÏP3(õðâA ²0‰æÕO3ËÐEC¥õÁÙ  zù HØDÒîŠ%#% åw ÅÝ`Ú“*leò•2ÑÝì˜|OØ5é߆ÇçŠtרóRFÙ‚‡Néc˲ð(‰"žÎ”¹gM±S2+f ÊEä~0ôbå !$TúcnFÆp×5è!o´X} >CظÜHšROÆÍò½…_5ÀÑ”çbØ#DšMœDEmÂÃ#DÎ'92N63×ÙqPRJãÛpèÌ0%Mä^Y#D“qvŠ»Z¼”ã!§·“ûß;¼<ŸÇë—ΟõÎqBØÝÝŧiäu5!„¡¤u!¸"z"×@/–+ó èG‚ <ôßÃcÖô’^œFöœ:æ¾/:‰þY1—½Ý«‰€f›Gôðæ–”Ìü¦´~p­Œl8ãmScD\Ã…­ÞÓwTg$d°…Ù®\óLhh¬X)V$jýóæm³†Á£®™áØÕ P'œ€ ™¨C0=pn«¬†}X¤¨q$^‚vòà[.ˆ»·eð“„GyÀòè“°ÒPVˆ”y#%P¢ ¤PF ¦¢>éLÚR H„"P F!zʧEE4!Ò'ZÄD Ë€¡+ÂR„0‚!tI’U$ö¬<€N˜AîV#%¡’ ’Š›aD¡)¥ÖZt€ ¤bA¡”iä’ºU] t¤@4•íD õ²L°ž®AØΊó•t%¥´ÒeF١들/0ë ÅOú@pòÎQþ ô?º|lhÚÆÚ¤Á(PI¤9+¤vŸÕË€O°ržÒÜVäTÜ` ›#%)ÇE€v&@(ì“A­MÕY‘Æ=÷r™¨#%P]É pCDÊ1?Á²PûW! ê’™“û¯±ÖrÄ—( F& häÄ(Ò?Oóyùì»;Òç©“Sô=b™îëòï×x“ŠoŸBAOœGÚ'Îý€ESС¶8'&§n^Q ™òkçœ&éáÙhÙöäú~œà¹­áí‰fµ^*z‘Þ@牙·w8ņ§ÚÈnoFó ÇÚn@”Ínÿ‘Åjµe-ª{B§jú¬¢uÒ†'VëIšJO*6ÍbQÖ>ÜÀXîÊ”¨YZ†ΓÆÍë#?¤ELKĘŽrƒÚ6–ƒ ”Pø¸­JP´TK’æswˆ)^)á©TJeñ.„R‚lˆá£ž5–lo;0ò¡’‡þ¸|Ñ Nî¤c›{cyrç¯ÌEÖ>é¹Õʹz”«£|Û¦ñÍß3 [‡ËF3Oô>AôRË=:çdÕ^‘Ô;*˜º;=­€Ãsa¦ÜLq¸A¶ì¦Mæjc±>˜n‘à5š /vrÎVdpWÌX›¨ÓábÁ>ža‡ååN1“%fªóO8C²Ç,Èe,!™”$EiN,ah3÷7Ô±´Í¤6¶šU&”•½¹O¦¬( ‹ŽÜçI°[µà{玃 hPä€bº9tÙnê"aRˆß±qhJ¤0vxl‰Ò#%ЦD¡¼'óåOÜpЋ‰a‘T+Ä%¹Ž!(;&ÒµÖ6×ýVA¹ßšº$“=Ôz€9Ȇßî~W4Hz°2ïà}52ÀøŽ3ê §&„éäiD×’#D0m µîÅ#`ï•j¬ ÐÁ£–Ù5ï;\5I›qG—/ntf8•‹D03³ãf°a¥i~ˆj±%ü*\-âÌù#%}™óèD(Ab«Å\[\I2TÎj¿ÕäÊò†0™Ž¿'}Hï7Cz@ŸéÂþÉØâ•A1$ãˆl"Š@ñ00ý0ÿQ”!§PP/`QEŠEK¢¨Áç2L°ŸÎ9°¿É#% ú7úý6Àr)Š=9Œ1é4Lýp½}ÀS*ñÏ÷ól^Oå'·êdâôê*b¥ 'Æj쎚?„ÕÓ3ˆ6á#%<˜ÚJŒ8ܹ— „µ—Q!<Ñý#?ûœ˜0'œÚL^.·";ÂÝÓpÝ>p}#DsT׋ē³Õc° B`oèÕàw$;Ÿã÷ §Iûï¹Æ‚†#lVüc’…S"£(„ŽHI°°Úg¾©i[£»si`½nIå»´Ûb7 0‘I ´ Å K‚LÎ0†émæ×|Ãç#%è£h€†Y”åó¯^ dÎæ3¿ýý÷·û߃dH‹Q˜ö´`«_Á·f\¨sóx7Vå)ݽÙϬç]ùâÛ»±±/ÉÖ³`Ò‚m[¥Ûç#?+Nc ."$~ÇE«’‡’YñœA¦>åéÕi-B"ÕÔ‡Žé#D(©b)ô”ƒj§(‚2oþ@ßp§U½ÈQ¥Ð¶¬ÐkXA¤÷´•Ö ZÝ$X]‰[h±Óý~nHyï#DÿïíUÊhe|*”°dŒ¾(Y”,hN@É-…`qøŒôcYÆ9oƒ”Æ#%ܳê.QÀk ƒ ŒÈ2yE„?s²JË(C²í›6E3$ï$E€>ˆ{î¿Õ·À5·×G#îôê=Mû4žWq¹C$ÁÈ %…&bƒ‘sƱeÊ‘@8¨ ž¸”:Ÿ¬‡»ÝïKíd¥ç?g€ˆ&3ÞûàÕ‚”2»½ÆE’™IÔÙ]Ðóï9h:†J‹4„¤ÊOÝÄÁ6p×cÈè^Zlnf8çIÔS(ålÂS1‘:8ìr;Æ~­ÐÃKXÚ¤œÜäŠw?&v~_çù¾pÙÈhš{Ž(ÿ8" þ¼á‰;¨Òõ*M*¸#D£z.¿€,uX“B©_¯y](51U:/ÞÓ–»l ©ÏŽ™ðÅDxNŽ#ÅLH!}¡ùEɽX¥ ©>UD=h#DXêÈŠÄ6”óø.Œù_Hrg0Ä’EyäšÉ¯ lqtHú)›Ðê9ÀÃf#ýâMÙNðÃ(ªX•• ?;œ£ˆ@ÌÝñ(¾7HR%™t…? è±VCŒ=š#%œtLHˆF&J ˆ©©$¨ €´ú§þÄ•KDJ´ÓCpº1ƒ{ã~qÖb¾#%Ìl‰­51ËRÑúåÄèÀ¤8Aôý‡Þç×uZŽèÎÅ€'4Ðõ’™>b#?“²T|ž¤xñº36 Þq!Ï€Nz”MP-RMÙ ~wìvÊ’6‰±!¼&@o š{5•Òº¨Š1†ŒMò@ýÅ£â³H¯«BüB›Þþ‡ô‰/ø[[d¢"jaTcÚ”R$#D7—@\à¼hžŸ%îÅÔiØÃôšLx@y«º@EÆ—Q3ŠÔ™>5:räN¦yç ÌJ ¢”uAMÅÃYæí¿˜ÑDððŽÀÎÃY~hPóâ8DÚ³‡Š.Þ`YÈ )a´ƒ¨êÄ;£°»¡|#%#? #ŒÉLŠ¢}C:c°Œ=!#DHÒÚbMÏ$’m4^h!àr€ªxdWâC&—4ÓõÞsUˆjWbz>¿uT@,?a„c#ø³à®§"Ù5eyóµ«÷wÌúëLkf4®æÇl:Lú¶@ò’âBã0Íã“È’ÌèV3›¨Æ¬Ó¬5ˆ ¢Áng&¹&ˆI–  ¥Tە힬6¿æ¸µÖµ¹0ê[O”£Ÿ»¬¹ÿá‡zp¸Ó÷NŽó&;QFî7#?W)YûÛ¿g–¸áÆSùGcÀ-%MI¶Æ×ÓÅf6Ù«4£xt“øµ”0<ü%†Œ@‡ñÓFˆE5U<©Vöñï,L{æ‚aE‹pbðRÕ”Œ6(L,›kCT™¼reÕx6µ1AëhƒZ dÑ@ÖŸDó‘ˆîxxì5‚Œr­éé½G¦y䚲ذǶBQ‘²RgHkRÂöRU˜xÉÑê<Û7$:t)W)„µ³O._#?•0÷D´\Ó¨t8#ú,Éeç5‰LÊä gÄ…pÙbcÈÇoÍv%°¢ÓlÁ¦qmÇÌçün±p$‘5ËÆPų§¯´7aK÷<}^™Ž8QK#%ã“% D¢‘ª¦­TÛ…„’t,ŒøNlç®FŠpµ`%B,Cñ¹Êÿ|ÎúÛaûÿ#É%íD£ìù.é‚ûš^DÝÒ£™<Ê枌,MœUK»:Tð.™f—l"aeMìÄ{pL$áÎq-ŠH_N" r+—îÌ02ã‘) IL³4Nî|úµQÜ}<]”Õ^‰Ðnj^ñÌÌöH4…#?oç1Wq„TuF¡*J#%€OyÜ.:øhè T€0H”4ŒMTDÈP#DË0 ®±oÀù¼Ã› µ=Óœ-IÛÁ#?l¹õb¸$ä‹&úÏA_7g@îó@c×òE úÂGÖ¤¦ËWÎZ“€Üu)ÂSkË[»|Þƒ=~;>h*€¡ ŠdiwîL<÷HDz©èdŽ›£ î4í¹sÙ LÈSDSPÔTÍBœ$5@PEU41#?EDÀÄT!J$2H´¬B}æP¢pኩ4y@@‰ÃðžÓ ’T:¤9@þÂkøäsÑ™ii¡XRBÄ¢—æŽÀÉ«i„(4D@¨9Æ6&cé#?§ ""éû.¢¿ÊeQ#%¡®}³)ôG,…|Ež}.d§©©ÍYÔ>–h›&Têçâ‡5©5“7E²ÎHRBè£f#D1Ah íêØ Ê¹~ô“B w âWlüïÐXØõQŒ6ô62žçxr¿ç½AC!›Âíšs¼M’3‚Úk{3¡ÌChéxdQ8’`´ËoF¦ƒˆ(Ñ+§½®Û7Fi¹Zp®q0Iý© ²#&×(Öù]ÞEѳÂl˜Öh„V÷Žâ9sÅÖ3·‚ìÖ‘×fsª¬m¹áÿƒÛê¨Ï®mñãǸímqg}EÖ•j|#?Å íËŒ¬ ØÆ¢¶#?N›Ûzl!§5#ˆ—îÉâ_ÌŸ¿#bºb,pè¥D¨qˆ«4Hri7éãHÍ6üˆªàž-%¤;drvÔׄáÊK±aFÇ©xÔíÏ>Ü Ò óXú‡7M±åC$K@Ž#UBY”$ºR¹Õëe0öNÔìw' C¤œáɤÂzCé’Æã–Gƒ ÄÚ'21 zX›ø^ †Õ% )F$¹š³ئæâÚ¡ˆq$Ÿ‹®'09Ù¨åPš<Ÿ[Õ…:àG„ÈqC$}ò°/n3#xê1û(2ŽIzŸ·Î8E}Îm#Dm¸Déß1’Ä^~~Ü›kÊ,hGNWÄ#%èǤcÆe¥”åë$®‡<Ôæ"{*<ѺŸãe0#%Oâ„~î‘:^¬þÈ¥A!„`‚(N ãÔwŸ‰ûþ´®ÈCmE!Z…4°ˆÌ‚L’fÒ!Þ)€À{dR˜’X#Db@÷jñ¬…ùi7ƒÒÑ?Ó*)óÅL‘Q2TÀRÔ@PÔHEþÞ Ph`äPDºH†Ûb–WX/oÇéìûr>Ï·àèþ=ïÛ h'úëÔ õHÄ#%|Ðê{‰•#%ðæ¹Øä-Þ˜¿w^Àó‚†Åmƒašd>~´|·<ÐvÃJtIM"”ÿf^Ì:Ü=ZNÓÀ6 ¨YDk÷iûh?èþ\ð)ü”Î#%H’|#D<.οӢÓ˜ J<ó¤xæº*h¨ßõà;¬ÿ Š<Ž­º¸ý‘¨;‘ýcü‰Kç(¥eçóÚ¥ÝÓ©õ~€º“ëütñ  îÈþñQAý>QñãìÿËýÏÃêYüQûËåÜ PmëÚ=·wërzW}ß7–ñˆÃŸ'ÁÓí õdøË%ÿ7›E7ìÿ¡:>c+_`tÀ%Õ#%g”½m4b&bOë¢)MV¸þ_¿ž µ:„2²S¶z@Œ,LýpPÿj°¹¢,îñÆ÷¢¦×¸V~Ÿßüæ¾Â]T3ŸÂíWx—ѧ#DÏð‰Ã~pŸÝ“GmGJíâqTE3‚oåÕr¹Ë9ƒSùCãù·:vÑ: þçгü;h%c(ä1y L±ÏO ä¶!8³¤…#?*9(:zuXò?aÜ£¤g—T‡+•÷ì:›;?:Ôš.>LÁƒÓÔ=S$#‡5óˆúQ#%¡'áZhŒª-S¦h>ŠëÕQ`˜©³£•?_†ÉãÒ+¬%®JCùÛñ7Ø1丧ÂéÄ©o¯Èb"tž«×¥öà}Ƙz¾I•RI½ÿ.áçñ÷EÛŸ+Ϊ¯¸Ú5?2[n‰íKÂ'ä¤ó®r÷ÿÖˆÿb#üÍ#?ÿ¦ÆAz8€¿ÿÿÛ-Lb?é#DÀ’ÅóøêýÁ©‡û‡€o©èýó#%AÞ—ÿì_úzá¨?Ô§÷ÖßÐÂ3CN¨ÿâîH§#DDq +#BZh91AY&SYáÀœëÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÕhf_$m~dÐ#2ø€écÛþò÷¾çs€¡#2#2#2#2#2#2#2#2#2#2#2#2#2(#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2 ¼úû­URznÊ=»o¡÷Öé»zõé j£®ÀïmîîŽì÷{Oo§×¶Ã7‹fÖå†înÄ´çji»>µIíáíŽxuï#2«ÌÔ@ î·[1' ·$ÙaªET#_ˆ‹™»Y¥Þîª4Ê"^†«,U(Hª ³KlŠ´Ô[¼ò]bY%G¦@J@WmU&ùÜ+{ìòºÒ˜÷tyçSÖ‘£³¦—3×;Þuwn¬)#2u}»¯#2jÚ"va/»¹Jô÷•<ñAT=h÷›eØçß}ôR§mö4 #2#_#2¤¤#2I¦‚©T¦{‡w;ÝïJݺJ’ÉÝ=îÒÀî`w#V¾má_³£=Ý×Egßo>e$=í÷¶œ4•C»Ÿ=ãØ#2#2#2€#2#2|Øh‡Ÿ*ï¶ûµÛàŽ›Ø6Þ#2ÙJ#_;ÎnèÓ¥¶'mÑÝçÖs¥l·pè#2€èÒ·vÙ#Z]€7b¹h£­#2꜅ƒA ÈÀ#_¥#24ÐUHnî¤hj€”#2+¶E#_FUNÀígUÖ…P «¾û¾ó•ëwo:ûŸ]v´¼ôÝ—¼Ý©×TuAOw8#_#V™b ÛR·Üî‚ûÏ®9^Ó{}m­)P¡è=×¼#2'wXím¥¯]÷Þ½_M³mÐàõ÷×3¸åßkžïM{ß/_vwo.n¾×Þ8žøBm·w]Ù—ÝÛîûßCeöÜ” ëÝêÝé󻘠ïT÷Ÿ_%C¶zo°JŽîîÚ]Ý4ÉëlhTDŠ)Ë/@vÜ]»µšÌÝ…Ù´9•èxÛ/MG»qŽõõÖ¾o^¯}r¼÷wujÕï£ï”6÷xz¢îé®ÍiomÖ“YåíM§Ž£¯o{{Mæ{ۼͭë]îÜ=³ÝÛoy»¹¼¹x÷Ûëîî©{ý²}·»wÖnûÝí÷Øw^ÜvÀн¹[{Í»{­ì´%–Ù÷}ýîl¾yÖÄìëµíç¾íõ÷Ùçm·{—˜ÜͶ‡¸r »s³™ðÛ¹±ÛíÝwsN®ßnw½ÜOáïjîŽïr± CÙ&å´ V¶L(wk­æµlÝëŸTÞª:ÉJºŒFbrãºv®×{x¹½´¶ÆÜû<÷iur¶¡ÜéÎë hðõ÷Ë;îo5k¾ÊæÏZݯ´»š½n›0rhŽ€Ý/¶æe÷;¶îo¼ÍÚ¥Ømw­ÛO#+‰ZrI3Û‚3tíWoã®/u§rqfßc¼÷i¶†Í3[6î±Ë™Dz1Ú·•ÛdãÚî"õÇ´=x=ÜtíÜÞk½Ç¹îæ6Í\ºqØ#_žÝºˆEïSt#2&º)f‰ÅÕ*®Ï¾;ÙÖW{ÝžÝáÞò÷»Ã@#26¦UU¶‡#G=+#2­#V³ZتöÜg³#2*P€ÛE‡{gµÃlHëuÝ·´íÛ­o Rp×Ö¤R•wÛ}#2È4tWÛÂêfÞF® ÔÙ\f„îþ$ µkí£×ŸvNjöÝë¼=2P ) U[mÊ\ÑFóåZ9°³i*÷s–7¤§fÓÚ@çžÞô#2#_û†¼Viös}áËzë°k˱Þó^µän6¶ÛÛݪW{èîîko¾yÞ:JªCÜÊ]½–ÒºEÛ†Nƒ€#2n·k*!µ…º.µ«®»Û<×µÖ@ÝÚÜ—v¬PTêdšž¾½x|¥œx¥Îµ·\]ÝÑà#2ª´d7¯om¹…‚won=çss!]têŽé»fzôz;iV÷­=K·¥FÎhUi ë#VÌÔ]FõUÖîÛ§¶sg6w+§SVîàê²»wvÒ½¾ºú¾¦§mÜä_i$ò ÷±rdôÚn©!U˧·¯x4#V#2Ä#_+G£pÏ%¨æ†­)‘è§'^–®Ü»a™#V jÛªvÐéum‚²¶ÝvbÔ¢ í·XùÚöô:ÞøxyûØ#2#2tf©J·`Qˆ‘CvÙ½=éîvÉ;šæ÷g&žD„´ ës8t¬Ék®]×½ì/-•×.mR˜úuÏ·#ªÖ¤æ>±;;wdÇœJ Ç¡ÐæïwMµÚ催æœÅ¶À:#27X­Û)PSYÙÔk®‘¹®íž·*ôtè×@uC¡­RX‚ÍI¶°K¨Ýª7Ÿ@{e#2#2£P‚€#2 Ó»î#VA­Øòéê«#230{·n†·MÎô 9v¯eÝìuêomù°½-Ò:š™wn–èk·]u–îgvv°ÑY7}uíîáBé]S»®U8(²Ó:4ìÖ³Jë«YJ wÅ#24ÝÁÓTP‹w5ÚØ@#2ìÊ‘BŠÕ‚ßn+ì{¥¢ªKméº-¤m½‡¹YÜ@½Écm® NŠÞéC¬,«ÜåÝ·pÖvÌ@7yFÙL˽‡·w[ï»ÑñÏe! •#V:Ù—hNfvNÛs¢+§Y“E„í3w·u"µ­¶ªëöÐÑÝƫ׉/§¾n¹ÄgôH‹YR×y;ÐÀäúêÇßs:šû|4Ñ#2@#2#2 ÈÀ˜!¡2)è™”mCÔÓÔÓÔzš“êhzú£Éê 馀€€@#2OdLMSÓi¡TôŸ¥<£Ôi¦€Ð#2#2#2#2#2#2#2#2$"&€DÂb4#VjO&¡¦'©©ä“Ú£ô£j¡Cô#_z ÓÒ#V444 4d#2@'ªJH„S1)äÑ¥§©ú4ÕQâFÔÓMDhȧ¨¡‘´€=Fƒ!¡¦™2#2#2h €!I ‰`#2š ¦h“ÒŸšžSôУ@#V#2#2#24#2#2#2A&¢ A#2@#2™2#2#_žÒm4Ô22Sm&“M6Q£e4#2#2#2#2#2#2ý¡ÿÂ#2툫ÿ1°L$2Ur'þ}U»ZªßΪ·}b)! 7ڪ˓U£j^ªœÁ#_UY#2ƒ¨á¨¯æ?! úOçþ~oïýîÿ#_kfôäwZ›Þ³y¢Ç¹Lˆ§‚-_õÌeŠH-MÔ*/JD,> Hu­@5#2†Üië„ B'û$¨GÿoüŸôç@ïNѾ(#2@|@06#2œ#2sÈÛÂ0Ê$¦ŒƒQ¦m‡±Çd·3Ù¤£l"lÆG\Ý&9Û#¬èO¢®¤±=Âv§DÒ#W7P Å©W‹10£VD’g5*]Þ¡Aa>V$¹‰27M#2IäºÿÆ]>wó–9$CJÒ´€b&b& Na‚ƒ!EšÐi#2]J€R[rÕnUS5FܪÔV‘ÈUY²0„JpDÀ#2"!QrE@ãûKú/â8P8€ÑÄ4+M¨PÄ Ê©MPªD€‘<¤•]$„b)Š˜J”+‹B„Iür¦.€y`€éC Q%‚x´Ê.ˆ&¤’ŒXÔ˜ŒÛ~u#2Á¢b›Yˆ± ß4¨Q°J#2#2Q¤Š¨”#_)H#@ B‹HJ¢ˆâ’Ò°J($1D4R"TˆÈ’Q‘$Pd¦IL†šL@ÓI#1FL‘¡„©”X‚0ÌÊM!fAˆ#_fI‰5£“2¢Ó-³h˜È›3&l‘©0µ5[E­j#_2A´iµ#Vµfl•mIµ&e¢hSe0&ˆ‰¤„Él¬²ÊkmlŒÓ-X-‰-IIc(3P¥Q¬¶É²Š‰–!(&Ù•,LJ#V#2TJFd¤j2LÔlX¢–°‰€i,”ÑI-À£a"c&ɤ¬¦†H-“Q”lC”jQE† Ìf4¨ÄʦÆÒ±¦E&Ì´m&²E„¶1¬ËEšf3#V¬ J’Æ‹-0ÙÀ,c(Êfl­¤¦56Ä4µ$TiMF™¶ƒBM0Òl$Ú3#_Š2jhŒ H¦E–X¡Œ¥6‹M*K!¬Ö¶[[LÚ6Bd&ŠƘ±KLE$³MYm¢YlKIEC16šØÍ©¶Ì©’VR™‰4*bL),Új)6™™ ¢ÉQPQ"FÆÈ–HÚÔLÓHÑQ"h“EFPP±2&̈Í*"#VJb#VJ‘ 0ÀÚI2Q#I¶L„UbRjK ¨‘JÃ$ˆ  3!#VI5f˜‘F$²,”³-“RcEŠ–FÉ –RB4ViK5RdSL£%)¡¦dÄ‹ˆdXXÆ4d£j4I"‰™&k$$¦`•I#_lD˜¦”Í‚l¨!$˜ÊÂdÔ,D“E&Ñ’ÒlÊ#_H‰-’%6I4ŠPPEFD(É%$I"˜™E°š0e¤ÄJ!”ÆZR°K‹b0I,¢b”TÉ(›)‘e,‘±È"RÔÓD’i$fÉÝvJL6”cEƒLJYŒQ‰",DÄY6LZ-(¤I0²¢D–‘´Ù6#VšT…’Q¢¥6B$•’FfƒJh¦”°‚6ÈfTË&Û$ÐÕ6’ÊS#V"¤2P¦˜M3i&h4”h„&X¤¤A°F&R Ê Òi!#BA‹ • Ål“*h”¶b”šÍ¬bM€‰©¦i†2ŒRšˆ&‰³M14CH¡±‰Œ…#_šT$(ÄFØ“É©#M-&ÆÄiI›&™ŒÚ3i„ÖˆŒŠ2fe™&R&ÆÈÔ©LY±#$–$È¥£!QDc,e$0±Y5ŠI4I&”Ú4‘I"†˜Ù6(IšŠše6†QeR ’”b64„†Ãa%IJcHÄÍM”Ò¦ÍE¬šÂQ% $A‰*H¦2Mh­ÊhÈ•… †5bDBLÙ5%ŠÍ¦²È”M$Ô­)¥$¥5¦¤$H…ba–I”ÍHÆd2À`ÆLjˆMAdÉ2BÀÚÚ[m¦h±‚e ²4É1#_JhI’JHdXJÐjRÙK4Y±HŒ¢4H³l¶4•L¢£-›¤E)Bˆ›FdDÒÊšßÚ«­™kã)ÄȪ È&dÂe˜¦FF6efB’–‰Icjeee¶aa&šRÂD¤2T– #_B13#V53 IˆBI"̃M¥’L†ÐjˆÄhÉ¢‰ b‚Œ3`Q2X%$„š@ÅIb%’L”¢HØÆ¡„h‰CJT’b”Í!#V‰ hÛ4Ö&Íþ³­u©ŠfTi¦ÙS&YaI±†BKú½]0›#_m€Í³,Ë$Í£LÃk&hSi˜¢“Mk1ÌÒb•J&™ŠÌM j‰)-,™i@’&Å‘f`¢•4Q–1U1bM¥ŒB)M6J4Œb” LffK"(E))”Ói jK3dAfªZYJjQ,`¦h¬”„Efk(’¦R²Ë©6I¤Ô©²ÊSef@¨4Ì’ˆm*TfÑe¨‚Å¥¤FѳIXÓi3M©[þWá½ådF1FH1D‚*I1ŠdEch£lR†F230FŒYM D×uÍ©–Ù¤f` ‘E6©,„6&!1’ ȆE"¢˜Ñ˜ÌÍ“EÙ,V¤’¦2™–ciY †(˜3XKI FfKC#IˆJ(ÌÙ4 ¨Í,Øƈ†3,*(Ù$RɈɄKI# JT–4™šCi&H™L4M1¡e”Á$˜šZ@´U&Â5$ÔH̤SÛ!€&™ŒÙ˜6SÑ,šdd²ÙfÓBÑ©MDh¨Ä™#lJUØ–XÄØ3Qh£cFbŒš)šLÚ1³4±II‘°¦ØË2d&6ɨ*5*Ò*-¦ˆ˜Z²–Tk([H¶V–J4¨Š™´ÙEšÆeh¢«*DËY)Z!))–i›DH–“e²’kF&YJ„Ù(ÚÆÓ!E X1Q±£5‘¢eR)µ‹T¨Ä©6³V¥i1¬RlT)¦ÚZ’"±,¶6²[)¢SEj5bØ5"Q¬X¢hÄZV’6Á¢ÆÑhÛZ5 Ø dŒš2Æ#j’ÙE`m3FÈ‘F “Q™¥hƒXÑ´ÄÖ-IªÒ¶ÙXÔZF$$™¨JBl¦j[d±%¦–R A¶©[5JX’”¶j–i©•,ŵ4‰*²©dJSR[5(Ø ZÊi´Öc&M2ÂU%³YABؤ6¦‘Š„@ škÌ’LZDX¤ÒP0)"D6$¢Ð”h’L¥±PjJÌŒI"ɲQ4–¢²M4QI“E#eŠE%–CdM)VY™MCI´Èe’ ‰h¶m#2™m5dƆ&Í#_fHM„Ä –ÈS¦ÌÄ1!DÐQaP0I É –ɱ$1LÁ‹$Ì‘¬QbJdbQ¤²ÌÅ¡*` Ÿ‡kšM0”Ô¦É ¨´d S-JFÆ̤Ɍ‘‹…)F4¥RDS IDjK#V†Rlfš6XÛ%…%“@D¨BŒ–Š Pš¢ÌI£E™J™I¥LªPÂk‚ËH™Q jDjŠ£f´fˆÖe%QPh2ÈÆQB(³bKd‰@£R¦”X$2&U L¬ɪ$2ji,›²E‹0DÙ¤dÚdÍkeAHÁfZM(Ñ‹Åf“DT™¤Ì†Å(E$& ‘j5„´TZ,b¶3-†‚$fBi¦Ì³##Ve‰Q`)”h1¨£`J(£&4Y,³d©H’ÔZ"(µh£X’£F f¨Òbˆ,–‚Ô["°fbP&’ÌÀ’a‹SjC3BY5FÙ4–D(£F” Äš„¨KF6ˆŒm˜TE«°©@²£T3Q$&€³2…i4`H#_Æ$ћ͑2Ë-lj"Ù-A2¦E^î›%£˜©¦Ôd¬[m$mŒ¡­$m‹e$ØÙ$(£QI¶RÖiª 5D#V¤”¤Q‰MI$$ÆK’‹fX’ˆÄY5%"jC&fB6S h!¨Òš™´ÌŠjÒm’6¡HÒÒSQˆÉm#2I-P(£e+,´›ÛD•¬m£e4ldÚ¤‘Ú-IEŠD“a3É3 ˜ÓR#†¦l”ÊѨµ%ŠÙ*Y[&´&¬€jŠŒTÊ(Ö£LÛ4ÚÑlTm¨¶²f!ŠX•JĶŠÆÓJhŒÙª6RÚ+Š(EBŒÒdÂÄ­4#V™EѲj’¨Ù™$­™©5AjB´¤LÕAe#2Á4ÔÓcF(˜ØÖ5­SjØl0”‰•#_‰‰<ÜŒb FÆšiÔmŠŠ([Ri’U‹cmLÕ´a„ˆ *abT$%Z±$Le‘Œ¨ÐJ*5Ʀ¦U#&fL©`lF„#VDb$“)&D¦F#&"’µµ2ÑTÑ>ýYÅ/úÙÒí°«þ|rZYŠTÚ}¿â#Ù˜™‘=C R1õ )†Ø>ºö^/k­/"(ˆíç'’Wý×Ñïd4@ÿ³^ÿNߘã¢)Þ죉!Äøý§*#• #_žZ»‘Â…6Üп÷à£ð2ÂÑՔäXy¬8Å#¢x3o÷e€½ÿåˆ-/þƒm^Ö §áüÎÄÞˆØÍ$oáÆÛõÿëãÆ؟Ùé|×Ù±…+TÁG@ÿ|&ðœgjF¹ï/®Ä>>? é®o®pµXèëeÝÞ‡ägÎÿ‡…õCÿälÜe|AÑ<ØcA¼=0Áæ¦x‰ÞòÂ8Î0UÏ2ìxuúüïwæÿ’©ûÿé*óÿ?ÕÖóìU—BÏëó™æp‘ ¾ç6Ñÿ†ÜäœNž«ó2e‰ï òÓ kÿF¤åžan¾œî`TSìYQ»‚ÓøüúPõ|Ü©²Xœæç®ø{~~~w8W[5KNVì9m]˜¡ÂÎ͘Š*óÍë†Î@ý‡­.E=ƒòde“ç-Œ1”³árh¤#xą̃ÓÁ±üÙ›LFd¬¸ªQ‹;ü;+\jÀí³k‚Ÿö±ã»&ûmt‘?èhÕ1ó¯ifÄfÜB"ívøKú?›Éíõ.ó¯Ü\3’nÓ œ!º¾·,»z¶xÕL¡”†…òÇLâ}8¡ÿÁB*M*”û˜oËÕÝ/'#2øÈÆŒÍÁôÚ¯þ§Ù»ëíÞ,Jø`|òh$똵4Îó„•úàÈ";_‹b(¦úzl0˜ª»®\r»÷ãÿe<0ë™LHÄŠG†³T[X‚ÝÎQ%=¡8FBW†`êˆð€Ã’P,Ö¨OÉ^›ý|«=—S’oDÀœÝ±4ª5C ‹-ÊZZ)ídzèU˜ô4CŠíKŸ‹~ÃÕVò¿ëY.ÐPN¬-”[r»¯'”¢@ §´Ã|™î«n!nWЛ¬¤#2ïåAÿæÞ¸Åf”kÈ°èÏ6z“Aðîëf(‹+µ˜AˆÍ“/+Ò¾ñÁøÏ{W¥»I´º9Eðò¾i–aÏV"&ýÐû¶Û9®ç Güg?ÜùîÞÑÎ]ú;Þœi0Êc±›Ħ0±™O¡ •YLˆ–”¦úË"v“ì¥)(?^}/j#~Ï_ÊW—í­È¦Wæwêî)‹))ìþ¿oLzy¡ë@øwVŸ-y¥åΓ^÷0ý'C¡;¥éð¯è“¢’·ÉÊÆ;é?ìÖ·› ÏÙÝfé«‘ÃXiƒŠ?5{Ù#V¾­,-‡ówÕ¼;¯:’JÚœ°7Bªñ–k^WS†‘Ag²¡»Ë¶,Î=—#_C+\YÃ-&ìÚèÑ)h”®TaE3öÝXy,哾+#\ÂÍŒúõº¿äà×Ç'ì¾M”¦òIt*·Ø­Nõd9Iƒ¢žœÚÜ$#hqa[)8ÝUƒg0‡ÔÒ³W£lù?}3{»M&5©I†f}ÿ0/ïüTAdÓEâ¿ðQµŸ¢÷ð÷4ë ¢È(|Êœùਈ¸iˆ¹þ˃¹ “Àû3€Ü{ϸkןü=;ùãÈÔ-%ŠŠæWÆÀ©úÝD-¡ž^ÜjàðÑ­GÍ™‰ ³QµdFh!)‚¾Ú#_ŒÛøÿ=Ï~¹úñÙ²qøŽµîtÑÝ#­ÿÜÇô]k˸¯’ü´‡beÕ¬Õ*öbó€×)ÉŠ»pÀ/²ãXä?lœNÁI°$…2~þAË™¡??_õ¡In€x«í+ù™Wr3ë¬lÈP1é§0Ø#Qx}óó0v¡#fßàÃL1Œúb&­Mc¶ƒ)æÈç­ýßE®Iú‹R7°sžÈÏT©K,i¶½úÝöŸ]–jòJvp §›ª&Œ›ˆÊ D¯¹ßI©#VM1ùâ+9!û¹··£BèÜÙûÙ”žú£T¢zÛøúxû2g¼ÖÍ{#_;7zkºrþ rY µd=©kø_¢LØd2376[8tÙ׿za0‡P}i.Uw=­–ÍX™„ó¡5¨?>#_qØÊC­Ñ„BŒ]+æ’>‡C´ÆÌÀ•¶+»9ý¯êÅCW,ðV’xUa:%Óh\”þŽ1hqŸÓH4›CÔ‹/ÐÌ<þSzžÍåêüd=Ò#ÆåqŽC·åhú˜V›ÜI?k¡¦XDÚm±¯d!åxíÞ’~ÇOÑŽ“Æ”ìú²ómˆˆ áÉÇàbãp{+?c缺‰¨Øýi³ÃœÃìjíì­DÂéK#_tÏ–Þö  ÃÚíeO‚:>Ù¤¨a#V’ПwáX5ªCDz¤Ù 1ö´‡êªb&žîýý߆¡ßµCš!x ;ëf/Z°þt(0Ó#V„‚ø2Ò_n.ãÚ~’°‹~“¥Ø±ù†/Z(0ÎÅõVYŸ‰i Í?cbäF®éæÌžyẽϫùÉËçNÛÇßÁ™¿§UDd9!H>É#_Û¶7”:f‘C­UÔ¨ ²eBCߧ l0»7À5í̆!ò°ªú3'ÖŸ¤HnÌà”<ÙIùÈÉx ìº4y6ˆôseöàÆ8­4w2™•@#&ïÈË`[[G¹·5S`‡Ùtøòå¾LâîOJb=sP¶Jié½rdÙ=úT6þ‚ƒøwÍŽµ*'Aô?¡#2´MÃS|ëÆáñ8J#VÌAS¶¤”¢Ow¢ìЪ#_¤@ìJ^½´Ø-$|»óƒh—^,²,Š,§sëIFŽ¶µ»ôŽ¹#_DZJc‰Z/êiFÿ%žè»÷‰äw<ù¨:ŸžÇÆÔ‰ø«ÊÌDS,+²Šfí.žüc ˜¿ÇŒ)ËSè×Ɔêê“¿.¸,9#VHx¦2[#_N…J9iAÀ†VŽ­ŒÓ¼{¯,/Æ*[4?çí „Ý‘h:Cˆ#V&åó×Ñ7Ÿ³?Ѧ¶Ö’Óç=úz^ÍèÐ!ø’Ð&™]Jýqç{Xî½ºàƒ¤ˆ¼O°ý­ªÇKu.g•*“™3Ž)NÕ<ô ÓLË´Oÿ¬™x¤ÜEuö¨«´Nt'“쩯Œ(iÔ¨¥vÓ=Â!ÉÅWáã5E½·Ë¿&ÅcäÆ…(ϲa»œóŒˆû<ó‰n„cj£7Ôí›l<¨Æ·roŽMtˆ\j­.+Ë’¥ccñP‚kQ^z¬NoðÔíÖýu>5îo3õMðc§l¦,IÐÎbˆ“\é+ËQqëÍ<ÿ}¨>÷òæxelclY“#ܺ*ôzÜÂPA)« œ?›„ š…Å'­jœ§2 …_k¶(t"•Ãf¹L¦+!5,ñ,å®Z:ð×Ä#_jzóuòŒøV¼îÃ'ãró÷#_#_ ƒÞÊ-»:IÔôDG'èe‡Ò%¶p¡ fqn8=tPîNéÊúÿ‡éSb0.3ïv²›|>™%‚3˜k¦pÉѱóE:êfê±rú0ä¨E P/œ’‘N؇C¯üaÆãø÷ìþ˜/”Ü÷ßÍ­²% ݔń “vZâG»¡)\£ž8æ]bñûõÎ Ý:ÏÆ1Œ9â'mìÏJn=+‹%Œ´Ã{˜º¶]æMÏŽzñPmK_l_xŸÜ#V#V‡ÿp‰Ac„MO„4X½ç1zæèƒ>zÆÿšÇ©ï‡7)o¦”b"v×Þ&AÌÅØIÚ¿ õkü?I„…ý;íp-¶ùyÞèr#_Ji§ê‡êN{iŠÉ¤˜iì@¤ÅŸ“QŽ­ -#V%XáÂ6Yß—há=üQã$Ç#‘Í#Vý.¶š(È¡ùàuB¦ cALô3k‡•ôô¼©"ŽA¸›oá"­B8./”á¯ß *}æÀòÿ'4k¾#*E¢Œ@¸JJRœ¥–è{øSnÂÞ#_þïK^#sóÉ®ˆÚ]º,dR…­÷:NRã23ÀM ¥L’Na¬±Q†4“Ð Ác…Ëö{Û3oç«TRªj®VÜ_±Ã² ”ÎJ…Õ(ÄèÎÖ§eÿ¯¡û ãÞõäëûtNâ=Ñ`dZ„”µ œˆg•Ã.óX±ÿfÈù¤Ó€áïû÷ª5ERdÌÜ®ÃMoãöªÃMÑU¡ç†ÿwÛ/ßÿeŸOUœ!ùx&óՃj3qV=f i¶#2Y#2ùwÜ4ºiÙD¾u†*‚ôÞ‰—zýš{4c>l˜G˼É"å¯Îó7|g&0£¢ƒÓ0¬ó6a&Eì]çîU DOœ$õV¥{þ¾îºX!?È“µÂ³,¦w"ý8™â>"ŒÑcY«]{gØŶÃrhRÇ¥”v9bÈ°'I2 ¬Y¹~S+*ÐnóB¡Á¢åB#_hE#_{LˆH{UgëaBê(çU2H2›Urãˆ7ó+Ò$a <˜J,„U‡ÞB’x/꽘yp™ˆµè®QFÅ X¦4{VNSí…´A¨ö,Ë'mÛŸ ígçõÒŸ£z€}Ñ"ÃÍ3ýw0AIô2Ñ$õ¡³2eÝ –\ªÆ³ôÚby>™e­ëM\`¨>ò#_‡2Éè잌üvpA#V$/g1™ ¨U_ìüúð¾QÚ½äªó<2Aí/# ¡84s1/T/ÕùªåˆîÈÃóp§$™¶Œuçâ—®7IEb)³Ó”ˆ"K}Ô¥Xt›ðŽè„Æ·¹‡‘ ³˜i;T×õm'„e{ëÝD®ïï;r¿f£ì…qåT…©…ù)ìô(¡È#Ñ&C¸ëì—4Éy½O/“¯$ÏhñcȺõ±;Ÿ?å¬2#_EG6#_ã,7^-¿Îè–’"U*M9&•8Ӷ̦èa%¦[éXõg#_]L!Fj–àÛdwï¡Já¶MtioSONW2(¸öS¦L“ωù27&¯öj`ÿ+òeor1´%/åsÙWWþòÇRÎyw_­[H/¨¨ˆ*ó¶Åä‰YúãÊ_¸ç_NÕã´ ÇÛ íwL#ðLhcK¡þ9Áô‘ýÓ[ï¬nÇ–3öÚ²OŸÛøíg©!ùá»óö3ù¿n›nïµ,÷eÀ²ÕòȵýÏ9¼g«o·óÅkóî^\$íHıeå*ú¨Ý*²n²œ¡i;Ç”ŽÒìåàvuðI$*fÇÅÌ´üÜùkõG6õ›}žæñ­‹ZíWÐê\B\a?F­n÷†šÇÆÉ9ÿG°’ G¯¢öIÔÄ2•#_T±£Ý| ¤—X³<,ò4elàu†ðdÑûÉØ“žµ=æ£;½;©_¶oF×9÷>8è‡ Œ(ûè«©KUOçÍC=ü¾ýq¦·Kk´ï¼Db)ž9¼wÖ\4ÕßWŠ[ªæŸÝAå7÷ï0#__#2¬qSôYP@Íña{ÒüçF½6¡¯9ZìHò@f}g§ÐjR$¿ãžÕéca4 »¤¯o:ªÏÇyªÓÁ¨ùGÃX÷¿wÏ]u–Õ©­p¥m²i¢Þ’W^æ虢º¯Ò¥]'CîbÎL&ä‹Ié"#_ô¦*% Ðå¦aå;,·ŠýæÞ[ãak[Nçõp€8(Œ…w`¡«Í¤Òaî#VwD™ ìŠÌƒmmEææòà“#_úL}²ÞL9(YdѧÎs &£-w¿Œ ü¯<*mt­c¯ã®ÙÃù-ñ÷iÞøë…Cˆ›„7oê¹’ât9ðÚ ­¡ØÞ_G§;SÁ…(d½ªà¸Wg£ï5~Tüxàåæã%®. ?#Vc(Æóëµ7¿K\w„GÃXì‹Þèaö=Öáú­âHB<+5}sБÆÜfBþWØKˆ„‰”R‡˜.ÒØ¿>†tb9ëƒR5`Àà£þ#_¨æ‚ š#V°;HÏk *£ÕU#V™à…·b ÌüuôØã§2q²ü9èSmêaó2¹úd¢ðf›3™G«­E ,¯£ò3)rEB”—#26s°Ž<‰[±¢‹½ì4UKÜcs¢Š òø[—ø–’W Ì…ð„S”¢®ßX¢™†ðŠÝl0äÎUk¥®¹s†Ñ}Rø`P¯œÂøõŠM±ñÏþ4qÿZ1ûwPt‚lŠ{¾{º$ëg!!èðŒÞDMJ÷(x`¤º­¦ sN–¾µ¢=VÍ{?O©",xà|ÍsuTë³Æç_X¶¡¥â>N›uÑY:#_Ãß'üзºv|ÜT.Eónp™,Ê h//@¤̓Î#V:–üg9©S ‰ˆ‰ª=aµºÿ‚í#2³XÕkåð¹>‡4çõýu$•Äá˜Q†`¿®ìÎtI-…ÓWòÐZôâð‹îuØ¢ø¤Û×­íÔ  ¨Â`@) ûúÊ&Y3L‚ø#2Ç„qA¥+¬TóVs½™ü;l¸Óâ|!nN>GäpÐíf˜±£Ö@]YýoßBa¾*ÑZîÉbá9iX€œV§7Û#VéJ¥=¥ ƒèIH ÷Íæ6Hß&²™#$l^!D,Î~ŒåKO߶2=“„º¬YëÞÔg«¯§ø]®«éõÑÝ.\N!$´¸¨$Ñw"Üi‹˜©\Ьo#_+ƒÑDüÜìºlEGµûÖÄ7麀k¼—-q§˜ìËÄ”›Ï¥^E$9_D®#V”G«º·*®¥/8ŸÈv}¿~ÜŒËzó%˜™u@Å}ãC1ƒçÁB(ª DC=l #_$XÕ])ŽÏä3!h`ÕFŠZ)¢š'Å™L>AàD.Ftfn#_êiؾ/áIóáÅí¡žº×Ï…þI­HVëùÚÚ`Hä¨~ÂLa$K$#mߌžU!LË;Òp“(Šõº2 "#_è’‘Q¼ÕéçŒâOkPÖ¨ŠÀPÜ#_.Y|Ða†Y\PÎI‹© cК÷b›ÆÒdÊx€®peüÒA® m‚>–Ž¬K’D±¾Ó)j}rѠȘIlÀ›$ÊÂÒÏ¥wmßdÕ2Ãúþ^°5ÚÜÊHI'vÀQ-ŠÀ;ŽÜW¤š–·æÊQ|„€PI$Éö>×¢‘û­Ÿ#¤Kº϶±ÎÿL0¨vþ^ÇÙ󒱟ë‘Ð’P„˜“D9ÝÕóx„^]9òʸ„›áþNæ–]ky-{jù¯ÌQhVóhBKK‰É‡N“¤Z{.i=MH¶à l:tå¨F!&`ôTDE3#‹Ýàž#_Š%ŸF¥Ò#ƒ˜eÙ¡#2ª€ï g>4þÒ£ÍÀÍnžÇiw°ù¥ìä%^k…¼Ulæ–ß»gî¿©c½ÀüVûÌPºˆR¦*f¶»Á7U0DpòJŸ›?×F$¥zU9˜ÿ2;®Æäd{T—÷9¥ ä9¹'ÙmWgÓ¬GWèè%#_ŸÞ¥n:¬DDÊê±Ý¾Úoyqfþje¦~5tÜÔ‹åëWúŸ@ÁÒÑ@`û> ¸‡ô‡ø°¥b|ž ˆ˜#_Bßíᢶ?à™ýi‰ÝõM;BýoÔ?±C#œ2 ã×Vn²ø;ƒ¬eä*I3* à8#VQ®þåNƒ2î—ã0Å ükûSv—éðy>ó1smplŸÄÍ=Þ#t™³W–eu4^³xÆklBÌ¢©–R(ý>›Îƒç‹mê÷ÓíK³­yÞygãWUA·6_‹g†{`±6tÈX)ª¨K [ÕlÃ@Â#Vù¾·ŽqÐÒ\c$ )`QM¥e³Ÿm[ Iw»œw7íñ*ÿ%JghÎqSàä$”á/ƒ¬ú3[ÕŠC±ßÒ¹,qy/Š¦1ŸdÝ]µ…sQpé¯Ë»Œ“WÉ»×æa¼›ôæPœÿHP#_^å1WÍ){àáGw®Ôj*ëuR*fþymÿD´ÍïºR¡É2ë‡{ÄpU&ò¨§\‡šJ I/¸¨W—4žŸR¢‘Êt™é }Ÿ}ÂîSoŠïwŸ§gy´W5ÛkõÁB‡u Ï#_~³Xšïü*tüpø™Çóý™#VÓai¤c´99ò±ñÃ'ÙÞýú¯‡aÚÉ–é¡Å# ®qïðaóz³ÛÁ•¡õ}c‚üæFÿDõ Ëuµ  Ä׫wÚ¡ïÍé± óí‘)6l¯âõíüŽúce²V8aeÉÇ–¼ÈÓã’H¹(TÉP^çµæËGÎÈ÷î£$>#2(ç¹Æ”lrì o¿«*¹¿èyK>ï•é#V¤ÂwO4Tò¬R(´(H™)} ¢­_~º3ÈßØÂUˆå‚ˆwd“ ù#W¬ð‰ªRM.“m¢¶öâgßÄÛϾëô™ÄÎd'‰z¤¬Ö?»Œ}»kÜè{¨†ÃQ§„¦¥Â7Z+­°ºüÙŒm3Nb®ѪøxPS»<…u3ІL ûõ‡'tT‡ìˆprò«rTX/N¶uœŠìê²Å/Ò\!¹qÒ|ºøê•-ádðŽÝ~×~]ªåË_s±©5&A÷)‡ü{ènî<¡œ¾±‘†ö:›‘ia¬Ðر</v™Æ½÷L­nï*ïU~Jk)i—Kùq±ù2Pãºë¿¿³ù9nÇb¥* ì«THÖæ›ö!V8:â…:ÝE~Öi`RÛ.âj8µJÜu<‹üI¨˜·„¢ŠÙ†N&–p=Y ÅšˆÞ¾<ãJÃ[pLR(Ø›ÈLâ,™#2Ѻ±@€˜I=gÐ¥WLÛ•ªÈÕ+p EÝÔ,ë“#_Á8siŽµ¢­Þ ‹è+åõü‘ÃÞŒ+¥ÂçMŽŠ ÅŠÁž¹²t)$©RI/cacç}¯Å–¤YQ0#y èk6;†#_€²Ó ;ZL4ÁC#Vôù´Ã­j1OÔ‰)¤õ–6Upq•#2·[ÜJ}’:Eö/ê[î¿5Y讕[¼Dzsë3É«¯C)$Q¦„ ƒm.ÕV}ŒyÝÖ´ÞSê¥Ö®†¡E¯ú]bŒ,+IÔC+¸™»õûf'õý0ë5ìa‰Ã³5dÜRËùØ‚¸Í™6µ…!Ê¢[•8ó‹mœ1F{ËHƒü ú¬çð¬ÜºË´}Š¾Å%Ë‚¹ƒÂ=õÍå|UþÑkomsM+tËâí• Ãþ®GæýZ–B_Á|¸$¹_i?§ùNBË»´;ytŒUÝž¸™RS¾Ò£¿àçÍaÓ'N%”!·€qiÍíÙ}Ï;MQZÔ~•íÇ¥šÍ¨>P`pC4TX øU#_«=üG Õ#2d!/ /F=îKHLÊ Ì úŠ cZG&Gm#̈ Á-`Žµ@ø¸.2XW~Þ°×oÛé·kr†rœá4¦×ÛŽÿÀç‹×?u%Õll’€–G±‘¢TƒófÙ‰SSC¡uµá†¬öó|ìü«œCr£Þ"z(À¼vö’]ß8þX#_@7¨ûOßc†â -ä)A±”G°¬UNÒA,¦Jñ“$^Éúš§MãSü¤f¸µ]Cäý,20Ã@î–ܪ¤ã|có=¼T­N˜Àb^È|Û‰3Z2ŽZ€×NUöÁ-÷ížò­&B^“P¤?xÜÉË"Siî,ÈL¢ÔÑT¤sQyÁû>3å0•CLûþeÙ' H©ül`•~%„õçÝl<¾ñ½ðCß©ü‰:;¹üUµT¥ô5†³GÑL¤÷“âŠ8°^…Án±ÌóuÊ“™œ¹—ßkÎ5’0¹Þ|'ÅŒ³/.#_ŽÁæ ;=ˬlœµFU¥Q^¾ÉG²&³¼‡Ÿ}£—nÈ&^Ý\@ðù0~D·µ5[#_Mš4£–˜–üïÄtªQC•ž){s¿SŽüND•ø§$Û1¯ÄýXÐ…CýnK£wð±ºÎÿø\žUúì´gùÃn«#‡tz.9sã—Ù7¨¼K næ•êšôæx})xÍcŠì©4¹å­ÛSò2rªj‹ìz#Ö©;œòœH6F‰ëÓ§¯Ê¿láÿNMö”ä¡Nìá-›¼ Ú‡·6ã]7ìÍh &P’"j¨þš·“@,(JàéÑfNò£Y wzøÄ‘„*À)F(R©>e‘‘Ô³,A~³Êäì2š¥„Lô#_#_Yµ¶ʱa=œ®)?*KH]“ÓáÅ»pp¸Ä°íôSY†äMíÏÖÒŸ‚1»ô©‡9ÝØ>,ÊáÙ}”b[[ë3Ù#Vkð[(£¿ö>vqeÜMç7ðÏ€m­‡ùPù&a²454kL5dX±PP”?Z³ ñdµ.^MaÃðõ¯e6AÞX ¡Èù6ªÄ r…A—œ¸Çy6 RJ!UÌ¢oø/âÏñdóB»+=ôRCšOòÆ÷ú(/)Æ0Y6Z7{¸iâx@ˆ)ªt u—ᬙðÙðé3ÂFj*£—Úέó Ëu¢ÉÁˆøŽÅ oõÉ€¡©ÔQµ¬H´Næ#VÓ£â`Ýò4ËŠ””?ö”q«ê-Q`fç0yÕÖ?"ÛòÙyâ24äæÕø¶×­‹™ºÈÞéƒùZþ}9½Å·ÓÎ"1S#éÅ®–Qâ\µõŠçxÍâ5#V…ÿ"~Uçî£tr¾ʹ3åS«-˜g›Ç>w¾¿&?v~OÖtÁ·…<ó Šk0o[H£ µÓÿl`ýÆ~ç-Ö(²_4>Ý>Á~4uϤzÎìnáøGlmDä8(ÛÊžG^Î`‰ƒK*샯‡ƒ•áA¹œC™S»b¥ ¿Errú~hº§oá 0µ}Q}GÊÑ€²J-xÜÒÍÒõ3þi¶³ŒUÞÅ!<¼Têdu¥ªd|ÜÙá#NçÅsÃV#Vý?¬pH1(}¡Ìþwè—læ`?‹¹Ò»ž"wB3}®JìŠÕrXT®† ýmÉd r ­:d€ýRùT”fÉ7ÅÛÚÜéß7àãý]¸¢"~÷¸;zåžÙuÝnry¶«²±•#ß(r8{JRÊÐa²m#VöëzUS9ª ¶)Ö£ú겘³)îy¶©yîü$†Ÿ'2Ž‘) §Ž5Ÿ#µ[íÍ {šÒ‡$—ÉJƒ.P˜ëµ.f?2lÞïBœ›AdÃI2ã±Ôö¹up‚«äYý/xÂlÐe9+‹Zæ…©GfÊç;\¾ª+QBë´ýŽQhS#2øôcÇA‹Þ€h?#2¬3*:B†ü}/÷ $ºÇ7Ø]¿ š¿ò~k/@ìpÈ51u¨¯" Ñ勳þ(_Í©k >:ŸÛ±ŸifÜ™Êéº.£Â°ÁXÁwX¢ÒñþµÛ=ý>ÈÂÅŠ…#VÉUçYí7×߸”â ô´ —z£.‚I-îåÃ7þ³?âþÿk–²bT1;qÄͼ š—õ¢Ð>?ššvýqÛƒr›±#_Jsùíìü˜õë@“Ñû42ÚX7õ_Ç k’s©aø‰ßB?]•šƒtÞ#2ª§oì €ò”€·‚‰”Þ@ 2ò$£ Ééô`#2è5žÿÃÄQM¨'Þø|óú_á™ýBÅø¼ï ’Hý×ߪ™ v±ò‚\ž§2:Ó‡•DÞ讲ŠFŠÀ¤XVÅyÍÖÿgäàó³±åõPsHa„RE#2„×DZŒ-ÔüYFþF©iµ®íwýÿ?Éó¯ˆðﯡÊ:Ôà£Øtí^MÒ-öómc«ìýbLî¯ÞçH*\o'­ÕP9}ÀŸ…)&Y†ˆF’©¤&Q?~ÌɯÓÆxFñ'Ê’UpQüéž+0?§Ѕå¡?⣵FÕEmU¥U+ûeÔ]àõb‹6N{W†]~‡D(x¥%U3·ßv>>7€4N‰höV‡…Ć"y4ýúÑnÕB=οEL!ìO4ÉæÓëÞêòcònÓ_RóÞ㓸ÔÌTP€›ñ"?ƒŸç„·¯óOŒF½¸Ãéù}{óéõfÿÏ·…:°W‰UÉ@ì€Ê8x‹?#s°ºƒøÒn%PÐò¢ñ ß®ë½\¢5£t6Öù;^C¹WFk——›ÏϽ{Îåj\ì•Öøá4©¹Æ¼À„jÐ… k-¥)±±ŒŒâ5noÁs|Õpåw3SºæÑÛ»v]¡žys“—׋žÞz(3¡ ѪúõýáDã‚.]ñØØõ‚·?)Ñ‘Ãêa7zŸ#2†Á‡Y´paº*‰|>綂>@qü]Ó÷âÙ«øýÖé}òÓä2ÕÆË._½·™[uŽ„™ ½`Q©ªP÷¶5©£W‡ÚñEèœ5¿cÔuš”Ué.†1Xr€Â"èÞH ÊKO¯)_& Ú»OaSÊ\A;]šHŒCh;²4õ?–‘Ÿfîy<þ¨zO䢊Ú`8b¢ýt¹Ý;Ô#Vrþ,*ÊóVƒ#_ÐË‘R9E]ú²YÀ&¢1(2$¡$’5X¹ƒ•EÕÊ7¢"#h¯&:ß‚­ß•m.2gãRihÕ³#2k½ÝàÞÏø¥†Zôm¥ôȺÍx03#¨À3«’äщ޺bºþ«O×ÆvU¦ïÓðšc«ýâ_ãúTÈÖd  $"c¿ŸEÌ6¾[d#2ÝÁÍyiÆ‹(BÄô@ô~À?ÏùÏQÏäÿFœ~>ŒÝý)V'ù† ÿPÔu_’"§ÅR?:ÿŽæÖÃWɯõXQ˜÷üf׊G’1µ/ æe#2ê‹©“5Kƒ5ÇÍCyºð›vW¸ŸÛ|ýÒq9ùNÒD*>#V׬Ô&@Ùõƒ>|1è[µ)LÍF†çP5” è›é˜ôùKir[6Œ0 ñnÁõ4´†—­á¯$vÙõ}+‡¬í¡q£ #ÃIƒ>4]I>htŽʼn7dè/úŃˆ)üuåÍ„ÐÝš(ŠôsòŽaj%¨R…zÞ ÿ>GÁ= ô–z‡ÂÉ¿³‰¾#_žö¦Ã2pÔ¤¶þïËת#V,{ö‰í=²¤gÒé9G²öüøœWÍŠrŸË ;‡ø íY6¡êª¹<($)KŠÁÌ=Û}l²£qP†÷øÌÎf²P_ ìøy¢›è’vmþ… #–N"X¬¬ €{ÄÕÅò¸ 7zçê4äÐtü~Q$ä•Yê绫¥ñ“÷à‚ãžXt‹ººC%ä½£Abbh!GNo:Ïßb¸ºJK`KdÁ€y\J£*%ž#,QH…óvt< &;Û î¢É†³©ÏžknYK#½25UÀ° Šê›¡x*~š¹òÊçáˆ{¹1ór´Î”þ¢"~Œažq%ñ3ÇØö_$e¿‚É]l‘f¶Úá§7#txG3'y(»sh8A„Bÿ#_‰ª—L'üÕ£-cÌ^^ïÄ}ÏJ}bùÿ~½èȲ/Õ›-£ 0AXà‘SããÙåTÛZ}¿çU35•E›Êº ‘Z"öþeüH6õïÇï׎ûíÖOL}xr©#2aKab!öÑ&=~óׂmÿE\¹\êÎpH”z1@ p–n h$&¥˜U¯ed.!:@uåÔô &âýWÖDIKË0\†q£$i*ŠJ$`•ª>lÈ®sõCµìøãÅú !î‡ (ZGõÊ’t»BÑã”þ¨ 0„Û”cWáÛ‹¨z@`ÊwY#V'è²DÑ)’ÒÄ?)Dïëþ_^ºá·§Q+:Æþb9¦”~l5·p (7 oN㥳}$#{û»dý·j§™«{°¬ûð¤ ïòÑóYNŽY_r Dß8oœÍ‹­¤Ks‹ÿ€4^U‘A/ëßyí„ ï]„½\Çgl\£•ùÖæÍüãauNÞ¾Xtk»Ç«íÃU'c.šQ….Õæošô¨Ïè×(ëVè¾ûPüœÏ±ÔatûÉð ¹Ø±pØl#2—iôÃ"‹†<.Õ2à¾Vta–øc¤o9ý7F7ã†×?sã£ÓSÀ´8p¾©Õ ÈçÃ;·‰`¤ 8 1ƒG´K‰“T¼Fߧ_³ hf‚Å*ÜÑ”7iªVxd¡Õå(9öCÏïï^NÊÍ_··³ˆÕˆ£†©#V`mq÷¢™@0ox#_ôBšWr-˜t«Rú"Õ#_?e—ŽY> r¥°>óÚ`h™…m&KTR•ÄÓ3FÉTç]žùß ¤¾{ªè %&jL̤9h1C”íÐŽÑM™Õ \ØÍ÷óvÇq8q¦YDαq„ho Óïvf¬IÇ:Ÿ¦7EÓ "#Ÿ:vð4²AB0H2Ù–kŒ^s‹”tB€±‚Š¡– #_ÀA¥B‰~ê­qp¾·2iÔ3æõm RÃYZÎ^­…ßÌ¡Œ‰?lPªak^±'j0a'Š~!#_ Ç6{?³**mE”c#n›Š]Ýý9ØJˆ˜¨)k×€ÃÏÃ7›·Ä:&¶Ê \IC-;·Í­/!Š! × r ´“ƒNf<³MÄóÔ4{9\/ˆ˜Æ6fY8ζf P(`h oz:àñºŠ2Ø,£Gm0A±L†MlG;!@Œn¤ÔÍé©A‹‰s1&ßzÉŒòÌN,,yh‚­€ÍðZ‘a Î_B®Õhn“PžP½´ÈiXah4€­5Í)#_bÉB6ƒäû4cKPå™àÐÌüìK ‰‡=iyW~rû9 iI»ã"‘Û V¢ˆkGn¥X†ZÝÐfõ›œ¯vX¢Åë ˜ ä˜;V`-ŽéIErHµ#2›#V*6°aiñi††Éƒ£«h€³®Æ."Q²VyQVP#_-¡¤Ú]p"*or#VCš«Ô]µ`X Á6õŦ¹—–rõY1oÑŽ!CÓlÃ21U­ +5DQ ˜ØÐÞçhº•W#VB ŒæЬB"„ÍB‡f„&­&]ž3µa@N9r8Ì2†©[ÑÈÑÁq¸P[ ˜âÄ® å£#S›K™a›X®uJù9pñÆ•f5Ù•#—t¡yùJjÉP2Êb¸mÖ©#V™:%¤2^Ø*PÌε`ãHV…•:0ÇN4P+gù^0êôе)E#¼@£9ÝJƒe|²ž:Ú8inÄqЋ1xêeLc8`´+oˆm>a¸b%2u4äcRYFSQ&P¶ T±Tª˜ªŠ ŽZï\äœ _çÒŠºÆ‡ú¢~Üv­š85x†v7ä~èy˜h>nd‚y#2ƒ:eZ1JÃŽ”°白ADþ –~±±tñ ƒÍŽÕÌæ&´ƒMÁžö,#_Œ¹ßÿ{™ù …G#Vhë¼R!mƒE‡ºOçX¼¯xf&ûÝ?ÔdðBú¨9q¿õñzBZïR#V˜Ž¤.¹“Íôh5[ zd9pí œ]}öQÄ.Ru:s#VXs,Ú/…ä9m!ä*òÙÙ%Ú¸ì%u²ˆ#2æ{&»û´¢ÐøÎ2чE)·vÞ–zìá|ì½l[ÃÅàƒÀnµƒƒêbÛ‹ì‹+bÂ~_n.tcöŽ²#2õ”#_Q;#_3:Ë»vap̃.<£~>‰œOÝÔà–~¦ø«h-1ýÉžÜöü>Q¶¸D]´Ô·¥‡0Æ#ð;ŸXÍ›}8/^7çlœ“§M;‹ƒž'ZÑ ­·‡2vráÈ"ô®¶¨.­õ{ƒºh³/0½£sÂÃ¥øê€éj¾°á®f±Ë(;¬¨z(T[˜1%:ÈiáerŽŽéú”XÛq—][Y%”„ñT¦‘‰ógAUŸ ××#_X;cxX™#ˆE((Høÿ`#V”ÔeþCÑ(A´Þb«ý}ý•»è úf=$|>2ý0@ûøq€§”iåëôÿO?“ÚFÃËJMlðrܧeîF&A:'€`ƒÈ}´ä¤–#•:Ô¸i_å_ž­˜ú‡º ×9vÝ3O‹";;?*85d÷žW%SejÒ7RkpˆÅtòÛ­†©Îâ»#ÄdÄpº«Î/Sá`­õ<¿#_íÿJ´ÝÑ´a mØÜ3¿>‰¯§Ž§¿žª®¸c§Ù¿…¯2;ëO“©9(‡b÷ÁGËH3}e>±…ØüáùJ‘[— ªêñioà¬êO½ñlFóþfOÖÉúzÐrhèX§õ^Ú‰ˆÓCÂ:ªFZGm»7»žv&¯TÕúÞäeý˜ƒ‡û´òeð¾‡õSfø{ÂïE³vT,$é­ö™t>vh|8u¬˜’DýáµÕŸÆ=o*6°#Éí’„ÔùdeÿPbö3DÓ^?7}¾ÜÕ/âÿ(·ŸE ÁZРñ‰#2<ÅF4Puo¹/‡1)öZ§ù~·Ô-¾’x(·ˆTˆT^ŸlûÀÅ-âƒm;Weò»Ï–?o¶ÝçYóü¸§;¸áý½tË§í»¿Ä*gÙE@?â_(†°@üæ#Vñî\¹7xõ¦ïfEë.ͼó%4¢I_AÏųɕ/´KfO¥M³Rªƒê@B:nÂEOPùRÛ¤´8(ëÅ:<¢á(‹}#V7<(“jH­6Ûï:ƒì“ÚtBS”uLîU6æCµ-¶ #2ÔJÏ­÷¡å,E„]uÕÈ}UoÍðêSÙ$ÖL ØÌQÈi¦Qì,Ÿó1ÜýŽÛ@Ìñ]vPjšl)3h5}?WÎrO#_€,#2ý‰5N_Yl¼ŒúR þëÛ4r‡ì}8)¬Éùáy¢±Uàó²©èøxeન(íY±ͳÁBbdPž›|E,9rôÏÙrä"9Ú™¹ªÎPË‘=‹çs ,Xð¿žj&eÃ3«e)õ—‹Î¬DœåŒ¾3y;0b4P “FPr{צ‡kµ&wïäÀéR!ýiB¡Çù[–ƒQïæ]ôŸ'qÁÿIú~u§ßwoήQª‰½3ªÁ¨é‡mè…yë‰<~.½óûUÈ‚„qDF6‘IL¨”µ7[#_ŽõÇä§]yêeDÂæ;¡m;Mè˜Iuù¼e©¯~вÝs|ðùÄÁçÉ8åÚ1¿”¶ê­ðúCL;¾hÝ=5(G3ÏqpÈÃ:Â3‹Æ.”Í+‘[/N5ØåLmª5øüûTeÌ-l¸å9Ë·³?#VÊ {sˆ<=೤ñ§Î%r›ì*.õ™#ñd¯A“9 Á¢ ðÅ3?”'‹ðM‘"Ë8ü5hêÃOÇü÷Œ…Áñhè;ƒ|î׿×ôˆJ-çü* ñ·jQ:ò¥#_ˆÅr`#}Ôiô‹ücR{Ö’`ðIBMRßA•;mçÀóB8%ß߆ç)P]tù€û'™*ÏY†”5·êÜ5¯ú.ÞGéÆ?¦mýWîLyõðÙ¿Nwam3\ÆÖ´E IBA#2á°l[8ŧ%Þo;àþ6™hÁ£‡ç›åg%T%ÀGÅ1ºÜ·]ƒ’åU$„¶ý¹Qbë}%uHȲòuŇ$ £–Ûlºm‚±fɵ'Áœ‰iñ2H•Fo¤€ ÈdIGâ¼[7&×óTPYîYlÕÀ‰n[cÂkÊ“°h*/¡6k׈£lRáµçtQ¶!%¶o™v‹m­ä¬æ¼IÒÿ·6‡õ­s¹õã’N;9“+n‰çíü^&[F‚Y ÝÐM†0šTlY ¿]½4XIS±6¿$H#VpÔðíª<‰'#_Þ9õ‚QkÎï?&›rp¥ÐU!œøi\¸#VO˜¨>s-Ï@ì!Ûm·b­×8çªÿ7%øgŒ5-vK@ÃK™G#V4mTS/ѾWêÄKY¥ÚWõÿKÔ'|‚QnßHpø¥-6oJ|aÙ¿wÍõÅñùEM(ž*õT†!7äj5#V”ø4€U•j‰ïî7#_ 6†£njzkpýûA–ÛÊý8,Þ 'b‡*AòñÈwc½ÿ2>ÌëÄ ò܈ý‚hg‹"Çôù¼„Ž ŒÎ×â#_Ý(e¶ŽàxzÖ¡-(*›°x%¤lv)IðO/vºA$¢Ù¼©×êf„jQ«BŽ¦×ÊOGWmã´S…£j#¶ Q‚xŒ<\¡ É#ʶÝdŒAã ŒÜð½i @I$Å×`ŠÊDHð¼uÍ;z;vîürC,Â⹕û@HÙ,+c°Á-ÄKwj3·'Ùå+)æËi³YàmîwìäjqGÆØP#VúDîÆz„Ŭ,ì.K@.`ò…®©f›³nÛoˆš,®É÷žÙ{txF|ÇPgQz,ätú%‡†:ÑôÖÀEÔGǸéDN‹·nÜ+ÃMû8à“~6µƒ¿³ÌÂÙÁ"‚¬fá{kéÞÒ$Lj-Òk¶«a–kz“ïgA¬6y(™òqÏ…wÇ­ZàøQïËÿ ù_ÙÅÐÓ<~%q ê¬µDrطʽ—ߨŒ2`ü5ùÄûO¿ Æ=¬¤Ï×3ѱ€ÉÛ¯·žxÇ,ø“;V:ïév²ü„~G.’»-Zä/Ë'5¡ñX«çÞ¢3Žplö9åÄY#2²r2!t‹Ú>;“MÂÇ^¿˜×¹ìC¹öÀ}N6ྠæ²G]×É·«æºaMDh6=ɸšE#DÖÖ€”éƒ5Âæé–Á(89v&Vðy)¯ÇÖ;oQüpÎ&ݤqs`®™SÈiÊñ1xI3Öнð©é`NN¦ã.iüÐG ®Mð¿Qª.•·O\±sW×æ½½¤1œ\hK˜±âWsµBüLß8ÍäV…§…[œy#¨ó@cNŠ lÊĊ⨡r]£k±¬D$t:Ø:fÀt<ØŠP¨ZEƒ@È.—fšÁ@ùžÑuü´".E®„ÃJWtÝ.énAl£€à+#2ÉY·ì ï»šàÓ°@л,l›O¢Êûz!°:\‹xF/1ñŽ‡Z`õ Bb+{ÔûE½R˜— Çi~x[Ì-¡ÆÙJnÍÔï8 5us-¥¶#V¸>æ7n5'˪²G¾Ú,Yžƒ"MñuÈáPGj€µ `j¢ÚõM)¿ ÅqMP…ÄE9Ò%2ptVqrr‰‹$HM·¯4m8¤fäú¸Ø϶Lžl#Vh¤#V¹íØ^C T;'QjÀ «%ÖÇ¥Ü|x<NصH²Õ³¨ °#VFDtu>Äm•ì²QÍöf6ê{X£YiŒ ìüSŠ”¶ŽÝŸ8˜®¥á“ó=a$b»ÖB¶"#V>ß‚±Ýù—s~Y†U¿K喦Ƅ>wÌJðê_¦üŽØ2Iß#²ÛÃGˆgH„M?Ú2ø=¦\Q p…—Œ4€×IXà6d¨œÅ3ÖÐ#Vc–Ö{놃=ØçŒó¡EÉn 8 )¾-­#2x³k„¸Q»g=:Çš §Ú ›íª;÷v»ÐáäÍ.ˆ­ýr&Z‚aáŠòçᎳFØê6Pýߎ°D½N “+¤`½bŠî›"Õ0ïˆ\oÇÞKíˆã§ŒîÓϽ¾{‹Óf<VúgßÔƒ‹Ú1áµg·#2¥c\uO.%i` cK9h¼#2p [¯¦Ú +AÝsîu·x(½»bºìD#VšµeêÞ¤jzmä÷;dó-yàmý“òñÖŠf;dñ€é×âEòú]Õȹ ½ ˆÔ8åÑq!üê@ãŒ5€à„g¿—kÝ\Ê/%#V@ñŽº‰DÕ™˜xz»›“’=w®ïp¥°€¨T`îL+y¬¤â×/K8j¼tn“Æ% ìœàÕ$„Ù½ÕØøÕŠ—,Žó”Ÿ¨¹F,Î*-«ÔCybz‹W™»Í—O»ìº¼›¶ˆÁã^ÍskøèÕ='t`ŒÒS»¼òÑø-Öa¶?Yã,]!øòúÉ=’²{d½®›Ú}^½ÿÜdÅ›{´—”Ç,/Kx0çÒu#²KØi$¸(Î÷ â•gÞº¸>9= á]S‹6iÑL%É}X#VWˆkÁFqKKX¥DeµèêÁŠFTåc~½û¨t_Dòëqp¸Ä¶7š"°sH²£ 9£ë¾ÿ4¯©ÃJŒ¼Úâðaˆ#_Û¯ì§p×Ò®•6®±ò÷!þô=ï?ÏõøÅ,#2R"ö¨#Vº¨YsUCßàÛèâÝ};âOo»¤=ž"sÀ‚ãÄù‰jcmBPÜxx,¾«¾àíÅGãž½¿…âÿâ<^$IQÄsª¡’I"Ôüž‡ pù¾>^Ùõ_èÛ›È=KaÂ’ÿzHPdô‚gÓó Î# o#28:r?wÍíòÛNíy¡ÙÈ+oF„†^²1„Uå‹TÀ@ê@q#2ï‘ͱž›¯Ã·Ï1Bìé¹úQ6¾~žz¨ˆH$&@ #_¬Å1ß¼ð˜A@Y&Þ]}µåÝÏ×ÝûÚÐß`¦ylÌvt]¶ Éa÷ÿFAìxæØ,ÙA¿´õœç…!H{#2˜ý¹³ôVÙ„O«®ì‚Ùõ€’À!©éë³+·%«b‡Þ&êëpçë*BKׯÙH_¨Z+ÖúÜ"ŇMÿ>¥‡©ÛÑŠ¾?ÓxÆ°%g??â2#ÏŒÒaöVH,`›³Úx¬IÕI$Q9>õ¤Ð O—”Uê6ûügϺõòpž»G(Œµ+ «Í@ÑÕª×n߇ûÚ_ßø¿‚)ò~àšrÍ^ß<ãº_2†E Ð M_ V$Á~™FK®ÏÍ®«ýܽ= 7‹Duj“ãk·È[‡.y€A¼nñØ¢_5ý1( ëc…‡tJX…‹Vhfªª¸HxüK¼Z~}cáåz[²p8ᆳwö·òbבÜYMéØýÙ%!~ŸSHlã}±ŸÈ^áÉ$;!„Uˆl±úï_;\¯…Ó´û÷}›2DT‘B·ÏàPÉX€ÔˆLÆDe–^å1%1erì îû~å^Çx0¨0º­^Ezy-#V9„ƒ‚#2-nÅßL+ímg¢g×Ó™ŠÅÉ:sè¨Ì™%&õYp–‰I‡ønÎÌÿ#Çñsös`qÁK#_TzÃïdHó¯Ù•A°ZG’½àåä#h#_³ÊæÖ7a Î!#ÎÓò#2N9#2&m´v`îÇ›L¬Îª¡At~¯c~Sy{ß9<›Ôyqë*÷ ÇœçzÁÑžIǎdzúcÇ0kÏxv#Œ ˜è«øÉ#_IÚhä(·è° >·˜ ‹®+ý÷øþÛÙL>aŸh¼O\¢…œIVõ-…r¯à¬¼Ðm`!‹ÐW·•`„æì;`MAXÃ#_Q€à-ìRˆ#2”&æúO`û¾ZÖ«fù-Ê»÷xwovþƒœ‡ò¿w䣨v!¼ò•ÙGsÙâcI¢E#_¨%摘c0U’ÉŒž[M™íaNÇÕS]‰›(¢—e›jR3Ž^Ç£*Åzu;µîî\Üw¼¯K“¢ývM5wfKjÀéÎîgd¨Õè†SǯÜo׉ ˆL *0Gd33"ŠC¯lgÓ›y _Dä›î>[özpÌûß_3å}¨>=sÓ–Ä_¬öKÐkBðe"2Hˆ†X¿.ýJëø=ù{òH8d)ÔÓß!ç;F‰¬ß÷œ;` Åf3–72"1¤^ñ/Ï`cl–ÅŠæì„KÝÚMùe~iÙ€Ø_¬ÿÇ–=µÔ;°ãI|\ëò_¿xpd.¡W #2#2N~„GL# Ñ ÚNj˜Œòèì¢ÛiÖìTÞFòöRFk{ªøUAØ¢• ãó Éë°íxÊØqŽÈ;ˆ.3¯ ݱ›Í\º™Ýu›y^jf$̶ORÚ¥B6ëíަѵ÷‘´K ‡Â6K´åm”Ô2D†[C^:ôëþ3|ÛƒODÈTâhE5d¬zCÙ"m z­!0È,)­ÎÍBÇc¯ßýÜòc\ :Œm.Œ¹,ƒJËWø²#V¥„‰;´îÙ1¹¢ùîÚånÝÝÖ°,…†ÄZÞ—ÞêÍÁO¿û‘· Ýý.@$@±3Ö“ø ŠöÀw–|0mr5FázDÙ<£3‚F[†—NÞF€^€ýdSUUi´'óYy¢"´k&ßµ¶›Ün‹qÁ\å.e±l“4#V;Wgv)lÿVéâ÷ðLþÊΧ*Û^R°_w–ÝÕ£HU_Ö»*#Òä½^ó#V“ò.¶Wyzç̪{6¥q™wǶ–úš#VG&+ï´¬MO¥U¬ªÂu¿(É¥Ò̼“O´¶Ïãqä)ßœmµÝ/~‰ò½ó(Ž”Á;x=ëVn#ûT]ç‚[¤Kˆµcf`0¨»ß•±Â@,Èw&-Ùr dà±×Vò¿Œ½m¬{¶¶?*8wejZDHPn[##_ÍØ„-ØëÈzúAkGºVÃcT^_ÓfIøňc)ÔVÄ&#VòË–Fˆ€]ñÿæÙ[¶;&ðÏVBô_FÏ™ ‰Š0Þ€ ûÖ½ò>u ¨ïÁ>¯ û¸8ŠOØêº4°òÞƒïL³-²Ä IÉ–2²0%MvxîOµ“ʺds9|ζ²,ö¬çÝf®­1gaÌÆÜš¾ÏQüŠ`öijý²þO¯sì9µ}ºPšµÚ61™Æ^^Æà³¾™P{[‚c\´²fdÆô`Is²óš|øÓÀ¤×švHͶËÝ4˜ŸÂ½÷3˸’$¥ˆŠ«›Á'u|1§ïçÓEÞ´é×/ZØÍ|BÕqŒ¢=¸òc¿l0èé36΋ú“2Š—âÖˆ-æ³ÁÍ¿‚vÞk—êaªaèÒ#2K=ì窜oGM.„˜7pÌ‚P,ŸŸòq×ÿ'æý_ãKrL¾: ^'xÜP6ÄpŽ±ÊóÅ-í°}=Å#V–ì†~*6ÏËõS{ÓŒn‚ô{tá™)Œ„Hç#Ž9u $|ºã?AçÄAÖ]MK­2Æ8Ó¯OPÊÙ3Õú»¸{bÂ…»ås#i¶ò¶õ‘ŒÌƒv æ4SNÉ#V¦G†‡”­8X8KjÂ2˜H1Çš«ZfµqšÖªÁÓV–€Z`ù‰Ús2²›3t”d$ξÙ9Ç‹9nêê8[JY4ù:8Ì1„m›œM †ØB §3¼irNBÁŸ´³åaZe2hhEå}g¼) ¨ˆ”ʉ#wánÝN²TÏ áX¥Q#2 ~n›×±o..eÛ"–ê˜BJ¿b¯¼×;[…ˆÄF¢7ì7)¾ÿ#¿.;OPÉ3²nS ²ú‡úËMi›¿‘ë hÓÚ#V¶v"(¬×jÇZšŒ–Ú¼$Ãý[og_.w.}nq‹W%’ÏqŒÇTVnÂ…ÍjÁ‡ô1 âÀ`AÎS—±©;Ú{#2òê*—E™R/!ý‘` J!1É®*[Üz´ ëkN~æ¾èrüf=æTHccñôL–Âø•Ä§nÝ3yFg8Ã,1”Zïœ.ùˆWå€Ê#2ð4ÑúÉ`‘¸’K¦ø~f™d…déȽÛnö¨oB(#Vøéš9=>ÕñYhÛh„½©Ñ—¾<ÌU·8íæÝL×r:B‡t áF3³nÖCƒà¿°Sè)")ØûZxoÙÙ¶<&hIü3°oüb¼,ÉÅ1¡`S­ŒÙç™mêPU›ØNp¤ jCv9ŽÅ5Œ½ÓÌí-üWÐo®#ÎïúçÄÙ5Ž}åâ¨NßR$”ço´óÇÊMo5ñ,y² ø8ì$7¨•Ž´†ÜÎ<á?ÜC¡MDÕ”­©å†)zM1I¢8„IÌFëÂðÕ]îÒëjYW*ĺƒE­â#uŠ_¯EÈðGa´Ú#_‘mᥦŽ;kfQ#2Z±îºïãI­E[ÿŪ*.'|ŒšÜ›pôC¤^EA™@‰\¨ë¨"ÑÖÝLˆâÆØhác 5V“–ºª5Ù+·Ñ¡˜¯SaÕUÈßl¼T·°ª/…îq`ÕVHryã…ñh¼…7µðpÀ_â.£×ð¯3ý-ü'GŸ˜y¿Ï¢­Ç§N“·oðÕKüÎEØÞ‚eœS•7T,\ó3ðw>4i|ÜÇ„‚\)33“¶–À„ŒAv@êË%¨YÃ^¬ÿ68¯[¶{ܘôbßà=@í7“åË÷¿íËø<²å.Õº%ÜI#’SE#_[=CW¿ÁfÀÞ­?Óz»ûR8HÓiœþt±Q]ð?£¾,€fC…‹Úû½G#2øSC˜-Ûxïƒç‹Î.+é[ϧ­žå°§o´¹Ú<¢×¬Hø–ZïY×7†”°pqš›j=rt"½”ÊtÕðHl¸Q¢EqpÌ(xp³H‹#2ýÂ/Ú¸ýkö®×Éîh áu)ôfü5ëwnBuQ!©Ù¦­p5RB’„¼a-ø1Lˆ$°ø¦ü~)!À˜æŸüq¥.¥u´U×'¡Æ#_5æ\F·°|õD‡#V.A¼: ÜÚ Çø ›Ý`·þúv—ýPÐ!{mŽØoÈ>U!‹Ì39ë'"Z¡Û‚ÌëƒÆeß…Î P‹öŠ¤:£Œ&#_ÈU3ÛÊÊ8”âüT²…‘ãâñi‹µ-µ²ÁfȾáhˆœzú3ÖE•í;¦¼—(!Êj#2ÿH\Ê ¤äà`òÞ@1ãËtøÚ:̓ôÛ¹Š¦‹Bör3•J¼fÇÖÂÈCnX^'Ö5[YŸSÆk@¹þöùI´x§S´óÐy°RR<ÕtA)ÏI¾:÷-\ÜBí ˆ…Lm[7F×LÔ Ý•§…ð‰æŒXdÔsíÁ¾é¸,È1…¯xêª~u'”øí„ÙG!vDô0@|¹‡?K‹Ìšñ·–|t¾ßHÙ·M†lðÇ÷èp!øB-`À;Äì½o±[.e9VAEqe_F•|iվƑxMŠ¨jïšÄ•Zs¹”’é<³€¾x³yð)öŒí¾¶y=¥Í—Éð°ýÔ‚StEïõ=—sFçô–FóÙOoÂÙºåÌ7!L—4gG9ö£õ(­ô_ƒß>W·]Ûp’ep#;øfú 28“7ᇕï—̺=Žq}ïŽDÌrmì¼®%‰I %êiL:µ¤OÔõÎ=ÜîO€¤QŠŠÛèÙdïÃÉUQ¬%‹Ó±\昔ǡâÆ™0êkOÕ—ºô²ûœ’cÃsxCjM<iFùÓ÷íŒúè°nõ¯"GyyÆh轑¿ U·çÁ€npý°/ù>ÂØ6*›. «™Á&T›x a‘’MBjÔ#_{òjMèøs­$–ý7Ï[p0WÁÌÆS›L*¹›¤åÊçÊŠÞ²Öä&vÞëo˜Š펷PŒ„ì“Gf~} ¦#V±Î'3/élíŽÛžÆ¯Ÿc§â‡ºÐ ²hÉz‡.ƒh0éåí˜Àq3ÅÀ›¦z+zj' `üI¦S—H2ÈH^ÁÜÌ×oiZ€fÄûªûO&kŒÒðP@vŽa`}YP›U*õÒb#Vª=Ï Sˆ€(ž•h{{B{ƒ‘Àææ~ëåÃKK­¿9sc#2K†Ka{•BMšN’á–v2e¹(ŽB…BªW G•F?60uŠ^±W¿S>ÑÊåy¢ãˆ-œüwó3—oeÊÚoooS„lòÛ#VèÚßÈA¸?—ˆuäµ»³ Hí‹5i"žN‘Áô^׌“ˆÆ§ÉÁÆ*–9Ú:óp¨ý[ëÖÇÁ—pþ¬»B*`ô÷uT’rú¿²I÷øV«Íú>×®º!3´ †èŒ1ÊÎØåGÊÏ›³¢ûxx=Y#V,ÚÍ7LS gß³ëåì[kûY…Ù „ ‡¯Y_ø£K¢3滼 ÊrÚÅbn—œ#2˜ …mJ5Ð=4Åö):ÚÁ3²ÈÐí³¦ÇàªAÛn—lãŠj¼kåÙDÈ#óÀ®qÕ•¬õõºtê|JÇ¥ü ©¯5j•D=*yþÈ¢jŒ<{TvÖ£åƒ?.‹êGÝïýÔØ#µlWeHH!>]út_wT)±ø_‹l ‡#à ñlFJ* :àC‰²üŽ#;l$÷võNJ]“϶Q«Hâ¹éÁ6íQù»ZÐgFÈF¸¼}de{±°j­¯sÑ,2U#›Îj,À¸¥§1âo›ðñp¥•œç9ߧL5KT®‡ƒ•‡â»0†ÏRü’»Qä¡·b‹+ÌÙ¼”Vù]nr£šŽå=ñ¤ #2ÏÑ}¾Þ—ÍUDH)%µéõ9¶½;ÒK­â€z"ùWŸžt`Ü+¾“µZ8¡Ø‡7x˜qo™dq(,|‹Pl-K|à“ÀÅ¢À#2ɶÎޫç¼êHDgï¸R2pEïß¿ö3{»/ä—Ñò½ñ¼^þ¬L|¯7hÑCí÷C@ýVË‚½ÚÃ"ÛßßE1ej›tKd(ØÆŒ2(âÛŽØù8Ñ ÍO—’üL¸I!û?5#2ç™Ðy¼ê\¿%Ölî¶q€B`劎fÕÔ®‚ÁpMC- ¾J}cf|ë`Òí>\IK~ýçðäfs±—Ñäèî»Dœ©·ë6E/À‰aëZÄ vÙò‚’ИœLCùÔR0íòËe«(s"¬TY*Èfý0¯ª#2MþCüëlk´ÌR±W8©I²ðí½ß#V«a8x ¦·é1Üb‰9Ä-Ö6Y¶Ê$F²Ž!»YFö£¬…×:>ÖrË‹äte”3ÚŒí<»£ÁØs\ræ˜0LyWYr~þdå2\³¹#o;qÎ!´™œëˆa¹LÉ<…*&Qú#_$ªy<‚7¾@^„ê*ɜێY‰(B»çÄhŠ\K_Ùhü”¹Iå.-²ÏäŒ"p†¬Ka†BàîhŠ2-¯dJ}^#_rž(‰h^#_^@¢àõÚ°e¯¸ÆS;.dÛˆgOn¾\`¿-3ï¶ÈÒŽÊSp†ãs¢)ïµ—T†Àå¸Æ5­DHko\Ÿe,˜Ó舵Tmaš_cŸ…‰…#2ÁT,T`o0E‚iØð*a#V»¾hk.ùÑÛ¢m¼asAŸZª²Û®+Û0P’Õ×Çç2#_óÆß#V©wOm²…ÂJzîåËŒ©ý‰y@»[ù/…kŽ€ª¼%ŒªkáËd/ú8îÌK…`=Y‘Xv§`´ì~yyãvbhÜYÙa”cGmú6ɉö’>ÉÒVصqÊûáD1ÕkÊÿŽÁïpµçƒä}Þÿ#V_׳{Ê#VPCLÃp|ûAzD‚I>›>}ë"Pb’¶Õl¹¸Ne D q›¬[›nº¾-w …¢€ñ#2逵0Üo›_†«QÑJ¨Ã#VaüÙ©‚Ín!¦Òs±W2^xé.Ø:bUá«ÅYÖóµJPá5z㶵Ú4ÏJÆ´ÎP‡²â ׃Â#Ñí#kÊcÖÏÊ“é>ù‡’º™&Ð*GçÊÞ/±èŒÐ禴øòó»gÎûÓ¡[6‡A)ãâÉÌgžÏ¸¢#V¤òžŸÂ톴A®8<Žý˜’Ð.ŠÊHQ²~øç8ΦWý8\#_z6td¨›ÇdÆþ1uëpo¦ÇoŒ°z (L7.æà‚Ð6d›déÉùŠ9þ/MæQÓnùß#2îjF¥ªhÚÐm›9‰™nHåŒõvÆàߥ-£²!µ¥l#‰pÕÅôµÃT’5µ à ÖEÀÃX늣Ûƨ£G ÒÉWÔ õãQ½j…°ƒ˜Ý%ŒbhjÃKK…¬oqîœî,Ó”m×7+V@ldbØÊF¢$C‰½?4ai[Æg§æd´â¯Iû;õÞp7ª;gé·»&„õïÌ pœ‘Êž"Ðrï`bå¥i#VüWÊBƹ8(#_ìˆnCµok«s#V#V.GÜ‚zëkÿ½Ž´c}Ä-ŠÅy¹XÅâIID ÔÛ°õŸ+Ÿ¬gGÝ£cêY†¼(ToæÛw¬ä«ž|ëÛ|púM-Ô ‚¹N„É !Cóø}ðhì'É~Æð迱ӛá-sŠ¼aîX&úÁ„pu´¢sçÞìSnÌÁ† Â˜ª(›y¼ãÅåÃrJ+”ušXµFÞD‹ù§¯SfU«qâòŠäGR*c&î€ÅA.‰Ñe%X³F’¿¿±~m¬¡¡¿œ$Èãi0·°Oæü¦î$p¨a¹ü¶T Ÿ¸ë°46Œ†„Ff¼²ÊbN ýÁ£ÛoK…«d_4zß„]ô¡¡Ês¬„ï"ÉkB‹;Uºë#‡ ×m¾Ò4D`ÇÒ“ÉB@æÓÄ[rÅÛÏY«&óà0-OÝøÌfúyFBóGeÌÔ9‡„ÊâÄÜ¿OÃVkŒ9å¿~M½Ÿ's<Áà]Cº@Ãíl½ð±CËáž!›,=<Ê—¹J©ì4Ö£óÂöH˜{î¾Í³xkÐdº+M)±_VRÓ–r/Þûu&Ï!çc—ö¨>w÷5#†¸ò¶xìp¦»¯…ü˜Rõç…ˆ.PHkqvÕÚ0~nS¨ Rá°Î=Ÿˆtež9“ƒ{Ÿ²~§ìÇš;IïU†aœ*9ï]ÓXÚÑئQ\} {zu­ŽwÔý›L£·9õ^,”Þ~áó.°çMð”„$k±ØO>üرMc$#uϨÝyWiã¡-ó#VëËÛ„ú¥%¾m¯RZDÈöS8¯\æ<­?²ô +±ò»ôÝßžrœå™xsî'Š<´Ìsƒ-ã:Q…Ñ“‰ØôXìUrÝh£®Õj0¡ÒÂEŽãÛÂíe1¦)4G%EËp‰`IÃvážžO#_}5±¹œzä#Në.8|cËËÁsë‚6Fë‡Oòûz¶ªÑö6óØúÖY! žzH%.ìn!ªŠpëë0f]Ÿm¸ÈcÏ (Y\;ÄÂ9tÆQär9‹=B÷e¡P”tE;s¯¥Ï³ë,s¢'ÃõL}Ç㌪Xq¼»3|Pgƒ§Ÿ¿S9æd„%´ÔBx‡´¤~ó15§ÝM‰ô(1¿ï¸kQìAÿtµc?£˜œwk®RP’l“qæ}ÕxÈSX*ªš0‹—?Šq‘.mÒæn/ÑÔs@¸œðÕ†…šÔrêÝĵ£ñj98ûŠìwÙ£Æ#qûôve“¤†_;_lÊû|7#ššŠ†ž‰ÍÝU¦´C{žéo˜t”k³Ýʸ¾ô§ÐfñâVÎÈŽI¾.ŽÄÌ@.$TÜñ!fy äÀ8Î.é²=&${Э ÃúaÆÿ;k4vA«?^v¦³xw†UQ¶Ùú›Py°ŸÄC‰~NUHúíNpÎmΣêLd~²ì¼÷>ÞÏŒšÜ#_?¯ãï°z ^÷ÊÔÒ‚M/¯7 ÀÏÜ,%›¿„séø®ŽœùÆ"÷õ&dÄ w/ôö‚«eqà WËS_)+,?}7æ5²M³½™C͹²ªšSH¾³øGíðl€ì$›Ë`âÔyØÛ€aþˆfä÷µ]"£¼îJy#4¬Ëc”Ô9ás\±åô™—(Jöæ(¯Ÿ:"kM Nö™Õ;‰½x©FLµ¼#Ϧ¶ÑÑxHiªä{é!C(&œ¾)Å¥C‘Ã^O®ëÍoŠŽÌ×zŽ˜éq‡øv>î3¥{^8Í:<¨Ÿ´ÿbj¥üm‘U#_ ¢•Ê9îEW DÆtÔR‘ðÿË'ë”\á»Eo†æ|ûÉ;!ÃÕ|lðH˜êš#hôóä|"# ªûÖ `þE« í„—ø,r{6UR4`øPX¿ðÌaZì"¼I¸™þ²+ã1ýªà¥Ê¹T‡öÒ6É\#_iüÝ—¾¢l²<÷ì¶q´ê”É@lsþhKaœÃ¡©ê×2ˆ’—º«{ "^+mò¢ŽÙ½§²}àB•% GOg+›ûÕàßÎ:¾O™f ®·ÃÐãݤ;§¯¶gùï)GŽ1`nïù„‰Cbý,?ì±ZN­,t¿¥5¨·;o±¥·¥nŠ!ü;µÝóÛ·K»ºÓÎÃ(ˆ|ºæ‰îÝ1\Û–‹D€\¶~ÅmPeOŽ—–|l¬^®‚î/p!°Rب‡¦£þ6EB–„`qûvÔz Î_Ÿ[=!Ÿú‰am©ì±,–3Îÿ™ð4ïØñz­¡½Wh™¯#_œŸ;Òj„<@^'Ç#VñS×vº×A¯ ñHÁ.Ž7Š‹yléX“dça>õ°BÚ)±]1WãدÉlÚã3Z:¡ï¹ ×ÌrX­ì³4¦fb•±š9 \^ðSÆñò㳑º'Y9ß2ZŒ"€saLã½Xl˜Œ/4†ºš•ŒX¡ÛÍMf‚$ÂÑ‚¢ŠE+…ËKÒ™RǨ[pÑd m“ÄF,“#%øï¬ä"y¡¥ëϻ鋆³Óy>q´öñné9æDÏíÎþ: /7gÇ#V!ÂgÂN×|Œ¡ƒ‘³2PäÈF*âuÁ$®HÔxÑïÇ?Zúû> 4E¦}y}cô{¯8z„¼äÌ‘ìèQ~Ù?%Uùq¬¦±Bà¶âøgÀ`ò9_™Øìóõì–Ïé³Ð…ŒŠ‰ÛØqçˆuaƒF®‘>4U2E2HSå0›ãùîAù|?béùs㪞½Ã_aq tó 9ºZÇ|`)­ACo.žã#_W]â· ¾Ëg¹ð@D?×õ×ßï‚Ëv0ŽÏÇu]î!ÇÛì‰#_¥#VýäÛ àcõ#ì¦ô”û¾èrË”„¿cæ¶Ýh¾[ÔÌæ!Öñ3¿'zrê›çÅ‹Ô[jê8ò°çÎé^¬Fb‚=º[ /UhVŠò7v°8ÁP]X*½Øm‹ï³zþûBÐv[kÜw=Ýöpª¹ßåëóú3ôôܾ=gǧ @mÉhà ¶š†¹c$•›Yâ)‹ö糚v%A¥€i(ÂÂ7¾sýö"#2„ !Lí°”¥ 7Éõt‹oζ±{8ÍÅl¦ø­ÕÕ·%´ 7·A•ô×?…n——ÜFû¬§@˜ÞäæÍ”sT¿g+éœïœoŸCf§k"Dn{öqˆç¬Ko“aò±°Éo»]¼#Pâó$Àg)~I™àñ‹h7,ï㻈‰ìð®Ùr·sÉfv³¨>è)r͇Ë÷©Åg{[ÎÓ>§çp´QÒ#V{Ç– ¬9ˆ ì¾Qcïù`¨§¢_:h=¿çߦûƸœ%ªðiñR”2Ãý™¸\•· ½0öyg–‹+†Ò•²g\=ï_Ãûü¢p~Nº|ç³°ÞŒ©Å#U¦7°´ÕA~{ÁÓ®|!—aö‡+Ht~3­1ƒôP™´AÓ¦´˵L½*ÌJÅ<Ï”yj`úoÌû€Y²ng»ÏС¶2TàÆ6†Á&å×èéÙyç\„6Æ—»&©‘Š³pÅBÙ,ÎŒPT“Ph÷Ïi[V¥ê‡=1›í² 8þƒíòÌ)/|KÇd×{ôÞ‡=b#Íkúið}6r¤†91ÊD!Ò:“$7 #V†M‰sŒ£—ïÀåNµþ/ùÞ1¸y¦t³®p¨$¨#VÖP¢ja2M€0§†qœ½·ù¢Ä#Vä8#2ˆ­/6*» 6þÌ[I+Ö‘ô6s–ÙaœhY0!#VDI5Ëk”ý~óæ6òÉŽï|# C#VbCk‹6üÕ† ø 8c˜9 $  ÚÕ¬JtfçæŒ&'SíÌFtg®7›Õ‚µ¶Œ©B’bm3³Î‘±KW¶uÖÑ´ðû±#XñžXo£ë.òRÐuŒ”Ö°xƒkf+cšT7ç%­ì¹Ä#VDµ¼#3! e0«…ã SDbCU5÷ò=ÇäåÁ’ÖA6kïT²@ªºÝ«…}HÚ÷u ü@vJalj‰'U”ÕIÙ†P„AªÁš¶W'#2ñ‹¯¾c¶X 0¨´s:ÕRÅ„+¯Õ\šÌäQ†|ÐAVL|ƒ€é?n.G;nD!Ïo>¶ñµé>;Lì⇡4¤N;P«g¾õs¹€Hw;qfM›Þ»]¹`û:âÈ÷û–m8·‡eŠ®8ûIäÌæÏ^»¦j^lÎÕº¿#‚ÜË5y92Ö©lÖyÔ5rÄQJª@Ö"ŒëNs4Dø³Í16ŒDPƒcbCXŠVŽËX¬Ù—¼Õ•,ÀÈK8Ð&gMZO”¥Ä·¬a+•c¨nu‹6Àÿkæ¿ësÌó.sN…“r*f#VCTQ{H²ëN©á>¢©ím˜™­ôÝS› ¡Fb0æ¡Ú“p°±-^‚^ηŸ’¡zc“¯‡R>#V5Ø|Gź”´V©¦/r@^$¨†{Ür¹ž/yÒZ^œ÷>$—k&tñ²·-Õ5ˆv†vO©½P  ŽÇ%¥wOÐÉIäí=I¨á¿×ìòG”ÏÀwää üÈ1¾÷©óÃ\S(Ù#2-„¹={l;—êI$GôÖ˜stk Ýçz;È=».ˆ5ÁP#V§O7;¡ºË§Ó¢A&:vSæNÙ#2NþïæØDmÎà]G¾Ä.Pð(6*HÄ^j ­l€"¦ÞäÈúÈÃ#V"îÑenx!‘Bsù/ÇE”ÁѬaÍä› íü‘çí¤zm¯[ª'òº[)ÂÛ\äÞG– (¿^±›žGYÜ”à›$FÅLÉÈÀ¥Œ’ yº^h"Sc¤"é:Ú]¹«ÐñçíÒˆáÚ@Ô߯wBevioEÊð6qzCH#2¨ÈöfFî»ÍUÖÚV†‡š²Tª$,ý%?ìX‰Kªü"ùÃg2–†(pLø†æ?îÿ\¨›n;Ž&s*j9d¤¶á4¨²a¹ˆH<Q¢,‘ŒiKÝ’8ç³B[wÙÉ#_üÛÍØL*~=rܼ¨M!ÐwÎ-‘Mʽ(ƒ>mp÷¾Kà®kÊ(zÅâ*OÒ]ÀÊÉXgë»R[8e`H&'¶O™®Þö…å%9K¨Ú•®sÉÈ™×ÏgŽ6×YgÙ#_Yå®÷#V}Õ«<§‰JäŸW….ùƒ,¦Ý?;Tݚ䎖›w$`³Pjâ4ƒB°ÃOYQå#VÉØÛˬõ¦Ìíü˜)#™›ÖÆ'’œ¦t»»Ÿ«“b«9Õ{D1¬!F?—zM'±!Ïù½ªñäÿõ·u—ëÛ‘šˆ3Øà¸ý“q×.Þ8:®W‡_±<çï·¿-ÉeUÀ¤[ªxÌz±Ý²¡¥2Ag’øî~ÓÜô¢õ˜'ŒÂX¹6<»ùxÏHiLq>JýßJJŒÙ dÃj´ð!±ª8À#Vgå"ò$ô Æ­vaM˜ŠÛë[XW#_‘wè‡T6DJN ¾;Ë{¢ –à蘾À·‡å­á˧˜ÕYÉ<$—o‡´ I&O캈ïá¡„C³O,¶ˆn[‹ ïÎüÆ`ÑÖ;Ë•2õ‡PÉq#§9ï$Ví½IAáÞ¿_‚œû™ß­«ô«€én¡ñ­uv˜3ÁQUU=-ÐÁÄìÛ£*¼ZA,PçØ3ê¶T~ïæR…À*j¾D¼€)L7ñk8»–Ph~C+Í«tE¿'‡í)Ì@,(—äš €ÃêÅê¼»FxÅI#,„@‘l/¾Ôù÷¾£üFÝ«+}6ä Jí™Ý“f(FQá Y °’KP½Ã7ŽÇ.ÝÒg:²¼ H¼Œ-Yô…àX¦$ Rr!T›hõhÎNXÕuí¬8FUç²èÉÑÑEÚ A7:eìunŠej®S;Ò¯ÔE3#_¨0(9³»9õëáñôßzm$ç|X¹ì;Œ§t93íŒnûü[vCövñ:£¦òf=ÁªëžÝæ-¸æ¶,øòáÎî#_¯g}¾^Wüÿ¦µÌÄÅ.Â#Vž l“Œ&ŸãP›.•H#V@¤uÎùÂy;W`Ī‘F°Yr…ãÝhoÝî¤ßÀ D@»Ý‰¨`Áq!X:šðÄEÓ«™XȈ ²ø9ª´-_ E‰ÃUÂëˆ"¬f¼C4ûå|Ô?+ 1Š{:YüYŽÄ™„Ï=·µßiKãÍ»Uö›ñÙe³±dI‚6´õ-,|›Y½¼Mèl¡0Ý ‘õ±nQ/›ç•½ODp'‹Z¥Fÿ¸|÷ß\[#`, ^UD‘SHvaêîömËŽp'ò‚¯qt%‚¦(¨"²ê„»ºe¥‚´¤Œ=$øËCA{b¨âŒçjÖÞl†¦QYY–¨2£Ãw–‹S¸¨%8­Ê¸`ðBªÞ•dŸIr7²É òŒBd•ãÉDª¼­†/K4m¬–ÛGDÖ¬åk{ÉÊ-Õ!»j7ÒdZÏ\ø^F”~ËÝwçÝ«uEÂûb–dŽ(.ÒQ¸ç8ÒïgV‚Éš‘쪸‚4NW¼XBRT|QI7-Èâ3wç7‰IP®]’7C¶Í³tÙÿ%MYçQïítÚv-ê¿zкØm®ÂÁí¨œ© »’ôîg‹F¦9H¤#êæ´Y}j¶yhº=4é3?’ÂùŸ-Ÿ#VŠ7¢$CkG@åÏ4å=‘µ#VqÆxQÆkq¾“´DFò`'˜4aõ¾;ž®T$æ×#Ô#V„zJa5kÏ»¹ ¨ˆB†¯»3¸w*íû’¨Ÿ7±|JU›vwc{òm¿üî/3ì»mÈ#“Nm;Ř1§>ˆ˜ö‡KÜ—4‰Œã?íœ×Ñ£Z‚¡Ä°†Š_[Æ}ÓÐâõtÒ® 7Ýê0õxIŒ ¼¦¦Rë"ˆÖ>uþ€á::Y `œÞ¡g9…áþJ3‡<@»® 7dt7X©¼=RøèÉi&¬ª«©b!(ÀT? ˆ$0Cçðœ9BF‘ÄÑ®_I†‰7¨ì¿È§Ÿ …•[Á÷»îýÝŽ*Ól¨|º8o»v3;š®2Q‰3!%Ûéó|h²¸÷ÜØ<€ªðTVì/!Èò1fÝã_‡€odAç¥m*{¢üÑî~Î8-¤LŠGÂ_¦°q#V¨)0]¸ÚäÈ-$EˆTßaU®b“_c äöq ÕŒë²ãUTú<ð’Ý}+ËdEþg¸h^ˆ}ìywc „•Û8éóÓÎãÆ#_Â`¨öö—qœIäŠÄ=V`S”ÀksL˜AlöV½1?E&—ÎñÄÑÐm‘ªXÞ¤HˆŒ;<ñ[§¶qœ4ÓZ†wÕnûˆƒ•=Á’µzDƒ®˜Ö*ƼwVÇ'SSR$"ÉG‘^«©2r?7§g'/…á`ºy´”{ÉÇpƒayekÛ6 "Ìâ¢éf½&š¬Õ!Æùseu Ì×ÜñçC#V³I•À½©1åoD‘ÆÐÒ²TÄt»"Žƒ˜E ¡„é«t£©éÆä)¤õ9±¤Çьڌµ Mîä‚Å;žO â™ße@»ÓjÊuªs7HÌ$¬cÓŒ¬ ˜äKɈ‚¸I-˜Ä¦í$CBi‹)«¥ŠŒ4@ž¼q½]´m†Äi­ lUQj,(D2¬º¦.òñ°§“41®ÌÆ«ár#Vc (On½ùçu|ÈÙ<³Qâ11§=¬…r)½y]b‘¦Íƒ,F¡›ãXuÎû„ÙʺÜ„A“NEd(Æ5Såi–±`C‰•›ë µ¢hs…jLjþŽF 51H /J!hˆ‡‹6¤6xÝ 'ÆœEMmk¬ñà0§c…lŠ‡}”gë¿:+Ûm„irÅPÆØR(ÚcÀ"X#V3¶¢UÇÅ4ìT³]Ͳ<a®dãW=9篯ØÙõBѽT]uà³h`¯î͇Ÿ²MÏb犩FÒ×gŸÒ¨˜¢Ò„ ínÑÑ#A#V…Ù’¯¶‹Ì#&Qq>N!¿æϯžÛ*dç¶æÍË}CéúûB£©Û/Ï~uô|nÝ$‚„rû@²†}7Tí &},™3ŸÔ©¿^¦¤+HÍ9·ü`¶ÄeÉËX±2à¶Li¤F¥¶™G €|Õd°ݬ¦@¤Œ³ÁÌ"(6üÇ›ÿ|”Œ©ÛÊqÑb #iÍ.P„ßÙH6…–©òÕR»"Ó礻è¯_\xnrñªEÒ³ öI!Ρ5YñaÌp#5X½´#_ñ®1€Ä¿;e¬içUhsË1X€^þþ犾Î÷ÑÓ#_»lbüöRîœhÈØBÍólHØcsÛ†·#_X²±Dît"!/W4!´¢8F¶ß«Sã*íõVØT#_ èËnVÈ›DçõcLÓ…ºƒQ+B⣠ÃèàòÕ5­g`Ÿñ?6#_èYê,ѧ¶ÀÕâ‚@½û/¾ºc”X¡˜5/ÏÛËzji}¥sâ» i#_‚Ä#2‘´lBWs¶C™„Ä Gðu¸‹|6£ãs(|›899=5Î$F’ÄÞJjmÁÐ<#Ðâ#V,³Ëȃ„Ç 2¹~¬ò1¿*z)ñ¬n[Dw„ß i„©K›+‚šñÚ÷Û(SS‹+4É8½˜Ñ¯h6æˆ #·Ó~+QÕW«·c×mÏCâ$ÆcÏÁ'ŒCÓß.í?·2JgåØsÁ£§ÎŸgÅüììŽu½œil°ØOI„˜Bû§':t:•­ùïvAþ9o©ÛŠ9¶Š .@5æÙÚ9Fæí Ò†;G<Ë{~Ùô—¿Më¿|sY/îÀt Bd†=Í>é ùý>XÖ!$ÌN'ŒÔËÛ£ ÌIJ‰÷8F&V,FfOXös,#Vp”aÅÅ'ÏáèL©æç|Eì¹8xplqÕŒõd3ã° *ÀºR¢%Xø² ‚ÂPÏa¸ëùtSøÛñ|°zNà·(ËlYÜ 5 rO—{]mÂÁœ ÝL\ö×àºä`>74<|><ß0ñä¨î×÷ŸÞ6"8ï Øãj4sÇÀ^Ñع#;?ŠÔƒ¤|¸)¼ô=pÂ`-)ÃG¦Ú „݄隯¦oe½„#_H*Äâ°™f\¶÷>„47gÎî+S›Ã|›N®þtŸ¤Ô»y zN„ÝÖ÷&ÊJ%Þ'J?·w=T¨«Q<çk§]½Øøšgo.Àþi¸æÍ—w«[&˜0ðÙƒÉɃFÏ#_²–ëåwµ±®"¼FuPëAQ}…YÖWR»z@pî1ºæß-¥ëiƒY0gÒ:­çV㮜͸èΰD\>Æâ}u]§&õac¬ƒå7çÚTÈ/Že§ÕÃaÛ¤BK}âN{`Ü'®qe a©™¨ÐXΆÀàPɯËz÷äü"ý:ó`Þƒ/‡õÀ“¦÷Á×?Îfý< ÐÝÜMqóÅH{û•‚‹ÀýÛÓ3ùcˉAñ#Vdá~ßX‡œÍ§qû …ïöR¶–V±¡8âîs×ÏFsÄkô˜òË,ŒØoŠ!'ÍÍ{aí°aÏ\kO¯[-¹Æö µ‚ŸþÖC—ß]äG)‡CJh¢z“¤zø˜6ÎѤç.ÖÛchÏË%ŠÖ±ZµÅŒùy>htÛáþvÕõ%³ñ3Œ1\]æàˆT±U^íDË•>"aôãí‡CèÅÖûV5Î#m”S³å§ifÏêŸkWÅn…Oó8ÎÊ~*MvßX—­ãã4N/²7ã¶ØìWùö¶åV·íÛÁevJµ*ÍóÖ¸³I.=•±§;Û†‘¦:ÙÆž]yjð¸*'~vá]M™G3¼uŒçYº4©œ˜vÂëïY¢·‰ÄלòCßÊʤoIçg*‰v™†•˜Gc$ô`ÚeúÚknn#¾¸ƒŒ6#<+\ñZZÔçTò Ý9³™GlíXK~üNxÎ¥òÚ9Œñmµö¶Ø~3mœÃjWDÑÊÖÜo{-ŸÓ‡žú;Ÿf®2Áö-4S p¾VÅk5ƒ–éÛ…i#2Òä¨Àû¾ØßiÜÀƒZ!a…“~ç»Xˆ!%ÚºŠÝ(+åÖq8ïŽ7ÁÂ7Ë“¢}örŸ~$",wÅ iõæo|ÏVçŸ_ºy95žcJéÄ“öpߌnvšÛ»«iîyQZ«ë/Lñ®o˜xüIÊ1‚ç[=gÌ6vïª*³æ³y’9œâŽ9çoXÌwOÂœøóâmõ¨›mDw<-Xc/«Å±>|u¾v/W 2QÄï‚v}±vhËÓ¼¶g$õå<-¬‰Ìqµâ·g}¦•“©Bƒ~­'ŒÁXâÓ{V1{£e^Q“¶ÍyA‘Lâ¶såmNPSX-‰ Š-k;mXÒŠÖ>Æ»^÷Ã:¸AÔk€½Ï‘b¸XÄÎR}0±g>\ígÛ,¥’1ŒWh“RwñwŽ·ã-Øí~8ñ=zrê8¸¨æôv( !„…©|ÑØ áA3ã!c= X·;UŠ/±cdu_#%ž4£®«âÆ#Vp)†T½ó­ZNdÊ*XèÆÆrì´§7°þ^7¥>ˆ˜Ø¡çnyã½6PaRnäxŒ^SŽ¸[©e¢f‰ÚÖŽýç˜o¬,oF“²ñÏ#¾b¼tæ.½'…w[ñDølµŽë8ÎUb±ã¨ªO¾ÐvÝUöïnZß<-FÍæF7žÆÝ‘…|Õíu}ø~øŒY9N{öɱ¥•Ý¥àÙkiÄ‘¶g¥©1¥"•ã#V(lꮼ£7­›w5©ïª·ÓƶÌÞÙtðäg8Qž»ÌHù±üPñÞ5—‹ÙãÎôcÃêïí5³25':ÅѬzÁ-f3„>8ÁU±ÎãhTùÈ•Aøó­¤t:ŠÊ4UÕvñG¥˜ëµò÷·m.-ñ˜LN|§ºÚ‹Æ—j«8[o;mx)q µM½c°C‘‰éS´Ì)Ù¹1ÌJóXUŽ¢_jn1G­k˜ÕJ&”g‡ìsþezjACï­ï=µ†Œ†¬ÔæyÅe=L¾|LñíŽÑçοƽ|ßÄã9àÁŽÆÑ>< Û»“—0ÿDõf‰RîFôà´µ‡û–wŸÝŠ–È•òû.1‚+JëvßÆ#_ˆ˜0÷ÙY2§ž%.µ›Úþf¥ÓçbG&ß@Á} òÉH•Ý¡ˆ 7Žüöf›¾ð£€¹µç ~+ÛY BIºM‚nãe_ZÚÞNÙu;ÜXŒ?#2¨JK·Bò¸³¨¨ì(±Ÿ¡îìcs¿­Á‡à˱—zv‚!Ýö¨^³¨^foDá¡:IchÊ¡Õi§˜}¶:Yk¦qïh•4 ãý­ßÖ[ bG;¨1ñ¾³Ž`º×Êo÷ëJj ™N"­ÂzðÁ圙²éõÝÚSÓᨤ_Óµò÷ú4úS¶ß: [8é#²gd"ó™jžy#2Î7`¦#_Ž7FÃãK†¸Ò&#_hRgÝ?O#_|«àCŸ½:ç[ûSï)DŠQ™ÄÔbR½è~ïiÒ#Kp0Ôª}µapzÈ…íˆ#Vzà¾[K‹òØ’“)|ß—4ÄsÖ:ÕÁ· eZÚSBxuö¶¥h²Èn¹Eˆ)#QkqB¹˜#2³¨…Ê`¡»)| ~îì»mË o’ß#Œé2SÐ!©$rüw®ÙíöœpnÍ”ÆÿbíåAtÀä¢1T!À¹Y…Õ›äæ£òD³“pfÙ#£ææ -PçaŸy0õèYô¿Œ~™?µäó0x=ƒ·–¿•ûñ¹,C²qc”Õ^µ×Ê[Çă#_/¬ž<ÖÕŸ«#2¿R¦ˆd¹ ¶°¨zº.aÐX!rǺg-É‹¯䉷ÝG«ž­×x…h<.oØKæÛç<å-ñû9ï:ý‚ŒB"T’Χ#_a²&¹¥ªâ,#_À²'êSCCaŽÈß¾{æ¼·•_[NþÙ\È•ËóÀá¥4¶…öTmTâÕSµþÜ_Œp¡:ˆƒgÕmLåž %0ØAý}ÛHÏÚ™øóPðÝp™ læðÜñ9ïðw®±¢õRÄ’{413Öò¯¥×O;¤ëÓ”ÄëËO–ƒ)–…ƒ:AH¾Ö4>\¾#rzßyÑ: ’ïÌÏb¹7fبØÉ©÷æ‚qº7º/µÚ ;$^LðXi¥l—*‰ZÁY”q •}l&ùHy_ìÎattxÜû=ßùzâû§äd&HH;w S0A#_ ø%ïŒ@åMÓŸ%:”цICG2B¶ãKjÿ§Òœ/–Â2¡kV·Ò7żõë3+‡YµQ!ƒÓÞ¸–—b¦½œ¸v0‡Â'$&Tîû3”t#2}2#_$,[’>ÖD¹UgéŒu9­Ô­Ê Púáäk#2ÚÍ<ÃñŠ®#y#2J¸>-€û¥Ã2.ý2¹a™¾cÍs׈ù˔̄x™–û¸¶{Hn_å$yöpvÓ˜’˜®ÖA»Oeó|#)Æ1Ö´Å]¬5G`•ÂCp’Äáά_ƒ #_O€u1BâIiy‡—®¤¯™Ç#_òàÜò"O ‚gÛnfr‘ðyQ®ñåŽÙb–LÝ#VÁ×DÃG¼éT#Vâ³=ÍÃïŠå°öCÂx6£ÛáÕ[o <“SÃÓWòïøÐvoŠŒv™fb¥¥#VÅÿ'™„ÅñKŽ-˜IA"N‰ih#2E„%Eµ ;3„S9Ð/xH" Xk²Ö}kƒbøFÃh\–YöÒÇVáýqLà %#2âH$‚†*¯#2;fWˆz¬ßþt8|ºBkxŸ›qõý“†Á äÔÛÃ×êf,5- Wï\·nøW)à{,÷ó@ü§`³_¥ Ié÷7-ª*k˜„‚Ÿ¶>%h¦È-º7z·@ãsåÛÁÛîbò`²“§ÔÍÐfZo*¥‹©·:b}!$ðƒuA)¢zg“µ<&Y„~ÔuÌX¾›»ßå˜1¤îy“ÚLD$´9=DZ‘ˆœã(·¹Q¦6¾ñDq›–â2:ü‡Ï±W“Š<ojX$*¹®Z‚=œÛl|–êg›‰Ó½õì^¢T<ýÓé‚ô#¶$É]£ÓX?ŽkµD="#VH>i¹¿4åz§@ àæ5Ȉò6QúV/ pe¹$Þ mEf‚DοD/së`1^œ–/CŸ°Hñ#2ˆ:è58žñSºJ¤ JLnÔ£’Ф¸ŒHeѼ  æ¾·½û¼—@Z.‹§Ÿ‹Òßõ#2÷œ÷ŸÄ0‘Çd£R£áóùúl hß l¤€é™@4µÅ„ MLº„L b)L‡•ÉW sòò˾|HÛï"4À£†Ó‘ƺ#VèÁÒŒ¹VÌWVæ¦h~l¶§Ñˆ„†È1[¾øbcàñ•#Vêǘ{0œfd¨V%„fge‡U¸D:‚ÛŽ ^˜vsÞêšeÝý<{؃…³Ž1Lš ,†ÑOt¶ôð2²åÛ3ã-b#_¾¤l<ïj¯8úWÑf{Òh—\Þ‚Ù†xâ°Â‰Ã#Vº›> ABPÐé·dãÔöÞ_·ßøË_óþ)_»À%<^ÎQÞ ¯zTvãƃ›š]'ø*¥œå!?¦#2M,#2™:|ÿwöé1ûJû+lÙ}‰ê@ª¸†“£Ë’ @ŸÎôÐ#Vcˆð³µ›ô*è®cÌφµvæü?CM˜¢Tµw¹VË]g¥P##2ƒƒ?yÿ/Ía6aûØ÷2BKþŠž¹SxyuœŽð ”®€ÿÈH§ðȼHT󓤢Ù"zB}‘õÛÀ<à#2å(þ8X#2áa&Ií— õaûþýz·7-¡{%LùGóAÛ;@+ð/Ï#_dº–"”é/®ÿ†Ú>˜Iž¾Í·€zJ¥|§à±#_·hÇŽ§ý2ê&4§D¿öl~¯ÌæM‰ jLà¢6*W_+¨¶oý±¢¨rãÂÄY}Ì—_ð—vqÓåÓ`ÙQ O£9<Qˆðžësy6;^¹~Od›ñ‡“mFÐu D#_4 Ð¢¡ô¢÷B*L§l¯t¿´‘iô(íÏÍ›@»[z½º^P)|úÅUñ¼H›Éý(s*¿P2@’†ò% Û ’¿íœ¡2)6ƒLëdq.¤åð墇¶$7…#_$;ä²ù^œT„ÂMPÙÑ0’æô”Fá#2•#dÛ»ïs#_ª«NRñ7w ò¦šâ«ª#´j^Rw2¡ÇI Ì9I‡·røC¢üOZ–ÿ7ËšÓÓýÑÝô™[áq5w‰\£õ2ñlia°ti7⃤ҽÜt a7· §²~Yß×mùH&ð¾ë#% „ïpU•âºäºƒQEA€Œ[$F"“QŠ¤‰²Í£4Ù2´Zm7ÒâQü=APE" üØ2DT@Ïé”å³ÛBÐü·Ež.’Èsß³,ÛɧI¨›¹ÑíñYõ¹ûú•Ž÷œfí<ö8S¿¯ÏÎœÛù“iEøÙéƒù~yüîLRö‹{¥ÂêXD¤VxÝsÃT#2çtá¿«(Ow$çöVmدÜ0áÎ0ý¶×“õl»®í¯'…T{¾ýÚϯÅòÙÏ_Oæ什ºNàüGÆ#T#2p#y5!} l¦ÿ-Ú.Ü#VG5êëµÆ*å$¦Eü¾³åÓÑÍôëS/#H(¸s¥²Â(©ùí»)‡Ê?U~à–ŽGyA¥üðVŸ#VBŽÛq&…3T10c1¼ Ú)‘"5¦ƒœÛþ˜,¤²”k‡›38ZMJ4Žlq¤hÈ ƒF®*ÒšÝFÞØkN#И˱R]ÃâšÉ$lÎ#_¿Ñ³¾K›èü¾<°ÙúC­­GaÀæà \P¡#_å%£×#V6÷ºÝéàuK©:J 9K\–ƒHš˜ÇH‰i˜ˆÆñÉ?Ø:%ÿŠ¸XÐQ#V)@4v×4†#_Ñi™oY°e¬1#þ˜0¡†Üpq#_H?•‡ME‚cjµÛ²ŸòÀƒg3š(FD ‹R´mÄÌ`â¢e„Tbe‡\ÃSV°ÇZ+#_4 6SØÕðÁ@¸‚j놕iT¼TŽµ‡„¦ Æ´#V´M­²\µºX4Ô#_L\ä_O,…¾M¹?'ÓÛœ%˜õ©ÝUHûî˜ñDsà0ÿÁ“fmš^]æ6ãa’ÖÆÕ„ÉKY§Y„ÈØÒ"¢†qJªw£$º#Né+€Ûr¸ã ØÂÂ2Ö3y3á|œ¼dIõÜûuÏ™ô¯(ó]9ŠÐ©Ú`R§5kTaÿFî¯ü†•li7©[²°c¶+$í#2–%9j\¥8¡nò‚(FQ5¦‰!Z1ÖØGtÑ‚.}œ½úÕÞšó}»«•¦ÑÛ!I#2ƒ‘Â1¹=t%ÿä#2& l˜åþˇ @vÄ6OéKÂmçüáéÔ;`°c4€?Ïa¼^_õ#2 V&¼úõïåÙ Ïת€1;6qÆ­¢Úµc”>µë@Žz÷·š6¾„ à %”#_,|þiŽðGàOÞT@|ºøWëþ¢õÛý>àù쳟âYì/'ò3í¿ô:@eLTF¡Ilßk®gÔêÐE3jM¤Ñ& 3iRñD}E”“îá€RK@~è㞥À#_is pÈyI½G}.ÃœÇI>¸îöÔ!îfÐ7ÿ`°ØÒöþ“·KÝ¢¦y¡²Lìÿvy!¨B;¢#2Þ„~ÈTó ¼*ßõCûŽÍ¶ü¿¼òñãíÿaÔ>A4ÞmƲ÷¶ªSnˆ$¿¿_ÝѶ“SWÎV#_.‰hôüz{ÿáæ|øË„rŒ(ÛvQB,qÄ¡ßÿv`o)T®Ä†T®ÑJaüćí„#VnîNY… ÞŒ:WÂ|(úÝžt•ã,j‚ªÛlF'Ì!D­˜QªCÎ…b¥UOíö7¼]¦²[~]ûÁÜÊG–Õ†誇n…t1h…ÇýŸòâmN”S£'úÓù¥šQøö"ð¸Ó²ÜIÚS,6tE#VW–$åáç~5†m™¾|‰®#_¬~…ýGlU`aÉҼŕÁèááʹœÈˆ~3²‰š*S3åN‡.¾7Ûî¾0WÞa³)héì„,À{ž÷ü¤Å˜»1—À49É„›_DeAU&’Ì#_ç~?®¹<Ÿ™ ”÷J… aü÷&›Öcâ…¤ Õ¯¼=º042Züædê¿Ìg YÙY+è¨bÄùüT˜¨XuzéY¢£ÌCòóÿ È¢Z…µ¡d°üKáïG£{¡@Ðó?Ù˜ñBŸ7¸üõ~†oâñ t Ç’É¢ž{~˜vëþÚtzýªßßãùÓ=§±âÑ-g`#æ#MkJr_ ù1¨þv!„ú2 ÿs*}„q„°’z|<Á–SÛ딿ÀT?'Ùû+gÔÄ@·Þ‰ªªq³ÔÃ#ܨÿà%ágãztÚ¢À)_‹¹»¿»wAxàp® ç”ê(È€½4În·n"Ÿ§_P…ø¿5]²J9'¯m¸‹UQ¹~zÏ·eÿÞG&§BÕ ž#».§þÜG“£)“ÀÌ »8oâ8ïíŠta¨q'ª@Åìêxýµ#Väÿ‚2£Åºîé?Ÿ§Â’ë#2*¨#2åÜ‹­™ËPrÎ~{[´¦û6 ²§ƒõœGÍŸ…3|?R¬0a¦u7o–¿d;ùîbJr]§?&ïÕöë_¥Ï¶gŒ]Nß°/Š•;(Ó_§Äšòƒ _ÈÜ|T¶-ÓÝGv9ÎÏ9¿è×È©™AééQ|€ªù¤ÔeÎ-@ýsî`;f FÛu9š¦–ô÷qÁeü‹û<ß}Q£‚°†ËP°cîéAÏ^⌒}|gØxÝŽÉÍ9ºvfE=?#2Oä6ŽÏU3㳯o§ã7>¼ójxñvfìÇåδ|½·ý7qà9“¿!Øÿ³§šë¶þ_Ânµqù:…ÿ·§l?¯u<‘ÝóM¿WFú}=—½Q§Ø:w;éOBròTP<"£çzb,#_$ŸžŸÄÈ#_…\¥ŒÖxk\g0Á h‡µ‡ V##PªDr˱efª©Jn§2c##2~pnЃzˆ"Ęb„‰1¨ñˆTDlÔÖ›ä¤×œâ`FÑŠÄLÔÕ˜R’°šZÌ¥•ïÛû¨À‘•ådÄ_¼{8ÇB„ ÿ"‹#V#c{õ¢'í! CªÉ2äÜ]ú÷{ööí™À&¥))HõËßÇ :HY…ëÄÈB!ÚBØLÛ#VPíÞ½¦Ù³0䙈ði&qPÑIèƒ(‚rôåâÊÿ±Â8Ïñÿ…~ï³Ãäû÷ïãkþë<§œúŽ¾^jtÆ]p@ßOÓ›{þ—×ìLl:}>jÊë±»Éï§@úýÃöû9#2Ë×!öþm¯äùþIxpü{°ñuqýY°Z,÷õŽoÅ976ñœ:/^ež×*K.-?£—1Ñ/HîþÞþo¾¸êÊ+y¹ÝDX6ËNOžÞ_dFÞžiu¿×«œ|žßhÕ©,´2wuù—.Pø<¯¢#VóiÁ¿fõÞáÙÏt-ï?膯c\\2??ç#_á·ºLn#_qý<ˆ/Fïç‹s«zgÛ GÚ?üÜz»¼qÝë+Q–ÿ}ôËõøùº:xÉ´`;ïz¿ìöF¹:ûFܵ»‡å—5œ}±?ÜÒíÈîYåᧅ.—?ï ºÌ¶„lN;l¾Aëß¼o#¦7Û©ô.} òÕt>]H´#³0¡käiý–þ\zØn×E÷õµãã·WÃâ:ì”—&Ó­—_L ~ƒ9ß=K#VX|´å‚™^ž{ÞÒòÇþ_z¿êÎÏÈta‡Ÿs!±#_á#V_^Ï7߀áªî”þWüyýÖvwØø÷ùx«íÿC#ø’ĸÄX,¢€3#2 …!}û0ŒhB8o@êí#צãÏñü‡FêñöËeÔ^­ëÒ!/}[Z‚W,Ú~ƒèŸ_3ê„Ç™†±wU>½0Íøßùnù£ì†Z–f¶êÌ#2À'ŽÎÄã1³ÓÇßõ}§^{¹¹µè:µ4ŠHK$è:1õlV–ûæòaµ‰ç%ìþÏ×ç?Õ×I9ËF0w7ƒ¾þÿ½¿Ñ^ÍêÂ#_·{?Ö°üýƒË'ùjߧ£¿¶`»áß@ŸËÒ=—äS»xÛíçüùyÝ—³MVýѿ¢ŒÍÂ^Èlôþ×Xlm¾jþQ\üØnù†‰÷ê×û5Eà‰ÖŸŸØNÅæ#2s~Ÿ®½=yú¶r&?ÓÇáNŽ¾¿ÛÕ€:÷õwùG¬|ˆu'áM+‘³â,;= «”yœ!ÉZêãúýÚ^#_eõ*zØÜ·ÍüOñŠS!æeÉìÙÙöcצaž<œY^1|%³’Z¾û\,w6fñoD¿¶¨ò}úÓäÙü‚€AãÓ#2Gô˜pñ|<ÙF¿ˆßñü£·÷#ûQö¥GiÐd<¼â{ €)Û0£í+ãP8Ü#_DK`fÝÁ¦¨"€¨@>èØ2~ÿ~hœ‘ôUÀ’D访õ¤÷¸j¿éâ|?0ñ¢ßô 8ùîéãÈ2¼{ÁS¹ cáʪ7aÐvõM>H{­º“°xjäÚ•óÇôQNµ@$üecÁÊæDKœŽ*T1OÁ5åŽQ—µF >Kù¸¨f¥Ë$À™’ Ôë*«˜EÄ`JðGYô:CxW×€¸J¢¡Eƒù€®IñŽ=ïàKè›à>±á5ìÓbhþšâäÃÌRê6Œµ`âæY\0Ö#Vn<‰¦`5¾íÛÇ"[+¿+¹$—k½5)”ì$ñv$kœ‡Œ* ”}°rC”u‹„v1¹7ç·Êñá^­á8Œ=5ïÕQñPü}z¹y& vÏéwU‚#2·5Φ|œÐ/È,C¢ÎÐ]å WÙÍ*YFI9¼Ò^…qëÏs[6±'.÷Ññ}ûua4Œ»~kßËŒ¯ý#VdHzë´M…/…ПFs‡¦µ&'Aþ¢fŽ15ïpÛy¾èÂÉXĻЙ._Úc튌ôùí;ó‹6v¥À?Ú|ÀÙ“~’Ê‹&¦„äÊt¢R«M¡½ÊL=nÔQaH#2žjP´iÎIdÛwŠœF¼énwÆtlœ,£ÞËã?Âú®Öƒ]Ùzµ—íkéõÙ·Èw9;P@Fÿmn4“Ä—¹é—­õÙ¾æÛ!Ëï¼uQC @«ýŽPÇÒÿ€ÕÊö—í q”:z•:ÉÎZªú‡ÆO§_Þ(ñ/=ãbŽ#çf²[{>pårB #2ñ²=Ã$“ÇÇI»í“VÑ𨇯qQçÈ#VðyòÚ2CY,N±È‹µ„9õ[t­–ñµYÄ3Udé=ÄbCG8´REœ©*tI÷à•Í¥³“™Âá—×ç¶ãç‡â'úsÉ—ëü2ÕÛe:xí°þV»2ܦ[I“3ùw+çå£6ÎS‰öGÂp¼¿Nàãñ‹§§Èx5ðM46ÃŽÙ¯èôpn <狼¼<ûOÕîê€Ì}:'´jô×®= ö.Ð¥3MÛ_N½úpê¤ìd);IåŒEÐ5…–Âê9#V”‚* Vvrs†E¼E]Âï“<úì†/å¬Hût§$ñª”ÕJ(E;»h”Ï×O‰¯Ü³²î‚ÝÙiô±$«^4)z¨ÕÈ~n^ ¥ãû½®%ÙÞ4>>Œ, hýÞQª•eÒ|ß0ïqÔÉYkDüʼ'fMQÀ¾;ÀÑ[ê¼êïçýHŽ(š‡^8u}¿Vþlç-nòöÊäÜ@Ô~ñï¸r"çÅ|½©ãúàòA}Ũþ#_ʪÈ?Öå™wp]Ý1œ»¦ëço{i×t®ROwfÈ—ºi»PÛ®]±þA¢QD¹ ‚4Cæ5ÀÕ®„$Q #VT•u¸ÔD„q¥t(M3&r¡¦ëeD„cLF¶ЛQÆ®ª¦a¬ ´½;Òk×®¼¹qå®ó²ª Õ-)J#@‰|»?ºŒ"Ew¨d±˜sŒ--(Pê?ĶØu.±#_ôÁöÒìw¼÷‡¼è˜YúßÏý?Y#_{N¿{ƒ#p#_%ÿîoMÍÊýB^_ýeÔºÑ6‰ø!í¯"iÓÌJèôee'Ž8{;LO-k(‚ ¢€˜ ÊP¨¿«Çoâñ¼|Þûø»›‚Dâ¨0H)"I"ÉuzzhMˆ&Sh릕²¹]6m5sR¯þ$Yiÿ†Jc€vþ^?½Õå<\3ó{nÉ~˜É+“Sku¿§ßìiõº>“Ž,Ÿ×Vt½é9Ätúb.;î»ã,Þ%)^­Ùg¹ç“ᯯ›Óèpã»å»…z}Â>‹7ïÛù¹~v§)­¿£ó= ^;GîëÓó»wvÅ7 `þ!\ëøcüóþ.ô‡š?€ØÇ!ªÇgØiÝ°Åñ{Ú•ù;ýð|¡ÝeqùpßF ?¼›‚Ç!*?Q¦|2X|‰ˆÖ.)ãG=ŸgS¿!wºb2a«nË:ä#VýßÍñ´-TZ(?Ÿîòþ§|'ÏÃð³›ö\gø¢K÷ý?«/ÙMCp^ßßpùæ•‚ªŸ(NpÄù?¶.Bf:%cð6üùi±ý™÷W+gâÕm®°‚ivjù’GüaiðÔPë¥?l«û&&ÞΕ/õólM,ª¨Jt­B"5þºÌÄ#ýèG"*âÍܺ´r1´” A²¦*ʇ%Iê,i*˜8It»NÅ+¦ï¼»F‚(`ÛFG,*{râ¨cLlcy¨‹¨#òïçR;à:sç;öêþ8yFàI#_„’T’©°Ò°þl‘AÝ ÙÎ`7ÞÒií† ŒÉÞA;Á°;ÉΠêEéþ·mPk´[7¯‡åØî‘»€£ÕòˆœÝÊçÅ*[p´´~2¥+Æ:#_.‘î¿WÑê^P‚¨æû p#2ÉÅ?¢ëûG{¶õç]ro\Kºäzƒ!j¥`Æ›UÖŠË ÔlúºÎ¬0‰%:B'ŒƒvpYŒDQ’ËÚØùßQ©4cIçIÿ.}²%Q6ì’(ÔF›f™1˜ªcCAÑ–†å*Z²JP£»×n˜›^;¯{\©{íÝ­lŒ Åcë–¥ŒŽü°U†4ÆF(241ðÃOR L5þü¥‰§e½30?ãÿª\xȆ10Û½ D´‹™ÁäCë1à(ÄÂ7<àD=f® Ô²@n¡ÚÊn.§ßIÚ…‰µŒ÷™—ÝäQ¼©1o«&!¥’V#E Úzdç ÍJ†ž4¦b¨ÙÒα3VV f21ŽØÇK"a"°„lcV#_>ýÈ•k}y) Ø"š’ À2y2hc¨âUqÅHa6t°Ö"Ü¡)#V´5B‚Q4²hØŽ™ vD®\‘Mòé)]ž ×°ÕæŒ{uÅÛÞPÝ<Û§ÛçHÂGçêø½9º2fª™Ã±ÌÔ—)a‰ðÒ¹ùØ1eXçD­ÓÌÉœhnngJÛà ‰©˜Œbh£CÑ¢e"½k«ãÅó»·êù9„eˆfuÌ5LE'9]È^ã7W¦K¾6’™†6Ôî¥ll–×I#V°ÚÉCL¸«&¢#_Ú,XÅŒ80¥cGü;0Äd¨P…P* H©¥ØhQ@ñR™È¨)m ÷;ñfrô#sònO#Vq‡4IKµËÈ8>#2ÄAÈ¢Í÷Ôo2÷rLJ¦b^¶ ã—@¤z æ‚OõLv5׈6Öªö¸Hý‚•&ãqƒJ4h"\ø8X?|GÐBHÄ Qx¨dZÚ©üc×™BhTÜ2E”WŽfˆ×$V2líO¡Ø¶ª¡[óÄ#V!”P¥x2qá+}5ïÆS†‰!P´¸YàD}m´Žú’Ä#VãŒm+:æ¶LÝÞEèîtf´mèxÔÔé"ÒBdn™Û!‰úq¬çdaåÝVJ—wvÆêëðÃ0Ó'6¢L!9À¹¸odM±ìF5\„;w;žÀ8ͨrÀ½œMÄÍöògiÝÍe…;ëÊs~5® ë ™¨‚#‹ÖãÐXŒ}z6ôÅÑ"° åEÖõÍÆ‘`(±b‚žºÀ²Ð­3UÆû³7¿Mr¢Ý“|“Êü†y7?¬Ám µa7˜’Š7 ‹8n8@¡ÃbȧÜÛbéÊi#V«¥œQ9 £¾ÝÇ™dÜÚ"ÃFŒj"g4dǺãa-ëe¦}½ Ï•X£Ñ”m¶OôQå‚›Ëi1ªêÜïÏXÁ翈ßÆ*Ý;¤?f'˃%ä2¼ü=`\¦áÛ·¤×A„ܬ<.;6¶6mc•E·ÑBõƪùXÐجA[Ú"Pè&\·~DÊZühÌžLöæU¬¤¹/VNÏ.ôEÕœ4÷1•ôÍÝ2³«‹P¯NÍ5)¥}á-f®·=übx³JfcsW,7 †ø¡réR§˜ñÖ°mF‰¾vž0F°SƒÑo^lÅäÍ3¤Á«¹¦+¨›F]3ÏZQÛþ7NìŠ"0TX«:uõÙäÃæyÿu™7£ëºëæ}9}‹Ö¸Æ#Ù\z~Þ½·Ââ êŪ\Û‰ÿÙ!5¿ù»ˆëe;{ÅOŸÎèÛ§¿%$-“ù¢÷»‰’ ¨(<ç_”y™G7[ya=N @ƒPÎ`§Þ`°ò-¡œ°;œ¨ûZS×–2S&ØÎâ·šR8Öû¬{ŽÞX\gŒVuòXþCg½‡öjþMù8;o =‘ÀA|M2Á‡µÃŠz˜:àé~“Oí#V7ˆ‰ÊƒóûÏ=AAHâû_óCWþ¨2jÙ#=ô…–5ñ¬{Ç^ï»cHÐ%ªºÿ«CÇs|Î\.YƒØõåWƒk€ŒÔ<` @Å Èý9I“×DDG0 @“Hqq"ï :#2Lþ¯“ÆZ{DRõ̸¨îÚõ^'‚G‹PV,}’½<×ÎíºRß>çyïf±äaBcèéÍïä? ’‘OÕÝG†a B)ãö{‡cê›l§}¬0#2ˆ(pG`Èš@Ë€sŠ‚9 RT<¥;,çê>W#_tÎÑâÓú/”SM+ãÚæ«tg&­ jr†A›6ðˆ  |–×<óÏgŒ2ÿŽåÿ«¯³Û´1æ“ =}RÔÃìMÕzÑ¡å‹D0íh¿®ù?6D¿ÌFvÕ"eÏ΀ßÖÛì5†Ÿ³RQ¹xh T¡C»TRþ³ì¬°92OµLvñÇÛ¶ÒJïí>žÜMá+ìtJ6ÜßËûŒ¼ŽþK¹¥(0I>8Aèë.~CÛÄ÷Û±U¼r°X‹ nÅɨäM“Ú;3ócò77›±ÛÐÉ^Þ‹þle‚ ¹óv5Œ.e*…Báþ˜Á§šµíCBq}vقᱪ‹À#_J\KØ#ƒOŒÃæäùüžvz>S°«Å¾ÜÅürˆ0øæyÿîðmDî“®ÔŸ_²FÎãΊl#Vw¦²$IÚ¹'%> ÛC³FéØÃw¼1’˜µ§7?¬yà`ÎY1,>dôÔµÁÕfí‚ñc*ÙÒdIÛBcÙó29_HׂM¡„fO3ò}n?µ¹ø&¡»)ã©I¹1SQ-é¿Ææ@îCwÅl³4H’!×»îò5Çó2˜öQíW~TZµYÀéµEK&¥Lÿ©—õl`Uyo;–’W«&ëË>A,Y–ÿ¡!+ä 3eÉéFªzÒÃkÍ­f×äYî#J¼Ðò_UlGRqWšŒÅA+Ò$ÄP Í•`›¿mÍ3ˆz^)©j€äêm»Ãbêv¤YôöÐÆN¼Ò—0zèj^ÔRK1 ?š˜?!|³”LäÉ—¨-¼Q0Í)¼ ¦ƒ¯+Õβ£à˜2Ú+N˳|Ò²NG²6¡>ÉÞLÏÀ!Ä°JŒ¯tC‘¼Hž#2`îˆîàž–¥‘`ºbϛɡõ>•×Ÿµš7¶z)™Úš~…›{ì“´­IzÏL…[ê~Ó¼yG²U®3S"HÓÁmcú‹€Çi#2p¶aý™®'"LE²õŽéL”9É骂!;ûˆ?bÒ]ÞM5Ö‡çGlR±ãYPlšâßnt=žó¿ÆLò8ðü/†‚˜†C|ݹ%“kÛ±Û?,¾í´o—³òìA‹ûvnZ8*ßÒWz¡1áäR›‡c²1¢4›¨ÄNƒƒE@Œ™o”k‹™R¼³ïãwvàß7‘3t ‡)ªYiØÉöãPõ©{'[ŸJY©#_Ƶ}Ÿ’¼–ü™Ày‘矟£åOÛ­¬_É3—)B#_dýW#V«cŸøÓfgfÁ¢Ú^ÓKÜ1AÒð,3Ýʃ¬ŽÇíOšU8>¾èÜ™³½#9 ”Z“‰O"]*6Sû;ì{šwÞãƒôŒrÜ\µ u½§aÉõÏG+à­¨a{/6…3t¶[Π½#ƈNctìfÐfQ-ÿРm >.ÏÒå£sé·—+zø?Yºðf½” "•~Ž#œ¿qä²fRÿHýèTÝ[¦Lc”&h‰*ó)¡Ô§ûB**±Å-‹¤I ¤Äâdê«û¤};·gÖ­[£Ô{Ëz¦ÊFsˆ‘ÈŒ­2¾V& F'ÖžOÈ‹7üÇ-ÇC­À~K¤Á¾ŒŒ écY‡TÏ9Ûñ¬IMQdú< ‰&±_o±¬^S$Ê"#…²¨h#ºÙ/qãÎs‹ŠFøl$è\ÑÜ–Ùª„Ó”Y¼@ØUé‡Ç˜çÑ%·®`ÑHÎØcAäý^Ùè†Ú̪Ƒ©#Vx‘fê hDS–Í3ûÊ£èŒV¡þd>_N_>‘†5YgfŽï´»ª¹\B€ºÚÜãq¥{#)¾F€k³É½Ìò¾¡´—Ðȃ§Úa-!©W%tW©ŠEÎcx&;™g'=Þ)¨s9ÕÐ…#Ø-Ù®`þL0 ÙÌNæ—.þ±àSñ½·ÕÎ*e¹E+sò€»õŒÞÛo±ÇåÅfæ÷J~\kÕûiöŠïcê®çqáš&bø’ð†µWDnj|Š±\'”Ngo‚†•eºc˜(BWeSŽBì±E=MŽ(ò¢1dÀ̸—•ŒšC#_»›N#_1µ÷e ßÓÓjô¾ó? ëéK¬Ç•âGBGtnåÚü'Ô‘M²…D­)ÐfÞûT{åÖ„ÃÀÃ!›Ñ›µG=y~Ð?[¨‚nàò¢åßÛxƒ;þq#VœåTÔ£_.Û“vZÞ©sW ê!æaÛnë.:kEÄc'²kŒFÕ:aTZà·Ç$b©{»e}Ö<9TdÍ¡ÒÏ~jÄïB6N—’bîW¦¦|Ï‚|f^Ìòî`Ä’mÖ½vX´š8x7EÓÈ´iü¶æ‹C¹xÍotDÚxki5ìv²ÛgãF€ò7NØ],#ãôo¹]ŽãÁÚ{,Ö›Ù¦E£ê`Ãll”v2‹R=ÖÜï­ÝKt·7Ã4ÆŸÉ63Âãpy°ÓÕ"âKÃH[NíÈvª~(«¦9ìçÍøÊb u¶„DûGŸ“ç¿g0(îå:Rùømb/Ž#_5y/M9),)Ùÿ¦X†ô»yËâ!þ»ð¨ßoVÚtô܉º‹s†ÀŸ½Áœó‡†aâ©»Àùn2Š:göæmZ—~€]='dÉœŠU¯Ýš{‹ [+]-¦µöÜ"w+ ³cµF…Ó5Ì^ÙÝÅÓgS­A/Û’ å]²<íÝäÍ>Ç*“wq $K‘ /$ŸaŒÐ—Úõœ1¨XAX36u´íJÙßÙaƒ¾Z,ƒ‡h IÝŽ%-Zz¡éŦ=ä²ÞÊM,ÍǦAåÛ,æé§M³ô1F$Øë´VWq×MqwR:6öPc®õ…§¨r–…º-6) hŒ?Ñ¥›)(•åçèkaRÎù™;9Õ4ïR:„…Ôñå‹°Ù²Úxga7z†*L¢ ¼ÐM2æäÔCä¥-Bà·!¤©ggRÌ-¬Õ¾¢ È„ÞÔèçóÚÿ!fåÿ©Dθã­ù«nX4(ƒJ$‡v¸&jC¯™llû·?r]xjcƒØ˜ƒn/Sú‰Ã•» &YGÕJ!¥bDý81¯¦™ö½ÿÔøÙLDXΞVkš£6yš¬².rx¦*–erëy€ã·£Ù;âñQgmÞ9‹É¶taHÓ-„ülvcy`÷€öÇ âö#òPwâL{'S9­þ2NQãy“C:<>”µ`°wÕ19¡1Oí-Hÿ#2œÈãe#_(¢Vy%,oÜß×ôÍÐÓ1ógwöÊcÀŠ á»A¬\´íé‚Ûä‚ø¨†%ÚY)üem •n2}ŒŠpó«YÓh­`óÐÔ2w{ ë~ü¸ºS»GR3è·8g­ËŒ|¥h(E¨Ë™sŒÃ!b…—+Æ~ s;§A¶ÛíA·]a{šÛí\ m­Âpˆ°Â/=M7nŽ#žy‚K†«ÊŒq/ví[}#£€œæ.±ÔpÁ´þri'‘¸V5Y{ÞŽ–µ¢Êçä³—–¹Ì4)-‹_à¡{–ývvi˃=Úˆ~Nòü;ÀnŽk>ZÓ={C§0øÃ[z3dðšíÂØ>MÊDzXXm{{>í‚”„TÝ¿[®Î3¶nQIFì'[Ž-Õù7dn#V"é>ç´©#_>e/:ór¬ÔöXÁ‰JêçmpŽ¶¥û¸:ôsð$ñ[¼dñéè¼%¿#_%ÂñA¼*Õ¤ÐȾÅ.ÚÖ5I¡L¶ó¬áÌ#ÉôÀû·o?]¬ÛĹ9e¸ç´q›x\åÁõÒy¾I¢ô¶[¥€ø@påëÌË4²Î¨ýeuy0ÁÆ$½ÐºnÅîÄÇ]áâªKƒk"(ì,ûñßÎòÒ»×Ø?''¿YYëbgëó–¹ÖE¿Z1Р³µ‰ê¾6VPpiØç¿+šér’ÙXW/]%°[ªÀ—«‰,¸š¹`_jˆG#VŽþ/%Ôãýk8JM¿„Èi9…Ž§PŽmO€(\8XÆ÷#_ÅcU‹?Ï'K-[»$“èžÅ²»&SÕ´Ãœ‹ yµViÔ mx“Þ£š»¶Oüàê´b›£mÀ× taŠ‚[±`WŒ.`U×Uâ Ùåh궔‰”=JÝ—óY¶¤ƒ -#_w0ËbߎŠÂ;%×¥EÚäج1©x®ÖMdbD/}2f¦‘mnƒ«sÑS¥ úØÞ/ÕÙ?~5€Šé²}ð´#VœÏb(¶õfJæäÿ[·%’#_|#_0‚€ø4ßeg/i\dŠ­‡z´„A ±[’; «&©ˆ›Uµ^ê•7㎚®†ˆ¹J-{c‰MÐñãÅÈæX ³j±/P|(ì#|'H‹(È°T0j$5¤jª[%˜*¢0bU^Ì,[:šNË{WkÙ£¾µß„i²`*.ñ¿ŠÍU©tzÜÃôï³îñÄ+̜ҘPð¹ŸãTõx]!7ÍEÄÛf#_å ¢5"°*2 ÄâÆÂ5d·±Rý¸@Xá"Þ ÞŠ–2›65¶ê)gý7Ï*…€# ÒYe`Ç%Ó¹Æsoñ-ߟŸË˜Úv º‹cÓã,bþ§QÑžÖœ‘Õ«.ÚK„á δ{"Š+riE‘/"¥t„’vÀU¸XçË~K‘~È#oËnÓÚÕÃî÷ú䈿TÐëhÁÆ(åG±[æþmSà$šPn!òÂèY y_#£öu(KL­ÖòçÌÑq2.ïmð\£«YŽS|¾S©Àºú{Ï}^l8Oø<fÅËLüt–ÐÀ¡Ú “·…‘žÁ—ýF7Î<·yÐ^ø?ïu´ç/©^t#_|Wz‹Mìa§“b²€d«{–S–#.¨$9”OZ»E·ËØû Ê¡u¹˜ÚÁdÿ~ñRËh"2 sǽ-ÿ^$%´[žpíºgBÒB!=|¶œVPAx’$_Éÿì™xkí­å”ê°:/ìì÷˜½j$œó´H§ ™ÖýDnû‹ /dé¯jZRœ6ý<ËVpK‰JLÜ•5NÆ>Ç´$H?Îu=“]ÿÔ¸?¾4˶bìQ¯ônÚˆ›á6Ï%pŠÓÖNª›-Œ))l\&ç°²­Ÿso¨…’ÌíõãaƒÂ›•ˆíU»J²¨ œÕ-xP„wrél  ,¹Oq¥dÒÔ#_<—ZV*ºš0ñB7®NѤýk#2ë+›çyƒÉãTºÍ‡ªN{…#_›PÓ¡\,z‹÷º®|ÊÖnÄCD³˜81¨˜Î–#_døó3GmR¬,žöüIT#ã´ÏÓÇæé¯÷ãÕ¼ô¬™Æ$ï'32‘0Â0g+ $ýÛå÷œu×9D,là朒ãaÂñ»%²ÜŸ:na1äî¥0x³häƒVùNi+WGG'ÈG†OuÒ|jm¢Ã*ˆ‘ëœ'ê{µVà‹ñ+%©]ƒBug£‹3)Ý–×oˆÊ°ZÙÎÑûÃ%ñFÿÉKy7ÖÅ©ØÜ£«âqGé/e[„ÞÀë­[iKÆ/ÇÐæF¥vÕ¬w|»o€©ˆAÛ%Ü…OÉwŠ¢—Sx=?'n´žb/óøóŒoeµæ<νñxWm‘ÜÖuÑY»\ºzm”Èë[ är”»v¥£€¿•í=ZG> ¸´w\Ìq[·Þ^gl‹ 3Ð;'°ƒæÂ6¿¦<’ØÔÏPjcAZˆÆÃ7¸ÝnÆ€#ZÖùÆ÷C¸¸„cÂeDyeŠD[â#ViA#yZͤGÈ]Wøàï² săút˦q¼M\IS‹îgsi-ÜЃ²P÷›ÐQï/¹v®§UüMý½4ÙPglžûホ¶zÏ›N«_7v³–lå â#V£ž.…ŠÄ3ç—Si…£töÛJÂp×€¤ö&ÇÅî}Á©l9ŽÍ’Û7]G³ªÖ˜f)à h¼Ìç²bt„c(Øo5ƦýsƵ²kŠBy’°qÆë߸J‡<‰iôQâ#å5•¯r‡ä#äºØßvÎxXn²JÞkC¸hÐusÝ}]¨ì’‹Hí#_ád«WŽUWc :«šr3µº×°l÷AÅmäjÛ-pêÛp­âŠú(›V*Vûçê÷ÝkSÕÚdÞߪ¨ªˆmè}õqçÁãÏaqsÚ²d{/$Ú´/wbÕós’ìÞ÷e1?aML< #2¬”#_:íj:µÝößâR» ÞëÎìçë¾úÁP™y¿¡ïój“;gRÔ”lÛÃ@å4ŠMrÂKLÎZ=ó— qjVL±eèãM¼¯ÒVÜûž,è±qº–°{¹²ÉOõr ®ÍyÞê8 ½\îIÖ#m=k6å\þÒ¤:šÿÐéØW£ŠÆz‰grÝsSG{xÖÛ¢ò=AÃÇšŽLåz#_‘#_4#_‹9ÛðÂQ¥ãl‡†¼#ÔwÓ“'WtDñ žß†­ø ö¯Ï–ñ€ä½8Õûè#_K--n+|F·Z+ªM#2¬<;ºOˆìU a†<­ØGõŽ¾y·k‘ô•ãNò#2Û™M@K.“Döß¼X¡]gd}°*}Æd ðD«(*#2„‚‡ÌFžÕD@6Q„q‡U3p®qc"½ðŒŽ±#2~{3æwg§‚W(¾Á`i+)°£5V]Î6¯ÄÈ"Õð4œ™ $^â@)Õ`yD­.:Ÿ¯›d­î5L«6©›•½­R ó0P5ªÚ–I¨Cd{íO)N¿/‹Jç¶í}¯é“Ã¥G‡Ò6ëçQ)®@ sG<ÞîYr#_BÃÅ7˜I÷¦ìÕs$CΛ´^ßf$€2Mî$౨f’ošMΦïñà=°÷ÝQåñ*6Wwl_k; 9LVts=Þ'ÄfèQÁËðšCo<š@ŸDTú3mâGÓôJ÷f“RáÈëy½&ÕÂäÔ#2ðãeÞÁlzxÑApŽŽƒÁÀéÝÃ~ $ [‹Š9ËBHFgöc›°¡v|bg¦Xï'¼{{F}¸oJÊçvîQÕµôÇå0­|<ë9‰œ1ãóÆ=Ú‚ˆ¿_7ÈïÙþ»ßáãN®[)b__³«2µÙcuÓ¯¾Í5¯v½Ê©.J%íôÔH‰YjÇð³éûÛOùŲÙÝž‡î׎猇±h?bFŠ8Áarè:û«˜¨õ÷¨,"½|T~¶#Å5&BÅÑQŠï+†•î˜Äv(Ö-]e€*º•x°[ÍÙ.šÌS¾ËˆpQÃ]j÷™ä·åþ¯#_ÿ#õ¸#c¬i»jnÙ¤µJÝ6|¶\©d†ޮ°ÝAæÊ¡uÞ ^/Â-3~ú+ç>–ˆÚAäòs¹%,ˆðšòë7\ñ¥±tWóú‡®çÊxìΔãëñ¦í{²ú+P½G6͜ΛQ-J¹Ø."S}WK…Ìé›ý“p€á¬Ø15ØåýÝÌ#ëg.>Ï8â»qb¦ŸÎ‘Ã;¶«ŠÓ$`ÑÇT„A ÿÙücHª{ò"eDs¼bp€äŒ\ðcÞÜëË¡Ñ©Èëö‚¦VX'$ÚËd°ò×Üë=:¨à9ŠoµE €s¦Ó[÷š8Š×äi%ÑdËKžþSk©9¼•LÃps#V•…K¯5œ…£däQGÔôÖëã:â«ŒEýq%}õŒVvšNw¿¢û×;ñ­G*ÌÅ(Ac]JÖÛ6•}Z¡){g¼ÌN.ÝŸ9¢·O‰Èá9ø-°­b[œ¦ñ["0ÍYÛÂ÷sÊé™%Õ\¨÷ì“ɪ7„0„yÕH2Yùíù¦ùæ¦aœ _37ÁHâáòss¼Dð#|UQjŽË"çïÛ2DŸ7 DâMâ^çiÿ_ë½zkHûCWû–Ïj¬‰Ü…9Š0¼…#2’žíº¶NB(ÄÉS˜„s½[Ï‚€Á;Š#2Æ=€Ò;RÁ9"\|x+;uùëã)‹ð{»Hˆ.Ì^Î#_›#s+å“Z^›7®ÇNÆa´ˆXùuÐÁ†s¹bÄ:µ¤å5K°ä7*I’æ:I )ËÒüƒç{ÞЯ&cæ>V£(Ø«ít#VÎ2ÜùTÔ¬Å#2àú‡¾ÐîÂu„ö†}:¦‘Ï[™ýò‡$–ƒlDò|\àk«`V6loPÞ¼>»bpëÓxjª‚E¼yfú\sí¶Øv¬wâ|‰ëÄø3± jHÏ4LÙÙ|êG½ãæ~ºÎŠ(ã.•ÔúÕMŠßbì»]Îm³£^RËfÙ@£±b3Góm?æ¼Ù<Ì{oÌ°þNçm?š0jc#_§…,¹e[¦š9˜dmæ¹önæx²Ï)ºÞ6[E.¢3K6 µp:E>k€£ºvýncÖY¢„MëP@vHàWh¾×Ù{X”ÕšÂskɲÔûmu›8´ä ðþ««Ô¼øÆ»j(/yºípƒB8P×GÕ¾;t/cíßË“WÚs Q(¦[¢²[ÚŽ`–’qýYà¤ë´Ež›|›ðŒ’Þ×ÆuêhEžù|ES¶!èÅV~~­”.‘מó[MZàÈD#V<ÍW>÷†rtŸò\)ø=²'Û™×NQÞ5Ì¡Ò7Ý窈;e´îòa|¥b)¾±su-ì‰õIÁHcÇ{À]ò*Q‰ËMðã†Ý“À¹F*„E)⥸Uj>Í´FqÌU½À)MÕç`\‡žDöPYßS±›0Jd¶#_£}$ìÓŽ<ß#9òÆ5"Ò¸`åZžG1Îáí:ÊfÖ%Rv ·$ÒOAþCЀeßl#{oϧºö‰ß1VDY`”aX¤D6\e2kéIŪù^–R÷Y-Ö|*õâ9íKµB6ï‹ëá0wÆ6Ïα±VããÈÏVdèt£lÒY;ãk;º$'KokÜ}Õµ‘Í+EWçºîËãŒzUO¾£3åäâ‘Ô¡Ù;7AÎû+>ýߨﺉ—Ï;zÀK«œ`T|%gçŸnçh:Zo„}óëôÌzHìFx‚xÅL¸.¾›}€{‹Å^#_•ÞÑxã;…˜˜ƒqZ»i´4š.æ²Í"­ÿºEÛø¼[you¤·,P¡'N|\hÉï7!_…Aâ6Ä}ÒÛaÐèäçzD÷Z.j#Vœ­©{&"6¡³÷¬Ü–Ÿ¤ìî}KmDSjºj#VèõðãqnØC5­ ‰‡ö“Úxµ¿‰FµCB¥>éáEBøVr^£–RMR-ÊFݪ(~ º9Æs–‘+q&%<ô߇+Ô=z%-,¿A©E΃E¸…±™P¥…ªVkâSwÃÁÃÜ’ {{§Ù ¶.OBð¤§t˜ëi¢pmåO˜·™ÍJ¶ô€ô@´„™$¢)X’}mç$·•“)ø?Œ(²£id#Ï`¼ì†#_Âež#b›¤KxvÆÛáß-ÏvŒ½2hpŸµ8xwƒ}D«¸AKظØÔqU#V™¨@]à—Ÿ~zh5øïÒ3û¨$^“€ß<çãïAÍöìÙg_æ`ó·ãë£Ç W_³gµ‡¢êåñóŸ¥Ú><þý@ÇšÒ/fe®vä…#—¿›íÅäOµÞ`·[ÞñAþ¯çEs-éÙnëæÔìt·Ê΋ƒ—ÔÎ$ìðSOï#VóÀFe[y‚îEÂ÷Icp!Ä-Wû=ŠÀ’s)/ì_·È€|‡ï¦rÃw·Ââ@xæ\«u@û»¤u'Søû¹l!5¾£y#_8¤¢'0ïERG¹ÃY·§Ì~’w<L=N¸Æ–þE Éý6_×KÚnJçjbËòa“¡!; ³K˜âÈ™d‡:ón¸ÃëÓˆ›íoß~«Åœ|2ϼk´twØÛÆãÑw°"î÷5ÅÒN$+—~ÿN6¬‰1kø±â„Ó¬ÕxþlL2{•±ÜωP¨Q p×ÑAÒÕfÌâ÷ôMäœ{<¤þ¾­3<ß|Ô”?Êö&18²í$Qlk÷[9R•&[&˜‘ˆi( B >¿‡ú}çòoúÿêlzkèÏŸf®¾ õûŸÉëxb®ákv|nMœ€©ô¨fÌú51äž=e‚¥¹#19V“¾&—rH"eØŸÝõg³Á4úÊòü,Õ1Üù¥yJ¡©Ïf¹ßÝŸCÆŸW‡rU"£óQŒ-#V'd ’¿´€Üï#_ª‚!b`•  ƒpA(‡Ö}…BÄ<Ó{ DîBF «I8Ö4¼¤v„ñ:Ÿa¥¬çˆê–#_Q¤kKY¢¥~*¹Xªë`!#2‰2J1! wñóÖ‘¤´ýÍk”úŠë™&Ú`>Ÿf…$ÜÁr|~4âBcå¦åª_o…ýÖÒúX›M¦©«©É‰’Ÿ­ÛÞlFò¥Ð²¨ ¥Z ªÜŸ þ™^æþ^§žIúøûÆläív¨‚#2\$MVëÞ6]µ Š8Q'f=KÕn,A,ÖèöBNÈäC¹ ž ‘“*aöJ z€C35¬÷» .@R¼ùâøIóOddyC¨OgËÑ#áo)¼ê…Y¶òôÌ#VAá ´ˆü£¤#2ÿeé/&£ô˜ŒÀlÒ]Eðû·ÇQ€lâ$¨ÃÆÁ7Ê ¬Hvw¢»d¸TÞ»ßX‡â$þ¥{~³ûÇ\9vÛü¼û;y7(Åÿ<9>ÙN§Ë?;=ó»Hcx©”á‡è}(Óá›/èB÷GÆ¥óóœ0Ä“­®Áý2<ú<¯ŸÆm}|RŒù²ua .”s1Xö•‡|Öa«3Îñûk¿§y}NÚÖÉ6æU>CÛשk,‹ÀEhLi!¾íœÇC­¶Ð†ã÷Uå\ÛX‘ pÿv3­¡#V\kíþlMŽÎ2L˜N¼{·&KgLÇ-±¿ÑK|hÛ!þ4Ðî ¥$Š{&½ŽA²‰%ãØQ<ι’ðÍ„C6…õÙâíÑt/™Eu÷{ýõäa¾Zâ>•Â#2ÿù#j#2.Rª…¼3Á¦ CÜ%˜¹ ³˜ôvãïw[F‰“ÕÚ» 2(6y@ò‚ㇺ¬]¯eÙkÓrAù@ŽK=Óÿ#VËn‰Ý!*PÁ5š ¼*ýþ+9ßACwD<¶j®Bwª„q!Z>&4í6¡õ8DìÆzRbM¿jS&Ð@ J0KX¼ Œ×S_òUÛ'„Q;í½B†NªŒœ<i[„è„™dU“uP °Âl…äØMႇ¨5”Ò9{z÷qpì‰ä>@’ +£n™ásÇ?w–³@3 )#_ bƒêõZüHØË- ï4zìöþ4º99/²=ôÕ_=)Hº®Ù¿IkC—wë<*ºœÃù£}J8ߺC$,[?]gR´@VžëBÚŠtЭ d #2mQÊ9ˆO8’O“óïñØ ì&0Cô'å$Rqv¶n“[àrÃS)ìQ3[ë*Ol†È@l1­ü‹ÁSSÚõ桟̱GD¥ç;õ÷ÒÛ-âH4ñÝÇœl:qOzþ-ë3œHQBÖPÔPëJ2¿© ƘfƒÃÇ®±4½‡ë9O”yvô‚Õ#Æ+¬kex® Óu¡¡á°8ðê¦1Ù:Eð½¤&MõŒ×£Ü.¨í¶NNv[*Ú“0¾ôL[é)z-Gµ‚¸Dy|ïÕ)ÖQ"Xê•X\ðżQEUþ./F,^XðåZ 6ÆꃮÅñn¡ò‚ÌìÙDÚ/pPåu\Qîïg».^p®Ô÷ ±­®ŽÄ`ž¿óˆ‚.Ôâ„€I|ÀÖÞ9Ü`××hm~cXüv^#Ûz7ËfaB6@”F{âØÊÒ“x¬ÆÆ­ÄyëAm_ej×jÆ<¢Ì‚‡#ôÆ\³Þ@¡Ì@KÊ6æšïuïÈŽK>0ˆŠ¹\¹ qK÷³Ç_'vö”¹¤ŠBh&Áƒ@«…ªsîv¦ì^MAïÖ±¸Ë™—?t±(>B WÜ{nKf‹#F„ Ù9`€|6¾xõy0aÊl¶ÐŠ ©M#2.db7;S_¹Ë–Ó@ãXÐ80®lëÈÂìà -zÆ­ Ù&ó=\“|ìrì¼ss¼à:2D%Oï>øë·…è’]È\ÑÆ>ó™(Àïîôo±ægtÇÕ; [í|¾•âË?,ƒ×ùµ]¶,Âox¯ ;>ŠaPóèæo –mèââ¥xùF昔ËÎI9íý]k¯žç§'nd¹¿P©Ëòš©ÜMÆwÔšE¦kzŒVÉ*Ÿ7® {o’ßSnË)„ ‡ )€X—%±žlò×9"8CÎÛˆ„#«ÙŸX¤Ôq’´†;1ã~ñ”W¤‰ ÛUtO#Vªý9X[‚ËÕ¼l¸¼DŒ3Z4锃ˆp†Õ/­i ͉„:Ç„;"ë«—ònßGh‹^°|ó.vþ œfÛ˃Ím#_æé±sSÜ@ù Œ7”kʦø2_o†6 PûÀK»ýžBÁŒnÃs_Y'?ÂrF~²#2×JÙÌ$4칃‚Ø;*Ú7²lìcìëÌîs¡1‘6‘¡ÇºÉµY)È´ÌX¨Á1P-mitGALudr¨s+I¦À…§Èpvg¿©£Qø6;‡€q\·ÜPåßÓrá!¿»]:szy^n^<¶ÌîÜ·Ï>¯&åŸnk€­fgwr½×ë±,p8+cÛŸ¾áƒ"#_ÞÝ÷ó}"ïÈe7H%ëÇp€HkÛUZ6ÎuÂ=°’0”sWPHx§o-E©}#2èŒF#V`AÐîé$˜#2ÏîëýiéKUwnL¡'ôƒª. Í*˜‡7üZÙAB­¸•‹NüïÏ˙IJ3®÷gvç—?øu°Ðó1ÃÁ—Y‹Ü—ößÓ÷¯*(ÐEzÎ?KrRß;ŒY7ôúäúŒ"ªEô±Å¢‘¶9y¬d€Q~vëßnóÝÊ€ÇB¨­áØîû=Ù #Vä&_ƒ^ïÕæB}¿Ðª§ËT, ª&>cïŠíÿSãñý%þÆ¿åü¿–ÿ©˜üå~ ÒUÌLRÁ&.•Ãw–@ñ<¢òþ¼ ý˜þo/ACýp#_ ^ß\Rý$uWå/9û üe®¤Ö~ƒòrÑ÷…*¨dˆL}4‰>`Í@S#V?å% ""•äßÉü!C•®BÜ#_?‡/BzŽIËA¢ƒ‡È" Ëí ûš#ÄD‚0PûŒùêãŠiöN?ÚÖ sŸ|éP‡SñiØqR#_^&“›Ó*Va¼¨‡—ÚYÉH~opB‡Ö<Ì£²ýoÔI‘1s/:Hº^áûF¾0NpûNOaØq¦gÂy¯Ý&:%Ú:’rí8?Ë#2jáÜ×ʆ’Ûß*r5X3ú!”? û¡î1~ñ9mã#V$È°¹òùöNQ#Öxm&¤ãÒÏÖ×27ÔôÞì1|J¥Ò«Õý({%PÅó Ì"Bg²Î¾|W§—‚#2¬°&{Bº=Ó°Ürô5(,7×`–‘ÄíQ€ CxûhÌü`Ý6N{#_WÍŠ êß„$7ÎóŸTß@êJƒ»ƒu+å (gR¹¥áçQ$æ‰Aà‰< ®‰ÔÂTH…ÜÀe œG3˜)îô4`vµçäV of!ŽþõÙú'ÃUY ŒÑœXi=ó³*Yè8'vaËC­Í›íLdwkkE¢”¡Ä$£n¤ÿ`Am{„onÀ^(Fõ‰Ò<Šî1ÅÝ1Ô5ÑF?ÁË)1¬U¢¾#_Ý—®2û6(Ø¿…ÏVkŽnÖ®”ñI(Þëz¹ÇéÚŒR¸dcˆÌo7‹6‰–â]æ¡0ˆ\WpkcB ÔÔa"´V3µ•©’­™Àrâ'WÖ!»²7J-qpÿL{öívžG[ :lʧø¨Rf£'¥í¬ßú;dEv<ŒO'ÙM;s¾ÉL被ì„ÌmQy”å-Xg}¶X¿Í[bèºprq¶rî¯U…<½kÚqÀ³2ï¨&^Ú^Çc¶RYQVKCŽ‰µª†OßÑIUg[õÖéLÛt±ò[ é+œq®Òê0šÿ¾ÚÎ;¯6(ºAbF§1 ±¦o\F¬V3Q¨ÍÙîÀ%îp˜Ù£m4Çù -}6.Öȯ@1˜ºÅ¯¦•“vþ·™ð'+ߥ"ο-t‘ù¼ÏÈ«g61Ñ^?Áäž»OyFwþššì ô¼vx°énk#Ш÷Eq|2E)ÂK keÎFuHØÜõœlkÁ¬UË¥ˆ3?f•º'§9ÒbWm]mâp²(#_/# ž#_v4$À9¼ö(“guI½VçåK˜~ûçJÌo9ƒ+y`&© ÛwÌ‘’K3¯YÕ×Fü/FÿÞö|7ò“ÒB“œ¤”Kóå ¼‡¥þ¿·ó*§ÖÉûÇ_Vç}G¢ñ¼€à€„âq@„(=ñ$¨8Ê7¿ÿ‡•Ð«}?%’å;?r‡'Þ/âIôÓŠ‚4]@{ô€s%Æÿ§ÿ“õüŸøÿöÓÿWû>7ÿíÿ÷wþ’¿ø¿ñ×wþ¾~_öÿäåÿ§ý_ìÿíÿòÿ§ÿ¿ÿ7Wû:ê³çÿ³ÿ7þ¯xÿëþìÿ{ÃÂúÿtÙ_øÿëÿ«·£ÿcº¾ŸýóýßöéþŸóÛãÿŸÿûþ¿öÝþÏõÙÿWü¿ôÿ·ÿÛÿWüÿö~Ð#2 ê#2~¿éþø¿õÿõgþùÌ_ô?åÿ©ûÅ$K¢Ÿö#VÏæÖ»HhmÝæ‹‹þ•›A$]§„¿í¿ïº<»3±­jämjí—ü´òp„&¥¦£Vðë×"&Í×\%ƃ‡¯1‰g臉þ/å?åOñ¨Pýý¨Oü^ZÛ<ƒ*t¢›Ÿ÷‡>x"üOSAØé#22*€@ØÍΈÊÀa@§þˈ„¥1 T§b :A ŸûÖp‡ÊG¸øÛšmÏþvž{bbl"¦¹x‹ øÐ2=ÎÈøÿøDÜWfÈ@±{Ù„ýù†“³ìÑ‚ø˜›<‰R6¢ZJ@À¤ÁtâOu¤z¨îœ.‘ d ¸*n ã Ì#VÐ9>7k¹Ãw¸<…Ñ„Ä<¨L›'TÑÍžø‹ÚõíÜæMºtzª0‹ƒ\ìdØHG’`è9òt¦×ýåa¨A¨I'#þT>Z¨Í3.ÏäDjåÃþyíùÑôÿÝùl÷ûûü¶pù îùªä&%1èwI‡ÂwR €÷¯HôkÎóñyú-‡ùñÙÍ÷8§R¨ÿõý·Ï\)}" þ·¥¬ÚÄDÇCA±¤¦@õ`÷|~Ÿ—2ðÏ‘kÉòéðÿªc?,•ÌŽq3Ã/œ×Âÿ×ø¨hå‡Óc5LšT¢Ó£RìÞܲ×͆GÉìæaÇWµÅ>÷EÐ{½ÿ+œ–,¾³"ÑiØ!5#2g–ä?J_;nk#£szi÷¡Þ`„aEdÉȧeÍI%]Å,ÓP©Bå•Ábö) iZ#VãYšÇ°l™ØÄ.CLyYlêè–Л{iÒ eÜH5TÀ6X-xvÊm1Rçw^rdÐq2¶»|8Ù/ØøyyÑ5å‘`2¹%ee_ö$«•ðFå¨Äë #w7i{RùF`7ÄݱPyLU=á³!m×/qŠví)Ñ¥Ã2œßvc#$‹ê6¬ˆîÄ{˜m®äFPèyÑÿœçÓTå)‹#VF‡«#_WÏlØvG·¡ÏæM6!¢^Ôc²²:]ôøCåÊsS\ô%¥±ñ!Œ„—9|ÒžL÷¶Qj¤/ë‡ÿq²¤àR‰©=0Jñ œ­ñ£Âjæóˆ{Àïß”³tR{öÆ#è;á~¯”G4QAÿu&~˜þ~ÕC°È=§öϫ퉠g*œ²º3Eš»®ÙVJf•K*ÌÌA47‘áºNÁ8ÙfF`Pa˜r…WdáwsÑ$Ê*X?á2Ntá„N:*ZvÐ9SfŒ’ò³Ó—3žlrçð;îÚt¤„ªv„ï7ñ9à‹Ã,Õ¿#KbBm/Ɔ†a#Vlò”i ‡xC®c¤Še2nÀ¶™Ò‘œÔ”W¯×±1f*‹¹ãÜÒÂD•Ã©ÝÿDq·Ã÷8õ˜uó¢¥JHLˆÄŠ0d;žC·‘g/“oOþyŒê'"¬ˆˆ¬ }<¾n¦D:ú¬ÚNÞáìX{S:<µ€¦£ÀOBѲ‡T$»Í¡ØI4ìL¥Ã#V&Lu×FæY›··X:<ýF˜YòYW;ûÉê9æG¹$&ß'lãKÈî@î³t…%@ ö”P{h˜d;Px£=…àyn:NrObD'¬;½Üâyå}2MyfVæÿe@ôqBÐ8aó&º«=ïtPY‹œAéyòà”»M[1·oÇÖy^c>`½uòà©E%tSµ=›Q^¦µdN]Ô¤<¢vª¬`¿v#_pÞwLa%ËkyhÔykNÙ†‡y¦„ÞGRÒ¦NH&@:µï!µ¡”v M¨„Ñ#2í T´R®`¦Ù! Ô¹)„®ðŽ¤Ñ ê#VB¼ â[Bj»ºývøäÚ"“Er0aAÊÌCQ0QwÒqs}Áœ$—_lQvH/Záz8i¤ƒÞȶwŠÚM£ÿ)ÀídÊ솩íx=‹û+ŽÇ>{CSUµm:5¡gÌb>“¿±ìæBâ@ØïH±h5ñõœ|4ª£—ÏU‹Ô0‘ê××P(z³´µôáĵ>È•UN³çÄžÛ‡œSi‡€¯Ã¥ªX”¡ZY„h×ç²'²Ãœ0 =T›ß ÎÙ)œm@º*wóΡ™¼ón#_¤ùÞ@Ä=Q˜JŽ0DTcÅÎdÓzDõRå\­±FÔc4 X7å’1F_ƒ•¢M ȃ¼î?ÒµƒºÙàÄx]·0 [zÊf(t¼3cïÅåû¹š‚ž¼úðò]ÍÑa^»†ã\•0ˆJZ)#_‰i 1S¸æu1¡#Ëî;*(i#_9 B ª *D‡ê»º Ëè¢gKø§YßØ|`Š1i#_Juìå“#5G2#V˜&¤Õn= í¦ì‡v'ŸHÎùÔ¶rCöº?-©6ƒ•d} >w#_I¤0žmÖ¤0Àoaµ$èóG­-Ä¡I–ƒâAfSsÁ{€ÐH<ú`÷÷~»,ffÿ0ýG«ºÁœsrå”$`è#h{vpEã#2‰=þž6N:M<¨)Y&¡s¶!¿{1°4?'¾ÉPamZÛ)eÛ6Ïæ'§“é+8>~Ç>Û³Ú{û´î¶#2µÀÞ!Ø„C!’qæ:~o¤ùTûvN]˜>'<ÚÓ³àé_MÏow–´Weg³!Ô‡³P3Ò$gåpaâ,VNI¢¡ÌÄÔ†‘Ç^ÜŒ<ú†äF†HPÐ-ÚÆA ¾˜â´€ú#-Ëh=-|®^‚#2äL˜³å/{â≶þpFf?iííèÇ CÃGGžÂe°nZ©c!ß?‡ïÉ:W€ˆT¤W`E{‰êùQŒ(*iƒÁ¨sµ$¹WÏW½ƒÊï]¼n»“­§t¤•Ñ71#_¼t æwÿÏß{ž öW  >™O—¾µ™î#_Ó{öÅJÏ#VA».WÕ3r”Ÿ]t‚ž!£*Œ·¦œC]”úæ²ur4̃ñâ§>Ë¢Ä=c!RvJÐåuŸCDbQ‚ôbŽæÕ`3|kC/›”ÀfŒÚÎÔ`vôìÄ)Ðì> é!¤9ª_,ËÇg1n©ŠÀª PìÄøk¶yèMöžd.ùÀ-†áIŸt}‹ê–; iv9è:øÎ×3¼ô§’hÛÊjµÍ˜ã$ÝÖFÌeµe%k#VC^R¼DFM榓€ÿÑøc!žþ×}°eèG Âä¢8Z$šA#2Ý!j7=Ê#2›ÈÔå.RæJ‹¿wùÞç€îäñ¼?ßÃl"8*Z‘§8ˆBôG¦’—› ¼«nŽÂ eŒõoaÊyÞg¯ƒVª•¾©æ«d£ÖZ Aºf Äü‰†—Ýú¸)öXù©ý|™ÅÂáé¦W][­¡8Ñ –§œ8#2‚¡í5=)Ù]ÀÂà¦ÚjBÎÍPÃAuèd—(9¸c]‡SŽASö2†@lê”a«#VÝÛ°àŒü€{ž¤ô¥ÈÀ–°‹J#V4X96JAŒI1—™ŽšdÐC¼>þ/ŽœÝȹŒW/JnHÙ8Ür6}G¿·zùº[a½r´„S Î×I·½ÜÞ$#_î×gL…äâL#„Á¤Ò²›¯SñäûbËÇÒOš';=·Ó\GÔç›\Â×b(û¿ÖRËgÆ#2¡C–-ós„êòó<1N×RðÊS7¹‡vR{Öýûáã|FÄ×¾IjöŒ.847 i‡Dh¸ºÇ`‘½Š£rGL#Ĉ÷ë•“ƒlBjÛ#_ å`vÂ÷øú.›E?wí#2ç DÉÒ§7æÎXð†céòùû\‚›gvŸˆáôì™Áâ"sLbC¸„K™ÖZäAZg»Ì8¸h¼3ƒä!µ­†J¤º)<½'¿¡XeÚ0#_=¶n]ÎsŽ0C®„%¨.A±å)8;8ÚhuÀ±Ñs†{JéE£@†#V°À#_Ù­ª‘dåPƒTŒ"íPY)w:2ûp<û.½UÃÎÄh¶d¸6×+Uptgµ\26UÜb®æÚêÊ·NW¾U©¦~˜N(Кãl{ád-ƒŽf×Â#"²ÒœRá6æ£dÁÜÛ¡X2BËå åÌ*%hŒ¸#Và=ïš<ŸXPð×vÊ#2oã!4D:ƒ•’áÀ(±g‰ºÿü¤(¼ÿ৘pEÔàùØ.'QÃ0âºV{/©A1^:áô#òŸ6&r‰¬æUvõµ>Zƒ´û½âœ™Ø8ùýdîM\yCvòxßxýšïÓµ¬Nbç$Êp°‰³É6$!Wb«°U-Îa¾ôOÓ¯k¨þ¼Ï"ÞAruç<ÒzI;6:¡CO7M bDTCQ¢ŠÔ4NîmÎblDóYET¡ŽëJýEÝ”1yÊôU’0ìȼ°+M¦¤vGœö']ô‘ê’E7°AÆÈ °G¿ýž~FKŒN•Nr-¸^ˆ#2ãÃ9ÈîjfÞ;3Ç{-" ÆÚôšTÔú|ÖŽDkœÜ!=J[ q ¦}??õ³è§ã·¿kf!GîÃÆÃW$òÚ×VÌz MìƒÞ»Š‚#2Ϧh3^%õÅ”=£cSˆ¡¼ID~¼PwŸ¦§ˆõo½3d;9ÎÓÛ¾ÛÝÔ<µ5±î9pÔ?=•±î¨W}uê{^#_yF çE À‰ƒr9#V”ó1¿&º¿Ù툌|²¤k' |Ï—±ÛÜËä ö¿P°íQ•Óè:›lRRCÎlxH44ûºþ5ðº‹*ZÌÍC†ŠmÇŸ+}ÇR#—mUOu~Òßo=ì'´NßE@ž­ŠÔC“Ô_‡}Ë#Vû 3ÏÎç aï{ÅóŸÏ*©ôp2u`Ö:¡ÅRïêqïû3¿¿º‹#24ï(í²PzÏP\ý,=,,=鬵?j^$%Ñ»“j½6‚ Ay@DD˜Uâ+ºÚŸžR¼¦te€dñJýl†&7>µ°+m;^GÒß%Šœ6Ùöfyþ}QëGÛ89QÐ<ýÞ÷˜’ ¿ø@×r%>~#V"zSéÿs<ƒdÑH|||Ñç›q«ïÙ;¤çyÁCå>˜¥>¹…äËÚqï_o‚i˜å1Ç/Ëý¯ÿ®`#2#Ñ5”A§Aÿ™#2#2Ÿxú¾¿¼}~_víxĹ~ÄãYùÏ@77>>LþW> û§%giˆýf °þ”b¶.nÜ9ëd,5a³pü5pO.õä(Ñ%TS#±@Q ‡`›o¦b."x‘UáA?ÇëK€¨¢®ðï÷ò xÙWë}ÏŸš¾:yùTpBH{xêÖýcHzÀ…¼ê‚âŽÊl„ÝmâNv¬ÊmåP- xEˆß…FK¤ßu2t(o6\©?;¤% ^ìÂA˜Qÿ§àÒrÖí`só®ô휂©øÑ]½4îi-n#2#2•{iAê:6ˆ/ÜýrºÔ¨{˜EÁÁÁÅ#_«Ý›8o›=Ù¸#23:„xë±ðß8õ¢…šÐ*;¤…<ãZs!„L@ÿ˜’ƒ¿ƒ¯LB™ïØ0u°µU-‹žNP§Ûk§`òöDY)¦x:¢XÑì’Ô†‰ÅDòs#VæP÷Ž}¼Ç¦Ümu¸?#Vd„Æ#VŸÕ°~ONœd^©±&«kž›{;Œlí¹Q¦¹ºÍN\­c-?–'#j™õ¶˜IƒñC’¬‡üÛkY¶¥Ù377”P#2­jzˆ2²çæˆð‰ïû}•ÿÇ%:_ãu" ë#_ î×½´#2;ï®ÿ.J:ŸØ•Ùê×Ö«®@/Á•¥ß‹ªfîÊá“€k;#2Rµ©?ÐêíšI2­u «im¿*3ä»ô6ïÈÀFÞàçF`Ã{)²ÌìZ\©=Ãè (è;é^ÇUã”°÷<—ýRUQîVKì2dÄp½F´Ö-åJ„ÓG‡¹{mˆsLÑ~æŸ÷œ‚‚¾ŽÊ³fÛKö7{!ŸÝŸã=fº½w:¼D¶ñ8HIcˆvŽ¨"#±‚(–÷€š†Å’5ZÞáûìÌøü}œº˜"ƒ¹#_»¼®Š÷b÷‹ÓQzƒ¡2j #V‡ÇÞLªÌû#À)jÐ#VÐxÿ£÷P‘#2#2ŽôWËÿ”ÿ› €o2#2vTOÌ¡&}ˆ£QùŽ³=j 4ÏÔ=ÉNÌñPˆ3½Ê21uý¹÷ç²È>~p}é¶ Ïtë»YPçªìîÜ&j]Z¥ˆöý[nÏÀ$1®ìÄ·òƒ5\çç} Áü5ô;2 óÍ#V•×LòaZ`g*R2 3ä7“g7±‚ƾB³¢D;aÙ#uÔ-È®ß`r™˜m·ªË 6$¦vÅÏž†jÖÕtdfãÃnÑ;|ývIã·lcƒ¥»îîÄ#2äî©ÕöùnžF¿ƒ™Á÷|µí>ë#_ úë¢Câö_~>á>Sø5Bi=Q‹)¡óvúyûþ~_5&xb‰¡"ˆ’Ù&Sa—ç]“#_šúºnIú$;>à;ÿï~£Õò)¹ŸËšÏ@h( % .s  Æç»S˜X[Œ´ä€óOÓÚ»¯X&– 4¦è¹ñžApÊŸhkù)ëÿá¶ôN‚¡‚bÈ+¡PNâ¹ëŸ÷«ýÃ\jy>Üx곘ÊWÉ–„Ös¯áp‡cöÝŸ›¢iâT™>Ê>Tí÷óêcò––9Ž¹vƒ2ëVÉÏ‚‚@ú΄h,P4#ÒFZþ-ÔÄâU#à$¡ÍžŠ(þóóú¿#V5®ÞŸ#Z¾rþÅ],¶P°OÒ¢±ú!@ø ‹a¥^ôb-ჲ<ÄTt‰Òê*G´©#VØÚÝÖÈ”(W[]Ö>Pò9ÈGø>þ¯R}ÂQD):ëú0$Ÿ…JQŸŌ}Î$êWñ~YDóàó, û†BoûÁ¯éH¿Ù¿áôü¿Vþüü ã#21,ÈX~¥›Í!~7ëœD¥ Þ ÎÛôs{G$­¼„x>„u„§Ñò…›Â€¯¬ÌÑp®û#_c|ö¸üiöÉò“fÅÄsãù>}¿=%ßò®E, ¾Á_â”ù >`™ãž¡åîΦe”º’Dd€T¥YÖ{깆"ít!O'pB?¹GJÍèPâ‡Ê?É'~ÄQßä^±ÈöŠöó÷S祦?[ü³9.pŠ$Šö‡ÄÉÈ$"'©L6ôóôr¸83º?#2è¢P@ü¨WbGJ$ƒ¿ãÿÌ<ød7gçMâ?d7:ýPƆôë€"õYÞû÷å}uŒ#_•õêƒÄHEñ #V[‰%#_0éÎ3]œÛÏk„~¼>×1ñAäK3 ðæ4;%$æç¬37ûTÌkÀÍØ«n6ïÜöäžX}<‚ ¡}>Mþæ$(%BüÉ~ãm˜Ù›‹#Vhò÷‘™˜°*=¦‰TLÜ©ÃÝ’,X{¦#2¬ ›’­åݽ cÑõÚ®ÁÐøÈ|…qéf‚ÂøZ¨šÀ#ÂÕµIúµÍƒ’_ÑÎظk´mõ¨@<….Ü7¢lÌ#“• Ðo‹ôxaËß& ûÍ©#V4Dˆ a`m¤'LS$4´å±'îà†Ã%öŸíMy¥t+œýñbK¶ïć 6 0y½ïFâ£IñÛ9Ó3#V]Ñ݉ʷ|-[LË‘wù£tƒ2]ƒ¶ýÓ¨!¤Ž·ÙkÞâ³åNßÃþŒªƒ×9kñÄðO¹=óÂŽ®•Üúe!#2{#V='?¥?r!U†×üÑuùÇA¶¶‚VÖ¢%i~Á¢#2§˜…HÞ6`â‚[ÁK°ã–'.üê(#’#2,ÓئbúD_<ù’º_^ÌûP3Ä2#bÄÑ‚¡šgÃ3#V½MiËÅÒ**B.a-~7†jÛX?âæ ¨òWË?†™â[aŒ³0ÎÖ5è†ä§¬ƒ‘²†fùÕu«´Äm >ø½öCr’³Ön}ft=¡$Œk­¢¡Ð3Ü„ÎFu±°™Bãž„ÝEO ИB¼[ຎ99W8û<øHã³é¬bCç齡¡V¥‰t©p5‹í~¾#VEQR i¬äökNî‘"$û¼ÒgФm##V‡m•µ8€P-¹ìœQ_¬kr¾}z­[1)º}òŒC1XC31²í¹øûRýÞóïÜ€’=ÃÔñï„DD^¤R½Â/3W#€Õó"_÷#V„&zŒ©6~ä]–ŠƒV@j¡Ø6è0vòÞÑ»+ÍK=¯‹±'/ ’CÏ–z:'žºÃÏ9!/¾Ñ.Ø¢rä%Š8"u#2mϲ=€Ö@2y*¤@L¼˜¿n©²LÐlÈ|&÷<¹dæLÚ–8‰ (ŒH}n¯÷v¨þ-z'Qã˜7c5åÁvu³3#V'í9E“d=°Ã[Mϼ=á²íHwƒ;‘XZÎrIzT ùc h»'¿®Î  #2Û8c#5_õ#_[@ygædDd#2Ôh¨ƒ,Òtäùa<0—”P#2À…/@VïÖ“æÛ¶»@—¿? ¦A!#_#¤vÄŽÃÌ=ê‰ì‡ü;ÎâZðÅÿÈE/ïQŒŒ ‰oºhlGÇÞÂëø~c=süÞÍ!#VÎÝçð÷wðyr:i¨ŽÆ‡Å9«ÕSm­Š(“ øA$VÂɤèþiòÃqùÏÓA?&õ€$m)žrÂ!Ï:„‰°åи؃¸ ÚùÍÅrd•ûl¿ ÀH8<‚áhÑ‘%ËêÚ˜ïÝÛ‚»ü{&¡™õt1×™‘‡T3~ÿc>#VzÎ6j +‘P‚Qÿ,YO½z›Åñ.IÁ˜D9œ=‡ÐRPˆq#2‡²…ýß•ú9 ÂÆ¡FùYþ|h =×: ïÖƒë)3îz#_ïôb-´¤Š€ OòòÏT¿2á¥F4‚bö/a€záÖ,çþÞE˜qP•çHÒw[ÄÓûÁ>&¼´X$놲nÉr,Á~÷°ÁÊHädƒr+2êH+d~Jº.[ú÷Ñõ‡û2g™¨<j|¤t#s¶ª\W‰˜Cüß[L?Û¿¥V—ÄDN ÄÖ ¢„0ç‘àyOúÌ7uRá£KíSþ„õN–VÛ,ÎÞk9ú>+ÆKì>ßeð@““zÔ8D¼Çw<}œYŸîïü»Ï³õËTRíz°uÌo#ë×¹G¢ Л8†ûžú4–•ÅƒþåsQšhgÏÖð-ÑÅÂ}sðµƒúMÀ‚’âX`·^枦‘W ų¿!c[=#õ'L©ÒÊßäô•eÛ(ÅpñBi ÕÕ~­±K#·ÇåÞðæâuuï b_åú÷–nuXÌTñ‘üs‡ŽEþW¿¦xÔöÈ5ÕwBP“ä$!ª#Vpr£^ˆô¹gÜÔΗY!¸·Q˜v¡ò!Üêw+Y—!ÐZ1~×p«áÄm—Á$ãøl!ÉU#_ù­+§=:ßÞÆ#¯…pcÖ ß®G'n}"¯ÑɉÙñ™‹ü¯Q½ z;â\'G î²x¾ÙäE#VÂñ&pš¯!œVeçı‡åþCCÎóraíus 1h8–ãñòÑÐæ2ìøMÄí*JWïíŽiY#_óðÄ|>9€à§";ÇΕÊÙkÕ[ïøq#VÍæì½nåuÚÍX„J#_d#_íIÊ-ùäÆtUZy7}3W»k^°Ç1¯ÐÆA2¾<‰Þ{Ÿ°‚m›ãÿhkÞÏ«ý/ػϓ°¼ BŒžÛŒ<° ¨ºu÷(rfk5èãò˜ êW‚´F^‘H+Ë‚.£Xš¯†Æûd¼ß}A³#û'b8t=\CŽ9ùD|0o¾ç8ô]ݸ٪“ðƒñ’_UÏlå‰ÓÄÌОåz>ëìqçeØ“¢ÒHCmô‹ÞЗE1Õ:ß®º¬×@‚1I9¸–èMHÆ~j0Ño‚¦ÜH)Ï„:?%„h¾ìþ‚¡¶ÔbmÀÖØÐßaù¸û3]W_—˦4åE²sd *( öø¾§óÕ÷øé㮊앻x´²döÌo^R ɇ1ûæ8(# ¡ÊŒŸË¨o4myÉšþßÒí4/ŠõÛ¸=Ñ&‘óÅ ‡3ñæêu%#›#2ïx#ÝêP<#_^Si^B¯±¹¤Thå"ýl8ë{=×–j0±2±Ùhšøxºì…Š±êŒFŠÕz¿¦M&#(™q)CßàTŒ‘œþ_Hûµæ±“¢¯ßUΰ)6iEȱ{ÇÅ3Ì”7êúñŒ(T˜wSW–ÄxŒsŽ¡§d¤ó45js¥–Q¡š&,ÓÈ d9ÌÆýQ§Íø:‹ŸhŸ7`„Ü?ƪ¶­-¹ô"-?‹%.S÷XÁ<—-û6Œ8%‹M‰R‹c4J—¨sv(æeü)#20œyœ’¯çÚ#EI9üµ&*ý£Ê ×–2r‰šýA7„tcjõKlÜ?+ºÞªýO­Û¯+}Ùöä Ùí*˜7ûa¢ªTL ƒ=?Ó¢A~oÉn~Kó?‡èÖ¿Ö}ܲàæ}ñd€ÂÖ„4T#2/*u¤•ƒÊ)—"Ú]Ã7k ŠNƒù×C>ÿ_¿8ú¹á œt¹í@[ú5¤#õ‚4–>Ùê<“EpL¾µ1ðã~3P<Ùßó©— ™clyý‘´Fdïd…¥¯( –L(ÑG/„@"/Ø9Ýaž´³o¥Éaà‡/Á„ÓÀ.D4•!ÁTؾ&“ ˜.¹6Ðv£yùÇýMmd‚;‘{ÏVW˜EÈì–Æ~ùŸ'¾Ï ¡s#V´æ¥¸T}Înÿ­f“›¬lþëq7ìü·™0mñôvrÅÊb0¾ú©_‹¸ÙØÅwÞÍ»”å˜åH¬ûq™gøŽÁiº]¢¿qöñxiÉûýkR–q"Þ"vXí1Ãc»€SãièqÇùñ8ÄF±”#·ðæ?/ ý‘£&½ ;ºWõk_MPÅ_,ì\©‘-½1d†‰Ÿ§ÎìÅÆn}ZÙ„I’¯ûŸ9Ù:ß—¨—²šg^¶Íuõñvc­âVIùÅêÞ[ÒsI¼ôKÏ3žS¦?ÃößõAMŽ÷²—î>z÷Že <òà…Ý1Q… Úê¹ã¨Ÿ£°b½à}8Zfêf“ô;1êÙáÇ.Í8ëóIKÎûGîF#Vñ§L’ppr.qW;'¶ †‹<‡ûÿ–¦aÉ~å÷Ôkôb=½.êéù"˜Ü267J²&db¯ 2{#_¥¼Hd¢|ôña “¬®èNçNðP¶ÿJ‘îæéD8u¯¡ÜR<#_GíËZl[û½–ÿ;íÄýP×âý™Íȃ© §çQ1ª¥‡Ì bRW/dìPžÁñÁ…ù¸l³54YBI9ùþ¼þ“­8ç}ñüµÓe×o¦q¤'úaÖD’¼xè[Ƭä;áá‚Ñ¢$#V£O½Õ4όϣÆ@_¡•ßÛüë‹Ò KÓqýðžÌ© ¿}Ú¥!It„)áVéñjªžÝôýΫ6ª ˜S›éöóù9sLâ·"ß`6úšÇ²ÜHZ³Jµ±Ï›ÎCPpú=ØlîuÎj|rtù÷Y'÷ÝJŒPeñf¶Ø8q”קeG†÷™”…ÝG›¶„Ýs‚Ù“[Ïߥ[µû>ýñ!ÉF$x4(ÄÿE_·üêó÷ÿ#úíQÿ¦T”ÌÖ#Vä3&Ìš·å¯Ïð#VmÉþG~=¢XL! {jÞ¢)è=Äp)#2EhVŠ‚T y‘éÚ¶ø¡6￶îƒé¸rŒ¶`)nbÌ{¬­Ùãu×lž/…7æ'価QäD‹Pu*‹®Ö€ó`ˆ¢jð»ÙZìàH†/ã¯jùa³¨Á¦[V½hÞÙ£ ãŒÃFYò&8IòBÓ½Ÿq®c²Â6\sß[÷ûm´A–ý›ö¢Ò0H¡džâóÙŸƒ¸?Z3±'ÅZ22Í“ú49áÊ Õ'êO¿áªòW–ÊyiÕ±Ú_9|ËVM‘å#£#Vé%5†éþ7$¦ó#V }EßÂl$¡WKV~ؾÎÒz¸ˆÁG%`‘XѹµfÙL¤Àé*R†–ÈRAn¨+e´láÃA|óIݘ{Z\!‹nrª’ŠªË+Ù/ ƱúÚk&äoNj,}n2õq‚m”¡ ¨ˆ ÎÔKNÑë¹é¸QœAì>Ȇú¯ÇkxE¶°q¬.ÉÁzÇ$~œÔ[à¶`ô "#ÍÚdå!EXÆ»b˜ID¬?Âs‘Ï`F¨°Ùo¹ÁïæYÜã“YÞw1-tÌ?Þ$lÜ4Iüðq¤§«!ÍÕ“Æ›ågž¸,q¾0¾•áÆñ—yK|F柋NÌé.6ífò´JD#_"W¡oÆÎV¢‚¶ Ú6™”rBÌ6aë*:Sr²JM%SY°A;*ë#_¨•”Uœ©Q®5ü(÷¾°Ǧ팜JdšS$0qŸíÕ÷ýù䔦6+‚FK­ò˜Ô‚p5Ô4AKQÑÚ×i: çK•A3±oÝ#2Èq+Š_Ðzvê=#ïû¡³"áSøÑ°…€*Ö©9ÿÍ¡O¿Ýôò?Õè|óö'äÆžNbχ¥uHT#2Šÿ?¢vl!ú7b°øb‚ÿ#_ýš¨Žk;µÞ8žu僺äÑû‰òN™e^’´¢…æ G¢™V­—&3òŸÔSçL{»"Å΄Ùß.™XXØó䌢›wa×ÅõÚí]Úªoó^ÿ³÷ã¬Â1êïã×®g x¨/eÔnî<'šìs.ŽnºÁ¼çéšü3Ëû?äÄ>,“ØÀ(ÿ'ÍóÝbÞ 'mêŸk~KèÀ|ôüO#_ZýÆ/ÝMAÃu~Üb\¥`³FWíþ?ñ{´“ÿ£åãqÄÐÔÅ\ÂN¤ú>0ð>m.FƒÑœg#_ªkI±m±ˆ˜á#VF¢xò(è ïÖ3IåiAo-¨(NË­‡l Ú$¥um´OÃÕͽiÞ£^¢¼’ãéÞßìZ[cš‰=jÙrù$b#_ŸWÙˆ™ù=>T`m_jìwO³õîèûGCô‰þá¨þ9@¥ïãÍè»-4~©ÉWýj­Íš®klm¨Š¶-¯C’$ƒÊÍ~ò6}#V7…P""#VƒžÏôòûGøÕ7x Ï›ì#Vć‚îNV·ì=n)#"¬oU”€ÿì›Gùí}û;¨ÈÙè™ÊW|§÷Ãó:(næ@ËðOÙâNoP¯—òÛ¸|ãw¡Ê!ößÎÂZ¸'€@;J!ª‚P"mo »Ü}‡øë=;ïÞ˜þíkßSçcÖ‹tB˜zh0…€¨)ÔBY9¤;¼Êèã×âß…a–y&DûXUœ„—Ç¿„åè&MÛŠš ؇ù±ÈmžÖ0­¥õ›D#2Íw§‡M"*Õ9‹ûCÉ4;'öžÃI_Ü@ä„Éü&Ж#_[í|š¼”D¶³vê¯Æ§ÿ°‘ÿ{Da_ý¿þ?ØuÛö»†E ¼—õWæ.mtá~eìÓ(÷[íy+u#N£.G”p™˜’ìØL•’ðÑD†ï°SL:¿û>-›ÕšµœŽ9í. fs‰T Å#ʹÖ\‚C›5²…¾´Z44Ä™ ÷úð9BwÏäï´@P[†],$n0p!¦ Ìj 4ÒôBÒ[F¦Šœ)ç–‰`¥md³<¬hIyXwi0‚#_ˆc7ÊÃÀr@vÞ) N+1ø—Ãï6SÒá~/Ïí”ÏüWôùÀÒ.nmYpE÷`,û‚‡ŠØwJp~d÷­J6ò -ŠàåÄ+*.†á¸:÷š|§†‘Œný/›ËÚ_‡øøŸ/ݧÚî“”#_‰‘%=t kå‰">rŠ¨f±`††6 œšt48±¬¯dÁsVU*-‰V™ÿ6fQרkþI¥•gS·*`®Qœ24пÕjL3~„84ekeWÀ—»äNîA5`d9Tá:Û;"Ä׿®‘4È>Ѧ Ñ­Tù{Ô#äHˆhË+-’4Ó‰š×%rSAj?úbñû…%kãJ* H¤(:õ~×ôì¾#ûFÛµ#2'#ù='™î3ëøkc™'Éøáßa®"¡Áîðt9‡ò`3æ½ÿfÇߪ½¼¿.aùÿ(§Ä£ÝôxË4#V[­ÂLÕŸ›æÙòàÓ~xƒH—ai«['ìAx*ÿÜŠ_ÀëÇë8÷Öçc#_3­°‰F€Ò!õ\ˆ?cYû§]ÍŸ;Rž))ĺ×4bâû¬&KW\ÖïJu±pb…‚ÞökõC—ÉÌp%º‰vy Ì!UË«}t~¯ÇÌ'O]–jGy}JŽ­¦nd’K>é8 rXF ¦ùO§#V‘ÔK !óa²É‰¾l9ÛóÃH›²#2Úð0·‰à˜  d$Í`pˆ@Æ!‡ å½%×zùõ}#V<Š o,Þø²Ïƒäç)„Ý‹cüžÒÛ“ä­¤é&6Íg‘g“DWw¾›ãÛÓ‰ãŽMçÀûLa›qà Œ Ò}’ŽÞ]xäé²Øºþ¢Aí„tC±hÄ< [JؼA#_zÿÍù÷{???”}>¡äôy†ŸèÌ6š`1û“ó½ü~±Q‰objù}&Γý‰Dï5¦ÞQÓñª`Á"³©ÎacŒg/¬åÝD™ zóÄŽxþÞ»"š†¶œø±ÔŒm¶È)p4ŒFyŽºé§üÕϵ=]||ø|¶2<­ ךøÜ+tóÀƒŠ©«²4#V牚#2€‰<8:YÅ6ð{ŸÝüC/ZÍÇ*ü ¦1‹] ¬^ßëú?ŸÓü$>/ËóTX–^©}¨ŸÞŸ¥,}¤ó©?äDOîQ>P0@ÿF ÔÃü+hk·ÖBc‹¥)i˜ë™ÿ\5ìCË3H7+°Œ¿.e˜Ú#VjÿcÚ¤ÃtwX|?â­#2:{RCÏÌñ–(ß;{ä8 ¨e!ƒƒ9 ƒÌ‡aÌà„ ’D!¬ÿ=­F¸]¯Qè¼Ì=¸8¯‘ÃßßÉt160l.JU5jdÈ|…4Ý(¤PP[«O÷V ®nAp :ÄA–?­}d#V k‘3ŽËÞ$ÌñöûN¾ UæÚ`#²ŠøžÂîTK¯-ÛȘŠ©ô‚/Úœ¤¤¶#耑° {Ü(¢‡=¾#_í¿RÂ1òë‰óªhy!±&ØöϨ‘tÄÁoª»'û}AË„ÝD}Â}Ÿ™£Ø {€ø(Þÿñì {tžN¼þ³Èi:Qçë K`˜ªƒ¶­$² m¨<&²3! £Tyû?ëöðýŠFúôÜUüÜkü^JŸÁ%~ÑIÔä•8¥Cý)_]dd}!x“ù¾½ùµüü”Áa{4ˆ`|Sâ!¤9O¤k( ¿'•O+çõã‰5€oŒÏ™àCœ'a™6!ÎÙVïׯŸt3„†fÁ潦.AÛD&ßû=ýÏ.½èžä>€zûV9#V#_{ùª‰Þ/Ìz™³çÿqzl^U};`óÆÒ=Q™§}L¦ ©âJj ‰5…¶`m:›0zözÓ@np”J°5Ki)1åû¸Ðû[²¹!ßéú«Ÿ‡?wqŸÛÕ†—ÏyøqPSäùö-&©<®®¨7¾>é~Ã’›¬m?N/ßò|ß„Þ¨=¹`ÒcÉÄ']Ÿéˆ¨N-‰S\{w2‘ãˆ$hÖøçg*úprV" Ê…Š3ì•L T…d÷}ð ¥7L È¢™rû>ÿ´¯»ßýÂÝdíç`×ì†#Üy@¾¶wñò~°¢cÚ§Øa½jèNc–ýa,#Œ‡eR#_?°o°¤°a¬³9bƒ÷@ÔÔ?G™ô̘ڀ¤›ºËáÏZ½B`x_Pk8.Ç3á¾/ú‡döòCq4O#2a÷@ì¯Ú}ÿÔ`%u^Ú7¿Aƒuj#V“Dš p#VïMú½¾>Üy&¥í„8}iýà÷+¤‡=œ»\:Nã²ÚÔ=Oц€ß¼`h=K®†G,ª#_ŠôNóNUŸ…Lë4ÚRÜ=Ó²T“ {Dè…ÂvvªåÓ9:û}¬j¿…$Þn‚ó@¤Gö“ãó¯Õ^ÁOP“È“cÀ='¬½á:sÞy ä˜óöÛ|ϵ;e{Ðßp9tý¿;Aɾ.ÆëûE©Æ&|oÂ8ý¼û¬ÛZ–žž£F?³ò‡.@ÁÅMô¢0~_ñ°Ñïô.èATP`°—¥€YïC‹¥D óv›ÀË pÃå>Á±”gF“P! ÌÓ³ÜÎæµX¢Í¡‚;”Tÿ8¹¡Ä øo æ#2¶ u’ù•…‹@*IÝ|Õ?#(#V5EB¯àç~ËÎ3¶½u8|czÔåãg’bSBR1QY¢$ØÝxžð”öJìk3 Â0„äºÈˆmCLò¢X( åÄA~Oñ[Œj\%EKLj†›Y˶YXXðR…DÞi(9µÒøÛXxEý´~¼@üz(dŠ¡:£K†7^5MÁ#_4#Váûe^þhäÔDJ&mølh|Öô5_eý¸¨}ˆÕ0¸qŸ¸Œþ›‡ÙrhŸäýÉÛÙWøè¦|t÷2òQû‡ìÔ†Iù^}<§FèBìø™#_Œy¦#_ÖäV)’qD(RÕ@¡û#2¶yE,û:@û~~Olm bSF‰všÕ=þjs:Ïÿö¶î¾HŸJb‹ÐƒíDel«Ä=¿Ëü>PYÒ˜’©é©88è|üç¨ÛP¢sØãêÖÀRðG°¥×øÈÃË_àõ{Á$9ןøÃ&kIâ¿sý/˜• c^B;ø‹1ÛJ€­V£k@³½sà'dÓ ÇÒDé7ÈQm°Û6¾E³Y ƒYk)²¦ºgbL#»&É@ê-7  ÌàÆÜÈ°#_~´ {€ù6¶Â=@¦©Ÿ‚€}¬Àmd¬#2ÈŸïäÀ~Ä!áMCý“HŸ¼ô-U.M1Ðȉ)+ô~,aa…A÷R´°¡Æ*NÔìaŽ,E˜aA[Æ­uó“%›Ìþïë͇á_8tf“»,UêÊ7§,´3#Vh¯Öµ[MÖ÷#V>¯Tœ™ ²‡c,.Wm±ÈSeDFM’:õ$’I›¢ÓXž6)—ZÍc¸Ûš“XªÖª–·Œ¬À˜«á“pÈJõH9I‰›Pe5­ ,CC0&3T´Û2=Ü«2b! u”cQ ŒÓáj6Ó§}ˆ :óç­‚ñA=%†ŠA6#2POÔ÷÷¾éÎCÏ#p˜yŠ$lj¦xþ}E‰#2(Š¼|Ë'ä#]¸¥,Põçëçìõõðì·B(ž4€z¬öô#2$?õ!À/6·\#2î(ñL¶s’†rX!æÕJŸ†¹ þö(QEXç\UŠ9ô?¶¨ÀL ¤Ûîþ_ß°9'Ÿì’b§‡€jBWOoðxhDÊZµ‹Í`<»ñßí·!’ôÁî‚!¢¨¥5#_$ªI…>>ºñ‚›ËÁž¤•w·ŸÊ’â:,%qo»AÃÍ,]vØkû±e:Ãf€‰ˆÑ ´Ô6¡‡&”喝DèU—|cX0c "„™9Š3s#VÚÌT¬Ûckœa$’l$©9à”ü“nÉw‰D›cm=2zÝb›ï¸ËÚè/ÜŸ—È¡Prøß—c¬ù©¾üîw¯&€îw ¸ÞIðU,(ü3䛚í=Ø3é¹ç•€-Ô9±¾‚ä£òW@/·ë÷XnF0‡Aàöo¡^GžÉÛçߤx_‹È=#2°"Ã.ìÝR»¬–CR¹\Ó€)ªR|®¿öõü˜ßkä)f&$Sö™V]Þÿd‚×ùCwVh É÷Qe*÷8(ªE!K·á.Øh}ÎÃTÅCZ¨s°vº½ÏÝø‰¬odÛ+C±?×ýâ¾4`d vm\½Ø„>ow¾¾‚ÊgÉE~#¶Á ÉŸØ~BúѶ©£5RÍ* ó&¸´LRý_>ÞGY=æOÚËAû›xÛµ :#VÀCŸ°9?O{å·n‡nž¿Iee([B±±œlðCŽè]þ­ ¸—c›±;6×@?¦P<  GswšhAÚN#V¬?4ô°xíþÿÒðŸGì>Ãϳ ûÇG¸<ÜDñÝpñþ!DÌëúcoßÿFþíÏjþ‰4ûÇ+åù¨9Õb¸û¼N_kêÅ]’bæ0”R¼ù{p_ê=ÿJï} #k›hMéWJ×”E~•{2¾Å#jƒPÏ!óôûÄáx×?»=ɬnè/ëШoH%z¿§ÞÌ9**#_’j|€ý<¦ù€c¼=§éÀH@þ(#VÕy›Æ“­ß¡×–(}‘üRŸÕÇç¹ëáu Tì%!Há~´>¯§ü·ylýï/wQ+þ3žÂÐ#2P¯zèa¡€+Øø‡¾ðñ"3Ùú8?Uül¼þ£zÔí ó47XåË#2ÏÌwõüï†Î”Gíäû#V®#_½ƒ#2|‘Ý-óöåê¹?G¡ŒüÝ…d:‹k”I¤ ™ ‡½ݾ°&‚ð(*MÊcz"^/#2gìDåæìhÁ²šBõ~^‹²ÓJH´dyÖ ¡ÂXd÷xMŽ–'´ê±'—Ëåx?igfI´âÖ?ÆÓü§¸8"ýã…!ù#VÎ. þݹ¸ŸÄË;´Óœ?qÚ@Ã'w ü@#Ú‰óAï ]’g`‹×™Óžvç½#2pgTØ1~A×è6 IVÈöwïô c†r†h>Üäì“»>X¿ ãtèÆëƒ#æeoòÖôÈ”E#2¨lÆ7Pn!“V [%bØŠÒ‰–R~WÄó!Påð @?¶r „9À#2ù!P‘¸ù$'Û½lƒ7Èþ|–ݬÈÞ#2Ÿ«2H} âu£¡°O#2ù•êq!É]$ Ë#2å2Ÿªõ~pÅ6ÅEQDŠ1÷æÃúƒE÷«A›7)$tý¼`Mñû:Æ'õ´Â|¶/×ò#2.#ßÓûGDI>f|p_¢QëuS<ý$ýU4̯#2½XÌ~²¹b·+R¨£«’_àm3ë^Éø׎E_y¨©Z]V .ÆT+é#ÅE`ë¤ùË#VÓ«C9DêŸÑõ}ÅÿödLvÓÌOcD›Ü‡Q?8;‚é”éG–*#_Ò°þ(/ì_¬ãü} OK€X’´¡€¾ß—Ö¯ó¤¥sP~>ãáõhú§Á3;ŽïjŸF“x?xâ=eÈùºD ú |ùF~Ñ°â)‘­O@,S˜tÖùmlчf+Op“ñµlZë6÷@Bë×™Öøãß‚Ox#2_‰ŽvOÏ&'—ÍÆd“i˜ÐÖïS饭 ’s‡o—Ðò;I¬ê"Ã$NsYÉõ_ÊÇR Â_Â1¢õBaEä>({>;€yëÞ<ÅÓG¢ì”#2ˆ(Òø'Z[÷‹Ç³Ìj÷¼±Âx—QókGÝd©5Þ÷ªz€Èú½o#¢âÄrD?f Úzí!®&©©¸#VŸXQ•TÔC#2 ué.O‡ìUJ…`ªh…"òþŽØLÆÕEŠª%³ž¬Ç=Å´ÅHÉT³6O#2Ž±dØò5ÇiãÕñúþ+Èáòy—æa¹¥_nƒ¯Íö—nY"„_§0²#_B¸(´ÇÌs!á<Á=B îf%Küž[Ÿ<ó#UÊ¥ËÄ´»äyxõ)î—Üðd”çáOˆ@ößq¨~¯Æo<§ =$šÃËÓßÞŸA @êw«îL~>)ó{È茑€r÷Óî>á×¹¹Š'ÞÞtõíü"|¾°¶h*@å˜ Çâñõœ²S¬øX#VØ)«h7¿M‹CQ£Q§ŽAN'°*J-@Ÿè`,ü^ƒþFˆ;¹ Fˆ˜œ“üÍ#CÝ ,-ÿCDi¦÷hƒ2êhjÚˆ&¦’‹`Úo70`{µ(%²^œo)F!ÑÍ“÷#ù°õrô’;ÆÀIèshs‘ã€ñ¨óÙ’œ*“ù< ¡xOϬûEqD…qp«Ø|±‘Ƶ/üÖ)†ÿ¿?¹»€x-Œ¡˜ã÷£OÒ†/%ŸÑà`äÇo†wþoÒw¿#VGßÞ"Â3îÁ ÃõéÈ#_¢-H”·÷Cµåôß&Ÿ«y$à‚c£·‘,Wºèo~é’L¼·cîM‹ÿ^þÉO¸üDůŠ­#1WäêzWÄÃlÄ~ðIbA#2"‚çNn#V'>x§¯oß߉œ×¥'ñÇbpYö\JA@ðT–øz_5ý ,0í#_-#_€'Áæ3èø#0.ßdzÓ:÷ Êã/覛ÿo±¾M­¿ðñPwµƒ4Á„œ•_Þ†­G÷¦—=¥Â~<í“ùìÙOËý‡°dR,:Q²ü¾¯~üÐX”°~2†H7b3MÈ7ô½°Ç¤“8rê-ÿT¶pÓœIWéjº>#Vk94MhÞÀñ¥¦3+Œ%:z' £}ðãlÔ”Ãùþ¦‘?d&ðº¡#_ÿiAóË“ìkˆÀfC˜~KÞ4#2•Þ]¶ÌÑ».ÌmD–‘1-¬ÛmD©êðÛHžKy·–L#2B³#2I+#V:BOíêé^ä:¨ž_xnríç‚ÉAtddâi(íþeUõÕ/ÏÚvsõœ«ßÐÁÇ9¨góøŸ ’¤6f‡ÉË,>¼Q5+Qb„pšQó#_Jå G#_ð„¬ ‡€ì²b0R$yçt‘õò—v{CýF(G@\®N¨¢ü{ˆÑƒÄ@ˆ£Q¢%p6ÙÀ!‰ gßüØ]ùù5Ÿ¯¼&§Òh«©«ñŸÑDãO,Œdõ#VR¯@´4Vĉ;v•ó°QØI[)%#2Ñ÷8DÄq¹}N!G{Ž {tþÉ#_P^ÖG²JJAJ‰:Rj(5›I‰³æ]€Ñ@r &7(¥gä;€¨cÊ\ßÀâ¿›¹ÛHRK×ÛF ¿š¡ÓŸ‰#2ñ#V¡&kÀ€¤ÝððN‡^ï¼äx=þù_¸ê\„`Ä<ÔéùÑíón9 ùV·5¦ Ç™°»y2wù>Og±\tîÂOàô#V‘ær{ÎÖá|gp»¸²îڎȯGÀâv!2쬿%âš{·ÁGJÑ^¤j êX‘ðLÄ%V–Ö8=¸Ù¤Ž1笳­BPD#ì̇—Œ“$˜Ø!zžbÊÀ?»üùï=O‡iŽÈ+¸v8éÝÀXšØöžó¦°^Šp.¿ÜUÀ _Eïzâ€=ú~»ÛØãs3ÀMåï`ýí÷áƒyæóܾ?æñ‡Sp#µÇЂzîù{îpq ’>HùflöhfòîËdø|ÞÚ¹ÄÃõVµ$œ¿°fÉ"Z…"€4?1QÛ¡.ú4_÷#2°#Vq&+´\ct_wÖª#uñ&m°g6ð£™6̘7Zsù—´ù‹ò›>ípr$Ž´¨ç%•l#_UZelR«TÕ4q›Du@ ^ÊZ„ÿ=¨®kæÙ‹ûlØbB0“}Þxml„ká´KÓ_-ëæίŠóËŸkÅîKÑwAEèüÏby“$‹J ÀH Šˆ[0f«ˆ;0©0gÇ€ô壴³AºmI,™xw.Â"œÄåïа7XÔÕ4ù'&IÁªDº ù°;Ï»ê Εï!=¿y÷•_¡®Â&¦ñƒ ­5}ÿõÁGßóý{JËe$%ºØŠÞ©©vÍi§DŽ¥Ô%wŸÙûI®ºÓMÄ@8Ç+0?-øùú=0} ÕE”¨€ñãõ뉼±gx#ü»™‰8Øà‚#2wøâ葨Ý)Þ#ôÌ5†ènió§§vŠç0Z»_žH·:fïÃ5åúSÚŠ“ò¦þÓ']vÆ‹ìW< µ‡;Ò‡@`ë yM‘U5±PY`V(¶¬~åô2‡šÅ<ÿ’Zo#<Û°n$ŒW‹‹¿—LÀDo"šsQ4¢=­#„™qƙ϶,<¤!*»í‰•ÊÊQ~‘±¢©ý2yF£ú#VD¹Ö'LâjãÜ:ŽD>§—v!«[@ôøC•J‰RnŽ{5_´£Gëöy|ÁÄxûKc#Vù`È8Ž #V‰óØ60¬¸,ÄÚ^õ¢´teǼQf?©ã—9ìõ}óÎ*mY¦I<Ξ¼àñõCóN2ºjQ$ óë#_hì#V!ڇê¬é´Þ×Ãçg$‘5ñ”ýùÆÞiÛ§Šu#2”€(N€d#V»#_XRéòc¶H"góÔ /óQª2sØÓoë“®Óœ ; v »m´¿mÖY÷À!¼†l30WMî$^Å=wd„|SÔg‹°šPúìHìOHCK)X`dn`ƒšGãîÚç†ÞsJú‘~b{ÃÆÐ,` w¼‚¼Ï@øÛtV°Î;¾#2(–çod>vDNko7ÝÔö"™‹`!܇öÇØlŸ›‘O6ÌžW’Böÿm}sŽ—8â¥U{;@›Çü"HÈ¿,70²0îO$Ðù}%ˆ{ƒ;þQgX(¡(:ÀyÔ¿>ÎÏC«áÅßÐ2.®m~lsÍù|£ÚŸ¼Ï7òïš’Ãø8q×ï^PSÌ>®áDTGä€ÂýçW¼Ïóš5I#2Ê b\ Ác0RÝûü¦ŽÜ]¶‚ýG#4n›„G|´ŸÜ¬©$±†ˆ4ÎC1§û¢ðzÒjGèÌiIœL‹oîÓæà-€õL…ÜþͲF"Ï"iLàTùÕ6½•±òííö¯’>I/™«•<êT>Mœ¶°X&5¢ÀýNÚeü_UeÿóN¹œÒBoFqöÏ£—#_ ed½‚ŽòìBý(Õ&nâkÑ@aˆiôKvW‚a›4b±†ÖsýÅgÕmß8Ï{ì:k¿úšä¤"Ó­ðóG3tÌ ÛÐcÂîmþ}Tq_•m·ˆ¾ º–Ù»€ÎÍ«NçZt›sÉ ÷Q¼3aÇòŽŽÍǶ_O´^@X{Ós°Ë#2¢T'ߘL$Ç ­Æ@Ô7%°Ä=Â#¢½#V”ýÓù=ï#6Øàõ¥¸~¿Ü'r+üXÿ -!Í<êTI"ša˜^ÑóÖ½Ÿõ>î4‚Ǭ~›#2ǘªúçే±9/µ=Ï»˜m,øéÄ#nлB¿!KÛõÀÅñ=Ãéî¦Ò¡OƒßåìÕ‡I’|óˆ<@ùnО@k7_/zÃ?cK &±^ÉZCü9ɱÿZº ëÜ}¦·;÷‰ïän‰ÜÂw·—%ßL1M¦0 ªhA4>Èp? ð@ËkK†$ È,‚ÂxqlÇÇñöOßñ³ïû³P™Ñ”/¿ß(üI„Aª¢¨™þì‚©]IJ:pi#V1HjÂF²Js#2 VÚsBHþÙÞCÔƒy?íÜ/å’Ä®±T#V"M¸1 -–Z=h¥#Vè#1¸F9,dR)ö4À˜§ZwýA݃û‹”ùƒ²`r½¿D¬:Î),hUDXÓv%\Ú7»rL&[»˜ŸWËç¾yíîëÎi{ܹ¸_>n|»|Wîùæ;º%ïN®+½{Í{ç9æôÎáb†Q¹Ê`X¤&òJòR¶$;#ðd.š#_ó½è‘5*U"н/oå qý'ø×Ýê§Â…[ÙfÇ ëÚ#_n¯ì„‘v€ ?ÒwúuC#VÝÅ­þÃ÷5Ú»ò»šÎ’JîéaE'wPˆÊM+»˜ÖSõ]½F´òwÄâ+XÙµøýÿ0ÙUﻓñb€ûP¸?V&#?Ø9(~#2°›°ª~Xþ6YÑú¹ž8WúošÛ¾^§ç_ÞÉúÏDlTïñlcgˆ>=ϯǒ¾gÎv&¹€xoáêUUÈ~}Tö_'ÕJÛN¨#VÆyËôû#2å‰(e ŠgPÔèGÌ…NÙ,¨ K‚PE°·ðv¡äÿº#1h6¢1Á‡WvaîÑ‘U.$LvŒcýÒ#2ï$/êÝ:¦#2¿8ÄÞ3?Ç~Þ7t„È=a4Hj£ºÝ$¼UëùñBeÜ@ÝÔf&¥”-(…âAÄCGB°q—tŸà4ÿX?âö[Fðˆ%–Jª¿9fFdJ\Ù¹#2ÀP¾þ=±÷»©à$$„#XDÄ)°lÞícUI?jO©çì¢Cé:PÕô|5+f˜RSL89Îr¡Áõ|ôM ê~Û­ÃêÄ ›Ñ°üåÚ)˕ʺš[#2V?ZÁ¾ ¡* Û‡öf~ƒ°îý‡òœõú?˜>‡O#_!ˆ,"j®>ãç<ý§ëóúì“þe#2ýÃVY©ÁáÓŸ¦zU³Vh?b¸€;`Þß»_?UèÿfaÓðŠHþ9ôìO„’:I·íõçÙÝ̶ÜWoöñ¡ ¥$2û‹™È…Z-ƒ7•MsÓú#O«âá¼[fS¥°þ‰b?¬Ðí!™éX_îÃa1ƒ}@#ÖäÞÙÔCžõ?=~H3ŒE¬}Û¯ã5ùš“|å¹Ç1b¨)Y¤„ß2AëëÖ,:Êâû$£Ðdù~µáQ$m8Äõüøl¿Çñ""òŸ77Tåõ ¦)šB”dÐKäèN¸q¶â]üóJ.âÀ2mýØÛü‰Ü,å$åXÓóߟ×êì×qfŠB¾‰âøŽàXk8Põþ+¯4^ðá#2•:Ôõ[2Qà BxÚ¨o®×ðbœ2{°‚š‰ŠiCcâ~#2{v=ÑÚ»x4ˆ “±~ó´Ô×±#2ÖaÒwÉó1E+üF¹¼ëÚ>¸SÙ=dÉ?VÏ­=Ñ“pþõ‚ª¦ùµÕ°ýg÷U†ÿsø±Rô"þMJ %~ÌK®Õ›j‚ Œ9#_eB… ¨*“z“D ê`Ší9¯ÖâiŸàZ·LzÀÀª§BŠÁfI¥JÆbÊÛ$TŠ†¸ŸÖ“jüïù†ŠAÈBéÃ_çÿ#2ó“5`œ˜ëÄŒR°ÇþåþÄlF´™²¥¦ ÿ½Ò /Ýž‹Æ#_óÿ'ÇÿJQEE*%;a sɵÅPl!~SÅZÒœCg'šÅðÔ÷ÎÔiçŘ.YwaYY“.›±ØÄ«Á½‘btLÈÌ´í0YøŠØ¿µ<›?ž#VJþ¨#2àD^"À4™erô¸×´ÞßÕ°=þ,¿*oX%Ú($òŠ^ÜÜŽ~r÷*9cä0÷+2ˆÆVß홡Xž¶…®«¸XŸÍH%l0æ¾V¢½–‹ûË/.ý£ù* }án#Côöµ¥~|)~Š8…8?ª ° 5™€m¶$CO/ëÎÉã<3♊L^(X¾Ÿqññ³}pþG=¸–æËÔáë2H ¥åä5à«-P~®*ðSézŒk¹šMrrFÛœòÑå0‰Gñ6ò‘cofö‡¦5uûf½ÉG»†2³¦ºÇX)J°¢9¯ b @ÑÀf{s­ˆmë.cöþ­#_sž—0ϱŸ®ƒK$ ~Vå÷Îi7”7„B ’Oò]¦ÆlŒZ¯¿~ßË›ç†e»Ñ¦64£t¨±¯«ÃÔŠÏIÖôûÙ(óý`Só`ʼn„Ÿ*K åÃ&;¦ž´Ð7ŸEê×oQ¨“”?W÷PCÖ!å–ù‹œê6[Å~D5"!’§Ï‰&z‡Lo˜f”îÉ€VR ‚¢ˆ‚P|ô…ÝxÒKŠS~)ÝÓ¤üàÿ=›á‡ø5¼šä›¼46šª3mJ’ÁùSÛshÀ}EìZ•ô´eÊ9¦ ””ð†dlœ_;Ú#Vу[`2/°MQ²Ï¬÷–£ùÓºGs¶àus¼U–Q“TL“×F%“µ·Sþ<êúö¿/¹ì¼ÏsD7Š.ˆæ yò+5ƒ€&ƒÁ({£ƒž8pTaEå¿m(¶½):Ò‰XÁ#2ø‡†„_0ã5°§Ò@ò×Ç't»Öu°•#2„ÀþQøkßÿ/ûWßàÏ^®Ü¦Gâ©Ö —JûF±Aêü/ÑíôË„Ôéþ¯u”QŸßߟ?‰ê¹%§š)Y(ÿwXæþÂ1±s‡A¹ ÚQj¾bIÄv³ xÖ&4Ži#2fˆº M-DÀ§AYo7 ¶PÙ®ô¦ì'sD|лµ˜›hö@t#_(×r=”.ÔÚãÞ ý~AôêÕH{q+¬ƒ©?^h²éAŒF»é k_œ2ØfSŠØN@ÈHâwQýí /<²1E¶îKÔÂ-ê!ûΠúDs¶î¸ˆŒU¹¸uòØÚIGöðçèùžœ(·#Vnºà,ÃW5Û,ZØjr¢¢#|¹#V‰°Xìë}ö"…°o†>rsÈéú^UßÊZ^YÄaªZ¹á½=vÚ¢wñ2ÇŸ\¯Œs¸~0u­8I1$±KÆ@ËEK{: :îwñâκ_îüãÓ7÷kV^¢'¬ËL™§'“ÉágϼäB…ÄÙ¤·;Ç2ÊãZGÊ:Û7m¦W9_vºâµŠdÝ8‘·‘ù*àk5òrjß(„“)Î*bQ O¦ŸÏèÄÿWõÔÿ„×ûgÆLÎ|°à6³ç‚ +t~$Ûýšì_ÑVÝÜ?Ý?ÉÖ•q “HY¨s!Ó qÄçÐb¥C´»N†¡ÁÝ?´#VÎdå̧"r#_7ã#V¬Òi/÷ÍNÂÊDX‘„Ž,B‘9Æö§÷i|×ÒÛ(B=|·gMÈùÊq,a{;ûÃîx Po‡šøð7°#2|Kiìåëï>ö1žhÕSKÖI _}*¤j©i©øiŒa³ÔˆlÛ¦Ÿè]ãüÇ p{5>6µe±¹å‘Ø¢Ž10À÷ óèÓãïä;âÅÑt7A8#2÷Óx†÷g4á PZ9/ݯDС=Çå>ÿñ£üFÁF…û°‚01ÏèÕ1`ªhè™@ј¯»BÃ\iã<'ÍGodö‹ƒaòù‡Ì4ç:z¸ú²ùÃæ3U¬äêó2!È:å^§¨¾Ê¦·,ŸËP㜛¶#Ÿ—|’KÇòLt†ÐyÙo§sqŒUQZC,x×—=Îòe€BÑp– p©‚“L0d¹&ͬ#V8fŠ°, J¨lf˜l7#2W'ÚlêAŽß\Æ4±OíÃßÙ.dÌú6ûˆèª¨­ñÒ&Õ0ybz!Ž¬zôK”y%N£7Ÿ{Ú\ˆWÕÜv´Ÿ·³Õh‰ëíÃE÷~E'(™x·(<»?È'mƒ»sã> >1Þÿ‚ýöðý UÅÑ?F/¬0`¼%ÕÂ?»û&¿Ëø}x×òSXÞ{´þotüX4•å_ÝËúÉͼºöGÚ9å¥þ:N>º6­y×ìíLõ{Z-'è(œ%ªNL”ÂJ¬ÚNPã¾Ù…eHkcF¢&œÛZ@9…„”Áíû(#Vˆ?Þþl~J»m»—šñ%ª÷ö~ÛÒH½¯ôÉÿ&ànK#4“S COò<]±V‹YÒF•Ý¯èkÕÑi}þÏÇüiÞ?HùWïcêL ùꪱ#VkV´§ö‡½Töž×µmƒ¡{ê¢*•Vô:ýƒÌ4"$XMy…Æç](ßæÖM°;Žø¡#_#V¿Þù`̯úÿAàKÇq²#_¨Š±—ÕÝOáš÷˜ðœ3ß*Á»&òX–`Ÿ”NA™¡Á°m±ð†Hh “Ïòæˆhj-8´ )PˆBBCâ|SÅ-«bZH?b‰OŒÒûÊÄÔéT#_uÿýO“ä½tu4å"nTx>„€n'ÌII$~Q,=Í¿ÊÎ#2Mº¡üw‹‚IË(kÔ.^#2ØÁký||¯dh+9½¤®;j5Òá“Ì#_4˜ALˆó‹T$9ÆPËÖˆ˜Ñý&g·ÎŽ´buXßåD"Š¦…ˆuëG·¼>SÓ©;†óƒ®ÁÛà#Vf ç”²ìØ&†63`C[Ô¦¹"àp·8¶Ûi€˜=ÄàO܆#_® Jaxš#_½°aúË-VƒÌÈT#_ïÅ9à`ž^.KòghŸ¿’`Ç_šîÖò;t%O²Óìa .aêÄ/ ±1¦ÇhIÌÖäPÐL™Ÿ9p7!ØÓYÌ↰ºi<²QAƒÌ8 Ó#_&þ»}ô:##VÅÇfqñÚÌʽ½}‘Ê.Í4L…ƒÖ†ÆÑ¥PƒQšøC¦\³¬ìžE‡puƒ]Rqßך|32d=;3ãrånÛ/¥˜9â"jX…I!âá,®¯Q¬å¬‡á‡tšåÄC©Ùô¼tímí“ ÂQ­· C50²;–4žt#23½¡oWc×Ê›Vî‡õñU­?ÓéÖÜã—¼2Pîó!üÑËC:aØ–823‡¦CõéQ4ô|89ÎnU°`Ë°éyÛÕz‘™²Žón¼"(Ù?›¶eËCB“G±¶&Æ#Vº#_#8Cìa”¹ê˜YƒvòÕ³ËÔËœ#Vt†úR)U'dñð„Ù¹Òhdå1“»(ßÎhé+â=FBš®l«Ã"m´"ÉL„!¦4*¶×l!Š3æälp4«[ºÅ©eÜÆÀ*Mrû—˜~F† {_ìK„;b'3Ô®J­•CH]0扃y34”frN¬´¤}«CYLøCg!ì:Ægƒy¦aºqÔÁ¦$Ã`ÓH‘”${7¢dzI¦à¦4s,NëºÖçWSXɈh¬1U‘Ûj©ÉÌ+ ð0÷øv/gÁáw‡``5Ô5îøøÖ`ê“*-·%¹™eÌyrÆÚl°ÌËs ÊeÏ$xŒû§L^ÃfŸvÌËÀpÛB8g8¸)ßk$ŒÙY¤¤H<ó(¥Öõ¶îdž8^ñŠzQ9nØvÀYcBµ[z¯K|2ɃÍï­5B.§yËXV•–ºƒKÜ6Sg\i¯HEé&=ÂúvÖñC‰c}×oNù"&7uÛµg:ÕÄZ•©ÏœÞ±#VV%Gz©/Êy¸m`MàÔøªt¡ÈgfXV¥P4g¨’"åì^Pòèv< 62‹Â!|ß:æœE¸ýTÀ›…ªé%‚ßÙÏŠ1öø0.ÒqÛNøÖÂËwB@„ 3Kïà—y‚…ÄÓ÷ÈÛ™šZ‘¼·mU (Á‹Ô³–Ƽ­é¥ë”fŽ!ìåÚ´òÂUcÓ‘#»<‘½šÕ»³µ{éO58ÇÒ„<ýq˃âì7-&ñm#VˆÃ ddBÐ6ëÐ÷±\¦ny„uM ¢E­¸—H3Ÿ÷#2s9ˆø;ýNž¯9ÊN¸©º#2é’K÷öúÙòÙÏÙ±vLXÐ$„ŸèÛ¸»°ÓÙ+ÞFy‘ÄÒí ¹·&„ÉÀñL©2òC§¹Ã‡gfr,3n¾•3Ò#Vk¥£Â6áÌ{$føÊBZ[ ¢Ã¼¥–ÔÞ7ž>/AÕ|{7~•wNÌt…µt„Ëvi#äC*ÌÐîoºñß‚Šì>`uŠÖk>˜†¸0Žé•ñMÛŒø{êÍ¥;‡‡S¹l„K¸q2í∙®^±r¤“ ñDÓŠÐãÍzˆ«…ápÊ΀gTxV¤`zÚ1#V#V½v˜,¶9ŒyŠdXá¨esV>’âQ(÷›–M' ¥N³”5,rdÈÄçqªºô¨í é·º*ŽcÕ1à  <#2ÂtJ™šŒÖü5°Ô „É„ÝWe’Êg$€q7Â5Ïû~Ìw÷w¡.EbÔc…Ó€ÇÂE@Øh¬#V"Ã…øIÜÒnÉ®›HL.͈X€HçÃaðäÜéå†'xXˆhr ÊTT0yÜ%‹Bi{’ê•à„ÓðÓgD ¸ßÓkƒ2 æú©ZZ¥ jæd3Üœ h^ºÎ{)#_`Ú‘Ö¢=Èû¹ê 3uuŠù™†p|G‘¼Ã<°¬&£ ¨Â3Bx»Üø€¾gŸ<@;`ì»,×ÌV9Ó÷›Ý{åÖ2Üã2îŦNâöáä/n‡¼$óïºd/Mž‰Âv}e@à'Sr±UºF,×Y, ¤t¢¤n”¶Åú!‡Tíü”M#S½‡¦òõaœ”lH†Y¾ÌdY  î`4É(•†÷½pÔS†øŽHù‹#."|#V+4ц4AŠLèyÑmrçL¨ƒgŽ¨ÑPÞHDú­am]É×Aõ»Z}­>aΦ‘„"¢Ñ47î:qÊ‘:ƨ؃Ý8¸à»€#V±TIÐΡPŒÔÁ C#2‡™Ú <Æ#éÝ#_ôú¸w/ p¢|ðêIù> ÞuNªz;ò(+ÅY¹ÏmO3Éöƒìå†{~q87:›M£µ}‡µÅu±¼,O´ðÁ=ˆnø<òsD¨ˆF£žC´F¬øf½ÁسáD³\»Ÿ\qsL>wFžµN£Cz“{葶ÜÙ0ÄG†è£ån8˜îKÂ>[10=‹•eê65’Ðo±¹Uzú×]µÆœ*Œ³„ÓjÖ»QP$;½…3¼ü­½la1(ˆ§çkQS4¦é"R ËÛ!.Ê—‘³€ÌŽMZopÐCraþ4è –Žl«$›»0&ÉÂA=%Œ3X~óµ›²,ûÄ93åØâþœatñNWžyYWšrDB”òD ïOè“í£Ó’%&…bv6ý±9Á3|Ü;|£[¾;¨¤Ù}8õå¶Ñ5n£ ÿ'’ø#y®ÈvÝyráÍ´˜£‰Yâ¦O&‡—¨w;¾8ûîzÕâ¬4ùûzT6IÑ®µ*oø¬œ2EÏNZe×x»Áç±8oíÔΆ›MÂ}ÍÕù#_nŸ+.Wns;"”âRËËÇÚ6C±ž¶Š¢áãà<›ïÏæœÞRð{ÄSÜ¥º}¿ ‘/Ù…M-b25«¯µ¯3ÂÜÁˡლEEÚ™/çWœ#_Éc{ äHÐÿ#“‘XJI]‘~®0Y“=Ÿœ^æ¬Y+=t¥YÄBt‰*vDÀ¤µ#2†ŠE?b ($‚#2rƒ‡¿wðj ü-铼"5qãQlŸd´w’ ÇÆè³½¼ŽÞDa‡ÈÜöC>­G–>\ÕÂì6ô‰v¬Šõ)õõr6wõÓÈ^C¿J㡷Ͼ_g'f%ÊÞ‰/pë–mPúô \54b'(ð€‹¯ÝÇHuzy2"#åv™«ÐV{ûÏM—åü3T‰Jí€ ‘?0–(Õ?—vé¢ÄšÅRbý#2#2æI@iR0½žOfÞ¶¼½y¢‡YØañf ø}¢1Š7¿¿wX¼ã’y·¤×#_ÌŒlv3ïÄP‚‚ÎÂè ŒJ©Í%Š“d6L¡i1PöãI¦`æ zˆi¤ƒß"­°XÖo<î|ñEå ÊWëž#÷/9ñäÛlÖÆ{îÆR€a+ÇïÄ^Èø6åqÎ Ö샴‰Äj_¿~?àðÄ&#Vœs,õ—~y˜›Oæ‚þ¿w_Lÿ¾Êу;oðê«b OPêô9#_fa„ò$͇ˆù/§Cñm2Cýñõ–³½ ò¯wt#VÌœÅe¼8dDa!àD°‹p³üA@7"¸¢xc…û€”òþ~<ŽõO(ø^H¹MLBøøpj+öòzYååâŸßY]Èóî S³»/Õ4ž/‡ZÄj©7*ÿ§å¨c•%§Ð:+$ y*cx1¨õ‹o m¶¡=l|T˜o\,aI ‘m‡kF;®®vÀm#V™±D!¦e]I1U¡QŽÂWÙXJA7Ðz{‡¨'—œ¡à8ž±E0ø§›þ…§ßê†D)*Š*™T•‚cH±R› â؇qéÚä=ŸÏ—t¿wÉ}e9 þ.:ºH>ÿñâV0*áÿú¤”rj| ìÙõçsǽïjSkQ¦RõPš(ŒÓ†(àcQz¿–¤ªHüŠƒ´(:JtøgÒm\‡S)~]×M×á.Ù”[3P.?ե엻qø}_:ï)ÀB>ôt:ƒá‚ÈžïuÍHsC¨}Þ⤤!BDÄêXp;(q¦ Lý^™úˆÄÌF„¿®nœåÍ,b¬T € Šf™GlÅÿ|€1`† }k‰ân°¨ò%þFTëí»Lþa®Û Htcz›÷t™À Ã24èÐR¥EUTü¹èÕU£lûSOï!÷]$ª¹f~Ë*4Jš0T='‹VÄ›ûÇÛܺò#2ö@š7óŠb§Ý¥=›}êŸÛ˧RÄP͇ψ/Ä~“ô?æ+ûêÄAQ"ÁI0A1MIIÉ‘2XrD#2êàõ|t~m`(íÏc5{ü›Ë.9#2m!‰ïLÅÚ÷ò?Fû0ÿÏ0®Ó€òØítvˆ&ˆøJP¾ø“$Ôa Â}0èï?%Ð\¦ÂîÏsOëÎmF?#_Ò ¸“Oõ3ºçW¾ÎQ¤Ä¡)Ì9q»±¼9EhŒM@ïÚ"v§íIQFÿ#_ |´ÿ„ÿ¤ú=<­<¤À¡ ÄûÒ䬴0'¯©¹úmÃõlXj¦Ù²ŠÌÄÈv0Ði~Ø#_X·J&¶G&‚¡¤¥Ñä”/Râ„Ђd#2÷ø¬zϘ>c /­<]ûЯ젡º¤¡Ūm™™3åÜC d” 0 &c VmÏ«H‡Ûù¡¥sé_\Þrÿ;Ú%&»Ô„±B(±éÆ0/cb÷ÝØÄÕ„ÉT»†&&o.gfÁ@„%HÆßX[­Ÿc&M•Üþ½§‡geÃÔ<¾4Ñ%([é«u›NfÖÐÝNP’EªZ)ŠSµÐÁXu´Æ´q¹ÇÙ6›|¹ »ZÝ:Ha‘]crÛrž™Ø/!àÂLw:ÃÀn“°v·3oø˜¤8z…€'Ñê“ŸÕèú>D¤ØÛlf ~:”?±=CÈNøE¯oiè¾bã8QZÎØO£»Ÿ2²Ð5HÅ,°NõJX‰&ç_³Ñt+ßè=Öòhª.n‘…Q• 7ø,²è°K¯¼ Ü»=á‚o$£ë‘`{N…_Ùýê£\"C÷#Båw(%Æ#2Œo#2^ sº€k§NºA~GU bròÀË0 3 +*¨=À½Ù¡Û|MHO®²K36ö³±,Q9³:nÖÕCëÓʼ<é}_8f°©(¹jºjÓdËnÜÉ#VE.Ç>WŸ?…IFûvïé÷$’ôhM‚Äò•ßŸhé—àóH€PˆB„#2Д.È÷ùg»Ôs}‚ ´ª(&РJ(t”h!)Ra•‰WëøýÀq·QõºÆ栦ߎJ?Ï:*Š*#_V‚ß™M\IA*fæ±%h¤Õ_W+aiE¥1„#2Q…ˆdUÑ ¢T$Ô`p‡+Þ/úgóJ-$’ùù‡Ã!q+Z}Y„ú2Í\ 8¸>&rÒdVÄD*ò66É­‘iL6%LÐ-´ÁV·ˆ3#Vàˆ7ÝÙ܆Œšf‰ÞýRØy˜FjWX8@m‘tD±TRƺ#V®,ÒsQ³LÀhiÑq’õM3Ð †©˜‚Lòßï ¡Ø&A@D$J"v“v9‰êàÔAFó•#VP-ã î!-lM $uOÕ¬¤¥)#_Zu™«—+r¹¦QXµ®mv&Ù$‘22(Q"G5‡Ñ&¡ë˜£¼%(c#Fð R”h¤} ;0°Uâ6C™‡ψ{Ãœ(œÀa;äS·¦Èë«ýQMEIUÔ§†ã|Pp=ÝÞ(‰É’£õÀösGqæôŸ›#V"z>#2å#ESáÚ#óó^Î;(ê$)î"Šª&=¾,íef¡D—zÔ?>$>¾÷‚ëoˆ¿NF¦#V#_—{/íÓtÚ€züd¢0j”¡}n4„(,ÒQÙËM$Ç’¤êM@¤|’CÀt×E컶‹)îÐA8IDm#2Äýyâyî¢ù½£ÔÊ0%€Awv‡@éc=.æ Eÿ F ˆÅ-nƒ“•#Vç>àkv*hÜ6/yÆ3G.º½ûë?,rÿž.Þå²|½§Ö»‡“Ú:À¦$*Ä"PÒJ­$lpp|*È ‘Ù_a~ðÿW"&iêHQ±¯Ój3’UÅ“‘Â#_!çØIí#2 ôŸ£ßC½p7PÀÈQ3h©DÕ’‹‡ÆÚ¤…ÒéÄ#_øz8Çù°&’&jÃg]‡8FÇÁqÓˆøåz©¸Ì3‚©î&#ðÜ°àÓTzÐMLʼL˜$äÃ#)!0Ç­,1ñ@ñßÉv*6L=¹Ò´í:h“.5€ÏÀÅçsƒXÄÙt€Å9!úئ@?KÏØik%í:žR®µ‰úD½¿x°#*öЈ_nô¤‰}ÏÒ9l”-¾‹#VŸ„XÍø}4àŸÇ…\ˆÄ”ÀÒn0Û÷ü÷ÄžËÍüß(í~Ø}ö!ðe *ŠCïý!ddzå~íLUndlŒ>´zÔ_)3X!ì€Ô}(VÑ´mL ¶Ž I*EH&ê1{²šÛlÉ8ÑÔ° ¤¯3»=gôùÏÙ…¥GÓSäˆÿº€u#2OÕ©0¨Ò¡C0¿{Ÿàð}V»p½äy2Hâ|¯¹Ù'ð®ù“ /m]\¥pÊY7¤¼ù Fþßð\5ýÙÑÁÔ°Ë;\ÌIÏ´]Ì4sMÿ''œbZ;çôÁ§ÂÌLìºmë#V¶ÊÇÐ(þ½¿~?œìEsF°‘Ý:å×ó{É.¡Iêó4Õ#_÷óü¡øàcâ Œ¤òÖ~p²Å¢Š×~ì€!ø¹\Ÿ½“»#2|;¾‚¨îê,í¶Nclö ¯Ñ!B!€@x§ì¡V’ˆ!h‚€šè‰.»S´ªM3ËmvÖRíÕÍP3ö¤/ŸÍè$&à+b#CƒúZ¨ÒàI9&cY6D♵›ãÔÉät¨mŒclŸøÙr?>ZüÒì|w#V/„#VN¼L¢u>0¶>ÍÝD"3ZJ8ˆ#q’dvc†±rrf"\‚åÎG_€ï"–Ä[±6þ€Õ^YT-7€ØþÛDÚ3z‹ª8]* ÷IyoÓ~r‡ÇÝòû$µÿ{4ÁᘊÞc%Ys‚‘G‰ë䯒o3eÛ¹:N»±÷«`V„Eâã÷å¦#Aeé¼HþV ± =êcÊtm€ìI‘TjLþ#VúóNüÏÆÒjÆQMm¢ÔZÒXˆ‹صLÕ5EdѨ´¦ÆŠ‰˜™mFªˆÕ¢Ù#6h¶’MJ™¦±¬ÒlÊ[V‰¦Ô›I-ÉXÚ6”[5%¥E6ÌÊÙU²ÛSj,ÛZ1llQlhÕ2!×é?Gqû{%wÑ~º€gZ–®0ìíïÛžöÜ7í™\û€Ø~QC0˜dHß2Ó/½Á¾2O³ydÿ6ÛdÓ–ù;áø sEÃpY½Œ#V¶1°#[hHëëÖ¸ Þu6Ã%™xœ6Ã(qÁUÚ4Ù$CRj¾›õí F³)Ð#Ÿ¾ºPÖ@¡€óc=fÖ®8N»¦‡æ­ùÈ€ý*‰ýdHøˆl*y™œ~ƒcŒ9:C °ç±‡Ûd 7W¤i‘ÙI³¹ Ñ?+©ùõG­}½n¸P¿‡7$ÕáÂœ¾qÄ١ɢ؊Lq•“áôßNœ˜£lo‰ÌÑç=,Î]ÉÍ´™Ìcm—]†62Ü1m¥Ã°‰ppLx)¯o> ã5o]– rÍ­€ÐF#Vm2!¡%Ñͺz,S2¦ãEk³X4ëƒf§FfmÑéuÌOMì$c-$Ö©t4"´8Äs½ã#V6>A ‚Ýjq„cJÍX52÷ÝrOCš=°ë÷ÞÏØE$U~ø•"A"JQ©•#_"†U^ä<1D#V@§#2ù«rû¹ yz§å=ŒîÌd2Ó»1z³ûNHçlrVÜÊdh†Bð2ä×I½A5ÕŶ•uVQškyœ¥ÉSB†Ý£L5\eXk@)CC&·¥´²P¤‰&uÅ[Š^ÜàÂœm˨j‘-!éæÉÔL6a»·T%áÄV‡¨”4;#@Äq7al`õw^"VFÚa,NăòxæÊšÈB??¨gÓ#Vã]ˆN³™™ ” TÂ#2â½!%îíóˆô]1QBbQ•#Vƒ>}‘Ýøä±Ñ‡»¯Šgë}¶FÂz¥ h¤jH4ƒUùR×,lQ&¨Ö®mÍ®m\¦j¨J-™ƒj*J¨ÖcºæIª ³sýÔGgz‡” ýÐj#2á¹(züi#_Rî“&&¦*R…MRQÐ5¤Äm,H)€|â€Q|Á6çÒ×g™÷W¸^{Æ—ðPéBj#Vx”#_ 5ÞþÄ÷æ”#_PpySØ#éybTÓ™!C!óŽJqÈÙúÎHŸ0'¸äpئIŸX#2âÎC@x”D@$LÔPý‡<\Ó“9ˆÔk#VzñÚ´“ºtŠØ0_ûwøzdƈ‰Ì§ÚÄ4•L_oÓ ¹«èªFo.šý/%¡¸Þ#V·Åñ-^é9UÏ–e”ʨ*X-c¬3#ÎpvH}ñù%SÔË\H8F#_§Áj »b¯#_1Úè°Vv³/Ç] ‹#2¡’Ä„:ovçÌ Ò”Ta#2@„ƒá˜äœÏ´ðѶù`Ѽ;éÃ$È0eî‘ÀŸäî„8Šk_ëB#2¤@T'gmü:}Z“(݉†½,`s¬V„´¦~„ O±ñdºKÚ>r¹¾xšœ—/„®Ä/øN'|=™ñŒí=æ·ž|³?¯ÂbN ÅKŒC± `Hwª³žœnÙ¡=‡ãÞ#VÉóYlUrbIx÷Ieò?¨©Ø>àBÆÁÕU ÐwönW¿¯ÅXh'÷gÖ=RÚ#_yõ+û]Ãó0†Ãò+[[×¥Sʠ΂ ”ÐÍýÿ;0Á–0ܦ#V›{nEh–3q5©¶l§Ð— OÔ”"›'jg­æa>Ï‚ý?Åvý÷ÈùØñO¥Còðv~}@Iß ãæbà|\œ@#2Ѩ#2ýðkXÌ<¡\øžÃâÖÏÑ.Ò´>´Ù;¹ü¸¡¾Ц)å®o¿µ{ÓØ.~‹ÀOi•À;÷À0øTñPQ"Œ­f ß>5;¯'uŸñæ`›I žƒÒ¬^Ä7Þ»NSH#åíW×6%l#VT¤FB¹“O£$†¶céyÃQ{ÒêýÚ‡p“±ÎÿIcÉ1‘ ˜q}î³K·Ù^˜ÌFxMà Ð0ײvzrÞé÷±9>GO¬U?×#2 Ýí`L@r{×àsÕbMž’UbDºAR?×üs{#20wIˆ†‚©d«Öh“ðÚÜöˆ&¥È¢€ûm!h%Ã97ãª[©祗’ƒ]5Î2"¡…ZúFb|IÍÊÌ ÁëBêÁ¼Ä ÁiÍÈã‹1TLPÓ,V®2˜Ñ…âœso!«Ze‘ÒÏõå£)AÇÓqä]*W'PÑsê á´X°Á"t«±#_£”8d‘´Ö©˜¨%„=’Ô*#VÕ„d¤JÖºNÁ †‘_Ñìl`ØÜV’¬m\ª4ZfJ’‹E¢¨ªD­¥JÚý·ñ î T7PÖ´†ü¤Ü|4ÕÆìAo1ºJ‡Ø?$ú9ô.A»Ð#2tˆí0uEpS¨'^¨?†БCÄà|n#2ôõ›ô,.?æó¦k{¡m Áb27_ßxDX—4¢³­9ž wôb¨¨™26Kcôí»·[¹B™X¼¾ép¢-ùà(¸#_ÿ±ÃZòIðÞH`®GCª{B—θ™ïΉR(¤ã‡,O |„#2+¤lN@C‘‘„#_|-J;°+ŸTnqŸ^ŒôîÉxËbhÀ£•|x¨ÈëòüÕ3Ó•êYB‹}9Äx2IÐ(;¡0z»¡²ˆŠ‘zŒ˜zbà³´û#2>°^Í-'d.KA²²¶QÔŽB‘#_›@4H½Ý ™Uͬ[Qy·³Jt"Œæ.!#_RÊó‘^7®Àuy.»FÚ~2Æ *ìù)7¨“æxfº²¶uý!ö´àŠæÍüfä>@)‚6 Ú!áväEµãó‘ìÈ‘yo¥‘‡P’=kÙÆ|[å³gv랦ÃNÕð(¾1;d8aÚôéÒ˜N–kcš M›”Òßl;y]Û#V²Xȼà6<œµ}Ù4 ´õ°fÛÚèͦ±²aÔÈ·\W/S^r‡Ð v.#5[)’ª ÄÈiJ°ÒÎQx5gK-àȇ9ÍT­!(³ZV7gsªûc6Ö'ž_…YÃ¥ä.ér&ÅV߃Ç#__»³'Ý#2w9“Â-³‘ÑäæÔqÖ·ož­'zê£õ•Ãœq˜f³¾× ÷dìIƧÎxkaÊz[Ï5õÆØ7@‘ XsË­ˆ#V&àûB3rØz6˜ÜnrÈŽ{õåS©çcåYdÙeÎc§¶ŽOil›ßlô_K“|í!¦Õôudu,8%ë_ݸ×lÓ/†+"£y—’#VìÅÎÎÕ§wXÿh³Wm€µ7‚'”Ç}‰i±æ~lj6 „]#2A ’PP3Ú¦«ô4è‘pyÃïÇ•w/û­b©¯Üõl þ;ïµefNÖVtK1´/c{Ÿ2u#ÐÝÌñ3þ÷ÛvË 72?žÛÚUB§Y›ž&á©òæT:Á‚·øŸîÿ5íβH<}Œí¥Ïwò Þ4 f‚#V·-¥Âé9ÀàF ;:ÑH›HTˆå‡A’)æ” 0xm/t¤7f#V“H…E„Üð#vAšÙ/~]{†í’6ª‡8r¹æ¾D>|Æ7ʶ¡N?&]Ãðpò‡×%{sØ~lvX…öy)¬³32ªh)€‰GëÝÜ) ¨¼_¿Äó¸Ý´Î§QoëÔð¯?åÝ•4dÂl”3ØU 1£¢¤H¤Wäã«WäÌõÍØóFŽÞ;¦Xp«$Rôã¶tmš“·+ñÌLð#/=ØÙÞn&û¢vý¤ü»£O³ËÄVi ŠB`¦•Û¸‡ÓµêH_ (’Ÿx eÐsÖ=Ã¥îtä1UV"¢&1<„ãÛƒæ05>ÉLqû2ÓŽ6ã²dNeD±,RÜ®áÑÝÒ{«¼é³6žÍÛo5vKrìHJ¾Ù\Õç1¼ºÇ”’ŽÜ´`ÈäȈÁÞ²º^ëk±6¡µcm.Õs²43d¶º\ÙGuv‹&TdK@¤Â–;æZ—Y†9©²îªYs4±C‡ø¡–[0Á*0§#_!V€ÈÖµ¥'Ý.¸‘aR‰{י鋠4— Aq‰#_·„raÔH=¸'.!#V“…â#2A™™ HQ¹ræ%Î*9œíˆªÃ1Ö´è™,šq6ÀÎ;¨PئQQX©š“bÍM4LQ(#_er%a ”v{·c§kó>Ý¡Nõþ@ÙÜÆ4 hjjOoÂ:#†=Ã6ñŠ§0³¢ÇUF”‰VØÁ¼Åe¥V8VÕriæ´]%(Ôy‘Ö8ÞVJ¬O)Ï<óO›—Eš²_ÒÁ"À€i¢€3+ ‘¡ž `ʦ!˜<·;ÓƒÕ|Q#_#œ£áxàפ¹ø=_†³½#_S²^á¶Qþ9VaÜð•(H߻۬ñéŒM¨ÊÄ-ãÉs€ÝѨú‘콘Ð eYJ˜{l:-”ÇVVJ’…Kh‚GÚŸÉü·ËÌ1öîcO³ò,•¯ÝxUQÑ](ë×R¥qA'ÛõBà $KC‘Æäß~³Ò*I/#2x#]À U=RöUuâkÏp(¤‚Œ>æ>5ÕÜ=d”Pëé‡ÕW|vËÎâ>>àß #2i÷!~mºlp#_vûºÎÒd–ùw0]zº–½#V¹X]×]9‘\ŠRé^—™z:kºp“YfŒr$0DÌ]£™-¦„q!FH±4ª€UÀ ”kåeGæ4×.ߤä‡FÞUò¶’4p€ðb_súνåÊ"A¢…/Å{û=Íß’B_Ž°g-B ™í&ˆ2¨#VŒ00“:¾õ||mwvM^í^öá4T‰t]\st²½Ú¹}¾zåìh­`ËÁÀ°eŒÛn¤Oë@’ ’Þm‡hŒb™”´¤Ôy3© è'é3V†µ\´Õb¡…úTˆAôBÁ8©§ý•¡“l“(ú58ÃîTM0èô³Ü,Ÿ8ƒ×Yñì*T»¡››„2°i‡¤ƒ<$vÛ#_WöÜo8櫧™‰õ_#³ih6ŠØѲj£Q2byfΡ}&5Q#_#âò’8}÷ùÒÙ†V´N·#_Šˆ¥\·Ç²‘/ÉêNA²S›S¬0 “#ŠåÏÔ‡™nÓM:ˆ!îZwåquµ™[ÃcÑ”|§hB@ÌþÙ‰¶¡D]"»b‡Çí÷zO2|—ëî.‰T!b;kÌ×wï-õˆþ;Ô¿HÏA÷Ž”}àq§¿¾©ŒˆàÌ`>axU‡HæJ/8úó¸ÕÆ°ÉN0¦ ‚bÈïE‘C!͈†7ÖÜZ[¾9Ù‚¢&á ÔçT]´ÿ-Irù6Yû.ýa¢ŽÉXR@9p#V5&PéÒ•‚#ö¤¡?ÃbЦÎõBÀ×Vv†ß>m)yw;FýnÃgl:Õ‘¤‚,šU:53›Áb…¶&#VDÖ$˜çààl\L­,*ôÀCZ [¦QF* l~qây"‡×)ɦâ;ªØêâ“[Sb¢lÁ?Q†Œ®ùÁ#UUX‡°=¸™¾—!Æj’(l&(¯Í—1MD‚¸Ã³²#2ŠRI{3¾uöÔJ‹‘XA¦2#V5¬PƆ5Õ¡ëëuwNAöàH´ÂÁˆ„Í¢ü?.#_Lt2c°10! `(A ÏÒÔABn ¸·BÀë!Ø]¡=§VðÌã0•µ™1èÂWDv x HÀÁ `0úqZs£/k'(Ž|‹ãvî.í-†ÃhaÙy…B†iaÿW~:q™[J…Î4=Lö¹4‰B3(A´>Ÿ—v_·¢I lè˜PG¶D†øêíG¥Q²¼»-ªJNHLQd è5¬:ÝlTQ‚:—;¢NÓ0O[¾W¢,d‰XÑåûªƒ[à•í“R°¯‡#ƒ5LL£qÖI.âÁѦ(8Úâ(šÔHØPÐ9D™º †ʸ¤T3* –hº#Vl†ð†Û¢ƒÔ?3S³Kož´#V5ÎEO.ð–`àë_–Âë›&ÝVŠËÖEÄF1(ØÛAI^”Âò´’*i(ä¥á»5²‘×Z G5‘#_ƒ¦µ LÆ4ÙÄ…Õ+°ƒéndu²!ôØæé†&>’EÒŒdƒ#Vؤ¬w])c_f®{»›Œ£é`¾ c#_\KM9i“(µ¢…Hd%4˜D\f$IÄàr̈äFJ‡(1¾,œXf#Vˆ9*7î´d 2¤iãAµ×2-ïB+ÚG¦Œ…Ýwâ¢`D8i’#×OÝzo¡Eya‹ÑåbìÒHê«ÕÚú+Ǯь>»J—I¢§fßжzu‡H/Ρ¹Ë½Ì: kkc0¸~;Lì1xä½æ©BÒC¥2ôö¿ VYÉwš£Æx™Ë q Ä3·< Q1+NögSþ‡nÉþß}d—nìB•ì î$NJ>·SVŠww]·\ä,®ÕK¤ÐÙÄ’(’5ƒ ì^r³Êæ(AÀŽ22[½]#BtC4ʘ.æFØ'ÉÄË£_v|;b@ ‡,'#2Õ&ág2æMFpɪ—µ†€…Äï Æ@qœZ $6ždh¢‘´4©©9²¼íÌÅL 9Ûƒ"•É)K>ä!ZâSº‚°Z(SpF‘× Ç£†JÀjhj@äLÚb#V‚mA#_`[4-¤ÝÅг"@È0ÁB÷K/QÒæ 4ˆfW˜„m?‡ÒN¥Û8¯ŽyÕ]IŽ8²Ðüo2‘reâèC§zÒ¹-_nwžwѵo¬^øróV”ˆãj‘Ä2ÁK×ý’‚ržþŽäÇV—cPB'>3‚&CÊÖú4¸Úo\6ÓÎ#_YP±$»ßqzöœ#2¼&¤ á¤`@o–2´Ø r\Î"ÁDCŠË ‡ìøýY‚¥ ÍÀŽZ«žG#7}ef #9{Ùµ“¼lµ#–¶m &¶PäÖ¶QF¸ÞýŽØbƒUn–Èg3nå*Cd±³%ÐQF±˜d1‘˜h…îÍk‘ ä¡„¾çËMÆR€>£ŸÎl ÷üLPî7 ì…ë3©4Á#r_„ài/ÛHô‘!3±eÔ¢ Ègh3¼àí³5ÚwR_T…fu |Ø—ûÿîNš9"l}%³–@Óš÷jâfkÍçl­÷`ÔöÔ˜R¢´oѼ®©£¬šèVMcœ­ð%L}¹‡AAnR¡ñ¬c#_Ýü”sÀÁ‚xD톢AÓ'Üùa˜&„i0h¬ D°{œÐarÇ33ÔüŸŸ´öñóyk˳w𛢰P¯Š "ñú}äüÍšÅö!}=ˆ°:k©P6!¸2‰b €ñ#2†¼#"pî´- Œü½iB@=ê‚\# ³#V, ( "BZG%o¦ê%‘† À#VèÚI¡Ä#2Ä©Pr~M£@4ÑÁ 1kISB8@‘ 7šï)°ÑÊà1@aPÑ;j5S …’D˜‡šv†êš@%¤–‡’ñÓBßiÔã!]‘εÃüƒ/.CÔ3ŸSeMu#2ÒÌùñ|v¾øt+¿aòt”BpÀC9¾LÂÆ=ûÝ¿q¿ShŠµËªY•/¤!$¥å¬þ:ë(zûej21ìâ®.ã_«fð²‹`LØB—ìßÚ&(PPüRØ^¨1!î¸ÿCÖÞùÛ›ë«ÔKóì©ÉÇâbÍA™kÙ†Æç­‚&Bª–ƒÑEWî6ÚM¨ÛmVǶÀ}E¹+ì ]E#2Aj@ $ŽßŽ!¡#_ªH¯bñå¦2È(ÉÆ‚˜Š(sž”Ò†¡S&¨¶Úêæ®’¢¾"»KÆc1Mo7½]¤Ñ©•s¥k®uÒ#kp“Qv¢swv8êJíë®Úzí(Ò’ÊR‘”rR‘É ¥ Tv€2i@3lD#2ÈT#_T¥R•I©Z0Ä2#2ˆWÉZë¦ÝRjM©JÕ͵C†û~âÏg»ÒšâS+Óy«ñHeôúŠÚV+ÏWF†|˜DrÑäÐT’Ù Ä#_#2þDKžï‘ozZd(ËÚd,ìî{4_°0CÅu0ZUDQ,sä ~#ÚwH›íâ,!ß@»JÐ'{fÔÆÉBI~[›Ú`ûÛ)­¿(ÕâÉãy<+ c.·hÙ89¦80‰!µã$Ó#YPÒg&©Ð|AUÁ c|œoh¼{±tG4᎜Hþ²`~XÈ÷Ÿ]™–fã¬hn[]užûJŒÇZÇ”R5jÌ6#VXƘÚlt…±·†#V+.+fbË#p@ÆŒp0ÂÄÈ'„„i ¡’[õúgªšC=Gà*ôzÌÅA-T<ó¤  ¢Bƒ©ñàQ4lŸ[­Ù5‹$L»#7N(îí9º§[”jQ¤ŠÆ( “6lF³,¤R””RÂCDC/K˳ã¨yæƒ÷t=?ZOÈ_¾m!·U½4»£]Ñz°ÓŒJtæ êŠK%3&*{3jƒüþ¼LÈu†°õGI8CÔðiB0At.'á#V¿µÌêIõÏ=÷Jå=MÌS…X0+Ò˜mBîìÖfC‚h 5-#¹Ž¢ïfŽÜÑ´RqË.02#VåvƒA¤a0¤v€p7—ÎQ’Ùž)·í÷÷càDÌN½ßCªÒ#_Y!5vì,Œ]xfjH(|0ü«( "fbµšß„½š³Ks•h+—7L@š¥=KìwyÚœ·„‘"Ö „|ºi‡;»ülâ•p~SSžŒ¢”J½çÅw:Ë*vÛF X‡]¡âât{ÃÏŸT,a`Ùq–´¾PZº#_¤vËZ%ÆÔ…‚,ä“,¡•Ö§“6èæý…§æG¿Zñ,Ýü±{©ØØ't,cœVé»KoyÌœkGT`ÛQóèØ×í­øÈõÃ[è­ÙZ‡˜‰© #_Üåb» Ô[<°5sMDÎVÝ2ΫËG”2C‘‡žw’Û9jÜ%|VWŒŠ‹9í[tÅw#ª@2©hÖ­˜xHR²á¶>P22Q“ºkÑ¿-Cf¼TË#V®G°ÑLlÒ8³—#_€€R!ÏÏ÷äû×ece®“¶çˆé¬4@¤åPŽid­,LUòÆ×ëÀ‹¦Î#_îÁCt >Hƒîʇz>…ŸÚ¨v¹à K•r#2ƒ›mhznÔ92(ô6çÉz @GJ‘ F='¦?~}ä܃ô?fžÙÔ<¦þi‚æ~Ïyìð($Gsò•)OÆuz}_³={mõ™í¢½É†UË|õ÷T´ù™^ŠíËu?W[ú&öŠšÞcuÚ±åÐa#Vë`íÓw'æüAÁß“,ø’#2â#V…Lb#2z}` m}†Ù9.tDiè^€âWZÈÆû™<ÇQnÃwYͦŠ¨Ø÷B¶õÉJ“|2+ÅáÖoy½,ª°“4<Çš"5V¬ÔÀŽÜÜÒ0Çã++Ý€U“míDÇ4FÉyÐ<ŒijcqJŽ1V6qÌJµ™-P¤?;Ýçǘî?¿¡±ÚñnËa†Oú» xò HRÖb+H©ˆÖ±æ!êä)rõð8†¢$è$BC qÃLMÎuÐ’Î7®O¹§JëV~è™0ÚB!_»ˆ)#2ˆ@JZ€ëì –Õïºáø ²Ð€îæï]üw³Ü¢äQŸšÚÇ_ü÷Žájü¼ÀÏÊÎj6Ô¼\c…üµç©Nµ>ê Ó¦ne2ð©ÃCK­ÝÎw7Î1‹EKf- ¢4Hµ›PHþä])§xŽxÅ…×ãµ¾+¾ägƒ™ÁNf_Pð¡«4ÚO™ŒAøت Fµ¶1ÁVšû¸9½ÄÌ'Ó¤êZT§ÃÍÊÞjÜÝïzâs0âVå!ŒÞ£} ›É‰Æ´fÐä$v¥¥©ë›ñDÄ›m6gaA‰ËÄ ˆ#V“DkøåÓLõeQ²)Z[TµðüaqÚq¾øÛ#óƒW–¡àwL)ã‚pŠ}žɼnìé³ü·£Õ¾ÐõËËÖÜr¹Ú5¥:RŠ<™¶}‹™yÄ©vŽÎõ»ÚgÞ#_Ãb»œ½ëž"ËÖ#_úˆnn2—[*²¶‡CB:C:DÄ^÷ÍgÁ§áJÖ 9rÍÔ¨:‚‘6ôCc˜Þ.<¯µ^_Šy•Ýç3&Î….눪kÐõyRëx«R$Bí/±¦#2dT'’ /7bµÔ>î:ðãºXF£DQ»Ô>öŒTã½ß|Æ}jÒ|#V¢ªî埻£mDêÝáõ­ñœ5îkA(DPéáö£/R§ÁgeÙ¢HC¤èŠ®Ôì#V!ºMŽª²—á2QÔìáÉ(pë¼õÆûébÂVSTâ -ÅÞÔ ‡Ht‡§¹x3Cí9Y&ó±[LV)ÜhP˜„gy˜eª‚†—„¶1K[N1ŤäÞx­;÷NˆÂ~%ÖüZ*†cŠ%S‡Î´¡Ê¦¨^5Æ›c1„È‘ÏDFŽ¯Ä-\sÁÂQ´í¾I6NI¢pËéÚô8*ÂPíŒhrÙ¾i>&Ǥ-Œ­,Þ: ôjAõ±ùñ#V4»ö[9YºX¢|hg/ˆˆ‡ˆ€Ûá<ß,šJÊRš##_)j8Íe³}ö#VÎÙÅó°ŒOaH£Ož6à¬­Û ã*uÅÒ]©KÚu:5§l­ñª[î­œD9™8ÍÝŽÛ>öü=GµÔ-»ƒÁ4ŸláªúC­çV‰Q(.®‚ð8鉟 D ‘”w»Š$©Œ;ñO Pid#‰ô…hx8ĸw.ïl"ǽò¸scl¬ Üì(PPáÙç: ÀÊ‘FSaòÄÙ{¬#_-×W¦°†9ÖäD¶thLÕ-õ4ðí¶F`3eÓt2Õ:,š“7wvë5{#bzÅQx“܆w#¹ß]ó\G €|'—#_LÚÙ錹XžÒÍhÚñŠ7gé݇vÔbšÎ¬#¿5³Ä8§*U8øØÁss‡¸~¶¤š;Cg&+J_ =Ápû@êºFVS˜8¶~#–È›n­±x}ð7ÙŠbÈF«’Ê4\#ÖüíduU³Y"å®3±Óvâ³+’Œå[«=@ÄJ" ÀÛ%AªÌá¥(ûL¨i‚”ØôvlyQ¾ÏÒRìýDÀ§:½#VÖ“í§;Q#V·g©¥0ÍDe×¢vëÓ´5×wMß Íµ;aM¹ßªš›³ Þ›Ôæ‚òe¶xt^füGÓH#W g0 t#·x$ãl¼pN¦[º&ß~R[Éõ³ªãÄœ.PÔ•ÉÌT-µ#VÜYC”¹DyÎDˆOÉæIŽívÛï‹®ïu*)xÛ~¨d$É1Š|î®]3q™/#VÎ6©zêk¾!%ìµÅÖ©ÝF–NëéÕÈåŒ58JBi4îã»-=/=5±í3]˜¡ÝH…&öÌ›ì9R­Á,'XÀF)š¤0k®"¤vqÐûÙqÒE3JèÔ©#2„ÆôÍT¤4Œ6Ô#M™ÇgNÚ„È— #Xøñ6Ï<b0l9#V”k³œò¯DÂmÛ§aØž™áZÖtV3-&83šZ®54ü1#V³h¬79¬ózRû‚`sw#V&6ÉcÂf0‚ AM\yñÀö>ŠíαaŠdÀ&4pã¾#áÍÎRñ±ZÅIo Îû¶ß–'v´#”7â‚Д‘yÛE 8Æötf (™N¬Ù´×FškÃ]77§é˜K£íc:Kz³C®’NÍh䓹†ÉÍG#_Á5:]–T’ºVˆðìÀA}Î×´àíàß¡â»–fŽcA#V¬c†W&¾ù#®`Y-g¶|,»ªu¤Û³°Ù#_{œSí1 øˆœí¿mð%µm/Pø±Ó?Ç#2€”³»š·â…̼#Içxï‘”$ #V€×1)ŸAh;nwáÓew°ÛMÂD*‘Ý Üô G!¶rå¬nA´6º¸! y|o²•ØáƒFi†  1g Y&8}¸P÷ì¯>"Ù'#V÷‹yç‡)¶TÑcâI{-ÌÅ6 6iAÏ5««UUÆWœ¾v³6×uÙ‹[–èMÙpÉ6㾟e’D!ÙáP€gD>8Ä»ª”wlçx×"ƒž2Ña»c¤AëÉ·B{¢Éy‚q–uU ¤Õ%²¨6s5$ワÍR2§,ÖRÇ9µ=@a”.ùÖɱòYó¯&8ôjdèÆm·ÙÅNÚÿ.Ô’a×Hi‹4QŒ“ç—ZƬïaÂL²6CnÎ5ßmpJCšê\®Fgn!;3i“\½ËºPÏb¿½ 5’wæCjv8Ä&7vO§»È[îY±L˜´èŽdK6V‰µm´ëŠ:í¾:C";'Mª‰)»I4€õéF¥fÉ‘¾›0ôp†iæNÔíZ1ê#¨7#2ƒt7dܾ¥iÒ;÷¡3§$$LikAQ«áU2»³!)O”:£0wý•¾‡~©ïi0ÃÎáÄÙɆÛ.‡Œâ¼“Z#Cî¥ß›¬mŘÆÛU.6èØë‡ÔÅ£=¼dUåfˆ2È l‹î‡ë¢»_e“kr{K„dFPöa>ì6¤`R®Ä¡ØÕº@•öDF;®l‡Uؾ1»baëeÌ[ËRU½JÕdäw»ÈyX™ch{⇄¬959âäfÒºV•4.–áÆ ¨q^ðÞv>ú®$Àï* ²iÔ³TI·ofQ³ó<Ý4HÊ t×Êv:2¬…ˆI¦SS93RŽÝµ®‡NÚ¿>¢8qÒ£—ÇwÑŒ.F3{QÇX´FÊ—1UtyöÀxؽ6ÒÁ”Sמ5òœîvsº”t.¬ã¾\÷É-õpxæŒSl&H:oQÝÈóÇ=¡¸³Fju³·æ‘Ä4ši´í=Ò10Ö£†Öìû6òkÕ€é†Ò[0ˆ½BMX ÚEi‡\ìïÞc…žž`I¥¶ã­öx8ÃŽ/Šòza%<#2zÏdÔ†B¨à'±Å˜Þ k5”ê€tBPÈgT‡$ †Ø5_ #VŒ ¬,Ñ{±Þ¢t©aØàɲÞq4#_Ý$â}àÚ“ÀÐñŠë½ç}'‹](•TóÜ3o¢ö­j ÝK58YTŸwxÖÔÙ½Šrö6`‹'–T¡]JêZ)÷¼`͘[ê¸Þ±ZÉ»À‡­¶b„[VpmPSö2J!Ä•‰åÚ^V…X§.“³Z-Ñ1‡ÜÇZ¨'»ç¬ÁÎ5M¬ÆHrÝË­“Åð¥(¾ýË–wNÊ’½“mÊš98œá;»:a.g´3ÆtR4ƒVÐ`˸íßY^E4á쑧­ÛÔ:^Z˜utUöfM$•Î"ò¤·¯M*ûuâSº3Ù#2Ævcg¡\½›¹uPŽוdiæPŠÉ+ëå†y8IœE‡c!¬š&pˆùìBBD!­°2ºT\L”%;HÍDY »N4ž vk¦¦Œ™ÄÅÈᶛYRf½ j…A•l4±bqkÍðZ4]{ž*Õ\‘HÛ)ðV“¥Þ7¼ã·VY±=Ó¡ÆÛs¶üT8‡ïØã–ßöøMAZ—N8âuÞœN÷g·©{Ýéíç]Š¾öG#VY€Áá½8¬£dd‘ŽåÍunø#ÒÎhË'(„Ù¼#_"`MQxŒ|VúÒ½²Cb÷ŠÛœÌäŒ2':ÓºàÞK¢].õXvù,IË›â·"0¢†zšÊ::ºâû*.ºTµ–^Ö hxbºFîñka*4d};×xæ_ 1µTbp»6c N;$„Äã>Y¦ôæùäï·Ü>“vÕR‘‘Ú%EÙ’ê0Ö’ÈëióÆ3#VÂz½ÌÝfsöj!Pí¹Î àFåÔRÏ¡¢^‰l+›¸ÖžÙBaÇÒW#_8úUA$[Õ¾k%L%áéR[Ë:|#_Ú¨©b §U ‘êë¡rØ7O1ƒ¡*v¼Ñx‚žQ©u˜fÞ!µ²$1ãiÑœÖa€6"5Æ( 3‰P4pD°} "1˜Î\u¬ƒ0a˜®GßLrWå¡U¤ZKFïrõ….\áÅLÎú¬Tážó%W u¶ëmÞw©ÌÄVτɽM¨ÀÅ#‚;5½Ð7Ï<Ìç(]}9ߎMaìéê8ùÀ•±R'ùÆæ”&&]2q’É£XË:”ãüj6Ú ÜƒpôÔWPï‡èч^ý&fìsOf]w7&MEeËÃz×,NIHØD>ô_½Y/ƒJS)–‡|¢i=aÇ)8é[통0v1;ë,âêº&#Vç]phÞeOy‚ºŒ¦RìÙÌÙ#ªu ³j*”‰Q 6R†LåÅEÔ§©–¥¨ÖY˜ÊÌAžóqboº\$•få²gmq¨Ì9Ü$h]kMYÖñùFm~§ìÖt#2e™ b; 3B`^FK#2g9‹£¹–<ô+ÇFÝ7˜¡­#_´…Ý¥(p1©õÛ&ÒÕµlèJY›Hl76|D‰Öæ yÓŽÄÖÅÈT0¶eUa“T©¤Æû¸âL‚&·!92œ!Õ&ü¨iA'‚.ÈC å‚Âmó#V·L«Î¸x–«ÓÛöà›‰ý›úw©:'$è–$9¤±;„ 'j8Ó8›8I/º¡LY"Éœt.[hL3¢BÙ,q˕ɇt»òºAMX¤5dáòY%ÌáÀ¤¦!R}Ü”R OÄ#WËŒ³F’.@È&‰4Cb«f̤D ›Q a7º"¯ Ï¥ÖhI@Æ#V•I©{ÙL´0ôp‘¶`IhS¢j銀°/Z¤))E]*Ó“% -¦£l6Ònõ/4 jÉÉš$ìÖ1j½½ØF«M#mÚÆNðð›[8Z2˜˜sð|OÄ\‚¤Ê¹w]£¸ÖÉšÒa& sBj˵!YžDÆ;mÜ¥7zvœâE³§™xK(Ø’ë:)ðË T#…‡Šn\εf–SabT´qU3=tarm¡´uçâ]ÒjH‚¬;Òq6ÆÎÓµ[éeb¤ëÎl‰€ÙÿÁâ7[â!ÔnXMÖã•ÕCRdoÀ“¬->_Œéú‚wde”¤éÁ„":¢‘ºÚ_‚X½HIÄ&âj¨BPOž3¬MbÐ$+â)«¤"¨ôšzBÖÒu5ëÎ#2#_gNý»ô«LÓN5ĹʽpÎ8¶Fí0hXw·9œìÔ¶aT›D™Ð8mÃ* Á#³É¦“œlAXÊîßCè.'“³ƒ¢Á‘Й߳pò¡Ä!aÑ7µfBjÚV$HÍ.E„Á"tÍ2í Å`ðvƒj#_?ÖgŒ1&#h=iS¿zw1O•qÎ-§èÃý„.D»ĨdëPð•Q‹JY›»d¶…š%ßÊóÉûw!i.S,f²:@m {àäl ˜ŽË{lr*˜$r=nÂ)‰‰F‚…È?#€ú*úƒîˆÞ0èT$Vä|PU0QîƒÆS¤)¨7;˜Oz§ ¿N¶•¯¿Þ¥®ÉNRPMî—#ß&³#V4*Ä‚6ÊÃMS11cF0Å,WY±£hrRÒ(›H#V ’’£Bˆb€@V{4#_ÀŒnsN¸JðA­w‰´”.ùàÁD9#2r €7—-³€€Ü—@åÁÖ&ª ‡ËwEßÇÕåØqÁ÷ÛÇgŸb|¦áá"×à›6ô„„ôž%(—懌|­Œ(YÁƒOóFeð®Ƹ!´Ý)"aIJ›)vrÕ<í-*Xb…ÍÌ7#_ÚÒHG(|æÉ×”<¯¨ÊʱohUç«yß Ã1å•ÛG#¯Ãƒ)3Àå¬'åß;hhÅwA) gLÀAÁbn£ØEBÆE²ªF¡Ö]é”Iºq“…—ƒES!Üðñ:v”(~ûfq¤é=½;\ïå;v[õ“פëÛÅíÖ}ütuEœÌyÅ\CÜDD˹)bH©Ì*Ìó›±ùF6m¦ió4LÞÉò·—2Œn¸õHfÖ˜âoÛrÅë¢\Þ%ró9Ùp;ç{¤pxÓC䶼­&¨˜¤aÇ¥VŸ'œ8¡Änärt缤æÞ6âËÛ¾vÝ­»‰°»‰=Úó&#7ÕSšï#Á‚õ›‘Ôœ¹á›><»S4qORBB÷¹\)FÞó;jQ©ÕÖÑ›˜‡<è„™#¤T&YZwQ‡žõÒ°Úzyi] Ÿ8Û=çÎpi–NËŠªibVí½ùæZ¶ÑÔ{žÜœP”ÒŠÍoPo0Þj²o¼Ç‘nRyq·HlœŠÖŸXl;"J0wÄ"5¶uwy®£}=ôd𲥋\í¼óÎJK¾PÛ:–FS/Vdžnæ8î÷9g–Mœ5#V“=])ú‚/|Ä/$%bÛ9jà¨2÷zñ†Ü¼!`Œ\‚òÚ:›šK0d1C²º€œ‡˜´FÁ†Ùªqר !×Y:fTÒNiüª:ÂÒäΟ44½Ë·Í#2.ž£F×~v³µî1;¨pTËETMDMu]ÉÊw&7h«­ÅÌ­—N´¯ñߊÙþ}/”Ò»[ðÒ³#ÑjÐfFfš£JÉ0:“ÄD&?ÛÛ¹äNl˜"#2¤8áe$fH{äÒhÀOš")e¤¥˜¤‚'‘=röÐ|M Ĩ ÔÓB¤@CD^gr®@P‚pbî{®SÅ@lðvâ#2I½Ý‰Ùþ¾Õ77‰ƒµG½#®Š Á.~rT)(»wB*1ãªi64P»šÔaJŠ¥.Ý1"$-¬q›FÅ.£‹Ì·Öœ¿5Ø‚lœX‡7eÔlþÎ×´=‚HPÉ"s°;I;JPÞ¡ïàöDõÂêäœX¨¨á…ÔŠ†‰ðÁ÷ %Y ŸŒj6°²%1š*nsuÓuA¨æÉ_Oj}˜¢?Àâa·õ?ðû`÷{Dùæ€hWØCúˆóû~aõ?9€Bª¦—Œ[ßàʇ—ÃÌ"/¬õ‚zÐö?áÜACÜ$èëU=3ûDß_‡ÆºhÂèq¸ý— ë;žÉ)M¹á„&ª~4”œ‹!Öb•¾cn`Ô—¨€Ô‹ñp@Ñ ºFÿy ñ Ðô~tõKæ@z¿£ãÚ<ÀÚrø§^Ϥe #_U“S÷óU™0T™ÜrêÈ”(1EG‰às¿>¢)AìG„×r @Hw[üue-áä;‡óTÒnpƒÒt•¸¶;í#Va¼o£Ø"ÖÀl›7`ç0£#_EõV">dl+jM:ÆÁò8c2ÞH»Õ#2oÔ[a§±©Ñ4DšÖ],¹‚¬¬me…"þg6ÐAmÃM±°d#_N¹r,àÍal9Ý¢xUHŒN93zq1`¤. `±)#2£Y‰-i¤\¥Ùƒ™F¬SS.R«œ(xšÜš1Û);á¹a‰¹³T˜ %:¸œä§¦á¼N]˜»ôéÂsÄ^‡AÚ«ˆNBà'œz,{­BGN#2\´Ÿš‰$( ¢ÏO×£ø8Xyá]|úbÃDÖê¢l#2Çd‘û†/‡Å”8¨‡PÁëoÿx& ¼É$"©Ä¬ ž)÷Ÿv´—ðXê!D”$”ÉMQ­£hÖB«±&-&hØ4ÓI‘ªE¥ 2 ±D¤0Ts»mdˆ½ÿj»¾ùGcïwSøwåHWј'\Ç°Fú¾o¤#_%)#2ˆ@÷žÐÛåf6÷Â{1îë&~P5 IÉ{NNà›^q-UaíûD;õ©kC€îÓíA®jÄŠD-*A(uü‰[8£JÊ­aƒ=G›J¾ *ƒk†£Æ«X\±«”¡ö³lÌ„1‘v ÎLi8Å¡‚†éRbcÜÛ8i1†&H£ÂÊ–;Ô†AV®c‚+ºH@`kŒ›‰FÛ#2wNN)§” ï”"Iš §dg>²W#_¼(ô×׎œE'O‚|@ù!DTH‰ãVgzi;äÚ¢3Xº’#Vê§4#V@ÌðÎÀn{ge³BV40cäRk2QÔš&‡f¹Ë*˲E/ãÄfCõðµúr‹D€áºQ¨7!‘È; Ô· R€ƒhæUCMAðSÃGpDÌÀ‰‚Q£Ãì¸5¬  GG[Æ*f(fz2¼S.‰AŒê@˜]¦ Bš—%Û0£UæóÍZ5o#_®~-_ïœÍ`‹jçeµæ¯©ïeÇWwTj̵ͩÝk–=wEjáHÆôá5`èÔVÚ’lChUˆ½°Œc¿iÍ-îC$Òd‘ T4&³ø49¬F"‘èšÒ÷RÓ³¬hvR·XÙٿꇮµã(V…Ã)x@׳dYDÒƒÞà“º0‡“Y®4£ÂÃxcñˆÙ“p‰ud\6žìKY;ÄXn¬ÌIžF·Š :HÒ§(€u&'¤H·÷8ä›o†Ñví£Êûß‚`özÒïKŒlõÑ‚Z2J)0$Pj9Òï]¶öÝÅ{{|×·Ì:È5€tú-„ܶddGö24ŠPÑ’k#2?<”3¶`‹€#1TâQ•°#ê•Pæ"#ô„#_â„õODŸ-ƒä$vi 1|FìêûºúRã)ë1“;ÇDN_/9qæñ©3 >aA ‡¬z”Z«fü–ãø)¥"ÿ-­í[ ˆ²6 ¨cÝÇcš†Å”ä áÝ&ŠáN«{|³#_¸|þsQ(³IŠi*É-Øs'‡æŒ×'6q…aŒ'Ž„%Ý,[&ë3Y:~íÕ¶C¿*-vÒ:#V ë˜-Ùl..¿îÇ.‡„né%‰!qÊíöÚ;Ì˺|8¡¸âˆÒÆ/$ñ Ì3Ží‰%»4зºå6S£{fÿ†+L:ØŽ]`†ÁÅ­ªÊ3f"S@ƒÅDƒªËR\F¡öD5§BLÊáàØœõ–ÞŒéÉÉÒ6‡iÍvΤñ‡ÚÜÉ„¬ïXÍñf#2³œËØçI¾pÉjæy™ßÚIÝuà¼ì§k± í’¶ â[$b§!àœ÷£y• ˆ‡Œq1ÅíÆ$³‘Î2œ©áëê¬+½[j[?2 *-;¬KîõÐä‹LFäZ–‘¨åSI¾ÖÄ`E!­¶ ÜÁă—5fAåµÒ@œÀ£`0ƒŠì”.´a4ha–i¾}ʆ°šËé³HS&ˆj—ˆ®¶’p‡C™m‘BUnf1Ç‚aÕ׉5.]›]6«Fì­±3‡¶Âpu2墠SR)#‡ª¨2_\.k`^¦tºlȳ€pM#/)yøŽ0=ñmO;P•ˆ$úreü¦°×9-“e@q¾‚¥©Y¥+)lÇ#_3S#_ù@­¯ÖÖ˜*ŸÖ¥°d„‘ETQ0(Ñ#ý#_ŠŸpÑþL…'wh#2ùf@ÞO¿`¢?™†ø¥Ó¢8þ)“ª@(ñhƒgãFd 8n,"M´0þné;½Ét|þæýšfÔqNòÔù«(ŠNí‡ —A_|‰ù9 ×æ5T[ê6û4C”¨²#V25ÌÌE¦#Vv˜}ÓMš"oDA)¤j¢îUhå±.ƒ6E¶˜!ƒâ£±gqˆ?\J1­j*5hµQµ±V*$ƒ"¨m‡c0”¤,…,6jFLZ&Â#2¹RûÌÉVoä&`I3´]~™ÛÅâ\Ân÷Ìèv§‚aÌ,D\ÎûUÙ¤>³¶¤ínÜëPµ¬ÎÛ>Îðî^ŒÌñ‡±[ãÌ¥´Ø™§Km„ø&BÍÓ(Æ–ÕŠ{—ݳ\¾Ju»­<ñFò'ȶâ³åYahqÁ¯VVnsÐÇ-O¯~/1W7RëSOÙM Ñròª J wDO9<áëZN¶Ôk³½¿sÒ$ŠÄu¼*EõŠ˜ÕÚz¶j¯9Ý똰l¾•QŒªfü^‰R.¼GÄFNÖu|>üg1uä&ÂI§€ÕtrRÞäYP+eMŠ…ŒZº.w´Zi§in:™Á<¦4²šï\ÉÎÈÒæe :Áå£ a7ÞNyJS^‘^I”žRpq9ë3N¯³µ.׬ŠñÛVd´úˆ€Žp¤je1/÷ 1¿iyt]ck{¾žzœN옫xyŒtñ½ÎõÌNŸŒÍ@ò¶œÇ#_(ˆnÈÒ¬b0–]¹K19µ,mÎ#{¹‘ñÞ·|é©”öÛU¹nÌ‘¿S¢vÌ6„ 0gΡ7åŒ,I?0*櫉›ßg{å÷5þvÐÌú¾ËÜ»U%­¾ý´ÚâÁP91$@u.sNÚ›D>Ÿ­â¹¯$½¢3wƒ Äå8×Æ3[ØL¸ÈµÆ\Üée.üb­¡ž½i×Z+9ã~*áó¹/9—ÉÕxÜ$ÅçÎxíÜ߈Ë0d…µ‡É&…#V»aÆ)0RV]7lÚÀg8òœ«§l'Bì;¬EqwŽ;ã\sFâœY ÄÞ·Žš (šuÍx˜7„õj¹Ézw×´åÇQ¶¦˜¨”®æˆ£'5œÂjg{´-–`ʹ‚fn#_lPö´°„Ò®‰Ì©’#IËBÞ¸«£¨9Öàs–¶L*ïaccÄ„ƒÁÛA×HãvC#V´\u®é¶M¸Ç¨gqeä@÷Ó.G¹ 2”UÍ\tÜÒ¸ôš¬†nl|µ3‰ÊâÆÕ+K(‰¨§Át‡Õ`|ñ{aÛNøê*tÚÆ饅’£us¾¸Á"sÅAŒ¹wRåIF\ä©kSOc~\Jo»‚¸J×2\w£ô}ñÎGåp>dµå3JyßÕ˜â·Ón&궃ºˆ[g™1²Î—²ëÛ»° x.#V-5ÒÝHhÆù*%Óƒ˜ CFÍqjëí«2wwFã­AÓ! ´â“¶;»ÜwX8凖åÖÚñ:‡*ÙÌáŪ¤Å«:¾7Ò¡˜ËA´‹/)33Òäåš9&7‘qÄÛJ2eÅ¢ÂdÈù»1©Ê&b½[| EB"§#_éòi¬“‘µha#VzD\†1}1¹î÷¬,\÷‰:Hk$–DwКÿñä!ëMÕ{#_„X”"i|ûÒ!ƒ·G©æzª¸”u(r°H—UÍl–ÉnZ@´´0¶«A)„ £%a”!È e˜@7üé Š®¥”›'óX ên?[·|by +Á÷(á"GJ©66m²ðÃG´Ê¹9Ñ›Ce‘ÚU§ÀoQ<‘© F‡C¢Œi‡°q#2ìr%’“„?úðE‡;n.þÌà0AÕ‰#I#2hhCôOˆ†½9õºÑCÆar¸ÁI0hm#”4 4=ã©MgÖF6É Ä ‘Ê”ÆB”¤c•E@à“cÞëÅ"pE4ELÇMeÒ`E!ó6aS$u18ÆÔm‡ôM¶é‰‹,#8xËš£$I‰JÀÃuE1ˆÑUmm·±½¦á£CDcz±µ%DV)+mšü#_çi•ÝÚ-®Ð¹·Q»-ÐÄ4ÀnHÜs­E-*¤„qŒlƒ«#_9˜¬d>¬U˜DžM ûÖ%ŒK™D–„›29"ß®taŽÞúq£Læb›’UB(•`GO‘´††©¤ˆ@…Š(ú§„£eZø¨©MTÍi$5)I-5X¶ƒVl´jfÝMŒ$3#_C ($²ê@ù»>F•çßÐè1#2”S Ó(µ« Qjš["„[šø‡å$Ç3_ÕÍ9yŠS¶¦#_`ie(eM¤ì2pì*J‰¢Ð74¯êåÉЪ_IT©‚ß* §ÓñLㇰ.ÀÖß 2dCgÓ0ÍçY‹š*LiøJ:…øÀ¹_gg#žÜ&æq ÂR#_v[$‰0憔¥PšI6Š(˜šÅ$’*”‘y ó›} ¥Tþ&!îƒ"„añeAH&š¡÷Ÿ¦…RÚ1—Å6é\þ˜y˜Æ5‹ 8G Ï×ó½ÙO€zO$Ó„9‹Üþߤòñ9ªOdÏ׸) Xa-Š`d©_’ ävžžðlÏ4qÖ7 0úZ¹¥ÜE[`W¾˜—õÑ 2ZA¢ŽJÀÕÆ <Ú?£]t¦I«J±t8Ãè#2MJbS|LÂÑ4Éú Ž³|šªM˜ŸW‡„…ëÏÓ]ò†Ï gÚÕ³û4+/ì—B!Ð5ž¨#Võ€9)f"á @!°2ºOæ1@Ô‰£c*Q™2ˆ# Á&ÑÀ¯ª/L·ž†ì˜A5#V®mçGdÈšÈÏá׃ZªsôMFdåPî]Ö#(!P$Óg-ôÆ…À¦Zçú1DäPòÐ:…;ĶÌÑ©Y!‘uiÐЂ„??¨÷!7®&!#V—ˆG÷óÉ%I]Ž¤wr<¼~ß‘õv='‹Ø¡õ÷¤ÀÏêÙ}Œò½Æ¨P” ui< ¼½ö¯6|{¨€ô;y”ö¸¢IÈ–—ó[O=ÄO®À¤8úì&-ñ "a9ãlÌTb.8Ý'T[Æ°§dm#©i6ßS¤"<0 ç7pÊ#_/ÆÇBLÿtѹbòTЛ2@Y#zÌ–mªd#VNrJ2@É?Ÿ‚¢:»L"Ah4‹b#V´— ZÑ öŒä£ ƒ–#V>‚œX‡Œ *ìãHá»}ÞÕÚ++R•S?Ùf Š0#"B Gê}_Ñ3žOÙ±tûŠÍᘪ~?œš\²±ï³ý_ÇäĵÃ@«&p.1$:ãxp_?+Ö`LˆßE>ÖÀ‡ ¥wa¥…)`3t'1¯P|Sàþÿ›!}ÛNûÍ^6†zs‚Áͤ{›¨ŒÂj'$oŒrPZMf_®æúëÔ“ {¯Í}n˜µ HXÖ&a†Øïÿ6n±¶#2Ä[ŽVa†$å‘ÏE¤AÒ8NF\›Î’nÍ«r{ÓÕz…Ü÷jö¤÷vºUí'2sj—{l` ÛfÓ&Æ`L¤f9FÆ¥ÝÛœ¥›´»kä.–õÚ]q+®“lgOw˜[ݵïvt®Ö¸Š,ƒ`ÅõºëŒp„ 1;ìDŠCŒV3œhôç†ð6Á.î`DJPP‚À Ñw!Îêåd÷U®§—|v·¦ƒ©cv ‘Ž€807H·ŠÔ6©ˆ È)›U¾-q‹Çm®¥µw]Zï.Ô{;®cB5úahмìŠÑ`á™I“Y,X V‰ ¡\ šN3Ñ),¨ aFa&´kRjå­Lܪº‘u§wE¡v aH«"Š1Ú:°m‚Äd ŒÌ±ŒÇ|Òh!¤„”—lÓx™˜©°Ñm¹­ÖËa[šÃX¨¦AÓ¶cHÔë#"ÅŠ1q0¬Ùƒ#V+9„|õéeëmÓRfƤtŽ¯ã.½®qqZ*7Åq2™Ýt)Bœ¸­péRd»®£ e%×qAní®ŠŠšõf©v×WÑI³×¼êõ»RÆ“­Ýîõ½LK¥¶¸—*¢fŒ¸Š)—Å]ØB¤’ †SuÍ…p¿W³¶õë¡–_9ëãÒUk!G,›G_Ü?œú·²÷èõç͹Ò96~À¥ *xo"%[ч8×߉ܽ²ìÒ€cù² >soÊFôAF1¬è.ŠGÖÞhÅTTB, ™*—=qÒ²2P„BT'nXÑJ¬Òm‘Y ’F$"H#_Y®ºáJwȆð‘QE"É"É(í&‹@ØÂÉlJHG%çšÒ`Bcˆ®Jd´#_%+FqÏH²Ž‡ÍDœëÎà$G‚A b^h¹îµ[s5YZE–i™‹5&Å‹JoÜ[¨²-)6ÙKj³YRËÙ5b…”Ñ¥JmôÛ‚Œ ¥ŠÊVRšÉ$¬š(šhlhÓ+$†60"̲š–“HÙ6f6,ÊfÙA¦0#,Jš[&Ê‹$Ñld’È(j4¦MJQ°LƂŬ¦±E‹FPÆT¢i¥#V%™¬hP¤ªMI¥•‰65fÓ#2²… ”˜Ð”̤ÂS$Ó&’–mFš¢5E&ÖD£mX™µ&IUVY«™-R“L ”¢(‰²#2æ"¤,"J´Ò²¤T‘‰2‰$$ˆQ%)”FePª@ÞCK¡H:`F”­«sjR’Ð^Òµrµ¤AD€yq€H9‡öàÐ9PÑ–#2‚#_h–NõØ ìæ#2«À€OÏùc &$Yã×xXVK=Œ ôNzbƒO67Ü(~+8(]ÌObtæ]`øNÃÆ€ ¡fƒØÃÏ–f¸('o*^^vC[=³B_°d÷Q@ ‘ìr“ ’”>f“¶–y$ü6 üѺ€qÜ‚¯æï>Sµ9'Ѩsg¥­SYR&yÌv×y­Mz¤å"bD¤'¼_\^‹˜1·ÜÙJ7iØEÀŽT¬®„|Ðg±|{C€ÎŠˆœƒñï¼ë‘kܨeDhý OÚp0B%·„ÕÕü,ß-Qu,gõ2Ç>»¨`SžÎèÀ»)¡˜1¡¥Á¤ÉÈãAKSWIL$É2:ž¯P×™ó˜…$#V`zÕ}GA𾟔nѯ]?´ÜßžðJÓ#_€0Î2ZÈd'ÝÿÂ|ÇwÈã>]ª½Ð°@»{¼CHƒä*ˆlJŠxüLUàŸQ~½ ]ß']šLlŒ_òI‚UÐe@‚ÝÉ0À“X© Þh€p £$ùÖ„&ètÔß™âÞºGá¡;âàX‘LTÄ@êÌ&JBEçÖ#w´±Ÿ¯iºÖÞÅÐöe×tFz¾—Tʇ’#_‚£#VGCïq¥ß®ËÊLÓÌ’n„þ\ùµYc±ý¦¤õT&4&–¿ã~Éæz®Ùö4‰ÈæF”TßVeEOæg ÚV†gApm„A¢7IÛoÇHlO®B™$9ÐÌ&Ž ‡d™m#_›È9R¾Ï~©ƒk|£Zĸ3$ˆ·n#2»uÛj‘«e„åDˆ{áî<Ž4±&¸éc*;˜L^#V ÑM ÆÇ"üƒÏДƒàH»îûó0Õ‹»ëN#2Ôm @õÜ#21µ’ÕŠÕï8Z¿4ÕÝvºD>§#VõÚí•+¹DmÃ#2|Mt‘4× J2R¤ŽpXA{ðéæwèSð\ØËÕ§b#_³ÜZ1‘ ù¹xz´-8”¬c‰Ÿ›5¤Žïm3„mˆÞU¶0Ö³3'œºô: á$€ÍJÄtœ¯ Âc é÷HÚÔ2°nŒ£A,:ºYw3Z>ów­Þ‰ª#V2IÄGoì|~Ã#V}Ý™ò#VÙ徇íô%»Œ0~A É2|g³Îý2'eí=)Œ(O¼0dº£œÑRª$”û“ ôñQynjD¡†~”—~%„´’Æ )Õ8~@Ñì2¸¸Ã#2úž3ópDUþ‰ÇÕð?`‡ï jyfTÈÐÐ(ý: (ï²Æñï0Ðw 3mNç)ªZœÀ§''±%´›~ùõǬË=»¡í„}IK*ý½æhâò>²,õN)<ÂcYJ³"J£Æäñ6#V»öÉd&åÞ`{Þ>ƒ¾NÓ– ¤“´†Þksy%J‹r¹Qmkµ¹³*ù×U2Õ%ZSlœd­É&Àf;€ŽËßÐàpóöþÞÎ@¡ÚZHüAþÿѼ„$¡zì?×(± #Vºw=púxŠ•€ÒBûÞÞ¿J?€fk4§Å*p -|.¬)v[A?nÖªXë¿8‘Ñ_CÖçu¦ÕºÊ7f1ïüø¸zÞö±NuBÕÐb!õk†ðÞh bÀ5˼AŒ_c#_ŽN?kU qƒÄP,OžÈ¿ƒºå5Mê_¢ö4Ìœ8aŽÈa‚¨·S2)}wœé3HŸ)Èc{º[36e6ÑFÐr/¦7æðÀ² Š O©uü>¹lUÑË #_¸Ä_\s”ÉNSÄQ4U½šØº•Í[–¢m“iM5ÖÝÜ·Òº+̼(¢(YÙ8é}.;ÎÀùäW¶r¯ ||’Â,&ùâC\Ú< Q¸tèÒ£ò&Z`Y*_n(½v\ùxsïJ§›ë=rWŒˆ¢p oÂu¼‡a¶íN[Ör¨@2 \‹QUb²#2Ãv’¬‹%&¡LèÍÍ}Y¿}U-U4œƒ:k)–œ×#2áTÅ8.ë;Þ&ð‰xIøÄæ¸COõþ^¾°?PgMçÛêSs[¤GÔq‹üÄ#mW;Ǫ;”{ðp}1¢ªr‚ªq¡•8OÃŽ›ûg·íïÖ?iî_““ktQ|¤fU|µ{µŒááµ'uŒb{¼8PÕî¿«¾YÞ…&Éh.ealVŠˆæª¤¬ÑOVZ,„¥Rš£ý+µÊl ’lÛòf}bäœ<fjX:”)R0a#2@N£[šwúóª½/Í—<Ó»\±w»î·£kã–o®äLÀ|ý]âw\˜šúþW—¥º³!›->âÖRDº¢(,vk!H©!GÛ›uΖiÌ‘5GàDÙdiƒm6ž")ºº'›¹«ëÕÎrÒ¾.`L–¬ÅâÓ¶1šñŒ8Ï÷ôfÙÁ&`X‰Rû ħDs©ö¶Þj6¯¸´¤X„Ø“P–Ú×*4ªlÒiXÚiÓ•ÍHs3ºédV6¢¬U¿u¯ÜY%{±­¨ÕD‹»´C©Þu"Cs(u¬@팑ֱÓ'{#_Ž#2J¢ÄFØ……T—q¤ò¶-µ›ì&@´#_Ò'Y–°…Œ(q"m#V ö¼KKá˜h!˜kÜÈØÊ!ýq”ÚI̪£CxðØ¡Çe3Û{pEÔÎI†ä0B‘ Ô²”T{6H¸ÝpÄ'°Ç¿‘SƒyYúîû ip¹ÀCö‚BJ®“4™Øb˜©ÖVŠ"^¤!H‡h—K¤FPb¦X~ËNª(¼ñ1”šÛ)^Ãí‘B F€Ž¼„GvàÖ§=s1ƒæ%]·{Yæ|~¼íä)ýqˆØÚnî››•ÙQj+k«en•±lhÖå¹V6ÉD[•ËF‰5FØÕkE¨+F‚µ¤´M5!¶Æ¨ÌÛF±j¥#s–5E¨¨Ø¨cUÌmE£UËÆ£YÎÒY¤h«¦Úá·"éU$îÚ®çZ-bi\8nj¹­’Ö6´Tl"14g]nk9¹DEX6É«ÅIb¨×wZJÆ-EjKcQl&Ž[•DlljѠص&ÖŒhÚÆبª1Y$ÔT•&°Z4jé¹±Zh)MZG*j…%T€#28Ý~Šžã­âÃsß±@à1¨µjþvy´$7ÐzÐ4¹“q0Ap’ˆ{>‹¼’½‰’ºzDi%)¶6ѵµ›[ ¦š#_ŠOhÔшiÈN^C€£2#2~^Sê\éÒ§A‰óTûÓcØŸHk0>›š9ÁM4¾¨L "~X¾€j*ûî…I¸kš¹¦îê™É(ç.”F¹Á,I36ƒh $Ž×#2#VlE‹—ð²÷ºã¼ˆÀö®õÕwNé]|‚G2&"‚jª0ᇑÀá¢dòÄþ^ÏR§0éR½tœÝƒäunio‹ÿsb² nV² Šz˜Gv»®§ä¢ŠC*#%b#Fi0bCJ4LIJ™ÊE´R²Æ+"(°mùþìú€k##2ÂhHB=GêÜåŸõk¡~Úyd; æ#_#2aÚÁÞˆ°#_¦ïùf…ƒ¶c§Èd›@0†Î3שîÓ&ør)+pøÛ#_Ρ—¬A{#VyûK]ú±ž’u€b Såÿlm ž0«Þ@Ž û}ê` þžýH~Bï’ˆømBr…ÑÞBiÁ߯õšçýµ7‡¡tí«{6‘´*(%PGåäT@È<^óRäÚœ®b ¥þoô^÷Â!($H‡Ä#V" §†ñÈé:¼Û–¢ŸÞߺ3ß@Ó€ôn®GVÝt“ƒœ +°CÂp¬¥eè 8)#_£“gåÜ,Ù›J|MÅn¦Nd(ÿGêæþ]CÑ í²‘’~Ð|ÑC¬Ø{‚mÒ'qsZ07!ÜúC€<û#çAô‘SÕþyûþ ù*Ì¥}I3-ßW½uõþâÉ6÷gÖŸ%MµO0%{öPª@‹á „*´ µ@Ð „ µ&H#2&¨d R ÀI©Q\ƒ% a;ôÃÐf"»5&¡J¤B$ƒ@(ˆÏ+³–0 ýSF˜~ £Z@´Ú“§÷//}DØæ¸æ®.ƒA\JÛ9Z¬‚7œS'•šMC¼»¼øÜL#_QzáìÄãÚƈ©IØqÓÚ½¦LÚšjJ*Z{¤{ã6Ocܲ«ïÁAªGïS<’ðý£„°ò<ƒ€SezÍÃûGÈaõž’}‡Ô“†¼áã48#2þö¬4+Ê^²Dˆwy’Þây殥ˆ€t’¹#V#2kÈÃF`©„5 f—•ÃÒ”nÕHúÿÌË?‹×Æ¢5épæù{^ǺI׺÷ª¢ qæ… ‘€ #òÝœpúd°ê@éupAHwƒøu Söˆb÷>1XîÀ¦f趉Uð²¾² øl!òÖä‡X Úè0Nr',`”Ÿ”°cvÏF°Üƒ¿ .I:ÞTÖG>, sŽö`…_U>».%C©¦2ò¡eŸþ"zèRŒV‡<퉷0¿¯úö®s¦£Iµs$ZsYûêÄsŸß8Ë!¡6^a‚‘Fœˆ­!pUR,¶MY†L#_L¤éºëZÜ)܆ìŒ#_Õlm°®!Fo­¯#„#Vê.0ÚiSP™Á™&Hà„;–Í 5»XcÓ#Vµ™#_2?œQ*#VP‹5ª.µ²ÿÓF3ý¶Sn¢"ý`ÒP–Â"5i8ÍyÒ䔊hÇBq©A¨Ö9\u°Ûi²W39ͽ #VË blR#_2dY>!Ç­dtÆ€ÓU¥X.Œ­k £#2|Ão­4ÚGQX áÆ…8Ê-™#V1µ¶F1ǬdÆA©‚Q¡âùŒ8ͺ¼œ7‘…WW«@–#VJ#2¶ÇvCh6”Ô&AHçL5%y®ïËÖ¯-DcZ)o¯T˄ᤋœÐa†#"ìË mP–È¡âMB´.TÒÅÊ5,J‘dÕ„-Ò’“)›né¥5©†ÒçÜ›}›Ò¾-åäÑëæÔà…x@m‘dìîLëJ4VŽXWÈ», t›ÕYÂjãul$Ë&†™´÷^ùÚ¾>#&.|½ÜÎêæ¹W–óy·Ýjå²½ÑcQ­£6±±=Ã+›@ÐV²¨ìnJÛ;\剪MDC¶øo1Š2@Õ…$ÅdÞª&mœY4tj&ÐÜÔJÉ nA8tjÿÜÖ¹›a°›9ÅDHrÁXfbdqp»EËèÒÓÔƒ­Ç›£Q±¤Ü„K¿oÈÀð5îÄÛÁÒ®éŒ'µ#2×°ç²æÆ1AÞ£Xâ`bÖ³§O䋸Òý aù´¹à_*·ØèŸÒ)˜'ewâ¸ZìóÆ\<•PKó‡ÚÆ3˜(›Q¬>ÈÃöY$ÁDÊ í¬pÑ2â˜3€ÂÜp¥Ù>´/êŠ(ƒõF6§Ji9Q$ÑÎOç„;÷ÏAô?½ìתCå9¶oëÖ~8}¥k ýqF“h6úÎ2>ÿ7~MÑ!9#>ûsøÄÕé#V#_¡c«Yg7O²¤%Cól˜ŽœÂ2 ‡_ä³XŽ)* ÒJ«Á¬îå†Lê}üîoZëÔoD>ÐCÐz† ¢Ïš¾7Gð`Ú6{G¤œCå"&òŽç)4V0h>ÈO¢¤ tô‰ÆPü²=vÁ²¡„•T€‘*UùYs²å8Q#œ`Šê˜¤ZH•*óÄNÙP ´-;@ž²ŽÉöƉ_j$KB4»C–ð¦7l€JPN»Q“ìrtˆu¾;a")ùˆI¡dÜï3ïJ\IÂÜ6i6KR›J&¥Ò—7uá6õ8Îù ð2BsXèBHj5È<V …jjP‚͙סÛóÇ÷ñÀj šÀâøÑÛ"týØ. ˜$­9X/ÔÖ·E È8„†N}ÅŒ—jƒÓQC¸ª¯ÃnmÍ*ä¬u€Mê¥B$öJ(==€C•@¡Qd3†.©“#Vú«Èa(‰â¥ˆ¯gáLN8ôÔOåŠJÇü·%&1"½’ìME(óá~ÌÖj"‹R6/EÜf!àÐÐ5aQ×G‡ÉC{ýÚÛþgN~Ãqïü8ºO|rÈRPŠKZœœŠf\²Â>î1çÀ`"‡o5ùó±Q‡ìáöìíG¤N_8#2àb~X6ù¼Nå”#V¾‘Cï‰I©ˆ#_©üOUná‘Æ ùƒho¸Ì™$’¨…wŒÕqdÙZú^o[Š‘ºY &*RÒ”ÛhÐ-Ÿ¡÷h0t&&䘱$#2[ý"¢”µy^žîJbÅ57ÚnÇ߸E×k¢ÔE$Qš¢ ªP€±À-ü6{B>&ëä¾Ï4}XšŒüÆÁ–@Ö«{™‹×Y´«¹#2²á‰ç˜N¹û·ì~”x¡)$'ÚŸnà#2ÚØ–Ý»°f3¿3›­â‡<–7½ÇGm¬ý¥íõì×c¨TÃ{¼¢ÿæö5½4ð Ó]܉@ÝK›,Í[Ä[#_ÝÄ®n+l,<Ì\¼ËeJJCñm^%Èž1Q³ΙØ|iÃ'’¥Ì×ÛsU³U)Ã]í¾SÛ¬à|ê^'¤Ï-¼Éˆ±Fת٭ó&ÐÉl‚¬$|æ#2­»r4êftFû>ê#V#ž0ßÃg„;›qó#_žŠfmú8¶$xˆ¥_ñÚ1‡TšJ™Ç2XÌ}­ç©’mg=)ƒAK–¾Õ{±`ìŒL'¹ƒzT`¶;²©cÃ߃ Ê3+!Ør˜D’GèÍO2€˜ŒÜ~G~#2)…UREúåÉÜÛöèîPó„úØ*Pq€Tˆ L™0 Çò}űÀp~ƒòynÝýrM|Ã1ŸëÀÿPzÔÎUVzB¿\Ü'åÁ÷ÝžFf¨-4XºÒІ¹ÄŒ‹72åKü•ˆ)Â6’áoîý]  ¿2E; I2hüT–æ€LΨ“šSÛ2~œò]I"ÂÀÔÔ™m‚AF™,–ÈÜn§"þùª%~ëgJl˜‰MòPâ5½Ø¡Æ!"×ãs,øü¸œs2žêrÓÖ ˆNÇ`¢)­ÄÁÄ(p—®Îü´´ yã¿fÇGd{¤?——eªÊÇ|W¶Ö°,ÊEÔ?‚Š\éCÅ'ØÈ}k7ó7o¦kbkfu q;pËqµ³)%À `ÝÂS46HA¶1FÙ„OO#?Älþ–c€â$‡™'CO×âiï“FÙ¶çÚhýWñvÔÃkýüÚ4I™X©*J#’‹$£kQ#2D4™ GH:¢Rº‡ Ôä†Ð&ˆcF²BÏ2i}#V€>+ö"rãd7³¿ä˜Âo¹AÉ:™¦ÂÄB"]ÃØ‚y©*‰}ýM×[÷bN\ê¹i}lì>SfdݘdòVð³ãV`-3`Ä£¿Íø¦#2Ý„ëNpùƹ#2ßB Ä#2]éã–…Ú@º!öckìw5M3†>8•#ZäJ‹lò¤"•Ñ¦@Ó 8úLÝŒ'éÐ×L‡õ¾B:£#2*$Ãk‹ƒ l]q ¾Ié>„:Ÿòj†©ØÂ’d!{0y¶€.ð>®eç´ÐöêÎú6}c„a¸le.Ï'eÕ,s^î«jÜ>z$þ|Eõz”8ß^Ñʘ$z‡Ã…™äI¨b!„£4Äè9({#2öù‡‰Ææº>¯)R >èËÇRì8%õë#2دQ“{¯s¼iÊ ¦&$ÙÄ0ÈÀ,9øî{#28K«C/W#ù!ñ.OaLÛÔ‰(k#_1‡›Ëås,íŠìµuYê‹e‰`Û0õ¨Ã5í…Ê Éü ÐÿTK0ƒu­öÕc-ˆ„-#VM¼µt¯Š½*J‘/7¬ÕúúìDE‘†L¡Êë–mƒü²Œ144nË,²á‚FgC&Dq²S ¯¿Ë*>@Yíþ#øoöl× r@ͪŒÇùÜÁ„ ðýˆ%ÌØÖ‡µœÓóë›tÕ\¤°v›âi³ó‘0sôIøþ‰¬%)FJ´~쬬Ճ„é®ØZØö#V4ŸÒï¬ÎXbP*^¸‘Ká½!§áîìª,$E53Ä­ü%¸„6 L°¥5Íp‹&Ðij,@D(HÖÑkK+~Ÿ^òˆY¥5™•„ÚJüMyÏÝÆ:º£¿J1·]-ÅQÛSVÖ@ à >P“¤Å¢ä—┩9$žà²Çž#V;Êóé÷ö[f+åôbDêÃÃ\½± (M°l#_êCCeÞaZ/iÆà1¾$ÓÙ*ª—RÒÄ´2?>&1&TÛ:˜†~þÍÍ-xúᶓà-“?Òs,éÑ››”ÂM™„’BohŽÌ;ãX|-•œ‚;àN!ÞO¾uj1$“ðÑSOÄ°Õ›X‚4FbcN¥qNhÑAA,¾øÂh©€œrX7”wȧwEšzívTõÕÈÛý Y9aZFäŽ3HCÓ’%êv ÷­ÓboõÇnµ5ÄÉ$1×ê_RëbLéþÏú-zM.#VÐC9q¤`ãÈ,f©H%’bøæP4±'b«K¤¦1 –…!eR±#çÛoaþœâʈäõܱ‚ºR%1Ã@ -»Ýkðîß»¸Rœí¹Ã}9}ÌȀІĊ0ö¬ï@Ò@†"î(Æ4&¶Z9V²¾§»ÛuÄ#VApdÃDÄ\·™76qaF©$!å6Ä,aTØ“Q¦””3– ”ÀŽFE-é… »Û@;†ìèÇ#_LÅ?3@-Ò-±òõ×Pkž8¤v@¡Þ¥i"Q’ N;f¸jªÄ’”IŒŽÂ(‚#Vç¬h«™><ß·áã…þ—NÐRj#VÓÙííWC#_ÑHÉÞbœ3Ü"‘±#_ADK†b`hÌBLeM)!$I”AÈ(U¢ ÆœÈ&Ôd³æõ úÏBˆˆh(9Ù4æbÌP)%Rb% îÚÝ+Vû}¯”×=6Éó'€üý®HܨQ1€¥@äC`Ü'0_êçG§Ô›ù¦»=Ú]Ð7zæAÅ”ÒÑLÓ“K¨G(<“ùSo I'4ÓS$ˆrji ¯?ªÄ>yªólœ¼ìˆ¨ü_h)¸ug’õŽ\ÏZšèBŒHl@ó:,¯ ˜T%àø”ÒCó@äìà ÍÑâCP0e˜ò{6ÈÔRè“PšÄÄ율˜bÚvB(Ú#V¡6̤0Ë#j•5SFJ»ç¯}/ƒê>v°Tš¾–ä%67"C_“ÒêzèØ'qŸ‡—‚XY£köÉr‹— pÛuÝÙ­ŠÔF¢·WcTÊI›~ô.@d»ÆHji#Vf(#V;…#V¡Â&¯È‚ùŒ) ˆƒ‰0¬¨e}w†g®ÚéKâ׳2cÕÒ1ùˆÊØ“612*!Ç#‡C6;=GÏ8†T¯—¦Û1ãnè”È>›G-fØÂûæ¡,yla6½÷‰É‚ø†ŒÉ§ŒM<Ö³|½YdÝÚ¸v¡² Qð·l ~S³³ã@eÊŽË@ÛŒ_ÿƒ+SCH‰Á¨9:âä#2¼mŒ7J¢ˆ/©.†šE3c®{"ÖµŠšz©Œ—*àfÍ©DÇ-J—Dñð´äkžYIØÕ¸66¸#rƒÛw£X³ÂÚÐÆEǶLññðõNî|î¾Ï<£Ÿ\ѧ…G‘.bƒT ðD©bAdrA1˜À¬Q‰P»ÌÔŒzÓn%Ä¥45dEvñœY¬E\xl#2SÑ Õ©3®ùLÎÃã·Iw´ŸÑg=—ý 8_EÙ6ÂÆ0§aåã‚`γ"úDü¼^Ìm¶Ñ·Ø;!$¢èEw¶\Òƒ!#_é·¡Àjº.)46FZÞ­4ÌF˜q±Â7îdÈò¶ƒ¬‰5e±´£nH/çb+”Õ ãÏí+)Z¥Ã‰J´¥´¦ß`—2‰ZH9>XeE"Q›dl2#_5ónÚôåê)®-cm¨æra³lv GN©íYŠ¨ŠÛ#Ó,â‡LF#2rÌ#Vº:6»Ž6U¤ç¢:ÃC]q,GÌ´JÝ0à RÆ„lÆ&Ñ6òÛ‘g7C¬#U©H6©+P•¹ÚÒ®æ‚)i&H1ƒ1£,I´3¤8òFu˜O=;àâTNa“0O:)C²¼m©a'Ó˜]²]í·WkÒ˜æË!s 5Ž0+L„‚^³Äk0L‚ ÝS„¤C!Ö£Â^q°fd’ädA©r ÖØž¦„“3‡Œ3M#VK§‰ÖÐD¡å´²ì‘À0o+jæ-m¸B1±`KV3Œ# ö뮎™Ç#CÎ:ÌzPœ¦,AXnk#ä…Ej#¥¯X6[õñ{½é«ÓnøÉíHÙM}_ó¸V€æ”*+ZªlЖpæÂ{x†0$Çg“¤PÞw1èš³i‘äèM2ê²v1ñÍfrö¤âW<À±%aòä ÉO*G–Î}›˜5>rTLºÌKKbg~ˆ…7Ž÷uîtHΘ¹;¯€?&þ|´ÜûSÑÎr 9—ô`w¢YñæœNM1Côü¥–d‹#2ÿJ@¤C“Èðó÷ }4¾ h/(<á’4 8\ÉGá#2j]_JÝ•ŠS4*-Im¢¡©2X¥R%|}ù—<Ì"¶Fm>»Qs˜×ì7-Fô’¾ÍÓ|o³|kã‘o§Må¼Þ÷nîÛË^IckZ(ò6ésuÝÊN\wsO·m¹’ó¹Ûì³®Öò®VŠÊë¡n5¬œÖ-9CJR¹†LrEFš6ÍX›HÄ1#VØ^ß°Ð#F½é–.ë&”ŽèL;³gIíÁ%@gìî"¯ÝF¾À£ÎŠš\¸JïrVÓ[¸r=G«ïO_Ÿâ#2n°¶@E@Ü×–®Qp)>/¤ð¡¼Ä. ë×Äéôz¼´ã´È±‚B¢#_ Q—·Ž1"Î83®…¹Î q¶î÷>âPX~'fuçêÓ’so¦-a?BH4ü±¦´ÍK@’§3nÝCL»õpbݸM‹…`­ó¶õXšöÁ-þäÔí<%—:^éôáocÿ~ß5œºšo¹5N‰ª4AöÎù’¤vg#_£ÿÑ Ç+ÐÎLõöÚ{^ßz׎ßîWûF×Å"Á|‘É–^”Ìv™Û@8zng)'í‡cÁ³­6©çæŸfl;~ƒ‰‰¸@‰0hȳ¤íy§.W¨òƒ“¥êît9á—…êüØêþ9( h-O¢ÀFxìg§Ç¿‘¥÷K½½n‡ÅÅÙüö±±¯ë}žÄ›ÚzǼéFS”ãi‰Ôý÷„´&…BðöË¢#VJ;ÂtmŸ Áx{¨ñTìï_Ë©ü0Ñ€sû·5ºlRq'Ar„×ôkz<¯Lƒ´x=_7ØIòù ôºH#ðX]#VÀBJ~,Šõ>ûàùþ˜lº(bŒ=8¿h:#2Æ"Ë>ʓ󦬭GjÆ#_HBJH¤MЫ'´Ü)¯Ÿ[F#266íõï_&¯/\ž¸+ÞØ,CA‡ØcÓ>+CL8âOñk‚¬©U!Ãê!ÉŠTYʆõl×ûṸâV”"ã}ýV àý©-Œ(¨'×B"—vje{kÜãÏìqqÑ…émH•zNØE/º]“1,7oÞÿra¹Áëò']›`ãÌÊ#_›G\cÕ>²˜:Œ€ô Ì«JS#_Òp·T¨Ýe˜¨w¥³â)88%ú˜÷Ü·³˜$¥âÛ0 u\U"º\9øÑ·`>Ì#2  •3ž·²æQ#2g!û%ÞDò„DRó#VDIò³c˜% Üâ)”ŠÅ£I¼òѼҾîQœºß;Þ×:UÛE•ïõtš #2Ǹ©.€O.U@Ê#mJCÀOK>hNøæ#_‡xcÑ æÚCµ€Šw•¡{˜Úvs $>œÄ2ʈ¾‰dn8X @ývªÓMŒr1è‹/c#(úrúv¡zî¯u·•zm…^r-õi^ë‘ÄÁ¡Ð–´4\XŠFCq§’4ý/=g¶í»­«‚鉞í¯JFÀl"À+ŒˆBšaD*ŸpB¡"À†¦…#VÙPÔá¡18¶š&D-ÆãŒÜ\§S®CtRAd€oÐÛé\Jï>÷Þz3&çÈV§¡¦!쇌žòˆco³ç³Ænùvà-<‰1P* ¹ØYâ£@IÞ'äE>Sý¤€À øöCžÃ$|¼»/Ôú®¾ŽÉòàÓæÆ19"Éè¹õ}UîØMACC´¯#Ñ×aÝ¡§CJô‘Þupc:€,ÅêÖ;}£ÏI˜‰áTˆi›Á‰K#Vj#_[˜r®`…ш­,i Ö%Ò(<„$€¾Ð^MjèO»ïð{Ùö° zÔ”uZ¨È”ŽúÝõÉÔEOö)ð@ؾÔ(œdU‘ŽÆzåcI_ó¸„öD>o59ýò"…m’˜8áëp–HrÜà¤gÆw½ÂŠÔ.8 ÌMS—Úîø/MZ#Véæõóºî½DÚ·æ Mƒ1Ì´Mˆbºâ ðÈa€s%Ì\ppL%%p1µ£C*h$FÀÉ$L %ˆ•qq!@À¤ Ê4`à¶Xš¡Y#_„ˆ¢JX„  HqLL:íD™©¸y ¤åß^xõܳÍ0ƒ}Él·ÀäF­Y¦ÿ.4&£‚xYÃXl”ì:âA4@ÞØ" µp»ˆ*¤V°Õ¢¤i–m&7´£ÈZ$çâzô>öc>ö³¢‚xßO‘àÊãRÌÅq#_ŒáçæÙÙ#“…°c*í¸.ÞAPYƒœ±C #VHä¹$³øuäô;Á7vòò#Vg%HU4 ­GßØ÷4Övû¾““ROÂFf=ZæâÑ¢3_Œµ£óÏ*÷š4ù˜V®Ss¡™5?¦iÓ\A²¾—@ÙQ‹U°”Sº‘Ü!.ˆ(Æ2ôÂÖµ-pÜ•ã7Y„èàÁ‡Ó«E™p¹œé©ydàâËÊiE;k)(a¿GËV¶fa¾§e®‰ì,/Òä„fgñæ›Âg£Ý³˽4žÇÿ8jª"G#Vl°«¨|‚ÖÓõbõÔú4I$¨ûfÃBõÄçaÄ^[𬲆0ÉŠÜ#VÈòk›ˆ(¡È2,Ç%)3hœŽSÊÁŒ„AˆƒV;8Œ‚…²”L4€eÆ#_á†F€–ƒx2-Ì@µ˜Hllæ¥4ÌÓMXÈHà7®p»å*,ÈÀ’`æÑÚL€¤4ã„È®Ð5JI*jÕ êGfS5“®G–Û˜3v#VƒcpL`AÍ–TþKSb¤—y`h#2ÝÍaË«P&Òý†¹£]B׽ͫY6“W'ñ:¡„ÕOt™sÛ"àï—mû'é¸?‹G2Q‘à5ì úŸôÿûßàß?6"Û»îtEÈ„£ÓJÎ …›ª3ۛLjÛ1¦Ð¾M#ø¤#VÊtE命ϦÊ»s4:LC -›jœaèϤº°I¡a6Ê°w¤HyšÃÅÑ#VT5=Ó„”=;¤“KØX‰¸6,UÈš ÑLXú>) Á5Ä€Sã#_ú‚m¨€HÀ„}k’*aa²{Åq2,AÍ8A‚?‚P§àçBŠ½8Ý·XܬÓ“v9E2—@BBÀ 'Ýî{ÿ rS>®ó¿U®Y­›sÝ\”ñzÀõtHf°tQ#„=Ä‹´ˆ€x`ts#eH6 ?˜#ì9†UD¨@!*Œ¹Iܯ՘}ÜUMpÂvòî9rDî—c,ÎI†“Þ~æ<—RJa¨#2õgͺËX° úËá2”3í²ˆ]pk#VÉÃ#_–¢£yÜØ{ÈÉ’sm¾;žpÄw§àG¨S•ðï)£¬þ(`…J#2Žóà#£çíäÊ"÷fÊé÷#2N¢ó¡¬(“É”ATÒ5ccN{ä‘”Ë1ý)»†‹÷Ã¥lØ0_®ü¡ý©Ô]» ÇÈÊa~0Œ,ˆÚYQ%¦N°añÒ€õ1Í4|tÁÈx4 ܾTz @X2L Ð¦GT†U3m¬¢µ²ŸT}sCLl‡\J Ì*‹(ýk6…ÐAK©å¢,|¡Ñ”nÏÙ2è)$_†§îLÎS$MÀÁÂ{ÙHyà9Éõª%Ù«éEºåwS)Fµ÷úA=ìPæÀ)!ï¯+—ƃpÄ®î»Í³¤ °ÈYÅ$Ý”(öÔœœ¦°@ä—%”)‡-‘úÔ‘ênš¿rÙQì5Ìf4Æ-RÓÖ«¶¤Ú¯ù!ÄØ4(´ˆ4ƒ*È´&— ;É£‡´6yDD¯8MO¯ž¹¨ÑZ­Ô#_K4—J*(8BI!îfõ­BJÔ#_#V§@ˆ©1Ž§#_ê)#MTèI$ŒÜ7¢3õ-!jÌha¨…B9òÙÈÏj~Ÿî¦½ßĸÖ«êϘÖ?Žx’ÿp»O7,’}ì3úˆÆtÚô±£”ÕuMuû2ñá°‘È25õ¿y‹*“VX‰@ŠD5 ØØ46˜Ð—,DbMŒñm/ßœR»ƒ’”,ç}\GZ¥ÈЛM°;šØ°¤Ëö4[Ý|$Ëé£FQ36T™ÐéOõúŒDí>FY4¸lˆÝ6 YÑ<ÂþÐ.è&È«ì^ÌÌ9MFŽxæ´ÂmLYðï#2ÑÉÓ™EÁdÓÂœµ$ø½ü¸,ôIîü]mdû>ÐÎ|¦œú»°@ ꀯÊ|’Ÿo¡Ô›ø²ª„kã}Pòa öñÈ9 Óg øOôT|³­5ÞLü®ŸVCÛ8îô‡“G£óŸ²Œü7–Ceo"Ãp7p­††•Þ|'ÖõÌŒgvØÇÎ¥éé‘i±½03 ±–î— âdlhsœL) ²KCM¨&P1ƒ`ØotiÓZ«†!$~·w0’0¦jڨϹgºƒsPÞ‰2:²x4Xf,¸5[æB!¬aðzSE{Qk#VŒN»‘‰9»VÎ}{ÓÒ›»vì÷zõÊ(„ä+(ëLdbl®†©†¦#V‡}ÓÃàÑÎk‡dTÂ)Æ#Æ^rQÑ…«# ÙÏå…ò·R™Jï—Hg ²šˆÆ e#!¤º±R…û¦fŽ¤´hd[E±xaî#‰çõ}_I¯H³Î$¯V±S¡øöØl—GHt¦]*a,p˲ÃI"}ÇåÒÌ£˜ š5­I m€å-I£ómˆlü®]XÊîé+‰OÁ߃ÆéuŠ¦ãÒf¡5há.²²Õhú•pͬH©ië#Öhøj,aÏ'#_q2$7ÓS³CɪÉbPI.#V™ah[-°Þ(H¡­ê˜4öRƒ ­{i0ÊÒVÂ’C#_eTcMO±ÈêÈc&ÊôØÌXX€…8±œ&a;ê-˜˜¤ÆŒLI6ÌV%F% po(B´îõt³Gr¬°4.í¤d#_ÐÁ¶ðv¨I¸Xˆ€õ`ãR¡bhÀR1¶ž;¼._|oÕÚKÛ‚Ò^l£ˆÆŽ, `tz¤"ÔîA˜#p2E¶²‚ýo®`Q¡4#V³‹iºP¯‚¨R'Œ˜‰’jŠ¸û²ãtÌF˜ܲÄÐ2„K­0‚` î4&‘Ñ(@rƒBR”†.ŒM ;‚&;&Äh–0"ta¡4„Œ¹¤ÂdSÞK£A<&è…Š7¢Í¶Ü˜®ZÛƒÀ<6Þà‘ñUÑ í;:z¼þfuÛëí{ÙÔF"16ØG´j%Ñ¢"˜²Ä!8¯wúZ¦;\.³F§âÅDET+QºÞ<¤~#VSoÝCßêÑ6N‘›IF¯»•”ØáF´à&ŸÒk:à¥3¦‡±íŸ{ÏZ›ðWWh:f¦¥V"hq3 ø»ãX”†4·¨^˜yjê‡'Õ#2£H²7’ÚÐ/f·Š1mŒ '×Ë=¤ÑW\<­WÓ™)È’¼¬¨»Ø؇ÕÌA i(JD‚fË#V”3#V¶¾8aÕcMF5“VÆÔ&Ù"ŠO½îãëSëÕ5ä]þšeX«$žyeNõ²ú§ ývÙ9ÜO±=# n[AAŠögÙ£ZÉ; "ï|Õ@>²B”#_¨D3 #V#_ütb"¶ Š© R$™§³Ççƒ@m$w?[4*”J`ËJR"Rer¹«QÍÃ[]—$µô­µtÐ+©R‘L&% ûð0ÐS^Ψ¢­Ë;™ÝUÛé0 ”i@5#V)@Ò1*¶$µÝ]MFìíµfÖ°×Ò¹YL*J¥¨5o5¹’ PªJ€Ô?]÷Æ°R#V¥Ùy â§" .[/ÙŠ±ôí¨¯ôÑ™ôcªòåݹÜ÷·àù+ ‡]¥PÎèÃäÇT„ý2!°v“ER$ÇÊ\$”‰‚ít„°Ghññà=¾8<¤ârDJ ÌPq$Q19Í4˜!©õÓZ6(GHz¶Á°œ'ÁQzñ¬˜€C\;K›öæn«ÿ³'-Ü·•Â`J`ªÆ1²1PÑ¿¡[ŸPé^°;Á‘@ÅÒG”šˆêüCæMª>œ›gáÝ(ø¾ç$¤JÁQÆHgÚ×éù €ÕQ „_ÈÔÈ£ÛÖL·°¬Yé_J^0"2†šúSD´`²,1¢V~’àÏL4Ê,qŒ¶ü_Þûlƒ)*¶í2E¨šó„ãŒeDøÒ@ôóf–œ†*£NXÙHbÊVú]¬?n¶êâº]ÆÆ1œ=a«Uºq܃t´1‚9hAêѱ¬9S†Ê8„AÄȆq2ÅÁ¨ëÝr#VÈk¸%É–Q¸JG™û0ºŒÇéìô ³q.AÖ±4`™å®lÚ’HÏg®;öÖÁêDùe)Õ*Š(ýRïKc3µKMÓ,¬ÆzŽB,éª2W•²YêÇ-f´d#VÝ€‡ò/ChŠ†jÁ_jï`Æsfl‡Í4/¾š#_Ç ø#VñÜ‘Á¯‹ˆ®6½î4èö¤~øÏ^&MåŽG»$4§daÙ9/eK†ø¾AENO7Ï#üõ§\Q'=3e1V,„îá<ãb_ž£°r¨éf}FÁÛ ~´Û´6D”<ä,‰F-j#V©6ª‹h¨@™C°%$%Y‰ñ•uJa*±o'œ©´«´dÄQÄÌ„"\2hSVærtŸ‡l †X|Æ ~{F(búø8´äèòß·Œlè~YZU"…PÏÓߤæ säbi#Vv+³0ÆÛã¨ÖD»k775I¸Lm¨j¥÷0#ØÅ”ˆ®­±VŒiV« ‘1¤m ­¼ÅõTÌ‘6QÆ&«¶›a2«b–(õ¢5¹º9oíêæÕ%z®Í©-†L0‰mõ§%¥Gh\‚¶ÌiCRH›Šä†HlB«©òŽRð1‰f¨U\Wh#VŸ‰1hm28°6L²fÍÑl`§“cõxÞ !®Ï„ IE†š(4 U 1TxNR¬QD¨!2 XÖ"Ú1¢¬bÛZ-R:Y2qS–c±#2ÛƒàÕ¡È óSwX·E"ˆæ×+ïÛ”ÅäüùÓäë{Þñâ]³OÓoa¶Õ§ZZÓ% I’˜@Å\#_ºXÌmšÞ5—1–UïÅv›çWżÕÎb¥cK7qVÙlùÒòïJõTmJYšÌ2„…ÈÄrß|Ë\µ§RÑBVvÝÚÆØÖ·ÈUñïs® •nØ…L( aÆ#V•L#2ÓˆáiPë!Ÿ×º9"è@Ðx˜ìQnÈ©BÁÂ…#_òÞµ4ìCÙ± ÓKJšŒMaº*¤xB@Ô4*$=#V#_àÚ¡a$Ë'È8É´5@pÃ(Ihb(üg,Q,´~w•r¨˜0Ä2€½Þ‚ì&À)‡Cª~‡¦·åw{€ú£ k¬¼#2áFòz©B”EŠši³{Š3 `é/휚¹«Ì6~ŠqWÕÖfAìeé°Æ$ŒJªešm¦v€G¦!GÂïe2‰–ºƒè6ùCÂBcæBlÉ°5Ö‹)$ívU·`XX«˜¬8L§¢``‡°#_¢žK¿ œ>ð7âZ¤(Éq`L•ÿ(s÷±gsêyÿFŸ›oÀ<À Ž#V`NK*Zp˜ Á̈‚ÆTƽ1ÓÀ>gòx'ʶ‰°8`ÌÁ³4DD"J’(TÇK+–I 26 ÊM{Êä‹e,²™Î«¶\×SQ´h¹¶¢Ò§Kwt#zë´Þ®ìL£\µs^n‹º÷®wW¶“&.íº½w#]\æö^WȆ¦Q—¶å“)•*› „Ò£%J•£Ê·YjH¨Ñz]›&Å9Ý*+››˜1±°˜òÞñÝW­zUcc3 5#2¯šéÙy¡ IÜAïSí”ÿqäÜ1(ÁÜ€@œá#_¥#2 W×ßöðùˆú@l#2aS‰A’"(% J¯Ö:~HbðÌ„O_ q çé‡r\…0`ìdCS_Úht˜%àp®ÓS©H©ÿIÉö›ÿ´ƒ úÁõñ#2éÕCÄú¿·˜:-¢>!u?Û:ý;,„(Ý_xsæ/Þaü»aÀð@’¢ž¸yÎBHÅX@ó¬ÍŠQâT/ì#_þ<Ù‹t R§ì”iSñèvˆý¼húŠ€súp@ÍÖ£ôíþg×ø‡Ð§ô@5à‚{_¥ú…ÙUÞE"Nö˜¢fQ#_Rf”¤Q(SŒ{PO{S’©Ì4ô°PøJ¥CF 0E‹UŠ­±kor¼­íª^é란X#2¯öìl(¦˜²¹Þ1<£7#V±yu‘î)#2i  #_" &Q;:9Ÿ7ãéÆÂ…(DDŠKkEj¢Ú´XZZT‘#_A€ „ÖŠÊm+!ª4´›­Ò0@pkîí“vëd/ÙãŽ]dMwá¼›T®Ô‚¤Ë^ë»Ë´c T˵–m×E‡&Gvi#_Ñ;PÑ–°1²0‚BUâÍda´Jj6RåŸ^Ý^§v»le9˜m#ÁÒ&K±D”§Õh4›Àd ÇÞq`4D™`†J'ju RÙÛBá¬Éi"Jj ™wžЙR.tɨxB­°Z'¦ÛN‚ÌTc;B-A.lIA£éZ|Ì–#V®Jo?³Ì?7a²‚pBq˜¥"ä™SÝ­åødeNtL™(Ú–(#_)²¨mÐ:$(GÄ4³aŽ^rÏd;Ê4#]yæ(: ´Yf@Ã@v;i&B¨"J£iE4Ž“€wgY]›‚0€ÁY#2ăÇ ‘I ëÜM)·#V7–#•?ÕÀ†âú"rM'©"”ðPåH#2;M]± þ‘+ñwÇgÑßEŠÃñ²Ýß,&ÛNÚ.‘¸]6籈¼@. â$#V³r‹ " …ÜsƒîÿRü.fáÈð#_’‡Ö†ðoŽQIà ¢ß¡UfªÍZJf(ÆÊ”ÓF¢iŠ´FÊj›mJ’ÊZ’ÚkRÚ©¶ŠKU!.ý⇯8Nßn¹(5õ» '>ã›ÛÚ}ÒŒH-*R*©H¢çÝ’¬ƒ$µ)¨½5[šškJ)-Šk")°Ò³%-±,À¨Ð"s#_R…–=»+ïú˜™¤ýx„¢Ef¸;£ó»ð[ŠH^@†!ú™iÎ!²¡Ö¤8­Aû”(”ªÜí…ÎÏ¿lvöZ¡XðƉîG°ûê04yþÚPÑþ?vxÝÌî ì'ñ´Àþm„ÀkûdÊþòŒ§˜Ÿ¹ ºM•#2#Vꇀ¶#ZºJ,‰66dO;p hî M¶“ ЄÃ#VËP”…z„ƒ <"Cm‹ñÍ/IMÍq¥5DRLÓXíQþu/#RWtÄ”Öw?¹8s¸;„}§Ä÷ÀÑŒBöœ^âLÎφŵ6‡Yl#2mRìB¦^ØÓÛ¸µç(õóåëçóî®He !F@-2U((Ÿ²`22$AFÚ POµÕÄY±f€š#_°›F!I>–×Mõöû~]‚Ǫ²–ÄŠëQ¥gë‘Ø!ˆn3 6qC)„Õf/<$%"BßÕI¾Ø³K+¨$‚¨;ì¢CP#ïÐ×…ÆV"DU +œm¨Ã˜D%Áó»Íë(†Ó'\¿6l»TCHŒHC!JÆÁˆ`$%Rý|êZÚïN±kjèÑ`êŠî"é.í#_ a£M(„3ˆ4Z°J4&Ñ:‡v±da-"E\˜r­NKî0»³H ‚…$¤1Ij-u]öõÊ¿¹hÒVÁ‚À0Â’¨Ú”+Šæ]c0Ý b+@P8·ì¹|T+$Ø,YvÑÃŒ± ­$„¿ìŒ8Ña+·S–ÜN€Û™ˆI,PÒ!B¤¢´­G,ÿ<# &ßòè1·A)1¶[$m§…#_ÎíFÁ¤’Tb^šÉP¤P¤QxÀá¦ñ6ÍpøtÌQ—`k)¼ÑŠ>,l`†;»¯d2D©a±*()ÐÎC'ŒÐP©~äÓ¯ "˜ €Àî¦Tâ #_¨ Ÿ½áâ Èæ~~Ü<ÃZÐlréÖÍR$äÅ‚"!,4èÚm4µµÇcQ úqSL‰MM™p‡S‚5¤ßOKK1Lì†8åû¤à•äz`ªc„œö N1ŒŒ?EÂ?ÅÞÍô$:‡ÔLY&Q1 R#Éò=»è| îà ¸Åß’ð‚öuš#á™SvZËXwN–Í{¢SlaOÍüÉPÙ¹’GèGìˆALç³qñ2ʱ6â)èÊrÐi¤t˜lå“0¾ÏÕ“ðð^ÏÞmJü)m#Vøwļ{ÍBü·ÂÁ5B±¿=öÄÅÉ&yFt z¢¡­°nw™Ë‚Œ1xeÎÒNù õb9ÇJLÊÖü§,ȸÛš®>[0>ŸåÒ§ 솕·“ò36X 7ßÏ3SóZSV@®%A%.òˆ£e"rÑUye¶5r¢NøË·–gd´ƒdjuu:íâ³-³1 „Ø\M¥²õ~œº$[ 2s'N&”ö3šá)™#/$(S;C`Ñ÷áÖ#&t£}L”‚ŽeòÙ'AMd_kWýOr!½#2Æ‚B èN9–& FÓ´¾Yó%1„k õ#_ëMŒ²y¼#2R$XC!š0V’¦ˆç8†-1è“JDò#VCKÈøC»!bk9ª©>O4ç÷Ñ0é#ñƒj'‰l˜£hº+à¤ZeVN¨›yß$eòôÇÍŸ¦Î›TqÛfŠËúÿCê]N#2sSCöd&Œ’9õgì²¥8A­1ã nùù4‹Ü’1Ã3| ?Ö˜§NsÖx"ª#2_HhPBÑd»µ<ÇxË ä@ˆ”ñ c.æ½<§Ë´+<Ç“°»{Ö0Ów—”c¢½4>êϯEú ØØêq£³$Y! ÀB[Ÿ„ãBpKƒ…»°œ=ã‚ö™µEF¸{SbÃSH0“b–(m›e×g®PÙûÜ8$-uìé³lìĆ#_të#_V“*©}T3 D]ŒÇhª€6µÄ;øSDÂxDCÜÚs²5új¿½þ·(Ûïשê@Óµ w™Ö¬Àö/1÷{}½x2:Hÿfˆ2„#21Èë‹úpÓ·ÖhÆBò“t3I±;ôx‚|Ü™ŽiôˆJH‚!<° )ŒL ¤n˜ˆä–îplíÛ'—\Lcƒ¦1Ž ”ÿ·žÅ‹„3weÉ”Áj Aצ&Ò9/ÛÂ|k÷üR‡EE˜d¶¨Ä¨„ªãF*êX|$휌& tÌ»H~7dîÓ£UI`‰\±ÄBCòµ]$ÉþK+Qô_jãþ#VRNݨÏÊ·…>6T7x»Éç`=Ì2}اo~“º’§ù*¢¢w'nØëÅeqÉ°¸Õß,Øæ~ivBí@r¾,m·›Aý-o{*„•²I5½j³êõ˜0àïç24Jãh½"/I"’ \8ÌÛ‚Ô#V AFì®@ä;@o+¼†Öõ¿–Ì°‰¤XÛL7%lr&ܯ7Åã8WX²R„{®z»ºÒ*¢ô챨wÚ&R©ÖáŸ+c9ÝÉ‹iÏX[Ù”YIJ”pÞã››\ša&ÉHä )î(-…»2´•XmFÆkd±°ããKÒ„Ê™#ТÊe&ù†=… Ý'¬¯aª µ¹Ï%ZI!PÈ¡)ÈRÛÒ@É°ûQÖ‰`ˆÇvª¦(§J¶ ½öpcM©sDn˜Ú_g\‰ý9=ýfš>!-° ç1Žc`HÃm8wýÔç:N’4ÙÅ´&¥Æ8`îfˆÄÒÖšm£Ù[Êó¶e!¤Ë,{¶=Žs¶–Y½’樼‚Fzkô™‚ÁVþ\²k!Ѹ1H'çí‚*Æü¾\|<© ‡(Ý'1Ö´Ï1çæZô‰/ñ²#2 ©¾ÆåF-öç/OMËï<σèãäû¨ý¹8 L{ñ_>h°¸<ä#_}âI#2&?0õÄJI ­°‘¦(ƒ”¡Äµ>+óJ,“_˜‰X´òßïÝàlOùÙG'zàý;T‹ ­m¥–Ôhµm ˆ¿4†DA¬·“:œxÛÙA÷Ó€‡z!­„Fû|½8Sß(WÎN4Ï4|wDhRRtŠ†šžˆ “ì„õË“Aâž&0’@ê=N:!eš_ÚµóŸa†ƒÐè#V~³ä+¹D¡íׂhû|Û'‚-wÝNGžšq&7 ωéó#2îMh 2Ž¨ È »0>!Š\x‚›6-Éʪx|‚‡‰>ò”‚ˆ9÷\*-àðà KT@`1”†=IÓÏAžröÏ$O°SÍ0߀ŒÄ;TMxnö‚CÕ ‚"#VÈÈ…4z¥S!R„"dÒÖYŠ„¡!¹ÛfšÃ1&ƒ3(%H3`Ye%]žÎ÷­lX{,øÝì')7%@v!¸ž3è¨C²`;ºž¦Cñà%`>WFñøÎõ»Í×»RIc6_ͽ–0o¼£Zìîå@²Ÿó7èÀ£ÔaÊÄu!ìÑöš ÒËTaHB—÷Š1©ô^oy¥8*P`ñ'#ìéÓh|Š¢&ê¨#V%!Hš”˜ÔeB‚¡ÐdòAç|#VÎ8)>š!©Î€ÓÚy4A#!õ?é;#Vs¨-ƒ–þ4RcÒ¯Òã#Vˆ”bËËE¦$_ƒFþš€áí¥ôÍ\Ö¤i¯qêÉûAàþ±ÅÉP_ò(Wà ØàÈÆ1Æ9Á\ø04Áñ(Cw`ÙãNø‚#2J“Óâ@yëNÔ?%Ú#2—íŽG‰äcÚ°´…´Õû`ŒÛÜ|§=:`lŒ„n ªGÙ.dá™Ã¦Ù¢ ÉÅ .ï,NX~]—¼‚#ÑWé÷Q ;¢ÐT5ä¥TJ&¤$ 4tà‰B#ÄP¡ h£Æ!mž6 Å«€0J.Åc/X²©óaÆÌN7n'lb0sòpm¢¥’žq'­¨É ãÓýüßÑ­hz¡Ïiê@A#V‹Äqe…}œ¶’áó õ!:°ö Oêå롽¯›ü˜VXiœR8NüXÐÆbsˆ1¹äwBÒ™A™Æo#V0hH‚©ë×÷fVÜ9Ñ.zäÚ%ˆ îÌ,oC1²jÀ¡î:²¸r8)ÞU.}n‹#V&‚ü$~Ù¢JR»Mð46.(b\?É'ìn¢F·¸7|ž‘ ±A£غ±i£dæÑh`Ãi5¨C'êøQ,íÄÆÄ#V#V4?B†€ŸAAhv3Ãå¨P© ¿?hc7|þ²±£¼ˆPݾǹZÆ¿vq®)ë©ü¦(`Ñ=N¨Ì¬R­LhM­¡±¾`1ÆfX#VÙ#2jƒŽì4L1H_H í€j$d$+0qøoé¿« të8J½Bã’}Œ4 U‚ˆC„ Æc´ ¡„ ˜VeˆˆmB ÆÂä a÷`¼Ra‘cd#_£J< ®jORT©ù=>ù“9=‡ÉÖOÌóªšø%`Zºná-§s\Nîåm¹§§lÊ3šåKꦭ ¬F«—|íÍ{»Jƒ+#_L©,¡) ¨#2CíØ|üöAî}{ê©nru“T$‡.«²/ÛíªÃ×Õµé­a| K#_×òáNíØÌf™DJåɤP“%&îºM DqLu¥ $ˆJíÿ“ôâŽÛ&o»’TK¸~]Ô9Ê0˜#2›FeP3L1R”M¢Q-IˆFhÐÊL“,2h– *[#_3#V¯æíù¾ÆÞ°ò;@½¢š*‚ê12¤ë&EE>c\'×›ëíA“³Óh/¼úçFRÅÊÝ°:«µ›e(èÖÆŤDD˜â.–ž– ÖíÂ$T„ Mm¡¬ãõ³T1ÛŸ&zKÜiÛ†?ˆ­P:`¨NœSÄiàNç¡õbÓÝŠ+ùº3§|ôˆÏcƒ°ÉËó›M û½2õ×ÃBeÌ1.ìXæ´Q¹PÚ D›óí›Hi„À+Nc­ï ø:ÍiSAiÆaŒ#ŠåXËÜó'Ú!†‚á¾Ëi ³×–?‡aƒÊ1ó‘7Ž`ûšR!$ýðŸÒu<Ý󡇎Æ#±ƒCYÛøä—M\š9#2Þ#2 Ò#éý·öØƘð°˜äÌX£Û"a§7”ƒZa5+©=ÿBÒÛÆWª°u¤mœ1ÈÉ– YªQƒaúžéº¤· ”ëìYPgO§–ªË­â…§¤ùwLD¿âÏòf™¡¢ “nÓlÀ‚™%JHÿá¡„KYl¦2J2°m4çD@EbAAŠ@ŠH‘¶A¹Ûƒ„έÅ`Qî“KÊP- ±4f0ˆlÛhØ ÂÒD3‡§F a±¦Òmad"—x¡é"<8Ê4ò-ÒÇ~,DZæÉ·òÍYÒÓAÆ‚¡¯#qˆg&#[!@ÕÇÄÊ+#V31¸5ºL}MÔDNdk‰>Û|ù˜n£”›.NB/¡Ö›lÐ;Hajr#_­œÏÖè,¨ðâM{߃~ÍÍff`Õ‹Å«…i5H™m‹i’)´±Æ1 G›#LŽØdÉkyÖX<ÐFbŽU¶#ÆÎÑŒM~|\ T(A˜CT0!bŒªtÅÖ‹J6û²½ož»m²î•%*RÁØmÖž2Ô“f­¹l%sEnù¹ëœ÷C¸ëœ›{·li.ÝÙv¦¹wmÔP.%Q‹Ó‹E9˜1bÚm”rIX`g.1­Í-È)}îÝ—Ò¾ž}7ÎÛ„Q”¥ÆÂ3¨“m#VË'#2bÒ ¹!J–øµ™o#_èÖaP€s[š,Eo·ikÒ5H#‰ѧj¨t`iÃl#,liWmhИ¦zXn›:æ‘VØ L#Vöja)R‚ÅÑ`¡c•`RÖbÒA¾aú0Íñ2¥ˆÈ·Ù»l[I&”וhëË°¼#ÏmJRÿwÚê&%EçvRQDEHY$Û;¾½Ú‰ai¤HE{·L¦Ã!ù×f5 `¤˜9ÈeQ·LÐ[q²˜&_–&¾;Ï—¹nïÁèøÜytq& Ux„6‡©ˆp³¿.Z]Áágs‰»ó<`‚SI€MЇ+4ì¾Xã’oBNDâL¢úSfñ*¨ªQV”vÉYn«=F0ÇLS L2¿ž¦6ˆzU¡Ù–}<ŒPò„dÜÃ0ciŒÜ#_:¢ XtA±&›8î{o®,Ä8Î[„ͦ3—™ä4mˆ½5Ê4y´Uš/6°Ù…³ˆò‚lEhP`W5ŠKmnú<•õÝ_K§±Û°g»ÚÊôQ’fn»­¯ƒÊ*ãœJØð乧&(]´i4«-a¥ÆzÍÍÂé5ƒ€ÁÃYfaˆFµ˜¤‡ŒÚb:jzúÞ¼‰¾£Ï^l”½ÖõDbzq&0‰Å$Ž*Õ(Üɘ›­j²­‘QŽ ÇMŽá& ”i±åí»ÞÖÞ¯:òóÞ’q£Qo!²”6TºB°,WcL’•T¨èÒÐÐ1Çï/EŒn<#VI§¶¤·lÞ‘ás3öBŒ‰­I€ÚÛr(HÖ™04®óàÆ:Û5¢If³Šõtǃ5#V;1Q–h—™¬Ë¢3= õ¥#¼ÐhlgêǃMć`o)UiªãEbn¹™rƒ¥.BW 0¹pQ»epW£1'®ÆÉñ‚Ó`©¹‚ö5¨“4€Œ[ŽíD0ᶎD ˆz„hz"6ôÍk³˜I‹L–JÆÉfÖ+<\i‘DõÌXbÈq«ƒdËNЕꩼ£er¸çÏHéŽhlTg 81¤È……e#/IØfDl¤d‚6ó #VÁ Q­KÉF%#¸JŽ €Æm ˆìŠFa$9MA¥-F“#Ul€le #_ÞhŠ",Ù 2*…† ŒÖ™±ù&oYHÑ´Ñ!Ã#_š"f¯ÑÎêHIB`Y#25#VÖ¸ÃdPkˆ©€£X˜.¡Udܯ[½1o“tò·âåyʹ¹ª©ß–'ïD;Ô´Úxã7•HE¾-ŠæÜ4Í|÷VÞk' e!F%SÈ‚ P`±£{€ˆd]æÕwå«bd‰¢3mZ£llÙ½ià÷K¼k™Çá¼é’®œ! ƒ ““2*Õ5ó*»5sUæ囫Ҕ™×#VÓo0aT*•A“€4ë#_DÊ$X) #Vç‹ £›–EéÑdèmË)mPDÑba@c*%bŠdAÒvA#_-‚*ˆHˆD1"¡˜êlhÜÄÄ·X804 ²ôÀ ¥G#VZ#V•°e4F:ÊkbV€!À 6Ó:#Vˆ0H2RÅ,œ30‰–$à3sÇX‚èS iÓõ?¹64©ûþ—öËöÓ¥×.X®ñÜ7w^Oõ¾ï]1j2mwή–þ¿®'Ë‘Ýbê$õ°kô;#_] =¸¼#_L(Õ“kQ¶ÑV„©5–Ê´¥QU[R3(4¤2È…-#V©R¤4¦jJ¢·ëw!¥Hð‘²i V""*CqUýÂsF„Ã&>±þÏíìŒW¢ž¬5COqלÓçåhï}±JÇ}„T@d(˜+¦äs½Ø#‘7tÖ;b[¡óèõÿ{ŽhR!´!@…-W+t£UÓV®]Ý×(« 0„ëÅ*d#2*a"SsÊtšS™ž›z}‡ r|gôZE{¶Õÿ`Ž¶çòµ) k2(ÄFd‰Q‚ý8`®÷mÀc×÷Vg#pD†P’ÑX̦m©5mFÚ¢Òm4¶lÍRɪ"Jh@“žf9o›'Ø÷U‘ÅC%O­…à{®\~^6;®Ë‚1”¨&‹"¨mÌL©¦FQ)Ñ!“úRllgí‡)·æ8cP–Qˆ¹Ñ‚v"³m›Ê@gl7áf•Æ‰¬&2`ñ¶ì1Ôñ¢bd²o Š¼@€4Í5ÚÂZôFV«­±‰lvR#_%A¶Ì°+È<Ê0ÉN.QJÌ°0àZA‰V˜Aa‹¦ucieŠ ˆ‘2Å1öù‰.ºóãyò/R™ŒuâáX”•ƒ„¢÷Ò°1&6Œb¤Ù'ri"h¤tˆ4kk3 ±Žƒ œ)#_41P‚¹„lNÖ¢Ls)w¢46ã‚m ™±J›A.Gõß'C†NÆ·—H}‹.T†˜SÊ0¦ºl“©lRèè°daƒ”ÐbáˆRö½©¾ÆãÛË÷ÕÀð–¶ml/ÀÆ` 3kL$Å¡ZÞ{©œÃ•¨ý$aФـÝÐÕ·d¯‘±½$´”H·g‘ky×MÄÅQú›R˜™Liiµ÷­»¶,Y¨ÕU ª×ì˜å’P¨oEJ˜˜\ &¿€Öø•–¼Ïëß6ør­4×^×OÉPù°'õÄQPÓL1¢ mo7*ÉÛ"#_( i4>Î]é²û2ˆ¥€â<&¼ŠD¿]2¬(уN+ïŠ^ôTUBÝÓ‰†0qg€Ï?„ö*‘©#V#_w¤f8wöiÓ±ÓlõE/ƒÍøȧ鴱F²jf2Lar6$wÈñ4:4-ÔhÐò##"%ÉZMªdŠˆ—(šÙ“—)Œ„xG<¸|L:ô«ïßÅoŸê¿Wëª. €ª1USK€C9æwßgÀèGs†0GÛš»ì_«^F'»Ó=¦F|Œ#2=…Š§Vè}ÇJ÷ξÆà\‰æÊ“ÖW¯9å`j1ûežË“âŽã¯nÈ|¬|85uÏdd¾_/šôØGâS±$ý# Í|kO£ÁKNaHôúœ29lB¿<#VÀ-‘‘a™‘bw5ÊGwrÑgkEZÒÔa.&|¿2oêå`séNPóÄl€ûež8œSPz&*NŠ°P2g8NœbžÞ3Z”ÚW%ßôIGňÄÑ?e’²ã„m»õÐn±ÙI™føá^2n@zåBƒ$çÓîðAQ¸C;Œ<¼Í¦ÁB“ßã÷»]JÊ•Á‰é„ž„F QÃÝä¹,tVõÈs;̪Û±Ä ‰.8ÅWٸ߻ÚklÌ“”­XÒ7ëÌÜÜíÄꡨ‰¦Ýù´ð*¹‘écm5ƒ¯²ir’1DÊÖRš…É#_V‘z’äBD¥V1Š1­ø+•ç<³Ý¬mnªþœçÐqh¬Êˆ·Åq² Š3)¨ãöâjB%6ŒÈ€ÌÉ\‡\$ ‘Èu¢4Ñ.£5­H¦ªGiZ–²L”Â%C!0b¥irR •ˆr2Éû5Žà@-¶d¦k–‡"ƒg÷ %Úû¼ÌÙ]¥!˜BÃN:’p€We=ázŠK#2ö¼cAÁz¹æ§an#2?ö¿Nï³>£äGD.#2PNÀ`p2V,†AP@À…¨aˆÁjìà¢ÀÀ<}Ì.ÃötÐÔ#2~~cħd•¹.N9BÅ0„CI€it˜Ã'”O]ƒò»³5p~¯ßÙÐ;´°U_Hèl-´«…ËEhH”m"±=òlâúÉGÍD>%2”•HÀs  €™ãíãÇoÕûŽð—÷U#_H„±·v#2Ð í—óì…_è0Íõ8Àe0$Ð#_;m.0y†BóDÔ²†7¬Ìâ^ÿ›7 ·0s$È‘qhb<åblU¯€ŠIñ æ6 þ #2]HìÀ²‰ $À'²”&d3`€;@R‘7’h#2„„ÔŠ™#2ŠÚŠ¶µÕWsaU¤ÒÛÛÜ!µZ…sIÊ*›:6Qm¢’*ÓLF´¿j<ý Ñ0Æ 5$>$ª¥@D#DT”ª$´ÓI"RˆC-4–ÒE±j¶Kjɶ+™U‹’f±mfÖUc#V(ÿ¸ô÷¿¨t ÀPUîN:è@öÀÿò#2/Õçûì@ËgÝýŒ4ñŸ;nÄ3êzÙMÙâ¿"k€R9ü§&¡ATÓkDIÒ#2Á‹¤‹o-Ð}O¹ =ä¥%!Ú`Ž€õ#_¨¼ÀM†B—èæÜzÍàN\¡ùÔÔ¢´%!$# 'Ïó> ÀMå晴 )‘¡êF|:Cý“ì=Gaøö›f'îÁÛ¹'ê#2À¶;¡€  €%ßò[Ålâ‚iJý#_jfÊÒÉfL*LÉJ0j&“KF“cf†´”mF¥)2JAT“«X‹Z+lU´mZTØÕ6ÔÚmI+eŠ„…iP¡iH‘HmbãX~W†BU µÉi6ã‘»[JŒ#+#”­Ê¨AƒaG!;ºK­ë¶÷w—7wµ½Ý¢“6ààÚp­VXÌM©–ƒT^|[yzk¦/W­v÷\5›®ltÓÚ|¾]|R1Msç·ÊAǦBŽ´B‘Ê1ãXÂêÓQ Æ2W$®¶Ø6®8ûzKË·'#c-Rê˜e¬Ššò…ÌBµÒù•,Ñðvd#_Ð<# Z6Éy®©&"sç¬ÖµKØŠškDVVR6Ç«\…'SóhJ‰éDÍ.çLÀÃt‹Ïå¢á]`ßÅ‹cWþÔSc $þœ¤Ã¶ÖŠûBýñiQuaÈüWàz'ÁS⣠ìµd°ÒÑ.î ÆÖ‘n!ŽE,€ìdŠ|­ `A‰äë‘Üݦw=ÕÉ9ÚhªZ¿%Y+OI¨š#TpŽŠ2öFºÆi7Í—Rвe0’c'§H®êddLÄÊõ­rÑ­Q´Z«C6ntdQ@“¥Ñ,æ!»˜:ú]þŸïÀÍÐëþ?ƒKäØWSE'xw—¸&Wíšü°ý)ʦƒ<Ë‘˜ï½”nªÞ#ÇàcMe ¯g²9îfUm= (õµîìòÆ2Óë*õ•õ"#Vìtn¶Ž•åí5¤ùIæMTÔ¼ÃuŠd“ $ ¤ØuOý{F¡ñ¥yÔäÉþ<äÊcÄfP?x/Í@\ÇëJ[É˧)0sn7;L8®ÜþJIø'Øw6ž· âÚà ßê7»V@#¹N©ž[H¤#_"FrZŽEDÊ®c®_é³Þ ÓÏùâ¯jŸ ª_Õ…¦JPýãRóíÇ­p©nºÎ5Õæ$ÝN#\]_ ×æ–g<Öøa»7ço.qÖ÷hµ‘FÙǾ¶Ò×Ê.}å#_¦Zh-iEØ35.7AR¥¬Mnæ%÷èuQ¤3ë©ÄËå){¨Ýþ5ˆMÎ^Vr頻ۛ%zÏŠ=Ú-52ïñ¶'ãé{nÝG ,ÃHm µ-9Hl£9ôbURC¢õ#_ÛTL¼ËÁ—g8õX%wQn·®—>¶98Y¹‚¸Þ&£öç¦î’<3J6æ³y2ƒÁÛV„#~Ý2¥§æÇc •¸ñàmÌ|”äÆpv÷v«8m˜‰G².\9Dð­=>%ÇM­aÊ$'y€ÁP£u„/'´’„é!Y퀆2*Ôó õ;OŸaØåÑ»qÉÂTâ}ßáÂZJ–èâ;,ý^–¸ÎG¥†dB‡™{ëõTÊ«?ÜèßµüWÛ/Ð:”ËUš(#VÎêOÓ‹3FA‚e:ÍÌÒ™¥AÊõ¥Š'|¤z,¡œNcóRÑ»÷±šP!1š6ï¾;Þl®úsŽ÷R%&9ìhƒ¶±³ô¤Îý…8éÎ'ÅJC­›wÝ<ì•©Ö@PæLJ‰0¬¹*d·xÁ3Ó»¨×£Ô‹IßW››¹*ô$/²†9“(4!'1²TNv‰Â…EEŒJ׌B#ˆr‡tòÌâËì¦G•[áxqôµ´xœeÑnÍ{@Kæ?'Z»ªÖ3Œß“ñÌgn=‰GÄ‚åÖ‹8ðcÝ< lͧ/½ôYõ¼ RqMGXóënµ»í¢P.׉iˆÄ'®ó\R·Jé¨Cz•NZ‹š»¤¯g±.1IÜtò鑬;i]½=ÂÕ\Ò)!ð↫!âÄSº™#¬=+BˆÌì‰6§öÅEq¾j7‰¤å1hr#_Ô™[ÙˆãÚôN›-®n©7DlNÅg ­o3©¤Hƒ¥(ÜO§fB¤Ñ_´g/|ÁœŒ¤Š<ööѽr‰6ëoÎÞ˜÷)¾¢#Všš²4FFVŽïמ#_·ïˆâû¸æ›N>Š©Tò²°6²Ó:4Bî¸N,ÇîPÔ­ÍIºy»ˆ†òˆL‹ã™y#Us+ú;˜žëgrÙI·r:M²®vxkÓéqYYHå./Š:r<©ž%?§"yÛe)Œ8k9:c%ÁÊÑÝL!Ž‚†z’N0­cÓNÍõ½ÛQáï.û¨í‹—Æóh1"qÐêu»ǤJG—ˆ =„`1{"~þcu#åÓ=¶dÄRö–+Õ„*õ€­‹¸;äE;-^´Kz<£­˜‡8~<}±ë‡@½—Ôׇ´½mºRˆ[ksh¶¢ëÈyL«Í{ltGdøJ`çw#_& ©\4ø8j¸÷Z,^Ö8c±ÚâDVl7óƒø6Á}]+áÏà ˜z¦.žàò 2Iï©Nº $ˆ TcÐfû¢öˆlàã$¼D&ݾkF«xøc[!yK–¡œ4;„"œ¨¼xèæûª¦I“[oÐâ'½Î‡IÍ—p¤Bl&%ݨlkåð.úÙ·Û:Ãðã±èØn;K•ôîð³ÂïÚkoLKÛíËÚB~“Nh²p]ó¨ŠÍ´¹Ða<YàÄÛ8îzóUÑä‘ž7Þ6ß:G[bƒ_(M“R6Ã%:²Ƀ^›Ö®€^yØVxy6Üç¶6½ðjè}.2æ'åå×{@…Æh3½­-R‰cŠ0#\Uª¬JªM+[¾Crjß:¼;H“Ƽ±¶âÀt² ÜÖÌM5£á´ƒÒê?^zb¨ÜT\ª@ô;v;`¹×#VÛ-\¢M³U:ÖÐ0iVŽ'¼æã3VfÈ^Œì½¼€.Üp˜ ÔG›&L³<^¼¹¦Þ5§Ù)©ZáɵÌ¿œmhºÏœÔ5"ªüc2cž~åÏ|Õk™½÷"‹žI5<ܘ&ÞSDxêz›8O²ÌQ +¾Bã 9Å‹Yã„cí)1vU£°ã¢#VtÝuµÞpO¾TÊyvÖ3´k²zw“ýqW_t™6wbùPÑëÚ½7¦óìc¿¸¦îÅ•X<<>É|M–šk¶&f>}ÓÑ>Y¯"QPÞ‘Ûnkº<‘kÍŽ¸ƒtê|vŽnK1ðC¬aaèò\O£áD|v#Ûr=|½&xÇ£(wÚG$;ó]gn &c¼ç3_ ÅQ^¬n@ÇŸw27­TöäØ5ç\g¶º7¬½rÛ×;Wä‰KM¸úÙñ²,Û¼ÌJ>I¤Tâiö˜-ßÑ“^ VééÙœQ#_»âù)Êù´‘ɱ¹{jSÜ9{o|ÎæŒõRÏ;u;ÂÕþŽfWm*øùK£¥{÷ï!ÜçɤO&öA„ö½GÃ+Ð|sE3Ûšô¡½õ³CŽðã»[b•1(P‘³78é™ÌâÆä,¤aá cMºÁŧ•œ¦F5`ÙÒ’9ÆelkßÀª¡gj­©øòkr7À²¼ u–ºÒ÷Ãé›ä2®—ž,¢ǨÊ(¬‰~tƒâ,×]¢›Ñztæt÷†!õÉUéä?†Í™rcgl¨ DAE!¥’ëj©<ØÏyÍy}3Õ÷Ö|eL Q,lQÎn[8NrÉm³UMvÕøÔlu£X@dáö+KÃñÓ»x¾˜h9÷Ô$}J\3XéÝïµ<Ã6²«7Óþoy~éí êrrô|®q=;®b›` ½©¹€Â¿7W Ù>rúÅÄE‘…†iÙ@y¡ÒX4äçÏ6Éє೶ñtè˜ã3#VºäžØõàë¤Û±#25 ‡µ“Ž u‚4h $•M~M¥ÙnÉuBÎWWGÃv5“w¥>7†;w¿˜ŒÞ¬OÄôÅ›!ɪs±Bá¥3S^x8,UˆŠ‘Ü‹t€Æpu®Ö¨6Pwj¬/^)[ÈÑ®]¾*I²]–…|¥-Ümir4=Ð*Á¥k\Høí^Ú ŽœTʵù¨@DNÁœ LÚ©ß¹ìñÕ¯,žoNdáx§¶»å÷¨MD—½žñ\0èyú`ši#_$2hHãÆÀ^pé3ÓÄ5‘ÖùÙÀs8¦¤ê¨Qƒh–‘.CYS¹‡æªO%³ZûSZß ¡TI–òd#2˜QH ZÐ.óË< ÏDŒ6Cµy½Ç>½½³ž¶ÙÚM$0v†ógkgd‘î#J^ŠôòxåáG—«˜­G`<ÄNzÀñ…ÜmB¡¹æó:kÒ9CÞÈoš’Xpp’Ja$äf`ãpS…{‘£÷]^6=UGƒ%#_©è9Ž1WßP¢üFÆ*)¦&peT§w}Ýïʼätª;A'´¾Â,FDÞ^hÍ­8ar`*xyIÃv›­p**&r‚ÉÂP#_#ˆÏl6·v8U8YA{Þë¼ÙþË=®ÇE×ÌÊnðQK¥gšµ¤Z­AòöÛŒh·F‡sF켦"Ì-­R³f¥¯bb¨PìÊÆxž#Vs¯!¬!qµÍqzÒ“§—fCöíÔ=QX*±ó7uB&¼ëŽs™°É‘[øÛ¬Í=´&Eí¦Õm~3'“‡ˆ2mQ­;à;»ÖôÍ&ÍË×1sñôÏYÛ•øÚ;•çø„£dL¡˜–7δ÷PwvêSõ« q ž oC»¢ìÉ¿1 à¡Ðë µ*9‡‰*äpٶ‚߆‹7 -›˜• ~üA¿v@ÀÞ‘ŒxöÞüö|±”¦^§*ÏWrUnG4øq쬑ԙð<ÈRg\Á™ïxÑBÐ"@µ`¨vD#c«XkZÖ]êèïðdzÖ$ȇjt¸N†2bT9-:êʉ#m26–U§ôŸƒ ñïa¾Þ®žŽËç?ù‰$q™$— Qi͇Po QËõNÍMY ÎxL“ÄÏ»JdvxŸAîµáƒý[xr åÎ ÃÍá^‘ÌÍV.E‡G`þi… îH«>Š$¯õ0Oá}<Î:¡Ú{~ÜßZ?¹QT§=šYéþípƒÇ‚ܧ"°ýy(ô@í=?0yˆ¡|¾äö ˜~1Hctm*Àm63äDÈ’ŽOn±rP‡»%Z6ƒ1#^8aåkË#2Øñðï? Ÿ²|½Ë"yîúLT#_$ßr<7#VÝÛΣ©<9áË6þ9˜üñ昹߾…Ä¿+#_:Ŭ‰ä&œ1±û!ãxĪ#_]çQí›É¬°„.5Ê{1VDÎì´‹˜V˜!ÕÐBF5‘´¨|Y—+±iÝ'³£È=4}‚g`^2<—ÇC™…#Vœ¬ãQ³ù9‹‹ÀÑÃÖòŒ¬f ­ £Wž¹Ó{62ÚÔ‹•ytcf£6JæíY©•`µ 0–FÍ Œfµvp`U¹ƒNî³R¹¨ÀRðí9†UÚ%¤é·%󫽟>-E­ñjðŠ×/+ÓG–êºY6œDtK2„fšj 1PƒJ4…¹A5#2ä wÛÂê#26•Æ \…)UÈQȃ‡Œ-1PìœöÒt—j¢4'CGAã¡#V .“DiÐ8Lá„%L;ôh`4&Çî^mu@rŒçbÏq¼èLbÈá)©KÌ¡DF(Òï£4ñ LJX–0{ʼÆ-‚fœƒ†ÐÒŽ#VDÔdbâ0˜ÑvDa É’ÀoŒy2‡çªXðt¤û3Dm±F™êêÀCŸæSQ4E¢nTcQFÕ-@?Ë#2Ò#_P™¥ #jrP€ú`ÈÌÈ“÷Glœÿ—[±°×7×9egO|í¼‘,¸ít»·/NVé3÷ºø¯H_ï^èëÞÝü»¸ß7LéI]Ý™³½*u'¦FŽ4PUˆéHmtN”›¢æâ•×Zþ;{ÝÚa¨¢I°#Û6Þ\¼Ì° Â1' ¿Òªº‰2D4¡»i‰Ç KE.NŽM›i50Gn9Û‘ `ÚCn§…Ge¬´:…¯™ g²6Õ•E¾7ŽÉµŽ±— É7¨(B—@@ë­£K@ffC;¸\ÑmÛ·_%Ï·Ï{\¯Á^È÷rRe’mq—+©eÝŒˆÌË s*w6Ó¤¤ÚLiF(ID4sŒK…P¡@ °ÍªÁ²íu‘X£lƒÀ&á1ëXòðÝ£70GXa¶Ç-9Q\ŽòR‘#_CÒöí]¦¤Äɯ:J›/B °ÛZQ•5± Kï+š#ViΚ5j¢ ¦¶Íê Œ ÉÂÜ׎íGÏ]¯Œë·ÉÊ;‚p@Ód‘¬ÝŽ:—/NÀ`ÆÅG%ºèNf*7%Oì¯ëmS{nâ#Y€¹ÁK(\©#V1 -cDi‘DE­U¦¢¥J‰±ïá‘4ÁŒ˜šSíx1¹ ;ZÁ–.%Ô7qÓ#_HM`5‘YA<Ÿ'fšëךöâÊîÕÚa åR§!ÚÛèH.×þ#2Ò©6˜lÁ×O×p›RSŽQQ$då×Ö»ŽUwuÃ:óy{œ’…å\\ š…SB‘dѨÕøÍnYî¹]<¿5øcj±³’ùás'Õ2îáPF5gÒ餓9Ù™uîö»×Ý|¾eˆÅ˜bã™wóÇmœ) †²'ˆëO¶ÝUÑ~†®KêõÜâtéC¢‹} ±dF¬i7A¤Ú…,+6ÛÇ‘¹!$¶*²#VO0Ù_u嗮뻢—N°ÀpÌMc4EKª•sx6‘[!‹»¥RÇ#V ,†BP\xÔcWSuGÆ%ŒŒ©<¤U°e$lr#_CÍÚ—xò u4 öUØæ¢#_pÀíÖÚF°;¬i¸?PŠ‰êà»9æekÈŸˆ¾Ó³òÄOº@z~›»€£Dš?+ݽ‡qÚN¾×¥ÜªXvfº¤ú"²Ôò®ç±wjDNI·Ë¬ÖƒRàLL¡Hh­€ï³ÈñB"±L¾Æi’NS g#§Fˆ™cnB{JÆo82ƒ‰D´R˜Sb ÊŒ¥¸ Û¬•ÄYa,•² U‘­#_NIH|—Ÿ`ìë3à =ú¾Ì9ByI¼ŸT¥ÚT=@À'ÆŠ$¦(NÃŽfÈivØ‘‰AUUï²öoØLCô|LªùI—¸q@ÈoTlÅ>õABë+Â-ÝkœŸ)¶¸àsËg#_¯¶_gbûC^Þr§ÝÇ­}ªí÷ˆ‡ÂDïý\#Vþ8œY‰EQ%1㇉v%îvuD×ÄäN|æ¡çí6íÇ2nÂŒzžfÆò3 ×3åE·É„0»€Ñãxœ—‘/ŸÖŸŸõ`ÅA„¹Œ èÆÎBσø{&õ&ZË%”²6ÄÛ2ªWK•éïœÞçn8qŒ>–£ýnˆr*2YÌÎxaË_Uä|¦+_4¯”¿?ÄÃÞAáy°“åcó¡ê_˜Ì L%z“¥èžl óx)ÉSQ#V—Ö†"nJíÙÓ‡çöÖõ›â»ML%?+¢&cnNÁõÓi#26à—$NÀOE5ÝÒXE¿g¼ž¯ãû¢½ÝJ€L›„š-s#2ðnJ(oÇ‘-©*W#VÌ[UéksEX£i¶ˆ4¤‚-µ’I*@Í¢ L€‚P`’SÝoKkšŠºWÍZåmΚÖKZ÷mÒQUîÅÌ Ý×I]:º«®íËSGØKÕ#ê8¦ mögÏüX”ÚZ€#_9w°ò,Øœ’`ïÕéSù<aƒ>:_ÓZ¿ §­<¤¡N„U4QB„ȪY„JP’%ª²ÒT¶Å­fmbÚ°£€›‰F$0jZa6ØÛflÛ`´†I‚eJ"F!¥’ %šSQF0Ê#ȦÄ4Òb(Ô)ÊŒhA¥b6"SF& ƒ*H¦QT¥’SfHš#_`!Ì\jþÁüO¤Òx¹áOÁ‘‡@HKæ.OÅ #Vùšè=Ô7O·Þ¨'ðÊîs÷éó²nßgÌ94~Þ?²ûE[»ƒ˜¸Ìs<µŒ•Ž hCÁ²#V/<· ¹ù¢Þ"aÌŸd™'ÙâuÊ÷qG|™PË‹¢¼;¢ ¬û±ÍPQ²PUK #_É Àr$ç÷]ò£›«tíÔSþ¿¿9ÔÈnÃdØÛa&J–5ã§#[ PìeŒ·éÑõf ARñ„ŸIÈØíÙc¶õÔÚé·ª7æîlÓF ´Û$#_…zÖˆAUÀßòÎÁÈv„çáPÊj®ÏÞ™JÔLñ®>9³ãFÒyÕ<¤º^Öf6,‹úXëY·óøý@>Ö¡ @*S&Aœ¼B‚ï¾L½·B`Šb"(4BŸ9±ÃÔ[—I @*4ƪèa=‡)#¥×Þþ?£êúC¨#_?£§{ìÇÏ)ðO†ÔÁòÌœÇ ‹>çõÉRGãÓnú°‹5!˦Ãóà#2û*#_#2¢šIfÞc‘DC1 y‚Æ&eb2ɱ–ÒZ¦JIiiƺë+»¦ÙÝ®…®j¸–-&Ú#VšÈ›CQ‰’ŒEˆ´ÌSbÓHɨÑc;¹¦]NA[2öã(£#_FŒL”K#20RUûÖWšŒ×[·ñ{!µ\¢YFLPM@£El“mößÈ×Þªù¾} »—qšÈЪjPª™%±CáŠ:Ð.ØõlTöà}›5ZPCŒÜR#V6+XîXëW i϶Lo5KöŠó}XcãˆÙ54.Ð8ÈDÍd#_64׶$lÖú08Ù÷þ;³î±¾œHÅ*Š&7ñHÏVÏÆDOS‚V[7.=)–½ÌêE™ÓŽ£hfÜÆ5å†ôÉ4ÂJiî—Mþ(«‰Rœ“à‡a@^ÎôœPI÷@ÞÌð®ñá|Àì^.ÄÀƒm¥JúÖ£:8ÑD lü"÷P_z¦ß8jÀÉôü¿¡Úkç{ýbÂÉä„*]cø!ìrÁ Wé¬\­Ñü˜%Íh†@;³ Ÿ^{¾cà ‰¬#°= ”ŽúÏp:Æ. 5Ã0óäú 0j}×9‘_]BB6#_ Þô¶rÈ»IˆRµZ}­B¶9C)Ë¡8…è ÇÝ(PRŠ¢¥%Ÿz#_~b`8CÆì©êìM\¥0^jí­yi6CVòdK%½G³_$£î}?­?VSéòEÔNGl»šõOwž>Û1>XDà¬ÎAwð“©G·2̃½óWA°S/çóÑ¿VÅÅñ¥!6X g#VáÏ©õÖGo•Q`—#V´ÎPÃÜ’³§×ƒ¤#2éŸ"2tKŒ~R>‹"(‹E&×ÓÞ"~jøILšmþÒ2˜Øš_¦@ðÛÔ¹í÷§Ð©ë=9Jh±âËÉßóy@4÷CáP``¯îƒª‘ô{ñÞ@¯­=i¯^Èm„¼ÊäʦþSé %Pç3Ã}öÚiàûÄ*Uv²wCÖÃ2&Í¥I™•¦ª1ÀíRy˜ rëÚÑÐ8ççÙ—³´l>;]NõúÿíD¹ö¨ÉÈaý$–Á‰Ýõƒà¯y‡¢2Jùò°bR¼z…wÔ+‡Ú%™ùåؾ¹ƒaÇ;¦$A±Õ‡ç#˜²8§À”~žH3ŸGCöoŠýüýÊ”¢éÛRƒF‚Ž]*Ä㩆NY`"ÉU?Òâ#¼ã¢`a+Á|Ü.#V.Nøwþ”xDû 8“»eñŒ4#2`þMúýϪRF¡¡X$ˆj£‘˯äð6çÎ ÐpÙÐý²ñ#$¬˜óÇ û³°”õí¤#_¤ÓŽôß#_´Òe‡ë©m¡L~RÌb•Ã)*!ÀœáèuNWMæìïG1‹@þJƒEŠ,¤ÑFeŒÙÐÇD¼»>î?øûµM#V÷íõ´BR¨þh#2S[·êÅÅ=Ÿ’'áèØ™>sˆÍÚ>•7ª¬RÍ;7#V Zl¬$É“$=T–¥I'tÈüs0YJ›YšýN×#V†ÖÓš˜w½±ùlõ…‡%ân2m0†ÖM‹¬8ý¿Tí›:GœRîàÎfLëbá‘2•×I8‘©—Ù\Ö±R(—/zx[RpÌ#û»M)KÞ§Žf*£‰•ªw¨â.åݦÅE8è¥Â!¥Ä+ŒYL,Ý]R/Ø’Î툼\e4ù»hW‡Óa‡6mÊÞøïÎù}AёĤêy—µ¹>ÂÄÏZ1n@ù5>nr±®53¨lA†f¤“q“n)ƒwX­Ÿx&Çòú†‘0ó‚Ü1º˜kµ¾Ç³¾úkfÔ˜5Hا+qÔ5ÿ?Eòã¶Ï9Ñí„ø+ ól¹‘ùÓ†‘zq¡D#Vép9Ƕ Ôí-8QŠ·-Ä:Z˜Ô_Çš ²­Émm®†wÎöƒ!íž#_“i"LL1Ft5&b¾•‚Óv¢“äÁd6ìPX˜Š„uˆµ&–¼D@S‰y“ ²1<Ì!ÓÅNí‡d Hˆ¥93§#¤G7·]‡Ëv–Ô¡üM?xßFZ*[RÎÈ'¬lN2· QÖYÝDzʻPïvì—ðå'bï5!VB´å0™:iª¦CN ~ÎiyyŒ9§dÒ3Ìè“I<7Aß\ŠlªN||;ªÒ#;ð&ûgK¤Á:¶ŠŽÃ5êwª°;°9©ñ؆hLÞ»07îÀ‚6fÜgç 6f¸Xݱ’g‘ľÒ‰Àê‘TçX’Ë·}ñTß#2åÛ´ËJ TŽI“˜m#ò—ÇI°g‡@øÎ#_3s(mªwÝ»Ýä6 a„n4htmâ.* hs=ß:›O8ÁÃK°ô ’BeE@{j„AHªÇWóà+]6ºṉ̃¹·jb²óBwwã\>/W;•´¶ µƒºÞتpwO–ˆ@‘´Žd”ÖÖòØ'L‘Ý®ÇÃãJÙ‚<8a®L·;;—ÔLcŒFšw0Ó£¨†&Âvù©F&3ú&ŽÅÛs:®hï8º´"µbra£´¸MnûèÛq;›usÁ¾ä€#VŒZ·œì#-™.Ò@@d›ž^jƶÎõBI@îÆɉ‰ˆ¦Î˜á[qÐú5†ï…â9¢cLJy,Õt­ÊiÙ‹³2¹ŒØÆõƒ9Œ”?‹†™® r#V1Êfd„€9%÷ÙeõqDrté –ûuS/ӧтk"ïÌšŠnÁi›ÿÀÉf#_×:ÝãjG0ã3c‰7ÎëLùË^ÓeÒÝÑ`¢Öó9Ç9’Ä]­¸{x#VlkD‹&ÎÅí¯U#¾`Ñ5¤ítnÛÌp€ÇÆvX*0A*ÓOZ¡Û;¶M¯'Œ_UåÆ6•c¡sWÆsºÈwìÊûv7 1‰F›Rç­Dh쟚½šeh—m×[ky,Cšr5˜ÙöÝW Pð0f2#_*¨i“yqeâM°ðbk4©£#2LÃ÷±ãÔÚ™—(δˆ(5%"™º¬q ee™‘›NÃS$‰&^ÆžLŠ«Ì˜[A.`Ýü¯®rÕ<¸ì(ßft–ÒÑw†[¸t΂W5eÑ–æt3ˆÂ#_À¦hW‡ Zñgãlé’t:psÍBQ§"%¥*ŽR9%¶aJ!¡ A.ª!ÝÝ0Í•Qu18¬åk+DA[Oc'<ïoÇ.ûæ4q(„Hè*À̦’4×·zœ™SáöaMiÁÉ8™*Œ[Ö¦Š–V‡„Öýe…³V0“‹)¯A{0• ‘áˆ5š/¾»¬ ·¿1¬Í4« Ö —3Ò5ôb#V=3l…2IÔ’H¡Ï¥ôŽÛò³jçš®1ëyœE”{ìÁ±uySÙkeˆfss”ÔÂH”7Ùñ®eH¼0s4-´ÚÖgº5§Ð±ô-st-8+d›ÌLÀ‰¥+W¤“Z(ÓY™GÄÛº!å#_cãS"Ó]kSvhÛË®ºÚ[dk]6pàÛÔSÎ>zÞ1‚9›Å;€øÙðLËF¢j“–W‰+Cˆ9r]cSkä´…:OÆsä>0KQíÛ*D₾b#_«†£$h·nîìBJY7¦tmlÁ+ãfÆ &´Å, #_ZN$U £X¬‘’· åûi6À¬N-m¤Ë×lâ‰Â š!º‡ß;â– ;j›s#Pbu™ j™LŒS–ÁSLàeú\5LÍds‡?É/×Ãj5è{xëŽ;vPÏÙÍóÔäíÇ#2™#VÏÖZÐfÞ#_]ÚÙ‡Ý<—”ÐIƒdR:P^c#Þ%¥7)¡Ay\)Ø4·“¨#_ ÑY‘jêJ)(x„ È3& #_–ê¿“áÿ1FÙì£M®yªªwnÙè©LÎÝ:ËFÚŸmF>Î4q˳mi×pà¿mù#_|¨x9ï®%щx#_f–H™ã·.΃¶¤©#’,!Âq¾²ƒAJI•€@X‰¥`,F‘ñˆÒÑ´sw3F¨•i<ÊT†^‘RMv‚SJÍ:·zj ˜¥‡·s™%°Iêa|•S»Ö6‰tèÅ*º ¨icw” }öxËWig3z 2ž#2º%Ñ›ŒHí!N:ø=¬PU‹œéa‡ŠÚËØYƒTÔp¹Ó•ut¶j#_#Vû*åíóÀ]ÄA Cp³)Ž,&Ý{4É«Ñš*3¢C5²†vÈ=ÒIJ­TÖ1 jp#V æXÙ¬3™`¦.L]bgS#_Ñs)ù‰Î ìó´£#­#[Lµ93Nc'÷߆ÈdÞ¡;>ƒ‡WàËWSqƒ](rÖ9®ñ"¥À{zëE#¡§)Ù±‚¡µ¢®š]Êd™¦s-™´Î©SÎ$±Ù3´½éê1Ö VsC”Ÿik.ƒ.®ž|L¸ÂÊ# âMTïzV1jÜHIöŸo‹¤°ú·ˆ–´½òÌa×9ØÍ&×#Ã/2êHì.Ý.`L"ÓªJ?ŸŽ3e—#_;Äm¾×Îk‘÷¢aÉÓª¬CKÕâj*s1³ Ο(Â(V é§‹ïŒa^oðÚ]ëæôdßXÈ«âýÅj¶Þ¤ÂJK^3Í’N¨ÍsºË¥\ç¶b=^îó¬m`ô²ó ­ÆÄêÌ걺³gv(Xr`u:Ã’Ìé®:kƒá¸[Ñá’evÝ82ƒ,w¦$J :N,fõá¶v9é/6yÏÃËaC u~ÛF’4Dõ`lx¬oŽµÏ86ÈØwh áÄsÅàÁ%“Ĺ ;ŽgM¢ ^¹ÔPöûìjõN8Î#¶$É#P›š>_b鎛X¬–$ÇŒA)^;áÂïÍ^)îáß®Ê1§QXÂéìôr£+á³» È`:a€A¦ ɆƊà jÇ>0Ý#2Â-.8âæ<å"˜ 6 ±Å#_¢‡e£Kh1\ÁCÐM5#VñPɳ¡Ó»nã?y›rK2Ì:БG/<ÒIr§„™‰¤{RÀõï£bت Ô5Ó34‰“<ï±c!$Æ57CcYRË%-;1éúøõ.ðÆ\ÙÉá˜ÙƒpôÉ=®ºÖbžÒƒÓ'ˆàMË3=’Éw<ÛBI·.!®×2Îhe„ï˜4f‘ø\2ÁO@Cå°xãh•9šŽÍ n#úzt.ÿT?›¦cg¨Oã liûøçHƹ¸ÝUX¨óÐû·}žûÜ´Ê”hëR‹’¦g3=.Œ²ck&®™TŠ*¹B³4òo§»¯:]lꌲ²ä9pu:>¯–ǨÉÒl/QSŒÌØòF–Qºb™6f›x¨–NÖˆBÖÔpP‰$Lji6ÞµY%´6Gº}®a›l§3àKvë#Vs¬-7‚ÀÍ•s1£ZU¦x}µ'Fðg?Lâw:ç`Óã`ÈOiÂe)™ÐôP˜%¯.©×Í׌“VP—ɾ% ±ª+—#VâKƒ£ÝðE´¸}üæ.ÃZà1É^EU¨þšJŽó¢1®H\צô¶ýÍ&>26Š$AÊH.X“½Ü{~;˜ôRb€¨)€ÀŒ´ŒŠb6@@šq˜ÀPˆ ñ¢P›‘ØXƒ¦ãË0ŒßFŠlÀœ1MAk2Â(놋$š“,“ˆáxù#2æùA=ï•™yPî\»4æÜ&Ó1°äÓ¢ðÃŽþÕMåGŸmƒÚòøÓ!Á±Ú;'a‹£ Q˜ ‘)H:‡G.xá5aY—2Ýu#2A&àËÁ:bg‘.©€tò%è.˜No`r{xȪrÔâñŒØ¢ÒTªÈÓq™P(mÉŠo1b*:dær#V˜àÁ˜(¶Å°"V룪¤l1:AèˆHØed) (Å%çË#V3UÇD3²@v… Œˆ6"¨&šìƒgZŽÌ;èd8$l]¨.7³0HÒi½‘I¤tGJÓîC¤…dqÁµcz#VÁ è=Š˜&ÎÃÐ#V2mN¤îö0%XW² êi‚­­ Àg‚eÛ`¥Ø¢†ØšYŠeÌš PˆîBóßžÙ™G#a‘æ‡8+´œaÁ&0ÀN‡`)‰\§wA£ÈÅd2S¶ Þ!¶ƒ|bƒ,[í`Q·#_ÈîÕª¹ªWá“&Sžú9²öî—-[¶b)„¡˜´%,J›û¤ŸîKðwãÆ’â”7Ш7u5fµò8ùX=7¨^Xä€ÔD€4Éò:D~cÀ+’ >qàÝMþ>ÿ ÌÀØy+Ï—àÙTdå^ó´¬d´µXJ_žŽ×±È6Ï`*ıJF³7Öb¡y#2I€…ÕÈû#V÷ÝÛT#2¬o½Â환ÃÐ+'Á¢þÕ14çWöàšXe¦Š§%ÌAI??¶T ¡ÆDŒ_è3µ!4œ?˜³ýRPÜ*)#VȹLGͧîéx0Îm@–#»BBŠp¿@ˆä3”‰ÅZ`a²#V$ʱÕP CŠL%~h\¯«Äø$9IhKbÊÉÃêÌ%þŒÆ{z}%iíÄÆLy?5ÛGc9Ä’ï áážr@Êú¤ï€y@;Hdä„õ…?^¿#Vº3µÛVç‡vÇa¨àB6 åÒÃ#Vb=ûjPôÔ¤aì«{#xt$écnã¥LSs¶(@ôª‹L!H60ƒ]aa[m»?e$Á„<`•9vΚ+CÏYv$F–0Bé‰6•} I<˜Džu#VÒµ~GÝŠÅÂd$Cºde‘E6 Ô/´OȉøB}‡Û·Ñ?b‚  vÀ]§_,ìì?2šòâpÌ3<µÈëÑ”z =ñB) g÷Èí(u6G³dã6<öó3Žp!(Ü¡sŠ‹™Ý7ntîí`×Wuú—žÓ;t À@Ñ×Ø^árvA„|dËatà8ÀI¸BFF=ÍZ5‰1–A‰_;]wÎôãº|ùÝ|ï‹›WMŠOuÛ#S×v÷{ø×o†!ªómËëëÞOpùRàIó®qÆ(Ù»w»u1uÎîíÕó.™yo’Þ¦FÛÊ÷¾içuÞïEWY™!$É)2_êòùÝ-íÝ¡ä®»¸1àHnÛÓ$Ú*ՈɎÜ)O9Æö^î'];º'«Ûkl1”Ñ)0èp„ÅÆM0’B®i GGÏž“š È¿™4;;mCÊ„;˜8‹Æ“RX±ažm¬Î!Mkq5̼E^5„ÛUò8åenAÝåTœiiPŒ'tùÜÔZÎKN]L%›“vL“«#ZÉ2H¾ÍmÞ_^ᣛ·ÒáXcæV³6òZ V”`Þo3]h2sºݣv6#V«³ŽÓ@—¦¹ðO@Q»v¬œ IM(rÃ#_B†—ð"Í€(î9¡ìûc>.Rá^Öh/iˆð<—ª˜øÂcùÑ_M®ƒ`ŠÍd’ЪGɉ¯w7™ñ¼p}HNt¸°m¦†g&›¯SÓÉ¡£t+¦s½-š&Fùi6Òޜиâ­ÈÙÁŪ˜ÌÑȤ£UcDN‘¨i‘ƒ„=ØJôõ†na®i¼D[Щb"##2äm±­@»#_¦±#2š"aÍò± †YDŠsj§™åè"¡Rü‡¨vH(Ï$iš]Óe‰%<®á˜»¬ReMŒ¾R¦Z;½“ò½"sÎCÛÔi¿²¯žãK»²‹swÉ×ÓãoQ&"§%-XäÙ…LXmŽµ›¶—Æu>fíI³#2¢ª¥žÊV©DÕ›[¢ßX°úÞ|‡´¸ÜHšROÂÍï!z##_¾7FS‹``(ni6º˜Æ1·^Vq9É™8ØÏ\CeÅA@*mã08À•7yd(>V8âíJ¦—,…¦‚5M}+Y4i¯NÑ-aÉøµ9@ômmDÓ¼ôb›ŒBPÒ;‡|=‘m‚ ÙŠýC:cÑDºãÓsâö’^ìFùÎ]ó_[Ö¢ªM£[ â]¨w5 eaü:µ™™XÇÑYÉõQj"†ºèªlh‹˜pµ»Â:nኌäC­*´å½¿llÁÀeM% Ä_Èc'h3(È\Åׇ`S#2P‡˜ÀbfÆòì»Bg߀º•M$‹µjWÅÏ¥Ænêæ%fŸ;¾5}MzJ¾{Õôùi•wUÝ,hªê¢M­åUÛj$£U5ZÔM5©Ý)±D¢Ð©(nH±#2lÈŠ™(lJ‘Y#2ájÐ(J蔥 ¨b#2ÒH ’¬ )ó¬‡A¶P| CéîÁT22•S3R„@¥,…ZQrÉÔB4ŠR*š€2Qú #25(£©ÞDR¾ #2ýÐò=žîÐðUÚæ°ŠÊãŒ1©alM‹#%`£‚U$hK«þÓ ~pØSï9Œ‘ÂIFèYd#_w@¡ÉM&B‹§A@`*Ÿ#pé>%À¬z_¦>L+åéGôþúô¦ßîíÓŒ–šª£7JÅÓøO} Ih‡¤ AM#2”%,’‘!HAùyrÝóÝüž_aðf:(Fߟpx{?>*ÈðíŠì|!š@ä{ó¯"C’¡Û =¼óÖb$èLB…2`‘ @¡(çË«ã|ר×MV)$~×ï={lŸGºí÷‡f±¦±#2.«¢0õ7~h7w!ºá€îÁ÷Œ»ç¾âbq‹ð;O &…è2'MàšuQNzÞ.­ËT®šL€¬ª{S…QìäLºˆv|äŠ}X˜™v¤’•Ù/Tȸ¬oWv=Þ!¶h™goêÑ#2ÚbÒNP‘£”Ž 9fêN¾-$d¥ÌÞhºÛ²HV‘XG+‰•Û#lN£hŽTÉiJ´ñ1À¨Qî½ Þw+Ë{ºÆ½PA>wIÜŽ¸ôÁ§¤ÅGªã,++)MB\±±‰±ƒ ØÊÇ`´ÑloS·m®|îó¥r¦s¥ªï8ñ0aZ–ÖEµ\±ÖC2e”f3NX–P1’b$Lƒ ÄÁ¦#V0UÖ+lÌ1‘“!Zf6ÈãÀÇìÉ,ÉXñ$.²`lQ¡bt&Ä¡¢#_Q0t¨ˆƒK"h€QB´F!ã,®Q£âà³ohÚãÝ:›Ûº÷;‹Êìènh×Ë×{ævçÝ:|®ÞæäÔÎùw½”F×)ÛÞåˆÖ±©ß=«cÍç•ÝvÂ+#2ÆAŒ“#_68$È’îl!ØÃÈ: tÜ¢¹À5XÊ1Óâ?Ý·0ºàY<=Ç1yŽº"j|Óœ»(lÄ#Ëg%Mé·'›:Fœ#o¦³&êƒéê“ìû½{}æ)³úìYpÖûÇC&1ÿƒ¦÷Ï0Ó›#_ ¹`ªZì(/I :zCÇ¿ÏÊfÎØ%4™ÌiS%¨ÛÕ²åÈSIL0Lü[vV„Ûãj¼Ú½ D9(¡@)ò”ÉA£ˆShZ •5ЩHä#_k±¤ÑÎkª6Ñk6$ ‡`ò¢ ¾ÐX(&À#_k¼Àƒ‰#_;äÐkSuVdqu܇ã=}vªŠ‰óµÊÝK6²/t¢¨ŒFýkÀê’™“ûŒìuœ±%Ê(  du“£Qû¿¯Ù×uÝâ—=èy§PmŸçÖ¸CÍÝœ„^ÞIB{Žñr§Øà:Š*|6h†D)Ÿ‰ŸÀHh’´XJÁl›L¬š“KJ™RÅ1¢Í,VØÖÌKiRÉTªjŠ¼´mmëÖ£FA‘2Ê‘†Sðìãcö½â™ôwü<öÆ@ždâ…âû4J)ù~q?#öì<ˆj†øà\7ˆ}9ßÁ&=,õV±lèÝ]Š|¸¯gÓœ5¼=q,Ö«Ã%OR;Èñ36îç°§ûíot\Éû¤ LÖï÷Ö«VVÏ°‹·Â»P‡Ú´‰Ú3²†'VëIšJO*:¹… QŒ±laÀl‘=:œLuêpS:Ok#V¤ELKĘŽ2ƒÙ% Âe>.+EÒ”-乜ÁÝâ#_WŠxÀâ©TJeí.„R‚lˆÝ£õ–lm˜ØÖòÚa[¯ÒÛ³’ÝꩪD®ˆ¹¼%Î!ÌEÖ>é¹Õʹz”«£|Û¦Þ"æˆ/…,äËD'7-Í<h|ƒè¥–zuÆÄÕ^‘Ì;*ym;ª2Ö0ƒsa¦ÜLq¸A¶ì¦Mæjc±-Ip:M4GÊ0¤@Ò³#‚¾"ÄØ}@æŸ  ôó ?*qŒ™+5WšyÀ¢*:ó‘#ˆ$ˆ j8C.ó¾µÍݶt#V½§o17@N‚ž‡,¹#Vîñ#VÌZáÒ—wË¿=àÜ[à¤ÌB ´­#2A‡†W„‰<”D¤xäk%&$¢Y½ò:ìTúºJg™ÖO =#BP™ŠAïA2X‰Ø5¬t™ÄkÞN¤Ú)bÙˆßïuûäØÓ•Û}*Œ˜tÊ Å‹ì’`¾HtД0#_^Ÿ|:Â\,#2=äz½LÏ„ž4_ñ±êÅWºçi¶5Í­t¡oÅxŒ”8 ó#_.ꀇ ¬ÃÊ‹D¬É¼!RrèŸÌ{ºn}TÌ„Q‰Q$|Þ!í½'±}•M‡£'-„ô ]äL íð`€!±”+~NmŠÚ‹)­ —Ðd5¬ÉP‚»öÍxÑ⼯&bªD*DGEÃ[¨3;@ ÛŠF>!¦u$1DfŽ^îä]áªP(¥BšãgLhHQÊ~³ö½:?WÓ÷zù?#V¶LK#_*Š©Ùó§?¡r²èEHòÎŽèô[Šø2#‡úìÈã€ó=?†7‘ðÛ¶@GÌ .ÿ^l{ùM.z'$'û¹ïWéA=G3ÅKò(¢h­¦6ìÒ±†b#2ü¿ŠâЕHzôâ…Cb#_‘;€ñ–€°éî.i(~2dáF³²ÅR¾îÞà@ ?#V¿GÉs$œºQŽ]ùurQ £×JîDî®™%ŒÙÓ{¯ží¹_6žísdHIv`r‹U+2$;ˆy¨ tË¥0cq¯MQÖsþH¨Ú2A»i\1`J€›ÒŠ4lKí7rÜ#_ö5%6jżæs\L*îëÍ^öÜšcQY5µêj»„È)ïƒaÎ#2h+Ìþ;a7b"h¾*/iãI`È @ø ôqOç+®½ßlè=ÿ#g‚\–µ÷ŸGqˆ|¦çSDª?¢Èâ 3æ+ÉZo@t,—²`ÄS×îX>ÙªfB‘#_„¤X•„"QY D&(PIE(ZÖÀáŠçÎÀgØ£¹ö#V4Ô·¬(‚«äg=&n|EW·Þ´#V%£VTÖ2+ ¨ÚY-”™-I£Rh!"dt"%+êŸZë:Å*$ÑM‘”mŠˆ±©,h«Y ´Ù´•LÂ%ÑüÚÒD%TÒDrCa€’“öˆP5ý§R›þÜ) x£áT¡*âì¤!'ž&èü™]…|IG‘R”Ái²Ù`¦M}ï¹~÷­ìܶ,½Ÿ&šH©EM°ÖÌ–Æ´FÆÅ”“)Y(¡´i¡/›Þó[d• %H!j’ø|*›BƒãívM•WÏX¤¿Åýÿ¯þ.Ðëú¯ÐýŸààöääψÉV5Þ@øIÈæ™ú§„0m1î“sˆÃ\×æ5.÷.‚†Ùdô¡dÁƒ¾ƒ €“¦ƒ Ú«'Ã%FE}0ã#2h €ì,4–ÝR…CÀm>òr^G]yöÊïFÖ…èO5 °ùµAù„܇¼#а–3ã0vˆ¨ÉÉL—æµý±£ÁÑ#2›š‘r233$óµ'™Æ´A4·to¥õïÃ1:’^I„ÂF!Øï¼a©._! !.ŠEFC;¾9ˆ ã`¾žj‡ê ‚¢¥š#ë_¬2 X %#_d‚šõªÒ]*#2û»;âƒd«A¦#2– ûã$Úq‹^¯n³^êö‹Ó\(.éÝÛšÃ&‘B’¤†E•"ÄÆ€ƒN$´m‰¨#V¥X„œÖ†ÒT„ôòn €ÿ+#2€ƒþ  ($¿»*$B„M*Àüθ+¸—À?9$˜m¬¢Os Ø €“Ú™µiL{“ã'<àûb“Ú6{ãæµ±ËÝ–Y¾áO(ZV"‰¯³¢ï²Cy òÀ2„vuR¸Çó’Å£ŒÖîX0›1IqV£ˆ+‘ÆäÒ;KQþ©Í& êHdÒ…LKÊrì…Ø!ýv­»E×ñÝ:®mºÝ!²;Ɉr.#AÆ}täÐ<(šàòAF#V¤±½Ø¤a ò­U, Ãd6(УÍ{Ž×#VF’fÜQÄ2«ÏxiZ˜öB«/À¹ÌoŸÏs:ýúhørÏ!ã|xÔ÷&dúú9C^ÀP/pQEŠEK¢¨ ÍÔƒ°3Å5˜/Ê)ØßÕ±™€äþ“|d²d"w*'ïb^~ 9•÷Oö³l^Oç'¯µ“‹Ó¨©Š”,Ÿ «²:hþSWLÎ Ø?|#2òci*0 ãræ\9#_N¯˜ïc!3Gò¯Î\äààs84º4n% ÏP{V*ò#íSª¨ø¼Þd„žûÐXînÏ#ÈÉ!àÿOÐ&¼;Œ÷¸d1åæÔzBíÕ×]Îë ’D&Ït+RÒ¶d–F“¹ìÓ_NùÜÎî—yWZF’ÔYe±W•Ñe)·SnÍ×ZºK`³7̶ßqL´ÊŽÒRÄ2̧OȽû‘̧Ÿü|~vÿŸØpl‰j3ÖŒkÞØ?€òêê¡ÏÅö8Vçï¿ËÛÓ²aƒÓ³~x¶îìlKó§Y°iA6­Òë¼4­9Œ,¸:@š²èèµrPÏ$µðŒA¦•zuZPˆµrCÏ÷T±ûCTƒl§((‚2oþ@ßp§U½ÈQ¥Ð¶¬Ð³’$A‘óÙ߈jµŠœá¤ÖˆE©KUHуù,©`gZ$žó^j¶²†W¾©AÛHËâ…™BÆ„ä ’ØQ¾9‘!°Ïf5‘à3§9;lCGÚièrM$gp—ÖÒ'†µ´’²Êæ.f66‘Dòd䈰‡ºà{½;{ÃQù(÷¥¾ª97Ÿv½¾§cÊðØiÑW²SŒÜäJpÇ®5‹.PT€:¡ \õ1(u?Yo·Ô:_”¸×kü~„DXz·ó¾t³AFÞÓ"ÉL¤êl®èy÷œ´C%EŒ ,‚Re'ós0MÜ6Üø‹Ó[œŒS¹às(ålÂS1‘:8ìr;#_DûrQ‘ Ìáe•[^6*W3èNRG¯ù= ¿¯ Œ2&°Ñ¢ß8ýøáA#V#m§Ò(„Ù¹:„‡HT~ü)@É¥T¯ââGT@.ÏøXŽ™£õ01 #¬l_lH\5§9¤Ã’kÄ?€¢ý=3ENöÈ#æÀl¦LR"±#V¥<ýë„#>G×Ndœ¹,#2Ð¥Õ(Èõ/_!!;h#2o”½£œ 6b?Æ1!M#¸üÒĬ¨IûqG@ÆÛ9Ê.í±#_D³.¡O×£{,@$9Ãá Sž“"†I’‚b*Fš¤)Jœ¯ó?ñì„mhĈŠXàIlUé®׊ľ€c#_c;„o†e±iü%Á(À¤9A÷~'è#2ö#_m­G”ghb#È›š¯í{ÉL”_YBéá ¿îŸ;³3qø+‰}#2i{y< 5(ä= ö_}Ì­­i 7$8„È$_6ÈÒº‡óUFd4a3Ðî,Žp;M#_¼Y ÎÎYö>¸’ÿs2ÌÄ¢"jb¨›Ä½¸eÊ‚è¬YÝ#2øë°5µ¦–H68ÙÁë4˜î@o™äˆNl®Do¶riÜúqîìì^óaâQzÀH!(&ŠQØE8#V§ªC¿³J' · vxxKõJ‡³Â&Ùœ=Hiwõ‚ÎIK($Çv.yGyBú Œ#_3%2*‰ò<4mk ƒÇ 4fKà '<»Ð ™5¾zˆUt$¾ÑŠ.ïú¢©ÞXÀý‘Ýmùƒf€`i?a„c#ø3Þ®†-“:D‡”¸·¦*'}ÇI,Î…c9ºŒh³N°Ö"‚‹Æ#”広Ä+¼"%#2rŒÄ§Ÿ›sã¾Kþƒ‹\BÖ·&Kiò”c³ôk.àÞfu6¼5–% öÕXØÙu HÚuµgñq~¿=qÃŒ§ïŸ[÷pûð]&¤€ÛbÏw+L*š]fP¸ŠÙUù¯-‚V¿Ñ,4`B8?u1Dh„SUS­*ÞÞ=뙈ÇÊh&TX¸×/!½QiÐÁ±@zadÛZ¤Íã“.«Àˆß]Ñ_nä®rÇÊšäV9¾ÑZÈ3"¦€˜ÐÜÈVÜÚÂm›ME&²Ø°Ç¾BQ‘²RgHkRÂ÷RU˜xÉ¥N¦ÑiÑ4嘶æ-JCeZEL=Ñ-4êÃþ8ÁàÑ“5«Ì¤Øžð gÌ…°ÙbcÈÇoÑv%°¢ÓlÀiœ[qó9Å¿-Ö.#2õ•&5PűÓ×ÎÚ°Œ¥úžêôÌoºŠX&J‰E#UL+Z©;6ë $è&S9ö>´f=r4S…«#2¨)*bZÒxfŒIû¬|2UÏÀ^Q6ƒ“Ÿp¹œO÷´¼ÉºÆØô—ÄÙòh£9y"¶ž"÷5 kvØDÂÊ:0›Ùˆ(öàªÖ­©4#2'öytâ""¹~܆eÇ"QT&¡É³4ž]z÷l#Àûù»©°ÜŠ)YØplÞO#õæf#_|ò#V!C\{ UàeP]‘©J’€ ë<…ÇoM:P#VêD$JL˜fÄmm›*eYJƒé©óù³!•Ó™-vðC[.}X®]˜Ú]8_‡Ï¾\Ffr‡¿Í³ømhò‰ý_ÉK<ù×ão}… õÙðÕ_]F}zLü=|}[¾ž¸*€ Y ŠdixòL=—h˺©ídÎÛ³°ò5ãtê'Í[šŒLRQ° 3*-¯75©4©`¨ªÒK¾7™Y5ER É#2L€Ò,JÌÒ´w˜¡‚¢r嶕!„€d¨œ¿Tø˜Hv’)Ý)Ò#2ýä&_Þ’W¢©¶ì©Ô ˜@´P2ü#°$ƵQ¤!@ ¢'÷¼§yüA›ðý ú?ŸŸÝƒžçÛÖ¬†ˆWkŸlÊF}Ë!FßgŸK™)ÆêjsC–³ù/Á­³–i³Éë3¬§á-XV©Ù„b,!ËCcH" @qoNÀ^UËã$aì4¢ºJíŸú ª1†Þ±š›Î¼C_É3ÏT¡‰NÍÝu•HídŒà›Åá–;Uœ9OwC­Œy& ]iY§^E â#_4Dñ]=ívÍ›Á›nF£Vœ+¼X%þËI.*‹‹ÚÜÆv,9}YË3‰Óe*ËÝÔKOÌT£rN µèJî󪆇I'Âþÿ/¤1?WµŽy悱¼D'i⎈ªhLþ¥»;ŽÜ¸ÊÂ#VŒj-™”jsÓž[Ûa ‡L ÌžiË“Ù„çêä\kÂ.ÈÍ=ìØY¢C“I¸×OFi·äEWñh¡-!¼ºwÞž¹dæY›r!SÆ(}óŸ,0ix‹,}C›Fl<¨d‰h¼j¨K2„’9rW½lSdì¤Øw'Dlò’“w*Ó#_i®KŽ>˜B¸5&Ñ:HÄ\-ët˜4ßÂõ0¦©)Hª1%ÌÕXu˜piv˵ªŠ"#V¶Ç;o]³šCÉ‘ÑÆžÅ(H])A£2¤ys@F"Ó¢]fR’®Áe(.¾F1 •wOc™jªZ#V¤c%&¤Áªýv¹Š£ÍW-QFòÛyE¯«|š5¢´–¡"á쩨iW²Â8å†Nãg¦&¡¶Ì³#VÛ#2Pd5+NöO³D „õèK~,Ô6ÀOëë×pì\³kä%>KÂõ;©µî88bàÒÀAq*,Â#2ì_‡Uêi2óÖKŒçgŒñÉÁΨæP,O—äf$ÁàØ{&ÇÇ—ö >\êC”ÓÀ/€:ª#_ ,YÈ’Ø@_áRžÿƒ“ì ôd÷K¾o&Á6ŽËÜþ_Μμ{CÇ[“üùšeØ"pcÉhFU¥þî™ÑÒ`cê×Ë+÷sÁv§P†VJbÏH…Šgë‚€Ïü*Â戳»ÇÞ>j›^áYùÿWæ5óýÅÕC9ûî×ô÷‰}p¬þ‘8oîÎüÙ4vÔ¥»xœULà›÷j¸\eœÁ©‡|Ž!ñûö;hSèYþh%c(à1y L±Ç/ ÝlVmœ‘5tfâPsóéWDkýgjŽq–=j¼n»YÑ¥AÓZ“EÇ»0`òó4ÉÝÍ|">4@(I÷xË#*€ËDç{ž,_ÏMZPTHP×›ŒÿVÑá²xóŠë k‰Gÿ÷»›½Ìò.(;ÜN …K=8C#2Ã#Ñró§¸ä>Ü]¯žªÁ‚(oò|üÃ_?z=µóõ7¹U]´Ø4w"YfiëK‚'ÚæT¾MâÕíÿ؈íé?©‹?õåÚ¶ùnÊŸÿ&ÿÏ8Ë¥ÿø…R‘ò'Oæ ià`ô~¤ Mÿÿµß#VAÿ2Ÿê#VìÿÉÑ„frE@ÿÿrE8PáÀ #<== From 83a5648335ebaf027fcfd9264bd5ad67cf934e42 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 07:24:42 +0300 Subject: [PATCH 37/79] filesystem: only allow setting true or false for boolean type keys in gameinfo/liblist.gam --- filesystem/filesystem.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/filesystem/filesystem.c b/filesystem/filesystem.c index f22f4fed..4843927d 100644 --- a/filesystem/filesystem.c +++ b/filesystem/filesystem.c @@ -770,13 +770,13 @@ void FS_ParseGenericGameInfo( gameinfo_t *GameInfo, const char *buf, const qbool else if( !Q_stricmp( token, "secure" )) { pfile = COM_ParseFile( pfile, token, sizeof( token )); - GameInfo->secure = Q_atoi( token ); + GameInfo->secure = Q_atoi( token ) ? true : false; } // valid for both else if( !Q_stricmp( token, "nomodels" )) { pfile = COM_ParseFile( pfile, token, sizeof( token )); - GameInfo->nomodels = Q_atoi( token ); + GameInfo->nomodels = Q_atoi( token ) ? true : false; } else if( !Q_stricmp( token, isGameInfo ? "max_edicts" : "edicts" )) { @@ -844,17 +844,17 @@ void FS_ParseGenericGameInfo( gameinfo_t *GameInfo, const char *buf, const qbool else if( !Q_stricmp( token, "noskills" )) { pfile = COM_ParseFile( pfile, token, sizeof( token )); - GameInfo->noskills = Q_atoi( token ); + GameInfo->noskills = Q_atoi( token ) ? true : false; } else if( !Q_stricmp( token, "render_picbutton_text" )) { pfile = COM_ParseFile( pfile, token, sizeof( token )); - GameInfo->render_picbutton_text = Q_atoi( token ); + GameInfo->render_picbutton_text = Q_atoi( token ) ? true : false; } else if( !Q_stricmp( token, "internal_vgui_support" )) { pfile = COM_ParseFile( pfile, token, sizeof( token )); - GameInfo->internal_vgui_support = Q_atoi( token ); + GameInfo->internal_vgui_support = Q_atoi( token ) ? true : false; } else if( !Q_stricmp( token, "quicksave_aged_count" )) { From 279cec5ae9aa6282d6a4053ec7769e1fea333636 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 07:25:09 +0300 Subject: [PATCH 38/79] engine: rename cl/sv_allowdownload for GoldSrc compatibility --- engine/client/cl_main.c | 2 +- engine/server/sv_main.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index e3861f2d..182a8354 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -34,7 +34,7 @@ GNU General Public License for more details. CVAR_DEFINE_AUTO( mp_decals, "300", FCVAR_ARCHIVE, "decals limit in multiplayer" ); CVAR_DEFINE_AUTO( dev_overview, "0", 0, "draw level in overview-mode" ); CVAR_DEFINE_AUTO( cl_resend, "6.0", 0, "time to resend connect" ); -CVAR_DEFINE_AUTO( cl_allow_download, "1", FCVAR_ARCHIVE, "allow to downloading resources from the server" ); +CVAR_DEFINE( cl_allow_download, "cl_allowdownload", "1", FCVAR_ARCHIVE, "allow to downloading resources from the server" ); CVAR_DEFINE_AUTO( cl_allow_upload, "1", FCVAR_ARCHIVE, "allow to uploading resources to the server" ); CVAR_DEFINE_AUTO( cl_download_ingame, "1", FCVAR_ARCHIVE, "allow to downloading resources while client is active" ); CVAR_DEFINE_AUTO( cl_logofile, "lambda", FCVAR_ARCHIVE, "player logo name" ); diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index 64176adc..267e64a9 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -48,7 +48,7 @@ CVAR_DEFINE_AUTO( sv_send_logos, "1", 0, "send custom decal logo to other player CVAR_DEFINE_AUTO( sv_send_resources, "1", 0, "allow to download missed resources for players" ); CVAR_DEFINE_AUTO( sv_logbans, "0", 0, "print into the server log info about player bans" ); CVAR_DEFINE_AUTO( sv_allow_upload, "1", FCVAR_SERVER, "allow uploading custom resources on a server" ); -CVAR_DEFINE_AUTO( sv_allow_download, "1", FCVAR_SERVER, "allow downloading custom resources to the client" ); +CVAR_DEFINE( sv_allow_download, "sv_allowdownload", "1", FCVAR_SERVER, "allow downloading custom resources to the client" ); CVAR_DEFINE_AUTO( sv_uploadmax, "0.5", FCVAR_SERVER, "max size to upload custom resources (500 kB as default)" ); CVAR_DEFINE_AUTO( sv_downloadurl, "", FCVAR_PROTECTED, "location from which clients can download missing files" ); CVAR_DEFINE( sv_consistency, "mp_consistency", "1", FCVAR_SERVER, "enbale consistency check in multiplayer" ); From 061b50404d63a2eaf64c7b81367c11a3b6cedaff Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 08:02:10 +0300 Subject: [PATCH 39/79] engine: server: register dummy cvar sv_allow_dlfile for GoldSrc compatibility --- engine/server/sv_main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index 267e64a9..54430bed 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -49,6 +49,7 @@ CVAR_DEFINE_AUTO( sv_send_resources, "1", 0, "allow to download missed resources CVAR_DEFINE_AUTO( sv_logbans, "0", 0, "print into the server log info about player bans" ); CVAR_DEFINE_AUTO( sv_allow_upload, "1", FCVAR_SERVER, "allow uploading custom resources on a server" ); CVAR_DEFINE( sv_allow_download, "sv_allowdownload", "1", FCVAR_SERVER, "allow downloading custom resources to the client" ); +static CVAR_DEFINE_AUTO( sv_allow_dlfile, "1", 0, "compatibility cvar, does nothing" ); CVAR_DEFINE_AUTO( sv_uploadmax, "0.5", FCVAR_SERVER, "max size to upload custom resources (500 kB as default)" ); CVAR_DEFINE_AUTO( sv_downloadurl, "", FCVAR_PROTECTED, "location from which clients can download missing files" ); CVAR_DEFINE( sv_consistency, "mp_consistency", "1", FCVAR_SERVER, "enbale consistency check in multiplayer" ); @@ -925,6 +926,7 @@ void SV_Init( void ) Cvar_RegisterVariable( &sv_unlagsamples ); Cvar_RegisterVariable( &sv_allow_upload ); Cvar_RegisterVariable( &sv_allow_download ); + Cvar_RegisterVariable( &sv_allow_dlfile ); Cvar_RegisterVariable( &sv_send_logos ); Cvar_RegisterVariable( &sv_send_resources ); Cvar_RegisterVariable( &sv_uploadmax ); From 5aac5d2a525fa310cf62a3a3b167947bcf04ec76 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 08:02:45 +0300 Subject: [PATCH 40/79] filesystem: VFileSystem009: add pathid support to RemoveFile method --- filesystem/VFileSystem009.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/filesystem/VFileSystem009.cpp b/filesystem/VFileSystem009.cpp index 7bd53f69..28582089 100644 --- a/filesystem/VFileSystem009.cpp +++ b/filesystem/VFileSystem009.cpp @@ -150,7 +150,10 @@ public: void RemoveFile( const char *path, const char *id ) override { - FS_Delete( path ); // FS_Delete is aware of slashes + char dir[MAX_VA_STRING], fullpath[MAX_VA_STRING]; + + Q_snprintf( fullpath, sizeof( fullpath ), "%s/%s", IdToDir( dir, sizeof( dir ), id ), path ); + FS_Delete( fullpath ); // FS_Delete is aware of slashes } void CreateDirHierarchy( const char *path, const char *id ) override From ce39255ef0e76c6f9f03c3143e54f5e914e2a7d4 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 14:25:16 +0300 Subject: [PATCH 41/79] engine: host: set rootdir on Android SDL port --- engine/common/host.c | 7 ++++--- engine/platform/platform.h | 5 +++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/engine/common/host.c b/engine/common/host.c index 577bc913..9aa174b7 100644 --- a/engine/common/host.c +++ b/engine/common/host.c @@ -1017,10 +1017,11 @@ void Host_InitCommon( int argc, char **argv, const char *progname, qboolean bCha else { #if TARGET_OS_IOS - const char *IOS_GetDocsDir(); - Q_strncpy( host.rootdir, IOS_GetDocsDir(), sizeof(host.rootdir) ); + Q_strncpy( host.rootdir, IOS_GetDocsDir(), sizeof( host.rootdir )); +#elif XASH_ANDROID && XASH_SDL + Q_strncpy( host.rootdir, SDL_AndroidGetExternalStoragePath, sizeof( host.rootdir )); #elif XASH_PSVITA - if ( !PSVita_GetBasePath( host.rootdir, sizeof( host.rootdir ) ) ) + if ( !PSVita_GetBasePath( host.rootdir, sizeof( host.rootdir ))) { Sys_Error( "couldn't find xash3d data directory" ); host.rootdir[0] = 0; diff --git a/engine/platform/platform.h b/engine/platform/platform.h index df248038..fefe4802 100644 --- a/engine/platform/platform.h +++ b/engine/platform/platform.h @@ -37,6 +37,11 @@ void Platform_MessageBox( const char *title, const char *message, qboolean paren qboolean Sys_DebuggerPresent( void ); // optional, see Sys_DebugBreak void Platform_SetStatus( const char *status ); +// legacy iOS port functions +#if TARGET_OS_IOS +const char *IOS_GetDocsDir( void ); +#endif // TARGET_OS_IOS + #if XASH_WIN32 || XASH_LINUX #define XASH_PLATFORM_HAVE_STATUS 1 #else From a5ee63119194f0771e2ecf52810fc962608d36f0 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 14:31:16 +0300 Subject: [PATCH 42/79] engine: server: sv_game: disable searching closer to server library memory region for Android --- engine/server/sv_game.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c index 0231198f..a2f994b2 100644 --- a/engine/server/sv_game.c +++ b/engine/server/sv_game.c @@ -3031,7 +3031,7 @@ void SV_SetStringArrayMode( qboolean dynamic ) #endif } -#if XASH_64BIT && !XASH_WIN32 && !XASH_APPLE && !XASH_NSWITCH +#if XASH_64BIT && !XASH_WIN32 && !XASH_APPLE && !XASH_NSWITCH && !XASH_ANDROID #define USE_MMAP #include #endif From e3934af7d1b83d5a5d4b74b70a3098f748ed9c14 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 16:57:22 +0300 Subject: [PATCH 43/79] wscript: always load cmakelists generation tool --- wscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wscript b/wscript index 608ff6b0..3ea1e0a3 100644 --- a/wscript +++ b/wscript @@ -167,7 +167,7 @@ def configure(conf): conf.env.MSVC_TARGETS = ['x86' if not conf.options.ALLOW64 else 'x64'] # Load compilers early - conf.load('xshlib xcompile compiler_c compiler_cxx') + conf.load('xshlib xcompile compiler_c compiler_cxx cmake') if conf.options.NSWITCH: conf.load('nswitch') From 48e44f005730d7bef5e281cd3fe4bb64652a19a1 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 17:03:04 +0300 Subject: [PATCH 44/79] engine: wscript: move libasound uselib under linux condition, as the ALSA interface is only relevant for Linux --- engine/wscript | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/engine/wscript b/engine/wscript index 6f009913..48226bcc 100644 --- a/engine/wscript +++ b/engine/wscript @@ -144,12 +144,13 @@ def build(bld): libs += ['USER32', 'SHELL32', 'GDI32', 'ADVAPI32', 'DBGHELP', 'PSAPI', 'WS2_32' ] source += bld.path.ant_glob(['platform/win32/*.c']) elif bld.env.DEST_OS not in ['dos', 'nswitch', 'psvita']: #posix - libs += [ 'M', 'RT', 'PTHREAD', 'ASOUND'] + libs += [ 'M', 'RT', 'PTHREAD'] if not bld.env.STATIC: libs += ['DL'] source += bld.path.ant_glob(['platform/posix/*.c']) if bld.env.DEST_OS == 'linux': + libs += ['ASOUND'] source += bld.path.ant_glob(['platform/linux/*.c']) if bld.env.DEST_OS == 'irix': From 8647110a1081231fc0225894fc555b28796ec09c Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 28 Oct 2023 10:10:03 +0300 Subject: [PATCH 45/79] Revert "engine: wscript: move libasound uselib under linux condition, as the ALSA interface is only relevant for Linux" This reverts commit 48e44f005730d7bef5e281cd3fe4bb64652a19a1. --- engine/wscript | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/engine/wscript b/engine/wscript index 48226bcc..6f009913 100644 --- a/engine/wscript +++ b/engine/wscript @@ -144,13 +144,12 @@ def build(bld): libs += ['USER32', 'SHELL32', 'GDI32', 'ADVAPI32', 'DBGHELP', 'PSAPI', 'WS2_32' ] source += bld.path.ant_glob(['platform/win32/*.c']) elif bld.env.DEST_OS not in ['dos', 'nswitch', 'psvita']: #posix - libs += [ 'M', 'RT', 'PTHREAD'] + libs += [ 'M', 'RT', 'PTHREAD', 'ASOUND'] if not bld.env.STATIC: libs += ['DL'] source += bld.path.ant_glob(['platform/posix/*.c']) if bld.env.DEST_OS == 'linux': - libs += ['ASOUND'] source += bld.path.ant_glob(['platform/linux/*.c']) if bld.env.DEST_OS == 'irix': From 7f9025e178e044e102403f0e2b592d7a015af779 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 28 Oct 2023 11:04:35 +0300 Subject: [PATCH 46/79] engine: server: sv_pmove: use model name for physent name to avoid crash when classname isn't initialized yet --- engine/server/sv_pmove.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/server/sv_pmove.c b/engine/server/sv_pmove.c index b519c244..c47c74fd 100644 --- a/engine/server/sv_pmove.c +++ b/engine/server/sv_pmove.c @@ -80,8 +80,8 @@ static qboolean SV_CopyEdictToPhysEnt( physent_t *pe, edict_t *ed ) } else { - // otherwise copy the classname - Q_strncpy( pe->name, STRING( ed->v.classname ), sizeof( pe->name )); + // otherwise copy the modelname + Q_strncpy( pe->name, mod->name, sizeof( pe->name )); } pe->model = pe->studiomodel = NULL; From a2c9ac5b1f6dd75f46691d4530b785ef882e6534 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 23 Sep 2023 04:07:24 +0300 Subject: [PATCH 47/79] engine: client: disable server DLL probe for GameUI, check it's existence instead --- engine/client/cl_gameui.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/engine/client/cl_gameui.c b/engine/client/cl_gameui.c index 068a47d0..ede3c36d 100644 --- a/engine/client/cl_gameui.c +++ b/engine/client/cl_gameui.c @@ -982,28 +982,21 @@ pfnCheckGameDll */ int GAME_EXPORT pfnCheckGameDll( void ) { - string dllpath; - void *hInst; - -#if TARGET_OS_IPHONE - // loading server library drains too many ram - // so 512MB iPod Touch cannot even connect to - // to servers in cstrike +#if XASH_INTERNAL_GAMELIBS return true; -#endif +#else + string dllpath; if( svgame.hInstance ) return true; COM_GetCommonLibraryPath( LIBRARY_SERVER, dllpath, sizeof( dllpath )); - if(( hInst = COM_LoadLibrary( dllpath, true, false )) != NULL ) - { - COM_FreeLibrary( hInst ); // don't increase linker's reference counter + if( FS_FileExists( dllpath, false )) return true; - } - Con_Reportf( S_WARN "Could not load server library: %s\n", COM_GetLibraryError() ); + return false; +#endif } /* From d8b261370a9665ba1cf34ceef32f857dfb6e80cd Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 23 Sep 2023 04:08:35 +0300 Subject: [PATCH 48/79] engine: common: do not probe server to collect cvars for game.cfg (CHECK THIS) --- engine/common/common.h | 2 -- engine/common/con_utils.c | 8 -------- engine/server/sv_init.c | 22 ---------------------- 3 files changed, 32 deletions(-) diff --git a/engine/common/common.h b/engine/common/common.h index 08160029..c382fbcd 100644 --- a/engine/common/common.h +++ b/engine/common/common.h @@ -747,8 +747,6 @@ void SV_ShutdownGame( void ); void SV_ExecLoadLevel( void ); void SV_ExecLoadGame( void ); void SV_ExecChangeLevel( void ); -qboolean SV_InitGameProgs( void ); -void SV_FreeGameProgs( void ); void CL_WriteMessageHistory( void ); void CL_SendCmd( void ); void CL_Disconnect( void ); diff --git a/engine/common/con_utils.c b/engine/common/con_utils.c index 1be94c0a..7a763d9e 100644 --- a/engine/common/con_utils.c +++ b/engine/common/con_utils.c @@ -1423,15 +1423,11 @@ save serverinfo variables into server.cfg (using for dedicated server too) */ void GAME_EXPORT Host_WriteServerConfig( const char *name ) { - qboolean already_loaded; file_t *f; string newconfigfile; Q_snprintf( newconfigfile, MAX_STRING, "%s.new", name ); - // TODO: remove this mechanism, make it safer for now - already_loaded = SV_InitGameProgs(); // collect user variables - // FIXME: move this out until menu parser is done CSCR_LoadDefaultCVars( "settings.scr" ); @@ -1448,10 +1444,6 @@ void GAME_EXPORT Host_WriteServerConfig( const char *name ) Host_FinalizeConfig( f, name ); } else Con_DPrintf( S_ERROR "Couldn't write %s.\n", name ); - - // don't unload library that wasn't loaded by us - if( !already_loaded ) - SV_FreeGameProgs(); // release progs with all variables } /* diff --git a/engine/server/sv_init.c b/engine/server/sv_init.c index ce2c7ac3..87ae350e 100644 --- a/engine/server/sv_init.c +++ b/engine/server/sv_init.c @@ -1115,28 +1115,6 @@ int SV_GetMaxClients( void ) return svs.maxclients; } -qboolean SV_InitGameProgs( void ) -{ - string dllpath; - - if( svgame.hInstance ) return true; // already loaded - - COM_GetCommonLibraryPath( LIBRARY_SERVER, dllpath, sizeof( dllpath )); - - // just try to initialize - SV_LoadProgs( dllpath ); - - return false; -} - -void SV_FreeGameProgs( void ) -{ - if( svs.initialized ) return; // server is active - - // unload progs (free cvars and commands) - SV_UnloadProgs(); -} - /* ================ SV_ExecLoadLevel From 8fb908e3d4cd103230639f435ebc8837e76a9c54 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 23 Sep 2023 04:09:18 +0300 Subject: [PATCH 49/79] engine: server: disable SV_UnloadProgs, only call it when shutting down engine --- engine/common/host.c | 2 ++ engine/server/sv_game.c | 3 ++- engine/server/sv_main.c | 4 +--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/engine/common/host.c b/engine/common/host.c index 9aa174b7..654a564f 100644 --- a/engine/common/host.c +++ b/engine/common/host.c @@ -33,6 +33,7 @@ GNU General Public License for more details. #include "common.h" #include "base_cmd.h" #include "client.h" +#include "server.h" #include "netchan.h" #include "protocol.h" #include "mod_local.h" @@ -1308,6 +1309,7 @@ void EXPORT Host_Shutdown( void ) #endif SV_Shutdown( "Server shutdown\n" ); + SV_UnloadProgs(); SV_ShutdownFilter(); CL_Shutdown(); diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c index a2f994b2..3b07e63f 100644 --- a/engine/server/sv_game.c +++ b/engine/server/sv_game.c @@ -5148,7 +5148,8 @@ qboolean SV_LoadProgs( const char *name ) static playermove_t gpMove; edict_t *e; - if( svgame.hInstance ) SV_UnloadProgs(); + if( svgame.hInstance ) + return true; // fill it in svgame.pmove = &gpMove; diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index 54430bed..4d012391 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -1090,8 +1090,6 @@ void SV_Shutdown( const char *finalmsg ) // drop the client if want to load a new map if( CL_IsPlaybackDemo( )) CL_Drop(); - - SV_UnloadProgs (); return; } @@ -1108,7 +1106,7 @@ void SV_Shutdown( const char *finalmsg ) NET_MasterShutdown(); NET_Config( false, false ); - SV_UnloadProgs (); + SV_DeactivateServer(); CL_Drop(); // free current level From 78bc177e0570f8a6aab2f93f26547dea11dd69b5 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 24 Sep 2023 07:49:09 +0300 Subject: [PATCH 50/79] engine: server: remove unused host struct field --- engine/server/server.h | 1 - engine/server/sv_game.c | 1 - engine/server/sv_init.c | 3 +-- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/engine/server/server.h b/engine/server/server.h index 20770534..7667381a 100644 --- a/engine/server/server.h +++ b/engine/server/server.h @@ -360,7 +360,6 @@ typedef struct typedef struct { qboolean initialized; // sv_init has completed - qboolean game_library_loaded; // is game library loaded in SV_InitGame double timestart; // just for profiling int maxclients; // server max clients diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c index 3b07e63f..aac91db0 100644 --- a/engine/server/sv_game.c +++ b/engine/server/sv_game.c @@ -5130,7 +5130,6 @@ void SV_UnloadProgs( void ) Mod_ResetStudioAPI (); - svs.game_library_loaded = false; COM_FreeLibrary( svgame.hInstance ); Mem_FreePool( &svgame.mempool ); memset( &svgame, 0, sizeof( svgame )); diff --git a/engine/server/sv_init.c b/engine/server/sv_init.c index 87ae350e..d4eebd62 100644 --- a/engine/server/sv_init.c +++ b/engine/server/sv_init.c @@ -706,7 +706,7 @@ qboolean SV_InitGame( void ) { string dllpath; - if( svs.game_library_loaded ) + if( svgame.hInstance ) return true; // first initialize? @@ -721,7 +721,6 @@ qboolean SV_InitGame( void ) } // client frames will be allocated in SV_ClientConnect - svs.game_library_loaded = true; return true; } From fe407fbe009955a6961712b2b6eb76bcc1f69d06 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 27 Oct 2023 08:38:20 +0300 Subject: [PATCH 51/79] public: workaround when empty string is passed to COM_ExtractFilePath (should make safe COM_ExtractFilePath) --- public/crtlib.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/public/crtlib.c b/public/crtlib.c index a5565122..6004b59b 100644 --- a/public/crtlib.c +++ b/public/crtlib.c @@ -642,7 +642,14 @@ COM_ExtractFilePath */ void COM_ExtractFilePath( const char *path, char *dest ) { - const char *src = path + Q_strlen( path ) - 1; + size_t len = Q_strlen( path ); + const char *src = path + len - 1; + + if( len == 0 ) + { + dest[0] = 0; + return; + } // back up until a \ or the start while( src != path && !(*(src - 1) == '\\' || *(src - 1) == '/' )) From f07eea5073c0ce6d8f285aa746f841c2d57a306b Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 28 Oct 2023 11:14:12 +0300 Subject: [PATCH 52/79] engine: server: allow server unloading for Win32 targets until we figure out the issues with MetaMod --- engine/server/sv_game.c | 6 ++++++ engine/server/sv_main.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c index aac91db0..7462ac95 100644 --- a/engine/server/sv_game.c +++ b/engine/server/sv_game.c @@ -5148,7 +5148,13 @@ qboolean SV_LoadProgs( const char *name ) edict_t *e; if( svgame.hInstance ) + { +#if XASH_WIN32 + SV_UnloadProgs(); +#else // XASH_WIN32 return true; +#endif // XASH_WIN32 + } // fill it in svgame.pmove = &gpMove; diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index 4d012391..9b30ab17 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -1090,6 +1090,10 @@ void SV_Shutdown( const char *finalmsg ) // drop the client if want to load a new map if( CL_IsPlaybackDemo( )) CL_Drop(); + +#if XASH_WIN32 + SV_UnloadProgs(); +#endif // XASH_WIN32 return; } @@ -1107,6 +1111,9 @@ void SV_Shutdown( const char *finalmsg ) NET_Config( false, false ); SV_DeactivateServer(); +#if XASH_WIN32 + SV_UnloadProgs(); +#endif // XASH_WIN32 CL_Drop(); // free current level From 30d1492b938003495775102c2ed9ac6fa2cc16a6 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 28 Oct 2023 15:20:52 +0300 Subject: [PATCH 53/79] engine: remove Set/GetCurrentLoadingModel from RefAPI --- engine/client/ref_common.c | 12 ------------ engine/common/mod_bmodel.c | 2 +- engine/ref_api.h | 4 +--- ref/gl/gl_alias.c | 19 ++++++++----------- ref/gl/gl_local.h | 2 +- ref/gl/gl_rsurf.c | 12 +++++------- ref/soft/r_context.c | 2 +- 7 files changed, 17 insertions(+), 36 deletions(-) diff --git a/engine/client/ref_common.c b/engine/client/ref_common.c index b235ef17..d13d4d15 100644 --- a/engine/client/ref_common.c +++ b/engine/client/ref_common.c @@ -98,16 +98,6 @@ static void *pfnMod_Extradata( int type, model_t *m ) return NULL; } -static model_t *pfnMod_GetCurrentLoadingModel( void ) -{ - return loadmodel; -} - -static void pfnMod_SetCurrentLoadingModel( model_t *m ) -{ - loadmodel = m; -} - static void pfnGetPredictedOrigin( vec3_t v ) { VectorCopy( cl.simorg, v ); @@ -282,8 +272,6 @@ static ref_api_t gEngfuncs = Mod_ForName, pfnMod_Extradata, CL_ModelHandle, - pfnMod_GetCurrentLoadingModel, - pfnMod_SetCurrentLoadingModel, CL_GetRemapInfoForEntity, CL_AllocRemapInfo, diff --git a/engine/common/mod_bmodel.c b/engine/common/mod_bmodel.c index 05dc1625..0c57d5ae 100644 --- a/engine/common/mod_bmodel.c +++ b/engine/common/mod_bmodel.c @@ -2505,7 +2505,7 @@ static void Mod_LoadSurfaces( dbspmodel_t *bmod ) #if !XASH_DEDICATED // TODO: Do we need subdivide on server? if( FBitSet( out->flags, SURF_DRAWTURB ) && !Host_IsDedicated() ) - ref.dllFuncs.GL_SubdivideSurface( out ); // cut up polygon for warps + ref.dllFuncs.GL_SubdivideSurface( loadmodel, out ); // cut up polygon for warps #endif } diff --git a/engine/ref_api.h b/engine/ref_api.h index 21393ba1..b4ac9461 100644 --- a/engine/ref_api.h +++ b/engine/ref_api.h @@ -330,8 +330,6 @@ typedef struct ref_api_s model_t *(*Mod_ForName)( const char *name, qboolean crash, qboolean trackCRC ); void *(*Mod_Extradata)( int type, model_t *model ); struct model_s *(*pfnGetModelByIndex)( int index ); // CL_ModelHandle - struct model_s *(*Mod_GetCurrentLoadingModel)( void ); // loadmodel - void (*Mod_SetCurrentLoadingModel)( struct model_s* ); // loadmodel // remap struct remap_info_s *(*CL_GetRemapInfoForEntity)( cl_entity_t *e ); @@ -506,7 +504,7 @@ typedef struct ref_interface_s // bmodel void (*R_InitSkyClouds)( struct mip_s *mt, struct texture_s *tx, qboolean custom_palette ); - void (*GL_SubdivideSurface)( msurface_t *fa ); + void (*GL_SubdivideSurface)( model_t *mod, msurface_t *fa ); void (*CL_RunLightStyles)( void ); // sprites diff --git a/ref/gl/gl_alias.c b/ref/gl/gl_alias.c index 538cb16c..286938af 100644 --- a/ref/gl/gl_alias.c +++ b/ref/gl/gl_alias.c @@ -418,7 +418,6 @@ rgbdata_t *Mod_CreateSkinData( model_t *mod, byte *data, int width, int height ) static rgbdata_t skin; char name[MAX_QPATH]; int i; - model_t *loadmodel = gEngfuncs.Mod_GetCurrentLoadingModel(); skin.width = width; skin.height = height; @@ -443,7 +442,7 @@ rgbdata_t *Mod_CreateSkinData( model_t *mod, byte *data, int width, int height ) } } - COM_FileBase( loadmodel->name, name, sizeof( name )); + COM_FileBase( mod->name, name, sizeof( name )); // for alias models only player can have remap textures if( mod != NULL && !Q_stricmp( name, "player" )) @@ -476,12 +475,11 @@ rgbdata_t *Mod_CreateSkinData( model_t *mod, byte *data, int width, int height ) return gEngfuncs.FS_CopyImage( &skin ); } -void *Mod_LoadSingleSkin( daliasskintype_t *pskintype, int skinnum, int size ) +void *Mod_LoadSingleSkin( model_t *loadmodel, daliasskintype_t *pskintype, int skinnum, int size ) { string name, lumaname; string checkname; rgbdata_t *pic; - model_t *loadmodel = gEngfuncs.Mod_GetCurrentLoadingModel(); Q_snprintf( name, sizeof( name ), "%s:frame%i", loadmodel->name, skinnum ); Q_snprintf( lumaname, sizeof( lumaname ), "%s:luma%i", loadmodel->name, skinnum ); @@ -508,14 +506,13 @@ void *Mod_LoadSingleSkin( daliasskintype_t *pskintype, int skinnum, int size ) return ((byte *)(pskintype + 1) + size); } -void *Mod_LoadGroupSkin( daliasskintype_t *pskintype, int skinnum, int size ) +void *Mod_LoadGroupSkin( model_t *loadmodel, daliasskintype_t *pskintype, int skinnum, int size ) { daliasskininterval_t *pinskinintervals; daliasskingroup_t *pinskingroup; string name, lumaname; rgbdata_t *pic; int i, j; - model_t *loadmodel = gEngfuncs.Mod_GetCurrentLoadingModel(); // animating skin group. yuck. pskintype++; @@ -555,7 +552,7 @@ void *Mod_LoadGroupSkin( daliasskintype_t *pskintype, int skinnum, int size ) Mod_LoadAllSkins =============== */ -void *Mod_LoadAllSkins( int numskins, daliasskintype_t *pskintype ) +void *Mod_LoadAllSkins( model_t *mod, int numskins, daliasskintype_t *pskintype ) { int i, size; @@ -568,11 +565,11 @@ void *Mod_LoadAllSkins( int numskins, daliasskintype_t *pskintype ) { if( pskintype->type == ALIAS_SKIN_SINGLE ) { - pskintype = (daliasskintype_t *)Mod_LoadSingleSkin( pskintype, i, size ); + pskintype = (daliasskintype_t *)Mod_LoadSingleSkin( mod, pskintype, i, size ); } else { - pskintype = (daliasskintype_t *)Mod_LoadGroupSkin( pskintype, i, size ); + pskintype = (daliasskintype_t *)Mod_LoadGroupSkin( mod, pskintype, i, size ); } } @@ -680,7 +677,7 @@ void Mod_LoadAliasModel( model_t *mod, const void *buffer, qboolean *loaded ) // load the skins pskintype = (daliasskintype_t *)&pinmodel[1]; - pskintype = Mod_LoadAllSkins( m_pAliasHeader->numskins, pskintype ); + pskintype = Mod_LoadAllSkins( mod, m_pAliasHeader->numskins, pskintype ); // load base s and t vertices pinstverts = (stvert_t *)pskintype; @@ -725,7 +722,7 @@ void Mod_LoadAliasModel( model_t *mod, const void *buffer, qboolean *loaded ) GL_MakeAliasModelDisplayLists( mod ); // move the complete, relocatable alias model to the cache - gEngfuncs.Mod_GetCurrentLoadingModel()->cache.data = m_pAliasHeader; + mod->cache.data = m_pAliasHeader; if( loaded ) *loaded = true; // done } diff --git a/ref/gl/gl_local.h b/ref/gl/gl_local.h index 92d23098..38ca3d55 100644 --- a/ref/gl/gl_local.h +++ b/ref/gl/gl_local.h @@ -426,7 +426,7 @@ void R_MarkLeaves( void ); void R_DrawWorld( void ); void R_DrawWaterSurfaces( void ); void R_DrawBrushModel( cl_entity_t *e ); -void GL_SubdivideSurface( msurface_t *fa ); +void GL_SubdivideSurface( model_t *mod, msurface_t *fa ); void GL_BuildPolygonFromSurface( model_t *mod, msurface_t *fa ); void DrawGLPoly( glpoly_t *p, float xScale, float yScale ); texture_t *R_TextureAnimation( msurface_t *s ); diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c index 17cb8bb1..375b8fb5 100644 --- a/ref/gl/gl_rsurf.c +++ b/ref/gl/gl_rsurf.c @@ -78,7 +78,7 @@ static void BoundPoly( int numverts, float *verts, vec3_t mins, vec3_t maxs ) } } -static void SubdividePolygon_r( msurface_t *warpface, int numverts, float *verts ) +static void SubdividePolygon_r( model_t *loadmodel, msurface_t *warpface, int numverts, float *verts ) { vec3_t front[SUBDIVIDE_SIZE], back[SUBDIVIDE_SIZE]; mextrasurf_t *warpinfo = warpface->info; @@ -88,7 +88,6 @@ static void SubdividePolygon_r( msurface_t *warpface, int numverts, float *verts float sample_size; vec3_t mins, maxs; glpoly_t *poly; - model_t *loadmodel = gEngfuncs.Mod_GetCurrentLoadingModel(); if( numverts > ( SUBDIVIDE_SIZE - 4 )) gEngfuncs.Host_Error( "Mod_SubdividePolygon: too many vertexes on face ( %i )\n", numverts ); @@ -143,8 +142,8 @@ static void SubdividePolygon_r( msurface_t *warpface, int numverts, float *verts } } - SubdividePolygon_r( warpface, f, front[0] ); - SubdividePolygon_r( warpface, b, back[0] ); + SubdividePolygon_r( loadmodel, warpface, f, front[0] ); + SubdividePolygon_r( loadmodel, warpface, b, back[0] ); return; } @@ -238,13 +237,12 @@ boundaries so that turbulent and sky warps can be done reasonably. ================ */ -void GL_SubdivideSurface( msurface_t *fa ) +void GL_SubdivideSurface( model_t *loadmodel, msurface_t *fa ) { vec3_t verts[SUBDIVIDE_SIZE]; int numverts; int i, lindex; float *vec; - model_t *loadmodel = gEngfuncs.Mod_GetCurrentLoadingModel(); // convert edges back to a normal polygon numverts = 0; @@ -261,7 +259,7 @@ void GL_SubdivideSurface( msurface_t *fa ) SetBits( fa->flags, SURF_DRAWTURB_QUADS ); // predict state // do subdivide - SubdividePolygon_r( fa, numverts, verts[0] ); + SubdividePolygon_r( loadmodel, fa, numverts, verts[0] ); } /* diff --git a/ref/soft/r_context.c b/ref/soft/r_context.c index ece7fb64..703e04b9 100644 --- a/ref/soft/r_context.c +++ b/ref/soft/r_context.c @@ -329,7 +329,7 @@ void R_InitSkyClouds(mip_t *mt, texture_t *tx, qboolean custom_palette) } -void GAME_EXPORT GL_SubdivideSurface(msurface_t *fa) +void GAME_EXPORT GL_SubdivideSurface( model_t *mod, msurface_t *fa ) { } From cff276db71cbe41a728db56f0cf921c027c55cad Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 28 Oct 2023 15:35:20 +0300 Subject: [PATCH 54/79] engine: client: mod_dbghulls: reduce dependency on global loadmodel pointer --- engine/client/mod_dbghulls.c | 2 +- engine/common/mod_bmodel.c | 2 +- engine/common/mod_local.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/engine/client/mod_dbghulls.c b/engine/client/mod_dbghulls.c index e1c7e6f2..3b5dd2b5 100644 --- a/engine/client/mod_dbghulls.c +++ b/engine/client/mod_dbghulls.c @@ -659,7 +659,7 @@ static void make_hull_windings( hull_t *hull, hull_model_t *model ) Con_Reportf( "%i hull polys\n", model->num_polys ); } -void Mod_InitDebugHulls( void ) +void Mod_InitDebugHulls( model_t *loadmodel ) { int i; diff --git a/engine/common/mod_bmodel.c b/engine/common/mod_bmodel.c index 0c57d5ae..6fd1aad4 100644 --- a/engine/common/mod_bmodel.c +++ b/engine/common/mod_bmodel.c @@ -2989,7 +2989,7 @@ qboolean Mod_LoadBmodelLumps( const byte *mod_base, qboolean isworld ) { loadmodel = mod; // restore pointer to world #if !XASH_DEDICATED - Mod_InitDebugHulls(); // FIXME: build hulls for separate bmodels (shells, medkits etc) + Mod_InitDebugHulls( mod ); // FIXME: build hulls for separate bmodels (shells, medkits etc) world.deluxedata = bmod->deluxedata_out; // deluxemap data pointer world.shadowdata = bmod->shadowdata_out; // occlusion data pointer #endif // XASH_DEDICATED diff --git a/engine/common/mod_local.h b/engine/common/mod_local.h index 40a34ce4..d4a0a544 100644 --- a/engine/common/mod_local.h +++ b/engine/common/mod_local.h @@ -164,7 +164,7 @@ void Mod_PrintWorldStats_f( void ); // // mod_dbghulls.c // -void Mod_InitDebugHulls( void ); +void Mod_InitDebugHulls( model_t *mod ); void Mod_CreatePolygonsForHull( int hullnum ); void Mod_ReleaseHullPolygons( void ); From c5e91f299b2be0ea62305776ba46aa4101ae6417 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 28 Oct 2023 15:38:40 +0300 Subject: [PATCH 55/79] engine: mod_studio: reduce dependency on global loadmodel pointer, make it private for brush model loader --- engine/common/mod_bmodel.c | 4 ++++ engine/common/mod_local.h | 1 - engine/common/mod_studio.c | 48 +++++++++++++++++++------------------- engine/common/model.c | 2 -- 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/engine/common/mod_bmodel.c b/engine/common/mod_bmodel.c index 6fd1aad4..50ab2d78 100644 --- a/engine/common/mod_bmodel.c +++ b/engine/common/mod_bmodel.c @@ -210,6 +210,8 @@ static mlumpinfo_t extlumps[EXTRA_LUMPS] = { LUMP_SHADOWMAP, 0, MAX_MAP_LIGHTING / 3, sizeof( byte ), -1, "shadowmap", USE_EXTRAHEADER, (const void **)&srcmodel.shadowdata, &srcmodel.shadowdatasize }, }; +static model_t *loadmodel; + /* =============================================================================== @@ -3151,6 +3153,8 @@ void Mod_LoadBrushModel( model_t *mod, const void *buffer, qboolean *loaded ) { char poolname[MAX_VA_STRING]; + loadmodel = mod; + Q_snprintf( poolname, sizeof( poolname ), "^2%s^7", loadmodel->name ); if( loaded ) *loaded = false; diff --git a/engine/common/mod_local.h b/engine/common/mod_local.h index d4a0a544..80d8b580 100644 --- a/engine/common/mod_local.h +++ b/engine/common/mod_local.h @@ -118,7 +118,6 @@ typedef struct world_static_s #ifndef REF_DLL extern world_static_t world; extern poolhandle_t com_studiocache; -extern model_t *loadmodel; extern convar_t mod_studiocache; extern convar_t r_wadtextures; extern convar_t r_showhull; diff --git a/engine/common/mod_studio.c b/engine/common/mod_studio.c index 21f0e2db..4b2cd48e 100644 --- a/engine/common/mod_studio.c +++ b/engine/common/mod_studio.c @@ -851,11 +851,11 @@ void Mod_LoadStudioModel( model_t *mod, const void *buffer, qboolean *loaded ) char poolname[MAX_VA_STRING]; studiohdr_t *phdr; - Q_snprintf( poolname, sizeof( poolname ), "^2%s^7", loadmodel->name ); + Q_snprintf( poolname, sizeof( poolname ), "^2%s^7", mod->name ); if( loaded ) *loaded = false; - loadmodel->mempool = Mem_AllocPool( poolname ); - loadmodel->type = mod_studio; + mod->mempool = Mem_AllocPool( poolname ); + mod->type = mod_studio; phdr = R_StudioLoadHeader( mod, buffer ); if( !phdr ) return; // bad model @@ -886,9 +886,9 @@ void Mod_LoadStudioModel( model_t *mod, const void *buffer, qboolean *loaded ) // give space for textures and skinrefs size1 = thdr->numtextures * sizeof( mstudiotexture_t ); size2 = thdr->numskinfamilies * thdr->numskinref * sizeof( short ); - mod->cache.data = Mem_Calloc( loadmodel->mempool, phdr->length + size1 + size2 ); - memcpy( loadmodel->cache.data, buffer, phdr->length ); // copy main mdl buffer - phdr = (studiohdr_t *)loadmodel->cache.data; // get the new pointer on studiohdr + mod->cache.data = Mem_Calloc( mod->mempool, phdr->length + size1 + size2 ); + memcpy( mod->cache.data, buffer, phdr->length ); // copy main mdl buffer + phdr = (studiohdr_t *)mod->cache.data; // get the new pointer on studiohdr phdr->numskinfamilies = thdr->numskinfamilies; phdr->numtextures = thdr->numtextures; phdr->numskinref = thdr->numskinref; @@ -905,52 +905,52 @@ void Mod_LoadStudioModel( model_t *mod, const void *buffer, qboolean *loaded ) else { // NOTE: don't modify source buffer because it's used for CRC computing - loadmodel->cache.data = Mem_Calloc( loadmodel->mempool, phdr->length ); - memcpy( loadmodel->cache.data, buffer, phdr->length ); - phdr = (studiohdr_t *)loadmodel->cache.data; // get the new pointer on studiohdr + mod->cache.data = Mem_Calloc( mod->mempool, phdr->length ); + memcpy( mod->cache.data, buffer, phdr->length ); + phdr = (studiohdr_t *)mod->cache.data; // get the new pointer on studiohdr #if !XASH_DEDICATED ref.dllFuncs.Mod_StudioLoadTextures( mod, phdr ); #endif // NOTE: we wan't keep raw textures in memory. just cutoff model pointer above texture base - loadmodel->cache.data = Mem_Realloc( loadmodel->mempool, loadmodel->cache.data, phdr->texturedataindex ); - phdr = (studiohdr_t *)loadmodel->cache.data; // get the new pointer on studiohdr + mod->cache.data = Mem_Realloc( mod->mempool, mod->cache.data, phdr->texturedataindex ); + phdr = (studiohdr_t *)mod->cache.data; // get the new pointer on studiohdr phdr->length = phdr->texturedataindex; // update model size } } else { // just copy model into memory - loadmodel->cache.data = Mem_Calloc( loadmodel->mempool, phdr->length ); - memcpy( loadmodel->cache.data, buffer, phdr->length ); + mod->cache.data = Mem_Calloc( mod->mempool, phdr->length ); + memcpy( mod->cache.data, buffer, phdr->length ); - phdr = loadmodel->cache.data; + phdr = mod->cache.data; } // setup bounding box if( !VectorCompare( vec3_origin, phdr->bbmin )) { // clipping bounding box - VectorCopy( phdr->bbmin, loadmodel->mins ); - VectorCopy( phdr->bbmax, loadmodel->maxs ); + VectorCopy( phdr->bbmin, mod->mins ); + VectorCopy( phdr->bbmax, mod->maxs ); } else if( !VectorCompare( vec3_origin, phdr->min )) { // movement bounding box - VectorCopy( phdr->min, loadmodel->mins ); - VectorCopy( phdr->max, loadmodel->maxs ); + VectorCopy( phdr->min, mod->mins ); + VectorCopy( phdr->max, mod->maxs ); } else { // well compute bounds from vertices and round to nearest even values - Mod_StudioComputeBounds( phdr, loadmodel->mins, loadmodel->maxs, true ); - RoundUpHullSize( loadmodel->mins ); - RoundUpHullSize( loadmodel->maxs ); + Mod_StudioComputeBounds( phdr, mod->mins, mod->maxs, true ); + RoundUpHullSize( mod->mins ); + RoundUpHullSize( mod->maxs ); } - loadmodel->numframes = Mod_StudioBodyVariations( loadmodel ); - loadmodel->radius = RadiusFromBounds( loadmodel->mins, loadmodel->maxs ); - loadmodel->flags = phdr->flags; // copy header flags + mod->numframes = Mod_StudioBodyVariations( mod ); + mod->radius = RadiusFromBounds( mod->mins, mod->maxs ); + mod->flags = phdr->flags; // copy header flags if( loaded ) *loaded = true; } diff --git a/engine/common/model.c b/engine/common/model.c index 9b5f02d5..3a25cc97 100644 --- a/engine/common/model.c +++ b/engine/common/model.c @@ -31,7 +31,6 @@ poolhandle_t com_studiocache; // cache for submodels CVAR_DEFINE( mod_studiocache, "r_studiocache", "1", FCVAR_ARCHIVE, "enables studio cache for speedup tracing hitboxes" ); CVAR_DEFINE_AUTO( r_wadtextures, "0", 0, "completely ignore textures in the bsp-file if enabled" ); CVAR_DEFINE_AUTO( r_showhull, "0", 0, "draw collision hulls 1-3" ); -model_t *loadmodel; /* =============================================================================== @@ -287,7 +286,6 @@ model_t *Mod_LoadModel( model_t *mod, qboolean crash ) Con_Reportf( "loading %s\n", mod->name ); mod->needload = NL_PRESENT; mod->type = mod_bad; - loadmodel = mod; // call the apropriate loader switch( *(uint *)buf ) From 4d7d592918786e5db951cec4067f447d605c8bc5 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 28 Oct 2023 16:06:00 +0300 Subject: [PATCH 56/79] engine: mod_bmodel: completely get rid of global loadmodel pointer --- engine/common/mod_bmodel.c | 418 ++++++++++++++++++------------------- 1 file changed, 206 insertions(+), 212 deletions(-) diff --git a/engine/common/mod_bmodel.c b/engine/common/mod_bmodel.c index 50ab2d78..283d0d2b 100644 --- a/engine/common/mod_bmodel.c +++ b/engine/common/mod_bmodel.c @@ -210,8 +210,6 @@ static mlumpinfo_t extlumps[EXTRA_LUMPS] = { LUMP_SHADOWMAP, 0, MAX_MAP_LIGHTING / 3, sizeof( byte ), -1, "shadowmap", USE_EXTRAHEADER, (const void **)&srcmodel.shadowdata, &srcmodel.shadowdatasize }, }; -static model_t *loadmodel; - /* =============================================================================== @@ -267,7 +265,7 @@ static fs_offset_t Mod_CalculateMipTexSize( mip_t *mt, qboolean palette ) ( palette ? MIPTEX_CUSTOM_PALETTE_SIZE_BYTES : 0 ); } -static qboolean Mod_CalcMipTexUsesCustomPalette( dbspmodel_t *bmod, int textureIndex ) +static qboolean Mod_CalcMipTexUsesCustomPalette( model_t *mod, dbspmodel_t *bmod, int textureIndex ) { int nextTextureIndex = 0; mip_t *mipTex; @@ -282,7 +280,7 @@ static qboolean Mod_CalcMipTexUsesCustomPalette( dbspmodel_t *bmod, int textureI size = Mod_CalculateMipTexSize( mipTex, false ); // Compute next data offset to determine allocated miptex space - for( nextTextureIndex = textureIndex + 1; nextTextureIndex < loadmodel->numtextures; nextTextureIndex++ ) + for( nextTextureIndex = textureIndex + 1; nextTextureIndex < mod->numtextures; nextTextureIndex++ ) { int nextOffset = bmod->textures->dataofs[nextTextureIndex]; @@ -319,7 +317,7 @@ static qboolean Mod_NameImpliesTextureIsAnimated( texture_t *tex ) return true; } -static void Mod_CreateDefaultTexture( texture_t **texture ) +static void Mod_CreateDefaultTexture( model_t *mod, texture_t **texture ) { texture_t *tex; @@ -327,7 +325,7 @@ static void Mod_CreateDefaultTexture( texture_t **texture ) if( !texture || *texture != NULL ) return; - *texture = tex = Mem_Calloc( loadmodel->mempool, sizeof( *tex )); + *texture = tex = Mem_Calloc( mod->mempool, sizeof( *tex )); Q_strncpy( tex->name, REF_DEFAULT_TEXTURE, sizeof( tex->name )); #if !XASH_DEDICATED @@ -947,7 +945,7 @@ converted maps potential may don't support water transparency ================== */ -static qboolean Mod_CheckWaterAlphaSupport( dbspmodel_t *bmod ) +static qboolean Mod_CheckWaterAlphaSupport( model_t *mod, dbspmodel_t *bmod ) { mleaf_t *leaf; int i, j; @@ -958,15 +956,15 @@ static qboolean Mod_CheckWaterAlphaSupport( dbspmodel_t *bmod ) // check all liquid leafs to see if they can see into empty leafs, if any // can we can assume this map supports r_wateralpha - for( i = 0, leaf = loadmodel->leafs; i < loadmodel->numleafs; i++, leaf++ ) + for( i = 0, leaf = mod->leafs; i < mod->numleafs; i++, leaf++ ) { if(( leaf->contents == CONTENTS_WATER || leaf->contents == CONTENTS_SLIME ) && leaf->cluster >= 0 ) { pvs = Mod_DecompressPVS( leaf->compressed_vis, world.visbytes ); - for( j = 0; j < loadmodel->numleafs; j++ ) + for( j = 0; j < mod->numleafs; j++ ) { - if( CHECKVISBIT( pvs, loadmodel->leafs[j].cluster ) && loadmodel->leafs[j].contents == CONTENTS_EMPTY ) + if( CHECKVISBIT( pvs, mod->leafs[j].cluster ) && mod->leafs[j].contents == CONTENTS_EMPTY ) return true; } } @@ -1134,7 +1132,7 @@ Mod_CalcSurfaceExtents Fills in surf->texturemins[] and surf->extents[] ================= */ -static void Mod_CalcSurfaceExtents( msurface_t *surf ) +static void Mod_CalcSurfaceExtents( model_t *mod, msurface_t *surf ) { // this place is VERY critical to precision // keep it as float, don't use double, because it causes issues with lightmap @@ -1143,7 +1141,7 @@ static void Mod_CalcSurfaceExtents( msurface_t *surf ) int bmins[2], bmaxs[2]; int i, j, e, sample_size; mextrasurf_t *info = surf->info; - int facenum = surf - loadmodel->surfaces; + int facenum = surf - mod->surfaces; mtexinfo_t *tex; mvertex_t *v; @@ -1157,13 +1155,13 @@ static void Mod_CalcSurfaceExtents( msurface_t *surf ) for( i = 0; i < surf->numedges; i++ ) { - e = loadmodel->surfedges[surf->firstedge + i]; + e = mod->surfedges[surf->firstedge + i]; - if( e >= loadmodel->numedges || e <= -loadmodel->numedges ) + if( e >= mod->numedges || e <= -mod->numedges ) Host_Error( "Mod_CalcSurfaceExtents: bad edge\n" ); - if( e >= 0 ) v = &loadmodel->vertexes[loadmodel->edges[e].v[0]]; - else v = &loadmodel->vertexes[loadmodel->edges[-e].v[1]]; + if( e >= 0 ) v = &mod->vertexes[mod->edges[e].v[0]]; + else v = &mod->vertexes[mod->edges[-e].v[1]]; for( j = 0; j < 2; j++ ) { @@ -1217,7 +1215,7 @@ Mod_CalcSurfaceBounds fills in surf->mins and surf->maxs ================= */ -static void Mod_CalcSurfaceBounds( msurface_t *surf ) +static void Mod_CalcSurfaceBounds( model_t *mod, msurface_t *surf ) { int i, e; mvertex_t *v; @@ -1226,13 +1224,13 @@ static void Mod_CalcSurfaceBounds( msurface_t *surf ) for( i = 0; i < surf->numedges; i++ ) { - e = loadmodel->surfedges[surf->firstedge + i]; + e = mod->surfedges[surf->firstedge + i]; - if( e >= loadmodel->numedges || e <= -loadmodel->numedges ) + if( e >= mod->numedges || e <= -mod->numedges ) Host_Error( "Mod_CalcSurfaceBounds: bad edge\n" ); - if( e >= 0 ) v = &loadmodel->vertexes[loadmodel->edges[e].v[0]]; - else v = &loadmodel->vertexes[loadmodel->edges[-e].v[1]]; + if( e >= 0 ) v = &mod->vertexes[mod->edges[e].v[0]]; + else v = &mod->vertexes[mod->edges[-e].v[1]]; AddPointToBounds( v->position, surf->info->mins, surf->info->maxs ); } @@ -1244,7 +1242,7 @@ static void Mod_CalcSurfaceBounds( msurface_t *surf ) Mod_CreateFaceBevels ================= */ -static void Mod_CreateFaceBevels( msurface_t *surf ) +static void Mod_CreateFaceBevels( model_t *mod, msurface_t *surf ) { vec3_t delta, edgevec; byte *facebevel; @@ -1260,7 +1258,7 @@ static void Mod_CreateFaceBevels( msurface_t *surf ) else contents = CONTENTS_SOLID; size = sizeof( mfacebevel_t ) + surf->numedges * sizeof( mplane_t ); - facebevel = (byte *)Mem_Calloc( loadmodel->mempool, size ); + facebevel = (byte *)Mem_Calloc( mod->mempool, size ); fb = (mfacebevel_t *)facebevel; facebevel += sizeof( mfacebevel_t ); fb->edges = (mplane_t *)facebevel; @@ -1277,8 +1275,8 @@ static void Mod_CreateFaceBevels( msurface_t *surf ) { mplane_t *dest = &fb->edges[i]; - v0 = Mod_GetVertexByNumber( loadmodel, surf->firstedge + i ); - v1 = Mod_GetVertexByNumber( loadmodel, surf->firstedge + (i + 1) % surf->numedges ); + v0 = Mod_GetVertexByNumber( mod, surf->firstedge + i ); + v1 = Mod_GetVertexByNumber( mod, surf->firstedge + (i + 1) % surf->numedges ); VectorSubtract( v1->position, v0->position, edgevec ); CrossProduct( faceNormal, edgevec, dest->normal ); VectorNormalize( dest->normal ); @@ -1292,7 +1290,7 @@ static void Mod_CreateFaceBevels( msurface_t *surf ) // compute face radius for( i = 0; i < surf->numedges; i++ ) { - v0 = Mod_GetVertexByNumber( loadmodel, surf->firstedge + i ); + v0 = Mod_GetVertexByNumber( mod, surf->firstedge + i ); VectorSubtract( v0->position, fb->origin, delta ); radius = DotProduct( delta, delta ); fb->radius = Q_max( radius, fb->radius ); @@ -1388,24 +1386,24 @@ Mod_MakeHull0 Duplicate the drawing hull structure as a clipping hull ================= */ -static void Mod_MakeHull0( void ) +static void Mod_MakeHull0( model_t *mod ) { mnode_t *in, *child; mclipnode_t *out; hull_t *hull; int i, j; - hull = &loadmodel->hulls[0]; - hull->clipnodes = out = Mem_Malloc( loadmodel->mempool, loadmodel->numnodes * sizeof( *out )); - in = loadmodel->nodes; + hull = &mod->hulls[0]; + hull->clipnodes = out = Mem_Malloc( mod->mempool, mod->numnodes * sizeof( *out )); + in = mod->nodes; hull->firstclipnode = 0; - hull->lastclipnode = loadmodel->numnodes - 1; - hull->planes = loadmodel->planes; + hull->lastclipnode = mod->numnodes - 1; + hull->planes = mod->planes; - for( i = 0; i < loadmodel->numnodes; i++, out++, in++ ) + for( i = 0; i < mod->numnodes; i++, out++, in++ ) { - out->planenum = in->plane - loadmodel->planes; + out->planenum = in->plane - mod->planes; for( j = 0; j < 2; j++ ) { @@ -1413,7 +1411,7 @@ static void Mod_MakeHull0( void ) if( child->contents < 0 ) out->children[j] = child->contents; - else out->children[j] = child - loadmodel->nodes; + else out->children[j] = child - mod->nodes; } } } @@ -1477,7 +1475,7 @@ static void Mod_SetupHull( dbspmodel_t *bmod, model_t *mod, poolhandle_t mempool Mod_LoadColoredLighting ================= */ -static qboolean Mod_LoadColoredLighting( dbspmodel_t *bmod ) +static qboolean Mod_LoadColoredLighting( model_t *mod, dbspmodel_t *bmod ) { char modelname[64]; char path[64]; @@ -1485,11 +1483,11 @@ static qboolean Mod_LoadColoredLighting( dbspmodel_t *bmod ) fs_offset_t litdatasize; byte *in; - COM_FileBase( loadmodel->name, modelname, sizeof( modelname )); + COM_FileBase( mod->name, modelname, sizeof( modelname )); Q_snprintf( path, sizeof( path ), "maps/%s.lit", modelname ); // make sure what deluxemap is actual - if( !COM_CompareFileTime( path, loadmodel->name, &iCompare )) + if( !COM_CompareFileTime( path, mod->name, &iCompare )) return false; if( iCompare < 0 ) // this may happens if level-designer used -onlyents key for hlcsg @@ -1515,9 +1513,9 @@ static qboolean Mod_LoadColoredLighting( dbspmodel_t *bmod ) return false; } - loadmodel->lightdata = Mem_Malloc( loadmodel->mempool, litdatasize ); - memcpy( loadmodel->lightdata, in + 8, litdatasize ); - SetBits( loadmodel->flags, MODEL_COLORED_LIGHTING ); + mod->lightdata = Mem_Malloc( mod->mempool, litdatasize ); + memcpy( mod->lightdata, in + 8, litdatasize ); + SetBits( mod->flags, MODEL_COLORED_LIGHTING ); bmod->lightdatasize = litdatasize; Mem_Free( in ); @@ -1529,7 +1527,7 @@ static qboolean Mod_LoadColoredLighting( dbspmodel_t *bmod ) Mod_LoadDeluxemap ================= */ -static void Mod_LoadDeluxemap( dbspmodel_t *bmod ) +static void Mod_LoadDeluxemap( model_t *mod, dbspmodel_t *bmod ) { char modelname[64]; fs_offset_t deluxdatasize; @@ -1540,11 +1538,11 @@ static void Mod_LoadDeluxemap( dbspmodel_t *bmod ) if( !FBitSet( host.features, ENGINE_LOAD_DELUXEDATA )) return; - COM_FileBase( loadmodel->name, modelname, sizeof( modelname )); + COM_FileBase( mod->name, modelname, sizeof( modelname )); Q_snprintf( path, sizeof( path ), "maps/%s.dlit", modelname ); // make sure what deluxemap is actual - if( !COM_CompareFileTime( path, loadmodel->name, &iCompare )) + if( !COM_CompareFileTime( path, mod->name, &iCompare )) return; if( iCompare < 0 ) // this may happens if level-designer used -onlyents key for hlcsg @@ -1570,7 +1568,7 @@ static void Mod_LoadDeluxemap( dbspmodel_t *bmod ) return; } - bmod->deluxedata_out = Mem_Malloc( loadmodel->mempool, deluxdatasize ); + bmod->deluxedata_out = Mem_Malloc( mod->mempool, deluxdatasize ); memcpy( bmod->deluxedata_out, in + 8, deluxdatasize ); bmod->deluxdatasize = deluxdatasize; Mem_Free( in ); @@ -1584,22 +1582,21 @@ duplicate the basic information for embedded submodels ================= */ -static void Mod_SetupSubmodels( dbspmodel_t *bmod ) +static void Mod_SetupSubmodels( model_t *mod, dbspmodel_t *bmod ) { qboolean colored = false; poolhandle_t mempool; char *ents; - model_t *mod; dmodel_t *bm; + const char *name = mod->name; int i, j; - ents = loadmodel->entities; - mempool = loadmodel->mempool; - if( FBitSet( loadmodel->flags, MODEL_COLORED_LIGHTING )) + ents = mod->entities; + mempool = mod->mempool; + if( FBitSet( mod->flags, MODEL_COLORED_LIGHTING )) colored = true; - mod = loadmodel; - loadmodel->numframes = 2; // regular and alternate animation + mod->numframes = 2; // regular and alternate animation // set up the submodels for( i = 0; i < mod->numsubmodels; i++ ) @@ -1642,7 +1639,7 @@ static void Mod_SetupSubmodels( dbspmodel_t *bmod ) SetBits( mod->flags, MODEL_HAS_ORIGIN ); #ifdef HACKS_RELATED_HLMODS // c2a1 doesn't have origin brush it's just placed at center of the level - if( !Q_stricmp( loadmodel->name, "maps/c2a1.bsp" ) && ( i == 11 )) + if( !Q_stricmp( name, "maps/c2a1.bsp" ) && ( i == 11 )) SetBits( mod->flags, MODEL_HAS_ORIGIN ); #endif } @@ -1665,14 +1662,15 @@ static void Mod_SetupSubmodels( dbspmodel_t *bmod ) if( i < mod->numsubmodels - 1 ) { char name[8]; + model_t *submod; // duplicate the basic information Q_snprintf( name, sizeof( name ), "*%i", i + 1 ); - loadmodel = Mod_FindName( name, true ); - *loadmodel = *mod; - Q_strncpy( loadmodel->name, name, sizeof( loadmodel->name )); - loadmodel->mempool = 0; - mod = loadmodel; + submod = Mod_FindName( name, true ); + *submod = *mod; + Q_strncpy( submod->name, name, sizeof( submod->name )); + submod->mempool = 0; + mod = submod; } } @@ -1692,17 +1690,17 @@ static void Mod_SetupSubmodels( dbspmodel_t *bmod ) Mod_LoadSubmodels ================= */ -static void Mod_LoadSubmodels( dbspmodel_t *bmod ) +static void Mod_LoadSubmodels( model_t *mod, dbspmodel_t *bmod ) { dmodel_t *in, *out; int oldmaxfaces; int i, j; // allocate extradata for each dmodel_t - out = Mem_Malloc( loadmodel->mempool, bmod->numsubmodels * sizeof( *out )); + out = Mem_Malloc( mod->mempool, bmod->numsubmodels * sizeof( *out )); - loadmodel->numsubmodels = bmod->numsubmodels; - loadmodel->submodels = out; + mod->numsubmodels = bmod->numsubmodels; + mod->submodels = out; in = bmod->submodels; if( bmod->isworld ) @@ -1750,7 +1748,7 @@ static void Mod_LoadSubmodels( dbspmodel_t *bmod ) Mod_LoadEntities ================= */ -static void Mod_LoadEntities( dbspmodel_t *bmod ) +static void Mod_LoadEntities( model_t *mod, dbspmodel_t *bmod ) { byte *entpatch = NULL; char token[MAX_TOKEN]; @@ -1765,11 +1763,11 @@ static void Mod_LoadEntities( dbspmodel_t *bmod ) size_t ft1, ft2; // world is check for entfile too - Q_strncpy( entfilename, loadmodel->name, sizeof( entfilename )); + Q_strncpy( entfilename, mod->name, sizeof( entfilename )); COM_ReplaceExtension( entfilename, ".ent", sizeof( entfilename )); // make sure what entity patch is never than bsp - ft1 = FS_FileTime( loadmodel->name, false ); + ft1 = FS_FileTime( mod->name, false ); ft2 = FS_FileTime( entfilename, true ); if( ft2 != -1 ) @@ -1788,12 +1786,12 @@ static void Mod_LoadEntities( dbspmodel_t *bmod ) } // make sure what we really has terminator - loadmodel->entities = Mem_Calloc( loadmodel->mempool, bmod->entdatasize + 1 ); - memcpy( loadmodel->entities, bmod->entdata, bmod->entdatasize ); // moving to private model pool + mod->entities = Mem_Calloc( mod->mempool, bmod->entdatasize + 1 ); + memcpy( mod->entities, bmod->entdata, bmod->entdatasize ); // moving to private model pool if( entpatch ) Mem_Free( entpatch ); // release entpatch if present if( !bmod->isworld ) return; - pfile = (char *)loadmodel->entities; + pfile = (char *)mod->entities; world.generator[0] = '\0'; world.compiler[0] = '\0'; world.message[0] = '\0'; @@ -1865,15 +1863,15 @@ static void Mod_LoadEntities( dbspmodel_t *bmod ) Mod_LoadPlanes ================= */ -static void Mod_LoadPlanes( dbspmodel_t *bmod ) +static void Mod_LoadPlanes( model_t *mod, dbspmodel_t *bmod ) { dplane_t *in; mplane_t *out; int i, j; in = bmod->planes; - loadmodel->planes = out = Mem_Malloc( loadmodel->mempool, bmod->numplanes * sizeof( *out )); - loadmodel->numplanes = bmod->numplanes; + mod->planes = out = Mem_Malloc( mod->mempool, bmod->numplanes * sizeof( *out )); + mod->numplanes = bmod->numplanes; for( i = 0; i < bmod->numplanes; i++, in++, out++ ) { @@ -1899,15 +1897,15 @@ static void Mod_LoadPlanes( dbspmodel_t *bmod ) Mod_LoadVertexes ================= */ -static void Mod_LoadVertexes( dbspmodel_t *bmod ) +static void Mod_LoadVertexes( model_t *mod, dbspmodel_t *bmod ) { dvertex_t *in; mvertex_t *out; int i; in = bmod->vertexes; - out = loadmodel->vertexes = Mem_Malloc( loadmodel->mempool, bmod->numvertexes * sizeof( mvertex_t )); - loadmodel->numvertexes = bmod->numvertexes; + out = mod->vertexes = Mem_Malloc( mod->mempool, bmod->numvertexes * sizeof( mvertex_t )); + mod->numvertexes = bmod->numvertexes; if( bmod->isworld ) ClearBounds( world.mins, world.maxs ); @@ -1935,13 +1933,13 @@ static void Mod_LoadVertexes( dbspmodel_t *bmod ) Mod_LoadEdges ================= */ -static void Mod_LoadEdges( dbspmodel_t *bmod ) +static void Mod_LoadEdges( model_t *mod, dbspmodel_t *bmod ) { medge_t *out; int i; - loadmodel->edges = out = Mem_Malloc( loadmodel->mempool, bmod->numedges * sizeof( medge_t )); - loadmodel->numedges = bmod->numedges; + mod->edges = out = Mem_Malloc( mod->mempool, bmod->numedges * sizeof( medge_t )); + mod->numedges = bmod->numedges; if( bmod->version == QBSP2_VERSION ) { @@ -1970,11 +1968,11 @@ static void Mod_LoadEdges( dbspmodel_t *bmod ) Mod_LoadSurfEdges ================= */ -static void Mod_LoadSurfEdges( dbspmodel_t *bmod ) +static void Mod_LoadSurfEdges( model_t *mod, dbspmodel_t *bmod ) { - loadmodel->surfedges = Mem_Malloc( loadmodel->mempool, bmod->numsurfedges * sizeof( dsurfedge_t )); - memcpy( loadmodel->surfedges, bmod->surfedges, bmod->numsurfedges * sizeof( dsurfedge_t )); - loadmodel->numsurfedges = bmod->numsurfedges; + mod->surfedges = Mem_Malloc( mod->mempool, bmod->numsurfedges * sizeof( dsurfedge_t )); + memcpy( mod->surfedges, bmod->surfedges, bmod->numsurfedges * sizeof( dsurfedge_t )); + mod->numsurfedges = bmod->numsurfedges; } /* @@ -1982,13 +1980,13 @@ static void Mod_LoadSurfEdges( dbspmodel_t *bmod ) Mod_LoadMarkSurfaces ================= */ -static void Mod_LoadMarkSurfaces( dbspmodel_t *bmod ) +static void Mod_LoadMarkSurfaces( model_t *mod, dbspmodel_t *bmod ) { msurface_t **out; int i; - loadmodel->marksurfaces = out = Mem_Malloc( loadmodel->mempool, bmod->nummarkfaces * sizeof( *out )); - loadmodel->nummarksurfaces = bmod->nummarkfaces; + mod->marksurfaces = out = Mem_Malloc( mod->mempool, bmod->nummarkfaces * sizeof( *out )); + mod->nummarksurfaces = bmod->nummarkfaces; if( bmod->version == QBSP2_VERSION ) { @@ -1996,9 +1994,9 @@ static void Mod_LoadMarkSurfaces( dbspmodel_t *bmod ) for( i = 0; i < bmod->nummarkfaces; i++, in++ ) { - if( *in < 0 || *in >= loadmodel->numsurfaces ) - Host_Error( "Mod_LoadMarkFaces: bad surface number in '%s'\n", loadmodel->name ); - out[i] = loadmodel->surfaces + *in; + if( *in < 0 || *in >= mod->numsurfaces ) + Host_Error( "Mod_LoadMarkFaces: bad surface number in '%s'\n", mod->name ); + out[i] = mod->surfaces + *in; } } else @@ -2007,14 +2005,14 @@ static void Mod_LoadMarkSurfaces( dbspmodel_t *bmod ) for( i = 0; i < bmod->nummarkfaces; i++, in++ ) { - if( *in < 0 || *in >= loadmodel->numsurfaces ) - Host_Error( "Mod_LoadMarkFaces: bad surface number in '%s'\n", loadmodel->name ); - out[i] = loadmodel->surfaces + *in; + if( *in < 0 || *in >= mod->numsurfaces ) + Host_Error( "Mod_LoadMarkFaces: bad surface number in '%s'\n", mod->name ); + out[i] = mod->surfaces + *in; } } } -static void Mod_LoadTextureData( dbspmodel_t *bmod, int textureIndex ) +static void Mod_LoadTextureData( model_t *mod, dbspmodel_t *bmod, int textureIndex ) { #if !XASH_DEDICATED texture_t *texture = NULL; @@ -2028,13 +2026,13 @@ static void Mod_LoadTextureData( dbspmodel_t *bmod, int textureIndex ) if( Host_IsDedicated( )) return; - texture = loadmodel->textures[textureIndex]; + texture = mod->textures[textureIndex]; mipTex = Mod_GetMipTexForTexture( bmod, textureIndex ); if( FBitSet( host.features, ENGINE_IMPROVED_LINETRACE ) && mipTex->name[0] == '{' ) SetBits( txFlags, TF_KEEP_SOURCE ); // Paranoia2 texture alpha-tracing - usesCustomPalette = Mod_CalcMipTexUsesCustomPalette( bmod, textureIndex ); + usesCustomPalette = Mod_CalcMipTexUsesCustomPalette( mod, bmod, textureIndex ); // check for multi-layered sky texture (quake1 specific) if( bmod->isworld && Q_strncmp( mipTex->name, "sky", 3 ) == 0 && ( mipTex->width / mipTex->height ) == 2 ) @@ -2122,12 +2120,12 @@ static void Mod_LoadTextureData( dbspmodel_t *bmod, int textureIndex ) #endif // !XASH_DEDICATED } -static void Mod_LoadTexture( dbspmodel_t *bmod, int textureIndex ) +static void Mod_LoadTexture( model_t *mod, dbspmodel_t *bmod, int textureIndex ) { texture_t *texture; mip_t *mipTex; - if( textureIndex < 0 || textureIndex >= loadmodel->numtextures ) + if( textureIndex < 0 || textureIndex >= mod->numtextures ) return; mipTex = Mod_GetMipTexForTexture( bmod, textureIndex ); @@ -2136,15 +2134,15 @@ static void Mod_LoadTexture( dbspmodel_t *bmod, int textureIndex ) { // No data for this texture. // Create default texture (some mods require this). - Mod_CreateDefaultTexture( &loadmodel->textures[textureIndex] ); + Mod_CreateDefaultTexture( mod, &mod->textures[textureIndex] ); return; } if( mipTex->name[0] == '\0' ) Q_snprintf( mipTex->name, sizeof( mipTex->name ), "miptex_%i", textureIndex ); - texture = (texture_t *)Mem_Calloc( loadmodel->mempool, sizeof( *texture )); - loadmodel->textures[textureIndex] = texture; + texture = (texture_t *)Mem_Calloc( mod->mempool, sizeof( *texture )); + mod->textures[textureIndex] = texture; // Ensure texture name is lowercase. Q_strnlwr( mipTex->name, texture->name, sizeof( texture->name )); @@ -2152,18 +2150,18 @@ static void Mod_LoadTexture( dbspmodel_t *bmod, int textureIndex ) texture->width = mipTex->width; texture->height = mipTex->height; - Mod_LoadTextureData( bmod, textureIndex ); + Mod_LoadTextureData( mod, bmod, textureIndex ); } -static void Mod_LoadAllTextures( dbspmodel_t *bmod ) +static void Mod_LoadAllTextures( model_t *mod, dbspmodel_t *bmod ) { int i; - for( i = 0; i < loadmodel->numtextures; i++ ) - Mod_LoadTexture( bmod, i ); + for( i = 0; i < mod->numtextures; i++ ) + Mod_LoadTexture( mod, bmod, i ); } -static void Mod_SequenceAnimatedTexture( int baseTextureIndex ) +static void Mod_SequenceAnimatedTexture( model_t *mod, int baseTextureIndex ) { texture_t *anims[10]; texture_t *altanims[10]; @@ -2172,10 +2170,10 @@ static void Mod_SequenceAnimatedTexture( int baseTextureIndex ) int altmax = 0; int candidateIndex; - if( baseTextureIndex < 0 || baseTextureIndex >= loadmodel->numtextures ) + if( baseTextureIndex < 0 || baseTextureIndex >= mod->numtextures ) return; - baseTexture = loadmodel->textures[baseTextureIndex]; + baseTexture = mod->textures[baseTextureIndex]; if( !Mod_NameImpliesTextureIsAnimated( baseTexture )) return; @@ -2206,9 +2204,9 @@ static void Mod_SequenceAnimatedTexture( int baseTextureIndex ) } // Now search the rest of the textures to find all other frames. - for( candidateIndex = baseTextureIndex + 1; candidateIndex < loadmodel->numtextures; candidateIndex++ ) + for( candidateIndex = baseTextureIndex + 1; candidateIndex < mod->numtextures; candidateIndex++ ) { - texture_t *altTexture = loadmodel->textures[candidateIndex]; + texture_t *altTexture = mod->textures[candidateIndex]; if( !Mod_NameImpliesTextureIsAnimated( altTexture )) continue; @@ -2289,12 +2287,12 @@ static void Mod_SequenceAnimatedTexture( int baseTextureIndex ) } } -static void Mod_SequenceAllAnimatedTextures( void ) +static void Mod_SequenceAllAnimatedTextures( model_t *mod ) { int i; - for( i = 0; i < loadmodel->numtextures; i++ ) - Mod_SequenceAnimatedTexture( i ); + for( i = 0; i < mod->numtextures; i++ ) + Mod_SequenceAnimatedTexture( mod, i ); } /* @@ -2302,7 +2300,7 @@ static void Mod_SequenceAllAnimatedTextures( void ) Mod_LoadTextures ================= */ -static void Mod_LoadTextures( dbspmodel_t *bmod ) +static void Mod_LoadTextures( model_t *mod, dbspmodel_t *bmod ) { dmiptexlump_t *lump; @@ -2320,15 +2318,15 @@ static void Mod_LoadTextures( dbspmodel_t *bmod ) if( bmod->texdatasize < 1 || !lump || lump->nummiptex < 1 ) { // no textures - loadmodel->textures = NULL; + mod->textures = NULL; return; } - loadmodel->textures = (texture_t **)Mem_Calloc( loadmodel->mempool, lump->nummiptex * sizeof( texture_t * )); - loadmodel->numtextures = lump->nummiptex; + mod->textures = (texture_t **)Mem_Calloc( mod->mempool, lump->nummiptex * sizeof( texture_t * )); + mod->numtextures = lump->nummiptex; - Mod_LoadAllTextures( bmod ); - Mod_SequenceAllAnimatedTextures(); + Mod_LoadAllTextures( mod, bmod ); + Mod_SequenceAllAnimatedTextures( mod ); } /* @@ -2336,7 +2334,7 @@ static void Mod_LoadTextures( dbspmodel_t *bmod ) Mod_LoadTexInfo ================= */ -static void Mod_LoadTexInfo( dbspmodel_t *bmod ) +static void Mod_LoadTexInfo( model_t *mod, dbspmodel_t *bmod ) { mfaceinfo_t *fout, *faceinfo; int i, j, k, miptex; @@ -2345,7 +2343,7 @@ static void Mod_LoadTexInfo( dbspmodel_t *bmod ) dtexinfo_t *in; // trying to load faceinfo - faceinfo = fout = Mem_Calloc( loadmodel->mempool, bmod->numfaceinfo * sizeof( *fout )); + faceinfo = fout = Mem_Calloc( mod->mempool, bmod->numfaceinfo * sizeof( *fout )); fin = bmod->faceinfo; for( i = 0; i < bmod->numfaceinfo; i++, fin++, fout++ ) @@ -2356,8 +2354,8 @@ static void Mod_LoadTexInfo( dbspmodel_t *bmod ) fout->groupid = fin->groupid; } - loadmodel->texinfo = out = Mem_Calloc( loadmodel->mempool, bmod->numtexinfo * sizeof( *out )); - loadmodel->numtexinfo = bmod->numtexinfo; + mod->texinfo = out = Mem_Calloc( mod->mempool, bmod->numtexinfo * sizeof( *out )); + mod->numtexinfo = bmod->numtexinfo; in = bmod->texinfo; for( i = 0; i < bmod->numtexinfo; i++, in++, out++ ) @@ -2367,9 +2365,9 @@ static void Mod_LoadTexInfo( dbspmodel_t *bmod ) out->vecs[j][k] = in->vecs[j][k]; miptex = in->miptex; - if( miptex < 0 || miptex > loadmodel->numtextures ) + if( miptex < 0 || miptex > mod->numtextures ) miptex = 0; // this is possible? - out->texture = loadmodel->textures[miptex]; + out->texture = mod->textures[miptex]; out->flags = in->flags; // make sure what faceinfo is really exist @@ -2383,7 +2381,7 @@ static void Mod_LoadTexInfo( dbspmodel_t *bmod ) Mod_LoadSurfaces ================= */ -static void Mod_LoadSurfaces( dbspmodel_t *bmod ) +static void Mod_LoadSurfaces( model_t *mod, dbspmodel_t *bmod ) { int test_lightsize = -1; int next_lightofs = -1; @@ -2392,9 +2390,9 @@ static void Mod_LoadSurfaces( dbspmodel_t *bmod ) mextrasurf_t *info; msurface_t *out; - loadmodel->surfaces = out = Mem_Calloc( loadmodel->mempool, bmod->numsurfaces * sizeof( msurface_t )); - info = Mem_Calloc( loadmodel->mempool, bmod->numsurfaces * sizeof( mextrasurf_t )); - loadmodel->numsurfaces = bmod->numsurfaces; + mod->surfaces = out = Mem_Calloc( mod->mempool, bmod->numsurfaces * sizeof( msurface_t )); + info = Mem_Calloc( mod->mempool, bmod->numsurfaces * sizeof( mextrasurf_t )); + mod->numsurfaces = bmod->numsurfaces; // predict samplecount based on bspversion if( bmod->version == Q1BSP_VERSION || bmod->version == QBSP2_VERSION ) @@ -2413,13 +2411,13 @@ static void Mod_LoadSurfaces( dbspmodel_t *bmod ) { dface32_t *in = &bmod->surfaces32[i]; - if(( in->firstedge + in->numedges ) > loadmodel->numsurfedges ) + if(( in->firstedge + in->numedges ) > mod->numsurfedges ) continue; // corrupted level? out->firstedge = in->firstedge; out->numedges = in->numedges; if( in->side ) SetBits( out->flags, SURF_PLANEBACK ); - out->plane = loadmodel->planes + in->planenum; - out->texinfo = loadmodel->texinfo + in->texinfo; + out->plane = mod->planes + in->planenum; + out->texinfo = mod->texinfo + in->texinfo; for( j = 0; j < MAXLIGHTMAPS; j++ ) out->styles[j] = in->styles[j]; @@ -2429,7 +2427,7 @@ static void Mod_LoadSurfaces( dbspmodel_t *bmod ) { dface_t *in = &bmod->surfaces[i]; - if(( in->firstedge + in->numedges ) > loadmodel->numsurfedges ) + if(( in->firstedge + in->numedges ) > mod->numsurfedges ) { Con_Reportf( S_ERROR "bad surface %i from %zu\n", i, bmod->numsurfaces ); continue; @@ -2438,8 +2436,8 @@ static void Mod_LoadSurfaces( dbspmodel_t *bmod ) out->firstedge = in->firstedge; out->numedges = in->numedges; if( in->side ) SetBits( out->flags, SURF_PLANEBACK ); - out->plane = loadmodel->planes + in->planenum; - out->texinfo = loadmodel->texinfo + in->texinfo; + out->plane = mod->planes + in->planenum; + out->texinfo = mod->texinfo + in->texinfo; for( j = 0; j < MAXLIGHTMAPS; j++ ) out->styles[j] = in->styles[j]; @@ -2476,9 +2474,9 @@ static void Mod_LoadSurfaces( dbspmodel_t *bmod ) if( FBitSet( out->texinfo->flags, TEX_SPECIAL )) SetBits( out->flags, SURF_DRAWTILED ); - Mod_CalcSurfaceBounds( out ); - Mod_CalcSurfaceExtents( out ); - Mod_CreateFaceBevels( out ); + Mod_CalcSurfaceBounds( mod, out ); + Mod_CalcSurfaceExtents( mod, out ); + Mod_CreateFaceBevels( mod, out ); // grab the second sample to detect colored lighting if( test_lightsize > 0 && lightofs != -1 ) @@ -2507,7 +2505,7 @@ static void Mod_LoadSurfaces( dbspmodel_t *bmod ) #if !XASH_DEDICATED // TODO: Do we need subdivide on server? if( FBitSet( out->flags, SURF_DRAWTURB ) && !Host_IsDedicated() ) - ref.dllFuncs.GL_SubdivideSurface( loadmodel, out ); // cut up polygon for warps + ref.dllFuncs.GL_SubdivideSurface( mod, out ); // cut up polygon for warps #endif } @@ -2537,15 +2535,15 @@ static void Mod_LoadSurfaces( dbspmodel_t *bmod ) Mod_LoadNodes ================= */ -static void Mod_LoadNodes( dbspmodel_t *bmod ) +static void Mod_LoadNodes( model_t *mod, dbspmodel_t *bmod ) { mnode_t *out; int i, j, p; - loadmodel->nodes = out = (mnode_t *)Mem_Calloc( loadmodel->mempool, bmod->numnodes * sizeof( *out )); - loadmodel->numnodes = bmod->numnodes; + mod->nodes = out = (mnode_t *)Mem_Calloc( mod->mempool, bmod->numnodes * sizeof( *out )); + mod->numnodes = bmod->numnodes; - for( i = 0; i < loadmodel->numnodes; i++, out++ ) + for( i = 0; i < mod->numnodes; i++, out++ ) { if( bmod->version == QBSP2_VERSION ) { @@ -2558,15 +2556,15 @@ static void Mod_LoadNodes( dbspmodel_t *bmod ) } p = in->planenum; - out->plane = loadmodel->planes + p; + out->plane = mod->planes + p; out->firstsurface = in->firstface; out->numsurfaces = in->numfaces; for( j = 0; j < 2; j++ ) { p = in->children[j]; - if( p >= 0 ) out->children[j] = loadmodel->nodes + p; - else out->children[j] = (mnode_t *)(loadmodel->leafs + ( -1 - p )); + if( p >= 0 ) out->children[j] = mod->nodes + p; + else out->children[j] = (mnode_t *)(mod->leafs + ( -1 - p )); } } else @@ -2580,21 +2578,21 @@ static void Mod_LoadNodes( dbspmodel_t *bmod ) } p = in->planenum; - out->plane = loadmodel->planes + p; + out->plane = mod->planes + p; out->firstsurface = in->firstface; out->numsurfaces = in->numfaces; for( j = 0; j < 2; j++ ) { p = in->children[j]; - if( p >= 0 ) out->children[j] = loadmodel->nodes + p; - else out->children[j] = (mnode_t *)(loadmodel->leafs + ( -1 - p )); + if( p >= 0 ) out->children[j] = mod->nodes + p; + else out->children[j] = (mnode_t *)(mod->leafs + ( -1 - p )); } } } // sets nodes and leafs - Mod_SetParent( loadmodel->nodes, NULL ); + Mod_SetParent( mod->nodes, NULL ); } /* @@ -2602,18 +2600,18 @@ static void Mod_LoadNodes( dbspmodel_t *bmod ) Mod_LoadLeafs ================= */ -static void Mod_LoadLeafs( dbspmodel_t *bmod ) +static void Mod_LoadLeafs( model_t *mod, dbspmodel_t *bmod ) { mleaf_t *out; int i, j, p; int visclusters = 0; - loadmodel->leafs = out = (mleaf_t *)Mem_Calloc( loadmodel->mempool, bmod->numleafs * sizeof( *out )); - loadmodel->numleafs = bmod->numleafs; + mod->leafs = out = (mleaf_t *)Mem_Calloc( mod->mempool, bmod->numleafs * sizeof( *out )); + mod->numleafs = bmod->numleafs; if( bmod->isworld ) { - visclusters = loadmodel->submodels[0].visleafs; + visclusters = mod->submodels[0].visleafs; world.visbytes = (visclusters + 7) >> 3; world.fatbytes = (visclusters + 31) >> 3; refState.visbytes = world.visbytes; @@ -2637,7 +2635,7 @@ static void Mod_LoadLeafs( dbspmodel_t *bmod ) for( j = 0; j < 4; j++ ) out->ambient_sound_level[j] = in->ambient_level[j]; - out->firstmarksurface = loadmodel->marksurfaces + in->firstmarksurface; + out->firstmarksurface = mod->marksurfaces + in->firstmarksurface; out->nummarksurfaces = in->nummarksurfaces; } else @@ -2656,7 +2654,7 @@ static void Mod_LoadLeafs( dbspmodel_t *bmod ) for( j = 0; j < 4; j++ ) out->ambient_sound_level[j] = in->ambient_level[j]; - out->firstmarksurface = loadmodel->marksurfaces + in->firstmarksurface; + out->firstmarksurface = mod->marksurfaces + in->firstmarksurface; out->nummarksurfaces = in->nummarksurfaces; } @@ -2668,17 +2666,17 @@ static void Mod_LoadLeafs( dbspmodel_t *bmod ) out->cluster = -1; // ignore visofs errors on leaf 0 (solid) - if( p >= 0 && out->cluster >= 0 && loadmodel->visdata ) + if( p >= 0 && out->cluster >= 0 && mod->visdata ) { if( p < bmod->visdatasize ) - out->compressed_vis = loadmodel->visdata + p; + out->compressed_vis = mod->visdata + p; else Con_Reportf( S_WARN "Mod_LoadLeafs: invalid visofs for leaf #%i\n", i ); } } else out->cluster = -1; // no visclusters on bmodels if( p == -1 ) out->compressed_vis = NULL; - else out->compressed_vis = loadmodel->visdata + p; + else out->compressed_vis = mod->visdata + p; // gl underwater warp if( out->contents != CONTENTS_EMPTY ) @@ -2691,11 +2689,11 @@ static void Mod_LoadLeafs( dbspmodel_t *bmod ) } } - if( bmod->isworld && loadmodel->leafs[0].contents != CONTENTS_SOLID ) - Host_Error( "Mod_LoadLeafs: Map %s has leaf 0 is not CONTENTS_SOLID\n", loadmodel->name ); + if( bmod->isworld && mod->leafs[0].contents != CONTENTS_SOLID ) + Host_Error( "Mod_LoadLeafs: Map %s has leaf 0 is not CONTENTS_SOLID\n", mod->name ); // do some final things for world - if( bmod->isworld && Mod_CheckWaterAlphaSupport( bmod )) + if( bmod->isworld && Mod_CheckWaterAlphaSupport( mod, bmod )) SetBits( world.flags, FWORLD_WATERALPHA ); } @@ -2704,12 +2702,12 @@ static void Mod_LoadLeafs( dbspmodel_t *bmod ) Mod_LoadClipnodes ================= */ -static void Mod_LoadClipnodes( dbspmodel_t *bmod ) +static void Mod_LoadClipnodes( model_t *mod, dbspmodel_t *bmod ) { dclipnode32_t *out; int i; - bmod->clipnodes_out = out = (dclipnode32_t *)Mem_Malloc( loadmodel->mempool, bmod->numclipnodes * sizeof( *out )); + bmod->clipnodes_out = out = (dclipnode32_t *)Mem_Malloc( mod->mempool, bmod->numclipnodes * sizeof( *out )); if(( bmod->version == QBSP2_VERSION ) || ( bmod->version == HLBSP_VERSION && bmod->isbsp30ext && bmod->numclipnodes >= MAX_MAP_CLIPNODES_HLBSP )) { @@ -2741,8 +2739,8 @@ static void Mod_LoadClipnodes( dbspmodel_t *bmod ) } } - // FIXME: fill loadmodel->clipnodes? - loadmodel->numclipnodes = bmod->numclipnodes; + // FIXME: fill mod->clipnodes? + mod->numclipnodes = bmod->numclipnodes; } /* @@ -2750,10 +2748,10 @@ static void Mod_LoadClipnodes( dbspmodel_t *bmod ) Mod_LoadVisibility ================= */ -static void Mod_LoadVisibility( dbspmodel_t *bmod ) +static void Mod_LoadVisibility( model_t *mod, dbspmodel_t *bmod ) { - loadmodel->visdata = Mem_Malloc( loadmodel->mempool, bmod->visdatasize ); - memcpy( loadmodel->visdata, bmod->visdata, bmod->visdatasize ); + mod->visdata = Mem_Malloc( mod->mempool, bmod->visdatasize ); + memcpy( mod->visdata, bmod->visdata, bmod->visdatasize ); } /* @@ -2761,17 +2759,17 @@ static void Mod_LoadVisibility( dbspmodel_t *bmod ) Mod_LoadLightVecs ================= */ -static void Mod_LoadLightVecs( dbspmodel_t *bmod ) +static void Mod_LoadLightVecs( model_t *mod, dbspmodel_t *bmod ) { if( bmod->deluxdatasize != bmod->lightdatasize ) { if( bmod->deluxdatasize > 0 ) Con_Printf( S_ERROR "Mod_LoadLightVecs: has mismatched size (%zu should be %zu)\n", bmod->deluxdatasize, bmod->lightdatasize ); - else Mod_LoadDeluxemap( bmod ); // old method + else Mod_LoadDeluxemap( mod, bmod ); // old method return; } - bmod->deluxedata_out = Mem_Malloc( loadmodel->mempool, bmod->deluxdatasize ); + bmod->deluxedata_out = Mem_Malloc( mod->mempool, bmod->deluxdatasize ); memcpy( bmod->deluxedata_out, bmod->deluxdata, bmod->deluxdatasize ); } @@ -2780,7 +2778,7 @@ static void Mod_LoadLightVecs( dbspmodel_t *bmod ) Mod_LoadShadowmap ================= */ -static void Mod_LoadShadowmap( dbspmodel_t *bmod ) +static void Mod_LoadShadowmap( model_t *mod, dbspmodel_t *bmod ) { if( bmod->shadowdatasize != ( bmod->lightdatasize / 3 )) { @@ -2789,7 +2787,7 @@ static void Mod_LoadShadowmap( dbspmodel_t *bmod ) return; } - bmod->shadowdata_out = Mem_Malloc( loadmodel->mempool, bmod->shadowdatasize ); + bmod->shadowdata_out = Mem_Malloc( mod->mempool, bmod->shadowdatasize ); memcpy( bmod->shadowdata_out, bmod->shadowdata, bmod->shadowdatasize ); } @@ -2798,7 +2796,7 @@ static void Mod_LoadShadowmap( dbspmodel_t *bmod ) Mod_LoadLighting ================= */ -static void Mod_LoadLighting( dbspmodel_t *bmod ) +static void Mod_LoadLighting( model_t *mod, dbspmodel_t *bmod ) { int i, lightofs; msurface_t *surf; @@ -2811,9 +2809,9 @@ static void Mod_LoadLighting( dbspmodel_t *bmod ) switch( bmod->lightmap_samples ) { case 1: - if( !Mod_LoadColoredLighting( bmod )) + if( !Mod_LoadColoredLighting( mod, bmod )) { - loadmodel->lightdata = out = (color24 *)Mem_Malloc( loadmodel->mempool, bmod->lightdatasize * sizeof( color24 )); + mod->lightdata = out = (color24 *)Mem_Malloc( mod->mempool, bmod->lightdatasize * sizeof( color24 )); in = bmod->lightdata; // expand the white lighting data @@ -2822,9 +2820,9 @@ static void Mod_LoadLighting( dbspmodel_t *bmod ) } break; case 3: // load colored lighting - loadmodel->lightdata = Mem_Malloc( loadmodel->mempool, bmod->lightdatasize ); - memcpy( loadmodel->lightdata, bmod->lightdata, bmod->lightdatasize ); - SetBits( loadmodel->flags, MODEL_COLORED_LIGHTING ); + mod->lightdata = Mem_Malloc( mod->mempool, bmod->lightdatasize ); + memcpy( mod->lightdata, bmod->lightdata, bmod->lightdatasize ); + SetBits( mod->flags, MODEL_COLORED_LIGHTING ); break; default: Host_Error( "Mod_LoadLighting: bad lightmap sample count %i\n", bmod->lightmap_samples ); @@ -2834,29 +2832,29 @@ static void Mod_LoadLighting( dbspmodel_t *bmod ) // not supposed to be load ? if( FBitSet( host.features, ENGINE_LOAD_DELUXEDATA )) { - Mod_LoadLightVecs( bmod ); - Mod_LoadShadowmap( bmod ); + Mod_LoadLightVecs( mod, bmod ); + Mod_LoadShadowmap( mod, bmod ); if( bmod->isworld && bmod->deluxdatasize ) SetBits( world.flags, FWORLD_HAS_DELUXEMAP ); } - surf = loadmodel->surfaces; + surf = mod->surfaces; // setup lightdata pointers - for( i = 0; i < loadmodel->numsurfaces; i++, surf++ ) + for( i = 0; i < mod->numsurfaces; i++, surf++ ) { if( bmod->version == QBSP2_VERSION ) lightofs = bmod->surfaces32[i].lightofs; else lightofs = bmod->surfaces[i].lightofs; - if( loadmodel->lightdata && lightofs != -1 ) + if( mod->lightdata && lightofs != -1 ) { int offset = (lightofs / bmod->lightmap_samples); // NOTE: we divide offset by three because lighting and deluxemap keep their pointers // into three-bytes structs and shadowmap just monochrome - surf->samples = loadmodel->lightdata + offset; + surf->samples = mod->lightdata + offset; // if deluxemap is present setup it too if( bmod->deluxedata_out ) @@ -2888,12 +2886,11 @@ Mod_LoadBmodelLumps loading and processing bmodel ================= */ -qboolean Mod_LoadBmodelLumps( const byte *mod_base, qboolean isworld ) +static qboolean Mod_LoadBmodelLumps( model_t *mod, const byte *mod_base, qboolean isworld ) { const dheader_t *header = (const dheader_t *)mod_base; const dextrahdr_t *extrahdr = (const dextrahdr_t *)(mod_base + sizeof( dheader_t )); dbspmodel_t *bmod = &srcmodel; - model_t *mod = loadmodel; char wadvalue[2048]; size_t len = 0; int i, ret, flags = 0; @@ -2902,13 +2899,13 @@ qboolean Mod_LoadBmodelLumps( const byte *mod_base, qboolean isworld ) memset( bmod, 0, sizeof( dbspmodel_t )); memset( &loadstat, 0, sizeof( loadstat_t )); - Q_strncpy( loadstat.name, loadmodel->name, sizeof( loadstat.name )); + Q_strncpy( loadstat.name, mod->name, sizeof( loadstat.name )); wadvalue[0] = '\0'; #ifndef SUPPORT_BSP2_FORMAT if( header->version == QBSP2_VERSION ) { - Con_Printf( S_ERROR DEFAULT_BSP_BUILD_ERROR, loadmodel->name ); + Con_Printf( S_ERROR DEFAULT_BSP_BUILD_ERROR, mod->name ); return false; } #endif @@ -2936,7 +2933,7 @@ qboolean Mod_LoadBmodelLumps( const byte *mod_base, qboolean isworld ) srclumps[1].lumpnumber = LUMP_PLANES; break; default: - Con_Printf( S_ERROR "%s has wrong version number (%i should be %i)\n", loadmodel->name, header->version, HLBSP_VERSION ); + Con_Printf( S_ERROR "%s has wrong version number (%i should be %i)\n", mod->name, header->version, HLBSP_VERSION ); loadstat.numerrors++; return false; } @@ -2967,29 +2964,28 @@ qboolean Mod_LoadBmodelLumps( const byte *mod_base, qboolean isworld ) Con_DPrintf( "Mod_Load%s: %i warning(s)\n", isworld ? "World" : "Brush", loadstat.numwarnings ); // load into heap - Mod_LoadEntities( bmod ); - Mod_LoadPlanes( bmod ); - Mod_LoadSubmodels( bmod ); - Mod_LoadVertexes( bmod ); - Mod_LoadEdges( bmod ); - Mod_LoadSurfEdges( bmod ); - Mod_LoadTextures( bmod ); - Mod_LoadVisibility( bmod ); - Mod_LoadTexInfo( bmod ); - Mod_LoadSurfaces( bmod ); - Mod_LoadLighting( bmod ); - Mod_LoadMarkSurfaces( bmod ); - Mod_LoadLeafs( bmod ); - Mod_LoadNodes( bmod ); - Mod_LoadClipnodes( bmod ); + Mod_LoadEntities( mod, bmod ); + Mod_LoadPlanes( mod, bmod ); + Mod_LoadSubmodels( mod, bmod ); + Mod_LoadVertexes( mod, bmod ); + Mod_LoadEdges( mod, bmod ); + Mod_LoadSurfEdges( mod, bmod ); + Mod_LoadTextures( mod, bmod ); + Mod_LoadVisibility( mod, bmod ); + Mod_LoadTexInfo( mod, bmod ); + Mod_LoadSurfaces( mod, bmod ); + Mod_LoadLighting( mod, bmod ); + Mod_LoadMarkSurfaces( mod, bmod ); + Mod_LoadLeafs( mod, bmod ); + Mod_LoadNodes( mod, bmod ); + Mod_LoadClipnodes( mod, bmod ); // preform some post-initalization - Mod_MakeHull0 (); - Mod_SetupSubmodels( bmod ); + Mod_MakeHull0( mod ); + Mod_SetupSubmodels( mod, bmod ); if( isworld ) { - loadmodel = mod; // restore pointer to world #if !XASH_DEDICATED Mod_InitDebugHulls( mod ); // FIXME: build hulls for separate bmodels (shells, medkits etc) world.deluxedata = bmod->deluxedata_out; // deluxemap data pointer @@ -3153,17 +3149,15 @@ void Mod_LoadBrushModel( model_t *mod, const void *buffer, qboolean *loaded ) { char poolname[MAX_VA_STRING]; - loadmodel = mod; - - Q_snprintf( poolname, sizeof( poolname ), "^2%s^7", loadmodel->name ); + Q_snprintf( poolname, sizeof( poolname ), "^2%s^7", mod->name ); if( loaded ) *loaded = false; - loadmodel->mempool = Mem_AllocPool( poolname ); - loadmodel->type = mod_brush; + mod->mempool = Mem_AllocPool( poolname ); + mod->type = mod_brush; // loading all the lumps into heap - if( !Mod_LoadBmodelLumps( buffer, world.loading )) + if( !Mod_LoadBmodelLumps( mod, buffer, world.loading )) return; // there were errors if( world.loading ) worldmodel = mod; From 6c40104c667b6097dc6ae9189add51814e21ff82 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 28 Oct 2023 19:31:17 +0300 Subject: [PATCH 57/79] public: better fix for ExtractFilePath --- public/crtlib.c | 13 +++---------- public/tests/test_efp.c | 40 ++++++++++++++++++++++++++++++++++++++++ public/wscript | 1 + 3 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 public/tests/test_efp.c diff --git a/public/crtlib.c b/public/crtlib.c index 6004b59b..bf6ab578 100644 --- a/public/crtlib.c +++ b/public/crtlib.c @@ -642,20 +642,13 @@ COM_ExtractFilePath */ void COM_ExtractFilePath( const char *path, char *dest ) { - size_t len = Q_strlen( path ); - const char *src = path + len - 1; - - if( len == 0 ) - { - dest[0] = 0; - return; - } + const char *src = path + Q_strlen( path ) - 1; // back up until a \ or the start - while( src != path && !(*(src - 1) == '\\' || *(src - 1) == '/' )) + while( src > path && !(*(src - 1) == '\\' || *(src - 1) == '/' )) src--; - if( src != path ) + if( src > path ) { memcpy( dest, path, src - path ); dest[src - path - 1] = 0; // cutoff backslash diff --git a/public/tests/test_efp.c b/public/tests/test_efp.c new file mode 100644 index 00000000..c7aafddf --- /dev/null +++ b/public/tests/test_efp.c @@ -0,0 +1,40 @@ +#include +#include "crtlib.h" +#include + +int Test_ExtractFilePath( void ) +{ + char dst[64]; + const char *strings[] = + { + "dir/file", "dir", + "bark\\meow", "bark", + "nopath", "", + "knee/deep/in/paths", "knee/deep/in", + // yes, it removes the behavior/ even if it might be technically a directory + "keep/the/original/func/behavior/", "keep/the/original/func", + "backslashes\\are\\annoying\\af", "backslashes\\are\\annoying", + "", "" + }; + size_t i; + + for( i = 0; i < sizeof( strings ) / sizeof( strings[0] ); i += 2 ) + { + COM_ExtractFilePath( strings[i], dst ); + if( Q_strcmp( dst, strings[i+1] )) + { + printf( "%s %s %s\n", strings[i], strings[i+1], dst ); + return (i >> 1) + 1; + } + } + + return 0; +} + +int main( void ) +{ + if( Test_ExtractFilePath( )) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/public/wscript b/public/wscript index c1002e78..400a19d0 100644 --- a/public/wscript +++ b/public/wscript @@ -28,6 +28,7 @@ def build(bld): 'strings': 'tests/test_strings.c', 'build': 'tests/test_build.c', 'filebase': 'tests/test_filebase.c', + 'efp': 'tests/test_efp.c', } for i in tests: From f7c536b81c81886caa8c02d83a9e804b9d1b89d7 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 29 Oct 2023 02:44:46 +0300 Subject: [PATCH 58/79] engine: server: allow loading maps from subdirectories as this is used by some Half-Life mods --- engine/server/sv_init.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/engine/server/sv_init.c b/engine/server/sv_init.c index d4eebd62..781d5793 100644 --- a/engine/server/sv_init.c +++ b/engine/server/sv_init.c @@ -1041,8 +1041,9 @@ qboolean SV_SpawnServer( const char *mapname, const char *startspot, qboolean ba // force normal player collisions for single player if( svs.maxclients == 1 ) Cvar_SetValue( "sv_clienttrace", 1 ); - // make sure what server name doesn't contain path and extension - COM_FileBase( mapname, sv.name, sizeof( sv.name )); + // allow loading maps from subdirectories, strip extension anyway + Q_strncpy( sv.name, mapname, sizeof( sv.name )); + COM_StripExtension( sv.name ); // precache and static commands can be issued during map initialization Host_SetServerState( ss_loading ); From ea55e78855eca223613c5cb85362d6bb627a058c Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 29 Oct 2023 23:38:43 +0300 Subject: [PATCH 59/79] ref: _inline -> static --- ref/gl/gl_rsurf.c | 2 +- ref/gl/gl_studio.c | 20 +++++++++----------- ref/soft/r_studio.c | 6 +++--- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c index 375b8fb5..aeedb386 100644 --- a/ref/gl/gl_rsurf.c +++ b/ref/gl/gl_rsurf.c @@ -875,7 +875,7 @@ void DrawGLPolyChain( glpoly_t *p, float soffset, float toffset ) } } -_inline qboolean R_HasLightmap( void ) +static qboolean R_HasLightmap( void ) { if( r_fullbright->value || !WORLDMODEL->lightdata ) return false; diff --git a/ref/gl/gl_studio.c b/ref/gl/gl_studio.c index ebeece6f..83796e92 100644 --- a/ref/gl/gl_studio.c +++ b/ref/gl/gl_studio.c @@ -1726,7 +1726,7 @@ static void R_LightLambert( vec4_t light[MAX_LOCALLIGHTS], const vec3_t normal, out[2] = Q_min( (int)( finalLight[2] ), 255 ); } -static void R_StudioSetColorArray(short *ptricmds, vec3_t *pstudionorms, byte *color ) +static void R_StudioSetColorArray( short *ptricmds, vec3_t *pstudionorms, byte *color ) { float *lv = (float *)g_studio.lightvalues[ptricmds[1]]; @@ -1896,9 +1896,8 @@ R_StudioDrawNormalMesh generic path =============== */ -_inline void R_StudioDrawNormalMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t ) +static void R_StudioDrawNormalMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t ) { - float *lv; int i; while(( i = *( ptricmds++ ))) @@ -1929,9 +1928,8 @@ R_StudioDrawNormalMesh generic path =============== */ -_inline void R_StudioDrawFloatMesh( short *ptricmds, vec3_t *pstudionorms ) +static void R_StudioDrawFloatMesh( short *ptricmds, vec3_t *pstudionorms ) { - float *lv; int i; while(( i = *( ptricmds++ ))) @@ -1961,7 +1959,7 @@ R_StudioDrawNormalMesh generic path =============== */ -_inline void R_StudioDrawChromeMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t, float scale ) +static void R_StudioDrawChromeMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t, float scale ) { float *lv, *av; int i, idx; @@ -2006,7 +2004,7 @@ _inline void R_StudioDrawChromeMesh( short *ptricmds, vec3_t *pstudionorms, floa } -_inline int R_StudioBuildIndices( qboolean tri_strip, int vertexState ) +static int R_StudioBuildIndices( qboolean tri_strip, int vertexState ) { // build in indices if( vertexState++ < 3 ) @@ -2049,7 +2047,7 @@ R_StudioDrawNormalMesh generic path =============== */ -_inline void R_StudioBuildArrayNormalMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t ) +static void R_StudioBuildArrayNormalMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t ) { float *lv; int i; @@ -2092,7 +2090,7 @@ R_StudioDrawNormalMesh generic path =============== */ -_inline void R_StudioBuildArrayFloatMesh( short *ptricmds, vec3_t *pstudionorms ) +static void R_StudioBuildArrayFloatMesh( short *ptricmds, vec3_t *pstudionorms ) { float *lv; int i; @@ -2135,7 +2133,7 @@ R_StudioDrawNormalMesh generic path =============== */ -_inline void R_StudioBuildArrayChromeMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t, float scale ) +static void R_StudioBuildArrayChromeMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t, float scale ) { float *lv, *av; int i, idx; @@ -2192,7 +2190,7 @@ _inline void R_StudioBuildArrayChromeMesh( short *ptricmds, vec3_t *pstudionorms } } -_inline void R_StudioDrawArrays( uint startverts, uint startelems ) +static void R_StudioDrawArrays( uint startverts, uint startelems ) { pglEnableClientState( GL_VERTEX_ARRAY ); pglVertexPointer( 3, GL_FLOAT, 12, g_studio.arrayverts ); diff --git a/ref/soft/r_studio.c b/ref/soft/r_studio.c index e7429599..1da13e1f 100644 --- a/ref/soft/r_studio.c +++ b/ref/soft/r_studio.c @@ -1891,7 +1891,7 @@ R_StudioDrawNormalMesh generic path =============== */ -_inline void R_StudioDrawNormalMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t ) +static void R_StudioDrawNormalMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t ) { float *lv; int i; @@ -1924,7 +1924,7 @@ R_StudioDrawNormalMesh generic path =============== */ -_inline void R_StudioDrawFloatMesh( short *ptricmds, vec3_t *pstudionorms ) +static void R_StudioDrawFloatMesh( short *ptricmds, vec3_t *pstudionorms ) { float *lv; int i; @@ -1956,7 +1956,7 @@ R_StudioDrawNormalMesh generic path =============== */ -_inline void R_StudioDrawChromeMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t, float scale ) +static void R_StudioDrawChromeMesh( short *ptricmds, vec3_t *pstudionorms, float s, float t, float scale ) { float *lv, *av; int i, idx; From f2c080e736eed034edb316b483dbb69c1b31c518 Mon Sep 17 00:00:00 2001 From: mittorn Date: Mon, 30 Oct 2023 22:24:13 +0300 Subject: [PATCH 60/79] gl2shim: fix broken matrix update when fog attribute enabled (32 bit shift overflow) --- common/xash3d_types.h | 1 + ref/gl/gl2_shim/gl2_shim.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/common/xash3d_types.h b/common/xash3d_types.h index 33801433..4c2c05d5 100644 --- a/common/xash3d_types.h +++ b/common/xash3d_types.h @@ -57,6 +57,7 @@ typedef uint64_t longtime_t; #define MAX_USERMSG_LENGTH 2048 // don't modify it's relies on a client-side definitions #define BIT( n ) ( 1U << ( n )) +#define BIT64( n ) ( 1ULL << ( n )) #define GAMMA ( 2.2f ) // Valve Software gamma #define INVGAMMA ( 1.0f / 2.2f ) // back to 1.0 #define TEXGAMMA ( 0.9f ) // compensate dim textures diff --git a/ref/gl/gl2_shim/gl2_shim.c b/ref/gl/gl2_shim/gl2_shim.c index 904f0d8e..63b2c9e1 100644 --- a/ref/gl/gl2_shim/gl2_shim.c +++ b/ref/gl/gl2_shim/gl2_shim.c @@ -1309,9 +1309,9 @@ static void GL2_Mul4x4( const GLfloat *in0, const GLfloat *in1, GLfloat *out ) static void GL2_UpdateMVP( gl2wrap_prog_t *prog ) { // use bitset to determine if need update matrix for this prog - if( FBitSet( gl2wrap_matrix.update, BIT( prog->flags ))) + if( FBitSet( gl2wrap_matrix.update, BIT64( prog->flags ))) { - ClearBits( gl2wrap_matrix.update, BIT( prog->flags )); + ClearBits( gl2wrap_matrix.update, BIT64( prog->flags )); GL2_Mul4x4( gl2wrap_matrix.mv, gl2wrap_matrix.pr, gl2wrap_matrix.mvp ); pglUniformMatrix4fvARB( prog->uMVP, 1, false, (void *)gl2wrap_matrix.mvp ); } From a62a9429c9a56e01b609516c1eb7108bba994e4e Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 30 Oct 2023 23:49:47 +0300 Subject: [PATCH 61/79] engine: launcher: remove Windows code from single binary launcher, as Windows completely supports running from external launcher and don't need dedicated builds --- engine/common/launcher.c | 50 +++++----------------------------------- 1 file changed, 6 insertions(+), 44 deletions(-) diff --git a/engine/common/launcher.c b/engine/common/launcher.c index 4c2f9d66..c24b2b2f 100644 --- a/engine/common/launcher.c +++ b/engine/common/launcher.c @@ -23,15 +23,6 @@ GNU General Public License for more details. #if XASH_EMSCRIPTEN #include -#elif XASH_WIN32 -extern "C" -{ -// Enable NVIDIA High Performance Graphics while using Integrated Graphics. -__declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; - -// Enable AMD High Performance Graphics while using Integrated Graphics. -__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; -} #endif #define E_GAME "XASH3D_GAME" // default env dir to start from @@ -39,6 +30,10 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; #define XASH_GAMEDIR "valve" #endif +#if XASH_WIN32 +#error "Single-binary or dedicated builds aren't supported for Windows!" +#endif + static char szGameDir[128]; // safe place to keep gamedir static int szArgc; static char **szArgv; @@ -47,7 +42,7 @@ static void Sys_ChangeGame( const char *progname ) { // a1ba: may never be called within engine // if platform supports execv() function - Q_strncpy( szGameDir, progname, sizeof( szGameDir ) - 1 ); + Q_strncpy( szGameDir, progname, sizeof( szGameDir )); Host_Shutdown( ); exit( Host_Main( szArgc, szArgv, szGameDir, 1, &Sys_ChangeGame ) ); } @@ -88,7 +83,6 @@ _inline int Sys_Start( void ) return ret; } -#if !XASH_WIN32 int main( int argc, char **argv ) { #if XASH_PSVITA @@ -100,36 +94,4 @@ int main( int argc, char **argv ) #endif // XASH_PSVITA return Sys_Start(); } -#else -int __stdcall WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdLine, int nShow) -{ - LPWSTR* lpArgv; - int ret, i; - - lpArgv = CommandLineToArgvW( GetCommandLineW(), &szArgc ); - szArgv = ( char** )malloc( (szArgc + 1) * sizeof( char* )); - - for( i = 0; i < szArgc; ++i ) - { - size_t size = wcslen(lpArgv[i]) + 1; - - // just in case, allocate some more memory - szArgv[i] = ( char * )malloc( size * sizeof( wchar_t )); - wcstombs( szArgv[i], lpArgv[i], size ); - } - szArgv[szArgc] = 0; - - LocalFree( lpArgv ); - - ret = Sys_Start(); - - for( ; i < szArgc; ++i ) - free( szArgv[i] ); - free( szArgv ); - - return ret; -} -#endif // XASH_WIN32 - - -#endif +#endif // SINGLE_BINARY From bf6829189e1411cc18b9bd2afb1e4f3204574588 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 31 Oct 2023 04:28:52 +0300 Subject: [PATCH 62/79] wscript: move XASH_BUILD_COMMIT definition to libpublic, as this is the only place where it's used, for faster builds --- public/wscript | 3 +-- wscript | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/public/wscript b/public/wscript index 400a19d0..4f7b24f4 100644 --- a/public/wscript +++ b/public/wscript @@ -12,8 +12,7 @@ def options(opt): return def configure(conf): - # stub - return + conf.define('XASH_BUILD_COMMIT', conf.env.GIT_VERSION if conf.env.GIT_VERSION else 'notset') def build(bld): bld(name = 'sdk_includes', export_includes = '. ../common ../pm_shared ../engine') diff --git a/wscript b/wscript index 3ea1e0a3..90335a74 100644 --- a/wscript +++ b/wscript @@ -476,7 +476,6 @@ int main(void) { return !opus_custom_encoder_init(0, 0, 0); }''' if conf.check_cc(msg='Checking if opus supports custom modes', defines='CUSTOM_MODES=1', use='opus', fragment=frag, mandatory=False): conf.env.HAVE_SYSTEM_OPUS = True - conf.define('XASH_BUILD_COMMIT', conf.env.GIT_VERSION if conf.env.GIT_VERSION else 'notset') conf.define('XASH_LOW_MEMORY', conf.options.LOW_MEMORY) for i in SUBDIRS: From 29c9393da3584353479514ded92488696d58a7a8 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 31 Oct 2023 04:29:57 +0300 Subject: [PATCH 63/79] wscript: enable faster builds with gccdeps/msvcdeps --- wscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wscript b/wscript index 90335a74..38b0d3da 100644 --- a/wscript +++ b/wscript @@ -167,7 +167,7 @@ def configure(conf): conf.env.MSVC_TARGETS = ['x86' if not conf.options.ALLOW64 else 'x64'] # Load compilers early - conf.load('xshlib xcompile compiler_c compiler_cxx cmake') + conf.load('xshlib xcompile compiler_c compiler_cxx cmake gccdeps msvcdeps') if conf.options.NSWITCH: conf.load('nswitch') From 5ea074a1fd9f5a412b278b324ea394420464435b Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 31 Oct 2023 21:01:42 +0300 Subject: [PATCH 64/79] engine: fix build issues pointed by @Velaron --- engine/client/cl_gameui.c | 2 +- engine/common/host.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/client/cl_gameui.c b/engine/client/cl_gameui.c index ede3c36d..fefdd7a7 100644 --- a/engine/client/cl_gameui.c +++ b/engine/client/cl_gameui.c @@ -982,7 +982,7 @@ pfnCheckGameDll */ int GAME_EXPORT pfnCheckGameDll( void ) { -#if XASH_INTERNAL_GAMELIBS +#ifdef XASH_INTERNAL_GAMELIBS return true; #else string dllpath; diff --git a/engine/common/host.c b/engine/common/host.c index 654a564f..f734e52b 100644 --- a/engine/common/host.c +++ b/engine/common/host.c @@ -1020,7 +1020,7 @@ void Host_InitCommon( int argc, char **argv, const char *progname, qboolean bCha #if TARGET_OS_IOS Q_strncpy( host.rootdir, IOS_GetDocsDir(), sizeof( host.rootdir )); #elif XASH_ANDROID && XASH_SDL - Q_strncpy( host.rootdir, SDL_AndroidGetExternalStoragePath, sizeof( host.rootdir )); + Q_strncpy( host.rootdir, SDL_AndroidGetExternalStoragePath(), sizeof( host.rootdir )); #elif XASH_PSVITA if ( !PSVita_GetBasePath( host.rootdir, sizeof( host.rootdir ))) { From 597429cf41b910296e9a9d742ea9592f66f08a2b Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 31 Oct 2023 21:25:11 +0300 Subject: [PATCH 65/79] engine, filesystem: unify GetNativeObject between all the APIs. Allow getting filesystem APIs through GetNativeObject --- common/xash3d_types.h | 1 + engine/client/cl_mobile.c | 11 +---------- engine/common/common.h | 1 + engine/common/filesystem_engine.c | 18 +++++++++++++++++- engine/common/system.c | 28 ++++++++++++++++++++++++++++ engine/common/system.h | 1 + engine/platform/platform.h | 12 ------------ filesystem/VFileSystem009.h | 2 -- filesystem/filesystem.c | 8 ++++---- filesystem/filesystem.h | 5 +++-- filesystem/filesystem_internal.h | 2 +- filesystem/tests/interface.cpp | 1 - 12 files changed, 57 insertions(+), 33 deletions(-) diff --git a/common/xash3d_types.h b/common/xash3d_types.h index 4c2c05d5..ad46778e 100644 --- a/common/xash3d_types.h +++ b/common/xash3d_types.h @@ -181,6 +181,7 @@ typedef struct dll_info_s } dll_info_t; typedef void (*setpair_t)( const char *key, const void *value, const void *buffer, void *numpairs ); +typedef void *(*pfnCreateInterface_t)( const char *, int * ); // config strings are a general means of communication from // the server to all connected clients. diff --git a/engine/client/cl_mobile.c b/engine/client/cl_mobile.c index 480f3c1c..69c61b5d 100644 --- a/engine/client/cl_mobile.c +++ b/engine/client/cl_mobile.c @@ -87,15 +87,6 @@ static int pfnDrawScaledCharacter( int x, int y, int number, int r, int g, int b return CL_DrawCharacter( x, y, number, color, &g_scaled_font, flags ); } -static void *pfnGetNativeObject( const char *obj ) -{ - if( !obj ) - return NULL; - - // Backend should consider that obj is case-sensitive - return Platform_GetNativeObject( obj ); -} - static void pfnTouch_HideButtons( const char *name, byte state ) { Touch_HideButtons( name, state, true ); @@ -124,7 +115,7 @@ static mobile_engfuncs_t gpMobileEngfuncs = Touch_ResetDefaultButtons, pfnDrawScaledCharacter, Sys_Warn, - pfnGetNativeObject, + Sys_GetNativeObject, ID_SetCustomClientID, pfnParseFileSafe }; diff --git a/engine/common/common.h b/engine/common/common.h index c382fbcd..3ae43936 100644 --- a/engine/common/common.h +++ b/engine/common/common.h @@ -381,6 +381,7 @@ typedef void (*xcommand_t)( void ); qboolean FS_LoadProgs( void ); void FS_Init( void ); void FS_Shutdown( void ); +void *FS_GetNativeObject( const char *obj ); // // cmd.c diff --git a/engine/common/filesystem_engine.c b/engine/common/filesystem_engine.c index 19925792..2b1e341e 100644 --- a/engine/common/filesystem_engine.c +++ b/engine/common/filesystem_engine.c @@ -23,8 +23,17 @@ GNU General Public License for more details. fs_api_t g_fsapi; fs_globals_t *FI; +static pfnCreateInterface_t fs_pfnCreateInterface; static HINSTANCE fs_hInstance; +void *FS_GetNativeObject( const char *obj ) +{ + if( fs_pfnCreateInterface ) + return fs_pfnCreateInterface( obj, NULL ); + + return NULL; +} + static void FS_Rescan_f( void ) { FS_Rescan(); @@ -53,7 +62,7 @@ static fs_interface_t fs_memfuncs = _Mem_Realloc, _Mem_Free, - Platform_GetNativeObject, + Sys_GetNativeObject, }; static void FS_UnloadProgs( void ) @@ -98,6 +107,13 @@ qboolean FS_LoadProgs( void ) return false; } + if( !( fs_pfnCreateInterface = (pfnCreateInterface_t)COM_GetProcAddress( fs_hInstance, "CreateInterface" ))) + { + FS_UnloadProgs(); + Host_Error( "FS_LoadProgs: can't find CreateInterface entry point in %s\n", name ); + return false; + } + Con_DPrintf( "FS_LoadProgs: filesystem_stdio successfully loaded\n" ); return true; diff --git a/engine/common/system.c b/engine/common/system.c index 08ed09fe..717861f2 100644 --- a/engine/common/system.c +++ b/engine/common/system.c @@ -649,3 +649,31 @@ qboolean Sys_NewInstance( const char *gamedir ) return false; } + + +/* +================== +Sys_GetNativeObject + +Get platform-specific native object +================== +*/ +void *Sys_GetNativeObject( const char *obj ) +{ + void *ptr; + + if( !COM_CheckString( obj )) + return NULL; + + ptr = FS_GetNativeObject( obj ); + + if( ptr ) + return ptr; + + // Backend should consider that obj is case-sensitive +#if XASH_ANDROID + ptr = Android_GetNativeObject( obj ); +#endif // XASH_ANDROID + + return ptr; +} diff --git a/engine/common/system.h b/engine/common/system.h index 8260c38e..a14a1a07 100644 --- a/engine/common/system.h +++ b/engine/common/system.h @@ -70,6 +70,7 @@ void Sys_InitLog( void ); void Sys_CloseLog( void ); void Sys_Quit( void ) NORETURN; qboolean Sys_NewInstance( const char *gamedir ); +void *Sys_GetNativeObject( const char *obj ); // // sys_con.c diff --git a/engine/platform/platform.h b/engine/platform/platform.h index fefe4802..db3661e4 100644 --- a/engine/platform/platform.h +++ b/engine/platform/platform.h @@ -139,17 +139,6 @@ static inline void Platform_Shutdown( void ) #endif } -static inline void *Platform_GetNativeObject( const char *name ) -{ - void *ptr = NULL; - -#if XASH_ANDROID - ptr = Android_GetNativeObject( name ); -#endif - - return ptr; -} - /* ============================================================================== @@ -158,7 +147,6 @@ static inline void *Platform_GetNativeObject( const char *name ) ============================================================================== */ void Platform_Vibrate( float life, char flags ); -void*Platform_GetNativeObject( const char *name ); /* ============================================================================== diff --git a/filesystem/VFileSystem009.h b/filesystem/VFileSystem009.h index 60437154..e48f4b7a 100644 --- a/filesystem/VFileSystem009.h +++ b/filesystem/VFileSystem009.h @@ -150,6 +150,4 @@ public: virtual void AddSearchPathNoWrite(const char *, const char *) = 0; /* linkage=_ZN11IFileSystem20AddSearchPathNoWriteEPKcS1_ */ }; -#define FILESYSTEM_INTERFACE_VERSION "VFileSystem009" // never change this! - #endif // VFILESYSTEM009_H diff --git a/filesystem/filesystem.c b/filesystem/filesystem.c index 4843927d..7b622350 100644 --- a/filesystem/filesystem.c +++ b/filesystem/filesystem.c @@ -1386,7 +1386,7 @@ static void _Sys_Error( const char *fmt, ... ) exit( 1 ); } -static void *_Platform_GetNativeObject_stub( const char *object ) +static void *Sys_GetNativeObject_stub( const char *object ) { return NULL; } @@ -2841,7 +2841,7 @@ fs_interface_t g_engfuncs = _Mem_Alloc, _Mem_Realloc, _Mem_Free, - _Platform_GetNativeObject_stub + Sys_GetNativeObject_stub }; static qboolean FS_InitInterface( int version, fs_interface_t *engfuncs ) @@ -2883,9 +2883,9 @@ static qboolean FS_InitInterface( int version, fs_interface_t *engfuncs ) Con_Reportf( "filesystem_stdio: custom memory allocation functions found\n" ); } - if( engfuncs->_Platform_GetNativeObject ) + if( engfuncs->_Sys_GetNativeObject ) { - g_engfuncs._Platform_GetNativeObject = engfuncs->_Platform_GetNativeObject; + g_engfuncs._Sys_GetNativeObject = engfuncs->_Sys_GetNativeObject; Con_Reportf( "filesystem_stdio: custom platform-specific functions found\n" ); } diff --git a/filesystem/filesystem.h b/filesystem/filesystem.h index d2316087..031a6e0f 100644 --- a/filesystem/filesystem.h +++ b/filesystem/filesystem.h @@ -32,7 +32,8 @@ extern "C" #endif // __cplusplus #define FS_API_VERSION 2 // not stable yet! -#define FS_API_CREATEINTERFACE_TAG "XashFileSystem002" // follow FS_API_VERSION!!! +#define FS_API_CREATEINTERFACE_TAG "XashFileSystem002" // follow FS_API_VERSION!!! +#define FILESYSTEM_INTERFACE_VERSION "VFileSystem009" // never change this! // search path flags enum @@ -210,7 +211,7 @@ typedef struct fs_interface_t void (*_Mem_Free)( void *data, const char *filename, int fileline ); // platform - void *(*_Platform_GetNativeObject)( const char *object ); + void *(*_Sys_GetNativeObject)( const char *object ); } fs_interface_t; typedef int (*FSAPI)( int version, fs_api_t *api, fs_globals_t **globals, fs_interface_t *interface ); diff --git a/filesystem/filesystem_internal.h b/filesystem/filesystem_internal.h index 29e78f2a..acaa9fa3 100644 --- a/filesystem/filesystem_internal.h +++ b/filesystem/filesystem_internal.h @@ -127,7 +127,7 @@ extern const fs_archive_t g_archives[]; #define Con_DPrintf (*g_engfuncs._Con_DPrintf) #define Con_Reportf (*g_engfuncs._Con_Reportf) #define Sys_Error (*g_engfuncs._Sys_Error) -#define Platform_GetNativeObject (*g_engfuncs._Platform_GetNativeObject) +#define Sys_GetNativeObject (*g_engfuncs._Sys_GetNativeObject) // // filesystem.c diff --git a/filesystem/tests/interface.cpp b/filesystem/tests/interface.cpp index 5bdbe001..833127e0 100644 --- a/filesystem/tests/interface.cpp +++ b/filesystem/tests/interface.cpp @@ -18,7 +18,6 @@ typedef void *HMODULE; HMODULE g_hModule; FSAPI g_pfnGetFSAPI; -typedef void *(*pfnCreateInterface_t)( const char *, int * ); pfnCreateInterface_t g_pfnCreateInterface; fs_api_t g_fs; fs_globals_t *g_nullglobals; From d6dfb83be73ee93b61ce66e2fa259515f3381aec Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 30 Oct 2023 06:25:28 +0300 Subject: [PATCH 66/79] ref: gl: ripply water implementation (bugfixed version from my Quake-2 patches) --- ref/gl/gl_local.h | 8 ++ ref/gl/gl_opengl.c | 7 ++ ref/gl/gl_warp.c | 218 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 229 insertions(+), 4 deletions(-) diff --git a/ref/gl/gl_local.h b/ref/gl/gl_local.h index 38ca3d55..a0df7c55 100644 --- a/ref/gl/gl_local.h +++ b/ref/gl/gl_local.h @@ -489,6 +489,11 @@ void R_ClearSkyBox( void ); void R_DrawSkyBox( void ); void R_DrawClouds( void ); void EmitWaterPolys( msurface_t *warp, qboolean reverse ); +void R_InitRipples( void ); +void R_ResetRipples( void ); +void R_AnimateRipples( void ); +void R_UpdateRippleTexParams( void ); +void R_UploadRipples( texture_t *image ); // // gl_vgui.c @@ -750,6 +755,9 @@ extern convar_t r_vbo; extern convar_t r_vbo_dlightmode; extern convar_t r_studio_sort_textures; extern convar_t r_studio_drawelements; +extern convar_t r_ripple; +extern convar_t r_ripple_updatetime; +extern convar_t r_ripple_spawntime; // // engine shared convars diff --git a/ref/gl/gl_opengl.c b/ref/gl/gl_opengl.c index ee25dfb4..6f31c8a8 100644 --- a/ref/gl/gl_opengl.c +++ b/ref/gl/gl_opengl.c @@ -30,6 +30,10 @@ CVAR_DEFINE_AUTO( r_traceglow, "0", FCVAR_GLCONFIG, "cull flares behind models" CVAR_DEFINE_AUTO( gl_round_down, "2", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "round texture sizes to nearest POT value" ); CVAR_DEFINE( r_vbo, "gl_vbo", "0", FCVAR_ARCHIVE, "draw world using VBO (known to be glitchy)" ); CVAR_DEFINE( r_vbo_dlightmode, "gl_vbo_dlightmode", "1", FCVAR_ARCHIVE, "vbo dlight rendering mode (0-1)" ); +CVAR_DEFINE_AUTO( r_ripple, "0", FCVAR_GLCONFIG, "enable software-like water texture ripple simulation" ); +CVAR_DEFINE_AUTO( r_ripple_updatetime, "0.05", FCVAR_GLCONFIG, "how fast ripple simulation is" ); +CVAR_DEFINE_AUTO( r_ripple_spawntime, "0.1", FCVAR_GLCONFIG, "how fast new ripples spawn" ); + DEFINE_ENGINE_SHARED_CVAR_LIST() @@ -1186,6 +1190,9 @@ void GL_InitCommands( void ) gEngfuncs.Cvar_RegisterVariable( &r_traceglow ); gEngfuncs.Cvar_RegisterVariable( &r_studio_sort_textures ); gEngfuncs.Cvar_RegisterVariable( &r_studio_drawelements ); + gEngfuncs.Cvar_RegisterVariable( &r_ripple ); + gEngfuncs.Cvar_RegisterVariable( &r_ripple_updatetime ); + gEngfuncs.Cvar_RegisterVariable( &r_ripple_spawntime ); gEngfuncs.Cvar_RegisterVariable( &gl_extensions ); gEngfuncs.Cvar_RegisterVariable( &gl_texture_nearest ); diff --git a/ref/gl/gl_warp.c b/ref/gl/gl_warp.c index 30dbe1b9..cf0d48a4 100644 --- a/ref/gl/gl_warp.c +++ b/ref/gl/gl_warp.c @@ -62,6 +62,29 @@ static float r_turbsin[] = #include "warpsin.h" }; +#define RIPPLES_CACHEWIDTH_BITS 7 +#define RIPPLES_CACHEWIDTH ( 1 << RIPPLES_CACHEWIDTH_BITS ) +#define RIPPLES_CACHEWIDTH_MASK (( RIPPLES_CACHEWIDTH ) - 1 ) +#define RIPPLES_TEXSIZE ( RIPPLES_CACHEWIDTH * RIPPLES_CACHEWIDTH ) +#define RIPPLES_TEXSIZE_MASK ( RIPPLES_TEXSIZE - 1 ) + +STATIC_ASSERT( RIPPLES_TEXSIZE == 0x4000, "fix the algorithm to work with custom resolution" ); + +static struct +{ + double time; + double oldtime; + + short *curbuf, *oldbuf; + short buf[2][RIPPLES_TEXSIZE]; + qboolean update; + + uint32_t texture[RIPPLES_TEXSIZE]; + int gl_texturenum; + int rippletexturenum; + int texturescale; // not all textures are 128x128, scale the texcoords down +} g_ripple; + static qboolean CheckSkybox( const char *name, char out[6][MAX_STRING] ) { const char *skybox_ext[3] = { "dds", "tga", "bmp" }; @@ -767,7 +790,9 @@ void EmitWaterPolys( msurface_t *warp, qboolean reverse ) if( !warp->polys ) return; // set the current waveheight - if( warp->polys->verts[0][2] >= RI.vieworg[2] ) + if( r_ripple.value ) + waveHeight = 0; + else if( warp->polys->verts[0][2] >= RI.vieworg[2] ) waveHeight = -RI.currententity->curstate.scale; else waveHeight = RI.currententity->curstate.scale; @@ -799,10 +824,18 @@ void EmitWaterPolys( msurface_t *warp, qboolean reverse ) os = v[3]; ot = v[4]; - s = os + r_turbsin[(int)((ot * 0.125f + gpGlobals->time) * TURBSCALE) & 255]; - s *= ( 1.0f / SUBDIVIDE_SIZE ); + if( !r_ripple.value ) + { + s = os + r_turbsin[(int)((ot * 0.125f + gpGlobals->time) * TURBSCALE) & 255]; + t = ot + r_turbsin[(int)((os * 0.125f + gpGlobals->time) * TURBSCALE) & 255]; + } + else + { + s = os / g_ripple.texturescale; + t = ot / g_ripple.texturescale; + } - t = ot + r_turbsin[(int)((os * 0.125f + gpGlobals->time) * TURBSCALE) & 255]; + s *= ( 1.0f / SUBDIVIDE_SIZE ); t *= ( 1.0f / SUBDIVIDE_SIZE ); pglTexCoord2f( s, t ); @@ -822,3 +855,180 @@ void EmitWaterPolys( msurface_t *warp, qboolean reverse ) GL_SetupFogColorForSurfaces(); } + +/* +============================================================ + + HALF-LIFE SOFTWARE WATER + +============================================================ +*/ +void R_ResetRipples( void ) +{ + g_ripple.curbuf = g_ripple.buf[0]; + g_ripple.oldbuf = g_ripple.buf[1]; + g_ripple.time = g_ripple.oldtime = gpGlobals->time - 0.1; + memset( g_ripple.buf, 0, sizeof( g_ripple.buf )); +} + +void R_InitRipples( void ) +{ + rgbdata_t pic = { 0 }; + + pic.width = pic.height = RIPPLES_CACHEWIDTH; + pic.depth = 1; + pic.flags = IMAGE_HAS_COLOR; + pic.buffer = (byte *)g_ripple.texture; + pic.type = PF_RGBA_32; + pic.size = sizeof( g_ripple.texture ); + pic.numMips = 1; + memset( pic.buffer, 0, pic.size ); + + g_ripple.rippletexturenum = GL_LoadTextureInternal( "*rippletex", &pic, TF_NOMIPMAP ); +} + +static void R_SwapBufs( void ) +{ + short *tempbufp = g_ripple.curbuf; + g_ripple.curbuf = g_ripple.oldbuf; + g_ripple.oldbuf = tempbufp; +} + +static void R_SpawnNewRipple( int x, int y, short val ) +{ +#define PIXEL( x, y ) ((( x ) & RIPPLES_CACHEWIDTH_MASK ) + ((( y ) & RIPPLES_CACHEWIDTH_MASK) << 7 )) + g_ripple.oldbuf[PIXEL( x, y )] += val; + + val >>= 2; + g_ripple.oldbuf[PIXEL( x + 1, y )] += val; + g_ripple.oldbuf[PIXEL( x - 1, y )] += val; + g_ripple.oldbuf[PIXEL( x, y + 1 )] += val; + g_ripple.oldbuf[PIXEL( x, y - 1 )] += val; +#undef PIXEL +} + +static void R_RunRipplesAnimation( const short *oldbuf, short *pbuf ) +{ + unsigned int i = 0; + + for( i = 0; i < RIPPLES_TEXSIZE; i++, pbuf++ ) + { + int p = RIPPLES_CACHEWIDTH + i; + int val; + + val = ((int)oldbuf[(p - ( RIPPLES_CACHEWIDTH * 2 )) & RIPPLES_TEXSIZE_MASK] + + (int)oldbuf[(p - ( RIPPLES_CACHEWIDTH + 1 )) & RIPPLES_TEXSIZE_MASK] + + (int)oldbuf[(p - ( RIPPLES_CACHEWIDTH - 1 )) & RIPPLES_TEXSIZE_MASK] + + (int)oldbuf[p & RIPPLES_TEXSIZE_MASK]) >> 1; + + val -= *pbuf; + + *pbuf = (short)val - (short)( val >> 6 ); + } +} + +static int MostSignificantBit( unsigned int v ) +{ +#if __GNUC__ + return 31 - __builtin_clz( v ); +#else + int i; + for( i = 0, v >>= 1; v; v >>= 1, i++ ); + return i; +#endif +} + +void R_AnimateRipples( void ) +{ + double frametime = gpGlobals->time - g_ripple.time; + + g_ripple.update = r_ripple.value && frametime >= r_ripple_updatetime.value; + + if( !g_ripple.update ) + return; + + g_ripple.time = gpGlobals->time; + + R_SwapBufs(); + + if( g_ripple.time - g_ripple.oldtime > r_ripple_spawntime.value ) + { + int x, y, val; + + g_ripple.oldtime = g_ripple.time; + + x = gEngfuncs.COM_RandomLong( 0, 0x7fff ); + y = gEngfuncs.COM_RandomLong( 0, 0x7fff ); + val = gEngfuncs.COM_RandomLong( 0, 0x3ff ); + + R_SpawnNewRipple( x, y, val ); + } + + R_RunRipplesAnimation( g_ripple.oldbuf, g_ripple.curbuf ); +} + +void R_UpdateRippleTexParams( void ) +{ + gl_texture_t *tex = R_GetTexture( g_ripple.rippletexturenum ); + + GL_Bind( XASH_TEXTURE0, g_ripple.rippletexturenum ); + + if( gl_texture_nearest.value ) + { + pglTexParameteri( tex->target, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); + pglTexParameteri( tex->target, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); + } + else + { + pglTexParameteri( tex->target, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + pglTexParameteri( tex->target, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + } +} + +void R_UploadRipples( texture_t *image ) +{ + gl_texture_t *glt; + uint32_t *pixels; + int v, wmask, hmask; + + // discard unuseful textures + if( !r_ripple.value || image->width > RIPPLES_CACHEWIDTH || image->width != image->height ) + { + GL_Bind( XASH_TEXTURE0, image->gl_texturenum ); + return; + } + + glt = R_GetTexture( image->gl_texturenum ); + if( !glt || !glt->original || !glt->original->buffer || !FBitSet( glt->flags, TF_EXPAND_SOURCE )) + { + GL_Bind( XASH_TEXTURE0, image->gl_texturenum ); + return; + } + + GL_Bind( XASH_TEXTURE0, g_ripple.rippletexturenum ); + + // no updates this frame + if( !g_ripple.update && image->gl_texturenum == g_ripple.gl_texturenum ) + return; + + g_ripple.gl_texturenum = image->gl_texturenum; + g_ripple.texturescale = RIPPLES_CACHEWIDTH / image->width; + + pixels = (uint32_t *)glt->original->buffer; + v = MostSignificantBit( image->width ); + wmask = image->width - 1; + hmask = image->height - 1; + + for( int i = 0; i < RIPPLES_TEXSIZE; i++ ) + { + int val = g_ripple.curbuf[i]; + int x = ( val >> 4 ) + i; + int y = ( i >> 7 ) - ( val >> 4 ); + int pixel = ( x & wmask ) + (( y & hmask ) << ( v & 0x1f )); // ??? + + g_ripple.texture[i] = pixels[pixel]; + } + + pglTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, RIPPLES_CACHEWIDTH, RIPPLES_CACHEWIDTH, 0, + GL_RGBA, GL_UNSIGNED_BYTE, g_ripple.texture ); +} From a6af32dafdde4e2618450b89ac0bb2d52a59ba4b Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 30 Oct 2023 06:26:18 +0300 Subject: [PATCH 67/79] ref: gl: connect ripply water to others parts of renderer (init, reset, animation and rendering) --- ref/gl/gl_image.c | 3 +++ ref/gl/gl_rmain.c | 2 ++ ref/gl/gl_rmisc.c | 1 + ref/gl/gl_rsurf.c | 9 +++++---- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ref/gl/gl_image.c b/ref/gl/gl_image.c index 355f6c49..9c2fcc61 100644 --- a/ref/gl/gl_image.c +++ b/ref/gl/gl_image.c @@ -342,6 +342,8 @@ void R_SetTextureParameters( void ) // change all the existing mipmapped texture objects for( i = 0; i < gl_numTextures; i++ ) GL_UpdateTextureParams( i ); + + R_UpdateRippleTexParams(); } /* @@ -2317,6 +2319,7 @@ void R_InitImages( void ) // validate cvars R_SetTextureParameters(); GL_CreateInternalTextures(); + R_InitRipples(); gEngfuncs.Cmd_AddCommand( "texturelist", R_TextureList_f, "display loaded textures list" ); } diff --git a/ref/gl/gl_rmain.c b/ref/gl/gl_rmain.c index da815a01..9a5a3702 100644 --- a/ref/gl/gl_rmain.c +++ b/ref/gl/gl_rmain.c @@ -969,6 +969,8 @@ void R_RenderScene( void ) R_MarkLeaves(); R_DrawFog (); + if( RI.drawWorld ) + R_AnimateRipples(); R_CheckGLFog(); R_DrawWorld(); diff --git a/ref/gl/gl_rmisc.c b/ref/gl/gl_rmisc.c index e0d82d36..9395b008 100644 --- a/ref/gl/gl_rmisc.c +++ b/ref/gl/gl_rmisc.c @@ -150,6 +150,7 @@ void R_NewMap( void ) GL_BuildLightmaps (); R_GenerateVBO(); + R_ResetRipples(); if( gEngfuncs.drawFuncs->R_NewMap != NULL ) gEngfuncs.drawFuncs->R_NewMap(); diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c index aeedb386..bd64a43c 100644 --- a/ref/gl/gl_rsurf.c +++ b/ref/gl/gl_rsurf.c @@ -204,7 +204,7 @@ void GL_SetupFogColorForSurfaces( void ) vec3_t fogColor; float factor, div; - if( !glState.isFogEnabled) + if( !glState.isFogEnabled ) return; if( RI.currententity && RI.currententity->curstate.rendermode == kRenderTransTexture ) @@ -1135,14 +1135,15 @@ void R_RenderBrushPoly( msurface_t *fa, int cull_type ) t = R_TextureAnimation( fa ); - GL_Bind( XASH_TEXTURE0, t->gl_texturenum ); - if( FBitSet( fa->flags, SURF_DRAWTURB )) { + R_UploadRipples( t ); + // warp texture, no lightmaps EmitWaterPolys( fa, (cull_type == CULL_BACKSIDE)); return; } + else GL_Bind( XASH_TEXTURE0, t->gl_texturenum ); if( t->fb_texturenum ) { @@ -1411,7 +1412,7 @@ void R_DrawWaterSurfaces( void ) continue; // set modulate mode explicitly - GL_Bind( XASH_TEXTURE0, t->gl_texturenum ); + R_UploadRipples( t ); for( ; s; s = s->texturechain ) EmitWaterPolys( s, false ); From a41902bd461b28e2e7a3d904fc43b5ec3cba7d76 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 30 Oct 2023 06:27:35 +0300 Subject: [PATCH 68/79] engine: mod_bmodel: detect water textures by texture name like LoadSurfaces does --- engine/common/mod_bmodel.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/engine/common/mod_bmodel.c b/engine/common/mod_bmodel.c index 283d0d2b..834f8420 100644 --- a/engine/common/mod_bmodel.c +++ b/engine/common/mod_bmodel.c @@ -2012,6 +2012,20 @@ static void Mod_LoadMarkSurfaces( model_t *mod, dbspmodel_t *bmod ) } } +static qboolean Mod_LooksLikeWaterTexture( const char *name ) +{ + if(( name[0] == '*' && Q_stricmp( name, REF_DEFAULT_TEXTURE )) || name[0] == '!' ) + return true; + + if( !Host_IsQuakeCompatible( )) + { + if( !Q_strncmp( name, "water", 5 ) || !Q_strnicmp( name, "laser", 5 )) + return true; + } + + return false; +} + static void Mod_LoadTextureData( model_t *mod, dbspmodel_t *bmod, int textureIndex ) { #if !XASH_DEDICATED @@ -2032,6 +2046,10 @@ static void Mod_LoadTextureData( model_t *mod, dbspmodel_t *bmod, int textureInd if( FBitSet( host.features, ENGINE_IMPROVED_LINETRACE ) && mipTex->name[0] == '{' ) SetBits( txFlags, TF_KEEP_SOURCE ); // Paranoia2 texture alpha-tracing + // check if this is water to keep the source texture and expand it to RGBA (so ripple effect works) + if( Mod_LooksLikeWaterTexture( mipTex->name )) + SetBits( txFlags, TF_KEEP_SOURCE | TF_EXPAND_SOURCE ); + usesCustomPalette = Mod_CalcMipTexUsesCustomPalette( mod, bmod, textureIndex ); // check for multi-layered sky texture (quake1 specific) @@ -2449,15 +2467,9 @@ static void Mod_LoadSurfaces( model_t *mod, dbspmodel_t *bmod ) if( !Q_strncmp( tex->name, "sky", 3 )) SetBits( out->flags, SURF_DRAWSKY ); - if(( tex->name[0] == '*' && Q_stricmp( tex->name, REF_DEFAULT_TEXTURE )) || tex->name[0] == '!' ) + if( Mod_LooksLikeWaterTexture( tex->name )) SetBits( out->flags, SURF_DRAWTURB ); - if( !Host_IsQuakeCompatible( )) - { - if( !Q_strncmp( tex->name, "water", 5 ) || !Q_strnicmp( tex->name, "laser", 5 )) - SetBits( out->flags, SURF_DRAWTURB ); - } - if( !Q_strncmp( tex->name, "scroll", 6 )) SetBits( out->flags, SURF_CONVEYOR ); From 882fcc152c5a093e9e82fc897bf577db4ef8e083 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 30 Oct 2023 06:56:25 +0300 Subject: [PATCH 69/79] ref: gl: always scale down texture to 64x64, like sw.dll does --- ref/gl/gl_warp.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ref/gl/gl_warp.c b/ref/gl/gl_warp.c index cf0d48a4..1c73ca25 100644 --- a/ref/gl/gl_warp.c +++ b/ref/gl/gl_warp.c @@ -1012,7 +1012,9 @@ void R_UploadRipples( texture_t *image ) return; g_ripple.gl_texturenum = image->gl_texturenum; - g_ripple.texturescale = RIPPLES_CACHEWIDTH / image->width; + + // TODO: original sw.dll always draws at 64x64 + g_ripple.texturescale = Q_max( 2, RIPPLES_CACHEWIDTH / image->width ); pixels = (uint32_t *)glt->original->buffer; v = MostSignificantBit( image->width ); From 46889ed453f3a0284bf0e49d3f1afc860b0abcb9 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 30 Oct 2023 07:47:13 +0300 Subject: [PATCH 70/79] ref: gl: libc rand() does better job at randomizing --- ref/gl/gl_warp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ref/gl/gl_warp.c b/ref/gl/gl_warp.c index 1c73ca25..eba6d61d 100644 --- a/ref/gl/gl_warp.c +++ b/ref/gl/gl_warp.c @@ -957,9 +957,9 @@ void R_AnimateRipples( void ) g_ripple.oldtime = g_ripple.time; - x = gEngfuncs.COM_RandomLong( 0, 0x7fff ); - y = gEngfuncs.COM_RandomLong( 0, 0x7fff ); - val = gEngfuncs.COM_RandomLong( 0, 0x3ff ); + x = rand() & 0x7fff; + y = rand() & 0x7fff; + val = rand() & 0x3ff; R_SpawnNewRipple( x, y, val ); } From e21fa4a9103f347bbc05e21b9ed63f02ee3cd0a2 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 31 Oct 2023 00:57:56 +0300 Subject: [PATCH 71/79] engine: add cvar r_refdll_loaded to indicate currently loaded renderer (for menu options and etc) --- engine/client/ref_common.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/engine/client/ref_common.c b/engine/client/ref_common.c index d13d4d15..ee6de193 100644 --- a/engine/client/ref_common.c +++ b/engine/client/ref_common.c @@ -16,6 +16,7 @@ CVAR_DEFINE_AUTO( gl_msaa_samples, "0", FCVAR_GLCONFIG, "samples number for mult CVAR_DEFINE_AUTO( gl_clear, "0", FCVAR_ARCHIVE, "clearing screen after each frame" ); CVAR_DEFINE_AUTO( r_showtree, "0", FCVAR_ARCHIVE, "build the graph of visible BSP tree" ); static CVAR_DEFINE_AUTO( r_refdll, "", FCVAR_RENDERINFO, "choose renderer implementation, if supported" ); +static CVAR_DEFINE_AUTO( r_refdll_loaded, "", FCVAR_READ_ONLY, "currently loaded renderer" ); void R_GetTextureParms( int *w, int *h, int texnum ) { @@ -519,6 +520,7 @@ static qboolean R_LoadRenderer( const char *refopt ) return false; } + Cvar_FullSet( "r_refdll_loaded", refopt, FCVAR_READ_ONLY ); Con_Reportf( "Renderer %s initialized\n", refdll ); return true; @@ -610,6 +612,7 @@ qboolean R_Init( void ) Cvar_RegisterVariable( &gl_clear ); Cvar_RegisterVariable( &r_showtree ); Cvar_RegisterVariable( &r_refdll ); + Cvar_RegisterVariable( &r_refdll_loaded ); // cvars that are expected to exist Cvar_Get( "r_speeds", "0", FCVAR_ARCHIVE, "shows renderer speeds" ); From 03f838e37eb4bbd74ca9220bcc89d0837051d58a Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 31 Oct 2023 01:18:49 +0300 Subject: [PATCH 72/79] mainui: update --- 3rdparty/mainui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/mainui b/3rdparty/mainui index adb3e413..e456555c 160000 --- a/3rdparty/mainui +++ b/3rdparty/mainui @@ -1 +1 @@ -Subproject commit adb3e413ec99b9b19e43956a59b2d618d9a34bf7 +Subproject commit e456555cf159d2e858694b53fa92717c84e8870e From a6c67fdf9f026d19f010eb1a3e0a57938b95a99d Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 31 Oct 2023 04:24:46 +0300 Subject: [PATCH 73/79] ref: gl: upload only part of texture we're using, i.e. 64x64 for 64x64, 128x128 for 128x128 --- ref/gl/gl_warp.c | 53 +++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/ref/gl/gl_warp.c b/ref/gl/gl_warp.c index eba6d61d..46a0ce79 100644 --- a/ref/gl/gl_warp.c +++ b/ref/gl/gl_warp.c @@ -909,21 +909,19 @@ static void R_SpawnNewRipple( int x, int y, short val ) static void R_RunRipplesAnimation( const short *oldbuf, short *pbuf ) { - unsigned int i = 0; + size_t i = 0; + const int w = RIPPLES_CACHEWIDTH; + const int m = RIPPLES_TEXSIZE_MASK; - for( i = 0; i < RIPPLES_TEXSIZE; i++, pbuf++ ) + for( i = w; i < m + w; i++, pbuf++ ) { - int p = RIPPLES_CACHEWIDTH + i; - int val; + *pbuf = ( + ( (int)oldbuf[( i - ( w * 2 )) & m] + + (int)oldbuf[( i - ( w + 1 )) & m] + + (int)oldbuf[( i - ( w - 1 )) & m] + + (int)oldbuf[( i ) & m]) >> 1 ) - (int)*pbuf; - val = ((int)oldbuf[(p - ( RIPPLES_CACHEWIDTH * 2 )) & RIPPLES_TEXSIZE_MASK] - + (int)oldbuf[(p - ( RIPPLES_CACHEWIDTH + 1 )) & RIPPLES_TEXSIZE_MASK] - + (int)oldbuf[(p - ( RIPPLES_CACHEWIDTH - 1 )) & RIPPLES_TEXSIZE_MASK] - + (int)oldbuf[p & RIPPLES_TEXSIZE_MASK]) >> 1; - - val -= *pbuf; - - *pbuf = (short)val - (short)( val >> 6 ); + *pbuf -= ( *pbuf >> 6 ); } } @@ -989,7 +987,7 @@ void R_UploadRipples( texture_t *image ) { gl_texture_t *glt; uint32_t *pixels; - int v, wmask, hmask; + int wbits, wmask, wshft; // discard unuseful textures if( !r_ripple.value || image->width > RIPPLES_CACHEWIDTH || image->width != image->height ) @@ -1012,25 +1010,30 @@ void R_UploadRipples( texture_t *image ) return; g_ripple.gl_texturenum = image->gl_texturenum; - - // TODO: original sw.dll always draws at 64x64 - g_ripple.texturescale = Q_max( 2, RIPPLES_CACHEWIDTH / image->width ); + g_ripple.texturescale = Q_max( 1, image->width / 64 ); pixels = (uint32_t *)glt->original->buffer; - v = MostSignificantBit( image->width ); + wbits = MostSignificantBit( image->width ); + wshft = 7 - wbits; wmask = image->width - 1; - hmask = image->height - 1; - for( int i = 0; i < RIPPLES_TEXSIZE; i++ ) + for( int y = 0; y < image->height; y++ ) { - int val = g_ripple.curbuf[i]; - int x = ( val >> 4 ) + i; - int y = ( i >> 7 ) - ( val >> 4 ); - int pixel = ( x & wmask ) + (( y & hmask ) << ( v & 0x1f )); // ??? + int ry = y << ( 7 + wshft ); - g_ripple.texture[i] = pixels[pixel]; + for( int x = 0; x < image->width; x++ ) + { + int rx = x << wshft; + int val = g_ripple.curbuf[ry + rx] >> 4; + + int py = (y - val) & wmask; + int px = (x + val) & wmask; + int p = ( py << wbits ) + px; + + g_ripple.texture[(y << wbits) + x] = pixels[p]; + } } - pglTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, RIPPLES_CACHEWIDTH, RIPPLES_CACHEWIDTH, 0, + pglTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, image->width, image->width, 0, GL_RGBA, GL_UNSIGNED_BYTE, g_ripple.texture ); } From 6c0eed1b2bd55f81605e36beaab1a813ec630dbb Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 31 Oct 2023 04:27:34 +0300 Subject: [PATCH 74/79] ref: gl: allow viewing water textures in their full glory with enabled r_ripple 2 --- ref/gl/gl_warp.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ref/gl/gl_warp.c b/ref/gl/gl_warp.c index 46a0ce79..21b02150 100644 --- a/ref/gl/gl_warp.c +++ b/ref/gl/gl_warp.c @@ -82,7 +82,7 @@ static struct uint32_t texture[RIPPLES_TEXSIZE]; int gl_texturenum; int rippletexturenum; - int texturescale; // not all textures are 128x128, scale the texcoords down + float texturescale; // not all textures are 128x128, scale the texcoords down } g_ripple; static qboolean CheckSkybox( const char *name, char out[6][MAX_STRING] ) @@ -1010,7 +1010,15 @@ void R_UploadRipples( texture_t *image ) return; g_ripple.gl_texturenum = image->gl_texturenum; - g_ripple.texturescale = Q_max( 1, image->width / 64 ); + if( r_ripple.value == 1.0f ) + { + g_ripple.texturescale = Q_max( 1.0f, image->width / 64.0f ); + } + else + { + g_ripple.texturescale = 1.0f; + } + pixels = (uint32_t *)glt->original->buffer; wbits = MostSignificantBit( image->width ); From e481e1d73edf80d70b6116cb9c4f43d04204249f Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 31 Oct 2023 21:51:47 +0300 Subject: [PATCH 75/79] ref: gl: enable GL waves with r_ripple --- ref/gl/gl_warp.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ref/gl/gl_warp.c b/ref/gl/gl_warp.c index 21b02150..7ba1afd7 100644 --- a/ref/gl/gl_warp.c +++ b/ref/gl/gl_warp.c @@ -790,9 +790,7 @@ void EmitWaterPolys( msurface_t *warp, qboolean reverse ) if( !warp->polys ) return; // set the current waveheight - if( r_ripple.value ) - waveHeight = 0; - else if( warp->polys->verts[0][2] >= RI.vieworg[2] ) + if( warp->polys->verts[0][2] >= RI.vieworg[2] ) waveHeight = -RI.currententity->curstate.scale; else waveHeight = RI.currententity->curstate.scale; From a69fc8794044c5deae90719b6321098c70734521 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 28 Oct 2023 09:57:48 +0300 Subject: [PATCH 76/79] Documentation: donate: add sponsorship information --- Documentation/donate.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Documentation/donate.md diff --git a/Documentation/donate.md b/Documentation/donate.md new file mode 100644 index 00000000..7cc11784 --- /dev/null +++ b/Documentation/donate.md @@ -0,0 +1,24 @@ +# Developers donation page + +On this page you can find links where you can support each developer individually, who has provided public sponsorship information. + +### [a1batross](https://github.com/a1batross) + +* Initial Xash3D SDL2/Linux port author, Xash3D FWGS engine maintainer, creator of non-commercial Flying With Gauss organization. +* Boosty page: https://boosty.to/a1ba + +### [nekonomicon](https://github.com/nekonomicon) + +* [hlsdk-portable](https://github.com/FWGS/hlsdk-portable), [mdldec](../utils/mdldec), [opensource-mods.md](opensource-mods.md) maintainer and Xash3D FWGS [contributor](https://github.com/FWGS/xash3d-fwgs/commits?author=nekonomicon) (*BSD/clang port, PNG support, etc). +* Boosty page: https://boosty.to/nekonomicon + +### [Velaron](https://github.com/Velaron) +* [cs16-client](https://github.com/Velaron/cs16-client) & [tf15-client](https://github.com/Velaron/tf15-client) maintainer and Xash3D FWGS [contributor](https://github.com/FWGS/xash3d-fwgs/commits?author=Velaron) (Android port, voice chat, etc). +* BuyMeACoffee page: https://www.buymeacoffee.com/velaron + +### [SNMetamorph](https://github.com/SNMetamorph) +* [PrimeXT](https://github.com/SNMetamorph/PrimeXT) & [GoldSrc Monitor](https://github.com/SNMetamorph/goldsrc-monitor) maintainer and Xash3D FWGS [contributor](https://github.com/FWGS/xash3d-fwgs/commits?author=SNMetamorph) (Windows port, voice chat, etc). +* BTC: `16GAzK3qei5AwBW7sggXp3yNcFHBtdpxXj` +* ETH (ERC20): `0xb580eeca9756e3881f9d6d026e28db28eb72a383` +* USDT (ERC20): `0xb580eeca9756e3881f9d6d026e28db28eb72a383` +* USDC (ERC20): `0xb580eeca9756e3881f9d6d026e28db28eb72a383` From fb87d7c0b3fcab2365ea82ebb949c7285164b0d6 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 28 Oct 2023 09:58:09 +0300 Subject: [PATCH 77/79] readme: wording, add icon, add donate.md link [skip ci] --- README.md | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index fe9464d2..4b44723e 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,27 @@ -# Xash3D FWGS Engine +# Xash3D FWGS Engine Xash3D FWGS icon [![GitHub Actions Status](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml) [![FreeBSD Build Status](https://img.shields.io/cirrus/github/FWGS/xash3d-fwgs?label=freebsd%20build)](https://cirrus-ci.com/github/FWGS/xash3d-fwgs) [![Discord Server](https://img.shields.io/discord/355697768582610945.svg)](http://fwgsdiscord.mentality.rip/) \ -[![Download Stable](https://img.shields.io/badge/download-stable-yellow)](https://github.com/FWGS/xash3d-fwgs/releases/latest) [![Download Testing](https://img.shields.io/badge/downloads-testing-orange)](https://github.com/FWGS/xash3d-fwgs/releases/tag/continuous) +[![Download Stable](https://img.shields.io/badge/download-stable-yellow)](https://github.com/FWGS/xash3d-fwgs/releases/latest) [![Download Testing](https://img.shields.io/badge/downloads-testing-orange)](https://github.com/FWGS/xash3d-fwgs/releases/tag/continuous) -Xash3D FWGS is a fork of Xash3D Engine by Unkle Mike with extended features and crossplatform. +Xash3D FWGS is a game engine, aimed to provide compatibility with Half-Life Engine and extend it, as well as to give game developers well known workflow. -``` -Xash3D is a game engine, aimed to provide compatibility with Half-Life Engine, -as well as to give game developers well known workflow and extend it. -Read more about Xash3D on ModDB: https://www.moddb.com/engines/xash3d-engine -``` +Xash3D FWGS is a heavily modified fork of an original [Xash3D Engine](https://www.moddb.com/engines/xash3d-engine) by Unkle Mike. + +## Donate +[![Donate to FWGS button](https://img.shields.io/badge/Donate_to_FWGS-%3C3-magenta)](Documentation/donate.md) \ +If you like Xash3D FWGS, consider supporting individual engine maintainers. By supporting us, you help to continue developing this game engine further. The sponsorship links are available in [documentation](Documentation/donate.md). ## Fork features -* HLSDK 2.4 support. -* Crossplatform: supported x86 and ARM on Windows/Linux/BSD/Android. ([see docs for more info](Documentation/ports.md)) -* Modern compilers support: say no more to MSVC6. -* Better multiplayer support: multiple master servers, headless dedicated server. -* Mobility API: allows better game integration on mobile devices(vibration, touch controls) -* Different input methods: touch, gamepad and classic mouse & keyboard. +* Steam Half-Life (HLSDK 2.4) support. +* Crossplatform and modern compilers support: supports Windows, Linux, BSD & Android on x86 & ARM and [many more](Documentation/ports.md). +* Better multiplayer support: multiple master servers, headless dedicated server, voice chat and IPv6 support. +* Multiple renderers support: OpenGL, GLESv1, GLESv2 and Software. +* Advanced virtual filesystem: `.pk3` and `.pk3dir` support, compatibility with GoldSrc FS module, fast case-insensitivity emulation for crossplatform. +* Mobility API: better game integration on mobile devices (vibration, touch controls) +* Different input methods: touch and gamepad in addition to mouse & keyboard. * TrueType font rendering, as a part of mainui_cpp. -* Multiple renderers support: OpenGL, GLESv1, GLESv2, Software. -* Voice support. -* External filesystem module like in GoldSrc engine. -* External vgui support module. -* PNG image format support. -* A set of small improvements, without broken compatibility. - -## Planned fork features -* Virtual Reality support and game API. -* Vulkan renderer. +* External VGUI support module. +* PNG & KTX2 image format support. +* [A set of small improvements](Documentation/), without broken compatibility. ## Installation & Running 0) Get Xash3D FWGS binaries: you can use [testing](https://github.com/FWGS/xash3d-fwgs/releases/tag/continuous) build or you can compile engine from source code. From bd969f3594735db7565d126d6c3cbe03a9fa6aa3 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Wed, 1 Nov 2023 01:35:39 +0300 Subject: [PATCH 78/79] wscript: fix system opus detection, it didn't compile due to nonnull argument --- wscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wscript b/wscript index 38b0d3da..3a9ad4c1 100644 --- a/wscript +++ b/wscript @@ -471,7 +471,7 @@ int main(int argc, char **argv) { strchrnul(argv[1], 'x'); return 0; }''' if conf.check_cfg(package='opus', uselib_store='opus', args='opus >= 1.4 --cflags --libs', mandatory=False): # now try to link with export that only exists with CUSTOM_MODES defined frag='''#include -int main(void) { return !opus_custom_encoder_init(0, 0, 0); }''' +int main(void) { return !opus_custom_encoder_init((OpusCustomEncoder *)1, (const OpusCustomMode *)1, 1); }''' if conf.check_cc(msg='Checking if opus supports custom modes', defines='CUSTOM_MODES=1', use='opus', fragment=frag, mandatory=False): conf.env.HAVE_SYSTEM_OPUS = True From a464c3dd667f3e381e3a0c453beeecc0fe1785d7 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 2 Nov 2023 14:32:39 +0300 Subject: [PATCH 79/79] scripts: waifulib: compiler_optimizations: rename release build type to humanrights with kept compatibility --- scripts/waifulib/compiler_optimizations.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/scripts/waifulib/compiler_optimizations.py b/scripts/waifulib/compiler_optimizations.py index 64f1e623..f65e7aeb 100644 --- a/scripts/waifulib/compiler_optimizations.py +++ b/scripts/waifulib/compiler_optimizations.py @@ -30,7 +30,7 @@ compiler_optimizations.CFLAGS['gottagofast'] = { } ''' -VALID_BUILD_TYPES = ['fastnative', 'fast', 'release', 'debug', 'sanitize', 'msan', 'none'] +VALID_BUILD_TYPES = ['fastnative', 'fast', 'humanrights', 'debug', 'sanitize', 'msan', 'none'] LINKFLAGS = { 'common': { @@ -75,7 +75,7 @@ CFLAGS = { 'clang': ['-Ofast', '-march=native'], 'default': ['-O3'] }, - 'release': { + 'humanrights': { 'msvc': ['/O2', '/Zi'], 'owcc': ['-O3', '-foptimize-sibling-calls', '-fomit-leaf-frame-pointer', '-fomit-frame-pointer', '-fschedule-insns', '-funsafe-math-optimizations', '-funroll-loops', '-frerun-optimizer', '-finline-functions', '-finline-limit=512', '-fguess-branch-probability', '-fno-strict-aliasing', '-floop-optimize'], 'gcc': ['-O3', '-fno-semantic-interposition'], @@ -119,7 +119,7 @@ POLLY_CFLAGS = { def options(opt): grp = opt.add_option_group('Compiler optimization options') - grp.add_option('-T', '--build-type', action='store', dest='BUILD_TYPE', default='release', + grp.add_option('-T', '--build-type', action='store', dest='BUILD_TYPE', default='humanrights', help = 'build type: debug, release or none(custom flags)') grp.add_option('--enable-lto', action = 'store_true', dest = 'LTO', default = False, @@ -131,6 +131,11 @@ def options(opt): def configure(conf): conf.start_msg('Build type') + # legacy naming for default release build + # https://chaos.social/@karolherbst/111340511652012860 + if conf.options.BUILD_TYPE == 'release': + conf.options.BUILD_TYPE = 'humanrights' + if not conf.options.BUILD_TYPE in VALID_BUILD_TYPES: conf.end_msg(conf.options.BUILD_TYPE, color='RED') conf.fatal('Invalid build type. Valid are: %s' % ', '.join(VALID_BUILD_TYPES))